dtc-parser.tab.c_shipped 70.9 KB
Newer Older
1
/* A Bison parser, made by GNU Bison 3.0.4.  */
S
Stephen Warren 已提交
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
D
David Gibson 已提交
8
   it under the terms of the GNU General Public License as published by
9 10
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.
11

D
David Gibson 已提交
12 13 14 15
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
16

D
David Gibson 已提交
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/>.  */
D
David Gibson 已提交
19 20 21 22 23 24 25 26 27 28

/* As a special exception, you may create a larger work that contains
   part or all of the Bison parser skeleton and distribute that work
   under terms of your choice, so long as that work isn't itself a
   parser generator using the skeleton or a modified version thereof
   as a parser skeleton.  Alternatively, if you modify or redistribute
   the parser skeleton itself, you may (at your option) remove this
   special exception, which will cause the skeleton and the resulting
   Bison output files to be licensed under the GNU General Public
   License without this special exception.
29

D
David Gibson 已提交
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
   This special exception was added by the Free Software Foundation in
   version 2.2 of Bison.  */

/* C LALR(1) parser skeleton written by Richard Stallman, by
   simplifying the original so-called "semantic" parser.  */

/* All symbols defined below should begin with yy or YY, to avoid
   infringing on user name space.  This should be done even for local
   variables, as they might otherwise be expanded by user macros.
   There are some unavoidable exceptions within include files to
   define necessary library symbols; they are noted "INFRINGES ON
   USER NAME SPACE" below.  */

/* Identify Bison output.  */
#define YYBISON 1

/* Bison version.  */
47
#define YYBISON_VERSION "3.0.4"
D
David Gibson 已提交
48 49 50 51 52 53 54

/* Skeleton name.  */
#define YYSKELETON_NAME "yacc.c"

/* Pure parsers.  */
#define YYPURE 0

55 56
/* Push parsers.  */
#define YYPUSH 0
D
David Gibson 已提交
57

58 59
/* Pull parsers.  */
#define YYPULL 1
D
David Gibson 已提交
60 61 62 63 64




/* Copy the first part of user declarations.  */
65
#line 20 "dtc-parser.y" /* yacc.c:339  */
D
David Gibson 已提交
66

67
#include <stdio.h>
68
#include <inttypes.h>
69

D
David Gibson 已提交
70 71 72
#include "dtc.h"
#include "srcpos.h"

73
extern int yylex(void);
74
extern void yyerror(char const *s);
75 76 77 78 79
#define ERROR(loc, ...) \
	do { \
		srcpos_error((loc), "Error", __VA_ARGS__); \
		treesource_error = true; \
	} while (0)
D
David Gibson 已提交
80

81
extern struct dt_info *parser_output;
82
extern bool treesource_error;
D
David Gibson 已提交
83

84
#line 85 "dtc-parser.tab.c" /* yacc.c:339  */
D
David Gibson 已提交
85

86
# ifndef YY_NULLPTR
87
#  if defined __cplusplus && 201103L <= __cplusplus
88
#   define YY_NULLPTR nullptr
89
#  else
90
#   define YY_NULLPTR 0
91 92
#  endif
# endif
D
David Gibson 已提交
93 94 95 96 97 98 99 100 101

/* Enabling verbose error messages.  */
#ifdef YYERROR_VERBOSE
# undef YYERROR_VERBOSE
# define YYERROR_VERBOSE 1
#else
# define YYERROR_VERBOSE 0
#endif

102 103 104 105
/* In a future release of Bison, this section will be replaced
   by #include "dtc-parser.tab.h".  */
#ifndef YY_YY_DTC_PARSER_TAB_H_INCLUDED
# define YY_YY_DTC_PARSER_TAB_H_INCLUDED
106
/* Debug traces.  */
107 108 109 110 111
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
#if YYDEBUG
extern int yydebug;
D
David Gibson 已提交
112
#endif
113

114
/* Token type.  */
115 116
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
117 118 119
  enum yytokentype
  {
    DT_V1 = 258,
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
    DT_PLUGIN = 259,
    DT_MEMRESERVE = 260,
    DT_LSHIFT = 261,
    DT_RSHIFT = 262,
    DT_LE = 263,
    DT_GE = 264,
    DT_EQ = 265,
    DT_NE = 266,
    DT_AND = 267,
    DT_OR = 268,
    DT_BITS = 269,
    DT_DEL_PROP = 270,
    DT_DEL_NODE = 271,
    DT_PROPNODENAME = 272,
    DT_LITERAL = 273,
    DT_CHAR_LITERAL = 274,
    DT_BYTE = 275,
    DT_STRING = 276,
    DT_LABEL = 277,
    DT_REF = 278,
    DT_INCBIN = 279
141
  };
142 143
#endif

144
/* Value type.  */
D
David Gibson 已提交
145
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
146

147
union YYSTYPE
D
David Gibson 已提交
148
{
149
#line 39 "dtc-parser.y" /* yacc.c:355  */
150

D
David Gibson 已提交
151 152
	char *propnodename;
	char *labelref;
153
	uint8_t byte;
D
David Gibson 已提交
154 155
	struct data data;

S
Stephen Warren 已提交
156 157 158 159 160
	struct {
		struct data	data;
		int		bits;
	} array;

D
David Gibson 已提交
161 162 163 164 165
	struct property *prop;
	struct property *proplist;
	struct node *node;
	struct node *nodelist;
	struct reserve_info *re;
S
Stephen Warren 已提交
166
	uint64_t integer;
167
	unsigned int flags;
168

169
#line 170 "dtc-parser.tab.c" /* yacc.c:355  */
170
};
171 172

typedef union YYSTYPE YYSTYPE;
173
# define YYSTYPE_IS_TRIVIAL 1
D
David Gibson 已提交
174 175 176
# define YYSTYPE_IS_DECLARED 1
#endif

177 178 179 180 181 182 183 184 185 186 187 188
/* Location type.  */
#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
typedef struct YYLTYPE YYLTYPE;
struct YYLTYPE
{
  int first_line;
  int first_column;
  int last_line;
  int last_column;
};
# define YYLTYPE_IS_DECLARED 1
# define YYLTYPE_IS_TRIVIAL 1
189
#endif
190 191 192 193


extern YYSTYPE yylval;
extern YYLTYPE yylloc;
194
int yyparse (void);
D
David Gibson 已提交
195

196
#endif /* !YY_YY_DTC_PARSER_TAB_H_INCLUDED  */
D
David Gibson 已提交
197

198 199
/* Copy the second part of user declarations.  */

200
#line 201 "dtc-parser.tab.c" /* yacc.c:358  */
D
David Gibson 已提交
201 202 203 204 205 206 207 208 209 210 211 212 213 214

#ifdef short
# undef short
#endif

#ifdef YYTYPE_UINT8
typedef YYTYPE_UINT8 yytype_uint8;
#else
typedef unsigned char yytype_uint8;
#endif

#ifdef YYTYPE_INT8
typedef YYTYPE_INT8 yytype_int8;
#else
215
typedef signed char yytype_int8;
D
David Gibson 已提交
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234
#endif

#ifdef YYTYPE_UINT16
typedef YYTYPE_UINT16 yytype_uint16;
#else
typedef unsigned short int yytype_uint16;
#endif

#ifdef YYTYPE_INT16
typedef YYTYPE_INT16 yytype_int16;
#else
typedef short int yytype_int16;
#endif

#ifndef YYSIZE_T
# ifdef __SIZE_TYPE__
#  define YYSIZE_T __SIZE_TYPE__
# elif defined size_t
#  define YYSIZE_T size_t
235
# elif ! defined YYSIZE_T
D
David Gibson 已提交
236 237 238 239 240 241 242 243 244 245
#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
#  define YYSIZE_T size_t
# else
#  define YYSIZE_T unsigned int
# endif
#endif

#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)

#ifndef YY_
246
# if defined YYENABLE_NLS && YYENABLE_NLS
D
David Gibson 已提交
247 248
#  if ENABLE_NLS
#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
249
#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
D
David Gibson 已提交
250 251 252
#  endif
# endif
# ifndef YY_
253 254 255 256
#  define YY_(Msgid) Msgid
# endif
#endif

257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280
#ifndef YY_ATTRIBUTE
# if (defined __GNUC__                                               \
      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
# else
#  define YY_ATTRIBUTE(Spec) /* empty */
# endif
#endif

#ifndef YY_ATTRIBUTE_PURE
# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
#endif

#ifndef YY_ATTRIBUTE_UNUSED
# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
#endif

#if !defined _Noreturn \
     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
# if defined _MSC_VER && 1200 <= _MSC_VER
#  define _Noreturn __declspec (noreturn)
# else
#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
D
David Gibson 已提交
281 282 283 284 285
# endif
#endif

/* Suppress unused-variable warnings by "using" E.  */
#if ! defined lint || defined __GNUC__
286
# define YYUSE(E) ((void) (E))
D
David Gibson 已提交
287
#else
288
# define YYUSE(E) /* empty */
D
David Gibson 已提交
289 290
#endif

291 292 293 294 295 296 297 298
#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
    _Pragma ("GCC diagnostic push") \
    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
    _Pragma ("GCC diagnostic pop")
D
David Gibson 已提交
299
#else
300
# define YY_INITIAL_VALUE(Value) Value
D
David Gibson 已提交
301
#endif
302 303 304 305 306 307
#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
# define YY_IGNORE_MAYBE_UNINITIALIZED_END
#endif
#ifndef YY_INITIAL_VALUE
# define YY_INITIAL_VALUE(Value) /* Nothing. */
D
David Gibson 已提交
308 309
#endif

310

D
David Gibson 已提交
311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327
#if ! defined yyoverflow || YYERROR_VERBOSE

/* The parser invokes alloca or malloc; define the necessary symbols.  */

# ifdef YYSTACK_USE_ALLOCA
#  if YYSTACK_USE_ALLOCA
#   ifdef __GNUC__
#    define YYSTACK_ALLOC __builtin_alloca
#   elif defined __BUILTIN_VA_ARG_INCR
#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
#   elif defined _AIX
#    define YYSTACK_ALLOC __alloca
#   elif defined _MSC_VER
#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
#    define alloca _alloca
#   else
#    define YYSTACK_ALLOC alloca
328
#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
D
David Gibson 已提交
329
#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
330
      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
331 332
#     ifndef EXIT_SUCCESS
#      define EXIT_SUCCESS 0
D
David Gibson 已提交
333 334 335 336 337 338 339
#     endif
#    endif
#   endif
#  endif
# endif

# ifdef YYSTACK_ALLOC
340 341
   /* Pacify GCC's 'empty if-body' warning.  */
