| 644 | // |
| 645 | |
| 646 | static void asgn_to( const act* action, ref* reference, int column) |
| 647 | { |
| 648 | char s[MAX_REF_SIZE]; |
| 649 | |
| 650 | ref* source = reference->ref_friend; |
| 651 | const gpre_fld* field = source->ref_field; |
| 652 | |
| 653 | if (field) |
| 654 | { |
| 655 | act* slice_action; |
| 656 | if (field->fld_array_info && (slice_action = (act*) source->ref_slice)) |
| 657 | { |
| 658 | source->ref_value = reference->ref_value; |
| 659 | if (slice_action->act_object) |
| 660 | { |
| 661 | slice_action->act_type = ACT_get_slice; |
| 662 | gen_slice(slice_action, source, column); |
| 663 | } |
| 664 | else |
| 665 | gen_get_or_put_slice(action, source, true, column); |
| 666 | |
| 667 | // Pick up NULL value if one is there |
| 668 | |
| 669 | if (reference = reference->ref_null) |
| 670 | { |
| 671 | align(column); |
| 672 | fprintf(gpreGlob.out_file, "%s = %s;", reference->ref_value, |
| 673 | gen_name(s, reference, true)); |
| 674 | } |
| 675 | return; |
| 676 | } |
| 677 | |
| 678 | gen_name(s, source, true); |
| 679 | if (field->fld_dtype > dtype_cstring) |
| 680 | fprintf(gpreGlob.out_file, "%s = %s;", reference->ref_value, s); |
| 681 | else if (field->fld_sub_type == 1 && field->fld_length == 1) |
| 682 | fprintf(gpreGlob.out_file, "%s = %s;", reference->ref_value, s); |
| 683 | else if (field->fld_flags & FLD_dbkey) |
| 684 | fprintf(gpreGlob.out_file, "isc_ftof (%s, %d, %s, %d);", |
| 685 | s, field->fld_length, reference->ref_value, field->fld_length); |
| 686 | else if (!gpreGlob.sw_cstring || field->fld_sub_type == 1) |
| 687 | fprintf(gpreGlob.out_file, "isc_ftof (%s, %d, %s, sizeof(%s));", |
| 688 | s, field->fld_length, reference->ref_value, reference->ref_value); |
| 689 | else |
| 690 | fprintf(gpreGlob.out_file, isLangCpp(gpreGlob.sw_language) ? |
| 691 | "isc_vtov ((const char*) %s, (char*) %s, sizeof(%s));" : |
| 692 | "isc_vtov ((char*) %s, (char*) %s, sizeof(%s));", |
| 693 | s, reference->ref_value, reference->ref_value); |
| 694 | } |
| 695 | |
| 696 | // Pick up NULL value if one is there |
| 697 | |
| 698 | if (reference = reference->ref_null) |
| 699 | { |
| 700 | align(column); |
| 701 | fprintf(gpreGlob.out_file, "%s = %s;", reference->ref_value, gen_name(s, reference, true)); |
| 702 | } |
| 703 | } |
no test coverage detected