| 1408 | // |
| 1409 | |
| 1410 | static gpre_nod* par_primitive_value( gpre_req* request, gpre_fld* field) |
| 1411 | { |
| 1412 | if (MSC_match(KW_MINUS)) |
| 1413 | return MSC_unary(nod_negate, par_primitive_value(request, field)); |
| 1414 | |
| 1415 | if (MSC_match(KW_LEFT_PAREN)) |
| 1416 | { |
| 1417 | gpre_nod* node = par_value(request, field); |
| 1418 | EXP_match_paren(); |
| 1419 | return node; |
| 1420 | } |
| 1421 | |
| 1422 | if (MSC_match(KW_UPPERCASE)) |
| 1423 | { |
| 1424 | gpre_nod* node = MSC_node(nod_upcase, 1); |
| 1425 | gpre_nod* sub = par_primitive_value(request, field); |
| 1426 | node->nod_arg[0] = sub; |
| 1427 | return node; |
| 1428 | } |
| 1429 | |
| 1430 | if (MSC_match(KW_USER_NAME)) |
| 1431 | return MSC_node(nod_user_name, 0); |
| 1432 | |
| 1433 | if (MSC_match(KW_NULLIF)) |
| 1434 | { |
| 1435 | gpre_nod* node = MSC_node(nod_nullif, 2); |
| 1436 | EXP_left_paren(0); |
| 1437 | node->nod_arg[0] = par_value(request, field); |
| 1438 | if (!MSC_match(KW_COMMA)) |
| 1439 | CPR_s_error("<comma>"); |
| 1440 | node->nod_arg[1] = par_value(request, field); |
| 1441 | EXP_match_paren(); |
| 1442 | return node; |
| 1443 | } |
| 1444 | |
| 1445 | // Check for user defined functions |
| 1446 | |
| 1447 | gpre_nod* node = par_udf(request, UDF_value, field); |
| 1448 | if (node) |
| 1449 | return node; |
| 1450 | |
| 1451 | const gpre_sym* symbol = gpreGlob.token_global.tok_symbol; |
| 1452 | if (!symbol || symbol->sym_type != SYM_context) |
| 1453 | return par_native_value(request, field); |
| 1454 | |
| 1455 | return par_field(request); |
| 1456 | } |
| 1457 | |
| 1458 | |
| 1459 | //____________________________________________________________ |
no test coverage detected