#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
D
David Gibson 已提交
342 343 344 345 346 347 348 349 350 351 352 353 354
#  ifndef YYSTACK_ALLOC_MAXIMUM
    /* The OS might guarantee only one guard page at the bottom of the stack,
       and a page size can be as small as 4096 bytes.  So we cannot safely
       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
       to allow for a few compiler-allocated temporary stack slots.  */
#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
#  endif
# else
#  define YYSTACK_ALLOC YYMALLOC
#  define YYSTACK_FREE YYFREE
#  ifndef YYSTACK_ALLOC_MAXIMUM
#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
#  endif
355
#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
D
David Gibson 已提交
356
       && ! ((defined YYMALLOC || defined malloc) \
357
             && (defined YYFREE || defined free)))
D
David Gibson 已提交
358
#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
359 360
#   ifndef EXIT_SUCCESS
#    define EXIT_SUCCESS 0
D
David Gibson 已提交
361 362 363 364
#   endif
#  endif
#  ifndef YYMALLOC
#   define YYMALLOC malloc
365
#   if ! defined malloc && ! defined EXIT_SUCCESS
D
David Gibson 已提交
366 367 368 369 370
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
#   endif
#  endif
#  ifndef YYFREE
#   define YYFREE free
371
#   if ! defined free && ! defined EXIT_SUCCESS
D
David Gibson 已提交
372 373 374 375 376 377 378 379 380
void free (void *); /* INFRINGES ON USER NAME SPACE */
#   endif
#  endif
# endif
#endif /* ! defined yyoverflow || YYERROR_VERBOSE */


#if (! defined yyoverflow \
     && (! defined __cplusplus \
381 382
         || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
             && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
D
David Gibson 已提交
383 384 385 386

/* A type that is properly aligned for any stack member.  */
union yyalloc
{
387 388
  yytype_int16 yyss_alloc;
  YYSTYPE yyvs_alloc;
389
  YYLTYPE yyls_alloc;
D
David Gibson 已提交
390 391 392 393 394 395 396 397
};

/* The size of the maximum gap between one aligned stack and the next.  */
# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)

/* The size of an array large to enough to hold all stacks, each with
   N elements.  */
# define YYSTACK_BYTES(N) \
398 399
     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
      + 2 * YYSTACK_GAP_MAXIMUM)
D
David Gibson 已提交
400

401
# define YYCOPY_NEEDED 1
D
David Gibson 已提交
402 403 404 405 406 407

/* Relocate STACK from its old location to the new one.  The
   local variables YYSIZE and YYSTACKSIZE give the old and new number of
   elements in the stack, and YYPTR gives the new location of the
   stack.  Advance YYPTR to a properly aligned location for the next
   stack.  */
408 409 410 411 412 413 414 415 416 417
# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
    do                                                                  \
      {                                                                 \
        YYSIZE_T yynewbytes;                                            \
        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
        Stack = &yyptr->Stack_alloc;                                    \
        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
        yyptr += yynewbytes / sizeof (*yyptr);                          \
      }                                                                 \
    while (0)
D
David Gibson 已提交
418 419 420

#endif

421
#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
422
/* Copy COUNT objects from SRC to DST.  The source and destination do
423 424 425
   not overlap.  */
# ifndef YYCOPY
#  if defined __GNUC__ && 1 < __GNUC__
426 427
#   define YYCOPY(Dst, Src, Count) \
      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
428
#  else
429 430 431 432 433 434 435
#   define YYCOPY(Dst, Src, Count)              \
      do                                        \
        {                                       \
          YYSIZE_T yyi;                         \
          for (yyi = 0; yyi < (Count); yyi++)   \
            (Dst)[yyi] = (Src)[yyi];            \
        }                                       \
436
      while (0)
437 438 439 440
#  endif
# endif
#endif /* !YYCOPY_NEEDED */

D
David Gibson 已提交
441
/* YYFINAL -- State number of the termination state.  */
442
#define YYFINAL  6
D
David Gibson 已提交
443
/* YYLAST -- Last index in YYTABLE.  */
444
#define YYLAST   138
D
David Gibson 已提交
445 446

/* YYNTOKENS -- Number of terminals.  */
447
#define YYNTOKENS  48
D
David Gibson 已提交
448
/* YYNNTS -- Number of nonterminals.  */
449
#define YYNNTS  30
D
David Gibson 已提交
450
/* YYNRULES -- Number of rules.  */
451
#define YYNRULES  85
452
/* YYNSTATES -- Number of states.  */
453
#define YYNSTATES  149
D
David Gibson 已提交
454

455 456
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
   by yylex, with out-of-bounds checking.  */
D
David Gibson 已提交
457
#define YYUNDEFTOK  2
458
#define YYMAXUTOK   279
D
David Gibson 已提交
459

460
#define YYTRANSLATE(YYX)                                                \
D
David Gibson 已提交
461 462
  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)

463 464
/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
   as returned by yylex, without out-of-bounds checking.  */
D
David Gibson 已提交
465 466 467 468 469
static const yytype_uint8 yytranslate[] =
{
       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
470 471 472 473
       2,     2,     2,    47,     2,     2,     2,    45,    41,     2,
      33,    35,    44,    42,    34,    43,     2,    26,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,    38,    25,
      36,    29,    30,    37,     2,     2,     2,     2,     2,     2,
D
David Gibson 已提交
474 475
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
476
       2,    31,     2,    32,    40,     2,     2,     2,     2,     2,
D
David Gibson 已提交
477 478
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
479
       2,     2,     2,    27,    39,    28,    46,     2,     2,     2,
D
David Gibson 已提交
480 481 482 483 484 485 486 487 488 489 490 491 492
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
S
Stephen Warren 已提交
493
       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
494
      15,    16,    17,    18,    19,    20,    21,    22,    23,    24
D
David Gibson 已提交
495 496 497
};

#if YYDEBUG
498
  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
D
David Gibson 已提交
499 500
static const yytype_uint16 yyrline[] =
{
501
       0,   109,   109,   117,   121,   128,   129,   139,   142,   149,
502 503 504 505 506 507 508 509
     153,   161,   165,   170,   181,   200,   213,   220,   228,   231,
     238,   242,   246,   250,   258,   262,   266,   270,   274,   290,
     300,   308,   311,   315,   322,   338,   343,   362,   376,   383,
     384,   385,   392,   396,   397,   401,   402,   406,   407,   411,
     412,   416,   417,   421,   422,   426,   427,   428,   432,   433,
     434,   435,   436,   440,   441,   442,   446,   447,   448,   452,
     453,   462,   471,   475,   476,   477,   478,   483,   486,   490,
     498,   501,   505,   513,   517,   521
D
David Gibson 已提交
510 511 512
};
#endif

513
#if YYDEBUG || YYERROR_VERBOSE || 0
D
David Gibson 已提交
514 515 516 517
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
static const char *const yytname[] =
{
518 519 520 521 522 523 524 525 526 527 528 529 530 531
  "$end", "error", "$undefined", "DT_V1", "DT_PLUGIN", "DT_MEMRESERVE",
  "DT_LSHIFT", "DT_RSHIFT", "DT_LE", "DT_GE", "DT_EQ", "DT_NE", "DT_AND",
  "DT_OR", "DT_BITS", "DT_DEL_PROP", "DT_DEL_NODE", "DT_PROPNODENAME",
  "DT_LITERAL", "DT_CHAR_LITERAL", "DT_BYTE", "DT_STRING", "DT_LABEL",
  "DT_REF", "DT_INCBIN", "';'", "'/'", "'{'", "'}'", "'='", "'>'", "'['",
  "']'", "'('", "','", "')'", "'<'", "'?'", "':'", "'|'", "'^'", "'&'",
  "'+'", "'-'", "'*'", "'%'", "'~'", "'!'", "$accept", "sourcefile",
  "header", "headers", "memreserves", "memreserve", "devicetree",
  "nodedef", "proplist", "propdef", "propdata", "propdataprefix",
  "arrayprefix", "integer_prim", "integer_expr", "integer_trinary",
  "integer_or", "integer_and", "integer_bitor", "integer_bitxor",
  "integer_bitand", "integer_eq", "integer_rela", "integer_shift",
  "integer_add", "integer_mul", "integer_unary", "bytestring", "subnodes",
  "subnode", YY_NULLPTR
D
David Gibson 已提交
532 533 534 535
};
#endif

# ifdef YYPRINT
536 537
/* YYTOKNUM[NUM] -- (External) token number corresponding to the
   (internal) symbol number NUM (which must be that of a token).  */
D
David Gibson 已提交
538 539 540
static const yytype_uint16 yytoknum[] =
{
       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
S
Stephen Warren 已提交
541
     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
542 543 544
     275,   276,   277,   278,   279,    59,    47,   123,   125,    61,
      62,    91,    93,    40,    44,    41,    60,    63,    58,   124,
      94,    38,    43,    45,    42,    37,   126,    33
D
David Gibson 已提交
545 546 547
};
# endif

548
#define YYPACT_NINF -44
D
David Gibson 已提交
549

550
#define yypact_value_is_default(Yystate) \
551
  (!!((Yystate) == (-44)))
552 553 554 555 556 557 558 559 560

#define YYTABLE_NINF -1

#define yytable_value_is_error(Yytable_value) \
  0

  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
     STATE-NUM.  */
static const yytype_int8 yypact[] =
D
David Gibson 已提交
561
{
562 563 564 565 566 567 568 569 570 571 572 573 574 575 576
      14,    27,    61,    14,     8,    18,   -44,   -44,    37,     8,
      40,     8,    64,   -44,   -44,   -12,    37,   -44,    50,    52,
     -44,   -44,   -12,   -12,   -12,   -44,    51,   -44,    -4,    78,
      53,    54,    55,    17,     2,    30,    38,    -3,   -44,    66,
     -44,   -44,    70,    72,    50,    50,   -44,   -44,   -44,   -44,
     -12,   -12,   -12,   -12,   -12,   -12,   -12,   -12,   -12,   -12,
     -12,   -12,   -12,   -12,   -12,   -12,   -12,   -12,   -12,   -44,
       3,    73,    50,   -44,   -44,    78,    59,    53,    54,    55,
      17,     2,     2,    30,    30,    30,    30,    38,    38,    -3,
      -3,   -44,   -44,   -44,    82,    83,    44,     3,   -44,    74,
       3,   -44,   -44,   -12,    76,    79,   -44,   -44,   -44,   -44,
     -44,    80,   -44,   -44,   -44,   -44,   -44,   -10,    36,   -44,
     -44,   -44,   -44,    85,   -44,   -44,   -44,    75,   -44,   -44,
      21,    71,    88,    -6,   -44,   -44,   -44,   -44,   -44,    11,
     -44,   -44,   -44,    37,   -44,    77,    37,    81,   -44
D
David Gibson 已提交
577 578
};

