blob: 18c744a215147c4f25e0dc173e28a4063f56d8b2 [file] [log] [blame]
Lev Walkinc3b72e92004-06-03 05:07:41 +00001/* A Bison parser, made from asn1p_y.y, by GNU bison 1.75. */
Lev Walkinf15320b2004-06-03 03:38:44 +00002
Lev Walkinc3b72e92004-06-03 05:07:41 +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 Walkinc3b72e92004-06-03 05:07:41 +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 Walkinc3b72e92004-06-03 05:07:41 +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 Walkinc3b72e92004-06-03 05:07:41 +000048#define yylex asn1p_lex
Lev Walkinf15320b2004-06-03 03:38:44 +000049#define yyerror asn1p_error
Lev Walkinc3b72e92004-06-03 05:07:41 +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 Walkinc3b72e92004-06-03 05:07:41 +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_opaque = 259,
64 TOK_bstring = 260,
65 TOK_cstring = 261,
66 TOK_hstring = 262,
67 TOK_identifier = 263,
68 TOK_number = 264,
69 TOK_number_negative = 265,
70 TOK_typereference = 266,
71 TOK_objectclassreference = 267,
72 TOK_typefieldreference = 268,
73 TOK_valuefieldreference = 269,
74 TOK_ABSENT = 270,
75 TOK_ABSTRACT_SYNTAX = 271,
76 TOK_ALL = 272,
77 TOK_ANY = 273,
78 TOK_APPLICATION = 274,
79 TOK_AUTOMATIC = 275,
80 TOK_BEGIN = 276,
81 TOK_BIT = 277,
82 TOK_BMPString = 278,
83 TOK_BOOLEAN = 279,
84 TOK_BY = 280,
85 TOK_CHARACTER = 281,
86 TOK_CHOICE = 282,
87 TOK_CLASS = 283,
88 TOK_COMPONENT = 284,
89 TOK_COMPONENTS = 285,
90 TOK_CONSTRAINED = 286,
91 TOK_CONTAINING = 287,
92 TOK_DEFAULT = 288,
93 TOK_DEFINITIONS = 289,
94 TOK_DEFINED = 290,
95 TOK_EMBEDDED = 291,
96 TOK_ENCODED = 292,
97 TOK_END = 293,
98 TOK_ENUMERATED = 294,
99 TOK_EXPLICIT = 295,
100 TOK_EXPORTS = 296,
101 TOK_EXTENSIBILITY = 297,
102 TOK_EXTERNAL = 298,
103 TOK_FALSE = 299,
104 TOK_FROM = 300,
105 TOK_GeneralizedTime = 301,
106 TOK_GeneralString = 302,
107 TOK_GraphicString = 303,
108 TOK_IA5String = 304,
109 TOK_IDENTIFIER = 305,
110 TOK_IMPLICIT = 306,
111 TOK_IMPLIED = 307,
112 TOK_IMPORTS = 308,
113 TOK_INCLUDES = 309,
114 TOK_INSTANCE = 310,
115 TOK_INTEGER = 311,
116 TOK_ISO646String = 312,
117 TOK_MAX = 313,
118 TOK_MIN = 314,
119 TOK_MINUS_INFINITY = 315,
120 TOK_NULL = 316,
121 TOK_NumericString = 317,
122 TOK_OBJECT = 318,
123 TOK_ObjectDescriptor = 319,
124 TOK_OCTET = 320,
125 TOK_OF = 321,
126 TOK_OPTIONAL = 322,
127 TOK_PATTERN = 323,
128 TOK_PDV = 324,
129 TOK_PLUS_INFINITY = 325,
130 TOK_PRESENT = 326,
131 TOK_PrintableString = 327,
132 TOK_PRIVATE = 328,
133 TOK_REAL = 329,
134 TOK_RELATIVE_OID = 330,
135 TOK_SEQUENCE = 331,
136 TOK_SET = 332,
137 TOK_SIZE = 333,
138 TOK_STRING = 334,
139 TOK_SYNTAX = 335,
140 TOK_T61String = 336,
141 TOK_TAGS = 337,
142 TOK_TeletexString = 338,
143 TOK_TRUE = 339,
144 TOK_TYPE_IDENTIFIER = 340,
145 TOK_UNIQUE = 341,
146 TOK_UNIVERSAL = 342,
147 TOK_UniversalString = 343,
148 TOK_UTCTime = 344,
149 TOK_UTF8String = 345,
150 TOK_VideotexString = 346,
151 TOK_VisibleString = 347,
152 TOK_WITH = 348,
153 TOK_UNION = 349,
154 TOK_INTERSECTION = 350,
155 TOK_EXCEPT = 351,
156 TOK_TwoDots = 352,
157 TOK_ThreeDots = 353,
158 TOK_tag = 354
159 };
160#endif
161#define TOK_PPEQ 258
162#define TOK_opaque 259
163#define TOK_bstring 260
164#define TOK_cstring 261
165#define TOK_hstring 262
166#define TOK_identifier 263
167#define TOK_number 264
168#define TOK_number_negative 265
169#define TOK_typereference 266
170#define TOK_objectclassreference 267
171#define TOK_typefieldreference 268
172#define TOK_valuefieldreference 269
173#define TOK_ABSENT 270
174#define TOK_ABSTRACT_SYNTAX 271
175#define TOK_ALL 272
176#define TOK_ANY 273
177#define TOK_APPLICATION 274
178#define TOK_AUTOMATIC 275
179#define TOK_BEGIN 276
180#define TOK_BIT 277
181#define TOK_BMPString 278
182#define TOK_BOOLEAN 279
183#define TOK_BY 280
184#define TOK_CHARACTER 281
185#define TOK_CHOICE 282
186#define TOK_CLASS 283
187#define TOK_COMPONENT 284
188#define TOK_COMPONENTS 285
189#define TOK_CONSTRAINED 286
190#define TOK_CONTAINING 287
191#define TOK_DEFAULT 288
192#define TOK_DEFINITIONS 289
193#define TOK_DEFINED 290
194#define TOK_EMBEDDED 291
195#define TOK_ENCODED 292
196#define TOK_END 293
197#define TOK_ENUMERATED 294
198#define TOK_EXPLICIT 295
199#define TOK_EXPORTS 296
200#define TOK_EXTENSIBILITY 297
201#define TOK_EXTERNAL 298
202#define TOK_FALSE 299
203#define TOK_FROM 300
204#define TOK_GeneralizedTime 301
205#define TOK_GeneralString 302
206#define TOK_GraphicString 303
207#define TOK_IA5String 304
208#define TOK_IDENTIFIER 305
209#define TOK_IMPLICIT 306
210#define TOK_IMPLIED 307
211#define TOK_IMPORTS 308
212#define TOK_INCLUDES 309
213#define TOK_INSTANCE 310
214#define TOK_INTEGER 311
215#define TOK_ISO646String 312
216#define TOK_MAX 313
217#define TOK_MIN 314
218#define TOK_MINUS_INFINITY 315
219#define TOK_NULL 316
220#define TOK_NumericString 317
221#define TOK_OBJECT 318
222#define TOK_ObjectDescriptor 319
223#define TOK_OCTET 320
224#define TOK_OF 321
225#define TOK_OPTIONAL 322
226#define TOK_PATTERN 323
227#define TOK_PDV 324
228#define TOK_PLUS_INFINITY 325
229#define TOK_PRESENT 326
230#define TOK_PrintableString 327
231#define TOK_PRIVATE 328
232#define TOK_REAL 329
233#define TOK_RELATIVE_OID 330
234#define TOK_SEQUENCE 331
235#define TOK_SET 332
236#define TOK_SIZE 333
237#define TOK_STRING 334
238#define TOK_SYNTAX 335
239#define TOK_T61String 336
240#define TOK_TAGS 337
241#define TOK_TeletexString 338
242#define TOK_TRUE 339
243#define TOK_TYPE_IDENTIFIER 340
244#define TOK_UNIQUE 341
245#define TOK_UNIVERSAL 342
246#define TOK_UniversalString 343
247#define TOK_UTCTime 344
248#define TOK_UTF8String 345
249#define TOK_VideotexString 346
250#define TOK_VisibleString 347
251#define TOK_WITH 348
252#define TOK_UNION 349
253#define TOK_INTERSECTION 350
254#define TOK_EXCEPT 351
255#define TOK_TwoDots 352
256#define TOK_ThreeDots 353
257#define TOK_tag 354
258
259
260
261
262/* Copy the first part of user declarations. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000263#line 1 "asn1p_y.y"
264
265
266#include <stdlib.h>
267#include <stdio.h>
268#include <string.h>
269#include <errno.h>
270#include <assert.h>
271
272#include "asn1parser.h"
273
274#define YYPARSE_PARAM param
275#define YYERROR_VERBOSE
276
277int yylex(void);
278int yyerror(const char *msg);
279void asn1p_lexer_hack_push_opaque_state(void);
280void asn1p_lexer_hack_enable_with_syntax(void);
281#define yylineno asn1p_lineno
282extern int asn1p_lineno;
283
284
285static asn1p_value_t *
286 _convert_bitstring2binary(char *str, int base);
287
288#define checkmem(ptr) do { \
289 if(!(ptr)) \
290 return yyerror("Memory failure"); \
291 } while(0)
292
293#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
294 if(arg1->type != constr_type) { \
295 int __ret; \
296 root = asn1p_constraint_new(yylineno); \
297 checkmem(root); \
298 root->type = constr_type; \
299 __ret = asn1p_constraint_insert(root, \
300 arg1); \
301 checkmem(__ret == 0); \
302 } else { \
303 root = arg1; \
304 } \
305 if(arg2) { \
306 int __ret \
307 = asn1p_constraint_insert(root, arg2); \
308 checkmem(__ret == 0); \
309 } \
310 } while(0)
311
312
Lev Walkinc3b72e92004-06-03 05:07:41 +0000313
314/* Enabling traces. */
315#ifndef YYDEBUG
316# define YYDEBUG 0
317#endif
318
319/* Enabling verbose error messages. */
320#ifdef YYERROR_VERBOSE
321# undef YYERROR_VERBOSE
322# define YYERROR_VERBOSE 1
323#else
324# define YYERROR_VERBOSE 0
325#endif
326
327#ifndef YYSTYPE
Lev Walkinf15320b2004-06-03 03:38:44 +0000328#line 57 "asn1p_y.y"
329typedef union {
330 asn1p_t *a_grammar;
331 asn1p_module_flags_e a_module_flags;
332 asn1p_module_t *a_module;
333 asn1p_expr_type_e a_type; /* ASN.1 Type */
334 asn1p_expr_t *a_expr; /* Constructed collection */
335 asn1p_constraint_t *a_constr; /* Constraint */
336 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
337 asn1p_xports_t *a_xports; /* IMports/EXports */
338 asn1p_oid_t *a_oid; /* Object Identifier */
339 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
340 struct asn1p_type_tag_s a_tag; /* A tag */
341 asn1p_ref_t *a_ref; /* Reference to custom type */
342 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
343 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
344 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
345 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
346 struct asn1p_param_s a_parg; /* A parameter argument */
347 asn1p_paramlist_t *a_plist; /* A pargs list */
348 enum asn1p_expr_marker_e a_marker; /* OPTIONAL/DEFAULT */
349 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
350 asn1_integer_t a_int;
351 char *tv_str;
352 struct {
353 char *buf;
354 int len;
355 } tv_opaque;
356 struct {
357 char *name;
358 struct asn1p_type_tag_s tag;
359 } tv_nametag;
Lev Walkinc3b72e92004-06-03 05:07:41 +0000360} yystype;
361/* Line 193 of /usr/local/share/bison/yacc.c. */
362#line 363 "y.tab.c"
363# define YYSTYPE yystype
364# define YYSTYPE_IS_TRIVIAL 1
Lev Walkinf15320b2004-06-03 03:38:44 +0000365#endif
366
Lev Walkinc3b72e92004-06-03 05:07:41 +0000367#ifndef YYLTYPE
368typedef struct yyltype
369{
370 int first_line;
371 int first_column;
372 int last_line;
373 int last_column;
374} yyltype;
375# define YYLTYPE yyltype
376# define YYLTYPE_IS_TRIVIAL 1
377#endif
378
379/* Copy the second part of user declarations. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000380
381
Lev Walkinc3b72e92004-06-03 05:07:41 +0000382/* Line 213 of /usr/local/share/bison/yacc.c. */
383#line 384 "y.tab.c"
Lev Walkinf15320b2004-06-03 03:38:44 +0000384
Lev Walkinc3b72e92004-06-03 05:07:41 +0000385#if ! defined (yyoverflow) || YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +0000386
Lev Walkinc3b72e92004-06-03 05:07:41 +0000387/* The parser invokes alloca or malloc; define the necessary symbols. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000388
Lev Walkinc3b72e92004-06-03 05:07:41 +0000389# if YYSTACK_USE_ALLOCA
390# define YYSTACK_ALLOC alloca
391# else
392# ifndef YYSTACK_USE_ALLOCA
393# if defined (alloca) || defined (_ALLOCA_H)
394# define YYSTACK_ALLOC alloca
395# else
396# ifdef __GNUC__
397# define YYSTACK_ALLOC __builtin_alloca
398# endif
399# endif
400# endif
401# endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000402
Lev Walkinc3b72e92004-06-03 05:07:41 +0000403# ifdef YYSTACK_ALLOC
404 /* Pacify GCC's `empty if-body' warning. */
405# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
406# else
407# if defined (__STDC__) || defined (__cplusplus)
408# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
409# define YYSIZE_T size_t
410# endif
411# define YYSTACK_ALLOC malloc
412# define YYSTACK_FREE free
413# endif
414#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
415
416
417#if (! defined (yyoverflow) \
418 && (! defined (__cplusplus) \
419 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
420
421/* A type that is properly aligned for any stack member. */
422union yyalloc
423{
424 short yyss;
425 YYSTYPE yyvs;
426 };
427
428/* The size of the maximum gap between one aligned stack and the next. */
429# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
430
431/* The size of an array large to enough to hold all stacks, each with
432 N elements. */
433# define YYSTACK_BYTES(N) \
434 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
435 + YYSTACK_GAP_MAX)
436
437/* Copy COUNT objects from FROM to TO. The source and destination do
438 not overlap. */
439# ifndef YYCOPY
440# if 1 < __GNUC__
441# define YYCOPY(To, From, Count) \
442 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
443# else
444# define YYCOPY(To, From, Count) \
445 do \
446 { \
447 register YYSIZE_T yyi; \
448 for (yyi = 0; yyi < (Count); yyi++) \
449 (To)[yyi] = (From)[yyi]; \
450 } \
451 while (0)
452# endif
453# endif
454
455/* Relocate STACK from its old location to the new one. The
456 local variables YYSIZE and YYSTACKSIZE give the old and new number of
457 elements in the stack, and YYPTR gives the new location of the
458 stack. Advance YYPTR to a properly aligned location for the next
459 stack. */
460# define YYSTACK_RELOCATE(Stack) \
461 do \
462 { \
463 YYSIZE_T yynewbytes; \
464 YYCOPY (&yyptr->Stack, Stack, yysize); \
465 Stack = &yyptr->Stack; \
466 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
467 yyptr += yynewbytes / sizeof (*yyptr); \
468 } \
469 while (0)
Lev Walkinf15320b2004-06-03 03:38:44 +0000470
471#endif
472
Lev Walkinc3b72e92004-06-03 05:07:41 +0000473#if defined (__STDC__) || defined (__cplusplus)
474 typedef signed char yysigned_char;
Lev Walkinf15320b2004-06-03 03:38:44 +0000475#else
Lev Walkinc3b72e92004-06-03 05:07:41 +0000476 typedef short yysigned_char;
Lev Walkinf15320b2004-06-03 03:38:44 +0000477#endif
478
Lev Walkinc3b72e92004-06-03 05:07:41 +0000479/* YYFINAL -- State number of the termination state. */
480#define YYFINAL 7
481#define YYLAST 775
482
483/* YYNTOKENS -- Number of terminals. */
484#define YYNTOKENS 113
485/* YYNNTS -- Number of nonterminals. */
486#define YYNNTS 99
487/* YYNRULES -- Number of rules. */
488#define YYNRULES 248
489/* YYNRULES -- Number of states. */
490#define YYNSTATES 375
491
492/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
493#define YYUNDEFTOK 2
494#define YYMAXUTOK 354
495
496#define YYTRANSLATE(X) \
497 ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
498
499/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
500static const unsigned char yytranslate[] =
501{
502 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
503 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
504 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
505 2, 2, 2, 109, 2, 2, 2, 2, 2, 2,
506 104, 105, 2, 2, 107, 2, 110, 2, 2, 2,
507 2, 2, 2, 2, 2, 2, 2, 2, 108, 106,
508 111, 2, 2, 2, 112, 2, 2, 2, 2, 2,
509 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
510 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
511 2, 2, 2, 2, 96, 2, 2, 2, 2, 2,
512 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
513 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
514 2, 2, 2, 102, 94, 103, 2, 2, 2, 2,
515 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
516 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
517 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
518 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
519 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
520 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
521 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
522 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
523 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
524 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
525 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
526 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
527 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
528 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
529 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
530 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
531 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
532 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
533 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
534 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
535 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
536 85, 86, 87, 88, 89, 90, 91, 92, 93, 95,
537 97, 98, 99, 100, 101
538};
539
540#if YYDEBUG
541/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
542 YYRHS. */
543static const unsigned short yyprhs[] =
544{
545 0, 0, 3, 5, 7, 10, 19, 20, 22, 26,
546 29, 31, 34, 36, 41, 43, 44, 46, 48, 51,
547 54, 57, 60, 63, 64, 66, 68, 71, 73, 75,
548 77, 79, 81, 83, 87, 90, 92, 95, 100, 102,
549 106, 108, 110, 114, 118, 121, 123, 127, 129, 131,
550 138, 140, 142, 143, 145, 150, 155, 159, 166, 168,
551 172, 174, 178, 182, 184, 188, 190, 192, 194, 198,
552 204, 205, 207, 209, 213, 216, 220, 225, 226, 228,
553 229, 236, 238, 241, 243, 245, 248, 250, 254, 256,
554 260, 264, 266, 268, 270, 275, 277, 281, 283, 287,
555 291, 293, 297, 299, 303, 305, 307, 309, 311, 316,
556 317, 321, 323, 325, 327, 329, 331, 333, 337, 339,
557 342, 344, 346, 348, 350, 353, 356, 358, 360, 363,
558 366, 368, 370, 372, 374, 377, 379, 382, 384, 386,
559 388, 390, 392, 394, 396, 398, 400, 402, 404, 406,
560 408, 410, 415, 420, 425, 430, 435, 437, 442, 443,
561 445, 447, 449, 451, 453, 455, 460, 462, 465, 469,
562 471, 475, 481, 483, 487, 489, 491, 495, 497, 501,
563 503, 507, 509, 513, 518, 520, 522, 524, 527, 530,
564 534, 536, 538, 540, 542, 544, 546, 548, 550, 552,
565 558, 560, 564, 566, 570, 571, 573, 575, 577, 579,
566 581, 583, 587, 592, 594, 598, 601, 605, 607, 611,
567 612, 614, 616, 619, 621, 623, 624, 628, 631, 635,
568 637, 641, 643, 648, 653, 655, 657, 659, 661, 662,
569 664, 666, 669, 672, 674, 676, 678, 680, 682
570};
571
572/* YYRHS -- A `-1'-separated list of the rules' RHS. */
573static const short yyrhs[] =
574{
575 114, 0, -1, 115, -1, 116, -1, 115, 116, -1,
576 208, 117, 34, 121, 3, 21, 124, 38, -1, -1,
577 118, -1, 102, 119, 103, -1, 102, 103, -1, 120,
578 -1, 119, 120, -1, 210, -1, 210, 104, 9, 105,
579 -1, 9, -1, -1, 122, -1, 123, -1, 122, 123,
580 -1, 40, 82, -1, 51, 82, -1, 20, 82, -1,
581 42, 52, -1, -1, 125, -1, 126, -1, 125, 126,
582 -1, 127, -1, 132, -1, 138, -1, 162, -1, 135,
583 -1, 170, -1, 53, 128, 106, -1, 53, 45, -1,
584 129, -1, 128, 129, -1, 130, 45, 208, 117, -1,
585 131, -1, 130, 107, 131, -1, 208, -1, 210, -1,
586 41, 133, 106, -1, 41, 17, 106, -1, 41, 106,
587 -1, 134, -1, 133, 107, 134, -1, 208, -1, 210,
588 -1, 208, 136, 3, 102, 137, 103, -1, 157, -1,
589 167, -1, -1, 178, -1, 208, 3, 206, 85, -1,
590 208, 3, 206, 154, -1, 208, 3, 144, -1, 208,
591 102, 139, 103, 3, 154, -1, 140, -1, 139, 107,
592 140, -1, 208, -1, 208, 108, 210, -1, 167, 108,
593 210, -1, 142, -1, 141, 107, 142, -1, 156, -1,
594 210, -1, 153, -1, 143, 107, 153, -1, 28, 102,
595 146, 103, 148, -1, -1, 86, -1, 147, -1, 146,
596 107, 147, -1, 160, 198, -1, 160, 154, 145, -1,
597 160, 160, 198, 145, -1, -1, 149, -1, -1, 93,
598 80, 102, 150, 151, 103, -1, 152, -1, 151, 152,
599 -1, 4, -1, 160, -1, 211, 154, -1, 155, -1,
600 156, 172, 198, -1, 100, -1, 100, 109, 165, -1,
601 100, 109, 205, -1, 169, -1, 170, -1, 171, -1,
602 208, 102, 141, 103, -1, 157, -1, 55, 66, 157,
603 -1, 11, -1, 11, 110, 208, -1, 11, 110, 210,
604 -1, 209, -1, 209, 110, 158, -1, 159, -1, 158,
605 110, 159, -1, 161, -1, 161, -1, 13, -1, 14,
606 -1, 210, 136, 3, 163, -1, -1, 102, 164, 166,
607 -1, 5, -1, 7, -1, 6, -1, 205, -1, 165,
608 -1, 210, -1, 208, 110, 210, -1, 4, -1, 166,
609 4, -1, 24, -1, 61, -1, 74, -1, 168, -1,
610 65, 79, -1, 63, 50, -1, 75, -1, 43, -1,
611 36, 69, -1, 26, 79, -1, 89, -1, 46, -1,
612 56, -1, 39, -1, 22, 79, -1, 167, -1, 168,
613 202, -1, 23, -1, 47, -1, 48, -1, 49, -1,
614 57, -1, 62, -1, 72, -1, 81, -1, 83, -1,
615 88, -1, 90, -1, 91, -1, 92, -1, 64, -1,
616 27, 102, 143, 103, -1, 76, 102, 143, 103, -1,
617 77, 102, 143, 103, -1, 76, 172, 66, 156, -1,
618 77, 172, 66, 156, -1, 18, -1, 18, 35, 25,
619 210, -1, -1, 176, -1, 94, -1, 95, -1, 96,
620 -1, 97, -1, 98, -1, 78, 104, 178, 105, -1,
621 177, -1, 176, 177, -1, 104, 178, 105, -1, 179,
622 -1, 179, 107, 100, -1, 179, 107, 100, 107, 179,
623 -1, 100, -1, 100, 107, 179, -1, 180, -1, 181,
624 -1, 180, 173, 181, -1, 182, -1, 181, 174, 182,
625 -1, 183, -1, 182, 175, 183, -1, 186, -1, 186,
626 184, 186, -1, 185, 104, 178, 105, -1, 192, -1,
627 187, -1, 99, -1, 99, 111, -1, 111, 99, -1,
628 111, 99, 111, -1, 78, -1, 45, -1, 205, -1,
629 210, -1, 6, -1, 59, -1, 58, -1, 44, -1,
630 84, -1, 93, 30, 102, 188, 103, -1, 189, -1,
631 188, 107, 189, -1, 100, -1, 210, 172, 190, -1,
632 -1, 191, -1, 71, -1, 15, -1, 67, -1, 193,
633 -1, 194, -1, 102, 208, 103, -1, 193, 102, 195,
634 103, -1, 196, -1, 195, 107, 196, -1, 112, 197,
635 -1, 112, 110, 197, -1, 210, -1, 197, 110, 210,
636 -1, -1, 199, -1, 67, -1, 33, 200, -1, 186,
637 -1, 167, -1, -1, 102, 201, 166, -1, 102, 103,
638 -1, 102, 203, 103, -1, 204, -1, 203, 107, 204,
639 -1, 210, -1, 210, 104, 205, 105, -1, 210, 104,
640 165, 105, -1, 205, -1, 100, -1, 9, -1, 10,
641 -1, -1, 207, -1, 101, -1, 101, 51, -1, 101,
642 40, -1, 11, -1, 12, -1, 12, -1, 8, -1,
643 210, -1, 210, 207, -1
644};
645
646/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
647static const unsigned short yyrline[] =
648{
649 0, 297, 297, 303, 309, 325, 350, 352, 355, 359,
650 364, 371, 379, 384, 388, 397, 399, 407, 411, 419,
651 423, 426, 429, 437, 439, 448, 452, 477, 481, 490,
652 497, 510, 521, 534, 541, 546, 552, 558, 567, 573,
653 579, 586, 594, 598, 601, 608, 614, 620, 627, 636,
654 646, 654, 662, 664, 676, 688, 695, 711, 721, 731,
655 741, 746, 753, 763, 769, 775, 779, 791, 797, 803,
656 813, 815, 818, 826, 832, 841, 846, 863, 865, 872,
657 870, 879, 884, 890, 894, 919, 926, 931, 939, 948,
658 957, 968, 972, 978, 986, 1010, 1017, 1031, 1040, 1050,
659 1060, 1068, 1089, 1098, 1107, 1108, 1110, 1117, 1129, 1140,
660 1139, 1146, 1150, 1154, 1158, 1161, 1166, 1178, 1194, 1205,
661 1219, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229,
662 1230, 1231, 1237, 1239, 1240, 1243, 1250, 1262, 1264, 1268,
663 1272, 1273, 1274, 1275, 1276, 1280, 1281, 1282, 1283, 1287,
664 1288, 1291, 1298, 1304, 1310, 1318, 1326, 1332, 1348, 1350,
665 1353, 1353, 1354, 1354, 1355, 1357, 1370, 1373, 1378, 1384,
666 1388, 1395, 1403, 1408, 1417, 1419, 1421, 1426, 1428, 1434,
667 1436, 1441, 1448, 1455, 1463, 1466, 1471, 1473, 1474, 1475,
668 1478, 1482, 1487, 1491, 1502, 1506, 1511, 1516, 1521, 1528,
669 1534, 1538, 1543, 1549, 1561, 1563, 1566, 1570, 1573, 1578,
670 1582, 1590, 1605, 1611, 1618, 1631, 1643, 1658, 1662, 1679,
671 1681, 1684, 1688, 1694, 1697, 1699, 1699, 1719, 1724, 1729,
672 1735, 1741, 1749, 1757, 1765, 1772, 1782, 1787, 1817, 1819,
673 1822, 1827, 1831, 1837, 1842, 1848, 1855, 1862, 1867
674};
675#endif
676
677#if YYDEBUG || YYERROR_VERBOSE
678/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
679 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
680static const char *const yytname[] =
681{
682 "$end", "error", "$undefined", "TOK_PPEQ", "TOK_opaque", "TOK_bstring",
683 "TOK_cstring", "TOK_hstring", "TOK_identifier", "TOK_number",
684 "TOK_number_negative", "TOK_typereference", "TOK_objectclassreference",
685 "TOK_typefieldreference", "TOK_valuefieldreference", "TOK_ABSENT",
686 "TOK_ABSTRACT_SYNTAX", "TOK_ALL", "TOK_ANY", "TOK_APPLICATION",
687 "TOK_AUTOMATIC", "TOK_BEGIN", "TOK_BIT", "TOK_BMPString", "TOK_BOOLEAN",
688 "TOK_BY", "TOK_CHARACTER", "TOK_CHOICE", "TOK_CLASS", "TOK_COMPONENT",
689 "TOK_COMPONENTS", "TOK_CONSTRAINED", "TOK_CONTAINING", "TOK_DEFAULT",
690 "TOK_DEFINITIONS", "TOK_DEFINED", "TOK_EMBEDDED", "TOK_ENCODED",
691 "TOK_END", "TOK_ENUMERATED", "TOK_EXPLICIT", "TOK_EXPORTS",
692 "TOK_EXTENSIBILITY", "TOK_EXTERNAL", "TOK_FALSE", "TOK_FROM",
693 "TOK_GeneralizedTime", "TOK_GeneralString", "TOK_GraphicString",
694 "TOK_IA5String", "TOK_IDENTIFIER", "TOK_IMPLICIT", "TOK_IMPLIED",
695 "TOK_IMPORTS", "TOK_INCLUDES", "TOK_INSTANCE", "TOK_INTEGER",
696 "TOK_ISO646String", "TOK_MAX", "TOK_MIN", "TOK_MINUS_INFINITY",
697 "TOK_NULL", "TOK_NumericString", "TOK_OBJECT", "TOK_ObjectDescriptor",
698 "TOK_OCTET", "TOK_OF", "TOK_OPTIONAL", "TOK_PATTERN", "TOK_PDV",
699 "TOK_PLUS_INFINITY", "TOK_PRESENT", "TOK_PrintableString",
700 "TOK_PRIVATE", "TOK_REAL", "TOK_RELATIVE_OID", "TOK_SEQUENCE",
701 "TOK_SET", "TOK_SIZE", "TOK_STRING", "TOK_SYNTAX", "TOK_T61String",
702 "TOK_TAGS", "TOK_TeletexString", "TOK_TRUE", "TOK_TYPE_IDENTIFIER",
703 "TOK_UNIQUE", "TOK_UNIVERSAL", "TOK_UniversalString", "TOK_UTCTime",
704 "TOK_UTF8String", "TOK_VideotexString", "TOK_VisibleString", "TOK_WITH",
705 "'|'", "TOK_UNION", "'^'", "TOK_INTERSECTION", "TOK_EXCEPT",
706 "TOK_TwoDots", "TOK_ThreeDots", "TOK_tag", "'{'", "'}'", "'('", "')'",
707 "';'", "','", "':'", "'!'", "'.'", "'<'", "'@'", "$accept",
708 "ParsedGrammar", "ModuleList", "ModuleSpecification",
709 "optObjectIdentifier", "ObjectIdentifier", "ObjectIdentifierBody",
710 "ObjectIdentifierElement", "optModuleSpecificationFlags",
711 "ModuleSpecificationFlags", "ModuleSpecificationFlag",
712 "optModuleSpecificationBody", "ModuleSpecificationBody",
713 "ModuleSpecificationElement", "ImportsDefinition", "ImportsBundleSet",
714 "ImportsBundle", "ImportsList", "ImportsElement", "ExportsDefinition",
715 "ExportsBody", "ExportsElement", "ValueSetDefinition", "DefinedTypeRef",
716 "optValueSetBody", "DataTypeReference", "ParameterArgumentList",
717 "ParameterArgumentName", "ActualParameterList", "ActualParameter",
718 "ConstructedDataTypeDefinition", "ClassDeclaration", "optUnique",
719 "ClassFieldList", "ClassField", "optWithSyntax", "WithSyntax", "@1",
720 "WithSyntaxFormat", "WithSyntaxFormatToken", "DataTypeMember",
721 "ConstrainedTypeDeclaration", "ExtensionAndException",
722 "TypeDeclaration", "ComplexTypeReference",
723 "ComplexTypeReferenceAmpList", "ComplexTypeReferenceElement",
724 "ClassFieldIdentifier", "ClassFieldName", "ValueDefinition",
725 "InlineOrDefinedValue", "@2", "DefinedValue", "Opaque", "BasicTypeId",
726 "BasicTypeId_UniverationCompatible", "BasicType", "BasicString",
727 "ConstructedType", "optConstraints", "Union", "Intersection", "Except",
728 "Constraints", "SingleConstraint", "ConstraintElementSet",
729 "ConstraintElement", "ConstraintElementUnion",
730 "ConstraintElementIntersection", "ConstraintElementException",
731 "ConstraintSubtypeElement", "ConstraintRangeSpec", "ConstraintSpec",
732 "ConstraintValue", "WithComponents", "WithComponentsList",
733 "WithComponentsElement", "optPresenceConstraint", "PresenceConstraint",
734 "TableConstraint", "SimpleTableConstraint",
735 "ComponentRelationConstraint", "AtNotationList", "AtNotationElement",
736 "ComponentIdList", "optMarker", "Marker", "DefaultValue", "@3",
737 "UniverationDefinition", "UniverationList", "UniverationElement",
738 "SignedNumber", "optTag", "Tag", "TypeRefName", "ObjectClassReference",
739 "Identifier", "TaggedIdentifier", 0
740};
741#endif
742
743# ifdef YYPRINT
744/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
745 token YYLEX-NUM. */
746static const unsigned short yytoknum[] =
747{
748 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
749 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
750 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
751 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
752 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
753 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
754 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
755 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
756 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
757 345, 346, 347, 348, 124, 349, 94, 350, 351, 352,
758 353, 354, 123, 125, 40, 41, 59, 44, 58, 33,
759 46, 60, 64
760};
761# endif
762
763/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
764static const unsigned char yyr1[] =
765{
766 0, 113, 114, 115, 115, 116, 117, 117, 118, 118,
767 119, 119, 120, 120, 120, 121, 121, 122, 122, 123,
768 123, 123, 123, 124, 124, 125, 125, 126, 126, 126,
769 126, 126, 126, 127, 127, 128, 128, 129, 130, 130,
770 131, 131, 132, 132, 132, 133, 133, 134, 134, 135,
771 136, 136, 137, 137, 138, 138, 138, 138, 139, 139,
772 140, 140, 140, 141, 141, 142, 142, 143, 143, 144,
773 145, 145, 146, 146, 147, 147, 147, 148, 148, 150,
774 149, 151, 151, 152, 152, 153, 153, 154, 155, 155,
775 155, 156, 156, 156, 156, 156, 156, 157, 157, 157,
776 157, 157, 158, 158, 159, 160, 161, 161, 162, 164,
777 163, 163, 163, 163, 163, 163, 165, 165, 166, 166,
778 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
779 167, 167, 168, 168, 168, 169, 169, 170, 170, 170,
780 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
781 170, 171, 171, 171, 171, 171, 171, 171, 172, 172,
782 173, 173, 174, 174, 175, 176, 176, 176, 177, 178,
783 178, 178, 178, 178, 179, 180, 180, 181, 181, 182,
784 182, 183, 183, 183, 183, 183, 184, 184, 184, 184,
785 185, 185, 186, 186, 186, 186, 186, 186, 186, 187,
786 188, 188, 189, 189, 190, 190, 191, 191, 191, 192,
787 192, 193, 194, 195, 195, 196, 196, 197, 197, 198,
788 198, 199, 199, 200, 200, 201, 200, 202, 202, 203,
789 203, 204, 204, 204, 204, 204, 205, 205, 206, 206,
790 207, 207, 207, 208, 208, 209, 210, 211, 211
791};
792
793/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
794static const unsigned char yyr2[] =
795{
796 0, 2, 1, 1, 2, 8, 0, 1, 3, 2,
797 1, 2, 1, 4, 1, 0, 1, 1, 2, 2,
798 2, 2, 2, 0, 1, 1, 2, 1, 1, 1,
799 1, 1, 1, 3, 2, 1, 2, 4, 1, 3,
800 1, 1, 3, 3, 2, 1, 3, 1, 1, 6,
801 1, 1, 0, 1, 4, 4, 3, 6, 1, 3,
802 1, 3, 3, 1, 3, 1, 1, 1, 3, 5,
803 0, 1, 1, 3, 2, 3, 4, 0, 1, 0,
804 6, 1, 2, 1, 1, 2, 1, 3, 1, 3,
805 3, 1, 1, 1, 4, 1, 3, 1, 3, 3,
806 1, 3, 1, 3, 1, 1, 1, 1, 4, 0,
807 3, 1, 1, 1, 1, 1, 1, 3, 1, 2,
808 1, 1, 1, 1, 2, 2, 1, 1, 2, 2,
809 1, 1, 1, 1, 2, 1, 2, 1, 1, 1,
810 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
811 1, 4, 4, 4, 4, 4, 1, 4, 0, 1,
812 1, 1, 1, 1, 1, 4, 1, 2, 3, 1,
813 3, 5, 1, 3, 1, 1, 3, 1, 3, 1,
814 3, 1, 3, 4, 1, 1, 1, 2, 2, 3,
815 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
816 1, 3, 1, 3, 0, 1, 1, 1, 1, 1,
817 1, 3, 4, 1, 3, 2, 3, 1, 3, 0,
818 1, 1, 2, 1, 1, 0, 3, 2, 3, 1,
819 3, 1, 4, 4, 1, 1, 1, 1, 0, 1,
820 1, 2, 2, 1, 1, 1, 1, 1, 2
821};
822
823/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
824 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
825 means the default is an error. */
826static const unsigned char yydefact[] =
827{
828 0, 243, 244, 0, 2, 3, 6, 1, 4, 0,
829 0, 7, 246, 14, 9, 0, 10, 12, 15, 8,
830 11, 0, 0, 0, 0, 0, 0, 16, 17, 0,
831 21, 19, 22, 20, 0, 18, 13, 23, 137, 0,
832 138, 139, 140, 0, 141, 142, 150, 143, 144, 145,
833 146, 147, 148, 149, 0, 24, 25, 27, 28, 31,
834 29, 30, 32, 0, 0, 0, 44, 0, 45, 47,
835 48, 34, 0, 35, 0, 38, 40, 41, 5, 26,
836 238, 97, 245, 0, 120, 0, 0, 133, 127, 131,
837 132, 121, 0, 0, 122, 126, 130, 0, 0, 50,
838 51, 123, 100, 0, 43, 42, 0, 33, 36, 0,
839 0, 0, 240, 56, 0, 239, 0, 134, 129, 128,
840 125, 124, 0, 58, 0, 60, 0, 0, 0, 46,
841 6, 39, 0, 242, 241, 97, 245, 156, 0, 0,
842 158, 158, 54, 55, 158, 95, 135, 123, 91, 92,
843 93, 0, 98, 99, 0, 0, 0, 0, 52, 106,
844 107, 101, 102, 104, 111, 113, 112, 236, 237, 109,
845 108, 115, 114, 0, 116, 37, 0, 72, 219, 105,
846 0, 0, 0, 0, 0, 0, 0, 159, 166, 0,
847 0, 219, 0, 136, 0, 0, 59, 62, 61, 194,
848 197, 191, 196, 195, 190, 198, 0, 172, 0, 0,
849 53, 169, 174, 175, 177, 179, 0, 181, 185, 184,
850 209, 210, 192, 193, 0, 0, 0, 77, 0, 0,
851 221, 70, 219, 74, 220, 0, 88, 0, 67, 86,
852 247, 0, 96, 0, 0, 0, 0, 167, 0, 0,
853 87, 235, 227, 0, 229, 234, 231, 0, 63, 65,
854 66, 57, 0, 0, 0, 49, 0, 160, 161, 0,
855 162, 163, 0, 164, 0, 0, 186, 0, 0, 0,
856 103, 118, 110, 117, 0, 69, 78, 73, 225, 224,
857 223, 222, 71, 75, 70, 157, 0, 151, 0, 248,
858 85, 0, 152, 168, 154, 153, 155, 228, 0, 0,
859 94, 0, 0, 173, 211, 170, 176, 178, 180, 0,
860 187, 188, 182, 0, 0, 213, 119, 0, 0, 76,
861 89, 90, 68, 165, 230, 0, 0, 64, 202, 0,
862 200, 158, 0, 183, 189, 0, 215, 217, 212, 0,
863 79, 226, 233, 232, 199, 0, 204, 171, 216, 0,
864 214, 0, 201, 207, 208, 206, 203, 205, 218, 83,
865 0, 81, 84, 80, 82
866};
867
868/* YYDEFGOTO[NTERM-NUM]. */
869static const short yydefgoto[] =
870{
871 -1, 3, 4, 5, 10, 11, 15, 16, 26, 27,
872 28, 54, 55, 56, 57, 72, 73, 74, 75, 58,
873 67, 68, 59, 98, 209, 60, 122, 123, 257, 258,
874 237, 113, 293, 176, 177, 285, 286, 361, 370, 371,
875 238, 143, 239, 144, 145, 161, 162, 178, 179, 61,
876 170, 225, 171, 282, 146, 147, 148, 149, 150, 186,
877 269, 272, 274, 187, 188, 210, 211, 212, 213, 214,
878 215, 278, 216, 217, 218, 339, 340, 366, 367, 219,
879 220, 221, 324, 325, 346, 233, 234, 291, 328, 193,
880 253, 254, 222, 114, 115, 151, 102, 223, 241
881};
882
883/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
884 STATE-NUM. */
885#define YYPACT_NINF -206
886static const short yypact[] =
887{
888 227, -206, -206, 27, 227, -206, -38, -206, -206, 13,
889 52, -206, -206, -206, -206, 47, -206, -12, 42, -206,
890 -206, 106, 51, 76, 111, 83, 146, 42, -206, 63,
891 -206, -206, -206, -206, 152, -206, -206, 380, -206, 12,
892 -206, -206, -206, 91, -206, -206, -206, -206, -206, -206,
893 -206, -206, -206, -206, 160, 380, -206, -206, -206, -206,
894 -206, -206, -206, 131, 670, 107, -206, 147, -206, -206,
895 -206, -206, 24, -206, -19, -206, -206, -206, -206, -206,
896 -3, 114, -206, 150, -206, 155, 174, -206, -206, -206,
897 -206, -206, 201, 184, -206, -206, -206, 686, 258, -206,
898 -206, -206, 156, 265, -206, -206, 191, -206, -206, 227,
899 191, 168, 101, -206, 537, -206, 191, -206, -206, -206,
900 -206, -206, 75, -206, 164, 166, 183, 242, 33, -206,
901 -38, -206, 242, -206, -206, 44, 186, 249, 189, 220,
902 -8, 36, -206, -206, -13, -206, -206, 190, -206, -206,
903 -206, 192, -206, -206, 290, 686, 293, 293, 238, -206,
904 -206, 188, -206, -206, -206, -206, -206, -206, -206, -206,
905 -206, -206, -206, 194, -206, -206, 90, -206, 462, -206,
906 280, 23, 246, 202, 23, 238, 243, 208, -206, 23,
907 244, 20, 59, -206, 321, 612, -206, -206, -206, -206,
908 -206, -206, -206, -206, -206, -206, 283, 210, 227, 212,
909 -206, 211, 165, 182, 221, -206, 217, -40, -206, -206,
910 222, -206, -206, -206, 242, 319, 293, 234, 242, 206,
911 -206, 248, 20, -206, -206, 293, 219, 97, -206, -206,
912 229, 612, -206, 238, 115, 230, 612, -206, 118, 612,
913 -206, -206, -206, 120, -206, -206, 233, 128, -206, -206,
914 -206, -206, 239, 67, 250, -206, 252, -206, -206, 67,
915 -206, -206, 67, -206, 67, 238, 231, 255, 267, 237,
916 -206, -206, 351, -206, 276, -206, -206, -206, -206, -206,
917 -206, -206, -206, -206, 248, -206, 199, -206, 23, -206,
918 -206, 253, -206, -206, -206, -206, -206, -206, 71, 199,
919 -206, 321, 29, -206, -206, 254, 182, 221, -206, 257,
920 -206, 260, -206, -6, 133, -206, -206, 261, 319, -206,
921 -206, -206, -206, -206, -206, 268, 269, -206, -206, 134,
922 -206, -13, 67, -206, -206, 293, 256, -206, -206, 237,
923 -206, 351, -206, -206, -206, 29, 18, -206, 256, 293,
924 -206, 177, -206, -206, -206, -206, -206, -206, -206, -206,
925 3, -206, -206, -206, -206
926};
927
928/* YYPGOTO[NTERM-NUM]. */
929static const short yypgoto[] =
930{
931 -206, -206, -206, 355, 235, -206, -206, 357, -206, -206,
932 348, -206, -206, 324, -206, -206, 308, -206, 271, -206,
933 -206, 281, -206, 325, -206, -206, -206, 245, -206, 79,
934 -28, -206, 100, -206, 171, -206, -206, -206, -206, 31,
935 108, -117, -206, -189, -54, -206, 181, -175, -115, -206,
936 -206, -206, -165, 80, -50, -45, -206, 58, -206, -140,
937 -206, -206, -206, -206, 228, -111, -205, -206, 138, 142,
938 143, -206, -206, -178, -206, -206, 61, -206, -206, -206,
939 -206, -206, -206, 69, 74, -142, -206, -206, -206, -206,
940 -206, 112, -120, -206, 185, 11, -206, -9, -206
941};
942
943/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
944 positive, shift that token. If negative, reduce the rule which
945 number is the opposite. If zero, do what YYDEFACT says.
946 If YYTABLE_NINF, parse error. */
947#define YYTABLE_NINF -245
948static const short yytable[] =
949{
950 17, 190, 12, 232, 191, 259, 17, 369, 172, 99,
951 99, 6, 163, 100, 100, 6, 159, 160, 101, 101,
952 12, 12, 13, 1, 2, 111, 109, 7, 64, 65,
953 70, 12, 12, 363, 77, 1, 2, 12, 164, 165,
954 166, 12, 167, 168, 1, 2, 64, 124, 63, 250,
955 69, 290, 101, 229, 76, 12, 13, 304, 313, 276,
956 306, 231, 22, 77, 9, 183, 63, 12, 167, 168,
957 183, 277, 255, 199, 245, 12, 167, 168, 261, 12,
958 167, 168, 23, 76, 24, 364, 18, 230, 110, 365,
959 294, 185, 21, 25, 184, 62, 185, 70, 112, 12,
960 322, 77, 1, 2, 345, 124, 373, 153, 125, 163,
961 101, 200, 201, 62, 183, 29, 14, 69, 66, 174,
962 130, 76, 259, 236, 300, 202, 203, 152, 242, 338,
963 107, 330, 301, 30, 80, 169, 71, 357, 189, 173,
964 185, 133, 81, 82, 335, 204, -243, 197, 198, 34,
965 19, 205, 134, 83, 116, 84, 244, 85, 31, 251,
966 206, 248, 252, 32, 319, 33, 125, 86, 36, 208,
967 87, 251, 240, 37, 88, 240, 331, 89, 154, 289,
968 240, 369, 155, 256, 101, 260, 372, 90, 255, 336,
969 159, 160, 91, 227, 92, 372, 93, 228, 78, 12,
970 297, 356, 1, 2, 298, 94, 95, 12, 167, 168,
971 1, 2, 199, 104, 12, 167, 168, 283, 302, 264,
972 96, 305, 298, 307, 116, 298, 295, 308, 83, 117,
973 84, 310, 85, 97, 118, 311, 348, 354, 1, 2,
974 349, 355, 86, 119, 199, 87, 12, 167, 168, 88,
975 200, 120, 89, 105, 106, 159, 160, 81, 82, 267,
976 268, 126, 90, 121, 202, 203, 127, 91, 128, 92,
977 132, 93, 156, 199, 157, 12, 167, 168, 270, 271,
978 94, 95, 200, 201, 180, 158, 182, 174, -244, 240,
979 205, 181, 192, 195, 194, 96, 202, 203, 224, 256,
980 174, 12, 260, 341, 226, 235, 243, 173, 288, 246,
981 249, 200, 185, 262, 347, 265, 204, 263, 266, 273,
982 173, 275, 205, 281, 279, 202, 203, 284, 296, 12,
983 112, 206, 135, 136, 292, 303, 347, 309, 207, 137,
984 208, 312, 320, 83, 38, 84, 341, 85, 138, 323,
985 368, 205, 315, 314, 321, 326, 327, 86, 333, 8,
986 87, 342, 343, 350, 88, 175, 359, 89, 40, 41,
987 42, 344, 20, 352, 353, 35, 139, 90, 44, 79,
988 108, 131, 91, 45, 92, 46, 93, 129, 12, 103,
989 337, 1, 2, 47, 329, 94, 95, 140, 141, 287,
990 196, 374, 48, 38, 49, 280, 332, 316, 351, 50,
991 96, 51, 52, 53, 317, 247, 362, 318, 360, 358,
992 334, 39, 0, 0, 0, 299, 0, 40, 41, 42,
993 0, 0, 0, 43, 0, 0, 0, 44, 0, 0,
994 0, 0, 45, 0, 46, 0, 0, 0, 0, 0,
995 0, 0, 47, 0, 0, 0, 0, 0, 0, 0,
996 0, 48, 0, 49, 0, 0, 0, 0, 50, 0,
997 51, 52, 53, 135, 136, 159, 160, 0, 0, 0,
998 137, 0, 0, 0, 83, 38, 84, 0, 85, 138,
999 0, 0, 0, 0, 0, 229, 0, 0, 86, 0,
1000 0, 87, 0, 0, 0, 88, 0, 0, 89, 40,
1001 41, 42, 0, 0, 0, 0, 0, 139, 90, 44,
1002 0, 0, 0, 91, 45, 92, 46, 93, 0, 230,
1003 0, 0, 0, 0, 47, 0, 94, 95, 140, 141,
1004 0, 0, 0, 48, 0, 49, 0, 0, 135, 136,
1005 50, 96, 51, 52, 53, 137, 0, 0, 0, 83,
1006 38, 84, 0, 85, 138, 0, 0, 0, 0, 0,
1007 0, 0, 0, 86, 0, 0, 87, 0, 0, 0,
1008 88, 0, 0, 89, 40, 41, 42, 0, 0, 0,
1009 0, 0, 139, 90, 44, 0, 0, 0, 91, 45,
1010 92, 46, 93, 0, 0, 0, 0, 0, 0, 47,
1011 0, 94, 95, 140, 141, 0, 0, 0, 48, 0,
1012 49, 0, 142, 135, 136, 50, 96, 51, 52, 53,
1013 137, 0, 0, 0, 83, 38, 84, 0, 85, 138,
1014 0, 0, 0, 0, 0, 0, 0, 0, 86, 0,
1015 0, 87, 0, 0, 0, 88, 0, 0, 89, 40,
1016 41, 42, 0, 0, 0, 0, 0, 139, 90, 44,
1017 0, 0, 0, 91, 45, 92, 46, 93, 0, 0,
1018 0, 81, 82, 0, 47, 0, 94, 95, 140, 141,
1019 0, 0, 83, 48, 84, 49, 85, 1, 2, 0,
1020 50, 96, 51, 52, 53, 0, 86, 0, 83, 87,
1021 84, 0, 85, 88, 0, 0, 89, 0, 0, 0,
1022 0, 0, 86, 0, 0, 87, 90, 0, 0, 88,
1023 0, 91, 89, 92, 0, 93, 0, 0, 0, 0,
1024 0, 0, 90, 0, 94, 95, 0, 91, 0, 92,
1025 0, 93, 0, 0, 0, 0, 0, 0, 0, 96,
1026 94, 95, 0, 0, 0, 0, 0, 0, 0, 0,
1027 0, 0, 0, 0, 0, 96
1028};
1029
1030static const short yycheck[] =
1031{
1032 9, 141, 8, 178, 144, 194, 15, 4, 128, 63,
1033 64, 0, 127, 63, 64, 4, 13, 14, 63, 64,
1034 8, 8, 9, 11, 12, 28, 45, 0, 37, 17,
1035 39, 8, 8, 15, 43, 11, 12, 8, 5, 6,
1036 7, 8, 9, 10, 11, 12, 55, 97, 37, 191,
1037 39, 229, 97, 33, 43, 8, 9, 246, 263, 99,
1038 249, 178, 20, 72, 102, 78, 55, 8, 9, 10,
1039 78, 111, 192, 6, 185, 8, 9, 10, 195, 8,
1040 9, 10, 40, 72, 42, 67, 34, 67, 107, 71,
1041 232, 104, 104, 51, 102, 37, 104, 106, 101, 8,
1042 278, 110, 11, 12, 110, 155, 103, 116, 97, 224,
1043 155, 44, 45, 55, 78, 9, 103, 106, 106, 128,
1044 109, 110, 311, 100, 241, 58, 59, 116, 182, 100,
1045 106, 296, 243, 82, 3, 102, 45, 342, 102, 128,
1046 104, 40, 11, 12, 309, 78, 102, 156, 157, 3,
1047 103, 84, 51, 22, 110, 24, 184, 26, 82, 100,
1048 93, 189, 103, 52, 275, 82, 155, 36, 105, 102,
1049 39, 100, 181, 21, 43, 184, 296, 46, 103, 229,
1050 189, 4, 107, 192, 229, 194, 361, 56, 308, 309,
1051 13, 14, 61, 103, 63, 370, 65, 107, 38, 8,
1052 103, 341, 11, 12, 107, 74, 75, 8, 9, 10,
1053 11, 12, 6, 106, 8, 9, 10, 226, 103, 208,
1054 89, 103, 107, 103, 110, 107, 235, 107, 22, 79,
1055 24, 103, 26, 102, 79, 107, 103, 103, 11, 12,
1056 107, 107, 36, 69, 6, 39, 8, 9, 10, 43,
1057 44, 50, 46, 106, 107, 13, 14, 11, 12, 94,
1058 95, 3, 56, 79, 58, 59, 110, 61, 3, 63,
1059 102, 65, 108, 6, 108, 8, 9, 10, 96, 97,
1060 74, 75, 44, 45, 35, 102, 66, 296, 102, 298,
1061 84, 102, 102, 3, 102, 89, 58, 59, 110, 308,
1062 309, 8, 311, 312, 110, 25, 104, 296, 102, 66,
1063 66, 44, 104, 30, 323, 103, 78, 107, 107, 98,
1064 309, 104, 84, 4, 102, 58, 59, 93, 109, 8,
1065 101, 93, 11, 12, 86, 105, 345, 104, 100, 18,
1066 102, 102, 111, 22, 23, 24, 355, 26, 27, 112,
1067 359, 84, 100, 103, 99, 4, 80, 36, 105, 4,
1068 39, 107, 105, 102, 43, 130, 110, 46, 47, 48,
1069 49, 111, 15, 105, 105, 27, 55, 56, 57, 55,
1070 72, 110, 61, 62, 63, 64, 65, 106, 8, 64,
1071 311, 11, 12, 72, 294, 74, 75, 76, 77, 228,
1072 155, 370, 81, 23, 83, 224, 298, 269, 328, 88,
1073 89, 90, 91, 92, 272, 187, 355, 274, 349, 345,
1074 308, 41, -1, -1, -1, 240, -1, 47, 48, 49,
1075 -1, -1, -1, 53, -1, -1, -1, 57, -1, -1,
1076 -1, -1, 62, -1, 64, -1, -1, -1, -1, -1,
1077 -1, -1, 72, -1, -1, -1, -1, -1, -1, -1,
1078 -1, 81, -1, 83, -1, -1, -1, -1, 88, -1,
1079 90, 91, 92, 11, 12, 13, 14, -1, -1, -1,
1080 18, -1, -1, -1, 22, 23, 24, -1, 26, 27,
1081 -1, -1, -1, -1, -1, 33, -1, -1, 36, -1,
1082 -1, 39, -1, -1, -1, 43, -1, -1, 46, 47,
1083 48, 49, -1, -1, -1, -1, -1, 55, 56, 57,
1084 -1, -1, -1, 61, 62, 63, 64, 65, -1, 67,
1085 -1, -1, -1, -1, 72, -1, 74, 75, 76, 77,
1086 -1, -1, -1, 81, -1, 83, -1, -1, 11, 12,
1087 88, 89, 90, 91, 92, 18, -1, -1, -1, 22,
1088 23, 24, -1, 26, 27, -1, -1, -1, -1, -1,
1089 -1, -1, -1, 36, -1, -1, 39, -1, -1, -1,
1090 43, -1, -1, 46, 47, 48, 49, -1, -1, -1,
1091 -1, -1, 55, 56, 57, -1, -1, -1, 61, 62,
1092 63, 64, 65, -1, -1, -1, -1, -1, -1, 72,
1093 -1, 74, 75, 76, 77, -1, -1, -1, 81, -1,
1094 83, -1, 85, 11, 12, 88, 89, 90, 91, 92,
1095 18, -1, -1, -1, 22, 23, 24, -1, 26, 27,
1096 -1, -1, -1, -1, -1, -1, -1, -1, 36, -1,
1097 -1, 39, -1, -1, -1, 43, -1, -1, 46, 47,
1098 48, 49, -1, -1, -1, -1, -1, 55, 56, 57,
1099 -1, -1, -1, 61, 62, 63, 64, 65, -1, -1,
1100 -1, 11, 12, -1, 72, -1, 74, 75, 76, 77,
1101 -1, -1, 22, 81, 24, 83, 26, 11, 12, -1,
1102 88, 89, 90, 91, 92, -1, 36, -1, 22, 39,
1103 24, -1, 26, 43, -1, -1, 46, -1, -1, -1,
1104 -1, -1, 36, -1, -1, 39, 56, -1, -1, 43,
1105 -1, 61, 46, 63, -1, 65, -1, -1, -1, -1,
1106 -1, -1, 56, -1, 74, 75, -1, 61, -1, 63,
1107 -1, 65, -1, -1, -1, -1, -1, -1, -1, 89,
1108 74, 75, -1, -1, -1, -1, -1, -1, -1, -1,
1109 -1, -1, -1, -1, -1, 89
1110};
1111
1112/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1113 symbol of state STATE-NUM. */
1114static const unsigned char yystos[] =
1115{
1116 0, 11, 12, 114, 115, 116, 208, 0, 116, 102,
1117 117, 118, 8, 9, 103, 119, 120, 210, 34, 103,
1118 120, 104, 20, 40, 42, 51, 121, 122, 123, 9,
1119 82, 82, 52, 82, 3, 123, 105, 21, 23, 41,
1120 47, 48, 49, 53, 57, 62, 64, 72, 81, 83,
1121 88, 90, 91, 92, 124, 125, 126, 127, 132, 135,
1122 138, 162, 170, 208, 210, 17, 106, 133, 134, 208,
1123 210, 45, 128, 129, 130, 131, 208, 210, 38, 126,
1124 3, 11, 12, 22, 24, 26, 36, 39, 43, 46,
1125 56, 61, 63, 65, 74, 75, 89, 102, 136, 157,
1126 167, 168, 209, 136, 106, 106, 107, 106, 129, 45,
1127 107, 28, 101, 144, 206, 207, 110, 79, 79, 69,
1128 50, 79, 139, 140, 167, 208, 3, 110, 3, 134,
1129 208, 131, 102, 40, 51, 11, 12, 18, 27, 55,
1130 76, 77, 85, 154, 156, 157, 167, 168, 169, 170,
1131 171, 208, 208, 210, 103, 107, 108, 108, 102, 13,
1132 14, 158, 159, 161, 5, 6, 7, 9, 10, 102,
1133 163, 165, 205, 208, 210, 117, 146, 147, 160, 161,
1134 35, 102, 66, 78, 102, 104, 172, 176, 177, 102,
1135 172, 172, 102, 202, 102, 3, 140, 210, 210, 6,
1136 44, 45, 58, 59, 78, 84, 93, 100, 102, 137,
1137 178, 179, 180, 181, 182, 183, 185, 186, 187, 192,
1138 193, 194, 205, 210, 110, 164, 110, 103, 107, 33,
1139 67, 154, 160, 198, 199, 25, 100, 143, 153, 155,
1140 210, 211, 157, 104, 143, 178, 66, 177, 143, 66,
1141 198, 100, 103, 203, 204, 205, 210, 141, 142, 156,
1142 210, 154, 30, 107, 208, 103, 107, 94, 95, 173,
1143 96, 97, 174, 98, 175, 104, 99, 111, 184, 102,
1144 159, 4, 166, 210, 93, 148, 149, 147, 102, 167,
1145 186, 200, 86, 145, 198, 210, 109, 103, 107, 207,
1146 154, 178, 103, 105, 156, 103, 156, 103, 107, 104,
1147 103, 107, 102, 179, 103, 100, 181, 182, 183, 178,
1148 111, 99, 186, 112, 195, 196, 4, 80, 201, 145,
1149 165, 205, 153, 105, 204, 165, 205, 142, 100, 188,
1150 189, 210, 107, 105, 111, 110, 197, 210, 103, 107,
1151 102, 166, 105, 105, 103, 107, 172, 179, 197, 110,
1152 196, 150, 189, 15, 67, 71, 190, 191, 210, 4,
1153 151, 152, 160, 103, 152
1154};
1155
1156#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1157# define YYSIZE_T __SIZE_TYPE__
1158#endif
1159#if ! defined (YYSIZE_T) && defined (size_t)
1160# define YYSIZE_T size_t
1161#endif
1162#if ! defined (YYSIZE_T)
1163# if defined (__STDC__) || defined (__cplusplus)
1164# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1165# define YYSIZE_T size_t
1166# endif
1167#endif
1168#if ! defined (YYSIZE_T)
1169# define YYSIZE_T unsigned int
1170#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001171
1172#define yyerrok (yyerrstatus = 0)
1173#define yyclearin (yychar = YYEMPTY)
1174#define YYEMPTY -2
1175#define YYEOF 0
Lev Walkinc3b72e92004-06-03 05:07:41 +00001176
Lev Walkinf15320b2004-06-03 03:38:44 +00001177#define YYACCEPT goto yyacceptlab
Lev Walkinc3b72e92004-06-03 05:07:41 +00001178#define YYABORT goto yyabortlab
Lev Walkinf15320b2004-06-03 03:38:44 +00001179#define YYERROR goto yyerrlab1
Lev Walkinc3b72e92004-06-03 05:07:41 +00001180
1181/* Like YYERROR except do call yyerror. This remains here temporarily
1182 to ease the transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +00001183 Once GCC version 2 has supplanted version 1, this can go. */
Lev Walkinc3b72e92004-06-03 05:07:41 +00001184
Lev Walkinf15320b2004-06-03 03:38:44 +00001185#define YYFAIL goto yyerrlab
Lev Walkinc3b72e92004-06-03 05:07:41 +00001186
Lev Walkinf15320b2004-06-03 03:38:44 +00001187#define YYRECOVERING() (!!yyerrstatus)
Lev Walkinc3b72e92004-06-03 05:07:41 +00001188
1189#define YYBACKUP(Token, Value) \
Lev Walkinf15320b2004-06-03 03:38:44 +00001190do \
1191 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkinc3b72e92004-06-03 05:07:41 +00001192 { \
1193 yychar = (Token); \
1194 yylval = (Value); \
Lev Walkinf15320b2004-06-03 03:38:44 +00001195 yychar1 = YYTRANSLATE (yychar); \
1196 YYPOPSTACK; \
1197 goto yybackup; \
1198 } \
1199 else \
Lev Walkinc3b72e92004-06-03 05:07:41 +00001200 { \
1201 yyerror ("syntax error: cannot back up"); \
1202 YYERROR; \
1203 } \
Lev Walkinf15320b2004-06-03 03:38:44 +00001204while (0)
1205
1206#define YYTERROR 1
1207#define YYERRCODE 256
1208
Lev Walkinc3b72e92004-06-03 05:07:41 +00001209/* YYLLOC_DEFAULT -- Compute the default location (before the actions
1210 are run). */
1211
1212#ifndef YYLLOC_DEFAULT
1213# define YYLLOC_DEFAULT(Current, Rhs, N) \
1214 Current.first_line = Rhs[1].first_line; \
1215 Current.first_column = Rhs[1].first_column; \
1216 Current.last_line = Rhs[N].last_line; \
1217 Current.last_column = Rhs[N].last_column;
Lev Walkinf15320b2004-06-03 03:38:44 +00001218#endif
1219
Lev Walkinc3b72e92004-06-03 05:07:41 +00001220/* YYLEX -- calling `yylex' with the right arguments. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001221
Lev Walkinc3b72e92004-06-03 05:07:41 +00001222#define YYLEX yylex ()
Lev Walkinf15320b2004-06-03 03:38:44 +00001223
Lev Walkinc3b72e92004-06-03 05:07:41 +00001224/* Enable debugging if requested. */
1225#if YYDEBUG
Lev Walkinf15320b2004-06-03 03:38:44 +00001226
Lev Walkinc3b72e92004-06-03 05:07:41 +00001227# ifndef YYFPRINTF
1228# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1229# define YYFPRINTF fprintf
1230# endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001231
Lev Walkinc3b72e92004-06-03 05:07:41 +00001232# define YYDPRINTF(Args) \
1233do { \
1234 if (yydebug) \
1235 YYFPRINTF Args; \
1236} while (0)
1237# define YYDSYMPRINT(Args) \
1238do { \
1239 if (yydebug) \
1240 yysymprint Args; \
1241} while (0)
1242/* Nonzero means print parse trace. It is left uninitialized so that
1243 multiple parsers can coexist. */
1244int yydebug;
1245#else /* !YYDEBUG */
1246# define YYDPRINTF(Args)
1247# define YYDSYMPRINT(Args)
1248#endif /* !YYDEBUG */
Lev Walkinf15320b2004-06-03 03:38:44 +00001249
Lev Walkinc3b72e92004-06-03 05:07:41 +00001250/* YYINITDEPTH -- initial size of the parser's stacks. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001251#ifndef YYINITDEPTH
Lev Walkinc3b72e92004-06-03 05:07:41 +00001252# define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +00001253#endif
1254
Lev Walkinc3b72e92004-06-03 05:07:41 +00001255/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1256 if the built-in stack extension method is used).
1257
1258 Do not make this value too large; the results are undefined if
1259 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
1260 evaluated with infinite-precision integer arithmetic. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001261
1262#if YYMAXDEPTH == 0
Lev Walkinc3b72e92004-06-03 05:07:41 +00001263# undef YYMAXDEPTH
Lev Walkinf15320b2004-06-03 03:38:44 +00001264#endif
1265
1266#ifndef YYMAXDEPTH
Lev Walkinc3b72e92004-06-03 05:07:41 +00001267# define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +00001268#endif
Lev Walkinc3b72e92004-06-03 05:07:41 +00001269
Lev Walkinf15320b2004-06-03 03:38:44 +00001270
Lev Walkinf15320b2004-06-03 03:38:44 +00001271
Lev Walkinc3b72e92004-06-03 05:07:41 +00001272#if YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00001273
Lev Walkinc3b72e92004-06-03 05:07:41 +00001274# ifndef yystrlen
1275# if defined (__GLIBC__) && defined (_STRING_H)
1276# define yystrlen strlen
1277# else
1278/* Return the length of YYSTR. */
1279static YYSIZE_T
1280# if defined (__STDC__) || defined (__cplusplus)
1281yystrlen (const char *yystr)
1282# else
1283yystrlen (yystr)
1284 const char *yystr;
1285# endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001286{
Lev Walkinc3b72e92004-06-03 05:07:41 +00001287 register const char *yys = yystr;
Lev Walkinf15320b2004-06-03 03:38:44 +00001288
Lev Walkinc3b72e92004-06-03 05:07:41 +00001289 while (*yys++ != '\0')
1290 continue;
1291
1292 return yys - yystr - 1;
1293}
1294# endif
1295# endif
1296
1297# ifndef yystpcpy
1298# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1299# define yystpcpy stpcpy
1300# else
1301/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1302 YYDEST. */
1303static char *
1304# if defined (__STDC__) || defined (__cplusplus)
1305yystpcpy (char *yydest, const char *yysrc)
1306# else
1307yystpcpy (yydest, yysrc)
1308 char *yydest;
1309 const char *yysrc;
1310# endif
1311{
1312 register char *yyd = yydest;
1313 register const char *yys = yysrc;
1314
1315 while ((*yyd++ = *yys++) != '\0')
1316 continue;
1317
1318 return yyd - 1;
1319}
1320# endif
1321# endif
1322
1323#endif /* !YYERROR_VERBOSE */
1324
1325
1326
1327#if YYDEBUG
1328/*-----------------------------.
1329| Print this symbol on YYOUT. |
1330`-----------------------------*/
1331
1332static void
1333#if defined (__STDC__) || defined (__cplusplus)
1334yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue)
1335#else
1336yysymprint (yyout, yytype, yyvalue)
1337 FILE* yyout;
1338 int yytype;
1339 YYSTYPE yyvalue;
1340#endif
1341{
1342 /* Pacify ``unused variable'' warnings. */
1343 (void) yyvalue;
1344
1345 if (yytype < YYNTOKENS)
1346 {
1347 YYFPRINTF (yyout, "token %s (", yytname[yytype]);
1348# ifdef YYPRINT
1349 YYPRINT (yyout, yytoknum[yytype], yyvalue);
1350# endif
1351 }
1352 else
1353 YYFPRINTF (yyout, "nterm %s (", yytname[yytype]);
1354
1355 switch (yytype)
1356 {
1357 default:
1358 break;
1359 }
1360 YYFPRINTF (yyout, ")");
1361}
1362#endif /* YYDEBUG. */
1363
1364
1365/*-----------------------------------------------.
1366| Release the memory associated to this symbol. |
1367`-----------------------------------------------*/
1368
1369static void
1370#if defined (__STDC__) || defined (__cplusplus)
1371yydestruct (int yytype, YYSTYPE yyvalue)
1372#else
1373yydestruct (yytype, yyvalue)
1374 int yytype;
1375 YYSTYPE yyvalue;
1376#endif
1377{
1378 /* Pacify ``unused variable'' warnings. */
1379 (void) yyvalue;
1380
1381 switch (yytype)
1382 {
1383 default:
1384 break;
1385 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001386}
1387
Lev Walkinf15320b2004-06-03 03:38:44 +00001388
Lev Walkinf15320b2004-06-03 03:38:44 +00001389
1390/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1391 into yyparse. The argument should have type void *.
1392 It should actually point to an object.
1393 Grammar actions can access the variable by casting it
1394 to the proper pointer type. */
1395
1396#ifdef YYPARSE_PARAM
Lev Walkinc3b72e92004-06-03 05:07:41 +00001397# if defined (__STDC__) || defined (__cplusplus)
1398# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1399# define YYPARSE_PARAM_DECL
1400# else
1401# define YYPARSE_PARAM_ARG YYPARSE_PARAM
1402# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1403# endif
1404#else /* !YYPARSE_PARAM */
1405# define YYPARSE_PARAM_ARG
1406# define YYPARSE_PARAM_DECL
1407#endif /* !YYPARSE_PARAM */
Lev Walkinf15320b2004-06-03 03:38:44 +00001408
1409/* Prevent warning if -Wstrict-prototypes. */
1410#ifdef __GNUC__
Lev Walkinc3b72e92004-06-03 05:07:41 +00001411# ifdef YYPARSE_PARAM
Lev Walkinf15320b2004-06-03 03:38:44 +00001412int yyparse (void *);
Lev Walkinc3b72e92004-06-03 05:07:41 +00001413# else
Lev Walkinf15320b2004-06-03 03:38:44 +00001414int yyparse (void);
Lev Walkinc3b72e92004-06-03 05:07:41 +00001415# endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001416#endif
Lev Walkinc3b72e92004-06-03 05:07:41 +00001417
1418
1419/* The lookahead symbol. */
1420int yychar;
1421
1422/* The semantic value of the lookahead symbol. */
1423YYSTYPE yylval;
1424
1425/* Number of parse errors so far. */
1426int yynerrs;
1427
Lev Walkinf15320b2004-06-03 03:38:44 +00001428
1429int
Lev Walkinc3b72e92004-06-03 05:07:41 +00001430yyparse (YYPARSE_PARAM_ARG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001431 YYPARSE_PARAM_DECL
1432{
Lev Walkinc3b72e92004-06-03 05:07:41 +00001433
Lev Walkinf15320b2004-06-03 03:38:44 +00001434 register int yystate;
1435 register int yyn;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001436 int yyresult;
1437 /* Number of tokens to shift before error messages enabled. */
1438 int yyerrstatus;
1439 /* Lookahead token as an internal (translated) token number. */
1440 int yychar1 = 0;
1441
1442 /* Three stacks and their tools:
1443 `yyss': related to states,
1444 `yyvs': related to semantic values,
1445 `yyls': related to locations.
1446
1447 Refer to the stacks thru separate pointers, to allow yyoverflow
1448 to reallocate them elsewhere. */
1449
1450 /* The state stack. */
1451 short yyssa[YYINITDEPTH];
1452 short *yyss = yyssa;
Lev Walkinf15320b2004-06-03 03:38:44 +00001453 register short *yyssp;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001454
1455 /* The semantic value stack. */
1456 YYSTYPE yyvsa[YYINITDEPTH];
1457 YYSTYPE *yyvs = yyvsa;
Lev Walkinf15320b2004-06-03 03:38:44 +00001458 register YYSTYPE *yyvsp;
Lev Walkinf15320b2004-06-03 03:38:44 +00001459
Lev Walkinf15320b2004-06-03 03:38:44 +00001460
Lev Walkinf15320b2004-06-03 03:38:44 +00001461
Lev Walkinf15320b2004-06-03 03:38:44 +00001462#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkinf15320b2004-06-03 03:38:44 +00001463
Lev Walkinc3b72e92004-06-03 05:07:41 +00001464 YYSIZE_T yystacksize = YYINITDEPTH;
Lev Walkinf15320b2004-06-03 03:38:44 +00001465
Lev Walkinc3b72e92004-06-03 05:07:41 +00001466 /* The variables used to return semantic value and location from the
1467 action routines. */
1468 YYSTYPE yyval;
Lev Walkinf15320b2004-06-03 03:38:44 +00001469
Lev Walkinf15320b2004-06-03 03:38:44 +00001470
Lev Walkinc3b72e92004-06-03 05:07:41 +00001471 /* When reducing, the number of symbols on the RHS of the reduced
1472 rule. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001473 int yylen;
1474
Lev Walkinc3b72e92004-06-03 05:07:41 +00001475 YYDPRINTF ((stderr, "Starting parse\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001476
1477 yystate = 0;
1478 yyerrstatus = 0;
1479 yynerrs = 0;
1480 yychar = YYEMPTY; /* Cause a token to be read. */
1481
1482 /* Initialize stack pointers.
1483 Waste one element of value and location stack
1484 so that they stay on the same level as the state stack.
1485 The wasted elements are never initialized. */
1486
Lev Walkinc3b72e92004-06-03 05:07:41 +00001487 yyssp = yyss;
Lev Walkinf15320b2004-06-03 03:38:44 +00001488 yyvsp = yyvs;
Lev Walkinf15320b2004-06-03 03:38:44 +00001489
Lev Walkinc3b72e92004-06-03 05:07:41 +00001490 goto yysetstate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001491
Lev Walkinc3b72e92004-06-03 05:07:41 +00001492/*------------------------------------------------------------.
1493| yynewstate -- Push a new state, which is found in yystate. |
1494`------------------------------------------------------------*/
1495 yynewstate:
1496 /* In all cases, when you get here, the value and location stacks
1497 have just been pushed. so pushing a state here evens the stacks.
1498 */
1499 yyssp++;
1500
1501 yysetstate:
1502 *yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001503
1504 if (yyssp >= yyss + yystacksize - 1)
1505 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001506 /* Get the current used size of the three stacks, in elements. */
Lev Walkinc3b72e92004-06-03 05:07:41 +00001507 YYSIZE_T yysize = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001508
1509#ifdef yyoverflow
Lev Walkinc3b72e92004-06-03 05:07:41 +00001510 {
1511 /* Give user a chance to reallocate the stack. Use copies of
1512 these so that the &'s don't force the real ones into
1513 memory. */
1514 YYSTYPE *yyvs1 = yyvs;
1515 short *yyss1 = yyss;
Lev Walkinf15320b2004-06-03 03:38:44 +00001516
Lev Walkinc3b72e92004-06-03 05:07:41 +00001517
1518 /* Each stack pointer address is followed by the size of the
1519 data in use in that stack, in bytes. This used to be a
1520 conditional around just the two extra args, but that might
1521 be undefined if yyoverflow is a macro. */
1522 yyoverflow ("parser stack overflow",
1523 &yyss1, yysize * sizeof (*yyssp),
1524 &yyvs1, yysize * sizeof (*yyvsp),
1525
1526 &yystacksize);
1527
1528 yyss = yyss1;
1529 yyvs = yyvs1;
1530 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001531#else /* no yyoverflow */
Lev Walkinc3b72e92004-06-03 05:07:41 +00001532# ifndef YYSTACK_RELOCATE
1533 goto yyoverflowlab;
1534# else
Lev Walkinf15320b2004-06-03 03:38:44 +00001535 /* Extend the stack our own way. */
1536 if (yystacksize >= YYMAXDEPTH)
Lev Walkinc3b72e92004-06-03 05:07:41 +00001537 goto yyoverflowlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001538 yystacksize *= 2;
1539 if (yystacksize > YYMAXDEPTH)
1540 yystacksize = YYMAXDEPTH;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001541
1542 {
1543 short *yyss1 = yyss;
1544 union yyalloc *yyptr =
1545 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1546 if (! yyptr)
1547 goto yyoverflowlab;
1548 YYSTACK_RELOCATE (yyss);
1549 YYSTACK_RELOCATE (yyvs);
1550
1551# undef YYSTACK_RELOCATE
1552 if (yyss1 != yyssa)
1553 YYSTACK_FREE (yyss1);
1554 }
1555# endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001556#endif /* no yyoverflow */
1557
Lev Walkinc3b72e92004-06-03 05:07:41 +00001558 yyssp = yyss + yysize - 1;
1559 yyvsp = yyvs + yysize - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001560
Lev Walkinc3b72e92004-06-03 05:07:41 +00001561
1562 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1563 (unsigned long int) yystacksize));
Lev Walkinf15320b2004-06-03 03:38:44 +00001564
1565 if (yyssp >= yyss + yystacksize - 1)
1566 YYABORT;
1567 }
1568
Lev Walkinc3b72e92004-06-03 05:07:41 +00001569 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Lev Walkinf15320b2004-06-03 03:38:44 +00001570
1571 goto yybackup;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001572
1573/*-----------.
1574| yybackup. |
1575`-----------*/
1576yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001577
1578/* Do appropriate processing given the current state. */
1579/* Read a lookahead token if we need one and don't already have one. */
1580/* yyresume: */
1581
1582 /* First try to decide what to do without reference to lookahead token. */
1583
1584 yyn = yypact[yystate];
Lev Walkinc3b72e92004-06-03 05:07:41 +00001585 if (yyn == YYPACT_NINF)
Lev Walkinf15320b2004-06-03 03:38:44 +00001586 goto yydefault;
1587
1588 /* Not known => get a lookahead token if don't already have one. */
1589
1590 /* yychar is either YYEMPTY or YYEOF
1591 or a valid token in external form. */
1592
1593 if (yychar == YYEMPTY)
1594 {
Lev Walkinc3b72e92004-06-03 05:07:41 +00001595 YYDPRINTF ((stderr, "Reading a token: "));
Lev Walkinf15320b2004-06-03 03:38:44 +00001596 yychar = YYLEX;
1597 }
1598
Lev Walkinc3b72e92004-06-03 05:07:41 +00001599 /* Convert token to internal form (in yychar1) for indexing tables with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001600
Lev Walkinc3b72e92004-06-03 05:07:41 +00001601 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001602 {
1603 yychar1 = 0;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001604 yychar = YYEOF; /* Don't call YYLEX any more. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001605
Lev Walkinc3b72e92004-06-03 05:07:41 +00001606 YYDPRINTF ((stderr, "Now at end of input.\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001607 }
1608 else
1609 {
Lev Walkinc3b72e92004-06-03 05:07:41 +00001610 yychar1 = YYTRANSLATE (yychar);
Lev Walkinf15320b2004-06-03 03:38:44 +00001611
Lev Walkinc3b72e92004-06-03 05:07:41 +00001612 /* We have to keep this `#if YYDEBUG', since we use variables
1613 which are defined only if `YYDEBUG' is set. */
1614 YYDPRINTF ((stderr, "Next token is "));
1615 YYDSYMPRINT ((stderr, yychar1, yylval));
1616 YYDPRINTF ((stderr, "\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001617 }
1618
Lev Walkinc3b72e92004-06-03 05:07:41 +00001619 /* If the proper action on seeing token YYCHAR1 is to reduce or to
1620 detect an error, take that action. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001621 yyn += yychar1;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001622 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001623 goto yydefault;
Lev Walkinf15320b2004-06-03 03:38:44 +00001624 yyn = yytable[yyn];
Lev Walkinc3b72e92004-06-03 05:07:41 +00001625 if (yyn <= 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001626 {
Lev Walkinc3b72e92004-06-03 05:07:41 +00001627 if (yyn == 0 || yyn == YYTABLE_NINF)
Lev Walkinf15320b2004-06-03 03:38:44 +00001628 goto yyerrlab;
1629 yyn = -yyn;
1630 goto yyreduce;
1631 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001632
1633 if (yyn == YYFINAL)
1634 YYACCEPT;
1635
1636 /* Shift the lookahead token. */
Lev Walkinc3b72e92004-06-03 05:07:41 +00001637 YYDPRINTF ((stderr, "Shifting token %d (%s), ",
1638 yychar, yytname[yychar1]));
Lev Walkinf15320b2004-06-03 03:38:44 +00001639
1640 /* Discard the token being shifted unless it is eof. */
1641 if (yychar != YYEOF)
1642 yychar = YYEMPTY;
1643
1644 *++yyvsp = yylval;
Lev Walkinf15320b2004-06-03 03:38:44 +00001645
Lev Walkinc3b72e92004-06-03 05:07:41 +00001646
1647 /* Count tokens shifted since error; after three, turn off error
1648 status. */
1649 if (yyerrstatus)
1650 yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001651
1652 yystate = yyn;
1653 goto yynewstate;
1654
Lev Walkinf15320b2004-06-03 03:38:44 +00001655
Lev Walkinc3b72e92004-06-03 05:07:41 +00001656/*-----------------------------------------------------------.
1657| yydefault -- do the default action for the current state. |
1658`-----------------------------------------------------------*/
1659yydefault:
Lev Walkinf15320b2004-06-03 03:38:44 +00001660 yyn = yydefact[yystate];
1661 if (yyn == 0)
1662 goto yyerrlab;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001663 goto yyreduce;
Lev Walkinf15320b2004-06-03 03:38:44 +00001664
Lev Walkinc3b72e92004-06-03 05:07:41 +00001665
1666/*-----------------------------.
1667| yyreduce -- Do a reduction. |
1668`-----------------------------*/
Lev Walkinf15320b2004-06-03 03:38:44 +00001669yyreduce:
Lev Walkinc3b72e92004-06-03 05:07:41 +00001670 /* yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001671 yylen = yyr2[yyn];
Lev Walkinf15320b2004-06-03 03:38:44 +00001672
Lev Walkinc3b72e92004-06-03 05:07:41 +00001673 /* If YYLEN is nonzero, implement the default value of the action:
1674 `$$ = $1'.
1675
1676 Otherwise, the following line sets YYVAL to garbage.
1677 This behavior is undocumented and Bison
1678 users should not rely upon it. Assigning to YYVAL
1679 unconditionally makes the parser a bit smaller, and it avoids a
1680 GCC warning that YYVAL may be used uninitialized. */
1681 yyval = yyvsp[1-yylen];
1682
1683
1684
1685#if YYDEBUG
1686 /* We have to keep this `#if YYDEBUG', since we use variables which
1687 are defined only if `YYDEBUG' is set. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001688 if (yydebug)
1689 {
Lev Walkinc3b72e92004-06-03 05:07:41 +00001690 int yyi;
Lev Walkinf15320b2004-06-03 03:38:44 +00001691
Lev Walkinc3b72e92004-06-03 05:07:41 +00001692 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
1693 yyn - 1, yyrline[yyn]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001694
1695 /* Print the symbols being reduced, and their result. */
Lev Walkinc3b72e92004-06-03 05:07:41 +00001696 for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
1697 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
1698 YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001699 }
1700#endif
Lev Walkinc3b72e92004-06-03 05:07:41 +00001701 switch (yyn)
1702 {
1703 case 2:
Lev Walkinf15320b2004-06-03 03:38:44 +00001704#line 298 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001705 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001706 *(void **)param = yyvsp[0].a_grammar;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001707 }
1708 break;
1709
1710 case 3:
Lev Walkinf15320b2004-06-03 03:38:44 +00001711#line 304 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001712 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001713 yyval.a_grammar = asn1p_new();
1714 checkmem(yyval.a_grammar);
1715 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00001716 }
1717 break;
1718
1719 case 4:
Lev Walkinf15320b2004-06-03 03:38:44 +00001720#line 309 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001721 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001722 yyval.a_grammar = yyvsp[-1].a_grammar;
1723 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00001724 }
1725 break;
1726
1727 case 5:
Lev Walkinf15320b2004-06-03 03:38:44 +00001728#line 330 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001729 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001730
1731 if(yyvsp[-1].a_module) {
1732 yyval.a_module = yyvsp[-1].a_module;
1733 } else {
1734 /* There's a chance that a module is just plain empty */
1735 yyval.a_module = asn1p_module_new();
1736 }
1737 checkmem(yyval.a_module);
1738
1739 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1740 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1741 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001742 }
1743 break;
1744
1745 case 6:
Lev Walkinf15320b2004-06-03 03:38:44 +00001746#line 351 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001747 { yyval.a_oid = 0; }
1748 break;
1749
1750 case 7:
Lev Walkinf15320b2004-06-03 03:38:44 +00001751#line 352 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001752 { yyval.a_oid = yyvsp[0].a_oid; }
1753 break;
1754
1755 case 8:
Lev Walkinf15320b2004-06-03 03:38:44 +00001756#line 356 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001757 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001758 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001759 }
1760 break;
1761
1762 case 9:
Lev Walkinf15320b2004-06-03 03:38:44 +00001763#line 359 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001764 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001765 yyval.a_oid = 0;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001766 }
1767 break;
1768
1769 case 10:
Lev Walkinf15320b2004-06-03 03:38:44 +00001770#line 365 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001771 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001772 yyval.a_oid = asn1p_oid_new();
1773 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1774 if(yyvsp[0].a_oid_arc.name)
1775 free(yyvsp[0].a_oid_arc.name);
Lev Walkinc3b72e92004-06-03 05:07:41 +00001776 }
1777 break;
1778
1779 case 11:
Lev Walkinf15320b2004-06-03 03:38:44 +00001780#line 371 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001781 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001782 yyval.a_oid = yyvsp[-1].a_oid;
1783 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1784 if(yyvsp[0].a_oid_arc.name)
1785 free(yyvsp[0].a_oid_arc.name);
Lev Walkinc3b72e92004-06-03 05:07:41 +00001786 }
1787 break;
1788
1789 case 12:
Lev Walkinf15320b2004-06-03 03:38:44 +00001790#line 380 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001791 { /* iso */
Lev Walkinf15320b2004-06-03 03:38:44 +00001792 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1793 yyval.a_oid_arc.number = -1;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001794 }
1795 break;
1796
1797 case 13:
Lev Walkinf15320b2004-06-03 03:38:44 +00001798#line 384 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001799 { /* iso(1) */
Lev Walkinf15320b2004-06-03 03:38:44 +00001800 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1801 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001802 }
1803 break;
1804
1805 case 14:
Lev Walkinf15320b2004-06-03 03:38:44 +00001806#line 388 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001807 { /* 1 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001808 yyval.a_oid_arc.name = 0;
1809 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001810 }
1811 break;
1812
1813 case 15:
Lev Walkinf15320b2004-06-03 03:38:44 +00001814#line 398 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001815 { yyval.a_module_flags = MSF_NOFLAGS; }
1816 break;
1817
1818 case 16:
Lev Walkinf15320b2004-06-03 03:38:44 +00001819#line 399 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001820 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001821 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001822 }
1823 break;
1824
1825 case 17:
Lev Walkinf15320b2004-06-03 03:38:44 +00001826#line 408 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001827 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001828 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001829 }
1830 break;
1831
1832 case 18:
Lev Walkinf15320b2004-06-03 03:38:44 +00001833#line 411 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001834 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001835 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001836 }
1837 break;
1838
1839 case 19:
Lev Walkinf15320b2004-06-03 03:38:44 +00001840#line 420 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001841 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001842 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001843 }
1844 break;
1845
1846 case 20:
Lev Walkinf15320b2004-06-03 03:38:44 +00001847#line 423 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001848 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001849 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001850 }
1851 break;
1852
1853 case 21:
Lev Walkinf15320b2004-06-03 03:38:44 +00001854#line 426 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001855 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001856 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001857 }
1858 break;
1859
1860 case 22:
Lev Walkinf15320b2004-06-03 03:38:44 +00001861#line 429 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001862 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001863 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001864 }
1865 break;
1866
1867 case 23:
Lev Walkinf15320b2004-06-03 03:38:44 +00001868#line 438 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001869 { yyval.a_module = 0; }
1870 break;
1871
1872 case 24:
Lev Walkinf15320b2004-06-03 03:38:44 +00001873#line 439 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001874 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001875 assert(yyvsp[0].a_module);
1876 yyval.a_module = yyvsp[0].a_module;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001877 }
1878 break;
1879
1880 case 25:
Lev Walkinf15320b2004-06-03 03:38:44 +00001881#line 449 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001882 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001883 yyval.a_module = yyvsp[0].a_module;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001884 }
1885 break;
1886
1887 case 26:
Lev Walkinf15320b2004-06-03 03:38:44 +00001888#line 452 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001889 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001890 yyval.a_module = yyvsp[-1].a_module;
1891
1892#ifdef MY_IMPORT
1893#error MY_IMPORT DEFINED ELSEWHERE!
1894#endif
1895#define MY_IMPORT(foo,field) do { \
1896 if(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
1897 TQ_ADD(&(yyval.a_module->foo), \
1898 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1899 field); \
1900 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1901 } } while(0)
1902
1903 MY_IMPORT(imports, xp_next);
1904 MY_IMPORT(exports, xp_next);
1905 MY_IMPORT(members, next);
1906#undef MY_IMPORT
1907
Lev Walkinc3b72e92004-06-03 05:07:41 +00001908 }
1909 break;
1910
1911 case 27:
Lev Walkinf15320b2004-06-03 03:38:44 +00001912#line 478 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001913 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001914 yyval.a_module = yyvsp[0].a_module;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001915 }
1916 break;
1917
1918 case 28:
Lev Walkinf15320b2004-06-03 03:38:44 +00001919#line 481 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001920 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001921 yyval.a_module = asn1p_module_new();
1922 checkmem(yyval.a_module);
1923 if(yyvsp[0].a_xports) {
1924 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1925 } else {
1926 /* "EXPORTS ALL;" ? */
1927 }
Lev Walkinc3b72e92004-06-03 05:07:41 +00001928 }
1929 break;
1930
1931 case 29:
Lev Walkinf15320b2004-06-03 03:38:44 +00001932#line 490 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001933 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001934 yyval.a_module = asn1p_module_new();
1935 checkmem(yyval.a_module);
1936 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1937 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1938 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00001939 }
1940 break;
1941
1942 case 30:
Lev Walkinf15320b2004-06-03 03:38:44 +00001943#line 497 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001944 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001945 yyval.a_module = asn1p_module_new();
1946 checkmem(yyval.a_module);
1947 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1948 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1949 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00001950 }
1951 break;
1952
1953 case 31:
Lev Walkinf15320b2004-06-03 03:38:44 +00001954#line 510 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001955 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001956 yyval.a_module = asn1p_module_new();
1957 checkmem(yyval.a_module);
1958 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1959 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1960 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00001961 }
1962 break;
1963
1964 case 32:
Lev Walkinf15320b2004-06-03 03:38:44 +00001965#line 521 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001966 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001967 return yyerror(
1968 "Attempt to redefine a standard basic type, "
1969 "use -ftypesXY to switch back "
1970 "to older version of ASN.1 standard");
Lev Walkinc3b72e92004-06-03 05:07:41 +00001971 }
1972 break;
1973
1974 case 33:
Lev Walkinf15320b2004-06-03 03:38:44 +00001975#line 535 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001976 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001977 yyval.a_module = yyvsp[-1].a_module;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001978 }
1979 break;
1980
1981 case 34:
Lev Walkinf15320b2004-06-03 03:38:44 +00001982#line 541 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001983 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001984 return yyerror("Empty IMPORTS list");
Lev Walkinc3b72e92004-06-03 05:07:41 +00001985 }
1986 break;
1987
1988 case 35:
Lev Walkinf15320b2004-06-03 03:38:44 +00001989#line 547 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001990 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001991 yyval.a_module = asn1p_module_new();
1992 checkmem(yyval.a_module);
1993 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00001994 }
1995 break;
1996
1997 case 36:
Lev Walkinf15320b2004-06-03 03:38:44 +00001998#line 552 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00001999 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002000 yyval.a_module = yyvsp[-1].a_module;
2001 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002002 }
2003 break;
2004
2005 case 37:
Lev Walkinf15320b2004-06-03 03:38:44 +00002006#line 559 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002007 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002008 yyval.a_xports = yyvsp[-3].a_xports;
2009 yyval.a_xports->from = yyvsp[-1].tv_str;
2010 yyval.a_xports->from_oid = yyvsp[0].a_oid;
2011 checkmem(yyval.a_xports);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002012 }
2013 break;
2014
2015 case 38:
Lev Walkinf15320b2004-06-03 03:38:44 +00002016#line 568 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002017 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002018 yyval.a_xports = asn1p_xports_new();
2019 checkmem(yyval.a_xports);
2020 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002021 }
2022 break;
2023
2024 case 39:
Lev Walkinf15320b2004-06-03 03:38:44 +00002025#line 573 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002026 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002027 yyval.a_xports = yyvsp[-2].a_xports;
2028 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002029 }
2030 break;
2031
2032 case 40:
Lev Walkinf15320b2004-06-03 03:38:44 +00002033#line 580 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002034 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002035 yyval.a_expr = asn1p_expr_new(yylineno);
2036 checkmem(yyval.a_expr);
2037 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2038 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002039 }
2040 break;
2041
2042 case 41:
Lev Walkinf15320b2004-06-03 03:38:44 +00002043#line 586 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002044 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002045 yyval.a_expr = asn1p_expr_new(yylineno);
2046 checkmem(yyval.a_expr);
2047 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2048 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002049 }
2050 break;
2051
2052 case 42:
Lev Walkinf15320b2004-06-03 03:38:44 +00002053#line 595 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002054 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002055 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002056 }
2057 break;
2058
2059 case 43:
Lev Walkinf15320b2004-06-03 03:38:44 +00002060#line 598 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002061 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002062 yyval.a_xports = 0;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002063 }
2064 break;
2065
2066 case 44:
Lev Walkinf15320b2004-06-03 03:38:44 +00002067#line 601 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002068 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002069 /* Empty EXPORTS clause effectively prohibits export. */
2070 yyval.a_xports = asn1p_xports_new();
2071 checkmem(yyval.a_xports);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002072 }
2073 break;
2074
2075 case 45:
Lev Walkinf15320b2004-06-03 03:38:44 +00002076#line 609 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002077 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002078 yyval.a_xports = asn1p_xports_new();
2079 assert(yyval.a_xports);
2080 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002081 }
2082 break;
2083
2084 case 46:
Lev Walkinf15320b2004-06-03 03:38:44 +00002085#line 614 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002086 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002087 yyval.a_xports = yyvsp[-2].a_xports;
2088 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002089 }
2090 break;
2091
2092 case 47:
Lev Walkinf15320b2004-06-03 03:38:44 +00002093#line 621 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002094 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002095 yyval.a_expr = asn1p_expr_new(yylineno);
2096 checkmem(yyval.a_expr);
2097 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2098 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002099 }
2100 break;
2101
2102 case 48:
Lev Walkinf15320b2004-06-03 03:38:44 +00002103#line 627 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002104 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002105 yyval.a_expr = asn1p_expr_new(yylineno);
2106 checkmem(yyval.a_expr);
2107 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2108 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002109 }
2110 break;
2111
2112 case 49:
Lev Walkinf15320b2004-06-03 03:38:44 +00002113#line 637 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002114 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002115 yyval.a_expr = yyvsp[-4].a_expr;
2116 assert(yyval.a_expr->Identifier == 0);
2117 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2118 yyval.a_expr->meta_type = AMT_VALUESET;
2119 // take care of optValueSetBody
Lev Walkinc3b72e92004-06-03 05:07:41 +00002120 }
2121 break;
2122
2123 case 50:
Lev Walkinf15320b2004-06-03 03:38:44 +00002124#line 647 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002125 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002126 yyval.a_expr = asn1p_expr_new(yylineno);
2127 checkmem(yyval.a_expr);
2128 yyval.a_expr->reference = yyvsp[0].a_ref;
2129 yyval.a_expr->expr_type = A1TC_REFERENCE;
2130 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002131 }
2132 break;
2133
2134 case 51:
Lev Walkinf15320b2004-06-03 03:38:44 +00002135#line 654 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002136 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002137 yyval.a_expr = asn1p_expr_new(yylineno);
2138 checkmem(yyval.a_expr);
2139 yyval.a_expr->expr_type = yyvsp[0].a_type;
2140 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002141 }
2142 break;
2143
2144 case 52:
Lev Walkinf15320b2004-06-03 03:38:44 +00002145#line 663 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002146 { }
2147 break;
2148
2149 case 53:
Lev Walkinf15320b2004-06-03 03:38:44 +00002150#line 664 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002151 {
2152 }
2153 break;
2154
2155 case 54:
Lev Walkinf15320b2004-06-03 03:38:44 +00002156#line 680 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002157 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002158 yyval.a_expr = asn1p_expr_new(yylineno);
2159 checkmem(yyval.a_expr);
2160 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2161 yyval.a_expr->tag = yyvsp[-1].a_tag;
2162 yyval.a_expr->expr_type = A1TC_TYPEID;
2163 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002164 }
2165 break;
2166
2167 case 55:
Lev Walkinf15320b2004-06-03 03:38:44 +00002168#line 688 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002169 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002170 yyval.a_expr = yyvsp[0].a_expr;
2171 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2172 yyval.a_expr->tag = yyvsp[-1].a_tag;
2173 assert(yyval.a_expr->expr_type);
2174 assert(yyval.a_expr->meta_type);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002175 }
2176 break;
2177
2178 case 56:
Lev Walkinf15320b2004-06-03 03:38:44 +00002179#line 695 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002180 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002181 yyval.a_expr = yyvsp[0].a_expr;
2182 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2183 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2184 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002185 }
2186 break;
2187
2188 case 57:
Lev Walkinf15320b2004-06-03 03:38:44 +00002189#line 712 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002190 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002191 yyval.a_expr = yyvsp[0].a_expr;
2192 assert(yyval.a_expr->Identifier == 0);
2193 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2194 yyval.a_expr->params = yyvsp[-3].a_plist;
2195 yyval.a_expr->meta_type = AMT_PARAMTYPE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002196 }
2197 break;
2198
2199 case 58:
Lev Walkinf15320b2004-06-03 03:38:44 +00002200#line 722 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002201 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002202 int ret;
2203 yyval.a_plist = asn1p_paramlist_new(yylineno);
2204 checkmem(yyval.a_plist);
2205 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
2206 checkmem(ret == 0);
2207 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2208 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002209 }
2210 break;
2211
2212 case 59:
Lev Walkinf15320b2004-06-03 03:38:44 +00002213#line 731 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002214 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002215 int ret;
2216 yyval.a_plist = yyvsp[-2].a_plist;
2217 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
2218 checkmem(ret == 0);
2219 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2220 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002221 }
2222 break;
2223
2224 case 60:
Lev Walkinf15320b2004-06-03 03:38:44 +00002225#line 742 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002226 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002227 yyval.a_parg.governor = NULL;
2228 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002229 }
2230 break;
2231
2232 case 61:
Lev Walkinf15320b2004-06-03 03:38:44 +00002233#line 746 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002234 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002235 int ret;
2236 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2237 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
2238 checkmem(ret == 0);
2239 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002240 }
2241 break;
2242
2243 case 62:
Lev Walkinf15320b2004-06-03 03:38:44 +00002244#line 753 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002245 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002246 int ret;
2247 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2248 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2249 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2250 checkmem(ret == 0);
2251 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002252 }
2253 break;
2254
2255 case 63:
Lev Walkinf15320b2004-06-03 03:38:44 +00002256#line 764 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002257 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002258 yyval.a_expr = asn1p_expr_new(yylineno);
2259 checkmem(yyval.a_expr);
2260 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002261 }
2262 break;
2263
2264 case 64:
Lev Walkinf15320b2004-06-03 03:38:44 +00002265#line 769 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002266 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002267 yyval.a_expr = yyvsp[-2].a_expr;
2268 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002269 }
2270 break;
2271
2272 case 65:
Lev Walkinf15320b2004-06-03 03:38:44 +00002273#line 776 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002274 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002275 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002276 }
2277 break;
2278
2279 case 66:
Lev Walkinf15320b2004-06-03 03:38:44 +00002280#line 779 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002281 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002282 yyval.a_expr = asn1p_expr_new(yylineno);
2283 checkmem(yyval.a_expr);
2284 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2285 yyval.a_expr->expr_type = A1TC_REFERENCE;
2286 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002287 }
2288 break;
2289
2290 case 67:
Lev Walkinf15320b2004-06-03 03:38:44 +00002291#line 792 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002292 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002293 yyval.a_expr = asn1p_expr_new(yylineno);
2294 checkmem(yyval.a_expr);
2295 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002296 }
2297 break;
2298
2299 case 68:
Lev Walkinf15320b2004-06-03 03:38:44 +00002300#line 797 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002301 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002302 yyval.a_expr = yyvsp[-2].a_expr;
2303 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002304 }
2305 break;
2306
2307 case 69:
Lev Walkinf15320b2004-06-03 03:38:44 +00002308#line 804 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002309 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002310 yyval.a_expr = yyvsp[-2].a_expr;
2311 checkmem(yyval.a_expr);
2312 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2313 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2314 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002315 }
2316 break;
2317
2318 case 70:
Lev Walkinf15320b2004-06-03 03:38:44 +00002319#line 814 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002320 { yyval.a_int = 0; }
2321 break;
2322
2323 case 71:
Lev Walkinf15320b2004-06-03 03:38:44 +00002324#line 815 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002325 { yyval.a_int = 1; }
2326 break;
2327
2328 case 72:
Lev Walkinf15320b2004-06-03 03:38:44 +00002329#line 819 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002330 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002331 yyval.a_expr = asn1p_expr_new(yylineno);
2332 checkmem(yyval.a_expr);
2333 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2334 yyval.a_expr->meta_type = AMT_OBJECT;
2335 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002336 }
2337 break;
2338
2339 case 73:
Lev Walkinf15320b2004-06-03 03:38:44 +00002340#line 826 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002341 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002342 yyval.a_expr = yyvsp[-2].a_expr;
2343 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002344 }
2345 break;
2346
2347 case 74:
Lev Walkinf15320b2004-06-03 03:38:44 +00002348#line 833 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002349 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002350 yyval.a_expr = asn1p_expr_new(yylineno);
2351 checkmem(yyval.a_expr);
2352 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2353 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2354 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2355 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002356 }
2357 break;
2358
2359 case 75:
Lev Walkinf15320b2004-06-03 03:38:44 +00002360#line 841 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002361 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002362 yyval.a_expr = yyvsp[-1].a_expr;
2363 yyval.a_expr->Identifier = yyvsp[-2].a_refcomp.name;
2364 yyval.a_expr->unique = yyvsp[0].a_int;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002365 }
2366 break;
2367
2368 case 76:
Lev Walkinf15320b2004-06-03 03:38:44 +00002369#line 846 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002370 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002371 int ret;
2372 yyval.a_expr = asn1p_expr_new(yylineno);
2373 checkmem(yyval.a_expr);
2374 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2375 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2376 checkmem(yyval.a_expr->reference);
2377 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2378 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2379 checkmem(ret == 0);
2380 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2381 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2382 yyval.a_expr->marker = yyvsp[-1].a_marker;
2383 yyval.a_expr->unique = yyvsp[0].a_int;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002384 }
2385 break;
2386
2387 case 77:
Lev Walkinf15320b2004-06-03 03:38:44 +00002388#line 864 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002389 { yyval.a_wsynt = 0; }
2390 break;
2391
2392 case 78:
Lev Walkinf15320b2004-06-03 03:38:44 +00002393#line 865 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002394 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002395 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002396 }
2397 break;
2398
2399 case 79:
Lev Walkinf15320b2004-06-03 03:38:44 +00002400#line 872 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002401 { asn1p_lexer_hack_enable_with_syntax(); }
2402 break;
2403
2404 case 80:
Lev Walkinf15320b2004-06-03 03:38:44 +00002405#line 874 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002406 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002407 yyval.a_wsynt = yyvsp[-1].a_wsynt;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002408 }
2409 break;
2410
2411 case 81:
Lev Walkinf15320b2004-06-03 03:38:44 +00002412#line 880 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002413 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002414 yyval.a_wsynt = asn1p_wsyntx_new();
2415 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002416 }
2417 break;
2418
2419 case 82:
Lev Walkinf15320b2004-06-03 03:38:44 +00002420#line 884 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002421 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002422 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2423 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002424 }
2425 break;
2426
2427 case 83:
Lev Walkinf15320b2004-06-03 03:38:44 +00002428#line 891 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002429 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002430 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002431 }
2432 break;
2433
2434 case 84:
Lev Walkinf15320b2004-06-03 03:38:44 +00002435#line 894 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002436 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002437 asn1p_ref_t *ref;
2438 int ret;
2439 ref = asn1p_ref_new(yylineno);
2440 checkmem(ref);
2441 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2442 checkmem(ret == 0);
2443 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002444 }
2445 break;
2446
2447 case 85:
Lev Walkinf15320b2004-06-03 03:38:44 +00002448#line 920 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002449 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002450 yyval.a_expr = yyvsp[0].a_expr;
2451 assert(yyval.a_expr->Identifier == 0);
2452 yyval.a_expr->Identifier = yyvsp[-1].tv_nametag.name;
2453 yyval.a_expr->tag = yyvsp[-1].tv_nametag.tag;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002454 }
2455 break;
2456
2457 case 86:
Lev Walkinf15320b2004-06-03 03:38:44 +00002458#line 926 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002459 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002460 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002461 }
2462 break;
2463
2464 case 87:
Lev Walkinf15320b2004-06-03 03:38:44 +00002465#line 932 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002466 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002467 yyval.a_expr = yyvsp[-2].a_expr;
2468 yyval.a_expr->constraints = yyvsp[-1].a_constr;
2469 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002470 }
2471 break;
2472
2473 case 88:
Lev Walkinf15320b2004-06-03 03:38:44 +00002474#line 940 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002475 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002476 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2477 checkmem(yyval.a_expr);
2478 yyval.a_expr->Identifier = strdup("...");
2479 checkmem(yyval.a_expr->Identifier);
2480 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2481 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002482 }
2483 break;
2484
2485 case 89:
Lev Walkinf15320b2004-06-03 03:38:44 +00002486#line 948 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002487 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002488 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2489 checkmem(yyval.a_expr);
2490 yyval.a_expr->Identifier = strdup("...");
2491 checkmem(yyval.a_expr->Identifier);
2492 yyval.a_expr->value = yyvsp[0].a_value;
2493 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2494 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002495 }
2496 break;
2497
2498 case 90:
Lev Walkinf15320b2004-06-03 03:38:44 +00002499#line 957 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002500 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002501 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2502 checkmem(yyval.a_expr);
2503 yyval.a_expr->Identifier = strdup("...");
2504 yyval.a_expr->value = yyvsp[0].a_value;
2505 checkmem(yyval.a_expr->Identifier);
2506 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2507 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002508 }
2509 break;
2510
2511 case 91:
Lev Walkinf15320b2004-06-03 03:38:44 +00002512#line 969 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002513 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002514 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002515 }
2516 break;
2517
2518 case 92:
Lev Walkinf15320b2004-06-03 03:38:44 +00002519#line 972 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002520 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002521 yyval.a_expr = asn1p_expr_new(yylineno);
2522 checkmem(yyval.a_expr);
2523 yyval.a_expr->expr_type = yyvsp[0].a_type;
2524 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002525 }
2526 break;
2527
2528 case 93:
Lev Walkinf15320b2004-06-03 03:38:44 +00002529#line 978 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002530 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002531 yyval.a_expr = yyvsp[0].a_expr;
2532 checkmem(yyval.a_expr);
2533 assert(yyval.a_expr->meta_type);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002534 }
2535 break;
2536
2537 case 94:
Lev Walkinf15320b2004-06-03 03:38:44 +00002538#line 986 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002539 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002540 int ret;
2541 yyval.a_expr = yyvsp[-1].a_expr;
2542 assert(yyval.a_expr->expr_type == 0);
2543 assert(yyval.a_expr->meta_type == 0);
2544 assert(yyval.a_expr->reference == 0);
2545 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2546 checkmem(yyval.a_expr->reference);
2547 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2548 checkmem(ret == 0);
2549 free(yyvsp[-3].tv_str);
2550 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2551 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002552 }
2553 break;
2554
2555 case 95:
Lev Walkinf15320b2004-06-03 03:38:44 +00002556#line 1010 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002557 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002558 yyval.a_expr = asn1p_expr_new(yylineno);
2559 checkmem(yyval.a_expr);
2560 yyval.a_expr->reference = yyvsp[0].a_ref;
2561 yyval.a_expr->expr_type = A1TC_REFERENCE;
2562 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002563 }
2564 break;
2565
2566 case 96:
Lev Walkinf15320b2004-06-03 03:38:44 +00002567#line 1017 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002568 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002569 yyval.a_expr = asn1p_expr_new(yylineno);
2570 checkmem(yyval.a_expr);
2571 yyval.a_expr->reference = yyvsp[0].a_ref;
2572 yyval.a_expr->expr_type = A1TC_INSTANCE;
2573 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002574 }
2575 break;
2576
2577 case 97:
Lev Walkinf15320b2004-06-03 03:38:44 +00002578#line 1032 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002579 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002580 int ret;
2581 yyval.a_ref = asn1p_ref_new(yylineno);
2582 checkmem(yyval.a_ref);
2583 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2584 checkmem(ret == 0);
2585 free(yyvsp[0].tv_str);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002586 }
2587 break;
2588
2589 case 98:
Lev Walkinf15320b2004-06-03 03:38:44 +00002590#line 1040 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002591 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002592 int ret;
2593 yyval.a_ref = asn1p_ref_new(yylineno);
2594 checkmem(yyval.a_ref);
2595 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2596 checkmem(ret == 0);
2597 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2598 checkmem(ret == 0);
2599 free(yyvsp[-2].tv_str);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002600 }
2601 break;
2602
2603 case 99:
Lev Walkinf15320b2004-06-03 03:38:44 +00002604#line 1050 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002605 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002606 int ret;
2607 yyval.a_ref = asn1p_ref_new(yylineno);
2608 checkmem(yyval.a_ref);
2609 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2610 checkmem(ret == 0);
2611 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2612 checkmem(ret == 0);
2613 free(yyvsp[-2].tv_str);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002614 }
2615 break;
2616
2617 case 100:
Lev Walkinf15320b2004-06-03 03:38:44 +00002618#line 1060 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002619 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002620 int ret;
2621 yyval.a_ref = asn1p_ref_new(yylineno);
2622 checkmem(yyval.a_ref);
2623 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2624 free(yyvsp[0].tv_str);
2625 checkmem(ret == 0);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002626 }
2627 break;
2628
2629 case 101:
Lev Walkinf15320b2004-06-03 03:38:44 +00002630#line 1068 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002631 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002632 int ret;
2633 yyval.a_ref = yyvsp[0].a_ref;
2634 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2635 free(yyvsp[-2].tv_str);
2636 checkmem(ret == 0);
2637 /*
2638 * Move the last element infront.
2639 */
2640 {
2641 struct asn1p_ref_component_s tmp_comp;
2642 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2643 memmove(&yyval.a_ref->components[1],
2644 &yyval.a_ref->components[0],
2645 sizeof(yyval.a_ref->components[0])
2646 * (yyval.a_ref->comp_count - 1));
2647 yyval.a_ref->components[0] = tmp_comp;
2648 }
Lev Walkinc3b72e92004-06-03 05:07:41 +00002649 }
2650 break;
2651
2652 case 102:
Lev Walkinf15320b2004-06-03 03:38:44 +00002653#line 1090 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002654 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002655 int ret;
2656 yyval.a_ref = asn1p_ref_new(yylineno);
2657 checkmem(yyval.a_ref);
2658 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2659 free(yyvsp[0].a_refcomp.name);
2660 checkmem(ret == 0);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002661 }
2662 break;
2663
2664 case 103:
Lev Walkinf15320b2004-06-03 03:38:44 +00002665#line 1098 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002666 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002667 int ret;
2668 yyval.a_ref = yyvsp[-2].a_ref;
2669 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2670 free(yyvsp[0].a_refcomp.name);
2671 checkmem(ret == 0);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002672 }
2673 break;
2674
2675 case 106:
Lev Walkinf15320b2004-06-03 03:38:44 +00002676#line 1112 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002677 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002678 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2679 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002680 }
2681 break;
2682
2683 case 107:
Lev Walkinf15320b2004-06-03 03:38:44 +00002684#line 1117 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002685 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002686 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2687 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002688 }
2689 break;
2690
2691 case 108:
Lev Walkinf15320b2004-06-03 03:38:44 +00002692#line 1130 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002693 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002694 yyval.a_expr = yyvsp[-2].a_expr;
2695 assert(yyval.a_expr->Identifier == NULL);
2696 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2697 yyval.a_expr->meta_type = AMT_VALUE;
2698 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002699 }
2700 break;
2701
2702 case 109:
Lev Walkinf15320b2004-06-03 03:38:44 +00002703#line 1140 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002704 { asn1p_lexer_hack_push_opaque_state(); }
2705 break;
2706
2707 case 110:
Lev Walkinf15320b2004-06-03 03:38:44 +00002708#line 1141 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002709 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002710 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2711 checkmem(yyval.a_value);
2712 yyval.a_value->type = ATV_UNPARSED;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002713 }
2714 break;
2715
2716 case 111:
Lev Walkinf15320b2004-06-03 03:38:44 +00002717#line 1146 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002718 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002719 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2720 checkmem(yyval.a_value);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002721 }
2722 break;
2723
2724 case 112:
Lev Walkinf15320b2004-06-03 03:38:44 +00002725#line 1150 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002726 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002727 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2728 checkmem(yyval.a_value);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002729 }
2730 break;
2731
2732 case 113:
Lev Walkinf15320b2004-06-03 03:38:44 +00002733#line 1154 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002734 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002735 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2736 checkmem(yyval.a_value);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002737 }
2738 break;
2739
2740 case 114:
Lev Walkinf15320b2004-06-03 03:38:44 +00002741#line 1158 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002742 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002743 yyval.a_value = yyvsp[0].a_value;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002744 }
2745 break;
2746
2747 case 115:
Lev Walkinf15320b2004-06-03 03:38:44 +00002748#line 1161 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002749 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002750 yyval.a_value = yyvsp[0].a_value;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002751 }
2752 break;
2753
2754 case 116:
Lev Walkinf15320b2004-06-03 03:38:44 +00002755#line 1167 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002756 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002757 asn1p_ref_t *ref;
2758 int ret;
2759 ref = asn1p_ref_new(yylineno);
2760 checkmem(ref);
2761 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2762 checkmem(ret == 0);
2763 yyval.a_value = asn1p_value_fromref(ref, 0);
2764 checkmem(yyval.a_value);
2765 free(yyvsp[0].tv_str);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002766 }
2767 break;
2768
2769 case 117:
Lev Walkinf15320b2004-06-03 03:38:44 +00002770#line 1178 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002771 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002772 asn1p_ref_t *ref;
2773 int ret;
2774 ref = asn1p_ref_new(yylineno);
2775 checkmem(ref);
2776 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2777 checkmem(ret == 0);
2778 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2779 checkmem(ret == 0);
2780 yyval.a_value = asn1p_value_fromref(ref, 0);
2781 checkmem(yyval.a_value);
2782 free(yyvsp[-2].tv_str);
2783 free(yyvsp[0].tv_str);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002784 }
2785 break;
2786
2787 case 118:
Lev Walkinf15320b2004-06-03 03:38:44 +00002788#line 1195 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002789 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002790 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
2791 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2792 checkmem(yyval.tv_opaque.buf);
2793 yyval.tv_opaque.buf[0] = '{';
2794 yyval.tv_opaque.buf[1] = ' ';
2795 memcpy(yyval.tv_opaque.buf + 2, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2796 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2797 free(yyvsp[0].tv_opaque.buf);
Lev Walkinc3b72e92004-06-03 05:07:41 +00002798 }
2799 break;
2800
2801 case 119:
Lev Walkinf15320b2004-06-03 03:38:44 +00002802#line 1205 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002803 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002804 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2805 char *p = malloc(newsize + 1);
2806 checkmem(p);
2807 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2808 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2809 p[newsize] = '\0';
2810 free(yyvsp[-1].tv_opaque.buf);
2811 free(yyvsp[0].tv_opaque.buf);
2812 yyval.tv_opaque.buf = p;
2813 yyval.tv_opaque.len = newsize;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002814 }
2815 break;
2816
2817 case 120:
Lev Walkinf15320b2004-06-03 03:38:44 +00002818#line 1220 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002819 { yyval.a_type = ASN_BASIC_BOOLEAN; }
2820 break;
2821
2822 case 121:
Lev Walkinf15320b2004-06-03 03:38:44 +00002823#line 1221 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002824 { yyval.a_type = ASN_BASIC_NULL; }
2825 break;
2826
2827 case 122:
Lev Walkinf15320b2004-06-03 03:38:44 +00002828#line 1222 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002829 { yyval.a_type = ASN_BASIC_REAL; }
2830 break;
2831
2832 case 123:
Lev Walkinf15320b2004-06-03 03:38:44 +00002833#line 1223 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002834 { yyval.a_type = yyvsp[0].a_type; }
2835 break;
2836
2837 case 124:
Lev Walkinf15320b2004-06-03 03:38:44 +00002838#line 1224 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002839 { yyval.a_type = ASN_BASIC_OCTET_STRING; }
2840 break;
2841
2842 case 125:
Lev Walkinf15320b2004-06-03 03:38:44 +00002843#line 1225 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002844 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
2845 break;
2846
2847 case 126:
Lev Walkinf15320b2004-06-03 03:38:44 +00002848#line 1226 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002849 { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
2850 break;
2851
2852 case 127:
Lev Walkinf15320b2004-06-03 03:38:44 +00002853#line 1227 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002854 { yyval.a_type = ASN_BASIC_EXTERNAL; }
2855 break;
2856
2857 case 128:
Lev Walkinf15320b2004-06-03 03:38:44 +00002858#line 1228 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002859 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
2860 break;
2861
2862 case 129:
Lev Walkinf15320b2004-06-03 03:38:44 +00002863#line 1229 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002864 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
2865 break;
2866
2867 case 130:
Lev Walkinf15320b2004-06-03 03:38:44 +00002868#line 1230 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002869 { yyval.a_type = ASN_BASIC_UTCTime; }
2870 break;
2871
2872 case 131:
Lev Walkinf15320b2004-06-03 03:38:44 +00002873#line 1231 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002874 { yyval.a_type = ASN_BASIC_GeneralizedTime; }
2875 break;
2876
2877 case 132:
Lev Walkinf15320b2004-06-03 03:38:44 +00002878#line 1238 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002879 { yyval.a_type = ASN_BASIC_INTEGER; }
2880 break;
2881
2882 case 133:
Lev Walkinf15320b2004-06-03 03:38:44 +00002883#line 1239 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002884 { yyval.a_type = ASN_BASIC_ENUMERATED; }
2885 break;
2886
2887 case 134:
Lev Walkinf15320b2004-06-03 03:38:44 +00002888#line 1240 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002889 { yyval.a_type = ASN_BASIC_BIT_STRING; }
2890 break;
2891
2892 case 135:
Lev Walkinf15320b2004-06-03 03:38:44 +00002893#line 1244 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002894 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002895 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2896 checkmem(yyval.a_expr);
2897 yyval.a_expr->expr_type = yyvsp[0].a_type;
2898 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002899 }
2900 break;
2901
2902 case 136:
Lev Walkinf15320b2004-06-03 03:38:44 +00002903#line 1250 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002904 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002905 if(yyvsp[0].a_expr) {
2906 yyval.a_expr = yyvsp[0].a_expr;
2907 } else {
2908 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2909 checkmem(yyval.a_expr);
2910 }
2911 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2912 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00002913 }
2914 break;
2915
2916 case 137:
Lev Walkinf15320b2004-06-03 03:38:44 +00002917#line 1263 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002918 { yyval.a_type = ASN_STRING_BMPString; }
2919 break;
2920
2921 case 138:
Lev Walkinf15320b2004-06-03 03:38:44 +00002922#line 1264 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002923 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002924 yyval.a_type = ASN_STRING_GeneralString;
2925 return yyerror("GeneralString is not supported");
Lev Walkinc3b72e92004-06-03 05:07:41 +00002926 }
2927 break;
2928
2929 case 139:
Lev Walkinf15320b2004-06-03 03:38:44 +00002930#line 1268 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002931 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002932 yyval.a_type = ASN_STRING_GraphicString;
2933 return yyerror("GraphicString is not supported");
Lev Walkinc3b72e92004-06-03 05:07:41 +00002934 }
2935 break;
2936
2937 case 140:
Lev Walkinf15320b2004-06-03 03:38:44 +00002938#line 1272 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002939 { yyval.a_type = ASN_STRING_IA5String; }
2940 break;
2941
2942 case 141:
Lev Walkinf15320b2004-06-03 03:38:44 +00002943#line 1273 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002944 { yyval.a_type = ASN_STRING_ISO646String; }
2945 break;
2946
2947 case 142:
Lev Walkinf15320b2004-06-03 03:38:44 +00002948#line 1274 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002949 { yyval.a_type = ASN_STRING_NumericString; }
2950 break;
2951
2952 case 143:
Lev Walkinf15320b2004-06-03 03:38:44 +00002953#line 1275 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002954 { yyval.a_type = ASN_STRING_PrintableString; }
2955 break;
2956
2957 case 144:
Lev Walkinf15320b2004-06-03 03:38:44 +00002958#line 1276 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002959 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002960 yyval.a_type = ASN_STRING_T61String;
2961 return yyerror("T61String not implemented yet");
Lev Walkinc3b72e92004-06-03 05:07:41 +00002962 }
2963 break;
2964
2965 case 145:
Lev Walkinf15320b2004-06-03 03:38:44 +00002966#line 1280 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002967 { yyval.a_type = ASN_STRING_TeletexString; }
2968 break;
2969
2970 case 146:
Lev Walkinf15320b2004-06-03 03:38:44 +00002971#line 1281 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002972 { yyval.a_type = ASN_STRING_UniversalString; }
2973 break;
2974
2975 case 147:
Lev Walkinf15320b2004-06-03 03:38:44 +00002976#line 1282 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002977 { yyval.a_type = ASN_STRING_UTF8String; }
2978 break;
2979
2980 case 148:
Lev Walkinf15320b2004-06-03 03:38:44 +00002981#line 1283 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002982 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002983 yyval.a_type = ASN_STRING_VideotexString;
2984 return yyerror("VideotexString is no longer supported");
Lev Walkinc3b72e92004-06-03 05:07:41 +00002985 }
2986 break;
2987
2988 case 149:
Lev Walkinf15320b2004-06-03 03:38:44 +00002989#line 1287 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002990 { yyval.a_type = ASN_STRING_VisibleString; }
2991 break;
2992
2993 case 150:
Lev Walkinf15320b2004-06-03 03:38:44 +00002994#line 1288 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00002995 { yyval.a_type = ASN_STRING_ObjectDescriptor; }
2996 break;
2997
2998 case 151:
Lev Walkinf15320b2004-06-03 03:38:44 +00002999#line 1292 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003000 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003001 yyval.a_expr = yyvsp[-1].a_expr;
3002 assert(yyval.a_expr->expr_type == A1TC_INVALID);
3003 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
3004 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003005 }
3006 break;
3007
3008 case 152:
Lev Walkinf15320b2004-06-03 03:38:44 +00003009#line 1298 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003010 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003011 yyval.a_expr = yyvsp[-1].a_expr;
3012 assert(yyval.a_expr->expr_type == A1TC_INVALID);
3013 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
3014 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003015 }
3016 break;
3017
3018 case 153:
Lev Walkinf15320b2004-06-03 03:38:44 +00003019#line 1304 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003020 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003021 yyval.a_expr = yyvsp[-1].a_expr;
3022 assert(yyval.a_expr->expr_type == A1TC_INVALID);
3023 yyval.a_expr->expr_type = ASN_CONSTR_SET;
3024 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003025 }
3026 break;
3027
3028 case 154:
Lev Walkinf15320b2004-06-03 03:38:44 +00003029#line 1310 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003030 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003031 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3032 checkmem(yyval.a_expr);
3033 yyval.a_expr->constraints = yyvsp[-2].a_constr;
3034 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
3035 yyval.a_expr->meta_type = AMT_TYPE;
3036 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003037 }
3038 break;
3039
3040 case 155:
Lev Walkinf15320b2004-06-03 03:38:44 +00003041#line 1318 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003042 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003043 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3044 checkmem(yyval.a_expr);
3045 yyval.a_expr->constraints = yyvsp[-2].a_constr;
3046 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
3047 yyval.a_expr->meta_type = AMT_TYPE;
3048 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003049 }
3050 break;
3051
3052 case 156:
Lev Walkinf15320b2004-06-03 03:38:44 +00003053#line 1326 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003054 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003055 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3056 checkmem(yyval.a_expr);
3057 yyval.a_expr->expr_type = ASN_CONSTR_ANY;
3058 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003059 }
3060 break;
3061
3062 case 157:
Lev Walkinf15320b2004-06-03 03:38:44 +00003063#line 1332 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003064 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003065 int ret;
3066 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3067 checkmem(yyval.a_expr);
3068 yyval.a_expr->reference = asn1p_ref_new(yylineno);
3069 ret = asn1p_ref_add_component(yyval.a_expr->reference,
3070 yyvsp[0].tv_str, RLT_lowercase);
3071 checkmem(ret == 0);
3072 yyval.a_expr->expr_type = ASN_CONSTR_ANY;
3073 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003074 }
3075 break;
3076
3077 case 158:
Lev Walkinf15320b2004-06-03 03:38:44 +00003078#line 1349 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003079 { yyval.a_constr = 0; }
3080 break;
3081
3082 case 159:
Lev Walkinf15320b2004-06-03 03:38:44 +00003083#line 1350 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003084 { yyval.a_constr = yyvsp[0].a_constr; }
3085 break;
3086
3087 case 165:
Lev Walkinf15320b2004-06-03 03:38:44 +00003088#line 1358 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003089 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003090 /*
3091 * This is a special case, for compatibility purposes.
3092 * It goes without parenthesis.
3093 */
3094 int ret;
3095 yyval.a_constr = asn1p_constraint_new(yylineno);
3096 checkmem(yyval.a_constr);
3097 yyval.a_constr->type = ACT_CT_SIZE;
3098 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
3099 checkmem(ret == 0);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003100 }
3101 break;
3102
3103 case 166:
Lev Walkinf15320b2004-06-03 03:38:44 +00003104#line 1370 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003105 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003106 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003107 }
3108 break;
3109
3110 case 167:
Lev Walkinf15320b2004-06-03 03:38:44 +00003111#line 1373 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003112 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003113 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-1].a_constr, yyvsp[0].a_constr);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003114 }
3115 break;
3116
3117 case 168:
Lev Walkinf15320b2004-06-03 03:38:44 +00003118#line 1379 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003119 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003120 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003121 }
3122 break;
3123
3124 case 169:
Lev Walkinf15320b2004-06-03 03:38:44 +00003125#line 1385 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003126 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003127 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003128 }
3129 break;
3130
3131 case 170:
Lev Walkinf15320b2004-06-03 03:38:44 +00003132#line 1388 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003133 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003134 asn1p_constraint_t *ct;
3135 ct = asn1p_constraint_new(yylineno);
3136 checkmem(ct);
3137 ct->type = ACT_EL_EXT;
3138 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003139 }
3140 break;
3141
3142 case 171:
Lev Walkinf15320b2004-06-03 03:38:44 +00003143#line 1395 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003144 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003145 asn1p_constraint_t *ct;
3146 ct = asn1p_constraint_new(yylineno);
3147 checkmem(ct);
3148 ct->type = ACT_EL_EXT;
3149 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
3150 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, yyvsp[0].a_constr);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003151 }
3152 break;
3153
3154 case 172:
Lev Walkinf15320b2004-06-03 03:38:44 +00003155#line 1403 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003156 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003157 yyval.a_constr = asn1p_constraint_new(yylineno);
3158 checkmem(yyval.a_constr);
3159 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003160 }
3161 break;
3162
3163 case 173:
Lev Walkinf15320b2004-06-03 03:38:44 +00003164#line 1408 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003165 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003166 asn1p_constraint_t *ct;
3167 ct = asn1p_constraint_new(yylineno);
3168 checkmem(ct);
3169 ct->type = ACT_EL_EXT;
3170 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003171 }
3172 break;
3173
3174 case 174:
Lev Walkinf15320b2004-06-03 03:38:44 +00003175#line 1417 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003176 { yyval.a_constr = yyvsp[0].a_constr; }
3177 break;
3178
3179 case 175:
Lev Walkinf15320b2004-06-03 03:38:44 +00003180#line 1420 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003181 { yyval.a_constr = yyvsp[0].a_constr; }
3182 break;
3183
3184 case 176:
Lev Walkinf15320b2004-06-03 03:38:44 +00003185#line 1421 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003186 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003187 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003188 }
3189 break;
3190
3191 case 177:
Lev Walkinf15320b2004-06-03 03:38:44 +00003192#line 1427 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003193 { yyval.a_constr = yyvsp[0].a_constr; }
3194 break;
3195
3196 case 178:
Lev Walkinf15320b2004-06-03 03:38:44 +00003197#line 1429 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003198 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003199 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003200 }
3201 break;
3202
3203 case 179:
Lev Walkinf15320b2004-06-03 03:38:44 +00003204#line 1435 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003205 { yyval.a_constr = yyvsp[0].a_constr; }
3206 break;
3207
3208 case 180:
Lev Walkinf15320b2004-06-03 03:38:44 +00003209#line 1436 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003210 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003211 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003212 }
3213 break;
3214
3215 case 181:
Lev Walkinf15320b2004-06-03 03:38:44 +00003216#line 1442 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003217 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003218 yyval.a_constr = asn1p_constraint_new(yylineno);
3219 checkmem(yyval.a_constr);
3220 yyval.a_constr->type = ACT_EL_VALUE;
3221 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003222 }
3223 break;
3224
3225 case 182:
Lev Walkinf15320b2004-06-03 03:38:44 +00003226#line 1448 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003227 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003228 yyval.a_constr = asn1p_constraint_new(yylineno);
3229 checkmem(yyval.a_constr);
3230 yyval.a_constr->type = yyvsp[-1].a_ctype;
3231 yyval.a_constr->range_start = yyvsp[-2].a_value;
3232 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003233 }
3234 break;
3235
3236 case 183:
Lev Walkinf15320b2004-06-03 03:38:44 +00003237#line 1455 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003238 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003239 int ret;
3240 yyval.a_constr = asn1p_constraint_new(yylineno);
3241 checkmem(yyval.a_constr);
3242 yyval.a_constr->type = yyvsp[-3].a_ctype;
3243 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
3244 checkmem(ret == 0);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003245 }
3246 break;
3247
3248 case 184:
Lev Walkinf15320b2004-06-03 03:38:44 +00003249#line 1463 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003250 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003251 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003252 }
3253 break;
3254
3255 case 185:
Lev Walkinf15320b2004-06-03 03:38:44 +00003256#line 1466 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003257 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003258 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003259 }
3260 break;
3261
3262 case 186:
Lev Walkinf15320b2004-06-03 03:38:44 +00003263#line 1472 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003264 { yyval.a_ctype = ACT_EL_RANGE; }
3265 break;
3266
3267 case 187:
Lev Walkinf15320b2004-06-03 03:38:44 +00003268#line 1473 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003269 { yyval.a_ctype = ACT_EL_RLRANGE; }
3270 break;
3271
3272 case 188:
Lev Walkinf15320b2004-06-03 03:38:44 +00003273#line 1474 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003274 { yyval.a_ctype = ACT_EL_LLRANGE; }
3275 break;
3276
3277 case 189:
Lev Walkinf15320b2004-06-03 03:38:44 +00003278#line 1475 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003279 { yyval.a_ctype = ACT_EL_ULRANGE; }
3280 break;
3281
3282 case 190:
Lev Walkinf15320b2004-06-03 03:38:44 +00003283#line 1479 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003284 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003285 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003286 }
3287 break;
3288
3289 case 191:
Lev Walkinf15320b2004-06-03 03:38:44 +00003290#line 1482 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003291 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003292 yyval.a_ctype = ACT_CT_FROM;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003293 }
3294 break;
3295
3296 case 192:
Lev Walkinf15320b2004-06-03 03:38:44 +00003297#line 1488 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003298 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003299 yyval.a_value = yyvsp[0].a_value;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003300 }
3301 break;
3302
3303 case 193:
Lev Walkinf15320b2004-06-03 03:38:44 +00003304#line 1491 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003305 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003306 asn1p_ref_t *ref;
3307 int ret;
3308 ref = asn1p_ref_new(yylineno);
3309 checkmem(ref);
3310 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3311 checkmem(ret == 0);
3312 yyval.a_value = asn1p_value_fromref(ref, 0);
3313 checkmem(yyval.a_value);
3314 free(yyvsp[0].tv_str);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003315 }
3316 break;
3317
3318 case 194:
Lev Walkinf15320b2004-06-03 03:38:44 +00003319#line 1502 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003320 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003321 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3322 checkmem(yyval.a_value);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003323 }
3324 break;
3325
3326 case 195:
Lev Walkinf15320b2004-06-03 03:38:44 +00003327#line 1506 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003328 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003329 yyval.a_value = asn1p_value_fromint(123);
3330 checkmem(yyval.a_value);
3331 yyval.a_value->type = ATV_MIN;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003332 }
3333 break;
3334
3335 case 196:
Lev Walkinf15320b2004-06-03 03:38:44 +00003336#line 1511 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003337 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003338 yyval.a_value = asn1p_value_fromint(321);
3339 checkmem(yyval.a_value);
3340 yyval.a_value->type = ATV_MAX;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003341 }
3342 break;
3343
3344 case 197:
Lev Walkinf15320b2004-06-03 03:38:44 +00003345#line 1516 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003346 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003347 yyval.a_value = asn1p_value_fromint(0);
3348 checkmem(yyval.a_value);
3349 yyval.a_value->type = ATV_FALSE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003350 }
3351 break;
3352
3353 case 198:
Lev Walkinf15320b2004-06-03 03:38:44 +00003354#line 1521 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003355 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003356 yyval.a_value = asn1p_value_fromint(1);
3357 checkmem(yyval.a_value);
3358 yyval.a_value->type = ATV_TRUE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003359 }
3360 break;
3361
3362 case 199:
Lev Walkinf15320b2004-06-03 03:38:44 +00003363#line 1529 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003364 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003365 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003366 }
3367 break;
3368
3369 case 200:
Lev Walkinf15320b2004-06-03 03:38:44 +00003370#line 1535 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003371 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003372 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003373 }
3374 break;
3375
3376 case 201:
Lev Walkinf15320b2004-06-03 03:38:44 +00003377#line 1538 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003378 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003379 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003380 }
3381 break;
3382
3383 case 202:
Lev Walkinf15320b2004-06-03 03:38:44 +00003384#line 1544 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003385 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003386 yyval.a_constr = asn1p_constraint_new(yylineno);
3387 checkmem(yyval.a_constr);
3388 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003389 }
3390 break;
3391
3392 case 203:
Lev Walkinf15320b2004-06-03 03:38:44 +00003393#line 1549 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003394 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003395 yyval.a_constr = asn1p_constraint_new(yylineno);
3396 checkmem(yyval.a_constr);
3397 yyval.a_constr->type = ACT_EL_VALUE;
3398 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3399 yyval.a_constr->presence = yyvsp[0].a_pres;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003400 }
3401 break;
3402
3403 case 204:
Lev Walkinf15320b2004-06-03 03:38:44 +00003404#line 1562 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003405 { yyval.a_pres = ACPRES_DEFAULT; }
3406 break;
3407
3408 case 205:
Lev Walkinf15320b2004-06-03 03:38:44 +00003409#line 1563 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003410 { yyval.a_pres = yyvsp[0].a_pres; }
3411 break;
3412
3413 case 206:
Lev Walkinf15320b2004-06-03 03:38:44 +00003414#line 1567 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003415 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003416 yyval.a_pres = ACPRES_PRESENT;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003417 }
3418 break;
3419
3420 case 207:
Lev Walkinf15320b2004-06-03 03:38:44 +00003421#line 1570 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003422 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003423 yyval.a_pres = ACPRES_ABSENT;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003424 }
3425 break;
3426
3427 case 208:
Lev Walkinf15320b2004-06-03 03:38:44 +00003428#line 1573 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003429 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003430 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003431 }
3432 break;
3433
3434 case 209:
Lev Walkinf15320b2004-06-03 03:38:44 +00003435#line 1579 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003436 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003437 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003438 }
3439 break;
3440
3441 case 210:
Lev Walkinf15320b2004-06-03 03:38:44 +00003442#line 1582 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003443 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003444 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003445 }
3446 break;
3447
3448 case 211:
Lev Walkinf15320b2004-06-03 03:38:44 +00003449#line 1591 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003450 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003451 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3452 asn1p_constraint_t *ct;
3453 int ret;
3454 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3455 checkmem(ret == 0);
3456 ct = asn1p_constraint_new(yylineno);
3457 checkmem(yyval.a_constr);
3458 ct->type = ACT_EL_VALUE;
3459 ct->value = asn1p_value_fromref(ref, 0);
3460 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003461 }
3462 break;
3463
3464 case 212:
Lev Walkinf15320b2004-06-03 03:38:44 +00003465#line 1606 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003466 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003467 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003468 }
3469 break;
3470
3471 case 213:
Lev Walkinf15320b2004-06-03 03:38:44 +00003472#line 1612 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003473 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003474 yyval.a_constr = asn1p_constraint_new(yylineno);
3475 checkmem(yyval.a_constr);
3476 yyval.a_constr->type = ACT_EL_VALUE;
3477 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003478 }
3479 break;
3480
3481 case 214:
Lev Walkinf15320b2004-06-03 03:38:44 +00003482#line 1618 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003483 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003484 asn1p_constraint_t *ct;
3485 ct = asn1p_constraint_new(yylineno);
3486 checkmem(ct);
3487 ct->type = ACT_EL_VALUE;
3488 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3489 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003490 }
3491 break;
3492
3493 case 215:
Lev Walkinf15320b2004-06-03 03:38:44 +00003494#line 1632 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003495 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003496 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3497 int ret;
3498 *p = '@';
3499 strcpy(p + 1, yyvsp[0].tv_str);
3500 yyval.a_ref = asn1p_ref_new(yylineno);
3501 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3502 checkmem(ret == 0);
3503 free(p);
3504 free(yyvsp[0].tv_str);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003505 }
3506 break;
3507
3508 case 216:
Lev Walkinf15320b2004-06-03 03:38:44 +00003509#line 1643 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003510 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003511 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3512 int ret;
3513 p[0] = '@';
3514 p[1] = '.';
3515 strcpy(p + 2, yyvsp[0].tv_str);
3516 yyval.a_ref = asn1p_ref_new(yylineno);
3517 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3518 checkmem(ret == 0);
3519 free(p);
3520 free(yyvsp[0].tv_str);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003521 }
3522 break;
3523
3524 case 217:
Lev Walkinf15320b2004-06-03 03:38:44 +00003525#line 1659 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003526 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003527 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003528 }
3529 break;
3530
3531 case 218:
Lev Walkinf15320b2004-06-03 03:38:44 +00003532#line 1662 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003533 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003534 int l1 = strlen(yyvsp[-2].tv_str);
3535 int l3 = strlen(yyvsp[0].tv_str);
3536 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3537 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3538 yyval.tv_str[l1] = '.';
3539 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3540 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkinc3b72e92004-06-03 05:07:41 +00003541 }
3542 break;
3543
3544 case 219:
Lev Walkinf15320b2004-06-03 03:38:44 +00003545#line 1680 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003546 { yyval.a_marker = EM_NOMARK; }
3547 break;
3548
3549 case 220:
Lev Walkinf15320b2004-06-03 03:38:44 +00003550#line 1681 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003551 { yyval.a_marker = yyvsp[0].a_marker; }
3552 break;
3553
3554 case 221:
Lev Walkinf15320b2004-06-03 03:38:44 +00003555#line 1685 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003556 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003557 yyval.a_marker = EM_OPTIONAL;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003558 }
3559 break;
3560
3561 case 222:
Lev Walkinf15320b2004-06-03 03:38:44 +00003562#line 1688 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003563 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003564 yyval.a_marker = EM_DEFAULT;
3565 /* FIXME: store DefaultValue somewhere */
Lev Walkinc3b72e92004-06-03 05:07:41 +00003566 }
3567 break;
3568
3569 case 223:
Lev Walkinf15320b2004-06-03 03:38:44 +00003570#line 1695 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003571 {
3572 }
3573 break;
3574
3575 case 224:
Lev Walkinf15320b2004-06-03 03:38:44 +00003576#line 1697 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003577 {
3578 }
3579 break;
3580
3581 case 225:
Lev Walkinf15320b2004-06-03 03:38:44 +00003582#line 1699 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003583 { asn1p_lexer_hack_push_opaque_state(); }
3584 break;
3585
3586 case 226:
Lev Walkinf15320b2004-06-03 03:38:44 +00003587#line 1699 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003588 {
3589 }
3590 break;
3591
3592 case 227:
Lev Walkinf15320b2004-06-03 03:38:44 +00003593#line 1720 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003594 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003595 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3596 checkmem(yyval.a_expr);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003597 }
3598 break;
3599
3600 case 228:
Lev Walkinf15320b2004-06-03 03:38:44 +00003601#line 1724 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003602 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003603 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003604 }
3605 break;
3606
3607 case 229:
Lev Walkinf15320b2004-06-03 03:38:44 +00003608#line 1730 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003609 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003610 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3611 checkmem(yyval.a_expr);
3612 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003613 }
3614 break;
3615
3616 case 230:
Lev Walkinf15320b2004-06-03 03:38:44 +00003617#line 1735 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003618 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003619 yyval.a_expr = yyvsp[-2].a_expr;
3620 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003621 }
3622 break;
3623
3624 case 231:
Lev Walkinf15320b2004-06-03 03:38:44 +00003625#line 1742 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003626 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003627 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3628 checkmem(yyval.a_expr);
3629 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3630 yyval.a_expr->meta_type = AMT_VALUE;
3631 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003632 }
3633 break;
3634
3635 case 232:
Lev Walkinf15320b2004-06-03 03:38:44 +00003636#line 1749 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003637 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003638 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3639 checkmem(yyval.a_expr);
3640 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3641 yyval.a_expr->meta_type = AMT_VALUE;
3642 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3643 yyval.a_expr->value = yyvsp[-1].a_value;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003644 }
3645 break;
3646
3647 case 233:
Lev Walkinf15320b2004-06-03 03:38:44 +00003648#line 1757 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003649 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003650 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3651 checkmem(yyval.a_expr);
3652 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3653 yyval.a_expr->meta_type = AMT_VALUE;
3654 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3655 yyval.a_expr->value = yyvsp[-1].a_value;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003656 }
3657 break;
3658
3659 case 234:
Lev Walkinf15320b2004-06-03 03:38:44 +00003660#line 1765 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003661 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003662 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3663 checkmem(yyval.a_expr);
3664 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3665 yyval.a_expr->meta_type = AMT_VALUE;
3666 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003667 }
3668 break;
3669
3670 case 235:
Lev Walkinf15320b2004-06-03 03:38:44 +00003671#line 1772 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003672 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003673 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3674 checkmem(yyval.a_expr);
3675 yyval.a_expr->Identifier = strdup("...");
3676 checkmem(yyval.a_expr->Identifier);
3677 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3678 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003679 }
3680 break;
3681
3682 case 236:
Lev Walkinf15320b2004-06-03 03:38:44 +00003683#line 1783 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003684 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003685 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3686 checkmem(yyval.a_value);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003687 }
3688 break;
3689
3690 case 237:
Lev Walkinf15320b2004-06-03 03:38:44 +00003691#line 1787 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003692 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003693 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3694 checkmem(yyval.a_value);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003695 }
3696 break;
3697
3698 case 238:
Lev Walkinf15320b2004-06-03 03:38:44 +00003699#line 1818 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003700 { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); }
3701 break;
3702
3703 case 239:
Lev Walkinf15320b2004-06-03 03:38:44 +00003704#line 1819 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003705 { yyval.a_tag = yyvsp[0].a_tag; }
3706 break;
3707
3708 case 240:
Lev Walkinf15320b2004-06-03 03:38:44 +00003709#line 1823 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003710 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003711 yyval.a_tag = yyvsp[0].a_tag;
3712 yyval.a_tag.tag_mode = TM_DEFAULT;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003713 }
3714 break;
3715
3716 case 241:
Lev Walkinf15320b2004-06-03 03:38:44 +00003717#line 1827 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003718 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003719 yyval.a_tag = yyvsp[-1].a_tag;
3720 yyval.a_tag.tag_mode = TM_IMPLICIT;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003721 }
3722 break;
3723
3724 case 242:
Lev Walkinf15320b2004-06-03 03:38:44 +00003725#line 1831 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003726 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003727 yyval.a_tag = yyvsp[-1].a_tag;
3728 yyval.a_tag.tag_mode = TM_EXPLICIT;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003729 }
3730 break;
3731
3732 case 243:
Lev Walkinf15320b2004-06-03 03:38:44 +00003733#line 1838 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003734 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003735 checkmem(yyvsp[0].tv_str);
3736 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003737 }
3738 break;
3739
3740 case 244:
Lev Walkinf15320b2004-06-03 03:38:44 +00003741#line 1842 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003742 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003743 checkmem(yyvsp[0].tv_str);
3744 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003745 }
3746 break;
3747
3748 case 245:
Lev Walkinf15320b2004-06-03 03:38:44 +00003749#line 1849 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003750 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003751 checkmem(yyvsp[0].tv_str);
3752 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003753 }
3754 break;
3755
3756 case 246:
Lev Walkinf15320b2004-06-03 03:38:44 +00003757#line 1856 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003758 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003759 checkmem(yyvsp[0].tv_str);
3760 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003761 }
3762 break;
3763
3764 case 247:
Lev Walkinf15320b2004-06-03 03:38:44 +00003765#line 1863 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003766 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003767 memset(&yyval.tv_nametag, 0, sizeof(yyval.tv_nametag));
3768 yyval.tv_nametag.name = yyvsp[0].tv_str;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003769 }
3770 break;
3771
3772 case 248:
Lev Walkinf15320b2004-06-03 03:38:44 +00003773#line 1867 "asn1p_y.y"
Lev Walkinc3b72e92004-06-03 05:07:41 +00003774 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003775 yyval.tv_nametag.name = yyvsp[-1].tv_str;
3776 yyval.tv_nametag.tag = yyvsp[0].a_tag;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003777 }
3778 break;
3779
3780
3781 }
3782
3783/* Line 1016 of /usr/local/share/bison/yacc.c. */
3784#line 3785 "y.tab.c"
Lev Walkinf15320b2004-06-03 03:38:44 +00003785
3786 yyvsp -= yylen;
3787 yyssp -= yylen;
Lev Walkinf15320b2004-06-03 03:38:44 +00003788
Lev Walkinc3b72e92004-06-03 05:07:41 +00003789
3790#if YYDEBUG
Lev Walkinf15320b2004-06-03 03:38:44 +00003791 if (yydebug)
3792 {
Lev Walkinc3b72e92004-06-03 05:07:41 +00003793 short *yyssp1 = yyss - 1;
3794 YYFPRINTF (stderr, "state stack now");
3795 while (yyssp1 != yyssp)
3796 YYFPRINTF (stderr, " %d", *++yyssp1);
3797 YYFPRINTF (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003798 }
3799#endif
3800
3801 *++yyvsp = yyval;
3802
Lev Walkinf15320b2004-06-03 03:38:44 +00003803
Lev Walkinc3b72e92004-06-03 05:07:41 +00003804 /* Now `shift' the result of the reduction. Determine what state
3805 that goes to, based on the state we popped back to and the rule
3806 number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003807
3808 yyn = yyr1[yyn];
3809
Lev Walkinc3b72e92004-06-03 05:07:41 +00003810 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
3811 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003812 yystate = yytable[yystate];
3813 else
Lev Walkinc3b72e92004-06-03 05:07:41 +00003814 yystate = yydefgoto[yyn - YYNTOKENS];
Lev Walkinf15320b2004-06-03 03:38:44 +00003815
3816 goto yynewstate;
3817
Lev Walkinf15320b2004-06-03 03:38:44 +00003818
Lev Walkinc3b72e92004-06-03 05:07:41 +00003819/*------------------------------------.
3820| yyerrlab -- here on detecting error |
3821`------------------------------------*/
3822yyerrlab:
3823 /* If not already recovering from an error, report this error. */
3824 if (!yyerrstatus)
Lev Walkinf15320b2004-06-03 03:38:44 +00003825 {
3826 ++yynerrs;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003827#if YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003828 yyn = yypact[yystate];
3829
Lev Walkinc3b72e92004-06-03 05:07:41 +00003830 if (YYPACT_NINF < yyn && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003831 {
Lev Walkinc3b72e92004-06-03 05:07:41 +00003832 YYSIZE_T yysize = 0;
3833 int yytype = YYTRANSLATE (yychar);
3834 char *yymsg;
3835 int yyx, yycount;
Lev Walkinf15320b2004-06-03 03:38:44 +00003836
Lev Walkinc3b72e92004-06-03 05:07:41 +00003837 yycount = 0;
3838 /* Start YYX at -YYN if negative to avoid negative indexes in
3839 YYCHECK. */
3840 for (yyx = yyn < 0 ? -yyn : 0;
3841 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
3842 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
3843 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
3844 yysize += yystrlen ("parse error, unexpected ") + 1;
3845 yysize += yystrlen (yytname[yytype]);
3846 yymsg = (char *) YYSTACK_ALLOC (yysize);
3847 if (yymsg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003848 {
Lev Walkinc3b72e92004-06-03 05:07:41 +00003849 char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
3850 yyp = yystpcpy (yyp, yytname[yytype]);
Lev Walkinf15320b2004-06-03 03:38:44 +00003851
Lev Walkinc3b72e92004-06-03 05:07:41 +00003852 if (yycount < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003853 {
Lev Walkinc3b72e92004-06-03 05:07:41 +00003854 yycount = 0;
3855 for (yyx = yyn < 0 ? -yyn : 0;
3856 yyx < (int) (sizeof (yytname) / sizeof (char *));
3857 yyx++)
3858 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
Lev Walkinf15320b2004-06-03 03:38:44 +00003859 {
Lev Walkinc3b72e92004-06-03 05:07:41 +00003860 const char *yyq = ! yycount ? ", expecting " : " or ";
3861 yyp = yystpcpy (yyp, yyq);
3862 yyp = yystpcpy (yyp, yytname[yyx]);
3863 yycount++;
Lev Walkinf15320b2004-06-03 03:38:44 +00003864 }
3865 }
Lev Walkinc3b72e92004-06-03 05:07:41 +00003866 yyerror (yymsg);
3867 YYSTACK_FREE (yymsg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003868 }
3869 else
Lev Walkinc3b72e92004-06-03 05:07:41 +00003870 yyerror ("parse error; also virtual memory exhausted");
Lev Walkinf15320b2004-06-03 03:38:44 +00003871 }
3872 else
3873#endif /* YYERROR_VERBOSE */
Lev Walkinc3b72e92004-06-03 05:07:41 +00003874 yyerror ("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003875 }
Lev Walkinf15320b2004-06-03 03:38:44 +00003876 goto yyerrlab1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003877
Lev Walkinc3b72e92004-06-03 05:07:41 +00003878
3879/*----------------------------------------------------.
3880| yyerrlab1 -- error raised explicitly by an action. |
3881`----------------------------------------------------*/
3882yyerrlab1:
Lev Walkinf15320b2004-06-03 03:38:44 +00003883 if (yyerrstatus == 3)
3884 {
Lev Walkinc3b72e92004-06-03 05:07:41 +00003885 /* If just tried and failed to reuse lookahead token after an
3886 error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003887
Lev Walkinc3b72e92004-06-03 05:07:41 +00003888 /* Return failure if at end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003889 if (yychar == YYEOF)
Lev Walkinc3b72e92004-06-03 05:07:41 +00003890 {
3891 /* Pop the error token. */
3892 YYPOPSTACK;
3893 /* Pop the rest of the stack. */
3894 while (yyssp > yyss)
3895 {
3896 YYDPRINTF ((stderr, "Error: popping "));
3897 YYDSYMPRINT ((stderr,
3898 yystos[*yyssp],
3899 *yyvsp));
3900 YYDPRINTF ((stderr, "\n"));
3901 yydestruct (yystos[*yyssp], *yyvsp);
3902 YYPOPSTACK;
3903 }
3904 YYABORT;
3905 }
Lev Walkinf15320b2004-06-03 03:38:44 +00003906
Lev Walkinc3b72e92004-06-03 05:07:41 +00003907 YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
3908 yychar, yytname[yychar1]));
3909 yydestruct (yychar1, yylval);
Lev Walkinf15320b2004-06-03 03:38:44 +00003910 yychar = YYEMPTY;
3911 }
3912
Lev Walkinc3b72e92004-06-03 05:07:41 +00003913 /* Else will try to reuse lookahead token after shifting the error
3914 token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003915
Lev Walkinc3b72e92004-06-03 05:07:41 +00003916 yyerrstatus = 3; /* Each real token shifted decrements this. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003917
Lev Walkinc3b72e92004-06-03 05:07:41 +00003918 for (;;)
Lev Walkinf15320b2004-06-03 03:38:44 +00003919 {
Lev Walkinc3b72e92004-06-03 05:07:41 +00003920 yyn = yypact[yystate];
3921 if (yyn != YYPACT_NINF)
3922 {
3923 yyn += YYTERROR;
3924 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
3925 {
3926 yyn = yytable[yyn];
3927 if (0 < yyn)
3928 break;
3929 }
3930 }
3931
3932 /* Pop the current state because it cannot handle the error token. */
3933 if (yyssp == yyss)
3934 YYABORT;
3935
3936 YYDPRINTF ((stderr, "Error: popping "));
3937 YYDSYMPRINT ((stderr,
3938 yystos[*yyssp], *yyvsp));
3939 YYDPRINTF ((stderr, "\n"));
3940
3941 yydestruct (yystos[yystate], *yyvsp);
3942 yyvsp--;
3943 yystate = *--yyssp;
3944
3945
3946#if YYDEBUG
3947 if (yydebug)
3948 {
3949 short *yyssp1 = yyss - 1;
3950 YYFPRINTF (stderr, "Error: state stack now");
3951 while (yyssp1 != yyssp)
3952 YYFPRINTF (stderr, " %d", *++yyssp1);
3953 YYFPRINTF (stderr, "\n");
3954 }
Lev Walkinf15320b2004-06-03 03:38:44 +00003955#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003956 }
Lev Walkinf15320b2004-06-03 03:38:44 +00003957
3958 if (yyn == YYFINAL)
3959 YYACCEPT;
3960
Lev Walkinc3b72e92004-06-03 05:07:41 +00003961 YYDPRINTF ((stderr, "Shifting error token, "));
Lev Walkinf15320b2004-06-03 03:38:44 +00003962
3963 *++yyvsp = yylval;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003964
Lev Walkinf15320b2004-06-03 03:38:44 +00003965
3966 yystate = yyn;
3967 goto yynewstate;
3968
Lev Walkinf15320b2004-06-03 03:38:44 +00003969
Lev Walkinc3b72e92004-06-03 05:07:41 +00003970/*-------------------------------------.
3971| yyacceptlab -- YYACCEPT comes here. |
3972`-------------------------------------*/
3973yyacceptlab:
3974 yyresult = 0;
3975 goto yyreturn;
3976
3977/*-----------------------------------.
3978| yyabortlab -- YYABORT comes here. |
3979`-----------------------------------*/
3980yyabortlab:
3981 yyresult = 1;
3982 goto yyreturn;
3983
3984#ifndef yyoverflow
3985/*----------------------------------------------.
3986| yyoverflowlab -- parser overflow comes here. |
3987`----------------------------------------------*/
3988yyoverflowlab:
3989 yyerror ("parser stack overflow");
3990 yyresult = 2;
3991 /* Fall through. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003992#endif
Lev Walkinc3b72e92004-06-03 05:07:41 +00003993
3994yyreturn:
3995#ifndef yyoverflow
3996 if (yyss != yyssa)
3997 YYSTACK_FREE (yyss);
3998#endif
3999 return yyresult;
Lev Walkinf15320b2004-06-03 03:38:44 +00004000}
Lev Walkinc3b72e92004-06-03 05:07:41 +00004001
4002
Lev Walkinf15320b2004-06-03 03:38:44 +00004003#line 1874 "asn1p_y.y"
4004
4005
4006
4007/*
4008 * Convert Xstring ('0101'B or '5'H) to the binary vector.
4009 */
4010static asn1p_value_t *
4011_convert_bitstring2binary(char *str, int base) {
4012 asn1p_value_t *val;
4013 int slen;
4014 int memlen;
4015 int baselen;
4016 int bits;
4017 uint8_t *binary_vector;
4018 uint8_t *bv_ptr;
4019 uint8_t cur_val;
4020
4021 assert(str);
4022 assert(str[0] == '\'');
4023
4024 switch(base) {
4025 case 'B':
4026 baselen = 1;
4027 break;
4028 case 'H':
4029 baselen = 4;
4030 break;
4031 default:
4032 assert(base == 'B' || base == 'H');
4033 errno = EINVAL;
4034 return NULL;
4035 }
4036
4037 slen = strlen(str);
4038 assert(str[slen - 1] == base);
4039 assert(str[slen - 2] == '\'');
4040
4041 memlen = slen / (8 / baselen); /* Conservative estimate */
4042
4043 bv_ptr = binary_vector = malloc(memlen + 1);
4044 if(bv_ptr == NULL)
4045 /* ENOMEM */
4046 return NULL;
4047
4048 cur_val = 0;
4049 bits = 0;
4050 while(*(++str) != '\'') {
4051 switch(baselen) {
4052 case 1:
4053 switch(*str) {
4054 case '1':
4055 cur_val |= 1 << (7 - (bits % 8));
4056 case '0':
4057 break;
4058 default:
4059 assert(!"_y UNREACH1");
4060 case ' ': case '\r': case '\n':
4061 continue;
4062 }
4063 break;
4064 case 4:
4065 switch(*str) {
4066 case '0': case '1': case '2': case '3': case '4':
4067 case '5': case '6': case '7': case '8': case '9':
4068 cur_val |= (*str - '0') << (4 - (bits % 8));
4069 break;
4070 case 'A': case 'B': case 'C':
4071 case 'D': case 'E': case 'F':
4072 cur_val |= ((*str - 'A') + 10)
4073 << (4 - (bits % 8));
4074 break;
4075 default:
4076 assert(!"_y UNREACH2");
4077 case ' ': case '\r': case '\n':
4078 continue;
4079 }
4080 break;
4081 }
4082
4083 bits += baselen;
4084 if((bits % 8) == 0) {
4085 *bv_ptr++ = cur_val;
4086 cur_val = 0;
4087 }
4088 }
4089
4090 *bv_ptr = cur_val;
4091 assert((bv_ptr - binary_vector) <= memlen);
4092
4093 val = asn1p_value_frombits(binary_vector, bits, 0);
4094 if(val == NULL) {
4095 free(binary_vector);
4096 }
4097
4098 return val;
4099}
4100
4101extern char *asn1p_text;
4102
4103int
4104yyerror(const char *msg) {
4105 fprintf(stderr,
4106 "ASN.1 grammar parse error "
4107 "near line %d (token \"%s\"): %s\n",
4108 asn1p_lineno, asn1p_text, msg);
4109 return -1;
4110}
4111
4112
Lev Walkinc3b72e92004-06-03 05:07:41 +00004113