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 } |