579 580 581
  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
     Performed when YYTABLE does not specify something else to do.  Zero
     means the default is an error.  */
D
David Gibson 已提交
582 583
static const yytype_uint8 yydefact[] =
{
584
       0,     0,     0,     5,     7,     3,     1,     6,     0,     0,
585 586 587 588
      16,     7,     0,    39,    40,     0,     0,    10,     0,     2,
       8,     4,     0,     0,     0,    73,     0,    42,    43,    45,
      47,    49,    51,    53,    55,    58,    65,    68,    72,     0,
      18,    11,     0,     0,     0,     0,    74,    75,    76,    41,
S
Stephen Warren 已提交
589
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
590
       0,     0,     0,     0,     0,     0,     0,     0,     0,     9,
591 592 593 594 595 596 597 598
      80,     0,     0,    14,    12,    46,     0,    48,    50,    52,
      54,    56,    57,    61,    62,    60,    59,    63,    64,    66,
      67,    70,    69,    71,     0,     0,     0,     0,    19,     0,
      80,    15,    13,     0,     0,     0,    21,    31,    83,    23,
      85,     0,    82,    81,    44,    22,    84,     0,     0,    17,
      30,    20,    32,     0,    24,    33,    27,     0,    77,    35,
       0,     0,     0,     0,    38,    37,    25,    36,    34,     0,
      78,    79,    26,     0,    29,     0,     0,     0,    28
D
David Gibson 已提交
599 600
};

601 602
  /* YYPGOTO[NTERM-NUM].  */
static const yytype_int8 yypgoto[] =
D
David Gibson 已提交
603
{
604 605 606
     -44,   -44,   -44,   103,    99,   104,   -44,   -43,   -44,   -21,
     -44,   -44,   -44,    -8,    63,     9,   -44,    65,    67,    68,
      69,    62,    26,     4,    22,    23,   -19,   -44,    20,    28
D
David Gibson 已提交
607 608
};

609 610
  /* YYDEFGOTO[NTERM-NUM].  */
static const yytype_int16 yydefgoto[] =
D
David Gibson 已提交
611
{
612 613 614
      -1,     2,     3,     4,    10,    11,    19,    41,    70,    98,
     117,   118,   130,    25,    26,    27,    28,    29,    30,    31,
      32,    33,    34,    35,    36,    37,    38,   133,    99,   100
D
David Gibson 已提交
615 616
};

617 618 619 620
  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
     positive, shift that token.  If negative, reduce the rule whose
     number is the opposite.  If YYTABLE_NINF, syntax error.  */
static const yytype_uint8 yytable[] =
D
David Gibson 已提交
621
{
622 623 624 625 626 627 628 629 630 631 632 633 634 635
      16,    73,    74,    46,    47,    48,    13,    14,    39,    50,
      58,    59,   120,     8,   140,   121,   141,     1,    94,    95,
      96,    15,    12,    66,   122,    97,   142,    56,    57,   102,
       9,    22,    60,    51,    23,    24,    62,    63,    61,    13,
      14,    67,    68,   134,   135,   143,   144,    91,    92,    93,
     123,   136,     5,   108,    15,    13,    14,   124,   125,   126,
     127,     6,    83,    84,    85,    86,    18,   128,    42,   106,
      15,    40,   129,   107,    43,    44,   109,    40,    45,   112,
      64,    65,    81,    82,    87,    88,    49,    89,    90,    21,
      52,    69,    53,    71,    54,    72,    55,   103,   101,   104,
     105,   115,   111,   131,   116,   119,     7,   138,   132,   139,
      20,   146,   114,    17,    76,    75,   148,    80,     0,    77,
     113,    78,   137,    79,     0,   110,     0,     0,     0,     0,
       0,     0,     0,     0,     0,   145,     0,     0,   147
D
David Gibson 已提交
636 637
};

638
static const yytype_int16 yycheck[] =
D
David Gibson 已提交
639
{
640 641 642 643 644 645 646 647 648 649 650 651 652 653
       8,    44,    45,    22,    23,    24,    18,    19,    16,    13,
       8,     9,    22,     5,    20,    25,    22,     3,    15,    16,
      17,    33,     4,    26,    34,    22,    32,    10,    11,    72,
      22,    43,    30,    37,    46,    47,     6,     7,    36,    18,
      19,    44,    45,    22,    23,    34,    35,    66,    67,    68,
      14,    30,    25,    96,    33,    18,    19,    21,    22,    23,
      24,     0,    58,    59,    60,    61,    26,    31,    16,    25,
      33,    27,    36,    29,    22,    23,    97,    27,    26,   100,
      42,    43,    56,    57,    62,    63,    35,    64,    65,    25,
      12,    25,    39,    23,    40,    23,    41,    38,    25,    17,
      17,    25,    28,    18,    25,    25,     3,    36,    33,    21,
      11,    34,   103,     9,    51,    50,    35,    55,    -1,    52,
     100,    53,   130,    54,    -1,    97,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,   143,    -1,    -1,   146
D
David Gibson 已提交
654 655
};

656 657 658 659
  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
     symbol of state STATE-NUM.  */
static const yytype_uint8 yystos[] =
{
660 661 662 663 664 665 666 667 668 669 670 671 672 673 674
       0,     3,    49,    50,    51,    25,     0,    51,     5,    22,
      52,    53,     4,    18,    19,    33,    61,    53,    26,    54,
      52,    25,    43,    46,    47,    61,    62,    63,    64,    65,
      66,    67,    68,    69,    70,    71,    72,    73,    74,    61,
      27,    55,    16,    22,    23,    26,    74,    74,    74,    35,
      13,    37,    12,    39,    40,    41,    10,    11,     8,     9,
      30,    36,     6,     7,    42,    43,    26,    44,    45,    25,
      56,    23,    23,    55,    55,    65,    62,    66,    67,    68,
      69,    70,    70,    71,    71,    71,    71,    72,    72,    73,
      73,    74,    74,    74,    15,    16,    17,    22,    57,    76,
      77,    25,    55,    38,    17,    17,    25,    29,    55,    57,
      77,    28,    57,    76,    63,    25,    25,    58,    59,    25,
      22,    25,    34,    14,    21,    22,    23,    24,    31,    36,
      60,    18,    33,    75,    22,    23,    30,    61,    36,    21,
      20,    22,    32,    34,    35,    61,    34,    61,    35
675
};
676

677 678
  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
static const yytype_uint8 yyr1[] =
D
David Gibson 已提交
679
{
680
       0,    48,    49,    50,    50,    51,    51,    52,    52,    53,
681 682 683 684 685 686 687 688
      53,    54,    54,    54,    54,    54,    54,    55,    56,    56,
      57,    57,    57,    57,    58,    58,    58,    58,    58,    58,
      58,    59,    59,    59,    60,    60,    60,    60,    60,    61,
      61,    61,    62,    63,    63,    64,    64,    65,    65,    66,
      66,    67,    67,    68,    68,    69,    69,    69,    70,    70,
      70,    70,    70,    71,    71,    71,    72,    72,    72,    73,
      73,    73,    73,    74,    74,    74,    74,    75,    75,    75,
      76,    76,    76,    77,    77,    77
D
David Gibson 已提交
689 690
};

691 692
  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
static const yytype_uint8 yyr2[] =
D
David Gibson 已提交
693
{
694
       0,     2,     3,     2,     4,     1,     2,     0,     2,     4,
695 696 697 698 699 700 701 702
       2,     2,     3,     4,     3,     4,     0,     5,     0,     2,
       4,     2,     3,     2,     2,     3,     4,     2,     9,     5,
       2,     0,     2,     2,     3,     1,     2,     2,     2,     1,
       1,     3,     1,     1,     5,     1,     3,     1,     3,     1,
       3,     1,     3,     1,     3,     1,     3,     3,     1,     3,
       3,     3,     3,     3,     3,     1,     3,     3,     1,     3,
       3,     3,     1,     1,     2,     2,     2,     0,     2,     2,
       0,     2,     2,     2,     3,     2
D
David Gibson 已提交
703 704
};

705 706 707 708 709 710 711 712 713 714

#define yyerrok         (yyerrstatus = 0)
#define yyclearin       (yychar = YYEMPTY)
#define YYEMPTY         (-2)
#define YYEOF           0

#define YYACCEPT        goto yyacceptlab
#define YYABORT         goto yyabortlab
#define YYERROR         goto yyerrorlab

D
David Gibson 已提交
715 716 717

#define YYRECOVERING()  (!!yyerrstatus)

718 719 720 721 722 723 724 725 726 727 728 729
#define YYBACKUP(Token, Value)                                  \
do                                                              \
  if (yychar == YYEMPTY)                                        \
    {                                                           \
      yychar = (Token);                                         \
      yylval = (Value);                                         \
      YYPOPSTACK (yylen);                                       \
      yystate = *yyssp;                                         \
      goto yybackup;                                            \
    }                                                           \
  else                                                          \
    {                                                           \
D
David Gibson 已提交
730
      yyerror (YY_("syntax error: cannot back up")); \
731 732 733
      YYERROR;                                                  \
    }                                                           \
while (0)
D
David Gibson 已提交
734

735
/* Error token number */
736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761
#define YYTERROR        1
#define YYERRCODE       256


/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
   If N is 0, then set CURRENT to the empty location which ends
   the previous symbol: RHS[0] (always defined).  */

