| 568 | // |
| 569 | |
| 570 | ref* EXP_post_field(gpre_fld* field, gpre_ctx* context, bool null_flag) |
| 571 | { |
| 572 | TEXT s[128]; |
| 573 | |
| 574 | gpre_req* request = context->ctx_request; |
| 575 | |
| 576 | // If the reference is already posted, return the reference |
| 577 | |
| 578 | ref* reference; |
| 579 | for (reference = request->req_references; reference; reference = reference->ref_next) |
| 580 | { |
| 581 | if (reference->ref_context == context) |
| 582 | { |
| 583 | gpre_fld* ref_field = reference->ref_field; |
| 584 | if (ref_field == field || |
| 585 | (ref_field->fld_symbol == field->fld_symbol && ref_field->fld_array == field->fld_array)) |
| 586 | { |
| 587 | if (!null_flag && |
| 588 | (ref_field->fld_dtype != field->fld_dtype || |
| 589 | ref_field->fld_length != field->fld_length || |
| 590 | ref_field->fld_scale != field->fld_scale)) |
| 591 | { |
| 592 | if (reference->ref_flags & REF_null) |
| 593 | reference->ref_field = field; |
| 594 | else |
| 595 | { |
| 596 | sprintf(s, "field %s is inconsistently cast", field->fld_symbol->sym_string); |
| 597 | PAR_error(s); |
| 598 | } |
| 599 | } |
| 600 | if (request->req_level > reference->ref_level) |
| 601 | reference->ref_level = request->req_level; |
| 602 | |
| 603 | if (!null_flag) |
| 604 | reference->ref_flags &= ~REF_null; |
| 605 | return reference; |
| 606 | } |
| 607 | } |
| 608 | } |
| 609 | |
| 610 | // This is first occurrence of field, make a new reference |
| 611 | |
| 612 | reference = MSC_reference(&request->req_references); |
| 613 | reference->ref_context = context; |
| 614 | reference->ref_field = field; |
| 615 | reference->ref_level = request->req_level; |
| 616 | |
| 617 | if (null_flag) |
| 618 | reference->ref_flags |= REF_null; |
| 619 | |
| 620 | return reference; |
| 621 | } |
| 622 | |
| 623 | |
| 624 | //____________________________________________________________ |
no test coverage detected