stage4/generate_c/generate_c_il.cc
changeset 221 c6aed7e5f070
parent 220 f332b62cd2c1
child 226 29f8ffc203c1
equal deleted inserted replaced
220:f332b62cd2c1 221:c6aed7e5f070
   467 
   467 
   468 
   468 
   469 /*********************/
   469 /*********************/
   470 /* B 1.4 - Variables */
   470 /* B 1.4 - Variables */
   471 /*********************/
   471 /*********************/
   472 /* B 1.4 - Variables */
   472 
   473 /*********************/
       
   474 void *visit(symbolic_variable_c *symbol) {
   473 void *visit(symbolic_variable_c *symbol) {
   475   unsigned int vartype = search_varfb_instance_type->get_vartype(symbol);
   474   unsigned int vartype = search_varfb_instance_type->get_vartype(symbol);
   476   if (this->is_variable_prefix_null()) {
   475   if (this->is_variable_prefix_null()) {
   477     if (wanted_variablegeneration == fparam_output_vg) {
   476     if (wanted_variablegeneration == fparam_output_vg) {
   478       if (vartype == search_var_instance_decl_c::external_vt) {
   477       if (vartype == search_var_instance_decl_c::external_vt)
   479     	s4o.print(GET_EXTERNAL);
   478     	s4o.print(GET_EXTERNAL);
   480     	s4o.print("(");
   479       else
   481     	symbol->var_name->accept(*this);
   480     	s4o.print("&");
   482       }
   481       s4o.print("(");
   483       else {
   482       generate_c_base_c::visit(symbol);
   484     	s4o.print("&(");
       
   485         generate_c_base_c::visit(symbol);
       
   486       }
       
   487       s4o.print(")");
   483       s4o.print(")");
   488     }
   484     }
   489     else {
   485     else {
   490       if (vartype == search_var_instance_decl_c::external_vt) {
   486       if (vartype == search_var_instance_decl_c::external_vt) {
   491         s4o.print(GET_EXTERNAL);
   487         s4o.print(GET_EXTERNAL);
   492         s4o.print("(");
   488         s4o.print("(");
   493         symbol->var_name->accept(*this);
   489         generate_c_base_c::visit(symbol);
   494         s4o.print(")");
   490         s4o.print(")");
   495       }
   491       }
   496       else
   492       else
   497     	generate_c_base_c::visit(symbol);
   493     	generate_c_base_c::visit(symbol);
   498     }
   494     }
   499   }
   495   }
   500   else {
   496   else {
   501     switch (wanted_variablegeneration) {
   497     switch (wanted_variablegeneration) {
   502       case expression_vg:
   498       case expression_vg:
   503         if (vartype == search_var_instance_decl_c::external_vt) {
   499         if (vartype == search_var_instance_decl_c::external_vt)
   504     	  s4o.print(GET_EXTERNAL);
   500     	  s4o.print(GET_EXTERNAL);
   505     	  s4o.print("(");
   501     	else if (vartype == search_var_instance_decl_c::located_vt)
   506           symbol->var_name->accept(*this);
   502 		  s4o.print(GET_LOCATED);
   507         }
   503 	    else
   508         else {
   504 		  s4o.print(GET_VAR);
   509           if (vartype == search_var_instance_decl_c::located_vt)
   505 	    s4o.print("(");
   510             s4o.print(GET_LOCATED);
   506 	    generate_c_base_c::visit(symbol);
   511           else
       
   512             s4o.print(GET_VAR);
       
   513           s4o.print("(");
       
   514           generate_c_base_c::visit(symbol);
       
   515         }
       
   516         s4o.print(")");
   507         s4o.print(")");
   517 		break;
   508 		break;
   518       case fparam_output_vg:
   509       case fparam_output_vg:
   519         if (vartype == search_var_instance_decl_c::external_vt) {
   510         if (vartype == search_var_instance_decl_c::external_vt)
   520           s4o.print(GET_EXTERNAL_BY_REF);
   511           s4o.print(GET_EXTERNAL_BY_REF);
   521           s4o.print("(");
   512         else if (vartype == search_var_instance_decl_c::located_vt)
   522           symbol->var_name->accept(*this);
   513           s4o.print(GET_LOCATED_BY_REF);
   523         }
   514         else
   524         else {
   515           s4o.print(GET_VAR_BY_REF);
   525           if (vartype == search_var_instance_decl_c::located_vt)
   516         s4o.print("(");
   526             s4o.print(GET_LOCATED_BY_REF);
   517         generate_c_base_c::visit(symbol);
   527           else
       
   528             s4o.print(GET_VAR_BY_REF);
       
   529           s4o.print("(");
       
   530           generate_c_base_c::visit(symbol);
       
   531         }
       
   532         s4o.print(")");
   518         s4o.print(")");
   533         break;
   519         break;
   534       default:
   520       default:
   535         if (vartype == search_var_instance_decl_c::external_vt)
   521         generate_c_base_c::visit(symbol);
   536           symbol->var_name->accept(*this);
       
   537         else
       
   538           generate_c_base_c::visit(symbol);
       
   539         break;
   522         break;
   540 	}
   523 	}
   541   }
   524   }
   542   return NULL;
   525   return NULL;
   543 }
   526 }