#ifndef YYLLOC_DEFAULT
# define YYLLOC_DEFAULT(Current, Rhs, N)                                \
    do                                                                  \
      if (N)                                                            \
        {                                                               \
          (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
          (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
          (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
          (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
        }                                                               \
      else                                                              \
        {                                                               \
          (Current).first_line   = (Current).last_line   =              \
            YYRHSLOC (Rhs, 0).last_line;                                \
          (Current).first_column = (Current).last_column =              \
            YYRHSLOC (Rhs, 0).last_column;                              \
        }                                                               \
    while (0)
D
David Gibson 已提交
762 763
#endif

764
#define YYRHSLOC(Rhs, K) ((Rhs)[K])
D
David Gibson 已提交
765 766 767 768 769 770 771 772 773 774


/* Enable debugging if requested.  */
#if YYDEBUG

# ifndef YYFPRINTF
#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
#  define YYFPRINTF fprintf
# endif

775 776 777 778 779
# define YYDPRINTF(Args)                        \
do {                                            \
  if (yydebug)                                  \
    YYFPRINTF Args;                             \
} while (0)
D
David Gibson 已提交
780 781


782 783 784
/* YY_LOCATION_PRINT -- Print the location on the stream.
   This macro was not mandated originally: define only if we know
   we won't break user code: when these are the locations we know.  */
D
David Gibson 已提交
785

786 787
#ifndef YY_LOCATION_PRINT
# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
D
David Gibson 已提交
788

789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822
/* Print *YYLOCP on YYO.  Private, do not rely on its existence. */

YY_ATTRIBUTE_UNUSED
static unsigned
yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp)
{
  unsigned res = 0;
  int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0;
  if (0 <= yylocp->first_line)
    {
      res += YYFPRINTF (yyo, "%d", yylocp->first_line);
      if (0 <= yylocp->first_column)
        res += YYFPRINTF (yyo, ".%d", yylocp->first_column);
    }
  if (0 <= yylocp->last_line)
    {
      if (yylocp->first_line < yylocp->last_line)
        {
          res += YYFPRINTF (yyo, "-%d", yylocp->last_line);
          if (0 <= end_col)
            res += YYFPRINTF (yyo, ".%d", end_col);
        }
      else if (0 <= end_col && yylocp->first_column < end_col)
        res += YYFPRINTF (yyo, "-%d", end_col);
    }
  return res;
 }

#  define YY_LOCATION_PRINT(File, Loc)          \
  yy_location_print_ (File, &(Loc))

# else
#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
# endif
D
David Gibson 已提交
823
#endif
824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843


# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
do {                                                                      \
  if (yydebug)                                                            \
    {                                                                     \
      YYFPRINTF (stderr, "%s ", Title);                                   \
      yy_symbol_print (stderr,                                            \
                  Type, Value, Location); \
      YYFPRINTF (stderr, "\n");                                           \
    }                                                                     \
} while (0)


/*----------------------------------------.
| Print this symbol's value on YYOUTPUT.  |
`----------------------------------------*/

static void
yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp)
D
David Gibson 已提交
844
{
845 846
  FILE *yyo = yyoutput;
  YYUSE (yyo);
847
  YYUSE (yylocationp);
D
David Gibson 已提交
848 849 850 851 852 853
  if (!yyvaluep)
    return;
# ifdef YYPRINT
  if (yytype < YYNTOKENS)
    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
# endif
854
  YYUSE (yytype);
D
David Gibson 已提交
855 856 857 858 859 860 861 862
}


/*--------------------------------.
| Print this symbol on YYOUTPUT.  |
`--------------------------------*/

static void
863
yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp)
D
David Gibson 已提交
864
{
865 866
  YYFPRINTF (yyoutput, "%s %s (",
             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
D
David Gibson 已提交
867

868 869 870
  YY_LOCATION_PRINT (yyoutput, *yylocationp);
  YYFPRINTF (yyoutput, ": ");
  yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp);
D
David Gibson 已提交
871 872 873 874 875 876 877 878 879
  YYFPRINTF (yyoutput, ")");
}

/*------------------------------------------------------------------.
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
| TOP (included).                                                   |
`------------------------------------------------------------------*/

static void
880
yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
D
David Gibson 已提交
881 882
{
  YYFPRINTF (stderr, "Stack now");
883 884 885 886 887
  for (; yybottom <= yytop; yybottom++)
    {
      int yybot = *yybottom;
      YYFPRINTF (stderr, " %d", yybot);
    }
D
David Gibson 已提交
888 889 890
  YYFPRINTF (stderr, "\n");
}

891 892 893 894 895
# define YY_STACK_PRINT(Bottom, Top)                            \
do {                                                            \
  if (yydebug)                                                  \
    yy_stack_print ((Bottom), (Top));                           \
} while (0)
D
David Gibson 已提交
896 897 898 899 900 901 902


/*------------------------------------------------.
| Report that the YYRULE is going to be reduced.  |
`------------------------------------------------*/

static void
903
yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule)
D
David Gibson 已提交
904
{
905
  unsigned long int yylno = yyrline[yyrule];
D
David Gibson 已提交
906 907 908
  int yynrhs = yyr2[yyrule];
  int yyi;
  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
909
             yyrule - 1, yylno);
D
David Gibson 已提交
910 911 912
  /* The symbols being reduced.  */
  for (yyi = 0; yyi < yynrhs; yyi++)
    {
913
      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
914 915 916 917
      yy_symbol_print (stderr,
                       yystos[yyssp[yyi + 1 - yynrhs]],
                       &(yyvsp[(yyi + 1) - (yynrhs)])
                       , &(yylsp[(yyi + 1) - (yynrhs)])                       );
918
      YYFPRINTF (stderr, "\n");
D
David Gibson 已提交
919 920 921
    }
}

922 923 924 925 926
# define YY_REDUCE_PRINT(Rule)          \
do {                                    \
  if (yydebug)                          \
    yy_reduce_print (yyssp, yyvsp, yylsp, Rule); \
} while (0)
D
David Gibson 已提交
927 928 929 930 931 932 933 934 935 936 937 938 939

/* Nonzero means print parse trace.  It is left uninitialized so that
   multiple parsers can coexist.  */
int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif /* !YYDEBUG */


/* YYINITDEPTH -- initial size of the parser's stacks.  */
940
#ifndef YYINITDEPTH
D
David Gibson 已提交
941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010
# define YYINITDEPTH 200
#endif

/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
   if the built-in stack extension method is used).

   Do not make this value too large; the results are undefined if
   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
   evaluated with infinite-precision integer arithmetic.  */

#ifndef YYMAXDEPTH
# define YYMAXDEPTH 10000
#endif


#if YYERROR_VERBOSE

# ifndef yystrlen
#  if defined __GLIBC__ && defined _STRING_H
#   define yystrlen strlen
#  else
/* Return the length of YYSTR.  */
static YYSIZE_T
yystrlen (const char *yystr)
{
  YYSIZE_T yylen;
  for (yylen = 0; yystr[yylen]; yylen++)
    continue;
  return yylen;
}
#  endif
# endif

# ifndef yystpcpy
#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
#   define yystpcpy stpcpy
#  else
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
   YYDEST.  */
static char *
yystpcpy (char *yydest, const char *yysrc)
{
  char *yyd = yydest;
  const char *yys = yysrc;

  while ((*yyd++ = *yys++) != '\0')
    continue;

  return yyd - 1;
}
#  endif
# endif

