| 1683 | // |
| 1684 | |
| 1685 | static act* par_derived_from() |
| 1686 | { |
| 1687 | if (gpreGlob.sw_language != lang_c && !isLangCpp(gpreGlob.sw_language)) { |
| 1688 | return (NULL); |
| 1689 | } |
| 1690 | |
| 1691 | act* action = MSC_action(0, ACT_basedon); |
| 1692 | bas* based_on = (bas*) MSC_alloc(BAS_LEN); |
| 1693 | action->act_object = (ref*) based_on; |
| 1694 | |
| 1695 | gpre_rel* relation = EXP_relation(); |
| 1696 | if (!MSC_match(KW_DOT)) |
| 1697 | CPR_s_error("dot in qualified field reference"); |
| 1698 | |
| 1699 | SQL_resolve_identifier("<Field Name>", NULL, NAME_SIZE); |
| 1700 | |
| 1701 | gpre_fld* field = MET_field(relation, gpreGlob.token_global.tok_string); |
| 1702 | if (!field) |
| 1703 | { |
| 1704 | TEXT s[ERROR_LENGTH]; |
| 1705 | fb_utils::snprintf(s, sizeof(s), "undefined field %s", gpreGlob.token_global.tok_string); |
| 1706 | PAR_error(s); |
| 1707 | } |
| 1708 | PAR_get_token(); |
| 1709 | based_on->bas_field = field; |
| 1710 | |
| 1711 | based_on->bas_variables = (gpre_lls*) MSC_alloc(LLS_LEN); |
| 1712 | based_on->bas_variables->lls_next = NULL; |
| 1713 | based_on->bas_variables->lls_object = (gpre_nod*) PAR_native_value(false, false); |
| 1714 | |
| 1715 | strcpy(based_on->bas_terminator, gpreGlob.token_global.tok_string); |
| 1716 | PAR_get_token(); |
| 1717 | |
| 1718 | return action; |
| 1719 | } |
| 1720 | |
| 1721 | |
| 1722 | //____________________________________________________________ |
no test coverage detected