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

Function par_field

src/gpre/exp.cpp:1190–1272  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1188//
1189
1190static gpre_nod* par_field( gpre_req* request)
1191{
1192 const gpre_sym* symbol = gpreGlob.token_global.tok_symbol;
1193 if (!symbol)
1194 CPR_s_error("qualified field reference");
1195
1196 bool upcase_flag = false;
1197 gpre_nod* prefix_node = 0;
1198 if (MSC_match(KW_UPPERCASE))
1199 {
1200 prefix_node = MSC_node(nod_upcase, 1);
1201 upcase_flag = true;
1202 if (!MSC_match(KW_LEFT_PAREN))
1203 CPR_s_error("left parenthesis");
1204 if (!(symbol = gpreGlob.token_global.tok_symbol))
1205 CPR_s_error("qualified field reference");
1206 }
1207
1208 gpre_ctx* context = 0;
1209 gpre_nod* node = 0;
1210 gpre_fld* field = 0;
1211 if (symbol->sym_type == SYM_context)
1212 {
1213 field = EXP_field(&context);
1214 if (field->fld_array_info)
1215 node = par_array(request, field, false, false);
1216
1217 if (MSC_match(KW_DOT))
1218 {
1219 gpre_fld* cast = EXP_cast(field);
1220 if (cast)
1221 field = cast;
1222 }
1223 }
1224 else
1225 CPR_s_error("qualified field reference");
1226
1227 // There is a legit field reference. If the reference is
1228 // to a field in this request, make up a reference block
1229 // and a field node, and return.
1230
1231 if (!field->fld_array_info)
1232 node = MSC_node(nod_field, 1);
1233
1234 if (upcase_flag)
1235 prefix_node->nod_arg[0] = node;
1236
1237 if (context->ctx_request == request)
1238 {
1239 ref* reference = (ref*) MSC_alloc(REF_LEN);
1240 reference->ref_field = field;
1241 reference->ref_context = context;
1242 if (node->nod_type == nod_array)
1243 reference->ref_flags |= REF_array_elem;
1244 node->nod_arg[0] = (gpre_nod*) reference;
1245 }
1246 else
1247 {

Callers 2

par_primitive_valueFunction · 0.70
par_relationalFunction · 0.70

Calls 9

CPR_s_errorFunction · 0.85
MSC_matchFunction · 0.85
MSC_nodeFunction · 0.85
EXP_fieldFunction · 0.85
EXP_castFunction · 0.85
MSC_allocFunction · 0.85
EXP_post_fieldFunction · 0.85
MSC_referenceFunction · 0.85
par_arrayFunction · 0.70

Tested by

no test coverage detected