# ifndef yytnamerr
/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
   quotes and backslashes, so that it's suitable for yyerror.  The
   heuristic is that double-quoting is unnecessary unless the string
   contains an apostrophe, a comma, or backslash (other than
   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
   null, do not copy; instead, return the length of what the result
   would have been.  */
static YYSIZE_T
yytnamerr (char *yyres, const char *yystr)
{
  if (*yystr == '"')
    {
      YYSIZE_T yyn = 0;
      char const *yyp = yystr;

      for (;;)
1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031
        switch (*++yyp)
          {
          case '\'':
          case ',':
            goto do_not_strip_quotes;

          case '\\':
            if (*++yyp != '\\')
              goto do_not_strip_quotes;
            /* Fall through.  */
          default:
            if (yyres)
              yyres[yyn] = *yyp;
            yyn++;
            break;

          case '"':
            if (yyres)
              yyres[yyn] = '\0';
            return yyn;
          }
D
David Gibson 已提交
1032 1033 1034 1035 1036 1037 1038 1039 1040 1041
    do_not_strip_quotes: ;
    }

  if (! yyres)
    return yystrlen (yystr);

  return yystpcpy (yyres, yystr) - yyres;
}
# endif

1042 1043 1044
/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
   about the unexpected token YYTOKEN for the state stack whose top is
   YYSSP.
D
David Gibson 已提交
1045

1046 1047 1048 1049 1050 1051 1052 1053
   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
   not large enough to hold the message.  In that case, also set
   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
   required number of bytes is too large to store.  */
static int
yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                yytype_int16 *yyssp, int yytoken)
{
1054
  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
1055 1056 1057
  YYSIZE_T yysize = yysize0;
  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
  /* Internationalized format string. */
1058
  const char *yyformat = YY_NULLPTR;
1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088
  /* Arguments of yyformat. */
  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
  /* Number of reported tokens (one for the "unexpected", one per
     "expected"). */
  int yycount = 0;

  /* There are many possibilities here to consider:
     - If this state is a consistent state with a default action, then
       the only way this function was invoked is if the default action
       is an error action.  In that case, don't check for expected
       tokens because there are none.
     - The only way there can be no lookahead present (in yychar) is if
       this state is a consistent state with a default action.  Thus,
       detecting the absence of a lookahead is sufficient to determine
       that there is no unexpected or expected token to report.  In that
       case, just report a simple "syntax error".
     - Don't assume there isn't a lookahead just because this state is a
       consistent state with a default action.  There might have been a
       previous inconsistent state, consistent state with a non-default
       action, or user semantic action that manipulated yychar.
     - Of course, the expected token list depends on states to have
       correct lookahead information, and it depends on the parser not
       to perform extra reductions after fetching a lookahead from the
       scanner and before detecting a syntax error.  Thus, state merging
       (from LALR or IELR) and default reductions corrupt the expected
       token list.  However, the list is correct for canonical LR with
       one exception: it will still contain any token that will not be
       accepted due to an error action in a later state.
  */
  if (yytoken != YYEMPTY)
D
David Gibson 已提交
1089
    {
1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113
      int yyn = yypact[*yyssp];
      yyarg[yycount++] = yytname[yytoken];
      if (!yypact_value_is_default (yyn))
        {
          /* Start YYX at -YYN if negative to avoid negative indexes in
             YYCHECK.  In other words, skip the first -YYN actions for
             this state because they are default actions.  */
          int yyxbegin = yyn < 0 ? -yyn : 0;
          /* Stay within bounds of both yycheck and yytname.  */
          int yychecklim = YYLAST - yyn + 1;
          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
          int yyx;

          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
                && !yytable_value_is_error (yytable[yyx + yyn]))
              {
                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
                  {
                    yycount = 1;
                    yysize = yysize0;
                    break;
                  }
                yyarg[yycount++] = yytname[yyx];
1114
                {
1115
                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
1116 1117 1118 1119 1120
                  if (! (yysize <= yysize1
                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
                    return 2;
                  yysize = yysize1;
                }
1121 1122 1123
              }
        }
    }
D
David Gibson 已提交
1124

1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138
  switch (yycount)
    {
# define YYCASE_(N, S)                      \
      case N:                               \
        yyformat = S;                       \
      break
      YYCASE_(0, YY_("syntax error"));
      YYCASE_(1, YY_("syntax error, unexpected %s"));
      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
# undef YYCASE_
    }
D
David Gibson 已提交
1139

1140 1141 1142 1143 1144 1145
  {
    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
      return 2;
    yysize = yysize1;
  }
D
David Gibson 已提交
1146

1147 1148 1149 1150 1151 1152 1153
  if (*yymsg_alloc < yysize)
    {
      *yymsg_alloc = 2 * yysize;
      if (! (yysize <= *yymsg_alloc
             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
      return 1;
D
David Gibson 已提交
1154
    }
1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174

  /* Avoid sprintf, as that infringes on the user's name space.
     Don't have undefined behavior even if the translation
     produced a string with the wrong number of "%s"s.  */
  {
    char *yyp = *yymsg;
    int yyi = 0;
    while ((*yyp = *yyformat) != '\0')
      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
        {
          yyp += yytnamerr (yyp, yyarg[yyi++]);
          yyformat += 2;
        }
      else
        {
          yyp++;
          yyformat++;
        }
  }
  return 0;
D
David Gibson 已提交
1175 1176 1177 1178 1179 1180 1181 1182
}
#endif /* YYERROR_VERBOSE */

/*-----------------------------------------------.
| Release the memory associated to this symbol.  |
`-----------------------------------------------*/

static void
1183
yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp)
D
David Gibson 已提交
1184 1185
{
  YYUSE (yyvaluep);
1186
  YYUSE (yylocationp);
D
David Gibson 已提交
1187 1188 1189 1190
  if (!yymsg)
    yymsg = "Deleting";
  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);

1191
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1192
  YYUSE (yytype);
1193
  YY_IGNORE_MAYBE_UNINITIALIZED_END
D
David Gibson 已提交
1194 1195
}

1196

D
David Gibson 已提交
1197 1198


1199
/* The lookahead symbol.  */
D
David Gibson 已提交
1200 1201
int yychar;

1202
/* The semantic value of the lookahead symbol.  */
1203 1204 1205 1206 1207 1208 1209
YYSTYPE yylval;
/* Location data for the lookahead symbol.  */
YYLTYPE yylloc
# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
  = { 1, 1, 1, 1 }
# endif
;
D
David Gibson 已提交
1210 1211 1212 1213
/* Number of syntax errors so far.  */
int yynerrs;


1214 1215 1216
/*----------.
| yyparse.  |
`----------*/
D
David Gibson 已提交
1217 1218 1219 1220

int
yyparse (void)
{
1221 1222 1223
    int yystate;
    /* Number of tokens to shift before error messages enabled.  */
    int yyerrstatus;
D
David Gibson 已提交
1224

1225
    /* The stacks and their tools:
1226 1227 1228
       'yyss': related to states.
       'yyvs': related to semantic values.
       'yyls': related to locations.
D
David Gibson 已提交
1229

1230
       Refer to the stacks through separate pointers, to allow yyoverflow
1231
       to reallocate them elsewhere.  */
D
David Gibson 已提交
1232

1233 1234 1235 1236
    /* The state stack.  */
    yytype_int16 yyssa[YYINITDEPTH];
    yytype_int16 *yyss;
    yytype_int16 *yyssp;
D
David Gibson 已提交
1237

1238 1239 1240 1241
    /* The semantic value stack.  */
    YYSTYPE yyvsa[YYINITDEPTH];
    YYSTYPE *yyvs;
    YYSTYPE *yyvsp;
D
David Gibson 已提交
1242

1243 1244 1245 1246 1247 1248 1249 1250
    /* The location stack.  */
    YYLTYPE yylsa[YYINITDEPTH];
    YYLTYPE *yyls;
    YYLTYPE *yylsp;

    /* The locations where the error started and ended.  */
    YYLTYPE yyerror_range[3];

1251
    YYSIZE_T yystacksize;
D
David Gibson 已提交
1252

1253 1254 1255
  int yyn;
  int yyresult;
  /* Lookahead token as an internal (translated) token number.  */
1256
  int yytoken = 0;
D
David Gibson 已提交
1257 1258 1259
  /* The variables used to return semantic value and location from the
     action routines.  */
  YYSTYPE yyval;
1260
  YYLTYPE yyloc;
1261 1262 1263 1264 1265 1266 1267 1268

#if YYERROR_VERBOSE
  /* Buffer for error messages, and its allocated size.  */
  char yymsgbuf[128];
  char *yymsg = yymsgbuf;
  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
#endif

1269
#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
D
David Gibson 已提交
1270 1271 1272 1273 1274

  /* The number of symbols on the RHS of the reduced rule.
     Keep to zero when no symbol should be popped.  */
  int yylen = 0;

1275 1276
  yyssp = yyss = yyssa;
  yyvsp = yyvs = yyvsa;
1277
  yylsp = yyls = yylsa;
1278 1279
  yystacksize = YYINITDEPTH;

D
David Gibson 已提交
1280 1281 1282 1283 1284
  YYDPRINTF ((stderr, "Starting parse\n"));

  yystate = 0;
  yyerrstatus = 0;
  yynerrs = 0;
1285
  yychar = YYEMPTY; /* Cause a token to be read.  */
1286
  yylsp[0] = yylloc;
D
David Gibson 已提交
1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306
  goto yysetstate;

/*------------------------------------------------------------.
| yynewstate -- Push a new state, which is found in yystate.  |
`------------------------------------------------------------*/
 yynewstate:
  /* In all cases, when you get here, the value and location stacks
     have just been pushed.  So pushing a state here evens the stacks.  */
  yyssp++;

 yysetstate:
  *yyssp = yystate;

  if (yyss + yystacksize - 1 <= yyssp)
    {
      /* Get the current used size of the three stacks, in elements.  */
      YYSIZE_T yysize = yyssp - yyss + 1;

#ifdef yyoverflow
      {
1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326
        /* Give user a chance to reallocate the stack.  Use copies of
           these so that the &'s don't force the real ones into
           memory.  */
        YYSTYPE *yyvs1 = yyvs;
        yytype_int16 *yyss1 = yyss;
        YYLTYPE *yyls1 = yyls;

        /* Each stack pointer address is followed by the size of the
           data in use in that stack, in bytes.  This used to be a
           conditional around just the two extra args, but that might
           be undefined if yyoverflow is a macro.  */
        yyoverflow (YY_("memory exhausted"),
                    &yyss1, yysize * sizeof (*yyssp),
                    &yyvs1, yysize * sizeof (*yyvsp),
                    &yyls1, yysize * sizeof (*yylsp),
                    &yystacksize);

        yyls = yyls1;
        yyss = yyss1;
        yyvs = yyvs1;
D
David Gibson 已提交
1327 1328 1329 1330 1331 1332 1333
      }
#else /* no yyoverflow */
# ifndef YYSTACK_RELOCATE
      goto yyexhaustedlab;
# else
      /* Extend the stack our own way.  */
      if (YYMAXDEPTH <= yystacksize)
1334
        goto yyexhaustedlab;
D
David Gibson 已提交
1335 1336
      yystacksize *= 2;
      if (YYMAXDEPTH < yystacksize)
1337
        yystacksize = YYMAXDEPTH;
D
David Gibson 已提交
1338 1339

      {
1340 1341 1342 1343 1344 1345 1346 1347
        yytype_int16 *yyss1 = yyss;
        union yyalloc *yyptr =
          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
        if (! yyptr)
          goto yyexhaustedlab;
        YYSTACK_RELOCATE (yyss_alloc, yyss);
        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
        YYSTACK_RELOCATE (yyls_alloc, yyls);
D
David Gibson 已提交
1348
#  undef YYSTACK_RELOCATE
1349 1350
        if (yyss1 != yyssa)
          YYSTACK_FREE (yyss1);
D
David Gibson 已提交
1351 1352 1353 1354 1355 1356
      }
# endif
#endif /* no yyoverflow */

      yyssp = yyss + yysize - 1;
      yyvsp = yyvs + yysize - 1;
1357
      yylsp = yyls + yysize - 1;
D
David Gibson 已提交
1358 1359

      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1360
                  (unsigned long int) yystacksize));
D
David Gibson 已提交
1361 1362

      if (yyss + yystacksize - 1 <= yyssp)
1363
        YYABORT;
D
David Gibson 已提交
1364 1365 1366 1367
    }

  YYDPRINTF ((stderr, "Entering state %d\n", yystate));

1368 1369 1370
  if (yystate == YYFINAL)
    YYACCEPT;

D
David Gibson 已提交
1371 1372 1373 1374 1375 1376 1377 1378
  goto yybackup;

/*-----------.
| yybackup.  |
`-----------*/
yybackup:

  /* Do appropriate processing given the current state.  Read a
1379
     lookahead token if we need one and don't already have one.  */
D
David Gibson 已提交
1380

1381
  /* First try to decide what to do without reference to lookahead token.  */
D
David Gibson 已提交
1382
  yyn = yypact[yystate];
1383
  if (yypact_value_is_default (yyn))
D
David Gibson 已提交
1384 1385
    goto yydefault;

1386
  /* Not known => get a lookahead token if don't already have one.  */
D
David Gibson 已提交
1387

1388
  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
D
David Gibson 已提交
1389 1390 1391
  if (yychar == YYEMPTY)
    {
      YYDPRINTF ((stderr, "Reading a token: "));
1392
      yychar = yylex ();
D
David Gibson 已提交
1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413
    }

  if (yychar <= YYEOF)
    {
      yychar = yytoken = YYEOF;
      YYDPRINTF ((stderr, "Now at end of input.\n"));
    }
  else
    {
      yytoken = YYTRANSLATE (yychar);
      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
    }

  /* If the proper action on seeing token YYTOKEN is to reduce or to
     detect an error, take that action.  */
  yyn += yytoken;
  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
    goto yydefault;
  yyn = yytable[yyn];
  if (yyn <= 0)
    {
1414 1415
      if (yytable_value_is_error (yyn))
        goto yyerrlab;
D
David Gibson 已提交
1416 1417 1418 1419 1420 1421 1422 1423 1424
      yyn = -yyn;
      goto yyreduce;
    }

  /* Count tokens shifted since error; after three, turn off error
     status.  */
  if (yyerrstatus)
    yyerrstatus--;

1425
  /* Shift the lookahead token.  */
D
David Gibson 已提交
1426 1427
  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);

1428 1429
  /* Discard the shifted token.  */
  yychar = YYEMPTY;
D
David Gibson 已提交
1430 1431

  yystate = yyn;
1432
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
D
David Gibson 已提交
1433
  *++yyvsp = yylval;
1434
  YY_IGNORE_MAYBE_UNINITIALIZED_END
