1:
2: /* A Bison parser, made by GNU Bison 2.4.1. */
3:
4: /* Skeleton implementation for Bison's Yacc-like parsers in C
5:
6: Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
7: Free Software Foundation, Inc.
8:
9: This program is free software: you can redistribute it and/or modify
10: it under the terms of the GNU General Public License as published by
11: the Free Software Foundation, either version 3 of the License, or
12: (at your option) any later version.
13:
14: This program is distributed in the hope that it will be useful,
15: but WITHOUT ANY WARRANTY; without even the implied warranty of
16: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17: GNU General Public License for more details.
18:
19: You should have received a copy of the GNU General Public License
20: along with this program. If not, see <http://www.gnu.org/licenses/>. */
21:
22: /* As a special exception, you may create a larger work that contains
23: part or all of the Bison parser skeleton and distribute that work
24: under terms of your choice, so long as that work isn't itself a
25: parser generator using the skeleton or a modified version thereof
26: as a parser skeleton. Alternatively, if you modify or redistribute
27: the parser skeleton itself, you may (at your option) remove this
28: special exception, which will cause the skeleton and the resulting
29: Bison output files to be licensed under the GNU General Public
30: License without this special exception.
31:
32: This special exception was added by the Free Software Foundation in
33: version 2.2 of Bison. */
34:
35: /* C LALR(1) parser skeleton written by Richard Stallman, by
36: simplifying the original so-called "semantic" parser. */
37:
38: /* All symbols defined below should begin with yy or YY, to avoid
39: infringing on user name space. This should be done even for local
40: variables, as they might otherwise be expanded by user macros.
41: There are some unavoidable exceptions within include files to
42: define necessary library symbols; they are noted "INFRINGES ON
43: USER NAME SPACE" below. */
44:
45: /* Identify Bison output. */
46: #define YYBISON 1
47:
48: /* Bison version. */
49: #define YYBISON_VERSION "2.4.1"
50:
51: /* Skeleton name. */
52: #define YYSKELETON_NAME "yacc.c"
53:
54: /* Pure parsers. */
55: #define YYPURE 1
56:
57: /* Push parsers. */
58: #define YYPUSH 0
59:
60: /* Pull parsers. */
61: #define YYPULL 1
62:
63: /* Using locations. */
64: #define YYLSP_NEEDED 0
65:
66: /* Substitute the variable and function names. */
67: #define yyparse ini_parse
68: #define yylex ini_lex
69: #define yyerror ini_error
70: #define yylval ini_lval
71: #define yychar ini_char
72: #define yydebug ini_debug
73: #define yynerrs ini_nerrs
74:
75:
76: /* Copy the first part of user declarations. */
77:
78:
79: /*
80: +----------------------------------------------------------------------+
81: | Zend Engine |
82: +----------------------------------------------------------------------+
83: | Copyright (c) 1998-2012 Zend Technologies Ltd. (http://www.zend.com) |
84: +----------------------------------------------------------------------+
85: | This source file is subject to version 2.00 of the Zend license, |
86: | that is bundled with this package in the file LICENSE, and is |
87: | available through the world-wide-web at the following url: |
88: | http://www.zend.com/license/2_00.txt. |
89: | If you did not receive a copy of the Zend license and are unable to |
90: | obtain it through the world-wide-web, please send a note to |
91: | license@zend.com so we can mail you a copy immediately. |
92: +----------------------------------------------------------------------+
93: | Authors: Zeev Suraski <zeev@zend.com> |
94: | Jani Taskinen <jani@php.net> |
95: +----------------------------------------------------------------------+
96: */
97:
98: /* $Id: zend_ini_parser.c,v 1.1.1.1 2012/02/21 23:47:52 misho Exp $ */
99:
100: #define DEBUG_CFG_PARSER 0
101:
102: #include "zend.h"
103: #include "zend_API.h"
104: #include "zend_ini.h"
105: #include "zend_constants.h"
106: #include "zend_ini_scanner.h"
107: #include "zend_extensions.h"
108:
109: #define YYERROR_VERBOSE
110: #define YYSTYPE zval
111:
112: #ifdef ZTS
113: #define YYPARSE_PARAM tsrm_ls
114: #define YYLEX_PARAM tsrm_ls
115: int ini_parse(void *arg);
116: #else
117: int ini_parse(void);
118: #endif
119:
120: #define ZEND_INI_PARSER_CB (CG(ini_parser_param))->ini_parser_cb
121: #define ZEND_INI_PARSER_ARG (CG(ini_parser_param))->arg
122:
123: /* {{{ zend_ini_do_op()
124: */
125: static void zend_ini_do_op(char type, zval *result, zval *op1, zval *op2)
126: {
127: int i_result;
128: int i_op1, i_op2;
129: char str_result[MAX_LENGTH_OF_LONG];
130:
131: i_op1 = atoi(Z_STRVAL_P(op1));
132: free(Z_STRVAL_P(op1));
133: if (op2) {
134: i_op2 = atoi(Z_STRVAL_P(op2));
135: free(Z_STRVAL_P(op2));
136: } else {
137: i_op2 = 0;
138: }
139:
140: switch (type) {
141: case '|':
142: i_result = i_op1 | i_op2;
143: break;
144: case '&':
145: i_result = i_op1 & i_op2;
146: break;
147: case '~':
148: i_result = ~i_op1;
149: break;
150: case '!':
151: i_result = !i_op1;
152: break;
153: default:
154: i_result = 0;
155: break;
156: }
157:
158: Z_STRLEN_P(result) = zend_sprintf(str_result, "%d", i_result);
159: Z_STRVAL_P(result) = (char *) malloc(Z_STRLEN_P(result)+1);
160: memcpy(Z_STRVAL_P(result), str_result, Z_STRLEN_P(result));
161: Z_STRVAL_P(result)[Z_STRLEN_P(result)] = 0;
162: Z_TYPE_P(result) = IS_STRING;
163: }
164: /* }}} */
165:
166: /* {{{ zend_ini_init_string()
167: */
168: static void zend_ini_init_string(zval *result)
169: {
170: Z_STRVAL_P(result) = malloc(1);
171: Z_STRVAL_P(result)[0] = 0;
172: Z_STRLEN_P(result) = 0;
173: Z_TYPE_P(result) = IS_STRING;
174: }
175: /* }}} */
176:
177: /* {{{ zend_ini_add_string()
178: */
179: static void zend_ini_add_string(zval *result, zval *op1, zval *op2)
180: {
181: int length = Z_STRLEN_P(op1) + Z_STRLEN_P(op2);
182:
183: Z_STRVAL_P(result) = (char *) realloc(Z_STRVAL_P(op1), length+1);
184: memcpy(Z_STRVAL_P(result)+Z_STRLEN_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op2));
185: Z_STRVAL_P(result)[length] = 0;
186: Z_STRLEN_P(result) = length;
187: Z_TYPE_P(result) = IS_STRING;
188: }
189: /* }}} */
190:
191: /* {{{ zend_ini_get_constant()
192: */
193: static void zend_ini_get_constant(zval *result, zval *name TSRMLS_DC)
194: {
195: zval z_constant;
196:
197: /* If name contains ':' it is not a constant. Bug #26893. */
198: if (!memchr(Z_STRVAL_P(name), ':', Z_STRLEN_P(name))
199: && zend_get_constant(Z_STRVAL_P(name), Z_STRLEN_P(name), &z_constant TSRMLS_CC)) {
200: /* z_constant is emalloc()'d */
201: convert_to_string(&z_constant);
202: Z_STRVAL_P(result) = zend_strndup(Z_STRVAL(z_constant), Z_STRLEN(z_constant));
203: Z_STRLEN_P(result) = Z_STRLEN(z_constant);
204: Z_TYPE_P(result) = Z_TYPE(z_constant);
205: zval_dtor(&z_constant);
206: free(Z_STRVAL_P(name));
207: } else {
208: *result = *name;
209: }
210: }
211: /* }}} */
212:
213: /* {{{ zend_ini_get_var()
214: */
215: static void zend_ini_get_var(zval *result, zval *name TSRMLS_DC)
216: {
217: zval curval;
218: char *envvar;
219:
220: /* Fetch configuration option value */
221: if (zend_get_configuration_directive(Z_STRVAL_P(name), Z_STRLEN_P(name)+1, &curval) == SUCCESS) {
222: Z_STRVAL_P(result) = zend_strndup(Z_STRVAL(curval), Z_STRLEN(curval));
223: Z_STRLEN_P(result) = Z_STRLEN(curval);
224: /* ..or if not found, try ENV */
225: } else if ((envvar = zend_getenv(Z_STRVAL_P(name), Z_STRLEN_P(name) TSRMLS_CC)) != NULL ||
226: (envvar = getenv(Z_STRVAL_P(name))) != NULL) {
227: Z_STRVAL_P(result) = strdup(envvar);
228: Z_STRLEN_P(result) = strlen(envvar);
229: } else {
230: zend_ini_init_string(result);
231: }
232: }
233: /* }}} */
234:
235: /* {{{ ini_error()
236: */
237: static void ini_error(char *msg)
238: {
239: char *error_buf;
240: int error_buf_len;
241: char *currently_parsed_filename;
242: TSRMLS_FETCH();
243:
244: currently_parsed_filename = zend_ini_scanner_get_filename(TSRMLS_C);
245: if (currently_parsed_filename) {
246: error_buf_len = 128 + strlen(msg) + strlen(currently_parsed_filename); /* should be more than enough */
247: error_buf = (char *) emalloc(error_buf_len);
248:
249: sprintf(error_buf, "%s in %s on line %d\n", msg, currently_parsed_filename, zend_ini_scanner_get_lineno(TSRMLS_C));
250: } else {
251: error_buf = estrdup("Invalid configuration directive\n");
252: }
253:
254: if (CG(ini_parser_unbuffered_errors)) {
255: #ifdef PHP_WIN32
256: MessageBox(NULL, error_buf, "PHP Error", MB_OK|MB_TOPMOST|0x00200000L);
257: #else
258: fprintf(stderr, "PHP: %s", error_buf);
259: #endif
260: } else {
261: zend_error(E_WARNING, "%s", error_buf);
262: }
263: efree(error_buf);
264: }
265: /* }}} */
266:
267: /* {{{ zend_parse_ini_file()
268: */
269: ZEND_API int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, int scanner_mode, zend_ini_parser_cb_t ini_parser_cb, void *arg TSRMLS_DC)
270: {
271: int retval;
272: zend_ini_parser_param ini_parser_param;
273:
274: ini_parser_param.ini_parser_cb = ini_parser_cb;
275: ini_parser_param.arg = arg;
276: CG(ini_parser_param) = &ini_parser_param;
277:
278: if (zend_ini_open_file_for_scanning(fh, scanner_mode TSRMLS_CC) == FAILURE) {
279: return FAILURE;
280: }
281:
282: CG(ini_parser_unbuffered_errors) = unbuffered_errors;
283: retval = ini_parse(TSRMLS_C);
284: zend_file_handle_dtor(fh TSRMLS_CC);
285:
286: shutdown_ini_scanner(TSRMLS_C);
287:
288: if (retval == 0) {
289: return SUCCESS;
290: } else {
291: return FAILURE;
292: }
293: }
294: /* }}} */
295:
296: /* {{{ zend_parse_ini_string()
297: */
298: ZEND_API int zend_parse_ini_string(char *str, zend_bool unbuffered_errors, int scanner_mode, zend_ini_parser_cb_t ini_parser_cb, void *arg TSRMLS_DC)
299: {
300: int retval;
301: zend_ini_parser_param ini_parser_param;
302:
303: ini_parser_param.ini_parser_cb = ini_parser_cb;
304: ini_parser_param.arg = arg;
305: CG(ini_parser_param) = &ini_parser_param;
306:
307: if (zend_ini_prepare_string_for_scanning(str, scanner_mode TSRMLS_CC) == FAILURE) {
308: return FAILURE;
309: }
310:
311: CG(ini_parser_unbuffered_errors) = unbuffered_errors;
312: retval = ini_parse(TSRMLS_C);
313:
314: shutdown_ini_scanner(TSRMLS_C);
315:
316: if (retval == 0) {
317: return SUCCESS;
318: } else {
319: return FAILURE;
320: }
321: }
322: /* }}} */
323:
324:
325:
326:
327: /* Enabling traces. */
328: #ifndef YYDEBUG
329: # define YYDEBUG 0
330: #endif
331:
332: /* Enabling verbose error messages. */
333: #ifdef YYERROR_VERBOSE
334: # undef YYERROR_VERBOSE
335: # define YYERROR_VERBOSE 1
336: #else
337: # define YYERROR_VERBOSE 0
338: #endif
339:
340: /* Enabling the token table. */
341: #ifndef YYTOKEN_TABLE
342: # define YYTOKEN_TABLE 0
343: #endif
344:
345:
346: /* Tokens. */
347: #ifndef YYTOKENTYPE
348: # define YYTOKENTYPE
349: /* Put the tokens into the symbol table, so that GDB and other debuggers
350: know about them. */
351: enum yytokentype {
352: TC_SECTION = 258,
353: TC_RAW = 259,
354: TC_CONSTANT = 260,
355: TC_NUMBER = 261,
356: TC_STRING = 262,
357: TC_WHITESPACE = 263,
358: TC_LABEL = 264,
359: TC_OFFSET = 265,
360: TC_DOLLAR_CURLY = 266,
361: TC_VARNAME = 267,
362: TC_QUOTED_STRING = 268,
363: BOOL_TRUE = 269,
364: BOOL_FALSE = 270,
365: END_OF_LINE = 271
366: };
367: #endif
368: /* Tokens. */
369: #define TC_SECTION 258
370: #define TC_RAW 259
371: #define TC_CONSTANT 260
372: #define TC_NUMBER 261
373: #define TC_STRING 262
374: #define TC_WHITESPACE 263
375: #define TC_LABEL 264
376: #define TC_OFFSET 265
377: #define TC_DOLLAR_CURLY 266
378: #define TC_VARNAME 267
379: #define TC_QUOTED_STRING 268
380: #define BOOL_TRUE 269
381: #define BOOL_FALSE 270
382: #define END_OF_LINE 271
383:
384:
385:
386:
387: #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
388: typedef int YYSTYPE;
389: # define YYSTYPE_IS_TRIVIAL 1
390: # define yystype YYSTYPE /* obsolescent; will be withdrawn */
391: # define YYSTYPE_IS_DECLARED 1
392: #endif
393:
394:
395: /* Copy the second part of user declarations. */
396:
397:
398:
399: #ifdef short
400: # undef short
401: #endif
402:
403: #ifdef YYTYPE_UINT8
404: typedef YYTYPE_UINT8 yytype_uint8;
405: #else
406: typedef unsigned char yytype_uint8;
407: #endif
408:
409: #ifdef YYTYPE_INT8
410: typedef YYTYPE_INT8 yytype_int8;
411: #elif (defined __STDC__ || defined __C99__FUNC__ \
412: || defined __cplusplus || defined _MSC_VER)
413: typedef signed char yytype_int8;
414: #else
415: typedef short int yytype_int8;
416: #endif
417:
418: #ifdef YYTYPE_UINT16
419: typedef YYTYPE_UINT16 yytype_uint16;
420: #else
421: typedef unsigned short int yytype_uint16;
422: #endif
423:
424: #ifdef YYTYPE_INT16
425: typedef YYTYPE_INT16 yytype_int16;
426: #else
427: typedef short int yytype_int16;
428: #endif
429:
430: #ifndef YYSIZE_T
431: # ifdef __SIZE_TYPE__
432: # define YYSIZE_T __SIZE_TYPE__
433: # elif defined size_t
434: # define YYSIZE_T size_t
435: # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
436: || defined __cplusplus || defined _MSC_VER)
437: # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
438: # define YYSIZE_T size_t
439: # else
440: # define YYSIZE_T unsigned int
441: # endif
442: #endif
443:
444: #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
445:
446: #ifndef YY_
447: # if YYENABLE_NLS
448: # if ENABLE_NLS
449: # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
450: # define YY_(msgid) dgettext ("bison-runtime", msgid)
451: # endif
452: # endif
453: # ifndef YY_
454: # define YY_(msgid) msgid
455: # endif
456: #endif
457:
458: /* Suppress unused-variable warnings by "using" E. */
459: #if ! defined lint || defined __GNUC__
460: # define YYUSE(e) ((void) (e))
461: #else
462: # define YYUSE(e) /* empty */
463: #endif
464:
465: /* Identity function, used to suppress warnings about constant conditions. */
466: #ifndef lint
467: # define YYID(n) (n)
468: #else
469: #if (defined __STDC__ || defined __C99__FUNC__ \
470: || defined __cplusplus || defined _MSC_VER)
471: static int
472: YYID (int yyi)
473: #else
474: static int
475: YYID (yyi)
476: int yyi;
477: #endif
478: {
479: return yyi;
480: }
481: #endif
482:
483: #if ! defined yyoverflow || YYERROR_VERBOSE
484:
485: /* The parser invokes alloca or malloc; define the necessary symbols. */
486:
487: # ifdef YYSTACK_USE_ALLOCA
488: # if YYSTACK_USE_ALLOCA
489: # ifdef __GNUC__
490: # define YYSTACK_ALLOC __builtin_alloca
491: # elif defined __BUILTIN_VA_ARG_INCR
492: # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
493: # elif defined _AIX
494: # define YYSTACK_ALLOC __alloca
495: # elif defined _MSC_VER
496: # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
497: # define alloca _alloca
498: # else
499: # define YYSTACK_ALLOC alloca
500: # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
501: || defined __cplusplus || defined _MSC_VER)
502: # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
503: # ifndef _STDLIB_H
504: # define _STDLIB_H 1
505: # endif
506: # endif
507: # endif
508: # endif
509: # endif
510:
511: # ifdef YYSTACK_ALLOC
512: /* Pacify GCC's `empty if-body' warning. */
513: # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
514: # ifndef YYSTACK_ALLOC_MAXIMUM
515: /* The OS might guarantee only one guard page at the bottom of the stack,
516: and a page size can be as small as 4096 bytes. So we cannot safely
517: invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
518: to allow for a few compiler-allocated temporary stack slots. */
519: # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
520: # endif
521: # else
522: # define YYSTACK_ALLOC YYMALLOC
523: # define YYSTACK_FREE YYFREE
524: # ifndef YYSTACK_ALLOC_MAXIMUM
525: # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
526: # endif
527: # if (defined __cplusplus && ! defined _STDLIB_H \
528: && ! ((defined YYMALLOC || defined malloc) \
529: && (defined YYFREE || defined free)))
530: # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
531: # ifndef _STDLIB_H
532: # define _STDLIB_H 1
533: # endif
534: # endif
535: # ifndef YYMALLOC
536: # define YYMALLOC malloc
537: # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
538: || defined __cplusplus || defined _MSC_VER)
539: void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
540: # endif
541: # endif
542: # ifndef YYFREE
543: # define YYFREE free
544: # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
545: || defined __cplusplus || defined _MSC_VER)
546: void free (void *); /* INFRINGES ON USER NAME SPACE */
547: # endif
548: # endif
549: # endif
550: #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
551:
552:
553: #if (! defined yyoverflow \
554: && (! defined __cplusplus \
555: || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
556:
557: /* A type that is properly aligned for any stack member. */
558: union yyalloc
559: {
560: yytype_int16 yyss_alloc;
561: YYSTYPE yyvs_alloc;
562: };
563:
564: /* The size of the maximum gap between one aligned stack and the next. */
565: # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
566:
567: /* The size of an array large to enough to hold all stacks, each with
568: N elements. */
569: # define YYSTACK_BYTES(N) \
570: ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
571: + YYSTACK_GAP_MAXIMUM)
572:
573: /* Copy COUNT objects from FROM to TO. The source and destination do
574: not overlap. */
575: # ifndef YYCOPY
576: # if defined __GNUC__ && 1 < __GNUC__
577: # define YYCOPY(To, From, Count) \
578: __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
579: # else
580: # define YYCOPY(To, From, Count) \
581: do \
582: { \
583: YYSIZE_T yyi; \
584: for (yyi = 0; yyi < (Count); yyi++) \
585: (To)[yyi] = (From)[yyi]; \
586: } \
587: while (YYID (0))
588: # endif
589: # endif
590:
591: /* Relocate STACK from its old location to the new one. The
592: local variables YYSIZE and YYSTACKSIZE give the old and new number of
593: elements in the stack, and YYPTR gives the new location of the
594: stack. Advance YYPTR to a properly aligned location for the next
595: stack. */
596: # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
597: do \
598: { \
599: YYSIZE_T yynewbytes; \
600: YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
601: Stack = &yyptr->Stack_alloc; \
602: yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
603: yyptr += yynewbytes / sizeof (*yyptr); \
604: } \
605: while (YYID (0))
606:
607: #endif
608:
609: /* YYFINAL -- State number of the termination state. */
610: #define YYFINAL 2
611: /* YYLAST -- Last index in YYTABLE. */
612: #define YYLAST 109
613:
614: /* YYNTOKENS -- Number of terminals. */
615: #define YYNTOKENS 43
616: /* YYNNTS -- Number of nonterminals. */
617: #define YYNNTS 13
618: /* YYNRULES -- Number of rules. */
619: #define YYNRULES 48
620: /* YYNRULES -- Number of states. */
621: #define YYNSTATES 69
622:
623: /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
624: #define YYUNDEFTOK 2
625: #define YYMAXUTOK 271
626:
627: #define YYTRANSLATE(YYX) \
628: ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
629:
630: /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
631: static const yytype_uint8 yytranslate[] =
632: {
633: 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
634: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
635: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
636: 2, 2, 2, 39, 21, 2, 29, 28, 38, 22,
637: 41, 42, 27, 24, 19, 25, 20, 26, 2, 2,
638: 2, 2, 2, 2, 2, 2, 2, 2, 18, 2,
639: 31, 17, 32, 33, 34, 2, 2, 2, 2, 2,
640: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
641: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
642: 2, 2, 2, 40, 23, 2, 2, 2, 2, 2,
643: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
644: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
645: 2, 2, 2, 35, 37, 36, 30, 2, 2, 2,
646: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
647: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
648: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
649: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
650: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
651: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
652: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
653: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
654: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
655: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
656: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
657: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
658: 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
659: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
660: 15, 16
661: };
662:
663: #if YYDEBUG
664: /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
665: YYRHS. */
666: static const yytype_uint8 yyprhs[] =
667: {
668: 0, 0, 3, 6, 7, 11, 15, 21, 23, 25,
669: 27, 28, 30, 32, 34, 36, 38, 39, 42, 45,
670: 46, 48, 50, 54, 57, 60, 65, 67, 69, 73,
671: 76, 79, 84, 86, 90, 94, 97, 100, 104, 108,
672: 110, 112, 114, 116, 118, 120, 122, 124, 126
673: };
674:
675: /* YYRHS -- A `-1'-separated list of the rules' RHS. */
676: static const yytype_int8 yyrhs[] =
677: {
678: 44, 0, -1, 44, 45, -1, -1, 3, 46, 40,
679: -1, 9, 17, 47, -1, 10, 48, 40, 17, 47,
680: -1, 9, -1, 16, -1, 50, -1, -1, 52, -1,
681: 14, -1, 15, -1, 16, -1, 51, -1, -1, 49,
682: 53, -1, 49, 13, -1, -1, 53, -1, 54, -1,
683: 21, 49, 21, -1, 50, 53, -1, 50, 54, -1,
684: 50, 21, 49, 21, -1, 53, -1, 55, -1, 21,
685: 49, 21, -1, 51, 53, -1, 51, 55, -1, 51,
686: 21, 49, 21, -1, 51, -1, 52, 37, 52, -1,
687: 52, 38, 52, -1, 30, 52, -1, 39, 52, -1,
688: 41, 52, 42, -1, 11, 12, 36, -1, 5, -1,
689: 4, -1, 6, -1, 7, -1, 8, -1, 5, -1,
690: 4, -1, 6, -1, 7, -1, 8, -1
691: };
692:
693: /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
694: static const yytype_uint16 yyrline[] =
695: {
696: 0, 273, 273, 274, 278, 285, 293, 302, 303, 307,
697: 308, 312, 313, 314, 315, 319, 320, 324, 325, 326,
698: 330, 331, 332, 333, 334, 335, 339, 340, 341, 342,
699: 343, 344, 348, 349, 350, 351, 352, 353, 357, 361,
700: 362, 363, 364, 365, 369, 370, 371, 372, 373
701: };
702: #endif
703:
704: #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
705: /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
706: First, the terminals, then, starting at YYNTOKENS, nonterminals. */
707: static const char *const yytname[] =
708: {
709: "$end", "error", "$undefined", "TC_SECTION", "TC_RAW", "TC_CONSTANT",
710: "TC_NUMBER", "TC_STRING", "TC_WHITESPACE", "TC_LABEL", "TC_OFFSET",
711: "TC_DOLLAR_CURLY", "TC_VARNAME", "TC_QUOTED_STRING", "BOOL_TRUE",
712: "BOOL_FALSE", "END_OF_LINE", "'='", "':'", "','", "'.'", "'\"'", "'\\''",
713: "'^'", "'+'", "'-'", "'/'", "'*'", "'%'", "'$'", "'~'", "'<'", "'>'",
714: "'?'", "'@'", "'{'", "'}'", "'|'", "'&'", "'!'", "']'", "'('", "')'",
715: "$accept", "statement_list", "statement", "section_string_or_value",
716: "string_or_value", "option_offset", "encapsed_list",
717: "var_string_list_section", "var_string_list", "expr", "cfg_var_ref",
718: "constant_literal", "constant_string", 0
719: };
720: #endif
721:
722: # ifdef YYPRINT
723: /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
724: token YYLEX-NUM. */
725: static const yytype_uint16 yytoknum[] =
726: {
727: 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
728: 265, 266, 267, 268, 269, 270, 271, 61, 58, 44,
729: 46, 34, 39, 94, 43, 45, 47, 42, 37, 36,
730: 126, 60, 62, 63, 64, 123, 125, 124, 38, 33,
731: 93, 40, 41
732: };
733: # endif
734:
735: /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
736: static const yytype_uint8 yyr1[] =
737: {
738: 0, 43, 44, 44, 45, 45, 45, 45, 45, 46,
739: 46, 47, 47, 47, 47, 48, 48, 49, 49, 49,
740: 50, 50, 50, 50, 50, 50, 51, 51, 51, 51,
741: 51, 51, 52, 52, 52, 52, 52, 52, 53, 54,
742: 54, 54, 54, 54, 55, 55, 55, 55, 55
743: };
744:
745: /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
746: static const yytype_uint8 yyr2[] =
747: {
748: 0, 2, 2, 0, 3, 3, 5, 1, 1, 1,
749: 0, 1, 1, 1, 1, 1, 0, 2, 2, 0,
750: 1, 1, 3, 2, 2, 4, 1, 1, 3, 2,
751: 2, 4, 1, 3, 3, 2, 2, 3, 3, 1,
752: 1, 1, 1, 1, 1, 1, 1, 1, 1
753: };
754:
755: /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
756: STATE-NUM when YYTABLE doesn't specify something else to do. Zero
757: means the default is an error. */
758: static const yytype_uint8 yydefact[] =
759: {
760: 3, 0, 1, 10, 7, 16, 8, 2, 40, 39,
761: 41, 42, 43, 0, 19, 0, 9, 20, 21, 0,
762: 45, 44, 46, 47, 48, 19, 0, 15, 26, 27,
763: 0, 0, 4, 19, 23, 24, 12, 13, 14, 0,
764: 0, 0, 5, 32, 11, 0, 0, 19, 29, 30,
765: 38, 18, 22, 17, 0, 35, 36, 0, 0, 0,
766: 28, 0, 0, 25, 37, 33, 34, 6, 31
767: };
768:
769: /* YYDEFGOTO[NTERM-NUM]. */
770: static const yytype_int8 yydefgoto[] =
771: {
772: -1, 1, 7, 15, 42, 26, 31, 16, 43, 44,
773: 28, 18, 29
774: };
775:
776: /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
777: STATE-NUM. */
778: #define YYPACT_NINF -36
779: static const yytype_int8 yypact[] =
780: {
781: -36, 93, -36, 39, -5, 65, -36, -36, -36, -36,
782: -36, -36, -36, 8, -36, -18, 73, -36, -36, 0,
783: -36, -36, -36, -36, -36, -36, -15, 84, -36, -36,
784: -9, 41, -36, -36, -36, -36, -36, -36, -36, 27,
785: 27, 27, -36, 84, -35, 42, 12, -36, -36, -36,
786: -36, -36, -36, -36, 54, -36, -36, 45, 27, 27,
787: -36, 0, 86, -36, -36, -36, -36, -36, -36
788: };
789:
790: /* YYPGOTO[NTERM-NUM]. */
791: static const yytype_int8 yypgoto[] =
792: {
793: -36, -36, -36, -36, -12, -36, -24, -36, 51, -22,
794: -3, 48, -17
795: };
796:
797: /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
798: positive, shift that token. If negative, reduce the rule which
799: number is the opposite. If zero, do what YYDEFACT says.
800: If YYTABLE_NINF, syntax error. */
801: #define YYTABLE_NINF -1
802: static const yytype_uint8 yytable[] =
803: {
804: 17, 45, 58, 59, 20, 21, 22, 23, 24, 54,
805: 49, 13, 19, 34, 36, 37, 38, 55, 56, 57,
806: 30, 25, 32, 62, 48, 46, 49, 50, 53, 61,
807: 39, 20, 21, 22, 23, 24, 65, 66, 13, 40,
808: 48, 41, 53, 8, 9, 10, 11, 12, 25, 67,
809: 13, 53, 13, 13, 51, 51, 27, 39, 0, 53,
810: 14, 0, 52, 60, 35, 13, 40, 51, 41, 20,
811: 21, 22, 23, 24, 0, 63, 13, 8, 9, 10,
812: 11, 12, 58, 59, 13, 0, 25, 64, 20, 21,
813: 22, 23, 24, 2, 33, 13, 3, 13, 0, 51,
814: 0, 0, 4, 5, 0, 47, 0, 68, 0, 6
815: };
816:
817: static const yytype_int8 yycheck[] =
818: {
819: 3, 25, 37, 38, 4, 5, 6, 7, 8, 33,
820: 27, 11, 17, 16, 14, 15, 16, 39, 40, 41,
821: 12, 21, 40, 47, 27, 40, 43, 36, 31, 17,
822: 30, 4, 5, 6, 7, 8, 58, 59, 11, 39,
823: 43, 41, 45, 4, 5, 6, 7, 8, 21, 61,
824: 11, 54, 11, 11, 13, 13, 5, 30, -1, 62,
825: 21, -1, 21, 21, 16, 11, 39, 13, 41, 4,
826: 5, 6, 7, 8, -1, 21, 11, 4, 5, 6,
827: 7, 8, 37, 38, 11, -1, 21, 42, 4, 5,
828: 6, 7, 8, 0, 21, 11, 3, 11, -1, 13,
829: -1, -1, 9, 10, -1, 21, -1, 21, -1, 16
830: };
831:
832: /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
833: symbol of state STATE-NUM. */
834: static const yytype_uint8 yystos[] =
835: {
836: 0, 44, 0, 3, 9, 10, 16, 45, 4, 5,
837: 6, 7, 8, 11, 21, 46, 50, 53, 54, 17,
838: 4, 5, 6, 7, 8, 21, 48, 51, 53, 55,
839: 12, 49, 40, 21, 53, 54, 14, 15, 16, 30,
840: 39, 41, 47, 51, 52, 49, 40, 21, 53, 55,
841: 36, 13, 21, 53, 49, 52, 52, 52, 37, 38,
842: 21, 17, 49, 21, 42, 52, 52, 47, 21
843: };
844:
845: #define yyerrok (yyerrstatus = 0)
846: #define yyclearin (yychar = YYEMPTY)
847: #define YYEMPTY (-2)
848: #define YYEOF 0
849:
850: #define YYACCEPT goto yyacceptlab
851: #define YYABORT goto yyabortlab
852: #define YYERROR goto yyerrorlab
853:
854:
855: /* Like YYERROR except do call yyerror. This remains here temporarily
856: to ease the transition to the new meaning of YYERROR, for GCC.
857: Once GCC version 2 has supplanted version 1, this can go. */
858:
859: #define YYFAIL goto yyerrlab
860:
861: #define YYRECOVERING() (!!yyerrstatus)
862:
863: #define YYBACKUP(Token, Value) \
864: do \
865: if (yychar == YYEMPTY && yylen == 1) \
866: { \
867: yychar = (Token); \
868: yylval = (Value); \
869: yytoken = YYTRANSLATE (yychar); \
870: YYPOPSTACK (1); \
871: goto yybackup; \
872: } \
873: else \
874: { \
875: yyerror (YY_("syntax error: cannot back up")); \
876: YYERROR; \
877: } \
878: while (YYID (0))
879:
880:
881: #define YYTERROR 1
882: #define YYERRCODE 256
883:
884:
885: /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
886: If N is 0, then set CURRENT to the empty location which ends
887: the previous symbol: RHS[0] (always defined). */
888:
889: #define YYRHSLOC(Rhs, K) ((Rhs)[K])
890: #ifndef YYLLOC_DEFAULT
891: # define YYLLOC_DEFAULT(Current, Rhs, N) \
892: do \
893: if (YYID (N)) \
894: { \
895: (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
896: (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
897: (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
898: (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
899: } \
900: else \
901: { \
902: (Current).first_line = (Current).last_line = \
903: YYRHSLOC (Rhs, 0).last_line; \
904: (Current).first_column = (Current).last_column = \
905: YYRHSLOC (Rhs, 0).last_column; \
906: } \
907: while (YYID (0))
908: #endif
909:
910:
911: /* YY_LOCATION_PRINT -- Print the location on the stream.
912: This macro was not mandated originally: define only if we know
913: we won't break user code: when these are the locations we know. */
914:
915: #ifndef YY_LOCATION_PRINT
916: # if YYLTYPE_IS_TRIVIAL
917: # define YY_LOCATION_PRINT(File, Loc) \
918: fprintf (File, "%d.%d-%d.%d", \
919: (Loc).first_line, (Loc).first_column, \
920: (Loc).last_line, (Loc).last_column)
921: # else
922: # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
923: # endif
924: #endif
925:
926:
927: /* YYLEX -- calling `yylex' with the right arguments. */
928:
929: #ifdef YYLEX_PARAM
930: # define YYLEX yylex (&yylval, YYLEX_PARAM)
931: #else
932: # define YYLEX yylex (&yylval)
933: #endif
934:
935: /* Enable debugging if requested. */
936: #if YYDEBUG
937:
938: # ifndef YYFPRINTF
939: # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
940: # define YYFPRINTF fprintf
941: # endif
942:
943: # define YYDPRINTF(Args) \
944: do { \
945: if (yydebug) \
946: YYFPRINTF Args; \
947: } while (YYID (0))
948:
949: # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
950: do { \
951: if (yydebug) \
952: { \
953: YYFPRINTF (stderr, "%s ", Title); \
954: yy_symbol_print (stderr, \
955: Type, Value); \
956: YYFPRINTF (stderr, "\n"); \
957: } \
958: } while (YYID (0))
959:
960:
961: /*--------------------------------.
962: | Print this symbol on YYOUTPUT. |
963: `--------------------------------*/
964:
965: /*ARGSUSED*/
966: #if (defined __STDC__ || defined __C99__FUNC__ \
967: || defined __cplusplus || defined _MSC_VER)
968: static void
969: yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
970: #else
971: static void
972: yy_symbol_value_print (yyoutput, yytype, yyvaluep)
973: FILE *yyoutput;
974: int yytype;
975: YYSTYPE const * const yyvaluep;
976: #endif
977: {
978: if (!yyvaluep)
979: return;
980: # ifdef YYPRINT
981: if (yytype < YYNTOKENS)
982: YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
983: # else
984: YYUSE (yyoutput);
985: # endif
986: switch (yytype)
987: {
988: default:
989: break;
990: }
991: }
992:
993:
994: /*--------------------------------.
995: | Print this symbol on YYOUTPUT. |
996: `--------------------------------*/
997:
998: #if (defined __STDC__ || defined __C99__FUNC__ \
999: || defined __cplusplus || defined _MSC_VER)
1000: static void
1001: yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
1002: #else
1003: static void
1004: yy_symbol_print (yyoutput, yytype, yyvaluep)
1005: FILE *yyoutput;
1006: int yytype;
1007: YYSTYPE const * const yyvaluep;
1008: #endif
1009: {
1010: if (yytype < YYNTOKENS)
1011: YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
1012: else
1013: YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
1014:
1015: yy_symbol_value_print (yyoutput, yytype, yyvaluep);
1016: YYFPRINTF (yyoutput, ")");
1017: }
1018:
1019: /*------------------------------------------------------------------.
1020: | yy_stack_print -- Print the state stack from its BOTTOM up to its |
1021: | TOP (included). |
1022: `------------------------------------------------------------------*/
1023:
1024: #if (defined __STDC__ || defined __C99__FUNC__ \
1025: || defined __cplusplus || defined _MSC_VER)
1026: static void
1027: yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
1028: #else
1029: static void
1030: yy_stack_print (yybottom, yytop)
1031: yytype_int16 *yybottom;
1032: yytype_int16 *yytop;
1033: #endif
1034: {
1035: YYFPRINTF (stderr, "Stack now");
1036: for (; yybottom <= yytop; yybottom++)
1037: {
1038: int yybot = *yybottom;
1039: YYFPRINTF (stderr, " %d", yybot);
1040: }
1041: YYFPRINTF (stderr, "\n");
1042: }
1043:
1044: # define YY_STACK_PRINT(Bottom, Top) \
1045: do { \
1046: if (yydebug) \
1047: yy_stack_print ((Bottom), (Top)); \
1048: } while (YYID (0))
1049:
1050:
1051: /*------------------------------------------------.
1052: | Report that the YYRULE is going to be reduced. |
1053: `------------------------------------------------*/
1054:
1055: #if (defined __STDC__ || defined __C99__FUNC__ \
1056: || defined __cplusplus || defined _MSC_VER)
1057: static void
1058: yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
1059: #else
1060: static void
1061: yy_reduce_print (yyvsp, yyrule)
1062: YYSTYPE *yyvsp;
1063: int yyrule;
1064: #endif
1065: {
1066: int yynrhs = yyr2[yyrule];
1067: int yyi;
1068: unsigned long int yylno = yyrline[yyrule];
1069: YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
1070: yyrule - 1, yylno);
1071: /* The symbols being reduced. */
1072: for (yyi = 0; yyi < yynrhs; yyi++)
1073: {
1074: YYFPRINTF (stderr, " $%d = ", yyi + 1);
1075: yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
1076: &(yyvsp[(yyi + 1) - (yynrhs)])
1077: );
1078: YYFPRINTF (stderr, "\n");
1079: }
1080: }
1081:
1082: # define YY_REDUCE_PRINT(Rule) \
1083: do { \
1084: if (yydebug) \
1085: yy_reduce_print (yyvsp, Rule); \
1086: } while (YYID (0))
1087:
1088: /* Nonzero means print parse trace. It is left uninitialized so that
1089: multiple parsers can coexist. */
1090: int yydebug;
1091: #else /* !YYDEBUG */
1092: # define YYDPRINTF(Args)
1093: # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
1094: # define YY_STACK_PRINT(Bottom, Top)
1095: # define YY_REDUCE_PRINT(Rule)
1096: #endif /* !YYDEBUG */
1097:
1098:
1099: /* YYINITDEPTH -- initial size of the parser's stacks. */
1100: #ifndef YYINITDEPTH
1101: # define YYINITDEPTH 200
1102: #endif
1103:
1104: /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1105: if the built-in stack extension method is used).
1106:
1107: Do not make this value too large; the results are undefined if
1108: YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
1109: evaluated with infinite-precision integer arithmetic. */
1110:
1111: #ifndef YYMAXDEPTH
1112: # define YYMAXDEPTH 10000
1113: #endif
1114:
1115:
1116:
1117: #if YYERROR_VERBOSE
1118:
1119: # ifndef yystrlen
1120: # if defined __GLIBC__ && defined _STRING_H
1121: # define yystrlen strlen
1122: # else
1123: /* Return the length of YYSTR. */
1124: #if (defined __STDC__ || defined __C99__FUNC__ \
1125: || defined __cplusplus || defined _MSC_VER)
1126: static YYSIZE_T
1127: yystrlen (const char *yystr)
1128: #else
1129: static YYSIZE_T
1130: yystrlen (yystr)
1131: const char *yystr;
1132: #endif
1133: {
1134: YYSIZE_T yylen;
1135: for (yylen = 0; yystr[yylen]; yylen++)
1136: continue;
1137: return yylen;
1138: }
1139: # endif
1140: # endif
1141:
1142: # ifndef yystpcpy
1143: # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
1144: # define yystpcpy stpcpy
1145: # else
1146: /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1147: YYDEST. */
1148: #if (defined __STDC__ || defined __C99__FUNC__ \
1149: || defined __cplusplus || defined _MSC_VER)
1150: static char *
1151: yystpcpy (char *yydest, const char *yysrc)
1152: #else
1153: static char *
1154: yystpcpy (yydest, yysrc)
1155: char *yydest;
1156: const char *yysrc;
1157: #endif
1158: {
1159: char *yyd = yydest;
1160: const char *yys = yysrc;
1161:
1162: while ((*yyd++ = *yys++) != '\0')
1163: continue;
1164:
1165: return yyd - 1;
1166: }
1167: # endif
1168: # endif
1169:
1170: # ifndef yytnamerr
1171: /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
1172: quotes and backslashes, so that it's suitable for yyerror. The
1173: heuristic is that double-quoting is unnecessary unless the string
1174: contains an apostrophe, a comma, or backslash (other than
1175: backslash-backslash). YYSTR is taken from yytname. If YYRES is
1176: null, do not copy; instead, return the length of what the result
1177: would have been. */
1178: static YYSIZE_T
1179: yytnamerr (char *yyres, const char *yystr)
1180: {
1181: if (*yystr == '"')
1182: {
1183: YYSIZE_T yyn = 0;
1184: char const *yyp = yystr;
1185:
1186: for (;;)
1187: switch (*++yyp)
1188: {
1189: case '\'':
1190: case ',':
1191: goto do_not_strip_quotes;
1192:
1193: case '\\':
1194: if (*++yyp != '\\')
1195: goto do_not_strip_quotes;
1196: /* Fall through. */
1197: default:
1198: if (yyres)
1199: yyres[yyn] = *yyp;
1200: yyn++;
1201: break;
1202:
1203: case '"':
1204: if (yyres)
1205: yyres[yyn] = '\0';
1206: return yyn;
1207: }
1208: do_not_strip_quotes: ;
1209: }
1210:
1211: if (! yyres)
1212: return yystrlen (yystr);
1213:
1214: return yystpcpy (yyres, yystr) - yyres;
1215: }
1216: # endif
1217:
1218: /* Copy into YYRESULT an error message about the unexpected token
1219: YYCHAR while in state YYSTATE. Return the number of bytes copied,
1220: including the terminating null byte. If YYRESULT is null, do not
1221: copy anything; just return the number of bytes that would be
1222: copied. As a special case, return 0 if an ordinary "syntax error"
1223: message will do. Return YYSIZE_MAXIMUM if overflow occurs during
1224: size calculation. */
1225: static YYSIZE_T
1226: yysyntax_error (char *yyresult, int yystate, int yychar)
1227: {
1228: int yyn = yypact[yystate];
1229:
1230: if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
1231: return 0;
1232: else
1233: {
1234: int yytype = YYTRANSLATE (yychar);
1235: YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
1236: YYSIZE_T yysize = yysize0;
1237: YYSIZE_T yysize1;
1238: int yysize_overflow = 0;
1239: enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1240: char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1241: int yyx;
1242:
1243: # if 0
1244: /* This is so xgettext sees the translatable formats that are
1245: constructed on the fly. */
1246: YY_("syntax error, unexpected %s");
1247: YY_("syntax error, unexpected %s, expecting %s");
1248: YY_("syntax error, unexpected %s, expecting %s or %s");
1249: YY_("syntax error, unexpected %s, expecting %s or %s or %s");
1250: YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
1251: # endif
1252: char *yyfmt;
1253: char const *yyf;
1254: static char const yyunexpected[] = "syntax error, unexpected %s";
1255: static char const yyexpecting[] = ", expecting %s";
1256: static char const yyor[] = " or %s";
1257: char yyformat[sizeof yyunexpected
1258: + sizeof yyexpecting - 1
1259: + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
1260: * (sizeof yyor - 1))];
1261: char const *yyprefix = yyexpecting;
1262:
1263: /* Start YYX at -YYN if negative to avoid negative indexes in
1264: YYCHECK. */
1265: int yyxbegin = yyn < 0 ? -yyn : 0;
1266:
1267: /* Stay within bounds of both yycheck and yytname. */
1268: int yychecklim = YYLAST - yyn + 1;
1269: int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1270: int yycount = 1;
1271:
1272: yyarg[0] = yytname[yytype];
1273: yyfmt = yystpcpy (yyformat, yyunexpected);
1274:
1275: for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1276: if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1277: {
1278: if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1279: {
1280: yycount = 1;
1281: yysize = yysize0;
1282: yyformat[sizeof yyunexpected - 1] = '\0';
1283: break;
1284: }
1285: yyarg[yycount++] = yytname[yyx];
1286: yysize1 = yysize + yytnamerr (0, yytname[yyx]);
1287: yysize_overflow |= (yysize1 < yysize);
1288: yysize = yysize1;
1289: yyfmt = yystpcpy (yyfmt, yyprefix);
1290: yyprefix = yyor;
1291: }
1292:
1293: yyf = YY_(yyformat);
1294: yysize1 = yysize + yystrlen (yyf);
1295: yysize_overflow |= (yysize1 < yysize);
1296: yysize = yysize1;
1297:
1298: if (yysize_overflow)
1299: return YYSIZE_MAXIMUM;
1300:
1301: if (yyresult)
1302: {
1303: /* Avoid sprintf, as that infringes on the user's name space.
1304: Don't have undefined behavior even if the translation
1305: produced a string with the wrong number of "%s"s. */
1306: char *yyp = yyresult;
1307: int yyi = 0;
1308: while ((*yyp = *yyf) != '\0')
1309: {
1310: if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
1311: {
1312: yyp += yytnamerr (yyp, yyarg[yyi++]);
1313: yyf += 2;
1314: }
1315: else
1316: {
1317: yyp++;
1318: yyf++;
1319: }
1320: }
1321: }
1322: return yysize;
1323: }
1324: }
1325: #endif /* YYERROR_VERBOSE */
1326:
1327:
1328: /*-----------------------------------------------.
1329: | Release the memory associated to this symbol. |
1330: `-----------------------------------------------*/
1331:
1332: /*ARGSUSED*/
1333: #if (defined __STDC__ || defined __C99__FUNC__ \
1334: || defined __cplusplus || defined _MSC_VER)
1335: static void
1336: yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
1337: #else
1338: static void
1339: yydestruct (yymsg, yytype, yyvaluep)
1340: const char *yymsg;
1341: int yytype;
1342: YYSTYPE *yyvaluep;
1343: #endif
1344: {
1345: YYUSE (yyvaluep);
1346:
1347: if (!yymsg)
1348: yymsg = "Deleting";
1349: YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1350:
1351: switch (yytype)
1352: {
1353:
1354: default:
1355: break;
1356: }
1357: }
1358:
1359: /* Prevent warnings from -Wmissing-prototypes. */
1360: #ifdef YYPARSE_PARAM
1361: #if defined __STDC__ || defined __cplusplus
1362: int yyparse (void *YYPARSE_PARAM);
1363: #else
1364: int yyparse ();
1365: #endif
1366: #else /* ! YYPARSE_PARAM */
1367: #if defined __STDC__ || defined __cplusplus
1368: int yyparse (void);
1369: #else
1370: int yyparse ();
1371: #endif
1372: #endif /* ! YYPARSE_PARAM */
1373:
1374:
1375:
1376:
1377:
1378: /*-------------------------.
1379: | yyparse or yypush_parse. |
1380: `-------------------------*/
1381:
1382: #ifdef YYPARSE_PARAM
1383: #if (defined __STDC__ || defined __C99__FUNC__ \
1384: || defined __cplusplus || defined _MSC_VER)
1385: int
1386: yyparse (void *YYPARSE_PARAM)
1387: #else
1388: int
1389: yyparse (YYPARSE_PARAM)
1390: void *YYPARSE_PARAM;
1391: #endif
1392: #else /* ! YYPARSE_PARAM */
1393: #if (defined __STDC__ || defined __C99__FUNC__ \
1394: || defined __cplusplus || defined _MSC_VER)
1395: int
1396: yyparse (void)
1397: #else
1398: int
1399: yyparse ()
1400:
1401: #endif
1402: #endif
1403: {
1404: /* The lookahead symbol. */
1405: int yychar;
1406:
1407: /* The semantic value of the lookahead symbol. */
1408: YYSTYPE yylval;
1409:
1410: /* Number of syntax errors so far. */
1411: int yynerrs;
1412:
1413: int yystate;
1414: /* Number of tokens to shift before error messages enabled. */
1415: int yyerrstatus;
1416:
1417: /* The stacks and their tools:
1418: `yyss': related to states.
1419: `yyvs': related to semantic values.
1420:
1421: Refer to the stacks thru separate pointers, to allow yyoverflow
1422: to reallocate them elsewhere. */
1423:
1424: /* The state stack. */
1425: yytype_int16 yyssa[YYINITDEPTH];
1426: yytype_int16 *yyss;
1427: yytype_int16 *yyssp;
1428:
1429: /* The semantic value stack. */
1430: YYSTYPE yyvsa[YYINITDEPTH];
1431: YYSTYPE *yyvs;
1432: YYSTYPE *yyvsp;
1433:
1434: YYSIZE_T yystacksize;
1435:
1436: int yyn;
1437: int yyresult;
1438: /* Lookahead token as an internal (translated) token number. */
1439: int yytoken;
1440: /* The variables used to return semantic value and location from the
1441: action routines. */
1442: YYSTYPE yyval;
1443:
1444: #if YYERROR_VERBOSE
1445: /* Buffer for error messages, and its allocated size. */
1446: char yymsgbuf[128];
1447: char *yymsg = yymsgbuf;
1448: YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
1449: #endif
1450:
1451: #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
1452:
1453: /* The number of symbols on the RHS of the reduced rule.
1454: Keep to zero when no symbol should be popped. */
1455: int yylen = 0;
1456:
1457: yytoken = 0;
1458: yyss = yyssa;
1459: yyvs = yyvsa;
1460: yystacksize = YYINITDEPTH;
1461:
1462: YYDPRINTF ((stderr, "Starting parse\n"));
1463:
1464: yystate = 0;
1465: yyerrstatus = 0;
1466: yynerrs = 0;
1467: yychar = YYEMPTY; /* Cause a token to be read. */
1468:
1469: /* Initialize stack pointers.
1470: Waste one element of value and location stack
1471: so that they stay on the same level as the state stack.
1472: The wasted elements are never initialized. */
1473: yyssp = yyss;
1474: yyvsp = yyvs;
1475:
1476: goto yysetstate;
1477:
1478: /*------------------------------------------------------------.
1479: | yynewstate -- Push a new state, which is found in yystate. |
1480: `------------------------------------------------------------*/
1481: yynewstate:
1482: /* In all cases, when you get here, the value and location stacks
1483: have just been pushed. So pushing a state here evens the stacks. */
1484: yyssp++;
1485:
1486: yysetstate:
1487: *yyssp = yystate;
1488:
1489: if (yyss + yystacksize - 1 <= yyssp)
1490: {
1491: /* Get the current used size of the three stacks, in elements. */
1492: YYSIZE_T yysize = yyssp - yyss + 1;
1493:
1494: #ifdef yyoverflow
1495: {
1496: /* Give user a chance to reallocate the stack. Use copies of
1497: these so that the &'s don't force the real ones into
1498: memory. */
1499: YYSTYPE *yyvs1 = yyvs;
1500: yytype_int16 *yyss1 = yyss;
1501:
1502: /* Each stack pointer address is followed by the size of the
1503: data in use in that stack, in bytes. This used to be a
1504: conditional around just the two extra args, but that might
1505: be undefined if yyoverflow is a macro. */
1506: yyoverflow (YY_("memory exhausted"),
1507: &yyss1, yysize * sizeof (*yyssp),
1508: &yyvs1, yysize * sizeof (*yyvsp),
1509: &yystacksize);
1510:
1511: yyss = yyss1;
1512: yyvs = yyvs1;
1513: }
1514: #else /* no yyoverflow */
1515: # ifndef YYSTACK_RELOCATE
1516: goto yyexhaustedlab;
1517: # else
1518: /* Extend the stack our own way. */
1519: if (YYMAXDEPTH <= yystacksize)
1520: goto yyexhaustedlab;
1521: yystacksize *= 2;
1522: if (YYMAXDEPTH < yystacksize)
1523: yystacksize = YYMAXDEPTH;
1524:
1525: {
1526: yytype_int16 *yyss1 = yyss;
1527: union yyalloc *yyptr =
1528: (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1529: if (! yyptr)
1530: goto yyexhaustedlab;
1531: YYSTACK_RELOCATE (yyss_alloc, yyss);
1532: YYSTACK_RELOCATE (yyvs_alloc, yyvs);
1533: # undef YYSTACK_RELOCATE
1534: if (yyss1 != yyssa)
1535: YYSTACK_FREE (yyss1);
1536: }
1537: # endif
1538: #endif /* no yyoverflow */
1539:
1540: yyssp = yyss + yysize - 1;
1541: yyvsp = yyvs + yysize - 1;
1542:
1543: YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1544: (unsigned long int) yystacksize));
1545:
1546: if (yyss + yystacksize - 1 <= yyssp)
1547: YYABORT;
1548: }
1549:
1550: YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1551:
1552: if (yystate == YYFINAL)
1553: YYACCEPT;
1554:
1555: goto yybackup;
1556:
1557: /*-----------.
1558: | yybackup. |
1559: `-----------*/
1560: yybackup:
1561:
1562: /* Do appropriate processing given the current state. Read a
1563: lookahead token if we need one and don't already have one. */
1564:
1565: /* First try to decide what to do without reference to lookahead token. */
1566: yyn = yypact[yystate];
1567: if (yyn == YYPACT_NINF)
1568: goto yydefault;
1569:
1570: /* Not known => get a lookahead token if don't already have one. */
1571:
1572: /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
1573: if (yychar == YYEMPTY)
1574: {
1575: YYDPRINTF ((stderr, "Reading a token: "));
1576: yychar = YYLEX;
1577: }
1578:
1579: if (yychar <= YYEOF)
1580: {
1581: yychar = yytoken = YYEOF;
1582: YYDPRINTF ((stderr, "Now at end of input.\n"));
1583: }
1584: else
1585: {
1586: yytoken = YYTRANSLATE (yychar);
1587: YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1588: }
1589:
1590: /* If the proper action on seeing token YYTOKEN is to reduce or to
1591: detect an error, take that action. */
1592: yyn += yytoken;
1593: if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1594: goto yydefault;
1595: yyn = yytable[yyn];
1596: if (yyn <= 0)
1597: {
1598: if (yyn == 0 || yyn == YYTABLE_NINF)
1599: goto yyerrlab;
1600: yyn = -yyn;
1601: goto yyreduce;
1602: }
1603:
1604: /* Count tokens shifted since error; after three, turn off error
1605: status. */
1606: if (yyerrstatus)
1607: yyerrstatus--;
1608:
1609: /* Shift the lookahead token. */
1610: YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1611:
1612: /* Discard the shifted token. */
1613: yychar = YYEMPTY;
1614:
1615: yystate = yyn;
1616: *++yyvsp = yylval;
1617:
1618: goto yynewstate;
1619:
1620:
1621: /*-----------------------------------------------------------.
1622: | yydefault -- do the default action for the current state. |
1623: `-----------------------------------------------------------*/
1624: yydefault:
1625: yyn = yydefact[yystate];
1626: if (yyn == 0)
1627: goto yyerrlab;
1628: goto yyreduce;
1629:
1630:
1631: /*-----------------------------.
1632: | yyreduce -- Do a reduction. |
1633: `-----------------------------*/
1634: yyreduce:
1635: /* yyn is the number of a rule to reduce with. */
1636: yylen = yyr2[yyn];
1637:
1638: /* If YYLEN is nonzero, implement the default value of the action:
1639: `$$ = $1'.
1640:
1641: Otherwise, the following line sets YYVAL to garbage.
1642: This behavior is undocumented and Bison
1643: users should not rely upon it. Assigning to YYVAL
1644: unconditionally makes the parser a bit smaller, and it avoids a
1645: GCC warning that YYVAL may be used uninitialized. */
1646: yyval = yyvsp[1-yylen];
1647:
1648:
1649: YY_REDUCE_PRINT (yyn);
1650: switch (yyn)
1651: {
1652: case 4:
1653:
1654: {
1655: #if DEBUG_CFG_PARSER
1656: printf("SECTION: [%s]\n", Z_STRVAL((yyvsp[(2) - (3)])));
1657: #endif
1658: ZEND_INI_PARSER_CB(&(yyvsp[(2) - (3)]), NULL, NULL, ZEND_INI_PARSER_SECTION, ZEND_INI_PARSER_ARG TSRMLS_CC);
1659: free(Z_STRVAL((yyvsp[(2) - (3)])));
1660: }
1661: break;
1662:
1663: case 5:
1664:
1665: {
1666: #if DEBUG_CFG_PARSER
1667: printf("NORMAL: '%s' = '%s'\n", Z_STRVAL((yyvsp[(1) - (3)])), Z_STRVAL((yyvsp[(3) - (3)])));
1668: #endif
1669: ZEND_INI_PARSER_CB(&(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)]), NULL, ZEND_INI_PARSER_ENTRY, ZEND_INI_PARSER_ARG TSRMLS_CC);
1670: free(Z_STRVAL((yyvsp[(1) - (3)])));
1671: free(Z_STRVAL((yyvsp[(3) - (3)])));
1672: }
1673: break;
1674:
1675: case 6:
1676:
1677: {
1678: #if DEBUG_CFG_PARSER
1679: printf("OFFSET: '%s'[%s] = '%s'\n", Z_STRVAL((yyvsp[(1) - (5)])), Z_STRVAL((yyvsp[(2) - (5)])), Z_STRVAL((yyvsp[(5) - (5)])));
1680: #endif
1681: ZEND_INI_PARSER_CB(&(yyvsp[(1) - (5)]), &(yyvsp[(5) - (5)]), &(yyvsp[(2) - (5)]), ZEND_INI_PARSER_POP_ENTRY, ZEND_INI_PARSER_ARG TSRMLS_CC);
1682: free(Z_STRVAL((yyvsp[(1) - (5)])));
1683: free(Z_STRVAL((yyvsp[(2) - (5)])));
1684: free(Z_STRVAL((yyvsp[(5) - (5)])));
1685: }
1686: break;
1687:
1688: case 7:
1689:
1690: { ZEND_INI_PARSER_CB(&(yyvsp[(1) - (1)]), NULL, NULL, ZEND_INI_PARSER_ENTRY, ZEND_INI_PARSER_ARG TSRMLS_CC); free(Z_STRVAL((yyvsp[(1) - (1)]))); }
1691: break;
1692:
1693: case 9:
1694:
1695: { (yyval) = (yyvsp[(1) - (1)]); }
1696: break;
1697:
1698: case 10:
1699:
1700: { zend_ini_init_string(&(yyval)); }
1701: break;
1702:
1703: case 11:
1704:
1705: { (yyval) = (yyvsp[(1) - (1)]); }
1706: break;
1707:
1708: case 12:
1709:
1710: { (yyval) = (yyvsp[(1) - (1)]); }
1711: break;
1712:
1713: case 13:
1714:
1715: { (yyval) = (yyvsp[(1) - (1)]); }
1716: break;
1717:
1718: case 14:
1719:
1720: { zend_ini_init_string(&(yyval)); }
1721: break;
1722:
1723: case 15:
1724:
1725: { (yyval) = (yyvsp[(1) - (1)]); }
1726: break;
1727:
1728: case 16:
1729:
1730: { zend_ini_init_string(&(yyval)); }
1731: break;
1732:
1733: case 17:
1734:
1735: { zend_ini_add_string(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)])); free(Z_STRVAL((yyvsp[(2) - (2)]))); }
1736: break;
1737:
1738: case 18:
1739:
1740: { zend_ini_add_string(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)])); free(Z_STRVAL((yyvsp[(2) - (2)]))); }
1741: break;
1742:
1743: case 19:
1744:
1745: { zend_ini_init_string(&(yyval)); }
1746: break;
1747:
1748: case 20:
1749:
1750: { (yyval) = (yyvsp[(1) - (1)]); }
1751: break;
1752:
1753: case 21:
1754:
1755: { (yyval) = (yyvsp[(1) - (1)]); }
1756: break;
1757:
1758: case 22:
1759:
1760: { (yyval) = (yyvsp[(2) - (3)]); }
1761: break;
1762:
1763: case 23:
1764:
1765: { zend_ini_add_string(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)])); free(Z_STRVAL((yyvsp[(2) - (2)]))); }
1766: break;
1767:
1768: case 24:
1769:
1770: { zend_ini_add_string(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)])); free(Z_STRVAL((yyvsp[(2) - (2)]))); }
1771: break;
1772:
1773: case 25:
1774:
1775: { zend_ini_add_string(&(yyval), &(yyvsp[(1) - (4)]), &(yyvsp[(3) - (4)])); free(Z_STRVAL((yyvsp[(3) - (4)]))); }
1776: break;
1777:
1778: case 26:
1779:
1780: { (yyval) = (yyvsp[(1) - (1)]); }
1781: break;
1782:
1783: case 27:
1784:
1785: { (yyval) = (yyvsp[(1) - (1)]); }
1786: break;
1787:
1788: case 28:
1789:
1790: { (yyval) = (yyvsp[(2) - (3)]); }
1791: break;
1792:
1793: case 29:
1794:
1795: { zend_ini_add_string(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)])); free(Z_STRVAL((yyvsp[(2) - (2)]))); }
1796: break;
1797:
1798: case 30:
1799:
1800: { zend_ini_add_string(&(yyval), &(yyvsp[(1) - (2)]), &(yyvsp[(2) - (2)])); free(Z_STRVAL((yyvsp[(2) - (2)]))); }
1801: break;
1802:
1803: case 31:
1804:
1805: { zend_ini_add_string(&(yyval), &(yyvsp[(1) - (4)]), &(yyvsp[(3) - (4)])); free(Z_STRVAL((yyvsp[(3) - (4)]))); }
1806: break;
1807:
1808: case 32:
1809:
1810: { (yyval) = (yyvsp[(1) - (1)]); }
1811: break;
1812:
1813: case 33:
1814:
1815: { zend_ini_do_op('|', &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)])); }
1816: break;
1817:
1818: case 34:
1819:
1820: { zend_ini_do_op('&', &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)])); }
1821: break;
1822:
1823: case 35:
1824:
1825: { zend_ini_do_op('~', &(yyval), &(yyvsp[(2) - (2)]), NULL); }
1826: break;
1827:
1828: case 36:
1829:
1830: { zend_ini_do_op('!', &(yyval), &(yyvsp[(2) - (2)]), NULL); }
1831: break;
1832:
1833: case 37:
1834:
1835: { (yyval) = (yyvsp[(2) - (3)]); }
1836: break;
1837:
1838: case 38:
1839:
1840: { zend_ini_get_var(&(yyval), &(yyvsp[(2) - (3)]) TSRMLS_CC); free(Z_STRVAL((yyvsp[(2) - (3)]))); }
1841: break;
1842:
1843: case 39:
1844:
1845: { (yyval) = (yyvsp[(1) - (1)]); }
1846: break;
1847:
1848: case 40:
1849:
1850: { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_RAW: '%s'\n", Z_STRVAL($1));*/ }
1851: break;
1852:
1853: case 41:
1854:
1855: { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_NUMBER: '%s'\n", Z_STRVAL($1));*/ }
1856: break;
1857:
1858: case 42:
1859:
1860: { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_STRING: '%s'\n", Z_STRVAL($1));*/ }
1861: break;
1862:
1863: case 43:
1864:
1865: { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_WHITESPACE: '%s'\n", Z_STRVAL($1));*/ }
1866: break;
1867:
1868: case 44:
1869:
1870: { zend_ini_get_constant(&(yyval), &(yyvsp[(1) - (1)]) TSRMLS_CC); }
1871: break;
1872:
1873: case 45:
1874:
1875: { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_RAW: '%s'\n", Z_STRVAL($1));*/ }
1876: break;
1877:
1878: case 46:
1879:
1880: { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_NUMBER: '%s'\n", Z_STRVAL($1));*/ }
1881: break;
1882:
1883: case 47:
1884:
1885: { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_STRING: '%s'\n", Z_STRVAL($1));*/ }
1886: break;
1887:
1888: case 48:
1889:
1890: { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_WHITESPACE: '%s'\n", Z_STRVAL($1));*/ }
1891: break;
1892:
1893:
1894:
1895: default: break;
1896: }
1897: YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
1898:
1899: YYPOPSTACK (yylen);
1900: yylen = 0;
1901: YY_STACK_PRINT (yyss, yyssp);
1902:
1903: *++yyvsp = yyval;
1904:
1905: /* Now `shift' the result of the reduction. Determine what state
1906: that goes to, based on the state we popped back to and the rule
1907: number reduced by. */
1908:
1909: yyn = yyr1[yyn];
1910:
1911: yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
1912: if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1913: yystate = yytable[yystate];
1914: else
1915: yystate = yydefgoto[yyn - YYNTOKENS];
1916:
1917: goto yynewstate;
1918:
1919:
1920: /*------------------------------------.
1921: | yyerrlab -- here on detecting error |
1922: `------------------------------------*/
1923: yyerrlab:
1924: /* If not already recovering from an error, report this error. */
1925: if (!yyerrstatus)
1926: {
1927: ++yynerrs;
1928: #if ! YYERROR_VERBOSE
1929: yyerror (YY_("syntax error"));
1930: #else
1931: {
1932: YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
1933: if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
1934: {
1935: YYSIZE_T yyalloc = 2 * yysize;
1936: if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
1937: yyalloc = YYSTACK_ALLOC_MAXIMUM;
1938: if (yymsg != yymsgbuf)
1939: YYSTACK_FREE (yymsg);
1940: yymsg = (char *) YYSTACK_ALLOC (yyalloc);
1941: if (yymsg)
1942: yymsg_alloc = yyalloc;
1943: else
1944: {
1945: yymsg = yymsgbuf;
1946: yymsg_alloc = sizeof yymsgbuf;
1947: }
1948: }
1949:
1950: if (0 < yysize && yysize <= yymsg_alloc)
1951: {
1952: (void) yysyntax_error (yymsg, yystate, yychar);
1953: yyerror (yymsg);
1954: }
1955: else
1956: {
1957: yyerror (YY_("syntax error"));
1958: if (yysize != 0)
1959: goto yyexhaustedlab;
1960: }
1961: }
1962: #endif
1963: }
1964:
1965:
1966:
1967: if (yyerrstatus == 3)
1968: {
1969: /* If just tried and failed to reuse lookahead token after an
1970: error, discard it. */
1971:
1972: if (yychar <= YYEOF)
1973: {
1974: /* Return failure if at end of input. */
1975: if (yychar == YYEOF)
1976: YYABORT;
1977: }
1978: else
1979: {
1980: yydestruct ("Error: discarding",
1981: yytoken, &yylval);
1982: yychar = YYEMPTY;
1983: }
1984: }
1985:
1986: /* Else will try to reuse lookahead token after shifting the error
1987: token. */
1988: goto yyerrlab1;
1989:
1990:
1991: /*---------------------------------------------------.
1992: | yyerrorlab -- error raised explicitly by YYERROR. |
1993: `---------------------------------------------------*/
1994: yyerrorlab:
1995:
1996: /* Pacify compilers like GCC when the user code never invokes
1997: YYERROR and the label yyerrorlab therefore never appears in user
1998: code. */
1999: if (/*CONSTCOND*/ 0)
2000: goto yyerrorlab;
2001:
2002: /* Do not reclaim the symbols of the rule which action triggered
2003: this YYERROR. */
2004: YYPOPSTACK (yylen);
2005: yylen = 0;
2006: YY_STACK_PRINT (yyss, yyssp);
2007: yystate = *yyssp;
2008: goto yyerrlab1;
2009:
2010:
2011: /*-------------------------------------------------------------.
2012: | yyerrlab1 -- common code for both syntax error and YYERROR. |
2013: `-------------------------------------------------------------*/
2014: yyerrlab1:
2015: yyerrstatus = 3; /* Each real token shifted decrements this. */
2016:
2017: for (;;)
2018: {
2019: yyn = yypact[yystate];
2020: if (yyn != YYPACT_NINF)
2021: {
2022: yyn += YYTERROR;
2023: if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
2024: {
2025: yyn = yytable[yyn];
2026: if (0 < yyn)
2027: break;
2028: }
2029: }
2030:
2031: /* Pop the current state because it cannot handle the error token. */
2032: if (yyssp == yyss)
2033: YYABORT;
2034:
2035:
2036: yydestruct ("Error: popping",
2037: yystos[yystate], yyvsp);
2038: YYPOPSTACK (1);
2039: yystate = *yyssp;
2040: YY_STACK_PRINT (yyss, yyssp);
2041: }
2042:
2043: *++yyvsp = yylval;
2044:
2045:
2046: /* Shift the error token. */
2047: YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
2048:
2049: yystate = yyn;
2050: goto yynewstate;
2051:
2052:
2053: /*-------------------------------------.
2054: | yyacceptlab -- YYACCEPT comes here. |
2055: `-------------------------------------*/
2056: yyacceptlab:
2057: yyresult = 0;
2058: goto yyreturn;
2059:
2060: /*-----------------------------------.
2061: | yyabortlab -- YYABORT comes here. |
2062: `-----------------------------------*/
2063: yyabortlab:
2064: yyresult = 1;
2065: goto yyreturn;
2066:
2067: #if !defined(yyoverflow) || YYERROR_VERBOSE
2068: /*-------------------------------------------------.
2069: | yyexhaustedlab -- memory exhaustion comes here. |
2070: `-------------------------------------------------*/
2071: yyexhaustedlab:
2072: yyerror (YY_("memory exhausted"));
2073: yyresult = 2;
2074: /* Fall through. */
2075: #endif
2076:
2077: yyreturn:
2078: if (yychar != YYEMPTY)
2079: yydestruct ("Cleanup: discarding lookahead",
2080: yytoken, &yylval);
2081: /* Do not reclaim the symbols of the rule which action triggered
2082: this YYABORT or YYACCEPT. */
2083: YYPOPSTACK (yylen);
2084: YY_STACK_PRINT (yyss, yyssp);
2085: while (yyssp != yyss)
2086: {
2087: yydestruct ("Cleanup: popping",
2088: yystos[*yyssp], yyvsp);
2089: YYPOPSTACK (1);
2090: }
2091: #ifndef yyoverflow
2092: if (yyss != yyssa)
2093: YYSTACK_FREE (yyss);
2094: #endif
2095: #if YYERROR_VERBOSE
2096: if (yymsg != yymsgbuf)
2097: YYSTACK_FREE (yymsg);
2098: #endif
2099: /* Make sure YYID is used. */
2100: return YYID (yyresult);
2101: }
2102:
2103:
2104:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>