1/* A Bison parser, made by GNU Bison 3.8.2. */ 2 3/* Bison implementation for Yacc-like parsers in C 4 5 Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, 6 Inc. 7 8 This program is free software: you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation, either version 3 of the License, or 11 (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 20 21/* As a special exception, you may create a larger work that contains 22 part or all of the Bison parser skeleton and distribute that work 23 under terms of your choice, so long as that work isn't itself a 24 parser generator using the skeleton or a modified version thereof 25 as a parser skeleton. Alternatively, if you modify or redistribute 26 the parser skeleton itself, you may (at your option) remove this 27 special exception, which will cause the skeleton and the resulting 28 Bison output files to be licensed under the GNU General Public 29 License without this special exception. 30 31 This special exception was added by the Free Software Foundation in 32 version 2.2 of Bison. */ 33 34/* C LALR(1) parser skeleton written by Richard Stallman, by 35 simplifying the original so-called "semantic" parser. */ 36 37/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, 38 especially those whose name start with YY_ or yy_. They are 39 private implementation details that can be changed or removed. */ 40 41/* All symbols defined below should begin with yy or YY, to avoid 42 infringing on user name space. This should be done even for local 43 variables, as they might otherwise be expanded by user macros. 44 There are some unavoidable exceptions within include files to 45 define necessary library symbols; they are noted "INFRINGES ON 46 USER NAME SPACE" below. */ 47 48/* Identify Bison output, and Bison version. */ 49#define YYBISON 30802 50 51/* Bison version string. */ 52#define YYBISON_VERSION "3.8.2" 53 54/* Skeleton name. */ 55#define YYSKELETON_NAME "yacc.c" 56 57/* Pure parsers. */ 58#define YYPURE 0 59 60/* Push parsers. */ 61#define YYPUSH 0 62 63/* Pull parsers. */ 64#define YYPULL 1 65 66 67 68 69/* First part of user prologue. */ 70 71#include "fmd_scanner.h" 72#include "common.h" 73 74#include <stdlib.h> 75 76struct flashmap_descriptor *res = NULL; 77 78 79# ifndef YY_CAST 80# ifdef __cplusplus 81# define YY_CAST(Type, Val) static_cast<Type> (Val) 82# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val) 83# else 84# define YY_CAST(Type, Val) ((Type) (Val)) 85# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) 86# endif 87# endif 88# ifndef YY_NULLPTR 89# if defined __cplusplus 90# if 201103L <= __cplusplus 91# define YY_NULLPTR nullptr 92# else 93# define YY_NULLPTR 0 94# endif 95# else 96# define YY_NULLPTR ((void*)0) 97# endif 98# endif 99 100#include "fmd_parser.h_shipped" 101/* Symbol kind. */ 102enum yysymbol_kind_t 103{ 104 YYSYMBOL_YYEMPTY = -2, 105 YYSYMBOL_YYEOF = 0, /* "end of file" */ 106 YYSYMBOL_YYerror = 1, /* error */ 107 YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ 108 YYSYMBOL_INTEGER = 3, /* INTEGER */ 109 YYSYMBOL_OCTAL = 4, /* OCTAL */ 110 YYSYMBOL_STRING = 5, /* STRING */ 111 YYSYMBOL_FLAG_CBFS = 6, /* FLAG_CBFS */ 112 YYSYMBOL_FLAG_PRESERVE = 7, /* FLAG_PRESERVE */ 113 YYSYMBOL_8_ = 8, /* '(' */ 114 YYSYMBOL_9_ = 9, /* ')' */ 115 YYSYMBOL_10_ = 10, /* '@' */ 116 YYSYMBOL_11_ = 11, /* '{' */ 117 YYSYMBOL_12_ = 12, /* '}' */ 118 YYSYMBOL_YYACCEPT = 13, /* $accept */ 119 YYSYMBOL_flash_chip = 14, /* flash_chip */ 120 YYSYMBOL_flash_region = 15, /* flash_region */ 121 YYSYMBOL_region_name = 16, /* region_name */ 122 YYSYMBOL_region_flags_opt = 17, /* region_flags_opt */ 123 YYSYMBOL_region_flags = 18, /* region_flags */ 124 YYSYMBOL_region_flag = 19, /* region_flag */ 125 YYSYMBOL_region_offset_opt = 20, /* region_offset_opt */ 126 YYSYMBOL_region_offset = 21, /* region_offset */ 127 YYSYMBOL_region_size_opt = 22, /* region_size_opt */ 128 YYSYMBOL_region_size = 23, /* region_size */ 129 YYSYMBOL_region_list_opt = 24, /* region_list_opt */ 130 YYSYMBOL_region_list = 25, /* region_list */ 131 YYSYMBOL_region_list_entries = 26 /* region_list_entries */ 132}; 133typedef enum yysymbol_kind_t yysymbol_kind_t; 134 135 136 137 138#ifdef short 139# undef short 140#endif 141 142/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure 143 <limits.h> and (if available) <stdint.h> are included 144 so that the code can choose integer types of a good width. */ 145 146#ifndef __PTRDIFF_MAX__ 147# include <limits.h> /* INFRINGES ON USER NAME SPACE */ 148# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ 149# include <stdint.h> /* INFRINGES ON USER NAME SPACE */ 150# define YY_STDINT_H 151# endif 152#endif 153 154/* Narrow types that promote to a signed type and that can represent a 155 signed or unsigned integer of at least N bits. In tables they can 156 save space and decrease cache pressure. Promoting to a signed type 157 helps avoid bugs in integer arithmetic. */ 158 159#ifdef __INT_LEAST8_MAX__ 160typedef __INT_LEAST8_TYPE__ yytype_int8; 161#elif defined YY_STDINT_H 162typedef int_least8_t yytype_int8; 163#else 164typedef signed char yytype_int8; 165#endif 166 167#ifdef __INT_LEAST16_MAX__ 168typedef __INT_LEAST16_TYPE__ yytype_int16; 169#elif defined YY_STDINT_H 170typedef int_least16_t yytype_int16; 171#else 172typedef short yytype_int16; 173#endif 174 175/* Work around bug in HP-UX 11.23, which defines these macros 176 incorrectly for preprocessor constants. This workaround can likely 177 be removed in 2023, as HPE has promised support for HP-UX 11.23 178 (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of 179 <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */ 180#ifdef __hpux 181# undef UINT_LEAST8_MAX 182# undef UINT_LEAST16_MAX 183# define UINT_LEAST8_MAX 255 184# define UINT_LEAST16_MAX 65535 185#endif 186 187#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ 188typedef __UINT_LEAST8_TYPE__ yytype_uint8; 189#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ 190 && UINT_LEAST8_MAX <= INT_MAX) 191typedef uint_least8_t yytype_uint8; 192#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX 193typedef unsigned char yytype_uint8; 194#else 195typedef short yytype_uint8; 196#endif 197 198#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ 199typedef __UINT_LEAST16_TYPE__ yytype_uint16; 200#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ 201 && UINT_LEAST16_MAX <= INT_MAX) 202typedef uint_least16_t yytype_uint16; 203#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX 204typedef unsigned short yytype_uint16; 205#else 206typedef int yytype_uint16; 207#endif 208 209#ifndef YYPTRDIFF_T 210# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ 211# define YYPTRDIFF_T __PTRDIFF_TYPE__ 212# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ 213# elif defined PTRDIFF_MAX 214# ifndef ptrdiff_t 215# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 216# endif 217# define YYPTRDIFF_T ptrdiff_t 218# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX 219# else 220# define YYPTRDIFF_T long 221# define YYPTRDIFF_MAXIMUM LONG_MAX 222# endif 223#endif 224 225#ifndef YYSIZE_T 226# ifdef __SIZE_TYPE__ 227# define YYSIZE_T __SIZE_TYPE__ 228# elif defined size_t 229# define YYSIZE_T size_t 230# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ 231# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 232# define YYSIZE_T size_t 233# else 234# define YYSIZE_T unsigned 235# endif 236#endif 237 238#define YYSIZE_MAXIMUM \ 239 YY_CAST (YYPTRDIFF_T, \ 240 (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ 241 ? YYPTRDIFF_MAXIMUM \ 242 : YY_CAST (YYSIZE_T, -1))) 243 244#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) 245 246 247/* Stored state numbers (used for stacks). */ 248typedef yytype_int8 yy_state_t; 249 250/* State numbers in computations. */ 251typedef int yy_state_fast_t; 252 253#ifndef YY_ 254# if defined YYENABLE_NLS && YYENABLE_NLS 255# if ENABLE_NLS 256# include <libintl.h> /* INFRINGES ON USER NAME SPACE */ 257# define YY_(Msgid) dgettext ("bison-runtime", Msgid) 258# endif 259# endif 260# ifndef YY_ 261# define YY_(Msgid) Msgid 262# endif 263#endif 264 265 266#ifndef YY_ATTRIBUTE_PURE 267# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) 268# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) 269# else 270# define YY_ATTRIBUTE_PURE 271# endif 272#endif 273 274#ifndef YY_ATTRIBUTE_UNUSED 275# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) 276# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) 277# else 278# define YY_ATTRIBUTE_UNUSED 279# endif 280#endif 281 282/* Suppress unused-variable warnings by "using" E. */ 283#if ! defined lint || defined __GNUC__ 284# define YY_USE(E) ((void) (E)) 285#else 286# define YY_USE(E) /* empty */ 287#endif 288 289/* Suppress an incorrect diagnostic about yylval being uninitialized. */ 290#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ 291# if __GNUC__ * 100 + __GNUC_MINOR__ < 407 292# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ 293 _Pragma ("GCC diagnostic push") \ 294 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") 295# else 296# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ 297 _Pragma ("GCC diagnostic push") \ 298 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ 299 _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") 300# endif 301# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ 302 _Pragma ("GCC diagnostic pop") 303#else 304# define YY_INITIAL_VALUE(Value) Value 305#endif 306#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 307# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 308# define YY_IGNORE_MAYBE_UNINITIALIZED_END 309#endif 310#ifndef YY_INITIAL_VALUE 311# define YY_INITIAL_VALUE(Value) /* Nothing. */ 312#endif 313 314#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ 315# define YY_IGNORE_USELESS_CAST_BEGIN \ 316 _Pragma ("GCC diagnostic push") \ 317 _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") 318# define YY_IGNORE_USELESS_CAST_END \ 319 _Pragma ("GCC diagnostic pop") 320#endif 321#ifndef YY_IGNORE_USELESS_CAST_BEGIN 322# define YY_IGNORE_USELESS_CAST_BEGIN 323# define YY_IGNORE_USELESS_CAST_END 324#endif 325 326 327#define YY_ASSERT(E) ((void) (0 && (E))) 328 329#if !defined yyoverflow 330 331/* The parser invokes alloca or malloc; define the necessary symbols. */ 332 333# ifdef YYSTACK_USE_ALLOCA 334# if YYSTACK_USE_ALLOCA 335# ifdef __GNUC__ 336# define YYSTACK_ALLOC __builtin_alloca 337# elif defined __BUILTIN_VA_ARG_INCR 338# include <alloca.h> /* INFRINGES ON USER NAME SPACE */ 339# elif defined _AIX 340# define YYSTACK_ALLOC __alloca 341# elif defined _MSC_VER 342# include <malloc.h> /* INFRINGES ON USER NAME SPACE */ 343# define alloca _alloca 344# else 345# define YYSTACK_ALLOC alloca 346# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS 347# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 348 /* Use EXIT_SUCCESS as a witness for stdlib.h. */ 349# ifndef EXIT_SUCCESS 350# define EXIT_SUCCESS 0 351# endif 352# endif 353# endif 354# endif 355# endif 356 357# ifdef YYSTACK_ALLOC 358 /* Pacify GCC's 'empty if-body' warning. */ 359# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) 360# ifndef YYSTACK_ALLOC_MAXIMUM 361 /* The OS might guarantee only one guard page at the bottom of the stack, 362 and a page size can be as small as 4096 bytes. So we cannot safely 363 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number 364 to allow for a few compiler-allocated temporary stack slots. */ 365# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ 366# endif 367# else 368# define YYSTACK_ALLOC YYMALLOC 369# define YYSTACK_FREE YYFREE 370# ifndef YYSTACK_ALLOC_MAXIMUM 371# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM 372# endif 373# if (defined __cplusplus && ! defined EXIT_SUCCESS \ 374 && ! ((defined YYMALLOC || defined malloc) \ 375 && (defined YYFREE || defined free))) 376# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 377# ifndef EXIT_SUCCESS 378# define EXIT_SUCCESS 0 379# endif 380# endif 381# ifndef YYMALLOC 382# define YYMALLOC malloc 383# if ! defined malloc && ! defined EXIT_SUCCESS 384void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ 385# endif 386# endif 387# ifndef YYFREE 388# define YYFREE free 389# if ! defined free && ! defined EXIT_SUCCESS 390void free (void *); /* INFRINGES ON USER NAME SPACE */ 391# endif 392# endif 393# endif 394#endif /* !defined yyoverflow */ 395 396#if (! defined yyoverflow \ 397 && (! defined __cplusplus \ 398 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) 399 400/* A type that is properly aligned for any stack member. */ 401union yyalloc 402{ 403 yy_state_t yyss_alloc; 404 YYSTYPE yyvs_alloc; 405}; 406 407/* The size of the maximum gap between one aligned stack and the next. */ 408# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) 409 410/* The size of an array large to enough to hold all stacks, each with 411 N elements. */ 412# define YYSTACK_BYTES(N) \ 413 ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ 414 + YYSTACK_GAP_MAXIMUM) 415 416# define YYCOPY_NEEDED 1 417 418/* Relocate STACK from its old location to the new one. The 419 local variables YYSIZE and YYSTACKSIZE give the old and new number of 420 elements in the stack, and YYPTR gives the new location of the 421 stack. Advance YYPTR to a properly aligned location for the next 422 stack. */ 423# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ 424 do \ 425 { \ 426 YYPTRDIFF_T yynewbytes; \ 427 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ 428 Stack = &yyptr->Stack_alloc; \ 429 yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ 430 yyptr += yynewbytes / YYSIZEOF (*yyptr); \ 431 } \ 432 while (0) 433 434#endif 435 436#if defined YYCOPY_NEEDED && YYCOPY_NEEDED 437/* Copy COUNT objects from SRC to DST. The source and destination do 438 not overlap. */ 439# ifndef YYCOPY 440# if defined __GNUC__ && 1 < __GNUC__ 441# define YYCOPY(Dst, Src, Count) \ 442 __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) 443# else 444# define YYCOPY(Dst, Src, Count) \ 445 do \ 446 { \ 447 YYPTRDIFF_T yyi; \ 448 for (yyi = 0; yyi < (Count); yyi++) \ 449 (Dst)[yyi] = (Src)[yyi]; \ 450 } \ 451 while (0) 452# endif 453# endif 454#endif /* !YYCOPY_NEEDED */ 455 456/* YYFINAL -- State number of the termination state. */ 457#define YYFINAL 4 458/* YYLAST -- Last index in YYTABLE. */ 459#define YYLAST 23 460 461/* YYNTOKENS -- Number of terminals. */ 462#define YYNTOKENS 13 463/* YYNNTS -- Number of nonterminals. */ 464#define YYNNTS 14 465/* YYNRULES -- Number of rules. */ 466#define YYNRULES 21 467/* YYNSTATES -- Number of states. */ 468#define YYNSTATES 31 469 470/* YYMAXUTOK -- Last valid token kind. */ 471#define YYMAXUTOK 262 472 473 474/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM 475 as returned by yylex, with out-of-bounds checking. */ 476#define YYTRANSLATE(YYX) \ 477 (0 <= (YYX) && (YYX) <= YYMAXUTOK \ 478 ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ 479 : YYSYMBOL_YYUNDEF) 480 481/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM 482 as returned by yylex. */ 483static const yytype_int8 yytranslate[] = 484{ 485 0, 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 8, 9, 2, 2, 2, 2, 2, 2, 2, 2, 490 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 491 2, 2, 2, 2, 10, 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, 11, 2, 12, 2, 2, 2, 2, 498 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 499 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 500 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 501 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 502 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 503 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 504 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 505 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 506 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 507 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 508 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 509 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 510 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 511 5, 6, 7 512}; 513 514#if YYDEBUG 515/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ 516static const yytype_int8 yyrline[] = 517{ 518 0, 68, 68, 74, 88, 95, 96, 97, 97, 98, 519 99, 100, 101, 102, 103, 104, 105, 107, 111, 112, 520 113, 124 521}; 522#endif 523 524/** Accessing symbol of state STATE. */ 525#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) 526 527#if YYDEBUG || 0 528/* The user-facing name of the symbol whose (internal) number is 529 YYSYMBOL. No bounds checking. */ 530static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; 531 532/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. 533 First, the terminals, then, starting at YYNTOKENS, nonterminals. */ 534static const char *const yytname[] = 535{ 536 "\"end of file\"", "error", "\"invalid token\"", "INTEGER", "OCTAL", 537 "STRING", "FLAG_CBFS", "FLAG_PRESERVE", "'('", "')'", "'@'", "'{'", 538 "'}'", "$accept", "flash_chip", "flash_region", "region_name", 539 "region_flags_opt", "region_flags", "region_flag", "region_offset_opt", 540 "region_offset", "region_size_opt", "region_size", "region_list_opt", 541 "region_list", "region_list_entries", YY_NULLPTR 542}; 543 544static const char * 545yysymbol_name (yysymbol_kind_t yysymbol) 546{ 547 return yytname[yysymbol]; 548} 549#endif 550 551#define YYPACT_NINF (-12) 552 553#define yypact_value_is_default(Yyn) \ 554 ((Yyn) == YYPACT_NINF) 555 556#define YYTABLE_NINF (-1) 557 558#define yytable_value_is_error(Yyn) \ 559 0 560 561/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 562 STATE-NUM. */ 563static const yytype_int8 yypact[] = 564{ 565 -1, -12, 1, -2, -12, 2, 3, -12, -12, -12, 566 0, -1, -12, -12, 4, -5, -4, -2, -12, -12, 567 -12, -12, 5, -4, 3, -12, -12, 0, -12, -12, 568 -12 569}; 570 571/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. 572 Performed when YYTABLE does not specify something else to do. Zero 573 means the default is an error. */ 574static const yytype_int8 yydefact[] = 575{ 576 0, 4, 0, 11, 1, 0, 0, 12, 13, 16, 577 0, 0, 2, 20, 5, 0, 0, 11, 19, 21, 578 9, 10, 0, 7, 14, 6, 8, 17, 15, 3, 579 18 580}; 581 582/* YYPGOTO[NTERM-NUM]. */ 583static const yytype_int8 yypgoto[] = 584{ 585 -12, -12, -6, 10, -12, -10, -12, 6, -12, -12, 586 -9, -12, -11, -12 587}; 588 589/* YYDEFGOTO[NTERM-NUM]. */ 590static const yytype_int8 yydefgoto[] = 591{ 592 0, 2, 13, 14, 17, 22, 23, 6, 7, 27, 593 10, 29, 12, 15 594}; 595 596/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If 597 positive, shift that token. If negative, reduce the rule whose 598 number is the opposite. If YYTABLE_NINF, syntax error. */ 599static const yytype_int8 yytable[] = 600{ 601 1, 4, 20, 21, 1, 8, 9, 18, 5, 19, 602 3, 11, 16, 26, 25, 28, 30, 0, 0, 0, 603 0, 0, 0, 24 604}; 605 606static const yytype_int8 yycheck[] = 607{ 608 5, 0, 6, 7, 5, 3, 3, 12, 10, 15, 609 0, 11, 8, 23, 9, 24, 27, -1, -1, -1, 610 -1, -1, -1, 17 611}; 612 613/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of 614 state STATE-NUM. */ 615static const yytype_int8 yystos[] = 616{ 617 0, 5, 14, 16, 0, 10, 20, 21, 3, 3, 618 23, 11, 25, 15, 16, 26, 8, 17, 12, 15, 619 6, 7, 18, 19, 20, 9, 18, 22, 23, 24, 620 25 621}; 622 623/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ 624static const yytype_int8 yyr1[] = 625{ 626 0, 13, 14, 15, 16, 17, 17, 18, 18, 19, 627 19, 20, 20, 21, 22, 22, 23, 24, 24, 25, 628 26, 26 629}; 630 631/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ 632static const yytype_int8 yyr2[] = 633{ 634 0, 2, 4, 5, 1, 0, 3, 1, 2, 1, 635 1, 0, 1, 2, 0, 1, 1, 0, 1, 3, 636 1, 2 637}; 638 639 640enum { YYENOMEM = -2 }; 641 642#define yyerrok (yyerrstatus = 0) 643#define yyclearin (yychar = YYEMPTY) 644 645#define YYACCEPT goto yyacceptlab 646#define YYABORT goto yyabortlab 647#define YYERROR goto yyerrorlab 648#define YYNOMEM goto yyexhaustedlab 649 650 651#define YYRECOVERING() (!!yyerrstatus) 652 653#define YYBACKUP(Token, Value) \ 654 do \ 655 if (yychar == YYEMPTY) \ 656 { \ 657 yychar = (Token); \ 658 yylval = (Value); \ 659 YYPOPSTACK (yylen); \ 660 yystate = *yyssp; \ 661 goto yybackup; \ 662 } \ 663 else \ 664 { \ 665 yyerror (YY_("syntax error: cannot back up")); \ 666 YYERROR; \ 667 } \ 668 while (0) 669 670/* Backward compatibility with an undocumented macro. 671 Use YYerror or YYUNDEF. */ 672#define YYERRCODE YYUNDEF 673 674 675/* Enable debugging if requested. */ 676#if YYDEBUG 677 678# ifndef YYFPRINTF 679# include <stdio.h> /* INFRINGES ON USER NAME SPACE */ 680# define YYFPRINTF fprintf 681# endif 682 683# define YYDPRINTF(Args) \ 684do { \ 685 if (yydebug) \ 686 YYFPRINTF Args; \ 687} while (0) 688 689 690 691 692# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ 693do { \ 694 if (yydebug) \ 695 { \ 696 YYFPRINTF (stderr, "%s ", Title); \ 697 yy_symbol_print (stderr, \ 698 Kind, Value); \ 699 YYFPRINTF (stderr, "\n"); \ 700 } \ 701} while (0) 702 703 704/*-----------------------------------. 705| Print this symbol's value on YYO. | 706`-----------------------------------*/ 707 708static void 709yy_symbol_value_print (FILE *yyo, 710 yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) 711{ 712 FILE *yyoutput = yyo; 713 YY_USE (yyoutput); 714 if (!yyvaluep) 715 return; 716 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 717 YY_USE (yykind); 718 YY_IGNORE_MAYBE_UNINITIALIZED_END 719} 720 721 722/*---------------------------. 723| Print this symbol on YYO. | 724`---------------------------*/ 725 726static void 727yy_symbol_print (FILE *yyo, 728 yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) 729{ 730 YYFPRINTF (yyo, "%s %s (", 731 yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); 732 733 yy_symbol_value_print (yyo, yykind, yyvaluep); 734 YYFPRINTF (yyo, ")"); 735} 736 737/*------------------------------------------------------------------. 738| yy_stack_print -- Print the state stack from its BOTTOM up to its | 739| TOP (included). | 740`------------------------------------------------------------------*/ 741 742static void 743yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) 744{ 745 YYFPRINTF (stderr, "Stack now"); 746 for (; yybottom <= yytop; yybottom++) 747 { 748 int yybot = *yybottom; 749 YYFPRINTF (stderr, " %d", yybot); 750 } 751 YYFPRINTF (stderr, "\n"); 752} 753 754# define YY_STACK_PRINT(Bottom, Top) \ 755do { \ 756 if (yydebug) \ 757 yy_stack_print ((Bottom), (Top)); \ 758} while (0) 759 760 761/*------------------------------------------------. 762| Report that the YYRULE is going to be reduced. | 763`------------------------------------------------*/ 764 765static void 766yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, 767 int yyrule) 768{ 769 int yylno = yyrline[yyrule]; 770 int yynrhs = yyr2[yyrule]; 771 int yyi; 772 YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", 773 yyrule - 1, yylno); 774 /* The symbols being reduced. */ 775 for (yyi = 0; yyi < yynrhs; yyi++) 776 { 777 YYFPRINTF (stderr, " $%d = ", yyi + 1); 778 yy_symbol_print (stderr, 779 YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), 780 &yyvsp[(yyi + 1) - (yynrhs)]); 781 YYFPRINTF (stderr, "\n"); 782 } 783} 784 785# define YY_REDUCE_PRINT(Rule) \ 786do { \ 787 if (yydebug) \ 788 yy_reduce_print (yyssp, yyvsp, Rule); \ 789} while (0) 790 791/* Nonzero means print parse trace. It is left uninitialized so that 792 multiple parsers can coexist. */ 793int yydebug; 794#else /* !YYDEBUG */ 795# define YYDPRINTF(Args) ((void) 0) 796# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) 797# define YY_STACK_PRINT(Bottom, Top) 798# define YY_REDUCE_PRINT(Rule) 799#endif /* !YYDEBUG */ 800 801 802/* YYINITDEPTH -- initial size of the parser's stacks. */ 803#ifndef YYINITDEPTH 804# define YYINITDEPTH 200 805#endif 806 807/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only 808 if the built-in stack extension method is used). 809 810 Do not make this value too large; the results are undefined if 811 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) 812 evaluated with infinite-precision integer arithmetic. */ 813 814#ifndef YYMAXDEPTH 815# define YYMAXDEPTH 10000 816#endif 817 818 819 820 821 822 823/*-----------------------------------------------. 824| Release the memory associated to this symbol. | 825`-----------------------------------------------*/ 826 827static void 828yydestruct (const char *yymsg, 829 yysymbol_kind_t yykind, YYSTYPE *yyvaluep) 830{ 831 YY_USE (yyvaluep); 832 if (!yymsg) 833 yymsg = "Deleting"; 834 YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); 835 836 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 837 YY_USE (yykind); 838 YY_IGNORE_MAYBE_UNINITIALIZED_END 839} 840 841 842/* Lookahead token kind. */ 843int yychar; 844 845/* The semantic value of the lookahead symbol. */ 846YYSTYPE yylval; 847/* Number of syntax errors so far. */ 848int yynerrs; 849 850 851 852 853/*----------. 854| yyparse. | 855`----------*/ 856 857int 858yyparse (void) 859{ 860 yy_state_fast_t yystate = 0; 861 /* Number of tokens to shift before error messages enabled. */ 862 int yyerrstatus = 0; 863 864 /* Refer to the stacks through separate pointers, to allow yyoverflow 865 to reallocate them elsewhere. */ 866 867 /* Their size. */ 868 YYPTRDIFF_T yystacksize = YYINITDEPTH; 869 870 /* The state stack: array, bottom, top. */ 871 yy_state_t yyssa[YYINITDEPTH]; 872 yy_state_t *yyss = yyssa; 873 yy_state_t *yyssp = yyss; 874 875 /* The semantic value stack: array, bottom, top. */ 876 YYSTYPE yyvsa[YYINITDEPTH]; 877 YYSTYPE *yyvs = yyvsa; 878 YYSTYPE *yyvsp = yyvs; 879 880 int yyn; 881 /* The return value of yyparse. */ 882 int yyresult; 883 /* Lookahead symbol kind. */ 884 yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; 885 /* The variables used to return semantic value and location from the 886 action routines. */ 887 YYSTYPE yyval; 888 889 890 891#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) 892 893 /* The number of symbols on the RHS of the reduced rule. 894 Keep to zero when no symbol should be popped. */ 895 int yylen = 0; 896 897 YYDPRINTF ((stderr, "Starting parse\n")); 898 899 yychar = YYEMPTY; /* Cause a token to be read. */ 900 901 goto yysetstate; 902 903 904/*------------------------------------------------------------. 905| yynewstate -- push a new state, which is found in yystate. | 906`------------------------------------------------------------*/ 907yynewstate: 908 /* In all cases, when you get here, the value and location stacks 909 have just been pushed. So pushing a state here evens the stacks. */ 910 yyssp++; 911 912 913/*--------------------------------------------------------------------. 914| yysetstate -- set current state (the top of the stack) to yystate. | 915`--------------------------------------------------------------------*/ 916yysetstate: 917 YYDPRINTF ((stderr, "Entering state %d\n", yystate)); 918 YY_ASSERT (0 <= yystate && yystate < YYNSTATES); 919 YY_IGNORE_USELESS_CAST_BEGIN 920 *yyssp = YY_CAST (yy_state_t, yystate); 921 YY_IGNORE_USELESS_CAST_END 922 YY_STACK_PRINT (yyss, yyssp); 923 924 if (yyss + yystacksize - 1 <= yyssp) 925#if !defined yyoverflow && !defined YYSTACK_RELOCATE 926 YYNOMEM; 927#else 928 { 929 /* Get the current used size of the three stacks, in elements. */ 930 YYPTRDIFF_T yysize = yyssp - yyss + 1; 931 932# if defined yyoverflow 933 { 934 /* Give user a chance to reallocate the stack. Use copies of 935 these so that the &'s don't force the real ones into 936 memory. */ 937 yy_state_t *yyss1 = yyss; 938 YYSTYPE *yyvs1 = yyvs; 939 940 /* Each stack pointer address is followed by the size of the 941 data in use in that stack, in bytes. This used to be a 942 conditional around just the two extra args, but that might 943 be undefined if yyoverflow is a macro. */ 944 yyoverflow (YY_("memory exhausted"), 945 &yyss1, yysize * YYSIZEOF (*yyssp), 946 &yyvs1, yysize * YYSIZEOF (*yyvsp), 947 &yystacksize); 948 yyss = yyss1; 949 yyvs = yyvs1; 950 } 951# else /* defined YYSTACK_RELOCATE */ 952 /* Extend the stack our own way. */ 953 if (YYMAXDEPTH <= yystacksize) 954 YYNOMEM; 955 yystacksize *= 2; 956 if (YYMAXDEPTH < yystacksize) 957 yystacksize = YYMAXDEPTH; 958 959 { 960 yy_state_t *yyss1 = yyss; 961 union yyalloc *yyptr = 962 YY_CAST (union yyalloc *, 963 YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); 964 if (! yyptr) 965 YYNOMEM; 966 YYSTACK_RELOCATE (yyss_alloc, yyss); 967 YYSTACK_RELOCATE (yyvs_alloc, yyvs); 968# undef YYSTACK_RELOCATE 969 if (yyss1 != yyssa) 970 YYSTACK_FREE (yyss1); 971 } 972# endif 973 974 yyssp = yyss + yysize - 1; 975 yyvsp = yyvs + yysize - 1; 976 977 YY_IGNORE_USELESS_CAST_BEGIN 978 YYDPRINTF ((stderr, "Stack size increased to %ld\n", 979 YY_CAST (long, yystacksize))); 980 YY_IGNORE_USELESS_CAST_END 981 982 if (yyss + yystacksize - 1 <= yyssp) 983 YYABORT; 984 } 985#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ 986 987 988 if (yystate == YYFINAL) 989 YYACCEPT; 990 991 goto yybackup; 992 993 994/*-----------. 995| yybackup. | 996`-----------*/ 997yybackup: 998 /* Do appropriate processing given the current state. Read a 999 lookahead token if we need one and don't already have one. */ 1000 1001 /* First try to decide what to do without reference to lookahead token. */ 1002 yyn = yypact[yystate]; 1003 if (yypact_value_is_default (yyn)) 1004 goto yydefault; 1005 1006 /* Not known => get a lookahead token if don't already have one. */ 1007 1008 /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ 1009 if (yychar == YYEMPTY) 1010 { 1011 YYDPRINTF ((stderr, "Reading a token\n")); 1012 yychar = yylex (); 1013 } 1014 1015 if (yychar <= YYEOF) 1016 { 1017 yychar = YYEOF; 1018 yytoken = YYSYMBOL_YYEOF; 1019 YYDPRINTF ((stderr, "Now at end of input.\n")); 1020 } 1021 else if (yychar == YYerror) 1022 { 1023 /* The scanner already issued an error message, process directly 1024 to error recovery. But do not keep the error token as 1025 lookahead, it is too special and may lead us to an endless 1026 loop in error recovery. */ 1027 yychar = YYUNDEF; 1028 yytoken = YYSYMBOL_YYerror; 1029 goto yyerrlab1; 1030 } 1031 else 1032 { 1033 yytoken = YYTRANSLATE (yychar); 1034 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); 1035 } 1036 1037 /* If the proper action on seeing token YYTOKEN is to reduce or to 1038 detect an error, take that action. */ 1039 yyn += yytoken; 1040 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) 1041 goto yydefault; 1042 yyn = yytable[yyn]; 1043 if (yyn <= 0) 1044 { 1045 if (yytable_value_is_error (yyn)) 1046 goto yyerrlab; 1047 yyn = -yyn; 1048 goto yyreduce; 1049 } 1050 1051 /* Count tokens shifted since error; after three, turn off error 1052 status. */ 1053 if (yyerrstatus) 1054 yyerrstatus--; 1055 1056 /* Shift the lookahead token. */ 1057 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); 1058 yystate = yyn; 1059 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 1060 *++yyvsp = yylval; 1061 YY_IGNORE_MAYBE_UNINITIALIZED_END 1062 1063 /* Discard the shifted token. */ 1064 yychar = YYEMPTY; 1065 goto yynewstate; 1066 1067 1068/*-----------------------------------------------------------. 1069| yydefault -- do the default action for the current state. | 1070`-----------------------------------------------------------*/ 1071yydefault: 1072 yyn = yydefact[yystate]; 1073 if (yyn == 0) 1074 goto yyerrlab; 1075 goto yyreduce; 1076 1077 1078/*-----------------------------. 1079| yyreduce -- do a reduction. | 1080`-----------------------------*/ 1081yyreduce: 1082 /* yyn is the number of a rule to reduce with. */ 1083 yylen = yyr2[yyn]; 1084 1085 /* If YYLEN is nonzero, implement the default value of the action: 1086 '$$ = $1'. 1087 1088 Otherwise, the following line sets YYVAL to garbage. 1089 This behavior is undocumented and Bison 1090 users should not rely upon it. Assigning to YYVAL 1091 unconditionally makes the parser a bit smaller, and it avoids a 1092 GCC warning that YYVAL may be used uninitialized. */ 1093 yyval = yyvsp[1-yylen]; 1094 1095 1096 YY_REDUCE_PRINT (yyn); 1097 switch (yyn) 1098 { 1099 case 2: /* flash_chip: region_name region_offset_opt region_size region_list */ 1100{ 1101 union flashmap_flags flags = { .v=0 }; 1102 if (!(res = parse_descriptor((yyvsp[-3].strval), flags, (yyvsp[-2].maybe_intval), (yyvsp[-1].maybe_intval), (yyvsp[0].region_listhdr)))) 1103 YYABORT; 1104} 1105 break; 1106 1107 case 3: /* flash_region: region_name region_flags_opt region_offset_opt region_size_opt region_list_opt */ 1108{ 1109 struct flashmap_descriptor *node = parse_descriptor((yyvsp[-4].strval), (yyvsp[-3].flags), (yyvsp[-2].maybe_intval), (yyvsp[-1].maybe_intval), (yyvsp[0].region_listhdr)); 1110 if (!node) 1111 YYABORT; 1112 1113 if (node->flags.f.cbfs && !fmd_process_flag_cbfs(node)) { 1114 ERROR("Section '%s' cannot have flag 'CBFS''\n", node->name); 1115 YYABORT; 1116 } 1117 1118 (yyval.region_ptr) = node; 1119} 1120 break; 1121 1122 case 4: /* region_name: STRING */ 1123{ 1124 if (!(yyvsp[0].strval)) { 1125 perror("E: While allocating section name"); 1126 YYABORT; 1127 } 1128} 1129 break; 1130 1131 case 5: /* region_flags_opt: %empty */ 1132 { (yyval.flags) = (union flashmap_flags){ .v=0 }; } 1133 break; 1134 1135 case 6: /* region_flags_opt: '(' region_flags ')' */ 1136 { (yyval.flags) = (yyvsp[-1].flags); } 1137 break; 1138 1139 case 8: /* region_flags: region_flag region_flags */ 1140 { (yyval.flags).v = (yyvsp[-1].flags).v | (yyvsp[0].flags).v; } 1141 break; 1142 1143 case 9: /* region_flag: FLAG_CBFS */ 1144 { (yyval.flags).v = 0; (yyval.flags).f.cbfs = 1; } 1145 break; 1146 1147 case 10: /* region_flag: FLAG_PRESERVE */ 1148 { (yyval.flags).v = 0; (yyval.flags).f.preserve = 1; } 1149 break; 1150 1151 case 11: /* region_offset_opt: %empty */ 1152 { (yyval.maybe_intval) = (struct unsigned_option){false, 0}; } 1153 break; 1154 1155 case 13: /* region_offset: '@' INTEGER */ 1156 { (yyval.maybe_intval) = (struct unsigned_option){true, (yyvsp[0].intval)}; } 1157 break; 1158 1159 case 14: /* region_size_opt: %empty */ 1160 { (yyval.maybe_intval) = (struct unsigned_option){false, 0}; } 1161 break; 1162 1163 case 16: /* region_size: INTEGER */ 1164 { (yyval.maybe_intval) = (struct unsigned_option){true, (yyvsp[0].intval)}; } 1165 break; 1166 1167 case 17: /* region_list_opt: %empty */ 1168{ 1169 (yyval.region_listhdr) = (struct descriptor_list) 1170 {.len = 0, .head = NULL, .tail = NULL}; 1171} 1172 break; 1173 1174 case 19: /* region_list: '{' region_list_entries '}' */ 1175 { (yyval.region_listhdr) = (yyvsp[-1].region_listhdr); } 1176 break; 1177 1178 case 20: /* region_list_entries: flash_region */ 1179{ 1180 struct descriptor_node *node = malloc(sizeof(*node)); 1181 if (!node) { 1182 perror("E: While allocating linked list node"); 1183 YYABORT; 1184 } 1185 node->val = (yyvsp[0].region_ptr); 1186 node->next = NULL; 1187 (yyval.region_listhdr) = (struct descriptor_list){.len = 1, .head = node, .tail = node}; 1188} 1189 break; 1190 1191 case 21: /* region_list_entries: region_list_entries flash_region */ 1192{ 1193 struct descriptor_node *node = malloc(sizeof(*node)); 1194 if (!node) { 1195 perror("E: While allocating linked list node"); 1196 YYABORT; 1197 } 1198 node->val = (yyvsp[0].region_ptr); 1199 node->next = NULL; 1200 1201 (yyvsp[-1].region_listhdr).tail->next = node; 1202 (yyval.region_listhdr) = (struct descriptor_list) 1203 {.len = (yyvsp[-1].region_listhdr).len + 1, .head = (yyvsp[-1].region_listhdr).head, .tail = node}; 1204} 1205 break; 1206 1207 1208 1209 default: break; 1210 } 1211 /* User semantic actions sometimes alter yychar, and that requires 1212 that yytoken be updated with the new translation. We take the 1213 approach of translating immediately before every use of yytoken. 1214 One alternative is translating here after every semantic action, 1215 but that translation would be missed if the semantic action invokes 1216 YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or 1217 if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an 1218 incorrect destructor might then be invoked immediately. In the 1219 case of YYERROR or YYBACKUP, subsequent parser actions might lead 1220 to an incorrect destructor call or verbose syntax error message 1221 before the lookahead is translated. */ 1222 YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); 1223 1224 YYPOPSTACK (yylen); 1225 yylen = 0; 1226 1227 *++yyvsp = yyval; 1228 1229 /* Now 'shift' the result of the reduction. Determine what state 1230 that goes to, based on the state we popped back to and the rule 1231 number reduced by. */ 1232 { 1233 const int yylhs = yyr1[yyn] - YYNTOKENS; 1234 const int yyi = yypgoto[yylhs] + *yyssp; 1235 yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp 1236 ? yytable[yyi] 1237 : yydefgoto[yylhs]); 1238 } 1239 1240 goto yynewstate; 1241 1242 1243/*--------------------------------------. 1244| yyerrlab -- here on detecting error. | 1245`--------------------------------------*/ 1246yyerrlab: 1247 /* Make sure we have latest lookahead translation. See comments at 1248 user semantic actions for why this is necessary. */ 1249 yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); 1250 /* If not already recovering from an error, report this error. */ 1251 if (!yyerrstatus) 1252 { 1253 ++yynerrs; 1254 yyerror (YY_("syntax error")); 1255 } 1256 1257 if (yyerrstatus == 3) 1258 { 1259 /* If just tried and failed to reuse lookahead token after an 1260 error, discard it. */ 1261 1262 if (yychar <= YYEOF) 1263 { 1264 /* Return failure if at end of input. */ 1265 if (yychar == YYEOF) 1266 YYABORT; 1267 } 1268 else 1269 { 1270 yydestruct ("Error: discarding", 1271 yytoken, &yylval); 1272 yychar = YYEMPTY; 1273 } 1274 } 1275 1276 /* Else will try to reuse lookahead token after shifting the error 1277 token. */ 1278 goto yyerrlab1; 1279 1280 1281/*---------------------------------------------------. 1282| yyerrorlab -- error raised explicitly by YYERROR. | 1283`---------------------------------------------------*/ 1284yyerrorlab: 1285 /* Pacify compilers when the user code never invokes YYERROR and the 1286 label yyerrorlab therefore never appears in user code. */ 1287 if (0) 1288 YYERROR; 1289 ++yynerrs; 1290 1291 /* Do not reclaim the symbols of the rule whose action triggered 1292 this YYERROR. */ 1293 YYPOPSTACK (yylen); 1294 yylen = 0; 1295 YY_STACK_PRINT (yyss, yyssp); 1296 yystate = *yyssp; 1297 goto yyerrlab1; 1298 1299 1300/*-------------------------------------------------------------. 1301| yyerrlab1 -- common code for both syntax error and YYERROR. | 1302`-------------------------------------------------------------*/ 1303yyerrlab1: 1304 yyerrstatus = 3; /* Each real token shifted decrements this. */ 1305 1306 /* Pop stack until we find a state that shifts the error token. */ 1307 for (;;) 1308 { 1309 yyn = yypact[yystate]; 1310 if (!yypact_value_is_default (yyn)) 1311 { 1312 yyn += YYSYMBOL_YYerror; 1313 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) 1314 { 1315 yyn = yytable[yyn]; 1316 if (0 < yyn) 1317 break; 1318 } 1319 } 1320 1321 /* Pop the current state because it cannot handle the error token. */ 1322 if (yyssp == yyss) 1323 YYABORT; 1324 1325 1326 yydestruct ("Error: popping", 1327 YY_ACCESSING_SYMBOL (yystate), yyvsp); 1328 YYPOPSTACK (1); 1329 yystate = *yyssp; 1330 YY_STACK_PRINT (yyss, yyssp); 1331 } 1332 1333 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 1334 *++yyvsp = yylval; 1335 YY_IGNORE_MAYBE_UNINITIALIZED_END 1336 1337 1338 /* Shift the error token. */ 1339 YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); 1340 1341 yystate = yyn; 1342 goto yynewstate; 1343 1344 1345/*-------------------------------------. 1346| yyacceptlab -- YYACCEPT comes here. | 1347`-------------------------------------*/ 1348yyacceptlab: 1349 yyresult = 0; 1350 goto yyreturnlab; 1351 1352 1353/*-----------------------------------. 1354| yyabortlab -- YYABORT comes here. | 1355`-----------------------------------*/ 1356yyabortlab: 1357 yyresult = 1; 1358 goto yyreturnlab; 1359 1360 1361/*-----------------------------------------------------------. 1362| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. | 1363`-----------------------------------------------------------*/ 1364yyexhaustedlab: 1365 yyerror (YY_("memory exhausted")); 1366 yyresult = 2; 1367 goto yyreturnlab; 1368 1369 1370/*----------------------------------------------------------. 1371| yyreturnlab -- parsing is finished, clean up and return. | 1372`----------------------------------------------------------*/ 1373yyreturnlab: 1374 if (yychar != YYEMPTY) 1375 { 1376 /* Make sure we have latest lookahead translation. See comments at 1377 user semantic actions for why this is necessary. */ 1378 yytoken = YYTRANSLATE (yychar); 1379 yydestruct ("Cleanup: discarding lookahead", 1380 yytoken, &yylval); 1381 } 1382 /* Do not reclaim the symbols of the rule whose action triggered 1383 this YYABORT or YYACCEPT. */ 1384 YYPOPSTACK (yylen); 1385 YY_STACK_PRINT (yyss, yyssp); 1386 while (yyssp != yyss) 1387 { 1388 yydestruct ("Cleanup: popping", 1389 YY_ACCESSING_SYMBOL (+*yyssp), yyvsp); 1390 YYPOPSTACK (1); 1391 } 1392#ifndef yyoverflow 1393 if (yyss != yyssa) 1394 YYSTACK_FREE (yyss); 1395#endif 1396 1397 return yyresult; 1398} 1399 1400 1401 1402struct flashmap_descriptor *parse_descriptor( 1403 char *name, union flashmap_flags flags, struct unsigned_option offset, 1404 struct unsigned_option size, struct descriptor_list children) 1405{ 1406 struct flashmap_descriptor *region = malloc(sizeof(*region)); 1407 if (!region) { 1408 perror("E: While allocating descriptor section"); 1409 return NULL; 1410 } 1411 region->name = name; 1412 region->flags = flags; 1413 region->offset_known = offset.val_known; 1414 region->offset = offset.val; 1415 region->size_known = size.val_known; 1416 region->size = size.val; 1417 region->list_len = children.len; 1418 if (region->list_len) { 1419 region->list = malloc(region->list_len * sizeof(*region->list)); 1420 if (!region->list) { 1421 perror("E: While allocating node children array"); 1422 return NULL; 1423 } 1424 struct descriptor_node *cur_node = children.head; 1425 for (unsigned idx = 0; idx < region->list_len; ++idx) { 1426 region->list[idx] = cur_node->val; 1427 1428 struct descriptor_node *next_node = cur_node->next; 1429 free(cur_node); 1430 cur_node = next_node; 1431 } 1432 } else { 1433 region->list = NULL; 1434 } 1435 return region; 1436} 1437 1438void yyerror(const char *s) 1439{ 1440 fprintf(stderr, "%s\n", s); 1441} 1442