1226031Sstas/* A Bison parser, made by GNU Bison 2.3. */ 2226031Sstas 3226031Sstas/* Skeleton implementation for Bison's Yacc-like parsers in C 4226031Sstas 5226031Sstas Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 6226031Sstas Free Software Foundation, Inc. 7226031Sstas 8226031Sstas This program is free software; you can redistribute it and/or modify 9226031Sstas it under the terms of the GNU General Public License as published by 10226031Sstas the Free Software Foundation; either version 2, or (at your option) 11226031Sstas any later version. 12226031Sstas 13226031Sstas This program is distributed in the hope that it will be useful, 14226031Sstas but WITHOUT ANY WARRANTY; without even the implied warranty of 15226031Sstas MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16226031Sstas GNU General Public License for more details. 17226031Sstas 18226031Sstas You should have received a copy of the GNU General Public License 19226031Sstas along with this program; if not, write to the Free Software 20226031Sstas Foundation, Inc., 51 Franklin Street, Fifth Floor, 21226031Sstas Boston, MA 02110-1301, USA. */ 22226031Sstas 23226031Sstas/* As a special exception, you may create a larger work that contains 24226031Sstas part or all of the Bison parser skeleton and distribute that work 25226031Sstas under terms of your choice, so long as that work isn't itself a 26226031Sstas parser generator using the skeleton or a modified version thereof 27226031Sstas as a parser skeleton. Alternatively, if you modify or redistribute 28226031Sstas the parser skeleton itself, you may (at your option) remove this 29226031Sstas special exception, which will cause the skeleton and the resulting 30226031Sstas Bison output files to be licensed under the GNU General Public 31226031Sstas License without this special exception. 32226031Sstas 33226031Sstas This special exception was added by the Free Software Foundation in 34226031Sstas version 2.2 of Bison. */ 35226031Sstas 36226031Sstas/* C LALR(1) parser skeleton written by Richard Stallman, by 37226031Sstas simplifying the original so-called "semantic" parser. */ 38226031Sstas 39226031Sstas/* All symbols defined below should begin with yy or YY, to avoid 40226031Sstas infringing on user name space. This should be done even for local 41226031Sstas variables, as they might otherwise be expanded by user macros. 42226031Sstas There are some unavoidable exceptions within include files to 43226031Sstas define necessary library symbols; they are noted "INFRINGES ON 44226031Sstas USER NAME SPACE" below. */ 45226031Sstas 46226031Sstas/* Identify Bison output. */ 47226031Sstas#define YYBISON 1 48226031Sstas 49226031Sstas/* Bison version. */ 50226031Sstas#define YYBISON_VERSION "2.3" 51226031Sstas 52226031Sstas/* Skeleton name. */ 53226031Sstas#define YYSKELETON_NAME "yacc.c" 54226031Sstas 55226031Sstas/* Pure parsers. */ 56226031Sstas#define YYPURE 0 57226031Sstas 58226031Sstas/* Using locations. */ 59226031Sstas#define YYLSP_NEEDED 0 60226031Sstas 61226031Sstas 62226031Sstas 63226031Sstas/* Tokens. */ 64226031Sstas#ifndef YYTOKENTYPE 65226031Sstas# define YYTOKENTYPE 66226031Sstas /* Put the tokens into the symbol table, so that GDB and other debuggers 67226031Sstas know about them. */ 68226031Sstas enum yytokentype { 69226031Sstas kw_ABSENT = 258, 70226031Sstas kw_ABSTRACT_SYNTAX = 259, 71226031Sstas kw_ALL = 260, 72226031Sstas kw_APPLICATION = 261, 73226031Sstas kw_AUTOMATIC = 262, 74226031Sstas kw_BEGIN = 263, 75226031Sstas kw_BIT = 264, 76226031Sstas kw_BMPString = 265, 77226031Sstas kw_BOOLEAN = 266, 78226031Sstas kw_BY = 267, 79226031Sstas kw_CHARACTER = 268, 80226031Sstas kw_CHOICE = 269, 81226031Sstas kw_CLASS = 270, 82226031Sstas kw_COMPONENT = 271, 83226031Sstas kw_COMPONENTS = 272, 84226031Sstas kw_CONSTRAINED = 273, 85226031Sstas kw_CONTAINING = 274, 86226031Sstas kw_DEFAULT = 275, 87226031Sstas kw_DEFINITIONS = 276, 88226031Sstas kw_EMBEDDED = 277, 89226031Sstas kw_ENCODED = 278, 90226031Sstas kw_END = 279, 91226031Sstas kw_ENUMERATED = 280, 92226031Sstas kw_EXCEPT = 281, 93226031Sstas kw_EXPLICIT = 282, 94226031Sstas kw_EXPORTS = 283, 95226031Sstas kw_EXTENSIBILITY = 284, 96226031Sstas kw_EXTERNAL = 285, 97226031Sstas kw_FALSE = 286, 98226031Sstas kw_FROM = 287, 99226031Sstas kw_GeneralString = 288, 100226031Sstas kw_GeneralizedTime = 289, 101226031Sstas kw_GraphicString = 290, 102226031Sstas kw_IA5String = 291, 103226031Sstas kw_IDENTIFIER = 292, 104226031Sstas kw_IMPLICIT = 293, 105226031Sstas kw_IMPLIED = 294, 106226031Sstas kw_IMPORTS = 295, 107226031Sstas kw_INCLUDES = 296, 108226031Sstas kw_INSTANCE = 297, 109226031Sstas kw_INTEGER = 298, 110226031Sstas kw_INTERSECTION = 299, 111226031Sstas kw_ISO646String = 300, 112226031Sstas kw_MAX = 301, 113226031Sstas kw_MIN = 302, 114226031Sstas kw_MINUS_INFINITY = 303, 115226031Sstas kw_NULL = 304, 116226031Sstas kw_NumericString = 305, 117226031Sstas kw_OBJECT = 306, 118226031Sstas kw_OCTET = 307, 119226031Sstas kw_OF = 308, 120226031Sstas kw_OPTIONAL = 309, 121226031Sstas kw_ObjectDescriptor = 310, 122226031Sstas kw_PATTERN = 311, 123226031Sstas kw_PDV = 312, 124226031Sstas kw_PLUS_INFINITY = 313, 125226031Sstas kw_PRESENT = 314, 126226031Sstas kw_PRIVATE = 315, 127226031Sstas kw_PrintableString = 316, 128226031Sstas kw_REAL = 317, 129226031Sstas kw_RELATIVE_OID = 318, 130226031Sstas kw_SEQUENCE = 319, 131226031Sstas kw_SET = 320, 132226031Sstas kw_SIZE = 321, 133226031Sstas kw_STRING = 322, 134226031Sstas kw_SYNTAX = 323, 135226031Sstas kw_T61String = 324, 136226031Sstas kw_TAGS = 325, 137226031Sstas kw_TRUE = 326, 138226031Sstas kw_TYPE_IDENTIFIER = 327, 139226031Sstas kw_TeletexString = 328, 140226031Sstas kw_UNION = 329, 141226031Sstas kw_UNIQUE = 330, 142226031Sstas kw_UNIVERSAL = 331, 143226031Sstas kw_UTCTime = 332, 144226031Sstas kw_UTF8String = 333, 145226031Sstas kw_UniversalString = 334, 146226031Sstas kw_VideotexString = 335, 147226031Sstas kw_VisibleString = 336, 148226031Sstas kw_WITH = 337, 149226031Sstas RANGE = 338, 150226031Sstas EEQUAL = 339, 151226031Sstas ELLIPSIS = 340, 152226031Sstas IDENTIFIER = 341, 153226031Sstas referencename = 342, 154226031Sstas STRING = 343, 155226031Sstas NUMBER = 344 156226031Sstas }; 157226031Sstas#endif 158226031Sstas/* Tokens. */ 159226031Sstas#define kw_ABSENT 258 160226031Sstas#define kw_ABSTRACT_SYNTAX 259 161226031Sstas#define kw_ALL 260 162226031Sstas#define kw_APPLICATION 261 163226031Sstas#define kw_AUTOMATIC 262 164226031Sstas#define kw_BEGIN 263 165226031Sstas#define kw_BIT 264 166226031Sstas#define kw_BMPString 265 167226031Sstas#define kw_BOOLEAN 266 168226031Sstas#define kw_BY 267 169226031Sstas#define kw_CHARACTER 268 170226031Sstas#define kw_CHOICE 269 171226031Sstas#define kw_CLASS 270 172226031Sstas#define kw_COMPONENT 271 173226031Sstas#define kw_COMPONENTS 272 174226031Sstas#define kw_CONSTRAINED 273 175226031Sstas#define kw_CONTAINING 274 176226031Sstas#define kw_DEFAULT 275 177226031Sstas#define kw_DEFINITIONS 276 178226031Sstas#define kw_EMBEDDED 277 179226031Sstas#define kw_ENCODED 278 180226031Sstas#define kw_END 279 181226031Sstas#define kw_ENUMERATED 280 182226031Sstas#define kw_EXCEPT 281 183226031Sstas#define kw_EXPLICIT 282 184226031Sstas#define kw_EXPORTS 283 185226031Sstas#define kw_EXTENSIBILITY 284 186226031Sstas#define kw_EXTERNAL 285 187226031Sstas#define kw_FALSE 286 188226031Sstas#define kw_FROM 287 189226031Sstas#define kw_GeneralString 288 190226031Sstas#define kw_GeneralizedTime 289 191226031Sstas#define kw_GraphicString 290 192226031Sstas#define kw_IA5String 291 193226031Sstas#define kw_IDENTIFIER 292 194226031Sstas#define kw_IMPLICIT 293 195226031Sstas#define kw_IMPLIED 294 196226031Sstas#define kw_IMPORTS 295 197226031Sstas#define kw_INCLUDES 296 198226031Sstas#define kw_INSTANCE 297 199226031Sstas#define kw_INTEGER 298 200226031Sstas#define kw_INTERSECTION 299 201226031Sstas#define kw_ISO646String 300 202226031Sstas#define kw_MAX 301 203226031Sstas#define kw_MIN 302 204226031Sstas#define kw_MINUS_INFINITY 303 205226031Sstas#define kw_NULL 304 206226031Sstas#define kw_NumericString 305 207226031Sstas#define kw_OBJECT 306 208226031Sstas#define kw_OCTET 307 209226031Sstas#define kw_OF 308 210226031Sstas#define kw_OPTIONAL 309 211226031Sstas#define kw_ObjectDescriptor 310 212226031Sstas#define kw_PATTERN 311 213226031Sstas#define kw_PDV 312 214226031Sstas#define kw_PLUS_INFINITY 313 215226031Sstas#define kw_PRESENT 314 216226031Sstas#define kw_PRIVATE 315 217226031Sstas#define kw_PrintableString 316 218226031Sstas#define kw_REAL 317 219226031Sstas#define kw_RELATIVE_OID 318 220226031Sstas#define kw_SEQUENCE 319 221226031Sstas#define kw_SET 320 222226031Sstas#define kw_SIZE 321 223226031Sstas#define kw_STRING 322 224226031Sstas#define kw_SYNTAX 323 225226031Sstas#define kw_T61String 324 226226031Sstas#define kw_TAGS 325 227226031Sstas#define kw_TRUE 326 228226031Sstas#define kw_TYPE_IDENTIFIER 327 229226031Sstas#define kw_TeletexString 328 230226031Sstas#define kw_UNION 329 231226031Sstas#define kw_UNIQUE 330 232226031Sstas#define kw_UNIVERSAL 331 233226031Sstas#define kw_UTCTime 332 234226031Sstas#define kw_UTF8String 333 235226031Sstas#define kw_UniversalString 334 236226031Sstas#define kw_VideotexString 335 237226031Sstas#define kw_VisibleString 336 238226031Sstas#define kw_WITH 337 239226031Sstas#define RANGE 338 240226031Sstas#define EEQUAL 339 241226031Sstas#define ELLIPSIS 340 242226031Sstas#define IDENTIFIER 341 243226031Sstas#define referencename 342 244226031Sstas#define STRING 343 245226031Sstas#define NUMBER 344 246226031Sstas 247226031Sstas 248226031Sstas 249226031Sstas 250226031Sstas/* Copy the first part of user declarations. */ 251226031Sstas#line 38 "asn1parse.y" 252226031Sstas 253226031Sstas 254226031Sstas#include <config.h> 255226031Sstas 256226031Sstas#include <stdio.h> 257226031Sstas#include <stdlib.h> 258226031Sstas#include <string.h> 259226031Sstas#include "symbol.h" 260226031Sstas#include "lex.h" 261226031Sstas#include "gen_locl.h" 262226031Sstas#include "der.h" 263226031Sstas 264226031SstasRCSID("$Id$"); 265226031Sstas 266226031Sstasstatic Type *new_type (Typetype t); 267226031Sstasstatic struct constraint_spec *new_constraint_spec(enum ctype); 268226031Sstasstatic Type *new_tag(int tagclass, int tagvalue, int tagenv, Type *oldtype); 269226031Sstasvoid yyerror (const char *); 270226031Sstasstatic struct objid *new_objid(const char *label, int value); 271226031Sstasstatic void add_oid_to_tail(struct objid *, struct objid *); 272226031Sstasstatic void fix_labels(Symbol *s); 273226031Sstas 274226031Sstasstruct string_list { 275226031Sstas char *string; 276226031Sstas struct string_list *next; 277226031Sstas}; 278226031Sstas 279226031Sstas/* Declarations for Bison */ 280226031Sstas#define YYMALLOC malloc 281226031Sstas#define YYFREE free 282226031Sstas 283226031Sstas 284226031Sstas 285226031Sstas/* Enabling traces. */ 286226031Sstas#ifndef YYDEBUG 287226031Sstas# define YYDEBUG 1 288226031Sstas#endif 289226031Sstas 290226031Sstas/* Enabling verbose error messages. */ 291226031Sstas#ifdef YYERROR_VERBOSE 292226031Sstas# undef YYERROR_VERBOSE 293226031Sstas# define YYERROR_VERBOSE 1 294226031Sstas#else 295226031Sstas# define YYERROR_VERBOSE 0 296226031Sstas#endif 297226031Sstas 298226031Sstas/* Enabling the token table. */ 299226031Sstas#ifndef YYTOKEN_TABLE 300226031Sstas# define YYTOKEN_TABLE 0 301226031Sstas#endif 302226031Sstas 303226031Sstas#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED 304226031Sstastypedef union YYSTYPE 305226031Sstas#line 71 "asn1parse.y" 306226031Sstas{ 307226031Sstas int constant; 308226031Sstas struct value *value; 309226031Sstas struct range *range; 310226031Sstas char *name; 311226031Sstas Type *type; 312226031Sstas Member *member; 313226031Sstas struct objid *objid; 314226031Sstas char *defval; 315226031Sstas struct string_list *sl; 316226031Sstas struct tagtype tag; 317226031Sstas struct memhead *members; 318226031Sstas struct constraint_spec *constraint_spec; 319226031Sstas} 320226031Sstas/* Line 193 of yacc.c. */ 321226031Sstas#line 322 "asn1parse.c" 322226031Sstas YYSTYPE; 323226031Sstas# define yystype YYSTYPE /* obsolescent; will be withdrawn */ 324226031Sstas# define YYSTYPE_IS_DECLARED 1 325226031Sstas# define YYSTYPE_IS_TRIVIAL 1 326226031Sstas#endif 327226031Sstas 328226031Sstas 329226031Sstas 330226031Sstas/* Copy the second part of user declarations. */ 331226031Sstas 332226031Sstas 333226031Sstas/* Line 216 of yacc.c. */ 334226031Sstas#line 335 "asn1parse.c" 335226031Sstas 336226031Sstas#ifdef short 337226031Sstas# undef short 338226031Sstas#endif 339226031Sstas 340226031Sstas#ifdef YYTYPE_UINT8 341226031Sstastypedef YYTYPE_UINT8 yytype_uint8; 342226031Sstas#else 343226031Sstastypedef unsigned char yytype_uint8; 344226031Sstas#endif 345226031Sstas 346226031Sstas#ifdef YYTYPE_INT8 347226031Sstastypedef YYTYPE_INT8 yytype_int8; 348226031Sstas#elif (defined __STDC__ || defined __C99__FUNC__ \ 349226031Sstas || defined __cplusplus || defined _MSC_VER) 350226031Sstastypedef signed char yytype_int8; 351226031Sstas#else 352226031Sstastypedef short int yytype_int8; 353226031Sstas#endif 354226031Sstas 355226031Sstas#ifdef YYTYPE_UINT16 356226031Sstastypedef YYTYPE_UINT16 yytype_uint16; 357226031Sstas#else 358226031Sstastypedef unsigned short int yytype_uint16; 359226031Sstas#endif 360226031Sstas 361226031Sstas#ifdef YYTYPE_INT16 362226031Sstastypedef YYTYPE_INT16 yytype_int16; 363226031Sstas#else 364226031Sstastypedef short int yytype_int16; 365226031Sstas#endif 366226031Sstas 367226031Sstas#ifndef YYSIZE_T 368226031Sstas# ifdef __SIZE_TYPE__ 369226031Sstas# define YYSIZE_T __SIZE_TYPE__ 370226031Sstas# elif defined size_t 371226031Sstas# define YYSIZE_T size_t 372226031Sstas# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ 373226031Sstas || defined __cplusplus || defined _MSC_VER) 374226031Sstas# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 375226031Sstas# define YYSIZE_T size_t 376226031Sstas# else 377226031Sstas# define YYSIZE_T unsigned int 378226031Sstas# endif 379226031Sstas#endif 380226031Sstas 381226031Sstas#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) 382226031Sstas 383226031Sstas#ifndef YY_ 384226031Sstas# if defined YYENABLE_NLS && YYENABLE_NLS 385226031Sstas# if ENABLE_NLS 386226031Sstas# include <libintl.h> /* INFRINGES ON USER NAME SPACE */ 387226031Sstas# define YY_(msgid) dgettext ("bison-runtime", msgid) 388226031Sstas# endif 389226031Sstas# endif 390226031Sstas# ifndef YY_ 391226031Sstas# define YY_(msgid) msgid 392226031Sstas# endif 393226031Sstas#endif 394226031Sstas 395226031Sstas/* Suppress unused-variable warnings by "using" E. */ 396226031Sstas#if ! defined lint || defined __GNUC__ 397226031Sstas# define YYUSE(e) ((void) (e)) 398226031Sstas#else 399226031Sstas# define YYUSE(e) /* empty */ 400226031Sstas#endif 401226031Sstas 402226031Sstas/* Identity function, used to suppress warnings about constant conditions. */ 403226031Sstas#ifndef lint 404226031Sstas# define YYID(n) (n) 405226031Sstas#else 406226031Sstas#if (defined __STDC__ || defined __C99__FUNC__ \ 407226031Sstas || defined __cplusplus || defined _MSC_VER) 408226031Sstasstatic int 409226031SstasYYID (int i) 410226031Sstas#else 411226031Sstasstatic int 412226031SstasYYID (i) 413226031Sstas int i; 414226031Sstas#endif 415226031Sstas{ 416226031Sstas return i; 417226031Sstas} 418226031Sstas#endif 419226031Sstas 420226031Sstas#if ! defined yyoverflow || YYERROR_VERBOSE 421226031Sstas 422226031Sstas/* The parser invokes alloca or malloc; define the necessary symbols. */ 423226031Sstas 424226031Sstas# ifdef YYSTACK_USE_ALLOCA 425226031Sstas# if YYSTACK_USE_ALLOCA 426226031Sstas# ifdef __GNUC__ 427226031Sstas# define YYSTACK_ALLOC __builtin_alloca 428226031Sstas# elif defined __BUILTIN_VA_ARG_INCR 429226031Sstas# include <alloca.h> /* INFRINGES ON USER NAME SPACE */ 430226031Sstas# elif defined _AIX 431226031Sstas# define YYSTACK_ALLOC __alloca 432226031Sstas# elif defined _MSC_VER 433226031Sstas# include <malloc.h> /* INFRINGES ON USER NAME SPACE */ 434226031Sstas# define alloca _alloca 435226031Sstas# else 436226031Sstas# define YYSTACK_ALLOC alloca 437226031Sstas# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ 438226031Sstas || defined __cplusplus || defined _MSC_VER) 439226031Sstas# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 440226031Sstas# ifndef _STDLIB_H 441226031Sstas# define _STDLIB_H 1 442226031Sstas# endif 443226031Sstas# endif 444226031Sstas# endif 445226031Sstas# endif 446226031Sstas# endif 447226031Sstas 448226031Sstas# ifdef YYSTACK_ALLOC 449226031Sstas /* Pacify GCC's `empty if-body' warning. */ 450226031Sstas# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) 451226031Sstas# ifndef YYSTACK_ALLOC_MAXIMUM 452226031Sstas /* The OS might guarantee only one guard page at the bottom of the stack, 453226031Sstas and a page size can be as small as 4096 bytes. So we cannot safely 454226031Sstas invoke alloca (N) if N exceeds 4096. Use a slightly smaller number 455226031Sstas to allow for a few compiler-allocated temporary stack slots. */ 456226031Sstas# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ 457226031Sstas# endif 458226031Sstas# else 459226031Sstas# define YYSTACK_ALLOC YYMALLOC 460226031Sstas# define YYSTACK_FREE YYFREE 461226031Sstas# ifndef YYSTACK_ALLOC_MAXIMUM 462226031Sstas# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM 463226031Sstas# endif 464226031Sstas# if (defined __cplusplus && ! defined _STDLIB_H \ 465226031Sstas && ! ((defined YYMALLOC || defined malloc) \ 466226031Sstas && (defined YYFREE || defined free))) 467226031Sstas# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 468226031Sstas# ifndef _STDLIB_H 469226031Sstas# define _STDLIB_H 1 470226031Sstas# endif 471226031Sstas# endif 472226031Sstas# ifndef YYMALLOC 473226031Sstas# define YYMALLOC malloc 474226031Sstas# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ 475226031Sstas || defined __cplusplus || defined _MSC_VER) 476226031Sstasvoid *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ 477226031Sstas# endif 478226031Sstas# endif 479226031Sstas# ifndef YYFREE 480226031Sstas# define YYFREE free 481226031Sstas# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ 482226031Sstas || defined __cplusplus || defined _MSC_VER) 483226031Sstasvoid free (void *); /* INFRINGES ON USER NAME SPACE */ 484226031Sstas# endif 485226031Sstas# endif 486226031Sstas# endif 487226031Sstas#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ 488226031Sstas 489226031Sstas 490226031Sstas#if (! defined yyoverflow \ 491226031Sstas && (! defined __cplusplus \ 492226031Sstas || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) 493226031Sstas 494226031Sstas/* A type that is properly aligned for any stack member. */ 495226031Sstasunion yyalloc 496226031Sstas{ 497226031Sstas yytype_int16 yyss; 498226031Sstas YYSTYPE yyvs; 499226031Sstas }; 500226031Sstas 501226031Sstas/* The size of the maximum gap between one aligned stack and the next. */ 502226031Sstas# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) 503226031Sstas 504226031Sstas/* The size of an array large to enough to hold all stacks, each with 505226031Sstas N elements. */ 506226031Sstas# define YYSTACK_BYTES(N) \ 507226031Sstas ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ 508226031Sstas + YYSTACK_GAP_MAXIMUM) 509226031Sstas 510226031Sstas/* Copy COUNT objects from FROM to TO. The source and destination do 511226031Sstas not overlap. */ 512226031Sstas# ifndef YYCOPY 513226031Sstas# if defined __GNUC__ && 1 < __GNUC__ 514226031Sstas# define YYCOPY(To, From, Count) \ 515226031Sstas __builtin_memcpy (To, From, (Count) * sizeof (*(From))) 516226031Sstas# else 517226031Sstas# define YYCOPY(To, From, Count) \ 518226031Sstas do \ 519226031Sstas { \ 520226031Sstas YYSIZE_T yyi; \ 521226031Sstas for (yyi = 0; yyi < (Count); yyi++) \ 522226031Sstas (To)[yyi] = (From)[yyi]; \ 523226031Sstas } \ 524226031Sstas while (YYID (0)) 525226031Sstas# endif 526226031Sstas# endif 527226031Sstas 528226031Sstas/* Relocate STACK from its old location to the new one. The 529226031Sstas local variables YYSIZE and YYSTACKSIZE give the old and new number of 530226031Sstas elements in the stack, and YYPTR gives the new location of the 531226031Sstas stack. Advance YYPTR to a properly aligned location for the next 532226031Sstas stack. */ 533226031Sstas# define YYSTACK_RELOCATE(Stack) \ 534226031Sstas do \ 535226031Sstas { \ 536226031Sstas YYSIZE_T yynewbytes; \ 537226031Sstas YYCOPY (&yyptr->Stack, Stack, yysize); \ 538226031Sstas Stack = &yyptr->Stack; \ 539226031Sstas yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ 540226031Sstas yyptr += yynewbytes / sizeof (*yyptr); \ 541226031Sstas } \ 542226031Sstas while (YYID (0)) 543226031Sstas 544226031Sstas#endif 545226031Sstas 546226031Sstas/* YYFINAL -- State number of the termination state. */ 547226031Sstas#define YYFINAL 6 548226031Sstas/* YYLAST -- Last index in YYTABLE. */ 549226031Sstas#define YYLAST 203 550226031Sstas 551226031Sstas/* YYNTOKENS -- Number of terminals. */ 552226031Sstas#define YYNTOKENS 98 553226031Sstas/* YYNNTS -- Number of nonterminals. */ 554226031Sstas#define YYNNTS 69 555226031Sstas/* YYNRULES -- Number of rules. */ 556226031Sstas#define YYNRULES 140 557226031Sstas/* YYNRULES -- Number of states. */ 558226031Sstas#define YYNSTATES 220 559226031Sstas 560226031Sstas/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ 561226031Sstas#define YYUNDEFTOK 2 562226031Sstas#define YYMAXUTOK 344 563226031Sstas 564226031Sstas#define YYTRANSLATE(YYX) \ 565226031Sstas ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) 566226031Sstas 567226031Sstas/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ 568226031Sstasstatic const yytype_uint8 yytranslate[] = 569226031Sstas{ 570226031Sstas 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 571226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 572226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 573226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 574226031Sstas 92, 93, 2, 2, 91, 2, 2, 2, 2, 2, 575226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 90, 576226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 577226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 578226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 579226031Sstas 2, 96, 2, 97, 2, 2, 2, 2, 2, 2, 580226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 581226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 582226031Sstas 2, 2, 2, 94, 2, 95, 2, 2, 2, 2, 583226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 584226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 585226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 586226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 587226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 588226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 589226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 590226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 591226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 592226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 593226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 594226031Sstas 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 595226031Sstas 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 596226031Sstas 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 597226031Sstas 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 598226031Sstas 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 599226031Sstas 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 600226031Sstas 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 601226031Sstas 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 602226031Sstas 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 603226031Sstas 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 604226031Sstas 85, 86, 87, 88, 89 605226031Sstas}; 606226031Sstas 607226031Sstas#if YYDEBUG 608226031Sstas/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in 609226031Sstas YYRHS. */ 610226031Sstasstatic const yytype_uint16 yyprhs[] = 611226031Sstas{ 612226031Sstas 0, 0, 3, 13, 16, 19, 22, 23, 26, 27, 613226031Sstas 31, 32, 36, 37, 39, 40, 42, 45, 50, 54, 614226031Sstas 57, 58, 60, 63, 65, 67, 71, 73, 77, 79, 615226031Sstas 81, 83, 85, 87, 89, 91, 93, 95, 97, 99, 616226031Sstas 101, 103, 105, 107, 109, 111, 113, 119, 125, 131, 617226031Sstas 135, 137, 140, 145, 147, 151, 155, 160, 165, 167, 618226031Sstas 170, 176, 179, 183, 185, 186, 189, 194, 198, 203, 619226031Sstas 208, 212, 216, 221, 223, 225, 227, 229, 231, 234, 620226031Sstas 238, 240, 242, 244, 247, 251, 257, 262, 266, 271, 621226031Sstas 272, 274, 276, 278, 279, 281, 283, 288, 290, 292, 622226031Sstas 294, 296, 298, 300, 302, 304, 306, 308, 312, 316, 623226031Sstas 319, 321, 324, 328, 330, 334, 339, 341, 342, 346, 624226031Sstas 347, 350, 355, 357, 359, 361, 363, 365, 367, 369, 625226031Sstas 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 626226031Sstas 391 627226031Sstas}; 628226031Sstas 629226031Sstas/* YYRHS -- A `-1'-separated list of the rules' RHS. */ 630226031Sstasstatic const yytype_int16 yyrhs[] = 631226031Sstas{ 632226031Sstas 99, 0, -1, 86, 152, 21, 100, 101, 84, 8, 633226031Sstas 102, 24, -1, 27, 70, -1, 38, 70, -1, 7, 634226031Sstas 70, -1, -1, 29, 39, -1, -1, 107, 103, 108, 635226031Sstas -1, -1, 40, 104, 90, -1, -1, 105, -1, -1, 636226031Sstas 106, -1, 105, 106, -1, 110, 32, 86, 152, -1, 637226031Sstas 28, 110, 90, -1, 28, 5, -1, -1, 109, -1, 638226031Sstas 109, 108, -1, 111, -1, 144, -1, 86, 91, 110, 639226031Sstas -1, 86, -1, 86, 84, 112, -1, 113, -1, 131, 640226031Sstas -1, 134, -1, 121, -1, 114, -1, 145, -1, 130, 641226031Sstas -1, 119, -1, 116, -1, 124, -1, 122, -1, 123, 642226031Sstas -1, 126, -1, 127, -1, 128, -1, 129, -1, 140, 643226031Sstas -1, 11, -1, 92, 156, 83, 156, 93, -1, 92, 644226031Sstas 156, 83, 46, 93, -1, 92, 47, 83, 156, 93, 645226031Sstas -1, 92, 156, 93, -1, 43, -1, 43, 115, -1, 646226031Sstas 43, 94, 117, 95, -1, 118, -1, 117, 91, 118, 647226031Sstas -1, 117, 91, 85, -1, 86, 92, 164, 93, -1, 648226031Sstas 25, 94, 120, 95, -1, 117, -1, 9, 67, -1, 649226031Sstas 9, 67, 94, 150, 95, -1, 51, 37, -1, 52, 650226031Sstas 67, 125, -1, 49, -1, -1, 66, 115, -1, 64, 651226031Sstas 94, 147, 95, -1, 64, 94, 95, -1, 64, 125, 652226031Sstas 53, 112, -1, 65, 94, 147, 95, -1, 65, 94, 653226031Sstas 95, -1, 65, 53, 112, -1, 14, 94, 147, 95, 654226031Sstas -1, 132, -1, 133, -1, 86, -1, 34, -1, 77, 655226031Sstas -1, 112, 135, -1, 92, 136, 93, -1, 137, -1, 656226031Sstas 138, -1, 139, -1, 19, 112, -1, 23, 12, 156, 657226031Sstas -1, 19, 112, 23, 12, 156, -1, 18, 12, 94, 658226031Sstas 95, -1, 141, 143, 112, -1, 96, 142, 89, 97, 659226031Sstas -1, -1, 76, -1, 6, -1, 60, -1, -1, 27, 660226031Sstas -1, 38, -1, 86, 112, 84, 156, -1, 146, -1, 661226031Sstas 33, -1, 73, -1, 78, -1, 61, -1, 81, -1, 662226031Sstas 36, -1, 10, -1, 79, -1, 149, -1, 147, 91, 663226031Sstas 149, -1, 147, 91, 85, -1, 86, 112, -1, 148, 664226031Sstas -1, 148, 54, -1, 148, 20, 156, -1, 151, -1, 665226031Sstas 150, 91, 151, -1, 86, 92, 89, 93, -1, 153, 666226031Sstas -1, -1, 94, 154, 95, -1, -1, 155, 154, -1, 667226031Sstas 86, 92, 89, 93, -1, 86, -1, 89, -1, 157, 668226031Sstas -1, 158, -1, 162, -1, 161, -1, 163, -1, 166, 669226031Sstas -1, 165, -1, 159, -1, 160, -1, 86, -1, 88, 670226031Sstas -1, 71, -1, 31, -1, 164, -1, 89, -1, 49, 671226031Sstas -1, 153, -1 672226031Sstas}; 673226031Sstas 674226031Sstas/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ 675226031Sstasstatic const yytype_uint16 yyrline[] = 676226031Sstas{ 677226031Sstas 0, 239, 239, 246, 247, 249, 251, 254, 256, 259, 678226031Sstas 260, 263, 264, 267, 268, 271, 272, 275, 287, 293, 679226031Sstas 294, 297, 298, 301, 302, 305, 311, 319, 329, 330, 680226031Sstas 331, 334, 335, 336, 337, 338, 339, 340, 341, 342, 681226031Sstas 343, 344, 345, 346, 347, 350, 357, 367, 375, 383, 682226031Sstas 394, 399, 405, 413, 419, 424, 428, 441, 449, 452, 683226031Sstas 459, 467, 473, 482, 490, 491, 496, 502, 510, 519, 684226031Sstas 525, 533, 541, 548, 549, 552, 563, 568, 575, 591, 685226031Sstas 597, 600, 601, 604, 610, 618, 628, 634, 647, 656, 686226031Sstas 659, 663, 667, 674, 677, 681, 688, 699, 702, 707, 687226031Sstas 712, 717, 722, 727, 732, 737, 745, 751, 756, 767, 688226031Sstas 778, 784, 790, 798, 804, 811, 824, 825, 828, 835, 689226031Sstas 838, 849, 853, 864, 870, 871, 874, 875, 876, 877, 690226031Sstas 878, 881, 884, 887, 898, 906, 912, 920, 928, 931, 691226031Sstas 936 692226031Sstas}; 693226031Sstas#endif 694226031Sstas 695226031Sstas#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE 696226031Sstas/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. 697226031Sstas First, the terminals, then, starting at YYNTOKENS, nonterminals. */ 698226031Sstasstatic const char *const yytname[] = 699226031Sstas{ 700226031Sstas "$end", "error", "$undefined", "kw_ABSENT", "kw_ABSTRACT_SYNTAX", 701226031Sstas "kw_ALL", "kw_APPLICATION", "kw_AUTOMATIC", "kw_BEGIN", "kw_BIT", 702226031Sstas "kw_BMPString", "kw_BOOLEAN", "kw_BY", "kw_CHARACTER", "kw_CHOICE", 703226031Sstas "kw_CLASS", "kw_COMPONENT", "kw_COMPONENTS", "kw_CONSTRAINED", 704226031Sstas "kw_CONTAINING", "kw_DEFAULT", "kw_DEFINITIONS", "kw_EMBEDDED", 705226031Sstas "kw_ENCODED", "kw_END", "kw_ENUMERATED", "kw_EXCEPT", "kw_EXPLICIT", 706226031Sstas "kw_EXPORTS", "kw_EXTENSIBILITY", "kw_EXTERNAL", "kw_FALSE", "kw_FROM", 707226031Sstas "kw_GeneralString", "kw_GeneralizedTime", "kw_GraphicString", 708226031Sstas "kw_IA5String", "kw_IDENTIFIER", "kw_IMPLICIT", "kw_IMPLIED", 709226031Sstas "kw_IMPORTS", "kw_INCLUDES", "kw_INSTANCE", "kw_INTEGER", 710226031Sstas "kw_INTERSECTION", "kw_ISO646String", "kw_MAX", "kw_MIN", 711226031Sstas "kw_MINUS_INFINITY", "kw_NULL", "kw_NumericString", "kw_OBJECT", 712226031Sstas "kw_OCTET", "kw_OF", "kw_OPTIONAL", "kw_ObjectDescriptor", "kw_PATTERN", 713226031Sstas "kw_PDV", "kw_PLUS_INFINITY", "kw_PRESENT", "kw_PRIVATE", 714226031Sstas "kw_PrintableString", "kw_REAL", "kw_RELATIVE_OID", "kw_SEQUENCE", 715226031Sstas "kw_SET", "kw_SIZE", "kw_STRING", "kw_SYNTAX", "kw_T61String", "kw_TAGS", 716226031Sstas "kw_TRUE", "kw_TYPE_IDENTIFIER", "kw_TeletexString", "kw_UNION", 717226031Sstas "kw_UNIQUE", "kw_UNIVERSAL", "kw_UTCTime", "kw_UTF8String", 718226031Sstas "kw_UniversalString", "kw_VideotexString", "kw_VisibleString", "kw_WITH", 719226031Sstas "RANGE", "EEQUAL", "ELLIPSIS", "IDENTIFIER", "referencename", "STRING", 720226031Sstas "NUMBER", "';'", "','", "'('", "')'", "'{'", "'}'", "'['", "']'", 721226031Sstas "$accept", "ModuleDefinition", "TagDefault", "ExtensionDefault", 722226031Sstas "ModuleBody", "Imports", "SymbolsImported", "SymbolsFromModuleList", 723226031Sstas "SymbolsFromModule", "Exports", "AssignmentList", "Assignment", 724226031Sstas "referencenames", "TypeAssignment", "Type", "BuiltinType", "BooleanType", 725226031Sstas "range", "IntegerType", "NamedNumberList", "NamedNumber", 726226031Sstas "EnumeratedType", "Enumerations", "BitStringType", 727226031Sstas "ObjectIdentifierType", "OctetStringType", "NullType", "size", 728226031Sstas "SequenceType", "SequenceOfType", "SetType", "SetOfType", "ChoiceType", 729226031Sstas "ReferencedType", "DefinedType", "UsefulType", "ConstrainedType", 730226031Sstas "Constraint", "ConstraintSpec", "GeneralConstraint", 731226031Sstas "ContentsConstraint", "UserDefinedConstraint", "TaggedType", "Tag", 732226031Sstas "Class", "tagenv", "ValueAssignment", "CharacterStringType", 733226031Sstas "RestrictedCharactedStringType", "ComponentTypeList", "NamedType", 734226031Sstas "ComponentType", "NamedBitList", "NamedBit", "objid_opt", "objid", 735226031Sstas "objid_list", "objid_element", "Value", "BuiltinValue", 736226031Sstas "ReferencedValue", "DefinedValue", "Valuereference", 737226031Sstas "CharacterStringValue", "BooleanValue", "IntegerValue", "SignedNumber", 738226031Sstas "NullValue", "ObjectIdentifierValue", 0 739226031Sstas}; 740226031Sstas#endif 741226031Sstas 742226031Sstas# ifdef YYPRINT 743226031Sstas/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to 744226031Sstas token YYLEX-NUM. */ 745226031Sstasstatic const yytype_uint16 yytoknum[] = 746226031Sstas{ 747226031Sstas 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 748226031Sstas 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 749226031Sstas 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 750226031Sstas 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 751226031Sstas 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 752226031Sstas 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 753226031Sstas 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 754226031Sstas 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 755226031Sstas 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 756226031Sstas 59, 44, 40, 41, 123, 125, 91, 93 757226031Sstas}; 758226031Sstas# endif 759226031Sstas 760226031Sstas/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ 761226031Sstasstatic const yytype_uint8 yyr1[] = 762226031Sstas{ 763226031Sstas 0, 98, 99, 100, 100, 100, 100, 101, 101, 102, 764226031Sstas 102, 103, 103, 104, 104, 105, 105, 106, 107, 107, 765226031Sstas 107, 108, 108, 109, 109, 110, 110, 111, 112, 112, 766226031Sstas 112, 113, 113, 113, 113, 113, 113, 113, 113, 113, 767226031Sstas 113, 113, 113, 113, 113, 114, 115, 115, 115, 115, 768226031Sstas 116, 116, 116, 117, 117, 117, 118, 119, 120, 121, 769226031Sstas 121, 122, 123, 124, 125, 125, 126, 126, 127, 128, 770226031Sstas 128, 129, 130, 131, 131, 132, 133, 133, 134, 135, 771226031Sstas 136, 137, 137, 138, 138, 138, 139, 140, 141, 142, 772226031Sstas 142, 142, 142, 143, 143, 143, 144, 145, 146, 146, 773226031Sstas 146, 146, 146, 146, 146, 146, 147, 147, 147, 148, 774226031Sstas 149, 149, 149, 150, 150, 151, 152, 152, 153, 154, 775226031Sstas 154, 155, 155, 155, 156, 156, 157, 157, 157, 157, 776226031Sstas 157, 158, 159, 160, 161, 162, 162, 163, 164, 165, 777226031Sstas 166 778226031Sstas}; 779226031Sstas 780226031Sstas/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ 781226031Sstasstatic const yytype_uint8 yyr2[] = 782226031Sstas{ 783226031Sstas 0, 2, 9, 2, 2, 2, 0, 2, 0, 3, 784226031Sstas 0, 3, 0, 1, 0, 1, 2, 4, 3, 2, 785226031Sstas 0, 1, 2, 1, 1, 3, 1, 3, 1, 1, 786226031Sstas 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 787226031Sstas 1, 1, 1, 1, 1, 1, 5, 5, 5, 3, 788226031Sstas 1, 2, 4, 1, 3, 3, 4, 4, 1, 2, 789226031Sstas 5, 2, 3, 1, 0, 2, 4, 3, 4, 4, 790226031Sstas 3, 3, 4, 1, 1, 1, 1, 1, 2, 3, 791226031Sstas 1, 1, 1, 2, 3, 5, 4, 3, 4, 0, 792226031Sstas 1, 1, 1, 0, 1, 1, 4, 1, 1, 1, 793226031Sstas 1, 1, 1, 1, 1, 1, 1, 3, 3, 2, 794226031Sstas 1, 2, 3, 1, 3, 4, 1, 0, 3, 0, 795226031Sstas 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 796226031Sstas 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 797226031Sstas 1 798226031Sstas}; 799226031Sstas 800226031Sstas/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state 801226031Sstas STATE-NUM when YYTABLE doesn't specify something else to do. Zero 802226031Sstas means the default is an error. */ 803226031Sstasstatic const yytype_uint8 yydefact[] = 804226031Sstas{ 805226031Sstas 0, 117, 0, 119, 0, 116, 1, 122, 123, 0, 806226031Sstas 119, 6, 0, 118, 120, 0, 0, 0, 8, 0, 807226031Sstas 5, 3, 4, 0, 0, 121, 7, 0, 20, 0, 808226031Sstas 0, 12, 19, 26, 0, 2, 14, 0, 0, 18, 809226031Sstas 0, 13, 15, 0, 0, 9, 21, 23, 24, 25, 810226031Sstas 11, 16, 0, 0, 104, 45, 0, 0, 98, 76, 811226031Sstas 103, 50, 63, 0, 0, 101, 64, 0, 99, 77, 812226031Sstas 100, 105, 102, 0, 75, 89, 0, 28, 32, 36, 813226031Sstas 35, 31, 38, 39, 37, 40, 41, 42, 43, 34, 814226031Sstas 29, 73, 74, 30, 44, 93, 33, 97, 22, 117, 815226031Sstas 59, 0, 0, 0, 0, 51, 61, 64, 0, 0, 816226031Sstas 0, 0, 0, 27, 91, 92, 90, 0, 0, 0, 817226031Sstas 78, 94, 95, 0, 17, 0, 0, 0, 110, 106, 818226031Sstas 0, 58, 53, 0, 136, 0, 139, 135, 133, 134, 819226031Sstas 138, 140, 0, 124, 125, 131, 132, 127, 126, 128, 820226031Sstas 137, 130, 129, 0, 62, 65, 67, 0, 0, 71, 821226031Sstas 70, 0, 0, 96, 0, 0, 0, 0, 80, 81, 822226031Sstas 82, 87, 0, 0, 113, 109, 0, 72, 0, 111, 823226031Sstas 0, 0, 57, 0, 0, 49, 52, 66, 68, 69, 824226031Sstas 88, 0, 83, 0, 79, 0, 0, 60, 108, 107, 825226031Sstas 112, 0, 55, 54, 0, 0, 0, 0, 0, 84, 826226031Sstas 0, 114, 56, 48, 47, 46, 86, 0, 115, 85 827226031Sstas}; 828226031Sstas 829226031Sstas/* YYDEFGOTO[NTERM-NUM]. */ 830226031Sstasstatic const yytype_int16 yydefgoto[] = 831226031Sstas{ 832226031Sstas -1, 2, 18, 24, 30, 37, 40, 41, 42, 31, 833226031Sstas 45, 46, 43, 47, 76, 77, 78, 105, 79, 131, 834226031Sstas 132, 80, 133, 81, 82, 83, 84, 110, 85, 86, 835226031Sstas 87, 88, 89, 90, 91, 92, 93, 120, 167, 168, 836226031Sstas 169, 170, 94, 95, 117, 123, 48, 96, 97, 127, 837226031Sstas 128, 129, 173, 174, 4, 141, 9, 10, 142, 143, 838226031Sstas 144, 145, 146, 147, 148, 149, 150, 151, 152 839226031Sstas}; 840226031Sstas 841226031Sstas/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 842226031Sstas STATE-NUM. */ 843226031Sstas#define YYPACT_NINF -119 844226031Sstasstatic const yytype_int16 yypact[] = 845226031Sstas{ 846226031Sstas -43, -56, 47, -65, 29, -119, -119, -31, -119, -25, 847226031Sstas -65, 4, -1, -119, -119, 17, 20, 26, 50, 13, 848226031Sstas -119, -119, -119, 63, 24, -119, -119, 104, 8, -2, 849226031Sstas 89, 74, -119, 33, 25, -119, 34, 39, 34, -119, 850226031Sstas 37, 34, -119, 98, 58, -119, 39, -119, -119, -119, 851226031Sstas -119, -119, 52, 66, -119, -119, 51, 53, -119, -119, 852226031Sstas -119, -79, -119, 109, 81, -119, -60, -48, -119, -119, 853226031Sstas -119, -119, -119, 107, -119, 2, -74, -119, -119, -119, 854226031Sstas -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, 855226031Sstas -119, -119, -119, -119, -119, -18, -119, -119, -119, -56, 856226031Sstas 55, 65, 67, -12, 67, -119, -119, 86, 68, -70, 857226031Sstas 102, 107, -69, 69, -119, -119, -119, 73, 40, 10, 858226031Sstas -119, -119, -119, 107, -119, 71, 107, -47, -13, -119, 859226031Sstas 72, 75, -119, 70, -119, 80, -119, -119, -119, -119, 860226031Sstas -119, -119, -71, -119, -119, -119, -119, -119, -119, -119, 861226031Sstas -119, -119, -119, -46, -119, -119, -119, -39, 107, 69, 862226031Sstas -119, -38, 76, -119, 155, 107, 157, 77, -119, -119, 863226031Sstas -119, 69, 82, -10, -119, 69, -22, -119, 40, -119, 864226031Sstas 87, 19, -119, 40, 9, -119, -119, -119, 69, -119, 865226031Sstas -119, 83, -19, 40, -119, 90, 71, -119, -119, -119, 866226031Sstas -119, 85, -119, -119, 88, 94, 96, 95, 163, -119, 867226031Sstas 99, -119, -119, -119, -119, -119, -119, 40, -119, -119 868226031Sstas}; 869226031Sstas 870226031Sstas/* YYPGOTO[NTERM-NUM]. */ 871226031Sstasstatic const yytype_int16 yypgoto[] = 872226031Sstas{ 873226031Sstas -119, -119, -119, -119, -119, -119, -119, -119, 141, -119, 874226031Sstas 137, -119, -15, -119, -72, -119, -119, 91, -119, 92, 875226031Sstas 14, -119, -119, -119, -119, -119, -119, 84, -119, -119, 876226031Sstas -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, 877226031Sstas -119, -119, -119, -119, -119, -119, -119, -119, -119, -82, 878226031Sstas -119, 18, -119, 5, 101, 1, 187, -119, -118, -119, 879226031Sstas -119, -119, -119, -119, -119, -119, 22, -119, -119 880226031Sstas}; 881226031Sstas 882226031Sstas/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If 883226031Sstas positive, shift that token. If negative, reduce the rule which 884226031Sstas number is the opposite. If zero, do what YYDEFACT says. 885226031Sstas If YYTABLE_NINF, syntax error. */ 886226031Sstas#define YYTABLE_NINF -11 887226031Sstasstatic const yytype_int16 yytable[] = 888226031Sstas{ 889226031Sstas 163, 113, 5, 32, 208, 111, 108, 178, 114, 121, 890226031Sstas 118, 15, 184, 103, 34, 104, 126, 126, 119, 134, 891226031Sstas 122, 7, 185, 49, 8, 156, 160, 157, 164, 165, 892226031Sstas 161, 16, -10, 166, 109, 135, 29, 136, 3, 159, 893226031Sstas 134, 179, 17, 1, 176, 181, 112, 6, 177, 186, 894226031Sstas 11, 171, 176, 176, 175, 205, 187, 189, 136, 137, 895226031Sstas 200, 12, 115, 198, 126, 204, 206, 53, 54, 55, 896226031Sstas 13, 134, 56, 119, 138, 209, 139, 140, 116, 23, 897226031Sstas 137, 196, 3, 57, 33, 197, 188, 20, 19, 136, 898226031Sstas 21, 58, 59, 192, 60, 138, 22, 139, 140, 219, 899226031Sstas 5, 61, 26, 3, 202, 130, 25, 62, 27, 63, 900226031Sstas 64, 137, 28, 35, 36, 39, 53, 54, 55, 65, 901226031Sstas 33, 56, 66, 67, 38, 44, 138, 50, 139, 140, 902226031Sstas 52, 68, 57, 100, 3, 69, 70, 71, 99, 72, 903226031Sstas 58, 59, 73, 60, 74, 101, 106, 102, 107, 125, 904226031Sstas 61, 126, 108, 130, 75, 158, 62, 172, 63, 64, 905226031Sstas 103, 119, 162, 183, 180, 182, 181, 191, 65, 193, 906226031Sstas 194, 66, 67, 190, 195, 217, 140, 207, 212, 210, 907226031Sstas 68, 213, 51, 98, 69, 70, 71, 214, 72, 215, 908226031Sstas 216, 154, 218, 74, 199, 203, 153, 14, 0, 155, 909226031Sstas 124, 211, 201, 75 910226031Sstas}; 911226031Sstas 912226031Sstasstatic const yytype_int16 yycheck[] = 913226031Sstas{ 914226031Sstas 118, 73, 1, 5, 23, 53, 66, 20, 6, 27, 915226031Sstas 84, 7, 83, 92, 29, 94, 86, 86, 92, 31, 916226031Sstas 38, 86, 93, 38, 89, 95, 95, 109, 18, 19, 917226031Sstas 112, 27, 24, 23, 94, 47, 28, 49, 94, 111, 918226031Sstas 31, 54, 38, 86, 91, 91, 94, 0, 95, 95, 919226031Sstas 21, 123, 91, 91, 126, 46, 95, 95, 49, 71, 920226031Sstas 178, 92, 60, 85, 86, 183, 184, 9, 10, 11, 921226031Sstas 95, 31, 14, 92, 86, 193, 88, 89, 76, 29, 922226031Sstas 71, 91, 94, 25, 86, 95, 158, 70, 89, 49, 923226031Sstas 70, 33, 34, 165, 36, 86, 70, 88, 89, 217, 924226031Sstas 99, 43, 39, 94, 85, 86, 93, 49, 84, 51, 925226031Sstas 52, 71, 8, 24, 40, 90, 9, 10, 11, 61, 926226031Sstas 86, 14, 64, 65, 91, 86, 86, 90, 88, 89, 927226031Sstas 32, 73, 25, 67, 94, 77, 78, 79, 86, 81, 928226031Sstas 33, 34, 84, 36, 86, 94, 37, 94, 67, 94, 929226031Sstas 43, 86, 66, 86, 96, 53, 49, 86, 51, 52, 930226031Sstas 92, 92, 89, 83, 92, 95, 91, 12, 61, 12, 931226031Sstas 93, 64, 65, 97, 92, 12, 89, 94, 93, 89, 932226031Sstas 73, 93, 41, 46, 77, 78, 79, 93, 81, 93, 933226031Sstas 95, 107, 93, 86, 176, 181, 104, 10, -1, 108, 934226031Sstas 99, 196, 180, 96 935226031Sstas}; 936226031Sstas 937226031Sstas/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing 938226031Sstas symbol of state STATE-NUM. */ 939226031Sstasstatic const yytype_uint8 yystos[] = 940226031Sstas{ 941226031Sstas 0, 86, 99, 94, 152, 153, 0, 86, 89, 154, 942226031Sstas 155, 21, 92, 95, 154, 7, 27, 38, 100, 89, 943226031Sstas 70, 70, 70, 29, 101, 93, 39, 84, 8, 28, 944226031Sstas 102, 107, 5, 86, 110, 24, 40, 103, 91, 90, 945226031Sstas 104, 105, 106, 110, 86, 108, 109, 111, 144, 110, 946226031Sstas 90, 106, 32, 9, 10, 11, 14, 25, 33, 34, 947226031Sstas 36, 43, 49, 51, 52, 61, 64, 65, 73, 77, 948226031Sstas 78, 79, 81, 84, 86, 96, 112, 113, 114, 116, 949226031Sstas 119, 121, 122, 123, 124, 126, 127, 128, 129, 130, 950226031Sstas 131, 132, 133, 134, 140, 141, 145, 146, 108, 86, 951226031Sstas 67, 94, 94, 92, 94, 115, 37, 67, 66, 94, 952226031Sstas 125, 53, 94, 112, 6, 60, 76, 142, 84, 92, 953226031Sstas 135, 27, 38, 143, 152, 94, 86, 147, 148, 149, 954226031Sstas 86, 117, 118, 120, 31, 47, 49, 71, 86, 88, 955226031Sstas 89, 153, 156, 157, 158, 159, 160, 161, 162, 163, 956226031Sstas 164, 165, 166, 117, 125, 115, 95, 147, 53, 112, 957226031Sstas 95, 147, 89, 156, 18, 19, 23, 136, 137, 138, 958226031Sstas 139, 112, 86, 150, 151, 112, 91, 95, 20, 54, 959226031Sstas 92, 91, 95, 83, 83, 93, 95, 95, 112, 95, 960226031Sstas 97, 12, 112, 12, 93, 92, 91, 95, 85, 149, 961226031Sstas 156, 164, 85, 118, 156, 46, 156, 94, 23, 156, 962226031Sstas 89, 151, 93, 93, 93, 93, 95, 12, 93, 156 963226031Sstas}; 964226031Sstas 965226031Sstas#define yyerrok (yyerrstatus = 0) 966226031Sstas#define yyclearin (yychar = YYEMPTY) 967226031Sstas#define YYEMPTY (-2) 968226031Sstas#define YYEOF 0 969226031Sstas 970226031Sstas#define YYACCEPT goto yyacceptlab 971226031Sstas#define YYABORT goto yyabortlab 972226031Sstas#define YYERROR goto yyerrorlab 973226031Sstas 974226031Sstas 975226031Sstas/* Like YYERROR except do call yyerror. This remains here temporarily 976226031Sstas to ease the transition to the new meaning of YYERROR, for GCC. 977226031Sstas Once GCC version 2 has supplanted version 1, this can go. */ 978226031Sstas 979226031Sstas#define YYFAIL goto yyerrlab 980226031Sstas 981226031Sstas#define YYRECOVERING() (!!yyerrstatus) 982226031Sstas 983226031Sstas#define YYBACKUP(Token, Value) \ 984226031Sstasdo \ 985226031Sstas if (yychar == YYEMPTY && yylen == 1) \ 986226031Sstas { \ 987226031Sstas yychar = (Token); \ 988226031Sstas yylval = (Value); \ 989226031Sstas yytoken = YYTRANSLATE (yychar); \ 990226031Sstas YYPOPSTACK (1); \ 991226031Sstas goto yybackup; \ 992226031Sstas } \ 993226031Sstas else \ 994226031Sstas { \ 995226031Sstas yyerror (YY_("syntax error: cannot back up")); \ 996226031Sstas YYERROR; \ 997226031Sstas } \ 998226031Sstaswhile (YYID (0)) 999226031Sstas 1000226031Sstas 1001226031Sstas#define YYTERROR 1 1002226031Sstas#define YYERRCODE 256 1003226031Sstas 1004226031Sstas 1005226031Sstas/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. 1006226031Sstas If N is 0, then set CURRENT to the empty location which ends 1007226031Sstas the previous symbol: RHS[0] (always defined). */ 1008226031Sstas 1009226031Sstas#define YYRHSLOC(Rhs, K) ((Rhs)[K]) 1010226031Sstas#ifndef YYLLOC_DEFAULT 1011226031Sstas# define YYLLOC_DEFAULT(Current, Rhs, N) \ 1012226031Sstas do \ 1013226031Sstas if (YYID (N)) \ 1014226031Sstas { \ 1015226031Sstas (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ 1016226031Sstas (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ 1017226031Sstas (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ 1018226031Sstas (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ 1019226031Sstas } \ 1020226031Sstas else \ 1021226031Sstas { \ 1022226031Sstas (Current).first_line = (Current).last_line = \ 1023226031Sstas YYRHSLOC (Rhs, 0).last_line; \ 1024226031Sstas (Current).first_column = (Current).last_column = \ 1025226031Sstas YYRHSLOC (Rhs, 0).last_column; \ 1026226031Sstas } \ 1027226031Sstas while (YYID (0)) 1028226031Sstas#endif 1029226031Sstas 1030226031Sstas 1031226031Sstas/* YY_LOCATION_PRINT -- Print the location on the stream. 1032226031Sstas This macro was not mandated originally: define only if we know 1033226031Sstas we won't break user code: when these are the locations we know. */ 1034226031Sstas 1035226031Sstas#ifndef YY_LOCATION_PRINT 1036226031Sstas# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL 1037226031Sstas# define YY_LOCATION_PRINT(File, Loc) \ 1038226031Sstas fprintf (File, "%d.%d-%d.%d", \ 1039226031Sstas (Loc).first_line, (Loc).first_column, \ 1040226031Sstas (Loc).last_line, (Loc).last_column) 1041226031Sstas# else 1042226031Sstas# define YY_LOCATION_PRINT(File, Loc) ((void) 0) 1043226031Sstas# endif 1044226031Sstas#endif 1045226031Sstas 1046226031Sstas 1047226031Sstas/* YYLEX -- calling `yylex' with the right arguments. */ 1048226031Sstas 1049226031Sstas#ifdef YYLEX_PARAM 1050226031Sstas# define YYLEX yylex (YYLEX_PARAM) 1051226031Sstas#else 1052226031Sstas# define YYLEX yylex () 1053226031Sstas#endif 1054226031Sstas 1055226031Sstas/* Enable debugging if requested. */ 1056226031Sstas#if YYDEBUG 1057226031Sstas 1058226031Sstas# ifndef YYFPRINTF 1059226031Sstas# include <stdio.h> /* INFRINGES ON USER NAME SPACE */ 1060226031Sstas# define YYFPRINTF fprintf 1061226031Sstas# endif 1062226031Sstas 1063226031Sstas# define YYDPRINTF(Args) \ 1064226031Sstasdo { \ 1065226031Sstas if (yydebug) \ 1066226031Sstas YYFPRINTF Args; \ 1067226031Sstas} while (YYID (0)) 1068226031Sstas 1069226031Sstas# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ 1070226031Sstasdo { \ 1071226031Sstas if (yydebug) \ 1072226031Sstas { \ 1073226031Sstas YYFPRINTF (stderr, "%s ", Title); \ 1074226031Sstas yy_symbol_print (stderr, \ 1075226031Sstas Type, Value); \ 1076226031Sstas YYFPRINTF (stderr, "\n"); \ 1077226031Sstas } \ 1078226031Sstas} while (YYID (0)) 1079226031Sstas 1080226031Sstas 1081226031Sstas/*--------------------------------. 1082226031Sstas| Print this symbol on YYOUTPUT. | 1083226031Sstas`--------------------------------*/ 1084226031Sstas 1085226031Sstas/*ARGSUSED*/ 1086226031Sstas#if (defined __STDC__ || defined __C99__FUNC__ \ 1087226031Sstas || defined __cplusplus || defined _MSC_VER) 1088226031Sstasstatic void 1089226031Sstasyy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) 1090226031Sstas#else 1091226031Sstasstatic void 1092226031Sstasyy_symbol_value_print (yyoutput, yytype, yyvaluep) 1093226031Sstas FILE *yyoutput; 1094226031Sstas int yytype; 1095226031Sstas YYSTYPE const * const yyvaluep; 1096226031Sstas#endif 1097226031Sstas{ 1098226031Sstas if (!yyvaluep) 1099226031Sstas return; 1100226031Sstas# ifdef YYPRINT 1101226031Sstas if (yytype < YYNTOKENS) 1102226031Sstas YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); 1103226031Sstas# else 1104226031Sstas YYUSE (yyoutput); 1105226031Sstas# endif 1106226031Sstas switch (yytype) 1107226031Sstas { 1108226031Sstas default: 1109226031Sstas break; 1110226031Sstas } 1111226031Sstas} 1112226031Sstas 1113226031Sstas 1114226031Sstas/*--------------------------------. 1115226031Sstas| Print this symbol on YYOUTPUT. | 1116226031Sstas`--------------------------------*/ 1117226031Sstas 1118226031Sstas#if (defined __STDC__ || defined __C99__FUNC__ \ 1119226031Sstas || defined __cplusplus || defined _MSC_VER) 1120226031Sstasstatic void 1121226031Sstasyy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) 1122226031Sstas#else 1123226031Sstasstatic void 1124226031Sstasyy_symbol_print (yyoutput, yytype, yyvaluep) 1125226031Sstas FILE *yyoutput; 1126226031Sstas int yytype; 1127226031Sstas YYSTYPE const * const yyvaluep; 1128226031Sstas#endif 1129226031Sstas{ 1130226031Sstas if (yytype < YYNTOKENS) 1131226031Sstas YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); 1132226031Sstas else 1133226031Sstas YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); 1134226031Sstas 1135226031Sstas yy_symbol_value_print (yyoutput, yytype, yyvaluep); 1136226031Sstas YYFPRINTF (yyoutput, ")"); 1137226031Sstas} 1138226031Sstas 1139226031Sstas/*------------------------------------------------------------------. 1140226031Sstas| yy_stack_print -- Print the state stack from its BOTTOM up to its | 1141226031Sstas| TOP (included). | 1142226031Sstas`------------------------------------------------------------------*/ 1143226031Sstas 1144226031Sstas#if (defined __STDC__ || defined __C99__FUNC__ \ 1145226031Sstas || defined __cplusplus || defined _MSC_VER) 1146226031Sstasstatic void 1147226031Sstasyy_stack_print (yytype_int16 *bottom, yytype_int16 *top) 1148226031Sstas#else 1149226031Sstasstatic void 1150226031Sstasyy_stack_print (bottom, top) 1151226031Sstas yytype_int16 *bottom; 1152226031Sstas yytype_int16 *top; 1153226031Sstas#endif 1154226031Sstas{ 1155226031Sstas YYFPRINTF (stderr, "Stack now"); 1156226031Sstas for (; bottom <= top; ++bottom) 1157226031Sstas YYFPRINTF (stderr, " %d", *bottom); 1158226031Sstas YYFPRINTF (stderr, "\n"); 1159226031Sstas} 1160226031Sstas 1161226031Sstas# define YY_STACK_PRINT(Bottom, Top) \ 1162226031Sstasdo { \ 1163226031Sstas if (yydebug) \ 1164226031Sstas yy_stack_print ((Bottom), (Top)); \ 1165226031Sstas} while (YYID (0)) 1166226031Sstas 1167226031Sstas 1168226031Sstas/*------------------------------------------------. 1169226031Sstas| Report that the YYRULE is going to be reduced. | 1170226031Sstas`------------------------------------------------*/ 1171226031Sstas 1172226031Sstas#if (defined __STDC__ || defined __C99__FUNC__ \ 1173226031Sstas || defined __cplusplus || defined _MSC_VER) 1174226031Sstasstatic void 1175226031Sstasyy_reduce_print (YYSTYPE *yyvsp, int yyrule) 1176226031Sstas#else 1177226031Sstasstatic void 1178226031Sstasyy_reduce_print (yyvsp, yyrule) 1179226031Sstas YYSTYPE *yyvsp; 1180226031Sstas int yyrule; 1181226031Sstas#endif 1182226031Sstas{ 1183226031Sstas int yynrhs = yyr2[yyrule]; 1184226031Sstas int yyi; 1185226031Sstas unsigned long int yylno = yyrline[yyrule]; 1186226031Sstas YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", 1187226031Sstas yyrule - 1, yylno); 1188226031Sstas /* The symbols being reduced. */ 1189226031Sstas for (yyi = 0; yyi < yynrhs; yyi++) 1190226031Sstas { 1191226031Sstas fprintf (stderr, " $%d = ", yyi + 1); 1192226031Sstas yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], 1193226031Sstas &(yyvsp[(yyi + 1) - (yynrhs)]) 1194226031Sstas ); 1195226031Sstas fprintf (stderr, "\n"); 1196226031Sstas } 1197226031Sstas} 1198226031Sstas 1199226031Sstas# define YY_REDUCE_PRINT(Rule) \ 1200226031Sstasdo { \ 1201226031Sstas if (yydebug) \ 1202226031Sstas yy_reduce_print (yyvsp, Rule); \ 1203226031Sstas} while (YYID (0)) 1204226031Sstas 1205226031Sstas/* Nonzero means print parse trace. It is left uninitialized so that 1206226031Sstas multiple parsers can coexist. */ 1207226031Sstasint yydebug; 1208226031Sstas#else /* !YYDEBUG */ 1209226031Sstas# define YYDPRINTF(Args) 1210226031Sstas# define YY_SYMBOL_PRINT(Title, Type, Value, Location) 1211226031Sstas# define YY_STACK_PRINT(Bottom, Top) 1212226031Sstas# define YY_REDUCE_PRINT(Rule) 1213226031Sstas#endif /* !YYDEBUG */ 1214226031Sstas 1215226031Sstas 1216226031Sstas/* YYINITDEPTH -- initial size of the parser's stacks. */ 1217226031Sstas#ifndef YYINITDEPTH 1218226031Sstas# define YYINITDEPTH 200 1219226031Sstas#endif 1220226031Sstas 1221226031Sstas/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only 1222226031Sstas if the built-in stack extension method is used). 1223226031Sstas 1224226031Sstas Do not make this value too large; the results are undefined if 1225226031Sstas YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) 1226226031Sstas evaluated with infinite-precision integer arithmetic. */ 1227226031Sstas 1228226031Sstas#ifndef YYMAXDEPTH 1229226031Sstas# define YYMAXDEPTH 10000 1230226031Sstas#endif 1231226031Sstas 1232226031Sstas 1233226031Sstas 1234226031Sstas#if YYERROR_VERBOSE 1235226031Sstas 1236226031Sstas# ifndef yystrlen 1237226031Sstas# if defined __GLIBC__ && defined _STRING_H 1238226031Sstas# define yystrlen strlen 1239226031Sstas# else 1240226031Sstas/* Return the length of YYSTR. */ 1241226031Sstas#if (defined __STDC__ || defined __C99__FUNC__ \ 1242226031Sstas || defined __cplusplus || defined _MSC_VER) 1243226031Sstasstatic YYSIZE_T 1244226031Sstasyystrlen (const char *yystr) 1245226031Sstas#else 1246226031Sstasstatic YYSIZE_T 1247226031Sstasyystrlen (yystr) 1248226031Sstas const char *yystr; 1249226031Sstas#endif 1250226031Sstas{ 1251226031Sstas YYSIZE_T yylen; 1252226031Sstas for (yylen = 0; yystr[yylen]; yylen++) 1253226031Sstas continue; 1254226031Sstas return yylen; 1255226031Sstas} 1256226031Sstas# endif 1257226031Sstas# endif 1258226031Sstas 1259226031Sstas# ifndef yystpcpy 1260226031Sstas# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE 1261226031Sstas# define yystpcpy stpcpy 1262226031Sstas# else 1263226031Sstas/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in 1264226031Sstas YYDEST. */ 1265226031Sstas#if (defined __STDC__ || defined __C99__FUNC__ \ 1266226031Sstas || defined __cplusplus || defined _MSC_VER) 1267226031Sstasstatic char * 1268226031Sstasyystpcpy (char *yydest, const char *yysrc) 1269226031Sstas#else 1270226031Sstasstatic char * 1271226031Sstasyystpcpy (yydest, yysrc) 1272226031Sstas char *yydest; 1273226031Sstas const char *yysrc; 1274226031Sstas#endif 1275226031Sstas{ 1276226031Sstas char *yyd = yydest; 1277226031Sstas const char *yys = yysrc; 1278226031Sstas 1279226031Sstas while ((*yyd++ = *yys++) != '\0') 1280226031Sstas continue; 1281226031Sstas 1282226031Sstas return yyd - 1; 1283226031Sstas} 1284226031Sstas# endif 1285226031Sstas# endif 1286226031Sstas 1287226031Sstas# ifndef yytnamerr 1288226031Sstas/* Copy to YYRES the contents of YYSTR after stripping away unnecessary 1289226031Sstas quotes and backslashes, so that it's suitable for yyerror. The 1290226031Sstas heuristic is that double-quoting is unnecessary unless the string 1291226031Sstas contains an apostrophe, a comma, or backslash (other than 1292226031Sstas backslash-backslash). YYSTR is taken from yytname. If YYRES is 1293226031Sstas null, do not copy; instead, return the length of what the result 1294226031Sstas would have been. */ 1295226031Sstasstatic YYSIZE_T 1296226031Sstasyytnamerr (char *yyres, const char *yystr) 1297226031Sstas{ 1298226031Sstas if (*yystr == '"') 1299226031Sstas { 1300226031Sstas YYSIZE_T yyn = 0; 1301226031Sstas char const *yyp = yystr; 1302226031Sstas 1303226031Sstas for (;;) 1304226031Sstas switch (*++yyp) 1305226031Sstas { 1306226031Sstas case '\'': 1307226031Sstas case ',': 1308226031Sstas goto do_not_strip_quotes; 1309226031Sstas 1310226031Sstas case '\\': 1311226031Sstas if (*++yyp != '\\') 1312226031Sstas goto do_not_strip_quotes; 1313226031Sstas /* Fall through. */ 1314226031Sstas default: 1315226031Sstas if (yyres) 1316226031Sstas yyres[yyn] = *yyp; 1317226031Sstas yyn++; 1318226031Sstas break; 1319226031Sstas 1320226031Sstas case '"': 1321226031Sstas if (yyres) 1322226031Sstas yyres[yyn] = '\0'; 1323226031Sstas return yyn; 1324226031Sstas } 1325226031Sstas do_not_strip_quotes: ; 1326226031Sstas } 1327226031Sstas 1328226031Sstas if (! yyres) 1329226031Sstas return yystrlen (yystr); 1330226031Sstas 1331226031Sstas return yystpcpy (yyres, yystr) - yyres; 1332226031Sstas} 1333226031Sstas# endif 1334226031Sstas 1335226031Sstas/* Copy into YYRESULT an error message about the unexpected token 1336226031Sstas YYCHAR while in state YYSTATE. Return the number of bytes copied, 1337226031Sstas including the terminating null byte. If YYRESULT is null, do not 1338226031Sstas copy anything; just return the number of bytes that would be 1339226031Sstas copied. As a special case, return 0 if an ordinary "syntax error" 1340226031Sstas message will do. Return YYSIZE_MAXIMUM if overflow occurs during 1341226031Sstas size calculation. */ 1342226031Sstasstatic YYSIZE_T 1343226031Sstasyysyntax_error (char *yyresult, int yystate, int yychar) 1344226031Sstas{ 1345226031Sstas int yyn = yypact[yystate]; 1346226031Sstas 1347226031Sstas if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) 1348226031Sstas return 0; 1349226031Sstas else 1350226031Sstas { 1351226031Sstas int yytype = YYTRANSLATE (yychar); 1352226031Sstas YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); 1353226031Sstas YYSIZE_T yysize = yysize0; 1354226031Sstas YYSIZE_T yysize1; 1355226031Sstas int yysize_overflow = 0; 1356226031Sstas enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; 1357226031Sstas char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; 1358226031Sstas int yyx; 1359226031Sstas 1360226031Sstas# if 0 1361226031Sstas /* This is so xgettext sees the translatable formats that are 1362226031Sstas constructed on the fly. */ 1363226031Sstas YY_("syntax error, unexpected %s"); 1364226031Sstas YY_("syntax error, unexpected %s, expecting %s"); 1365226031Sstas YY_("syntax error, unexpected %s, expecting %s or %s"); 1366226031Sstas YY_("syntax error, unexpected %s, expecting %s or %s or %s"); 1367226031Sstas YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); 1368226031Sstas# endif 1369226031Sstas char *yyfmt; 1370226031Sstas char const *yyf; 1371226031Sstas static char const yyunexpected[] = "syntax error, unexpected %s"; 1372226031Sstas static char const yyexpecting[] = ", expecting %s"; 1373226031Sstas static char const yyor[] = " or %s"; 1374226031Sstas char yyformat[sizeof yyunexpected 1375226031Sstas + sizeof yyexpecting - 1 1376226031Sstas + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) 1377226031Sstas * (sizeof yyor - 1))]; 1378226031Sstas char const *yyprefix = yyexpecting; 1379226031Sstas 1380226031Sstas /* Start YYX at -YYN if negative to avoid negative indexes in 1381226031Sstas YYCHECK. */ 1382226031Sstas int yyxbegin = yyn < 0 ? -yyn : 0; 1383226031Sstas 1384226031Sstas /* Stay within bounds of both yycheck and yytname. */ 1385226031Sstas int yychecklim = YYLAST - yyn + 1; 1386226031Sstas int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; 1387226031Sstas int yycount = 1; 1388226031Sstas 1389226031Sstas yyarg[0] = yytname[yytype]; 1390226031Sstas yyfmt = yystpcpy (yyformat, yyunexpected); 1391226031Sstas 1392226031Sstas for (yyx = yyxbegin; yyx < yyxend; ++yyx) 1393226031Sstas if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) 1394226031Sstas { 1395226031Sstas if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) 1396226031Sstas { 1397226031Sstas yycount = 1; 1398226031Sstas yysize = yysize0; 1399226031Sstas yyformat[sizeof yyunexpected - 1] = '\0'; 1400226031Sstas break; 1401226031Sstas } 1402226031Sstas yyarg[yycount++] = yytname[yyx]; 1403226031Sstas yysize1 = yysize + yytnamerr (0, yytname[yyx]); 1404226031Sstas yysize_overflow |= (yysize1 < yysize); 1405226031Sstas yysize = yysize1; 1406226031Sstas yyfmt = yystpcpy (yyfmt, yyprefix); 1407226031Sstas yyprefix = yyor; 1408226031Sstas } 1409226031Sstas 1410226031Sstas yyf = YY_(yyformat); 1411226031Sstas yysize1 = yysize + yystrlen (yyf); 1412226031Sstas yysize_overflow |= (yysize1 < yysize); 1413226031Sstas yysize = yysize1; 1414226031Sstas 1415226031Sstas if (yysize_overflow) 1416226031Sstas return YYSIZE_MAXIMUM; 1417226031Sstas 1418226031Sstas if (yyresult) 1419226031Sstas { 1420226031Sstas /* Avoid sprintf, as that infringes on the user's name space. 1421226031Sstas Don't have undefined behavior even if the translation 1422226031Sstas produced a string with the wrong number of "%s"s. */ 1423226031Sstas char *yyp = yyresult; 1424226031Sstas int yyi = 0; 1425226031Sstas while ((*yyp = *yyf) != '\0') 1426226031Sstas { 1427226031Sstas if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) 1428226031Sstas { 1429226031Sstas yyp += yytnamerr (yyp, yyarg[yyi++]); 1430226031Sstas yyf += 2; 1431226031Sstas } 1432226031Sstas else 1433226031Sstas { 1434226031Sstas yyp++; 1435226031Sstas yyf++; 1436226031Sstas } 1437226031Sstas } 1438226031Sstas } 1439226031Sstas return yysize; 1440226031Sstas } 1441226031Sstas} 1442226031Sstas#endif /* YYERROR_VERBOSE */ 1443226031Sstas 1444226031Sstas 1445226031Sstas/*-----------------------------------------------. 1446226031Sstas| Release the memory associated to this symbol. | 1447226031Sstas`-----------------------------------------------*/ 1448226031Sstas 1449226031Sstas/*ARGSUSED*/ 1450226031Sstas#if (defined __STDC__ || defined __C99__FUNC__ \ 1451226031Sstas || defined __cplusplus || defined _MSC_VER) 1452226031Sstasstatic void 1453226031Sstasyydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) 1454226031Sstas#else 1455226031Sstasstatic void 1456226031Sstasyydestruct (yymsg, yytype, yyvaluep) 1457226031Sstas const char *yymsg; 1458226031Sstas int yytype; 1459226031Sstas YYSTYPE *yyvaluep; 1460226031Sstas#endif 1461226031Sstas{ 1462226031Sstas YYUSE (yyvaluep); 1463226031Sstas 1464226031Sstas if (!yymsg) 1465226031Sstas yymsg = "Deleting"; 1466226031Sstas YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); 1467226031Sstas 1468226031Sstas switch (yytype) 1469226031Sstas { 1470226031Sstas 1471226031Sstas default: 1472226031Sstas break; 1473226031Sstas } 1474226031Sstas} 1475226031Sstas 1476226031Sstas 1477226031Sstas/* Prevent warnings from -Wmissing-prototypes. */ 1478226031Sstas 1479226031Sstas#ifdef YYPARSE_PARAM 1480226031Sstas#if defined __STDC__ || defined __cplusplus 1481226031Sstasint yyparse (void *YYPARSE_PARAM); 1482226031Sstas#else 1483226031Sstasint yyparse (); 1484226031Sstas#endif 1485226031Sstas#else /* ! YYPARSE_PARAM */ 1486226031Sstas#if defined __STDC__ || defined __cplusplus 1487226031Sstasint yyparse (void); 1488226031Sstas#else 1489226031Sstasint yyparse (); 1490226031Sstas#endif 1491226031Sstas#endif /* ! YYPARSE_PARAM */ 1492226031Sstas 1493226031Sstas 1494226031Sstas 1495226031Sstas/* The look-ahead symbol. */ 1496226031Sstasint yychar; 1497226031Sstas 1498226031Sstas/* The semantic value of the look-ahead symbol. */ 1499226031SstasYYSTYPE yylval; 1500226031Sstas 1501226031Sstas/* Number of syntax errors so far. */ 1502226031Sstasint yynerrs; 1503226031Sstas 1504226031Sstas 1505226031Sstas 1506226031Sstas/*----------. 1507226031Sstas| yyparse. | 1508226031Sstas`----------*/ 1509226031Sstas 1510226031Sstas#ifdef YYPARSE_PARAM 1511226031Sstas#if (defined __STDC__ || defined __C99__FUNC__ \ 1512226031Sstas || defined __cplusplus || defined _MSC_VER) 1513226031Sstasint 1514226031Sstasyyparse (void *YYPARSE_PARAM) 1515226031Sstas#else 1516226031Sstasint 1517226031Sstasyyparse (YYPARSE_PARAM) 1518226031Sstas void *YYPARSE_PARAM; 1519226031Sstas#endif 1520226031Sstas#else /* ! YYPARSE_PARAM */ 1521226031Sstas#if (defined __STDC__ || defined __C99__FUNC__ \ 1522226031Sstas || defined __cplusplus || defined _MSC_VER) 1523226031Sstasint 1524226031Sstasyyparse (void) 1525226031Sstas#else 1526226031Sstasint 1527226031Sstasyyparse () 1528226031Sstas 1529226031Sstas#endif 1530226031Sstas#endif 1531226031Sstas{ 1532226031Sstas 1533226031Sstas int yystate; 1534226031Sstas int yyn; 1535226031Sstas int yyresult; 1536226031Sstas /* Number of tokens to shift before error messages enabled. */ 1537226031Sstas int yyerrstatus; 1538226031Sstas /* Look-ahead token as an internal (translated) token number. */ 1539226031Sstas int yytoken = 0; 1540226031Sstas#if YYERROR_VERBOSE 1541226031Sstas /* Buffer for error messages, and its allocated size. */ 1542226031Sstas char yymsgbuf[128]; 1543226031Sstas char *yymsg = yymsgbuf; 1544226031Sstas YYSIZE_T yymsg_alloc = sizeof yymsgbuf; 1545226031Sstas#endif 1546226031Sstas 1547226031Sstas /* Three stacks and their tools: 1548226031Sstas `yyss': related to states, 1549226031Sstas `yyvs': related to semantic values, 1550226031Sstas `yyls': related to locations. 1551226031Sstas 1552226031Sstas Refer to the stacks thru separate pointers, to allow yyoverflow 1553226031Sstas to reallocate them elsewhere. */ 1554226031Sstas 1555226031Sstas /* The state stack. */ 1556226031Sstas yytype_int16 yyssa[YYINITDEPTH]; 1557226031Sstas yytype_int16 *yyss = yyssa; 1558226031Sstas yytype_int16 *yyssp; 1559226031Sstas 1560226031Sstas /* The semantic value stack. */ 1561226031Sstas YYSTYPE yyvsa[YYINITDEPTH]; 1562226031Sstas YYSTYPE *yyvs = yyvsa; 1563226031Sstas YYSTYPE *yyvsp; 1564226031Sstas 1565226031Sstas 1566226031Sstas 1567226031Sstas#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) 1568226031Sstas 1569226031Sstas YYSIZE_T yystacksize = YYINITDEPTH; 1570226031Sstas 1571226031Sstas /* The variables used to return semantic value and location from the 1572226031Sstas action routines. */ 1573226031Sstas YYSTYPE yyval; 1574226031Sstas 1575226031Sstas 1576226031Sstas /* The number of symbols on the RHS of the reduced rule. 1577226031Sstas Keep to zero when no symbol should be popped. */ 1578226031Sstas int yylen = 0; 1579226031Sstas 1580226031Sstas YYDPRINTF ((stderr, "Starting parse\n")); 1581226031Sstas 1582226031Sstas yystate = 0; 1583226031Sstas yyerrstatus = 0; 1584226031Sstas yynerrs = 0; 1585226031Sstas yychar = YYEMPTY; /* Cause a token to be read. */ 1586226031Sstas 1587226031Sstas /* Initialize stack pointers. 1588226031Sstas Waste one element of value and location stack 1589226031Sstas so that they stay on the same level as the state stack. 1590226031Sstas The wasted elements are never initialized. */ 1591226031Sstas 1592226031Sstas yyssp = yyss; 1593226031Sstas yyvsp = yyvs; 1594226031Sstas 1595226031Sstas goto yysetstate; 1596226031Sstas 1597226031Sstas/*------------------------------------------------------------. 1598226031Sstas| yynewstate -- Push a new state, which is found in yystate. | 1599226031Sstas`------------------------------------------------------------*/ 1600226031Sstas yynewstate: 1601226031Sstas /* In all cases, when you get here, the value and location stacks 1602226031Sstas have just been pushed. So pushing a state here evens the stacks. */ 1603226031Sstas yyssp++; 1604226031Sstas 1605226031Sstas yysetstate: 1606226031Sstas *yyssp = yystate; 1607226031Sstas 1608226031Sstas if (yyss + yystacksize - 1 <= yyssp) 1609226031Sstas { 1610226031Sstas /* Get the current used size of the three stacks, in elements. */ 1611226031Sstas YYSIZE_T yysize = yyssp - yyss + 1; 1612226031Sstas 1613226031Sstas#ifdef yyoverflow 1614226031Sstas { 1615226031Sstas /* Give user a chance to reallocate the stack. Use copies of 1616226031Sstas these so that the &'s don't force the real ones into 1617226031Sstas memory. */ 1618226031Sstas YYSTYPE *yyvs1 = yyvs; 1619226031Sstas yytype_int16 *yyss1 = yyss; 1620226031Sstas 1621226031Sstas 1622226031Sstas /* Each stack pointer address is followed by the size of the 1623226031Sstas data in use in that stack, in bytes. This used to be a 1624226031Sstas conditional around just the two extra args, but that might 1625226031Sstas be undefined if yyoverflow is a macro. */ 1626226031Sstas yyoverflow (YY_("memory exhausted"), 1627226031Sstas &yyss1, yysize * sizeof (*yyssp), 1628226031Sstas &yyvs1, yysize * sizeof (*yyvsp), 1629226031Sstas 1630226031Sstas &yystacksize); 1631226031Sstas 1632226031Sstas yyss = yyss1; 1633226031Sstas yyvs = yyvs1; 1634226031Sstas } 1635226031Sstas#else /* no yyoverflow */ 1636226031Sstas# ifndef YYSTACK_RELOCATE 1637226031Sstas goto yyexhaustedlab; 1638226031Sstas# else 1639226031Sstas /* Extend the stack our own way. */ 1640226031Sstas if (YYMAXDEPTH <= yystacksize) 1641226031Sstas goto yyexhaustedlab; 1642226031Sstas yystacksize *= 2; 1643226031Sstas if (YYMAXDEPTH < yystacksize) 1644226031Sstas yystacksize = YYMAXDEPTH; 1645226031Sstas 1646226031Sstas { 1647226031Sstas yytype_int16 *yyss1 = yyss; 1648226031Sstas union yyalloc *yyptr = 1649226031Sstas (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); 1650226031Sstas if (! yyptr) 1651226031Sstas goto yyexhaustedlab; 1652226031Sstas YYSTACK_RELOCATE (yyss); 1653226031Sstas YYSTACK_RELOCATE (yyvs); 1654226031Sstas 1655226031Sstas# undef YYSTACK_RELOCATE 1656226031Sstas if (yyss1 != yyssa) 1657226031Sstas YYSTACK_FREE (yyss1); 1658226031Sstas } 1659226031Sstas# endif 1660226031Sstas#endif /* no yyoverflow */ 1661226031Sstas 1662226031Sstas yyssp = yyss + yysize - 1; 1663226031Sstas yyvsp = yyvs + yysize - 1; 1664226031Sstas 1665226031Sstas 1666226031Sstas YYDPRINTF ((stderr, "Stack size increased to %lu\n", 1667226031Sstas (unsigned long int) yystacksize)); 1668226031Sstas 1669226031Sstas if (yyss + yystacksize - 1 <= yyssp) 1670226031Sstas YYABORT; 1671226031Sstas } 1672226031Sstas 1673226031Sstas YYDPRINTF ((stderr, "Entering state %d\n", yystate)); 1674226031Sstas 1675226031Sstas goto yybackup; 1676226031Sstas 1677226031Sstas/*-----------. 1678226031Sstas| yybackup. | 1679226031Sstas`-----------*/ 1680226031Sstasyybackup: 1681226031Sstas 1682226031Sstas /* Do appropriate processing given the current state. Read a 1683226031Sstas look-ahead token if we need one and don't already have one. */ 1684226031Sstas 1685226031Sstas /* First try to decide what to do without reference to look-ahead token. */ 1686226031Sstas yyn = yypact[yystate]; 1687226031Sstas if (yyn == YYPACT_NINF) 1688226031Sstas goto yydefault; 1689226031Sstas 1690226031Sstas /* Not known => get a look-ahead token if don't already have one. */ 1691226031Sstas 1692226031Sstas /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ 1693226031Sstas if (yychar == YYEMPTY) 1694226031Sstas { 1695226031Sstas YYDPRINTF ((stderr, "Reading a token: ")); 1696226031Sstas yychar = YYLEX; 1697226031Sstas } 1698226031Sstas 1699226031Sstas if (yychar <= YYEOF) 1700226031Sstas { 1701226031Sstas yychar = yytoken = YYEOF; 1702226031Sstas YYDPRINTF ((stderr, "Now at end of input.\n")); 1703226031Sstas } 1704226031Sstas else 1705226031Sstas { 1706226031Sstas yytoken = YYTRANSLATE (yychar); 1707226031Sstas YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); 1708226031Sstas } 1709226031Sstas 1710226031Sstas /* If the proper action on seeing token YYTOKEN is to reduce or to 1711226031Sstas detect an error, take that action. */ 1712226031Sstas yyn += yytoken; 1713226031Sstas if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) 1714226031Sstas goto yydefault; 1715226031Sstas yyn = yytable[yyn]; 1716226031Sstas if (yyn <= 0) 1717226031Sstas { 1718226031Sstas if (yyn == 0 || yyn == YYTABLE_NINF) 1719226031Sstas goto yyerrlab; 1720226031Sstas yyn = -yyn; 1721226031Sstas goto yyreduce; 1722226031Sstas } 1723226031Sstas 1724226031Sstas if (yyn == YYFINAL) 1725226031Sstas YYACCEPT; 1726226031Sstas 1727226031Sstas /* Count tokens shifted since error; after three, turn off error 1728226031Sstas status. */ 1729226031Sstas if (yyerrstatus) 1730226031Sstas yyerrstatus--; 1731226031Sstas 1732226031Sstas /* Shift the look-ahead token. */ 1733226031Sstas YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); 1734226031Sstas 1735226031Sstas /* Discard the shifted token unless it is eof. */ 1736226031Sstas if (yychar != YYEOF) 1737226031Sstas yychar = YYEMPTY; 1738226031Sstas 1739226031Sstas yystate = yyn; 1740226031Sstas *++yyvsp = yylval; 1741226031Sstas 1742226031Sstas goto yynewstate; 1743226031Sstas 1744226031Sstas 1745226031Sstas/*-----------------------------------------------------------. 1746226031Sstas| yydefault -- do the default action for the current state. | 1747226031Sstas`-----------------------------------------------------------*/ 1748226031Sstasyydefault: 1749226031Sstas yyn = yydefact[yystate]; 1750226031Sstas if (yyn == 0) 1751226031Sstas goto yyerrlab; 1752226031Sstas goto yyreduce; 1753226031Sstas 1754226031Sstas 1755226031Sstas/*-----------------------------. 1756226031Sstas| yyreduce -- Do a reduction. | 1757226031Sstas`-----------------------------*/ 1758226031Sstasyyreduce: 1759226031Sstas /* yyn is the number of a rule to reduce with. */ 1760226031Sstas yylen = yyr2[yyn]; 1761226031Sstas 1762226031Sstas /* If YYLEN is nonzero, implement the default value of the action: 1763226031Sstas `$$ = $1'. 1764226031Sstas 1765226031Sstas Otherwise, the following line sets YYVAL to garbage. 1766226031Sstas This behavior is undocumented and Bison 1767226031Sstas users should not rely upon it. Assigning to YYVAL 1768226031Sstas unconditionally makes the parser a bit smaller, and it avoids a 1769226031Sstas GCC warning that YYVAL may be used uninitialized. */ 1770226031Sstas yyval = yyvsp[1-yylen]; 1771226031Sstas 1772226031Sstas 1773226031Sstas YY_REDUCE_PRINT (yyn); 1774226031Sstas switch (yyn) 1775226031Sstas { 1776226031Sstas case 2: 1777226031Sstas#line 241 "asn1parse.y" 1778226031Sstas { 1779226031Sstas checkundefined(); 1780226031Sstas } 1781226031Sstas break; 1782226031Sstas 1783226031Sstas case 4: 1784226031Sstas#line 248 "asn1parse.y" 1785226031Sstas { lex_error_message("implicit tagging is not supported"); } 1786226031Sstas break; 1787226031Sstas 1788226031Sstas case 5: 1789226031Sstas#line 250 "asn1parse.y" 1790226031Sstas { lex_error_message("automatic tagging is not supported"); } 1791226031Sstas break; 1792226031Sstas 1793226031Sstas case 7: 1794226031Sstas#line 255 "asn1parse.y" 1795226031Sstas { lex_error_message("no extensibility options supported"); } 1796226031Sstas break; 1797226031Sstas 1798226031Sstas case 17: 1799226031Sstas#line 276 "asn1parse.y" 1800226031Sstas { 1801226031Sstas struct string_list *sl; 1802226031Sstas for(sl = (yyvsp[(1) - (4)].sl); sl != NULL; sl = sl->next) { 1803226031Sstas Symbol *s = addsym(sl->string); 1804226031Sstas s->stype = Stype; 1805226031Sstas gen_template_import(s); 1806226031Sstas } 1807226031Sstas add_import((yyvsp[(3) - (4)].name)); 1808226031Sstas } 1809226031Sstas break; 1810226031Sstas 1811226031Sstas case 18: 1812226031Sstas#line 288 "asn1parse.y" 1813226031Sstas { 1814226031Sstas struct string_list *sl; 1815226031Sstas for(sl = (yyvsp[(2) - (3)].sl); sl != NULL; sl = sl->next) 1816226031Sstas add_export(sl->string); 1817226031Sstas } 1818226031Sstas break; 1819226031Sstas 1820226031Sstas case 25: 1821226031Sstas#line 306 "asn1parse.y" 1822226031Sstas { 1823226031Sstas (yyval.sl) = emalloc(sizeof(*(yyval.sl))); 1824226031Sstas (yyval.sl)->string = (yyvsp[(1) - (3)].name); 1825226031Sstas (yyval.sl)->next = (yyvsp[(3) - (3)].sl); 1826226031Sstas } 1827226031Sstas break; 1828226031Sstas 1829226031Sstas case 26: 1830226031Sstas#line 312 "asn1parse.y" 1831226031Sstas { 1832226031Sstas (yyval.sl) = emalloc(sizeof(*(yyval.sl))); 1833226031Sstas (yyval.sl)->string = (yyvsp[(1) - (1)].name); 1834226031Sstas (yyval.sl)->next = NULL; 1835226031Sstas } 1836226031Sstas break; 1837226031Sstas 1838226031Sstas case 27: 1839226031Sstas#line 320 "asn1parse.y" 1840226031Sstas { 1841226031Sstas Symbol *s = addsym ((yyvsp[(1) - (3)].name)); 1842226031Sstas s->stype = Stype; 1843226031Sstas s->type = (yyvsp[(3) - (3)].type); 1844226031Sstas fix_labels(s); 1845226031Sstas generate_type (s); 1846226031Sstas } 1847226031Sstas break; 1848226031Sstas 1849226031Sstas case 45: 1850226031Sstas#line 351 "asn1parse.y" 1851226031Sstas { 1852226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_Boolean, 1853226031Sstas TE_EXPLICIT, new_type(TBoolean)); 1854226031Sstas } 1855226031Sstas break; 1856226031Sstas 1857226031Sstas case 46: 1858226031Sstas#line 358 "asn1parse.y" 1859226031Sstas { 1860226031Sstas if((yyvsp[(2) - (5)].value)->type != integervalue) 1861226031Sstas lex_error_message("Non-integer used in first part of range"); 1862226031Sstas if((yyvsp[(2) - (5)].value)->type != integervalue) 1863226031Sstas lex_error_message("Non-integer in second part of range"); 1864226031Sstas (yyval.range) = ecalloc(1, sizeof(*(yyval.range))); 1865226031Sstas (yyval.range)->min = (yyvsp[(2) - (5)].value)->u.integervalue; 1866226031Sstas (yyval.range)->max = (yyvsp[(4) - (5)].value)->u.integervalue; 1867226031Sstas } 1868226031Sstas break; 1869226031Sstas 1870226031Sstas case 47: 1871226031Sstas#line 368 "asn1parse.y" 1872226031Sstas { 1873226031Sstas if((yyvsp[(2) - (5)].value)->type != integervalue) 1874226031Sstas lex_error_message("Non-integer in first part of range"); 1875226031Sstas (yyval.range) = ecalloc(1, sizeof(*(yyval.range))); 1876226031Sstas (yyval.range)->min = (yyvsp[(2) - (5)].value)->u.integervalue; 1877226031Sstas (yyval.range)->max = (yyvsp[(2) - (5)].value)->u.integervalue - 1; 1878226031Sstas } 1879226031Sstas break; 1880226031Sstas 1881226031Sstas case 48: 1882226031Sstas#line 376 "asn1parse.y" 1883226031Sstas { 1884226031Sstas if((yyvsp[(4) - (5)].value)->type != integervalue) 1885226031Sstas lex_error_message("Non-integer in second part of range"); 1886226031Sstas (yyval.range) = ecalloc(1, sizeof(*(yyval.range))); 1887226031Sstas (yyval.range)->min = (yyvsp[(4) - (5)].value)->u.integervalue + 2; 1888226031Sstas (yyval.range)->max = (yyvsp[(4) - (5)].value)->u.integervalue; 1889226031Sstas } 1890226031Sstas break; 1891226031Sstas 1892226031Sstas case 49: 1893226031Sstas#line 384 "asn1parse.y" 1894226031Sstas { 1895226031Sstas if((yyvsp[(2) - (3)].value)->type != integervalue) 1896226031Sstas lex_error_message("Non-integer used in limit"); 1897226031Sstas (yyval.range) = ecalloc(1, sizeof(*(yyval.range))); 1898226031Sstas (yyval.range)->min = (yyvsp[(2) - (3)].value)->u.integervalue; 1899226031Sstas (yyval.range)->max = (yyvsp[(2) - (3)].value)->u.integervalue; 1900226031Sstas } 1901226031Sstas break; 1902226031Sstas 1903226031Sstas case 50: 1904226031Sstas#line 395 "asn1parse.y" 1905226031Sstas { 1906226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_Integer, 1907226031Sstas TE_EXPLICIT, new_type(TInteger)); 1908226031Sstas } 1909226031Sstas break; 1910226031Sstas 1911226031Sstas case 51: 1912226031Sstas#line 400 "asn1parse.y" 1913226031Sstas { 1914226031Sstas (yyval.type) = new_type(TInteger); 1915226031Sstas (yyval.type)->range = (yyvsp[(2) - (2)].range); 1916226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_Integer, TE_EXPLICIT, (yyval.type)); 1917226031Sstas } 1918226031Sstas break; 1919226031Sstas 1920226031Sstas case 52: 1921226031Sstas#line 406 "asn1parse.y" 1922226031Sstas { 1923226031Sstas (yyval.type) = new_type(TInteger); 1924226031Sstas (yyval.type)->members = (yyvsp[(3) - (4)].members); 1925226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_Integer, TE_EXPLICIT, (yyval.type)); 1926226031Sstas } 1927226031Sstas break; 1928226031Sstas 1929226031Sstas case 53: 1930226031Sstas#line 414 "asn1parse.y" 1931226031Sstas { 1932226031Sstas (yyval.members) = emalloc(sizeof(*(yyval.members))); 1933226031Sstas ASN1_TAILQ_INIT((yyval.members)); 1934226031Sstas ASN1_TAILQ_INSERT_HEAD((yyval.members), (yyvsp[(1) - (1)].member), members); 1935226031Sstas } 1936226031Sstas break; 1937226031Sstas 1938226031Sstas case 54: 1939226031Sstas#line 420 "asn1parse.y" 1940226031Sstas { 1941226031Sstas ASN1_TAILQ_INSERT_TAIL((yyvsp[(1) - (3)].members), (yyvsp[(3) - (3)].member), members); 1942226031Sstas (yyval.members) = (yyvsp[(1) - (3)].members); 1943226031Sstas } 1944226031Sstas break; 1945226031Sstas 1946226031Sstas case 55: 1947226031Sstas#line 425 "asn1parse.y" 1948226031Sstas { (yyval.members) = (yyvsp[(1) - (3)].members); } 1949226031Sstas break; 1950226031Sstas 1951226031Sstas case 56: 1952226031Sstas#line 429 "asn1parse.y" 1953226031Sstas { 1954226031Sstas (yyval.member) = emalloc(sizeof(*(yyval.member))); 1955226031Sstas (yyval.member)->name = (yyvsp[(1) - (4)].name); 1956226031Sstas (yyval.member)->gen_name = estrdup((yyvsp[(1) - (4)].name)); 1957226031Sstas output_name ((yyval.member)->gen_name); 1958226031Sstas (yyval.member)->val = (yyvsp[(3) - (4)].constant); 1959226031Sstas (yyval.member)->optional = 0; 1960226031Sstas (yyval.member)->ellipsis = 0; 1961226031Sstas (yyval.member)->type = NULL; 1962226031Sstas } 1963226031Sstas break; 1964226031Sstas 1965226031Sstas case 57: 1966226031Sstas#line 442 "asn1parse.y" 1967226031Sstas { 1968226031Sstas (yyval.type) = new_type(TInteger); 1969226031Sstas (yyval.type)->members = (yyvsp[(3) - (4)].members); 1970226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_Enumerated, TE_EXPLICIT, (yyval.type)); 1971226031Sstas } 1972226031Sstas break; 1973226031Sstas 1974226031Sstas case 59: 1975226031Sstas#line 453 "asn1parse.y" 1976226031Sstas { 1977226031Sstas (yyval.type) = new_type(TBitString); 1978226031Sstas (yyval.type)->members = emalloc(sizeof(*(yyval.type)->members)); 1979226031Sstas ASN1_TAILQ_INIT((yyval.type)->members); 1980226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_BitString, TE_EXPLICIT, (yyval.type)); 1981226031Sstas } 1982226031Sstas break; 1983226031Sstas 1984226031Sstas case 60: 1985226031Sstas#line 460 "asn1parse.y" 1986226031Sstas { 1987226031Sstas (yyval.type) = new_type(TBitString); 1988226031Sstas (yyval.type)->members = (yyvsp[(4) - (5)].members); 1989226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_BitString, TE_EXPLICIT, (yyval.type)); 1990226031Sstas } 1991226031Sstas break; 1992226031Sstas 1993226031Sstas case 61: 1994226031Sstas#line 468 "asn1parse.y" 1995226031Sstas { 1996226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_OID, 1997226031Sstas TE_EXPLICIT, new_type(TOID)); 1998226031Sstas } 1999226031Sstas break; 2000226031Sstas 2001226031Sstas case 62: 2002226031Sstas#line 474 "asn1parse.y" 2003226031Sstas { 2004226031Sstas Type *t = new_type(TOctetString); 2005226031Sstas t->range = (yyvsp[(3) - (3)].range); 2006226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_OctetString, 2007226031Sstas TE_EXPLICIT, t); 2008226031Sstas } 2009226031Sstas break; 2010226031Sstas 2011226031Sstas case 63: 2012226031Sstas#line 483 "asn1parse.y" 2013226031Sstas { 2014226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_Null, 2015226031Sstas TE_EXPLICIT, new_type(TNull)); 2016226031Sstas } 2017226031Sstas break; 2018226031Sstas 2019226031Sstas case 64: 2020226031Sstas#line 490 "asn1parse.y" 2021226031Sstas { (yyval.range) = NULL; } 2022226031Sstas break; 2023226031Sstas 2024226031Sstas case 65: 2025226031Sstas#line 492 "asn1parse.y" 2026226031Sstas { (yyval.range) = (yyvsp[(2) - (2)].range); } 2027226031Sstas break; 2028226031Sstas 2029226031Sstas case 66: 2030226031Sstas#line 497 "asn1parse.y" 2031226031Sstas { 2032226031Sstas (yyval.type) = new_type(TSequence); 2033226031Sstas (yyval.type)->members = (yyvsp[(3) - (4)].members); 2034226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_Sequence, TE_EXPLICIT, (yyval.type)); 2035226031Sstas } 2036226031Sstas break; 2037226031Sstas 2038226031Sstas case 67: 2039226031Sstas#line 503 "asn1parse.y" 2040226031Sstas { 2041226031Sstas (yyval.type) = new_type(TSequence); 2042226031Sstas (yyval.type)->members = NULL; 2043226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_Sequence, TE_EXPLICIT, (yyval.type)); 2044226031Sstas } 2045226031Sstas break; 2046226031Sstas 2047226031Sstas case 68: 2048226031Sstas#line 511 "asn1parse.y" 2049226031Sstas { 2050226031Sstas (yyval.type) = new_type(TSequenceOf); 2051226031Sstas (yyval.type)->range = (yyvsp[(2) - (4)].range); 2052226031Sstas (yyval.type)->subtype = (yyvsp[(4) - (4)].type); 2053226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_Sequence, TE_EXPLICIT, (yyval.type)); 2054226031Sstas } 2055226031Sstas break; 2056226031Sstas 2057226031Sstas case 69: 2058226031Sstas#line 520 "asn1parse.y" 2059226031Sstas { 2060226031Sstas (yyval.type) = new_type(TSet); 2061226031Sstas (yyval.type)->members = (yyvsp[(3) - (4)].members); 2062226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_Set, TE_EXPLICIT, (yyval.type)); 2063226031Sstas } 2064226031Sstas break; 2065226031Sstas 2066226031Sstas case 70: 2067226031Sstas#line 526 "asn1parse.y" 2068226031Sstas { 2069226031Sstas (yyval.type) = new_type(TSet); 2070226031Sstas (yyval.type)->members = NULL; 2071226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_Set, TE_EXPLICIT, (yyval.type)); 2072226031Sstas } 2073226031Sstas break; 2074226031Sstas 2075226031Sstas case 71: 2076226031Sstas#line 534 "asn1parse.y" 2077226031Sstas { 2078226031Sstas (yyval.type) = new_type(TSetOf); 2079226031Sstas (yyval.type)->subtype = (yyvsp[(3) - (3)].type); 2080226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_Set, TE_EXPLICIT, (yyval.type)); 2081226031Sstas } 2082226031Sstas break; 2083226031Sstas 2084226031Sstas case 72: 2085226031Sstas#line 542 "asn1parse.y" 2086226031Sstas { 2087226031Sstas (yyval.type) = new_type(TChoice); 2088226031Sstas (yyval.type)->members = (yyvsp[(3) - (4)].members); 2089226031Sstas } 2090226031Sstas break; 2091226031Sstas 2092226031Sstas case 75: 2093226031Sstas#line 553 "asn1parse.y" 2094226031Sstas { 2095226031Sstas Symbol *s = addsym((yyvsp[(1) - (1)].name)); 2096226031Sstas (yyval.type) = new_type(TType); 2097226031Sstas if(s->stype != Stype && s->stype != SUndefined) 2098226031Sstas lex_error_message ("%s is not a type\n", (yyvsp[(1) - (1)].name)); 2099226031Sstas else 2100226031Sstas (yyval.type)->symbol = s; 2101226031Sstas } 2102226031Sstas break; 2103226031Sstas 2104226031Sstas case 76: 2105226031Sstas#line 564 "asn1parse.y" 2106226031Sstas { 2107226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_GeneralizedTime, 2108226031Sstas TE_EXPLICIT, new_type(TGeneralizedTime)); 2109226031Sstas } 2110226031Sstas break; 2111226031Sstas 2112226031Sstas case 77: 2113226031Sstas#line 569 "asn1parse.y" 2114226031Sstas { 2115226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_UTCTime, 2116226031Sstas TE_EXPLICIT, new_type(TUTCTime)); 2117226031Sstas } 2118226031Sstas break; 2119226031Sstas 2120226031Sstas case 78: 2121226031Sstas#line 576 "asn1parse.y" 2122226031Sstas { 2123226031Sstas /* if (Constraint.type == contentConstrant) { 2124226031Sstas assert(Constraint.u.constraint.type == octetstring|bitstring-w/o-NamedBitList); // remember to check type reference too 2125226031Sstas if (Constraint.u.constraint.type) { 2126226031Sstas assert((Constraint.u.constraint.type.length % 8) == 0); 2127226031Sstas } 2128226031Sstas } 2129226031Sstas if (Constraint.u.constraint.encoding) { 2130226031Sstas type == der-oid|ber-oid 2131226031Sstas } 2132226031Sstas */ 2133226031Sstas } 2134226031Sstas break; 2135226031Sstas 2136226031Sstas case 79: 2137226031Sstas#line 592 "asn1parse.y" 2138226031Sstas { 2139226031Sstas (yyval.constraint_spec) = (yyvsp[(2) - (3)].constraint_spec); 2140226031Sstas } 2141226031Sstas break; 2142226031Sstas 2143226031Sstas case 83: 2144226031Sstas#line 605 "asn1parse.y" 2145226031Sstas { 2146226031Sstas (yyval.constraint_spec) = new_constraint_spec(CT_CONTENTS); 2147226031Sstas (yyval.constraint_spec)->u.content.type = (yyvsp[(2) - (2)].type); 2148226031Sstas (yyval.constraint_spec)->u.content.encoding = NULL; 2149226031Sstas } 2150226031Sstas break; 2151226031Sstas 2152226031Sstas case 84: 2153226031Sstas#line 611 "asn1parse.y" 2154226031Sstas { 2155226031Sstas if ((yyvsp[(3) - (3)].value)->type != objectidentifiervalue) 2156226031Sstas lex_error_message("Non-OID used in ENCODED BY constraint"); 2157226031Sstas (yyval.constraint_spec) = new_constraint_spec(CT_CONTENTS); 2158226031Sstas (yyval.constraint_spec)->u.content.type = NULL; 2159226031Sstas (yyval.constraint_spec)->u.content.encoding = (yyvsp[(3) - (3)].value); 2160226031Sstas } 2161226031Sstas break; 2162226031Sstas 2163226031Sstas case 85: 2164226031Sstas#line 619 "asn1parse.y" 2165226031Sstas { 2166226031Sstas if ((yyvsp[(5) - (5)].value)->type != objectidentifiervalue) 2167226031Sstas lex_error_message("Non-OID used in ENCODED BY constraint"); 2168226031Sstas (yyval.constraint_spec) = new_constraint_spec(CT_CONTENTS); 2169226031Sstas (yyval.constraint_spec)->u.content.type = (yyvsp[(2) - (5)].type); 2170226031Sstas (yyval.constraint_spec)->u.content.encoding = (yyvsp[(5) - (5)].value); 2171226031Sstas } 2172226031Sstas break; 2173226031Sstas 2174226031Sstas case 86: 2175226031Sstas#line 629 "asn1parse.y" 2176226031Sstas { 2177226031Sstas (yyval.constraint_spec) = new_constraint_spec(CT_USER); 2178226031Sstas } 2179226031Sstas break; 2180226031Sstas 2181226031Sstas case 87: 2182226031Sstas#line 635 "asn1parse.y" 2183226031Sstas { 2184226031Sstas (yyval.type) = new_type(TTag); 2185226031Sstas (yyval.type)->tag = (yyvsp[(1) - (3)].tag); 2186226031Sstas (yyval.type)->tag.tagenv = (yyvsp[(2) - (3)].constant); 2187226031Sstas if((yyvsp[(3) - (3)].type)->type == TTag && (yyvsp[(2) - (3)].constant) == TE_IMPLICIT) { 2188226031Sstas (yyval.type)->subtype = (yyvsp[(3) - (3)].type)->subtype; 2189226031Sstas free((yyvsp[(3) - (3)].type)); 2190226031Sstas } else 2191226031Sstas (yyval.type)->subtype = (yyvsp[(3) - (3)].type); 2192226031Sstas } 2193226031Sstas break; 2194226031Sstas 2195226031Sstas case 88: 2196226031Sstas#line 648 "asn1parse.y" 2197226031Sstas { 2198226031Sstas (yyval.tag).tagclass = (yyvsp[(2) - (4)].constant); 2199226031Sstas (yyval.tag).tagvalue = (yyvsp[(3) - (4)].constant); 2200226031Sstas (yyval.tag).tagenv = TE_EXPLICIT; 2201226031Sstas } 2202226031Sstas break; 2203226031Sstas 2204226031Sstas case 89: 2205226031Sstas#line 656 "asn1parse.y" 2206226031Sstas { 2207226031Sstas (yyval.constant) = ASN1_C_CONTEXT; 2208226031Sstas } 2209226031Sstas break; 2210226031Sstas 2211226031Sstas case 90: 2212226031Sstas#line 660 "asn1parse.y" 2213226031Sstas { 2214226031Sstas (yyval.constant) = ASN1_C_UNIV; 2215226031Sstas } 2216226031Sstas break; 2217226031Sstas 2218226031Sstas case 91: 2219226031Sstas#line 664 "asn1parse.y" 2220226031Sstas { 2221226031Sstas (yyval.constant) = ASN1_C_APPL; 2222226031Sstas } 2223226031Sstas break; 2224226031Sstas 2225226031Sstas case 92: 2226226031Sstas#line 668 "asn1parse.y" 2227226031Sstas { 2228226031Sstas (yyval.constant) = ASN1_C_PRIVATE; 2229226031Sstas } 2230226031Sstas break; 2231226031Sstas 2232226031Sstas case 93: 2233226031Sstas#line 674 "asn1parse.y" 2234226031Sstas { 2235226031Sstas (yyval.constant) = TE_EXPLICIT; 2236226031Sstas } 2237226031Sstas break; 2238226031Sstas 2239226031Sstas case 94: 2240226031Sstas#line 678 "asn1parse.y" 2241226031Sstas { 2242226031Sstas (yyval.constant) = TE_EXPLICIT; 2243226031Sstas } 2244226031Sstas break; 2245226031Sstas 2246226031Sstas case 95: 2247226031Sstas#line 682 "asn1parse.y" 2248226031Sstas { 2249226031Sstas (yyval.constant) = TE_IMPLICIT; 2250226031Sstas } 2251226031Sstas break; 2252226031Sstas 2253226031Sstas case 96: 2254226031Sstas#line 689 "asn1parse.y" 2255226031Sstas { 2256226031Sstas Symbol *s; 2257226031Sstas s = addsym ((yyvsp[(1) - (4)].name)); 2258226031Sstas 2259226031Sstas s->stype = SValue; 2260226031Sstas s->value = (yyvsp[(4) - (4)].value); 2261226031Sstas generate_constant (s); 2262226031Sstas } 2263226031Sstas break; 2264226031Sstas 2265226031Sstas case 98: 2266226031Sstas#line 703 "asn1parse.y" 2267226031Sstas { 2268226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_GeneralString, 2269226031Sstas TE_EXPLICIT, new_type(TGeneralString)); 2270226031Sstas } 2271226031Sstas break; 2272226031Sstas 2273226031Sstas case 99: 2274226031Sstas#line 708 "asn1parse.y" 2275226031Sstas { 2276226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_TeletexString, 2277226031Sstas TE_EXPLICIT, new_type(TTeletexString)); 2278226031Sstas } 2279226031Sstas break; 2280226031Sstas 2281226031Sstas case 100: 2282226031Sstas#line 713 "asn1parse.y" 2283226031Sstas { 2284226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_UTF8String, 2285226031Sstas TE_EXPLICIT, new_type(TUTF8String)); 2286226031Sstas } 2287226031Sstas break; 2288226031Sstas 2289226031Sstas case 101: 2290226031Sstas#line 718 "asn1parse.y" 2291226031Sstas { 2292226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_PrintableString, 2293226031Sstas TE_EXPLICIT, new_type(TPrintableString)); 2294226031Sstas } 2295226031Sstas break; 2296226031Sstas 2297226031Sstas case 102: 2298226031Sstas#line 723 "asn1parse.y" 2299226031Sstas { 2300226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_VisibleString, 2301226031Sstas TE_EXPLICIT, new_type(TVisibleString)); 2302226031Sstas } 2303226031Sstas break; 2304226031Sstas 2305226031Sstas case 103: 2306226031Sstas#line 728 "asn1parse.y" 2307226031Sstas { 2308226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_IA5String, 2309226031Sstas TE_EXPLICIT, new_type(TIA5String)); 2310226031Sstas } 2311226031Sstas break; 2312226031Sstas 2313226031Sstas case 104: 2314226031Sstas#line 733 "asn1parse.y" 2315226031Sstas { 2316226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_BMPString, 2317226031Sstas TE_EXPLICIT, new_type(TBMPString)); 2318226031Sstas } 2319226031Sstas break; 2320226031Sstas 2321226031Sstas case 105: 2322226031Sstas#line 738 "asn1parse.y" 2323226031Sstas { 2324226031Sstas (yyval.type) = new_tag(ASN1_C_UNIV, UT_UniversalString, 2325226031Sstas TE_EXPLICIT, new_type(TUniversalString)); 2326226031Sstas } 2327226031Sstas break; 2328226031Sstas 2329226031Sstas case 106: 2330226031Sstas#line 746 "asn1parse.y" 2331226031Sstas { 2332226031Sstas (yyval.members) = emalloc(sizeof(*(yyval.members))); 2333226031Sstas ASN1_TAILQ_INIT((yyval.members)); 2334226031Sstas ASN1_TAILQ_INSERT_HEAD((yyval.members), (yyvsp[(1) - (1)].member), members); 2335226031Sstas } 2336226031Sstas break; 2337226031Sstas 2338226031Sstas case 107: 2339226031Sstas#line 752 "asn1parse.y" 2340226031Sstas { 2341226031Sstas ASN1_TAILQ_INSERT_TAIL((yyvsp[(1) - (3)].members), (yyvsp[(3) - (3)].member), members); 2342226031Sstas (yyval.members) = (yyvsp[(1) - (3)].members); 2343226031Sstas } 2344226031Sstas break; 2345226031Sstas 2346226031Sstas case 108: 2347226031Sstas#line 757 "asn1parse.y" 2348226031Sstas { 2349226031Sstas struct member *m = ecalloc(1, sizeof(*m)); 2350226031Sstas m->name = estrdup("..."); 2351226031Sstas m->gen_name = estrdup("asn1_ellipsis"); 2352226031Sstas m->ellipsis = 1; 2353226031Sstas ASN1_TAILQ_INSERT_TAIL((yyvsp[(1) - (3)].members), m, members); 2354226031Sstas (yyval.members) = (yyvsp[(1) - (3)].members); 2355226031Sstas } 2356226031Sstas break; 2357226031Sstas 2358226031Sstas case 109: 2359226031Sstas#line 768 "asn1parse.y" 2360226031Sstas { 2361226031Sstas (yyval.member) = emalloc(sizeof(*(yyval.member))); 2362226031Sstas (yyval.member)->name = (yyvsp[(1) - (2)].name); 2363226031Sstas (yyval.member)->gen_name = estrdup((yyvsp[(1) - (2)].name)); 2364226031Sstas output_name ((yyval.member)->gen_name); 2365226031Sstas (yyval.member)->type = (yyvsp[(2) - (2)].type); 2366226031Sstas (yyval.member)->ellipsis = 0; 2367226031Sstas } 2368226031Sstas break; 2369226031Sstas 2370226031Sstas case 110: 2371226031Sstas#line 779 "asn1parse.y" 2372226031Sstas { 2373226031Sstas (yyval.member) = (yyvsp[(1) - (1)].member); 2374226031Sstas (yyval.member)->optional = 0; 2375226031Sstas (yyval.member)->defval = NULL; 2376226031Sstas } 2377226031Sstas break; 2378226031Sstas 2379226031Sstas case 111: 2380226031Sstas#line 785 "asn1parse.y" 2381226031Sstas { 2382226031Sstas (yyval.member) = (yyvsp[(1) - (2)].member); 2383226031Sstas (yyval.member)->optional = 1; 2384226031Sstas (yyval.member)->defval = NULL; 2385226031Sstas } 2386226031Sstas break; 2387226031Sstas 2388226031Sstas case 112: 2389226031Sstas#line 791 "asn1parse.y" 2390226031Sstas { 2391226031Sstas (yyval.member) = (yyvsp[(1) - (3)].member); 2392226031Sstas (yyval.member)->optional = 0; 2393226031Sstas (yyval.member)->defval = (yyvsp[(3) - (3)].value); 2394226031Sstas } 2395226031Sstas break; 2396226031Sstas 2397226031Sstas case 113: 2398226031Sstas#line 799 "asn1parse.y" 2399226031Sstas { 2400226031Sstas (yyval.members) = emalloc(sizeof(*(yyval.members))); 2401226031Sstas ASN1_TAILQ_INIT((yyval.members)); 2402226031Sstas ASN1_TAILQ_INSERT_HEAD((yyval.members), (yyvsp[(1) - (1)].member), members); 2403226031Sstas } 2404226031Sstas break; 2405226031Sstas 2406226031Sstas case 114: 2407226031Sstas#line 805 "asn1parse.y" 2408226031Sstas { 2409226031Sstas ASN1_TAILQ_INSERT_TAIL((yyvsp[(1) - (3)].members), (yyvsp[(3) - (3)].member), members); 2410226031Sstas (yyval.members) = (yyvsp[(1) - (3)].members); 2411226031Sstas } 2412226031Sstas break; 2413226031Sstas 2414226031Sstas case 115: 2415226031Sstas#line 812 "asn1parse.y" 2416226031Sstas { 2417226031Sstas (yyval.member) = emalloc(sizeof(*(yyval.member))); 2418226031Sstas (yyval.member)->name = (yyvsp[(1) - (4)].name); 2419226031Sstas (yyval.member)->gen_name = estrdup((yyvsp[(1) - (4)].name)); 2420226031Sstas output_name ((yyval.member)->gen_name); 2421226031Sstas (yyval.member)->val = (yyvsp[(3) - (4)].constant); 2422226031Sstas (yyval.member)->optional = 0; 2423226031Sstas (yyval.member)->ellipsis = 0; 2424226031Sstas (yyval.member)->type = NULL; 2425226031Sstas } 2426226031Sstas break; 2427226031Sstas 2428226031Sstas case 117: 2429226031Sstas#line 825 "asn1parse.y" 2430226031Sstas { (yyval.objid) = NULL; } 2431226031Sstas break; 2432226031Sstas 2433226031Sstas case 118: 2434226031Sstas#line 829 "asn1parse.y" 2435226031Sstas { 2436226031Sstas (yyval.objid) = (yyvsp[(2) - (3)].objid); 2437226031Sstas } 2438226031Sstas break; 2439226031Sstas 2440226031Sstas case 119: 2441226031Sstas#line 835 "asn1parse.y" 2442226031Sstas { 2443226031Sstas (yyval.objid) = NULL; 2444226031Sstas } 2445226031Sstas break; 2446226031Sstas 2447226031Sstas case 120: 2448226031Sstas#line 839 "asn1parse.y" 2449226031Sstas { 2450226031Sstas if ((yyvsp[(2) - (2)].objid)) { 2451226031Sstas (yyval.objid) = (yyvsp[(2) - (2)].objid); 2452226031Sstas add_oid_to_tail((yyvsp[(2) - (2)].objid), (yyvsp[(1) - (2)].objid)); 2453226031Sstas } else { 2454226031Sstas (yyval.objid) = (yyvsp[(1) - (2)].objid); 2455226031Sstas } 2456226031Sstas } 2457226031Sstas break; 2458226031Sstas 2459226031Sstas case 121: 2460226031Sstas#line 850 "asn1parse.y" 2461226031Sstas { 2462226031Sstas (yyval.objid) = new_objid((yyvsp[(1) - (4)].name), (yyvsp[(3) - (4)].constant)); 2463226031Sstas } 2464226031Sstas break; 2465226031Sstas 2466226031Sstas case 122: 2467226031Sstas#line 854 "asn1parse.y" 2468226031Sstas { 2469226031Sstas Symbol *s = addsym((yyvsp[(1) - (1)].name)); 2470226031Sstas if(s->stype != SValue || 2471226031Sstas s->value->type != objectidentifiervalue) { 2472226031Sstas lex_error_message("%s is not an object identifier\n", 2473226031Sstas s->name); 2474226031Sstas exit(1); 2475226031Sstas } 2476226031Sstas (yyval.objid) = s->value->u.objectidentifiervalue; 2477226031Sstas } 2478226031Sstas break; 2479226031Sstas 2480226031Sstas case 123: 2481226031Sstas#line 865 "asn1parse.y" 2482226031Sstas { 2483226031Sstas (yyval.objid) = new_objid(NULL, (yyvsp[(1) - (1)].constant)); 2484226031Sstas } 2485226031Sstas break; 2486226031Sstas 2487226031Sstas case 133: 2488226031Sstas#line 888 "asn1parse.y" 2489226031Sstas { 2490226031Sstas Symbol *s = addsym((yyvsp[(1) - (1)].name)); 2491226031Sstas if(s->stype != SValue) 2492226031Sstas lex_error_message ("%s is not a value\n", 2493226031Sstas s->name); 2494226031Sstas else 2495226031Sstas (yyval.value) = s->value; 2496226031Sstas } 2497226031Sstas break; 2498226031Sstas 2499226031Sstas case 134: 2500226031Sstas#line 899 "asn1parse.y" 2501226031Sstas { 2502226031Sstas (yyval.value) = emalloc(sizeof(*(yyval.value))); 2503226031Sstas (yyval.value)->type = stringvalue; 2504226031Sstas (yyval.value)->u.stringvalue = (yyvsp[(1) - (1)].name); 2505226031Sstas } 2506226031Sstas break; 2507226031Sstas 2508226031Sstas case 135: 2509226031Sstas#line 907 "asn1parse.y" 2510226031Sstas { 2511226031Sstas (yyval.value) = emalloc(sizeof(*(yyval.value))); 2512226031Sstas (yyval.value)->type = booleanvalue; 2513226031Sstas (yyval.value)->u.booleanvalue = 0; 2514226031Sstas } 2515226031Sstas break; 2516226031Sstas 2517226031Sstas case 136: 2518226031Sstas#line 913 "asn1parse.y" 2519226031Sstas { 2520226031Sstas (yyval.value) = emalloc(sizeof(*(yyval.value))); 2521226031Sstas (yyval.value)->type = booleanvalue; 2522226031Sstas (yyval.value)->u.booleanvalue = 0; 2523226031Sstas } 2524226031Sstas break; 2525226031Sstas 2526226031Sstas case 137: 2527226031Sstas#line 921 "asn1parse.y" 2528226031Sstas { 2529226031Sstas (yyval.value) = emalloc(sizeof(*(yyval.value))); 2530226031Sstas (yyval.value)->type = integervalue; 2531226031Sstas (yyval.value)->u.integervalue = (yyvsp[(1) - (1)].constant); 2532226031Sstas } 2533226031Sstas break; 2534226031Sstas 2535226031Sstas case 139: 2536226031Sstas#line 932 "asn1parse.y" 2537226031Sstas { 2538226031Sstas } 2539226031Sstas break; 2540226031Sstas 2541226031Sstas case 140: 2542226031Sstas#line 937 "asn1parse.y" 2543226031Sstas { 2544226031Sstas (yyval.value) = emalloc(sizeof(*(yyval.value))); 2545226031Sstas (yyval.value)->type = objectidentifiervalue; 2546226031Sstas (yyval.value)->u.objectidentifiervalue = (yyvsp[(1) - (1)].objid); 2547226031Sstas } 2548226031Sstas break; 2549226031Sstas 2550226031Sstas 2551226031Sstas/* Line 1267 of yacc.c. */ 2552226031Sstas#line 2553 "asn1parse.c" 2553226031Sstas default: break; 2554226031Sstas } 2555226031Sstas YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); 2556226031Sstas 2557226031Sstas YYPOPSTACK (yylen); 2558226031Sstas yylen = 0; 2559226031Sstas YY_STACK_PRINT (yyss, yyssp); 2560226031Sstas 2561226031Sstas *++yyvsp = yyval; 2562226031Sstas 2563226031Sstas 2564226031Sstas /* Now `shift' the result of the reduction. Determine what state 2565226031Sstas that goes to, based on the state we popped back to and the rule 2566226031Sstas number reduced by. */ 2567226031Sstas 2568226031Sstas yyn = yyr1[yyn]; 2569226031Sstas 2570226031Sstas yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; 2571226031Sstas if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) 2572226031Sstas yystate = yytable[yystate]; 2573226031Sstas else 2574226031Sstas yystate = yydefgoto[yyn - YYNTOKENS]; 2575226031Sstas 2576226031Sstas goto yynewstate; 2577226031Sstas 2578226031Sstas 2579226031Sstas/*------------------------------------. 2580226031Sstas| yyerrlab -- here on detecting error | 2581226031Sstas`------------------------------------*/ 2582226031Sstasyyerrlab: 2583226031Sstas /* If not already recovering from an error, report this error. */ 2584226031Sstas if (!yyerrstatus) 2585226031Sstas { 2586226031Sstas ++yynerrs; 2587226031Sstas#if ! YYERROR_VERBOSE 2588226031Sstas yyerror (YY_("syntax error")); 2589226031Sstas#else 2590226031Sstas { 2591226031Sstas YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); 2592226031Sstas if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) 2593226031Sstas { 2594226031Sstas YYSIZE_T yyalloc = 2 * yysize; 2595226031Sstas if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) 2596226031Sstas yyalloc = YYSTACK_ALLOC_MAXIMUM; 2597226031Sstas if (yymsg != yymsgbuf) 2598226031Sstas YYSTACK_FREE (yymsg); 2599226031Sstas yymsg = (char *) YYSTACK_ALLOC (yyalloc); 2600226031Sstas if (yymsg) 2601226031Sstas yymsg_alloc = yyalloc; 2602226031Sstas else 2603226031Sstas { 2604226031Sstas yymsg = yymsgbuf; 2605226031Sstas yymsg_alloc = sizeof yymsgbuf; 2606226031Sstas } 2607226031Sstas } 2608226031Sstas 2609226031Sstas if (0 < yysize && yysize <= yymsg_alloc) 2610226031Sstas { 2611226031Sstas (void) yysyntax_error (yymsg, yystate, yychar); 2612226031Sstas yyerror (yymsg); 2613226031Sstas } 2614226031Sstas else 2615226031Sstas { 2616226031Sstas yyerror (YY_("syntax error")); 2617226031Sstas if (yysize != 0) 2618226031Sstas goto yyexhaustedlab; 2619226031Sstas } 2620226031Sstas } 2621226031Sstas#endif 2622226031Sstas } 2623226031Sstas 2624226031Sstas 2625226031Sstas 2626226031Sstas if (yyerrstatus == 3) 2627226031Sstas { 2628226031Sstas /* If just tried and failed to reuse look-ahead token after an 2629226031Sstas error, discard it. */ 2630226031Sstas 2631226031Sstas if (yychar <= YYEOF) 2632226031Sstas { 2633226031Sstas /* Return failure if at end of input. */ 2634226031Sstas if (yychar == YYEOF) 2635226031Sstas YYABORT; 2636226031Sstas } 2637226031Sstas else 2638226031Sstas { 2639226031Sstas yydestruct ("Error: discarding", 2640226031Sstas yytoken, &yylval); 2641226031Sstas yychar = YYEMPTY; 2642226031Sstas } 2643226031Sstas } 2644226031Sstas 2645226031Sstas /* Else will try to reuse look-ahead token after shifting the error 2646226031Sstas token. */ 2647226031Sstas goto yyerrlab1; 2648226031Sstas 2649226031Sstas 2650226031Sstas/*---------------------------------------------------. 2651226031Sstas| yyerrorlab -- error raised explicitly by YYERROR. | 2652226031Sstas`---------------------------------------------------*/ 2653226031Sstasyyerrorlab: 2654226031Sstas 2655226031Sstas /* Pacify compilers like GCC when the user code never invokes 2656226031Sstas YYERROR and the label yyerrorlab therefore never appears in user 2657226031Sstas code. */ 2658226031Sstas if (/*CONSTCOND*/ 0) 2659226031Sstas goto yyerrorlab; 2660226031Sstas 2661226031Sstas /* Do not reclaim the symbols of the rule which action triggered 2662226031Sstas this YYERROR. */ 2663226031Sstas YYPOPSTACK (yylen); 2664226031Sstas yylen = 0; 2665226031Sstas YY_STACK_PRINT (yyss, yyssp); 2666226031Sstas yystate = *yyssp; 2667226031Sstas goto yyerrlab1; 2668226031Sstas 2669226031Sstas 2670226031Sstas/*-------------------------------------------------------------. 2671226031Sstas| yyerrlab1 -- common code for both syntax error and YYERROR. | 2672226031Sstas`-------------------------------------------------------------*/ 2673226031Sstasyyerrlab1: 2674226031Sstas yyerrstatus = 3; /* Each real token shifted decrements this. */ 2675226031Sstas 2676226031Sstas for (;;) 2677226031Sstas { 2678226031Sstas yyn = yypact[yystate]; 2679226031Sstas if (yyn != YYPACT_NINF) 2680226031Sstas { 2681226031Sstas yyn += YYTERROR; 2682226031Sstas if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) 2683226031Sstas { 2684226031Sstas yyn = yytable[yyn]; 2685226031Sstas if (0 < yyn) 2686226031Sstas break; 2687226031Sstas } 2688226031Sstas } 2689226031Sstas 2690226031Sstas /* Pop the current state because it cannot handle the error token. */ 2691226031Sstas if (yyssp == yyss) 2692226031Sstas YYABORT; 2693226031Sstas 2694226031Sstas 2695226031Sstas yydestruct ("Error: popping", 2696226031Sstas yystos[yystate], yyvsp); 2697226031Sstas YYPOPSTACK (1); 2698226031Sstas yystate = *yyssp; 2699226031Sstas YY_STACK_PRINT (yyss, yyssp); 2700226031Sstas } 2701226031Sstas 2702226031Sstas if (yyn == YYFINAL) 2703226031Sstas YYACCEPT; 2704226031Sstas 2705226031Sstas *++yyvsp = yylval; 2706226031Sstas 2707226031Sstas 2708226031Sstas /* Shift the error token. */ 2709226031Sstas YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); 2710226031Sstas 2711226031Sstas yystate = yyn; 2712226031Sstas goto yynewstate; 2713226031Sstas 2714226031Sstas 2715226031Sstas/*-------------------------------------. 2716226031Sstas| yyacceptlab -- YYACCEPT comes here. | 2717226031Sstas`-------------------------------------*/ 2718226031Sstasyyacceptlab: 2719226031Sstas yyresult = 0; 2720226031Sstas goto yyreturn; 2721226031Sstas 2722226031Sstas/*-----------------------------------. 2723226031Sstas| yyabortlab -- YYABORT comes here. | 2724226031Sstas`-----------------------------------*/ 2725226031Sstasyyabortlab: 2726226031Sstas yyresult = 1; 2727226031Sstas goto yyreturn; 2728226031Sstas 2729226031Sstas#ifndef yyoverflow 2730226031Sstas/*-------------------------------------------------. 2731226031Sstas| yyexhaustedlab -- memory exhaustion comes here. | 2732226031Sstas`-------------------------------------------------*/ 2733226031Sstasyyexhaustedlab: 2734226031Sstas yyerror (YY_("memory exhausted")); 2735226031Sstas yyresult = 2; 2736226031Sstas /* Fall through. */ 2737226031Sstas#endif 2738226031Sstas 2739226031Sstasyyreturn: 2740226031Sstas if (yychar != YYEOF && yychar != YYEMPTY) 2741226031Sstas yydestruct ("Cleanup: discarding lookahead", 2742226031Sstas yytoken, &yylval); 2743226031Sstas /* Do not reclaim the symbols of the rule which action triggered 2744226031Sstas this YYABORT or YYACCEPT. */ 2745226031Sstas YYPOPSTACK (yylen); 2746226031Sstas YY_STACK_PRINT (yyss, yyssp); 2747226031Sstas while (yyssp != yyss) 2748226031Sstas { 2749226031Sstas yydestruct ("Cleanup: popping", 2750226031Sstas yystos[*yyssp], yyvsp); 2751226031Sstas YYPOPSTACK (1); 2752226031Sstas } 2753226031Sstas#ifndef yyoverflow 2754226031Sstas if (yyss != yyssa) 2755226031Sstas YYSTACK_FREE (yyss); 2756226031Sstas#endif 2757226031Sstas#if YYERROR_VERBOSE 2758226031Sstas if (yymsg != yymsgbuf) 2759226031Sstas YYSTACK_FREE (yymsg); 2760226031Sstas#endif 2761226031Sstas /* Make sure YYID is used. */ 2762226031Sstas return YYID (yyresult); 2763226031Sstas} 2764226031Sstas 2765226031Sstas 2766226031Sstas#line 944 "asn1parse.y" 2767226031Sstas 2768226031Sstas 2769226031Sstasvoid 2770226031Sstasyyerror (const char *s) 2771226031Sstas{ 2772226031Sstas lex_error_message ("%s\n", s); 2773226031Sstas} 2774226031Sstas 2775226031Sstasstatic Type * 2776226031Sstasnew_tag(int tagclass, int tagvalue, int tagenv, Type *oldtype) 2777226031Sstas{ 2778226031Sstas Type *t; 2779226031Sstas if(oldtype->type == TTag && oldtype->tag.tagenv == TE_IMPLICIT) { 2780226031Sstas t = oldtype; 2781226031Sstas oldtype = oldtype->subtype; /* XXX */ 2782226031Sstas } else 2783226031Sstas t = new_type (TTag); 2784226031Sstas 2785226031Sstas t->tag.tagclass = tagclass; 2786226031Sstas t->tag.tagvalue = tagvalue; 2787226031Sstas t->tag.tagenv = tagenv; 2788226031Sstas t->subtype = oldtype; 2789226031Sstas return t; 2790226031Sstas} 2791226031Sstas 2792226031Sstasstatic struct objid * 2793226031Sstasnew_objid(const char *label, int value) 2794226031Sstas{ 2795226031Sstas struct objid *s; 2796226031Sstas s = emalloc(sizeof(*s)); 2797226031Sstas s->label = label; 2798226031Sstas s->value = value; 2799226031Sstas s->next = NULL; 2800226031Sstas return s; 2801226031Sstas} 2802226031Sstas 2803226031Sstasstatic void 2804226031Sstasadd_oid_to_tail(struct objid *head, struct objid *tail) 2805226031Sstas{ 2806226031Sstas struct objid *o; 2807226031Sstas o = head; 2808226031Sstas while (o->next) 2809226031Sstas o = o->next; 2810226031Sstas o->next = tail; 2811226031Sstas} 2812226031Sstas 2813226031Sstasstatic Type * 2814226031Sstasnew_type (Typetype tt) 2815226031Sstas{ 2816226031Sstas Type *t = ecalloc(1, sizeof(*t)); 2817226031Sstas t->type = tt; 2818226031Sstas return t; 2819226031Sstas} 2820226031Sstas 2821226031Sstasstatic struct constraint_spec * 2822226031Sstasnew_constraint_spec(enum ctype ct) 2823226031Sstas{ 2824226031Sstas struct constraint_spec *c = ecalloc(1, sizeof(*c)); 2825226031Sstas c->ctype = ct; 2826226031Sstas return c; 2827226031Sstas} 2828226031Sstas 2829226031Sstasstatic void fix_labels2(Type *t, const char *prefix); 2830226031Sstasstatic void fix_labels1(struct memhead *members, const char *prefix) 2831226031Sstas{ 2832226031Sstas Member *m; 2833226031Sstas 2834226031Sstas if(members == NULL) 2835226031Sstas return; 2836226031Sstas ASN1_TAILQ_FOREACH(m, members, members) { 2837226031Sstas if (asprintf(&m->label, "%s_%s", prefix, m->gen_name) < 0) 2838226031Sstas errx(1, "malloc"); 2839226031Sstas if (m->label == NULL) 2840226031Sstas errx(1, "malloc"); 2841226031Sstas if(m->type != NULL) 2842226031Sstas fix_labels2(m->type, m->label); 2843226031Sstas } 2844226031Sstas} 2845226031Sstas 2846226031Sstasstatic void fix_labels2(Type *t, const char *prefix) 2847226031Sstas{ 2848226031Sstas for(; t; t = t->subtype) 2849226031Sstas fix_labels1(t->members, prefix); 2850226031Sstas} 2851226031Sstas 2852226031Sstasstatic void 2853226031Sstasfix_labels(Symbol *s) 2854226031Sstas{ 2855226031Sstas char *p = NULL; 2856226031Sstas if (asprintf(&p, "choice_%s", s->gen_name) < 0 || p == NULL) 2857226031Sstas errx(1, "malloc"); 2858226031Sstas fix_labels2(s->type, p); 2859226031Sstas free(p); 2860226031Sstas} 2861226031Sstas 2862