1435
  *++yylsp = yylloc;
D
David Gibson 已提交
1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456
  goto yynewstate;


/*-----------------------------------------------------------.
| yydefault -- do the default action for the current state.  |
`-----------------------------------------------------------*/
yydefault:
  yyn = yydefact[yystate];
  if (yyn == 0)
    goto yyerrlab;
  goto yyreduce;


/*-----------------------------.
| yyreduce -- Do a reduction.  |
`-----------------------------*/
yyreduce:
  /* yyn is the number of a rule to reduce with.  */
  yylen = yyr2[yyn];

  /* If YYLEN is nonzero, implement the default value of the action:
1457
     '$$ = $1'.
D
David Gibson 已提交
1458 1459 1460 1461 1462 1463 1464 1465

     Otherwise, the following line sets YYVAL to garbage.
     This behavior is undocumented and Bison
     users should not rely upon it.  Assigning to YYVAL
     unconditionally makes the parser a bit smaller, and it avoids a
     GCC warning that YYVAL may be used uninitialized.  */
  yyval = yyvsp[1-yylen];

1466 1467
  /* Default location.  */
  YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
D
David Gibson 已提交
1468 1469 1470 1471
  YY_REDUCE_PRINT (yyn);
  switch (yyn)
    {
        case 2:
1472
#line 110 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1473
    {
1474 1475
			parser_output = build_dt_info((yyvsp[-2].flags), (yyvsp[-1].re), (yyvsp[0].node),
			                              guess_boot_cpuid((yyvsp[0].node)));
1476
		}
1477
#line 1478 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1478 1479 1480
    break;

  case 3:
1481
#line 118 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1482
    {
1483
			(yyval.flags) = DTSF_V1;
1484
		}
1485
#line 1486 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1486 1487 1488
    break;

  case 4:
1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515
#line 122 "dtc-parser.y" /* yacc.c:1646  */
    {
			(yyval.flags) = DTSF_V1 | DTSF_PLUGIN;
		}
#line 1494 "dtc-parser.tab.c" /* yacc.c:1646  */
    break;

  case 6:
#line 130 "dtc-parser.y" /* yacc.c:1646  */
    {
			if ((yyvsp[0].flags) != (yyvsp[-1].flags))
				ERROR(&(yylsp[0]), "Header flags don't match earlier ones");
			(yyval.flags) = (yyvsp[-1].flags);
		}
#line 1504 "dtc-parser.tab.c" /* yacc.c:1646  */
    break;

  case 7:
#line 139 "dtc-parser.y" /* yacc.c:1646  */
    {
			(yyval.re) = NULL;
		}
#line 1512 "dtc-parser.tab.c" /* yacc.c:1646  */
    break;

  case 8:
#line 143 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1516
    {
1517
			(yyval.re) = chain_reserve_entry((yyvsp[-1].re), (yyvsp[0].re));
1518
		}
1519
#line 1520 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1520 1521
    break;

1522 1523
  case 9:
#line 150 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1524
    {
1525
			(yyval.re) = build_reserve_entry((yyvsp[-2].integer), (yyvsp[-1].integer));
1526
		}
1527
#line 1528 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1528 1529
    break;

1530 1531
  case 10:
#line 154 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1532
    {
1533 1534
			add_label(&(yyvsp[0].re)->labels, (yyvsp[-1].labelref));
			(yyval.re) = (yyvsp[0].re);
1535
		}
1536
#line 1537 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1537 1538
    break;

1539 1540
  case 11:
#line 162 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1541
    {
1542
			(yyval.node) = name_node((yyvsp[0].node), "");
1543
		}
1544
#line 1545 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1545 1546
    break;

1547 1548
  case 12:
#line 166 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1549
    {
1550
			(yyval.node) = merge_nodes((yyvsp[-2].node), (yyvsp[0].node));
1551
		}
1552
#line 1553 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1553 1554
    break;

1555 1556
  case 13:
#line 171 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1557
    {
1558
			struct node *target = get_node_by_ref((yyvsp[-3].node), (yyvsp[-1].labelref));
S
Stephen Warren 已提交
1559

1560 1561
			if (target) {
				add_label(&target->labels, (yyvsp[-2].labelref));
1562
				merge_nodes(target, (yyvsp[0].node));
1563
			} else
1564 1565
				ERROR(&(yylsp[-1]), "Label or path %s not found", (yyvsp[-1].labelref));
			(yyval.node) = (yyvsp[-3].node);
1566
		}
1567
#line 1568 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1568 1569
    break;

1570 1571
  case 14:
#line 182 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1572
    {
1573
			struct node *target = get_node_by_ref((yyvsp[-2].node), (yyvsp[-1].labelref));
1574

1575
			if (target) {
1576
				merge_nodes(target, (yyvsp[0].node));
1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587
			} else {
				/*
				 * We rely on the rule being always:
				 *   versioninfo plugindecl memreserves devicetree
				 * so $-1 is what we want (plugindecl)
				 */
				if ((yyvsp[(-1) - (3)].flags) & DTSF_PLUGIN)
					add_orphan_node((yyvsp[-2].node), (yyvsp[0].node), (yyvsp[-1].labelref));
				else
					ERROR(&(yylsp[-1]), "Label or path %s not found", (yyvsp[-1].labelref));
			}
1588
			(yyval.node) = (yyvsp[-2].node);
1589
		}
1590
#line 1591 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1591 1592
    break;

1593
  case 15:
1594
#line 201 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1595
    {
1596 1597 1598 1599 1600 1601 1602 1603 1604
			struct node *target = get_node_by_ref((yyvsp[-3].node), (yyvsp[-1].labelref));

			if (target)
				delete_node(target);
			else
				ERROR(&(yylsp[-1]), "Label or path %s not found", (yyvsp[-1].labelref));


			(yyval.node) = (yyvsp[-3].node);
1605
		}
1606
#line 1607 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1607 1608
    break;

1609
  case 16:
1610
#line 213 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1611
    {
1612 1613
			/* build empty node */
			(yyval.node) = name_node(build_node(NULL, NULL), "");
1614
		}
1615
#line 1616 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1616 1617
    break;

1618
  case 17:
1619
#line 221 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1620
    {
1621
			(yyval.node) = build_node((yyvsp[-3].proplist), (yyvsp[-2].nodelist));
1622
		}
1623
#line 1624 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1624 1625
    break;

1626
  case 18:
1627
#line 228 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1628
    {
1629
			(yyval.proplist) = NULL;
1630
		}
1631
#line 1632 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1632 1633
    break;

1634
  case 19:
1635
#line 232 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1636
    {
1637
			(yyval.proplist) = chain_property((yyvsp[0].prop), (yyvsp[-1].proplist));
1638
		}
1639
#line 1640 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1640 1641
    break;

1642
  case 20:
1643
#line 239 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1644
    {
1645
			(yyval.prop) = build_property((yyvsp[-3].propnodename), (yyvsp[-1].data));
1646
		}
1647
#line 1648 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1648 1649
    break;

1650
  case 21:
1651
#line 243 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1652
    {
1653
			(yyval.prop) = build_property((yyvsp[-1].propnodename), empty_data);
1654
		}
1655
#line 1656 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1656 1657
    break;

1658
  case 22:
1659 1660 1661 1662 1663 1664 1665 1666 1667
#line 247 "dtc-parser.y" /* yacc.c:1646  */
    {
			(yyval.prop) = build_property_delete((yyvsp[-1].propnodename));
		}
#line 1664 "dtc-parser.tab.c" /* yacc.c:1646  */
    break;

  case 23:
#line 251 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1668
    {
1669 1670
			add_label(&(yyvsp[0].prop)->labels, (yyvsp[-1].labelref));
			(yyval.prop) = (yyvsp[0].prop);
1671
		}
1672
#line 1673 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1673 1674
    break;

1675 1676
  case 24:
#line 259 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1677
    {
1678
			(yyval.data) = data_merge((yyvsp[-1].data), (yyvsp[0].data));
1679
		}
1680
#line 1681 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1681 1682
    break;

1683 1684
  case 25:
#line 263 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1685
    {
1686
			(yyval.data) = data_merge((yyvsp[-2].data), (yyvsp[-1].array).data);
1687
		}
1688
#line 1689 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1689 1690
    break;

1691 1692
  case 26:
#line 267 "dtc-parser.y" /* yacc.c:1646  */
S
Stephen Warren 已提交
1693
    {
1694
			(yyval.data) = data_merge((yyvsp[-3].data), (yyvsp[-1].data));
1695
		}
1696
#line 1697 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1697 1698
    break;

1699 1700
  case 27:
#line 271 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1701
    {
1702 1703
			(yyval.data) = data_add_marker((yyvsp[-1].data), REF_PATH, (yyvsp[0].labelref));
		}
1704
#line 1705 "dtc-parser.tab.c" /* yacc.c:1646  */
1705 1706
    break;

1707 1708
  case 28:
#line 275 "dtc-parser.y" /* yacc.c:1646  */
1709 1710
    {
			FILE *f = srcfile_relative_open((yyvsp[-5].data).val, NULL);
1711
			struct data d;
1712

1713 1714 1715 1716 1717
			if ((yyvsp[-3].integer) != 0)
				if (fseek(f, (yyvsp[-3].integer), SEEK_SET) != 0)
					die("Couldn't seek to offset %llu in \"%s\": %s",
					    (unsigned long long)(yyvsp[-3].integer), (yyvsp[-5].data).val,
					    strerror(errno));
1718

1719
			d = data_copy_file(f, (yyvsp[-1].integer));
1720

1721
			(yyval.data) = data_merge((yyvsp[-8].data), d);
1722
			fclose(f);
1723
		}
1724
#line 1725 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1725 1726
    break;

1727 1728
  case 29:
#line 291 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1729
    {
1730
			FILE *f = srcfile_relative_open((yyvsp[-1].data).val, NULL);
1731 1732
			struct data d = empty_data;

1733
			d = data_copy_file(f, -1);
1734

1735
			(yyval.data) = data_merge((yyvsp[-4].data), d);
1736
			fclose(f);
1737
		}
1738
#line 1739 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1739 1740
    break;

1741 1742
  case 30:
#line 301 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1743
    {
1744
			(yyval.data) = data_add_marker((yyvsp[-1].data), LABEL, (yyvsp[0].labelref));
1745
		}
1746
#line 1747 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1747 1748
    break;

1749 1750
  case 31:
#line 308 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1751
    {
S
Stephen Warren 已提交
1752
			(yyval.data) = empty_data;
1753
		}
1754
#line 1755 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1755 1756
    break;

1757 1758
  case 32:
#line 312 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1759
    {
1760
			(yyval.data) = (yyvsp[-1].data);
1761
		}
1762
#line 1763 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1763 1764
    break;

1765 1766
  case 33:
#line 316 "dtc-parser.y" /* yacc.c:1646  */
1767
    {
1768
			(yyval.data) = data_add_marker((yyvsp[-1].data), LABEL, (yyvsp[0].labelref));
1769
		}
1770
#line 1771 "dtc-parser.tab.c" /* yacc.c:1646  */
1771 1772
    break;

1773 1774
  case 34:
#line 323 "dtc-parser.y" /* yacc.c:1646  */
1775
    {
1776 1777 1778 1779 1780 1781 1782 1783 1784
			unsigned long long bits;

			bits = (yyvsp[-1].integer);

			if ((bits !=  8) && (bits != 16) &&
			    (bits != 32) && (bits != 64)) {
				ERROR(&(yylsp[-1]), "Array elements must be"
				      " 8, 16, 32 or 64-bits");
				bits = 32;
S
Stephen Warren 已提交
1785
			}
1786 1787 1788

			(yyval.array).data = empty_data;
			(yyval.array).bits = bits;
1789
		}
1790
#line 1791 "dtc-parser.tab.c" /* yacc.c:1646  */
1791 1792
    break;

1793 1794
  case 35:
#line 339 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1795
    {
S
Stephen Warren 已提交
1796 1797
			(yyval.array).data = empty_data;
			(yyval.array).bits = 32;
1798
		}
1799
#line 1800 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1800 1801
    break;

1802 1803
  case 36:
#line 344 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1804
    {
1805 1806
			if ((yyvsp[-1].array).bits < 64) {
				uint64_t mask = (1ULL << (yyvsp[-1].array).bits) - 1;
S
Stephen Warren 已提交
1807 1808 1809 1810 1811 1812 1813 1814
				/*
				 * Bits above mask must either be all zero
				 * (positive within range of mask) or all one
				 * (negative and sign-extended). The second
				 * condition is true if when we set all bits
				 * within the mask to one (i.e. | in the
				 * mask), all bits are one.
				 */
1815 1816 1817
				if (((yyvsp[0].integer) > mask) && (((yyvsp[0].integer) | mask) != -1ULL))
					ERROR(&(yylsp[0]), "Value out of range for"
					      " %d-bit array element", (yyvsp[-1].array).bits);
S
Stephen Warren 已提交
1818 1819
			}

1820
			(yyval.array).data = data_append_integer((yyvsp[-1].array).data, (yyvsp[0].integer), (yyvsp[-1].array).bits);
1821
		}
1822
#line 1823 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1823 1824
    break;

1825 1826
  case 37:
#line 363 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1827
    {
1828
			uint64_t val = ~0ULL >> (64 - (yyvsp[-1].array).bits);
S
Stephen Warren 已提交
1829

1830 1831
			if ((yyvsp[-1].array).bits == 32)
				(yyvsp[-1].array).data = data_add_marker((yyvsp[-1].array).data,
S
Stephen Warren 已提交
1832
							  REF_PHANDLE,
1833
							  (yyvsp[0].labelref));
S
Stephen Warren 已提交
1834
			else
1835
				ERROR(&(yylsp[0]), "References are only allowed in "
S
Stephen Warren 已提交
1836 1837
					    "arrays with 32-bit elements.");

1838
			(yyval.array).data = data_append_integer((yyvsp[-1].array).data, val, (yyvsp[-1].array).bits);
1839
		}
1840
#line 1841 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1841 1842
    break;

1843 1844
  case 38:
#line 377 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
1845
    {
1846
			(yyval.array).data = data_add_marker((yyvsp[-1].array).data, LABEL, (yyvsp[0].labelref));
1847
		}
1848
#line 1849 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
1849 1850
    break;

1851 1852
  case 41:
#line 386 "dtc-parser.y" /* yacc.c:1646  */
S
Stephen Warren 已提交
1853
    {
1854
			(yyval.integer) = (yyvsp[-1].integer);
1855
		}
1856
#line 1857 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1857 1858
    break;

1859 1860
  case 44:
#line 397 "dtc-parser.y" /* yacc.c:1646  */
1861
    { (yyval.integer) = (yyvsp[-4].integer) ? (yyvsp[-2].integer) : (yyvsp[0].integer); }
1862
#line 1863 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1863 1864
    break;

1865 1866
  case 46:
#line 402 "dtc-parser.y" /* yacc.c:1646  */
1867
    { (yyval.integer) = (yyvsp[-2].integer) || (yyvsp[0].integer); }
1868
#line 1869 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1869 1870
    break;

1871 1872
  case 48:
#line 407 "dtc-parser.y" /* yacc.c:1646  */
1873
    { (yyval.integer) = (yyvsp[-2].integer) && (yyvsp[0].integer); }
1874
#line 1875 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1875 1876
    break;

1877 1878
  case 50:
#line 412 "dtc-parser.y" /* yacc.c:1646  */
1879
    { (yyval.integer) = (yyvsp[-2].integer) | (yyvsp[0].integer); }
1880
#line 1881 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1881 1882
    break;

1883 1884
  case 52:
#line 417 "dtc-parser.y" /* yacc.c:1646  */
1885
    { (yyval.integer) = (yyvsp[-2].integer) ^ (yyvsp[0].integer); }
1886
#line 1887 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1887 1888
    break;

1889 1890
  case 54:
#line 422 "dtc-parser.y" /* yacc.c:1646  */
1891
    { (yyval.integer) = (yyvsp[-2].integer) & (yyvsp[0].integer); }
1892
#line 1893 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1893 1894
    break;

1895 1896
  case 56:
#line 427 "dtc-parser.y" /* yacc.c:1646  */
1897
    { (yyval.integer) = (yyvsp[-2].integer) == (yyvsp[0].integer); }
1898
#line 1899 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1899 1900
    break;

1901 1902
  case 57:
#line 428 "dtc-parser.y" /* yacc.c:1646  */
1903
    { (yyval.integer) = (yyvsp[-2].integer) != (yyvsp[0].integer); }
1904
#line 1905 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1905 1906
    break;

1907 1908
  case 59:
#line 433 "dtc-parser.y" /* yacc.c:1646  */
1909
    { (yyval.integer) = (yyvsp[-2].integer) < (yyvsp[0].integer); }
1910
#line 1911 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1911 1912
    break;

1913 1914
  case 60:
#line 434 "dtc-parser.y" /* yacc.c:1646  */
1915
    { (yyval.integer) = (yyvsp[-2].integer) > (yyvsp[0].integer); }
1916
#line 1917 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1917 1918
    break;

1919 1920
  case 61:
#line 435 "dtc-parser.y" /* yacc.c:1646  */
1921
    { (yyval.integer) = (yyvsp[-2].integer) <= (yyvsp[0].integer); }
1922
#line 1923 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1923 1924
    break;

1925 1926
  case 62:
#line 436 "dtc-parser.y" /* yacc.c:1646  */
1927
    { (yyval.integer) = (yyvsp[-2].integer) >= (yyvsp[0].integer); }
1928
#line 1929 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1929 1930
    break;

1931 1932
  case 63:
#line 440 "dtc-parser.y" /* yacc.c:1646  */
1933
    { (yyval.integer) = (yyvsp[-2].integer) << (yyvsp[0].integer); }
1934
#line 1935 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1935 1936
    break;

1937 1938
  case 64:
#line 441 "dtc-parser.y" /* yacc.c:1646  */
1939
    { (yyval.integer) = (yyvsp[-2].integer) >> (yyvsp[0].integer); }
1940
#line 1941 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1941 1942
    break;

1943 1944
  case 66:
#line 446 "dtc-parser.y" /* yacc.c:1646  */
1945
    { (yyval.integer) = (yyvsp[-2].integer) + (yyvsp[0].integer); }
1946
#line 1947 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1947 1948
    break;

1949 1950
  case 67:
#line 447 "dtc-parser.y" /* yacc.c:1646  */
1951
    { (yyval.integer) = (yyvsp[-2].integer) - (yyvsp[0].integer); }
1952
#line 1953 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1953 1954
    break;

1955 1956
  case 69:
#line 452 "dtc-parser.y" /* yacc.c:1646  */
1957
    { (yyval.integer) = (yyvsp[-2].integer) * (yyvsp[0].integer); }
1958
#line 1959 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1959 1960
    break;

1961 1962
  case 70:
#line 454 "dtc-parser.y" /* yacc.c:1646  */
1963 1964 1965 1966 1967 1968 1969 1970
    {
			if ((yyvsp[0].integer) != 0) {
				(yyval.integer) = (yyvsp[-2].integer) / (yyvsp[0].integer);
			} else {
				ERROR(&(yyloc), "Division by zero");
				(yyval.integer) = 0;
			}
		}
1971
#line 1972 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1972 1973
    break;

1974 1975
  case 71:
#line 463 "dtc-parser.y" /* yacc.c:1646  */
1976 1977 1978 1979 1980 1981 1982 1983
    {
			if ((yyvsp[0].integer) != 0) {
				(yyval.integer) = (yyvsp[-2].integer) % (yyvsp[0].integer);
			} else {
				ERROR(&(yyloc), "Division by zero");
				(yyval.integer) = 0;
			}
		}
1984
#line 1985 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1985 1986
    break;

1987 1988
  case 74:
#line 476 "dtc-parser.y" /* yacc.c:1646  */
1989
    { (yyval.integer) = -(yyvsp[0].integer); }
1990
#line 1991 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1991 1992
    break;

1993 1994
  case 75:
#line 477 "dtc-parser.y" /* yacc.c:1646  */
1995
    { (yyval.integer) = ~(yyvsp[0].integer); }
1996
#line 1997 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
1997 1998
    break;

1999 2000
  case 76:
#line 478 "dtc-parser.y" /* yacc.c:1646  */
2001
    { (yyval.integer) = !(yyvsp[0].integer); }
2002
#line 2003 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
2003 2004
    break;

2005 2006
  case 77:
#line 483 "dtc-parser.y" /* yacc.c:1646  */
S
Stephen Warren 已提交
2007
    {
2008
			(yyval.data) = empty_data;
2009
		}
2010
#line 2011 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
2011 2012
    break;

2013 2014
  case 78:
#line 487 "dtc-parser.y" /* yacc.c:1646  */
S
Stephen Warren 已提交
2015
    {
2016
			(yyval.data) = data_append_byte((yyvsp[-1].data), (yyvsp[0].byte));
2017
		}
2018
#line 2019 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
2019 2020
    break;

2021 2022
  case 79:
#line 491 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
2023
    {
2024
			(yyval.data) = data_add_marker((yyvsp[-1].data), LABEL, (yyvsp[0].labelref));
2025
		}
2026
#line 2027 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
2027 2028
    break;

2029 2030
  case 80:
#line 498 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
2031
    {
2032
			(yyval.nodelist) = NULL;
2033
		}
2034
#line 2035 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
2035 2036
    break;

2037 2038
  case 81:
#line 502 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
2039
    {
2040
			(yyval.nodelist) = chain_node((yyvsp[-1].node), (yyvsp[0].nodelist));
2041
		}
2042
#line 2043 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
2043 2044
    break;

2045 2046
  case 82:
#line 506 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
2047
    {
2048 2049
			ERROR(&(yylsp[0]), "Properties must precede subnodes");
			YYERROR;
2050
		}
2051
#line 2052 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
2052 2053
    break;

2054 2055
  case 83:
#line 514 "dtc-parser.y" /* yacc.c:1646  */
S
Stephen Warren 已提交
2056
    {
2057
			(yyval.node) = name_node((yyvsp[0].node), (yyvsp[-1].propnodename));
2058
		}
2059
#line 2060 "dtc-parser.tab.c" /* yacc.c:1646  */
S
Stephen Warren 已提交
2060 2061
    break;

2062 2063
  case 84:
#line 518 "dtc-parser.y" /* yacc.c:1646  */
2064 2065 2066
    {
			(yyval.node) = name_node(build_node_delete(), (yyvsp[-1].propnodename));
		}
2067
#line 2068 "dtc-parser.tab.c" /* yacc.c:1646  */
2068 2069
    break;

2070 2071
  case 85:
#line 522 "dtc-parser.y" /* yacc.c:1646  */
D
David Gibson 已提交
2072
    {
2073 2074
			add_label(&(yyvsp[0].node)->labels, (yyvsp[-1].labelref));
			(yyval.node) = (yyvsp[0].node);
2075
		}
2076
#line 2077 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
2077 2078 2079
    break;


2080
#line 2081 "dtc-parser.tab.c" /* yacc.c:1646  */
D
David Gibson 已提交
2081 2082
      default: break;
    }
