Annotation of embedaddon/strongswan/src/starter/parser/parser.c, revision 1.1
1.1 ! misho 1: /* A Bison parser, made by GNU Bison 3.0.4. */
! 2:
! 3: /* Bison implementation for Yacc-like parsers in C
! 4:
! 5: Copyright (C) 1984, 1989-1990, 2000-2015 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 "3.0.4"
! 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 conf_parser_parse
! 64: #define yylex conf_parser_lex
! 65: #define yyerror conf_parser_error
! 66: #define yydebug conf_parser_debug
! 67: #define yynerrs conf_parser_nerrs
! 68:
! 69:
! 70: /* Copy the first part of user declarations. */
! 71: #line 1 "parser/parser.y" /* yacc.c:339 */
! 72:
! 73: /*
! 74: * Copyright (C) 2013-2014 Tobias Brunner
! 75: * HSR Hochschule fuer Technik Rapperswil
! 76: *
! 77: * This program is free software; you can redistribute it and/or modify it
! 78: * under the terms of the GNU General Public License as published by the
! 79: * Free Software Foundation; either version 2 of the License, or (at your
! 80: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
! 81: *
! 82: * This program is distributed in the hope that it will be useful, but
! 83: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 84: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! 85: * for more details.
! 86: */
! 87:
! 88: #define _GNU_SOURCE /* for asprintf() */
! 89: #include <stdio.h>
! 90:
! 91: #include <utils/parser_helper.h>
! 92: #include <settings/settings_types.h>
! 93: #include <parser/conf_parser.h>
! 94:
! 95: #include "parser.h"
! 96:
! 97: #define YYDEBUG 1
! 98:
! 99: /**
! 100: * Defined by the lexer
! 101: */
! 102: int conf_parser_lex(YYSTYPE *lvalp, void *scanner);
! 103: int conf_parser_lex_init_extra(parser_helper_t *extra, void *scanner);
! 104: int conf_parser_lex_destroy(void *scanner);
! 105: int conf_parser_set_in(FILE *in, void *scanner);
! 106: void conf_parser_set_debug(int debug, void *scanner);
! 107: char *conf_parser_get_text(void *scanner);
! 108: int conf_parser_get_leng(void *scanner);
! 109: int conf_parser_get_lineno(void *scanner);
! 110: /* Custom functions in lexer */
! 111: bool conf_parser_open_next_file(parser_helper_t *ctx);
! 112:
! 113: /**
! 114: * Forward declaration
! 115: */
! 116: static void conf_parser_error(parser_helper_t *ctx, const char *s);
! 117:
! 118: /**
! 119: * Make sure to call lexer with the proper context
! 120: */
! 121: #undef yylex
! 122: static int yylex(YYSTYPE *lvalp, parser_helper_t *ctx)
! 123: {
! 124: return conf_parser_lex(lvalp, ctx->scanner);
! 125: }
! 126:
! 127:
! 128: #line 129 "parser/parser.c" /* yacc.c:339 */
! 129:
! 130: # ifndef YY_NULLPTR
! 131: # if defined __cplusplus && 201103L <= __cplusplus
! 132: # define YY_NULLPTR nullptr
! 133: # else
! 134: # define YY_NULLPTR 0
! 135: # endif
! 136: # endif
! 137:
! 138: /* Enabling verbose error messages. */
! 139: #ifdef YYERROR_VERBOSE
! 140: # undef YYERROR_VERBOSE
! 141: # define YYERROR_VERBOSE 1
! 142: #else
! 143: # define YYERROR_VERBOSE 1
! 144: #endif
! 145:
! 146: /* In a future release of Bison, this section will be replaced
! 147: by #include "y.tab.h". */
! 148: #ifndef YY_CONF_PARSER_PARSER_PARSER_H_INCLUDED
! 149: # define YY_CONF_PARSER_PARSER_PARSER_H_INCLUDED
! 150: /* Debug traces. */
! 151: #ifndef YYDEBUG
! 152: # define YYDEBUG 1
! 153: #endif
! 154: #if YYDEBUG
! 155: extern int conf_parser_debug;
! 156: #endif
! 157:
! 158: /* Token type. */
! 159: #ifndef YYTOKENTYPE
! 160: # define YYTOKENTYPE
! 161: enum yytokentype
! 162: {
! 163: STRING = 258,
! 164: EQ = 259,
! 165: SPACES = 260,
! 166: NEWLINE = 261,
! 167: CONFIG_SETUP = 262,
! 168: CONN = 263,
! 169: CA = 264,
! 170: STRING_ERROR = 265
! 171: };
! 172: #endif
! 173: /* Tokens. */
! 174: #define STRING 258
! 175: #define EQ 259
! 176: #define SPACES 260
! 177: #define NEWLINE 261
! 178: #define CONFIG_SETUP 262
! 179: #define CONN 263
! 180: #define CA 264
! 181: #define STRING_ERROR 265
! 182:
! 183: /* Value type. */
! 184: #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
! 185:
! 186: union YYSTYPE
! 187: {
! 188: #line 71 "parser/parser.y" /* yacc.c:355 */
! 189:
! 190: char *s;
! 191: conf_parser_section_t t;
! 192:
! 193: #line 194 "parser/parser.c" /* yacc.c:355 */
! 194: };
! 195:
! 196: typedef union YYSTYPE YYSTYPE;
! 197: # define YYSTYPE_IS_TRIVIAL 1
! 198: # define YYSTYPE_IS_DECLARED 1
! 199: #endif
! 200:
! 201:
! 202:
! 203: int conf_parser_parse (parser_helper_t *ctx);
! 204:
! 205: #endif /* !YY_CONF_PARSER_PARSER_PARSER_H_INCLUDED */
! 206:
! 207: /* Copy the second part of user declarations. */
! 208:
! 209: #line 210 "parser/parser.c" /* yacc.c:358 */
! 210:
! 211: #ifdef short
! 212: # undef short
! 213: #endif
! 214:
! 215: #ifdef YYTYPE_UINT8
! 216: typedef YYTYPE_UINT8 yytype_uint8;
! 217: #else
! 218: typedef unsigned char yytype_uint8;
! 219: #endif
! 220:
! 221: #ifdef YYTYPE_INT8
! 222: typedef YYTYPE_INT8 yytype_int8;
! 223: #else
! 224: typedef signed char yytype_int8;
! 225: #endif
! 226:
! 227: #ifdef YYTYPE_UINT16
! 228: typedef YYTYPE_UINT16 yytype_uint16;
! 229: #else
! 230: typedef unsigned short int yytype_uint16;
! 231: #endif
! 232:
! 233: #ifdef YYTYPE_INT16
! 234: typedef YYTYPE_INT16 yytype_int16;
! 235: #else
! 236: typedef short int yytype_int16;
! 237: #endif
! 238:
! 239: #ifndef YYSIZE_T
! 240: # ifdef __SIZE_TYPE__
! 241: # define YYSIZE_T __SIZE_TYPE__
! 242: # elif defined size_t
! 243: # define YYSIZE_T size_t
! 244: # elif ! defined YYSIZE_T
! 245: # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
! 246: # define YYSIZE_T size_t
! 247: # else
! 248: # define YYSIZE_T unsigned int
! 249: # endif
! 250: #endif
! 251:
! 252: #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
! 253:
! 254: #ifndef YY_
! 255: # if defined YYENABLE_NLS && YYENABLE_NLS
! 256: # if ENABLE_NLS
! 257: # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
! 258: # define YY_(Msgid) dgettext ("bison-runtime", Msgid)
! 259: # endif
! 260: # endif
! 261: # ifndef YY_
! 262: # define YY_(Msgid) Msgid
! 263: # endif
! 264: #endif
! 265:
! 266: #ifndef YY_ATTRIBUTE
! 267: # if (defined __GNUC__ \
! 268: && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \
! 269: || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
! 270: # define YY_ATTRIBUTE(Spec) __attribute__(Spec)
! 271: # else
! 272: # define YY_ATTRIBUTE(Spec) /* empty */
! 273: # endif
! 274: #endif
! 275:
! 276: #ifndef YY_ATTRIBUTE_PURE
! 277: # define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__))
! 278: #endif
! 279:
! 280: #ifndef YY_ATTRIBUTE_UNUSED
! 281: # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
! 282: #endif
! 283:
! 284: #if !defined _Noreturn \
! 285: && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
! 286: # if defined _MSC_VER && 1200 <= _MSC_VER
! 287: # define _Noreturn __declspec (noreturn)
! 288: # else
! 289: # define _Noreturn YY_ATTRIBUTE ((__noreturn__))
! 290: # endif
! 291: #endif
! 292:
! 293: /* Suppress unused-variable warnings by "using" E. */
! 294: #if ! defined lint || defined __GNUC__
! 295: # define YYUSE(E) ((void) (E))
! 296: #else
! 297: # define YYUSE(E) /* empty */
! 298: #endif
! 299:
! 300: #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
! 301: /* Suppress an incorrect diagnostic about yylval being uninitialized. */
! 302: # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
! 303: _Pragma ("GCC diagnostic push") \
! 304: _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
! 305: _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
! 306: # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
! 307: _Pragma ("GCC diagnostic pop")
! 308: #else
! 309: # define YY_INITIAL_VALUE(Value) Value
! 310: #endif
! 311: #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
! 312: # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
! 313: # define YY_IGNORE_MAYBE_UNINITIALIZED_END
! 314: #endif
! 315: #ifndef YY_INITIAL_VALUE
! 316: # define YY_INITIAL_VALUE(Value) /* Nothing. */
! 317: #endif
! 318:
! 319:
! 320: #if ! defined yyoverflow || YYERROR_VERBOSE
! 321:
! 322: /* The parser invokes alloca or malloc; define the necessary symbols. */
! 323:
! 324: # ifdef YYSTACK_USE_ALLOCA
! 325: # if YYSTACK_USE_ALLOCA
! 326: # ifdef __GNUC__
! 327: # define YYSTACK_ALLOC __builtin_alloca
! 328: # elif defined __BUILTIN_VA_ARG_INCR
! 329: # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
! 330: # elif defined _AIX
! 331: # define YYSTACK_ALLOC __alloca
! 332: # elif defined _MSC_VER
! 333: # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
! 334: # define alloca _alloca
! 335: # else
! 336: # define YYSTACK_ALLOC alloca
! 337: # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
! 338: # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
! 339: /* Use EXIT_SUCCESS as a witness for stdlib.h. */
! 340: # ifndef EXIT_SUCCESS
! 341: # define EXIT_SUCCESS 0
! 342: # endif
! 343: # endif
! 344: # endif
! 345: # endif
! 346: # endif
! 347:
! 348: # ifdef YYSTACK_ALLOC
! 349: /* Pacify GCC's 'empty if-body' warning. */
! 350: # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
! 351: # ifndef YYSTACK_ALLOC_MAXIMUM
! 352: /* The OS might guarantee only one guard page at the bottom of the stack,
! 353: and a page size can be as small as 4096 bytes. So we cannot safely
! 354: invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
! 355: to allow for a few compiler-allocated temporary stack slots. */
! 356: # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
! 357: # endif
! 358: # else
! 359: # define YYSTACK_ALLOC YYMALLOC
! 360: # define YYSTACK_FREE YYFREE
! 361: # ifndef YYSTACK_ALLOC_MAXIMUM
! 362: # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
! 363: # endif
! 364: # if (defined __cplusplus && ! defined EXIT_SUCCESS \
! 365: && ! ((defined YYMALLOC || defined malloc) \
! 366: && (defined YYFREE || defined free)))
! 367: # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
! 368: # ifndef EXIT_SUCCESS
! 369: # define EXIT_SUCCESS 0
! 370: # endif
! 371: # endif
! 372: # ifndef YYMALLOC
! 373: # define YYMALLOC malloc
! 374: # if ! defined malloc && ! defined EXIT_SUCCESS
! 375: void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
! 376: # endif
! 377: # endif
! 378: # ifndef YYFREE
! 379: # define YYFREE free
! 380: # if ! defined free && ! defined EXIT_SUCCESS
! 381: void free (void *); /* INFRINGES ON USER NAME SPACE */
! 382: # endif
! 383: # endif
! 384: # endif
! 385: #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
! 386:
! 387:
! 388: #if (! defined yyoverflow \
! 389: && (! defined __cplusplus \
! 390: || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
! 391:
! 392: /* A type that is properly aligned for any stack member. */
! 393: union yyalloc
! 394: {
! 395: yytype_int16 yyss_alloc;
! 396: YYSTYPE yyvs_alloc;
! 397: };
! 398:
! 399: /* The size of the maximum gap between one aligned stack and the next. */
! 400: # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
! 401:
! 402: /* The size of an array large to enough to hold all stacks, each with
! 403: N elements. */
! 404: # define YYSTACK_BYTES(N) \
! 405: ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
! 406: + YYSTACK_GAP_MAXIMUM)
! 407:
! 408: # define YYCOPY_NEEDED 1
! 409:
! 410: /* Relocate STACK from its old location to the new one. The
! 411: local variables YYSIZE and YYSTACKSIZE give the old and new number of
! 412: elements in the stack, and YYPTR gives the new location of the
! 413: stack. Advance YYPTR to a properly aligned location for the next
! 414: stack. */
! 415: # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
! 416: do \
! 417: { \
! 418: YYSIZE_T yynewbytes; \
! 419: YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
! 420: Stack = &yyptr->Stack_alloc; \
! 421: yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
! 422: yyptr += yynewbytes / sizeof (*yyptr); \
! 423: } \
! 424: while (0)
! 425:
! 426: #endif
! 427:
! 428: #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
! 429: /* Copy COUNT objects from SRC to DST. The source and destination do
! 430: not overlap. */
! 431: # ifndef YYCOPY
! 432: # if defined __GNUC__ && 1 < __GNUC__
! 433: # define YYCOPY(Dst, Src, Count) \
! 434: __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
! 435: # else
! 436: # define YYCOPY(Dst, Src, Count) \
! 437: do \
! 438: { \
! 439: YYSIZE_T yyi; \
! 440: for (yyi = 0; yyi < (Count); yyi++) \
! 441: (Dst)[yyi] = (Src)[yyi]; \
! 442: } \
! 443: while (0)
! 444: # endif
! 445: # endif
! 446: #endif /* !YYCOPY_NEEDED */
! 447:
! 448: /* YYFINAL -- State number of the termination state. */
! 449: #define YYFINAL 2
! 450: /* YYLAST -- Last index in YYTABLE. */
! 451: #define YYLAST 11
! 452:
! 453: /* YYNTOKENS -- Number of terminals. */
! 454: #define YYNTOKENS 11
! 455: /* YYNNTS -- Number of nonterminals. */
! 456: #define YYNNTS 8
! 457: /* YYNRULES -- Number of rules. */
! 458: #define YYNRULES 18
! 459: /* YYNSTATES -- Number of states. */
! 460: #define YYNSTATES 19
! 461:
! 462: /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
! 463: by yylex, with out-of-bounds checking. */
! 464: #define YYUNDEFTOK 2
! 465: #define YYMAXUTOK 265
! 466:
! 467: #define YYTRANSLATE(YYX) \
! 468: ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
! 469:
! 470: /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
! 471: as returned by yylex, without out-of-bounds checking. */
! 472: static const yytype_uint8 yytranslate[] =
! 473: {
! 474: 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 475: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 476: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 477: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 478: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 479: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 480: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 481: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 482: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 483: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 484: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 485: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 486: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 487: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 488: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 489: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 490: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 491: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 492: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 493: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 494: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 495: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 496: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 497: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 498: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 499: 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
! 500: 5, 6, 7, 8, 9, 10
! 501: };
! 502:
! 503: #if YYDEBUG
! 504: /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
! 505: static const yytype_uint8 yyrline[] =
! 506: {
! 507: 0, 97, 97, 99, 100, 104, 105, 109, 123, 128,
! 508: 133, 141, 144, 150, 153, 166, 178, 187, 188
! 509: };
! 510: #endif
! 511:
! 512: #if YYDEBUG || YYERROR_VERBOSE || 1
! 513: /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
! 514: First, the terminals, then, starting at YYNTOKENS, nonterminals. */
! 515: static const char *const yytname[] =
! 516: {
! 517: "$end", "error", "$undefined", "STRING", "EQ", "SPACES", "NEWLINE",
! 518: "CONFIG_SETUP", "CONN", "CA", "STRING_ERROR", "$accept", "statements",
! 519: "statement", "section", "section_type", "section_name", "setting",
! 520: "value", YY_NULLPTR
! 521: };
! 522: #endif
! 523:
! 524: # ifdef YYPRINT
! 525: /* YYTOKNUM[NUM] -- (External) token number corresponding to the
! 526: (internal) symbol number NUM (which must be that of a token). */
! 527: static const yytype_uint16 yytoknum[] =
! 528: {
! 529: 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
! 530: 265
! 531: };
! 532: # endif
! 533:
! 534: #define YYPACT_NINF -3
! 535:
! 536: #define yypact_value_is_default(Yystate) \
! 537: (!!((Yystate) == (-3)))
! 538:
! 539: #define YYTABLE_NINF -1
! 540:
! 541: #define yytable_value_is_error(Yytable_value) \
! 542: 0
! 543:
! 544: /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
! 545: STATE-NUM. */
! 546: static const yytype_int8 yypact[] =
! 547: {
! 548: -3, 0, -3, -2, -3, -3, -3, -3, -3, -3,
! 549: -1, 6, -3, -3, -3, 1, -3, 8, -3
! 550: };
! 551:
! 552: /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
! 553: Performed when YYTABLE does not specify something else to do. Zero
! 554: means the default is an error. */
! 555: static const yytype_uint8 yydefact[] =
! 556: {
! 557: 2, 0, 1, 13, 3, 8, 9, 10, 4, 5,
! 558: 11, 16, 6, 12, 7, 15, 17, 14, 18
! 559: };
! 560:
! 561: /* YYPGOTO[NTERM-NUM]. */
! 562: static const yytype_int8 yypgoto[] =
! 563: {
! 564: -3, -3, -3, -3, -3, -3, -3, -3
! 565: };
! 566:
! 567: /* YYDEFGOTO[NTERM-NUM]. */
! 568: static const yytype_int8 yydefgoto[] =
! 569: {
! 570: -1, 1, 8, 9, 10, 14, 12, 17
! 571: };
! 572:
! 573: /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
! 574: positive, shift that token. If negative, reduce the rule whose
! 575: number is the opposite. If YYTABLE_NINF, syntax error. */
! 576: static const yytype_uint8 yytable[] =
! 577: {
! 578: 2, 11, 13, 0, 16, 3, 4, 5, 6, 7,
! 579: 15, 18
! 580: };
! 581:
! 582: static const yytype_int8 yycheck[] =
! 583: {
! 584: 0, 3, 3, -1, 3, 5, 6, 7, 8, 9,
! 585: 4, 3
! 586: };
! 587:
! 588: /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
! 589: symbol of state STATE-NUM. */
! 590: static const yytype_uint8 yystos[] =
! 591: {
! 592: 0, 12, 0, 5, 6, 7, 8, 9, 13, 14,
! 593: 15, 3, 17, 3, 16, 4, 3, 18, 3
! 594: };
! 595:
! 596: /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
! 597: static const yytype_uint8 yyr1[] =
! 598: {
! 599: 0, 11, 12, 12, 12, 13, 13, 14, 15, 15,
! 600: 15, 16, 16, 17, 17, 17, 17, 18, 18
! 601: };
! 602:
! 603: /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
! 604: static const yytype_uint8 yyr2[] =
! 605: {
! 606: 0, 2, 0, 2, 2, 1, 2, 2, 1, 1,
! 607: 1, 0, 1, 0, 3, 2, 1, 1, 2
! 608: };
! 609:
! 610:
! 611: #define yyerrok (yyerrstatus = 0)
! 612: #define yyclearin (yychar = YYEMPTY)
! 613: #define YYEMPTY (-2)
! 614: #define YYEOF 0
! 615:
! 616: #define YYACCEPT goto yyacceptlab
! 617: #define YYABORT goto yyabortlab
! 618: #define YYERROR goto yyerrorlab
! 619:
! 620:
! 621: #define YYRECOVERING() (!!yyerrstatus)
! 622:
! 623: #define YYBACKUP(Token, Value) \
! 624: do \
! 625: if (yychar == YYEMPTY) \
! 626: { \
! 627: yychar = (Token); \
! 628: yylval = (Value); \
! 629: YYPOPSTACK (yylen); \
! 630: yystate = *yyssp; \
! 631: goto yybackup; \
! 632: } \
! 633: else \
! 634: { \
! 635: yyerror (ctx, YY_("syntax error: cannot back up")); \
! 636: YYERROR; \
! 637: } \
! 638: while (0)
! 639:
! 640: /* Error token number */
! 641: #define YYTERROR 1
! 642: #define YYERRCODE 256
! 643:
! 644:
! 645:
! 646: /* Enable debugging if requested. */
! 647: #if YYDEBUG
! 648:
! 649: # ifndef YYFPRINTF
! 650: # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
! 651: # define YYFPRINTF fprintf
! 652: # endif
! 653:
! 654: # define YYDPRINTF(Args) \
! 655: do { \
! 656: if (yydebug) \
! 657: YYFPRINTF Args; \
! 658: } while (0)
! 659:
! 660: /* This macro is provided for backward compatibility. */
! 661: #ifndef YY_LOCATION_PRINT
! 662: # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
! 663: #endif
! 664:
! 665:
! 666: # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
! 667: do { \
! 668: if (yydebug) \
! 669: { \
! 670: YYFPRINTF (stderr, "%s ", Title); \
! 671: yy_symbol_print (stderr, \
! 672: Type, Value, ctx); \
! 673: YYFPRINTF (stderr, "\n"); \
! 674: } \
! 675: } while (0)
! 676:
! 677:
! 678: /*----------------------------------------.
! 679: | Print this symbol's value on YYOUTPUT. |
! 680: `----------------------------------------*/
! 681:
! 682: static void
! 683: yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, parser_helper_t *ctx)
! 684: {
! 685: FILE *yyo = yyoutput;
! 686: YYUSE (yyo);
! 687: YYUSE (ctx);
! 688: if (!yyvaluep)
! 689: return;
! 690: # ifdef YYPRINT
! 691: if (yytype < YYNTOKENS)
! 692: YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
! 693: # endif
! 694: YYUSE (yytype);
! 695: }
! 696:
! 697:
! 698: /*--------------------------------.
! 699: | Print this symbol on YYOUTPUT. |
! 700: `--------------------------------*/
! 701:
! 702: static void
! 703: yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, parser_helper_t *ctx)
! 704: {
! 705: YYFPRINTF (yyoutput, "%s %s (",
! 706: yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
! 707:
! 708: yy_symbol_value_print (yyoutput, yytype, yyvaluep, ctx);
! 709: YYFPRINTF (yyoutput, ")");
! 710: }
! 711:
! 712: /*------------------------------------------------------------------.
! 713: | yy_stack_print -- Print the state stack from its BOTTOM up to its |
! 714: | TOP (included). |
! 715: `------------------------------------------------------------------*/
! 716:
! 717: static void
! 718: yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
! 719: {
! 720: YYFPRINTF (stderr, "Stack now");
! 721: for (; yybottom <= yytop; yybottom++)
! 722: {
! 723: int yybot = *yybottom;
! 724: YYFPRINTF (stderr, " %d", yybot);
! 725: }
! 726: YYFPRINTF (stderr, "\n");
! 727: }
! 728:
! 729: # define YY_STACK_PRINT(Bottom, Top) \
! 730: do { \
! 731: if (yydebug) \
! 732: yy_stack_print ((Bottom), (Top)); \
! 733: } while (0)
! 734:
! 735:
! 736: /*------------------------------------------------.
! 737: | Report that the YYRULE is going to be reduced. |
! 738: `------------------------------------------------*/
! 739:
! 740: static void
! 741: yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, parser_helper_t *ctx)
! 742: {
! 743: unsigned long int yylno = yyrline[yyrule];
! 744: int yynrhs = yyr2[yyrule];
! 745: int yyi;
! 746: YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
! 747: yyrule - 1, yylno);
! 748: /* The symbols being reduced. */
! 749: for (yyi = 0; yyi < yynrhs; yyi++)
! 750: {
! 751: YYFPRINTF (stderr, " $%d = ", yyi + 1);
! 752: yy_symbol_print (stderr,
! 753: yystos[yyssp[yyi + 1 - yynrhs]],
! 754: &(yyvsp[(yyi + 1) - (yynrhs)])
! 755: , ctx);
! 756: YYFPRINTF (stderr, "\n");
! 757: }
! 758: }
! 759:
! 760: # define YY_REDUCE_PRINT(Rule) \
! 761: do { \
! 762: if (yydebug) \
! 763: yy_reduce_print (yyssp, yyvsp, Rule, ctx); \
! 764: } while (0)
! 765:
! 766: /* Nonzero means print parse trace. It is left uninitialized so that
! 767: multiple parsers can coexist. */
! 768: int yydebug;
! 769: #else /* !YYDEBUG */
! 770: # define YYDPRINTF(Args)
! 771: # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
! 772: # define YY_STACK_PRINT(Bottom, Top)
! 773: # define YY_REDUCE_PRINT(Rule)
! 774: #endif /* !YYDEBUG */
! 775:
! 776:
! 777: /* YYINITDEPTH -- initial size of the parser's stacks. */
! 778: #ifndef YYINITDEPTH
! 779: # define YYINITDEPTH 200
! 780: #endif
! 781:
! 782: /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
! 783: if the built-in stack extension method is used).
! 784:
! 785: Do not make this value too large; the results are undefined if
! 786: YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
! 787: evaluated with infinite-precision integer arithmetic. */
! 788:
! 789: #ifndef YYMAXDEPTH
! 790: # define YYMAXDEPTH 10000
! 791: #endif
! 792:
! 793:
! 794: #if YYERROR_VERBOSE
! 795:
! 796: # ifndef yystrlen
! 797: # if defined __GLIBC__ && defined _STRING_H
! 798: # define yystrlen strlen
! 799: # else
! 800: /* Return the length of YYSTR. */
! 801: static YYSIZE_T
! 802: yystrlen (const char *yystr)
! 803: {
! 804: YYSIZE_T yylen;
! 805: for (yylen = 0; yystr[yylen]; yylen++)
! 806: continue;
! 807: return yylen;
! 808: }
! 809: # endif
! 810: # endif
! 811:
! 812: # ifndef yystpcpy
! 813: # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
! 814: # define yystpcpy stpcpy
! 815: # else
! 816: /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
! 817: YYDEST. */
! 818: static char *
! 819: yystpcpy (char *yydest, const char *yysrc)
! 820: {
! 821: char *yyd = yydest;
! 822: const char *yys = yysrc;
! 823:
! 824: while ((*yyd++ = *yys++) != '\0')
! 825: continue;
! 826:
! 827: return yyd - 1;
! 828: }
! 829: # endif
! 830: # endif
! 831:
! 832: # ifndef yytnamerr
! 833: /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
! 834: quotes and backslashes, so that it's suitable for yyerror. The
! 835: heuristic is that double-quoting is unnecessary unless the string
! 836: contains an apostrophe, a comma, or backslash (other than
! 837: backslash-backslash). YYSTR is taken from yytname. If YYRES is
! 838: null, do not copy; instead, return the length of what the result
! 839: would have been. */
! 840: static YYSIZE_T
! 841: yytnamerr (char *yyres, const char *yystr)
! 842: {
! 843: if (*yystr == '"')
! 844: {
! 845: YYSIZE_T yyn = 0;
! 846: char const *yyp = yystr;
! 847:
! 848: for (;;)
! 849: switch (*++yyp)
! 850: {
! 851: case '\'':
! 852: case ',':
! 853: goto do_not_strip_quotes;
! 854:
! 855: case '\\':
! 856: if (*++yyp != '\\')
! 857: goto do_not_strip_quotes;
! 858: /* Fall through. */
! 859: default:
! 860: if (yyres)
! 861: yyres[yyn] = *yyp;
! 862: yyn++;
! 863: break;
! 864:
! 865: case '"':
! 866: if (yyres)
! 867: yyres[yyn] = '\0';
! 868: return yyn;
! 869: }
! 870: do_not_strip_quotes: ;
! 871: }
! 872:
! 873: if (! yyres)
! 874: return yystrlen (yystr);
! 875:
! 876: return yystpcpy (yyres, yystr) - yyres;
! 877: }
! 878: # endif
! 879:
! 880: /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
! 881: about the unexpected token YYTOKEN for the state stack whose top is
! 882: YYSSP.
! 883:
! 884: Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
! 885: not large enough to hold the message. In that case, also set
! 886: *YYMSG_ALLOC to the required number of bytes. Return 2 if the
! 887: required number of bytes is too large to store. */
! 888: static int
! 889: yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
! 890: yytype_int16 *yyssp, int yytoken)
! 891: {
! 892: YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
! 893: YYSIZE_T yysize = yysize0;
! 894: enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
! 895: /* Internationalized format string. */
! 896: const char *yyformat = YY_NULLPTR;
! 897: /* Arguments of yyformat. */
! 898: char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
! 899: /* Number of reported tokens (one for the "unexpected", one per
! 900: "expected"). */
! 901: int yycount = 0;
! 902:
! 903: /* There are many possibilities here to consider:
! 904: - If this state is a consistent state with a default action, then
! 905: the only way this function was invoked is if the default action
! 906: is an error action. In that case, don't check for expected
! 907: tokens because there are none.
! 908: - The only way there can be no lookahead present (in yychar) is if
! 909: this state is a consistent state with a default action. Thus,
! 910: detecting the absence of a lookahead is sufficient to determine
! 911: that there is no unexpected or expected token to report. In that
! 912: case, just report a simple "syntax error".
! 913: - Don't assume there isn't a lookahead just because this state is a
! 914: consistent state with a default action. There might have been a
! 915: previous inconsistent state, consistent state with a non-default
! 916: action, or user semantic action that manipulated yychar.
! 917: - Of course, the expected token list depends on states to have
! 918: correct lookahead information, and it depends on the parser not
! 919: to perform extra reductions after fetching a lookahead from the
! 920: scanner and before detecting a syntax error. Thus, state merging
! 921: (from LALR or IELR) and default reductions corrupt the expected
! 922: token list. However, the list is correct for canonical LR with
! 923: one exception: it will still contain any token that will not be
! 924: accepted due to an error action in a later state.
! 925: */
! 926: if (yytoken != YYEMPTY)
! 927: {
! 928: int yyn = yypact[*yyssp];
! 929: yyarg[yycount++] = yytname[yytoken];
! 930: if (!yypact_value_is_default (yyn))
! 931: {
! 932: /* Start YYX at -YYN if negative to avoid negative indexes in
! 933: YYCHECK. In other words, skip the first -YYN actions for
! 934: this state because they are default actions. */
! 935: int yyxbegin = yyn < 0 ? -yyn : 0;
! 936: /* Stay within bounds of both yycheck and yytname. */
! 937: int yychecklim = YYLAST - yyn + 1;
! 938: int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
! 939: int yyx;
! 940:
! 941: for (yyx = yyxbegin; yyx < yyxend; ++yyx)
! 942: if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
! 943: && !yytable_value_is_error (yytable[yyx + yyn]))
! 944: {
! 945: if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
! 946: {
! 947: yycount = 1;
! 948: yysize = yysize0;
! 949: break;
! 950: }
! 951: yyarg[yycount++] = yytname[yyx];
! 952: {
! 953: YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
! 954: if (! (yysize <= yysize1
! 955: && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
! 956: return 2;
! 957: yysize = yysize1;
! 958: }
! 959: }
! 960: }
! 961: }
! 962:
! 963: switch (yycount)
! 964: {
! 965: # define YYCASE_(N, S) \
! 966: case N: \
! 967: yyformat = S; \
! 968: break
! 969: YYCASE_(0, YY_("syntax error"));
! 970: YYCASE_(1, YY_("syntax error, unexpected %s"));
! 971: YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
! 972: YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
! 973: YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
! 974: YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
! 975: # undef YYCASE_
! 976: }
! 977:
! 978: {
! 979: YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
! 980: if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
! 981: return 2;
! 982: yysize = yysize1;
! 983: }
! 984:
! 985: if (*yymsg_alloc < yysize)
! 986: {
! 987: *yymsg_alloc = 2 * yysize;
! 988: if (! (yysize <= *yymsg_alloc
! 989: && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
! 990: *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
! 991: return 1;
! 992: }
! 993:
! 994: /* Avoid sprintf, as that infringes on the user's name space.
! 995: Don't have undefined behavior even if the translation
! 996: produced a string with the wrong number of "%s"s. */
! 997: {
! 998: char *yyp = *yymsg;
! 999: int yyi = 0;
! 1000: while ((*yyp = *yyformat) != '\0')
! 1001: if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
! 1002: {
! 1003: yyp += yytnamerr (yyp, yyarg[yyi++]);
! 1004: yyformat += 2;
! 1005: }
! 1006: else
! 1007: {
! 1008: yyp++;
! 1009: yyformat++;
! 1010: }
! 1011: }
! 1012: return 0;
! 1013: }
! 1014: #endif /* YYERROR_VERBOSE */
! 1015:
! 1016: /*-----------------------------------------------.
! 1017: | Release the memory associated to this symbol. |
! 1018: `-----------------------------------------------*/
! 1019:
! 1020: static void
! 1021: yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, parser_helper_t *ctx)
! 1022: {
! 1023: YYUSE (yyvaluep);
! 1024: YYUSE (ctx);
! 1025: if (!yymsg)
! 1026: yymsg = "Deleting";
! 1027: YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
! 1028:
! 1029: YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
! 1030: switch (yytype)
! 1031: {
! 1032: case 3: /* STRING */
! 1033: #line 86 "parser/parser.y" /* yacc.c:1257 */
! 1034: { free(((*yyvaluep).s)); }
! 1035: #line 1036 "parser/parser.c" /* yacc.c:1257 */
! 1036: break;
! 1037:
! 1038: case 16: /* section_name */
! 1039: #line 86 "parser/parser.y" /* yacc.c:1257 */
! 1040: { free(((*yyvaluep).s)); }
! 1041: #line 1042 "parser/parser.c" /* yacc.c:1257 */
! 1042: break;
! 1043:
! 1044: case 18: /* value */
! 1045: #line 86 "parser/parser.y" /* yacc.c:1257 */
! 1046: { free(((*yyvaluep).s)); }
! 1047: #line 1048 "parser/parser.c" /* yacc.c:1257 */
! 1048: break;
! 1049:
! 1050:
! 1051: default:
! 1052: break;
! 1053: }
! 1054: YY_IGNORE_MAYBE_UNINITIALIZED_END
! 1055: }
! 1056:
! 1057:
! 1058:
! 1059:
! 1060: /*----------.
! 1061: | yyparse. |
! 1062: `----------*/
! 1063:
! 1064: int
! 1065: yyparse (parser_helper_t *ctx)
! 1066: {
! 1067: /* The lookahead symbol. */
! 1068: int yychar;
! 1069:
! 1070:
! 1071: /* The semantic value of the lookahead symbol. */
! 1072: /* Default value used for initialization, for pacifying older GCCs
! 1073: or non-GCC compilers. */
! 1074: YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
! 1075: YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
! 1076:
! 1077: /* Number of syntax errors so far. */
! 1078: int yynerrs;
! 1079:
! 1080: int yystate;
! 1081: /* Number of tokens to shift before error messages enabled. */
! 1082: int yyerrstatus;
! 1083:
! 1084: /* The stacks and their tools:
! 1085: 'yyss': related to states.
! 1086: 'yyvs': related to semantic values.
! 1087:
! 1088: Refer to the stacks through separate pointers, to allow yyoverflow
! 1089: to reallocate them elsewhere. */
! 1090:
! 1091: /* The state stack. */
! 1092: yytype_int16 yyssa[YYINITDEPTH];
! 1093: yytype_int16 *yyss;
! 1094: yytype_int16 *yyssp;
! 1095:
! 1096: /* The semantic value stack. */
! 1097: YYSTYPE yyvsa[YYINITDEPTH];
! 1098: YYSTYPE *yyvs;
! 1099: YYSTYPE *yyvsp;
! 1100:
! 1101: YYSIZE_T yystacksize;
! 1102:
! 1103: int yyn;
! 1104: int yyresult;
! 1105: /* Lookahead token as an internal (translated) token number. */
! 1106: int yytoken = 0;
! 1107: /* The variables used to return semantic value and location from the
! 1108: action routines. */
! 1109: YYSTYPE yyval;
! 1110:
! 1111: #if YYERROR_VERBOSE
! 1112: /* Buffer for error messages, and its allocated size. */
! 1113: char yymsgbuf[128];
! 1114: char *yymsg = yymsgbuf;
! 1115: YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
! 1116: #endif
! 1117:
! 1118: #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
! 1119:
! 1120: /* The number of symbols on the RHS of the reduced rule.
! 1121: Keep to zero when no symbol should be popped. */
! 1122: int yylen = 0;
! 1123:
! 1124: yyssp = yyss = yyssa;
! 1125: yyvsp = yyvs = yyvsa;
! 1126: yystacksize = YYINITDEPTH;
! 1127:
! 1128: YYDPRINTF ((stderr, "Starting parse\n"));
! 1129:
! 1130: yystate = 0;
! 1131: yyerrstatus = 0;
! 1132: yynerrs = 0;
! 1133: yychar = YYEMPTY; /* Cause a token to be read. */
! 1134: goto yysetstate;
! 1135:
! 1136: /*------------------------------------------------------------.
! 1137: | yynewstate -- Push a new state, which is found in yystate. |
! 1138: `------------------------------------------------------------*/
! 1139: yynewstate:
! 1140: /* In all cases, when you get here, the value and location stacks
! 1141: have just been pushed. So pushing a state here evens the stacks. */
! 1142: yyssp++;
! 1143:
! 1144: yysetstate:
! 1145: *yyssp = yystate;
! 1146:
! 1147: if (yyss + yystacksize - 1 <= yyssp)
! 1148: {
! 1149: /* Get the current used size of the three stacks, in elements. */
! 1150: YYSIZE_T yysize = yyssp - yyss + 1;
! 1151:
! 1152: #ifdef yyoverflow
! 1153: {
! 1154: /* Give user a chance to reallocate the stack. Use copies of
! 1155: these so that the &'s don't force the real ones into
! 1156: memory. */
! 1157: YYSTYPE *yyvs1 = yyvs;
! 1158: yytype_int16 *yyss1 = yyss;
! 1159:
! 1160: /* Each stack pointer address is followed by the size of the
! 1161: data in use in that stack, in bytes. This used to be a
! 1162: conditional around just the two extra args, but that might
! 1163: be undefined if yyoverflow is a macro. */
! 1164: yyoverflow (YY_("memory exhausted"),
! 1165: &yyss1, yysize * sizeof (*yyssp),
! 1166: &yyvs1, yysize * sizeof (*yyvsp),
! 1167: &yystacksize);
! 1168:
! 1169: yyss = yyss1;
! 1170: yyvs = yyvs1;
! 1171: }
! 1172: #else /* no yyoverflow */
! 1173: # ifndef YYSTACK_RELOCATE
! 1174: goto yyexhaustedlab;
! 1175: # else
! 1176: /* Extend the stack our own way. */
! 1177: if (YYMAXDEPTH <= yystacksize)
! 1178: goto yyexhaustedlab;
! 1179: yystacksize *= 2;
! 1180: if (YYMAXDEPTH < yystacksize)
! 1181: yystacksize = YYMAXDEPTH;
! 1182:
! 1183: {
! 1184: yytype_int16 *yyss1 = yyss;
! 1185: union yyalloc *yyptr =
! 1186: (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
! 1187: if (! yyptr)
! 1188: goto yyexhaustedlab;
! 1189: YYSTACK_RELOCATE (yyss_alloc, yyss);
! 1190: YYSTACK_RELOCATE (yyvs_alloc, yyvs);
! 1191: # undef YYSTACK_RELOCATE
! 1192: if (yyss1 != yyssa)
! 1193: YYSTACK_FREE (yyss1);
! 1194: }
! 1195: # endif
! 1196: #endif /* no yyoverflow */
! 1197:
! 1198: yyssp = yyss + yysize - 1;
! 1199: yyvsp = yyvs + yysize - 1;
! 1200:
! 1201: YYDPRINTF ((stderr, "Stack size increased to %lu\n",
! 1202: (unsigned long int) yystacksize));
! 1203:
! 1204: if (yyss + yystacksize - 1 <= yyssp)
! 1205: YYABORT;
! 1206: }
! 1207:
! 1208: YYDPRINTF ((stderr, "Entering state %d\n", yystate));
! 1209:
! 1210: if (yystate == YYFINAL)
! 1211: YYACCEPT;
! 1212:
! 1213: goto yybackup;
! 1214:
! 1215: /*-----------.
! 1216: | yybackup. |
! 1217: `-----------*/
! 1218: yybackup:
! 1219:
! 1220: /* Do appropriate processing given the current state. Read a
! 1221: lookahead token if we need one and don't already have one. */
! 1222:
! 1223: /* First try to decide what to do without reference to lookahead token. */
! 1224: yyn = yypact[yystate];
! 1225: if (yypact_value_is_default (yyn))
! 1226: goto yydefault;
! 1227:
! 1228: /* Not known => get a lookahead token if don't already have one. */
! 1229:
! 1230: /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
! 1231: if (yychar == YYEMPTY)
! 1232: {
! 1233: YYDPRINTF ((stderr, "Reading a token: "));
! 1234: yychar = yylex (&yylval, ctx);
! 1235: }
! 1236:
! 1237: if (yychar <= YYEOF)
! 1238: {
! 1239: yychar = yytoken = YYEOF;
! 1240: YYDPRINTF ((stderr, "Now at end of input.\n"));
! 1241: }
! 1242: else
! 1243: {
! 1244: yytoken = YYTRANSLATE (yychar);
! 1245: YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
! 1246: }
! 1247:
! 1248: /* If the proper action on seeing token YYTOKEN is to reduce or to
! 1249: detect an error, take that action. */
! 1250: yyn += yytoken;
! 1251: if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
! 1252: goto yydefault;
! 1253: yyn = yytable[yyn];
! 1254: if (yyn <= 0)
! 1255: {
! 1256: if (yytable_value_is_error (yyn))
! 1257: goto yyerrlab;
! 1258: yyn = -yyn;
! 1259: goto yyreduce;
! 1260: }
! 1261:
! 1262: /* Count tokens shifted since error; after three, turn off error
! 1263: status. */
! 1264: if (yyerrstatus)
! 1265: yyerrstatus--;
! 1266:
! 1267: /* Shift the lookahead token. */
! 1268: YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
! 1269:
! 1270: /* Discard the shifted token. */
! 1271: yychar = YYEMPTY;
! 1272:
! 1273: yystate = yyn;
! 1274: YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
! 1275: *++yyvsp = yylval;
! 1276: YY_IGNORE_MAYBE_UNINITIALIZED_END
! 1277:
! 1278: goto yynewstate;
! 1279:
! 1280:
! 1281: /*-----------------------------------------------------------.
! 1282: | yydefault -- do the default action for the current state. |
! 1283: `-----------------------------------------------------------*/
! 1284: yydefault:
! 1285: yyn = yydefact[yystate];
! 1286: if (yyn == 0)
! 1287: goto yyerrlab;
! 1288: goto yyreduce;
! 1289:
! 1290:
! 1291: /*-----------------------------.
! 1292: | yyreduce -- Do a reduction. |
! 1293: `-----------------------------*/
! 1294: yyreduce:
! 1295: /* yyn is the number of a rule to reduce with. */
! 1296: yylen = yyr2[yyn];
! 1297:
! 1298: /* If YYLEN is nonzero, implement the default value of the action:
! 1299: '$$ = $1'.
! 1300:
! 1301: Otherwise, the following line sets YYVAL to garbage.
! 1302: This behavior is undocumented and Bison
! 1303: users should not rely upon it. Assigning to YYVAL
! 1304: unconditionally makes the parser a bit smaller, and it avoids a
! 1305: GCC warning that YYVAL may be used uninitialized. */
! 1306: yyval = yyvsp[1-yylen];
! 1307:
! 1308:
! 1309: YY_REDUCE_PRINT (yyn);
! 1310: switch (yyn)
! 1311: {
! 1312: case 7:
! 1313: #line 110 "parser/parser.y" /* yacc.c:1646 */
! 1314: {
! 1315: if ((yyvsp[-1].t) != CONF_PARSER_CONFIG_SETUP && (!(yyvsp[0].s) || !strlen((yyvsp[0].s))))
! 1316: {
! 1317: PARSER_DBG1(ctx, "section name missing");
! 1318: free((yyvsp[0].s));
! 1319: YYERROR;
! 1320: }
! 1321: conf_parser_t *parser = (conf_parser_t*)ctx->context;
! 1322: parser->add_section(parser, (yyvsp[-1].t), (yyvsp[0].s));
! 1323: }
! 1324: #line 1325 "parser/parser.c" /* yacc.c:1646 */
! 1325: break;
! 1326:
! 1327: case 8:
! 1328: #line 124 "parser/parser.y" /* yacc.c:1646 */
! 1329: {
! 1330: (yyval.t) = CONF_PARSER_CONFIG_SETUP;
! 1331: }
! 1332: #line 1333 "parser/parser.c" /* yacc.c:1646 */
! 1333: break;
! 1334:
! 1335: case 9:
! 1336: #line 129 "parser/parser.y" /* yacc.c:1646 */
! 1337: {
! 1338: (yyval.t) = CONF_PARSER_CONN;
! 1339: }
! 1340: #line 1341 "parser/parser.c" /* yacc.c:1646 */
! 1341: break;
! 1342:
! 1343: case 10:
! 1344: #line 134 "parser/parser.y" /* yacc.c:1646 */
! 1345: {
! 1346: (yyval.t) = CONF_PARSER_CA;
! 1347: }
! 1348: #line 1349 "parser/parser.c" /* yacc.c:1646 */
! 1349: break;
! 1350:
! 1351: case 11:
! 1352: #line 141 "parser/parser.y" /* yacc.c:1646 */
! 1353: {
! 1354: (yyval.s) = NULL;
! 1355: }
! 1356: #line 1357 "parser/parser.c" /* yacc.c:1646 */
! 1357: break;
! 1358:
! 1359: case 12:
! 1360: #line 145 "parser/parser.y" /* yacc.c:1646 */
! 1361: {
! 1362: (yyval.s) = (yyvsp[0].s);
! 1363: }
! 1364: #line 1365 "parser/parser.c" /* yacc.c:1646 */
! 1365: break;
! 1366:
! 1367: case 14:
! 1368: #line 154 "parser/parser.y" /* yacc.c:1646 */
! 1369: {
! 1370: if (!strlen((yyvsp[-2].s)))
! 1371: {
! 1372: PARSER_DBG1(ctx, "setting name can't be empty");
! 1373: free((yyvsp[-2].s));
! 1374: free((yyvsp[0].s));
! 1375: YYERROR;
! 1376: }
! 1377: conf_parser_t *parser = (conf_parser_t*)ctx->context;
! 1378: parser->add_setting(parser, (yyvsp[-2].s), (yyvsp[0].s));
! 1379: }
! 1380: #line 1381 "parser/parser.c" /* yacc.c:1646 */
! 1381: break;
! 1382:
! 1383: case 15:
! 1384: #line 167 "parser/parser.y" /* yacc.c:1646 */
! 1385: {
! 1386: if (!strlen((yyvsp[-1].s)))
! 1387: {
! 1388: PARSER_DBG1(ctx, "setting name can't be empty");
! 1389: free((yyvsp[-1].s));
! 1390: YYERROR;
! 1391: }
! 1392: conf_parser_t *parser = (conf_parser_t*)ctx->context;
! 1393: parser->add_setting(parser, (yyvsp[-1].s), NULL);
! 1394: }
! 1395: #line 1396 "parser/parser.c" /* yacc.c:1646 */
! 1396: break;
! 1397:
! 1398: case 16:
! 1399: #line 179 "parser/parser.y" /* yacc.c:1646 */
! 1400: {
! 1401: PARSER_DBG1(ctx, "missing value for setting '%s'", (yyvsp[0].s));
! 1402: free((yyvsp[0].s));
! 1403: YYERROR;
! 1404: }
! 1405: #line 1406 "parser/parser.c" /* yacc.c:1646 */
! 1406: break;
! 1407:
! 1408: case 18:
! 1409: #line 189 "parser/parser.y" /* yacc.c:1646 */
! 1410: { /* just put a single space between them, use strings for more */
! 1411: if (asprintf(&(yyval.s), "%s %s", (yyvsp[-1].s), (yyvsp[0].s)) < 0)
! 1412: {
! 1413: free((yyvsp[-1].s));
! 1414: free((yyvsp[0].s));
! 1415: YYERROR;
! 1416: }
! 1417: free((yyvsp[-1].s));
! 1418: free((yyvsp[0].s));
! 1419: }
! 1420: #line 1421 "parser/parser.c" /* yacc.c:1646 */
! 1421: break;
! 1422:
! 1423:
! 1424: #line 1425 "parser/parser.c" /* yacc.c:1646 */
! 1425: default: break;
! 1426: }
! 1427: /* User semantic actions sometimes alter yychar, and that requires
! 1428: that yytoken be updated with the new translation. We take the
! 1429: approach of translating immediately before every use of yytoken.
! 1430: One alternative is translating here after every semantic action,
! 1431: but that translation would be missed if the semantic action invokes
! 1432: YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
! 1433: if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
! 1434: incorrect destructor might then be invoked immediately. In the
! 1435: case of YYERROR or YYBACKUP, subsequent parser actions might lead
! 1436: to an incorrect destructor call or verbose syntax error message
! 1437: before the lookahead is translated. */
! 1438: YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
! 1439:
! 1440: YYPOPSTACK (yylen);
! 1441: yylen = 0;
! 1442: YY_STACK_PRINT (yyss, yyssp);
! 1443:
! 1444: *++yyvsp = yyval;
! 1445:
! 1446: /* Now 'shift' the result of the reduction. Determine what state
! 1447: that goes to, based on the state we popped back to and the rule
! 1448: number reduced by. */
! 1449:
! 1450: yyn = yyr1[yyn];
! 1451:
! 1452: yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
! 1453: if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
! 1454: yystate = yytable[yystate];
! 1455: else
! 1456: yystate = yydefgoto[yyn - YYNTOKENS];
! 1457:
! 1458: goto yynewstate;
! 1459:
! 1460:
! 1461: /*--------------------------------------.
! 1462: | yyerrlab -- here on detecting error. |
! 1463: `--------------------------------------*/
! 1464: yyerrlab:
! 1465: /* Make sure we have latest lookahead translation. See comments at
! 1466: user semantic actions for why this is necessary. */
! 1467: yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
! 1468:
! 1469: /* If not already recovering from an error, report this error. */
! 1470: if (!yyerrstatus)
! 1471: {
! 1472: ++yynerrs;
! 1473: #if ! YYERROR_VERBOSE
! 1474: yyerror (ctx, YY_("syntax error"));
! 1475: #else
! 1476: # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
! 1477: yyssp, yytoken)
! 1478: {
! 1479: char const *yymsgp = YY_("syntax error");
! 1480: int yysyntax_error_status;
! 1481: yysyntax_error_status = YYSYNTAX_ERROR;
! 1482: if (yysyntax_error_status == 0)
! 1483: yymsgp = yymsg;
! 1484: else if (yysyntax_error_status == 1)
! 1485: {
! 1486: if (yymsg != yymsgbuf)
! 1487: YYSTACK_FREE (yymsg);
! 1488: yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
! 1489: if (!yymsg)
! 1490: {
! 1491: yymsg = yymsgbuf;
! 1492: yymsg_alloc = sizeof yymsgbuf;
! 1493: yysyntax_error_status = 2;
! 1494: }
! 1495: else
! 1496: {
! 1497: yysyntax_error_status = YYSYNTAX_ERROR;
! 1498: yymsgp = yymsg;
! 1499: }
! 1500: }
! 1501: yyerror (ctx, yymsgp);
! 1502: if (yysyntax_error_status == 2)
! 1503: goto yyexhaustedlab;
! 1504: }
! 1505: # undef YYSYNTAX_ERROR
! 1506: #endif
! 1507: }
! 1508:
! 1509:
! 1510:
! 1511: if (yyerrstatus == 3)
! 1512: {
! 1513: /* If just tried and failed to reuse lookahead token after an
! 1514: error, discard it. */
! 1515:
! 1516: if (yychar <= YYEOF)
! 1517: {
! 1518: /* Return failure if at end of input. */
! 1519: if (yychar == YYEOF)
! 1520: YYABORT;
! 1521: }
! 1522: else
! 1523: {
! 1524: yydestruct ("Error: discarding",
! 1525: yytoken, &yylval, ctx);
! 1526: yychar = YYEMPTY;
! 1527: }
! 1528: }
! 1529:
! 1530: /* Else will try to reuse lookahead token after shifting the error
! 1531: token. */
! 1532: goto yyerrlab1;
! 1533:
! 1534:
! 1535: /*---------------------------------------------------.
! 1536: | yyerrorlab -- error raised explicitly by YYERROR. |
! 1537: `---------------------------------------------------*/
! 1538: yyerrorlab:
! 1539:
! 1540: /* Pacify compilers like GCC when the user code never invokes
! 1541: YYERROR and the label yyerrorlab therefore never appears in user
! 1542: code. */
! 1543: if (/*CONSTCOND*/ 0)
! 1544: goto yyerrorlab;
! 1545:
! 1546: /* Do not reclaim the symbols of the rule whose action triggered
! 1547: this YYERROR. */
! 1548: YYPOPSTACK (yylen);
! 1549: yylen = 0;
! 1550: YY_STACK_PRINT (yyss, yyssp);
! 1551: yystate = *yyssp;
! 1552: goto yyerrlab1;
! 1553:
! 1554:
! 1555: /*-------------------------------------------------------------.
! 1556: | yyerrlab1 -- common code for both syntax error and YYERROR. |
! 1557: `-------------------------------------------------------------*/
! 1558: yyerrlab1:
! 1559: yyerrstatus = 3; /* Each real token shifted decrements this. */
! 1560:
! 1561: for (;;)
! 1562: {
! 1563: yyn = yypact[yystate];
! 1564: if (!yypact_value_is_default (yyn))
! 1565: {
! 1566: yyn += YYTERROR;
! 1567: if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
! 1568: {
! 1569: yyn = yytable[yyn];
! 1570: if (0 < yyn)
! 1571: break;
! 1572: }
! 1573: }
! 1574:
! 1575: /* Pop the current state because it cannot handle the error token. */
! 1576: if (yyssp == yyss)
! 1577: YYABORT;
! 1578:
! 1579:
! 1580: yydestruct ("Error: popping",
! 1581: yystos[yystate], yyvsp, ctx);
! 1582: YYPOPSTACK (1);
! 1583: yystate = *yyssp;
! 1584: YY_STACK_PRINT (yyss, yyssp);
! 1585: }
! 1586:
! 1587: YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
! 1588: *++yyvsp = yylval;
! 1589: YY_IGNORE_MAYBE_UNINITIALIZED_END
! 1590:
! 1591:
! 1592: /* Shift the error token. */
! 1593: YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
! 1594:
! 1595: yystate = yyn;
! 1596: goto yynewstate;
! 1597:
! 1598:
! 1599: /*-------------------------------------.
! 1600: | yyacceptlab -- YYACCEPT comes here. |
! 1601: `-------------------------------------*/
! 1602: yyacceptlab:
! 1603: yyresult = 0;
! 1604: goto yyreturn;
! 1605:
! 1606: /*-----------------------------------.
! 1607: | yyabortlab -- YYABORT comes here. |
! 1608: `-----------------------------------*/
! 1609: yyabortlab:
! 1610: yyresult = 1;
! 1611: goto yyreturn;
! 1612:
! 1613: #if !defined yyoverflow || YYERROR_VERBOSE
! 1614: /*-------------------------------------------------.
! 1615: | yyexhaustedlab -- memory exhaustion comes here. |
! 1616: `-------------------------------------------------*/
! 1617: yyexhaustedlab:
! 1618: yyerror (ctx, YY_("memory exhausted"));
! 1619: yyresult = 2;
! 1620: /* Fall through. */
! 1621: #endif
! 1622:
! 1623: yyreturn:
! 1624: if (yychar != YYEMPTY)
! 1625: {
! 1626: /* Make sure we have latest lookahead translation. See comments at
! 1627: user semantic actions for why this is necessary. */
! 1628: yytoken = YYTRANSLATE (yychar);
! 1629: yydestruct ("Cleanup: discarding lookahead",
! 1630: yytoken, &yylval, ctx);
! 1631: }
! 1632: /* Do not reclaim the symbols of the rule whose action triggered
! 1633: this YYABORT or YYACCEPT. */
! 1634: YYPOPSTACK (yylen);
! 1635: YY_STACK_PRINT (yyss, yyssp);
! 1636: while (yyssp != yyss)
! 1637: {
! 1638: yydestruct ("Cleanup: popping",
! 1639: yystos[*yyssp], yyvsp, ctx);
! 1640: YYPOPSTACK (1);
! 1641: }
! 1642: #ifndef yyoverflow
! 1643: if (yyss != yyssa)
! 1644: YYSTACK_FREE (yyss);
! 1645: #endif
! 1646: #if YYERROR_VERBOSE
! 1647: if (yymsg != yymsgbuf)
! 1648: YYSTACK_FREE (yymsg);
! 1649: #endif
! 1650: return yyresult;
! 1651: }
! 1652: #line 201 "parser/parser.y" /* yacc.c:1906 */
! 1653:
! 1654:
! 1655: /**
! 1656: * Referenced by the generated parser
! 1657: */
! 1658: static void conf_parser_error(parser_helper_t *ctx, const char *s)
! 1659: {
! 1660: char *text = conf_parser_get_text(ctx->scanner);
! 1661: int len = conf_parser_get_leng(ctx->scanner);
! 1662:
! 1663: if (len && text[len-1] == '\n')
! 1664: { /* cut off newline at the end to avoid muti-line log messages */
! 1665: len--;
! 1666: }
! 1667: PARSER_DBG1(ctx, "%s [%.*s]", s, (int)len, text);
! 1668: }
! 1669:
! 1670: /**
! 1671: * Parse the given file
! 1672: */
! 1673: bool conf_parser_parse_file(conf_parser_t *this, char *name)
! 1674: {
! 1675: parser_helper_t *helper;
! 1676: bool success = FALSE;
! 1677:
! 1678: helper = parser_helper_create(this);
! 1679: helper->get_lineno = conf_parser_get_lineno;
! 1680: if (conf_parser_lex_init_extra(helper, &helper->scanner) != 0)
! 1681: {
! 1682: helper->destroy(helper);
! 1683: return FALSE;
! 1684: }
! 1685: helper->file_include(helper, name);
! 1686: if (!conf_parser_open_next_file(helper))
! 1687: {
! 1688: DBG1(DBG_CFG, "failed to open config file '%s'", name);
! 1689: }
! 1690: else
! 1691: {
! 1692: if (getenv("DEBUG_CONF_PARSER"))
! 1693: {
! 1694: yydebug = 1;
! 1695: conf_parser_set_debug(1, helper->scanner);
! 1696: }
! 1697: success = yyparse(helper) == 0;
! 1698: if (!success)
! 1699: {
! 1700: DBG1(DBG_CFG, "invalid config file '%s'", name);
! 1701: }
! 1702: }
! 1703: conf_parser_lex_destroy(helper->scanner);
! 1704: helper->destroy(helper);
! 1705: return success;
! 1706: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>