stage4/generate_cc/st_code_gen.c
changeset 34 a793b010e371
parent 33 4507beb2aac6
child 35 9f3d6c089533
--- a/stage4/generate_cc/st_code_gen.c	Mon Jun 18 14:45:03 2007 +0200
+++ b/stage4/generate_cc/st_code_gen.c	Tue Jun 19 08:42:10 2007 +0200
@@ -16035,7 +16035,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_real_type(IN_param_value))
+			if(search_expression_type->is_real_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = &search_constant_type_c::constant_int_type_name;
@@ -16069,7 +16069,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_binary_type(IN_param_value))
+			if(search_expression_type->is_binary_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
@@ -16106,7 +16106,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_binary_type(IN_param_value))
+			if(search_expression_type->is_binary_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
@@ -16143,7 +16143,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_binary_type(IN_param_value))
+			if(search_expression_type->is_binary_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
@@ -16180,7 +16180,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_binary_type(IN_param_value))
+			if(search_expression_type->is_binary_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
@@ -16217,7 +16217,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_binary_type(IN_param_value))
+			if(search_expression_type->is_binary_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
@@ -16254,7 +16254,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_binary_type(IN_param_value))
+			if(search_expression_type->is_binary_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
@@ -16291,7 +16291,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_binary_type(IN_param_value))
+			if(search_expression_type->is_binary_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
@@ -16328,7 +16328,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_binary_type(IN_param_value))
+			if(search_expression_type->is_binary_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
@@ -16731,7 +16731,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_num_type(IN_param_value))
+			if(search_expression_type->is_num_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = IN_type_symbol;
@@ -16768,7 +16768,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_real_type(IN_param_value))
+			if(search_expression_type->is_real_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = IN_type_symbol;
@@ -16803,7 +16803,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_real_type(IN_param_value))
+			if(search_expression_type->is_real_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = IN_type_symbol;
@@ -16838,7 +16838,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_real_type(IN_param_value))
+			if(search_expression_type->is_real_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = IN_type_symbol;
@@ -16873,7 +16873,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_real_type(IN_param_value))
+			if(search_expression_type->is_real_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = IN_type_symbol;
@@ -16908,7 +16908,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_real_type(IN_param_value))
+			if(search_expression_type->is_real_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = IN_type_symbol;
@@ -16943,7 +16943,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_real_type(IN_param_value))
+			if(search_expression_type->is_real_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = IN_type_symbol;
@@ -16978,7 +16978,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_real_type(IN_param_value))
+			if(search_expression_type->is_real_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = IN_type_symbol;
@@ -17013,7 +17013,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_real_type(IN_param_value))
+			if(search_expression_type->is_real_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = IN_type_symbol;
@@ -17048,7 +17048,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_real_type(IN_param_value))
+			if(search_expression_type->is_real_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = IN_type_symbol;
@@ -17083,7 +17083,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_real_type(IN_param_value))
+			if(search_expression_type->is_real_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = IN_type_symbol;
@@ -17118,7 +17118,7 @@
 			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
 			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 ;
 			
-			if(search_expression_type->is_num_type(IN1_param_value))
+			if(search_expression_type->is_num_type(IN1_type_symbol))
 			{
 		
 				{
@@ -17132,7 +17132,7 @@
 					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
 					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 ;
 					
-					if(search_expression_type->is_num_type(IN2_param_value))
+					if(search_expression_type->is_num_type(IN2_type_symbol))
 					{
 				
 						symbol_c * return_type_symbol = last_type_symbol;
@@ -17296,7 +17296,7 @@
 			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
 			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 ;
 			
-			if(search_expression_type->is_num_type(IN1_param_value))
+			if(search_expression_type->is_num_type(IN1_type_symbol))
 			{
 		
 				{
@@ -17310,7 +17310,7 @@
 					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
 					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 ;
 					
-					if(search_expression_type->is_num_type(IN2_param_value))
+					if(search_expression_type->is_num_type(IN2_type_symbol))
 					{
 				
 						symbol_c * return_type_symbol = last_type_symbol;
@@ -17368,7 +17368,7 @@
 					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
 					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 ;
 					
-					if(search_expression_type->is_num_type(IN2_param_value))
+					if(search_expression_type->is_num_type(IN2_type_symbol))
 					{
 				
 						symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
@@ -17410,7 +17410,7 @@
 			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
 			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 ;
 			
-			if(search_expression_type->is_num_type(IN1_param_value))
+			if(search_expression_type->is_num_type(IN1_type_symbol))
 			{
 		
 				{
@@ -17424,7 +17424,7 @@
 					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
 					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 ;
 					
-					if(search_expression_type->is_num_type(IN2_param_value))
+					if(search_expression_type->is_num_type(IN2_type_symbol))
 					{
 				
 						symbol_c * return_type_symbol = last_type_symbol;
@@ -17620,7 +17620,7 @@
 			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
 			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 ;
 			
-			if(search_expression_type->is_num_type(IN1_param_value))
+			if(search_expression_type->is_num_type(IN1_type_symbol))
 			{
 		
 				{
@@ -17634,7 +17634,7 @@
 					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
 					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 ;
 					
-					if(search_expression_type->is_num_type(IN2_param_value))
+					if(search_expression_type->is_num_type(IN2_type_symbol))
 					{
 				
 						symbol_c * return_type_symbol = last_type_symbol;
@@ -17666,7 +17666,7 @@
 					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
 					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 ;
 					
-					if(search_expression_type->is_num_type(IN2_param_value))
+					if(search_expression_type->is_num_type(IN2_type_symbol))
 					{
 				
 						symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
@@ -17708,7 +17708,7 @@
 			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
 			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 ;
 			
-			if(search_expression_type->is_num_type(IN1_param_value))
+			if(search_expression_type->is_num_type(IN1_type_symbol))
 			{
 		
 				{
@@ -17722,7 +17722,7 @@
 					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
 					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 ;
 					
-					if(search_expression_type->is_num_type(IN2_param_value))
+					if(search_expression_type->is_num_type(IN2_type_symbol))
 					{
 				
 						symbol_c * return_type_symbol = last_type_symbol;
@@ -17764,7 +17764,7 @@
 			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
 			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 ;
 			
-			if(search_expression_type->is_num_type(IN1_param_value))
+			if(search_expression_type->is_num_type(IN1_type_symbol))
 			{
 		
 				{
@@ -17778,7 +17778,7 @@
 					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
 					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 ;
 					
-					if(search_expression_type->is_num_type(IN2_param_value))
+					if(search_expression_type->is_num_type(IN2_type_symbol))
 					{
 				
 						symbol_c * return_type_symbol = last_type_symbol;
@@ -17820,7 +17820,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_num_type(IN_param_value))
+			if(search_expression_type->is_num_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = last_type_symbol;
@@ -17853,7 +17853,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_binary_type(IN_param_value))
+			if(search_expression_type->is_binary_type(IN_type_symbol))
 			{
 		
 				{
@@ -17907,7 +17907,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_binary_type(IN_param_value))
+			if(search_expression_type->is_binary_type(IN_type_symbol))
 			{
 		
 				{
@@ -17961,7 +17961,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_binary_type(IN_param_value))
+			if(search_expression_type->is_binary_type(IN_type_symbol))
 			{
 		
 				{
@@ -18019,7 +18019,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_binary_type(IN_param_value))
+			if(search_expression_type->is_binary_type(IN_type_symbol))
 			{
 		
 				{
@@ -18077,7 +18077,7 @@
 			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
 			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 ;
 			
-			if(search_expression_type->is_binary_type(IN1_param_value))
+			if(search_expression_type->is_binary_type(IN1_type_symbol))
 			{
 		
 				{
@@ -18091,11 +18091,13 @@
 					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
 					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 ;
 					
-					if(search_expression_type->is_binary_type(IN2_param_value))
+					if(search_expression_type->is_binary_type(IN2_type_symbol))
 					{
 				
 						symbol_c * return_type_symbol = last_type_symbol;
 						s4o.print("(");
+						if (search_expression_type->is_bool_type(last_type_symbol))
+						  s4o.print("(");
 						IN1_param_value->accept(*this);
 						s4o.print("&");
 						IN2_param_value->accept(*this);
@@ -18125,6 +18127,11 @@
 							
 						}while(param_value != NULL);
 						s4o.print(")");
+						if (search_expression_type->is_bool_type(last_type_symbol)) {
+						  s4o.print("&1");
+						  s4o.print(")");
+						}
+						s4o.print("");
 						return NULL;
 						
 						
@@ -18159,7 +18166,7 @@
 			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
 			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 ;
 			
-			if(search_expression_type->is_binary_type(IN1_param_value))
+			if(search_expression_type->is_binary_type(IN1_type_symbol))
 			{
 		
 				{
@@ -18173,11 +18180,13 @@
 					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
 					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 ;
 					
-					if(search_expression_type->is_binary_type(IN2_param_value))
+					if(search_expression_type->is_binary_type(IN2_type_symbol))
 					{
 				
 						symbol_c * return_type_symbol = last_type_symbol;
 						s4o.print("(");
+						if (search_expression_type->is_bool_type(last_type_symbol))
+						  s4o.print("(");
 						IN1_param_value->accept(*this);
 						s4o.print("|");
 						IN2_param_value->accept(*this);
@@ -18207,6 +18216,11 @@
 							
 						}while(param_value != NULL);
 						s4o.print(")");
+						if (search_expression_type->is_bool_type(last_type_symbol)) {
+						  s4o.print("&1");
+						  s4o.print(")");
+						}
+						s4o.print("");
 						return NULL;
 						
 						
@@ -18241,7 +18255,7 @@
 			symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
 			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 ;
 			
-			if(search_expression_type->is_binary_type(IN1_param_value))
+			if(search_expression_type->is_binary_type(IN1_type_symbol))
 			{
 		
 				{
@@ -18255,11 +18269,13 @@
 					symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
 					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 ;
 					
-					if(search_expression_type->is_binary_type(IN2_param_value))
+					if(search_expression_type->is_binary_type(IN2_type_symbol))
 					{
 				
 						symbol_c * return_type_symbol = last_type_symbol;
 						s4o.print("(");
+						if (search_expression_type->is_bool_type(last_type_symbol))
+						  s4o.print("(");
 						IN1_param_value->accept(*this);
 						s4o.print("^");
 						IN2_param_value->accept(*this);
@@ -18289,6 +18305,11 @@
 							
 						}while(param_value != NULL);
 						s4o.print(")");
+						if (search_expression_type->is_bool_type(last_type_symbol)) {
+						  s4o.print("&1");
+						  s4o.print(")");
+						}
+						s4o.print("");
 						return NULL;
 						
 						
@@ -18323,7 +18344,7 @@
 			symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
 			last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
 			
-			if(search_expression_type->is_binary_type(IN_param_value))
+			if(search_expression_type->is_binary_type(IN_type_symbol))
 			{
 		
 				symbol_c * return_type_symbol = IN_type_symbol;
@@ -18683,7 +18704,7 @@
 			symbol_c *K_type_symbol = search_expression_type->get_type(K_param_value);
 			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 ;
 			
-			if(search_expression_type->is_integer_type(K_param_value))
+			if(search_expression_type->is_integer_type(K_type_symbol))
 			{
 		
 				{