MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / asgn_from

Function asgn_from

src/gpre/languages/pas.cpp:531–573  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

529//
530
531static void asgn_from( const act* action, const ref* reference, int column)
532{
533 TEXT name[MAX_REF_SIZE], variable[MAX_REF_SIZE], temp[MAX_REF_SIZE];
534
535 for (; reference; reference = reference->ref_next)
536 {
537 const gpre_fld* field = reference->ref_field;
538 if (field->fld_array_info)
539 if (!(reference->ref_flags & REF_array_elem))
540 {
541 printa(column, "%s := gds__blob_null;\n", gen_name(name, reference, true));
542 gen_get_or_put_slice(action, reference, false, column);
543 continue;
544 }
545
546 if (!reference->ref_source && !reference->ref_value)
547 continue;
548 align(column);
549 gen_name(variable, reference, true);
550 const TEXT* value;
551 if (reference->ref_source)
552 value = gen_name(temp, reference->ref_source, true);
553 else
554 value = reference->ref_value;
555 if (reference->ref_value && (reference->ref_flags & REF_array_elem))
556 field = field->fld_array;
557 if (!field || (field->fld_flags & FLD_text))
558 fprintf(gpreGlob.out_file, "gds__ftof (%s%s, %s (%s), %s%s, %d);",
559 REF_PAR, value, SIZEOF, value, REF_PAR, variable, field->fld_length);
560 else if (!reference->ref_master || (reference->ref_flags & REF_literal))
561 fprintf(gpreGlob.out_file, "%s := %s;", variable, value);
562 else
563 {
564 fprintf(gpreGlob.out_file, "if %s < 0 then", value);
565 align(column + 4);
566 fprintf(gpreGlob.out_file, "%s := -1", variable);
567 align(column);
568 fprintf(gpreGlob.out_file, "else");
569 align(column + 4);
570 fprintf(gpreGlob.out_file, "%s := 0;", variable);
571 }
572 }
573}
574
575
576//____________________________________________________________

Callers 3

gen_procedureFunction · 0.70
gen_s_startFunction · 0.70
gen_updateFunction · 0.70

Calls 4

printaFunction · 0.70
gen_nameFunction · 0.70
gen_get_or_put_sliceFunction · 0.70
alignFunction · 0.70

Tested by

no test coverage detected