blob: f99d215fdb3257fe54061c47c3d24b7356c331e8 [file] [log] [blame]
Lev Walkin418298d2006-07-13 08:24:20 +00001/* A Bison parser, made from asn1p_y.y, by GNU bison 1.75. */
Lev Walkinf15320b2004-06-03 03:38:44 +00002
Lev Walkin418298d2006-07-13 08:24:20 +00003/* Skeleton parser for Yacc-like parsing with Bison,
4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
Lev Walkinf15320b2004-06-03 03:38:44 +00005
Lev Walkin418298d2006-07-13 08:24:20 +00006 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
Lev Walkinf15320b2004-06-03 03:38:44 +000010
Lev Walkin418298d2006-07-13 08:24:20 +000011 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
20
21/* As a special exception, when this file is copied by Bison into a
22 Bison output file, you may use that output file without restriction.
23 This special exception was added by the Free Software Foundation
24 in version 1.24 of Bison. */
25
26/* Written by Richard Stallman by simplifying the original so called
27 ``semantic'' parser. */
28
29/* All symbols defined below should begin with yy or YY, to avoid
30 infringing on user name space. This should be done even for local
31 variables, as they might otherwise be expanded by user macros.
32 There are some unavoidable exceptions within include files to
33 define necessary library symbols; they are noted "INFRINGES ON
34 USER NAME SPACE" below. */
35
36/* Identify Bison output. */
37#define YYBISON 1
38
39/* Pure parsers. */
40#define YYPURE 0
41
42/* Using locations. */
43#define YYLSP_NEEDED 0
44
45/* If NAME_PREFIX is specified substitute the variables and functions
46 names. */
Lev Walkinf15320b2004-06-03 03:38:44 +000047#define yyparse asn1p_parse
Lev Walkin418298d2006-07-13 08:24:20 +000048#define yylex asn1p_lex
Lev Walkinf15320b2004-06-03 03:38:44 +000049#define yyerror asn1p_error
Lev Walkin418298d2006-07-13 08:24:20 +000050#define yylval asn1p_lval
51#define yychar asn1p_char
Lev Walkinf15320b2004-06-03 03:38:44 +000052#define yydebug asn1p_debug
53#define yynerrs asn1p_nerrs
Lev Walkinf15320b2004-06-03 03:38:44 +000054
Lev Walkin418298d2006-07-13 08:24:20 +000055
56/* Tokens. */
57#ifndef YYTOKENTYPE
58# define YYTOKENTYPE
59 /* Put the tokens into the symbol table, so that GDB and other debuggers
60 know about them. */
61 enum yytokentype {
62 TOK_PPEQ = 258,
63 TOK_whitespace = 259,
64 TOK_opaque = 260,
65 TOK_bstring = 261,
66 TOK_cstring = 262,
67 TOK_hstring = 263,
68 TOK_identifier = 264,
69 TOK_number = 265,
70 TOK_tuple = 266,
71 TOK_quadruple = 267,
72 TOK_number_negative = 268,
73 TOK_typereference = 269,
74 TOK_capitalreference = 270,
75 TOK_typefieldreference = 271,
76 TOK_valuefieldreference = 272,
77 TOK_Literal = 273,
78 TOK_ABSENT = 274,
79 TOK_ABSTRACT_SYNTAX = 275,
80 TOK_ALL = 276,
81 TOK_ANY = 277,
82 TOK_APPLICATION = 278,
83 TOK_AUTOMATIC = 279,
84 TOK_BEGIN = 280,
85 TOK_BIT = 281,
86 TOK_BMPString = 282,
87 TOK_BOOLEAN = 283,
88 TOK_BY = 284,
89 TOK_CHARACTER = 285,
90 TOK_CHOICE = 286,
91 TOK_CLASS = 287,
92 TOK_COMPONENT = 288,
93 TOK_COMPONENTS = 289,
94 TOK_CONSTRAINED = 290,
95 TOK_CONTAINING = 291,
96 TOK_DEFAULT = 292,
97 TOK_DEFINITIONS = 293,
98 TOK_DEFINED = 294,
99 TOK_EMBEDDED = 295,
100 TOK_ENCODED = 296,
101 TOK_ENCODING_CONTROL = 297,
102 TOK_END = 298,
103 TOK_ENUMERATED = 299,
104 TOK_EXPLICIT = 300,
105 TOK_EXPORTS = 301,
106 TOK_EXTENSIBILITY = 302,
107 TOK_EXTERNAL = 303,
108 TOK_FALSE = 304,
109 TOK_FROM = 305,
110 TOK_GeneralizedTime = 306,
111 TOK_GeneralString = 307,
112 TOK_GraphicString = 308,
113 TOK_IA5String = 309,
114 TOK_IDENTIFIER = 310,
115 TOK_IMPLICIT = 311,
116 TOK_IMPLIED = 312,
117 TOK_IMPORTS = 313,
118 TOK_INCLUDES = 314,
119 TOK_INSTANCE = 315,
120 TOK_INSTRUCTIONS = 316,
121 TOK_INTEGER = 317,
122 TOK_ISO646String = 318,
123 TOK_MAX = 319,
124 TOK_MIN = 320,
125 TOK_MINUS_INFINITY = 321,
126 TOK_NULL = 322,
127 TOK_NumericString = 323,
128 TOK_OBJECT = 324,
129 TOK_ObjectDescriptor = 325,
130 TOK_OCTET = 326,
131 TOK_OF = 327,
132 TOK_OPTIONAL = 328,
133 TOK_PATTERN = 329,
134 TOK_PDV = 330,
135 TOK_PLUS_INFINITY = 331,
136 TOK_PRESENT = 332,
137 TOK_PrintableString = 333,
138 TOK_PRIVATE = 334,
139 TOK_REAL = 335,
140 TOK_RELATIVE_OID = 336,
141 TOK_SEQUENCE = 337,
142 TOK_SET = 338,
143 TOK_SIZE = 339,
144 TOK_STRING = 340,
145 TOK_SYNTAX = 341,
146 TOK_T61String = 342,
147 TOK_TAGS = 343,
148 TOK_TeletexString = 344,
149 TOK_TRUE = 345,
150 TOK_TYPE_IDENTIFIER = 346,
151 TOK_UNIQUE = 347,
152 TOK_UNIVERSAL = 348,
153 TOK_UniversalString = 349,
154 TOK_UTCTime = 350,
155 TOK_UTF8String = 351,
156 TOK_VideotexString = 352,
157 TOK_VisibleString = 353,
158 TOK_WITH = 354,
159 TOK_EXCEPT = 355,
160 TOK_INTERSECTION = 356,
161 TOK_UNION = 357,
162 TOK_TwoDots = 358,
163 TOK_ThreeDots = 359
164 };
165#endif
166#define TOK_PPEQ 258
167#define TOK_whitespace 259
168#define TOK_opaque 260
169#define TOK_bstring 261
170#define TOK_cstring 262
171#define TOK_hstring 263
172#define TOK_identifier 264
173#define TOK_number 265
174#define TOK_tuple 266
175#define TOK_quadruple 267
176#define TOK_number_negative 268
177#define TOK_typereference 269
178#define TOK_capitalreference 270
179#define TOK_typefieldreference 271
180#define TOK_valuefieldreference 272
181#define TOK_Literal 273
182#define TOK_ABSENT 274
183#define TOK_ABSTRACT_SYNTAX 275
184#define TOK_ALL 276
185#define TOK_ANY 277
186#define TOK_APPLICATION 278
187#define TOK_AUTOMATIC 279
188#define TOK_BEGIN 280
189#define TOK_BIT 281
190#define TOK_BMPString 282
191#define TOK_BOOLEAN 283
192#define TOK_BY 284
193#define TOK_CHARACTER 285
194#define TOK_CHOICE 286
195#define TOK_CLASS 287
196#define TOK_COMPONENT 288
197#define TOK_COMPONENTS 289
198#define TOK_CONSTRAINED 290
199#define TOK_CONTAINING 291
200#define TOK_DEFAULT 292
201#define TOK_DEFINITIONS 293
202#define TOK_DEFINED 294
203#define TOK_EMBEDDED 295
204#define TOK_ENCODED 296
205#define TOK_ENCODING_CONTROL 297
206#define TOK_END 298
207#define TOK_ENUMERATED 299
208#define TOK_EXPLICIT 300
209#define TOK_EXPORTS 301
210#define TOK_EXTENSIBILITY 302
211#define TOK_EXTERNAL 303
212#define TOK_FALSE 304
213#define TOK_FROM 305
214#define TOK_GeneralizedTime 306
215#define TOK_GeneralString 307
216#define TOK_GraphicString 308
217#define TOK_IA5String 309
218#define TOK_IDENTIFIER 310
219#define TOK_IMPLICIT 311
220#define TOK_IMPLIED 312
221#define TOK_IMPORTS 313
222#define TOK_INCLUDES 314
223#define TOK_INSTANCE 315
224#define TOK_INSTRUCTIONS 316
225#define TOK_INTEGER 317
226#define TOK_ISO646String 318
227#define TOK_MAX 319
228#define TOK_MIN 320
229#define TOK_MINUS_INFINITY 321
230#define TOK_NULL 322
231#define TOK_NumericString 323
232#define TOK_OBJECT 324
233#define TOK_ObjectDescriptor 325
234#define TOK_OCTET 326
235#define TOK_OF 327
236#define TOK_OPTIONAL 328
237#define TOK_PATTERN 329
238#define TOK_PDV 330
239#define TOK_PLUS_INFINITY 331
240#define TOK_PRESENT 332
241#define TOK_PrintableString 333
242#define TOK_PRIVATE 334
243#define TOK_REAL 335
244#define TOK_RELATIVE_OID 336
245#define TOK_SEQUENCE 337
246#define TOK_SET 338
247#define TOK_SIZE 339
248#define TOK_STRING 340
249#define TOK_SYNTAX 341
250#define TOK_T61String 342
251#define TOK_TAGS 343
252#define TOK_TeletexString 344
253#define TOK_TRUE 345
254#define TOK_TYPE_IDENTIFIER 346
255#define TOK_UNIQUE 347
256#define TOK_UNIVERSAL 348
257#define TOK_UniversalString 349
258#define TOK_UTCTime 350
259#define TOK_UTF8String 351
260#define TOK_VideotexString 352
261#define TOK_VisibleString 353
262#define TOK_WITH 354
263#define TOK_EXCEPT 355
264#define TOK_INTERSECTION 356
265#define TOK_UNION 357
266#define TOK_TwoDots 358
267#define TOK_ThreeDots 359
268
269
270
271
272/* Copy the first part of user declarations. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000273#line 1 "asn1p_y.y"
274
275
276#include <stdlib.h>
277#include <stdio.h>
278#include <string.h>
279#include <errno.h>
280#include <assert.h>
281
282#include "asn1parser.h"
283
284#define YYPARSE_PARAM param
Lev Walkin4a4bdf72005-06-07 21:43:32 +0000285#define YYPARSE_PARAM_TYPE void **
Lev Walkinf15320b2004-06-03 03:38:44 +0000286#define YYERROR_VERBOSE
287
288int yylex(void);
289int yyerror(const char *msg);
Lev Walkin4a4bdf72005-06-07 21:43:32 +0000290#ifdef YYBYACC
291int yyparse(void **param); /* byacc does not produce a prototype */
292#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000293void asn1p_lexer_hack_push_opaque_state(void);
294void asn1p_lexer_hack_enable_with_syntax(void);
Lev Walkinf59d0752004-08-18 04:59:12 +0000295void asn1p_lexer_hack_push_encoding_control(void);
Lev Walkinf15320b2004-06-03 03:38:44 +0000296#define yylineno asn1p_lineno
297extern int asn1p_lineno;
298
Lev Walkinb36317c2005-08-12 10:09:10 +0000299/*
Lev Walkinef625402005-09-05 05:17:57 +0000300 * Process directives as <ASN1C:RepresentAsPointer>
Lev Walkin4696c742005-08-22 12:23:54 +0000301 */
302extern int asn1p_as_pointer;
Lev Walkin4696c742005-08-22 12:23:54 +0000303
304/*
Lev Walkinb36317c2005-08-12 10:09:10 +0000305 * This temporary variable is used to solve the shortcomings of 1-lookahead
306 * parser.
307 */
308static struct AssignedIdentifier *saved_aid;
Lev Walkinf15320b2004-06-03 03:38:44 +0000309
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000310static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
311static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
Lev Walkinf15320b2004-06-03 03:38:44 +0000312
Lev Walkinb36317c2005-08-12 10:09:10 +0000313#define checkmem(ptr) do { \
314 if(!(ptr)) \
315 return yyerror("Memory failure"); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000316 } while(0)
317
Lev Walkinb36317c2005-08-12 10:09:10 +0000318#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
319 if(arg1->type != constr_type) { \
320 int __ret; \
321 root = asn1p_constraint_new(yylineno); \
322 checkmem(root); \
323 root->type = constr_type; \
324 __ret = asn1p_constraint_insert(root, \
325 arg1); \
326 checkmem(__ret == 0); \
327 } else { \
328 root = arg1; \
329 } \
330 if(arg2) { \
331 int __ret \
332 = asn1p_constraint_insert(root, arg2); \
333 checkmem(__ret == 0); \
334 } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000335 } while(0)
336
337
Lev Walkin418298d2006-07-13 08:24:20 +0000338
339/* Enabling traces. */
340#ifndef YYDEBUG
341# define YYDEBUG 0
342#endif
343
344/* Enabling verbose error messages. */
345#ifdef YYERROR_VERBOSE
346# undef YYERROR_VERBOSE
347# define YYERROR_VERBOSE 1
348#else
349# define YYERROR_VERBOSE 0
350#endif
351
352#ifndef YYSTYPE
Lev Walkinef625402005-09-05 05:17:57 +0000353#line 72 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +0000354typedef union {
Lev Walkinf15320b2004-06-03 03:38:44 +0000355 asn1p_t *a_grammar;
356 asn1p_module_flags_e a_module_flags;
357 asn1p_module_t *a_module;
358 asn1p_expr_type_e a_type; /* ASN.1 Type */
359 asn1p_expr_t *a_expr; /* Constructed collection */
360 asn1p_constraint_t *a_constr; /* Constraint */
361 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
362 asn1p_xports_t *a_xports; /* IMports/EXports */
Lev Walkinb36317c2005-08-12 10:09:10 +0000363 struct AssignedIdentifier a_aid; /* Assigned Identifier */
Lev Walkinf15320b2004-06-03 03:38:44 +0000364 asn1p_oid_t *a_oid; /* Object Identifier */
365 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
366 struct asn1p_type_tag_s a_tag; /* A tag */
367 asn1p_ref_t *a_ref; /* Reference to custom type */
368 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
369 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
370 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
371 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
372 struct asn1p_param_s a_parg; /* A parameter argument */
373 asn1p_paramlist_t *a_plist; /* A pargs list */
Lev Walkin9c974182004-09-15 11:59:51 +0000374 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
Lev Walkinf15320b2004-06-03 03:38:44 +0000375 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
Lev Walkind21c5052004-09-29 13:18:09 +0000376 asn1c_integer_t a_int;
Lev Walkinf15320b2004-06-03 03:38:44 +0000377 char *tv_str;
378 struct {
379 char *buf;
380 int len;
381 } tv_opaque;
382 struct {
383 char *name;
384 struct asn1p_type_tag_s tag;
385 } tv_nametag;
Lev Walkin418298d2006-07-13 08:24:20 +0000386} yystype;
387/* Line 193 of /usr/local/share/bison/yacc.c. */
388#line 389 "asn1p_y.c"
389# define YYSTYPE yystype
390# define YYSTYPE_IS_TRIVIAL 1
Lev Walkinf15320b2004-06-03 03:38:44 +0000391#endif
392
Lev Walkin418298d2006-07-13 08:24:20 +0000393#ifndef YYLTYPE
394typedef struct yyltype
395{
396 int first_line;
397 int first_column;
398 int last_line;
399 int last_column;
400} yyltype;
401# define YYLTYPE yyltype
402# define YYLTYPE_IS_TRIVIAL 1
403#endif
404
405/* Copy the second part of user declarations. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000406
407
Lev Walkin418298d2006-07-13 08:24:20 +0000408/* Line 213 of /usr/local/share/bison/yacc.c. */
409#line 410 "asn1p_y.c"
Lev Walkinf15320b2004-06-03 03:38:44 +0000410
Lev Walkin418298d2006-07-13 08:24:20 +0000411#if ! defined (yyoverflow) || YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +0000412
Lev Walkin418298d2006-07-13 08:24:20 +0000413/* The parser invokes alloca or malloc; define the necessary symbols. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000414
Lev Walkin418298d2006-07-13 08:24:20 +0000415# if YYSTACK_USE_ALLOCA
416# define YYSTACK_ALLOC alloca
417# else
418# ifndef YYSTACK_USE_ALLOCA
419# if defined (alloca) || defined (_ALLOCA_H)
420# define YYSTACK_ALLOC alloca
421# else
422# ifdef __GNUC__
423# define YYSTACK_ALLOC __builtin_alloca
424# endif
425# endif
426# endif
427# endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000428
Lev Walkin418298d2006-07-13 08:24:20 +0000429# ifdef YYSTACK_ALLOC
430 /* Pacify GCC's `empty if-body' warning. */
431# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
432# else
433# if defined (__STDC__) || defined (__cplusplus)
434# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
435# define YYSIZE_T size_t
436# endif
437# define YYSTACK_ALLOC malloc
438# define YYSTACK_FREE free
439# endif
440#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
441
442
443#if (! defined (yyoverflow) \
444 && (! defined (__cplusplus) \
445 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
446
447/* A type that is properly aligned for any stack member. */
448union yyalloc
449{
450 short yyss;
451 YYSTYPE yyvs;
452 };
453
454/* The size of the maximum gap between one aligned stack and the next. */
455# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
456
457/* The size of an array large to enough to hold all stacks, each with
458 N elements. */
459# define YYSTACK_BYTES(N) \
460 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
461 + YYSTACK_GAP_MAX)
462
463/* Copy COUNT objects from FROM to TO. The source and destination do
464 not overlap. */
465# ifndef YYCOPY
466# if 1 < __GNUC__
467# define YYCOPY(To, From, Count) \
468 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
469# else
470# define YYCOPY(To, From, Count) \
471 do \
472 { \
473 register YYSIZE_T yyi; \
474 for (yyi = 0; yyi < (Count); yyi++) \
475 (To)[yyi] = (From)[yyi]; \
476 } \
477 while (0)
478# endif
479# endif
480
481/* Relocate STACK from its old location to the new one. The
482 local variables YYSIZE and YYSTACKSIZE give the old and new number of
483 elements in the stack, and YYPTR gives the new location of the
484 stack. Advance YYPTR to a properly aligned location for the next
485 stack. */
486# define YYSTACK_RELOCATE(Stack) \
487 do \
488 { \
489 YYSIZE_T yynewbytes; \
490 YYCOPY (&yyptr->Stack, Stack, yysize); \
491 Stack = &yyptr->Stack; \
492 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
493 yyptr += yynewbytes / sizeof (*yyptr); \
494 } \
495 while (0)
Lev Walkinf15320b2004-06-03 03:38:44 +0000496
497#endif
498
Lev Walkin418298d2006-07-13 08:24:20 +0000499#if defined (__STDC__) || defined (__cplusplus)
500 typedef signed char yysigned_char;
Lev Walkinf15320b2004-06-03 03:38:44 +0000501#else
Lev Walkin418298d2006-07-13 08:24:20 +0000502 typedef short yysigned_char;
Lev Walkinf15320b2004-06-03 03:38:44 +0000503#endif
504
Lev Walkin418298d2006-07-13 08:24:20 +0000505/* YYFINAL -- State number of the termination state. */
506#define YYFINAL 7
507#define YYLAST 838
508
509/* YYNTOKENS -- Number of terminals. */
510#define YYNTOKENS 120
511/* YYNNTS -- Number of nonterminals. */
512#define YYNNTS 108
513/* YYNRULES -- Number of rules. */
514#define YYNRULES 291
515/* YYNRULES -- Number of states. */
516#define YYNSTATES 448
517
518/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
519#define YYUNDEFTOK 2
520#define YYMAXUTOK 359
521
522#define YYTRANSLATE(X) \
523 ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
524
525/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
526static const unsigned char yytranslate[] =
527{
528 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
529 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
530 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
531 2, 2, 2, 116, 2, 2, 2, 2, 2, 2,
532 109, 110, 2, 2, 112, 2, 117, 2, 2, 2,
533 2, 2, 2, 2, 2, 2, 2, 2, 113, 111,
534 118, 2, 2, 2, 119, 2, 2, 2, 2, 2,
535 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
536 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
537 2, 114, 2, 115, 101, 2, 2, 2, 2, 2,
538 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
539 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
540 2, 2, 2, 107, 103, 108, 2, 2, 2, 2,
541 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
542 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
543 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
544 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
545 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
546 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
547 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
548 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
549 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
550 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
551 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
552 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
553 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
554 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
555 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
556 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
557 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
558 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
559 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
560 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
561 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
562 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
563 95, 96, 97, 98, 99, 100, 102, 104, 105, 106
564};
565
566#if YYDEBUG
567/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
568 YYRHS. */
569static const unsigned short yyprhs[] =
570{
571 0, 0, 3, 5, 7, 10, 19, 20, 22, 26,
572 29, 31, 34, 36, 41, 43, 44, 46, 48, 51,
573 54, 57, 60, 63, 66, 67, 69, 71, 74, 76,
574 78, 80, 82, 84, 85, 89, 91, 95, 98, 100,
575 103, 104, 106, 111, 113, 117, 119, 123, 125, 129,
576 133, 136, 138, 142, 144, 148, 150, 154, 159, 161,
577 163, 168, 172, 176, 183, 190, 192, 196, 198, 202,
578 206, 210, 214, 216, 220, 222, 224, 226, 228, 229,
579 231, 233, 237, 241, 244, 248, 250, 252, 256, 259,
580 261, 263, 269, 270, 272, 274, 278, 281, 286, 290,
581 294, 298, 302, 306, 307, 309, 310, 317, 319, 322,
582 324, 326, 328, 332, 334, 338, 342, 346, 347, 350,
583 352, 357, 362, 367, 374, 381, 383, 388, 392, 394,
584 398, 402, 406, 408, 412, 414, 418, 420, 422, 424,
585 426, 430, 434, 436, 441, 443, 445, 449, 450, 454,
586 456, 458, 460, 462, 464, 466, 468, 470, 474, 476,
587 478, 480, 482, 485, 487, 489, 491, 493, 496, 499,
588 501, 503, 506, 509, 511, 513, 515, 517, 519, 522,
589 524, 527, 529, 531, 533, 535, 537, 539, 541, 543,
590 545, 547, 549, 551, 553, 555, 557, 559, 561, 563,
591 565, 566, 568, 570, 575, 579, 584, 586, 588, 592,
592 598, 600, 604, 608, 612, 616, 621, 625, 627, 629,
593 633, 637, 641, 645, 647, 649, 650, 656, 658, 661,
594 664, 668, 670, 672, 674, 676, 678, 680, 682, 684,
595 688, 694, 696, 700, 702, 706, 707, 709, 711, 713,
596 715, 717, 719, 723, 728, 730, 734, 737, 741, 743,
597 747, 748, 750, 752, 755, 758, 762, 764, 768, 770,
598 775, 780, 782, 784, 786, 788, 789, 791, 794, 799,
599 800, 802, 804, 806, 807, 809, 811, 813, 815, 817,
600 818, 820
601};
602
603/* YYRHS -- A `-1'-separated list of the rules' RHS. */
604static const short yyrhs[] =
605{
606 121, 0, -1, 122, -1, 123, -1, 122, 123, -1,
607 224, 124, 38, 128, 3, 25, 131, 43, -1, -1,
608 125, -1, 107, 126, 108, -1, 107, 108, -1, 127,
609 -1, 126, 127, -1, 227, -1, 227, 109, 10, 110,
610 -1, 10, -1, -1, 129, -1, 130, -1, 129, 130,
611 -1, 45, 88, -1, 56, 88, -1, 24, 88, -1,
612 47, 57, -1, 15, 61, -1, -1, 132, -1, 133,
613 -1, 132, 133, -1, 135, -1, 141, -1, 147, -1,
614 177, -1, 145, -1, -1, 42, 15, 134, -1, 187,
615 -1, 58, 136, 111, -1, 58, 50, -1, 138, -1,
616 136, 138, -1, -1, 125, -1, 139, 50, 224, 137,
617 -1, 140, -1, 139, 112, 140, -1, 224, -1, 224,
618 107, 108, -1, 227, -1, 46, 142, 111, -1, 46,
619 21, 111, -1, 46, 111, -1, 143, -1, 142, 112,
620 143, -1, 224, -1, 224, 107, 108, -1, 227, -1,
621 107, 194, 108, -1, 224, 146, 3, 144, -1, 186,
622 -1, 171, -1, 171, 107, 150, 108, -1, 224, 3,
623 167, -1, 224, 3, 157, -1, 224, 107, 148, 108,
624 3, 167, -1, 224, 107, 148, 108, 3, 157, -1,
625 149, -1, 148, 112, 149, -1, 224, -1, 224, 113,
626 227, -1, 224, 113, 224, -1, 184, 113, 227, -1,
627 184, 113, 224, -1, 151, -1, 150, 112, 151, -1,
628 167, -1, 180, -1, 227, -1, 144, -1, -1, 153,
629 -1, 154, -1, 153, 112, 154, -1, 227, 167, 213,
630 -1, 167, 213, -1, 34, 72, 167, -1, 166, -1,
631 156, -1, 155, 112, 156, -1, 227, 167, -1, 166,
632 -1, 167, -1, 32, 107, 159, 108, 161, -1, -1,
633 92, -1, 160, -1, 159, 112, 160, -1, 16, 213,
634 -1, 17, 167, 158, 213, -1, 17, 175, 213, -1,
635 17, 176, 213, -1, 16, 175, 213, -1, 16, 167,
636 213, -1, 16, 176, 213, -1, -1, 162, -1, -1,
637 99, 86, 107, 163, 164, 108, -1, 165, -1, 164,
638 165, -1, 4, -1, 18, -1, 174, -1, 114, 164,
639 115, -1, 106, -1, 106, 116, 181, -1, 106, 116,
640 218, -1, 219, 169, 191, -1, -1, 168, 170, -1,
641 146, -1, 31, 107, 155, 108, -1, 82, 107, 152,
642 108, -1, 83, 107, 152, 108, -1, 82, 191, 72,
643 226, 219, 169, -1, 83, 191, 72, 226, 219, 169,
644 -1, 22, -1, 22, 39, 29, 227, -1, 60, 72,
645 171, -1, 14, -1, 14, 117, 224, -1, 225, 117,
646 224, -1, 14, 117, 227, -1, 225, -1, 225, 117,
647 172, -1, 173, -1, 172, 117, 173, -1, 174, -1,
648 16, -1, 17, -1, 16, -1, 175, 117, 16, -1,
649 175, 117, 17, -1, 15, -1, 227, 146, 3, 178,
650 -1, 180, -1, 181, -1, 227, 113, 178, -1, -1,
651 107, 179, 183, -1, 67, -1, 49, -1, 90, -1,
652 6, -1, 8, -1, 182, -1, 218, -1, 227, -1,
653 224, 117, 227, -1, 7, -1, 11, -1, 12, -1,
654 5, -1, 183, 5, -1, 28, -1, 67, -1, 80,
655 -1, 185, -1, 71, 85, -1, 69, 55, -1, 81,
656 -1, 48, -1, 40, 75, -1, 30, 85, -1, 95,
657 -1, 51, -1, 187, -1, 62, -1, 44, -1, 26,
658 85, -1, 184, -1, 185, 215, -1, 27, -1, 52,
659 -1, 53, -1, 54, -1, 63, -1, 68, -1, 78,
660 -1, 87, -1, 89, -1, 94, -1, 96, -1, 97,
661 -1, 98, -1, 70, -1, 103, -1, 104, -1, 101,
662 -1, 102, -1, 100, -1, -1, 192, -1, 193, -1,
663 84, 109, 194, 110, -1, 109, 194, 110, -1, 193,
664 109, 194, 110, -1, 106, -1, 195, -1, 195, 112,
665 106, -1, 195, 112, 106, 112, 195, -1, 196, -1,
666 21, 100, 196, -1, 195, 188, 196, -1, 195, 189,
667 196, -1, 196, 190, 196, -1, 199, 109, 194, 110,
668 -1, 109, 194, 110, -1, 200, -1, 201, -1, 200,
669 198, 200, -1, 65, 198, 200, -1, 200, 198, 64,
670 -1, 65, 198, 64, -1, 207, -1, 202, -1, -1,
671 35, 29, 107, 197, 183, -1, 105, -1, 105, 118,
672 -1, 118, 105, -1, 118, 105, 118, -1, 84, -1,
673 50, -1, 49, -1, 90, -1, 218, -1, 182, -1,
674 227, -1, 224, -1, 99, 33, 193, -1, 99, 34,
675 107, 203, 108, -1, 204, -1, 203, 112, 204, -1,
676 106, -1, 227, 191, 205, -1, -1, 206, -1, 77,
677 -1, 19, -1, 73, -1, 208, -1, 209, -1, 107,
678 224, 108, -1, 208, 107, 210, 108, -1, 211, -1,
679 210, 112, 211, -1, 119, 212, -1, 119, 117, 212,
680 -1, 227, -1, 212, 117, 227, -1, -1, 214, -1,
681 73, -1, 37, 178, -1, 107, 108, -1, 107, 216,
682 108, -1, 217, -1, 216, 112, 217, -1, 227, -1,
683 227, 109, 218, 110, -1, 227, 109, 181, 110, -1,
684 218, -1, 106, -1, 10, -1, 13, -1, -1, 220,
685 -1, 221, 223, -1, 114, 222, 10, 115, -1, -1,
686 93, -1, 23, -1, 79, -1, -1, 56, -1, 45,
687 -1, 14, -1, 15, -1, 15, -1, -1, 227, -1,
688 9, -1
689};
690
691/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
692static const unsigned short yyrline[] =
693{
694 0, 323, 323, 329, 335, 351, 376, 378, 381, 385,
695 390, 397, 405, 410, 414, 423, 425, 433, 437, 445,
696 449, 452, 455, 459, 479, 481, 489, 493, 525, 529,
697 538, 545, 558, 566, 565, 579, 591, 602, 607, 613,
698 619, 621, 624, 635, 641, 647, 654, 660, 668, 672,
699 675, 682, 688, 694, 701, 707, 716, 718, 728, 742,
700 752, 768, 778, 794, 800, 807, 817, 827, 832, 839,
701 846, 854, 864, 870, 876, 880, 888, 899, 921, 923,
702 925, 931, 937, 945, 951, 958, 963, 969, 975, 981,
703 984, 990, 1000, 1002, 1005, 1013, 1020, 1033, 1044, 1054,
704 1065, 1075, 1086, 1097, 1099, 1106, 1104, 1113, 1118, 1124,
705 1129, 1132, 1136, 1141, 1150, 1159, 1170, 1192, 1199, 1218,
706 1222, 1228, 1234, 1240, 1250, 1260, 1266, 1277, 1291, 1300,
707 1310, 1320, 1330, 1338, 1359, 1368, 1377, 1379, 1386, 1393,
708 1399, 1403, 1409, 1429, 1439, 1441, 1442, 1449, 1449, 1454,
709 1461, 1467, 1472, 1476, 1480, 1483, 1488, 1500, 1517, 1522,
710 1527, 1560, 1570, 1584, 1586, 1587, 1588, 1589, 1590, 1591,
711 1592, 1593, 1594, 1595, 1596, 1597, 1603, 1605, 1606, 1609,
712 1616, 1628, 1630, 1634, 1638, 1639, 1640, 1641, 1642, 1646,
713 1647, 1648, 1649, 1653, 1654, 1661, 1661, 1662, 1662, 1663,
714 1665, 1667, 1672, 1676, 1685, 1689, 1694, 1699, 1702, 1708,
715 1718, 1722, 1725, 1728, 1731, 1736, 1745, 1753, 1759, 1765,
716 1772, 1780, 1788, 1797, 1800, 1804, 1803, 1814, 1816, 1817,
717 1818, 1821, 1825, 1830, 1836, 1841, 1844, 1847, 1860, 1874,
718 1878, 1883, 1887, 1892, 1899, 1912, 1914, 1917, 1921, 1924,
719 1929, 1933, 1941, 1956, 1962, 1969, 1982, 1994, 2009, 2013,
720 2030, 2035, 2038, 2043, 2065, 2070, 2075, 2081, 2087, 2095,
721 2103, 2111, 2118, 2128, 2133, 2163, 2165, 2168, 2175, 2181,
722 2183, 2184, 2185, 2188, 2190, 2191, 2194, 2199, 2206, 2213,
723 2215, 2220
724};
725#endif
726
727#if YYDEBUG || YYERROR_VERBOSE
728/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
729 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
730static const char *const yytname[] =
731{
732 "$end", "error", "$undefined", "TOK_PPEQ", "TOK_whitespace", "TOK_opaque",
733 "TOK_bstring", "TOK_cstring", "TOK_hstring", "TOK_identifier",
734 "TOK_number", "TOK_tuple", "TOK_quadruple", "TOK_number_negative",
735 "TOK_typereference", "TOK_capitalreference", "TOK_typefieldreference",
736 "TOK_valuefieldreference", "TOK_Literal", "TOK_ABSENT",
737 "TOK_ABSTRACT_SYNTAX", "TOK_ALL", "TOK_ANY", "TOK_APPLICATION",
738 "TOK_AUTOMATIC", "TOK_BEGIN", "TOK_BIT", "TOK_BMPString", "TOK_BOOLEAN",
739 "TOK_BY", "TOK_CHARACTER", "TOK_CHOICE", "TOK_CLASS", "TOK_COMPONENT",
740 "TOK_COMPONENTS", "TOK_CONSTRAINED", "TOK_CONTAINING", "TOK_DEFAULT",
741 "TOK_DEFINITIONS", "TOK_DEFINED", "TOK_EMBEDDED", "TOK_ENCODED",
742 "TOK_ENCODING_CONTROL", "TOK_END", "TOK_ENUMERATED", "TOK_EXPLICIT",
743 "TOK_EXPORTS", "TOK_EXTENSIBILITY", "TOK_EXTERNAL", "TOK_FALSE",
744 "TOK_FROM", "TOK_GeneralizedTime", "TOK_GeneralString",
745 "TOK_GraphicString", "TOK_IA5String", "TOK_IDENTIFIER", "TOK_IMPLICIT",
746 "TOK_IMPLIED", "TOK_IMPORTS", "TOK_INCLUDES", "TOK_INSTANCE",
747 "TOK_INSTRUCTIONS", "TOK_INTEGER", "TOK_ISO646String", "TOK_MAX",
748 "TOK_MIN", "TOK_MINUS_INFINITY", "TOK_NULL", "TOK_NumericString",
749 "TOK_OBJECT", "TOK_ObjectDescriptor", "TOK_OCTET", "TOK_OF",
750 "TOK_OPTIONAL", "TOK_PATTERN", "TOK_PDV", "TOK_PLUS_INFINITY",
751 "TOK_PRESENT", "TOK_PrintableString", "TOK_PRIVATE", "TOK_REAL",
752 "TOK_RELATIVE_OID", "TOK_SEQUENCE", "TOK_SET", "TOK_SIZE", "TOK_STRING",
753 "TOK_SYNTAX", "TOK_T61String", "TOK_TAGS", "TOK_TeletexString",
754 "TOK_TRUE", "TOK_TYPE_IDENTIFIER", "TOK_UNIQUE", "TOK_UNIVERSAL",
755 "TOK_UniversalString", "TOK_UTCTime", "TOK_UTF8String",
756 "TOK_VideotexString", "TOK_VisibleString", "TOK_WITH", "TOK_EXCEPT",
757 "'^'", "TOK_INTERSECTION", "'|'", "TOK_UNION", "TOK_TwoDots",
758 "TOK_ThreeDots", "'{'", "'}'", "'('", "')'", "';'", "','", "':'", "'['",
759 "']'", "'!'", "'.'", "'<'", "'@'", "$accept", "ParsedGrammar",
760 "ModuleList", "ModuleSpecification", "optObjectIdentifier",
761 "ObjectIdentifier", "ObjectIdentifierBody", "ObjectIdentifierElement",
762 "optModuleSpecificationFlags", "ModuleSpecificationFlags",
763 "ModuleSpecificationFlag", "optModuleSpecificationBody",
764 "ModuleSpecificationBody", "ModuleSpecificationElement", "@1",
765 "ImportsDefinition", "ImportsBundleSet", "AssignedIdentifier",
766 "ImportsBundle", "ImportsList", "ImportsElement", "ExportsDefinition",
767 "ExportsBody", "ExportsElement", "ValueSet", "ValueSetTypeAssignment",
768 "DefinedType", "DataTypeReference", "ParameterArgumentList",
769 "ParameterArgumentName", "ActualParameterList", "ActualParameter",
770 "optComponentTypeLists", "ComponentTypeLists", "ComponentType",
771 "AlternativeTypeLists", "AlternativeType", "ObjectClass", "optUnique",
772 "FieldSpec", "ClassField", "optWithSyntax", "WithSyntax", "@2",
773 "WithSyntaxList", "WithSyntaxToken", "ExtensionAndException", "Type",
774 "NSTD_IndirectMarker", "TypeDeclaration", "TypeDeclarationSet",
775 "ComplexTypeReference", "ComplexTypeReferenceAmpList",
776 "ComplexTypeReferenceElement", "PrimitiveFieldReference", "FieldName",
777 "DefinedObjectClass", "ValueDefinition", "Value", "@3", "SimpleValue",
778 "DefinedValue", "RestrictedCharacterStringValue", "Opaque",
779 "BasicTypeId", "BasicTypeId_UniverationCompatible", "BasicType",
780 "BasicString", "Union", "Intersection", "Except", "optConstraints",
781 "Constraints", "SetOfConstraints", "ElementSetSpecs", "ElementSetSpec",
782 "ConstraintSubtypeElement", "@4", "ConstraintRangeSpec",
783 "ConstraintSpec", "SingleValue", "ContainedSubtype",
784 "InnerTypeConstraint", "WithComponentsList", "WithComponentsElement",
785 "optPresenceConstraint", "PresenceConstraint", "TableConstraint",
786 "SimpleTableConstraint", "ComponentRelationConstraint",
787 "AtNotationList", "AtNotationElement", "ComponentIdList", "optMarker",
788 "Marker", "UniverationDefinition", "UniverationList",
789 "UniverationElement", "SignedNumber", "optTag", "Tag", "TagTypeValue",
790 "TagClass", "TagPlicit", "TypeRefName", "ObjectClassReference",
791 "optIdentifier", "Identifier", 0
792};
793#endif
794
795# ifdef YYPRINT
796/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
797 token YYLEX-NUM. */
798static const unsigned short yytoknum[] =
799{
800 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
801 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
802 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
803 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
804 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
805 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
806 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
807 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
808 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
809 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
810 355, 94, 356, 124, 357, 358, 359, 123, 125, 40,
811 41, 59, 44, 58, 91, 93, 33, 46, 60, 64
812};
813# endif
814
815/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
816static const unsigned char yyr1[] =
817{
818 0, 120, 121, 122, 122, 123, 124, 124, 125, 125,
819 126, 126, 127, 127, 127, 128, 128, 129, 129, 130,
820 130, 130, 130, 130, 131, 131, 132, 132, 133, 133,
821 133, 133, 133, 134, 133, 133, 135, 135, 136, 136,
822 137, 137, 138, 139, 139, 140, 140, 140, 141, 141,
823 141, 142, 142, 143, 143, 143, 144, 145, 146, 146,
824 146, 147, 147, 147, 147, 148, 148, 149, 149, 149,
825 149, 149, 150, 150, 151, 151, 151, 151, 152, 152,
826 153, 153, 154, 154, 154, 154, 155, 155, 156, 156,
827 156, 157, 158, 158, 159, 159, 160, 160, 160, 160,
828 160, 160, 160, 161, 161, 163, 162, 164, 164, 165,
829 165, 165, 165, 166, 166, 166, 167, 168, 169, 170,
830 170, 170, 170, 170, 170, 170, 170, 170, 171, 171,
831 171, 171, 171, 171, 172, 172, 173, 174, 174, 175,
832 175, 175, 176, 177, 178, 178, 178, 179, 178, 178,
833 180, 180, 180, 180, 180, 180, 181, 181, 182, 182,
834 182, 183, 183, 184, 184, 184, 184, 184, 184, 184,
835 184, 184, 184, 184, 184, 184, 185, 185, 185, 186,
836 186, 187, 187, 187, 187, 187, 187, 187, 187, 187,
837 187, 187, 187, 187, 187, 188, 188, 189, 189, 190,
838 191, 191, 192, 192, 193, 193, 194, 194, 194, 194,
839 195, 195, 195, 195, 195, 196, 196, 196, 196, 196,
840 196, 196, 196, 196, 196, 197, 196, 198, 198, 198,
841 198, 199, 199, 200, 200, 200, 200, 200, 201, 202,
842 202, 203, 203, 204, 204, 205, 205, 206, 206, 206,
843 207, 207, 208, 209, 210, 210, 211, 211, 212, 212,
844 213, 213, 214, 214, 215, 215, 216, 216, 217, 217,
845 217, 217, 217, 218, 218, 219, 219, 220, 221, 222,
846 222, 222, 222, 223, 223, 223, 224, 224, 225, 226,
847 226, 227
848};
849
850/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
851static const unsigned char yyr2[] =
852{
853 0, 2, 1, 1, 2, 8, 0, 1, 3, 2,
854 1, 2, 1, 4, 1, 0, 1, 1, 2, 2,
855 2, 2, 2, 2, 0, 1, 1, 2, 1, 1,
856 1, 1, 1, 0, 3, 1, 3, 2, 1, 2,
857 0, 1, 4, 1, 3, 1, 3, 1, 3, 3,
858 2, 1, 3, 1, 3, 1, 3, 4, 1, 1,
859 4, 3, 3, 6, 6, 1, 3, 1, 3, 3,
860 3, 3, 1, 3, 1, 1, 1, 1, 0, 1,
861 1, 3, 3, 2, 3, 1, 1, 3, 2, 1,
862 1, 5, 0, 1, 1, 3, 2, 4, 3, 3,
863 3, 3, 3, 0, 1, 0, 6, 1, 2, 1,
864 1, 1, 3, 1, 3, 3, 3, 0, 2, 1,
865 4, 4, 4, 6, 6, 1, 4, 3, 1, 3,
866 3, 3, 1, 3, 1, 3, 1, 1, 1, 1,
867 3, 3, 1, 4, 1, 1, 3, 0, 3, 1,
868 1, 1, 1, 1, 1, 1, 1, 3, 1, 1,
869 1, 1, 2, 1, 1, 1, 1, 2, 2, 1,
870 1, 2, 2, 1, 1, 1, 1, 1, 2, 1,
871 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
872 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
873 0, 1, 1, 4, 3, 4, 1, 1, 3, 5,
874 1, 3, 3, 3, 3, 4, 3, 1, 1, 3,
875 3, 3, 3, 1, 1, 0, 5, 1, 2, 2,
876 3, 1, 1, 1, 1, 1, 1, 1, 1, 3,
877 5, 1, 3, 1, 3, 0, 1, 1, 1, 1,
878 1, 1, 3, 4, 1, 3, 2, 3, 1, 3,
879 0, 1, 1, 2, 2, 3, 1, 3, 1, 4,
880 4, 1, 1, 1, 1, 0, 1, 2, 4, 0,
881 1, 1, 1, 0, 1, 1, 1, 1, 1, 0,
882 1, 1
883};
884
885/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
886 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
887 means the default is an error. */
888static const unsigned short yydefact[] =
889{
890 0, 286, 287, 0, 2, 3, 6, 1, 4, 0,
891 0, 7, 291, 14, 9, 0, 10, 12, 15, 8,
892 11, 0, 0, 0, 0, 0, 0, 0, 16, 17,
893 0, 23, 21, 19, 22, 20, 0, 18, 13, 24,
894 181, 0, 0, 182, 183, 184, 0, 185, 186, 194,
895 187, 188, 189, 190, 191, 192, 193, 0, 25, 26,
896 28, 29, 32, 30, 31, 35, 0, 0, 33, 0,
897 50, 0, 51, 53, 55, 37, 0, 38, 0, 43,
898 45, 47, 5, 27, 275, 128, 288, 0, 163, 0,
899 0, 177, 170, 174, 176, 164, 0, 0, 165, 169,
900 173, 0, 0, 59, 179, 166, 58, 175, 132, 0,
901 34, 49, 48, 0, 0, 36, 39, 0, 0, 0,
902 0, 279, 62, 61, 117, 276, 283, 0, 178, 172,
903 171, 168, 167, 0, 65, 0, 166, 67, 0, 275,
904 0, 180, 0, 0, 52, 54, 40, 44, 46, 0,
905 281, 282, 280, 0, 0, 200, 285, 284, 277, 129,
906 131, 0, 0, 0, 0, 0, 57, 152, 158, 153,
907 273, 159, 160, 274, 150, 151, 77, 0, 72, 74,
908 75, 154, 155, 76, 272, 264, 0, 266, 271, 268,
909 137, 138, 133, 134, 136, 130, 149, 147, 143, 144,
910 145, 0, 156, 41, 42, 275, 275, 0, 94, 0,
911 125, 0, 0, 200, 200, 119, 118, 0, 0, 116,
912 201, 202, 275, 66, 71, 70, 69, 68, 0, 0,
913 233, 232, 0, 231, 234, 0, 206, 0, 0, 236,
914 0, 207, 210, 0, 217, 218, 224, 223, 250, 251,
915 235, 238, 237, 60, 275, 265, 0, 0, 0, 0,
916 0, 0, 142, 139, 0, 262, 260, 260, 260, 96,
917 261, 92, 260, 260, 103, 0, 278, 0, 275, 0,
918 275, 0, 275, 0, 0, 0, 0, 64, 63, 0,
919 0, 227, 0, 0, 0, 0, 0, 0, 56, 197,
920 198, 195, 196, 0, 0, 0, 199, 0, 0, 0,
921 0, 73, 267, 0, 0, 156, 135, 161, 148, 157,
922 146, 263, 101, 0, 100, 102, 93, 260, 98, 99,
923 0, 91, 104, 95, 0, 113, 0, 86, 89, 90,
924 275, 127, 0, 0, 79, 80, 85, 260, 275, 289,
925 0, 289, 0, 204, 0, 211, 225, 228, 229, 222,
926 220, 239, 0, 252, 216, 208, 212, 213, 214, 0,
927 221, 219, 0, 0, 254, 270, 269, 162, 140, 141,
928 97, 0, 126, 0, 120, 275, 88, 275, 121, 275,
929 83, 260, 275, 290, 122, 275, 203, 205, 0, 230,
930 243, 0, 241, 200, 0, 215, 0, 256, 258, 253,
931 0, 105, 114, 115, 87, 84, 81, 82, 117, 117,
932 226, 240, 0, 245, 209, 257, 0, 255, 0, 123,
933 124, 242, 248, 249, 247, 244, 246, 259, 109, 110,
934 0, 0, 107, 111, 0, 106, 108, 112
935};
936
937/* YYDEFGOTO[NTERM-NUM]. */
938static const short yydefgoto[] =
939{
940 -1, 3, 4, 5, 10, 11, 15, 16, 27, 28,
941 29, 57, 58, 59, 110, 60, 76, 204, 77, 78,
942 79, 61, 71, 72, 176, 62, 102, 63, 133, 134,
943 177, 178, 343, 344, 345, 336, 337, 122, 327, 207,
944 208, 331, 332, 428, 441, 442, 346, 347, 154, 155,
945 216, 103, 192, 193, 443, 267, 268, 64, 198, 259,
946 199, 200, 239, 318, 104, 105, 106, 107, 304, 305,
947 307, 219, 220, 221, 240, 241, 242, 398, 293, 243,
948 244, 245, 246, 401, 402, 435, 436, 247, 248, 249,
949 373, 374, 407, 269, 270, 141, 186, 187, 250, 124,
950 125, 126, 153, 158, 251, 108, 392, 252
951};
952
953/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
954 STATE-NUM. */
955#define YYPACT_NINF -403
956static const short yypact[] =
957{
958 133, -403, -403, 18, 133, -403, -50, -403, -403, 50,
959 -14, -403, -403, -403, -403, 76, -403, -45, 165, -403,
960 -403, 62, 38, 69, 89, 81, 97, 184, 165, -403,
961 116, -403, -403, -403, -403, -403, 172, -403, -403, 511,
962 -403, 216, 61, -403, -403, -403, 208, -403, -403, -403,
963 -403, -403, -403, -403, -403, -403, -403, 229, 511, -403,
964 -403, -403, -403, -403, -403, -403, 341, 664, -403, 132,
965 -403, 173, -403, 180, -403, -403, 32, -403, -25, -403,
966 182, -403, -403, -403, -11, 174, -403, 222, -403, 232,
967 248, -403, -403, -403, -403, -403, 271, 252, -403, -403,
968 -403, 740, 330, 234, -403, 236, -403, -403, 237, 336,
969 -403, -403, -403, 200, 241, -403, -403, 133, 200, 249,
970 257, -1, -403, -403, -403, -403, 28, 200, -403, -403,
971 -403, -403, -403, 67, -403, 253, -403, 259, 263, 104,
972 70, -403, 331, 192, -403, -403, -50, -403, -403, 289,
973 -403, -403, -403, 365, 588, -58, -403, -403, -403, -403,
974 -403, 376, 740, 200, 200, 225, -403, -403, -403, -403,
975 -403, -403, -403, -403, -403, -403, -403, 78, -403, -403,
976 -403, -403, -403, -403, -403, -403, 108, -403, -403, 273,
977 -403, -403, 266, -403, -403, -403, -403, -403, -403, -403,
978 -403, 267, 274, -403, -403, 154, 74, 141, -403, 275,
979 347, 281, 324, 135, 179, -403, -403, 291, 225, -403,
980 -403, 292, -11, -403, -403, -403, -403, -403, 298, 377,
981 -403, -403, -24, -403, -403, 302, -403, 133, 225, -403,
982 297, 226, 307, 305, -24, -403, -403, -403, 308, -403,
983 -403, -403, -403, -403, 104, -403, 87, 215, 335, 411,
984 409, 192, -403, -403, 192, -403, 25, 91, 25, -403,
985 -403, 328, 91, 25, 325, 289, -403, 394, 60, 345,
986 59, 353, 59, 354, 225, 317, 225, -403, -403, 453,
987 322, 313, 327, 301, 332, 326, 334, 333, -403, -403,
988 -403, -403, -403, 338, 453, 453, -403, 453, 225, 309,
989 315, -403, -403, 346, 348, -403, -403, -403, 435, -403,
990 -403, -403, -403, 361, -403, -403, -403, 25, -403, -403,
991 359, -403, -403, -403, 409, 343, 186, -403, -403, -403,
992 355, -403, 374, 349, 358, -403, -403, 25, 355, 409,
993 363, 409, 362, -403, 364, -403, -403, -403, 360, -403,
994 -403, 292, 39, -403, -403, 367, -403, -403, -403, 366,
995 -403, -403, 23, 188, -403, -403, -403, -403, -403, -403,
996 -403, 370, -403, 215, -403, 60, -403, 355, -403, 54,
997 -403, 25, 355, -403, -403, 355, -403, -403, 411, -403,
998 -403, 189, -403, -58, 440, -403, 409, 356, -403, -403,
999 315, -403, -403, -403, -403, -403, -403, -403, -403, -403,
1000 435, -403, 39, 177, 4, 356, 409, -403, 11, -403,
1001 -403, -403, -403, -403, -403, -403, -403, -403, -403, -403,
1002 11, 36, -403, -403, 27, -403, -403, -403
1003};
1004
1005/* YYPGOTO[NTERM-NUM]. */
1006static const short yypgoto[] =
1007{
1008 -403, -403, -403, 476, -403, 337, -403, 466, -403, -403,
1009 454, -403, -403, 426, -403, -403, -403, -403, 410, -403,
1010 369, -403, -403, 372, 357, -403, -53, -403, -403, 329,
1011 -403, 238, 211, -403, 105, -403, 111, 276, -403, -403,
1012 224, -403, -403, -403, 57, -402, -258, -83, -403, -57,
1013 -403, 221, -403, 243, -137, 300, 303, -403, 0, -403,
1014 -130, -250, -135, 106, -88, 1, -403, -3, -403, -403,
1015 -403, -211, -403, 213, -5, 107, -12, -403, 264, -403,
1016 -243, -403, -403, -403, 88, -403, -403, -403, -403, -403,
1017 -403, 102, 109, -256, -403, -403, -403, 258, -105, -125,
1018 -403, -403, -403, -403, 19, -403, 162, -9
1019};
1020
1021/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
1022 positive, shift that token. If negative, reduce the rule which
1023 number is the opposite. If zero, do what YYDEFACT says.
1024 If YYTABLE_NINF, parse error. */
1025#define YYTABLE_NINF -261
1026static const short yytable[] =
1027{
1028 17, 123, 281, 283, 181, 194, 17, 313, 181, 180,
1029 322, 324, 325, 135, 109, 438, 328, 329, 7, 6,
1030 338, 120, 150, 6, 18, 117, 217, 190, 191, 439,
1031 67, 438, 12, 74, 182, 188, 65, 81, 182, 446,
1032 438, 12, 446, 190, 191, 439, 1, 2, 12, 67,
1033 360, 218, 190, 191, 439, 65, 179, 9, 66, 12,
1034 13, 73, 264, 12, 21, 80, 371, 81, 12, 12,
1035 12, 380, 30, 156, 135, 1, 2, 66, 151, 12,
1036 170, 291, 69, 173, 157, 12, 13, 118, 342, 262,
1037 263, 390, 152, 342, 292, 80, 12, 170, 265, 31,
1038 173, 215, 136, 121, 74, 299, 300, 301, 302, 81,
1039 167, 168, 169, 12, 170, 171, 172, 173, 160, 181,
1040 137, 194, 266, 271, 180, 440, 181, 338, 264, 181,
1041 183, 189, 73, 412, 202, 417, 146, 80, 34, 288,
1042 406, 440, 447, 115, 445, 400, 159, 1, 2, 182,
1043 440, 188, 314, 174, 225, 227, 182, 32, 14, 182,
1044 335, 195, 201, 136, 265, 335, 335, -78, 121, 262,
1045 263, 179, 70, 121, 121, 161, 184, 33, 185, 162,
1046 22, 137, 224, 226, 19, 35, 253, 36, 121, 23,
1047 254, 264, 423, 184, 175, 339, 432, 39, 167, 168,
1048 169, 12, 170, 171, 172, 173, 1, 2, 323, 12,
1049 24, 165, 25, 285, 1, 2, 255, 12, 121, 217,
1050 256, 26, 1, 2, 12, 170, 38, 265, 173, 1,
1051 2, 68, 168, 297, 12, 170, 171, 172, 173, 1,
1052 2, 174, 280, 111, 218, 183, 228, 189, 315, 274,
1053 433, 319, 202, 275, 434, 202, 296, 386, 75, 196,
1054 229, 320, -260, 217, 321, 391, -260, 418, 121, 340,
1055 419, 348, 82, 348, 230, 231, 201, 355, 413, 352,
1056 201, 354, 175, 201, 112, 113, 282, 114, 218, 119,
1057 232, 127, 366, 367, 384, 368, 409, 421, 385, 197,
1058 410, 422, 339, 369, 415, 205, 206, 128, 168, 233,
1059 12, 170, 171, 172, 173, 234, 168, 129, 12, 170,
1060 171, 172, 173, 130, 235, 382, 131, 299, 300, 301,
1061 302, 236, 237, 138, 238, 294, 295, 132, 303, 143,
1062 393, 139, 393, 140, 84, 1, 2, 190, 191, 145,
1063 230, 190, 191, 403, 142, 85, 86, 148, 230, 85,
1064 86, 429, 430, 408, 149, 359, 163, 87, 40, 88,
1065 165, 89, 164, 370, 315, 209, 340, 378, 379, 222,
1066 348, 90, 257, 258, 260, 91, 277, 261, 278, 92,
1067 276, 234, 93, 43, 44, 45, 279, 408, 289, 234,
1068 284, 286, 201, 94, 47, 298, 290, 306, 95, 48,
1069 96, 49, 97, 403, 308, 310, 317, 437, 12, 50,
1070 326, 98, 99, 334, 330, 349, 351, 353, 51, 356,
1071 52, 357, 358, 362, 372, 53, 100, 54, 55, 56,
1072 377, 218, 363, 364, 365, 381, 387, 168, 101, 12,
1073 170, 171, 172, 173, 1, 2, 375, 388, 376, 383,
1074 168, 228, 12, 170, 171, 172, 173, 1, 2, 121,
1075 389, 394, 396, 426, 397, 229, 405, 411, 399, 404,
1076 8, 20, 37, 203, 83, 144, 116, 147, 229, 230,
1077 231, 223, 311, 350, 416, 166, 414, 444, 287, 333,
1078 341, 316, 230, 231, 420, 232, 272, 361, 309, 273,
1079 431, 424, 427, 395, 312, 425, 0, 0, 232, 0,
1080 12, 0, 0, 0, 233, 1, 2, 0, 0, 0,
1081 234, 0, 0, 0, 0, 0, 0, 233, 40, 235,
1082 0, 0, 0, 234, 0, 0, 0, 237, 0, 238,
1083 0, 0, 235, 41, 0, 0, 0, 42, 0, 0,
1084 237, 0, 238, 43, 44, 45, 0, 0, 0, 46,
1085 0, 0, 0, 0, 47, 0, 0, 0, 0, 48,
1086 0, 49, 0, 0, 0, 0, 0, 0, 0, 50,
1087 0, 0, 0, 0, 0, 0, 0, 0, 51, 0,
1088 52, 0, 85, 86, 0, 53, 0, 54, 55, 56,
1089 210, 0, 0, 0, 87, 40, 88, 0, 89, 211,
1090 0, 0, 0, 0, 0, 0, 0, 0, 90, 0,
1091 0, 0, 91, 0, 0, 0, 92, 0, 0, 93,
1092 43, 44, 45, 0, 0, 0, 0, 0, 212, 0,
1093 94, 47, 0, 0, 0, 95, 48, 96, 49, 97,
1094 0, 0, 0, 0, 0, 0, 50, 0, 98, 99,
1095 213, 214, 0, 0, 0, 51, 0, 52, 85, 86,
1096 0, 0, 53, 100, 54, 55, 56, 0, 0, 0,
1097 87, 40, 88, 0, 89, 0, 0, 0, 0, 0,
1098 0, 0, 0, 0, 90, 0, 0, 0, 91, 0,
1099 0, 0, 92, 0, 0, 93, 43, 44, 45, 0,
1100 0, 0, 0, 0, 0, 0, 94, 47, 0, 0,
1101 0, 95, 48, 96, 49, 97, 0, 0, 0, 0,
1102 0, 0, 50, 0, 98, 99, 0, 0, 0, 0,
1103 0, 51, 0, 52, 1, 2, 0, 0, 53, 100,
1104 54, 55, 56, 0, 0, 0, 87, 40, 88, 0,
1105 89, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1106 90, 0, 0, 0, 91, 0, 0, 0, 92, 0,
1107 0, 93, 43, 44, 45, 0, 0, 0, 0, 0,
1108 0, 0, 94, 47, 0, 0, 0, 95, 48, 96,
1109 49, 97, 0, 0, 0, 0, 0, 0, 50, 0,
1110 98, 99, 0, 0, 0, 0, 0, 51, 0, 52,
1111 0, 0, 0, 0, 53, 100, 54, 55, 56
1112};
1113
1114static const short yycheck[] =
1115{
1116 9, 84, 213, 214, 139, 142, 15, 257, 143, 139,
1117 266, 267, 268, 101, 67, 4, 272, 273, 0, 0,
1118 278, 32, 23, 4, 38, 50, 84, 16, 17, 18,
1119 39, 4, 9, 42, 139, 140, 39, 46, 143, 441,
1120 4, 9, 444, 16, 17, 18, 14, 15, 9, 58,
1121 293, 109, 16, 17, 18, 58, 139, 107, 39, 9,
1122 10, 42, 37, 9, 109, 46, 309, 76, 9, 9,
1123 9, 327, 10, 45, 162, 14, 15, 58, 79, 9,
1124 10, 105, 21, 13, 56, 9, 10, 112, 34, 15,
1125 16, 347, 93, 34, 118, 76, 9, 10, 73, 61,
1126 13, 154, 101, 114, 113, 101, 102, 103, 104, 118,
1127 6, 7, 8, 9, 10, 11, 12, 13, 127, 254,
1128 101, 258, 205, 206, 254, 114, 261, 385, 37, 264,
1129 139, 140, 113, 383, 143, 391, 117, 118, 57, 222,
1130 117, 114, 115, 111, 108, 106, 127, 14, 15, 254,
1131 114, 256, 257, 49, 163, 164, 261, 88, 108, 264,
1132 106, 142, 143, 162, 73, 106, 106, 108, 114, 15,
1133 16, 254, 111, 114, 114, 108, 106, 88, 108, 112,
1134 15, 162, 163, 164, 108, 88, 108, 3, 114, 24,
1135 112, 37, 403, 106, 90, 278, 19, 25, 6, 7,
1136 8, 9, 10, 11, 12, 13, 14, 15, 117, 9,
1137 45, 107, 47, 218, 14, 15, 108, 9, 114, 84,
1138 112, 56, 14, 15, 9, 10, 110, 73, 13, 14,
1139 15, 15, 7, 238, 9, 10, 11, 12, 13, 14,
1140 15, 49, 107, 111, 109, 254, 21, 256, 257, 108,
1141 73, 260, 261, 112, 77, 264, 237, 340, 50, 67,
1142 35, 261, 108, 84, 264, 348, 112, 392, 114, 278,
1143 395, 280, 43, 282, 49, 50, 257, 289, 383, 284,
1144 261, 286, 90, 264, 111, 112, 107, 107, 109, 107,
1145 65, 117, 304, 305, 108, 307, 108, 108, 112, 107,
1146 112, 112, 385, 308, 387, 16, 17, 85, 7, 84,
1147 9, 10, 11, 12, 13, 90, 7, 85, 9, 10,
1148 11, 12, 13, 75, 99, 334, 55, 101, 102, 103,
1149 104, 106, 107, 3, 109, 33, 34, 85, 112, 3,
1150 349, 107, 351, 107, 3, 14, 15, 16, 17, 108,
1151 49, 16, 17, 362, 117, 14, 15, 108, 49, 14,
1152 15, 418, 419, 372, 107, 64, 113, 26, 27, 28,
1153 107, 30, 113, 64, 383, 10, 385, 16, 17, 3,
1154 389, 40, 109, 117, 117, 44, 39, 113, 107, 48,
1155 115, 90, 51, 52, 53, 54, 72, 406, 100, 90,
1156 109, 109, 383, 62, 63, 108, 29, 100, 67, 68,
1157 69, 70, 71, 422, 109, 107, 5, 426, 9, 78,
1158 92, 80, 81, 29, 99, 72, 72, 110, 87, 107,
1159 89, 118, 105, 107, 119, 94, 95, 96, 97, 98,
1160 5, 109, 108, 110, 106, 86, 72, 7, 107, 9,
1161 10, 11, 12, 13, 14, 15, 110, 108, 110, 116,
1162 7, 21, 9, 10, 11, 12, 13, 14, 15, 114,
1163 112, 108, 110, 117, 110, 35, 110, 107, 118, 112,
1164 4, 15, 28, 146, 58, 113, 76, 118, 35, 49,
1165 50, 162, 254, 282, 389, 138, 385, 440, 222, 275,
1166 279, 258, 49, 50, 398, 65, 206, 294, 244, 206,
1167 422, 404, 410, 351, 256, 406, -1, -1, 65, -1,
1168 9, -1, -1, -1, 84, 14, 15, -1, -1, -1,
1169 90, -1, -1, -1, -1, -1, -1, 84, 27, 99,
1170 -1, -1, -1, 90, -1, -1, -1, 107, -1, 109,
1171 -1, -1, 99, 42, -1, -1, -1, 46, -1, -1,
1172 107, -1, 109, 52, 53, 54, -1, -1, -1, 58,
1173 -1, -1, -1, -1, 63, -1, -1, -1, -1, 68,
1174 -1, 70, -1, -1, -1, -1, -1, -1, -1, 78,
1175 -1, -1, -1, -1, -1, -1, -1, -1, 87, -1,
1176 89, -1, 14, 15, -1, 94, -1, 96, 97, 98,
1177 22, -1, -1, -1, 26, 27, 28, -1, 30, 31,
1178 -1, -1, -1, -1, -1, -1, -1, -1, 40, -1,
1179 -1, -1, 44, -1, -1, -1, 48, -1, -1, 51,
1180 52, 53, 54, -1, -1, -1, -1, -1, 60, -1,
1181 62, 63, -1, -1, -1, 67, 68, 69, 70, 71,
1182 -1, -1, -1, -1, -1, -1, 78, -1, 80, 81,
1183 82, 83, -1, -1, -1, 87, -1, 89, 14, 15,
1184 -1, -1, 94, 95, 96, 97, 98, -1, -1, -1,
1185 26, 27, 28, -1, 30, -1, -1, -1, -1, -1,
1186 -1, -1, -1, -1, 40, -1, -1, -1, 44, -1,
1187 -1, -1, 48, -1, -1, 51, 52, 53, 54, -1,
1188 -1, -1, -1, -1, -1, -1, 62, 63, -1, -1,
1189 -1, 67, 68, 69, 70, 71, -1, -1, -1, -1,
1190 -1, -1, 78, -1, 80, 81, -1, -1, -1, -1,
1191 -1, 87, -1, 89, 14, 15, -1, -1, 94, 95,
1192 96, 97, 98, -1, -1, -1, 26, 27, 28, -1,
1193 30, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1194 40, -1, -1, -1, 44, -1, -1, -1, 48, -1,
1195 -1, 51, 52, 53, 54, -1, -1, -1, -1, -1,
1196 -1, -1, 62, 63, -1, -1, -1, 67, 68, 69,
1197 70, 71, -1, -1, -1, -1, -1, -1, 78, -1,
1198 80, 81, -1, -1, -1, -1, -1, 87, -1, 89,
1199 -1, -1, -1, -1, 94, 95, 96, 97, 98
1200};
1201
1202/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1203 symbol of state STATE-NUM. */
1204static const unsigned char yystos[] =
1205{
1206 0, 14, 15, 121, 122, 123, 224, 0, 123, 107,
1207 124, 125, 9, 10, 108, 126, 127, 227, 38, 108,
1208 127, 109, 15, 24, 45, 47, 56, 128, 129, 130,
1209 10, 61, 88, 88, 57, 88, 3, 130, 110, 25,
1210 27, 42, 46, 52, 53, 54, 58, 63, 68, 70,
1211 78, 87, 89, 94, 96, 97, 98, 131, 132, 133,
1212 135, 141, 145, 147, 177, 187, 224, 227, 15, 21,
1213 111, 142, 143, 224, 227, 50, 136, 138, 139, 140,
1214 224, 227, 43, 133, 3, 14, 15, 26, 28, 30,
1215 40, 44, 48, 51, 62, 67, 69, 71, 80, 81,
1216 95, 107, 146, 171, 184, 185, 186, 187, 225, 146,
1217 134, 111, 111, 112, 107, 111, 138, 50, 112, 107,
1218 32, 114, 157, 167, 219, 220, 221, 117, 85, 85,
1219 75, 55, 85, 148, 149, 184, 185, 224, 3, 107,
1220 107, 215, 117, 3, 143, 108, 224, 140, 108, 107,
1221 23, 79, 93, 222, 168, 169, 45, 56, 223, 224,
1222 227, 108, 112, 113, 113, 107, 144, 6, 7, 8,
1223 10, 11, 12, 13, 49, 90, 144, 150, 151, 167,
1224 180, 182, 218, 227, 106, 108, 216, 217, 218, 227,
1225 16, 17, 172, 173, 174, 224, 67, 107, 178, 180,
1226 181, 224, 227, 125, 137, 16, 17, 159, 160, 10,
1227 22, 31, 60, 82, 83, 146, 170, 84, 109, 191,
1228 192, 193, 3, 149, 224, 227, 224, 227, 21, 35,
1229 49, 50, 65, 84, 90, 99, 106, 107, 109, 182,
1230 194, 195, 196, 199, 200, 201, 202, 207, 208, 209,
1231 218, 224, 227, 108, 112, 108, 112, 109, 117, 179,
1232 117, 113, 15, 16, 37, 73, 167, 175, 176, 213,
1233 214, 167, 175, 176, 108, 112, 115, 39, 107, 72,
1234 107, 191, 107, 191, 109, 194, 109, 157, 167, 100,
1235 29, 105, 118, 198, 33, 34, 224, 194, 108, 101,
1236 102, 103, 104, 112, 188, 189, 100, 190, 109, 198,
1237 107, 151, 217, 181, 218, 227, 173, 5, 183, 227,
1238 178, 178, 213, 117, 213, 213, 92, 158, 213, 213,
1239 99, 161, 162, 160, 29, 106, 155, 156, 166, 167,
1240 227, 171, 34, 152, 153, 154, 166, 167, 227, 72,
1241 152, 72, 194, 110, 194, 196, 107, 118, 105, 64,
1242 200, 193, 107, 108, 110, 106, 196, 196, 196, 194,
1243 64, 200, 119, 210, 211, 110, 110, 5, 16, 17,
1244 213, 86, 227, 116, 108, 112, 167, 72, 108, 112,
1245 213, 167, 226, 227, 108, 226, 110, 110, 197, 118,
1246 106, 203, 204, 227, 112, 110, 117, 212, 227, 108,
1247 112, 107, 181, 218, 156, 167, 154, 213, 219, 219,
1248 183, 108, 112, 191, 195, 212, 117, 211, 163, 169,
1249 169, 204, 19, 73, 77, 205, 206, 227, 4, 18,
1250 114, 164, 165, 174, 164, 108, 165, 115
1251};
1252
1253#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1254# define YYSIZE_T __SIZE_TYPE__
1255#endif
1256#if ! defined (YYSIZE_T) && defined (size_t)
1257# define YYSIZE_T size_t
1258#endif
1259#if ! defined (YYSIZE_T)
1260# if defined (__STDC__) || defined (__cplusplus)
1261# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1262# define YYSIZE_T size_t
1263# endif
1264#endif
1265#if ! defined (YYSIZE_T)
1266# define YYSIZE_T unsigned int
1267#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001268
1269#define yyerrok (yyerrstatus = 0)
1270#define yyclearin (yychar = YYEMPTY)
Lev Walkina00d6b32006-03-21 03:40:38 +00001271#define YYEMPTY -2
Lev Walkinf15320b2004-06-03 03:38:44 +00001272#define YYEOF 0
Lev Walkin418298d2006-07-13 08:24:20 +00001273
Lev Walkinf15320b2004-06-03 03:38:44 +00001274#define YYACCEPT goto yyacceptlab
Lev Walkin418298d2006-07-13 08:24:20 +00001275#define YYABORT goto yyabortlab
Lev Walkina00d6b32006-03-21 03:40:38 +00001276#define YYERROR goto yyerrlab1
Lev Walkin418298d2006-07-13 08:24:20 +00001277
1278/* Like YYERROR except do call yyerror. This remains here temporarily
1279 to ease the transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +00001280 Once GCC version 2 has supplanted version 1, this can go. */
Lev Walkin418298d2006-07-13 08:24:20 +00001281
Lev Walkinf15320b2004-06-03 03:38:44 +00001282#define YYFAIL goto yyerrlab
Lev Walkin418298d2006-07-13 08:24:20 +00001283
Lev Walkinf15320b2004-06-03 03:38:44 +00001284#define YYRECOVERING() (!!yyerrstatus)
Lev Walkin418298d2006-07-13 08:24:20 +00001285
1286#define YYBACKUP(Token, Value) \
Lev Walkinf15320b2004-06-03 03:38:44 +00001287do \
1288 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin418298d2006-07-13 08:24:20 +00001289 { \
1290 yychar = (Token); \
1291 yylval = (Value); \
Lev Walkina00d6b32006-03-21 03:40:38 +00001292 yychar1 = YYTRANSLATE (yychar); \
Lev Walkinf15320b2004-06-03 03:38:44 +00001293 YYPOPSTACK; \
1294 goto yybackup; \
1295 } \
1296 else \
Lev Walkin418298d2006-07-13 08:24:20 +00001297 { \
1298 yyerror ("syntax error: cannot back up"); \
1299 YYERROR; \
1300 } \
Lev Walkinf15320b2004-06-03 03:38:44 +00001301while (0)
1302
1303#define YYTERROR 1
1304#define YYERRCODE 256
1305
Lev Walkin418298d2006-07-13 08:24:20 +00001306/* YYLLOC_DEFAULT -- Compute the default location (before the actions
1307 are run). */
1308
1309#ifndef YYLLOC_DEFAULT
1310# define YYLLOC_DEFAULT(Current, Rhs, N) \
1311 Current.first_line = Rhs[1].first_line; \
1312 Current.first_column = Rhs[1].first_column; \
1313 Current.last_line = Rhs[N].last_line; \
1314 Current.last_column = Rhs[N].last_column;
Lev Walkinf15320b2004-06-03 03:38:44 +00001315#endif
1316
Lev Walkin418298d2006-07-13 08:24:20 +00001317/* YYLEX -- calling `yylex' with the right arguments. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001318
Lev Walkin418298d2006-07-13 08:24:20 +00001319#define YYLEX yylex ()
Lev Walkinfb872bd2006-03-18 06:53:11 +00001320
Lev Walkin418298d2006-07-13 08:24:20 +00001321/* Enable debugging if requested. */
1322#if YYDEBUG
Lev Walkinfb872bd2006-03-18 06:53:11 +00001323
Lev Walkin418298d2006-07-13 08:24:20 +00001324# ifndef YYFPRINTF
1325# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1326# define YYFPRINTF fprintf
1327# endif
Lev Walkinfb872bd2006-03-18 06:53:11 +00001328
Lev Walkin418298d2006-07-13 08:24:20 +00001329# define YYDPRINTF(Args) \
1330do { \
1331 if (yydebug) \
1332 YYFPRINTF Args; \
1333} while (0)
1334# define YYDSYMPRINT(Args) \
1335do { \
1336 if (yydebug) \
1337 yysymprint Args; \
1338} while (0)
1339/* Nonzero means print parse trace. It is left uninitialized so that
1340 multiple parsers can coexist. */
1341int yydebug;
1342#else /* !YYDEBUG */
1343# define YYDPRINTF(Args)
1344# define YYDSYMPRINT(Args)
1345#endif /* !YYDEBUG */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001346
Lev Walkin418298d2006-07-13 08:24:20 +00001347/* YYINITDEPTH -- initial size of the parser's stacks. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001348#ifndef YYINITDEPTH
Lev Walkin418298d2006-07-13 08:24:20 +00001349# define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +00001350#endif
1351
Lev Walkin418298d2006-07-13 08:24:20 +00001352/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1353 if the built-in stack extension method is used).
1354
1355 Do not make this value too large; the results are undefined if
1356 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
1357 evaluated with infinite-precision integer arithmetic. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001358
Lev Walkina00d6b32006-03-21 03:40:38 +00001359#if YYMAXDEPTH == 0
Lev Walkin418298d2006-07-13 08:24:20 +00001360# undef YYMAXDEPTH
Lev Walkina00d6b32006-03-21 03:40:38 +00001361#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001362
1363#ifndef YYMAXDEPTH
Lev Walkin418298d2006-07-13 08:24:20 +00001364# define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +00001365#endif
Lev Walkin418298d2006-07-13 08:24:20 +00001366
Lev Walkinf15320b2004-06-03 03:38:44 +00001367
Lev Walkinf15320b2004-06-03 03:38:44 +00001368
Lev Walkin418298d2006-07-13 08:24:20 +00001369#if YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00001370
Lev Walkin418298d2006-07-13 08:24:20 +00001371# ifndef yystrlen
1372# if defined (__GLIBC__) && defined (_STRING_H)
1373# define yystrlen strlen
1374# else
1375/* Return the length of YYSTR. */
1376static YYSIZE_T
1377# if defined (__STDC__) || defined (__cplusplus)
1378yystrlen (const char *yystr)
1379# else
1380yystrlen (yystr)
1381 const char *yystr;
1382# endif
Lev Walkina00d6b32006-03-21 03:40:38 +00001383{
Lev Walkin418298d2006-07-13 08:24:20 +00001384 register const char *yys = yystr;
Lev Walkina00d6b32006-03-21 03:40:38 +00001385
Lev Walkin418298d2006-07-13 08:24:20 +00001386 while (*yys++ != '\0')
1387 continue;
1388
1389 return yys - yystr - 1;
1390}
1391# endif
1392# endif
1393
1394# ifndef yystpcpy
1395# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1396# define yystpcpy stpcpy
1397# else
1398/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1399 YYDEST. */
1400static char *
1401# if defined (__STDC__) || defined (__cplusplus)
1402yystpcpy (char *yydest, const char *yysrc)
1403# else
1404yystpcpy (yydest, yysrc)
1405 char *yydest;
1406 const char *yysrc;
1407# endif
1408{
1409 register char *yyd = yydest;
1410 register const char *yys = yysrc;
1411
1412 while ((*yyd++ = *yys++) != '\0')
1413 continue;
1414
1415 return yyd - 1;
1416}
1417# endif
1418# endif
1419
1420#endif /* !YYERROR_VERBOSE */
1421
1422
1423
1424#if YYDEBUG
1425/*-----------------------------.
1426| Print this symbol on YYOUT. |
1427`-----------------------------*/
1428
1429static void
1430#if defined (__STDC__) || defined (__cplusplus)
1431yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue)
1432#else
1433yysymprint (yyout, yytype, yyvalue)
1434 FILE* yyout;
1435 int yytype;
1436 YYSTYPE yyvalue;
1437#endif
1438{
1439 /* Pacify ``unused variable'' warnings. */
1440 (void) yyvalue;
1441
1442 if (yytype < YYNTOKENS)
1443 {
1444 YYFPRINTF (yyout, "token %s (", yytname[yytype]);
1445# ifdef YYPRINT
1446 YYPRINT (yyout, yytoknum[yytype], yyvalue);
1447# endif
1448 }
1449 else
1450 YYFPRINTF (yyout, "nterm %s (", yytname[yytype]);
1451
1452 switch (yytype)
1453 {
1454 default:
1455 break;
1456 }
1457 YYFPRINTF (yyout, ")");
1458}
1459#endif /* YYDEBUG. */
1460
1461
1462/*-----------------------------------------------.
1463| Release the memory associated to this symbol. |
1464`-----------------------------------------------*/
1465
1466static void
1467#if defined (__STDC__) || defined (__cplusplus)
1468yydestruct (int yytype, YYSTYPE yyvalue)
1469#else
1470yydestruct (yytype, yyvalue)
1471 int yytype;
1472 YYSTYPE yyvalue;
1473#endif
1474{
1475 /* Pacify ``unused variable'' warnings. */
1476 (void) yyvalue;
1477
1478 switch (yytype)
1479 {
1480 default:
1481 break;
1482 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001483}
1484
Lev Walkinfb872bd2006-03-18 06:53:11 +00001485
1486
Lev Walkina00d6b32006-03-21 03:40:38 +00001487/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1488 into yyparse. The argument should have type void *.
1489 It should actually point to an object.
1490 Grammar actions can access the variable by casting it
1491 to the proper pointer type. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001492
1493#ifdef YYPARSE_PARAM
Lev Walkin418298d2006-07-13 08:24:20 +00001494# if defined (__STDC__) || defined (__cplusplus)
1495# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1496# define YYPARSE_PARAM_DECL
1497# else
1498# define YYPARSE_PARAM_ARG YYPARSE_PARAM
1499# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1500# endif
1501#else /* !YYPARSE_PARAM */
1502# define YYPARSE_PARAM_ARG
1503# define YYPARSE_PARAM_DECL
1504#endif /* !YYPARSE_PARAM */
Lev Walkina00d6b32006-03-21 03:40:38 +00001505
1506/* Prevent warning if -Wstrict-prototypes. */
1507#ifdef __GNUC__
Lev Walkin418298d2006-07-13 08:24:20 +00001508# ifdef YYPARSE_PARAM
Lev Walkina00d6b32006-03-21 03:40:38 +00001509int yyparse (void *);
Lev Walkin418298d2006-07-13 08:24:20 +00001510# else
Lev Walkinf15320b2004-06-03 03:38:44 +00001511int yyparse (void);
Lev Walkin418298d2006-07-13 08:24:20 +00001512# endif
Lev Walkinfb872bd2006-03-18 06:53:11 +00001513#endif
Lev Walkin418298d2006-07-13 08:24:20 +00001514
1515
1516/* The lookahead symbol. */
1517int yychar;
1518
1519/* The semantic value of the lookahead symbol. */
1520YYSTYPE yylval;
1521
1522/* Number of parse errors so far. */
1523int yynerrs;
1524
Lev Walkinfb872bd2006-03-18 06:53:11 +00001525
Lev Walkinfb872bd2006-03-18 06:53:11 +00001526int
Lev Walkin418298d2006-07-13 08:24:20 +00001527yyparse (YYPARSE_PARAM_ARG)
Lev Walkina00d6b32006-03-21 03:40:38 +00001528 YYPARSE_PARAM_DECL
Lev Walkinfb872bd2006-03-18 06:53:11 +00001529{
Lev Walkin418298d2006-07-13 08:24:20 +00001530
Lev Walkina00d6b32006-03-21 03:40:38 +00001531 register int yystate;
1532 register int yyn;
Lev Walkin418298d2006-07-13 08:24:20 +00001533 int yyresult;
1534 /* Number of tokens to shift before error messages enabled. */
1535 int yyerrstatus;
1536 /* Lookahead token as an internal (translated) token number. */
1537 int yychar1 = 0;
1538
1539 /* Three stacks and their tools:
1540 `yyss': related to states,
1541 `yyvs': related to semantic values,
1542 `yyls': related to locations.
1543
1544 Refer to the stacks thru separate pointers, to allow yyoverflow
1545 to reallocate them elsewhere. */
1546
1547 /* The state stack. */
1548 short yyssa[YYINITDEPTH];
1549 short *yyss = yyssa;
Lev Walkina00d6b32006-03-21 03:40:38 +00001550 register short *yyssp;
Lev Walkin418298d2006-07-13 08:24:20 +00001551
1552 /* The semantic value stack. */
1553 YYSTYPE yyvsa[YYINITDEPTH];
1554 YYSTYPE *yyvs = yyvsa;
Lev Walkina00d6b32006-03-21 03:40:38 +00001555 register YYSTYPE *yyvsp;
Lev Walkinfb872bd2006-03-18 06:53:11 +00001556
Lev Walkinfb872bd2006-03-18 06:53:11 +00001557
Lev Walkinfb872bd2006-03-18 06:53:11 +00001558
Lev Walkinf15320b2004-06-03 03:38:44 +00001559#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkinf15320b2004-06-03 03:38:44 +00001560
Lev Walkin418298d2006-07-13 08:24:20 +00001561 YYSIZE_T yystacksize = YYINITDEPTH;
Lev Walkinf15320b2004-06-03 03:38:44 +00001562
Lev Walkin418298d2006-07-13 08:24:20 +00001563 /* The variables used to return semantic value and location from the
1564 action routines. */
1565 YYSTYPE yyval;
Lev Walkinf15320b2004-06-03 03:38:44 +00001566
Lev Walkinf15320b2004-06-03 03:38:44 +00001567
Lev Walkin418298d2006-07-13 08:24:20 +00001568 /* When reducing, the number of symbols on the RHS of the reduced
1569 rule. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001570 int yylen;
1571
Lev Walkin418298d2006-07-13 08:24:20 +00001572 YYDPRINTF ((stderr, "Starting parse\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001573
1574 yystate = 0;
1575 yyerrstatus = 0;
1576 yynerrs = 0;
1577 yychar = YYEMPTY; /* Cause a token to be read. */
1578
1579 /* Initialize stack pointers.
1580 Waste one element of value and location stack
1581 so that they stay on the same level as the state stack.
1582 The wasted elements are never initialized. */
1583
Lev Walkin418298d2006-07-13 08:24:20 +00001584 yyssp = yyss;
Lev Walkinf15320b2004-06-03 03:38:44 +00001585 yyvsp = yyvs;
Lev Walkinf15320b2004-06-03 03:38:44 +00001586
Lev Walkin418298d2006-07-13 08:24:20 +00001587 goto yysetstate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001588
Lev Walkin418298d2006-07-13 08:24:20 +00001589/*------------------------------------------------------------.
1590| yynewstate -- Push a new state, which is found in yystate. |
1591`------------------------------------------------------------*/
1592 yynewstate:
1593 /* In all cases, when you get here, the value and location stacks
1594 have just been pushed. so pushing a state here evens the stacks.
1595 */
1596 yyssp++;
1597
1598 yysetstate:
1599 *yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001600
Lev Walkina00d6b32006-03-21 03:40:38 +00001601 if (yyssp >= yyss + yystacksize - 1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001602 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001603 /* Get the current used size of the three stacks, in elements. */
Lev Walkin418298d2006-07-13 08:24:20 +00001604 YYSIZE_T yysize = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001605
1606#ifdef yyoverflow
Lev Walkin418298d2006-07-13 08:24:20 +00001607 {
1608 /* Give user a chance to reallocate the stack. Use copies of
1609 these so that the &'s don't force the real ones into
1610 memory. */
1611 YYSTYPE *yyvs1 = yyvs;
1612 short *yyss1 = yyss;
Lev Walkinf15320b2004-06-03 03:38:44 +00001613
Lev Walkin418298d2006-07-13 08:24:20 +00001614
1615 /* Each stack pointer address is followed by the size of the
1616 data in use in that stack, in bytes. This used to be a
1617 conditional around just the two extra args, but that might
1618 be undefined if yyoverflow is a macro. */
1619 yyoverflow ("parser stack overflow",
1620 &yyss1, yysize * sizeof (*yyssp),
1621 &yyvs1, yysize * sizeof (*yyvsp),
1622
1623 &yystacksize);
1624
1625 yyss = yyss1;
1626 yyvs = yyvs1;
1627 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001628#else /* no yyoverflow */
Lev Walkin418298d2006-07-13 08:24:20 +00001629# ifndef YYSTACK_RELOCATE
1630 goto yyoverflowlab;
1631# else
Lev Walkinf15320b2004-06-03 03:38:44 +00001632 /* Extend the stack our own way. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001633 if (yystacksize >= YYMAXDEPTH)
Lev Walkin418298d2006-07-13 08:24:20 +00001634 goto yyoverflowlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001635 yystacksize *= 2;
Lev Walkina00d6b32006-03-21 03:40:38 +00001636 if (yystacksize > YYMAXDEPTH)
Lev Walkinf15320b2004-06-03 03:38:44 +00001637 yystacksize = YYMAXDEPTH;
Lev Walkin418298d2006-07-13 08:24:20 +00001638
1639 {
1640 short *yyss1 = yyss;
1641 union yyalloc *yyptr =
1642 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1643 if (! yyptr)
1644 goto yyoverflowlab;
1645 YYSTACK_RELOCATE (yyss);
1646 YYSTACK_RELOCATE (yyvs);
1647
1648# undef YYSTACK_RELOCATE
1649 if (yyss1 != yyssa)
1650 YYSTACK_FREE (yyss1);
1651 }
1652# endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001653#endif /* no yyoverflow */
1654
Lev Walkin418298d2006-07-13 08:24:20 +00001655 yyssp = yyss + yysize - 1;
1656 yyvsp = yyvs + yysize - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001657
Lev Walkin418298d2006-07-13 08:24:20 +00001658
1659 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1660 (unsigned long int) yystacksize));
Lev Walkinf15320b2004-06-03 03:38:44 +00001661
Lev Walkina00d6b32006-03-21 03:40:38 +00001662 if (yyssp >= yyss + yystacksize - 1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001663 YYABORT;
1664 }
1665
Lev Walkin418298d2006-07-13 08:24:20 +00001666 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Lev Walkinf15320b2004-06-03 03:38:44 +00001667
1668 goto yybackup;
Lev Walkin418298d2006-07-13 08:24:20 +00001669
1670/*-----------.
1671| yybackup. |
1672`-----------*/
1673yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001674
1675/* Do appropriate processing given the current state. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001676/* Read a lookahead token if we need one and don't already have one. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001677/* yyresume: */
1678
Lev Walkina00d6b32006-03-21 03:40:38 +00001679 /* First try to decide what to do without reference to lookahead token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001680
1681 yyn = yypact[yystate];
Lev Walkin418298d2006-07-13 08:24:20 +00001682 if (yyn == YYPACT_NINF)
Lev Walkinf15320b2004-06-03 03:38:44 +00001683 goto yydefault;
1684
Lev Walkina00d6b32006-03-21 03:40:38 +00001685 /* Not known => get a lookahead token if don't already have one. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001686
Lev Walkina00d6b32006-03-21 03:40:38 +00001687 /* yychar is either YYEMPTY or YYEOF
1688 or a valid token in external form. */
1689
Lev Walkinf15320b2004-06-03 03:38:44 +00001690 if (yychar == YYEMPTY)
1691 {
Lev Walkin418298d2006-07-13 08:24:20 +00001692 YYDPRINTF ((stderr, "Reading a token: "));
Lev Walkinf15320b2004-06-03 03:38:44 +00001693 yychar = YYLEX;
1694 }
1695
Lev Walkin418298d2006-07-13 08:24:20 +00001696 /* Convert token to internal form (in yychar1) for indexing tables with. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001697
Lev Walkin418298d2006-07-13 08:24:20 +00001698 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001699 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001700 yychar1 = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00001701 yychar = YYEOF; /* Don't call YYLEX any more. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001702
Lev Walkin418298d2006-07-13 08:24:20 +00001703 YYDPRINTF ((stderr, "Now at end of input.\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001704 }
1705 else
1706 {
Lev Walkin418298d2006-07-13 08:24:20 +00001707 yychar1 = YYTRANSLATE (yychar);
Lev Walkina00d6b32006-03-21 03:40:38 +00001708
Lev Walkin418298d2006-07-13 08:24:20 +00001709 /* We have to keep this `#if YYDEBUG', since we use variables
1710 which are defined only if `YYDEBUG' is set. */
1711 YYDPRINTF ((stderr, "Next token is "));
1712 YYDSYMPRINT ((stderr, yychar1, yylval));
1713 YYDPRINTF ((stderr, "\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001714 }
1715
Lev Walkin418298d2006-07-13 08:24:20 +00001716 /* If the proper action on seeing token YYCHAR1 is to reduce or to
1717 detect an error, take that action. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001718 yyn += yychar1;
Lev Walkin418298d2006-07-13 08:24:20 +00001719 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001720 goto yydefault;
Lev Walkinf15320b2004-06-03 03:38:44 +00001721 yyn = yytable[yyn];
Lev Walkin418298d2006-07-13 08:24:20 +00001722 if (yyn <= 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001723 {
Lev Walkin418298d2006-07-13 08:24:20 +00001724 if (yyn == 0 || yyn == YYTABLE_NINF)
Lev Walkinf15320b2004-06-03 03:38:44 +00001725 goto yyerrlab;
1726 yyn = -yyn;
1727 goto yyreduce;
1728 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001729
1730 if (yyn == YYFINAL)
1731 YYACCEPT;
1732
Lev Walkina00d6b32006-03-21 03:40:38 +00001733 /* Shift the lookahead token. */
Lev Walkin418298d2006-07-13 08:24:20 +00001734 YYDPRINTF ((stderr, "Shifting token %d (%s), ",
1735 yychar, yytname[yychar1]));
Lev Walkinf15320b2004-06-03 03:38:44 +00001736
1737 /* Discard the token being shifted unless it is eof. */
1738 if (yychar != YYEOF)
1739 yychar = YYEMPTY;
1740
1741 *++yyvsp = yylval;
Lev Walkinf15320b2004-06-03 03:38:44 +00001742
Lev Walkin418298d2006-07-13 08:24:20 +00001743
1744 /* Count tokens shifted since error; after three, turn off error
1745 status. */
1746 if (yyerrstatus)
1747 yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001748
1749 yystate = yyn;
1750 goto yynewstate;
1751
Lev Walkina00d6b32006-03-21 03:40:38 +00001752
Lev Walkin418298d2006-07-13 08:24:20 +00001753/*-----------------------------------------------------------.
1754| yydefault -- do the default action for the current state. |
1755`-----------------------------------------------------------*/
1756yydefault:
Lev Walkinf15320b2004-06-03 03:38:44 +00001757 yyn = yydefact[yystate];
1758 if (yyn == 0)
1759 goto yyerrlab;
Lev Walkin418298d2006-07-13 08:24:20 +00001760 goto yyreduce;
Lev Walkinf15320b2004-06-03 03:38:44 +00001761
Lev Walkin418298d2006-07-13 08:24:20 +00001762
1763/*-----------------------------.
1764| yyreduce -- Do a reduction. |
1765`-----------------------------*/
Lev Walkinf15320b2004-06-03 03:38:44 +00001766yyreduce:
Lev Walkin418298d2006-07-13 08:24:20 +00001767 /* yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001768 yylen = yyr2[yyn];
Lev Walkinf15320b2004-06-03 03:38:44 +00001769
Lev Walkin418298d2006-07-13 08:24:20 +00001770 /* If YYLEN is nonzero, implement the default value of the action:
1771 `$$ = $1'.
1772
1773 Otherwise, the following line sets YYVAL to garbage.
1774 This behavior is undocumented and Bison
1775 users should not rely upon it. Assigning to YYVAL
1776 unconditionally makes the parser a bit smaller, and it avoids a
1777 GCC warning that YYVAL may be used uninitialized. */
1778 yyval = yyvsp[1-yylen];
1779
1780
1781
1782#if YYDEBUG
1783 /* We have to keep this `#if YYDEBUG', since we use variables which
1784 are defined only if `YYDEBUG' is set. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001785 if (yydebug)
Lev Walkinf15320b2004-06-03 03:38:44 +00001786 {
Lev Walkin418298d2006-07-13 08:24:20 +00001787 int yyi;
Lev Walkina00d6b32006-03-21 03:40:38 +00001788
Lev Walkin418298d2006-07-13 08:24:20 +00001789 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
1790 yyn - 1, yyrline[yyn]);
Lev Walkina00d6b32006-03-21 03:40:38 +00001791
1792 /* Print the symbols being reduced, and their result. */
Lev Walkin418298d2006-07-13 08:24:20 +00001793 for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
1794 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
1795 YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkina00d6b32006-03-21 03:40:38 +00001796 }
1797#endif
Lev Walkin418298d2006-07-13 08:24:20 +00001798 switch (yyn)
1799 {
1800 case 2:
Lev Walkin557f27d2006-03-21 07:46:48 +00001801#line 324 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001802 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001803 *(void **)param = yyvsp[0].a_grammar;
Lev Walkin418298d2006-07-13 08:24:20 +00001804 }
1805 break;
1806
1807 case 3:
Lev Walkin557f27d2006-03-21 07:46:48 +00001808#line 330 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001809 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001810 yyval.a_grammar = asn1p_new();
1811 checkmem(yyval.a_grammar);
1812 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin418298d2006-07-13 08:24:20 +00001813 }
1814 break;
1815
1816 case 4:
Lev Walkin557f27d2006-03-21 07:46:48 +00001817#line 335 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001818 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001819 yyval.a_grammar = yyvsp[-1].a_grammar;
1820 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin418298d2006-07-13 08:24:20 +00001821 }
1822 break;
1823
1824 case 5:
Lev Walkin557f27d2006-03-21 07:46:48 +00001825#line 356 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001826 {
Lev Walkinfb872bd2006-03-18 06:53:11 +00001827
Lev Walkina00d6b32006-03-21 03:40:38 +00001828 if(yyvsp[-1].a_module) {
1829 yyval.a_module = yyvsp[-1].a_module;
Lev Walkinf15320b2004-06-03 03:38:44 +00001830 } else {
1831 /* There's a chance that a module is just plain empty */
Lev Walkina00d6b32006-03-21 03:40:38 +00001832 yyval.a_module = asn1p_module_new();
Lev Walkinf15320b2004-06-03 03:38:44 +00001833 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001834 checkmem(yyval.a_module);
Lev Walkinf15320b2004-06-03 03:38:44 +00001835
Lev Walkina00d6b32006-03-21 03:40:38 +00001836 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
1837 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1838 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001839 }
1840 break;
1841
1842 case 6:
Lev Walkin557f27d2006-03-21 07:46:48 +00001843#line 377 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001844 { yyval.a_oid = 0; }
1845 break;
1846
1847 case 7:
Lev Walkin557f27d2006-03-21 07:46:48 +00001848#line 378 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001849 { yyval.a_oid = yyvsp[0].a_oid; }
1850 break;
1851
1852 case 8:
Lev Walkin557f27d2006-03-21 07:46:48 +00001853#line 382 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001854 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001855 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin418298d2006-07-13 08:24:20 +00001856 }
1857 break;
1858
1859 case 9:
Lev Walkin557f27d2006-03-21 07:46:48 +00001860#line 385 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001861 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001862 yyval.a_oid = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00001863 }
1864 break;
1865
1866 case 10:
Lev Walkin557f27d2006-03-21 07:46:48 +00001867#line 391 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001868 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001869 yyval.a_oid = asn1p_oid_new();
1870 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1871 if(yyvsp[0].a_oid_arc.name)
1872 free(yyvsp[0].a_oid_arc.name);
Lev Walkin418298d2006-07-13 08:24:20 +00001873 }
1874 break;
1875
1876 case 11:
Lev Walkin557f27d2006-03-21 07:46:48 +00001877#line 397 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001878 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001879 yyval.a_oid = yyvsp[-1].a_oid;
1880 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1881 if(yyvsp[0].a_oid_arc.name)
1882 free(yyvsp[0].a_oid_arc.name);
Lev Walkin418298d2006-07-13 08:24:20 +00001883 }
1884 break;
1885
1886 case 12:
Lev Walkin557f27d2006-03-21 07:46:48 +00001887#line 406 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001888 { /* iso */
Lev Walkina00d6b32006-03-21 03:40:38 +00001889 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1890 yyval.a_oid_arc.number = -1;
Lev Walkin418298d2006-07-13 08:24:20 +00001891 }
1892 break;
1893
1894 case 13:
Lev Walkin557f27d2006-03-21 07:46:48 +00001895#line 410 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001896 { /* iso(1) */
Lev Walkina00d6b32006-03-21 03:40:38 +00001897 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1898 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkin418298d2006-07-13 08:24:20 +00001899 }
1900 break;
1901
1902 case 14:
Lev Walkin557f27d2006-03-21 07:46:48 +00001903#line 414 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001904 { /* 1 */
Lev Walkina00d6b32006-03-21 03:40:38 +00001905 yyval.a_oid_arc.name = 0;
1906 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin418298d2006-07-13 08:24:20 +00001907 }
1908 break;
1909
1910 case 15:
Lev Walkin557f27d2006-03-21 07:46:48 +00001911#line 424 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001912 { yyval.a_module_flags = MSF_NOFLAGS; }
1913 break;
1914
1915 case 16:
Lev Walkin557f27d2006-03-21 07:46:48 +00001916#line 425 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001917 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001918 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001919 }
1920 break;
1921
1922 case 17:
Lev Walkin557f27d2006-03-21 07:46:48 +00001923#line 434 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001924 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001925 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001926 }
1927 break;
1928
1929 case 18:
Lev Walkin557f27d2006-03-21 07:46:48 +00001930#line 437 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001931 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001932 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001933 }
1934 break;
1935
1936 case 19:
Lev Walkin557f27d2006-03-21 07:46:48 +00001937#line 446 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001938 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001939 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin418298d2006-07-13 08:24:20 +00001940 }
1941 break;
1942
1943 case 20:
Lev Walkin557f27d2006-03-21 07:46:48 +00001944#line 449 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001945 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001946 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin418298d2006-07-13 08:24:20 +00001947 }
1948 break;
1949
1950 case 21:
Lev Walkin557f27d2006-03-21 07:46:48 +00001951#line 452 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001952 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001953 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin418298d2006-07-13 08:24:20 +00001954 }
1955 break;
1956
1957 case 22:
Lev Walkin557f27d2006-03-21 07:46:48 +00001958#line 455 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001959 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001960 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin418298d2006-07-13 08:24:20 +00001961 }
1962 break;
1963
1964 case 23:
Lev Walkin557f27d2006-03-21 07:46:48 +00001965#line 459 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001966 {
Lev Walkinf59d0752004-08-18 04:59:12 +00001967 /* X.680Amd1 specifies TAG and XER */
Lev Walkina00d6b32006-03-21 03:40:38 +00001968 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1969 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1970 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1971 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
Lev Walkinf59d0752004-08-18 04:59:12 +00001972 } else {
1973 fprintf(stderr,
1974 "WARNING: %s INSTRUCTIONS at line %d: "
1975 "Unrecognized encoding reference\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00001976 yyvsp[-1].tv_str, yylineno);
1977 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
Lev Walkinf59d0752004-08-18 04:59:12 +00001978 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001979 free(yyvsp[-1].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00001980 }
1981 break;
1982
1983 case 24:
Lev Walkin557f27d2006-03-21 07:46:48 +00001984#line 480 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001985 { yyval.a_module = 0; }
1986 break;
1987
1988 case 25:
Lev Walkin557f27d2006-03-21 07:46:48 +00001989#line 481 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001990 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001991 yyval.a_module = yyvsp[0].a_module;
Lev Walkin418298d2006-07-13 08:24:20 +00001992 }
1993 break;
1994
1995 case 26:
Lev Walkin557f27d2006-03-21 07:46:48 +00001996#line 490 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001997 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001998 yyval.a_module = yyvsp[0].a_module;
Lev Walkin418298d2006-07-13 08:24:20 +00001999 }
2000 break;
2001
2002 case 27:
Lev Walkin557f27d2006-03-21 07:46:48 +00002003#line 493 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002004 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002005 yyval.a_module = yyvsp[-1].a_module;
Lev Walkinf15320b2004-06-03 03:38:44 +00002006
Lev Walkinf59d0752004-08-18 04:59:12 +00002007 /* Behave well when one of them is skipped. */
Lev Walkina00d6b32006-03-21 03:40:38 +00002008 if(!(yyvsp[-1].a_module)) {
2009 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
Lev Walkinf59d0752004-08-18 04:59:12 +00002010 break;
2011 }
2012
Lev Walkinf15320b2004-06-03 03:38:44 +00002013#ifdef MY_IMPORT
2014#error MY_IMPORT DEFINED ELSEWHERE!
2015#endif
2016#define MY_IMPORT(foo,field) do { \
Lev Walkina00d6b32006-03-21 03:40:38 +00002017 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
2018 TQ_ADD(&(yyval.a_module->foo), \
2019 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
Lev Walkinf15320b2004-06-03 03:38:44 +00002020 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00002021 } \
Lev Walkina00d6b32006-03-21 03:40:38 +00002022 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
Lev Walkinbc55d232004-08-13 12:31:09 +00002023 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00002024
2025 MY_IMPORT(imports, xp_next);
2026 MY_IMPORT(exports, xp_next);
2027 MY_IMPORT(members, next);
2028#undef MY_IMPORT
2029
Lev Walkin418298d2006-07-13 08:24:20 +00002030 }
2031 break;
2032
2033 case 28:
Lev Walkin557f27d2006-03-21 07:46:48 +00002034#line 526 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002035 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002036 yyval.a_module = yyvsp[0].a_module;
Lev Walkin418298d2006-07-13 08:24:20 +00002037 }
2038 break;
2039
2040 case 29:
Lev Walkin557f27d2006-03-21 07:46:48 +00002041#line 529 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002042 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002043 yyval.a_module = asn1p_module_new();
2044 checkmem(yyval.a_module);
2045 if(yyvsp[0].a_xports) {
2046 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
Lev Walkinf15320b2004-06-03 03:38:44 +00002047 } else {
2048 /* "EXPORTS ALL;" ? */
2049 }
Lev Walkin418298d2006-07-13 08:24:20 +00002050 }
2051 break;
2052
2053 case 30:
Lev Walkin557f27d2006-03-21 07:46:48 +00002054#line 538 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002055 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002056 yyval.a_module = asn1p_module_new();
2057 checkmem(yyval.a_module);
2058 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2059 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2060 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002061 }
2062 break;
2063
2064 case 31:
Lev Walkin557f27d2006-03-21 07:46:48 +00002065#line 545 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002066 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002067 yyval.a_module = asn1p_module_new();
2068 checkmem(yyval.a_module);
2069 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2070 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2071 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002072 }
2073 break;
2074
2075 case 32:
Lev Walkin557f27d2006-03-21 07:46:48 +00002076#line 558 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002077 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002078 yyval.a_module = asn1p_module_new();
2079 checkmem(yyval.a_module);
2080 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2081 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2082 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002083 }
2084 break;
2085
2086 case 33:
Lev Walkin557f27d2006-03-21 07:46:48 +00002087#line 566 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002088 { asn1p_lexer_hack_push_encoding_control(); }
2089 break;
2090
2091 case 34:
Lev Walkin557f27d2006-03-21 07:46:48 +00002092#line 567 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002093 {
Lev Walkinf59d0752004-08-18 04:59:12 +00002094 fprintf(stderr,
2095 "WARNING: ENCODING-CONTROL %s "
2096 "specification at line %d ignored\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00002097 yyvsp[-1].tv_str, yylineno);
2098 free(yyvsp[-1].tv_str);
2099 yyval.a_module = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002100 }
2101 break;
2102
2103 case 35:
Lev Walkin557f27d2006-03-21 07:46:48 +00002104#line 579 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002105 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002106 return yyerror(
Lev Walkin70853052005-11-26 11:21:55 +00002107 "Attempt to redefine a standard basic string type, "
2108 "please comment out or remove this type redefinition.");
Lev Walkin418298d2006-07-13 08:24:20 +00002109 }
2110 break;
2111
2112 case 36:
Lev Walkin557f27d2006-03-21 07:46:48 +00002113#line 592 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002114 {
Lev Walkinb36317c2005-08-12 10:09:10 +00002115 if(!saved_aid && 0)
2116 return yyerror("Unterminated IMPORTS FROM, "
2117 "expected semicolon ';'");
2118 saved_aid = 0;
Lev Walkina00d6b32006-03-21 03:40:38 +00002119 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin418298d2006-07-13 08:24:20 +00002120 }
2121 break;
2122
2123 case 37:
Lev Walkin557f27d2006-03-21 07:46:48 +00002124#line 602 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002125 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002126 return yyerror("Empty IMPORTS list");
Lev Walkin418298d2006-07-13 08:24:20 +00002127 }
2128 break;
2129
2130 case 38:
Lev Walkin557f27d2006-03-21 07:46:48 +00002131#line 608 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002132 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002133 yyval.a_module = asn1p_module_new();
2134 checkmem(yyval.a_module);
2135 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin418298d2006-07-13 08:24:20 +00002136 }
2137 break;
2138
2139 case 39:
Lev Walkin557f27d2006-03-21 07:46:48 +00002140#line 613 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002141 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002142 yyval.a_module = yyvsp[-1].a_module;
2143 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin418298d2006-07-13 08:24:20 +00002144 }
2145 break;
2146
2147 case 40:
Lev Walkin557f27d2006-03-21 07:46:48 +00002148#line 620 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002149 { memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); }
2150 break;
2151
2152 case 41:
Lev Walkin557f27d2006-03-21 07:46:48 +00002153#line 621 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002154 { yyval.a_aid.oid = yyvsp[0].a_oid; }
2155 break;
2156
2157 case 42:
Lev Walkin557f27d2006-03-21 07:46:48 +00002158#line 625 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002159 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002160 yyval.a_xports = yyvsp[-3].a_xports;
2161 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
2162 yyval.a_xports->identifier = yyvsp[0].a_aid;
Lev Walkinb36317c2005-08-12 10:09:10 +00002163 /* This stupid thing is used for look-back hack. */
Lev Walkina00d6b32006-03-21 03:40:38 +00002164 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
2165 checkmem(yyval.a_xports);
Lev Walkin418298d2006-07-13 08:24:20 +00002166 }
2167 break;
2168
2169 case 43:
Lev Walkin557f27d2006-03-21 07:46:48 +00002170#line 636 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002171 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002172 yyval.a_xports = asn1p_xports_new();
2173 checkmem(yyval.a_xports);
2174 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002175 }
2176 break;
2177
2178 case 44:
Lev Walkin557f27d2006-03-21 07:46:48 +00002179#line 641 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002180 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002181 yyval.a_xports = yyvsp[-2].a_xports;
2182 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002183 }
2184 break;
2185
2186 case 45:
Lev Walkin557f27d2006-03-21 07:46:48 +00002187#line 648 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002188 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002189 yyval.a_expr = asn1p_expr_new(yylineno);
2190 checkmem(yyval.a_expr);
2191 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2192 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin418298d2006-07-13 08:24:20 +00002193 }
2194 break;
2195
2196 case 46:
Lev Walkin557f27d2006-03-21 07:46:48 +00002197#line 654 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002198 { /* Completely equivalent to above */
Lev Walkina00d6b32006-03-21 03:40:38 +00002199 yyval.a_expr = asn1p_expr_new(yylineno);
2200 checkmem(yyval.a_expr);
2201 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2202 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin418298d2006-07-13 08:24:20 +00002203 }
2204 break;
2205
2206 case 47:
Lev Walkin557f27d2006-03-21 07:46:48 +00002207#line 660 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002208 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002209 yyval.a_expr = asn1p_expr_new(yylineno);
2210 checkmem(yyval.a_expr);
2211 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2212 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin418298d2006-07-13 08:24:20 +00002213 }
2214 break;
2215
2216 case 48:
Lev Walkin557f27d2006-03-21 07:46:48 +00002217#line 669 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002218 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002219 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin418298d2006-07-13 08:24:20 +00002220 }
2221 break;
2222
2223 case 49:
Lev Walkin557f27d2006-03-21 07:46:48 +00002224#line 672 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002225 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002226 yyval.a_xports = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002227 }
2228 break;
2229
2230 case 50:
Lev Walkin557f27d2006-03-21 07:46:48 +00002231#line 675 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002232 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002233 /* Empty EXPORTS clause effectively prohibits export. */
Lev Walkina00d6b32006-03-21 03:40:38 +00002234 yyval.a_xports = asn1p_xports_new();
2235 checkmem(yyval.a_xports);
Lev Walkin418298d2006-07-13 08:24:20 +00002236 }
2237 break;
2238
2239 case 51:
Lev Walkin557f27d2006-03-21 07:46:48 +00002240#line 683 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002241 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002242 yyval.a_xports = asn1p_xports_new();
2243 assert(yyval.a_xports);
2244 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002245 }
2246 break;
2247
2248 case 52:
Lev Walkin557f27d2006-03-21 07:46:48 +00002249#line 688 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002250 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002251 yyval.a_xports = yyvsp[-2].a_xports;
2252 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002253 }
2254 break;
2255
2256 case 53:
Lev Walkin557f27d2006-03-21 07:46:48 +00002257#line 695 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002258 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002259 yyval.a_expr = asn1p_expr_new(yylineno);
2260 checkmem(yyval.a_expr);
2261 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2262 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin418298d2006-07-13 08:24:20 +00002263 }
2264 break;
2265
2266 case 54:
Lev Walkin557f27d2006-03-21 07:46:48 +00002267#line 701 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002268 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002269 yyval.a_expr = asn1p_expr_new(yylineno);
2270 checkmem(yyval.a_expr);
2271 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2272 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin418298d2006-07-13 08:24:20 +00002273 }
2274 break;
2275
2276 case 55:
Lev Walkin557f27d2006-03-21 07:46:48 +00002277#line 707 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002278 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002279 yyval.a_expr = asn1p_expr_new(yylineno);
2280 checkmem(yyval.a_expr);
2281 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2282 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin418298d2006-07-13 08:24:20 +00002283 }
2284 break;
2285
2286 case 56:
Lev Walkin557f27d2006-03-21 07:46:48 +00002287#line 716 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002288 { yyval.a_constr = yyvsp[-1].a_constr; }
2289 break;
2290
2291 case 57:
Lev Walkin557f27d2006-03-21 07:46:48 +00002292#line 719 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002293 {
Lev Walkin557f27d2006-03-21 07:46:48 +00002294 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkina00d6b32006-03-21 03:40:38 +00002295 assert(yyval.a_expr->Identifier == 0);
Lev Walkin557f27d2006-03-21 07:46:48 +00002296 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
Lev Walkina00d6b32006-03-21 03:40:38 +00002297 yyval.a_expr->meta_type = AMT_VALUESET;
Lev Walkin557f27d2006-03-21 07:46:48 +00002298 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00002299 }
2300 break;
2301
2302 case 58:
Lev Walkin557f27d2006-03-21 07:46:48 +00002303#line 729 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002304 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00002305 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002306 }
2307 break;
2308
2309 case 59:
Lev Walkin557f27d2006-03-21 07:46:48 +00002310#line 742 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002311 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002312 yyval.a_expr = asn1p_expr_new(yylineno);
2313 checkmem(yyval.a_expr);
2314 yyval.a_expr->reference = yyvsp[0].a_ref;
2315 yyval.a_expr->expr_type = A1TC_REFERENCE;
2316 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin418298d2006-07-13 08:24:20 +00002317 }
2318 break;
2319
2320 case 60:
Lev Walkin557f27d2006-03-21 07:46:48 +00002321#line 752 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002322 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002323 yyval.a_expr = asn1p_expr_new(yylineno);
2324 checkmem(yyval.a_expr);
Lev Walkin0c0bca62006-03-21 04:48:15 +00002325 yyval.a_expr->reference = yyvsp[-3].a_ref;
2326 yyval.a_expr->rhs_pspecs = yyvsp[-1].a_expr;
2327 yyval.a_expr->expr_type = A1TC_REFERENCE;
2328 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin418298d2006-07-13 08:24:20 +00002329 }
2330 break;
2331
2332 case 61:
Lev Walkin557f27d2006-03-21 07:46:48 +00002333#line 772 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002334 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002335 yyval.a_expr = yyvsp[0].a_expr;
2336 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2337 assert(yyval.a_expr->expr_type);
2338 assert(yyval.a_expr->meta_type);
Lev Walkin418298d2006-07-13 08:24:20 +00002339 }
2340 break;
2341
2342 case 62:
Lev Walkin557f27d2006-03-21 07:46:48 +00002343#line 778 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002344 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002345 yyval.a_expr = yyvsp[0].a_expr;
2346 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2347 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2348 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin418298d2006-07-13 08:24:20 +00002349 }
2350 break;
2351
2352 case 63:
Lev Walkin557f27d2006-03-21 07:46:48 +00002353#line 794 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002354 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002355 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkina00d6b32006-03-21 03:40:38 +00002356 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2357 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
Lev Walkin418298d2006-07-13 08:24:20 +00002358 }
2359 break;
2360
2361 case 64:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002362#line 800 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002363 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00002364 yyval.a_expr = yyvsp[0].a_expr;
2365 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2366 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
Lev Walkin418298d2006-07-13 08:24:20 +00002367 }
2368 break;
2369
2370 case 65:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002371#line 808 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002372 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002373 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002374 yyval.a_plist = asn1p_paramlist_new(yylineno);
2375 checkmem(yyval.a_plist);
2376 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
Lev Walkinf15320b2004-06-03 03:38:44 +00002377 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002378 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2379 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin418298d2006-07-13 08:24:20 +00002380 }
2381 break;
2382
2383 case 66:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002384#line 817 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002385 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002386 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002387 yyval.a_plist = yyvsp[-2].a_plist;
2388 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
Lev Walkinf15320b2004-06-03 03:38:44 +00002389 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002390 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2391 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin418298d2006-07-13 08:24:20 +00002392 }
2393 break;
2394
2395 case 67:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002396#line 828 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002397 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002398 yyval.a_parg.governor = NULL;
2399 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002400 }
2401 break;
2402
2403 case 68:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002404#line 832 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002405 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00002406 int ret;
2407 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2408 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
2409 checkmem(ret == 0);
2410 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002411 }
2412 break;
2413
2414 case 69:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002415#line 839 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002416 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00002417 int ret;
2418 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2419 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
2420 checkmem(ret == 0);
2421 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002422 }
2423 break;
2424
2425 case 70:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002426#line 846 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002427 {
Lev Walkinc8092cb2005-02-18 16:34:21 +00002428 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002429 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2430 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2431 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
Lev Walkinf15320b2004-06-03 03:38:44 +00002432 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002433 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002434 }
2435 break;
2436
2437 case 71:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002438#line 854 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002439 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00002440 int ret;
2441 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2442 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2443 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2444 checkmem(ret == 0);
2445 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002446 }
2447 break;
2448
2449 case 72:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002450#line 865 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002451 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002452 yyval.a_expr = asn1p_expr_new(yylineno);
2453 checkmem(yyval.a_expr);
2454 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002455 }
2456 break;
2457
2458 case 73:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002459#line 870 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002460 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002461 yyval.a_expr = yyvsp[-2].a_expr;
2462 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002463 }
2464 break;
2465
2466 case 74:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002467#line 877 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002468 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002469 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002470 }
2471 break;
2472
2473 case 75:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002474#line 880 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002475 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00002476 yyval.a_expr = asn1p_expr_new(yylineno);
2477 checkmem(yyval.a_expr);
2478 yyval.a_expr->Identifier = "?";
2479 yyval.a_expr->expr_type = A1TC_REFERENCE;
2480 yyval.a_expr->meta_type = AMT_VALUE;
2481 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00002482 }
2483 break;
2484
2485 case 76:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002486#line 888 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002487 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002488 asn1p_ref_t *ref;
2489 yyval.a_expr = asn1p_expr_new(yylineno);
2490 checkmem(yyval.a_expr);
2491 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2492 yyval.a_expr->expr_type = A1TC_REFERENCE;
2493 yyval.a_expr->meta_type = AMT_VALUE;
2494 ref = asn1p_ref_new(yylineno);
2495 asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2496 yyval.a_expr->value = asn1p_value_fromref(ref, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00002497 }
2498 break;
2499
2500 case 77:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002501#line 899 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002502 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00002503 yyval.a_expr = asn1p_expr_new(yylineno);
2504 yyval.a_expr->expr_type = A1TC_VALUESET;
2505 yyval.a_expr->meta_type = AMT_VALUESET;
2506 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00002507 }
2508 break;
2509
2510 case 78:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002511#line 922 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002512 { yyval.a_expr = asn1p_expr_new(yylineno); }
2513 break;
2514
2515 case 79:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002516#line 923 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002517 { yyval.a_expr = yyvsp[0].a_expr; }
2518 break;
2519
2520 case 80:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002521#line 926 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002522 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002523 yyval.a_expr = asn1p_expr_new(yylineno);
2524 checkmem(yyval.a_expr);
2525 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002526 }
2527 break;
2528
2529 case 81:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002530#line 931 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002531 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002532 yyval.a_expr = yyvsp[-2].a_expr;
2533 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002534 }
2535 break;
2536
2537 case 82:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002538#line 938 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002539 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002540 yyval.a_expr = yyvsp[-1].a_expr;
2541 assert(yyval.a_expr->Identifier == 0);
2542 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2543 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2544 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002545 }
2546 break;
2547
2548 case 83:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002549#line 945 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002550 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002551 yyval.a_expr = yyvsp[-1].a_expr;
2552 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2553 yyval.a_expr->marker = yyvsp[0].a_marker;
2554 _fixup_anonymous_identifier(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002555 }
2556 break;
2557
2558 case 84:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002559#line 951 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002560 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002561 yyval.a_expr = asn1p_expr_new(yylineno);
2562 checkmem(yyval.a_expr);
2563 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2564 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
2565 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002566 }
2567 break;
2568
2569 case 85:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002570#line 958 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002571 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002572 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002573 }
2574 break;
2575
2576 case 86:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002577#line 964 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002578 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002579 yyval.a_expr = asn1p_expr_new(yylineno);
2580 checkmem(yyval.a_expr);
2581 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002582 }
2583 break;
2584
2585 case 87:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002586#line 969 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002587 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002588 yyval.a_expr = yyvsp[-2].a_expr;
2589 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002590 }
2591 break;
2592
2593 case 88:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002594#line 976 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002595 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002596 yyval.a_expr = yyvsp[0].a_expr;
2597 assert(yyval.a_expr->Identifier == 0);
2598 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002599 }
2600 break;
2601
2602 case 89:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002603#line 981 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002604 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002605 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002606 }
2607 break;
2608
2609 case 90:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002610#line 984 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002611 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002612 yyval.a_expr = yyvsp[0].a_expr;
2613 _fixup_anonymous_identifier(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002614 }
2615 break;
2616
2617 case 91:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002618#line 991 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002619 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002620 yyval.a_expr = yyvsp[-2].a_expr;
2621 checkmem(yyval.a_expr);
2622 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2623 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2624 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin418298d2006-07-13 08:24:20 +00002625 }
2626 break;
2627
2628 case 92:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002629#line 1001 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002630 { yyval.a_int = 0; }
2631 break;
2632
2633 case 93:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002634#line 1002 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002635 { yyval.a_int = 1; }
2636 break;
2637
2638 case 94:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002639#line 1006 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002640 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002641 yyval.a_expr = asn1p_expr_new(yylineno);
2642 checkmem(yyval.a_expr);
2643 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2644 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2645 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002646 }
2647 break;
2648
2649 case 95:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002650#line 1013 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002651 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002652 yyval.a_expr = yyvsp[-2].a_expr;
2653 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002654 }
2655 break;
2656
2657 case 96:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002658#line 1023 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002659 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002660 yyval.a_expr = asn1p_expr_new(yylineno);
2661 checkmem(yyval.a_expr);
2662 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2663 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2664 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2665 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002666 }
2667 break;
2668
2669 case 97:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002670#line 1033 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002671 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002672 yyval.a_expr = asn1p_expr_new(yylineno);
2673 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2674 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2675 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2676 yyval.a_expr->unique = yyvsp[-1].a_int;
2677 yyval.a_expr->marker = yyvsp[0].a_marker;
2678 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002679 }
2680 break;
2681
2682 case 98:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002683#line 1044 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002684 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002685 yyval.a_expr = asn1p_expr_new(yylineno);
2686 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2687 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2688 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2689 yyval.a_expr->reference = yyvsp[-1].a_ref;
2690 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002691 }
2692 break;
2693
2694 case 99:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002695#line 1054 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002696 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002697 yyval.a_expr = asn1p_expr_new(yylineno);
2698 checkmem(yyval.a_expr);
2699 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2700 yyval.a_expr->reference = yyvsp[-1].a_ref;
2701 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2702 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2703 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002704 }
2705 break;
2706
2707 case 100:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002708#line 1065 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002709 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002710 yyval.a_expr = asn1p_expr_new(yylineno);
2711 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2712 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2713 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2714 yyval.a_expr->reference = yyvsp[-1].a_ref;
2715 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002716 }
2717 break;
2718
2719 case 101:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002720#line 1075 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002721 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002722 yyval.a_expr = asn1p_expr_new(yylineno);
2723 checkmem(yyval.a_expr);
2724 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2725 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2726 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2727 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
2728 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002729 }
2730 break;
2731
2732 case 102:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002733#line 1086 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002734 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002735 yyval.a_expr = asn1p_expr_new(yylineno);
2736 checkmem(yyval.a_expr);
2737 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2738 yyval.a_expr->reference = yyvsp[-1].a_ref;
2739 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2740 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2741 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002742 }
2743 break;
2744
2745 case 103:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002746#line 1098 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002747 { yyval.a_wsynt = 0; }
2748 break;
2749
2750 case 104:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002751#line 1099 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002752 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002753 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin418298d2006-07-13 08:24:20 +00002754 }
2755 break;
2756
2757 case 105:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002758#line 1106 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002759 { asn1p_lexer_hack_enable_with_syntax(); }
2760 break;
2761
2762 case 106:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002763#line 1108 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002764 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002765 yyval.a_wsynt = yyvsp[-1].a_wsynt;
Lev Walkin418298d2006-07-13 08:24:20 +00002766 }
2767 break;
2768
2769 case 107:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002770#line 1114 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002771 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002772 yyval.a_wsynt = asn1p_wsyntx_new();
2773 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002774 }
2775 break;
2776
2777 case 108:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002778#line 1118 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002779 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002780 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2781 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002782 }
2783 break;
2784
2785 case 109:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002786#line 1125 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002787 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002788 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_opaque.buf, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002789 yyval.a_wchunk->type = WC_WHITESPACE;
Lev Walkin418298d2006-07-13 08:24:20 +00002790 }
2791 break;
2792
2793 case 110:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002794#line 1129 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002795 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002796 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_str, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00002797 }
2798 break;
2799
2800 case 111:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002801#line 1132 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002802 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002803 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].a_refcomp.name, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002804 yyval.a_wchunk->type = WC_FIELD;
Lev Walkin418298d2006-07-13 08:24:20 +00002805 }
2806 break;
2807
2808 case 112:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002809#line 1136 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002810 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002811 yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
Lev Walkin418298d2006-07-13 08:24:20 +00002812 }
2813 break;
2814
2815 case 113:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002816#line 1142 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002817 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00002818 yyval.a_expr = asn1p_expr_new(yylineno);
2819 checkmem(yyval.a_expr);
2820 yyval.a_expr->Identifier = strdup("...");
2821 checkmem(yyval.a_expr->Identifier);
2822 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2823 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002824 }
2825 break;
2826
2827 case 114:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002828#line 1150 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002829 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00002830 yyval.a_expr = asn1p_expr_new(yylineno);
2831 checkmem(yyval.a_expr);
2832 yyval.a_expr->Identifier = strdup("...");
2833 checkmem(yyval.a_expr->Identifier);
2834 yyval.a_expr->value = yyvsp[0].a_value;
2835 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2836 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002837 }
2838 break;
2839
2840 case 115:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002841#line 1159 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002842 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00002843 yyval.a_expr = asn1p_expr_new(yylineno);
2844 checkmem(yyval.a_expr);
2845 yyval.a_expr->Identifier = strdup("...");
2846 yyval.a_expr->value = yyvsp[0].a_value;
2847 checkmem(yyval.a_expr->Identifier);
2848 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2849 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002850 }
2851 break;
2852
2853 case 116:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002854#line 1171 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002855 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002856 yyval.a_expr = yyvsp[-1].a_expr;
2857 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002858 /*
2859 * Outer constraint for SEQUENCE OF and SET OF applies
2860 * to the inner type.
2861 */
Lev Walkina00d6b32006-03-21 03:40:38 +00002862 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2863 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2864 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2865 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002866 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002867 if(yyval.a_expr->constraints) {
2868 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002869 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002870 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002871 }
2872 }
Lev Walkin418298d2006-07-13 08:24:20 +00002873 }
2874 break;
2875
2876 case 117:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002877#line 1193 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002878 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002879 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
Lev Walkinfb872bd2006-03-18 06:53:11 +00002880 asn1p_as_pointer = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002881 }
2882 break;
2883
2884 case 118:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002885#line 1200 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002886 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002887 yyval.a_expr = yyvsp[0].a_expr;
2888 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
Lev Walkinfb872bd2006-03-18 06:53:11 +00002889
Lev Walkina00d6b32006-03-21 03:40:38 +00002890 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2891 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
Lev Walkinef625402005-09-05 05:17:57 +00002892 fprintf(stderr,
2893 "INFO: Directive <ASN1C:RepresentAsPointer> "
2894 "applied to %s at line %d\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00002895 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2896 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
Lev Walkinef625402005-09-05 05:17:57 +00002897 : "member",
Lev Walkina00d6b32006-03-21 03:40:38 +00002898 yyval.a_expr->_lineno
Lev Walkinef625402005-09-05 05:17:57 +00002899 );
2900 }
Lev Walkin418298d2006-07-13 08:24:20 +00002901 }
2902 break;
2903
2904 case 119:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002905#line 1219 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002906 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002907 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002908 }
2909 break;
2910
2911 case 120:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002912#line 1222 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002913 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002914 yyval.a_expr = yyvsp[-1].a_expr;
2915 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2916 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2917 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002918 }
2919 break;
2920
2921 case 121:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002922#line 1228 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002923 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002924 yyval.a_expr = yyvsp[-1].a_expr;
2925 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2926 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2927 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002928 }
2929 break;
2930
2931 case 122:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002932#line 1234 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002933 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002934 yyval.a_expr = yyvsp[-1].a_expr;
2935 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2936 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2937 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002938 }
2939 break;
2940
2941 case 123:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002942#line 1240 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002943 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002944 yyval.a_expr = asn1p_expr_new(yylineno);
2945 checkmem(yyval.a_expr);
2946 yyval.a_expr->constraints = yyvsp[-4].a_constr;
2947 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2948 yyval.a_expr->meta_type = AMT_TYPE;
2949 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
2950 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
2951 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002952 }
2953 break;
2954
2955 case 124:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002956#line 1250 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002957 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002958 yyval.a_expr = asn1p_expr_new(yylineno);
2959 checkmem(yyval.a_expr);
2960 yyval.a_expr->constraints = yyvsp[-4].a_constr;
2961 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2962 yyval.a_expr->meta_type = AMT_TYPE;
2963 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
2964 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
2965 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002966 }
2967 break;
2968
2969 case 125:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002970#line 1260 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002971 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002972 yyval.a_expr = asn1p_expr_new(yylineno);
2973 checkmem(yyval.a_expr);
2974 yyval.a_expr->expr_type = ASN_TYPE_ANY;
2975 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002976 }
2977 break;
2978
2979 case 126:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002980#line 1266 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002981 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002982 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002983 yyval.a_expr = asn1p_expr_new(yylineno);
2984 checkmem(yyval.a_expr);
2985 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2986 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2987 yyvsp[0].tv_str, RLT_lowercase);
Lev Walkin070a52d2004-08-22 03:19:54 +00002988 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002989 yyval.a_expr->expr_type = ASN_TYPE_ANY;
2990 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002991 }
2992 break;
2993
2994 case 127:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002995#line 1277 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002996 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002997 yyval.a_expr = asn1p_expr_new(yylineno);
2998 checkmem(yyval.a_expr);
2999 yyval.a_expr->reference = yyvsp[0].a_ref;
3000 yyval.a_expr->expr_type = A1TC_INSTANCE;
3001 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003002 }
3003 break;
3004
3005 case 128:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003006#line 1292 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003007 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003008 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003009 yyval.a_ref = asn1p_ref_new(yylineno);
3010 checkmem(yyval.a_ref);
3011 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00003012 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003013 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003014 }
3015 break;
3016
3017 case 129:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003018#line 1300 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003019 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003020 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003021 yyval.a_ref = asn1p_ref_new(yylineno);
3022 checkmem(yyval.a_ref);
3023 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00003024 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003025 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3026 checkmem(ret == 0);
3027 free(yyvsp[-2].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003028 }
3029 break;
3030
3031 case 130:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003032#line 1310 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003033 {
Lev Walkin9d542d22006-03-14 16:31:37 +00003034 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003035 yyval.a_ref = asn1p_ref_new(yylineno);
3036 checkmem(yyval.a_ref);
3037 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00003038 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003039 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00003040 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003041 free(yyvsp[-2].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003042 }
3043 break;
3044
3045 case 131:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003046#line 1320 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003047 {
Lev Walkin9d542d22006-03-14 16:31:37 +00003048 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003049 yyval.a_ref = asn1p_ref_new(yylineno);
3050 checkmem(yyval.a_ref);
3051 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00003052 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003053 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkin9d542d22006-03-14 16:31:37 +00003054 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003055 free(yyvsp[-2].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003056 }
3057 break;
3058
3059 case 132:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003060#line 1330 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003061 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003062 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003063 yyval.a_ref = asn1p_ref_new(yylineno);
3064 checkmem(yyval.a_ref);
3065 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
3066 free(yyvsp[0].tv_str);
Lev Walkin9c974182004-09-15 11:59:51 +00003067 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003068 }
3069 break;
3070
3071 case 133:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003072#line 1338 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003073 {
Lev Walkin9c974182004-09-15 11:59:51 +00003074 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003075 yyval.a_ref = yyvsp[0].a_ref;
3076 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
3077 free(yyvsp[-2].tv_str);
Lev Walkinf15320b2004-06-03 03:38:44 +00003078 checkmem(ret == 0);
3079 /*
3080 * Move the last element infront.
3081 */
3082 {
3083 struct asn1p_ref_component_s tmp_comp;
Lev Walkina00d6b32006-03-21 03:40:38 +00003084 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
3085 memmove(&yyval.a_ref->components[1],
3086 &yyval.a_ref->components[0],
3087 sizeof(yyval.a_ref->components[0])
3088 * (yyval.a_ref->comp_count - 1));
3089 yyval.a_ref->components[0] = tmp_comp;
Lev Walkinf15320b2004-06-03 03:38:44 +00003090 }
Lev Walkin418298d2006-07-13 08:24:20 +00003091 }
3092 break;
3093
3094 case 134:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003095#line 1360 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003096 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003097 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003098 yyval.a_ref = asn1p_ref_new(yylineno);
3099 checkmem(yyval.a_ref);
3100 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
3101 free(yyvsp[0].a_refcomp.name);
Lev Walkinf15320b2004-06-03 03:38:44 +00003102 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003103 }
3104 break;
3105
3106 case 135:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003107#line 1368 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003108 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003109 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003110 yyval.a_ref = yyvsp[-2].a_ref;
3111 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
3112 free(yyvsp[0].a_refcomp.name);
Lev Walkinf15320b2004-06-03 03:38:44 +00003113 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003114 }
3115 break;
3116
3117 case 137:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003118#line 1381 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003119 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003120 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
3121 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00003122 }
3123 break;
3124
3125 case 138:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003126#line 1386 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003127 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003128 yyval.a_refcomp.lex_type = RLT_Amplowercase;
3129 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00003130 }
3131 break;
3132
3133 case 139:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003134#line 1395 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003135 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003136 yyval.a_ref = asn1p_ref_new(yylineno);
3137 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003138 }
3139 break;
3140
3141 case 140:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003142#line 1399 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003143 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003144 yyval.a_ref = yyval.a_ref;
3145 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003146 }
3147 break;
3148
3149 case 141:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003150#line 1403 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003151 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003152 yyval.a_ref = yyval.a_ref;
3153 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003154 }
3155 break;
3156
3157 case 142:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003158#line 1410 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003159 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003160 yyval.a_ref = asn1p_ref_new(yylineno);
3161 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
Lev Walkin418298d2006-07-13 08:24:20 +00003162 }
3163 break;
3164
3165 case 143:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003166#line 1430 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003167 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003168 yyval.a_expr = yyvsp[-2].a_expr;
3169 assert(yyval.a_expr->Identifier == NULL);
3170 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3171 yyval.a_expr->meta_type = AMT_VALUE;
3172 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003173 }
3174 break;
3175
3176 case 146:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003177#line 1442 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003178 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003179 yyval.a_value = asn1p_value_fromint(0);
3180 checkmem(yyval.a_value);
3181 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
3182 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
3183 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003184 }
3185 break;
3186
3187 case 147:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003188#line 1449 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003189 { asn1p_lexer_hack_push_opaque_state(); }
3190 break;
3191
3192 case 148:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003193#line 1449 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003194 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003195 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3196 checkmem(yyval.a_value);
3197 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin418298d2006-07-13 08:24:20 +00003198 }
3199 break;
3200
3201 case 149:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003202#line 1454 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003203 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003204 yyval.a_value = asn1p_value_fromint(0);
3205 checkmem(yyval.a_value);
3206 yyval.a_value->type = ATV_NULL;
Lev Walkin418298d2006-07-13 08:24:20 +00003207 }
3208 break;
3209
3210 case 150:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003211#line 1462 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003212 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003213 yyval.a_value = asn1p_value_fromint(0);
3214 checkmem(yyval.a_value);
3215 yyval.a_value->type = ATV_FALSE;
Lev Walkin418298d2006-07-13 08:24:20 +00003216 }
3217 break;
3218
3219 case 151:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003220#line 1467 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003221 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003222 yyval.a_value = asn1p_value_fromint(0);
3223 checkmem(yyval.a_value);
3224 yyval.a_value->type = ATV_TRUE;
Lev Walkin418298d2006-07-13 08:24:20 +00003225 }
3226 break;
3227
3228 case 152:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003229#line 1472 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003230 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003231 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
3232 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003233 }
3234 break;
3235
3236 case 153:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003237#line 1476 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003238 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003239 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
3240 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003241 }
3242 break;
3243
3244 case 154:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003245#line 1480 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003246 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003247 yyval.a_value = yyval.a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003248 }
3249 break;
3250
3251 case 155:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003252#line 1483 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003253 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00003254 yyval.a_value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003255 }
3256 break;
3257
3258 case 156:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003259#line 1489 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003260 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003261 asn1p_ref_t *ref;
3262 int ret;
3263 ref = asn1p_ref_new(yylineno);
3264 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003265 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003266 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003267 yyval.a_value = asn1p_value_fromref(ref, 0);
3268 checkmem(yyval.a_value);
3269 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003270 }
3271 break;
3272
3273 case 157:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003274#line 1500 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003275 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003276 asn1p_ref_t *ref;
3277 int ret;
3278 ref = asn1p_ref_new(yylineno);
3279 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003280 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00003281 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003282 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003283 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003284 yyval.a_value = asn1p_value_fromref(ref, 0);
3285 checkmem(yyval.a_value);
3286 free(yyvsp[-2].tv_str);
3287 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003288 }
3289 break;
3290
3291 case 158:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003292#line 1518 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003293 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003294 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3295 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003296 }
3297 break;
3298
3299 case 159:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003300#line 1522 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003301 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003302 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3303 checkmem(yyval.a_value);
3304 yyval.a_value->type = ATV_TUPLE;
Lev Walkin418298d2006-07-13 08:24:20 +00003305 }
3306 break;
3307
3308 case 160:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003309#line 1527 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003310 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003311 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3312 checkmem(yyval.a_value);
3313 yyval.a_value->type = ATV_QUADRUPLE;
Lev Walkin418298d2006-07-13 08:24:20 +00003314 }
3315 break;
3316
3317 case 161:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003318#line 1561 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003319 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003320 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
3321 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
3322 checkmem(yyval.tv_opaque.buf);
3323 yyval.tv_opaque.buf[0] = '{';
3324 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
3325 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
3326 free(yyvsp[0].tv_opaque.buf);
Lev Walkin418298d2006-07-13 08:24:20 +00003327 }
3328 break;
3329
3330 case 162:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003331#line 1570 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003332 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003333 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
Lev Walkinf15320b2004-06-03 03:38:44 +00003334 char *p = malloc(newsize + 1);
3335 checkmem(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00003336 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
3337 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00003338 p[newsize] = '\0';
Lev Walkina00d6b32006-03-21 03:40:38 +00003339 free(yyvsp[-1].tv_opaque.buf);
3340 free(yyvsp[0].tv_opaque.buf);
3341 yyval.tv_opaque.buf = p;
3342 yyval.tv_opaque.len = newsize;
Lev Walkin418298d2006-07-13 08:24:20 +00003343 }
3344 break;
3345
3346 case 163:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003347#line 1585 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003348 { yyval.a_type = ASN_BASIC_BOOLEAN; }
3349 break;
3350
3351 case 164:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003352#line 1586 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003353 { yyval.a_type = ASN_BASIC_NULL; }
3354 break;
3355
3356 case 165:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003357#line 1587 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003358 { yyval.a_type = ASN_BASIC_REAL; }
3359 break;
3360
3361 case 166:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003362#line 1588 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003363 { yyval.a_type = yyvsp[0].a_type; }
3364 break;
3365
3366 case 167:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003367#line 1589 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003368 { yyval.a_type = ASN_BASIC_OCTET_STRING; }
3369 break;
3370
3371 case 168:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003372#line 1590 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003373 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
3374 break;
3375
3376 case 169:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003377#line 1591 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003378 { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
3379 break;
3380
3381 case 170:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003382#line 1592 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003383 { yyval.a_type = ASN_BASIC_EXTERNAL; }
3384 break;
3385
3386 case 171:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003387#line 1593 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003388 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
3389 break;
3390
3391 case 172:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003392#line 1594 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003393 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
3394 break;
3395
3396 case 173:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003397#line 1595 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003398 { yyval.a_type = ASN_BASIC_UTCTime; }
3399 break;
3400
3401 case 174:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003402#line 1596 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003403 { yyval.a_type = ASN_BASIC_GeneralizedTime; }
3404 break;
3405
3406 case 175:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003407#line 1597 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003408 { yyval.a_type = yyvsp[0].a_type; }
3409 break;
3410
3411 case 176:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003412#line 1604 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003413 { yyval.a_type = ASN_BASIC_INTEGER; }
3414 break;
3415
3416 case 177:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003417#line 1605 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003418 { yyval.a_type = ASN_BASIC_ENUMERATED; }
3419 break;
3420
3421 case 178:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003422#line 1606 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003423 { yyval.a_type = ASN_BASIC_BIT_STRING; }
3424 break;
3425
3426 case 179:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003427#line 1610 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003428 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003429 yyval.a_expr = asn1p_expr_new(yylineno);
3430 checkmem(yyval.a_expr);
3431 yyval.a_expr->expr_type = yyvsp[0].a_type;
3432 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003433 }
3434 break;
3435
3436 case 180:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003437#line 1616 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003438 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003439 if(yyvsp[0].a_expr) {
3440 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinf15320b2004-06-03 03:38:44 +00003441 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00003442 yyval.a_expr = asn1p_expr_new(yylineno);
3443 checkmem(yyval.a_expr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003444 }
Lev Walkina00d6b32006-03-21 03:40:38 +00003445 yyval.a_expr->expr_type = yyvsp[-1].a_type;
3446 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003447 }
3448 break;
3449
3450 case 181:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003451#line 1629 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003452 { yyval.a_type = ASN_STRING_BMPString; }
3453 break;
3454
3455 case 182:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003456#line 1630 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003457 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003458 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00003459 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003460 }
3461 break;
3462
3463 case 183:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003464#line 1634 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003465 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003466 yyval.a_type = ASN_STRING_GraphicString;
Lev Walkin9c974182004-09-15 11:59:51 +00003467 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003468 }
3469 break;
3470
3471 case 184:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003472#line 1638 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003473 { yyval.a_type = ASN_STRING_IA5String; }
3474 break;
3475
3476 case 185:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003477#line 1639 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003478 { yyval.a_type = ASN_STRING_ISO646String; }
3479 break;
3480
3481 case 186:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003482#line 1640 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003483 { yyval.a_type = ASN_STRING_NumericString; }
3484 break;
3485
3486 case 187:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003487#line 1641 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003488 { yyval.a_type = ASN_STRING_PrintableString; }
3489 break;
3490
3491 case 188:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003492#line 1642 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003493 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003494 yyval.a_type = ASN_STRING_T61String;
Lev Walkin9c974182004-09-15 11:59:51 +00003495 fprintf(stderr, "WARNING: T61String is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003496 }
3497 break;
3498
3499 case 189:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003500#line 1646 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003501 { yyval.a_type = ASN_STRING_TeletexString; }
3502 break;
3503
3504 case 190:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003505#line 1647 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003506 { yyval.a_type = ASN_STRING_UniversalString; }
3507 break;
3508
3509 case 191:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003510#line 1648 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003511 { yyval.a_type = ASN_STRING_UTF8String; }
3512 break;
3513
3514 case 192:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003515#line 1649 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003516 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003517 yyval.a_type = ASN_STRING_VideotexString;
Lev Walkin9c974182004-09-15 11:59:51 +00003518 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003519 }
3520 break;
3521
3522 case 193:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003523#line 1653 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003524 { yyval.a_type = ASN_STRING_VisibleString; }
3525 break;
3526
3527 case 194:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003528#line 1654 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003529 { yyval.a_type = ASN_STRING_ObjectDescriptor; }
3530 break;
3531
3532 case 200:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003533#line 1666 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003534 { yyval.a_constr = 0; }
3535 break;
3536
3537 case 201:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003538#line 1667 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003539 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003540 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003541 }
3542 break;
3543
3544 case 202:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003545#line 1673 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003546 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003547 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003548 }
3549 break;
3550
3551 case 203:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003552#line 1676 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003553 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003554 /*
3555 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00003556 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00003557 */
Lev Walkina00d6b32006-03-21 03:40:38 +00003558 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003559 }
3560 break;
3561
3562 case 204:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003563#line 1686 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003564 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003565 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003566 }
3567 break;
3568
3569 case 205:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003570#line 1689 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003571 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003572 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003573 }
3574 break;
3575
3576 case 206:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003577#line 1695 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003578 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00003579 yyval.a_constr = asn1p_constraint_new(yylineno);
3580 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin418298d2006-07-13 08:24:20 +00003581 }
3582 break;
3583
3584 case 207:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003585#line 1699 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003586 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003587 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003588 }
3589 break;
3590
3591 case 208:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003592#line 1702 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003593 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003594 asn1p_constraint_t *ct;
3595 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003596 ct->type = ACT_EL_EXT;
Lev Walkina00d6b32006-03-21 03:40:38 +00003597 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin418298d2006-07-13 08:24:20 +00003598 }
3599 break;
3600
3601 case 209:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003602#line 1708 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003603 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003604 asn1p_constraint_t *ct;
3605 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003606 ct->type = ACT_EL_EXT;
Lev Walkina00d6b32006-03-21 03:40:38 +00003607 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
3608 ct = yyval.a_constr;
3609 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003610 }
3611 break;
3612
3613 case 210:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003614#line 1719 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003615 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003616 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003617 }
3618 break;
3619
3620 case 211:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003621#line 1722 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003622 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003623 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003624 }
3625 break;
3626
3627 case 212:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003628#line 1725 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003629 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003630 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003631 }
3632 break;
3633
3634 case 213:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003635#line 1728 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003636 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003637 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003638 }
3639 break;
3640
3641 case 214:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003642#line 1731 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003643 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003644 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003645 }
3646 break;
3647
3648 case 215:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003649#line 1737 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003650 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003651 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003652 yyval.a_constr = asn1p_constraint_new(yylineno);
3653 checkmem(yyval.a_constr);
3654 yyval.a_constr->type = yyvsp[-3].a_ctype;
3655 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003656 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003657 }
3658 break;
3659
3660 case 216:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003661#line 1745 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003662 {
Lev Walkinf59d0752004-08-18 04:59:12 +00003663 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003664 yyval.a_constr = asn1p_constraint_new(yylineno);
3665 checkmem(yyval.a_constr);
3666 yyval.a_constr->type = ACT_CA_SET;
3667 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkinf59d0752004-08-18 04:59:12 +00003668 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003669 }
3670 break;
3671
3672 case 217:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003673#line 1753 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003674 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003675 yyval.a_constr = asn1p_constraint_new(yylineno);
3676 checkmem(yyval.a_constr);
3677 yyval.a_constr->type = ACT_EL_VALUE;
3678 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003679 }
3680 break;
3681
3682 case 218:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003683#line 1759 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003684 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003685 yyval.a_constr = asn1p_constraint_new(yylineno);
3686 checkmem(yyval.a_constr);
3687 yyval.a_constr->type = ACT_EL_TYPE;
3688 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003689 }
3690 break;
3691
3692 case 219:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003693#line 1765 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003694 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00003695 yyval.a_constr = asn1p_constraint_new(yylineno);
3696 checkmem(yyval.a_constr);
3697 yyval.a_constr->type = yyvsp[-1].a_ctype;
3698 yyval.a_constr->range_start = yyvsp[-2].a_value;
3699 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003700 }
3701 break;
3702
3703 case 220:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003704#line 1772 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003705 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00003706 yyval.a_constr = asn1p_constraint_new(yylineno);
3707 checkmem(yyval.a_constr);
3708 yyval.a_constr->type = yyvsp[-1].a_ctype;
3709 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3710 yyval.a_constr->range_stop = yyvsp[0].a_value;
3711 yyval.a_constr->range_start->type = ATV_MIN;
Lev Walkin418298d2006-07-13 08:24:20 +00003712 }
3713 break;
3714
3715 case 221:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003716#line 1780 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003717 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00003718 yyval.a_constr = asn1p_constraint_new(yylineno);
3719 checkmem(yyval.a_constr);
3720 yyval.a_constr->type = yyvsp[-1].a_ctype;
3721 yyval.a_constr->range_start = yyvsp[-2].a_value;
3722 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3723 yyval.a_constr->range_stop->type = ATV_MAX;
Lev Walkin418298d2006-07-13 08:24:20 +00003724 }
3725 break;
3726
3727 case 222:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003728#line 1788 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003729 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00003730 yyval.a_constr = asn1p_constraint_new(yylineno);
3731 checkmem(yyval.a_constr);
3732 yyval.a_constr->type = yyvsp[-1].a_ctype;
3733 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3734 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3735 yyval.a_constr->range_start->type = ATV_MIN;
3736 yyval.a_constr->range_stop->type = ATV_MAX;
Lev Walkin418298d2006-07-13 08:24:20 +00003737 }
3738 break;
3739
3740 case 223:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003741#line 1797 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003742 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00003743 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003744 }
3745 break;
3746
3747 case 224:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003748#line 1800 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003749 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00003750 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003751 }
3752 break;
3753
3754 case 225:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003755#line 1804 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003756 { asn1p_lexer_hack_push_opaque_state(); }
3757 break;
3758
3759 case 226:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003760#line 1804 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003761 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003762 yyval.a_constr = asn1p_constraint_new(yylineno);
3763 checkmem(yyval.a_constr);
3764 yyval.a_constr->type = ACT_CT_CTDBY;
3765 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3766 checkmem(yyval.a_constr->value);
3767 yyval.a_constr->value->type = ATV_UNPARSED;
Lev Walkin418298d2006-07-13 08:24:20 +00003768 }
3769 break;
3770
3771 case 227:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003772#line 1815 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003773 { yyval.a_ctype = ACT_EL_RANGE; }
3774 break;
3775
3776 case 228:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003777#line 1816 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003778 { yyval.a_ctype = ACT_EL_RLRANGE; }
3779 break;
3780
3781 case 229:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003782#line 1817 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003783 { yyval.a_ctype = ACT_EL_LLRANGE; }
3784 break;
3785
3786 case 230:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003787#line 1818 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003788 { yyval.a_ctype = ACT_EL_ULRANGE; }
3789 break;
3790
3791 case 231:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003792#line 1822 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003793 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003794 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin418298d2006-07-13 08:24:20 +00003795 }
3796 break;
3797
3798 case 232:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003799#line 1825 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003800 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003801 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin418298d2006-07-13 08:24:20 +00003802 }
3803 break;
3804
3805 case 233:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003806#line 1831 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003807 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003808 yyval.a_value = asn1p_value_fromint(0);
3809 checkmem(yyval.a_value);
3810 yyval.a_value->type = ATV_FALSE;
Lev Walkin418298d2006-07-13 08:24:20 +00003811 }
3812 break;
3813
3814 case 234:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003815#line 1836 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003816 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003817 yyval.a_value = asn1p_value_fromint(1);
3818 checkmem(yyval.a_value);
3819 yyval.a_value->type = ATV_TRUE;
Lev Walkin418298d2006-07-13 08:24:20 +00003820 }
3821 break;
3822
3823 case 235:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003824#line 1841 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003825 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003826 yyval.a_value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003827 }
3828 break;
3829
3830 case 236:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003831#line 1844 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003832 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00003833 yyval.a_value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003834 }
3835 break;
3836
3837 case 237:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003838#line 1847 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003839 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003840 asn1p_ref_t *ref;
3841 int ret;
3842 ref = asn1p_ref_new(yylineno);
3843 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003844 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003845 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003846 yyval.a_value = asn1p_value_fromref(ref, 0);
3847 checkmem(yyval.a_value);
3848 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003849 }
3850 break;
3851
3852 case 238:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003853#line 1861 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003854 {
Lev Walkinc8092cb2005-02-18 16:34:21 +00003855 asn1p_ref_t *ref;
3856 int ret;
3857 ref = asn1p_ref_new(yylineno);
3858 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003859 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003860 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003861 yyval.a_value = asn1p_value_fromref(ref, 0);
3862 checkmem(yyval.a_value);
3863 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003864 }
3865 break;
3866
3867 case 239:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003868#line 1875 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003869 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003870 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003871 }
3872 break;
3873
3874 case 240:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003875#line 1878 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003876 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003877 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003878 }
3879 break;
3880
3881 case 241:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003882#line 1884 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003883 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003884 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003885 }
3886 break;
3887
3888 case 242:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003889#line 1887 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003890 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003891 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003892 }
3893 break;
3894
3895 case 243:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003896#line 1893 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003897 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003898 yyval.a_constr = asn1p_constraint_new(yylineno);
3899 checkmem(yyval.a_constr);
3900 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin418298d2006-07-13 08:24:20 +00003901 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 1);
3902 }
3903 break;
3904
3905 case 244:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003906#line 1899 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003907 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003908 yyval.a_constr = asn1p_constraint_new(yylineno);
3909 checkmem(yyval.a_constr);
3910 yyval.a_constr->type = ACT_EL_VALUE;
3911 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3912 yyval.a_constr->presence = yyvsp[0].a_pres;
3913 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003914 }
3915 break;
3916
3917 case 245:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003918#line 1913 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003919 { yyval.a_pres = ACPRES_DEFAULT; }
3920 break;
3921
3922 case 246:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003923#line 1914 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003924 { yyval.a_pres = yyvsp[0].a_pres; }
3925 break;
3926
3927 case 247:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003928#line 1918 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003929 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003930 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin418298d2006-07-13 08:24:20 +00003931 }
3932 break;
3933
3934 case 248:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003935#line 1921 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003936 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003937 yyval.a_pres = ACPRES_ABSENT;
Lev Walkin418298d2006-07-13 08:24:20 +00003938 }
3939 break;
3940
3941 case 249:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003942#line 1924 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003943 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003944 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkin418298d2006-07-13 08:24:20 +00003945 }
3946 break;
3947
3948 case 250:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003949#line 1930 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003950 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003951 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003952 }
3953 break;
3954
3955 case 251:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003956#line 1933 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003957 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00003958 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003959 }
3960 break;
3961
3962 case 252:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003963#line 1942 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003964 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003965 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3966 asn1p_constraint_t *ct;
3967 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003968 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003969 checkmem(ret == 0);
3970 ct = asn1p_constraint_new(yylineno);
Lev Walkina00d6b32006-03-21 03:40:38 +00003971 checkmem(yyval.a_constr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003972 ct->type = ACT_EL_VALUE;
3973 ct->value = asn1p_value_fromref(ref, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003974 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003975 }
3976 break;
3977
3978 case 253:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003979#line 1957 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003980 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003981 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003982 }
3983 break;
3984
3985 case 254:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003986#line 1963 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003987 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003988 yyval.a_constr = asn1p_constraint_new(yylineno);
3989 checkmem(yyval.a_constr);
3990 yyval.a_constr->type = ACT_EL_VALUE;
3991 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003992 }
3993 break;
3994
3995 case 255:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003996#line 1969 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003997 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003998 asn1p_constraint_t *ct;
3999 ct = asn1p_constraint_new(yylineno);
4000 checkmem(ct);
4001 ct->type = ACT_EL_VALUE;
Lev Walkina00d6b32006-03-21 03:40:38 +00004002 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
4003 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin418298d2006-07-13 08:24:20 +00004004 }
4005 break;
4006
4007 case 256:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004008#line 1983 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004009 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004010 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
Lev Walkinf15320b2004-06-03 03:38:44 +00004011 int ret;
4012 *p = '@';
Lev Walkina00d6b32006-03-21 03:40:38 +00004013 strcpy(p + 1, yyvsp[0].tv_str);
4014 yyval.a_ref = asn1p_ref_new(yylineno);
4015 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00004016 checkmem(ret == 0);
4017 free(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00004018 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00004019 }
4020 break;
4021
4022 case 257:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004023#line 1994 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004024 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004025 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
Lev Walkinf15320b2004-06-03 03:38:44 +00004026 int ret;
4027 p[0] = '@';
4028 p[1] = '.';
Lev Walkina00d6b32006-03-21 03:40:38 +00004029 strcpy(p + 2, yyvsp[0].tv_str);
4030 yyval.a_ref = asn1p_ref_new(yylineno);
4031 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00004032 checkmem(ret == 0);
4033 free(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00004034 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00004035 }
4036 break;
4037
4038 case 258:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004039#line 2010 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004040 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004041 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004042 }
4043 break;
4044
4045 case 259:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004046#line 2013 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004047 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004048 int l1 = strlen(yyvsp[-2].tv_str);
4049 int l3 = strlen(yyvsp[0].tv_str);
4050 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
4051 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
4052 yyval.tv_str[l1] = '.';
4053 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
4054 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin418298d2006-07-13 08:24:20 +00004055 }
4056 break;
4057
4058 case 260:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004059#line 2031 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004060 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004061 yyval.a_marker.flags = EM_NOMARK;
4062 yyval.a_marker.default_value = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00004063 }
4064 break;
4065
4066 case 261:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004067#line 2035 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004068 { yyval.a_marker = yyvsp[0].a_marker; }
4069 break;
4070
4071 case 262:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004072#line 2039 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004073 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004074 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
4075 yyval.a_marker.default_value = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00004076 }
4077 break;
4078
4079 case 263:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004080#line 2043 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004081 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004082 yyval.a_marker.flags = EM_DEFAULT;
4083 yyval.a_marker.default_value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004084 }
4085 break;
4086
4087 case 264:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004088#line 2066 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004089 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004090 yyval.a_expr = asn1p_expr_new(yylineno);
4091 checkmem(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004092 }
4093 break;
4094
4095 case 265:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004096#line 2070 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004097 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004098 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00004099 }
4100 break;
4101
4102 case 266:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004103#line 2076 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004104 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004105 yyval.a_expr = asn1p_expr_new(yylineno);
4106 checkmem(yyval.a_expr);
4107 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004108 }
4109 break;
4110
4111 case 267:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004112#line 2081 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004113 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004114 yyval.a_expr = yyvsp[-2].a_expr;
4115 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004116 }
4117 break;
4118
4119 case 268:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004120#line 2088 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004121 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004122 yyval.a_expr = asn1p_expr_new(yylineno);
4123 checkmem(yyval.a_expr);
4124 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4125 yyval.a_expr->meta_type = AMT_VALUE;
4126 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004127 }
4128 break;
4129
4130 case 269:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004131#line 2095 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004132 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004133 yyval.a_expr = asn1p_expr_new(yylineno);
4134 checkmem(yyval.a_expr);
4135 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4136 yyval.a_expr->meta_type = AMT_VALUE;
4137 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4138 yyval.a_expr->value = yyvsp[-1].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004139 }
4140 break;
4141
4142 case 270:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004143#line 2103 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004144 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00004145 yyval.a_expr = asn1p_expr_new(yylineno);
4146 checkmem(yyval.a_expr);
4147 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4148 yyval.a_expr->meta_type = AMT_VALUE;
4149 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4150 yyval.a_expr->value = yyvsp[-1].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004151 }
4152 break;
4153
4154 case 271:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004155#line 2111 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004156 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004157 yyval.a_expr = asn1p_expr_new(yylineno);
4158 checkmem(yyval.a_expr);
4159 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4160 yyval.a_expr->meta_type = AMT_VALUE;
4161 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004162 }
4163 break;
4164
4165 case 272:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004166#line 2118 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004167 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004168 yyval.a_expr = asn1p_expr_new(yylineno);
4169 checkmem(yyval.a_expr);
4170 yyval.a_expr->Identifier = strdup("...");
4171 checkmem(yyval.a_expr->Identifier);
4172 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
4173 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin418298d2006-07-13 08:24:20 +00004174 }
4175 break;
4176
4177 case 273:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004178#line 2129 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004179 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004180 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4181 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00004182 }
4183 break;
4184
4185 case 274:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004186#line 2133 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004187 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00004188 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4189 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00004190 }
4191 break;
4192
4193 case 275:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004194#line 2164 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004195 { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); }
4196 break;
4197
4198 case 276:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004199#line 2165 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004200 { yyval.a_tag = yyvsp[0].a_tag; }
4201 break;
4202
4203 case 277:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004204#line 2169 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004205 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004206 yyval.a_tag = yyvsp[-1].a_tag;
4207 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin418298d2006-07-13 08:24:20 +00004208 }
4209 break;
4210
4211 case 278:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004212#line 2176 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004213 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004214 yyval.a_tag = yyvsp[-2].a_tag;
4215 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin418298d2006-07-13 08:24:20 +00004216 }
4217 break;
4218
4219 case 279:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004220#line 2182 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004221 { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; }
4222 break;
4223
4224 case 280:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004225#line 2183 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004226 { yyval.a_tag.tag_class = TC_UNIVERSAL; }
4227 break;
4228
4229 case 281:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004230#line 2184 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004231 { yyval.a_tag.tag_class = TC_APPLICATION; }
4232 break;
4233
4234 case 282:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004235#line 2185 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004236 { yyval.a_tag.tag_class = TC_PRIVATE; }
4237 break;
4238
4239 case 283:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004240#line 2189 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004241 { yyval.a_tag.tag_mode = TM_DEFAULT; }
4242 break;
4243
4244 case 284:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004245#line 2190 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004246 { yyval.a_tag.tag_mode = TM_IMPLICIT; }
4247 break;
4248
4249 case 285:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004250#line 2191 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004251 { yyval.a_tag.tag_mode = TM_EXPLICIT; }
4252 break;
4253
4254 case 286:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004255#line 2195 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004256 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00004257 checkmem(yyvsp[0].tv_str);
Lev Walkina00d6b32006-03-21 03:40:38 +00004258 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004259 }
4260 break;
4261
4262 case 287:
Lev Walkin557f27d2006-03-21 07:46:48 +00004263#line 2199 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004264 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004265 checkmem(yyvsp[0].tv_str);
4266 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004267 }
4268 break;
4269
4270 case 288:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004271#line 2207 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004272 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00004273 checkmem(yyvsp[0].tv_str);
4274 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004275 }
4276 break;
4277
4278 case 289:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004279#line 2214 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004280 { yyval.tv_str = 0; }
4281 break;
4282
4283 case 290:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004284#line 2215 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004285 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00004286 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004287 }
4288 break;
4289
4290 case 291:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004291#line 2221 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004292 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00004293 checkmem(yyvsp[0].tv_str);
4294 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004295 }
4296 break;
4297
4298
4299 }
4300
4301/* Line 1016 of /usr/local/share/bison/yacc.c. */
4302#line 4303 "asn1p_y.c"
Lev Walkinf15320b2004-06-03 03:38:44 +00004303
4304 yyvsp -= yylen;
4305 yyssp -= yylen;
Lev Walkinf15320b2004-06-03 03:38:44 +00004306
Lev Walkin418298d2006-07-13 08:24:20 +00004307
4308#if YYDEBUG
Lev Walkina00d6b32006-03-21 03:40:38 +00004309 if (yydebug)
4310 {
Lev Walkin418298d2006-07-13 08:24:20 +00004311 short *yyssp1 = yyss - 1;
4312 YYFPRINTF (stderr, "state stack now");
4313 while (yyssp1 != yyssp)
4314 YYFPRINTF (stderr, " %d", *++yyssp1);
4315 YYFPRINTF (stderr, "\n");
Lev Walkina00d6b32006-03-21 03:40:38 +00004316 }
4317#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00004318
4319 *++yyvsp = yyval;
4320
Lev Walkinf15320b2004-06-03 03:38:44 +00004321
Lev Walkin418298d2006-07-13 08:24:20 +00004322 /* Now `shift' the result of the reduction. Determine what state
4323 that goes to, based on the state we popped back to and the rule
4324 number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00004325
4326 yyn = yyr1[yyn];
4327
Lev Walkin418298d2006-07-13 08:24:20 +00004328 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
4329 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00004330 yystate = yytable[yystate];
4331 else
Lev Walkin418298d2006-07-13 08:24:20 +00004332 yystate = yydefgoto[yyn - YYNTOKENS];
Lev Walkinf15320b2004-06-03 03:38:44 +00004333
4334 goto yynewstate;
4335
Lev Walkinf15320b2004-06-03 03:38:44 +00004336
Lev Walkin418298d2006-07-13 08:24:20 +00004337/*------------------------------------.
4338| yyerrlab -- here on detecting error |
4339`------------------------------------*/
4340yyerrlab:
4341 /* If not already recovering from an error, report this error. */
4342 if (!yyerrstatus)
Lev Walkinf15320b2004-06-03 03:38:44 +00004343 {
4344 ++yynerrs;
Lev Walkin418298d2006-07-13 08:24:20 +00004345#if YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00004346 yyn = yypact[yystate];
4347
Lev Walkin418298d2006-07-13 08:24:20 +00004348 if (YYPACT_NINF < yyn && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00004349 {
Lev Walkin418298d2006-07-13 08:24:20 +00004350 YYSIZE_T yysize = 0;
4351 int yytype = YYTRANSLATE (yychar);
4352 char *yymsg;
4353 int yyx, yycount;
Lev Walkinf15320b2004-06-03 03:38:44 +00004354
Lev Walkin418298d2006-07-13 08:24:20 +00004355 yycount = 0;
4356 /* Start YYX at -YYN if negative to avoid negative indexes in
4357 YYCHECK. */
4358 for (yyx = yyn < 0 ? -yyn : 0;
4359 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
4360 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
4361 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
4362 yysize += yystrlen ("parse error, unexpected ") + 1;
4363 yysize += yystrlen (yytname[yytype]);
4364 yymsg = (char *) YYSTACK_ALLOC (yysize);
4365 if (yymsg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00004366 {
Lev Walkin418298d2006-07-13 08:24:20 +00004367 char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
4368 yyp = yystpcpy (yyp, yytname[yytype]);
Lev Walkina00d6b32006-03-21 03:40:38 +00004369
Lev Walkin418298d2006-07-13 08:24:20 +00004370 if (yycount < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00004371 {
Lev Walkin418298d2006-07-13 08:24:20 +00004372 yycount = 0;
4373 for (yyx = yyn < 0 ? -yyn : 0;
4374 yyx < (int) (sizeof (yytname) / sizeof (char *));
4375 yyx++)
4376 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
Lev Walkina00d6b32006-03-21 03:40:38 +00004377 {
Lev Walkin418298d2006-07-13 08:24:20 +00004378 const char *yyq = ! yycount ? ", expecting " : " or ";
4379 yyp = yystpcpy (yyp, yyq);
4380 yyp = yystpcpy (yyp, yytname[yyx]);
4381 yycount++;
Lev Walkina00d6b32006-03-21 03:40:38 +00004382 }
Lev Walkinf15320b2004-06-03 03:38:44 +00004383 }
Lev Walkin418298d2006-07-13 08:24:20 +00004384 yyerror (yymsg);
4385 YYSTACK_FREE (yymsg);
Lev Walkinf15320b2004-06-03 03:38:44 +00004386 }
4387 else
Lev Walkin418298d2006-07-13 08:24:20 +00004388 yyerror ("parse error; also virtual memory exhausted");
Lev Walkinf15320b2004-06-03 03:38:44 +00004389 }
4390 else
4391#endif /* YYERROR_VERBOSE */
Lev Walkin418298d2006-07-13 08:24:20 +00004392 yyerror ("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00004393 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004394 goto yyerrlab1;
Lev Walkinf15320b2004-06-03 03:38:44 +00004395
Lev Walkin418298d2006-07-13 08:24:20 +00004396
4397/*----------------------------------------------------.
4398| yyerrlab1 -- error raised explicitly by an action. |
4399`----------------------------------------------------*/
4400yyerrlab1:
Lev Walkinf15320b2004-06-03 03:38:44 +00004401 if (yyerrstatus == 3)
4402 {
Lev Walkin418298d2006-07-13 08:24:20 +00004403 /* If just tried and failed to reuse lookahead token after an
4404 error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00004405
Lev Walkin418298d2006-07-13 08:24:20 +00004406 /* Return failure if at end of input. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004407 if (yychar == YYEOF)
Lev Walkin418298d2006-07-13 08:24:20 +00004408 {
4409 /* Pop the error token. */
4410 YYPOPSTACK;
4411 /* Pop the rest of the stack. */
4412 while (yyssp > yyss)
4413 {
4414 YYDPRINTF ((stderr, "Error: popping "));
4415 YYDSYMPRINT ((stderr,
4416 yystos[*yyssp],
4417 *yyvsp));
4418 YYDPRINTF ((stderr, "\n"));
4419 yydestruct (yystos[*yyssp], *yyvsp);
4420 YYPOPSTACK;
4421 }
4422 YYABORT;
4423 }
Lev Walkinf15320b2004-06-03 03:38:44 +00004424
Lev Walkin418298d2006-07-13 08:24:20 +00004425 YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
4426 yychar, yytname[yychar1]));
4427 yydestruct (yychar1, yylval);
Lev Walkina00d6b32006-03-21 03:40:38 +00004428 yychar = YYEMPTY;
Lev Walkinf15320b2004-06-03 03:38:44 +00004429 }
4430
Lev Walkin418298d2006-07-13 08:24:20 +00004431 /* Else will try to reuse lookahead token after shifting the error
4432 token. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004433
Lev Walkin418298d2006-07-13 08:24:20 +00004434 yyerrstatus = 3; /* Each real token shifted decrements this. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004435
Lev Walkin418298d2006-07-13 08:24:20 +00004436 for (;;)
Lev Walkina00d6b32006-03-21 03:40:38 +00004437 {
Lev Walkin418298d2006-07-13 08:24:20 +00004438 yyn = yypact[yystate];
4439 if (yyn != YYPACT_NINF)
4440 {
4441 yyn += YYTERROR;
4442 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
4443 {
4444 yyn = yytable[yyn];
4445 if (0 < yyn)
4446 break;
4447 }
4448 }
4449
4450 /* Pop the current state because it cannot handle the error token. */
4451 if (yyssp == yyss)
4452 YYABORT;
4453
4454 YYDPRINTF ((stderr, "Error: popping "));
4455 YYDSYMPRINT ((stderr,
4456 yystos[*yyssp], *yyvsp));
4457 YYDPRINTF ((stderr, "\n"));
4458
4459 yydestruct (yystos[yystate], *yyvsp);
4460 yyvsp--;
4461 yystate = *--yyssp;
4462
4463
4464#if YYDEBUG
4465 if (yydebug)
4466 {
4467 short *yyssp1 = yyss - 1;
4468 YYFPRINTF (stderr, "Error: state stack now");
4469 while (yyssp1 != yyssp)
4470 YYFPRINTF (stderr, " %d", *++yyssp1);
4471 YYFPRINTF (stderr, "\n");
4472 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004473#endif
Lev Walkina00d6b32006-03-21 03:40:38 +00004474 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004475
Lev Walkinf15320b2004-06-03 03:38:44 +00004476 if (yyn == YYFINAL)
4477 YYACCEPT;
4478
Lev Walkin418298d2006-07-13 08:24:20 +00004479 YYDPRINTF ((stderr, "Shifting error token, "));
Lev Walkina00d6b32006-03-21 03:40:38 +00004480
Lev Walkinf15320b2004-06-03 03:38:44 +00004481 *++yyvsp = yylval;
Lev Walkin418298d2006-07-13 08:24:20 +00004482
Lev Walkinf15320b2004-06-03 03:38:44 +00004483
4484 yystate = yyn;
4485 goto yynewstate;
4486
Lev Walkina00d6b32006-03-21 03:40:38 +00004487
Lev Walkin418298d2006-07-13 08:24:20 +00004488/*-------------------------------------.
4489| yyacceptlab -- YYACCEPT comes here. |
4490`-------------------------------------*/
4491yyacceptlab:
4492 yyresult = 0;
4493 goto yyreturn;
4494
4495/*-----------------------------------.
4496| yyabortlab -- YYABORT comes here. |
4497`-----------------------------------*/
4498yyabortlab:
4499 yyresult = 1;
4500 goto yyreturn;
4501
4502#ifndef yyoverflow
4503/*----------------------------------------------.
4504| yyoverflowlab -- parser overflow comes here. |
4505`----------------------------------------------*/
4506yyoverflowlab:
4507 yyerror ("parser stack overflow");
4508 yyresult = 2;
4509 /* Fall through. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004510#endif
Lev Walkin418298d2006-07-13 08:24:20 +00004511
4512yyreturn:
4513#ifndef yyoverflow
4514 if (yyss != yyssa)
4515 YYSTACK_FREE (yyss);
4516#endif
4517 return yyresult;
Lev Walkinf15320b2004-06-03 03:38:44 +00004518}
Lev Walkin418298d2006-07-13 08:24:20 +00004519
4520
Lev Walkin5045dfa2006-03-21 09:41:28 +00004521#line 2227 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00004522
4523
4524
4525/*
4526 * Convert Xstring ('0101'B or '5'H) to the binary vector.
4527 */
4528static asn1p_value_t *
4529_convert_bitstring2binary(char *str, int base) {
4530 asn1p_value_t *val;
4531 int slen;
4532 int memlen;
4533 int baselen;
4534 int bits;
4535 uint8_t *binary_vector;
4536 uint8_t *bv_ptr;
4537 uint8_t cur_val;
4538
4539 assert(str);
4540 assert(str[0] == '\'');
4541
4542 switch(base) {
4543 case 'B':
4544 baselen = 1;
4545 break;
4546 case 'H':
4547 baselen = 4;
4548 break;
4549 default:
4550 assert(base == 'B' || base == 'H');
4551 errno = EINVAL;
4552 return NULL;
4553 }
4554
4555 slen = strlen(str);
4556 assert(str[slen - 1] == base);
4557 assert(str[slen - 2] == '\'');
4558
4559 memlen = slen / (8 / baselen); /* Conservative estimate */
4560
4561 bv_ptr = binary_vector = malloc(memlen + 1);
4562 if(bv_ptr == NULL)
4563 /* ENOMEM */
4564 return NULL;
4565
4566 cur_val = 0;
4567 bits = 0;
4568 while(*(++str) != '\'') {
4569 switch(baselen) {
4570 case 1:
4571 switch(*str) {
4572 case '1':
4573 cur_val |= 1 << (7 - (bits % 8));
4574 case '0':
4575 break;
4576 default:
4577 assert(!"_y UNREACH1");
4578 case ' ': case '\r': case '\n':
4579 continue;
4580 }
4581 break;
4582 case 4:
4583 switch(*str) {
4584 case '0': case '1': case '2': case '3': case '4':
4585 case '5': case '6': case '7': case '8': case '9':
4586 cur_val |= (*str - '0') << (4 - (bits % 8));
4587 break;
4588 case 'A': case 'B': case 'C':
4589 case 'D': case 'E': case 'F':
4590 cur_val |= ((*str - 'A') + 10)
4591 << (4 - (bits % 8));
4592 break;
4593 default:
4594 assert(!"_y UNREACH2");
4595 case ' ': case '\r': case '\n':
4596 continue;
4597 }
4598 break;
4599 }
4600
4601 bits += baselen;
4602 if((bits % 8) == 0) {
4603 *bv_ptr++ = cur_val;
4604 cur_val = 0;
4605 }
4606 }
4607
4608 *bv_ptr = cur_val;
4609 assert((bv_ptr - binary_vector) <= memlen);
4610
4611 val = asn1p_value_frombits(binary_vector, bits, 0);
4612 if(val == NULL) {
4613 free(binary_vector);
4614 }
4615
4616 return val;
4617}
4618
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00004619/*
4620 * For unnamed types (used in old X.208 compliant modules)
4621 * generate some sort of interim names, to not to force human being to fix
4622 * the specification's compliance to modern ASN.1 standards.
4623 */
4624static void
4625_fixup_anonymous_identifier(asn1p_expr_t *expr) {
4626 char *p;
4627 assert(expr->Identifier == 0);
4628
4629 /*
4630 * Try to figure out the type name
4631 * without going too much into details
4632 */
4633 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
4634 if(expr->reference && expr->reference->comp_count > 0)
4635 expr->Identifier = expr->reference->components[0].name;
4636
4637 fprintf(stderr,
4638 "WARNING: Line %d: expected lower-case member identifier, "
4639 "found an unnamed %s.\n"
4640 "WARNING: Obsolete X.208 syntax detected, "
4641 "please give the member a name.\n",
4642 yylineno, expr->Identifier ? expr->Identifier : "type");
4643
4644 if(!expr->Identifier)
4645 expr->Identifier = "unnamed";
4646 expr->Identifier = strdup(expr->Identifier);
4647 assert(expr->Identifier);
4648 /* Make a lowercase identifier from the type name */
4649 for(p = expr->Identifier; *p; p++) {
4650 switch(*p) {
4651 case 'A' ... 'Z': *p += 32; break;
4652 case ' ': *p = '_'; break;
4653 case '-': *p = '_'; break;
4654 }
4655 }
4656 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
4657 "Name clash may occur later.\n",
4658 expr->Identifier);
4659}
4660
Lev Walkinf15320b2004-06-03 03:38:44 +00004661int
4662yyerror(const char *msg) {
Lev Walkin9d542d22006-03-14 16:31:37 +00004663 extern char *asn1p_text;
Lev Walkinf15320b2004-06-03 03:38:44 +00004664 fprintf(stderr,
4665 "ASN.1 grammar parse error "
4666 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00004667 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00004668 return -1;
4669}
4670
Lev Walkin418298d2006-07-13 08:24:20 +00004671