File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / Zend / zend_ini_parser.c
Revision 1.1.1.4 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Oct 14 08:02:48 2013 UTC (10 years, 8 months ago) by misho
Branches: php, MAIN
CVS tags: v5_4_29p0, v5_4_20p0, v5_4_20, HEAD
v 5.4.20

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>