2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093
  /* User semantic actions sometimes alter yychar, and that requires
     that yytoken be updated with the new translation.  We take the
     approach of translating immediately before every use of yytoken.
     One alternative is translating here after every semantic action,
     but that translation would be missed if the semantic action invokes
     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
     incorrect destructor might then be invoked immediately.  In the
     case of YYERROR or YYBACKUP, subsequent parser actions might lead
     to an incorrect destructor call or verbose syntax error message
     before the lookahead is translated.  */
D
David Gibson 已提交
2094 2095 2096 2097 2098 2099 2100
  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);

  YYPOPSTACK (yylen);
  yylen = 0;
  YY_STACK_PRINT (yyss, yyssp);

  *++yyvsp = yyval;
2101
  *++yylsp = yyloc;
D
David Gibson 已提交
2102

2103
  /* Now 'shift' the result of the reduction.  Determine what state
D
David Gibson 已提交
2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117
     that goes to, based on the state we popped back to and the rule
     number reduced by.  */

  yyn = yyr1[yyn];

  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
    yystate = yytable[yystate];
  else
    yystate = yydefgoto[yyn - YYNTOKENS];

  goto yynewstate;


2118 2119 2120
/*--------------------------------------.
| yyerrlab -- here on detecting error.  |
`--------------------------------------*/
D
David Gibson 已提交
2121
yyerrlab:
2122 2123 2124 2125
  /* Make sure we have latest lookahead translation.  See comments at
     user semantic actions for why this is necessary.  */
  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);

