stage4/generate_cc/search_type_code.c
author etisserant
Mon, 18 Jun 2007 14:45:03 +0200
changeset 33 4507beb2aac6
child 34 a793b010e371
permissions -rw-r--r--
preliminary std lib support for ST
33
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
     1
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
     2
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
     3
 * IEC 61131-3 standard function lib
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
     4
 * generated code, do not edit by hand
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
     5
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
     6
switch(current_function_type){
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
     7
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
     8
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
     9
 *REAL_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    10
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    11
	case function_real_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    12
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    13
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    14
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    15
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    16
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    17
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    18
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    19
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    20
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    21
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    22
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    23
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    24
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    25
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    26
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    27
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    28
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    29
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    30
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    31
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    32
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    33
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    34
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    35
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    36
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    37
	}/*function_real_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    38
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    39
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    40
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    41
 *REAL_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    42
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    43
	case function_real_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    44
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    45
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    46
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    47
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    48
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    49
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    50
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    51
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    52
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    53
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    54
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    55
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    56
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    57
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    58
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    59
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    60
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    61
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    62
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    63
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    64
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    65
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    66
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    67
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    68
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    69
	}/*function_real_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    70
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    71
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    72
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    73
 *REAL_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    74
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    75
	case function_real_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    76
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    77
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    78
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    79
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    80
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    81
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    82
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    83
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    84
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    85
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    86
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    87
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    88
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    89
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    90
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    91
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    92
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    93
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    94
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    95
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    96
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    97
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    98
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
    99
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   100
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   101
	}/*function_real_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   102
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   103
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   104
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   105
 *REAL_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   106
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   107
	case function_real_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   108
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   109
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   110
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   111
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   112
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   113
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   114
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   115
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   116
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   117
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   118
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   119
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   121
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   122
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   123
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   124
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   125
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   126
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   127
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   128
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   129
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   130
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   131
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   132
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   133
	}/*function_real_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   134
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   135
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   136
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   137
 *REAL_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   138
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   139
	case function_real_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   140
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   141
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   142
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   143
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   144
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   145
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   146
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   147
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   148
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   149
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   150
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   151
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   152
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   153
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   154
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   155
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   156
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   157
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   158
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   159
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   160
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   161
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   162
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   163
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   164
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   165
	}/*function_real_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   166
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   167
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   168
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   169
 *REAL_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   170
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   171
	case function_real_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   172
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   173
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   174
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   175
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   176
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   177
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   178
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   179
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   180
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   181
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   182
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   183
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   184
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   185
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   186
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   187
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   188
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   189
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   190
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   191
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   192
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   193
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   194
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   195
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   196
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   197
	}/*function_real_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   198
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   199
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   200
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   201
 *REAL_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   202
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   203
	case function_real_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   204
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   205
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   206
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   207
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   208
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   209
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   210
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   211
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   212
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   213
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   214
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   215
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   216
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   217
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   218
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   219
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   220
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   221
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   222
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   223
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   224
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   225
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   226
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   227
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   228
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   229
	}/*function_real_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   230
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   231
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   232
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   233
 *REAL_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   234
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   235
	case function_real_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   236
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   237
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   238
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   239
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   240
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   241
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   242
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   243
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   244
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   245
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   246
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   247
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   248
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   249
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   250
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   251
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   252
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   253
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   254
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   255
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   256
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   257
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   258
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   259
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   260
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   261
	}/*function_real_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   262
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   263
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   264
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   265
 *REAL_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   266
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   267
	case function_real_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   268
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   269
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   270
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   271
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   272
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   273
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   274
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   275
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   276
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   277
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   278
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   279
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   280
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   281
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   282
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   283
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   284
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   285
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   286
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   287
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   288
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   289
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   290
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   291
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   292
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   293
	}/*function_real_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   294
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   295
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   296
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   297
 *REAL_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   298
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   299
	case function_real_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   300
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   301
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   302
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   303
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   304
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   305
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   306
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   307
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   308
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   309
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   310
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   311
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   312
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   313
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   314
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   315
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   316
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   317
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   318
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   319
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   320
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   321
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   322
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   323
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   324
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   325
	}/*function_real_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   326
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   327
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   328
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   329
 *REAL_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   330
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   331
	case function_real_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   332
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   333
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   334
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   335
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   336
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   337
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   338
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   339
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   340
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   341
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   342
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   343
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   344
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   345
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   346
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   347
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   348
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   349
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   350
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   351
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   352
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   353
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   354
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   355
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   356
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   357
	}/*function_real_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   358
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   359
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   360
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   361
 *REAL_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   362
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   363
	case function_real_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   364
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   365
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   366
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   367
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   368
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   369
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   370
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   371
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   372
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   373
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   374
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   375
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   376
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   377
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   378
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   379
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   380
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   381
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   382
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   383
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   384
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   385
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   386
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   387
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   388
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   389
	}/*function_real_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   390
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   391
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   392
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   393
 *REAL_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   394
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   395
	case function_real_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   396
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   397
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   398
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   399
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   400
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   401
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   402
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   403
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   404
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   405
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   406
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   407
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   409
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   410
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   411
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   412
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   413
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   414
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   415
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   416
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   417
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   418
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   419
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   420
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   421
	}/*function_real_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   422
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   423
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   424
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   425
 *REAL_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   426
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   427
	case function_real_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   428
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   429
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   430
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   431
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   432
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   433
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   434
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   435
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   436
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   437
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   438
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   439
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   440
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   441
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   442
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   443
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   444
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   445
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   446
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   447
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   448
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   449
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   450
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   451
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   452
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   453
	}/*function_real_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   454
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   455
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   456
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   457
 *REAL_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   458
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   459
	case function_real_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   460
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   461
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   462
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   463
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   464
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   465
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   466
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   467
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   468
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   469
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   470
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   471
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   472
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   473
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   474
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   475
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   476
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   477
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   478
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   479
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   480
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   481
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   482
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   483
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   484
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   485
	}/*function_real_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   486
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   487
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   488
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   489
 *REAL_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   490
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   491
	case function_real_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   492
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   493
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   494
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   495
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   496
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   497
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   498
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   499
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   500
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   501
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   502
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   503
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   504
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   505
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   506
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   507
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   508
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   509
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   510
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   511
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   512
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   513
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   514
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   515
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   516
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   517
	}/*function_real_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   518
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   519
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   520
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   521
 *REAL_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   522
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   523
	case function_real_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   524
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   525
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   526
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   527
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   528
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   529
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   530
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   531
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   532
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   533
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   534
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   535
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   536
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   537
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   538
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   539
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   540
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   541
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   542
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   543
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   544
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   545
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   546
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   547
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   548
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   549
	}/*function_real_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   550
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   551
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   552
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   553
 *REAL_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   554
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   555
	case function_real_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   556
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   557
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   558
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   559
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   560
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   561
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   562
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   563
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   564
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   565
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   566
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   567
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   568
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   569
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   570
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   571
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   572
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   573
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   574
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   575
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   576
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   577
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   578
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   579
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   580
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   581
	}/*function_real_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   582
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   583
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   584
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   585
 *REAL_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   586
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   587
	case function_real_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   588
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   589
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   590
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   591
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   592
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   593
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   594
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   595
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   596
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   597
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   598
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   599
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   600
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   601
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   602
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   603
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   604
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   605
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   606
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   607
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   608
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   609
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   610
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   611
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   612
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   613
	}/*function_real_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   614
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   615
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   616
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   617
 *REAL_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   618
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   619
	case function_real_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   620
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   621
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   622
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   623
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   624
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   625
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   626
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   627
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   628
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   629
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   630
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   631
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   632
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   633
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   634
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   635
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   636
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   637
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   638
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   639
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   640
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   641
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   642
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   643
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   644
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   645
	}/*function_real_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   646
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   647
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   648
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   649
 *REAL_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   650
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   651
	case function_real_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   652
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   653
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   654
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   655
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   656
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   657
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   658
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   659
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   660
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   661
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   662
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   663
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   664
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   665
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   666
			if (typeid(*last_type_symbol) == typeid(real_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   667
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   668
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   669
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   670
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   671
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   672
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   673
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   674
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   675
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   676
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   677
	}/*function_real_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   678
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   679
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   680
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   681
 *SINT_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   682
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   683
	case function_sint_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   684
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   685
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   686
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   687
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   688
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   689
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   690
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   691
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   692
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   693
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   694
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   695
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   696
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   697
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   698
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   699
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   700
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   701
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   702
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   703
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   704
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   705
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   706
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   707
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   708
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   709
	}/*function_sint_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   710
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   711
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   712
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   713
 *SINT_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   714
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   715
	case function_sint_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   716
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   717
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   718
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   719
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   720
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   721
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   722
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   723
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   724
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   725
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   726
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   727
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   728
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   729
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   730
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   731
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   732
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   733
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   734
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   735
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   736
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   737
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   738
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   739
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   740
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   741
	}/*function_sint_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   742
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   743
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   744
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   745
 *SINT_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   746
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   747
	case function_sint_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   748
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   749
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   750
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   751
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   752
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   753
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   754
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   755
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   756
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   757
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   758
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   759
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   760
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   761
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   762
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   763
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   764
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   765
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   766
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   767
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   768
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   769
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   770
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   771
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   772
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   773
	}/*function_sint_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   774
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   775
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   776
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   777
 *SINT_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   778
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   779
	case function_sint_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   780
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   781
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   782
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   783
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   784
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   785
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   786
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   787
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   788
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   789
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   790
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   791
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   792
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   793
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   794
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   795
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   796
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   797
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   798
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   799
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   800
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   801
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   802
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   803
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   804
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   805
	}/*function_sint_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   806
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   807
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   808
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   809
 *SINT_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   810
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   811
	case function_sint_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   812
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   813
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   814
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   815
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   816
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   817
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   818
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   819
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   820
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   821
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   822
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   823
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   824
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   825
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   826
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   827
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   828
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   829
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   830
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   831
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   832
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   833
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   834
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   835
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   836
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   837
	}/*function_sint_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   838
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   839
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   840
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   841
 *SINT_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   842
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   843
	case function_sint_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   844
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   845
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   846
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   847
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   848
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   849
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   850
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   851
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   852
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   853
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   854
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   855
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   856
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   857
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   858
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   859
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   860
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   861
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   862
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   863
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   864
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   865
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   866
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   867
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   868
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   869
	}/*function_sint_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   870
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   871
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   872
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   873
 *SINT_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   874
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   875
	case function_sint_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   876
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   877
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   878
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   879
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   880
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   881
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   882
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   883
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   884
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   885
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   886
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   887
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   888
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   889
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   890
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   891
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   892
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   893
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   894
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   895
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   896
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   897
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   898
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   899
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   900
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   901
	}/*function_sint_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   902
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   903
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   904
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   905
 *SINT_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   906
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   907
	case function_sint_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   908
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   909
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   910
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   911
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   912
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   913
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   914
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   915
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   916
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   917
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   918
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   919
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   920
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   921
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   922
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   923
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   924
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   925
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   926
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   927
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   928
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   929
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   930
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   931
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   932
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   933
	}/*function_sint_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   934
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   935
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   936
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   937
 *SINT_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   938
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   939
	case function_sint_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   940
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   941
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   942
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   943
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   944
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   945
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   946
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   947
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   948
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   949
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   950
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   951
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   952
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   953
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   954
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   955
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   956
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   957
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   958
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   959
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   960
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   961
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   962
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   963
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   964
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   965
	}/*function_sint_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   966
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   967
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   968
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   969
 *SINT_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   970
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   971
	case function_sint_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   972
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   973
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   974
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   975
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   976
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   977
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   978
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   979
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   980
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   981
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   982
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   983
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   984
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   985
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   986
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   987
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   988
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   989
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   990
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   991
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   992
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   993
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   994
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   995
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   996
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   997
	}/*function_sint_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   998
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
   999
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1000
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1001
 *SINT_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1002
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1003
	case function_sint_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1004
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1005
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1006
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1007
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1008
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1009
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1010
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1011
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1012
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1013
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1014
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1015
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1016
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1017
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1018
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1019
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1020
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1021
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1022
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1023
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1024
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1025
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1026
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1027
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1028
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1029
	}/*function_sint_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1030
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1031
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1032
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1033
 *SINT_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1034
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1035
	case function_sint_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1036
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1037
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1038
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1039
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1040
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1041
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1042
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1043
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1044
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1045
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1046
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1047
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1048
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1049
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1050
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1051
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1052
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1053
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1054
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1055
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1056
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1057
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1058
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1059
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1060
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1061
	}/*function_sint_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1062
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1063
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1064
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1065
 *SINT_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1066
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1067
	case function_sint_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1068
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1069
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1070
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1071
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1072
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1073
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1074
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1075
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1076
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1077
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1078
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1079
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1080
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1081
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1082
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1083
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1084
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1085
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1086
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1087
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1088
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1089
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1090
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1091
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1092
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1093
	}/*function_sint_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1094
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1095
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1096
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1097
 *SINT_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1098
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1099
	case function_sint_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1100
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1101
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1102
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1103
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1104
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1105
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1106
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1107
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1108
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1109
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1110
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1111
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1112
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1113
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1114
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1115
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1116
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1117
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1118
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1119
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1120
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1121
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1122
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1123
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1124
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1125
	}/*function_sint_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1126
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1127
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1128
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1129
 *SINT_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1130
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1131
	case function_sint_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1132
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1133
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1134
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1135
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1136
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1137
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1138
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1139
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1140
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1141
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1142
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1143
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1144
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1145
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1146
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1147
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1148
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1149
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1150
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1151
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1152
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1153
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1154
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1155
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1156
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1157
	}/*function_sint_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1158
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1159
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1160
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1161
 *SINT_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1162
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1163
	case function_sint_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1164
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1165
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1166
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1167
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1168
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1169
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1170
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1171
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1172
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1173
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1174
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1175
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1176
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1177
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1178
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1179
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1180
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1181
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1182
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1183
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1184
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1185
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1186
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1187
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1188
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1189
	}/*function_sint_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1190
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1191
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1192
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1193
 *SINT_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1194
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1195
	case function_sint_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1196
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1197
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1198
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1199
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1200
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1201
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1202
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1203
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1204
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1205
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1206
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1207
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1209
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1210
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1211
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1212
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1213
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1214
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1215
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1216
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1217
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1218
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1219
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1220
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1221
	}/*function_sint_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1222
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1223
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1224
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1225
 *SINT_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1226
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1227
	case function_sint_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1228
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1229
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1230
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1231
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1232
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1233
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1234
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1235
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1236
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1237
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1238
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1239
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1240
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1241
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1242
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1243
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1244
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1245
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1246
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1247
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1248
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1249
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1250
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1251
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1252
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1253
	}/*function_sint_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1254
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1255
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1256
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1257
 *SINT_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1258
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1259
	case function_sint_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1260
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1261
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1262
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1263
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1264
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1265
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1266
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1267
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1268
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1269
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1270
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1271
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1272
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1273
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1274
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1275
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1276
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1277
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1278
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1279
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1280
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1281
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1282
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1283
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1284
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1285
	}/*function_sint_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1286
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1287
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1288
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1289
 *SINT_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1290
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1291
	case function_sint_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1292
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1293
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1294
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1295
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1296
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1297
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1298
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1299
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1300
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1301
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1302
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1303
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1304
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1305
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1306
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1307
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1308
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1309
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1310
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1311
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1312
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1313
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1314
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1315
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1316
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1317
	}/*function_sint_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1318
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1319
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1320
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1321
 *SINT_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1322
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1323
	case function_sint_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1324
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1325
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1326
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1327
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1328
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1329
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1330
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1331
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1332
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1333
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1334
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1335
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1336
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1337
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1338
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1339
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1340
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1341
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1342
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1343
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1344
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1345
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1346
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1347
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1348
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1349
	}/*function_sint_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1350
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1351
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1352
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1353
 *LINT_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1354
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1355
	case function_lint_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1356
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1357
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1358
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1359
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1360
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1361
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1362
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1363
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1364
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1365
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1366
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1367
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1368
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1369
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1370
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1371
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1372
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1373
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1374
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1375
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1376
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1377
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1378
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1379
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1380
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1381
	}/*function_lint_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1382
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1383
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1384
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1385
 *LINT_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1386
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1387
	case function_lint_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1388
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1389
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1390
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1391
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1392
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1393
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1394
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1395
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1396
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1397
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1398
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1399
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1400
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1401
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1402
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1403
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1404
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1405
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1406
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1407
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1408
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1409
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1410
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1411
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1412
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1413
	}/*function_lint_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1414
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1415
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1416
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1417
 *LINT_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1418
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1419
	case function_lint_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1420
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1421
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1422
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1423
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1424
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1425
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1426
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1427
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1428
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1429
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1430
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1431
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1432
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1433
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1434
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1435
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1436
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1437
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1438
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1439
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1440
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1441
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1442
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1443
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1444
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1445
	}/*function_lint_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1446
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1447
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1448
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1449
 *LINT_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1450
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1451
	case function_lint_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1452
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1453
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1454
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1455
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1456
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1457
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1458
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1459
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1460
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1461
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1462
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1463
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1464
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1465
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1466
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1467
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1468
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1469
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1470
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1471
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1472
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1473
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1474
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1475
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1476
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1477
	}/*function_lint_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1478
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1479
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1480
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1481
 *LINT_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1482
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1483
	case function_lint_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1484
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1485
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1486
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1487
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1488
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1489
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1490
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1491
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1492
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1493
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1494
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1495
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1496
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1497
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1498
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1499
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1500
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1501
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1502
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1503
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1504
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1505
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1506
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1507
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1508
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1509
	}/*function_lint_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1510
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1511
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1512
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1513
 *LINT_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1514
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1515
	case function_lint_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1516
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1517
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1518
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1519
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1520
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1521
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1522
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1523
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1524
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1525
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1526
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1527
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1528
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1529
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1530
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1531
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1532
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1533
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1534
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1535
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1536
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1537
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1538
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1539
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1540
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1541
	}/*function_lint_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1542
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1543
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1544
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1545
 *LINT_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1546
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1547
	case function_lint_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1548
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1549
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1550
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1551
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1552
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1553
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1554
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1555
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1556
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1557
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1558
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1559
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1560
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1561
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1562
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1563
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1564
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1565
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1566
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1567
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1568
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1569
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1570
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1571
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1572
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1573
	}/*function_lint_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1574
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1575
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1576
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1577
 *LINT_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1578
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1579
	case function_lint_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1580
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1581
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1582
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1583
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1584
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1585
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1586
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1587
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1588
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1589
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1590
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1591
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1592
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1593
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1594
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1595
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1596
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1597
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1598
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1599
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1600
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1601
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1602
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1603
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1604
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1605
	}/*function_lint_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1606
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1607
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1608
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1609
 *LINT_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1610
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1611
	case function_lint_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1612
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1613
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1614
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1615
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1616
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1617
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1618
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1619
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1620
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1621
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1622
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1623
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1624
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1625
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1626
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1627
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1628
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1629
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1630
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1631
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1632
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1633
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1634
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1635
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1636
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1637
	}/*function_lint_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1638
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1639
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1640
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1641
 *LINT_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1642
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1643
	case function_lint_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1644
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1645
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1646
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1647
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1648
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1649
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1650
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1651
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1652
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1653
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1654
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1655
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1656
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1657
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1658
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1659
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1660
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1661
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1662
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1663
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1664
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1665
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1666
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1667
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1668
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1669
	}/*function_lint_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1670
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1671
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1672
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1673
 *LINT_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1674
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1675
	case function_lint_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1676
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1677
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1678
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1679
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1680
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1681
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1682
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1683
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1684
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1685
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1686
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1687
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1688
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1689
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1690
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1691
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1692
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1693
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1694
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1695
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1696
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1697
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1698
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1699
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1700
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1701
	}/*function_lint_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1702
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1703
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1704
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1705
 *LINT_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1706
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1707
	case function_lint_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1708
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1709
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1710
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1711
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1712
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1713
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1714
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1715
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1716
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1717
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1718
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1719
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1720
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1721
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1722
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1723
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1724
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1725
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1726
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1727
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1728
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1729
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1730
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1731
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1732
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1733
	}/*function_lint_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1734
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1735
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1736
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1737
 *LINT_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1738
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1739
	case function_lint_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1740
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1741
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1742
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1743
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1744
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1745
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1746
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1747
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1748
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1749
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1750
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1751
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1752
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1753
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1754
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1755
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1756
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1757
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1758
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1759
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1760
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1761
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1762
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1763
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1764
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1765
	}/*function_lint_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1766
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1767
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1768
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1769
 *LINT_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1770
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1771
	case function_lint_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1772
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1773
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1774
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1775
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1776
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1777
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1778
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1779
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1780
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1781
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1782
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1783
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1784
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1785
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1786
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1787
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1788
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1789
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1790
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1791
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1792
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1793
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1794
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1795
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1796
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1797
	}/*function_lint_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1798
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1799
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1800
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1801
 *LINT_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1802
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1803
	case function_lint_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1804
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1805
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1806
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1807
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1808
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1809
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1810
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1811
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1812
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1813
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1814
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1815
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1816
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1817
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1818
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1819
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1820
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1821
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1822
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1823
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1824
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1825
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1826
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1827
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1828
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1829
	}/*function_lint_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1830
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1831
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1832
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1833
 *LINT_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1834
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1835
	case function_lint_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1836
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1837
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1838
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1839
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1840
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1841
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1842
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1843
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1844
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1845
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1846
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1847
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1848
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1849
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1850
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1851
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1852
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1853
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1854
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1855
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1856
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1857
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1858
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1859
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1860
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1861
	}/*function_lint_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1862
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1863
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1864
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1865
 *LINT_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1866
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1867
	case function_lint_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1868
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1869
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1870
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1871
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1872
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1873
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1874
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1875
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1876
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1877
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1878
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1879
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1880
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1881
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1882
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1883
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1884
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1885
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1886
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1887
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1888
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1889
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1890
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1891
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1892
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1893
	}/*function_lint_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1894
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1895
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1896
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1897
 *LINT_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1898
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1899
	case function_lint_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1900
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1901
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1902
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1903
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1904
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1905
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1906
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1907
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1908
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1909
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1910
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1911
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1912
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1913
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1914
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1915
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1916
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1917
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1918
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1919
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1920
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1921
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1922
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1923
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1924
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1925
	}/*function_lint_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1926
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1927
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1928
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1929
 *LINT_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1930
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1931
	case function_lint_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1932
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1933
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1934
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1935
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1936
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1937
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1938
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1939
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1940
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1941
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1942
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1943
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1944
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1945
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1946
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1947
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1948
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1949
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1950
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1951
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1952
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1953
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1954
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1955
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1956
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1957
	}/*function_lint_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1958
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1959
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1960
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1961
 *LINT_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1962
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1963
	case function_lint_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1964
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1965
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1966
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1967
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1968
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1969
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1970
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1971
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1972
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1973
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1974
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1975
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1976
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1977
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1978
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1979
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1980
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1981
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1982
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1983
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1984
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1985
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1986
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1987
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1988
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1989
	}/*function_lint_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1990
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1991
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1992
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1993
 *LINT_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1994
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1995
	case function_lint_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1996
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1997
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1998
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  1999
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2000
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2001
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2002
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2003
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2004
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2005
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2006
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2007
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2008
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2009
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2010
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2011
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2012
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2013
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2014
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2015
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2016
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2017
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2018
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2019
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2020
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2021
	}/*function_lint_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2022
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2023
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2024
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2025
 *DINT_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2026
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2027
	case function_dint_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2028
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2029
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2030
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2031
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2032
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2033
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2034
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2035
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2036
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2037
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2038
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2039
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2040
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2041
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2042
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2043
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2044
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2045
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2046
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2047
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2048
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2049
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2050
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2051
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2052
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2053
	}/*function_dint_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2054
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2055
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2056
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2057
 *DINT_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2058
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2059
	case function_dint_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2060
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2061
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2062
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2063
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2064
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2065
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2066
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2067
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2068
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2069
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2070
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2071
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2072
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2073
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2074
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2075
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2076
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2077
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2078
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2079
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2080
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2081
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2082
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2083
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2084
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2085
	}/*function_dint_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2086
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2087
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2088
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2089
 *DINT_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2090
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2091
	case function_dint_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2092
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2093
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2094
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2095
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2096
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2097
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2098
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2099
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2100
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2101
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2102
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2103
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2104
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2105
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2106
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2107
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2108
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2109
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2110
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2111
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2112
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2113
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2114
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2115
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2116
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2117
	}/*function_dint_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2118
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2119
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2120
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2121
 *DINT_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2122
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2123
	case function_dint_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2124
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2125
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2126
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2127
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2128
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2129
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2130
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2131
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2132
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2133
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2134
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2135
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2136
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2137
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2138
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2139
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2140
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2141
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2142
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2143
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2144
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2145
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2146
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2147
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2148
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2149
	}/*function_dint_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2150
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2151
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2152
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2153
 *DINT_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2154
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2155
	case function_dint_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2156
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2157
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2158
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2159
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2160
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2161
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2162
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2163
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2164
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2165
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2166
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2167
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2168
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2169
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2170
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2171
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2172
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2173
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2174
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2175
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2176
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2177
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2178
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2179
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2180
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2181
	}/*function_dint_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2182
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2183
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2184
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2185
 *DINT_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2186
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2187
	case function_dint_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2188
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2189
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2190
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2191
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2192
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2193
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2194
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2195
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2196
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2197
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2198
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2199
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2200
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2201
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2202
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2203
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2204
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2205
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2206
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2207
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2208
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2209
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2210
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2211
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2212
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2213
	}/*function_dint_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2214
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2215
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2216
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2217
 *DINT_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2218
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2219
	case function_dint_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2220
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2221
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2222
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2223
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2224
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2225
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2226
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2227
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2228
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2229
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2230
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2231
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2232
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2233
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2234
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2235
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2236
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2237
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2238
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2239
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2240
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2241
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2242
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2243
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2244
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2245
	}/*function_dint_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2246
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2247
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2248
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2249
 *DINT_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2250
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2251
	case function_dint_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2252
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2253
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2254
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2255
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2256
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2257
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2258
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2259
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2260
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2261
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2262
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2263
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2264
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2265
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2266
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2267
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2268
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2269
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2270
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2271
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2272
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2273
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2274
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2275
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2276
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2277
	}/*function_dint_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2278
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2279
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2280
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2281
 *DINT_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2282
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2283
	case function_dint_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2284
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2285
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2286
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2287
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2288
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2289
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2290
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2291
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2292
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2293
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2294
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2295
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2296
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2297
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2298
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2299
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2300
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2301
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2302
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2303
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2304
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2305
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2306
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2307
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2308
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2309
	}/*function_dint_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2310
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2311
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2312
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2313
 *DINT_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2314
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2315
	case function_dint_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2316
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2317
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2318
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2319
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2320
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2321
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2322
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2323
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2324
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2325
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2326
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2327
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2328
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2329
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2330
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2331
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2332
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2333
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2334
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2335
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2336
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2337
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2338
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2339
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2340
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2341
	}/*function_dint_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2342
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2343
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2344
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2345
 *DINT_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2346
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2347
	case function_dint_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2348
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2349
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2350
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2351
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2352
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2353
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2354
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2355
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2356
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2357
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2358
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2359
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2360
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2361
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2362
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2363
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2364
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2365
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2366
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2367
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2368
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2369
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2370
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2371
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2372
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2373
	}/*function_dint_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2374
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2375
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2376
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2377
 *DINT_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2378
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2379
	case function_dint_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2380
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2381
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2382
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2383
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2384
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2385
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2386
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2387
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2388
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2389
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2390
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2391
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2392
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2393
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2394
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2395
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2396
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2397
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2398
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2399
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2400
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2401
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2402
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2403
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2404
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2405
	}/*function_dint_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2406
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2407
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2408
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2409
 *DINT_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2410
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2411
	case function_dint_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2412
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2413
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2414
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2415
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2416
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2417
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2418
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2419
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2420
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2421
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2422
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2423
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2424
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2425
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2426
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2427
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2428
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2429
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2430
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2431
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2432
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2433
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2434
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2435
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2436
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2437
	}/*function_dint_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2438
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2439
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2440
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2441
 *DINT_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2442
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2443
	case function_dint_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2444
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2445
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2446
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2447
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2448
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2449
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2450
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2451
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2452
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2453
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2454
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2455
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2456
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2457
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2458
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2459
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2460
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2461
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2462
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2463
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2464
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2465
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2466
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2467
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2468
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2469
	}/*function_dint_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2470
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2471
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2472
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2473
 *DINT_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2474
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2475
	case function_dint_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2476
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2477
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2478
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2479
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2480
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2481
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2482
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2483
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2484
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2485
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2486
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2487
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2488
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2489
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2490
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2491
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2492
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2493
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2494
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2495
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2496
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2497
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2498
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2499
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2500
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2501
	}/*function_dint_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2502
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2503
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2504
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2505
 *DINT_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2506
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2507
	case function_dint_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2508
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2509
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2510
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2511
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2512
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2513
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2514
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2515
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2516
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2517
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2518
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2519
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2520
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2521
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2522
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2523
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2524
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2525
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2526
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2527
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2528
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2529
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2530
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2531
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2532
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2533
	}/*function_dint_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2534
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2535
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2536
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2537
 *DINT_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2538
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2539
	case function_dint_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2540
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2541
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2542
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2543
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2544
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2545
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2546
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2547
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2548
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2549
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2550
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2551
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2552
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2553
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2554
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2555
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2556
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2557
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2558
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2559
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2560
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2561
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2562
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2563
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2564
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2565
	}/*function_dint_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2566
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2567
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2568
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2569
 *DINT_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2570
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2571
	case function_dint_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2572
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2573
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2574
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2575
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2576
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2577
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2578
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2579
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2580
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2581
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2582
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2583
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2584
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2585
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2586
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2587
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2588
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2589
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2590
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2591
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2592
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2593
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2594
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2595
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2596
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2597
	}/*function_dint_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2598
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2599
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2600
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2601
 *DINT_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2602
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2603
	case function_dint_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2604
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2605
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2606
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2607
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2608
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2609
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2610
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2611
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2612
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2613
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2614
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2615
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2616
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2617
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2618
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2619
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2620
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2621
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2622
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2623
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2624
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2625
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2626
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2627
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2628
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2629
	}/*function_dint_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2630
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2631
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2632
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2633
 *DINT_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2634
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2635
	case function_dint_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2636
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2637
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2638
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2639
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2640
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2641
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2642
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2643
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2644
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2645
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2646
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2647
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2648
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2649
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2650
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2651
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2652
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2653
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2654
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2655
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2656
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2657
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2658
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2659
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2660
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2661
	}/*function_dint_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2662
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2663
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2664
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2665
 *DINT_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2666
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2667
	case function_dint_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2668
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2669
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2670
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2671
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2672
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2673
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2674
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2675
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2676
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2677
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2678
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2679
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2680
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2681
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2682
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2683
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2684
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2685
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2686
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2687
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2688
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2689
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2690
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2691
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2692
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2693
	}/*function_dint_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2694
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2695
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2696
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2697
 *DATE_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2698
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2699
	case function_date_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2700
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2701
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2702
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2703
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2704
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2705
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2706
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2707
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2708
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2709
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2710
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2711
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2712
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2713
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2714
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2715
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2716
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2717
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2718
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2719
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2720
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2721
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2722
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2723
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2724
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2725
	}/*function_date_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2726
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2727
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2728
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2729
 *DATE_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2730
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2731
	case function_date_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2732
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2733
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2734
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2735
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2736
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2737
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2738
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2739
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2740
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2741
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2742
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2743
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2744
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2745
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2746
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2747
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2748
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2749
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2750
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2751
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2752
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2753
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2754
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2755
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2756
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2757
	}/*function_date_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2758
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2759
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2760
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2761
 *DATE_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2762
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2763
	case function_date_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2764
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2765
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2766
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2767
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2768
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2769
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2770
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2771
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2772
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2773
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2774
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2775
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2776
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2777
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2778
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2779
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2780
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2781
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2782
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2783
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2784
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2785
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2786
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2787
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2788
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2789
	}/*function_date_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2790
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2791
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2792
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2793
 *DATE_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2794
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2795
	case function_date_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2796
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2797
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2798
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2799
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2800
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2801
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2802
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2803
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2804
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2805
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2806
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2807
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2808
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2809
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2810
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2811
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2812
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2813
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2814
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2815
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2816
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2817
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2818
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2819
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2820
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2821
	}/*function_date_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2822
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2823
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2824
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2825
 *DATE_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2826
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2827
	case function_date_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2828
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2829
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2830
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2831
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2832
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2833
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2834
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2835
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2836
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2837
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2838
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2839
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2841
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2842
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2843
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2844
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2845
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2846
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2847
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2848
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2849
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2850
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2851
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2852
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2853
	}/*function_date_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2854
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2855
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2856
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2857
 *DATE_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2858
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2859
	case function_date_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2860
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2861
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2862
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2863
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2864
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2865
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2866
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2867
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2868
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2869
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2870
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2871
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2872
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2873
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2874
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2875
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2876
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2877
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2878
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2879
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2880
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2881
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2882
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2883
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2884
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2885
	}/*function_date_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2886
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2887
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2888
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2889
 *DATE_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2890
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2891
	case function_date_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2892
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2893
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2894
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2895
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2896
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2897
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2898
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2899
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2900
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2901
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2902
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2903
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2904
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2905
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2906
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2907
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2908
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2909
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2910
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2911
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2912
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2913
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2914
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2915
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2916
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2917
	}/*function_date_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2918
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2919
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2920
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2921
 *DATE_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2922
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2923
	case function_date_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2924
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2925
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2926
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2927
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2928
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2929
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2930
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2931
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2932
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2933
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2934
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2935
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2936
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2937
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2938
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2939
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2940
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2941
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2942
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2943
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2944
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2945
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2946
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2947
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2948
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2949
	}/*function_date_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2950
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2951
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2952
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2953
 *DATE_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2954
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2955
	case function_date_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2956
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2957
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2958
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2959
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2960
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2961
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2962
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2963
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2964
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2965
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2966
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2967
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2968
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2969
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2970
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2971
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2972
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2973
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2974
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2975
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2976
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2977
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2978
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2979
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2980
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2981
	}/*function_date_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2982
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2983
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2984
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2985
 *DATE_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2986
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2987
	case function_date_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2988
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2989
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2990
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2991
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2992
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2993
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2994
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2995
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2996
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2997
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2998
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  2999
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3000
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3001
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3002
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3003
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3004
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3005
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3006
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3007
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3008
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3009
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3010
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3011
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3012
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3013
	}/*function_date_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3014
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3015
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3016
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3017
 *DATE_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3018
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3019
	case function_date_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3020
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3021
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3022
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3023
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3024
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3025
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3026
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3027
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3028
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3029
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3030
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3031
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3032
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3033
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3034
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3035
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3036
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3037
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3038
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3039
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3040
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3041
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3042
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3043
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3044
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3045
	}/*function_date_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3046
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3047
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3048
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3049
 *DATE_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3050
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3051
	case function_date_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3052
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3053
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3054
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3055
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3056
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3057
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3058
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3059
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3060
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3061
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3062
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3063
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3064
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3065
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3066
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3067
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3068
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3069
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3070
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3071
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3072
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3073
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3074
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3075
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3076
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3077
	}/*function_date_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3078
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3079
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3080
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3081
 *DATE_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3082
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3083
	case function_date_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3084
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3085
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3086
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3087
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3088
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3089
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3090
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3091
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3092
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3093
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3094
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3095
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3096
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3097
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3098
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3099
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3100
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3101
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3102
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3103
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3104
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3105
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3106
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3107
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3108
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3109
	}/*function_date_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3110
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3111
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3112
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3113
 *DATE_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3114
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3115
	case function_date_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3116
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3117
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3118
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3119
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3120
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3121
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3122
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3123
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3124
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3125
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3126
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3127
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3129
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3130
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3131
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3132
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3133
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3134
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3135
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3136
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3137
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3138
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3139
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3140
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3141
	}/*function_date_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3142
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3143
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3144
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3145
 *DATE_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3146
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3147
	case function_date_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3148
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3149
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3150
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3151
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3152
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3153
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3154
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3155
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3156
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3157
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3158
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3159
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3160
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3161
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3162
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3163
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3164
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3165
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3166
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3167
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3168
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3169
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3170
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3171
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3172
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3173
	}/*function_date_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3174
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3175
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3176
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3177
 *DATE_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3178
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3179
	case function_date_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3180
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3181
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3182
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3183
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3184
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3185
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3186
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3187
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3188
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3189
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3190
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3191
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3192
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3193
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3194
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3195
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3196
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3197
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3198
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3199
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3200
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3201
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3202
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3203
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3204
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3205
	}/*function_date_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3206
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3207
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3208
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3209
 *DATE_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3210
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3211
	case function_date_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3212
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3213
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3214
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3215
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3216
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3217
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3218
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3219
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3220
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3221
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3222
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3223
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3224
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3225
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3226
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3227
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3228
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3229
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3230
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3231
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3232
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3233
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3234
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3235
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3236
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3237
	}/*function_date_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3238
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3239
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3240
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3241
 *DATE_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3242
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3243
	case function_date_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3244
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3245
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3246
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3247
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3248
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3249
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3250
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3251
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3252
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3253
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3254
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3255
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3256
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3257
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3258
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3259
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3260
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3261
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3262
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3263
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3264
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3265
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3266
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3267
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3268
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3269
	}/*function_date_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3270
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3271
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3272
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3273
 *DATE_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3274
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3275
	case function_date_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3276
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3277
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3278
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3279
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3280
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3281
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3282
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3283
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3284
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3285
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3286
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3287
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3288
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3289
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3290
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3291
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3292
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3293
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3294
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3295
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3296
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3297
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3298
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3299
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3300
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3301
	}/*function_date_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3302
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3303
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3304
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3305
 *DATE_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3306
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3307
	case function_date_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3308
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3309
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3310
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3311
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3312
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3313
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3314
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3315
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3316
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3317
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3318
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3319
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3320
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3321
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3322
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3323
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3324
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3325
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3326
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3327
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3328
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3329
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3330
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3331
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3332
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3333
	}/*function_date_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3334
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3335
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3336
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3337
 *DATE_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3338
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3339
	case function_date_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3340
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3341
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3342
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3343
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3344
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3345
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3346
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3347
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3348
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3349
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3350
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3351
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3352
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3353
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3354
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3355
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3356
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3357
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3358
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3359
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3360
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3361
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3362
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3363
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3364
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3365
	}/*function_date_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3366
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3367
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3368
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3369
 *DWORD_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3370
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3371
	case function_dword_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3372
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3373
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3374
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3375
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3376
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3377
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3378
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3379
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3380
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3381
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3382
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3383
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3384
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3385
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3386
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3387
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3388
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3389
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3390
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3391
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3392
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3393
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3394
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3395
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3396
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3397
	}/*function_dword_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3398
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3399
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3400
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3401
 *DWORD_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3402
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3403
	case function_dword_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3404
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3405
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3406
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3407
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3408
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3409
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3410
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3411
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3412
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3413
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3414
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3415
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3416
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3417
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3418
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3419
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3420
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3421
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3422
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3423
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3424
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3425
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3426
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3427
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3428
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3429
	}/*function_dword_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3430
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3431
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3432
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3433
 *DWORD_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3434
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3435
	case function_dword_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3436
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3437
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3438
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3439
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3440
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3441
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3442
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3443
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3444
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3445
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3446
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3447
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3448
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3449
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3450
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3451
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3452
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3453
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3454
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3455
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3456
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3457
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3458
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3459
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3460
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3461
	}/*function_dword_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3462
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3463
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3464
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3465
 *DWORD_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3466
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3467
	case function_dword_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3468
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3469
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3470
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3471
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3472
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3473
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3474
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3475
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3476
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3477
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3478
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3479
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3480
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3481
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3482
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3483
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3484
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3485
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3486
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3487
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3488
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3489
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3490
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3491
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3492
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3493
	}/*function_dword_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3494
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3495
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3496
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3497
 *DWORD_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3498
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3499
	case function_dword_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3500
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3501
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3502
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3503
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3504
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3505
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3506
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3507
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3508
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3509
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3510
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3511
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3512
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3513
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3514
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3515
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3516
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3517
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3518
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3519
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3520
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3521
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3522
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3523
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3524
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3525
	}/*function_dword_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3526
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3527
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3528
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3529
 *DWORD_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3530
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3531
	case function_dword_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3532
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3533
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3534
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3535
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3536
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3537
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3538
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3539
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3540
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3541
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3542
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3543
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3544
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3545
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3546
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3547
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3548
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3549
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3550
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3551
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3552
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3553
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3554
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3555
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3556
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3557
	}/*function_dword_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3558
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3559
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3560
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3561
 *DWORD_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3562
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3563
	case function_dword_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3564
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3565
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3566
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3567
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3568
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3569
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3570
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3571
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3572
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3573
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3574
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3575
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3576
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3577
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3578
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3579
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3580
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3581
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3582
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3583
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3584
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3585
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3586
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3587
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3588
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3589
	}/*function_dword_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3590
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3591
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3592
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3593
 *DWORD_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3594
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3595
	case function_dword_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3596
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3597
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3598
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3599
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3600
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3601
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3602
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3603
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3604
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3605
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3606
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3607
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3608
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3609
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3610
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3611
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3612
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3613
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3614
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3615
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3616
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3617
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3618
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3619
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3620
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3621
	}/*function_dword_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3622
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3623
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3624
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3625
 *DWORD_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3626
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3627
	case function_dword_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3628
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3629
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3630
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3631
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3632
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3633
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3634
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3635
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3636
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3637
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3638
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3639
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3640
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3641
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3642
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3643
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3644
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3645
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3646
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3647
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3648
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3649
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3650
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3651
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3652
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3653
	}/*function_dword_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3654
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3655
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3656
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3657
 *DWORD_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3658
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3659
	case function_dword_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3660
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3661
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3662
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3663
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3664
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3665
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3666
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3667
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3668
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3669
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3670
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3671
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3672
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3673
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3674
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3675
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3676
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3677
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3678
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3679
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3680
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3681
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3682
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3683
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3684
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3685
	}/*function_dword_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3686
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3687
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3688
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3689
 *DWORD_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3690
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3691
	case function_dword_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3692
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3693
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3694
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3695
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3696
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3697
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3698
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3699
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3700
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3701
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3702
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3703
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3704
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3705
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3706
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3707
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3708
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3709
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3710
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3711
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3712
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3713
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3714
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3715
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3716
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3717
	}/*function_dword_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3718
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3719
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3720
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3721
 *DWORD_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3722
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3723
	case function_dword_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3724
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3725
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3726
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3727
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3728
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3729
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3730
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3731
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3732
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3733
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3734
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3735
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3736
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3737
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3738
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3739
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3740
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3741
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3742
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3743
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3744
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3745
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3746
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3747
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3748
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3749
	}/*function_dword_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3750
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3751
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3752
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3753
 *DWORD_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3754
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3755
	case function_dword_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3756
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3757
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3758
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3759
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3760
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3761
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3762
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3763
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3764
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3765
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3766
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3767
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3768
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3769
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3770
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3771
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3772
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3773
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3774
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3775
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3776
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3777
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3778
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3779
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3780
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3781
	}/*function_dword_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3782
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3783
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3784
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3785
 *DWORD_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3786
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3787
	case function_dword_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3788
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3789
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3790
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3791
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3792
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3793
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3794
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3795
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3796
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3797
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3798
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3799
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3800
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3801
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3802
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3803
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3804
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3805
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3806
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3807
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3808
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3809
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3810
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3811
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3812
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3813
	}/*function_dword_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3814
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3815
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3816
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3817
 *DWORD_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3818
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3819
	case function_dword_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3820
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3821
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3822
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3823
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3824
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3825
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3826
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3827
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3828
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3829
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3830
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3831
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3832
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3833
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3834
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3835
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3836
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3837
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3838
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3839
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3840
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3841
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3842
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3843
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3844
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3845
	}/*function_dword_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3846
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3847
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3848
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3849
 *DWORD_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3850
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3851
	case function_dword_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3852
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3853
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3854
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3855
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3856
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3857
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3858
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3859
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3860
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3861
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3862
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3863
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3864
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3865
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3866
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3867
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3868
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3869
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3870
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3871
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3872
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3873
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3874
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3875
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3876
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3877
	}/*function_dword_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3878
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3879
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3880
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3881
 *DWORD_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3882
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3883
	case function_dword_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3884
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3885
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3886
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3887
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3888
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3889
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3890
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3891
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3892
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3893
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3894
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3895
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3896
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3897
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3898
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3899
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3900
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3901
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3902
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3903
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3904
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3905
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3906
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3907
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3908
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3909
	}/*function_dword_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3910
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3911
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3912
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3913
 *DWORD_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3914
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3915
	case function_dword_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3916
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3917
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3918
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3919
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3920
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3921
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3922
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3923
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3924
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3925
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3926
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3927
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3928
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3929
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3930
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3931
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3932
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3933
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3934
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3935
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3936
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3937
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3938
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3939
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3940
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3941
	}/*function_dword_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3942
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3943
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3944
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3945
 *DWORD_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3946
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3947
	case function_dword_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3948
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3949
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3950
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3951
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3952
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3953
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3954
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3955
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3956
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3957
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3958
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3959
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3960
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3961
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3962
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3963
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3964
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3965
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3966
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3967
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3968
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3969
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3970
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3971
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3972
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3973
	}/*function_dword_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3974
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3975
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3976
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3977
 *DWORD_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3978
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3979
	case function_dword_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3980
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3981
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3982
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3983
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3984
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3985
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3986
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3987
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3988
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3989
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3990
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3991
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3992
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3993
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3994
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3995
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3996
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3997
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3998
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  3999
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4000
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4001
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4002
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4003
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4004
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4005
	}/*function_dword_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4006
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4007
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4008
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4009
 *DWORD_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4010
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4011
	case function_dword_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4012
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4013
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4014
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4015
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4016
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4017
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4018
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4019
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4020
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4021
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4022
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4023
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4024
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4025
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4026
			if (typeid(*last_type_symbol) == typeid(dword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4027
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4028
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4029
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4030
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4031
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4032
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4033
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4034
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4035
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4036
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4037
	}/*function_dword_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4038
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4039
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4040
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4041
 *DT_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4042
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4043
	case function_dt_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4044
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4045
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4046
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4047
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4048
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4049
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4050
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4051
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4052
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4053
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4054
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4055
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4056
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4057
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4058
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4059
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4060
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4061
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4062
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4063
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4064
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4065
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4066
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4067
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4068
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4069
	}/*function_dt_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4070
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4071
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4072
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4073
 *DT_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4074
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4075
	case function_dt_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4076
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4077
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4078
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4079
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4080
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4081
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4082
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4083
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4084
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4085
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4086
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4087
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4088
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4089
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4090
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4091
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4092
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4093
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4094
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4095
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4096
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4097
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4098
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4099
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4100
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4101
	}/*function_dt_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4102
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4103
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4104
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4105
 *DT_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4106
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4107
	case function_dt_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4108
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4109
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4110
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4111
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4112
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4113
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4114
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4115
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4116
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4117
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4118
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4119
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4120
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4121
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4122
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4123
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4124
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4125
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4126
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4127
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4128
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4129
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4130
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4131
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4132
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4133
	}/*function_dt_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4134
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4135
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4136
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4137
 *DT_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4138
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4139
	case function_dt_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4140
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4141
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4142
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4143
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4144
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4145
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4146
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4147
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4148
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4149
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4150
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4151
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4152
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4153
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4154
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4155
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4156
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4157
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4158
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4159
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4160
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4161
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4162
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4163
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4164
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4165
	}/*function_dt_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4166
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4167
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4168
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4169
 *DT_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4170
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4171
	case function_dt_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4172
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4173
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4174
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4175
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4176
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4177
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4178
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4179
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4180
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4181
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4182
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4183
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4184
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4185
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4186
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4187
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4188
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4189
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4190
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4191
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4192
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4193
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4194
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4195
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4196
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4197
	}/*function_dt_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4198
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4199
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4200
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4201
 *DT_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4202
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4203
	case function_dt_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4204
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4205
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4206
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4207
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4208
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4209
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4210
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4211
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4212
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4213
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4214
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4215
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4216
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4217
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4218
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4219
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4220
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4221
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4222
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4223
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4224
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4225
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4226
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4227
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4228
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4229
	}/*function_dt_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4230
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4231
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4232
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4233
 *DT_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4234
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4235
	case function_dt_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4236
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4237
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4238
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4239
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4240
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4241
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4242
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4243
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4244
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4245
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4246
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4247
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4248
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4249
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4250
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4251
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4252
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4253
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4254
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4255
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4256
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4257
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4258
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4259
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4260
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4261
	}/*function_dt_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4262
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4263
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4264
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4265
 *DT_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4266
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4267
	case function_dt_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4268
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4269
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4270
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4271
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4272
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4273
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4274
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4275
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4276
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4277
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4278
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4279
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4280
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4281
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4282
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4283
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4284
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4285
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4286
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4287
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4288
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4289
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4290
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4291
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4292
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4293
	}/*function_dt_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4294
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4295
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4296
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4297
 *DT_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4298
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4299
	case function_dt_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4300
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4301
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4302
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4303
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4304
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4305
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4306
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4307
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4308
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4309
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4310
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4311
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4312
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4313
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4314
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4315
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4316
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4317
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4318
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4319
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4320
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4321
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4322
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4323
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4324
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4325
	}/*function_dt_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4326
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4327
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4328
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4329
 *DT_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4330
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4331
	case function_dt_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4332
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4333
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4334
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4335
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4336
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4337
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4338
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4339
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4340
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4341
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4342
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4343
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4344
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4345
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4346
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4347
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4348
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4349
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4350
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4351
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4352
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4353
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4354
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4355
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4356
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4357
	}/*function_dt_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4358
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4359
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4360
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4361
 *DT_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4362
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4363
	case function_dt_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4364
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4365
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4366
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4367
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4368
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4369
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4370
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4371
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4372
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4373
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4374
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4375
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4376
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4377
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4378
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4379
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4380
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4381
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4382
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4383
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4384
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4385
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4386
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4387
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4388
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4389
	}/*function_dt_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4390
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4391
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4392
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4393
 *DT_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4394
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4395
	case function_dt_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4396
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4397
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4398
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4399
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4400
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4401
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4402
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4403
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4404
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4405
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4406
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4407
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4408
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4409
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4410
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4411
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4412
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4413
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4414
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4415
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4416
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4417
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4418
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4419
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4420
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4421
	}/*function_dt_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4422
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4423
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4424
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4425
 *DT_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4426
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4427
	case function_dt_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4428
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4429
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4430
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4431
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4432
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4433
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4434
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4435
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4436
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4437
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4438
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4439
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4440
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4441
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4442
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4443
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4444
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4445
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4446
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4447
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4448
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4449
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4450
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4451
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4452
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4453
	}/*function_dt_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4454
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4455
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4456
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4457
 *DT_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4458
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4459
	case function_dt_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4460
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4461
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4462
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4463
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4464
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4465
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4466
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4467
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4468
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4469
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4470
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4471
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4472
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4473
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4474
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4475
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4476
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4477
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4478
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4479
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4480
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4481
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4482
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4483
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4484
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4485
	}/*function_dt_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4486
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4487
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4488
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4489
 *DT_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4490
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4491
	case function_dt_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4492
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4493
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4494
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4495
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4496
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4497
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4498
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4499
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4500
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4501
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4502
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4503
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4504
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4505
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4506
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4507
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4508
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4509
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4510
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4511
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4512
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4513
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4514
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4515
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4516
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4517
	}/*function_dt_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4518
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4519
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4520
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4521
 *DT_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4522
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4523
	case function_dt_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4524
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4525
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4526
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4527
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4528
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4529
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4530
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4531
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4532
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4533
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4534
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4535
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4536
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4537
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4538
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4539
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4540
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4541
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4542
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4543
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4544
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4545
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4546
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4547
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4548
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4549
	}/*function_dt_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4550
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4551
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4552
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4553
 *DT_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4554
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4555
	case function_dt_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4556
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4557
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4558
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4559
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4560
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4561
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4562
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4563
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4564
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4565
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4566
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4567
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4568
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4569
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4570
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4571
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4572
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4573
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4574
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4575
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4576
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4577
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4578
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4579
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4580
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4581
	}/*function_dt_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4582
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4583
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4584
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4585
 *DT_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4586
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4587
	case function_dt_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4588
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4589
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4590
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4591
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4592
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4593
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4594
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4595
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4596
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4597
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4598
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4599
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4600
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4601
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4602
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4603
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4604
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4605
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4606
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4607
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4608
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4609
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4610
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4611
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4612
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4613
	}/*function_dt_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4614
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4615
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4616
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4617
 *DT_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4618
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4619
	case function_dt_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4620
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4621
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4622
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4623
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4624
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4625
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4626
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4627
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4628
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4629
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4630
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4631
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4632
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4633
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4634
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4635
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4636
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4637
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4638
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4639
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4640
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4641
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4642
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4643
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4644
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4645
	}/*function_dt_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4646
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4647
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4648
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4649
 *DT_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4650
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4651
	case function_dt_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4652
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4653
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4654
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4655
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4656
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4657
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4658
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4659
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4660
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4661
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4662
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4663
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4664
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4665
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4666
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4667
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4668
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4669
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4670
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4671
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4672
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4673
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4674
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4675
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4676
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4677
	}/*function_dt_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4678
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4679
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4680
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4681
 *DT_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4682
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4683
	case function_dt_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4684
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4685
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4686
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4687
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4688
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4689
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4690
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4691
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4692
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4693
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4694
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4695
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4696
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4697
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4698
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4699
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4700
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4701
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4702
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4703
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4704
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4705
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4706
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4707
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4708
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4709
	}/*function_dt_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4710
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4711
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4712
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4713
 *TOD_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4714
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4715
	case function_tod_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4716
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4717
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4718
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4719
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4720
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4721
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4722
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4723
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4724
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4725
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4726
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4727
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4728
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4729
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4730
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4731
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4732
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4733
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4734
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4735
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4736
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4737
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4738
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4739
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4740
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4741
	}/*function_tod_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4742
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4743
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4744
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4745
 *TOD_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4746
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4747
	case function_tod_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4748
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4749
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4750
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4751
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4752
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4753
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4754
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4755
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4756
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4757
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4758
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4759
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4760
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4761
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4762
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4763
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4764
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4765
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4766
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4767
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4768
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4769
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4770
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4771
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4772
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4773
	}/*function_tod_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4774
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4775
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4776
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4777
 *TOD_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4778
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4779
	case function_tod_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4780
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4781
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4782
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4783
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4784
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4785
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4786
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4787
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4788
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4789
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4790
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4791
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4792
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4793
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4794
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4795
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4796
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4797
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4798
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4799
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4800
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4801
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4802
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4803
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4804
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4805
	}/*function_tod_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4806
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4807
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4808
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4809
 *TOD_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4810
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4811
	case function_tod_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4812
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4813
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4814
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4815
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4816
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4817
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4818
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4819
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4820
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4821
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4822
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4823
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4824
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4825
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4826
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4827
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4828
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4829
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4830
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4831
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4832
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4833
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4834
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4835
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4836
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4837
	}/*function_tod_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4838
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4839
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4840
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4841
 *TOD_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4842
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4843
	case function_tod_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4844
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4845
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4846
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4847
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4848
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4849
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4850
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4851
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4852
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4853
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4854
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4855
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4856
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4857
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4858
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4859
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4860
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4861
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4862
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4863
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4864
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4865
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4866
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4867
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4868
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4869
	}/*function_tod_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4870
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4871
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4872
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4873
 *TOD_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4874
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4875
	case function_tod_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4876
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4877
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4878
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4879
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4880
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4881
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4882
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4883
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4884
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4885
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4886
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4887
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4888
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4889
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4890
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4891
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4892
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4893
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4894
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4895
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4896
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4897
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4898
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4899
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4900
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4901
	}/*function_tod_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4902
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4903
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4904
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4905
 *TOD_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4906
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4907
	case function_tod_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4908
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4909
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4910
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4911
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4912
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4913
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4914
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4915
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4916
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4917
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4918
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4919
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4920
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4921
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4922
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4923
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4924
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4925
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4926
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4927
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4928
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4929
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4930
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4931
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4932
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4933
	}/*function_tod_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4934
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4935
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4936
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4937
 *TOD_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4938
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4939
	case function_tod_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4940
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4941
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4942
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4943
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4944
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4945
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4946
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4947
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4948
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4949
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4950
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4951
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4952
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4953
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4954
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4955
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4956
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4957
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4958
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4959
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4960
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4961
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4962
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4963
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4964
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4965
	}/*function_tod_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4966
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4967
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4968
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4969
 *TOD_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4970
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4971
	case function_tod_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4972
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4973
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4974
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4975
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4976
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4977
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4978
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4979
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4980
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4981
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4982
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4983
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4984
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4985
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4986
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4987
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4988
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4989
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4990
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4991
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4992
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4993
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4994
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4995
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4996
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4997
	}/*function_tod_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4998
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  4999
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5000
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5001
 *TOD_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5002
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5003
	case function_tod_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5004
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5005
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5006
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5007
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5008
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5009
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5010
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5011
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5012
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5013
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5014
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5015
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5016
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5017
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5018
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5019
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5020
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5021
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5022
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5023
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5024
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5025
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5026
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5027
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5028
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5029
	}/*function_tod_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5030
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5031
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5032
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5033
 *TOD_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5034
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5035
	case function_tod_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5036
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5037
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5038
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5039
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5040
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5041
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5042
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5043
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5044
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5045
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5046
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5047
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5048
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5049
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5050
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5051
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5052
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5053
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5054
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5055
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5056
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5057
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5058
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5059
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5060
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5061
	}/*function_tod_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5062
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5063
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5064
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5065
 *TOD_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5066
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5067
	case function_tod_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5068
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5069
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5070
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5071
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5072
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5073
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5074
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5075
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5076
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5077
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5078
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5079
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5080
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5081
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5082
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5083
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5084
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5085
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5086
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5087
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5088
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5089
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5090
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5091
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5092
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5093
	}/*function_tod_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5094
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5095
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5096
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5097
 *TOD_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5098
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5099
	case function_tod_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5100
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5101
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5102
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5103
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5104
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5105
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5106
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5107
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5108
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5109
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5110
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5111
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5112
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5113
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5114
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5115
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5116
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5117
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5118
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5119
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5120
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5121
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5122
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5123
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5124
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5125
	}/*function_tod_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5126
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5127
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5128
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5129
 *TOD_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5130
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5131
	case function_tod_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5132
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5133
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5134
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5135
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5136
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5137
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5138
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5139
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5140
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5141
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5142
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5143
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5144
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5145
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5146
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5147
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5148
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5149
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5150
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5151
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5152
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5153
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5154
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5155
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5156
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5157
	}/*function_tod_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5158
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5159
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5160
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5161
 *TOD_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5162
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5163
	case function_tod_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5164
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5165
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5166
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5167
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5168
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5169
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5170
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5171
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5172
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5173
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5174
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5175
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5176
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5177
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5178
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5179
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5180
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5181
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5182
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5183
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5184
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5185
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5186
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5187
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5188
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5189
	}/*function_tod_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5190
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5191
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5192
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5193
 *TOD_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5194
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5195
	case function_tod_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5196
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5197
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5198
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5199
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5200
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5201
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5202
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5203
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5204
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5205
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5206
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5207
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5208
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5209
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5210
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5211
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5212
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5213
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5214
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5215
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5216
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5217
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5218
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5219
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5220
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5221
	}/*function_tod_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5222
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5223
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5224
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5225
 *TOD_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5226
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5227
	case function_tod_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5228
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5229
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5230
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5231
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5232
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5233
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5234
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5235
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5236
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5237
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5238
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5239
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5240
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5241
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5242
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5243
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5244
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5245
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5246
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5247
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5248
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5249
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5250
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5251
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5252
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5253
	}/*function_tod_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5254
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5255
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5256
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5257
 *TOD_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5258
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5259
	case function_tod_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5260
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5261
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5262
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5263
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5264
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5265
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5266
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5267
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5268
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5269
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5270
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5271
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5272
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5273
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5274
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5275
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5276
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5277
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5278
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5279
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5280
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5281
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5282
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5283
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5284
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5285
	}/*function_tod_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5286
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5287
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5288
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5289
 *TOD_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5290
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5291
	case function_tod_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5292
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5293
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5294
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5295
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5296
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5297
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5298
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5299
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5300
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5301
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5302
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5303
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5304
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5305
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5306
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5307
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5308
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5309
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5310
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5311
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5312
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5313
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5314
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5315
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5316
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5317
	}/*function_tod_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5318
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5319
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5320
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5321
 *TOD_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5322
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5323
	case function_tod_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5324
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5325
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5326
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5327
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5328
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5329
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5330
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5331
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5332
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5333
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5334
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5335
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5336
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5337
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5338
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5339
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5340
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5341
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5342
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5343
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5344
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5345
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5346
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5347
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5348
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5349
	}/*function_tod_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5350
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5351
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5352
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5353
 *TOD_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5354
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5355
	case function_tod_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5356
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5357
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5358
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5359
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5360
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5361
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5362
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5363
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5364
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5365
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5366
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5367
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5368
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5369
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5370
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5371
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5372
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5373
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5374
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5375
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5376
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5377
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5378
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5379
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5380
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5381
	}/*function_tod_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5382
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5383
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5384
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5385
 *UDINT_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5386
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5387
	case function_udint_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5388
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5389
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5390
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5391
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5392
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5393
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5394
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5395
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5396
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5397
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5398
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5399
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5400
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5401
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5402
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5403
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5404
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5405
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5406
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5407
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5408
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5409
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5410
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5411
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5412
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5413
	}/*function_udint_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5414
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5415
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5416
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5417
 *UDINT_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5418
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5419
	case function_udint_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5420
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5421
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5422
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5423
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5424
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5425
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5426
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5427
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5428
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5429
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5430
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5431
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5432
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5433
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5434
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5435
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5436
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5437
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5438
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5439
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5440
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5441
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5442
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5443
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5444
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5445
	}/*function_udint_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5446
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5447
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5448
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5449
 *UDINT_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5450
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5451
	case function_udint_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5452
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5453
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5454
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5455
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5456
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5457
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5458
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5459
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5460
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5461
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5462
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5463
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5464
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5465
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5466
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5467
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5468
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5469
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5470
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5471
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5472
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5473
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5474
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5475
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5476
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5477
	}/*function_udint_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5478
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5479
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5480
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5481
 *UDINT_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5482
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5483
	case function_udint_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5484
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5485
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5486
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5487
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5488
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5489
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5490
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5491
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5492
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5493
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5494
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5495
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5496
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5497
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5498
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5499
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5500
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5501
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5502
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5503
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5504
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5505
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5506
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5507
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5508
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5509
	}/*function_udint_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5510
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5511
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5512
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5513
 *UDINT_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5514
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5515
	case function_udint_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5516
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5517
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5518
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5519
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5520
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5521
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5522
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5523
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5524
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5525
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5526
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5527
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5528
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5529
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5530
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5531
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5532
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5533
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5534
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5535
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5536
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5537
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5538
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5539
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5540
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5541
	}/*function_udint_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5542
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5543
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5544
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5545
 *UDINT_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5546
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5547
	case function_udint_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5548
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5549
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5550
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5551
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5552
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5553
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5554
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5555
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5556
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5557
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5558
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5559
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5561
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5562
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5563
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5564
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5565
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5566
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5567
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5568
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5569
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5570
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5571
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5572
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5573
	}/*function_udint_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5574
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5575
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5576
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5577
 *UDINT_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5578
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5579
	case function_udint_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5580
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5581
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5582
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5583
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5584
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5585
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5586
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5587
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5588
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5589
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5590
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5591
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5592
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5593
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5594
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5595
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5596
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5597
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5598
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5599
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5600
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5601
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5602
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5603
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5604
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5605
	}/*function_udint_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5606
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5607
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5608
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5609
 *UDINT_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5610
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5611
	case function_udint_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5612
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5613
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5614
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5615
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5616
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5617
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5618
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5619
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5620
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5621
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5622
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5623
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5624
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5625
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5626
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5627
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5628
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5629
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5630
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5631
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5632
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5633
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5634
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5635
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5636
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5637
	}/*function_udint_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5638
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5639
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5640
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5641
 *UDINT_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5642
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5643
	case function_udint_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5644
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5645
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5646
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5647
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5648
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5649
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5650
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5651
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5652
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5653
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5654
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5655
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5656
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5657
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5658
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5659
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5660
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5661
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5662
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5663
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5664
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5665
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5666
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5667
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5668
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5669
	}/*function_udint_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5670
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5671
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5672
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5673
 *UDINT_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5674
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5675
	case function_udint_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5676
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5677
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5678
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5679
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5680
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5681
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5682
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5683
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5684
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5685
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5686
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5687
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5688
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5689
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5690
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5691
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5692
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5693
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5694
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5695
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5696
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5697
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5698
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5699
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5700
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5701
	}/*function_udint_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5702
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5703
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5704
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5705
 *UDINT_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5706
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5707
	case function_udint_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5708
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5709
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5710
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5711
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5712
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5713
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5714
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5715
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5716
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5717
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5718
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5719
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5720
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5721
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5722
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5723
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5724
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5725
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5726
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5727
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5728
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5729
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5730
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5731
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5732
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5733
	}/*function_udint_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5734
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5735
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5736
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5737
 *UDINT_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5738
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5739
	case function_udint_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5740
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5741
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5742
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5743
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5744
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5745
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5746
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5747
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5748
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5749
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5750
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5751
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5752
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5753
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5754
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5755
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5756
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5757
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5758
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5759
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5760
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5761
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5762
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5763
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5764
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5765
	}/*function_udint_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5766
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5767
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5768
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5769
 *UDINT_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5770
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5771
	case function_udint_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5772
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5773
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5774
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5775
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5776
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5777
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5778
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5779
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5780
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5781
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5782
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5783
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5784
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5785
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5786
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5787
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5788
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5789
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5790
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5791
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5792
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5793
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5794
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5795
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5796
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5797
	}/*function_udint_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5798
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5799
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5800
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5801
 *UDINT_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5802
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5803
	case function_udint_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5804
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5805
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5806
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5807
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5808
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5809
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5810
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5811
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5812
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5813
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5814
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5815
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5816
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5817
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5818
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5819
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5820
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5821
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5822
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5823
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5824
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5825
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5826
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5827
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5828
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5829
	}/*function_udint_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5830
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5831
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5832
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5833
 *UDINT_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5834
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5835
	case function_udint_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5836
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5837
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5838
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5839
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5840
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5841
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5842
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5843
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5844
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5845
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5846
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5847
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5849
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5850
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5851
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5852
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5853
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5854
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5855
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5856
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5857
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5858
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5859
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5860
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5861
	}/*function_udint_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5862
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5863
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5864
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5865
 *UDINT_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5866
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5867
	case function_udint_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5868
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5869
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5870
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5871
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5872
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5873
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5874
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5875
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5876
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5877
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5878
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5879
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5880
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5881
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5882
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5883
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5884
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5885
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5886
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5887
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5888
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5889
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5890
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5891
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5892
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5893
	}/*function_udint_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5894
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5895
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5896
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5897
 *UDINT_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5898
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5899
	case function_udint_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5900
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5901
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5902
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5903
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5904
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5905
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5906
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5907
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5908
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5909
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5910
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5911
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5912
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5913
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5914
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5915
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5916
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5917
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5918
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5919
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5920
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5921
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5922
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5923
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5924
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5925
	}/*function_udint_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5926
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5927
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5928
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5929
 *UDINT_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5930
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5931
	case function_udint_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5932
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5933
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5934
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5935
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5936
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5937
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5938
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5939
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5940
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5941
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5942
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5943
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5944
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5945
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5946
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5947
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5948
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5949
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5950
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5951
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5952
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5953
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5954
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5955
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5956
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5957
	}/*function_udint_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5958
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5959
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5960
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5961
 *UDINT_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5962
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5963
	case function_udint_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5964
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5965
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5966
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5967
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5968
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5969
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5970
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5971
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5972
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5973
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5974
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5975
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5976
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5977
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5978
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5979
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5980
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5981
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5982
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5983
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5984
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5985
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5986
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5987
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5988
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5989
	}/*function_udint_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5990
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5991
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5992
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5993
 *UDINT_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5994
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5995
	case function_udint_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5996
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5997
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5998
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  5999
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6000
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6001
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6002
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6003
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6004
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6005
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6006
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6007
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6008
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6009
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6010
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6011
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6012
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6013
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6014
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6015
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6016
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6017
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6018
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6019
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6020
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6021
	}/*function_udint_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6022
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6023
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6024
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6025
 *UDINT_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6026
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6027
	case function_udint_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6028
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6029
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6030
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6031
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6032
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6033
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6034
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6035
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6036
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6037
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6038
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6039
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6040
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6041
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6042
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6043
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6044
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6045
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6046
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6047
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6048
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6049
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6050
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6051
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6052
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6053
	}/*function_udint_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6054
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6055
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6056
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6057
 *WORD_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6058
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6059
	case function_word_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6060
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6061
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6062
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6063
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6064
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6065
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6066
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6067
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6068
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6069
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6070
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6071
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6072
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6073
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6074
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6075
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6076
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6077
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6078
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6079
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6080
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6081
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6082
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6083
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6084
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6085
	}/*function_word_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6086
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6087
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6088
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6089
 *WORD_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6090
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6091
	case function_word_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6092
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6093
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6094
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6095
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6096
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6097
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6098
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6099
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6100
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6101
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6102
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6103
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6104
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6105
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6106
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6107
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6108
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6109
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6110
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6111
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6112
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6113
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6114
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6115
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6116
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6117
	}/*function_word_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6118
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6119
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6120
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6121
 *WORD_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6122
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6123
	case function_word_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6124
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6125
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6126
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6127
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6128
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6129
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6130
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6131
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6132
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6133
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6134
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6135
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6136
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6137
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6138
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6139
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6140
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6141
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6142
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6143
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6144
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6145
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6146
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6147
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6148
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6149
	}/*function_word_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6150
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6151
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6152
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6153
 *WORD_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6154
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6155
	case function_word_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6156
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6157
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6158
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6159
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6160
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6161
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6162
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6163
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6164
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6165
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6166
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6167
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6168
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6169
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6170
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6171
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6172
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6173
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6174
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6175
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6176
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6177
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6178
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6179
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6180
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6181
	}/*function_word_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6182
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6183
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6184
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6185
 *WORD_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6186
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6187
	case function_word_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6188
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6189
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6190
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6191
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6192
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6193
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6194
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6195
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6196
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6197
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6198
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6199
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6200
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6201
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6202
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6203
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6204
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6205
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6206
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6207
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6208
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6209
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6210
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6211
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6212
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6213
	}/*function_word_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6214
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6215
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6216
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6217
 *WORD_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6218
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6219
	case function_word_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6220
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6221
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6222
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6223
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6224
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6225
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6226
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6227
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6228
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6229
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6230
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6231
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6232
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6233
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6234
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6235
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6236
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6237
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6238
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6239
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6240
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6241
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6242
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6243
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6244
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6245
	}/*function_word_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6246
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6247
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6248
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6249
 *WORD_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6250
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6251
	case function_word_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6252
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6253
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6254
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6255
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6256
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6257
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6258
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6259
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6260
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6261
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6262
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6263
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6264
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6265
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6266
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6267
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6268
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6269
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6270
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6271
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6272
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6273
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6274
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6275
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6276
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6277
	}/*function_word_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6278
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6279
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6280
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6281
 *WORD_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6282
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6283
	case function_word_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6284
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6285
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6286
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6287
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6288
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6289
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6290
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6291
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6292
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6293
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6294
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6295
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6296
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6297
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6298
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6299
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6300
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6301
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6302
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6303
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6304
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6305
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6306
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6307
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6308
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6309
	}/*function_word_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6310
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6311
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6312
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6313
 *WORD_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6314
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6315
	case function_word_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6316
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6317
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6318
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6319
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6320
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6321
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6322
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6323
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6324
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6325
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6326
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6327
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6328
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6329
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6330
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6331
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6332
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6333
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6334
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6335
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6336
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6337
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6338
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6339
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6340
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6341
	}/*function_word_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6342
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6343
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6344
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6345
 *WORD_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6346
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6347
	case function_word_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6348
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6349
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6350
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6351
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6352
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6353
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6354
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6355
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6356
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6357
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6358
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6359
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6360
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6361
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6362
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6363
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6364
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6365
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6366
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6367
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6368
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6369
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6370
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6371
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6372
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6373
	}/*function_word_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6374
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6375
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6376
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6377
 *WORD_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6378
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6379
	case function_word_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6380
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6381
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6382
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6383
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6384
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6385
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6386
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6387
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6388
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6389
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6390
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6391
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6392
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6393
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6394
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6395
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6396
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6397
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6398
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6399
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6400
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6401
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6402
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6403
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6404
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6405
	}/*function_word_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6406
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6407
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6408
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6409
 *WORD_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6410
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6411
	case function_word_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6412
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6413
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6414
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6415
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6416
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6417
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6418
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6419
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6420
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6421
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6422
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6423
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6424
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6425
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6426
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6427
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6428
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6429
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6430
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6431
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6432
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6433
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6434
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6435
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6436
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6437
	}/*function_word_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6438
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6439
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6440
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6441
 *WORD_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6442
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6443
	case function_word_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6444
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6445
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6446
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6447
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6448
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6449
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6450
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6451
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6452
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6453
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6454
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6455
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6456
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6457
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6458
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6459
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6460
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6461
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6462
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6463
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6464
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6465
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6466
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6467
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6468
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6469
	}/*function_word_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6470
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6471
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6472
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6473
 *WORD_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6474
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6475
	case function_word_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6476
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6477
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6478
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6479
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6480
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6481
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6482
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6483
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6484
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6485
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6486
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6487
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6488
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6489
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6490
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6491
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6492
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6493
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6494
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6495
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6496
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6497
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6498
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6499
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6500
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6501
	}/*function_word_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6502
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6503
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6504
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6505
 *WORD_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6506
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6507
	case function_word_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6508
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6509
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6510
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6511
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6512
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6513
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6514
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6515
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6516
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6517
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6518
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6519
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6520
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6521
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6522
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6523
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6524
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6525
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6526
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6527
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6528
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6529
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6530
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6531
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6532
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6533
	}/*function_word_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6534
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6535
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6536
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6537
 *WORD_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6538
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6539
	case function_word_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6540
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6541
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6542
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6543
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6544
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6545
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6546
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6547
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6548
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6549
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6550
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6551
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6552
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6553
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6554
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6555
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6556
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6557
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6558
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6559
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6560
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6561
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6562
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6563
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6564
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6565
	}/*function_word_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6566
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6567
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6568
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6569
 *WORD_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6570
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6571
	case function_word_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6572
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6573
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6574
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6575
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6576
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6577
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6578
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6579
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6580
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6581
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6582
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6583
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6584
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6585
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6586
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6587
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6588
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6589
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6590
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6591
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6592
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6593
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6594
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6595
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6596
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6597
	}/*function_word_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6598
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6599
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6600
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6601
 *WORD_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6602
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6603
	case function_word_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6604
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6605
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6606
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6607
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6608
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6609
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6610
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6611
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6612
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6613
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6614
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6615
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6616
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6617
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6618
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6619
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6620
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6621
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6622
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6623
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6624
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6625
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6626
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6627
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6628
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6629
	}/*function_word_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6630
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6631
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6632
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6633
 *WORD_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6634
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6635
	case function_word_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6636
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6637
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6638
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6639
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6640
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6641
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6642
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6643
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6644
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6645
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6646
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6647
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6648
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6649
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6650
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6651
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6652
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6653
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6654
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6655
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6656
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6657
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6658
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6659
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6660
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6661
	}/*function_word_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6662
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6663
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6664
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6665
 *WORD_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6666
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6667
	case function_word_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6668
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6669
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6670
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6671
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6672
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6673
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6674
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6675
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6676
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6677
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6678
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6679
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6680
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6681
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6682
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6683
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6684
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6685
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6686
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6687
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6688
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6689
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6690
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6691
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6692
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6693
	}/*function_word_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6694
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6695
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6696
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6697
 *WORD_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6698
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6699
	case function_word_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6700
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6701
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6702
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6703
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6704
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6705
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6706
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6707
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6708
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6709
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6710
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6711
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6712
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6713
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6714
			if (typeid(*last_type_symbol) == typeid(word_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6715
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6716
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6717
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6718
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6719
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6720
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6721
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6722
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6723
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6724
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6725
	}/*function_word_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6726
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6727
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6728
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6729
 *WSTRING_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6730
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6731
	case function_wstring_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6732
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6733
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6734
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6735
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6736
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6737
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6738
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6739
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6740
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6741
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6742
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6743
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6744
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6745
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6746
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6747
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6748
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6749
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6750
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6751
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6752
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6753
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6754
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6755
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6756
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6757
	}/*function_wstring_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6758
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6759
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6760
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6761
 *WSTRING_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6762
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6763
	case function_wstring_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6764
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6765
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6766
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6767
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6768
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6769
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6770
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6771
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6772
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6773
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6774
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6775
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6776
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6777
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6778
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6779
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6780
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6781
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6782
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6783
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6784
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6785
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6786
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6787
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6788
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6789
	}/*function_wstring_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6790
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6791
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6792
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6793
 *WSTRING_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6794
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6795
	case function_wstring_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6796
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6797
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6798
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6799
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6800
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6801
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6802
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6803
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6804
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6805
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6806
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6807
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6808
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6809
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6810
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6811
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6812
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6813
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6814
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6815
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6816
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6817
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6818
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6819
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6820
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6821
	}/*function_wstring_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6822
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6823
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6824
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6825
 *WSTRING_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6826
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6827
	case function_wstring_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6828
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6829
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6830
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6831
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6832
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6833
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6834
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6835
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6836
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6837
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6838
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6839
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6840
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6841
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6842
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6843
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6844
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6845
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6846
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6847
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6848
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6849
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6850
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6851
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6852
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6853
	}/*function_wstring_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6854
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6855
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6856
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6857
 *WSTRING_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6858
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6859
	case function_wstring_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6860
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6861
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6862
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6863
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6864
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6865
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6866
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6867
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6868
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6869
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6870
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6871
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6872
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6873
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6874
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6875
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6876
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6877
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6878
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6879
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6880
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6881
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6882
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6883
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6884
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6885
	}/*function_wstring_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6886
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6887
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6888
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6889
 *WSTRING_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6890
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6891
	case function_wstring_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6892
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6893
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6894
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6895
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6896
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6897
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6898
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6899
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6900
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6901
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6902
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6903
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6904
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6905
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6906
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6907
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6908
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6909
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6910
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6911
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6912
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6913
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6914
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6915
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6916
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6917
	}/*function_wstring_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6918
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6919
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6920
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6921
 *WSTRING_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6922
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6923
	case function_wstring_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6924
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6925
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6926
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6927
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6928
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6929
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6930
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6931
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6932
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6933
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6934
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6935
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6936
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6937
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6938
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6939
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6940
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6941
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6942
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6943
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6944
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6945
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6946
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6947
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6948
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6949
	}/*function_wstring_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6950
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6951
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6952
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6953
 *WSTRING_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6954
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6955
	case function_wstring_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6956
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6957
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6958
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6959
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6960
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6961
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6962
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6963
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6964
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6965
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6966
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6967
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6968
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6969
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6970
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6971
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6972
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6973
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6974
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6975
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6976
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6977
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6978
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6979
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6980
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6981
	}/*function_wstring_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6982
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6983
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6984
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6985
 *WSTRING_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6986
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6987
	case function_wstring_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6988
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6989
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6990
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6991
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6992
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6993
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6994
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6995
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6996
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6997
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6998
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  6999
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7000
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7001
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7002
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7003
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7004
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7005
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7006
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7007
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7008
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7009
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7010
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7011
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7012
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7013
	}/*function_wstring_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7014
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7015
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7016
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7017
 *WSTRING_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7018
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7019
	case function_wstring_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7020
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7021
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7022
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7023
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7024
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7025
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7026
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7027
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7028
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7029
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7030
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7031
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7032
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7033
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7034
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7035
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7036
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7037
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7038
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7039
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7040
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7041
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7042
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7043
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7044
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7045
	}/*function_wstring_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7046
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7047
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7048
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7049
 *WSTRING_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7050
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7051
	case function_wstring_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7052
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7053
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7054
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7055
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7056
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7057
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7058
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7059
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7060
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7061
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7062
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7063
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7064
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7065
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7066
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7067
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7068
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7069
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7070
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7071
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7072
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7073
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7074
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7075
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7076
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7077
	}/*function_wstring_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7078
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7079
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7080
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7081
 *WSTRING_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7082
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7083
	case function_wstring_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7084
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7085
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7086
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7087
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7088
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7089
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7090
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7091
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7092
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7093
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7094
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7095
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7096
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7097
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7098
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7099
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7100
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7101
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7102
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7103
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7104
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7105
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7106
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7107
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7108
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7109
	}/*function_wstring_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7110
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7111
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7112
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7113
 *WSTRING_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7114
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7115
	case function_wstring_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7116
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7117
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7118
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7119
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7120
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7121
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7122
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7123
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7124
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7125
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7126
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7127
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7128
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7129
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7130
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7131
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7132
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7133
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7134
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7135
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7136
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7137
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7138
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7139
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7140
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7141
	}/*function_wstring_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7142
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7143
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7144
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7145
 *WSTRING_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7146
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7147
	case function_wstring_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7148
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7149
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7150
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7151
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7152
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7153
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7154
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7155
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7156
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7157
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7158
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7159
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7160
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7161
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7162
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7163
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7164
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7165
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7166
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7167
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7168
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7169
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7170
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7171
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7172
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7173
	}/*function_wstring_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7174
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7175
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7176
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7177
 *WSTRING_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7178
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7179
	case function_wstring_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7180
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7181
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7182
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7183
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7184
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7185
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7186
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7187
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7188
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7189
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7190
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7191
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7192
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7193
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7194
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7195
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7196
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7197
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7198
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7199
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7200
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7201
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7202
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7203
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7204
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7205
	}/*function_wstring_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7206
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7207
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7208
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7209
 *WSTRING_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7210
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7211
	case function_wstring_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7212
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7213
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7214
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7215
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7216
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7217
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7218
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7219
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7220
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7221
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7222
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7223
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7224
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7225
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7226
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7227
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7228
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7229
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7230
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7231
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7232
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7233
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7234
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7235
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7236
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7237
	}/*function_wstring_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7238
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7239
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7240
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7241
 *WSTRING_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7242
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7243
	case function_wstring_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7244
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7245
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7246
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7247
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7248
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7249
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7250
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7251
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7252
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7253
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7254
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7255
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7256
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7257
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7258
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7259
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7260
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7261
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7262
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7263
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7264
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7265
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7266
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7267
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7268
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7269
	}/*function_wstring_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7270
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7271
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7272
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7273
 *WSTRING_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7274
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7275
	case function_wstring_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7276
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7277
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7278
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7279
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7280
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7281
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7282
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7283
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7284
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7285
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7286
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7287
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7288
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7289
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7290
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7291
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7292
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7293
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7294
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7295
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7296
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7297
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7298
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7299
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7300
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7301
	}/*function_wstring_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7302
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7303
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7304
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7305
 *WSTRING_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7306
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7307
	case function_wstring_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7308
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7309
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7310
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7311
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7312
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7313
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7314
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7315
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7316
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7317
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7318
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7319
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7320
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7321
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7322
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7323
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7324
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7325
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7326
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7327
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7328
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7329
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7330
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7331
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7332
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7333
	}/*function_wstring_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7334
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7335
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7336
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7337
 *WSTRING_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7338
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7339
	case function_wstring_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7340
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7341
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7342
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7343
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7344
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7345
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7346
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7347
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7348
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7349
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7350
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7351
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7352
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7353
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7354
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7355
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7356
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7357
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7358
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7359
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7360
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7361
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7362
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7363
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7364
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7365
	}/*function_wstring_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7366
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7367
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7368
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7369
 *WSTRING_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7370
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7371
	case function_wstring_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7372
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7373
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7374
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7375
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7376
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7377
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7378
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7379
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7380
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7381
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7382
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7383
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7384
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7385
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7386
			if (typeid(*last_type_symbol) == typeid(wstring_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7387
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7388
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7389
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7390
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7391
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7392
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7393
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7394
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7395
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7396
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7397
	}/*function_wstring_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7398
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7399
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7400
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7401
 *STRING_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7402
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7403
	case function_string_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7404
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7405
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7406
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7407
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7408
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7409
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7410
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7411
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7412
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7413
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7414
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7415
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7416
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7417
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7418
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7419
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7420
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7421
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7422
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7423
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7424
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7425
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7426
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7427
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7428
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7429
	}/*function_string_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7430
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7431
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7432
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7433
 *STRING_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7434
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7435
	case function_string_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7436
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7437
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7438
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7439
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7440
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7441
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7442
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7443
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7444
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7445
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7446
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7447
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7448
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7449
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7450
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7451
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7452
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7453
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7454
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7455
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7456
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7457
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7458
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7459
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7460
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7461
	}/*function_string_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7462
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7463
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7464
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7465
 *STRING_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7466
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7467
	case function_string_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7468
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7469
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7470
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7471
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7472
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7473
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7474
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7475
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7476
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7477
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7478
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7479
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7480
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7481
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7482
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7483
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7484
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7485
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7486
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7487
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7488
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7489
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7490
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7491
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7492
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7493
	}/*function_string_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7494
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7495
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7496
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7497
 *STRING_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7498
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7499
	case function_string_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7500
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7501
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7502
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7503
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7504
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7505
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7506
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7507
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7508
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7509
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7510
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7511
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7512
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7513
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7514
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7515
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7516
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7517
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7518
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7519
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7520
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7521
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7522
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7523
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7524
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7525
	}/*function_string_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7526
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7527
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7528
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7529
 *STRING_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7530
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7531
	case function_string_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7532
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7533
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7534
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7535
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7536
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7537
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7538
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7539
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7540
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7541
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7542
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7543
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7544
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7545
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7546
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7547
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7548
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7549
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7550
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7551
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7552
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7553
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7554
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7555
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7556
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7557
	}/*function_string_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7558
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7559
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7560
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7561
 *STRING_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7562
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7563
	case function_string_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7564
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7565
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7566
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7567
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7568
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7569
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7570
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7571
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7572
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7573
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7574
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7575
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7576
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7577
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7578
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7579
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7580
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7581
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7582
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7583
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7584
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7585
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7586
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7587
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7588
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7589
	}/*function_string_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7590
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7591
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7592
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7593
 *STRING_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7594
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7595
	case function_string_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7596
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7597
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7598
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7599
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7600
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7601
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7602
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7603
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7604
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7605
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7606
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7607
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7608
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7609
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7610
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7611
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7612
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7613
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7614
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7615
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7616
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7617
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7618
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7619
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7620
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7621
	}/*function_string_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7622
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7623
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7624
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7625
 *STRING_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7626
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7627
	case function_string_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7628
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7629
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7630
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7631
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7632
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7633
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7634
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7635
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7636
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7637
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7638
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7639
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7640
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7641
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7642
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7643
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7644
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7645
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7646
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7647
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7648
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7649
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7650
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7651
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7652
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7653
	}/*function_string_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7654
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7655
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7656
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7657
 *STRING_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7658
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7659
	case function_string_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7660
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7661
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7662
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7663
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7664
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7665
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7666
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7667
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7668
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7669
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7670
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7671
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7672
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7673
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7674
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7675
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7676
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7677
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7678
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7679
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7680
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7681
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7682
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7683
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7684
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7685
	}/*function_string_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7686
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7687
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7688
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7689
 *STRING_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7690
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7691
	case function_string_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7692
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7693
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7694
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7695
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7696
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7697
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7698
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7699
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7700
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7701
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7702
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7703
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7704
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7705
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7706
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7707
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7708
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7709
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7710
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7711
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7712
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7713
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7714
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7715
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7716
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7717
	}/*function_string_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7718
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7719
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7720
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7721
 *STRING_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7722
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7723
	case function_string_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7724
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7725
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7726
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7727
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7728
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7729
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7730
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7731
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7732
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7733
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7734
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7735
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7736
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7737
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7738
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7739
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7740
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7741
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7742
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7743
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7744
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7745
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7746
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7747
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7748
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7749
	}/*function_string_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7750
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7751
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7752
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7753
 *STRING_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7754
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7755
	case function_string_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7756
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7757
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7758
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7759
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7760
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7761
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7762
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7763
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7764
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7765
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7766
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7767
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7768
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7769
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7770
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7771
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7772
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7773
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7774
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7775
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7776
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7777
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7778
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7779
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7780
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7781
	}/*function_string_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7782
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7783
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7784
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7785
 *STRING_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7786
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7787
	case function_string_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7788
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7789
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7790
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7791
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7792
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7793
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7794
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7795
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7796
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7797
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7798
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7799
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7800
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7801
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7802
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7803
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7804
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7805
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7806
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7807
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7808
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7809
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7810
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7811
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7812
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7813
	}/*function_string_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7814
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7815
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7816
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7817
 *STRING_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7818
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7819
	case function_string_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7820
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7821
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7822
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7823
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7824
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7825
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7826
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7827
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7828
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7829
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7830
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7831
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7832
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7833
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7834
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7835
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7836
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7837
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7838
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7839
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7840
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7841
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7842
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7843
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7844
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7845
	}/*function_string_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7846
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7847
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7848
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7849
 *STRING_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7850
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7851
	case function_string_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7852
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7853
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7854
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7855
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7856
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7857
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7858
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7859
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7860
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7861
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7862
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7863
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7864
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7865
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7866
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7867
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7868
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7869
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7870
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7871
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7872
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7873
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7874
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7875
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7876
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7877
	}/*function_string_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7878
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7879
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7880
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7881
 *STRING_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7882
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7883
	case function_string_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7884
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7885
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7886
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7887
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7888
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7889
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7890
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7891
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7892
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7893
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7894
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7895
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7896
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7897
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7898
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7899
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7900
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7901
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7902
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7903
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7904
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7905
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7906
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7907
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7908
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7909
	}/*function_string_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7910
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7911
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7912
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7913
 *STRING_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7914
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7915
	case function_string_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7916
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7917
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7918
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7919
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7920
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7921
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7922
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7923
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7924
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7925
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7926
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7927
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7928
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7929
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7930
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7931
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7932
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7933
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7934
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7935
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7936
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7937
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7938
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7939
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7940
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7941
	}/*function_string_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7942
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7943
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7944
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7945
 *STRING_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7946
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7947
	case function_string_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7948
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7949
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7950
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7951
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7952
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7953
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7954
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7955
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7956
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7957
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7958
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7959
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7961
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7962
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7963
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7964
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7965
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7966
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7967
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7968
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7969
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7970
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7971
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7972
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7973
	}/*function_string_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7974
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7975
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7976
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7977
 *STRING_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7978
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7979
	case function_string_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7980
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7981
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7982
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7983
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7984
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7985
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7986
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7987
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7988
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7989
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7990
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7991
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7992
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7993
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7994
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7995
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7996
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7997
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7998
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  7999
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8000
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8001
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8002
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8003
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8004
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8005
	}/*function_string_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8006
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8007
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8008
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8009
 *STRING_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8010
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8011
	case function_string_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8012
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8013
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8014
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8015
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8016
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8017
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8018
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8019
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8020
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8021
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8022
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8023
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8024
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8025
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8026
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8027
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8028
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8029
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8030
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8031
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8032
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8033
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8034
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8035
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8036
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8037
	}/*function_string_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8038
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8039
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8040
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8041
 *STRING_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8042
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8043
	case function_string_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8044
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8045
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8046
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8047
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8048
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8049
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8050
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8051
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8052
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8053
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8054
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8055
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8056
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8057
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8058
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8059
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8060
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8061
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8062
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8063
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8064
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8065
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8066
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8067
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8068
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8069
	}/*function_string_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8070
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8071
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8072
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8073
 *LWORD_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8074
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8075
	case function_lword_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8076
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8077
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8078
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8079
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8080
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8081
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8082
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8083
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8084
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8085
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8086
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8087
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8088
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8089
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8090
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8091
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8092
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8093
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8094
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8095
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8096
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8097
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8098
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8099
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8100
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8101
	}/*function_lword_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8102
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8103
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8104
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8105
 *LWORD_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8106
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8107
	case function_lword_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8108
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8109
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8110
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8111
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8112
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8113
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8114
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8115
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8116
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8117
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8118
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8119
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8120
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8121
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8122
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8123
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8124
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8125
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8126
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8127
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8128
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8129
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8130
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8131
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8132
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8133
	}/*function_lword_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8134
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8135
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8136
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8137
 *LWORD_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8138
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8139
	case function_lword_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8140
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8141
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8142
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8143
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8144
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8145
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8146
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8147
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8148
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8149
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8150
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8151
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8152
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8153
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8154
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8155
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8156
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8157
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8158
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8159
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8160
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8161
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8162
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8163
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8164
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8165
	}/*function_lword_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8166
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8167
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8168
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8169
 *LWORD_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8170
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8171
	case function_lword_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8172
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8173
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8174
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8175
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8176
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8177
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8178
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8179
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8180
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8181
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8182
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8183
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8184
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8185
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8186
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8187
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8188
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8189
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8190
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8191
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8192
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8193
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8194
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8195
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8196
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8197
	}/*function_lword_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8198
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8199
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8200
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8201
 *LWORD_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8202
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8203
	case function_lword_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8204
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8205
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8206
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8207
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8208
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8209
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8210
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8211
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8212
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8213
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8214
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8215
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8216
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8217
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8218
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8219
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8220
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8221
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8222
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8223
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8224
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8225
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8226
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8227
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8228
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8229
	}/*function_lword_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8230
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8231
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8232
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8233
 *LWORD_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8234
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8235
	case function_lword_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8236
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8237
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8238
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8239
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8240
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8241
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8242
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8243
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8244
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8245
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8246
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8247
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8248
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8249
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8250
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8251
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8252
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8253
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8254
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8255
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8256
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8257
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8258
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8259
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8260
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8261
	}/*function_lword_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8262
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8263
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8264
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8265
 *LWORD_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8266
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8267
	case function_lword_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8268
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8269
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8270
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8271
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8272
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8273
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8274
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8275
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8276
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8277
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8278
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8279
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8280
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8281
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8282
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8283
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8284
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8285
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8286
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8287
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8288
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8289
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8290
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8291
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8292
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8293
	}/*function_lword_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8294
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8295
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8296
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8297
 *LWORD_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8298
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8299
	case function_lword_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8300
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8301
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8302
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8303
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8304
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8305
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8306
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8307
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8308
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8309
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8310
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8311
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8312
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8313
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8314
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8315
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8316
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8317
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8318
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8319
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8320
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8321
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8322
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8323
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8324
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8325
	}/*function_lword_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8326
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8327
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8328
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8329
 *LWORD_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8330
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8331
	case function_lword_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8332
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8333
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8334
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8335
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8336
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8337
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8338
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8339
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8340
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8341
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8342
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8343
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8344
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8345
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8346
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8347
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8348
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8349
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8350
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8351
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8352
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8353
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8354
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8355
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8356
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8357
	}/*function_lword_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8358
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8359
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8360
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8361
 *LWORD_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8362
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8363
	case function_lword_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8364
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8365
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8366
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8367
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8368
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8369
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8370
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8371
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8372
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8373
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8374
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8375
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8376
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8377
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8378
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8379
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8380
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8381
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8382
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8383
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8384
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8385
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8386
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8387
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8388
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8389
	}/*function_lword_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8390
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8391
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8392
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8393
 *LWORD_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8394
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8395
	case function_lword_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8396
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8397
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8398
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8399
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8400
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8401
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8402
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8403
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8404
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8405
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8406
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8407
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8408
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8409
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8410
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8411
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8412
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8413
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8414
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8415
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8416
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8417
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8418
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8419
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8420
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8421
	}/*function_lword_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8422
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8423
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8424
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8425
 *LWORD_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8426
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8427
	case function_lword_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8428
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8429
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8430
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8431
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8432
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8433
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8434
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8435
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8436
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8437
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8438
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8439
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8440
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8441
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8442
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8443
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8444
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8445
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8446
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8447
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8448
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8449
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8450
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8451
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8452
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8453
	}/*function_lword_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8454
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8455
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8456
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8457
 *LWORD_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8458
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8459
	case function_lword_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8460
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8461
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8462
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8463
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8464
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8465
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8466
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8467
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8468
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8469
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8470
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8471
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8472
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8473
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8474
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8475
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8476
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8477
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8478
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8479
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8480
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8481
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8482
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8483
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8484
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8485
	}/*function_lword_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8486
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8487
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8488
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8489
 *LWORD_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8490
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8491
	case function_lword_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8492
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8493
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8494
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8495
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8496
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8497
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8498
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8499
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8500
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8501
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8502
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8503
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8504
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8505
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8506
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8507
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8508
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8509
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8510
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8511
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8512
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8513
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8514
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8515
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8516
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8517
	}/*function_lword_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8518
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8519
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8520
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8521
 *LWORD_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8522
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8523
	case function_lword_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8524
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8525
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8526
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8527
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8528
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8529
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8530
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8531
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8532
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8533
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8534
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8535
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8536
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8537
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8538
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8539
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8540
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8541
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8542
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8543
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8544
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8545
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8546
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8547
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8548
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8549
	}/*function_lword_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8550
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8551
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8552
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8553
 *LWORD_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8554
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8555
	case function_lword_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8556
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8557
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8558
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8559
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8560
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8561
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8562
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8563
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8564
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8565
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8566
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8567
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8568
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8569
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8570
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8571
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8572
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8573
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8574
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8575
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8576
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8577
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8578
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8579
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8580
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8581
	}/*function_lword_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8582
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8583
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8584
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8585
 *LWORD_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8586
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8587
	case function_lword_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8588
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8589
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8590
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8591
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8592
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8593
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8594
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8595
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8596
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8597
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8598
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8599
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8600
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8601
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8602
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8603
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8604
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8605
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8606
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8607
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8608
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8609
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8610
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8611
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8612
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8613
	}/*function_lword_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8614
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8615
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8616
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8617
 *LWORD_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8618
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8619
	case function_lword_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8620
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8621
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8622
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8623
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8624
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8625
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8626
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8627
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8628
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8629
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8630
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8631
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8632
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8633
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8634
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8635
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8636
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8637
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8638
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8639
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8640
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8641
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8642
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8643
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8644
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8645
	}/*function_lword_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8646
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8647
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8648
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8649
 *LWORD_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8650
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8651
	case function_lword_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8652
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8653
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8654
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8655
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8656
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8657
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8658
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8659
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8660
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8661
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8662
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8663
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8664
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8665
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8666
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8667
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8668
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8669
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8670
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8671
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8672
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8673
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8674
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8675
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8676
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8677
	}/*function_lword_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8678
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8679
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8680
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8681
 *LWORD_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8682
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8683
	case function_lword_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8684
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8685
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8686
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8687
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8688
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8689
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8690
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8691
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8692
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8693
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8694
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8695
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8696
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8697
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8698
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8699
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8700
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8701
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8702
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8703
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8704
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8705
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8706
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8707
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8708
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8709
	}/*function_lword_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8710
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8711
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8712
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8713
 *LWORD_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8714
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8715
	case function_lword_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8716
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8717
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8718
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8719
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8720
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8721
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8722
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8723
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8724
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8725
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8726
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8727
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8728
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8729
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8730
			if (typeid(*last_type_symbol) == typeid(lword_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8731
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8732
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8733
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8734
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8735
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8736
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8737
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8738
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8739
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8740
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8741
	}/*function_lword_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8742
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8743
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8744
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8745
 *UINT_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8746
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8747
	case function_uint_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8748
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8749
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8750
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8751
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8752
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8753
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8754
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8755
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8756
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8757
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8758
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8759
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8760
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8761
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8762
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8763
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8764
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8765
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8766
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8767
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8768
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8769
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8770
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8771
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8772
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8773
	}/*function_uint_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8774
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8775
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8776
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8777
 *UINT_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8778
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8779
	case function_uint_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8780
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8781
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8782
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8783
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8784
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8785
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8786
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8787
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8788
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8789
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8790
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8791
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8792
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8793
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8794
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8795
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8796
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8797
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8798
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8799
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8800
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8801
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8802
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8803
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8804
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8805
	}/*function_uint_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8806
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8807
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8808
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8809
 *UINT_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8810
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8811
	case function_uint_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8812
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8813
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8814
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8815
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8816
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8817
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8818
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8819
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8820
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8821
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8822
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8823
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8824
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8825
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8826
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8827
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8828
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8829
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8830
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8831
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8832
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8833
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8834
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8835
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8836
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8837
	}/*function_uint_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8838
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8839
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8840
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8841
 *UINT_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8842
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8843
	case function_uint_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8844
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8845
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8846
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8847
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8848
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8849
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8850
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8851
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8852
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8853
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8854
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8855
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8856
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8857
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8858
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8859
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8860
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8861
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8862
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8863
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8864
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8865
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8866
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8867
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8868
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8869
	}/*function_uint_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8870
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8871
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8872
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8873
 *UINT_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8874
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8875
	case function_uint_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8876
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8877
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8878
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8879
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8880
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8881
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8882
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8883
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8884
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8885
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8886
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8887
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8888
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8889
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8890
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8891
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8892
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8893
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8894
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8895
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8896
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8897
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8898
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8899
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8900
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8901
	}/*function_uint_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8902
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8903
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8904
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8905
 *UINT_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8906
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8907
	case function_uint_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8908
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8909
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8910
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8911
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8912
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8913
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8914
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8915
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8916
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8917
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8918
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8919
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8920
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8921
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8922
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8923
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8924
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8925
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8926
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8927
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8928
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8929
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8930
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8931
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8932
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8933
	}/*function_uint_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8934
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8935
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8936
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8937
 *UINT_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8938
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8939
	case function_uint_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8940
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8941
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8942
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8943
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8944
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8945
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8946
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8947
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8948
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8949
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8950
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8951
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8952
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8953
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8954
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8955
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8956
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8957
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8958
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8959
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8960
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8961
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8962
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8963
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8964
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8965
	}/*function_uint_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8966
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8967
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8968
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8969
 *UINT_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8970
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8971
	case function_uint_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8972
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8973
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8974
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8975
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8976
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8977
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8978
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8979
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8980
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8981
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8982
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8983
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8984
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8985
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8986
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8987
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8988
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8989
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8990
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8991
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8992
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8993
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8994
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8995
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8996
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8997
	}/*function_uint_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8998
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  8999
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9000
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9001
 *UINT_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9002
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9003
	case function_uint_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9004
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9005
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9006
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9007
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9008
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9009
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9010
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9011
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9012
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9013
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9014
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9015
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9016
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9017
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9018
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9019
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9020
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9021
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9022
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9023
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9024
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9025
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9026
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9027
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9028
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9029
	}/*function_uint_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9030
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9031
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9032
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9033
 *UINT_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9034
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9035
	case function_uint_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9036
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9037
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9038
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9039
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9040
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9041
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9042
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9043
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9044
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9045
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9046
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9047
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9048
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9049
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9050
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9051
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9052
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9053
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9054
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9055
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9056
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9057
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9058
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9059
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9060
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9061
	}/*function_uint_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9062
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9063
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9064
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9065
 *UINT_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9066
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9067
	case function_uint_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9068
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9069
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9070
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9071
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9072
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9073
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9074
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9075
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9076
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9077
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9078
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9079
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9080
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9081
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9082
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9083
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9084
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9085
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9086
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9087
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9088
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9089
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9090
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9091
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9092
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9093
	}/*function_uint_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9094
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9095
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9096
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9097
 *UINT_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9098
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9099
	case function_uint_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9100
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9101
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9102
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9103
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9104
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9105
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9106
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9107
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9108
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9109
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9110
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9111
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9112
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9113
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9114
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9115
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9116
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9117
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9118
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9119
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9120
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9121
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9122
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9123
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9124
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9125
	}/*function_uint_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9126
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9127
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9128
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9129
 *UINT_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9130
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9131
	case function_uint_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9132
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9133
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9134
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9135
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9136
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9137
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9138
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9139
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9140
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9141
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9142
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9143
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9145
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9146
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9147
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9148
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9149
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9150
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9151
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9152
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9153
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9154
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9155
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9156
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9157
	}/*function_uint_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9158
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9159
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9160
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9161
 *UINT_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9162
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9163
	case function_uint_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9164
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9165
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9166
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9167
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9168
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9169
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9170
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9171
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9172
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9173
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9174
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9175
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9176
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9177
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9178
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9179
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9180
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9181
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9182
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9183
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9184
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9185
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9186
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9187
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9188
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9189
	}/*function_uint_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9190
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9191
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9192
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9193
 *UINT_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9194
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9195
	case function_uint_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9196
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9197
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9198
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9199
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9200
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9201
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9202
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9203
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9204
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9205
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9206
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9207
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9208
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9209
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9210
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9211
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9212
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9213
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9214
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9215
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9216
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9217
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9218
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9219
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9220
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9221
	}/*function_uint_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9222
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9223
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9224
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9225
 *UINT_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9226
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9227
	case function_uint_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9228
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9229
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9230
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9231
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9232
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9233
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9234
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9235
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9236
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9237
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9238
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9239
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9240
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9241
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9242
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9243
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9244
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9245
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9246
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9247
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9248
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9249
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9250
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9251
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9252
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9253
	}/*function_uint_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9254
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9255
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9256
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9257
 *UINT_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9258
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9259
	case function_uint_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9260
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9261
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9262
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9263
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9264
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9265
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9266
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9267
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9268
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9269
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9270
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9271
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9272
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9273
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9274
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9275
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9276
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9277
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9278
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9279
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9280
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9281
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9282
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9283
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9284
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9285
	}/*function_uint_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9286
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9287
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9288
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9289
 *UINT_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9290
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9291
	case function_uint_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9292
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9293
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9294
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9295
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9296
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9297
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9298
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9299
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9300
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9301
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9302
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9303
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9304
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9305
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9306
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9307
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9308
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9309
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9310
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9311
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9312
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9313
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9314
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9315
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9316
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9317
	}/*function_uint_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9318
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9319
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9320
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9321
 *UINT_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9322
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9323
	case function_uint_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9324
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9325
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9326
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9327
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9328
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9329
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9330
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9331
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9332
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9333
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9334
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9335
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9336
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9337
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9338
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9339
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9340
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9341
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9342
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9343
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9344
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9345
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9346
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9347
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9348
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9349
	}/*function_uint_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9350
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9351
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9352
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9353
 *UINT_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9354
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9355
	case function_uint_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9356
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9357
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9358
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9359
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9360
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9361
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9362
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9363
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9364
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9365
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9366
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9367
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9368
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9369
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9370
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9371
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9372
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9373
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9374
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9375
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9376
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9377
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9378
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9379
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9380
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9381
	}/*function_uint_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9382
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9383
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9384
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9385
 *UINT_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9386
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9387
	case function_uint_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9388
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9389
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9390
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9391
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9392
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9393
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9394
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9395
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9396
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9397
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9398
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9399
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9400
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9401
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9402
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9403
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9404
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9405
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9406
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9407
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9408
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9409
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9410
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9411
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9412
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9413
	}/*function_uint_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9414
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9415
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9416
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9417
 *LREAL_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9418
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9419
	case function_lreal_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9420
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9421
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9422
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9423
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9424
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9425
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9426
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9427
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9428
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9429
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9430
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9431
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9432
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9433
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9434
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9435
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9436
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9437
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9438
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9439
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9440
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9441
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9442
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9443
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9444
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9445
	}/*function_lreal_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9446
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9447
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9448
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9449
 *LREAL_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9450
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9451
	case function_lreal_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9452
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9453
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9454
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9455
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9456
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9457
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9458
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9459
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9460
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9461
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9462
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9463
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9464
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9465
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9466
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9467
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9468
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9469
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9470
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9471
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9472
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9473
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9474
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9475
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9476
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9477
	}/*function_lreal_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9478
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9479
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9480
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9481
 *LREAL_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9482
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9483
	case function_lreal_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9484
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9485
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9486
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9487
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9488
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9489
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9490
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9491
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9492
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9493
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9494
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9495
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9496
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9497
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9498
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9499
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9500
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9501
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9502
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9503
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9504
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9505
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9506
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9507
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9508
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9509
	}/*function_lreal_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9510
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9511
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9512
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9513
 *LREAL_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9514
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9515
	case function_lreal_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9516
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9517
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9518
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9519
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9520
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9521
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9522
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9523
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9524
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9525
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9526
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9527
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9528
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9529
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9530
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9531
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9532
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9533
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9534
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9535
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9536
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9537
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9538
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9539
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9540
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9541
	}/*function_lreal_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9542
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9543
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9544
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9545
 *LREAL_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9546
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9547
	case function_lreal_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9548
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9549
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9550
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9551
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9552
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9553
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9554
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9555
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9556
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9557
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9558
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9559
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9560
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9561
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9562
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9563
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9564
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9565
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9566
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9567
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9568
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9569
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9570
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9571
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9572
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9573
	}/*function_lreal_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9574
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9575
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9576
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9577
 *LREAL_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9578
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9579
	case function_lreal_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9580
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9581
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9582
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9583
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9584
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9585
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9586
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9587
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9588
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9589
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9590
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9591
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9592
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9593
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9594
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9595
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9596
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9597
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9598
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9599
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9600
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9601
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9602
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9603
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9604
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9605
	}/*function_lreal_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9606
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9607
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9608
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9609
 *LREAL_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9610
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9611
	case function_lreal_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9612
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9613
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9614
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9615
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9616
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9617
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9618
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9619
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9620
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9621
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9622
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9623
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9624
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9625
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9626
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9627
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9628
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9629
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9630
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9631
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9632
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9633
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9634
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9635
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9636
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9637
	}/*function_lreal_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9638
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9639
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9640
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9641
 *LREAL_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9642
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9643
	case function_lreal_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9644
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9645
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9646
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9647
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9648
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9649
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9650
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9651
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9652
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9653
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9654
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9655
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9656
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9657
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9658
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9659
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9660
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9661
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9662
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9663
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9664
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9665
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9666
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9667
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9668
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9669
	}/*function_lreal_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9670
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9671
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9672
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9673
 *LREAL_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9674
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9675
	case function_lreal_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9676
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9677
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9678
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9679
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9680
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9681
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9682
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9683
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9684
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9685
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9686
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9687
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9688
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9689
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9690
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9691
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9692
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9693
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9694
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9695
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9696
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9697
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9698
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9699
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9700
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9701
	}/*function_lreal_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9702
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9703
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9704
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9705
 *LREAL_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9706
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9707
	case function_lreal_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9708
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9709
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9710
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9711
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9712
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9713
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9714
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9715
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9716
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9717
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9718
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9719
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9720
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9721
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9722
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9723
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9724
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9725
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9726
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9727
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9728
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9729
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9730
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9731
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9732
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9733
	}/*function_lreal_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9734
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9735
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9736
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9737
 *LREAL_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9738
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9739
	case function_lreal_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9740
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9741
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9742
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9743
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9744
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9745
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9746
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9747
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9748
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9749
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9750
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9751
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9752
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9753
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9754
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9755
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9756
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9757
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9758
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9759
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9760
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9761
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9762
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9763
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9764
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9765
	}/*function_lreal_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9766
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9767
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9768
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9769
 *LREAL_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9770
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9771
	case function_lreal_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9772
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9773
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9774
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9775
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9776
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9777
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9778
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9779
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9780
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9781
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9782
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9783
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9784
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9785
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9786
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9787
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9788
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9789
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9790
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9791
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9792
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9793
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9794
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9795
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9796
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9797
	}/*function_lreal_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9798
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9799
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9800
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9801
 *LREAL_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9802
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9803
	case function_lreal_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9804
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9805
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9806
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9807
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9808
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9809
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9810
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9811
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9812
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9813
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9814
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9815
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9816
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9817
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9818
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9819
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9820
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9821
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9822
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9823
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9824
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9825
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9826
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9827
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9828
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9829
	}/*function_lreal_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9830
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9831
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9832
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9833
 *LREAL_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9834
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9835
	case function_lreal_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9836
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9837
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9838
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9839
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9840
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9841
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9842
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9843
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9844
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9845
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9846
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9847
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9848
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9849
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9850
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9851
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9852
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9853
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9854
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9855
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9856
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9857
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9858
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9859
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9860
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9861
	}/*function_lreal_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9862
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9863
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9864
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9865
 *LREAL_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9866
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9867
	case function_lreal_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9868
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9869
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9870
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9871
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9872
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9873
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9874
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9875
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9876
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9877
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9878
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9879
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9880
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9881
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9882
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9883
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9884
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9885
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9886
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9887
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9888
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9889
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9890
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9891
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9892
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9893
	}/*function_lreal_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9894
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9895
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9896
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9897
 *LREAL_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9898
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9899
	case function_lreal_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9900
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9901
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9902
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9903
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9904
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9905
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9906
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9907
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9908
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9909
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9910
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9911
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9912
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9913
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9914
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9915
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9916
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9917
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9918
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9919
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9920
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9921
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9922
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9923
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9924
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9925
	}/*function_lreal_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9926
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9927
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9928
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9929
 *LREAL_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9930
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9931
	case function_lreal_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9932
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9933
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9934
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9935
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9936
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9937
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9938
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9939
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9940
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9941
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9942
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9943
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9944
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9945
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9946
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9947
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9948
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9949
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9950
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9951
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9952
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9953
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9954
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9955
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9956
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9957
	}/*function_lreal_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9958
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9959
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9960
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9961
 *LREAL_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9962
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9963
	case function_lreal_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9964
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9965
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9966
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9967
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9968
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9969
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9970
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9971
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9972
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9973
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9974
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9975
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9976
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9977
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9978
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9979
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9980
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9981
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9982
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9983
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9984
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9985
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9986
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9987
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9988
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9989
	}/*function_lreal_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9990
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9991
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9992
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9993
 *LREAL_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9994
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9995
	case function_lreal_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9996
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9997
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9998
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
  9999
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10000
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10001
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10002
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10003
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10004
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10005
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10006
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10007
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10008
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10009
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10010
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10011
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10012
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10013
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10014
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10015
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10016
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10017
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10018
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10019
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10020
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10021
	}/*function_lreal_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10022
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10023
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10024
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10025
 *LREAL_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10026
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10027
	case function_lreal_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10028
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10029
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10030
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10031
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10032
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10033
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10034
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10035
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10036
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10037
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10038
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10039
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10040
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10041
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10042
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10043
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10044
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10045
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10046
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10047
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10048
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10049
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10050
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10051
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10052
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10053
	}/*function_lreal_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10054
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10055
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10056
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10057
 *LREAL_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10058
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10059
	case function_lreal_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10060
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10061
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10062
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10063
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10064
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10065
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10066
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10067
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10068
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10069
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10070
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10071
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10072
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10073
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10074
			if (typeid(*last_type_symbol) == typeid(lreal_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10075
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10076
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10077
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10078
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10079
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10080
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10081
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10082
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10083
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10084
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10085
	}/*function_lreal_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10086
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10087
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10088
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10089
 *BYTE_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10090
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10091
	case function_byte_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10092
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10093
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10094
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10095
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10096
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10097
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10098
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10099
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10100
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10101
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10102
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10103
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10104
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10105
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10106
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10107
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10108
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10109
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10110
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10111
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10112
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10113
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10114
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10115
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10116
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10117
	}/*function_byte_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10118
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10119
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10120
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10121
 *BYTE_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10122
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10123
	case function_byte_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10124
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10125
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10126
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10127
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10128
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10129
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10130
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10131
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10132
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10133
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10134
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10135
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10136
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10137
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10138
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10139
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10140
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10141
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10142
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10143
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10144
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10145
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10146
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10147
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10148
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10149
	}/*function_byte_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10150
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10151
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10152
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10153
 *BYTE_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10154
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10155
	case function_byte_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10156
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10157
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10158
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10159
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10160
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10161
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10162
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10163
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10164
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10165
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10166
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10167
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10168
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10169
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10170
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10171
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10172
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10173
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10174
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10175
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10176
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10177
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10178
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10179
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10180
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10181
	}/*function_byte_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10182
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10183
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10184
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10185
 *BYTE_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10186
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10187
	case function_byte_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10188
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10189
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10190
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10191
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10192
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10193
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10194
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10195
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10196
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10197
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10198
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10199
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10200
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10201
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10202
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10203
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10204
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10205
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10206
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10207
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10208
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10209
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10210
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10211
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10212
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10213
	}/*function_byte_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10214
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10215
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10216
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10217
 *BYTE_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10218
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10219
	case function_byte_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10220
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10221
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10222
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10223
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10224
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10225
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10226
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10227
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10228
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10229
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10230
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10231
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10232
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10233
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10234
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10235
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10236
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10237
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10238
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10239
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10240
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10241
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10242
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10243
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10244
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10245
	}/*function_byte_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10246
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10247
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10248
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10249
 *BYTE_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10250
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10251
	case function_byte_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10252
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10253
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10254
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10255
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10256
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10257
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10258
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10259
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10260
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10261
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10262
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10263
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10264
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10265
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10266
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10267
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10268
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10269
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10270
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10271
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10272
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10273
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10274
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10275
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10276
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10277
	}/*function_byte_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10278
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10279
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10280
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10281
 *BYTE_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10282
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10283
	case function_byte_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10284
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10285
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10286
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10287
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10288
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10289
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10290
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10291
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10292
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10293
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10294
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10295
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10296
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10297
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10298
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10299
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10300
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10301
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10302
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10303
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10304
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10305
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10306
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10307
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10308
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10309
	}/*function_byte_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10310
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10311
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10312
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10313
 *BYTE_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10314
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10315
	case function_byte_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10316
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10317
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10318
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10319
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10320
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10321
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10322
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10323
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10324
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10325
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10326
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10327
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10329
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10330
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10331
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10332
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10333
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10334
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10335
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10336
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10337
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10338
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10339
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10340
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10341
	}/*function_byte_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10342
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10343
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10344
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10345
 *BYTE_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10346
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10347
	case function_byte_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10348
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10349
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10350
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10351
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10352
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10353
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10354
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10355
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10356
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10357
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10358
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10359
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10360
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10361
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10362
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10363
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10364
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10365
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10366
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10367
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10368
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10369
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10370
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10371
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10372
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10373
	}/*function_byte_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10374
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10375
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10376
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10377
 *BYTE_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10378
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10379
	case function_byte_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10380
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10381
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10382
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10383
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10384
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10385
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10386
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10387
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10388
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10389
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10390
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10391
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10392
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10393
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10394
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10395
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10396
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10397
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10398
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10399
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10400
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10401
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10402
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10403
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10404
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10405
	}/*function_byte_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10406
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10407
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10408
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10409
 *BYTE_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10410
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10411
	case function_byte_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10412
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10413
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10414
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10415
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10416
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10417
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10418
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10419
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10420
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10421
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10422
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10423
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10424
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10425
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10426
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10427
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10428
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10429
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10430
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10431
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10432
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10433
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10434
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10435
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10436
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10437
	}/*function_byte_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10438
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10439
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10440
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10441
 *BYTE_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10442
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10443
	case function_byte_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10444
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10445
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10446
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10447
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10448
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10449
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10450
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10451
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10452
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10453
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10454
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10455
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10456
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10457
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10458
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10459
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10460
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10461
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10462
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10463
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10464
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10465
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10466
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10467
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10468
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10469
	}/*function_byte_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10470
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10471
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10472
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10473
 *BYTE_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10474
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10475
	case function_byte_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10476
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10477
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10478
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10479
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10480
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10481
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10482
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10483
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10484
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10485
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10486
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10487
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10488
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10489
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10490
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10491
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10492
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10493
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10494
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10495
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10496
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10497
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10498
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10499
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10500
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10501
	}/*function_byte_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10502
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10503
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10504
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10505
 *BYTE_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10506
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10507
	case function_byte_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10508
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10509
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10510
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10511
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10512
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10513
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10514
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10515
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10516
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10517
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10518
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10519
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10520
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10521
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10522
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10523
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10524
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10525
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10526
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10527
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10528
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10529
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10530
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10531
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10532
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10533
	}/*function_byte_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10534
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10535
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10536
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10537
 *BYTE_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10538
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10539
	case function_byte_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10540
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10541
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10542
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10543
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10544
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10545
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10546
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10547
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10548
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10549
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10550
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10551
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10552
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10553
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10554
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10555
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10556
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10557
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10558
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10559
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10560
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10561
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10562
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10563
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10564
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10565
	}/*function_byte_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10566
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10567
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10568
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10569
 *BYTE_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10570
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10571
	case function_byte_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10572
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10573
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10574
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10575
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10576
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10577
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10578
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10579
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10580
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10581
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10582
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10583
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10584
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10585
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10586
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10587
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10588
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10589
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10590
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10591
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10592
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10593
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10594
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10595
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10596
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10597
	}/*function_byte_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10598
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10599
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10600
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10601
 *BYTE_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10602
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10603
	case function_byte_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10604
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10605
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10606
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10607
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10608
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10609
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10610
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10611
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10612
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10613
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10614
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10615
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10616
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10617
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10618
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10619
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10620
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10621
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10622
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10623
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10624
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10625
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10626
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10627
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10628
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10629
	}/*function_byte_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10630
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10631
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10632
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10633
 *BYTE_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10634
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10635
	case function_byte_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10636
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10637
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10638
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10639
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10640
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10641
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10642
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10643
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10644
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10645
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10646
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10647
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10648
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10649
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10650
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10651
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10652
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10653
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10654
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10655
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10656
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10657
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10658
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10659
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10660
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10661
	}/*function_byte_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10662
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10663
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10664
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10665
 *BYTE_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10666
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10667
	case function_byte_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10668
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10669
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10670
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10671
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10672
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10673
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10674
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10675
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10676
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10677
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10678
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10679
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10680
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10681
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10682
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10683
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10684
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10685
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10686
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10687
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10688
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10689
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10690
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10691
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10692
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10693
	}/*function_byte_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10694
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10695
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10696
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10697
 *BYTE_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10698
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10699
	case function_byte_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10700
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10701
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10702
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10703
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10704
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10705
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10706
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10707
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10708
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10709
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10710
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10711
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10712
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10713
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10714
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10715
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10716
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10717
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10718
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10719
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10720
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10721
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10722
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10723
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10724
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10725
	}/*function_byte_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10726
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10727
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10728
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10729
 *BYTE_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10730
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10731
	case function_byte_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10732
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10733
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10734
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10735
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10736
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10737
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10738
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10739
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10740
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10741
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10742
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10743
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10744
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10745
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10746
			if (typeid(*last_type_symbol) == typeid(byte_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10747
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10748
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10749
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10750
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10751
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10752
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10753
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10754
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10755
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10756
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10757
	}/*function_byte_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10758
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10759
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10760
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10761
 *USINT_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10762
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10763
	case function_usint_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10764
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10765
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10766
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10767
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10768
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10769
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10770
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10771
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10772
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10773
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10774
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10775
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10776
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10777
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10778
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10779
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10780
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10781
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10782
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10783
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10784
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10785
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10786
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10787
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10788
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10789
	}/*function_usint_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10790
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10791
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10792
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10793
 *USINT_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10794
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10795
	case function_usint_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10796
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10797
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10798
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10799
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10800
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10801
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10802
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10803
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10804
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10805
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10806
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10807
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10808
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10809
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10810
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10811
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10812
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10813
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10814
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10815
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10816
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10817
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10818
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10819
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10820
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10821
	}/*function_usint_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10822
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10823
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10824
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10825
 *USINT_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10826
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10827
	case function_usint_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10828
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10829
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10830
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10831
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10832
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10833
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10834
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10835
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10836
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10837
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10838
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10839
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10840
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10841
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10842
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10843
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10844
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10845
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10846
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10847
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10848
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10849
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10850
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10851
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10852
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10853
	}/*function_usint_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10854
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10855
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10856
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10857
 *USINT_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10858
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10859
	case function_usint_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10860
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10861
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10862
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10863
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10864
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10865
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10866
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10867
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10868
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10869
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10870
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10871
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10872
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10873
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10874
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10875
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10876
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10877
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10878
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10879
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10880
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10881
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10882
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10883
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10884
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10885
	}/*function_usint_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10886
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10887
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10888
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10889
 *USINT_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10890
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10891
	case function_usint_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10892
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10893
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10894
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10895
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10896
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10897
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10898
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10899
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10900
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10901
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10902
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10903
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10904
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10905
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10906
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10907
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10908
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10909
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10910
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10911
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10912
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10913
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10914
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10915
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10916
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10917
	}/*function_usint_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10918
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10919
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10920
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10921
 *USINT_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10922
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10923
	case function_usint_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10924
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10925
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10926
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10927
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10928
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10929
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10930
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10931
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10932
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10933
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10934
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10935
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10936
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10937
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10938
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10939
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10940
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10941
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10942
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10943
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10944
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10945
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10946
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10947
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10948
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10949
	}/*function_usint_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10950
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10951
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10952
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10953
 *USINT_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10954
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10955
	case function_usint_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10956
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10957
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10958
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10959
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10960
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10961
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10962
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10963
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10964
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10965
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10966
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10967
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10968
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10969
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10970
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10971
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10972
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10973
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10974
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10975
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10976
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10977
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10978
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10979
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10980
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10981
	}/*function_usint_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10982
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10983
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10984
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10985
 *USINT_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10986
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10987
	case function_usint_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10988
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10989
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10990
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10991
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10992
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10993
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10994
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10995
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10996
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10997
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10998
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 10999
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11000
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11001
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11002
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11003
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11004
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11005
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11006
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11007
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11008
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11009
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11010
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11011
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11012
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11013
	}/*function_usint_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11014
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11015
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11016
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11017
 *USINT_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11018
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11019
	case function_usint_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11020
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11021
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11022
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11023
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11024
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11025
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11026
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11027
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11028
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11029
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11030
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11031
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11032
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11033
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11034
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11035
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11036
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11037
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11038
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11039
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11040
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11041
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11042
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11043
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11044
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11045
	}/*function_usint_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11046
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11047
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11048
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11049
 *USINT_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11050
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11051
	case function_usint_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11052
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11053
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11054
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11055
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11056
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11057
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11058
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11059
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11060
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11061
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11062
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11063
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11064
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11065
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11066
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11067
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11068
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11069
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11070
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11071
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11072
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11073
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11074
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11075
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11076
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11077
	}/*function_usint_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11078
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11079
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11080
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11081
 *USINT_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11082
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11083
	case function_usint_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11084
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11085
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11086
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11087
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11088
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11089
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11090
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11091
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11092
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11093
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11094
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11095
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11096
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11097
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11098
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11099
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11100
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11101
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11102
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11103
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11104
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11105
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11106
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11107
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11108
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11109
	}/*function_usint_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11110
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11111
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11112
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11113
 *USINT_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11114
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11115
	case function_usint_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11116
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11117
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11118
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11119
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11120
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11121
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11122
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11123
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11124
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11125
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11126
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11127
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11128
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11129
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11130
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11131
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11132
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11133
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11134
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11135
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11136
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11137
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11138
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11139
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11140
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11141
	}/*function_usint_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11142
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11143
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11144
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11145
 *USINT_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11146
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11147
	case function_usint_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11148
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11149
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11150
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11151
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11152
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11153
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11154
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11155
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11156
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11157
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11158
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11159
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11160
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11161
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11162
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11163
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11164
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11165
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11166
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11167
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11168
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11169
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11170
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11171
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11172
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11173
	}/*function_usint_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11174
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11175
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11176
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11177
 *USINT_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11178
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11179
	case function_usint_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11180
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11181
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11182
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11183
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11184
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11185
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11186
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11187
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11188
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11189
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11190
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11191
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11192
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11193
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11194
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11195
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11196
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11197
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11198
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11199
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11200
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11201
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11202
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11203
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11204
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11205
	}/*function_usint_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11206
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11207
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11208
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11209
 *USINT_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11210
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11211
	case function_usint_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11212
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11213
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11214
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11215
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11216
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11217
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11218
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11219
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11220
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11221
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11222
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11223
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11224
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11225
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11226
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11227
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11228
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11229
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11230
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11231
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11232
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11233
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11234
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11235
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11236
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11237
	}/*function_usint_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11238
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11239
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11240
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11241
 *USINT_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11242
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11243
	case function_usint_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11244
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11245
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11246
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11247
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11248
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11249
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11250
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11251
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11252
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11253
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11254
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11255
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11256
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11257
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11258
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11259
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11260
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11261
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11262
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11263
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11264
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11265
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11266
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11267
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11268
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11269
	}/*function_usint_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11270
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11271
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11272
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11273
 *USINT_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11274
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11275
	case function_usint_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11276
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11277
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11278
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11279
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11280
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11281
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11282
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11283
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11284
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11285
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11286
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11287
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11288
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11289
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11290
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11291
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11292
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11293
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11294
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11295
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11296
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11297
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11298
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11299
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11300
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11301
	}/*function_usint_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11302
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11303
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11304
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11305
 *USINT_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11306
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11307
	case function_usint_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11308
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11309
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11310
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11311
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11312
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11313
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11314
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11315
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11316
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11317
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11318
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11319
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11320
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11321
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11322
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11323
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11324
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11325
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11326
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11327
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11328
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11329
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11330
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11331
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11332
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11333
	}/*function_usint_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11334
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11335
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11336
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11337
 *USINT_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11338
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11339
	case function_usint_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11340
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11341
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11342
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11343
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11344
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11345
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11346
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11347
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11348
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11349
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11350
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11351
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11352
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11353
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11354
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11355
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11356
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11357
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11358
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11359
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11360
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11361
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11362
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11363
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11364
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11365
	}/*function_usint_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11366
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11367
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11368
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11369
 *USINT_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11370
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11371
	case function_usint_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11372
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11373
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11374
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11375
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11376
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11377
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11378
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11379
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11380
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11381
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11382
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11383
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11384
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11385
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11386
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11387
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11388
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11389
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11390
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11391
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11392
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11393
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11394
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11395
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11396
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11397
	}/*function_usint_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11398
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11399
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11400
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11401
 *USINT_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11402
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11403
	case function_usint_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11404
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11405
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11406
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11407
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11408
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11409
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11410
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11411
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11412
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11413
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11414
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11415
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11416
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11417
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11418
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11419
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11420
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11421
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11422
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11423
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11424
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11425
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11426
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11427
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11428
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11429
	}/*function_usint_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11430
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11431
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11432
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11433
 *ULINT_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11434
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11435
	case function_ulint_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11436
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11437
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11438
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11439
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11440
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11441
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11442
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11443
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11444
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11445
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11446
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11447
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11448
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11449
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11450
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11451
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11452
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11453
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11454
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11455
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11456
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11457
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11458
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11459
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11460
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11461
	}/*function_ulint_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11462
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11463
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11464
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11465
 *ULINT_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11466
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11467
	case function_ulint_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11468
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11469
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11470
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11471
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11472
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11473
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11474
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11475
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11476
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11477
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11478
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11479
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11480
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11481
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11482
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11483
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11484
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11485
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11486
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11487
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11488
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11489
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11490
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11491
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11492
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11493
	}/*function_ulint_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11494
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11495
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11496
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11497
 *ULINT_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11498
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11499
	case function_ulint_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11500
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11501
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11502
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11503
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11504
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11505
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11506
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11507
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11508
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11509
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11510
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11511
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11512
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11513
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11514
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11515
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11516
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11517
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11518
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11519
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11520
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11521
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11522
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11523
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11524
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11525
	}/*function_ulint_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11526
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11527
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11528
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11529
 *ULINT_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11530
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11531
	case function_ulint_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11532
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11533
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11534
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11535
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11536
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11537
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11538
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11539
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11540
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11541
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11542
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11543
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11544
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11545
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11546
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11547
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11548
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11549
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11550
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11551
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11552
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11553
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11554
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11555
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11556
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11557
	}/*function_ulint_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11558
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11559
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11560
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11561
 *ULINT_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11562
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11563
	case function_ulint_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11564
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11565
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11566
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11567
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11568
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11569
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11570
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11571
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11572
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11573
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11574
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11575
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11576
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11577
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11578
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11579
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11580
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11581
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11582
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11583
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11584
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11585
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11586
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11587
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11588
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11589
	}/*function_ulint_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11590
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11591
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11592
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11593
 *ULINT_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11594
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11595
	case function_ulint_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11596
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11597
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11598
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11599
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11600
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11601
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11602
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11603
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11604
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11605
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11606
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11607
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11608
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11609
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11610
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11611
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11612
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11613
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11614
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11615
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11616
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11617
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11618
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11619
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11620
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11621
	}/*function_ulint_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11622
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11623
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11624
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11625
 *ULINT_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11626
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11627
	case function_ulint_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11628
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11629
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11630
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11631
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11632
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11633
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11634
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11635
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11636
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11637
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11638
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11639
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11640
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11641
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11642
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11643
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11644
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11645
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11646
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11647
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11648
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11649
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11650
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11651
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11652
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11653
	}/*function_ulint_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11654
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11655
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11656
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11657
 *ULINT_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11658
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11659
	case function_ulint_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11660
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11661
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11662
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11663
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11664
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11665
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11666
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11667
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11668
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11669
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11670
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11671
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11673
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11674
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11675
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11676
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11677
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11678
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11679
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11680
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11681
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11682
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11683
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11684
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11685
	}/*function_ulint_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11686
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11687
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11688
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11689
 *ULINT_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11690
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11691
	case function_ulint_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11692
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11693
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11694
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11695
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11696
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11697
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11698
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11699
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11700
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11701
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11702
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11703
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11704
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11705
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11706
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11707
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11708
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11709
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11710
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11711
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11712
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11713
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11714
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11715
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11716
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11717
	}/*function_ulint_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11718
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11719
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11720
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11721
 *ULINT_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11722
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11723
	case function_ulint_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11724
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11725
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11726
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11727
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11728
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11729
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11730
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11731
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11732
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11733
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11734
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11735
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11736
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11737
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11738
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11739
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11740
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11741
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11742
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11743
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11744
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11745
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11746
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11747
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11748
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11749
	}/*function_ulint_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11750
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11751
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11752
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11753
 *ULINT_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11754
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11755
	case function_ulint_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11756
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11757
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11758
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11759
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11760
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11761
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11762
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11763
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11764
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11765
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11766
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11767
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11768
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11769
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11770
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11771
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11772
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11773
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11774
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11775
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11776
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11777
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11778
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11779
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11780
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11781
	}/*function_ulint_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11782
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11783
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11784
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11785
 *ULINT_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11786
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11787
	case function_ulint_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11788
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11789
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11790
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11791
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11792
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11793
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11794
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11795
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11796
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11797
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11798
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11799
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11800
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11801
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11802
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11803
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11804
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11805
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11806
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11807
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11808
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11809
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11810
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11811
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11812
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11813
	}/*function_ulint_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11814
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11815
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11816
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11817
 *ULINT_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11818
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11819
	case function_ulint_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11820
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11821
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11822
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11823
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11824
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11825
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11826
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11827
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11828
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11829
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11830
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11831
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11832
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11833
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11834
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11835
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11836
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11837
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11838
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11839
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11840
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11841
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11842
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11843
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11844
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11845
	}/*function_ulint_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11846
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11847
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11848
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11849
 *ULINT_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11850
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11851
	case function_ulint_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11852
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11853
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11854
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11855
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11856
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11857
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11858
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11859
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11860
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11861
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11862
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11863
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11864
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11865
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11866
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11867
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11868
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11869
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11870
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11871
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11872
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11873
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11874
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11875
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11876
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11877
	}/*function_ulint_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11878
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11879
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11880
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11881
 *ULINT_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11882
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11883
	case function_ulint_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11884
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11885
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11886
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11887
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11888
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11889
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11890
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11891
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11892
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11893
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11894
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11895
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11896
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11897
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11898
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11899
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11900
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11901
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11902
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11903
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11904
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11905
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11906
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11907
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11908
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11909
	}/*function_ulint_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11910
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11911
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11912
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11913
 *ULINT_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11914
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11915
	case function_ulint_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11916
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11917
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11918
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11919
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11920
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11921
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11922
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11923
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11924
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11925
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11926
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11927
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11929
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11930
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11931
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11932
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11933
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11934
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11935
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11936
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11937
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11938
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11939
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11940
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11941
	}/*function_ulint_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11942
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11943
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11944
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11945
 *ULINT_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11946
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11947
	case function_ulint_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11948
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11949
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11950
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11951
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11952
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11953
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11954
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11955
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11956
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11957
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11958
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11959
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11960
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11961
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11962
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11963
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11964
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11965
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11966
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11967
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11968
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11969
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11970
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11971
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11972
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11973
	}/*function_ulint_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11974
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11975
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11976
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11977
 *ULINT_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11978
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11979
	case function_ulint_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11980
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11981
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11982
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11983
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11984
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11985
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11986
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11987
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11988
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11989
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11990
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11991
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11992
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11993
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11994
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11995
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11996
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11997
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11998
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 11999
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12000
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12001
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12002
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12003
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12004
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12005
	}/*function_ulint_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12006
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12007
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12008
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12009
 *ULINT_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12010
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12011
	case function_ulint_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12012
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12013
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12014
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12015
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12016
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12017
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12018
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12019
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12020
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12021
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12022
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12023
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12024
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12025
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12026
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12027
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12028
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12029
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12030
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12031
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12032
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12033
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12034
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12035
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12036
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12037
	}/*function_ulint_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12038
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12039
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12040
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12041
 *ULINT_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12042
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12043
	case function_ulint_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12044
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12045
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12046
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12047
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12048
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12049
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12050
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12051
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12052
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12053
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12054
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12055
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12056
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12057
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12058
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12059
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12060
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12061
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12062
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12063
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12064
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12065
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12066
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12067
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12068
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12069
	}/*function_ulint_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12070
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12071
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12072
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12073
 *ULINT_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12074
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12075
	case function_ulint_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12076
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12077
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12078
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12079
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12080
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12081
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12082
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12083
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12084
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12085
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12086
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12087
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12088
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12089
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12090
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12091
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12092
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12093
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12094
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12095
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12096
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12097
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12098
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12099
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12100
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12101
	}/*function_ulint_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12102
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12103
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12104
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12105
 *BOOL_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12106
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12107
	case function_bool_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12108
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12109
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12110
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12111
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12112
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12113
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12114
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12115
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12116
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12117
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12118
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12119
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12120
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12121
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12122
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12123
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12124
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12125
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12126
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12127
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12128
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12129
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12130
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12131
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12132
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12133
	}/*function_bool_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12134
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12135
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12136
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12137
 *BOOL_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12138
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12139
	case function_bool_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12140
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12141
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12142
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12143
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12144
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12145
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12146
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12147
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12148
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12149
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12150
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12151
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12152
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12153
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12154
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12155
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12156
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12157
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12158
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12159
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12160
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12161
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12162
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12163
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12164
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12165
	}/*function_bool_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12166
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12167
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12168
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12169
 *BOOL_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12170
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12171
	case function_bool_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12172
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12173
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12174
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12175
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12176
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12177
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12178
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12179
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12180
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12181
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12182
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12183
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12184
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12185
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12186
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12187
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12188
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12189
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12190
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12191
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12192
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12193
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12194
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12195
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12196
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12197
	}/*function_bool_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12198
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12199
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12200
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12201
 *BOOL_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12202
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12203
	case function_bool_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12204
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12205
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12206
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12207
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12208
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12209
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12210
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12211
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12212
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12213
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12214
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12215
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12217
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12218
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12219
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12220
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12221
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12222
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12223
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12224
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12225
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12226
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12227
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12228
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12229
	}/*function_bool_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12230
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12231
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12232
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12233
 *BOOL_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12234
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12235
	case function_bool_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12236
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12237
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12238
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12239
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12240
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12241
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12242
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12243
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12244
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12245
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12246
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12247
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12248
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12249
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12250
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12251
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12252
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12253
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12254
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12255
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12256
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12257
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12258
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12259
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12260
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12261
	}/*function_bool_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12262
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12263
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12264
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12265
 *BOOL_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12266
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12267
	case function_bool_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12268
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12269
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12270
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12271
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12272
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12273
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12274
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12275
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12276
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12277
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12278
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12279
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12280
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12281
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12282
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12283
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12284
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12285
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12286
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12287
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12288
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12289
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12290
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12291
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12292
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12293
	}/*function_bool_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12294
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12295
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12296
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12297
 *BOOL_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12298
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12299
	case function_bool_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12300
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12301
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12302
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12303
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12304
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12305
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12306
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12307
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12308
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12309
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12310
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12311
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12312
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12313
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12314
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12315
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12316
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12317
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12318
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12319
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12320
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12321
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12322
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12323
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12324
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12325
	}/*function_bool_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12326
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12327
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12328
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12329
 *BOOL_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12330
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12331
	case function_bool_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12332
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12333
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12334
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12335
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12336
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12337
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12338
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12339
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12340
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12341
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12342
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12343
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12344
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12345
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12346
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12347
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12348
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12349
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12350
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12351
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12352
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12353
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12354
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12355
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12356
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12357
	}/*function_bool_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12358
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12359
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12360
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12361
 *BOOL_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12362
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12363
	case function_bool_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12364
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12365
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12366
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12367
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12368
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12369
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12370
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12371
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12372
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12373
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12374
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12375
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12376
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12377
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12378
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12379
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12380
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12381
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12382
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12383
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12384
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12385
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12386
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12387
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12388
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12389
	}/*function_bool_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12390
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12391
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12392
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12393
 *BOOL_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12394
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12395
	case function_bool_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12396
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12397
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12398
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12399
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12400
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12401
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12402
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12403
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12404
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12405
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12406
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12407
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12408
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12409
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12410
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12411
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12412
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12413
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12414
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12415
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12416
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12417
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12418
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12419
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12420
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12421
	}/*function_bool_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12422
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12423
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12424
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12425
 *BOOL_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12426
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12427
	case function_bool_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12428
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12429
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12430
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12431
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12432
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12433
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12434
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12435
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12436
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12437
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12438
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12439
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12440
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12441
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12442
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12443
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12444
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12445
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12446
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12447
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12448
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12449
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12450
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12451
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12452
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12453
	}/*function_bool_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12454
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12455
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12456
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12457
 *BOOL_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12458
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12459
	case function_bool_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12460
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12461
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12462
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12463
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12464
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12465
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12466
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12467
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12468
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12469
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12470
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12471
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12473
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12474
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12475
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12476
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12477
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12478
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12479
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12480
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12481
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12482
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12483
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12484
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12485
	}/*function_bool_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12486
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12487
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12488
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12489
 *BOOL_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12490
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12491
	case function_bool_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12492
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12493
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12494
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12495
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12496
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12497
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12498
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12499
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12500
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12501
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12502
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12503
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12504
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12505
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12506
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12507
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12508
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12509
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12510
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12511
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12512
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12513
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12514
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12515
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12516
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12517
	}/*function_bool_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12518
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12519
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12520
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12521
 *BOOL_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12522
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12523
	case function_bool_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12524
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12525
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12526
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12527
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12528
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12529
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12530
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12531
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12532
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12533
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12534
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12535
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12536
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12537
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12538
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12539
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12540
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12541
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12542
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12543
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12544
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12545
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12546
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12547
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12548
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12549
	}/*function_bool_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12550
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12551
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12552
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12553
 *BOOL_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12554
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12555
	case function_bool_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12556
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12557
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12558
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12559
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12560
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12561
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12562
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12563
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12564
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12565
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12566
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12567
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12568
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12569
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12570
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12571
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12572
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12573
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12574
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12575
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12576
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12577
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12578
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12579
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12580
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12581
	}/*function_bool_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12582
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12583
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12584
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12585
 *BOOL_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12586
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12587
	case function_bool_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12588
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12589
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12590
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12591
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12592
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12593
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12594
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12595
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12596
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12597
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12598
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12599
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12600
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12601
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12602
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12603
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12604
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12605
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12606
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12607
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12608
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12609
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12610
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12611
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12612
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12613
	}/*function_bool_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12614
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12615
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12616
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12617
 *BOOL_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12618
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12619
	case function_bool_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12620
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12621
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12622
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12623
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12624
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12625
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12626
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12627
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12628
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12629
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12630
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12631
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12632
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12633
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12634
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12635
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12636
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12637
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12638
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12639
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12640
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12641
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12642
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12643
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12644
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12645
	}/*function_bool_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12646
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12647
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12648
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12649
 *BOOL_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12650
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12651
	case function_bool_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12652
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12653
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12654
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12655
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12656
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12657
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12658
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12659
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12660
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12661
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12662
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12663
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12664
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12665
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12666
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12667
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12668
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12669
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12670
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12671
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12672
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12673
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12674
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12675
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12676
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12677
	}/*function_bool_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12678
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12679
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12680
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12681
 *BOOL_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12682
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12683
	case function_bool_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12684
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12685
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12686
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12687
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12688
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12689
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12690
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12691
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12692
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12693
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12694
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12695
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12696
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12697
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12698
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12699
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12700
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12701
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12702
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12703
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12704
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12705
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12706
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12707
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12708
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12709
	}/*function_bool_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12710
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12711
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12712
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12713
 *BOOL_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12714
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12715
	case function_bool_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12716
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12717
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12718
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12719
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12720
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12721
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12722
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12723
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12724
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12725
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12726
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12727
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12728
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12729
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12730
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12731
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12732
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12733
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12734
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12735
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12736
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12737
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12738
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12739
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12740
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12741
	}/*function_bool_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12742
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12743
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12744
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12745
 *BOOL_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12746
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12747
	case function_bool_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12748
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12749
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12750
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12751
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12752
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12753
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12754
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12755
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12756
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12757
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12758
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12759
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12760
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12761
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12762
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12763
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12764
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12765
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12766
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12767
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12768
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12769
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12770
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12771
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12772
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12773
	}/*function_bool_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12774
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12775
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12776
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12777
 *TIME_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12778
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12779
	case function_time_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12780
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12781
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12782
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12783
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12784
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12785
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12786
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12787
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12788
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12789
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12790
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12791
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12792
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12793
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12794
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12795
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12796
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12797
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12798
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12799
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12800
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12801
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12802
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12803
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12804
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12805
	}/*function_time_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12806
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12807
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12808
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12809
 *TIME_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12810
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12811
	case function_time_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12812
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12813
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12814
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12815
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12816
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12817
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12818
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12819
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12820
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12821
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12822
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12823
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12824
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12825
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12826
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12827
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12828
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12829
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12830
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12831
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12832
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12833
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12834
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12835
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12836
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12837
	}/*function_time_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12838
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12839
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12840
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12841
 *TIME_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12842
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12843
	case function_time_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12844
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12845
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12846
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12847
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12848
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12849
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12850
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12851
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12852
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12853
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12854
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12855
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12856
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12857
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12858
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12859
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12860
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12861
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12862
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12863
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12864
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12865
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12866
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12867
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12868
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12869
	}/*function_time_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12870
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12871
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12872
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12873
 *TIME_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12874
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12875
	case function_time_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12876
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12877
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12878
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12879
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12880
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12881
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12882
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12883
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12884
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12885
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12886
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12887
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12888
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12889
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12890
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12891
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12892
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12893
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12894
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12895
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12896
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12897
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12898
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12899
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12900
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12901
	}/*function_time_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12902
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12903
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12904
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12905
 *TIME_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12906
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12907
	case function_time_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12908
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12909
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12910
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12911
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12912
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12913
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12914
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12915
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12916
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12917
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12918
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12919
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12920
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12921
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12922
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12923
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12924
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12925
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12926
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12927
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12928
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12929
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12930
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12931
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12932
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12933
	}/*function_time_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12934
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12935
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12936
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12937
 *TIME_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12938
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12939
	case function_time_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12940
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12941
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12942
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12943
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12944
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12945
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12946
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12947
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12948
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12949
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12950
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12951
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12952
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12953
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12954
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12955
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12956
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12957
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12958
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12959
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12960
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12961
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12962
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12963
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12964
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12965
	}/*function_time_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12966
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12967
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12968
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12969
 *TIME_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12970
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12971
	case function_time_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12972
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12973
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12974
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12975
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12976
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12977
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12978
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12979
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12980
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12981
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12982
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12983
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12984
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12985
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12986
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12987
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12988
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12989
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12990
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12991
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12992
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12993
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12994
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12995
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12996
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12997
	}/*function_time_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12998
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 12999
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13000
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13001
 *TIME_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13002
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13003
	case function_time_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13004
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13005
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13006
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13007
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13008
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13009
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13010
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13011
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13012
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13013
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13014
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13015
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13016
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13017
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13018
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13019
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13020
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13021
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13022
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13023
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13024
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13025
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13026
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13027
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13028
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13029
	}/*function_time_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13030
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13031
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13032
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13033
 *TIME_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13034
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13035
	case function_time_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13036
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13037
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13038
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13039
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13040
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13041
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13042
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13043
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13044
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13045
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13046
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13047
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13048
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13049
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13050
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13051
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13052
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13053
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13054
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13055
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13056
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13057
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13058
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13059
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13060
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13061
	}/*function_time_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13062
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13063
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13064
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13065
 *TIME_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13066
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13067
	case function_time_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13068
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13069
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13070
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13071
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13072
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13073
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13074
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13075
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13076
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13077
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13078
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13079
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13080
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13081
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13082
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13083
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13084
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13085
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13086
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13087
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13088
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13089
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13090
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13091
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13092
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13093
	}/*function_time_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13094
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13095
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13096
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13097
 *TIME_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13098
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13099
	case function_time_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13100
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13101
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13102
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13103
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13104
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13105
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13106
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13107
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13108
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13109
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13110
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13111
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13112
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13113
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13114
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13115
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13116
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13117
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13118
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13119
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13120
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13121
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13122
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13123
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13124
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13125
	}/*function_time_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13126
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13127
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13128
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13129
 *TIME_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13130
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13131
	case function_time_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13132
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13133
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13134
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13135
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13136
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13137
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13138
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13139
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13140
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13141
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13142
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13143
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13144
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13145
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13146
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13147
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13148
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13149
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13150
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13151
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13152
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13153
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13154
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13155
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13156
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13157
	}/*function_time_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13158
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13159
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13160
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13161
 *TIME_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13162
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13163
	case function_time_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13164
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13165
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13166
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13167
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13168
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13169
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13170
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13171
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13172
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13173
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13174
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13175
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13176
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13177
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13178
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13179
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13180
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13181
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13182
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13183
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13184
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13185
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13186
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13187
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13188
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13189
	}/*function_time_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13190
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13191
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13192
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13193
 *TIME_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13194
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13195
	case function_time_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13196
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13197
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13198
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13199
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13200
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13201
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13202
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13203
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13204
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13205
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13206
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13207
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13208
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13209
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13210
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13211
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13212
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13213
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13214
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13215
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13216
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13217
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13218
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13219
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13220
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13221
	}/*function_time_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13222
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13223
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13224
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13225
 *TIME_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13226
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13227
	case function_time_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13228
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13229
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13230
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13231
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13232
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13233
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13234
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13235
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13236
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13237
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13238
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13239
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13240
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13241
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13242
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13243
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13244
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13245
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13246
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13247
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13248
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13249
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13250
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13251
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13252
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13253
	}/*function_time_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13254
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13255
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13256
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13257
 *TIME_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13258
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13259
	case function_time_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13260
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13261
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13262
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13263
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13264
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13265
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13266
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13267
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13268
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13269
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13270
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13271
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13272
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13273
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13274
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13275
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13276
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13277
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13278
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13279
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13280
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13281
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13282
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13283
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13284
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13285
	}/*function_time_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13286
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13287
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13288
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13289
 *TIME_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13290
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13291
	case function_time_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13292
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13293
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13294
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13295
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13296
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13297
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13298
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13299
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13300
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13301
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13302
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13303
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13304
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13305
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13306
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13307
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13308
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13309
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13310
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13311
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13312
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13313
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13314
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13315
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13316
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13317
	}/*function_time_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13318
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13319
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13320
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13321
 *TIME_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13322
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13323
	case function_time_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13324
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13325
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13326
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13327
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13328
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13329
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13330
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13331
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13332
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13333
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13334
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13335
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13336
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13337
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13338
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13339
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13340
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13341
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13342
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13343
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13344
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13345
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13346
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13347
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13348
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13349
	}/*function_time_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13350
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13351
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13352
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13353
 *TIME_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13354
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13355
	case function_time_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13356
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13357
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13358
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13359
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13360
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13361
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13362
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13363
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13364
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13365
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13366
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13367
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13368
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13369
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13370
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13371
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13372
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13373
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13374
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13375
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13376
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13377
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13378
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13379
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13380
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13381
	}/*function_time_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13382
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13383
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13384
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13385
 *TIME_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13386
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13387
	case function_time_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13388
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13389
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13390
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13391
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13392
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13393
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13394
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13395
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13396
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13397
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13398
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13399
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13400
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13401
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13402
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13403
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13404
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13405
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13406
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13407
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13408
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13409
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13410
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13411
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13412
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13413
	}/*function_time_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13414
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13415
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13416
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13417
 *TIME_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13418
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13419
	case function_time_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13420
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13421
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13422
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13423
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13424
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13425
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13426
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13427
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13428
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13429
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13430
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13431
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13432
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13433
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13434
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13435
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13436
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13437
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13438
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13439
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13440
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13441
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13442
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13443
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13444
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13445
	}/*function_time_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13446
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13447
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13448
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13449
 *INT_TO_REAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13450
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13451
	case function_int_to_real :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13452
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13453
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13454
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13455
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13456
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13457
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13458
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13459
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13460
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13461
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13462
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13463
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13464
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13465
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13466
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13467
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13468
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13469
				symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13470
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13471
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13472
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13473
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13474
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13475
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13476
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13477
	}/*function_int_to_real*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13478
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13479
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13480
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13481
 *INT_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13482
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13483
	case function_int_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13484
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13485
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13486
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13487
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13488
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13489
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13490
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13491
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13492
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13493
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13494
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13495
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13496
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13497
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13498
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13499
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13500
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13501
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13502
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13503
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13504
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13505
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13506
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13507
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13508
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13509
	}/*function_int_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13510
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13511
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13512
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13513
 *INT_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13514
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13515
	case function_int_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13516
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13517
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13518
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13519
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13520
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13521
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13522
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13523
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13524
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13525
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13526
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13527
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13528
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13529
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13530
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13531
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13532
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13533
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13534
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13535
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13536
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13537
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13538
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13539
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13540
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13541
	}/*function_int_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13542
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13543
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13544
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13545
 *INT_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13546
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13547
	case function_int_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13548
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13549
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13550
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13551
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13552
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13553
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13554
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13555
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13556
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13557
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13558
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13559
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13560
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13561
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13562
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13563
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13564
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13565
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13566
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13567
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13568
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13569
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13570
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13571
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13572
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13573
	}/*function_int_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13574
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13575
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13576
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13577
 *INT_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13578
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13579
	case function_int_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13580
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13581
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13582
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13583
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13584
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13585
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13586
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13587
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13588
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13589
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13590
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13591
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13592
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13593
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13594
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13595
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13596
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13597
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13598
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13599
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13600
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13601
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13602
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13603
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13604
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13605
	}/*function_int_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13606
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13607
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13608
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13609
 *INT_TO_DWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13610
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13611
	case function_int_to_dword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13612
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13613
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13614
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13615
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13616
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13617
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13618
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13619
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13620
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13621
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13622
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13623
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13624
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13625
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13626
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13627
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13628
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13629
				symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13630
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13631
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13632
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13633
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13634
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13635
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13636
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13637
	}/*function_int_to_dword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13638
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13639
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13640
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13641
 *INT_TO_DT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13642
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13643
	case function_int_to_dt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13644
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13645
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13646
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13647
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13648
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13649
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13650
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13651
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13652
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13653
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13654
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13655
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13656
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13657
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13658
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13659
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13660
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13661
				symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13662
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13663
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13664
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13665
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13666
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13667
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13668
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13669
	}/*function_int_to_dt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13670
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13671
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13672
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13673
 *INT_TO_TOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13674
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13675
	case function_int_to_tod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13676
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13677
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13678
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13679
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13680
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13681
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13682
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13683
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13684
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13685
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13686
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13687
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13688
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13689
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13690
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13691
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13692
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13693
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13694
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13695
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13696
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13697
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13698
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13699
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13700
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13701
	}/*function_int_to_tod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13702
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13703
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13704
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13705
 *INT_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13706
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13707
	case function_int_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13708
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13709
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13710
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13711
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13712
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13713
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13714
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13715
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13716
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13717
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13718
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13719
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13720
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13721
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13722
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13723
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13724
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13725
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13726
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13727
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13728
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13729
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13730
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13731
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13732
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13733
	}/*function_int_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13734
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13735
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13736
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13737
 *INT_TO_WORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13738
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13739
	case function_int_to_word :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13740
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13741
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13742
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13743
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13744
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13745
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13746
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13747
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13748
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13749
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13750
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13751
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13752
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13753
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13754
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13755
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13756
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13757
				symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13758
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13759
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13760
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13761
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13762
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13763
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13764
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13765
	}/*function_int_to_word*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13766
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13767
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13768
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13769
 *INT_TO_WSTRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13770
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13771
	case function_int_to_wstring :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13772
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13773
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13774
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13775
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13776
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13777
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13778
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13779
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13780
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13781
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13782
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13783
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13784
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13785
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13786
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13787
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13788
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13789
				symbol_c * return_type_symbol = &search_constant_type_c::wstring_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13790
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13791
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13792
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13793
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13794
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13795
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13796
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13797
	}/*function_int_to_wstring*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13798
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13799
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13800
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13801
 *INT_TO_STRING
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13802
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13803
	case function_int_to_string :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13804
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13805
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13806
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13807
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13808
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13809
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13810
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13811
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13812
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13813
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13814
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13815
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13816
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13817
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13818
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13819
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13820
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13821
				symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13822
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13823
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13824
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13825
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13826
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13827
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13828
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13829
	}/*function_int_to_string*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13830
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13831
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13832
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13833
 *INT_TO_LWORD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13834
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13835
	case function_int_to_lword :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13836
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13837
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13838
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13839
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13840
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13841
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13842
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13843
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13844
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13845
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13846
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13847
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13849
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13850
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13851
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13852
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13853
				symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13854
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13855
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13856
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13857
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13858
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13859
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13860
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13861
	}/*function_int_to_lword*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13862
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13863
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13864
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13865
 *INT_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13866
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13867
	case function_int_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13868
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13869
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13870
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13871
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13872
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13873
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13874
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13875
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13876
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13877
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13878
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13879
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13880
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13881
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13882
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13883
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13884
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13885
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13886
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13887
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13888
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13889
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13890
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13891
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13892
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13893
	}/*function_int_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13894
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13895
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13896
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13897
 *INT_TO_LREAL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13898
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13899
	case function_int_to_lreal :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13900
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13901
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13902
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13903
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13904
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13905
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13906
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13907
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13908
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13909
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13910
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13911
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13912
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13913
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13914
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13915
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13916
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13917
				symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13918
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13919
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13920
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13921
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13922
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13923
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13924
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13925
	}/*function_int_to_lreal*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13926
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13927
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13928
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13929
 *INT_TO_BYTE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13930
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13931
	case function_int_to_byte :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13932
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13933
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13934
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13935
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13936
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13937
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13938
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13939
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13940
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13941
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13942
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13943
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13944
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13945
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13946
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13947
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13948
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13949
				symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13950
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13951
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13952
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13953
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13954
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13955
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13956
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13957
	}/*function_int_to_byte*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13958
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13959
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13960
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13961
 *INT_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13962
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13963
	case function_int_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13964
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13965
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13966
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13967
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13968
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13969
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13970
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13971
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13972
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13973
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13974
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13975
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13976
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13977
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13978
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13979
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13980
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13981
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13982
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13983
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13984
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13985
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13986
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13987
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13988
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13989
	}/*function_int_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13990
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13991
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13992
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13993
 *INT_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13994
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13995
	case function_int_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13996
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13997
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13998
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 13999
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14000
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14001
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14002
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14003
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14004
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14005
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14006
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14007
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14008
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14009
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14010
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14011
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14012
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14013
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14014
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14015
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14016
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14017
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14018
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14019
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14020
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14021
	}/*function_int_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14022
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14023
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14024
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14025
 *INT_TO_BOOL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14026
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14027
	case function_int_to_bool :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14028
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14029
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14030
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14031
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14032
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14033
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14034
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14035
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14036
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14037
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14038
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14039
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14040
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14041
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14042
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14043
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14044
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14045
				symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14046
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14047
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14048
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14049
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14050
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14051
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14052
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14053
	}/*function_int_to_bool*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14054
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14055
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14056
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14057
 *INT_TO_TIME
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14058
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14059
	case function_int_to_time :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14060
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14061
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14062
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14063
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14064
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14065
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14066
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14067
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14068
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14069
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14070
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14071
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14072
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14073
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14074
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14075
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14076
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14077
				symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14078
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14079
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14080
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14081
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14082
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14083
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14084
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14085
	}/*function_int_to_time*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14086
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14087
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14088
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14089
 *INT_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14090
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14091
	case function_int_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14092
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14093
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14094
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14095
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14096
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14097
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14098
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14099
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14100
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14101
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14102
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14103
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14104
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14105
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14106
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14107
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14108
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14109
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14110
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14111
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14112
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14113
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14114
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14115
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14116
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14117
	}/*function_int_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14118
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14119
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14120
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14121
 *TRUNC
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14122
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14123
	case function_trunc :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14124
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14125
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14126
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14127
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14128
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14129
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14130
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14131
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14132
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14133
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14134
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14135
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14136
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14137
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14138
			if(search_expression_type->is_real_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14139
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14140
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14141
				symbol_c * return_type_symbol = &search_constant_type_c::constant_int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14142
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14143
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14144
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14145
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14146
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14147
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14148
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14149
	}/*function_trunc*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14150
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14151
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14152
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14153
 *BCD_TO_SINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14154
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14155
	case function_bcd_to_sint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14156
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14157
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14158
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14159
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14160
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14161
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14162
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14163
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14164
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14165
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14166
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14167
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14168
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14169
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14170
			if(search_expression_type->is_binary_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14171
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14172
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14173
				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14174
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14175
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14176
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14177
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14178
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14179
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14180
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14181
	}/*function_bcd_to_sint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14182
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14183
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14184
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14185
 *BCD_TO_LINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14186
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14187
	case function_bcd_to_lint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14188
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14189
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14190
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14191
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14192
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14193
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14194
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14195
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14196
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14197
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14198
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14199
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14200
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14201
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14202
			if(search_expression_type->is_binary_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14203
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14204
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14205
				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14206
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14207
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14208
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14209
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14210
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14211
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14212
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14213
	}/*function_bcd_to_lint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14214
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14215
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14216
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14217
 *BCD_TO_DINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14218
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14219
	case function_bcd_to_dint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14220
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14221
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14222
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14223
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14224
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14225
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14226
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14227
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14228
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14229
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14230
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14231
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14232
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14233
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14234
			if(search_expression_type->is_binary_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14235
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14236
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14237
				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14238
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14239
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14240
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14241
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14242
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14243
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14244
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14245
	}/*function_bcd_to_dint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14246
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14247
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14248
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14249
 *BCD_TO_UDINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14250
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14251
	case function_bcd_to_udint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14252
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14253
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14254
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14255
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14256
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14257
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14258
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14259
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14260
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14261
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14262
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14263
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14264
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14265
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14266
			if(search_expression_type->is_binary_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14267
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14268
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14269
				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14270
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14271
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14272
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14273
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14274
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14275
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14276
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14277
	}/*function_bcd_to_udint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14278
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14279
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14280
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14281
 *BCD_TO_UINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14282
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14283
	case function_bcd_to_uint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14284
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14285
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14286
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14287
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14288
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14289
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14290
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14291
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14292
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14293
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14294
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14295
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14296
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14297
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14298
			if(search_expression_type->is_binary_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14299
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14300
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14301
				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14302
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14303
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14304
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14305
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14306
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14307
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14308
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14309
	}/*function_bcd_to_uint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14310
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14311
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14312
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14313
 *BCD_TO_USINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14314
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14315
	case function_bcd_to_usint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14316
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14317
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14318
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14319
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14320
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14321
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14322
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14323
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14324
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14325
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14326
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14327
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14328
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14329
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14330
			if(search_expression_type->is_binary_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14331
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14332
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14333
				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14334
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14335
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14336
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14337
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14338
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14339
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14340
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14341
	}/*function_bcd_to_usint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14342
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14343
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14344
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14345
 *BCD_TO_ULINT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14346
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14347
	case function_bcd_to_ulint :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14348
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14349
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14350
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14351
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14352
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14353
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14354
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14355
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14356
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14357
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14358
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14359
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14360
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14361
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14362
			if(search_expression_type->is_binary_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14363
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14364
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14365
				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14366
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14367
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14368
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14369
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14370
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14371
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14372
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14373
	}/*function_bcd_to_ulint*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14374
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14375
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14376
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14377
 *BCD_TO_INT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14378
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14379
	case function_bcd_to_int :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14380
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14381
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14382
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14383
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14384
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14385
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14386
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14387
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14388
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14389
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14390
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14391
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14392
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14393
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14394
			if(search_expression_type->is_binary_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14395
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14396
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14397
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14398
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14399
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14400
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14401
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14402
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14403
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14404
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14405
	}/*function_bcd_to_int*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14406
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14407
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14408
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14409
 *SINT_TO_BCD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14410
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14411
	case function_sint_to_bcd :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14412
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14413
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14414
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14415
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14416
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14417
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14418
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14419
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14420
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14421
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14422
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14423
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14424
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14425
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14426
			if (typeid(*last_type_symbol) == typeid(sint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14427
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14428
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14429
				symbol_c * return_type_symbol = &search_constant_type_c::constant_int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14430
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14431
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14432
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14433
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14434
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14435
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14436
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14437
	}/*function_sint_to_bcd*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14438
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14439
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14440
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14441
 *LINT_TO_BCD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14442
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14443
	case function_lint_to_bcd :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14444
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14445
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14446
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14447
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14448
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14449
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14450
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14451
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14452
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14453
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14454
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14455
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14456
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14457
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14458
			if (typeid(*last_type_symbol) == typeid(lint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14459
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14460
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14461
				symbol_c * return_type_symbol = &search_constant_type_c::constant_int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14462
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14463
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14464
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14465
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14466
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14467
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14468
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14469
	}/*function_lint_to_bcd*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14470
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14471
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14472
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14473
 *DINT_TO_BCD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14474
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14475
	case function_dint_to_bcd :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14476
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14477
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14478
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14479
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14480
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14481
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14482
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14483
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14484
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14485
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14486
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14487
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14488
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14489
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14490
			if (typeid(*last_type_symbol) == typeid(dint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14491
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14492
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14493
				symbol_c * return_type_symbol = &search_constant_type_c::constant_int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14494
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14495
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14496
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14497
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14498
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14499
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14500
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14501
	}/*function_dint_to_bcd*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14502
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14503
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14504
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14505
 *UDINT_TO_BCD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14506
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14507
	case function_udint_to_bcd :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14508
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14509
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14510
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14511
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14512
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14513
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14514
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14515
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14516
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14517
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14518
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14519
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14520
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14521
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14522
			if (typeid(*last_type_symbol) == typeid(udint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14523
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14524
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14525
				symbol_c * return_type_symbol = &search_constant_type_c::constant_int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14526
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14527
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14528
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14529
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14530
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14531
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14532
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14533
	}/*function_udint_to_bcd*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14534
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14535
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14536
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14537
 *UINT_TO_BCD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14538
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14539
	case function_uint_to_bcd :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14540
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14541
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14542
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14543
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14544
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14545
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14546
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14547
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14548
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14549
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14550
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14551
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14552
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14553
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14554
			if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14555
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14556
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14557
				symbol_c * return_type_symbol = &search_constant_type_c::constant_int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14558
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14559
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14560
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14561
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14562
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14563
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14564
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14565
	}/*function_uint_to_bcd*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14566
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14567
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14568
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14569
 *USINT_TO_BCD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14570
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14571
	case function_usint_to_bcd :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14572
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14573
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14574
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14575
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14576
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14577
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14578
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14579
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14580
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14581
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14582
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14583
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14584
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14585
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14586
			if (typeid(*last_type_symbol) == typeid(usint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14587
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14588
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14589
				symbol_c * return_type_symbol = &search_constant_type_c::constant_int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14590
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14591
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14592
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14593
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14594
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14595
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14596
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14597
	}/*function_usint_to_bcd*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14598
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14599
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14600
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14601
 *ULINT_TO_BCD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14602
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14603
	case function_ulint_to_bcd :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14604
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14605
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14606
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14607
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14608
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14609
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14610
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14611
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14612
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14613
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14614
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14615
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14616
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14617
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14618
			if (typeid(*last_type_symbol) == typeid(ulint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14619
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14620
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14621
				symbol_c * return_type_symbol = &search_constant_type_c::constant_int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14622
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14623
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14624
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14625
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14626
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14627
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14628
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14629
	}/*function_ulint_to_bcd*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14630
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14631
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14632
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14633
 *INT_TO_BCD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14634
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14635
	case function_int_to_bcd :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14636
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14637
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14638
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14639
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14640
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14641
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14642
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14643
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14644
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14645
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14646
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14647
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14648
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14649
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14650
			if (typeid(*last_type_symbol) == typeid(int_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14651
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14652
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14653
				symbol_c * return_type_symbol = &search_constant_type_c::constant_int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14654
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14655
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14656
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14657
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14658
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14659
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14660
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14661
	}/*function_int_to_bcd*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14662
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14663
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14664
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14665
 *DATE_AND_TIME_TO_TIME_OF_DAY
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14666
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14667
	case function_date_and_time_to_time_of_day :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14668
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14669
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14670
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14671
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14672
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14673
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14674
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14675
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14676
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14677
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14678
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14679
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14680
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14681
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14682
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14683
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14684
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14685
				symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14686
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14687
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14688
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14689
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14690
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14691
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14692
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14693
	}/*function_date_and_time_to_time_of_day*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14694
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14695
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14696
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14697
 *DATE_AND_TIME_TO_DATE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14698
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14699
	case function_date_and_time_to_date :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14700
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14701
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14702
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14703
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14704
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14705
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14706
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14707
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14708
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14709
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14710
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14711
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14712
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14713
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14714
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14715
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14716
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14717
				symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14718
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14719
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14720
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14721
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14722
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14723
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14724
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14725
	}/*function_date_and_time_to_date*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14726
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14727
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14728
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14729
 *ABS
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14730
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14731
	case function_abs :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14732
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14733
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14734
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14735
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14736
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14737
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14738
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14739
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14740
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14741
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14742
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14743
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14744
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14745
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14746
			if(search_expression_type->is_num_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14747
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14748
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14749
				symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14750
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14751
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14752
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14753
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14754
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14755
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14756
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14757
	}/*function_abs*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14758
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14759
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14760
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14761
 *SQRT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14762
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14763
	case function_sqrt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14764
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14765
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14766
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14767
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14768
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14769
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14770
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14771
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14772
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14773
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14774
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14775
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14776
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14777
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14778
			if(search_expression_type->is_real_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14779
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14780
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14781
				symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14782
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14783
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14784
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14785
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14786
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14787
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14788
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14789
	}/*function_sqrt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14790
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14791
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14792
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14793
 *LN
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14794
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14795
	case function_ln :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14796
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14797
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14798
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14799
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14800
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14801
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14802
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14803
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14804
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14805
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14806
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14807
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14808
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14809
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14810
			if(search_expression_type->is_real_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14811
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14812
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14813
				symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14814
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14815
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14816
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14817
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14818
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14819
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14820
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14821
	}/*function_ln*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14822
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14823
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14824
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14825
 *LOG
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14826
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14827
	case function_log :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14828
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14829
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14830
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14831
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14832
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14833
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14834
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14835
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14836
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14837
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14838
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14839
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14840
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14841
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14842
			if(search_expression_type->is_real_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14843
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14844
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14845
				symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14846
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14847
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14848
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14849
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14850
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14851
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14852
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14853
	}/*function_log*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14854
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14855
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14856
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14857
 *EXP
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14858
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14859
	case function_exp :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14860
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14861
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14862
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14863
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14864
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14865
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14866
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14867
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14868
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14869
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14870
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14871
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14872
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14873
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14874
			if(search_expression_type->is_real_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14875
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14876
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14877
				symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14878
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14879
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14880
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14881
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14882
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14883
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14884
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14885
	}/*function_exp*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14886
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14887
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14888
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14889
 *SIN
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14890
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14891
	case function_sin :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14892
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14893
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14894
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14895
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14896
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14897
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14898
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14899
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14900
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14901
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14902
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14903
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14904
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14905
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14906
			if(search_expression_type->is_real_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14907
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14908
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14909
				symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14910
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14911
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14912
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14913
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14914
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14915
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14916
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14917
	}/*function_sin*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14918
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14919
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14920
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14921
 *COS
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14922
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14923
	case function_cos :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14924
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14925
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14926
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14927
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14928
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14929
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14930
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14931
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14932
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14933
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14934
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14935
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14936
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14937
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14938
			if(search_expression_type->is_real_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14939
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14940
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14941
				symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14942
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14943
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14944
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14945
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14946
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14947
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14948
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14949
	}/*function_cos*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14950
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14951
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14952
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14953
 *TAN
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14954
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14955
	case function_tan :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14956
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14957
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14958
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14959
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14960
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14961
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14962
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14963
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14964
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14965
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14966
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14967
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14968
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14969
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14970
			if(search_expression_type->is_real_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14971
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14972
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14973
				symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14974
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14975
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14976
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14977
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14978
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14979
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14980
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14981
	}/*function_tan*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14982
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14983
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14984
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14985
 *ASIN
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14986
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14987
	case function_asin :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14988
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14989
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14990
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14991
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14992
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14993
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14994
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14995
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14996
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14997
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14998
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 14999
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15000
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15001
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15002
			if(search_expression_type->is_real_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15003
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15004
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15005
				symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15006
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15007
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15008
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15009
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15010
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15011
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15012
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15013
	}/*function_asin*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15014
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15015
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15016
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15017
 *ACOS
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15018
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15019
	case function_acos :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15020
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15021
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15022
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15023
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15024
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15025
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15026
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15027
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15028
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15029
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15030
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15031
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15032
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15033
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15034
			if(search_expression_type->is_real_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15035
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15036
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15037
				symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15038
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15039
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15040
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15041
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15042
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15043
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15044
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15045
	}/*function_acos*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15046
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15047
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15048
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15049
 *ATAN
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15050
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15051
	case function_atan :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15052
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15053
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15054
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15055
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15056
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15057
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15058
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15059
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15060
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15061
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15062
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15063
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15064
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15065
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15066
			if(search_expression_type->is_real_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15067
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15068
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15069
				symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15070
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15071
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15072
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15073
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15074
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15075
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15076
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15077
	}/*function_atan*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15078
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15079
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15080
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15081
 *ADD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15082
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15083
	case function_add :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15084
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15085
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15086
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15087
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15088
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15089
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15090
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15091
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15092
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15093
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15094
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15095
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15096
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15097
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15098
			if(search_expression_type->is_num_type(IN1_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15099
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15100
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15101
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15102
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15103
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15104
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15105
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15106
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15107
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15108
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15109
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15110
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15111
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15112
					if(search_expression_type->is_num_type(IN2_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15113
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15114
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15115
						symbol_c * return_type_symbol = last_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15116
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15117
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15118
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15119
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15120
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15121
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15122
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15123
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15124
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15125
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15126
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15127
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15128
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15129
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15130
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15131
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15132
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15133
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15134
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15135
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15136
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15137
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15138
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15139
					if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15140
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15141
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15142
						symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15143
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15144
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15145
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15146
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15147
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15148
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15149
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15150
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15151
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15152
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15153
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15154
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15155
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15156
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15157
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15158
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15159
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15160
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15161
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15162
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15163
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15164
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15165
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15166
					if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15167
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15168
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15169
						symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15170
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15171
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15172
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15173
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15174
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15175
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15176
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15177
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15178
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15179
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15180
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15181
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15182
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15183
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15184
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15185
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15186
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15187
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15188
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15189
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15190
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15191
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15192
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15193
					if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15194
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15195
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15196
						symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15197
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15198
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15199
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15200
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15201
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15202
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15203
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15204
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15205
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15206
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15207
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15208
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15209
	}/*function_add*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15210
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15211
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15212
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15213
 *MUL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15214
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15215
	case function_mul :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15216
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15217
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15218
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15219
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15220
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15221
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15222
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15223
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15224
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15225
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15226
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15227
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15228
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15229
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15230
			if(search_expression_type->is_num_type(IN1_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15231
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15232
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15233
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15234
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15235
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15236
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15237
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15238
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15239
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15240
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15241
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15242
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15243
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15244
					if(search_expression_type->is_num_type(IN2_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15245
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15246
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15247
						symbol_c * return_type_symbol = last_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15248
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15249
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15250
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15251
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15252
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15253
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15254
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15255
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15256
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15257
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15258
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15259
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15260
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15261
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15262
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15263
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15264
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15265
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15266
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15267
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15268
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15269
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15270
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15271
					if(search_expression_type->is_num_type(IN2_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15272
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15273
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15274
						symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15275
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15276
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15277
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15278
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15279
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15280
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15281
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15282
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15283
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15284
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15285
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15286
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15287
	}/*function_mul*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15288
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15289
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15290
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15291
 *SUB
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15292
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15293
	case function_sub :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15294
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15295
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15296
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15297
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15298
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15299
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15300
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15301
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15302
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15303
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15304
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15305
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15306
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15307
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15308
			if(search_expression_type->is_num_type(IN1_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15309
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15310
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15311
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15312
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15313
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15314
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15315
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15316
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15317
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15318
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15319
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15320
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15321
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15322
					if(search_expression_type->is_num_type(IN2_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15323
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15324
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15325
						symbol_c * return_type_symbol = last_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15326
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15327
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15328
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15329
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15330
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15331
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15332
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15333
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15334
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15335
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15336
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15337
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15338
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15339
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15340
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15341
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15342
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15343
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15344
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15345
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15346
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15347
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15348
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15349
					if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15350
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15351
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15352
						symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15353
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15354
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15355
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15356
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15357
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15358
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15359
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15360
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15361
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15362
			if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15363
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15364
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15365
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15366
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15367
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15368
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15369
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15370
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15371
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15372
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15373
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15374
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15375
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15376
					if (typeid(*last_type_symbol) == typeid(dt_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15377
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15378
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15379
						symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15380
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15381
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15382
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15383
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15384
					if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15385
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15386
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15387
						symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15388
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15389
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15390
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15391
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15392
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15393
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15394
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15395
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15396
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15397
			if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15398
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15399
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15400
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15401
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15402
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15403
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15404
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15405
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15406
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15407
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15408
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15409
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15410
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15411
					if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15412
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15413
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15414
						symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15415
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15416
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15417
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15418
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15419
					if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15420
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15421
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15422
						symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15423
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15424
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15425
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15426
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15427
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15428
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15429
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15430
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15431
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15432
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15433
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15434
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15435
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15436
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15437
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15438
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15439
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15440
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15441
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15442
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15443
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15444
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15445
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15446
					if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15447
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15448
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15449
						symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15450
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15451
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15452
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15453
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15454
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15455
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15456
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15457
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15458
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15459
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15460
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15461
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15462
	}/*function_sub*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15463
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15464
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15465
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15466
 *DIV
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15467
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15468
	case function_div :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15469
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15470
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15471
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15472
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15473
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15474
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15475
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15476
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15477
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15478
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15479
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15480
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15481
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15482
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15483
			if(search_expression_type->is_num_type(IN1_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15484
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15485
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15486
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15487
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15488
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15489
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15490
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15491
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15492
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15493
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15494
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15495
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15496
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15497
					if(search_expression_type->is_num_type(IN2_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15498
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15499
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15500
						symbol_c * return_type_symbol = last_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15501
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15502
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15503
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15504
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15505
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15506
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15507
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15508
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15509
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15510
			if (typeid(*last_type_symbol) == typeid(time_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15511
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15512
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15513
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15514
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15515
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15516
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15517
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15518
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15519
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15520
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15521
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15522
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15523
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15524
					if(search_expression_type->is_num_type(IN2_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15525
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15526
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15527
						symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15528
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15529
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15530
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15531
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15532
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15533
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15534
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15535
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15536
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15537
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15538
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15539
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15540
	}/*function_div*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15541
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15542
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15543
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15544
 *MOD
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15545
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15546
	case function_mod :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15547
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15548
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15549
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15550
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15551
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15552
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15553
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15554
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15555
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15556
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15557
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15558
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15559
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15560
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15561
			if(search_expression_type->is_num_type(IN1_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15562
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15563
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15564
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15565
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15566
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15567
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15568
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15569
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15570
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15571
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15572
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15573
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15574
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15575
					if(search_expression_type->is_num_type(IN2_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15576
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15577
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15578
						symbol_c * return_type_symbol = last_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15579
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15580
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15581
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15582
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15583
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15584
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15585
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15586
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15587
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15588
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15589
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15590
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15591
	}/*function_mod*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15592
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15593
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15594
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15595
 *EXPT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15596
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15597
	case function_expt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15598
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15599
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15600
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15601
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15602
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15603
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15604
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15605
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15606
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15607
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15608
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15609
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15610
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15611
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15612
			if(search_expression_type->is_num_type(IN1_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15613
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15614
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15615
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15616
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15617
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15618
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15619
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15620
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15621
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15622
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15623
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15624
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15625
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15626
					if(search_expression_type->is_num_type(IN2_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15627
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15628
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15629
						symbol_c * return_type_symbol = last_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15630
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15631
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15632
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15633
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15634
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15635
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15636
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15637
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15638
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15639
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15640
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15641
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15642
	}/*function_expt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15643
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15644
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15645
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15646
 *MOVE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15647
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15648
	case function_move :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15649
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15650
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15651
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15652
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15653
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15654
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15655
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15656
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15657
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15658
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15659
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15660
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15661
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15662
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15663
			if(search_expression_type->is_num_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15664
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15665
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15666
				symbol_c * return_type_symbol = last_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15667
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15668
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15669
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15670
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15671
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15672
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15673
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15674
	}/*function_move*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15675
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15676
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15677
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15678
 *SHL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15679
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15680
	case function_shl :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15681
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15682
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15683
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15684
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15685
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15686
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15687
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15688
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15689
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15690
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15691
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15692
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15693
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15694
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15695
			if(search_expression_type->is_binary_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15696
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15697
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15698
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15699
					identifier_c param_name("N");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15700
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15701
					symbol_c *N_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15702
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15703
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15704
					if (N_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15705
					  N_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15706
					symbol_c *N_type_symbol = search_expression_type->get_type(N_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15707
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15708
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15709
					if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15710
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15711
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15712
						symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15713
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15714
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15715
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15716
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15717
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15718
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15719
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15720
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15721
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15722
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15723
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15724
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15725
	}/*function_shl*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15726
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15727
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15728
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15729
 *SHR
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15730
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15731
	case function_shr :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15732
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15733
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15734
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15735
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15736
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15737
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15738
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15739
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15740
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15741
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15742
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15743
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15744
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15745
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15746
			if(search_expression_type->is_binary_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15747
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15748
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15749
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15750
					identifier_c param_name("N");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15751
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15752
					symbol_c *N_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15753
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15754
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15755
					if (N_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15756
					  N_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15757
					symbol_c *N_type_symbol = search_expression_type->get_type(N_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15758
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15759
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15760
					if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15761
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15762
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15763
						symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15764
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15765
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15766
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15767
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15768
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15769
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15770
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15771
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15772
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15773
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15774
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15775
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15776
	}/*function_shr*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15777
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15778
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15779
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15780
 *ROR
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15781
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15782
	case function_ror :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15783
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15784
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15785
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15786
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15787
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15788
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15789
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15790
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15791
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15792
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15793
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15794
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15795
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15796
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15797
			if(search_expression_type->is_binary_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15798
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15799
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15800
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15801
					identifier_c param_name("N");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15802
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15803
					symbol_c *N_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15804
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15805
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15806
					if (N_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15807
					  N_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15808
					symbol_c *N_type_symbol = search_expression_type->get_type(N_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15809
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15810
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15811
					if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15812
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15813
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15814
						symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15815
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15816
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15817
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15818
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15819
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15820
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15821
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15822
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15823
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15824
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15825
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15826
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15827
	}/*function_ror*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15828
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15829
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15830
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15831
 *ROL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15832
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15833
	case function_rol :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15834
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15835
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15836
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15837
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15838
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15839
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15840
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15841
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15842
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15843
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15844
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15845
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15846
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15847
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15848
			if(search_expression_type->is_binary_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15849
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15850
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15851
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15852
					identifier_c param_name("N");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15853
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15854
					symbol_c *N_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15855
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15856
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15857
					if (N_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15858
					  N_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15859
					symbol_c *N_type_symbol = search_expression_type->get_type(N_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15860
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15861
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15862
					if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15863
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15864
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15865
						symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15866
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15867
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15868
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15869
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15870
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15871
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15872
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15873
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15874
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15875
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15876
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15877
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15878
	}/*function_rol*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15879
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15880
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15881
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15882
 *AND
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15883
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15884
	case function_and :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15885
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15886
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15887
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15888
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15889
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15890
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15891
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15892
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15893
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15894
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15895
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15896
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15897
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15898
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15899
			if(search_expression_type->is_binary_type(IN1_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15900
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15901
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15902
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15903
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15904
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15905
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15906
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15907
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15908
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15909
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15910
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15911
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15912
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15913
					if(search_expression_type->is_binary_type(IN2_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15914
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15915
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15916
						symbol_c * return_type_symbol = last_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15917
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15918
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15919
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15920
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15921
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15922
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15923
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15924
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15925
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15926
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15927
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15928
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15929
	}/*function_and*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15930
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15931
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15932
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15933
 *OR
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15934
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15935
	case function_or :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15936
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15937
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15938
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15939
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15940
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15941
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15942
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15943
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15944
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15945
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15946
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15947
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15948
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15949
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15950
			if(search_expression_type->is_binary_type(IN1_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15951
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15952
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15953
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15954
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15955
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15956
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15957
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15958
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15959
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15960
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15961
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15962
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15963
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15964
					if(search_expression_type->is_binary_type(IN2_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15965
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15966
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15967
						symbol_c * return_type_symbol = last_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15968
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15969
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15970
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15971
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15972
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15973
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15974
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15975
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15976
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15977
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15978
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15979
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15980
	}/*function_or*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15981
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15982
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15983
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15984
 *XOR
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15985
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15986
	case function_xor :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15987
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15988
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15989
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15990
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15991
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15992
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15993
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15994
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15995
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15996
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15997
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15998
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 15999
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16000
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16001
			if(search_expression_type->is_binary_type(IN1_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16002
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16003
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16004
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16005
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16006
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16007
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16008
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16009
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16010
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16011
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16012
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16013
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16014
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16015
					if(search_expression_type->is_binary_type(IN2_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16016
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16017
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16018
						symbol_c * return_type_symbol = last_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16019
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16020
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16021
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16022
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16023
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16024
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16025
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16026
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16027
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16028
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16029
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16030
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16031
	}/*function_xor*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16032
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16033
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16034
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16035
 *NOT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16036
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16037
	case function_not :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16038
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16039
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16040
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16041
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16042
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16043
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16044
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16045
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16046
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16047
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16048
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16049
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16050
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16051
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16052
			if(search_expression_type->is_binary_type(IN_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16053
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16054
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16055
				symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16056
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16057
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16058
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16059
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16060
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16061
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16062
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16063
	}/*function_not*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16064
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16065
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16066
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16067
 *SEL
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16068
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16069
	case function_sel :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16070
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16071
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16072
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16073
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16074
			identifier_c param_name("G");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16075
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16076
			symbol_c *G_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16077
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16078
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16079
			if (G_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16080
			  G_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16081
			symbol_c *G_type_symbol = search_expression_type->get_type(G_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16082
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16083
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16084
			if (typeid(*last_type_symbol) == typeid(bool_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16085
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16086
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16087
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16088
					identifier_c param_name("IN0");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16089
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16090
					symbol_c *IN0_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16091
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16092
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16093
					if (IN0_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16094
					  IN0_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16095
					symbol_c *IN0_type_symbol = search_expression_type->get_type(IN0_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16096
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16097
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16098
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16099
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16100
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16101
						{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16102
							identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16103
							/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16104
							symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16105
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16106
							/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16107
							if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16108
							  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16109
							symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16110
							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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16111
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16112
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16113
							{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16114
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16115
								symbol_c * return_type_symbol = last_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16116
								return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16117
								
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16118
							}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16119
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16120
							ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16121
						}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16122
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16123
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16124
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16125
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16126
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16127
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16128
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16129
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16130
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16131
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16132
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16133
	}/*function_sel*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16134
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16135
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16136
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16137
 *MAX
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16138
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16139
	case function_max :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16140
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16141
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16142
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16143
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16144
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16145
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16146
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16147
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16148
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16149
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16150
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16151
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16152
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16153
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16154
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16155
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16156
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16157
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16158
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16159
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16160
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16161
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16162
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16163
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16164
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16165
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16166
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16167
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16168
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16169
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16170
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16171
						symbol_c * return_type_symbol = last_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16172
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16173
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16174
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16175
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16176
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16177
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16178
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16179
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16180
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16181
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16182
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16183
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16184
	}/*function_max*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16185
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16186
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16187
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16188
 *MIN
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16189
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16190
	case function_min :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16191
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16192
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16193
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16194
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16195
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16196
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16197
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16198
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16199
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16200
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16201
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16202
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16203
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16204
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16205
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16206
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16207
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16208
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16209
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16210
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16211
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16212
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16213
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16214
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16215
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16216
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16217
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16218
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16219
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16220
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16221
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16222
						symbol_c * return_type_symbol = last_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16223
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16224
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16225
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16226
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16227
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16228
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16229
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16230
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16231
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16232
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16233
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16234
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16235
	}/*function_min*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16236
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16237
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16238
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16239
 *LIMIT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16240
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16241
	case function_limit :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16242
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16243
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16244
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16245
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16246
			identifier_c param_name("MN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16247
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16248
			symbol_c *MN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16249
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16250
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16251
			if (MN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16252
			  MN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16253
			symbol_c *MN_type_symbol = search_expression_type->get_type(MN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16254
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16255
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16256
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16257
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16258
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16259
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16260
					identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16261
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16262
					symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16263
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16264
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16265
					if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16266
					  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16267
					symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16268
					last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16269
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16270
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16271
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16272
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16273
						{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16274
							identifier_c param_name("MX");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16275
							/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16276
							symbol_c *MX_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16277
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16278
							/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16279
							if (MX_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16280
							  MX_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16281
							symbol_c *MX_type_symbol = search_expression_type->get_type(MX_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16282
							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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16283
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16284
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16285
							{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16286
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16287
								symbol_c * return_type_symbol = IN_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16288
								return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16289
								
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16290
							}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16291
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16292
							ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16293
						}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16294
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16295
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16296
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16297
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16298
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16299
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16300
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16301
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16302
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16303
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16304
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16305
	}/*function_limit*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16306
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16307
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16308
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16309
 *MUX
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16310
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16311
	case function_mux :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16312
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16313
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16314
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16315
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16316
			identifier_c param_name("K");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16317
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16318
			symbol_c *K_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16319
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16320
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16321
			if (K_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16322
			  K_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16323
			symbol_c *K_type_symbol = search_expression_type->get_type(K_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16324
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16325
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16326
			if(search_expression_type->is_integer_type(K_param_value))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16327
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16328
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16329
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16330
					identifier_c param_name("IN0");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16331
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16332
					symbol_c *IN0_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16333
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16334
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16335
					if (IN0_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16336
					  IN0_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16337
					symbol_c *IN0_type_symbol = search_expression_type->get_type(IN0_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16338
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16339
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16340
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16341
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16342
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16343
						{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16344
							identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16345
							/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16346
							symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16347
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16348
							/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16349
							if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16350
							  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16351
							symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16352
							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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16353
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16354
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16355
							{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16356
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16357
								symbol_c * return_type_symbol = last_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16358
								return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16359
								
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16360
							}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16361
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16362
							ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16363
						}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16364
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16365
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16366
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16367
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16368
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16369
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16370
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16371
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16372
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16373
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16374
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16375
	}/*function_mux*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16376
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16377
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16378
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16379
 *GT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16380
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16381
	case function_gt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16382
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16383
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16384
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16385
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16386
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16387
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16388
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16389
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16390
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16391
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16392
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16393
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16394
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16395
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16396
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16397
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16398
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16399
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16400
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16401
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16402
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16403
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16404
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16405
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16406
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16407
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16408
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16409
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16410
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16411
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16412
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16413
						symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16414
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16415
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16416
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16417
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16418
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16419
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16420
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16421
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16422
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16423
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16424
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16425
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16426
	}/*function_gt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16427
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16428
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16429
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16430
 *GE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16431
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16432
	case function_ge :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16433
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16434
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16435
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16436
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16437
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16438
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16439
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16440
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16441
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16442
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16443
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16444
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16445
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16446
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16447
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16448
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16449
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16450
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16451
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16452
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16453
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16454
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16455
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16456
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16457
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16458
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16459
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16460
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16461
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16462
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16463
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16464
						symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16465
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16466
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16467
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16468
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16469
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16470
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16471
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16472
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16473
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16474
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16475
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16476
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16477
	}/*function_ge*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16478
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16479
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16480
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16481
 *EQ
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16482
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16483
	case function_eq :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16484
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16485
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16486
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16487
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16488
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16489
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16490
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16491
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16492
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16493
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16494
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16495
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16496
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16497
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16498
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16499
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16500
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16501
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16502
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16503
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16504
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16505
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16506
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16507
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16508
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16509
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16510
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16511
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16512
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16513
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16514
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16515
						symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16516
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16517
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16518
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16519
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16520
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16521
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16522
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16523
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16524
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16525
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16526
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16527
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16528
	}/*function_eq*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16529
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16530
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16531
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16532
 *LT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16533
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16534
	case function_lt :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16535
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16536
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16537
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16538
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16539
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16540
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16541
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16542
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16543
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16544
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16545
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16546
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16547
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16548
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16549
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16550
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16551
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16552
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16553
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16554
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16555
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16556
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16557
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16558
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16559
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16560
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16561
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16562
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16563
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16564
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16565
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16566
						symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16567
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16568
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16569
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16570
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16571
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16572
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16573
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16574
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16575
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16576
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16577
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16578
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16579
	}/*function_lt*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16580
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16581
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16582
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16583
 *LE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16584
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16585
	case function_le :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16586
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16587
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16588
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16589
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16590
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16591
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16592
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16593
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16594
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16595
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16596
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16597
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16598
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16599
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16600
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16601
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16602
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16603
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16604
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16605
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16606
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16607
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16608
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16609
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16610
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16611
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16612
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16613
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16614
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16615
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16616
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16617
						symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16618
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16619
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16620
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16621
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16622
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16623
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16624
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16625
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16626
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16627
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16628
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16629
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16630
	}/*function_le*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16631
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16632
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16633
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16634
 *NE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16635
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16636
	case function_ne :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16637
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16638
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16639
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16640
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16641
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16642
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16643
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16644
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16645
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16646
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16647
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16648
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16649
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16650
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16651
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16652
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16653
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16654
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16655
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16656
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16657
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16658
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16659
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16660
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16661
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16662
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16663
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16664
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16665
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16666
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16667
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16668
						symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16669
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16670
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16671
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16672
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16673
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16674
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16675
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16676
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16677
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16678
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16679
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16680
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16681
	}/*function_ne*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16682
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16683
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16684
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16685
 *LEN
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16686
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16687
	case function_len :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16688
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16689
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16690
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16691
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16692
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16693
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16694
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16695
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16696
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16697
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16698
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16699
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16700
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16701
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16702
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16703
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16704
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16705
				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16706
				return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16707
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16708
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16709
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16710
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16711
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16712
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16713
	}/*function_len*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16714
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16715
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16716
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16717
 *LEFT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16718
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16719
	case function_left :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16720
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16721
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16722
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16723
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16724
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16725
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16726
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16727
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16728
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16729
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16730
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16731
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16732
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16733
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16734
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16735
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16736
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16737
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16738
					identifier_c param_name("L");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16739
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16740
					symbol_c *L_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16741
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16742
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16743
					if (L_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16744
					  L_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16745
					symbol_c *L_type_symbol = search_expression_type->get_type(L_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16746
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16747
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16748
					if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16749
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16750
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16751
						symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16752
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16753
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16754
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16755
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16756
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16757
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16758
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16759
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16760
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16761
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16762
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16763
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16764
	}/*function_left*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16765
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16766
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16767
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16768
 *RIGHT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16769
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16770
	case function_right :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16771
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16772
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16773
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16774
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16775
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16776
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16777
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16778
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16779
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16780
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16781
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16782
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16783
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16784
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16785
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16786
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16787
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16788
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16789
					identifier_c param_name("L");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16790
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16791
					symbol_c *L_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16792
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16793
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16794
					if (L_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16795
					  L_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16796
					symbol_c *L_type_symbol = search_expression_type->get_type(L_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16797
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16798
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16799
					if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16800
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16801
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16802
						symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16803
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16804
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16805
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16806
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16807
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16808
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16809
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16810
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16811
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16812
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16813
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16814
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16815
	}/*function_right*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16816
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16817
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16818
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16819
 *MID
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16820
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16821
	case function_mid :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16822
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16823
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16824
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16825
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16826
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16827
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16828
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16829
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16830
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16831
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16832
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16833
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16834
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16835
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16836
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16837
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16838
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16839
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16840
					identifier_c param_name("L");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16841
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16842
					symbol_c *L_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16843
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16844
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16845
					if (L_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16846
					  L_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16847
					symbol_c *L_type_symbol = search_expression_type->get_type(L_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16848
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16849
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16850
					if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16851
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16852
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16853
						{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16854
							identifier_c param_name("P");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16855
							/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16856
							symbol_c *P_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16857
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16858
							/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16859
							if (P_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16860
							  P_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16861
							symbol_c *P_type_symbol = search_expression_type->get_type(P_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16862
							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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16863
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16864
							if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16865
							{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16866
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16867
								symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16868
								return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16869
								
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16870
							}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16871
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16872
							ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16873
						}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16874
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16875
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16876
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16877
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16878
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16879
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16880
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16881
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16882
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16883
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16884
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16885
	}/*function_mid*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16886
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16887
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16888
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16889
 *CONCAT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16890
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16891
	case function_concat :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16892
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16893
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16894
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16895
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16896
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16897
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16898
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16899
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16900
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16901
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16902
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16903
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16904
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16905
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16906
			if (typeid(*last_type_symbol) == typeid(date_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16907
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16908
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16909
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16910
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16911
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16912
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16913
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16914
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16915
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16916
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16917
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16918
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16919
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16920
					if (typeid(*last_type_symbol) == typeid(tod_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16921
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16922
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16923
						symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16924
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16925
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16926
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16927
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16928
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16929
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16930
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16931
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16932
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16933
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16934
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16935
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16936
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16937
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16938
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16939
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16940
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16941
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16942
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16943
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16944
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16945
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16946
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16947
					if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16948
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16949
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16950
						symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16951
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16952
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16953
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16954
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16955
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16956
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16957
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16958
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16959
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16960
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16961
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16962
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16963
	}/*function_concat*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16964
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16965
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16966
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16967
 *INSERT
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16968
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16969
	case function_insert :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16970
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16971
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16972
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16973
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16974
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16975
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16976
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16977
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16978
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16979
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16980
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16981
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16982
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16983
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16984
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16985
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16986
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16987
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16988
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16989
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16990
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16991
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16992
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16993
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16994
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16995
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16996
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16997
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16998
					if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 16999
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17000
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17001
						{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17002
							identifier_c param_name("P");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17003
							/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17004
							symbol_c *P_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17005
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17006
							/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17007
							if (P_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17008
							  P_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17009
							symbol_c *P_type_symbol = search_expression_type->get_type(P_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17010
							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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17011
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17012
							if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17013
							{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17014
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17015
								symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17016
								return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17017
								
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17018
							}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17019
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17020
							ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17021
						}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17022
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17023
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17024
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17025
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17026
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17027
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17028
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17029
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17030
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17031
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17032
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17033
	}/*function_insert*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17034
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17035
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17036
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17037
 *DELETE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17038
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17039
	case function_delete :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17040
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17041
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17042
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17043
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17044
			identifier_c param_name("IN");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17045
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17046
			symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17047
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17048
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17049
			if (IN_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17050
			  IN_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17051
			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17052
			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17053
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17054
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17055
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17056
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17057
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17058
					identifier_c param_name("L");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17059
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17060
					symbol_c *L_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17061
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17062
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17063
					if (L_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17064
					  L_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17065
					symbol_c *L_type_symbol = search_expression_type->get_type(L_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17066
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17067
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17068
					if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17069
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17070
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17071
						{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17072
							identifier_c param_name("P");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17073
							/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17074
							symbol_c *P_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17075
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17076
							/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17077
							if (P_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17078
							  P_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17079
							symbol_c *P_type_symbol = search_expression_type->get_type(P_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17080
							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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17081
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17082
							if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17083
							{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17084
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17085
								symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17086
								return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17087
								
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17088
							}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17089
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17090
							ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17091
						}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17092
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17093
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17094
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17095
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17096
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17097
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17098
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17099
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17100
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17101
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17102
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17103
	}/*function_delete*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17104
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17105
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17106
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17107
 *REPLACE
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17108
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17109
	case function_replace :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17110
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17111
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17112
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17113
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17114
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17115
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17116
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17117
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17118
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17119
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17120
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17121
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17122
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17123
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17124
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17125
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17126
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17127
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17128
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17129
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17130
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17131
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17132
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17133
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17134
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17135
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17136
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17137
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17138
					if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17139
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17140
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17141
						{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17142
							identifier_c param_name("L");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17143
							/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17144
							symbol_c *L_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17145
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17146
							/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17147
							if (L_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17148
							  L_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17149
							symbol_c *L_type_symbol = search_expression_type->get_type(L_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17150
							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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17151
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17152
							if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17153
							{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17154
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17155
								{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17156
									identifier_c param_name("P");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17157
									/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17158
									symbol_c *P_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17159
									
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17160
									/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17161
									if (P_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17162
									  P_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17163
									symbol_c *P_type_symbol = search_expression_type->get_type(P_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17164
									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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17165
									
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17166
									if (typeid(*last_type_symbol) == typeid(uint_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17167
									{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17168
								
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17169
										symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17170
										return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17171
										
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17172
									}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17173
									
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17174
									ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17175
								}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17176
								
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17177
							}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17178
							
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17179
							ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17180
						}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17181
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17182
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17183
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17184
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17185
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17186
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17187
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17188
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17189
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17190
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17191
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17192
	}/*function_replace*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17193
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17194
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17195
/****
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17196
 *FIND
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17197
 */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17198
	case function_find :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17199
	{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17200
		symbol_c *last_type_symbol = NULL;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17201
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17202
		{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17203
			identifier_c param_name("IN1");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17204
			/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17205
			symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17206
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17207
			/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17208
			if (IN1_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17209
			  IN1_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17210
			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17211
			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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17212
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17213
			if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17214
			{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17215
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17216
				{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17217
					identifier_c param_name("IN2");
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17218
					/* Get the value from a foo(<param_name> = <param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17219
					symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17220
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17221
					/* Get the value from a foo(<param_value>) style call */
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17222
					if (IN2_param_value == NULL)
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17223
					  IN2_param_value = function_call_param_iterator.next();
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17224
					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17225
					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 ;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17226
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17227
					if (typeid(*last_type_symbol) == typeid(string_type_name_c))
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17228
					{
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17229
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17230
						symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17231
						return return_type_symbol;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17232
						
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17233
					}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17234
					
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17235
					ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17236
				}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17237
				
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17238
			}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17239
			
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17240
			ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17241
		}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17242
		
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17243
	}/*function_find*/
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17244
	break;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17245
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17246
	case function_none :
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17247
	ERROR;
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17248
}
4507beb2aac6 preliminary std lib support for ST
etisserant
parents:
diff changeset
 17249
return NULL;