- {
- struct filter_node *next;
-
- if (node->u.expression.pre_op == AST_LINK_UNKNOWN) {
- fprintf(stderr, "[error] %s: global identifiers need chained identifier \n", __func__);
- return NULL;
- }
- /* We currently only support $ctx (context) identifiers */
- if (strncmp(node->u.expression.u.identifier,
- "$ctx", strlen("$ctx")) != 0) {
- fprintf(stderr, "[error] %s: \"%s\" global identifier is unknown. Only \"$ctx\" currently implemented.\n", __func__, node->u.expression.u.identifier);
- return NULL;
- }
- next = node->u.expression.next;
- if (!next) {
- fprintf(stderr, "[error] %s: Expecting a context name, e.g. \'$ctx.name\'.\n", __func__);
- return NULL;
- }
- if (next->type != NODE_EXPRESSION) {
- fprintf(stderr, "[error] %s: Expecting expression.\n", __func__);
- return NULL;
- }
- if (next->u.expression.type != AST_EXP_IDENTIFIER) {
- fprintf(stderr, "[error] %s: Expecting identifier.\n", __func__);
- return NULL;
- }
- if (next->u.expression.pre_op != AST_LINK_UNKNOWN) {
- fprintf(stderr, "[error] %s: dotted and dereferenced identifiers not supported after identifier\n", __func__);
- return NULL;
- }
- return make_op_load_get_context_ref(next->u.expression.u.identifier,
- side);
- }