D
David Gibson 已提交
2126 2127 2128 2129 2130 2131 2132
  /* If not already recovering from an error, report this error.  */
  if (!yyerrstatus)
    {
      ++yynerrs;
#if ! YYERROR_VERBOSE
      yyerror (YY_("syntax error"));
#else
2133 2134
# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
                                        yyssp, yytoken)
D
David Gibson 已提交
2135
      {
2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160
        char const *yymsgp = YY_("syntax error");
        int yysyntax_error_status;
        yysyntax_error_status = YYSYNTAX_ERROR;
        if (yysyntax_error_status == 0)
          yymsgp = yymsg;
        else if (yysyntax_error_status == 1)
          {
            if (yymsg != yymsgbuf)
              YYSTACK_FREE (yymsg);
            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
            if (!yymsg)
              {
                yymsg = yymsgbuf;
                yymsg_alloc = sizeof yymsgbuf;
                yysyntax_error_status = 2;
              }
            else
              {
                yysyntax_error_status = YYSYNTAX_ERROR;
                yymsgp = yymsg;
              }
          }
        yyerror (yymsgp);
        if (yysyntax_error_status == 2)
          goto yyexhaustedlab;
D
David Gibson 已提交
2161
      }
2162
# undef YYSYNTAX_ERROR
D
David Gibson 已提交
2163 2164 2165
#endif
    }

2166
  yyerror_range[1] = yylloc;
D
David Gibson 已提交
2167 2168 2169

  if (yyerrstatus == 3)
    {
2170
      /* If just tried and failed to reuse lookahead token after an
2171
         error, discard it.  */
D
David Gibson 已提交
2172 2173

      if (yychar <= YYEOF)
2174 2175 2176 2177 2178
        {
          /* Return failure if at end of input.  */
          if (yychar == YYEOF)
            YYABORT;
        }
D
David Gibson 已提交
2179
      else
2180 2181 2182 2183 2184
        {
          yydestruct ("Error: discarding",
                      yytoken, &yylval, &yylloc);
          yychar = YYEMPTY;
        }
D
David Gibson 已提交
2185 2186
    }

2187
  /* Else will try to reuse lookahead token after shifting the error
D
David Gibson 已提交
2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202
     token.  */
  goto yyerrlab1;


/*---------------------------------------------------.
| yyerrorlab -- error raised explicitly by YYERROR.  |
`---------------------------------------------------*/
yyerrorlab:

  /* Pacify compilers like GCC when the user code never invokes
     YYERROR and the label yyerrorlab therefore never appears in user
     code.  */
  if (/*CONSTCOND*/ 0)
     goto yyerrorlab;

2203 2204
  yyerror_range[1] = yylsp[1-yylen];
  /* Do not reclaim the symbols of the rule whose action triggered
D
David Gibson 已提交
2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216
     this YYERROR.  */
  YYPOPSTACK (yylen);
  yylen = 0;
  YY_STACK_PRINT (yyss, yyssp);
  yystate = *yyssp;
  goto yyerrlab1;


/*-------------------------------------------------------------.
| yyerrlab1 -- common code for both syntax error and YYERROR.  |
`-------------------------------------------------------------*/
yyerrlab1:
2217
  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
D
David Gibson 已提交
2218 2219 2220 2221

  for (;;)
    {
      yyn = yypact[yystate];
2222
      if (!yypact_value_is_default (yyn))
2223 2224 2225 2226 2227 2228 2229 2230 2231
        {
          yyn += YYTERROR;
          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
            {
              yyn = yytable[yyn];
              if (0 < yyn)
                break;
            }
        }
D
David Gibson 已提交
2232 2233 2234

      /* Pop the current state because it cannot handle the error token.  */
      if (yyssp == yyss)
2235
        YYABORT;
2236

2237
      yyerror_range[1] = *yylsp;
D
David Gibson 已提交
2238
      yydestruct ("Error: popping",
2239
                  yystos[yystate], yyvsp, yylsp);
D
David Gibson 已提交
2240 2241 2242 2243 2244
      YYPOPSTACK (1);
      yystate = *yyssp;
      YY_STACK_PRINT (yyss, yyssp);
    }

2245
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
D
David Gibson 已提交
2246
  *++yyvsp = yylval;
2247
  YY_IGNORE_MAYBE_UNINITIALIZED_END
D
David Gibson 已提交
2248

2249 2250 2251 2252 2253
  yyerror_range[2] = yylloc;
  /* Using YYLLOC is tempting, but would change the location of
     the lookahead.  YYLOC is available though.  */
  YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
  *++yylsp = yyloc;
D
David Gibson 已提交
2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275

  /* Shift the error token.  */
  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);

  yystate = yyn;
  goto yynewstate;


/*-------------------------------------.
| yyacceptlab -- YYACCEPT comes here.  |
`-------------------------------------*/
yyacceptlab:
  yyresult = 0;
  goto yyreturn;

/*-----------------------------------.
| yyabortlab -- YYABORT comes here.  |
`-----------------------------------*/
yyabortlab:
  yyresult = 1;
  goto yyreturn;

2276
#if !defined yyoverflow || YYERROR_VERBOSE
D
David Gibson 已提交
2277 2278 2279 2280 2281 2282 2283 2284 2285 2286
/*-------------------------------------------------.
| yyexhaustedlab -- memory exhaustion comes here.  |
`-------------------------------------------------*/
yyexhaustedlab:
  yyerror (YY_("memory exhausted"));
  yyresult = 2;
  /* Fall through.  */
#endif

yyreturn:
2287
  if (yychar != YYEMPTY)
2288 2289 2290 2291 2292
    {
      /* Make sure we have latest lookahead translation.  See comments at
         user semantic actions for why this is necessary.  */
      yytoken = YYTRANSLATE (yychar);
      yydestruct ("Cleanup: discarding lookahead",
2293
                  yytoken, &yylval, &yylloc);
2294
    }
2295
  /* Do not reclaim the symbols of the rule whose action triggered
D
David Gibson 已提交
2296 2297 2298 2299 2300 2301
     this YYABORT or YYACCEPT.  */
  YYPOPSTACK (yylen);
  YY_STACK_PRINT (yyss, yyssp);
  while (yyssp != yyss)
    {
      yydestruct ("Cleanup: popping",
2302
                  yystos[*yyssp], yyvsp, yylsp);
D
David Gibson 已提交
2303 2304 2305 2306 2307 2308 2309 2310 2311 2312
      YYPOPSTACK (1);
    }
#ifndef yyoverflow
  if (yyss != yyssa)
    YYSTACK_FREE (yyss);
#endif
#if YYERROR_VERBOSE
  if (yymsg != yymsgbuf)
    YYSTACK_FREE (yymsg);
#endif
2313
  return yyresult;
D
David Gibson 已提交
2314
}
2315
#line 528 "dtc-parser.y" /* yacc.c:1906  */
D
David Gibson 已提交
2316 2317


2318
void yyerror(char const *s)
S
Stephen Warren 已提交
2319
{
2320
	ERROR(&yylloc, "%s", s);
S
Stephen Warren 已提交
2321
}