Apache HTTPD
util_expr_private.h
Go to the documentation of this file.
1/* Licensed to the Apache Software Foundation (ASF) under one or more
2 * contributor license agreements. See the NOTICE file distributed with
3 * this work for additional information regarding copyright ownership.
4 * The ASF licenses this file to You under the Apache License, Version 2.0
5 * (the "License"); you may not use this file except in compliance with
6 * the License. You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef __AP_EXPR_PRIVATE_H__
18#define __AP_EXPR_PRIVATE_H__
19
20#include "httpd.h"
21#include "apr_strings.h"
22#include "apr_tables.h"
23#include "ap_expr.h"
24
25#ifndef YY_NULL
26#define YY_NULL 0
27#endif
28
29#ifndef MIN
30#define MIN(a,b) (((a)<(b))?(a):(b))
31#endif
32
33#if !APR_HAVE_UNISTD_H
34#define YY_NO_UNISTD_H
35#endif
36
37#ifdef _MSC_VER
38/* Avoid some warnings with Visual Studio (likely due to a bug in bison) */
39#define YYMALLOC malloc
40#define YYFREE free
41#endif
42
43#ifndef YYDEBUG
44#define YYDEBUG 0
45#endif
46
48typedef enum {
60 /*
61 * call external functions/operators.
62 * The info node contains the function pointer and some function specific
63 * info.
64 * For Binary operators, the Call node links to the Info node and the
65 * Args node, which in turn links to the left and right operand.
66 * For all other variants, the Call node links to the Info node and the
67 * argument.
68 */
74
78 const void *node_arg1;
79 const void *node_arg2;
80};
81
83typedef struct {
84 /* internal state of the scanner */
85 const char *inputbuf;
87 const char *inputptr;
88 void *scanner;
89 char *scan_ptr;
90 char scan_buf[MAX_STRING_LEN];
93
94 /* pools for result and temporary usage */
97
98 /* The created parse tree */
100
101 const char *error;
102 const char *error2;
103 unsigned flags;
104
105 /*
106 * The function to use to lookup provider functions for variables
107 * and funtctions
108 */
111
112/* flex/bison functions */
115int ap_expr_yylex_init(void **scanner);
116int ap_expr_yylex_destroy(void *scanner);
118
119/* create a parse tree node */
121 const void *arg2, ap_expr_parse_ctx_t *ctx);
122/* create parse tree node for the string-returning function 'name' */
125/* create parse tree node for the list-returning function 'name' */
128/* create parse tree node for the variable 'name' */
130/* create parse tree node for the unary operator 'name' */
133/* create parse tree node for the binary operator 'name' */
135 const ap_expr_t *arg2,
137
138
139#endif /* __AP_EXPR_PRIVATE_H__ */
Expression parser.
APR Strings library.
APR Table library.
#define MAX_STRING_LEN
Definition httpd.h:300
apr_md5_ctx_t * context
Definition util_md5.h:58
void const char * arg
Definition http_vhost.h:63
apr_brigade_flush void * ctx
int() ap_expr_lookup_fn_t(ap_expr_lookup_parms *parms)
Definition ap_expr.h:291
apr_size_t size
apr_int32_t apr_int32_t apr_int32_t err
HTTP Daemon routines.
char * name
ap_expr_node_op_e node_op
const void * node_arg2
const void * node_arg1
ap_expr_lookup_fn_t * lookup_fn
int ap_expr_yyparse()
ap_expr_node_op_e
@ op_StringFuncInfo
@ op_False
@ op_Digit
@ op_STR_EQ
@ op_BinaryOpCall
@ op_UnaryOpInfo
@ op_True
@ op_Comp
@ op_Regex
@ op_GT
@ op_NRE
@ op_STR_LE
@ op_NE
@ op_ListElement
@ op_STR_LT
@ op_LT
@ op_RegexBackref
@ op_LE
@ op_Concat
@ op_GE
@ op_STR_NE
@ op_REG
@ op_String
@ op_And
@ op_IN
@ op_NOP
@ op_Not
@ op_STR_GE
@ op_ListFuncCall
@ op_EQ
@ op_Var
@ op_StringFuncCall
@ op_UnaryOpCall
@ op_STR_GT
@ op_Or
@ op_ListFuncInfo
@ op_BinaryOpArgs
@ op_BinaryOpInfo
ap_expr_t * ap_expr_make(ap_expr_node_op_e op, const void *arg1, const void *arg2, ap_expr_parse_ctx_t *ctx)
ap_expr_t * ap_expr_list_func_make(const char *name, const ap_expr_t *arg, ap_expr_parse_ctx_t *ctx)
ap_expr_t * ap_expr_str_func_make(const char *name, const ap_expr_t *arg, ap_expr_parse_ctx_t *ctx)
void ap_expr_yyset_extra(ap_expr_parse_ctx_t *context, void *scanner)
int ap_expr_yylex_destroy(void *scanner)
ap_expr_t * ap_expr_binary_op_make(const char *name, const ap_expr_t *arg1, const ap_expr_t *arg2, ap_expr_parse_ctx_t *ctx)
int ap_expr_yylex_init(void **scanner)
ap_expr_t * ap_expr_var_make(const char *name, ap_expr_parse_ctx_t *ctx)
void ap_expr_yyerror(ap_expr_parse_ctx_t *context, const char *err)
ap_expr_t * ap_expr_unary_op_make(const char *name, const ap_expr_t *arg, ap_expr_parse_ctx_t *ctx)