stage4/generate_cc/search_expression_type.cc
changeset 42 b45c7f34dec1
parent 38 6cce7d14647e
child 65 c6d41c1287de
equal deleted inserted replaced
41:8998c8b24b60 42:b45c7f34dec1
   428   }
   428   }
   429   
   429   
   430   void *visit(mul_expression_c *symbol) {
   430   void *visit(mul_expression_c *symbol) {
   431     symbol_c *left_type = base_type((symbol_c *)symbol->l_exp->accept(*this));
   431     symbol_c *left_type = base_type((symbol_c *)symbol->l_exp->accept(*this));
   432     symbol_c *right_type = base_type((symbol_c *)symbol->r_exp->accept(*this));
   432     symbol_c *right_type = base_type((symbol_c *)symbol->r_exp->accept(*this));
   433     if (typeid(*left_type) == typeid(time_type_name_c) && is_integer_type(right_type)) {return (void *)&time_type_name;}
   433     if (typeid(*left_type) == typeid(time_type_name_c) && is_num_type(right_type)) {
   434     if (typeid(*left_type) == typeid(time_type_name_c) && is_real_type(right_type)) {return (void *)&time_type_name;}
   434         return (void *)&time_type_name;
       
   435     }
   435     return compute_numeric_expression(left_type, right_type);
   436     return compute_numeric_expression(left_type, right_type);
   436   }
   437   }
   437   
   438   
   438   void *visit(div_expression_c *symbol) {
   439   void *visit(div_expression_c *symbol) {
   439     symbol_c *left_type = base_type((symbol_c *)symbol->l_exp->accept(*this));
   440     symbol_c *left_type = base_type((symbol_c *)symbol->l_exp->accept(*this));
   440     symbol_c *right_type = base_type((symbol_c *)symbol->r_exp->accept(*this));
   441     symbol_c *right_type = base_type((symbol_c *)symbol->r_exp->accept(*this));
   441     if (typeid(*left_type) == typeid(time_type_name_c) && is_integer_type(right_type)) {return (void *)&time_type_name;}
   442     if (typeid(*left_type) == typeid(time_type_name_c) && is_num_type(right_type)){
   442     if (typeid(*left_type) == typeid(time_type_name_c) && is_real_type(right_type)) {return (void *)&time_type_name;}
   443         return (void *)&time_type_name;
       
   444     }
   443     return compute_numeric_expression(left_type, right_type);
   445     return compute_numeric_expression(left_type, right_type);
   444   }
   446   }
   445 
   447 
   446   void *visit(mod_expression_c *symbol) {
   448   void *visit(mod_expression_c *symbol) {
   447     symbol_c *left_type = base_type((symbol_c *)symbol->l_exp->accept(*this));
   449     symbol_c *left_type = base_type((symbol_c *)symbol->l_exp->accept(*this));
   450   }
   452   }
   451 
   453 
   452   void *visit(power_expression_c *symbol) {
   454   void *visit(power_expression_c *symbol) {
   453     symbol_c *left_type = base_type((symbol_c *)symbol->l_exp->accept(*this));
   455     symbol_c *left_type = base_type((symbol_c *)symbol->l_exp->accept(*this));
   454     symbol_c *right_type = base_type((symbol_c *)symbol->r_exp->accept(*this));
   456     symbol_c *right_type = base_type((symbol_c *)symbol->r_exp->accept(*this));
   455     if (typeid(*left_type) == typeid(real_type_name_c) and typeid(*right_type) == typeid(sint_type_name_c)) {return (void *)left_type;}
   457     if (is_real_type(left_type) && is_num_type(right_type)) {
   456     if (typeid(*left_type) == typeid(real_type_name_c) and typeid(*right_type) == typeid(int_type_name_c)) {return (void *)left_type;}
   458         return (void *)left_type;
   457     if (typeid(*left_type) == typeid(real_type_name_c) and typeid(*right_type) == typeid(dint_type_name_c)) {return (void *)left_type;}
   459     }
   458     if (typeid(*left_type) == typeid(real_type_name_c) and typeid(*right_type) == typeid(lint_type_name_c)) {return (void *)left_type;}
       
   459     if (typeid(*left_type) == typeid(real_type_name_c) and typeid(*right_type) == typeid(usint_type_name_c)) {return (void *)left_type;}
       
   460     if (typeid(*left_type) == typeid(real_type_name_c) and typeid(*right_type) == typeid(uint_type_name_c)) {return (void *)left_type;}
       
   461     if (typeid(*left_type) == typeid(real_type_name_c) and typeid(*right_type) == typeid(udint_type_name_c)) {return (void *)left_type;}
       
   462     if (typeid(*left_type) == typeid(real_type_name_c) and typeid(*right_type) == typeid(ulint_type_name_c)) {return (void *)left_type;}
       
   463     if (typeid(*left_type) == typeid(lreal_type_name_c) and typeid(*right_type) == typeid(sint_type_name_c)) {return (void *)left_type;}
       
   464     if (typeid(*left_type) == typeid(lreal_type_name_c) and typeid(*right_type) == typeid(int_type_name_c)) {return (void *)left_type;}
       
   465     if (typeid(*left_type) == typeid(lreal_type_name_c) and typeid(*right_type) == typeid(dint_type_name_c)) {return (void *)left_type;}
       
   466     if (typeid(*left_type) == typeid(lreal_type_name_c) and typeid(*right_type) == typeid(lint_type_name_c)) {return (void *)left_type;}
       
   467     if (typeid(*left_type) == typeid(lreal_type_name_c) and typeid(*right_type) == typeid(usint_type_name_c)) {return (void *)left_type;}
       
   468     if (typeid(*left_type) == typeid(lreal_type_name_c) and typeid(*right_type) == typeid(uint_type_name_c)) {return (void *)left_type;}
       
   469     if (typeid(*left_type) == typeid(lreal_type_name_c) and typeid(*right_type) == typeid(udint_type_name_c)) {return (void *)left_type;}
       
   470     if (typeid(*left_type) == typeid(lreal_type_name_c) and typeid(*right_type) == typeid(ulint_type_name_c)) {return (void *)left_type;}
       
   471     ERROR;
   460     ERROR;
   472     return NULL;
   461     return NULL;
   473   }
   462   }
   474   
   463   
   475   void *visit(neg_expression_c *symbol) {
   464   void *visit(neg_expression_c *symbol) {
   476     symbol_c *exp_type = base_type((symbol_c *)symbol->exp->accept(*this));
   465     symbol_c *exp_type = base_type((symbol_c *)symbol->exp->accept(*this));
   477     if (typeid(*exp_type) == typeid(sint_type_name_c)) {return (void *)exp_type;}
   466     if (is_num_type(exp_type) || typeid(*exp_type) == typeid(time_type_name_c)){
   478     if (typeid(*exp_type) == typeid(int_type_name_c)) {return (void *)exp_type;}
   467             return (void *)exp_type;
   479     if (typeid(*exp_type) == typeid(dint_type_name_c)) {return (void *)exp_type;}
   468          }
   480     if (typeid(*exp_type) == typeid(lint_type_name_c)) {return (void *)exp_type;}
       
   481     if (typeid(*exp_type) == typeid(usint_type_name_c)) {return (void *)exp_type;}
       
   482     if (typeid(*exp_type) == typeid(uint_type_name_c)) {return (void *)exp_type;}
       
   483     if (typeid(*exp_type) == typeid(udint_type_name_c)) {return (void *)exp_type;}
       
   484     if (typeid(*exp_type) == typeid(ulint_type_name_c)) {return (void *)exp_type;}
       
   485     if (typeid(*exp_type) == typeid(real_type_name_c)) {return (void *)exp_type;}
       
   486     if (typeid(*exp_type) == typeid(lreal_type_name_c)) {return (void *)exp_type;}
       
   487     if (typeid(*exp_type) == typeid(time_type_name_c)) {return (void *)exp_type;}
       
   488     ERROR;
   469     ERROR;
   489     return NULL;
   470     return NULL;
   490   }
   471   }
   491   
   472   
   492   void *visit(not_expression_c *symbol) {
   473   void *visit(not_expression_c *symbol) {