You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by wr...@apache.org on 2018/09/12 13:56:21 UTC
svn commit: r1840688 [34/37] - in /httpd/sandbox/httpd-2.4.x-trunk-delta: ./
build/ build/rpm/ build/win32/ docs/ docs/conf/ docs/conf/extra/
docs/log-message-tags/ docs/man/ docs/man/tr/ include/ modules/
modules/aaa/ modules/apreq/ modules/arch/unix/...
Modified: httpd/sandbox/httpd-2.4.x-trunk-delta/server/util_expr_parse.c
URL: http://svn.apache.org/viewvc/httpd/sandbox/httpd-2.4.x-trunk-delta/server/util_expr_parse.c?rev=1840688&r1=1840687&r2=1840688&view=diff
==============================================================================
--- httpd/sandbox/httpd-2.4.x-trunk-delta/server/util_expr_parse.c (original)
+++ httpd/sandbox/httpd-2.4.x-trunk-delta/server/util_expr_parse.c Wed Sep 12 13:56:17 2018
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 2.5. */
+/* A Bison parser, made by GNU Bison 2.7.1. */
/* Bison implementation for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "2.5"
+#define YYBISON_VERSION "2.7.1"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -58,8 +58,6 @@
/* Pull parsers. */
#define YYPULL 1
-/* Using locations. */
-#define YYLSP_NEEDED 0
/* Substitute the variable and function names. */
#define yyparse ap_expr_yyparse
@@ -70,22 +68,22 @@
#define yydebug ap_expr_yydebug
#define yynerrs ap_expr_yynerrs
-
/* Copy the first part of user declarations. */
-
-/* Line 268 of yacc.c */
+/* Line 371 of yacc.c */
#line 31 "util_expr_parse.y"
#include "util_expr_private.h"
+/* Line 371 of yacc.c */
+#line 79 "util_expr_parse.c"
-/* Line 268 of yacc.c */
-#line 84 "util_expr_parse.c"
-
-/* Enabling traces. */
-#ifndef YYDEBUG
-# define YYDEBUG 0
+# ifndef YY_NULL
+# if defined __cplusplus && 201103L <= __cplusplus
+# define YY_NULL nullptr
+# else
+# define YY_NULL 0
#endif
+# endif
/* Enabling verbose error messages. */
#ifdef YYERROR_VERBOSE
@@ -95,11 +93,17 @@
# define YYERROR_VERBOSE 1
#endif
-/* Enabling the token table. */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
+/* In a future release of Bison, this section will be replaced
+ by #include "util_expr_parse.h". */
+#ifndef YY_AP_EXPR_YY_UTIL_EXPR_PARSE_H_INCLUDED
+# define YY_AP_EXPR_YY_UTIL_EXPR_PARSE_H_INCLUDED
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int ap_expr_yydebug;
#endif
-
/* Tokens. */
#ifndef YYTOKENTYPE
@@ -116,43 +120,49 @@
T_ID = 264,
T_STRING = 265,
T_REGEX = 266,
- T_REGEX_I = 267,
- T_REGEX_BACKREF = 268,
- T_OP_UNARY = 269,
- T_OP_BINARY = 270,
- T_STR_BEGIN = 271,
- T_STR_END = 272,
- T_VAR_BEGIN = 273,
- T_VAR_END = 274,
- T_OP_EQ = 275,
- T_OP_NE = 276,
- T_OP_LT = 277,
- T_OP_LE = 278,
- T_OP_GT = 279,
- T_OP_GE = 280,
- T_OP_REG = 281,
- T_OP_NRE = 282,
- T_OP_IN = 283,
- T_OP_STR_EQ = 284,
- T_OP_STR_NE = 285,
- T_OP_STR_LT = 286,
- T_OP_STR_LE = 287,
- T_OP_STR_GT = 288,
- T_OP_STR_GE = 289,
- T_OP_CONCAT = 290,
- T_OP_OR = 291,
- T_OP_AND = 292,
- T_OP_NOT = 293
+ T_REGSUB = 267,
+ T_REG_MATCH = 268,
+ T_REG_SUBST = 269,
+ T_REG_FLAGS = 270,
+ T_BACKREF = 271,
+ T_OP_UNARY = 272,
+ T_OP_BINARY = 273,
+ T_STR_BEGIN = 274,
+ T_STR_END = 275,
+ T_VAR_BEGIN = 276,
+ T_VAR_END = 277,
+ T_VAREXP_BEGIN = 278,
+ T_VAREXP_END = 279,
+ T_OP_EQ = 280,
+ T_OP_NE = 281,
+ T_OP_LT = 282,
+ T_OP_LE = 283,
+ T_OP_GT = 284,
+ T_OP_GE = 285,
+ T_OP_REG = 286,
+ T_OP_NRE = 287,
+ T_OP_IN = 288,
+ T_OP_STR_EQ = 289,
+ T_OP_STR_NE = 290,
+ T_OP_STR_LT = 291,
+ T_OP_STR_LE = 292,
+ T_OP_STR_GT = 293,
+ T_OP_STR_GE = 294,
+ T_OP_CONCAT = 295,
+ T_OP_JOIN = 296,
+ T_OP_SPLIT = 297,
+ T_OP_SUB = 298,
+ T_OP_OR = 299,
+ T_OP_AND = 300,
+ T_OP_NOT = 301
};
#endif
-
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
{
-
-/* Line 293 of yacc.c */
+/* Line 387 of yacc.c */
#line 35 "util_expr_parse.y"
char *cpVal;
@@ -160,9 +170,8 @@ typedef union YYSTYPE
int num;
-
-/* Line 293 of yacc.c */
-#line 166 "util_expr_parse.c"
+/* Line 387 of yacc.c */
+#line 175 "util_expr_parse.c"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -170,19 +179,33 @@ typedef union YYSTYPE
#endif
-/* Copy the second part of user declarations. */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int ap_expr_yyparse (void *YYPARSE_PARAM);
+#else
+int ap_expr_yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int ap_expr_yyparse (ap_expr_parse_ctx_t *ctx);
+#else
+int ap_expr_yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
-/* Line 343 of yacc.c */
-#line 102 "util_expr_parse.y"
+#endif /* !YY_AP_EXPR_YY_UTIL_EXPR_PARSE_H_INCLUDED */
+
+/* Copy the second part of user declarations. */
+/* Line 390 of yacc.c */
+#line 118 "util_expr_parse.y"
#include "util_expr_private.h"
#define yyscanner ctx->scanner
int ap_expr_yylex(YYSTYPE *lvalp, void *scanner);
-
-/* Line 343 of yacc.c */
-#line 186 "util_expr_parse.c"
+/* Line 390 of yacc.c */
+#line 209 "util_expr_parse.c"
#ifdef short
# undef short
@@ -235,24 +258,33 @@ typedef short int yytype_int16;
# if defined YYENABLE_NLS && YYENABLE_NLS
# if ENABLE_NLS
# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-# define YY_(msgid) dgettext ("bison-runtime", msgid)
+# define YY_(Msgid) dgettext ("bison-runtime", Msgid)
# endif
# endif
# ifndef YY_
-# define YY_(msgid) msgid
+# define YY_(Msgid) Msgid
+# endif
+#endif
+
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later. */
+# if (! defined __GNUC__ || __GNUC__ < 2 \
+ || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
+# define __attribute__(Spec) /* empty */
# endif
#endif
/* Suppress unused-variable warnings by "using" E. */
#if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
+# define YYUSE(E) ((void) (E))
#else
-# define YYUSE(e) /* empty */
+# define YYUSE(E) /* empty */
#endif
+
/* Identity function, used to suppress warnings about constant conditions. */
#ifndef lint
-# define YYID(n) (n)
+# define YYID(N) (N)
#else
#if (defined __STDC__ || defined __C99__FUNC__ \
|| defined __cplusplus || defined _MSC_VER)
@@ -288,6 +320,7 @@ YYID (yyi)
# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
|| defined __cplusplus || defined _MSC_VER)
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+ /* Use EXIT_SUCCESS as a witness for stdlib.h. */
# ifndef EXIT_SUCCESS
# define EXIT_SUCCESS 0
# endif
@@ -379,19 +412,19 @@ union yyalloc
#endif
#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
-/* Copy COUNT objects from FROM to TO. The source and destination do
+/* Copy COUNT objects from SRC to DST. The source and destination do
not overlap. */
# ifndef YYCOPY
# if defined __GNUC__ && 1 < __GNUC__
-# define YYCOPY(To, From, Count) \
- __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# define YYCOPY(Dst, Src, Count) \
+ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
# else
-# define YYCOPY(To, From, Count) \
+# define YYCOPY(Dst, Src, Count) \
do \
{ \
YYSIZE_T yyi; \
for (yyi = 0; yyi < (Count); yyi++) \
- (To)[yyi] = (From)[yyi]; \
+ (Dst)[yyi] = (Src)[yyi]; \
} \
while (YYID (0))
# endif
@@ -399,22 +432,22 @@ union yyalloc
#endif /* !YYCOPY_NEEDED */
/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 28
+#define YYFINAL 31
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 128
+#define YYLAST 277
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 45
+#define YYNTOKENS 69
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 14
+#define YYNNTS 18
/* YYNRULES -- Number of rules. */
-#define YYNRULES 53
+#define YYNRULES 71
/* YYNRULES -- Number of states. */
-#define YYNSTATES 96
+#define YYNSTATES 154
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 293
+#define YYMAXUTOK 317
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -426,15 +459,15 @@ static const yytype_uint8 yytranslate[]
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 39, 40, 2, 2, 43, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 44, 2,
+ 63, 64, 2, 2, 68, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 67, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 41, 2, 42, 2, 2, 2, 2,
+ 2, 2, 2, 65, 2, 66, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -451,73 +484,102 @@ static const yytype_uint8 yytranslate[]
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58, 59, 60, 61, 62
};
#if YYDEBUG
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
YYRHS. */
-static const yytype_uint8 yyprhs[] =
+static const yytype_uint16 yyprhs[] =
{
- 0, 0, 3, 6, 9, 11, 13, 15, 18, 22,
- 26, 28, 31, 35, 39, 41, 45, 49, 53, 57,
- 61, 65, 69, 73, 77, 81, 85, 89, 93, 97,
- 101, 103, 107, 109, 113, 116, 118, 120, 122, 124,
- 126, 130, 136, 138, 142, 144, 146, 148, 152, 155,
- 157, 159, 161, 166
+ 0, 0, 3, 6, 9, 11, 13, 16, 18, 20,
+ 22, 25, 29, 33, 35, 38, 42, 46, 48, 52,
+ 56, 60, 64, 68, 72, 76, 80, 84, 88, 92,
+ 96, 100, 104, 108, 110, 113, 117, 121, 123, 125,
+ 127, 129, 133, 135, 137, 141, 145, 147, 149, 153,
+ 159, 163, 167, 169, 174, 179, 184, 189, 196, 199,
+ 204, 209, 216, 221, 228, 233, 240, 242, 246, 250,
+ 255, 257
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
static const yytype_int8 yyrhs[] =
{
- 46, 0, -1, 5, 47, -1, 6, 51, -1, 7,
- -1, 3, -1, 4, -1, 38, 47, -1, 47, 36,
- 47, -1, 47, 37, 47, -1, 48, -1, 14, 54,
- -1, 54, 15, 54, -1, 39, 47, 40, -1, 7,
- -1, 54, 20, 54, -1, 54, 21, 54, -1, 54,
- 22, 54, -1, 54, 23, 54, -1, 54, 24, 54,
- -1, 54, 25, 54, -1, 54, 29, 54, -1, 54,
- 30, 54, -1, 54, 31, 54, -1, 54, 32, 54,
- -1, 54, 33, 54, -1, 54, 34, 54, -1, 54,
- 28, 49, -1, 54, 26, 55, -1, 54, 27, 55,
- -1, 57, -1, 41, 50, 42, -1, 54, -1, 50,
- 43, 54, -1, 51, 52, -1, 52, -1, 7, -1,
- 10, -1, 53, -1, 56, -1, 18, 9, 19, -1,
- 18, 9, 44, 51, 19, -1, 8, -1, 54, 35,
- 54, -1, 53, -1, 56, -1, 58, -1, 16, 51,
- 17, -1, 16, 17, -1, 11, -1, 12, -1, 13,
- -1, 9, 39, 54, 40, -1, 9, 39, 54, 40,
- -1
+ 70, 0, -1, 6, 71, -1, 5, 72, -1, 7,
+ -1, 76, -1, 71, 76, -1, 7, -1, 3, -1,
+ 4, -1, 46, 72, -1, 72, 44, 72, -1, 72,
+ 45, 72, -1, 73, -1, 17, 74, -1, 74, 18,
+ 74, -1, 63, 72, 64, -1, 7, -1, 74, 25,
+ 74, -1, 74, 26, 74, -1, 74, 27, 74, -1,
+ 74, 28, 74, -1, 74, 29, 74, -1, 74, 30,
+ 74, -1, 74, 34, 74, -1, 74, 35, 74, -1,
+ 74, 36, 74, -1, 74, 37, 74, -1, 74, 38,
+ 74, -1, 74, 39, 74, -1, 74, 31, 84, -1,
+ 74, 32, 84, -1, 74, 33, 75, -1, 8, -1,
+ 19, 20, -1, 19, 71, 20, -1, 74, 40, 74,
+ -1, 77, -1, 80, -1, 81, -1, 78, -1, 63,
+ 74, 64, -1, 82, -1, 79, -1, 65, 83, 66,
+ -1, 63, 75, 64, -1, 10, -1, 77, -1, 21,
+ 9, 22, -1, 21, 9, 67, 71, 22, -1, 23,
+ 72, 24, -1, 23, 74, 24, -1, 16, -1, 9,
+ 63, 74, 64, -1, 9, 63, 83, 64, -1, 9,
+ 63, 74, 64, -1, 43, 85, 68, 74, -1, 43,
+ 63, 85, 68, 74, 64, -1, 41, 75, -1, 41,
+ 63, 75, 64, -1, 41, 75, 68, 74, -1, 41,
+ 63, 75, 68, 74, 64, -1, 42, 86, 68, 75,
+ -1, 42, 63, 86, 68, 75, 64, -1, 42, 86,
+ 68, 74, -1, 42, 63, 86, 68, 74, 64, -1,
+ 74, -1, 74, 68, 83, -1, 11, 13, 15, -1,
+ 12, 13, 71, 15, -1, 84, -1, 85, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint8 yyrline[] =
{
- 0, 112, 112, 113, 114, 117, 118, 119, 120, 121,
- 122, 123, 124, 125, 126, 129, 130, 131, 132, 133,
- 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
- 146, 147, 150, 151, 154, 155, 156, 159, 160, 161,
- 164, 165, 168, 169, 170, 171, 172, 173, 174, 177,
- 186, 197, 204, 207
+ 0, 128, 128, 129, 130, 133, 134, 135, 138, 139,
+ 140, 141, 142, 143, 144, 145, 146, 147, 150, 151,
+ 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
+ 162, 163, 164, 167, 168, 169, 170, 171, 172, 173,
+ 174, 175, 178, 179, 180, 181, 184, 185, 188, 189,
+ 190, 191, 192, 195, 196, 199, 203, 204, 207, 208,
+ 209, 210, 213, 214, 215, 216, 219, 220, 223, 232,
+ 241, 242
};
#endif
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+#if YYDEBUG || YYERROR_VERBOSE || 1
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
- "$end", "error", "$undefined", "T_TRUE", "T_FALSE", "T_EXPR_BOOL",
- "T_EXPR_STRING", "T_ERROR", "T_DIGIT", "T_ID", "T_STRING", "T_REGEX",
- "T_REGEX_I", "T_REGEX_BACKREF", "T_OP_UNARY", "T_OP_BINARY",
- "T_STR_BEGIN", "T_STR_END", "T_VAR_BEGIN", "T_VAR_END", "T_OP_EQ",
- "T_OP_NE", "T_OP_LT", "T_OP_LE", "T_OP_GT", "T_OP_GE", "T_OP_REG",
- "T_OP_NRE", "T_OP_IN", "T_OP_STR_EQ", "T_OP_STR_NE", "T_OP_STR_LT",
- "T_OP_STR_LE", "T_OP_STR_GT", "T_OP_STR_GE", "T_OP_CONCAT", "T_OP_OR",
- "T_OP_AND", "T_OP_NOT", "'('", "')'", "'{'", "'}'", "','", "':'",
- "$accept", "root", "expr", "comparison", "wordlist", "words", "string",
- "strpart", "var", "word", "regex", "backref", "lstfunccall",
- "strfunccall", 0
+ "$end", "error", "$undefined", "\"true\"", "\"false\"",
+ "\"boolean expression\"", "\"string expression\"", "\"error token\"",
+ "\"number\"", "\"identifier\"", "\"string literal\"",
+ "\"start of matching regex\"", "\"start of substitution regex\"",
+ "\"pattern of the regex\"", "\"substitution of the regex\"",
+ "\"pattern flags of the regex\"", "\"regex back reference\"",
+ "\"unary operator\"", "\"binary operator\"", "\"start of string\"",
+ "\"end of string\"", "\"start of variable name\"",
+ "\"end of variable name\"", "\"start of variable expression\"",
+ "\"end of variable expression\"", "\"integer equal\"",
+ "\"integer not equal\"", "\"integer less than\"",
+ "\"integer less or equal\"", "\"integer greater than\"",
+ "\"integer greater or equal\"", "\"regex match\"", "\"regex non-match\"",
+ "\"contained in\"", "\"string equal\"", "\"string not equal\"",
+ "\"string less than\"", "\"string less or equal\"",
+ "\"string greater than\"", "\"string greater or equal\"",
+ "\"string concatenation\"", "\"join operator\"", "\"split operator\"",
+ "\"substitute operator\"", "\"logical or\"", "\"logical and\"",
+ "\"logical not\"", "\"condition\"", "\"comparison\"",
+ "\"string function\"", "\"list function\"", "\"list\"", "\"words\"",
+ "\"word\"", "\"string\"", "\"substring\"", "\"variable\"",
+ "\"match regex\"", "\"substitution regex\"", "\"any regex\"",
+ "\"split\"", "\"join\"", "\"sub\"", "'('", "')'", "'{'", "'}'", "':'",
+ "','", "$accept", "expr", "string", "cond", "comp", "word", "list",
+ "substr", "var", "strfunc", "listfunc", "sub", "join", "split", "words",
+ "regex", "regsub", "regany", YY_NULL
};
#endif
@@ -529,31 +591,37 @@ static const yytype_uint16 yytoknum[] =
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 40,
- 41, 123, 125, 44, 58
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
+ 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
+ 315, 316, 317, 40, 41, 123, 125, 58, 44
};
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
- 0, 45, 46, 46, 46, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 49, 49, 50, 50, 51, 51, 51, 52, 52, 52,
- 53, 53, 54, 54, 54, 54, 54, 54, 54, 55,
- 55, 56, 57, 58
+ 0, 69, 70, 70, 70, 71, 71, 71, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 74, 74, 74, 74, 74, 74, 74,
+ 74, 74, 75, 75, 75, 75, 76, 76, 77, 77,
+ 77, 77, 77, 78, 78, 79, 80, 80, 81, 81,
+ 81, 81, 82, 82, 82, 82, 83, 83, 84, 85,
+ 86, 86
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
static const yytype_uint8 yyr2[] =
{
- 0, 2, 2, 2, 1, 1, 1, 2, 3, 3,
- 1, 2, 3, 3, 1, 3, 3, 3, 3, 3,
+ 0, 2, 2, 2, 1, 1, 2, 1, 1, 1,
+ 2, 3, 3, 1, 2, 3, 3, 1, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 1, 3, 1, 3, 2, 1, 1, 1, 1, 1,
- 3, 5, 1, 3, 1, 1, 1, 3, 2, 1,
- 1, 1, 4, 4
+ 3, 3, 3, 1, 2, 3, 3, 1, 1, 1,
+ 1, 3, 1, 1, 3, 3, 1, 1, 3, 5,
+ 3, 3, 1, 4, 4, 4, 4, 6, 2, 4,
+ 4, 6, 4, 6, 4, 6, 1, 3, 3, 4,
+ 1, 1
};
/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
@@ -561,47 +629,59 @@ static const yytype_uint8 yyr2[] =
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
- 0, 0, 0, 4, 0, 5, 6, 14, 42, 0,
- 51, 0, 0, 0, 0, 0, 2, 10, 44, 0,
- 45, 46, 36, 37, 3, 35, 38, 39, 1, 0,
- 11, 48, 0, 0, 7, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 0, 8, 9, 17, 33, 0,
+ 52, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 13, 0, 37, 40, 38, 39, 7, 46, 2, 5,
+ 47, 1, 0, 0, 14, 34, 0, 0, 0, 0,
+ 0, 0, 0, 0, 58, 43, 42, 0, 0, 0,
+ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 34, 0, 47, 40, 0,
- 13, 8, 9, 12, 15, 16, 17, 18, 19, 20,
- 49, 50, 28, 29, 0, 0, 27, 30, 21, 22,
- 23, 24, 25, 26, 43, 53, 0, 0, 0, 32,
- 41, 0, 31, 0, 52, 33
+ 0, 0, 6, 0, 0, 0, 35, 48, 0, 50,
+ 51, 0, 0, 0, 70, 71, 0, 0, 0, 66,
+ 0, 0, 0, 0, 0, 16, 41, 11, 12, 15,
+ 18, 19, 20, 21, 22, 23, 30, 31, 32, 24,
+ 25, 26, 27, 28, 29, 36, 53, 0, 54, 0,
+ 0, 0, 0, 0, 0, 45, 0, 44, 60, 0,
+ 0, 56, 67, 49, 55, 68, 0, 0, 0, 64,
+ 62, 45, 0, 69, 0, 0, 0, 0, 61, 57,
+ 65, 63, 0, 53
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int8 yydefgoto[] =
{
- -1, 4, 16, 17, 76, 88, 24, 25, 18, 19,
- 72, 20, 77, 21
+ -1, 4, 28, 19, 20, 21, 124, 29, 22, 23,
+ 45, 24, 25, 46, 74, 84, 85, 86
};
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
-#define YYPACT_NINF -35
-static const yytype_int8 yypact[] =
+#define YYPACT_NINF -51
+static const yytype_int16 yypact[] =
{
- 48, 60, 73, -35, 7, -35, -35, -35, -35, -34,
- -35, 43, 8, 11, 60, 60, 86, -35, -35, 80,
- -35, -35, -35, -35, 108, -35, -35, -35, -35, 43,
- 25, -35, 79, -17, -35, -8, 60, 60, 43, 43,
- 43, 43, 43, 43, 43, 5, 5, 0, 43, 43,
- 43, 43, 43, 43, 43, -35, -27, -35, -35, 73,
- -35, 86, 3, 25, 25, 25, 25, 25, 25, 25,
- -35, -35, -35, -35, 23, 43, -35, -35, 25, 25,
- 25, 25, 25, 25, 25, -35, 106, 43, 85, 25,
- -35, -21, -35, 43, -35, 25
+ 154, 126, 254, -51, 23, -51, -51, -51, -51, -38,
+ -51, 53, 161, 25, 126, 0, 5, 126, 126, 34,
+ -51, 220, -51, -51, -51, -51, -51, -51, 169, -51,
+ -51, -51, 53, 53, -4, -51, 10, 6, -5, 196,
+ 18, 4, 1, 53, -15, -51, -51, 73, 76, 32,
+ -51, 112, 173, 126, 126, 53, 53, 53, 53, 53,
+ 53, 53, 93, 93, 1, 53, 53, 53, 53, 53,
+ 53, 53, -51, -27, 43, 44, -51, -51, 254, -51,
+ -51, 53, 96, 81, -51, -51, 52, 1, -50, -16,
+ 51, 53, 254, 54, 53, -51, -51, 79, -51, -4,
+ -4, -4, -4, -4, -4, -4, -51, -51, -51, -4,
+ -4, -4, -4, -4, -4, -4, -51, 53, -51, 142,
+ 47, 111, 71, 132, 80, -51, 53, -51, -4, 253,
+ 53, -4, -51, -51, -51, -51, 132, 83, 132, -4,
+ -51, -51, 49, -51, 50, 57, 86, 53, -51, -51,
+ -51, -51, 35, -51
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] =
{
- -35, -35, 57, -35, -35, -35, -9, -20, -2, -5,
- -4, -1, -35, -35
+ -51, -51, -7, 84, -51, -11, -13, -24, -1, -51,
+ -51, -51, -51, -51, -35, 69, -10, 87
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
@@ -610,58 +690,94 @@ static const yytype_int8 yypgoto[] =
#define YYTABLE_NINF -1
static const yytype_uint8 yytable[] =
{
- 26, 27, 58, 32, 55, 29, 30, 28, 54, 74,
- 26, 27, 55, 85, 54, 22, 70, 71, 23, 94,
- 33, 10, 26, 27, 56, 31, 13, 59, 36, 37,
- 26, 27, 60, 63, 64, 65, 66, 67, 68, 69,
- 37, 75, 73, 78, 79, 80, 81, 82, 83, 84,
- 86, 8, 9, 1, 2, 3, 10, 26, 27, 12,
- 54, 13, 87, 5, 6, 0, 55, 7, 8, 9,
- 89, 34, 35, 10, 11, 0, 12, 0, 13, 0,
- 22, 0, 91, 23, 26, 27, 10, 0, 95, 23,
- 0, 13, 10, 61, 62, 38, 57, 13, 14, 15,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 23, 0, 23, 10,
- 0, 10, 36, 37, 13, 90, 13, 92, 93
+ 34, 30, 44, 39, 72, 36, 49, 52, 90, 40,
+ 40, 30, 72, 71, 125, 82, 47, 47, 126, 79,
+ 27, 73, 75, 31, 71, 32, 10, 30, 77, 88,
+ 76, 13, 89, 14, 37, 30, 71, 116, 93, 53,
+ 54, 117, 41, 41, 99, 100, 101, 102, 103, 104,
+ 105, 108, 117, 91, 109, 110, 111, 112, 113, 114,
+ 115, 8, 9, 42, 87, 43, 43, 83, 48, 10,
+ 120, 119, 12, 78, 13, 71, 14, 30, 53, 54,
+ 128, 81, 132, 131, 71, 129, 92, 71, 47, 71,
+ 71, 30, 82, 47, 15, 72, 16, 71, 38, 153,
+ 94, 50, 51, 117, 82, 72, 89, 118, 96, 121,
+ 140, 134, 139, 148, 149, 142, 33, 127, 30, 144,
+ 123, 150, 130, 146, 54, 145, 135, 75, 30, 5,
+ 6, 106, 107, 7, 8, 9, 152, 97, 98, 136,
+ 8, 137, 10, 11, 141, 12, 147, 13, 10, 14,
+ 151, 12, 27, 13, 0, 14, 53, 54, 10, 1,
+ 2, 3, 0, 13, 133, 14, 0, 15, 26, 16,
+ 122, 27, 17, 15, 41, 16, 95, 10, 0, 27,
+ 0, 35, 13, 0, 14, 10, 0, 0, 0, 18,
+ 13, 55, 14, 0, 0, 138, 0, 43, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 71, 55, 0, 0, 0, 0, 0,
+ 80, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 96, 55, 0,
+ 0, 0, 0, 0, 0, 56, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
+ 71, 26, 0, 27, 27, 0, 0, 0, 143, 10,
+ 10, 0, 0, 0, 13, 13, 14, 14
};
-#define yypact_value_is_default(yystate) \
- ((yystate) == (-35))
+#define yypact_value_is_default(Yystate) \
+ (!!((Yystate) == (-51)))
-#define yytable_value_is_error(yytable_value) \
+#define yytable_value_is_error(Yytable_value) \
YYID (0)
-static const yytype_int8 yycheck[] =
+static const yytype_int16 yycheck[] =
{
- 2, 2, 19, 12, 24, 39, 11, 0, 35, 9,
- 12, 12, 32, 40, 35, 7, 11, 12, 10, 40,
- 9, 13, 24, 24, 29, 17, 18, 44, 36, 37,
- 32, 32, 40, 38, 39, 40, 41, 42, 43, 44,
- 37, 41, 46, 48, 49, 50, 51, 52, 53, 54,
- 59, 8, 9, 5, 6, 7, 13, 59, 59, 16,
- 35, 18, 39, 3, 4, -1, 86, 7, 8, 9,
- 75, 14, 15, 13, 14, -1, 16, -1, 18, -1,
- 7, -1, 87, 10, 86, 86, 13, -1, 93, 10,
- -1, 18, 13, 36, 37, 15, 17, 18, 38, 39,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 10, -1, 10, 13,
- -1, 13, 36, 37, 18, 19, 18, 42, 43
+ 11, 2, 15, 14, 28, 12, 16, 18, 43, 9,
+ 9, 12, 36, 40, 64, 11, 12, 12, 68, 24,
+ 10, 32, 33, 0, 40, 63, 16, 28, 22, 42,
+ 20, 21, 43, 23, 9, 36, 40, 64, 48, 44,
+ 45, 68, 42, 42, 55, 56, 57, 58, 59, 60,
+ 61, 64, 68, 68, 65, 66, 67, 68, 69, 70,
+ 71, 8, 9, 63, 63, 65, 65, 63, 63, 16,
+ 81, 78, 19, 67, 21, 40, 23, 78, 44, 45,
+ 91, 63, 117, 94, 40, 92, 13, 40, 12, 40,
+ 40, 92, 11, 12, 41, 119, 43, 40, 14, 64,
+ 68, 17, 18, 68, 11, 129, 117, 64, 64, 13,
+ 123, 64, 123, 64, 64, 126, 63, 66, 119, 130,
+ 68, 64, 68, 136, 45, 136, 15, 138, 129, 3,
+ 4, 62, 63, 7, 8, 9, 147, 53, 54, 68,
+ 8, 9, 16, 17, 64, 19, 63, 21, 16, 23,
+ 64, 19, 10, 21, -1, 23, 44, 45, 16, 5,
+ 6, 7, -1, 21, 22, 23, -1, 41, 7, 43,
+ 83, 10, 46, 41, 42, 43, 64, 16, -1, 10,
+ -1, 20, 21, -1, 23, 16, -1, -1, -1, 63,
+ 21, 18, 23, -1, -1, 63, -1, 65, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
+ 37, 38, 39, 40, 18, -1, -1, -1, -1, -1,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 64, 18, -1,
+ -1, -1, -1, -1, -1, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 7, -1, 10, 10, -1, -1, -1, 15, 16,
+ 16, -1, -1, -1, 21, 21, 23, 23
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
- 0, 5, 6, 7, 46, 3, 4, 7, 8, 9,
- 13, 14, 16, 18, 38, 39, 47, 48, 53, 54,
- 56, 58, 7, 10, 51, 52, 53, 56, 0, 39,
- 54, 17, 51, 9, 47, 47, 36, 37, 15, 20,
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
- 31, 32, 33, 34, 35, 52, 54, 17, 19, 44,
- 40, 47, 47, 54, 54, 54, 54, 54, 54, 54,
- 11, 12, 55, 55, 9, 41, 49, 57, 54, 54,
- 54, 54, 54, 54, 54, 40, 51, 39, 50, 54,
- 19, 54, 42, 43, 40, 54
+ 0, 5, 6, 7, 70, 3, 4, 7, 8, 9,
+ 16, 17, 19, 21, 23, 41, 43, 46, 63, 72,
+ 73, 74, 77, 78, 80, 81, 7, 10, 71, 76,
+ 77, 0, 63, 63, 74, 20, 71, 9, 72, 74,
+ 9, 42, 63, 65, 75, 79, 82, 12, 63, 85,
+ 72, 72, 74, 44, 45, 18, 25, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 76, 74, 83, 74, 20, 22, 67, 24,
+ 24, 63, 11, 63, 84, 85, 86, 63, 75, 74,
+ 83, 68, 13, 85, 68, 64, 64, 72, 72, 74,
+ 74, 74, 74, 74, 74, 74, 84, 84, 75, 74,
+ 74, 74, 74, 74, 74, 74, 64, 68, 64, 71,
+ 74, 13, 86, 68, 75, 64, 68, 66, 74, 71,
+ 68, 74, 83, 22, 64, 15, 68, 9, 63, 74,
+ 75, 64, 74, 15, 74, 74, 75, 63, 64, 64,
+ 64, 64, 74, 64
};
#define yyerrok (yyerrstatus = 0)
@@ -693,11 +809,12 @@ static const yytype_uint8 yystos[] =
#define YYBACKUP(Token, Value) \
do \
- if (yychar == YYEMPTY && yylen == 1) \
+ if (yychar == YYEMPTY) \
{ \
yychar = (Token); \
yylval = (Value); \
- YYPOPSTACK (1); \
+ YYPOPSTACK (yylen); \
+ yystate = *yyssp; \
goto yybackup; \
} \
else \
@@ -707,46 +824,18 @@ do \
} \
while (YYID (0))
-
+/* Error token number */
#define YYTERROR 1
#define YYERRCODE 256
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
- If N is 0, then set CURRENT to the empty location which ends
- the previous symbol: RHS[0] (always defined). */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N) \
- do \
- if (YYID (N)) \
- { \
- (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
- (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
- (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
- (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
- } \
- else \
- { \
- (Current).first_line = (Current).last_line = \
- YYRHSLOC (Rhs, 0).last_line; \
- (Current).first_column = (Current).last_column = \
- YYRHSLOC (Rhs, 0).last_column; \
- } \
- while (YYID (0))
-#endif
-
-
/* This macro is provided for backward compatibility. */
-
#ifndef YY_LOCATION_PRINT
# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
#endif
/* YYLEX -- calling `yylex' with the right arguments. */
-
#ifdef YYLEX_PARAM
# define YYLEX yylex (&yylval, YYLEX_PARAM)
#else
@@ -797,6 +886,8 @@ yy_symbol_value_print (yyoutput, yytype,
ap_expr_parse_ctx_t *ctx;
#endif
{
+ FILE *yyo = yyoutput;
+ YYUSE (yyo);
if (!yyvaluep)
return;
YYUSE (ctx);
@@ -806,12 +897,8 @@ yy_symbol_value_print (yyoutput, yytype,
# else
YYUSE (yyoutput);
# endif
- switch (yytype)
- {
- default:
- break;
+ YYUSE (yytype);
}
-}
/*--------------------------------.
@@ -1051,12 +1138,11 @@ static int
yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
yytype_int16 *yyssp, int yytoken)
{
- YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+ YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
YYSIZE_T yysize = yysize0;
- YYSIZE_T yysize1;
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
/* Internationalized format string. */
- const char *yyformat = 0;
+ const char *yyformat = YY_NULL;
/* Arguments of yyformat. */
char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
/* Number of reported tokens (one for the "unexpected", one per
@@ -1116,7 +1202,8 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, c
break;
}
yyarg[yycount++] = yytname[yyx];
- yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+ {
+ YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
if (! (yysize <= yysize1
&& yysize1 <= YYSTACK_ALLOC_MAXIMUM))
return 2;
@@ -1124,6 +1211,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, c
}
}
}
+ }
switch (yycount)
{
@@ -1140,10 +1228,12 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, c
# undef YYCASE_
}
- yysize1 = yysize + yystrlen (yyformat);
+ {
+ YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
return 2;
yysize = yysize1;
+ }
if (*yymsg_alloc < yysize)
{
@@ -1201,29 +1291,10 @@ yydestruct (yymsg, yytype, yyvaluep, ctx
yymsg = "Deleting";
YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
- switch (yytype)
- {
-
- default:
- break;
+ YYUSE (yytype);
}
-}
-/* Prevent warnings from -Wmissing-prototypes. */
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (ap_expr_parse_ctx_t *ctx);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
/*----------.
@@ -1255,8 +1326,31 @@ yyparse (ctx)
/* The lookahead symbol. */
int yychar;
+
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized. */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+ _Pragma ("GCC diagnostic pop")
+#else
+/* Default value used for initialization, for pacifying older GCCs
+ or non-GCC compilers. */
+static YYSTYPE yyval_default;
+# define YY_INITIAL_VALUE(Value) = Value
+#endif
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
+#endif
+
/* The semantic value of the lookahead symbol. */
-YYSTYPE yylval;
+YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
/* Number of syntax errors so far. */
int yynerrs;
@@ -1269,7 +1363,7 @@ YYSTYPE yylval;
`yyss': related to states.
`yyvs': related to semantic values.
- Refer to the stacks thru separate pointers, to allow yyoverflow
+ Refer to the stacks through separate pointers, to allow yyoverflow
to reallocate them elsewhere. */
/* The state stack. */
@@ -1287,7 +1381,7 @@ YYSTYPE yylval;
int yyn;
int yyresult;
/* Lookahead token as an internal (translated) token number. */
- int yytoken;
+ int yytoken = 0;
/* The variables used to return semantic value and location from the
action routines. */
YYSTYPE yyval;
@@ -1305,9 +1399,8 @@ YYSTYPE yylval;
Keep to zero when no symbol should be popped. */
int yylen = 0;
- yytoken = 0;
- yyss = yyssa;
- yyvs = yyvsa;
+ yyssp = yyss = yyssa;
+ yyvsp = yyvs = yyvsa;
yystacksize = YYINITDEPTH;
YYDPRINTF ((stderr, "Starting parse\n"));
@@ -1316,14 +1409,6 @@ YYSTYPE yylval;
yyerrstatus = 0;
yynerrs = 0;
yychar = YYEMPTY; /* Cause a token to be read. */
-
- /* Initialize stack pointers.
- Waste one element of value and location stack
- so that they stay on the same level as the state stack.
- The wasted elements are never initialized. */
- yyssp = yyss;
- yyvsp = yyvs;
-
goto yysetstate;
/*------------------------------------------------------------.
@@ -1464,7 +1549,9 @@ yybackup:
yychar = YYEMPTY;
yystate = yyn;
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
*++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
goto yynewstate;
@@ -1501,393 +1588,442 @@ yyreduce:
switch (yyn)
{
case 2:
-
-/* Line 1806 of yacc.c */
-#line 112 "util_expr_parse.y"
+/* Line 1787 of yacc.c */
+#line 128 "util_expr_parse.y"
{ ctx->expr = (yyvsp[(2) - (2)].exVal); }
break;
case 3:
-
-/* Line 1806 of yacc.c */
-#line 113 "util_expr_parse.y"
+/* Line 1787 of yacc.c */
+#line 129 "util_expr_parse.y"
{ ctx->expr = (yyvsp[(2) - (2)].exVal); }
break;
case 4:
-
-/* Line 1806 of yacc.c */
-#line 114 "util_expr_parse.y"
+/* Line 1787 of yacc.c */
+#line 130 "util_expr_parse.y"
{ YYABORT; }
break;
case 5:
-
-/* Line 1806 of yacc.c */
-#line 117 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_True, NULL, NULL, ctx); }
+/* Line 1787 of yacc.c */
+#line 133 "util_expr_parse.y"
+ { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
break;
case 6:
-
-/* Line 1806 of yacc.c */
-#line 118 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_False, NULL, NULL, ctx); }
+/* Line 1787 of yacc.c */
+#line 134 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_concat_make((yyvsp[(1) - (2)].exVal), (yyvsp[(2) - (2)].exVal), ctx); }
break;
case 7:
-
-/* Line 1806 of yacc.c */
-#line 119 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_Not, (yyvsp[(2) - (2)].exVal), NULL, ctx); }
+/* Line 1787 of yacc.c */
+#line 135 "util_expr_parse.y"
+ { YYABORT; }
break;
case 8:
-
-/* Line 1806 of yacc.c */
-#line 120 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_Or, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 138 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_True, NULL, NULL, ctx); }
break;
case 9:
-
-/* Line 1806 of yacc.c */
-#line 121 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_And, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 139 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_False, NULL, NULL, ctx); }
break;
case 10:
-
-/* Line 1806 of yacc.c */
-#line 122 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_Comp, (yyvsp[(1) - (1)].exVal), NULL, ctx); }
+/* Line 1787 of yacc.c */
+#line 140 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Not, (yyvsp[(2) - (2)].exVal), NULL, ctx); }
break;
case 11:
-
-/* Line 1806 of yacc.c */
-#line 123 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_unary_op_make( (yyvsp[(1) - (2)].cpVal), (yyvsp[(2) - (2)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 141 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Or, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 12:
-
-/* Line 1806 of yacc.c */
-#line 124 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_binary_op_make((yyvsp[(2) - (3)].cpVal), (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 142 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_And, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 13:
-
-/* Line 1806 of yacc.c */
-#line 125 "util_expr_parse.y"
- { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
+/* Line 1787 of yacc.c */
+#line 143 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Comp, (yyvsp[(1) - (1)].exVal), NULL, ctx); }
break;
case 14:
-
-/* Line 1806 of yacc.c */
-#line 126 "util_expr_parse.y"
- { YYABORT; }
+/* Line 1787 of yacc.c */
+#line 144 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_unary_op_make( (yyvsp[(1) - (2)].cpVal), (yyvsp[(2) - (2)].exVal), ctx); }
break;
case 15:
-
-/* Line 1806 of yacc.c */
-#line 129 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_EQ, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 145 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_binary_op_make((yyvsp[(2) - (3)].cpVal), (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 16:
-
-/* Line 1806 of yacc.c */
-#line 130 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_NE, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 146 "util_expr_parse.y"
+ { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
break;
case 17:
-
-/* Line 1806 of yacc.c */
-#line 131 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_LT, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 147 "util_expr_parse.y"
+ { YYABORT; }
break;
case 18:
-
-/* Line 1806 of yacc.c */
-#line 132 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_LE, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 150 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_EQ, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 19:
-
-/* Line 1806 of yacc.c */
-#line 133 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_GT, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 151 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_NE, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 20:
-
-/* Line 1806 of yacc.c */
-#line 134 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_GE, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 152 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_LT, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 21:
-
-/* Line 1806 of yacc.c */
-#line 135 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_STR_EQ, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 153 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_LE, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 22:
-
-/* Line 1806 of yacc.c */
-#line 136 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_STR_NE, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 154 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_GT, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 23:
-
-/* Line 1806 of yacc.c */
-#line 137 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_STR_LT, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 155 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_GE, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 24:
-
-/* Line 1806 of yacc.c */
-#line 138 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_STR_LE, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 156 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_STR_EQ, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 25:
-
-/* Line 1806 of yacc.c */
-#line 139 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_STR_GT, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 157 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_STR_NE, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 26:
-
-/* Line 1806 of yacc.c */
-#line 140 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_STR_GE, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 158 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_STR_LT, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 27:
-
-/* Line 1806 of yacc.c */
-#line 141 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_IN, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 159 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_STR_LE, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 28:
-
-/* Line 1806 of yacc.c */
-#line 142 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_REG, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 160 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_STR_GT, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 29:
-
-/* Line 1806 of yacc.c */
-#line 143 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_NRE, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 161 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_STR_GE, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 30:
-
-/* Line 1806 of yacc.c */
-#line 146 "util_expr_parse.y"
- { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
+/* Line 1787 of yacc.c */
+#line 162 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_REG, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 31:
-
-/* Line 1806 of yacc.c */
-#line 147 "util_expr_parse.y"
- { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
+/* Line 1787 of yacc.c */
+#line 163 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_NRE, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 32:
-
-/* Line 1806 of yacc.c */
-#line 150 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_ListElement, (yyvsp[(1) - (1)].exVal), NULL, ctx); }
+/* Line 1787 of yacc.c */
+#line 164 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_IN, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 33:
-
-/* Line 1806 of yacc.c */
-#line 151 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_ListElement, (yyvsp[(3) - (3)].exVal), (yyvsp[(1) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 167 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Digit, (yyvsp[(1) - (1)].cpVal), NULL, ctx); }
break;
case 34:
-
-/* Line 1806 of yacc.c */
-#line 154 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_Concat, (yyvsp[(1) - (2)].exVal), (yyvsp[(2) - (2)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 168 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_String, "", NULL, ctx); }
break;
case 35:
-
-/* Line 1806 of yacc.c */
-#line 155 "util_expr_parse.y"
- { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
+/* Line 1787 of yacc.c */
+#line 169 "util_expr_parse.y"
+ { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
break;
case 36:
-
-/* Line 1806 of yacc.c */
-#line 156 "util_expr_parse.y"
- { YYABORT; }
+/* Line 1787 of yacc.c */
+#line 170 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Concat, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
break;
case 37:
-
-/* Line 1806 of yacc.c */
-#line 159 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_String, (yyvsp[(1) - (1)].cpVal), NULL, ctx); }
+/* Line 1787 of yacc.c */
+#line 171 "util_expr_parse.y"
+ { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
break;
case 38:
-
-/* Line 1806 of yacc.c */
-#line 160 "util_expr_parse.y"
+/* Line 1787 of yacc.c */
+#line 172 "util_expr_parse.y"
{ (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
break;
case 39:
-
-/* Line 1806 of yacc.c */
-#line 161 "util_expr_parse.y"
+/* Line 1787 of yacc.c */
+#line 173 "util_expr_parse.y"
{ (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
break;
case 40:
-
-/* Line 1806 of yacc.c */
-#line 164 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_var_make((yyvsp[(2) - (3)].cpVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 174 "util_expr_parse.y"
+ { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
break;
case 41:
-
-/* Line 1806 of yacc.c */
-#line 165 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_str_func_make((yyvsp[(2) - (5)].cpVal), (yyvsp[(4) - (5)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 175 "util_expr_parse.y"
+ { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
break;
case 42:
-
-/* Line 1806 of yacc.c */
-#line 168 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_Digit, (yyvsp[(1) - (1)].cpVal), NULL, ctx); }
+/* Line 1787 of yacc.c */
+#line 178 "util_expr_parse.y"
+ { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
break;
case 43:
-
-/* Line 1806 of yacc.c */
-#line 169 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_Concat, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+/* Line 1787 of yacc.c */
+#line 179 "util_expr_parse.y"
+ { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
break;
case 44:
-
-/* Line 1806 of yacc.c */
-#line 170 "util_expr_parse.y"
- { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
+/* Line 1787 of yacc.c */
+#line 180 "util_expr_parse.y"
+ { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
break;
case 45:
-
-/* Line 1806 of yacc.c */
-#line 171 "util_expr_parse.y"
- { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
+/* Line 1787 of yacc.c */
+#line 181 "util_expr_parse.y"
+ { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
break;
case 46:
+/* Line 1787 of yacc.c */
+#line 184 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_String, (yyvsp[(1) - (1)].cpVal), NULL, ctx); }
+ break;
-/* Line 1806 of yacc.c */
-#line 172 "util_expr_parse.y"
+ case 47:
+/* Line 1787 of yacc.c */
+#line 185 "util_expr_parse.y"
{ (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
break;
- case 47:
+ case 48:
+/* Line 1787 of yacc.c */
+#line 188 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_var_make((yyvsp[(2) - (3)].cpVal), ctx); }
+ break;
-/* Line 1806 of yacc.c */
-#line 173 "util_expr_parse.y"
- { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
+ case 49:
+/* Line 1787 of yacc.c */
+#line 189 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_str_func_make((yyvsp[(2) - (5)].cpVal), (yyvsp[(4) - (5)].exVal), ctx); }
break;
- case 48:
+ case 50:
+/* Line 1787 of yacc.c */
+#line 190 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Bool, (yyvsp[(2) - (3)].exVal), NULL, ctx); }
+ break;
-/* Line 1806 of yacc.c */
-#line 174 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_make(op_String, "", NULL, ctx); }
+ case 51:
+/* Line 1787 of yacc.c */
+#line 191 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Word, (yyvsp[(2) - (3)].exVal), NULL, ctx); }
break;
- case 49:
+ case 52:
+/* Line 1787 of yacc.c */
+#line 192 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_backref_make((yyvsp[(1) - (1)].num), ctx); }
+ break;
-/* Line 1806 of yacc.c */
-#line 177 "util_expr_parse.y"
- {
- ap_regex_t *regex;
- if ((regex = ap_pregcomp(ctx->pool, (yyvsp[(1) - (1)].cpVal),
- AP_REG_EXTENDED|AP_REG_NOSUB)) == NULL) {
- ctx->error = "Failed to compile regular expression";
- YYERROR;
- }
- (yyval.exVal) = ap_expr_make(op_Regex, regex, NULL, ctx);
- }
+ case 53:
+/* Line 1787 of yacc.c */
+#line 195 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_str_func_make((yyvsp[(1) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), ctx); }
break;
- case 50:
+ case 54:
+/* Line 1787 of yacc.c */
+#line 196 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_str_func_make((yyvsp[(1) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), ctx); }
+ break;
+
+ case 55:
+/* Line 1787 of yacc.c */
+#line 199 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_list_func_make((yyvsp[(1) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), ctx); }
+ break;
+
+ case 56:
+/* Line 1787 of yacc.c */
+#line 203 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Sub, (yyvsp[(4) - (4)].exVal), (yyvsp[(2) - (4)].exVal), ctx); }
+ break;
+
+ case 57:
+/* Line 1787 of yacc.c */
+#line 204 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Sub, (yyvsp[(5) - (6)].exVal), (yyvsp[(3) - (6)].exVal), ctx); }
+ break;
+
+ case 58:
+/* Line 1787 of yacc.c */
+#line 207 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Join, (yyvsp[(2) - (2)].exVal), NULL, ctx); }
+ break;
+
+ case 59:
+/* Line 1787 of yacc.c */
+#line 208 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Join, (yyvsp[(3) - (4)].exVal), NULL, ctx); }
+ break;
+
+ case 60:
+/* Line 1787 of yacc.c */
+#line 209 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Join, (yyvsp[(2) - (4)].exVal), (yyvsp[(4) - (4)].exVal), ctx); }
+ break;
+
+ case 61:
+/* Line 1787 of yacc.c */
+#line 210 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Join, (yyvsp[(3) - (6)].exVal), (yyvsp[(5) - (6)].exVal), ctx); }
+ break;
+
+ case 62:
+/* Line 1787 of yacc.c */
+#line 213 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Split, (yyvsp[(4) - (4)].exVal), (yyvsp[(2) - (4)].exVal), ctx); }
+ break;
+
+ case 63:
+/* Line 1787 of yacc.c */
+#line 214 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Split, (yyvsp[(5) - (6)].exVal), (yyvsp[(3) - (6)].exVal), ctx); }
+ break;
+
+ case 64:
+/* Line 1787 of yacc.c */
+#line 215 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Split, (yyvsp[(4) - (4)].exVal), (yyvsp[(2) - (4)].exVal), ctx); }
+ break;
+
+ case 65:
+/* Line 1787 of yacc.c */
+#line 216 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_Split, (yyvsp[(5) - (6)].exVal), (yyvsp[(3) - (6)].exVal), ctx); }
+ break;
+
+ case 66:
+/* Line 1787 of yacc.c */
+#line 219 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_ListElement, (yyvsp[(1) - (1)].exVal), NULL, ctx); }
+ break;
+
+ case 67:
+/* Line 1787 of yacc.c */
+#line 220 "util_expr_parse.y"
+ { (yyval.exVal) = ap_expr_make(op_ListElement, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+ break;
-/* Line 1806 of yacc.c */
-#line 186 "util_expr_parse.y"
+ case 68:
+/* Line 1787 of yacc.c */
+#line 223 "util_expr_parse.y"
{
- ap_regex_t *regex;
- if ((regex = ap_pregcomp(ctx->pool, (yyvsp[(1) - (1)].cpVal),
- AP_REG_EXTENDED|AP_REG_NOSUB|AP_REG_ICASE)) == NULL) {
+ ap_expr_t *e = ap_expr_regex_make((yyvsp[(2) - (3)].cpVal), NULL, (yyvsp[(3) - (3)].cpVal), ctx);
+ if (!e) {
ctx->error = "Failed to compile regular expression";
YYERROR;
}
- (yyval.exVal) = ap_expr_make(op_Regex, regex, NULL, ctx);
+ (yyval.exVal) = e;
}
break;
- case 51:
-
-/* Line 1806 of yacc.c */
-#line 197 "util_expr_parse.y"
+ case 69:
+/* Line 1787 of yacc.c */
+#line 232 "util_expr_parse.y"
{
- int *n = apr_palloc(ctx->pool, sizeof(int));
- *n = (yyvsp[(1) - (1)].num);
- (yyval.exVal) = ap_expr_make(op_RegexBackref, n, NULL, ctx);
+ ap_expr_t *e = ap_expr_regex_make((yyvsp[(2) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), (yyvsp[(4) - (4)].cpVal), ctx);
+ if (!e) {
+ ctx->error = "Failed to compile regular expression";
+ YYERROR;
+ }
+ (yyval.exVal) = e;
}
break;
- case 52:
-
-/* Line 1806 of yacc.c */
-#line 204 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_list_func_make((yyvsp[(1) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), ctx); }
+ case 70:
+/* Line 1787 of yacc.c */
+#line 241 "util_expr_parse.y"
+ { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
break;
- case 53:
-
-/* Line 1806 of yacc.c */
-#line 207 "util_expr_parse.y"
- { (yyval.exVal) = ap_expr_str_func_make((yyvsp[(1) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), ctx); }
+ case 71:
+/* Line 1787 of yacc.c */
+#line 242 "util_expr_parse.y"
+ { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
break;
-
-/* Line 1806 of yacc.c */
-#line 1891 "util_expr_parse.c"
+/* Line 1787 of yacc.c */
+#line 2027 "util_expr_parse.c"
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -2050,7 +2186,9 @@ yyerrlab1:
YY_STACK_PRINT (yyss, yyssp);
}
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
*++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
/* Shift the error token. */
@@ -2074,7 +2212,7 @@ yyabortlab:
yyresult = 1;
goto yyreturn;
-#if !defined(yyoverflow) || YYERROR_VERBOSE
+#if !defined yyoverflow || YYERROR_VERBOSE
/*-------------------------------------------------.
| yyexhaustedlab -- memory exhaustion comes here. |
`-------------------------------------------------*/
@@ -2116,9 +2254,8 @@ yyreturn:
}
-
-/* Line 2067 of yacc.c */
-#line 210 "util_expr_parse.y"
+/* Line 2050 of yacc.c */
+#line 245 "util_expr_parse.y"
void yyerror(ap_expr_parse_ctx_t *ctx, const char *s)
@@ -2127,4 +2264,3 @@ void yyerror(ap_expr_parse_ctx_t *ctx, c
ctx->error = apr_pstrdup(ctx->ptemp, s);
}
-
Modified: httpd/sandbox/httpd-2.4.x-trunk-delta/server/util_expr_parse.h
URL: http://svn.apache.org/viewvc/httpd/sandbox/httpd-2.4.x-trunk-delta/server/util_expr_parse.h?rev=1840688&r1=1840687&r2=1840688&view=diff
==============================================================================
--- httpd/sandbox/httpd-2.4.x-trunk-delta/server/util_expr_parse.h (original)
+++ httpd/sandbox/httpd-2.4.x-trunk-delta/server/util_expr_parse.h Wed Sep 12 13:56:17 2018
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 2.5. */
+/* A Bison parser, made by GNU Bison 2.7.1. */
/* Bison interface for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -30,6 +30,15 @@
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
+#ifndef YY_AP_EXPR_YY_UTIL_EXPR_PARSE_H_INCLUDED
+# define YY_AP_EXPR_YY_UTIL_EXPR_PARSE_H_INCLUDED
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int ap_expr_yydebug;
+#endif
/* Tokens. */
#ifndef YYTOKENTYPE
@@ -46,43 +55,49 @@
T_ID = 264,
T_STRING = 265,
T_REGEX = 266,
- T_REGEX_I = 267,
- T_REGEX_BACKREF = 268,
- T_OP_UNARY = 269,
- T_OP_BINARY = 270,
- T_STR_BEGIN = 271,
- T_STR_END = 272,
- T_VAR_BEGIN = 273,
- T_VAR_END = 274,
- T_OP_EQ = 275,
- T_OP_NE = 276,
- T_OP_LT = 277,
- T_OP_LE = 278,
- T_OP_GT = 279,
- T_OP_GE = 280,
- T_OP_REG = 281,
- T_OP_NRE = 282,
- T_OP_IN = 283,
- T_OP_STR_EQ = 284,
- T_OP_STR_NE = 285,
- T_OP_STR_LT = 286,
- T_OP_STR_LE = 287,
- T_OP_STR_GT = 288,
- T_OP_STR_GE = 289,
- T_OP_CONCAT = 290,
- T_OP_OR = 291,
- T_OP_AND = 292,
- T_OP_NOT = 293
+ T_REGSUB = 267,
+ T_REG_MATCH = 268,
+ T_REG_SUBST = 269,
+ T_REG_FLAGS = 270,
+ T_BACKREF = 271,
+ T_OP_UNARY = 272,
+ T_OP_BINARY = 273,
+ T_STR_BEGIN = 274,
+ T_STR_END = 275,
+ T_VAR_BEGIN = 276,
+ T_VAR_END = 277,
+ T_VAREXP_BEGIN = 278,
+ T_VAREXP_END = 279,
+ T_OP_EQ = 280,
+ T_OP_NE = 281,
+ T_OP_LT = 282,
+ T_OP_LE = 283,
+ T_OP_GT = 284,
+ T_OP_GE = 285,
+ T_OP_REG = 286,
+ T_OP_NRE = 287,
+ T_OP_IN = 288,
+ T_OP_STR_EQ = 289,
+ T_OP_STR_NE = 290,
+ T_OP_STR_LT = 291,
+ T_OP_STR_LE = 292,
+ T_OP_STR_GT = 293,
+ T_OP_STR_GE = 294,
+ T_OP_CONCAT = 295,
+ T_OP_JOIN = 296,
+ T_OP_SPLIT = 297,
+ T_OP_SUB = 298,
+ T_OP_OR = 299,
+ T_OP_AND = 300,
+ T_OP_NOT = 301
};
#endif
-
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
{
-
-/* Line 2068 of yacc.c */
+/* Line 2053 of yacc.c */
#line 35 "util_expr_parse.y"
char *cpVal;
@@ -90,9 +105,8 @@ typedef union YYSTYPE
int num;
-
-/* Line 2068 of yacc.c */
-#line 96 "util_expr_parse.h"
+/* Line 2053 of yacc.c */
+#line 110 "util_expr_parse.h"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -100,5 +114,18 @@ typedef union YYSTYPE
#endif
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int ap_expr_yyparse (void *YYPARSE_PARAM);
+#else
+int ap_expr_yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int ap_expr_yyparse (ap_expr_parse_ctx_t *ctx);
+#else
+int ap_expr_yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
-
+#endif /* !YY_AP_EXPR_YY_UTIL_EXPR_PARSE_H_INCLUDED */
Modified: httpd/sandbox/httpd-2.4.x-trunk-delta/server/util_expr_parse.y
URL: http://svn.apache.org/viewvc/httpd/sandbox/httpd-2.4.x-trunk-delta/server/util_expr_parse.y?rev=1840688&r1=1840687&r2=1840688&view=diff
==============================================================================
--- httpd/sandbox/httpd-2.4.x-trunk-delta/server/util_expr_parse.y (original)
+++ httpd/sandbox/httpd-2.4.x-trunk-delta/server/util_expr_parse.y Wed Sep 12 13:56:17 2018
@@ -38,66 +38,82 @@
int num;
}
-%token T_TRUE
-%token T_FALSE
+%token T_TRUE "true"
+%token T_FALSE "false"
-%token T_EXPR_BOOL
-%token T_EXPR_STRING
+%token T_EXPR_BOOL "boolean expression"
+%token T_EXPR_STRING "string expression"
-%token <cpVal> T_ERROR
+%token <cpVal> T_ERROR "error token"
-%token <cpVal> T_DIGIT
-%token <cpVal> T_ID
-%token <cpVal> T_STRING
-%token <cpVal> T_REGEX
-%token <cpVal> T_REGEX_I
-%token <num> T_REGEX_BACKREF
-%token <cpVal> T_OP_UNARY
-%token <cpVal> T_OP_BINARY
-
-%token T_STR_BEGIN
-%token T_STR_END
-%token T_VAR_BEGIN
-%token T_VAR_END
-
-%token T_OP_EQ
-%token T_OP_NE
-%token T_OP_LT
-%token T_OP_LE
-%token T_OP_GT
-%token T_OP_GE
-%token T_OP_REG
-%token T_OP_NRE
-%token T_OP_IN
-%token T_OP_STR_EQ
-%token T_OP_STR_NE
-%token T_OP_STR_LT
-%token T_OP_STR_LE
-%token T_OP_STR_GT
-%token T_OP_STR_GE
-%token T_OP_CONCAT
-
-%token T_OP_OR
-%token T_OP_AND
-%token T_OP_NOT
+%token <cpVal> T_DIGIT "number"
+%token <cpVal> T_ID "identifier"
+%token <cpVal> T_STRING "string literal"
+
+%token T_REGEX "start of matching regex"
+%token T_REGSUB "start of substitution regex"
+%token <cpVal> T_REG_MATCH "pattern of the regex"
+%token <cpVal> T_REG_SUBST "substitution of the regex"
+%token <cpVal> T_REG_FLAGS "pattern flags of the regex"
+%token <num> T_BACKREF "regex back reference"
+
+%token <cpVal> T_OP_UNARY "unary operator"
+%token <cpVal> T_OP_BINARY "binary operator"
+
+%token T_STR_BEGIN "start of string"
+%token T_STR_END "end of string"
+%token T_VAR_BEGIN "start of variable name"
+%token T_VAR_END "end of variable name"
+%token T_VAREXP_BEGIN "start of variable expression"
+%token T_VAREXP_END "end of variable expression"
+
+%token T_OP_EQ "integer equal"
+%token T_OP_NE "integer not equal"
+%token T_OP_LT "integer less than"
+%token T_OP_LE "integer less or equal"
+%token T_OP_GT "integer greater than"
+%token T_OP_GE "integer greater or equal"
+%token T_OP_REG "regex match"
+%token T_OP_NRE "regex non-match"
+%token T_OP_IN "contained in"
+%token T_OP_STR_EQ "string equal"
+%token T_OP_STR_NE "string not equal"
+%token T_OP_STR_LT "string less than"
+%token T_OP_STR_LE "string less or equal"
+%token T_OP_STR_GT "string greater than"
+%token T_OP_STR_GE "string greater or equal"
+
+%token T_OP_CONCAT "string concatenation"
+
+%token T_OP_JOIN "join operator"
+%token T_OP_SPLIT "split operator"
+%token T_OP_SUB "substitute operator"
+
+%token T_OP_OR "logical or"
+%token T_OP_AND "logical and"
+%token T_OP_NOT "logical not"
-%right T_OP_OR
-%right T_OP_AND
+%left T_OP_OR
+%left T_OP_AND
%right T_OP_NOT
%right T_OP_CONCAT
-%type <exVal> expr
-%type <exVal> comparison
-%type <exVal> strfunccall
-%type <exVal> lstfunccall
-%type <exVal> regex
-%type <exVal> words
-%type <exVal> wordlist
-%type <exVal> word
-%type <exVal> string
-%type <exVal> strpart
-%type <exVal> var
-%type <exVal> backref
+%type <exVal> cond "condition"
+%type <exVal> comp "comparison"
+%type <exVal> strfunc "string function"
+%type <exVal> listfunc "list function"
+%type <exVal> list "list"
+%type <exVal> words "words"
+%type <exVal> word "word"
+%type <exVal> string "string"
+%type <exVal> substr "substring"
+%type <exVal> var "variable"
+%type <exVal> regex "match regex"
+%type <exVal> regsub "substitution regex"
+%type <exVal> regany "any regex"
+%type <exVal> split "split"
+%type <exVal> join "join"
+%type <exVal> sub "sub"
%{
#include "util_expr_private.h"
@@ -109,24 +125,29 @@ int ap_expr_yylex(YYSTYPE *lvalp, void *
%%
-root : T_EXPR_BOOL expr { ctx->expr = $2; }
- | T_EXPR_STRING string { ctx->expr = $2; }
+expr : T_EXPR_STRING string { ctx->expr = $2; }
+ | T_EXPR_BOOL cond { ctx->expr = $2; }
| T_ERROR { YYABORT; }
;
-expr : T_TRUE { $$ = ap_expr_make(op_True, NULL, NULL, ctx); }
+string : substr { $$ = $1; }
+ | string substr { $$ = ap_expr_concat_make($1, $2, ctx); }
+ | T_ERROR { YYABORT; }
+ ;
+
+cond : T_TRUE { $$ = ap_expr_make(op_True, NULL, NULL, ctx); }
| T_FALSE { $$ = ap_expr_make(op_False, NULL, NULL, ctx); }
- | T_OP_NOT expr { $$ = ap_expr_make(op_Not, $2, NULL, ctx); }
- | expr T_OP_OR expr { $$ = ap_expr_make(op_Or, $1, $3, ctx); }
- | expr T_OP_AND expr { $$ = ap_expr_make(op_And, $1, $3, ctx); }
- | comparison { $$ = ap_expr_make(op_Comp, $1, NULL, ctx); }
+ | T_OP_NOT cond { $$ = ap_expr_make(op_Not, $2, NULL, ctx); }
+ | cond T_OP_OR cond { $$ = ap_expr_make(op_Or, $1, $3, ctx); }
+ | cond T_OP_AND cond { $$ = ap_expr_make(op_And, $1, $3, ctx); }
+ | comp { $$ = ap_expr_make(op_Comp, $1, NULL, ctx); }
| T_OP_UNARY word { $$ = ap_expr_unary_op_make( $1, $2, ctx); }
| word T_OP_BINARY word { $$ = ap_expr_binary_op_make($2, $1, $3, ctx); }
- | '(' expr ')' { $$ = $2; }
+ | '(' cond ')' { $$ = $2; }
| T_ERROR { YYABORT; }
;
-comparison: word T_OP_EQ word { $$ = ap_expr_make(op_EQ, $1, $3, ctx); }
+comp : word T_OP_EQ word { $$ = ap_expr_make(op_EQ, $1, $3, ctx); }
| word T_OP_NE word { $$ = ap_expr_make(op_NE, $1, $3, ctx); }
| word T_OP_LT word { $$ = ap_expr_make(op_LT, $1, $3, ctx); }
| word T_OP_LE word { $$ = ap_expr_make(op_LE, $1, $3, ctx); }
@@ -138,73 +159,87 @@ comparison: word T_OP_EQ word
| word T_OP_STR_LE word { $$ = ap_expr_make(op_STR_LE, $1, $3, ctx); }
| word T_OP_STR_GT word { $$ = ap_expr_make(op_STR_GT, $1, $3, ctx); }
| word T_OP_STR_GE word { $$ = ap_expr_make(op_STR_GE, $1, $3, ctx); }
- | word T_OP_IN wordlist { $$ = ap_expr_make(op_IN, $1, $3, ctx); }
| word T_OP_REG regex { $$ = ap_expr_make(op_REG, $1, $3, ctx); }
| word T_OP_NRE regex { $$ = ap_expr_make(op_NRE, $1, $3, ctx); }
+ | word T_OP_IN list { $$ = ap_expr_make(op_IN, $1, $3, ctx); }
;
-wordlist : lstfunccall { $$ = $1; }
- | '{' words '}' { $$ = $2; }
- ;
-
-words : word { $$ = ap_expr_make(op_ListElement, $1, NULL, ctx); }
- | words ',' word { $$ = ap_expr_make(op_ListElement, $3, $1, ctx); }
+word : T_DIGIT { $$ = ap_expr_make(op_Digit, $1, NULL, ctx); }
+ | T_STR_BEGIN T_STR_END { $$ = ap_expr_make(op_String, "", NULL, ctx); }
+ | T_STR_BEGIN string T_STR_END { $$ = $2; }
+ | word T_OP_CONCAT word { $$ = ap_expr_make(op_Concat, $1, $3, ctx); }
+ | var { $$ = $1; }
+ | sub { $$ = $1; }
+ | join { $$ = $1; }
+ | strfunc { $$ = $1; }
+ | '(' word ')' { $$ = $2; }
;
-string : string strpart { $$ = ap_expr_make(op_Concat, $1, $2, ctx); }
- | strpart { $$ = $1; }
- | T_ERROR { YYABORT; }
+list : split { $$ = $1; }
+ | listfunc { $$ = $1; }
+ | '{' words '}' { $$ = $2; }
+ | '(' list ')' { $$ = $2; }
;
-strpart : T_STRING { $$ = ap_expr_make(op_String, $1, NULL, ctx); }
+substr : T_STRING { $$ = ap_expr_make(op_String, $1, NULL, ctx); }
| var { $$ = $1; }
- | backref { $$ = $1; }
;
var : T_VAR_BEGIN T_ID T_VAR_END { $$ = ap_expr_var_make($2, ctx); }
| T_VAR_BEGIN T_ID ':' string T_VAR_END { $$ = ap_expr_str_func_make($2, $4, ctx); }
+ | T_VAREXP_BEGIN cond T_VAREXP_END { $$ = ap_expr_make(op_Bool, $2, NULL, ctx); }
+ | T_VAREXP_BEGIN word T_VAREXP_END { $$ = ap_expr_make(op_Word, $2, NULL, ctx); }
+ | T_BACKREF { $$ = ap_expr_backref_make($1, ctx); }
;
-word : T_DIGIT { $$ = ap_expr_make(op_Digit, $1, NULL, ctx); }
- | word T_OP_CONCAT word { $$ = ap_expr_make(op_Concat, $1, $3, ctx); }
- | var { $$ = $1; }
- | backref { $$ = $1; }
- | strfunccall { $$ = $1; }
- | T_STR_BEGIN string T_STR_END { $$ = $2; }
- | T_STR_BEGIN T_STR_END { $$ = ap_expr_make(op_String, "", NULL, ctx); }
+strfunc : T_ID '(' word ')' { $$ = ap_expr_str_func_make($1, $3, ctx); }
+ | T_ID '(' words ')' { $$ = ap_expr_str_func_make($1, $3, ctx); }
;
-regex : T_REGEX {
- ap_regex_t *regex;
- if ((regex = ap_pregcomp(ctx->pool, $1,
- AP_REG_EXTENDED|AP_REG_NOSUB)) == NULL) {
+listfunc : T_ID '(' word ')' { $$ = ap_expr_list_func_make($1, $3, ctx); }
+ /* | T_ID '(' words ')' { $$ = ap_expr_list_func_make($1, $3, ctx); } */
+ ;
+
+sub : T_OP_SUB regsub ',' word { $$ = ap_expr_make(op_Sub, $4, $2, ctx); }
+ | T_OP_SUB '(' regsub ',' word ')' { $$ = ap_expr_make(op_Sub, $5, $3, ctx); }
+ ;
+
+join : T_OP_JOIN list { $$ = ap_expr_make(op_Join, $2, NULL, ctx); }
+ | T_OP_JOIN '(' list ')' { $$ = ap_expr_make(op_Join, $3, NULL, ctx); }
+ | T_OP_JOIN list ',' word { $$ = ap_expr_make(op_Join, $2, $4, ctx); }
+ | T_OP_JOIN '(' list ',' word ')' { $$ = ap_expr_make(op_Join, $3, $5, ctx); }
+ ;
+
+split : T_OP_SPLIT regany ',' list { $$ = ap_expr_make(op_Split, $4, $2, ctx); }
+ | T_OP_SPLIT '(' regany ',' list ')' { $$ = ap_expr_make(op_Split, $5, $3, ctx); }
+ | T_OP_SPLIT regany ',' word { $$ = ap_expr_make(op_Split, $4, $2, ctx); }
+ | T_OP_SPLIT '(' regany ',' word ')' { $$ = ap_expr_make(op_Split, $5, $3, ctx); }
+ ;
+
+words : word { $$ = ap_expr_make(op_ListElement, $1, NULL, ctx); }
+ | word ',' words { $$ = ap_expr_make(op_ListElement, $1, $3, ctx); }
+ ;
+
+regex : T_REGEX T_REG_MATCH T_REG_FLAGS {
+ ap_expr_t *e = ap_expr_regex_make($2, NULL, $3, ctx);
+ if (!e) {
ctx->error = "Failed to compile regular expression";
YYERROR;
}
- $$ = ap_expr_make(op_Regex, regex, NULL, ctx);
+ $$ = e;
}
- | T_REGEX_I {
- ap_regex_t *regex;
- if ((regex = ap_pregcomp(ctx->pool, $1,
- AP_REG_EXTENDED|AP_REG_NOSUB|AP_REG_ICASE)) == NULL) {
+ ;
+regsub : T_REGSUB T_REG_MATCH string T_REG_FLAGS {
+ ap_expr_t *e = ap_expr_regex_make($2, $3, $4, ctx);
+ if (!e) {
ctx->error = "Failed to compile regular expression";
YYERROR;
}
- $$ = ap_expr_make(op_Regex, regex, NULL, ctx);
+ $$ = e;
}
;
-
-backref : T_REGEX_BACKREF {
- int *n = apr_palloc(ctx->pool, sizeof(int));
- *n = $1;
- $$ = ap_expr_make(op_RegexBackref, n, NULL, ctx);
- }
- ;
-
-lstfunccall : T_ID '(' word ')' { $$ = ap_expr_list_func_make($1, $3, ctx); }
- ;
-
-strfunccall : T_ID '(' word ')' { $$ = ap_expr_str_func_make($1, $3, ctx); }
+regany : regex { $$ = $1; }
+ | regsub { $$ = $1; }
;
%%
Modified: httpd/sandbox/httpd-2.4.x-trunk-delta/server/util_expr_private.h
URL: http://svn.apache.org/viewvc/httpd/sandbox/httpd-2.4.x-trunk-delta/server/util_expr_private.h?rev=1840688&r1=1840687&r2=1840688&view=diff
==============================================================================
--- httpd/sandbox/httpd-2.4.x-trunk-delta/server/util_expr_private.h (original)
+++ httpd/sandbox/httpd-2.4.x-trunk-delta/server/util_expr_private.h Wed Sep 12 13:56:17 2018
@@ -54,9 +54,10 @@ typedef enum {
op_REG, op_NRE,
op_STR_EQ, op_STR_NE, op_STR_LT, op_STR_LE, op_STR_GT, op_STR_GE,
op_Concat,
- op_Digit, op_String, op_Regex, op_RegexBackref,
- op_Var,
- op_ListElement,
+ op_String, op_Word,
+ op_Digit, op_Var, op_Bool, op_ListElement,
+ op_Sub, op_Split, op_Join,
+ op_Regex, op_Backref,
/*
* call external functions/operators.
* The info node contains the function pointer and some function specific
@@ -79,6 +80,15 @@ struct ap_expr_node {
const void *node_arg2;
};
+/** The stack used by scanner and parser */
+typedef struct ap_expr_parser_stack {
+ char *scan_ptr;
+ char scan_buf[MAX_STRING_LEN];
+ int scan_stop;
+ int scan_flag;
+ struct ap_expr_parser_stack *next;
+} ap_expr_parser_stack_t;
+
/** The context used by scanner and parser */
typedef struct {
/* internal state of the scanner */
@@ -86,9 +96,8 @@ typedef struct {
int inputlen;
const char *inputptr;
void *scanner;
- char *scan_ptr;
- char scan_buf[MAX_STRING_LEN];
- char scan_del;
+ ap_expr_parser_stack_t *current,
+ *spares;
int at_start;
/* pools for result and temporary usage */
@@ -119,6 +128,10 @@ void ap_expr_yyset_extra(ap_expr_parse_c
/* create a parse tree node */
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_concat_make(const void *a1, const void *a2,
+ ap_expr_parse_ctx_t *ctx);
+ap_expr_t *ap_expr_regex_make(const char *pattern, const ap_expr_t *subst,
+ const char *flags, ap_expr_parse_ctx_t *ctx);
/* create parse tree node for the string-returning function 'name' */
ap_expr_t *ap_expr_str_func_make(const char *name, const ap_expr_t *arg,
ap_expr_parse_ctx_t *ctx);
@@ -127,6 +140,8 @@ ap_expr_t *ap_expr_list_func_make(const
ap_expr_parse_ctx_t *ctx);
/* create parse tree node for the variable 'name' */
ap_expr_t *ap_expr_var_make(const char *name, ap_expr_parse_ctx_t *ctx);
+/* create parse tree node for the back reference 'num' */
+ap_expr_t *ap_expr_backref_make(int num, ap_expr_parse_ctx_t *ctx);
/* create parse tree node for the unary operator 'name' */
ap_expr_t *ap_expr_unary_op_make(const char *name, const ap_expr_t *arg,
ap_expr_parse_ctx_t *ctx);