blob: 520d20d76edefbf17e1759717a466dd253c843cb [file] [log] [blame]
Lev Walkin609ccbb2004-09-04 04:49:21 +00001/* A Bison parser, made from asn1p_y.y, by GNU bison 1.75. */
Lev Walkinf15320b2004-06-03 03:38:44 +00002
Lev Walkin609ccbb2004-09-04 04:49:21 +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 Walkin609ccbb2004-09-04 04:49:21 +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 Walkin609ccbb2004-09-04 04:49:21 +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 Walkin609ccbb2004-09-04 04:49:21 +000048#define yylex asn1p_lex
Lev Walkinf15320b2004-06-03 03:38:44 +000049#define yyerror asn1p_error
Lev Walkin609ccbb2004-09-04 04:49:21 +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 Walkin609ccbb2004-09-04 04:49:21 +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_capitalreference = 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_ENCODING_CONTROL = 293,
98 TOK_END = 294,
99 TOK_ENUMERATED = 295,
100 TOK_EXPLICIT = 296,
101 TOK_EXPORTS = 297,
102 TOK_EXTENSIBILITY = 298,
103 TOK_EXTERNAL = 299,
104 TOK_FALSE = 300,
105 TOK_FROM = 301,
106 TOK_GeneralizedTime = 302,
107 TOK_GeneralString = 303,
108 TOK_GraphicString = 304,
109 TOK_IA5String = 305,
110 TOK_IDENTIFIER = 306,
111 TOK_IMPLICIT = 307,
112 TOK_IMPLIED = 308,
113 TOK_IMPORTS = 309,
114 TOK_INCLUDES = 310,
115 TOK_INSTANCE = 311,
116 TOK_INSTRUCTIONS = 312,
117 TOK_INTEGER = 313,
118 TOK_ISO646String = 314,
119 TOK_MAX = 315,
120 TOK_MIN = 316,
121 TOK_MINUS_INFINITY = 317,
122 TOK_NULL = 318,
123 TOK_NumericString = 319,
124 TOK_OBJECT = 320,
125 TOK_ObjectDescriptor = 321,
126 TOK_OCTET = 322,
127 TOK_OF = 323,
128 TOK_OPTIONAL = 324,
129 TOK_PATTERN = 325,
130 TOK_PDV = 326,
131 TOK_PLUS_INFINITY = 327,
132 TOK_PRESENT = 328,
133 TOK_PrintableString = 329,
134 TOK_PRIVATE = 330,
135 TOK_REAL = 331,
136 TOK_RELATIVE_OID = 332,
137 TOK_SEQUENCE = 333,
138 TOK_SET = 334,
139 TOK_SIZE = 335,
140 TOK_STRING = 336,
141 TOK_SYNTAX = 337,
142 TOK_T61String = 338,
143 TOK_TAGS = 339,
144 TOK_TeletexString = 340,
145 TOK_TRUE = 341,
146 TOK_TYPE_IDENTIFIER = 342,
147 TOK_UNIQUE = 343,
148 TOK_UNIVERSAL = 344,
149 TOK_UniversalString = 345,
150 TOK_UTCTime = 346,
151 TOK_UTF8String = 347,
152 TOK_VideotexString = 348,
153 TOK_VisibleString = 349,
154 TOK_WITH = 350,
155 TOK_EXCEPT = 351,
156 TOK_INTERSECTION = 352,
157 TOK_UNION = 353,
158 TOK_TwoDots = 354,
159 TOK_ThreeDots = 355,
160 TOK_tag = 356
161 };
162#endif
163#define TOK_PPEQ 258
164#define TOK_opaque 259
165#define TOK_bstring 260
166#define TOK_cstring 261
167#define TOK_hstring 262
168#define TOK_identifier 263
169#define TOK_number 264
170#define TOK_number_negative 265
171#define TOK_typereference 266
172#define TOK_capitalreference 267
173#define TOK_typefieldreference 268
174#define TOK_valuefieldreference 269
175#define TOK_ABSENT 270
176#define TOK_ABSTRACT_SYNTAX 271
177#define TOK_ALL 272
178#define TOK_ANY 273
179#define TOK_APPLICATION 274
180#define TOK_AUTOMATIC 275
181#define TOK_BEGIN 276
182#define TOK_BIT 277
183#define TOK_BMPString 278
184#define TOK_BOOLEAN 279
185#define TOK_BY 280
186#define TOK_CHARACTER 281
187#define TOK_CHOICE 282
188#define TOK_CLASS 283
189#define TOK_COMPONENT 284
190#define TOK_COMPONENTS 285
191#define TOK_CONSTRAINED 286
192#define TOK_CONTAINING 287
193#define TOK_DEFAULT 288
194#define TOK_DEFINITIONS 289
195#define TOK_DEFINED 290
196#define TOK_EMBEDDED 291
197#define TOK_ENCODED 292
198#define TOK_ENCODING_CONTROL 293
199#define TOK_END 294
200#define TOK_ENUMERATED 295
201#define TOK_EXPLICIT 296
202#define TOK_EXPORTS 297
203#define TOK_EXTENSIBILITY 298
204#define TOK_EXTERNAL 299
205#define TOK_FALSE 300
206#define TOK_FROM 301
207#define TOK_GeneralizedTime 302
208#define TOK_GeneralString 303
209#define TOK_GraphicString 304
210#define TOK_IA5String 305
211#define TOK_IDENTIFIER 306
212#define TOK_IMPLICIT 307
213#define TOK_IMPLIED 308
214#define TOK_IMPORTS 309
215#define TOK_INCLUDES 310
216#define TOK_INSTANCE 311
217#define TOK_INSTRUCTIONS 312
218#define TOK_INTEGER 313
219#define TOK_ISO646String 314
220#define TOK_MAX 315
221#define TOK_MIN 316
222#define TOK_MINUS_INFINITY 317
223#define TOK_NULL 318
224#define TOK_NumericString 319
225#define TOK_OBJECT 320
226#define TOK_ObjectDescriptor 321
227#define TOK_OCTET 322
228#define TOK_OF 323
229#define TOK_OPTIONAL 324
230#define TOK_PATTERN 325
231#define TOK_PDV 326
232#define TOK_PLUS_INFINITY 327
233#define TOK_PRESENT 328
234#define TOK_PrintableString 329
235#define TOK_PRIVATE 330
236#define TOK_REAL 331
237#define TOK_RELATIVE_OID 332
238#define TOK_SEQUENCE 333
239#define TOK_SET 334
240#define TOK_SIZE 335
241#define TOK_STRING 336
242#define TOK_SYNTAX 337
243#define TOK_T61String 338
244#define TOK_TAGS 339
245#define TOK_TeletexString 340
246#define TOK_TRUE 341
247#define TOK_TYPE_IDENTIFIER 342
248#define TOK_UNIQUE 343
249#define TOK_UNIVERSAL 344
250#define TOK_UniversalString 345
251#define TOK_UTCTime 346
252#define TOK_UTF8String 347
253#define TOK_VideotexString 348
254#define TOK_VisibleString 349
255#define TOK_WITH 350
256#define TOK_EXCEPT 351
257#define TOK_INTERSECTION 352
258#define TOK_UNION 353
259#define TOK_TwoDots 354
260#define TOK_ThreeDots 355
261#define TOK_tag 356
262
263
264
265
266/* Copy the first part of user declarations. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000267#line 1 "asn1p_y.y"
268
269
270#include <stdlib.h>
271#include <stdio.h>
272#include <string.h>
273#include <errno.h>
274#include <assert.h>
275
276#include "asn1parser.h"
277
278#define YYPARSE_PARAM param
279#define YYERROR_VERBOSE
280
281int yylex(void);
282int yyerror(const char *msg);
283void asn1p_lexer_hack_push_opaque_state(void);
284void asn1p_lexer_hack_enable_with_syntax(void);
Lev Walkinf59d0752004-08-18 04:59:12 +0000285void asn1p_lexer_hack_push_encoding_control(void);
Lev Walkinf15320b2004-06-03 03:38:44 +0000286#define yylineno asn1p_lineno
287extern int asn1p_lineno;
288
289
290static asn1p_value_t *
291 _convert_bitstring2binary(char *str, int base);
292
293#define checkmem(ptr) do { \
294 if(!(ptr)) \
295 return yyerror("Memory failure"); \
296 } while(0)
297
298#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
299 if(arg1->type != constr_type) { \
300 int __ret; \
301 root = asn1p_constraint_new(yylineno); \
302 checkmem(root); \
303 root->type = constr_type; \
304 __ret = asn1p_constraint_insert(root, \
305 arg1); \
306 checkmem(__ret == 0); \
307 } else { \
308 root = arg1; \
309 } \
310 if(arg2) { \
311 int __ret \
312 = asn1p_constraint_insert(root, arg2); \
313 checkmem(__ret == 0); \
314 } \
315 } while(0)
316
317
Lev Walkin609ccbb2004-09-04 04:49:21 +0000318
319/* Enabling traces. */
320#ifndef YYDEBUG
321# define YYDEBUG 0
322#endif
323
324/* Enabling verbose error messages. */
325#ifdef YYERROR_VERBOSE
326# undef YYERROR_VERBOSE
327# define YYERROR_VERBOSE 1
328#else
329# define YYERROR_VERBOSE 0
330#endif
331
332#ifndef YYSTYPE
Lev Walkinf59d0752004-08-18 04:59:12 +0000333#line 58 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +0000334typedef union {
335 asn1p_t *a_grammar;
336 asn1p_module_flags_e a_module_flags;
337 asn1p_module_t *a_module;
338 asn1p_expr_type_e a_type; /* ASN.1 Type */
339 asn1p_expr_t *a_expr; /* Constructed collection */
340 asn1p_constraint_t *a_constr; /* Constraint */
341 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
342 asn1p_xports_t *a_xports; /* IMports/EXports */
343 asn1p_oid_t *a_oid; /* Object Identifier */
344 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
345 struct asn1p_type_tag_s a_tag; /* A tag */
346 asn1p_ref_t *a_ref; /* Reference to custom type */
347 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
348 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
349 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
350 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
351 struct asn1p_param_s a_parg; /* A parameter argument */
352 asn1p_paramlist_t *a_plist; /* A pargs list */
353 enum asn1p_expr_marker_e a_marker; /* OPTIONAL/DEFAULT */
354 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
355 asn1_integer_t a_int;
356 char *tv_str;
357 struct {
358 char *buf;
359 int len;
360 } tv_opaque;
361 struct {
362 char *name;
363 struct asn1p_type_tag_s tag;
364 } tv_nametag;
Lev Walkin609ccbb2004-09-04 04:49:21 +0000365} yystype;
366/* Line 193 of /usr/local/share/bison/yacc.c. */
367#line 368 "asn1p_y.c"
368# define YYSTYPE yystype
369# define YYSTYPE_IS_TRIVIAL 1
Lev Walkinf15320b2004-06-03 03:38:44 +0000370#endif
371
Lev Walkin609ccbb2004-09-04 04:49:21 +0000372#ifndef YYLTYPE
373typedef struct yyltype
374{
375 int first_line;
376 int first_column;
377 int last_line;
378 int last_column;
379} yyltype;
380# define YYLTYPE yyltype
381# define YYLTYPE_IS_TRIVIAL 1
382#endif
383
384/* Copy the second part of user declarations. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000385
386
Lev Walkin609ccbb2004-09-04 04:49:21 +0000387/* Line 213 of /usr/local/share/bison/yacc.c. */
388#line 389 "asn1p_y.c"
Lev Walkinf15320b2004-06-03 03:38:44 +0000389
Lev Walkin609ccbb2004-09-04 04:49:21 +0000390#if ! defined (yyoverflow) || YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +0000391
Lev Walkin609ccbb2004-09-04 04:49:21 +0000392/* The parser invokes alloca or malloc; define the necessary symbols. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000393
Lev Walkin609ccbb2004-09-04 04:49:21 +0000394# if YYSTACK_USE_ALLOCA
395# define YYSTACK_ALLOC alloca
396# else
397# ifndef YYSTACK_USE_ALLOCA
398# if defined (alloca) || defined (_ALLOCA_H)
399# define YYSTACK_ALLOC alloca
400# else
401# ifdef __GNUC__
402# define YYSTACK_ALLOC __builtin_alloca
403# endif
404# endif
405# endif
406# endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000407
Lev Walkin609ccbb2004-09-04 04:49:21 +0000408# ifdef YYSTACK_ALLOC
409 /* Pacify GCC's `empty if-body' warning. */
410# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
411# else
412# if defined (__STDC__) || defined (__cplusplus)
413# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
414# define YYSIZE_T size_t
415# endif
416# define YYSTACK_ALLOC malloc
417# define YYSTACK_FREE free
418# endif
419#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
420
421
422#if (! defined (yyoverflow) \
423 && (! defined (__cplusplus) \
424 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
425
426/* A type that is properly aligned for any stack member. */
427union yyalloc
428{
429 short yyss;
430 YYSTYPE yyvs;
431 };
432
433/* The size of the maximum gap between one aligned stack and the next. */
434# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
435
436/* The size of an array large to enough to hold all stacks, each with
437 N elements. */
438# define YYSTACK_BYTES(N) \
439 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
440 + YYSTACK_GAP_MAX)
441
442/* Copy COUNT objects from FROM to TO. The source and destination do
443 not overlap. */
444# ifndef YYCOPY
445# if 1 < __GNUC__
446# define YYCOPY(To, From, Count) \
447 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
448# else
449# define YYCOPY(To, From, Count) \
450 do \
451 { \
452 register YYSIZE_T yyi; \
453 for (yyi = 0; yyi < (Count); yyi++) \
454 (To)[yyi] = (From)[yyi]; \
455 } \
456 while (0)
457# endif
458# endif
459
460/* Relocate STACK from its old location to the new one. The
461 local variables YYSIZE and YYSTACKSIZE give the old and new number of
462 elements in the stack, and YYPTR gives the new location of the
463 stack. Advance YYPTR to a properly aligned location for the next
464 stack. */
465# define YYSTACK_RELOCATE(Stack) \
466 do \
467 { \
468 YYSIZE_T yynewbytes; \
469 YYCOPY (&yyptr->Stack, Stack, yysize); \
470 Stack = &yyptr->Stack; \
471 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
472 yyptr += yynewbytes / sizeof (*yyptr); \
473 } \
474 while (0)
Lev Walkinf15320b2004-06-03 03:38:44 +0000475
476#endif
477
Lev Walkin609ccbb2004-09-04 04:49:21 +0000478#if defined (__STDC__) || defined (__cplusplus)
479 typedef signed char yysigned_char;
Lev Walkinf15320b2004-06-03 03:38:44 +0000480#else
Lev Walkin609ccbb2004-09-04 04:49:21 +0000481 typedef short yysigned_char;
Lev Walkinf15320b2004-06-03 03:38:44 +0000482#endif
483
Lev Walkin609ccbb2004-09-04 04:49:21 +0000484/* YYFINAL -- State number of the termination state. */
485#define YYFINAL 7
486#define YYLAST 819
487
488/* YYNTOKENS -- Number of terminals. */
489#define YYNTOKENS 115
490/* YYNNTS -- Number of nonterminals. */
491#define YYNNTS 98
492/* YYNRULES -- Number of rules. */
493#define YYNRULES 252
494/* YYNRULES -- Number of states. */
495#define YYNSTATES 391
496
497/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
498#define YYUNDEFTOK 2
499#define YYMAXUTOK 356
500
501#define YYTRANSLATE(X) \
502 ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
503
504/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
505static const unsigned char yytranslate[] =
506{
507 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
508 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
509 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
510 2, 2, 2, 111, 2, 2, 2, 2, 2, 2,
511 106, 107, 2, 2, 109, 2, 112, 2, 2, 2,
512 2, 2, 2, 2, 2, 2, 2, 2, 110, 108,
513 113, 2, 2, 2, 114, 2, 2, 2, 2, 2,
514 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
515 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
516 2, 2, 2, 2, 97, 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, 104, 99, 105, 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, 2, 2, 2, 2,
528 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
529 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
530 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
531 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
532 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
533 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
534 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
535 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
536 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
537 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
538 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
539 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
540 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
541 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
542 95, 96, 98, 100, 101, 102, 103
543};
544
545#if YYDEBUG
546/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
547 YYRHS. */
548static const unsigned short yyprhs[] =
549{
550 0, 0, 3, 5, 7, 10, 19, 20, 22, 26,
551 29, 31, 34, 36, 41, 43, 44, 46, 48, 51,
552 54, 57, 60, 63, 66, 67, 69, 71, 74, 76,
553 78, 80, 82, 84, 85, 89, 91, 95, 98, 100,
554 103, 108, 110, 114, 116, 118, 122, 126, 129, 131,
555 135, 137, 139, 146, 148, 150, 151, 153, 158, 163,
556 167, 174, 176, 180, 182, 186, 190, 192, 196, 198,
557 200, 202, 206, 210, 214, 216, 218, 222, 225, 227,
558 233, 234, 236, 238, 242, 245, 250, 255, 256, 258,
559 259, 266, 268, 271, 273, 275, 277, 281, 285, 288,
560 290, 292, 297, 302, 307, 312, 317, 319, 324, 329,
561 331, 335, 337, 341, 345, 347, 351, 353, 357, 359,
562 361, 363, 365, 370, 371, 375, 377, 379, 381, 383,
563 385, 387, 391, 393, 396, 398, 400, 402, 404, 407,
564 410, 412, 414, 417, 420, 422, 424, 426, 428, 431,
565 433, 436, 438, 440, 442, 444, 446, 448, 450, 452,
566 454, 456, 458, 460, 462, 464, 466, 468, 470, 472,
567 474, 475, 477, 479, 484, 488, 493, 495, 499, 505,
568 507, 511, 515, 519, 524, 528, 530, 534, 538, 542,
569 546, 548, 550, 552, 555, 558, 562, 564, 566, 568,
570 570, 572, 574, 576, 582, 584, 588, 590, 594, 595,
571 597, 599, 601, 603, 605, 607, 611, 616, 618, 622,
572 625, 629, 631, 635, 636, 638, 640, 643, 645, 647,
573 648, 652, 655, 659, 661, 665, 667, 672, 677, 679,
574 681, 683, 685, 686, 688, 690, 693, 696, 698, 700,
575 702, 704, 706
576};
577
578/* YYRHS -- A `-1'-separated list of the rules' RHS. */
579static const short yyrhs[] =
580{
581 116, 0, -1, 117, -1, 118, -1, 117, 118, -1,
582 209, 119, 34, 123, 3, 21, 126, 39, -1, -1,
583 120, -1, 104, 121, 105, -1, 104, 105, -1, 122,
584 -1, 121, 122, -1, 211, -1, 211, 106, 9, 107,
585 -1, 9, -1, -1, 124, -1, 125, -1, 124, 125,
586 -1, 41, 84, -1, 52, 84, -1, 20, 84, -1,
587 43, 53, -1, 12, 57, -1, -1, 127, -1, 128,
588 -1, 127, 128, -1, 130, -1, 135, -1, 141, -1,
589 167, -1, 138, -1, -1, 38, 12, 129, -1, 175,
590 -1, 54, 131, 108, -1, 54, 46, -1, 132, -1,
591 131, 132, -1, 133, 46, 209, 119, -1, 134, -1,
592 133, 109, 134, -1, 209, -1, 211, -1, 42, 136,
593 108, -1, 42, 17, 108, -1, 42, 108, -1, 137,
594 -1, 136, 109, 137, -1, 209, -1, 211, -1, 209,
595 139, 3, 104, 140, 105, -1, 162, -1, 172, -1,
596 -1, 182, -1, 209, 3, 207, 87, -1, 209, 3,
597 207, 160, -1, 209, 3, 150, -1, 209, 104, 142,
598 105, 3, 160, -1, 143, -1, 142, 109, 143, -1,
599 209, -1, 209, 110, 211, -1, 172, 110, 211, -1,
600 145, -1, 144, 109, 145, -1, 160, -1, 211, -1,
601 147, -1, 146, 109, 147, -1, 212, 160, 199, -1,
602 30, 68, 160, -1, 159, -1, 149, -1, 148, 109,
603 149, -1, 212, 160, -1, 159, -1, 28, 104, 152,
604 105, 154, -1, -1, 88, -1, 153, -1, 152, 109,
605 153, -1, 165, 199, -1, 165, 160, 199, 151, -1,
606 165, 165, 199, 151, -1, -1, 155, -1, -1, 95,
607 82, 104, 156, 157, 105, -1, 158, -1, 157, 158,
608 -1, 4, -1, 165, -1, 102, -1, 102, 111, 170,
609 -1, 102, 111, 206, -1, 161, 179, -1, 174, -1,
610 175, -1, 27, 104, 148, 105, -1, 78, 104, 146,
611 105, -1, 79, 104, 146, 105, -1, 78, 179, 68,
612 161, -1, 79, 179, 68, 161, -1, 18, -1, 18,
613 35, 25, 211, -1, 209, 104, 144, 105, -1, 162,
614 -1, 56, 68, 162, -1, 11, -1, 11, 112, 209,
615 -1, 11, 112, 211, -1, 210, -1, 210, 112, 163,
616 -1, 164, -1, 163, 112, 164, -1, 166, -1, 166,
617 -1, 13, -1, 14, -1, 211, 139, 3, 168, -1,
618 -1, 104, 169, 171, -1, 5, -1, 7, -1, 6,
619 -1, 206, -1, 170, -1, 211, -1, 209, 112, 211,
620 -1, 4, -1, 171, 4, -1, 24, -1, 63, -1,
621 76, -1, 173, -1, 67, 81, -1, 65, 51, -1,
622 77, -1, 44, -1, 36, 71, -1, 26, 81, -1,
623 91, -1, 47, -1, 58, -1, 40, -1, 22, 81,
624 -1, 172, -1, 173, 203, -1, 23, -1, 48, -1,
625 49, -1, 50, -1, 59, -1, 64, -1, 74, -1,
626 83, -1, 85, -1, 90, -1, 92, -1, 93, -1,
627 94, -1, 66, -1, 99, -1, 100, -1, 97, -1,
628 98, -1, 96, -1, -1, 180, -1, 181, -1, 80,
629 106, 182, 107, -1, 106, 182, 107, -1, 181, 106,
630 182, 107, -1, 183, -1, 183, 109, 102, -1, 183,
631 109, 102, 109, 183, -1, 184, -1, 183, 176, 184,
632 -1, 183, 177, 184, -1, 184, 178, 184, -1, 186,
633 106, 182, 107, -1, 106, 182, 107, -1, 187, -1,
634 187, 185, 187, -1, 61, 185, 187, -1, 187, 185,
635 60, -1, 61, 185, 60, -1, 193, -1, 188, -1,
636 101, -1, 101, 113, -1, 113, 101, -1, 113, 101,
637 113, -1, 80, -1, 46, -1, 206, -1, 211, -1,
638 6, -1, 45, -1, 86, -1, 95, 30, 104, 189,
639 105, -1, 190, -1, 189, 109, 190, -1, 102, -1,
640 211, 179, 191, -1, -1, 192, -1, 73, -1, 15,
641 -1, 69, -1, 194, -1, 195, -1, 104, 209, 105,
642 -1, 194, 104, 196, 105, -1, 197, -1, 196, 109,
643 197, -1, 114, 198, -1, 114, 112, 198, -1, 211,
644 -1, 198, 112, 211, -1, -1, 200, -1, 69, -1,
645 33, 201, -1, 187, -1, 172, -1, -1, 104, 202,
646 171, -1, 104, 105, -1, 104, 204, 105, -1, 205,
647 -1, 204, 109, 205, -1, 211, -1, 211, 106, 206,
648 107, -1, 211, 106, 170, 107, -1, 206, -1, 102,
649 -1, 9, -1, 10, -1, -1, 208, -1, 103, -1,
650 103, 52, -1, 103, 41, -1, 11, -1, 12, -1,
651 12, -1, 8, -1, 211, -1, 211, 208, -1
652};
653
654/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
655static const unsigned short yyrline[] =
656{
657 0, 298, 298, 304, 310, 326, 351, 353, 356, 360,
658 365, 372, 380, 385, 389, 398, 400, 408, 412, 420,
659 424, 427, 430, 434, 454, 456, 464, 468, 500, 504,
660 513, 520, 533, 541, 540, 554, 567, 574, 579, 585,
661 591, 600, 606, 612, 619, 627, 631, 634, 641, 647,
662 653, 660, 669, 679, 687, 695, 697, 709, 721, 728,
663 744, 753, 763, 773, 778, 785, 795, 801, 807, 811,
664 823, 829, 835, 843, 850, 855, 861, 867, 874, 879,
665 889, 891, 894, 902, 908, 917, 923, 940, 942, 949,
666 947, 956, 961, 967, 971, 982, 991, 1000, 1011, 1032,
667 1036, 1042, 1048, 1054, 1060, 1068, 1076, 1082, 1096, 1120,
668 1127, 1141, 1150, 1160, 1170, 1178, 1199, 1208, 1217, 1218,
669 1220, 1227, 1239, 1250, 1249, 1256, 1260, 1264, 1268, 1271,
670 1276, 1288, 1304, 1315, 1329, 1331, 1332, 1333, 1334, 1335,
671 1336, 1337, 1338, 1339, 1340, 1341, 1347, 1349, 1350, 1353,
672 1360, 1372, 1374, 1378, 1382, 1383, 1384, 1385, 1386, 1390,
673 1391, 1392, 1393, 1397, 1398, 1405, 1405, 1406, 1406, 1407,
674 1409, 1411, 1416, 1420, 1429, 1433, 1438, 1442, 1448, 1458,
675 1462, 1465, 1468, 1473, 1482, 1490, 1496, 1503, 1511, 1519,
676 1528, 1531, 1536, 1538, 1539, 1540, 1543, 1547, 1552, 1556,
677 1567, 1572, 1577, 1584, 1590, 1594, 1599, 1605, 1617, 1619,
678 1622, 1626, 1629, 1634, 1638, 1646, 1661, 1667, 1674, 1687,
679 1699, 1714, 1718, 1735, 1737, 1740, 1744, 1750, 1753, 1755,
680 1755, 1775, 1780, 1785, 1791, 1797, 1805, 1813, 1821, 1828,
681 1838, 1843, 1873, 1875, 1878, 1883, 1887, 1893, 1898, 1905,
682 1912, 1919, 1924
683};
684#endif
685
686#if YYDEBUG || YYERROR_VERBOSE
687/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
688 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
689static const char *const yytname[] =
690{
691 "$end", "error", "$undefined", "TOK_PPEQ", "TOK_opaque", "TOK_bstring",
692 "TOK_cstring", "TOK_hstring", "TOK_identifier", "TOK_number",
693 "TOK_number_negative", "TOK_typereference", "TOK_capitalreference",
694 "TOK_typefieldreference", "TOK_valuefieldreference", "TOK_ABSENT",
695 "TOK_ABSTRACT_SYNTAX", "TOK_ALL", "TOK_ANY", "TOK_APPLICATION",
696 "TOK_AUTOMATIC", "TOK_BEGIN", "TOK_BIT", "TOK_BMPString", "TOK_BOOLEAN",
697 "TOK_BY", "TOK_CHARACTER", "TOK_CHOICE", "TOK_CLASS", "TOK_COMPONENT",
698 "TOK_COMPONENTS", "TOK_CONSTRAINED", "TOK_CONTAINING", "TOK_DEFAULT",
699 "TOK_DEFINITIONS", "TOK_DEFINED", "TOK_EMBEDDED", "TOK_ENCODED",
700 "TOK_ENCODING_CONTROL", "TOK_END", "TOK_ENUMERATED", "TOK_EXPLICIT",
701 "TOK_EXPORTS", "TOK_EXTENSIBILITY", "TOK_EXTERNAL", "TOK_FALSE",
702 "TOK_FROM", "TOK_GeneralizedTime", "TOK_GeneralString",
703 "TOK_GraphicString", "TOK_IA5String", "TOK_IDENTIFIER", "TOK_IMPLICIT",
704 "TOK_IMPLIED", "TOK_IMPORTS", "TOK_INCLUDES", "TOK_INSTANCE",
705 "TOK_INSTRUCTIONS", "TOK_INTEGER", "TOK_ISO646String", "TOK_MAX",
706 "TOK_MIN", "TOK_MINUS_INFINITY", "TOK_NULL", "TOK_NumericString",
707 "TOK_OBJECT", "TOK_ObjectDescriptor", "TOK_OCTET", "TOK_OF",
708 "TOK_OPTIONAL", "TOK_PATTERN", "TOK_PDV", "TOK_PLUS_INFINITY",
709 "TOK_PRESENT", "TOK_PrintableString", "TOK_PRIVATE", "TOK_REAL",
710 "TOK_RELATIVE_OID", "TOK_SEQUENCE", "TOK_SET", "TOK_SIZE", "TOK_STRING",
711 "TOK_SYNTAX", "TOK_T61String", "TOK_TAGS", "TOK_TeletexString",
712 "TOK_TRUE", "TOK_TYPE_IDENTIFIER", "TOK_UNIQUE", "TOK_UNIVERSAL",
713 "TOK_UniversalString", "TOK_UTCTime", "TOK_UTF8String",
714 "TOK_VideotexString", "TOK_VisibleString", "TOK_WITH", "TOK_EXCEPT",
715 "'^'", "TOK_INTERSECTION", "'|'", "TOK_UNION", "TOK_TwoDots",
716 "TOK_ThreeDots", "TOK_tag", "'{'", "'}'", "'('", "')'", "';'", "','",
717 "':'", "'!'", "'.'", "'<'", "'@'", "$accept", "ParsedGrammar",
718 "ModuleList", "ModuleSpecification", "optObjectIdentifier",
719 "ObjectIdentifier", "ObjectIdentifierBody", "ObjectIdentifierElement",
720 "optModuleSpecificationFlags", "ModuleSpecificationFlags",
721 "ModuleSpecificationFlag", "optModuleSpecificationBody",
722 "ModuleSpecificationBody", "ModuleSpecificationElement", "@1",
723 "ImportsDefinition", "ImportsBundleSet", "ImportsBundle", "ImportsList",
724 "ImportsElement", "ExportsDefinition", "ExportsBody", "ExportsElement",
725 "ValueSetDefinition", "DefinedTypeRef", "optValueSetBody",
726 "DataTypeReference", "ParameterArgumentList", "ParameterArgumentName",
727 "ActualParameterList", "ActualParameter", "ComponentTypeLists",
728 "ComponentType", "AlternativeTypeLists", "AlternativeType",
729 "ClassDeclaration", "optUnique", "ClassFieldList", "ClassField",
730 "optWithSyntax", "WithSyntax", "@2", "WithSyntaxFormat",
731 "WithSyntaxFormatToken", "ExtensionAndException", "Type",
732 "TypeDeclaration", "ComplexTypeReference",
733 "ComplexTypeReferenceAmpList", "ComplexTypeReferenceElement",
734 "ClassFieldIdentifier", "ClassFieldName", "ValueDefinition",
735 "InlineOrDefinedValue", "@3", "DefinedValue", "Opaque", "BasicTypeId",
736 "BasicTypeId_UniverationCompatible", "BasicType", "BasicString",
737 "Union", "Intersection", "Except", "optConstraints", "Constraints",
738 "SetOfConstraints", "ElementSetSpecs", "ElementSetSpec",
739 "ConstraintSubtypeElement", "ConstraintRangeSpec", "ConstraintSpec",
740 "ConstraintValue", "WithComponents", "WithComponentsList",
741 "WithComponentsElement", "optPresenceConstraint", "PresenceConstraint",
742 "TableConstraint", "SimpleTableConstraint",
743 "ComponentRelationConstraint", "AtNotationList", "AtNotationElement",
744 "ComponentIdList", "optMarker", "Marker", "DefaultValue", "@4",
745 "UniverationDefinition", "UniverationList", "UniverationElement",
746 "SignedNumber", "optTag", "Tag", "TypeRefName", "ObjectClassReference",
747 "Identifier", "TaggedIdentifier", 0
748};
749#endif
750
751# ifdef YYPRINT
752/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
753 token YYLEX-NUM. */
754static const unsigned short yytoknum[] =
755{
756 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
757 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
758 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
759 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
760 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
761 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
762 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
763 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
764 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
765 345, 346, 347, 348, 349, 350, 351, 94, 352, 124,
766 353, 354, 355, 356, 123, 125, 40, 41, 59, 44,
767 58, 33, 46, 60, 64
768};
769# endif
770
771/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
772static const unsigned char yyr1[] =
773{
774 0, 115, 116, 117, 117, 118, 119, 119, 120, 120,
775 121, 121, 122, 122, 122, 123, 123, 124, 124, 125,
776 125, 125, 125, 125, 126, 126, 127, 127, 128, 128,
777 128, 128, 128, 129, 128, 128, 130, 130, 131, 131,
778 132, 133, 133, 134, 134, 135, 135, 135, 136, 136,
779 137, 137, 138, 139, 139, 140, 140, 141, 141, 141,
780 141, 142, 142, 143, 143, 143, 144, 144, 145, 145,
781 146, 146, 147, 147, 147, 148, 148, 149, 149, 150,
782 151, 151, 152, 152, 153, 153, 153, 154, 154, 156,
783 155, 157, 157, 158, 158, 159, 159, 159, 160, 161,
784 161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
785 161, 162, 162, 162, 162, 162, 163, 163, 164, 165,
786 166, 166, 167, 169, 168, 168, 168, 168, 168, 168,
787 170, 170, 171, 171, 172, 172, 172, 172, 172, 172,
788 172, 172, 172, 172, 172, 172, 173, 173, 173, 174,
789 174, 175, 175, 175, 175, 175, 175, 175, 175, 175,
790 175, 175, 175, 175, 175, 176, 176, 177, 177, 178,
791 179, 179, 180, 180, 181, 181, 182, 182, 182, 183,
792 183, 183, 183, 184, 184, 184, 184, 184, 184, 184,
793 184, 184, 185, 185, 185, 185, 186, 186, 187, 187,
794 187, 187, 187, 188, 189, 189, 190, 190, 191, 191,
795 192, 192, 192, 193, 193, 194, 195, 196, 196, 197,
796 197, 198, 198, 199, 199, 200, 200, 201, 201, 202,
797 201, 203, 203, 204, 204, 205, 205, 205, 205, 205,
798 206, 206, 207, 207, 208, 208, 208, 209, 209, 210,
799 211, 212, 212
800};
801
802/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
803static const unsigned char yyr2[] =
804{
805 0, 2, 1, 1, 2, 8, 0, 1, 3, 2,
806 1, 2, 1, 4, 1, 0, 1, 1, 2, 2,
807 2, 2, 2, 2, 0, 1, 1, 2, 1, 1,
808 1, 1, 1, 0, 3, 1, 3, 2, 1, 2,
809 4, 1, 3, 1, 1, 3, 3, 2, 1, 3,
810 1, 1, 6, 1, 1, 0, 1, 4, 4, 3,
811 6, 1, 3, 1, 3, 3, 1, 3, 1, 1,
812 1, 3, 3, 3, 1, 1, 3, 2, 1, 5,
813 0, 1, 1, 3, 2, 4, 4, 0, 1, 0,
814 6, 1, 2, 1, 1, 1, 3, 3, 2, 1,
815 1, 4, 4, 4, 4, 4, 1, 4, 4, 1,
816 3, 1, 3, 3, 1, 3, 1, 3, 1, 1,
817 1, 1, 4, 0, 3, 1, 1, 1, 1, 1,
818 1, 3, 1, 2, 1, 1, 1, 1, 2, 2,
819 1, 1, 2, 2, 1, 1, 1, 1, 2, 1,
820 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
821 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
822 0, 1, 1, 4, 3, 4, 1, 3, 5, 1,
823 3, 3, 3, 4, 3, 1, 3, 3, 3, 3,
824 1, 1, 1, 2, 2, 3, 1, 1, 1, 1,
825 1, 1, 1, 5, 1, 3, 1, 3, 0, 1,
826 1, 1, 1, 1, 1, 3, 4, 1, 3, 2,
827 3, 1, 3, 0, 1, 1, 2, 1, 1, 0,
828 3, 2, 3, 1, 3, 1, 4, 4, 1, 1,
829 1, 1, 0, 1, 1, 2, 2, 1, 1, 1,
830 1, 1, 2
831};
832
833/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
834 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
835 means the default is an error. */
836static const unsigned char yydefact[] =
837{
838 0, 247, 248, 0, 2, 3, 6, 1, 4, 0,
839 0, 7, 250, 14, 9, 0, 10, 12, 15, 8,
840 11, 0, 0, 0, 0, 0, 0, 0, 16, 17,
841 0, 23, 21, 19, 22, 20, 0, 18, 13, 24,
842 151, 0, 0, 152, 153, 154, 0, 155, 156, 164,
843 157, 158, 159, 160, 161, 162, 163, 0, 25, 26,
844 28, 29, 32, 30, 31, 35, 0, 0, 33, 0,
845 47, 0, 48, 50, 51, 37, 0, 38, 0, 41,
846 43, 44, 5, 27, 242, 111, 249, 0, 134, 0,
847 0, 147, 141, 145, 146, 135, 0, 0, 136, 140,
848 144, 0, 0, 53, 54, 137, 114, 0, 34, 46,
849 45, 0, 36, 39, 0, 0, 0, 244, 59, 0,
850 243, 0, 148, 143, 142, 139, 138, 0, 61, 0,
851 63, 0, 0, 0, 49, 6, 42, 0, 246, 245,
852 111, 249, 106, 0, 0, 170, 170, 57, 58, 170,
853 109, 149, 137, 99, 100, 0, 112, 113, 0, 0,
854 0, 0, 55, 120, 121, 115, 116, 118, 125, 127,
855 126, 240, 241, 123, 122, 129, 128, 0, 130, 40,
856 0, 82, 223, 119, 0, 0, 0, 0, 0, 0,
857 0, 171, 172, 0, 0, 98, 0, 150, 0, 0,
858 62, 65, 64, 200, 201, 197, 0, 196, 202, 0,
859 0, 0, 0, 56, 176, 179, 0, 185, 191, 190,
860 213, 214, 198, 199, 0, 0, 0, 87, 0, 0,
861 225, 223, 223, 84, 224, 0, 95, 0, 75, 78,
862 251, 0, 110, 0, 0, 0, 70, 74, 0, 0,
863 0, 0, 0, 0, 239, 231, 0, 233, 238, 235,
864 0, 66, 68, 69, 60, 192, 0, 0, 0, 0,
865 0, 52, 167, 168, 165, 166, 0, 0, 0, 169,
866 0, 0, 0, 0, 117, 132, 124, 131, 0, 79,
867 88, 83, 229, 228, 227, 226, 80, 80, 107, 0,
868 101, 0, 252, 77, 0, 0, 102, 0, 223, 174,
869 104, 0, 103, 105, 232, 0, 0, 108, 0, 193,
870 194, 189, 187, 0, 215, 184, 177, 180, 181, 182,
871 0, 188, 186, 0, 0, 217, 133, 0, 0, 81,
872 85, 86, 96, 97, 76, 173, 73, 71, 72, 175,
873 234, 0, 0, 67, 195, 206, 0, 204, 170, 0,
874 183, 0, 219, 221, 216, 0, 89, 230, 237, 236,
875 203, 0, 208, 178, 220, 0, 218, 0, 205, 211,
876 212, 210, 207, 209, 222, 93, 0, 91, 94, 90,
877 92
878};
879
880/* YYDEFGOTO[NTERM-NUM]. */
881static const short yydefgoto[] =
882{
883 -1, 3, 4, 5, 10, 11, 15, 16, 27, 28,
884 29, 57, 58, 59, 108, 60, 76, 77, 78, 79,
885 61, 71, 72, 62, 102, 212, 63, 127, 128, 260,
886 261, 245, 246, 237, 238, 118, 340, 180, 181, 289,
887 290, 377, 386, 387, 247, 262, 149, 150, 165, 166,
888 182, 183, 64, 174, 225, 175, 286, 151, 152, 153,
889 154, 277, 278, 280, 190, 191, 192, 213, 214, 215,
890 267, 216, 217, 218, 356, 357, 382, 383, 219, 220,
891 221, 334, 335, 362, 233, 234, 295, 338, 197, 256,
892 257, 222, 119, 120, 155, 106, 223, 248
893};
894
895/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
896 STATE-NUM. */
897#define YYPACT_NINF -213
898static const short yypact[] =
899{
900 121, -213, -213, 47, 121, -213, -44, -213, -213, 33,
901 31, -213, -213, -213, -213, 36, -213, -18, 41, -213,
902 -213, 81, 97, 77, 91, 55, 146, 164, 41, -213,
903 19, -213, -213, -213, -213, -213, 160, -213, -213, 413,
904 -213, 185, 15, -213, -213, -213, 131, -213, -213, -213,
905 -213, -213, -213, -213, -213, -213, -213, 161, 413, -213,
906 -213, -213, -213, -213, -213, -213, 187, 711, -213, 107,
907 -213, 65, -213, -213, -213, -213, 27, -213, -10, -213,
908 -213, -213, -213, -213, 6, 129, -213, 167, -213, 170,
909 199, -213, -213, -213, -213, -213, 225, 196, -213, -213,
910 -213, 728, 276, -213, -213, -213, 168, 278, -213, -213,
911 -213, 136, -213, -213, 121, 136, 178, 45, -213, 574,
912 -213, 136, -213, -213, -213, -213, -213, 40, -213, 173,
913 176, 181, 226, 64, -213, -44, -213, 226, -213, -213,
914 24, 183, 253, 190, 221, 66, 132, -213, -213, -58,
915 -213, -213, 191, -213, -213, 192, -213, -213, 290, 728,
916 294, 294, 149, -213, -213, 193, -213, -213, -213, -213,
917 -213, -213, -213, -213, -213, -213, -213, 200, -213, -213,
918 51, -213, 497, -213, 279, -6, 245, 202, 1, 149,
919 242, -213, 205, 1, 248, -213, 48, -213, 352, 651,
920 -213, -213, -213, -213, -213, -213, -12, -213, -213, 288,
921 121, 149, 214, -213, 162, 227, 215, -12, -213, -213,
922 218, -213, -213, -213, 226, 321, 294, 231, 226, 291,
923 -213, 26, 26, -213, -213, 294, 217, 73, -213, -213,
924 229, 651, -213, 149, 261, 83, -213, -213, 651, 223,
925 651, 149, 113, 651, -213, -213, 115, -213, -213, 228,
926 116, -213, -213, -213, -213, 220, 236, 156, 235, 237,
927 233, -213, -213, -213, -213, -213, 239, 149, 149, -213,
928 149, 149, 198, 230, -213, -213, 339, -213, 263, -213,
929 -213, -213, -213, -213, -213, -213, 258, 258, -213, 257,
930 -213, -6, -213, -213, 240, 651, -213, 1, 26, -213,
931 -213, 241, -213, -213, -213, 69, 257, -213, 352, -213,
932 238, -213, -213, 20, -213, -213, 244, -213, -213, -213,
933 243, -213, -213, 8, 123, -213, -213, 251, 321, -213,
934 -213, -213, -213, -213, -213, -213, -213, -213, -213, -213,
935 -213, 250, 252, -213, -213, -213, 128, -213, -58, 149,
936 -213, 294, 249, -213, -213, 230, -213, 339, -213, -213,
937 -213, 20, 25, 175, 249, 294, -213, 189, -213, -213,
938 -213, -213, -213, -213, -213, -213, 11, -213, -213, -213,
939 -213
940};
941
942/* YYPGOTO[NTERM-NUM]. */
943static const short yypgoto[] =
944{
945 -213, -213, -213, 361, 234, -213, -213, 356, -213, -213,
946 344, -213, -213, 315, -213, -213, -213, 304, -213, 266,
947 -213, -213, 272, -213, 317, -213, -213, -213, 232, -213,
948 67, 194, 79, -213, 88, -213, 93, -213, 165, -213,
949 -213, -213, -213, 12, -172, -114, -136, -55, -213, 179,
950 -181, -113, -213, -213, -213, -212, 56, -49, -46, -213,
951 42, -213, -213, -213, -139, -213, -213, -160, 38, -31,
952 188, -213, -175, -213, -213, 35, -213, -213, -213, -213,
953 -213, -213, 39, 46, -168, -213, -213, -213, -213, -213,
954 94, -130, -213, 172, 4, -213, -9, -171
955};
956
957/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
958 positive, shift that token. If negative, reduce the rule which
959 number is the opposite. If zero, do what YYDEFACT says.
960 If YYTABLE_NINF, parse error. */
961#define YYTABLE_NINF -249
962static const short yytable[] =
963{
964 17, 232, 12, 176, 6, 148, 17, 194, 6, 12,
965 195, 103, 103, 239, 241, 385, 12, 104, 104, 167,
966 105, 105, 187, 12, 163, 164, 1, 2, 12, 249,
967 67, 244, 69, 74, 116, 12, 114, 81, 1, 2,
968 379, 12, 13, 66, 12, 13, 73, 7, 189, 67,
969 80, 270, 129, 22, 294, 105, 12, 171, 172, 229,
970 9, 23, 66, 296, 297, 18, 258, 81, 231, 168,
971 169, 170, 12, 171, 172, 1, 2, 12, 171, 172,
972 80, 65, 24, 304, 25, 264, 138, 342, 21, 265,
973 30, 311, 322, 26, 380, 230, 236, 139, 381, 115,
974 65, 266, 74, 236, 351, 130, 81, 332, 34, 117,
975 129, 167, 157, 105, 310, 73, 389, 313, 135, 80,
976 361, 330, 355, 70, 178, 156, 38, 303, -247, 239,
977 241, 242, 1, 2, 308, 112, 121, 177, 14, 12,
978 348, 19, 1, 2, 12, 158, 187, 1, 2, 159,
979 254, 201, 202, 255, 31, 203, 227, 12, 171, 172,
980 228, 32, 203, 130, 12, 171, 172, 36, 173, 343,
981 188, 254, 189, 110, 111, 33, 240, 75, 300, 240,
982 293, 39, 301, 105, 240, 258, 352, 259, 306, 263,
983 84, 346, 307, 385, 204, 205, 388, 68, 85, 86,
984 82, 204, 163, 164, 203, 388, 12, 171, 172, 87,
985 206, 88, 187, 89, 269, 109, 321, 287, 312, 372,
986 314, 317, 307, 90, 315, 318, 298, 91, 364, 207,
987 35, 92, 365, 370, 93, 208, 193, 371, 189, 163,
988 164, 121, 208, 204, 209, 94, 327, 328, 122, 329,
989 95, 123, 96, 210, 97, 211, 85, 86, 331, 272,
990 273, 274, 275, 98, 99, 12, 171, 172, 1, 2,
991 124, 276, 272, 273, 274, 275, 125, 126, 100, 131,
992 132, 133, 137, 160, 208, 162, 161, -248, 184, 186,
993 178, 101, 240, 199, 185, 196, 198, 203, 240, 12,
994 171, 172, 12, 177, 235, 224, 259, 178, 243, 263,
995 250, 251, 226, 87, 358, 88, 253, 89, 268, 271,
996 177, 281, 283, 279, 363, 285, 288, 90, 299, 305,
997 309, 91, 117, 319, 316, 92, 204, 320, 93, 323,
998 325, 326, 324, 336, 333, 337, 339, 345, 349, 94,
999 360, 354, 363, 359, 95, 366, 96, 368, 97, 369,
1000 12, 375, 358, 140, 141, 8, 384, 98, 99, 179,
1001 142, 20, 37, 83, 87, 40, 88, 208, 89, 143,
1002 113, 136, 100, 134, 107, 353, 347, 252, 90, 344,
1003 341, 200, 91, 291, 367, 292, 92, 373, 390, 93,
1004 43, 44, 45, 284, 376, 282, 378, 374, 144, 350,
1005 94, 47, 302, 0, 0, 95, 48, 96, 49, 97,
1006 0, 12, 0, 0, 1, 2, 50, 0, 98, 99,
1007 145, 146, 0, 0, 0, 51, 40, 52, 0, 0,
1008 0, 0, 53, 100, 54, 55, 56, 0, 0, 0,
1009 0, 41, 0, 0, 0, 42, 0, 0, 0, 0,
1010 0, 43, 44, 45, 0, 0, 0, 46, 0, 0,
1011 0, 0, 47, 0, 0, 0, 0, 48, 0, 49,
1012 0, 0, 0, 0, 0, 0, 0, 50, 0, 0,
1013 0, 0, 0, 0, 0, 0, 51, 0, 52, 0,
1014 0, 0, 0, 53, 0, 54, 55, 56, 140, 141,
1015 163, 164, 0, 0, 0, 142, 0, 0, 0, 87,
1016 40, 88, 0, 89, 143, 0, 0, 0, 0, 0,
1017 229, 0, 0, 90, 0, 0, 0, 91, 0, 0,
1018 0, 92, 0, 0, 93, 43, 44, 45, 0, 0,
1019 0, 0, 0, 144, 0, 94, 47, 0, 0, 0,
1020 95, 48, 96, 49, 97, 0, 230, 0, 0, 0,
1021 0, 50, 0, 98, 99, 145, 146, 0, 0, 0,
1022 51, 0, 52, 0, 0, 140, 141, 53, 100, 54,
1023 55, 56, 142, 0, 0, 0, 87, 40, 88, 0,
1024 89, 143, 0, 0, 0, 0, 0, 0, 0, 0,
1025 90, 0, 0, 0, 91, 0, 0, 0, 92, 0,
1026 0, 93, 43, 44, 45, 0, 0, 0, 0, 0,
1027 144, 0, 94, 47, 0, 0, 0, 95, 48, 96,
1028 49, 97, 0, 0, 0, 0, 0, 0, 50, 0,
1029 98, 99, 145, 146, 0, 0, 0, 51, 0, 52,
1030 0, 147, 140, 141, 53, 100, 54, 55, 56, 142,
1031 0, 0, 0, 87, 40, 88, 0, 89, 143, 0,
1032 0, 0, 0, 0, 0, 0, 0, 90, 0, 0,
1033 0, 91, 0, 0, 0, 92, 0, 0, 93, 43,
1034 44, 45, 0, 0, 0, 0, 0, 144, 0, 94,
1035 47, 0, 0, 0, 95, 48, 96, 49, 97, 0,
1036 0, 0, 85, 86, 0, 50, 0, 98, 99, 145,
1037 146, 0, 0, 87, 51, 88, 52, 89, 0, 1,
1038 2, 53, 100, 54, 55, 56, 0, 90, 0, 0,
1039 87, 91, 88, 0, 89, 92, 0, 0, 93, 0,
1040 0, 0, 0, 0, 90, 0, 0, 0, 91, 94,
1041 0, 0, 92, 0, 95, 93, 96, 0, 97, 0,
1042 0, 0, 0, 0, 0, 0, 94, 98, 99, 0,
1043 0, 95, 0, 96, 0, 97, 0, 0, 0, 0,
1044 0, 0, 100, 0, 98, 99, 0, 0, 0, 0,
1045 0, 0, 0, 0, 0, 0, 0, 0, 0, 100
1046};
1047
1048static const short yycheck[] =
1049{
1050 9, 182, 8, 133, 0, 119, 15, 146, 4, 8,
1051 149, 66, 67, 185, 185, 4, 8, 66, 67, 132,
1052 66, 67, 80, 8, 13, 14, 11, 12, 8, 189,
1053 39, 30, 17, 42, 28, 8, 46, 46, 11, 12,
1054 15, 8, 9, 39, 8, 9, 42, 0, 106, 58,
1055 46, 211, 101, 12, 229, 101, 8, 9, 10, 33,
1056 104, 20, 58, 231, 232, 34, 196, 76, 182, 5,
1057 6, 7, 8, 9, 10, 11, 12, 8, 9, 10,
1058 76, 39, 41, 243, 43, 199, 41, 299, 106, 101,
1059 9, 251, 267, 52, 69, 69, 102, 52, 73, 109,
1060 58, 113, 111, 102, 316, 101, 115, 282, 53, 103,
1061 159, 224, 121, 159, 250, 111, 105, 253, 114, 115,
1062 112, 281, 102, 108, 133, 121, 107, 241, 104, 301,
1063 301, 186, 11, 12, 248, 108, 112, 133, 105, 8,
1064 308, 105, 11, 12, 8, 105, 80, 11, 12, 109,
1065 102, 160, 161, 105, 57, 6, 105, 8, 9, 10,
1066 109, 84, 6, 159, 8, 9, 10, 3, 104, 299,
1067 104, 102, 106, 108, 109, 84, 185, 46, 105, 188,
1068 229, 21, 109, 229, 193, 315, 316, 196, 105, 198,
1069 3, 305, 109, 4, 45, 46, 377, 12, 11, 12,
1070 39, 45, 13, 14, 6, 386, 8, 9, 10, 22,
1071 61, 24, 80, 26, 210, 108, 60, 226, 105, 358,
1072 105, 105, 109, 36, 109, 109, 235, 40, 105, 80,
1073 84, 44, 109, 105, 47, 86, 104, 109, 106, 13,
1074 14, 112, 86, 45, 95, 58, 277, 278, 81, 280,
1075 63, 81, 65, 104, 67, 106, 11, 12, 60, 97,
1076 98, 99, 100, 76, 77, 8, 9, 10, 11, 12,
1077 71, 109, 97, 98, 99, 100, 51, 81, 91, 3,
1078 112, 3, 104, 110, 86, 104, 110, 104, 35, 68,
1079 299, 104, 301, 3, 104, 104, 104, 6, 307, 8,
1080 9, 10, 8, 299, 25, 112, 315, 316, 106, 318,
1081 68, 106, 112, 22, 323, 24, 68, 26, 30, 105,
1082 316, 106, 104, 96, 333, 4, 95, 36, 111, 68,
1083 107, 40, 103, 113, 106, 44, 45, 101, 47, 104,
1084 107, 102, 105, 4, 114, 82, 88, 107, 107, 58,
1085 107, 113, 361, 109, 63, 104, 65, 107, 67, 107,
1086 8, 112, 371, 11, 12, 4, 375, 76, 77, 135,
1087 18, 15, 28, 58, 22, 23, 24, 86, 26, 27,
1088 76, 115, 91, 111, 67, 318, 307, 193, 36, 301,
1089 297, 159, 40, 228, 338, 104, 44, 359, 386, 47,
1090 48, 49, 50, 224, 365, 217, 371, 361, 56, 315,
1091 58, 59, 240, -1, -1, 63, 64, 65, 66, 67,
1092 -1, 8, -1, -1, 11, 12, 74, -1, 76, 77,
1093 78, 79, -1, -1, -1, 83, 23, 85, -1, -1,
1094 -1, -1, 90, 91, 92, 93, 94, -1, -1, -1,
1095 -1, 38, -1, -1, -1, 42, -1, -1, -1, -1,
1096 -1, 48, 49, 50, -1, -1, -1, 54, -1, -1,
1097 -1, -1, 59, -1, -1, -1, -1, 64, -1, 66,
1098 -1, -1, -1, -1, -1, -1, -1, 74, -1, -1,
1099 -1, -1, -1, -1, -1, -1, 83, -1, 85, -1,
1100 -1, -1, -1, 90, -1, 92, 93, 94, 11, 12,
1101 13, 14, -1, -1, -1, 18, -1, -1, -1, 22,
1102 23, 24, -1, 26, 27, -1, -1, -1, -1, -1,
1103 33, -1, -1, 36, -1, -1, -1, 40, -1, -1,
1104 -1, 44, -1, -1, 47, 48, 49, 50, -1, -1,
1105 -1, -1, -1, 56, -1, 58, 59, -1, -1, -1,
1106 63, 64, 65, 66, 67, -1, 69, -1, -1, -1,
1107 -1, 74, -1, 76, 77, 78, 79, -1, -1, -1,
1108 83, -1, 85, -1, -1, 11, 12, 90, 91, 92,
1109 93, 94, 18, -1, -1, -1, 22, 23, 24, -1,
1110 26, 27, -1, -1, -1, -1, -1, -1, -1, -1,
1111 36, -1, -1, -1, 40, -1, -1, -1, 44, -1,
1112 -1, 47, 48, 49, 50, -1, -1, -1, -1, -1,
1113 56, -1, 58, 59, -1, -1, -1, 63, 64, 65,
1114 66, 67, -1, -1, -1, -1, -1, -1, 74, -1,
1115 76, 77, 78, 79, -1, -1, -1, 83, -1, 85,
1116 -1, 87, 11, 12, 90, 91, 92, 93, 94, 18,
1117 -1, -1, -1, 22, 23, 24, -1, 26, 27, -1,
1118 -1, -1, -1, -1, -1, -1, -1, 36, -1, -1,
1119 -1, 40, -1, -1, -1, 44, -1, -1, 47, 48,
1120 49, 50, -1, -1, -1, -1, -1, 56, -1, 58,
1121 59, -1, -1, -1, 63, 64, 65, 66, 67, -1,
1122 -1, -1, 11, 12, -1, 74, -1, 76, 77, 78,
1123 79, -1, -1, 22, 83, 24, 85, 26, -1, 11,
1124 12, 90, 91, 92, 93, 94, -1, 36, -1, -1,
1125 22, 40, 24, -1, 26, 44, -1, -1, 47, -1,
1126 -1, -1, -1, -1, 36, -1, -1, -1, 40, 58,
1127 -1, -1, 44, -1, 63, 47, 65, -1, 67, -1,
1128 -1, -1, -1, -1, -1, -1, 58, 76, 77, -1,
1129 -1, 63, -1, 65, -1, 67, -1, -1, -1, -1,
1130 -1, -1, 91, -1, 76, 77, -1, -1, -1, -1,
1131 -1, -1, -1, -1, -1, -1, -1, -1, -1, 91
1132};
1133
1134/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1135 symbol of state STATE-NUM. */
1136static const unsigned char yystos[] =
1137{
1138 0, 11, 12, 116, 117, 118, 209, 0, 118, 104,
1139 119, 120, 8, 9, 105, 121, 122, 211, 34, 105,
1140 122, 106, 12, 20, 41, 43, 52, 123, 124, 125,
1141 9, 57, 84, 84, 53, 84, 3, 125, 107, 21,
1142 23, 38, 42, 48, 49, 50, 54, 59, 64, 66,
1143 74, 83, 85, 90, 92, 93, 94, 126, 127, 128,
1144 130, 135, 138, 141, 167, 175, 209, 211, 12, 17,
1145 108, 136, 137, 209, 211, 46, 131, 132, 133, 134,
1146 209, 211, 39, 128, 3, 11, 12, 22, 24, 26,
1147 36, 40, 44, 47, 58, 63, 65, 67, 76, 77,
1148 91, 104, 139, 162, 172, 173, 210, 139, 129, 108,
1149 108, 109, 108, 132, 46, 109, 28, 103, 150, 207,
1150 208, 112, 81, 81, 71, 51, 81, 142, 143, 172,
1151 209, 3, 112, 3, 137, 209, 134, 104, 41, 52,
1152 11, 12, 18, 27, 56, 78, 79, 87, 160, 161,
1153 162, 172, 173, 174, 175, 209, 209, 211, 105, 109,
1154 110, 110, 104, 13, 14, 163, 164, 166, 5, 6,
1155 7, 9, 10, 104, 168, 170, 206, 209, 211, 119,
1156 152, 153, 165, 166, 35, 104, 68, 80, 104, 106,
1157 179, 180, 181, 104, 179, 179, 104, 203, 104, 3,
1158 143, 211, 211, 6, 45, 46, 61, 80, 86, 95,
1159 104, 106, 140, 182, 183, 184, 186, 187, 188, 193,
1160 194, 195, 206, 211, 112, 169, 112, 105, 109, 33,
1161 69, 160, 165, 199, 200, 25, 102, 148, 149, 159,
1162 211, 212, 162, 106, 30, 146, 147, 159, 212, 182,
1163 68, 106, 146, 68, 102, 105, 204, 205, 206, 211,
1164 144, 145, 160, 211, 160, 101, 113, 185, 30, 209,
1165 182, 105, 97, 98, 99, 100, 109, 176, 177, 96,
1166 178, 106, 185, 104, 164, 4, 171, 211, 95, 154,
1167 155, 153, 104, 172, 187, 201, 199, 199, 211, 111,
1168 105, 109, 208, 160, 182, 68, 105, 109, 160, 107,
1169 161, 182, 105, 161, 105, 109, 106, 105, 109, 113,
1170 101, 60, 187, 104, 105, 107, 102, 184, 184, 184,
1171 182, 60, 187, 114, 196, 197, 4, 82, 202, 88,
1172 151, 151, 170, 206, 149, 107, 160, 147, 199, 107,
1173 205, 170, 206, 145, 113, 102, 189, 190, 211, 109,
1174 107, 112, 198, 211, 105, 109, 104, 171, 107, 107,
1175 105, 109, 179, 183, 198, 112, 197, 156, 190, 15,
1176 69, 73, 191, 192, 211, 4, 157, 158, 165, 105,
1177 158
1178};
1179
1180#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1181# define YYSIZE_T __SIZE_TYPE__
1182#endif
1183#if ! defined (YYSIZE_T) && defined (size_t)
1184# define YYSIZE_T size_t
1185#endif
1186#if ! defined (YYSIZE_T)
1187# if defined (__STDC__) || defined (__cplusplus)
1188# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1189# define YYSIZE_T size_t
1190# endif
1191#endif
1192#if ! defined (YYSIZE_T)
1193# define YYSIZE_T unsigned int
1194#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001195
1196#define yyerrok (yyerrstatus = 0)
1197#define yyclearin (yychar = YYEMPTY)
1198#define YYEMPTY -2
1199#define YYEOF 0
Lev Walkin609ccbb2004-09-04 04:49:21 +00001200
Lev Walkinf15320b2004-06-03 03:38:44 +00001201#define YYACCEPT goto yyacceptlab
Lev Walkin609ccbb2004-09-04 04:49:21 +00001202#define YYABORT goto yyabortlab
Lev Walkinf15320b2004-06-03 03:38:44 +00001203#define YYERROR goto yyerrlab1
Lev Walkin609ccbb2004-09-04 04:49:21 +00001204
1205/* Like YYERROR except do call yyerror. This remains here temporarily
1206 to ease the transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +00001207 Once GCC version 2 has supplanted version 1, this can go. */
Lev Walkin609ccbb2004-09-04 04:49:21 +00001208
Lev Walkinf15320b2004-06-03 03:38:44 +00001209#define YYFAIL goto yyerrlab
Lev Walkin609ccbb2004-09-04 04:49:21 +00001210
Lev Walkinf15320b2004-06-03 03:38:44 +00001211#define YYRECOVERING() (!!yyerrstatus)
Lev Walkin609ccbb2004-09-04 04:49:21 +00001212
1213#define YYBACKUP(Token, Value) \
Lev Walkinf15320b2004-06-03 03:38:44 +00001214do \
1215 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin609ccbb2004-09-04 04:49:21 +00001216 { \
1217 yychar = (Token); \
1218 yylval = (Value); \
Lev Walkinf15320b2004-06-03 03:38:44 +00001219 yychar1 = YYTRANSLATE (yychar); \
1220 YYPOPSTACK; \
1221 goto yybackup; \
1222 } \
1223 else \
Lev Walkin609ccbb2004-09-04 04:49:21 +00001224 { \
1225 yyerror ("syntax error: cannot back up"); \
1226 YYERROR; \
1227 } \
Lev Walkinf15320b2004-06-03 03:38:44 +00001228while (0)
1229
1230#define YYTERROR 1
1231#define YYERRCODE 256
1232
Lev Walkin609ccbb2004-09-04 04:49:21 +00001233/* YYLLOC_DEFAULT -- Compute the default location (before the actions
1234 are run). */
1235
1236#ifndef YYLLOC_DEFAULT
1237# define YYLLOC_DEFAULT(Current, Rhs, N) \
1238 Current.first_line = Rhs[1].first_line; \
1239 Current.first_column = Rhs[1].first_column; \
1240 Current.last_line = Rhs[N].last_line; \
1241 Current.last_column = Rhs[N].last_column;
Lev Walkinf15320b2004-06-03 03:38:44 +00001242#endif
1243
Lev Walkin609ccbb2004-09-04 04:49:21 +00001244/* YYLEX -- calling `yylex' with the right arguments. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001245
Lev Walkin609ccbb2004-09-04 04:49:21 +00001246#define YYLEX yylex ()
Lev Walkinf15320b2004-06-03 03:38:44 +00001247
Lev Walkin609ccbb2004-09-04 04:49:21 +00001248/* Enable debugging if requested. */
1249#if YYDEBUG
Lev Walkinf15320b2004-06-03 03:38:44 +00001250
Lev Walkin609ccbb2004-09-04 04:49:21 +00001251# ifndef YYFPRINTF
1252# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1253# define YYFPRINTF fprintf
1254# endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001255
Lev Walkin609ccbb2004-09-04 04:49:21 +00001256# define YYDPRINTF(Args) \
1257do { \
1258 if (yydebug) \
1259 YYFPRINTF Args; \
1260} while (0)
1261# define YYDSYMPRINT(Args) \
1262do { \
1263 if (yydebug) \
1264 yysymprint Args; \
1265} while (0)
1266/* Nonzero means print parse trace. It is left uninitialized so that
1267 multiple parsers can coexist. */
1268int yydebug;
1269#else /* !YYDEBUG */
1270# define YYDPRINTF(Args)
1271# define YYDSYMPRINT(Args)
1272#endif /* !YYDEBUG */
Lev Walkinf15320b2004-06-03 03:38:44 +00001273
Lev Walkin609ccbb2004-09-04 04:49:21 +00001274/* YYINITDEPTH -- initial size of the parser's stacks. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001275#ifndef YYINITDEPTH
Lev Walkin609ccbb2004-09-04 04:49:21 +00001276# define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +00001277#endif
1278
Lev Walkin609ccbb2004-09-04 04:49:21 +00001279/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1280 if the built-in stack extension method is used).
1281
1282 Do not make this value too large; the results are undefined if
1283 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
1284 evaluated with infinite-precision integer arithmetic. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001285
1286#if YYMAXDEPTH == 0
Lev Walkin609ccbb2004-09-04 04:49:21 +00001287# undef YYMAXDEPTH
Lev Walkinf15320b2004-06-03 03:38:44 +00001288#endif
1289
1290#ifndef YYMAXDEPTH
Lev Walkin609ccbb2004-09-04 04:49:21 +00001291# define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +00001292#endif
Lev Walkin609ccbb2004-09-04 04:49:21 +00001293
Lev Walkinf15320b2004-06-03 03:38:44 +00001294
Lev Walkinf15320b2004-06-03 03:38:44 +00001295
Lev Walkin609ccbb2004-09-04 04:49:21 +00001296#if YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00001297
Lev Walkin609ccbb2004-09-04 04:49:21 +00001298# ifndef yystrlen
1299# if defined (__GLIBC__) && defined (_STRING_H)
1300# define yystrlen strlen
1301# else
1302/* Return the length of YYSTR. */
1303static YYSIZE_T
1304# if defined (__STDC__) || defined (__cplusplus)
1305yystrlen (const char *yystr)
1306# else
1307yystrlen (yystr)
1308 const char *yystr;
1309# endif
Lev Walkinc3b72e92004-06-03 05:07:41 +00001310{
Lev Walkin609ccbb2004-09-04 04:49:21 +00001311 register const char *yys = yystr;
Lev Walkinc3b72e92004-06-03 05:07:41 +00001312
Lev Walkin609ccbb2004-09-04 04:49:21 +00001313 while (*yys++ != '\0')
1314 continue;
1315
1316 return yys - yystr - 1;
1317}
1318# endif
1319# endif
1320
1321# ifndef yystpcpy
1322# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1323# define yystpcpy stpcpy
1324# else
1325/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1326 YYDEST. */
1327static char *
1328# if defined (__STDC__) || defined (__cplusplus)
1329yystpcpy (char *yydest, const char *yysrc)
1330# else
1331yystpcpy (yydest, yysrc)
1332 char *yydest;
1333 const char *yysrc;
1334# endif
1335{
1336 register char *yyd = yydest;
1337 register const char *yys = yysrc;
1338
1339 while ((*yyd++ = *yys++) != '\0')
1340 continue;
1341
1342 return yyd - 1;
1343}
1344# endif
1345# endif
1346
1347#endif /* !YYERROR_VERBOSE */
1348
1349
1350
1351#if YYDEBUG
1352/*-----------------------------.
1353| Print this symbol on YYOUT. |
1354`-----------------------------*/
1355
1356static void
1357#if defined (__STDC__) || defined (__cplusplus)
1358yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue)
1359#else
1360yysymprint (yyout, yytype, yyvalue)
1361 FILE* yyout;
1362 int yytype;
1363 YYSTYPE yyvalue;
1364#endif
1365{
1366 /* Pacify ``unused variable'' warnings. */
1367 (void) yyvalue;
1368
1369 if (yytype < YYNTOKENS)
1370 {
1371 YYFPRINTF (yyout, "token %s (", yytname[yytype]);
1372# ifdef YYPRINT
1373 YYPRINT (yyout, yytoknum[yytype], yyvalue);
1374# endif
1375 }
1376 else
1377 YYFPRINTF (yyout, "nterm %s (", yytname[yytype]);
1378
1379 switch (yytype)
1380 {
1381 default:
1382 break;
1383 }
1384 YYFPRINTF (yyout, ")");
1385}
1386#endif /* YYDEBUG. */
1387
1388
1389/*-----------------------------------------------.
1390| Release the memory associated to this symbol. |
1391`-----------------------------------------------*/
1392
1393static void
1394#if defined (__STDC__) || defined (__cplusplus)
1395yydestruct (int yytype, YYSTYPE yyvalue)
1396#else
1397yydestruct (yytype, yyvalue)
1398 int yytype;
1399 YYSTYPE yyvalue;
1400#endif
1401{
1402 /* Pacify ``unused variable'' warnings. */
1403 (void) yyvalue;
1404
1405 switch (yytype)
1406 {
1407 default:
1408 break;
1409 }
Lev Walkinc3b72e92004-06-03 05:07:41 +00001410}
Lev Walkinc3b72e92004-06-03 05:07:41 +00001411
Lev Walkinf15320b2004-06-03 03:38:44 +00001412
Lev Walkinf15320b2004-06-03 03:38:44 +00001413
1414/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1415 into yyparse. The argument should have type void *.
1416 It should actually point to an object.
1417 Grammar actions can access the variable by casting it
1418 to the proper pointer type. */
1419
1420#ifdef YYPARSE_PARAM
Lev Walkin609ccbb2004-09-04 04:49:21 +00001421# if defined (__STDC__) || defined (__cplusplus)
1422# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1423# define YYPARSE_PARAM_DECL
1424# else
1425# define YYPARSE_PARAM_ARG YYPARSE_PARAM
1426# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1427# endif
1428#else /* !YYPARSE_PARAM */
1429# define YYPARSE_PARAM_ARG
1430# define YYPARSE_PARAM_DECL
1431#endif /* !YYPARSE_PARAM */
Lev Walkinf15320b2004-06-03 03:38:44 +00001432
1433/* Prevent warning if -Wstrict-prototypes. */
1434#ifdef __GNUC__
Lev Walkin609ccbb2004-09-04 04:49:21 +00001435# ifdef YYPARSE_PARAM
Lev Walkinf15320b2004-06-03 03:38:44 +00001436int yyparse (void *);
Lev Walkin609ccbb2004-09-04 04:49:21 +00001437# else
Lev Walkinf15320b2004-06-03 03:38:44 +00001438int yyparse (void);
Lev Walkin609ccbb2004-09-04 04:49:21 +00001439# endif
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001440#endif
Lev Walkin609ccbb2004-09-04 04:49:21 +00001441
1442
1443/* The lookahead symbol. */
1444int yychar;
1445
1446/* The semantic value of the lookahead symbol. */
1447YYSTYPE yylval;
1448
1449/* Number of parse errors so far. */
1450int yynerrs;
1451
Lev Walkinc3b72e92004-06-03 05:07:41 +00001452
Lev Walkinf15320b2004-06-03 03:38:44 +00001453int
Lev Walkin609ccbb2004-09-04 04:49:21 +00001454yyparse (YYPARSE_PARAM_ARG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001455 YYPARSE_PARAM_DECL
1456{
Lev Walkin609ccbb2004-09-04 04:49:21 +00001457
Lev Walkinf15320b2004-06-03 03:38:44 +00001458 register int yystate;
1459 register int yyn;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001460 int yyresult;
1461 /* Number of tokens to shift before error messages enabled. */
1462 int yyerrstatus;
1463 /* Lookahead token as an internal (translated) token number. */
1464 int yychar1 = 0;
1465
1466 /* Three stacks and their tools:
1467 `yyss': related to states,
1468 `yyvs': related to semantic values,
1469 `yyls': related to locations.
1470
1471 Refer to the stacks thru separate pointers, to allow yyoverflow
1472 to reallocate them elsewhere. */
1473
1474 /* The state stack. */
1475 short yyssa[YYINITDEPTH];
1476 short *yyss = yyssa;
Lev Walkinf15320b2004-06-03 03:38:44 +00001477 register short *yyssp;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001478
1479 /* The semantic value stack. */
1480 YYSTYPE yyvsa[YYINITDEPTH];
1481 YYSTYPE *yyvs = yyvsa;
Lev Walkinf15320b2004-06-03 03:38:44 +00001482 register YYSTYPE *yyvsp;
Lev Walkinf15320b2004-06-03 03:38:44 +00001483
Lev Walkinf15320b2004-06-03 03:38:44 +00001484
Lev Walkinf15320b2004-06-03 03:38:44 +00001485
Lev Walkinf15320b2004-06-03 03:38:44 +00001486#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkinf15320b2004-06-03 03:38:44 +00001487
Lev Walkin609ccbb2004-09-04 04:49:21 +00001488 YYSIZE_T yystacksize = YYINITDEPTH;
Lev Walkinf15320b2004-06-03 03:38:44 +00001489
Lev Walkin609ccbb2004-09-04 04:49:21 +00001490 /* The variables used to return semantic value and location from the
1491 action routines. */
1492 YYSTYPE yyval;
Lev Walkinf15320b2004-06-03 03:38:44 +00001493
Lev Walkinf15320b2004-06-03 03:38:44 +00001494
Lev Walkin609ccbb2004-09-04 04:49:21 +00001495 /* When reducing, the number of symbols on the RHS of the reduced
1496 rule. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001497 int yylen;
1498
Lev Walkin609ccbb2004-09-04 04:49:21 +00001499 YYDPRINTF ((stderr, "Starting parse\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001500
1501 yystate = 0;
1502 yyerrstatus = 0;
1503 yynerrs = 0;
1504 yychar = YYEMPTY; /* Cause a token to be read. */
1505
1506 /* Initialize stack pointers.
1507 Waste one element of value and location stack
1508 so that they stay on the same level as the state stack.
1509 The wasted elements are never initialized. */
1510
Lev Walkin609ccbb2004-09-04 04:49:21 +00001511 yyssp = yyss;
Lev Walkinf15320b2004-06-03 03:38:44 +00001512 yyvsp = yyvs;
Lev Walkinf15320b2004-06-03 03:38:44 +00001513
Lev Walkin609ccbb2004-09-04 04:49:21 +00001514 goto yysetstate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001515
Lev Walkin609ccbb2004-09-04 04:49:21 +00001516/*------------------------------------------------------------.
1517| yynewstate -- Push a new state, which is found in yystate. |
1518`------------------------------------------------------------*/
1519 yynewstate:
1520 /* In all cases, when you get here, the value and location stacks
1521 have just been pushed. so pushing a state here evens the stacks.
1522 */
1523 yyssp++;
1524
1525 yysetstate:
1526 *yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001527
1528 if (yyssp >= yyss + yystacksize - 1)
1529 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001530 /* Get the current used size of the three stacks, in elements. */
Lev Walkin609ccbb2004-09-04 04:49:21 +00001531 YYSIZE_T yysize = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001532
1533#ifdef yyoverflow
Lev Walkin609ccbb2004-09-04 04:49:21 +00001534 {
1535 /* Give user a chance to reallocate the stack. Use copies of
1536 these so that the &'s don't force the real ones into
1537 memory. */
1538 YYSTYPE *yyvs1 = yyvs;
1539 short *yyss1 = yyss;
Lev Walkinf15320b2004-06-03 03:38:44 +00001540
Lev Walkin609ccbb2004-09-04 04:49:21 +00001541
1542 /* Each stack pointer address is followed by the size of the
1543 data in use in that stack, in bytes. This used to be a
1544 conditional around just the two extra args, but that might
1545 be undefined if yyoverflow is a macro. */
1546 yyoverflow ("parser stack overflow",
1547 &yyss1, yysize * sizeof (*yyssp),
1548 &yyvs1, yysize * sizeof (*yyvsp),
1549
1550 &yystacksize);
1551
1552 yyss = yyss1;
1553 yyvs = yyvs1;
1554 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001555#else /* no yyoverflow */
Lev Walkin609ccbb2004-09-04 04:49:21 +00001556# ifndef YYSTACK_RELOCATE
1557 goto yyoverflowlab;
1558# else
Lev Walkinf15320b2004-06-03 03:38:44 +00001559 /* Extend the stack our own way. */
1560 if (yystacksize >= YYMAXDEPTH)
Lev Walkin609ccbb2004-09-04 04:49:21 +00001561 goto yyoverflowlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001562 yystacksize *= 2;
1563 if (yystacksize > YYMAXDEPTH)
1564 yystacksize = YYMAXDEPTH;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001565
1566 {
1567 short *yyss1 = yyss;
1568 union yyalloc *yyptr =
1569 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1570 if (! yyptr)
1571 goto yyoverflowlab;
1572 YYSTACK_RELOCATE (yyss);
1573 YYSTACK_RELOCATE (yyvs);
1574
1575# undef YYSTACK_RELOCATE
1576 if (yyss1 != yyssa)
1577 YYSTACK_FREE (yyss1);
1578 }
1579# endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001580#endif /* no yyoverflow */
1581
Lev Walkin609ccbb2004-09-04 04:49:21 +00001582 yyssp = yyss + yysize - 1;
1583 yyvsp = yyvs + yysize - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001584
Lev Walkin609ccbb2004-09-04 04:49:21 +00001585
1586 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1587 (unsigned long int) yystacksize));
Lev Walkinf15320b2004-06-03 03:38:44 +00001588
1589 if (yyssp >= yyss + yystacksize - 1)
1590 YYABORT;
1591 }
1592
Lev Walkin609ccbb2004-09-04 04:49:21 +00001593 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Lev Walkinf15320b2004-06-03 03:38:44 +00001594
1595 goto yybackup;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001596
1597/*-----------.
1598| yybackup. |
1599`-----------*/
1600yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001601
1602/* Do appropriate processing given the current state. */
1603/* Read a lookahead token if we need one and don't already have one. */
1604/* yyresume: */
1605
1606 /* First try to decide what to do without reference to lookahead token. */
1607
1608 yyn = yypact[yystate];
Lev Walkin609ccbb2004-09-04 04:49:21 +00001609 if (yyn == YYPACT_NINF)
Lev Walkinf15320b2004-06-03 03:38:44 +00001610 goto yydefault;
1611
1612 /* Not known => get a lookahead token if don't already have one. */
1613
1614 /* yychar is either YYEMPTY or YYEOF
1615 or a valid token in external form. */
1616
1617 if (yychar == YYEMPTY)
1618 {
Lev Walkin609ccbb2004-09-04 04:49:21 +00001619 YYDPRINTF ((stderr, "Reading a token: "));
Lev Walkinf15320b2004-06-03 03:38:44 +00001620 yychar = YYLEX;
1621 }
1622
Lev Walkin609ccbb2004-09-04 04:49:21 +00001623 /* Convert token to internal form (in yychar1) for indexing tables with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001624
Lev Walkin609ccbb2004-09-04 04:49:21 +00001625 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001626 {
1627 yychar1 = 0;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001628 yychar = YYEOF; /* Don't call YYLEX any more. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001629
Lev Walkin609ccbb2004-09-04 04:49:21 +00001630 YYDPRINTF ((stderr, "Now at end of input.\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001631 }
1632 else
1633 {
Lev Walkin609ccbb2004-09-04 04:49:21 +00001634 yychar1 = YYTRANSLATE (yychar);
Lev Walkinf15320b2004-06-03 03:38:44 +00001635
Lev Walkin609ccbb2004-09-04 04:49:21 +00001636 /* We have to keep this `#if YYDEBUG', since we use variables
1637 which are defined only if `YYDEBUG' is set. */
1638 YYDPRINTF ((stderr, "Next token is "));
1639 YYDSYMPRINT ((stderr, yychar1, yylval));
1640 YYDPRINTF ((stderr, "\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001641 }
1642
Lev Walkin609ccbb2004-09-04 04:49:21 +00001643 /* If the proper action on seeing token YYCHAR1 is to reduce or to
1644 detect an error, take that action. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001645 yyn += yychar1;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001646 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001647 goto yydefault;
Lev Walkinf15320b2004-06-03 03:38:44 +00001648 yyn = yytable[yyn];
Lev Walkin609ccbb2004-09-04 04:49:21 +00001649 if (yyn <= 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001650 {
Lev Walkin609ccbb2004-09-04 04:49:21 +00001651 if (yyn == 0 || yyn == YYTABLE_NINF)
Lev Walkinf15320b2004-06-03 03:38:44 +00001652 goto yyerrlab;
1653 yyn = -yyn;
1654 goto yyreduce;
1655 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001656
1657 if (yyn == YYFINAL)
1658 YYACCEPT;
1659
1660 /* Shift the lookahead token. */
Lev Walkin609ccbb2004-09-04 04:49:21 +00001661 YYDPRINTF ((stderr, "Shifting token %d (%s), ",
1662 yychar, yytname[yychar1]));
Lev Walkinf15320b2004-06-03 03:38:44 +00001663
1664 /* Discard the token being shifted unless it is eof. */
1665 if (yychar != YYEOF)
1666 yychar = YYEMPTY;
1667
1668 *++yyvsp = yylval;
Lev Walkinf15320b2004-06-03 03:38:44 +00001669
Lev Walkin609ccbb2004-09-04 04:49:21 +00001670
1671 /* Count tokens shifted since error; after three, turn off error
1672 status. */
1673 if (yyerrstatus)
1674 yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001675
1676 yystate = yyn;
1677 goto yynewstate;
1678
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001679
Lev Walkin609ccbb2004-09-04 04:49:21 +00001680/*-----------------------------------------------------------.
1681| yydefault -- do the default action for the current state. |
1682`-----------------------------------------------------------*/
1683yydefault:
Lev Walkinf15320b2004-06-03 03:38:44 +00001684 yyn = yydefact[yystate];
1685 if (yyn == 0)
1686 goto yyerrlab;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001687 goto yyreduce;
Lev Walkinf15320b2004-06-03 03:38:44 +00001688
Lev Walkin609ccbb2004-09-04 04:49:21 +00001689
1690/*-----------------------------.
1691| yyreduce -- Do a reduction. |
1692`-----------------------------*/
Lev Walkinf15320b2004-06-03 03:38:44 +00001693yyreduce:
Lev Walkin609ccbb2004-09-04 04:49:21 +00001694 /* yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001695 yylen = yyr2[yyn];
Lev Walkinf15320b2004-06-03 03:38:44 +00001696
Lev Walkin609ccbb2004-09-04 04:49:21 +00001697 /* If YYLEN is nonzero, implement the default value of the action:
1698 `$$ = $1'.
1699
1700 Otherwise, the following line sets YYVAL to garbage.
1701 This behavior is undocumented and Bison
1702 users should not rely upon it. Assigning to YYVAL
1703 unconditionally makes the parser a bit smaller, and it avoids a
1704 GCC warning that YYVAL may be used uninitialized. */
1705 yyval = yyvsp[1-yylen];
1706
1707
1708
1709#if YYDEBUG
1710 /* We have to keep this `#if YYDEBUG', since we use variables which
1711 are defined only if `YYDEBUG' is set. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001712 if (yydebug)
1713 {
Lev Walkin609ccbb2004-09-04 04:49:21 +00001714 int yyi;
Lev Walkinf15320b2004-06-03 03:38:44 +00001715
Lev Walkin609ccbb2004-09-04 04:49:21 +00001716 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
1717 yyn - 1, yyrline[yyn]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001718
1719 /* Print the symbols being reduced, and their result. */
Lev Walkin609ccbb2004-09-04 04:49:21 +00001720 for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
1721 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
1722 YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001723 }
1724#endif
Lev Walkin609ccbb2004-09-04 04:49:21 +00001725 switch (yyn)
1726 {
1727 case 2:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001728#line 299 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001729 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001730 *(void **)param = yyvsp[0].a_grammar;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001731 }
1732 break;
1733
1734 case 3:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001735#line 305 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001736 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001737 yyval.a_grammar = asn1p_new();
1738 checkmem(yyval.a_grammar);
1739 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00001740 }
1741 break;
1742
1743 case 4:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001744#line 310 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001745 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001746 yyval.a_grammar = yyvsp[-1].a_grammar;
1747 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00001748 }
1749 break;
1750
1751 case 5:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001752#line 331 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001753 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001754
1755 if(yyvsp[-1].a_module) {
1756 yyval.a_module = yyvsp[-1].a_module;
1757 } else {
1758 /* There's a chance that a module is just plain empty */
1759 yyval.a_module = asn1p_module_new();
1760 }
1761 checkmem(yyval.a_module);
1762
1763 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1764 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1765 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001766 }
1767 break;
1768
1769 case 6:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001770#line 352 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001771 { yyval.a_oid = 0; }
1772 break;
1773
1774 case 7:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001775#line 353 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001776 { yyval.a_oid = yyvsp[0].a_oid; }
1777 break;
1778
1779 case 8:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001780#line 357 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001781 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001782 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001783 }
1784 break;
1785
1786 case 9:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001787#line 360 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001788 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001789 yyval.a_oid = 0;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001790 }
1791 break;
1792
1793 case 10:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001794#line 366 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001795 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001796 yyval.a_oid = asn1p_oid_new();
1797 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1798 if(yyvsp[0].a_oid_arc.name)
1799 free(yyvsp[0].a_oid_arc.name);
Lev Walkin609ccbb2004-09-04 04:49:21 +00001800 }
1801 break;
1802
1803 case 11:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001804#line 372 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001805 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001806 yyval.a_oid = yyvsp[-1].a_oid;
1807 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1808 if(yyvsp[0].a_oid_arc.name)
1809 free(yyvsp[0].a_oid_arc.name);
Lev Walkin609ccbb2004-09-04 04:49:21 +00001810 }
1811 break;
1812
1813 case 12:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001814#line 381 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001815 { /* iso */
Lev Walkinf15320b2004-06-03 03:38:44 +00001816 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1817 yyval.a_oid_arc.number = -1;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001818 }
1819 break;
1820
1821 case 13:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001822#line 385 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001823 { /* iso(1) */
Lev Walkinf15320b2004-06-03 03:38:44 +00001824 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1825 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001826 }
1827 break;
1828
1829 case 14:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001830#line 389 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001831 { /* 1 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001832 yyval.a_oid_arc.name = 0;
1833 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001834 }
1835 break;
1836
1837 case 15:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001838#line 399 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001839 { yyval.a_module_flags = MSF_NOFLAGS; }
1840 break;
1841
1842 case 16:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001843#line 400 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001844 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001845 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001846 }
1847 break;
1848
1849 case 17:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001850#line 409 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001851 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001852 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001853 }
1854 break;
1855
1856 case 18:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001857#line 412 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001858 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001859 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001860 }
1861 break;
1862
1863 case 19:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001864#line 421 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001865 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001866 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001867 }
1868 break;
1869
1870 case 20:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001871#line 424 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001872 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001873 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001874 }
1875 break;
1876
1877 case 21:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001878#line 427 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001879 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001880 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001881 }
1882 break;
1883
1884 case 22:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001885#line 430 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001886 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001887 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001888 }
1889 break;
1890
1891 case 23:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001892#line 434 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001893 {
Lev Walkinf59d0752004-08-18 04:59:12 +00001894 /* X.680Amd1 specifies TAG and XER */
1895 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1896 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1897 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1898 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1899 } else {
1900 fprintf(stderr,
1901 "WARNING: %s INSTRUCTIONS at line %d: "
1902 "Unrecognized encoding reference\n",
1903 yyvsp[-1].tv_str, yylineno);
1904 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1905 }
1906 free(yyvsp[-1].tv_str);
Lev Walkin609ccbb2004-09-04 04:49:21 +00001907 }
1908 break;
1909
1910 case 24:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001911#line 455 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001912 { yyval.a_module = 0; }
1913 break;
1914
1915 case 25:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001916#line 456 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001917 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001918 yyval.a_module = yyvsp[0].a_module;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001919 }
1920 break;
1921
1922 case 26:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001923#line 465 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001924 {
Lev Walkinf59d0752004-08-18 04:59:12 +00001925 yyval.a_module = yyvsp[0].a_module;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001926 }
1927 break;
1928
1929 case 27:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001930#line 468 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001931 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001932 yyval.a_module = yyvsp[-1].a_module;
1933
Lev Walkinf59d0752004-08-18 04:59:12 +00001934 /* Behave well when one of them is skipped. */
1935 if(!(yyvsp[-1].a_module)) {
1936 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1937 break;
1938 }
1939
Lev Walkinf15320b2004-06-03 03:38:44 +00001940#ifdef MY_IMPORT
1941#error MY_IMPORT DEFINED ELSEWHERE!
1942#endif
1943#define MY_IMPORT(foo,field) do { \
Lev Walkinbc55d232004-08-13 12:31:09 +00001944 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
Lev Walkinf15320b2004-06-03 03:38:44 +00001945 TQ_ADD(&(yyval.a_module->foo), \
1946 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1947 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001948 } \
1949 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1950 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001951
1952 MY_IMPORT(imports, xp_next);
1953 MY_IMPORT(exports, xp_next);
1954 MY_IMPORT(members, next);
1955#undef MY_IMPORT
1956
Lev Walkin609ccbb2004-09-04 04:49:21 +00001957 }
1958 break;
1959
1960 case 28:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001961#line 501 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001962 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001963 yyval.a_module = yyvsp[0].a_module;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001964 }
1965 break;
1966
1967 case 29:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001968#line 504 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001969 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001970 yyval.a_module = asn1p_module_new();
1971 checkmem(yyval.a_module);
1972 if(yyvsp[0].a_xports) {
1973 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1974 } else {
1975 /* "EXPORTS ALL;" ? */
1976 }
Lev Walkin609ccbb2004-09-04 04:49:21 +00001977 }
1978 break;
1979
1980 case 30:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001981#line 513 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001982 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001983 yyval.a_module = asn1p_module_new();
1984 checkmem(yyval.a_module);
1985 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1986 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1987 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00001988 }
1989 break;
1990
1991 case 31:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001992#line 520 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00001993 {
Lev Walkinf59d0752004-08-18 04:59:12 +00001994 yyval.a_module = asn1p_module_new();
1995 checkmem(yyval.a_module);
1996 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1997 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1998 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00001999 }
2000 break;
2001
2002 case 32:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002003#line 533 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002004 {
Lev Walkinf59d0752004-08-18 04:59:12 +00002005 yyval.a_module = asn1p_module_new();
2006 checkmem(yyval.a_module);
2007 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2008 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2009 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002010 }
2011 break;
2012
2013 case 33:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002014#line 541 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002015 { asn1p_lexer_hack_push_encoding_control(); }
2016 break;
2017
2018 case 34:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002019#line 542 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002020 {
Lev Walkinf59d0752004-08-18 04:59:12 +00002021 fprintf(stderr,
2022 "WARNING: ENCODING-CONTROL %s "
2023 "specification at line %d ignored\n",
2024 yyvsp[-1].tv_str, yylineno);
2025 free(yyvsp[-1].tv_str);
2026 yyval.a_module = 0;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002027 }
2028 break;
2029
2030 case 35:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002031#line 554 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002032 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002033 return yyerror(
2034 "Attempt to redefine a standard basic type, "
2035 "use -ftypesXY to switch back "
2036 "to older version of ASN.1 standard");
Lev Walkin609ccbb2004-09-04 04:49:21 +00002037 }
2038 break;
2039
2040 case 36:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002041#line 568 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002042 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002043 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002044 }
2045 break;
2046
2047 case 37:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002048#line 574 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002049 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002050 return yyerror("Empty IMPORTS list");
Lev Walkin609ccbb2004-09-04 04:49:21 +00002051 }
2052 break;
2053
2054 case 38:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002055#line 580 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002056 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002057 yyval.a_module = asn1p_module_new();
2058 checkmem(yyval.a_module);
2059 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002060 }
2061 break;
2062
2063 case 39:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002064#line 585 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002065 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002066 yyval.a_module = yyvsp[-1].a_module;
2067 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002068 }
2069 break;
2070
2071 case 40:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002072#line 592 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002073 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002074 yyval.a_xports = yyvsp[-3].a_xports;
2075 yyval.a_xports->from = yyvsp[-1].tv_str;
2076 yyval.a_xports->from_oid = yyvsp[0].a_oid;
2077 checkmem(yyval.a_xports);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002078 }
2079 break;
2080
2081 case 41:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002082#line 601 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002083 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002084 yyval.a_xports = asn1p_xports_new();
2085 checkmem(yyval.a_xports);
2086 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002087 }
2088 break;
2089
2090 case 42:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002091#line 606 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002092 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002093 yyval.a_xports = yyvsp[-2].a_xports;
2094 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002095 }
2096 break;
2097
2098 case 43:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002099#line 613 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002100 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002101 yyval.a_expr = asn1p_expr_new(yylineno);
2102 checkmem(yyval.a_expr);
2103 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2104 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002105 }
2106 break;
2107
2108 case 44:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002109#line 619 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002110 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002111 yyval.a_expr = asn1p_expr_new(yylineno);
2112 checkmem(yyval.a_expr);
2113 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2114 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002115 }
2116 break;
2117
2118 case 45:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002119#line 628 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002120 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002121 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002122 }
2123 break;
2124
2125 case 46:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002126#line 631 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002127 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002128 yyval.a_xports = 0;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002129 }
2130 break;
2131
2132 case 47:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002133#line 634 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002134 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002135 /* Empty EXPORTS clause effectively prohibits export. */
2136 yyval.a_xports = asn1p_xports_new();
2137 checkmem(yyval.a_xports);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002138 }
2139 break;
2140
2141 case 48:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002142#line 642 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002143 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002144 yyval.a_xports = asn1p_xports_new();
2145 assert(yyval.a_xports);
2146 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002147 }
2148 break;
2149
2150 case 49:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002151#line 647 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002152 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002153 yyval.a_xports = yyvsp[-2].a_xports;
2154 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002155 }
2156 break;
2157
2158 case 50:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002159#line 654 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002160 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002161 yyval.a_expr = asn1p_expr_new(yylineno);
2162 checkmem(yyval.a_expr);
2163 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2164 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002165 }
2166 break;
2167
2168 case 51:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002169#line 660 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002170 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002171 yyval.a_expr = asn1p_expr_new(yylineno);
2172 checkmem(yyval.a_expr);
2173 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2174 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002175 }
2176 break;
2177
2178 case 52:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002179#line 670 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002180 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002181 yyval.a_expr = yyvsp[-4].a_expr;
2182 assert(yyval.a_expr->Identifier == 0);
2183 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2184 yyval.a_expr->meta_type = AMT_VALUESET;
2185 // take care of optValueSetBody
Lev Walkin609ccbb2004-09-04 04:49:21 +00002186 }
2187 break;
2188
2189 case 53:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002190#line 680 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002191 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002192 yyval.a_expr = asn1p_expr_new(yylineno);
2193 checkmem(yyval.a_expr);
2194 yyval.a_expr->reference = yyvsp[0].a_ref;
2195 yyval.a_expr->expr_type = A1TC_REFERENCE;
2196 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002197 }
2198 break;
2199
2200 case 54:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002201#line 687 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002202 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002203 yyval.a_expr = asn1p_expr_new(yylineno);
2204 checkmem(yyval.a_expr);
2205 yyval.a_expr->expr_type = yyvsp[0].a_type;
2206 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002207 }
2208 break;
2209
2210 case 55:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002211#line 696 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002212 { }
2213 break;
2214
2215 case 56:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002216#line 697 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002217 {
2218 }
2219 break;
2220
2221 case 57:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002222#line 713 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002223 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002224 yyval.a_expr = asn1p_expr_new(yylineno);
2225 checkmem(yyval.a_expr);
2226 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2227 yyval.a_expr->tag = yyvsp[-1].a_tag;
2228 yyval.a_expr->expr_type = A1TC_TYPEID;
2229 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002230 }
2231 break;
2232
2233 case 58:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002234#line 721 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002235 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002236 yyval.a_expr = yyvsp[0].a_expr;
2237 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2238 yyval.a_expr->tag = yyvsp[-1].a_tag;
2239 assert(yyval.a_expr->expr_type);
2240 assert(yyval.a_expr->meta_type);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002241 }
2242 break;
2243
2244 case 59:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002245#line 728 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002246 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002247 yyval.a_expr = yyvsp[0].a_expr;
2248 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2249 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2250 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002251 }
2252 break;
2253
2254 case 60:
Lev Walkin070a52d2004-08-22 03:19:54 +00002255#line 744 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002256 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002257 yyval.a_expr = yyvsp[0].a_expr;
2258 assert(yyval.a_expr->Identifier == 0);
2259 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2260 yyval.a_expr->params = yyvsp[-3].a_plist;
2261 yyval.a_expr->meta_type = AMT_PARAMTYPE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002262 }
2263 break;
2264
2265 case 61:
Lev Walkin070a52d2004-08-22 03:19:54 +00002266#line 754 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002267 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002268 int ret;
2269 yyval.a_plist = asn1p_paramlist_new(yylineno);
2270 checkmem(yyval.a_plist);
2271 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
2272 checkmem(ret == 0);
2273 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2274 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002275 }
2276 break;
2277
2278 case 62:
Lev Walkin070a52d2004-08-22 03:19:54 +00002279#line 763 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002280 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002281 int ret;
2282 yyval.a_plist = yyvsp[-2].a_plist;
2283 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
2284 checkmem(ret == 0);
2285 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2286 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002287 }
2288 break;
2289
2290 case 63:
Lev Walkin070a52d2004-08-22 03:19:54 +00002291#line 774 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002292 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002293 yyval.a_parg.governor = NULL;
2294 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002295 }
2296 break;
2297
2298 case 64:
Lev Walkin070a52d2004-08-22 03:19:54 +00002299#line 778 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002300 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002301 int ret;
2302 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2303 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
2304 checkmem(ret == 0);
2305 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002306 }
2307 break;
2308
2309 case 65:
Lev Walkin070a52d2004-08-22 03:19:54 +00002310#line 785 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002311 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002312 int ret;
2313 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2314 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2315 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2316 checkmem(ret == 0);
2317 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002318 }
2319 break;
2320
2321 case 66:
Lev Walkin070a52d2004-08-22 03:19:54 +00002322#line 796 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002323 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002324 yyval.a_expr = asn1p_expr_new(yylineno);
2325 checkmem(yyval.a_expr);
2326 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002327 }
2328 break;
2329
2330 case 67:
Lev Walkin070a52d2004-08-22 03:19:54 +00002331#line 801 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002332 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002333 yyval.a_expr = yyvsp[-2].a_expr;
2334 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002335 }
2336 break;
2337
2338 case 68:
Lev Walkin070a52d2004-08-22 03:19:54 +00002339#line 808 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002340 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002341 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002342 }
2343 break;
2344
2345 case 69:
Lev Walkin070a52d2004-08-22 03:19:54 +00002346#line 811 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002347 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002348 yyval.a_expr = asn1p_expr_new(yylineno);
2349 checkmem(yyval.a_expr);
2350 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2351 yyval.a_expr->expr_type = A1TC_REFERENCE;
2352 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002353 }
2354 break;
2355
2356 case 70:
Lev Walkin070a52d2004-08-22 03:19:54 +00002357#line 824 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002358 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002359 yyval.a_expr = asn1p_expr_new(yylineno);
2360 checkmem(yyval.a_expr);
2361 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002362 }
2363 break;
2364
2365 case 71:
Lev Walkin070a52d2004-08-22 03:19:54 +00002366#line 829 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002367 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002368 yyval.a_expr = yyvsp[-2].a_expr;
2369 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002370 }
2371 break;
2372
2373 case 72:
Lev Walkin070a52d2004-08-22 03:19:54 +00002374#line 836 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002375 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002376 yyval.a_expr = yyvsp[-1].a_expr;
2377 assert(yyval.a_expr->Identifier == 0);
2378 yyval.a_expr->Identifier = yyvsp[-2].tv_nametag.name;
2379 yyval.a_expr->tag = yyvsp[-2].tv_nametag.tag;
2380 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002381 }
2382 break;
2383
2384 case 73:
Lev Walkin070a52d2004-08-22 03:19:54 +00002385#line 843 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002386 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002387 yyval.a_expr = asn1p_expr_new(yylineno);
2388 checkmem(yyval.a_expr);
2389 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2390 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
2391 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002392 }
2393 break;
2394
2395 case 74:
Lev Walkin070a52d2004-08-22 03:19:54 +00002396#line 850 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002397 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002398 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002399 }
2400 break;
2401
2402 case 75:
Lev Walkin070a52d2004-08-22 03:19:54 +00002403#line 856 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002404 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002405 yyval.a_expr = asn1p_expr_new(yylineno);
2406 checkmem(yyval.a_expr);
2407 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002408 }
2409 break;
2410
2411 case 76:
Lev Walkin070a52d2004-08-22 03:19:54 +00002412#line 861 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002413 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002414 yyval.a_expr = yyvsp[-2].a_expr;
2415 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002416 }
2417 break;
2418
2419 case 77:
Lev Walkin070a52d2004-08-22 03:19:54 +00002420#line 868 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002421 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002422 yyval.a_expr = yyvsp[0].a_expr;
2423 assert(yyval.a_expr->Identifier == 0);
2424 yyval.a_expr->Identifier = yyvsp[-1].tv_nametag.name;
2425 yyval.a_expr->tag = yyvsp[-1].tv_nametag.tag;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002426 }
2427 break;
2428
2429 case 78:
Lev Walkin070a52d2004-08-22 03:19:54 +00002430#line 874 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002431 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002432 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002433 }
2434 break;
2435
2436 case 79:
Lev Walkin070a52d2004-08-22 03:19:54 +00002437#line 880 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002438 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002439 yyval.a_expr = yyvsp[-2].a_expr;
2440 checkmem(yyval.a_expr);
2441 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2442 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2443 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002444 }
2445 break;
2446
2447 case 80:
Lev Walkin070a52d2004-08-22 03:19:54 +00002448#line 890 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002449 { yyval.a_int = 0; }
2450 break;
2451
2452 case 81:
Lev Walkin070a52d2004-08-22 03:19:54 +00002453#line 891 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002454 { yyval.a_int = 1; }
2455 break;
2456
2457 case 82:
Lev Walkin070a52d2004-08-22 03:19:54 +00002458#line 895 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002459 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002460 yyval.a_expr = asn1p_expr_new(yylineno);
2461 checkmem(yyval.a_expr);
2462 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2463 yyval.a_expr->meta_type = AMT_OBJECT;
2464 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002465 }
2466 break;
2467
2468 case 83:
Lev Walkin070a52d2004-08-22 03:19:54 +00002469#line 902 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002470 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002471 yyval.a_expr = yyvsp[-2].a_expr;
2472 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002473 }
2474 break;
2475
2476 case 84:
Lev Walkin070a52d2004-08-22 03:19:54 +00002477#line 909 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002478 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002479 yyval.a_expr = asn1p_expr_new(yylineno);
2480 checkmem(yyval.a_expr);
2481 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2482 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2483 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2484 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002485 }
2486 break;
2487
2488 case 85:
Lev Walkin070a52d2004-08-22 03:19:54 +00002489#line 917 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002490 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002491 yyval.a_expr = yyvsp[-2].a_expr;
2492 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2493 yyval.a_expr->marker = yyvsp[-1].a_marker;
Lev Walkinf15320b2004-06-03 03:38:44 +00002494 yyval.a_expr->unique = yyvsp[0].a_int;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002495 }
2496 break;
2497
2498 case 86:
Lev Walkin070a52d2004-08-22 03:19:54 +00002499#line 923 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002500 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002501 int ret;
2502 yyval.a_expr = asn1p_expr_new(yylineno);
2503 checkmem(yyval.a_expr);
2504 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2505 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2506 checkmem(yyval.a_expr->reference);
2507 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2508 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2509 checkmem(ret == 0);
2510 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2511 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2512 yyval.a_expr->marker = yyvsp[-1].a_marker;
2513 yyval.a_expr->unique = yyvsp[0].a_int;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002514 }
2515 break;
2516
2517 case 87:
Lev Walkin070a52d2004-08-22 03:19:54 +00002518#line 941 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002519 { yyval.a_wsynt = 0; }
2520 break;
2521
2522 case 88:
Lev Walkin070a52d2004-08-22 03:19:54 +00002523#line 942 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002524 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002525 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002526 }
2527 break;
2528
2529 case 89:
Lev Walkin070a52d2004-08-22 03:19:54 +00002530#line 949 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002531 { asn1p_lexer_hack_enable_with_syntax(); }
2532 break;
2533
2534 case 90:
Lev Walkin070a52d2004-08-22 03:19:54 +00002535#line 951 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002536 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002537 yyval.a_wsynt = yyvsp[-1].a_wsynt;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002538 }
2539 break;
2540
2541 case 91:
Lev Walkin070a52d2004-08-22 03:19:54 +00002542#line 957 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002543 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002544 yyval.a_wsynt = asn1p_wsyntx_new();
2545 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002546 }
2547 break;
2548
2549 case 92:
Lev Walkin070a52d2004-08-22 03:19:54 +00002550#line 961 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002551 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002552 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2553 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002554 }
2555 break;
2556
2557 case 93:
Lev Walkin070a52d2004-08-22 03:19:54 +00002558#line 968 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002559 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002560 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002561 }
2562 break;
2563
2564 case 94:
Lev Walkin070a52d2004-08-22 03:19:54 +00002565#line 971 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002566 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002567 asn1p_ref_t *ref;
2568 int ret;
2569 ref = asn1p_ref_new(yylineno);
2570 checkmem(ref);
2571 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2572 checkmem(ret == 0);
2573 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002574 }
2575 break;
2576
2577 case 95:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002578#line 983 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002579 {
Lev Walkinf59d0752004-08-18 04:59:12 +00002580 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2581 checkmem(yyval.a_expr);
2582 yyval.a_expr->Identifier = strdup("...");
2583 checkmem(yyval.a_expr->Identifier);
Lev Walkinf59d0752004-08-18 04:59:12 +00002584 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2585 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002586 }
2587 break;
2588
2589 case 96:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002590#line 991 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002591 {
Lev Walkinf59d0752004-08-18 04:59:12 +00002592 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2593 checkmem(yyval.a_expr);
2594 yyval.a_expr->Identifier = strdup("...");
Lev Walkinf59d0752004-08-18 04:59:12 +00002595 checkmem(yyval.a_expr->Identifier);
Lev Walkind2ea1de2004-08-20 13:25:29 +00002596 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkinf59d0752004-08-18 04:59:12 +00002597 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2598 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002599 }
2600 break;
2601
2602 case 97:
Lev Walkinf59d0752004-08-18 04:59:12 +00002603#line 1000 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002604 {
Lev Walkind2ea1de2004-08-20 13:25:29 +00002605 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2606 checkmem(yyval.a_expr);
2607 yyval.a_expr->Identifier = strdup("...");
2608 yyval.a_expr->value = yyvsp[0].a_value;
2609 checkmem(yyval.a_expr->Identifier);
2610 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2611 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002612 }
2613 break;
2614
2615 case 98:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002616#line 1012 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002617 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002618 yyval.a_expr = yyvsp[-1].a_expr;
2619 /*
2620 * Outer constraint for SEQUENCE OF and SET OF applies
2621 * to the inner type.
2622 */
2623 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2624 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2625 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2626 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2627 } else {
2628 if(yyval.a_expr->constraints) {
2629 assert(!yyvsp[0].a_constr);
2630 } else {
2631 yyval.a_expr->constraints = yyvsp[0].a_constr;
2632 }
2633 }
Lev Walkin609ccbb2004-09-04 04:49:21 +00002634 }
2635 break;
2636
2637 case 99:
Lev Walkin070a52d2004-08-22 03:19:54 +00002638#line 1033 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002639 {
Lev Walkind2ea1de2004-08-20 13:25:29 +00002640 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002641 }
2642 break;
2643
2644 case 100:
Lev Walkin070a52d2004-08-22 03:19:54 +00002645#line 1036 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002646 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002647 yyval.a_expr = asn1p_expr_new(yylineno);
2648 checkmem(yyval.a_expr);
2649 yyval.a_expr->expr_type = yyvsp[0].a_type;
2650 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002651 }
2652 break;
2653
2654 case 101:
Lev Walkin070a52d2004-08-22 03:19:54 +00002655#line 1042 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002656 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002657 yyval.a_expr = yyvsp[-1].a_expr;
2658 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2659 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2660 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002661 }
2662 break;
2663
2664 case 102:
Lev Walkin070a52d2004-08-22 03:19:54 +00002665#line 1048 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002666 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002667 yyval.a_expr = yyvsp[-1].a_expr;
2668 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2669 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2670 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002671 }
2672 break;
2673
2674 case 103:
Lev Walkin070a52d2004-08-22 03:19:54 +00002675#line 1054 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002676 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002677 yyval.a_expr = yyvsp[-1].a_expr;
2678 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2679 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2680 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002681 }
2682 break;
2683
2684 case 104:
Lev Walkin070a52d2004-08-22 03:19:54 +00002685#line 1060 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002686 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002687 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2688 checkmem(yyval.a_expr);
2689 yyval.a_expr->constraints = yyvsp[-2].a_constr;
2690 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2691 yyval.a_expr->meta_type = AMT_TYPE;
2692 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002693 }
2694 break;
2695
2696 case 105:
Lev Walkin070a52d2004-08-22 03:19:54 +00002697#line 1068 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002698 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002699 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2700 checkmem(yyval.a_expr);
2701 yyval.a_expr->constraints = yyvsp[-2].a_constr;
2702 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2703 yyval.a_expr->meta_type = AMT_TYPE;
2704 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002705 }
2706 break;
2707
2708 case 106:
Lev Walkin070a52d2004-08-22 03:19:54 +00002709#line 1076 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002710 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002711 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2712 checkmem(yyval.a_expr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002713 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002714 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002715 }
2716 break;
2717
2718 case 107:
Lev Walkin070a52d2004-08-22 03:19:54 +00002719#line 1082 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002720 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002721 int ret;
2722 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2723 checkmem(yyval.a_expr);
2724 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2725 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2726 yyvsp[0].tv_str, RLT_lowercase);
2727 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002728 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002729 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002730 }
2731 break;
2732
2733 case 108:
2734#line 1096 "asn1p_y.y"
2735 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002736 int ret;
2737 yyval.a_expr = yyvsp[-1].a_expr;
2738 assert(yyval.a_expr->expr_type == 0);
2739 assert(yyval.a_expr->meta_type == 0);
2740 assert(yyval.a_expr->reference == 0);
2741 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2742 checkmem(yyval.a_expr->reference);
2743 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2744 checkmem(ret == 0);
2745 free(yyvsp[-3].tv_str);
2746 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2747 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002748 }
2749 break;
2750
2751 case 109:
2752#line 1120 "asn1p_y.y"
2753 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002754 yyval.a_expr = asn1p_expr_new(yylineno);
2755 checkmem(yyval.a_expr);
2756 yyval.a_expr->reference = yyvsp[0].a_ref;
2757 yyval.a_expr->expr_type = A1TC_REFERENCE;
2758 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002759 }
2760 break;
2761
2762 case 110:
2763#line 1127 "asn1p_y.y"
2764 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002765 yyval.a_expr = asn1p_expr_new(yylineno);
2766 checkmem(yyval.a_expr);
2767 yyval.a_expr->reference = yyvsp[0].a_ref;
2768 yyval.a_expr->expr_type = A1TC_INSTANCE;
2769 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002770 }
2771 break;
2772
2773 case 111:
2774#line 1142 "asn1p_y.y"
2775 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002776 int ret;
2777 yyval.a_ref = asn1p_ref_new(yylineno);
2778 checkmem(yyval.a_ref);
2779 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2780 checkmem(ret == 0);
2781 free(yyvsp[0].tv_str);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002782 }
2783 break;
2784
2785 case 112:
2786#line 1150 "asn1p_y.y"
2787 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002788 int ret;
2789 yyval.a_ref = asn1p_ref_new(yylineno);
2790 checkmem(yyval.a_ref);
2791 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2792 checkmem(ret == 0);
2793 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2794 checkmem(ret == 0);
2795 free(yyvsp[-2].tv_str);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002796 }
2797 break;
2798
2799 case 113:
2800#line 1160 "asn1p_y.y"
2801 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002802 int ret;
2803 yyval.a_ref = asn1p_ref_new(yylineno);
2804 checkmem(yyval.a_ref);
2805 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2806 checkmem(ret == 0);
2807 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2808 checkmem(ret == 0);
2809 free(yyvsp[-2].tv_str);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002810 }
2811 break;
2812
2813 case 114:
2814#line 1170 "asn1p_y.y"
2815 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002816 int ret;
2817 yyval.a_ref = asn1p_ref_new(yylineno);
2818 checkmem(yyval.a_ref);
2819 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2820 free(yyvsp[0].tv_str);
2821 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002822 }
2823 break;
2824
2825 case 115:
2826#line 1178 "asn1p_y.y"
2827 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002828 int ret;
2829 yyval.a_ref = yyvsp[0].a_ref;
2830 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2831 free(yyvsp[-2].tv_str);
2832 checkmem(ret == 0);
2833 /*
2834 * Move the last element infront.
2835 */
2836 {
2837 struct asn1p_ref_component_s tmp_comp;
2838 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2839 memmove(&yyval.a_ref->components[1],
2840 &yyval.a_ref->components[0],
2841 sizeof(yyval.a_ref->components[0])
2842 * (yyval.a_ref->comp_count - 1));
2843 yyval.a_ref->components[0] = tmp_comp;
2844 }
Lev Walkin609ccbb2004-09-04 04:49:21 +00002845 }
2846 break;
2847
2848 case 116:
2849#line 1200 "asn1p_y.y"
2850 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002851 int ret;
2852 yyval.a_ref = asn1p_ref_new(yylineno);
2853 checkmem(yyval.a_ref);
2854 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2855 free(yyvsp[0].a_refcomp.name);
2856 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002857 }
2858 break;
2859
2860 case 117:
2861#line 1208 "asn1p_y.y"
2862 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002863 int ret;
2864 yyval.a_ref = yyvsp[-2].a_ref;
2865 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2866 free(yyvsp[0].a_refcomp.name);
2867 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002868 }
2869 break;
2870
2871 case 120:
2872#line 1222 "asn1p_y.y"
2873 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002874 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2875 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002876 }
2877 break;
2878
2879 case 121:
2880#line 1227 "asn1p_y.y"
2881 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002882 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2883 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002884 }
2885 break;
2886
2887 case 122:
2888#line 1240 "asn1p_y.y"
2889 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002890 yyval.a_expr = yyvsp[-2].a_expr;
2891 assert(yyval.a_expr->Identifier == NULL);
2892 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2893 yyval.a_expr->meta_type = AMT_VALUE;
2894 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002895 }
2896 break;
2897
2898 case 123:
2899#line 1250 "asn1p_y.y"
2900 { asn1p_lexer_hack_push_opaque_state(); }
2901 break;
2902
2903 case 124:
Lev Walkin070a52d2004-08-22 03:19:54 +00002904#line 1251 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00002905 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002906 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2907 checkmem(yyval.a_value);
2908 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002909 }
2910 break;
2911
2912 case 125:
2913#line 1256 "asn1p_y.y"
2914 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002915 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2916 checkmem(yyval.a_value);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002917 }
2918 break;
2919
2920 case 126:
2921#line 1260 "asn1p_y.y"
2922 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002923 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2924 checkmem(yyval.a_value);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002925 }
2926 break;
2927
2928 case 127:
2929#line 1264 "asn1p_y.y"
2930 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002931 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2932 checkmem(yyval.a_value);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002933 }
2934 break;
2935
2936 case 128:
2937#line 1268 "asn1p_y.y"
2938 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002939 yyval.a_value = yyvsp[0].a_value;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002940 }
2941 break;
2942
2943 case 129:
2944#line 1271 "asn1p_y.y"
2945 {
Lev Walkind2ea1de2004-08-20 13:25:29 +00002946 yyval.a_value = yyvsp[0].a_value;
Lev Walkin609ccbb2004-09-04 04:49:21 +00002947 }
2948 break;
2949
2950 case 130:
2951#line 1277 "asn1p_y.y"
2952 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002953 asn1p_ref_t *ref;
2954 int ret;
2955 ref = asn1p_ref_new(yylineno);
2956 checkmem(ref);
2957 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2958 checkmem(ret == 0);
2959 yyval.a_value = asn1p_value_fromref(ref, 0);
2960 checkmem(yyval.a_value);
2961 free(yyvsp[0].tv_str);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002962 }
2963 break;
2964
2965 case 131:
2966#line 1288 "asn1p_y.y"
2967 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002968 asn1p_ref_t *ref;
2969 int ret;
2970 ref = asn1p_ref_new(yylineno);
2971 checkmem(ref);
2972 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2973 checkmem(ret == 0);
2974 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2975 checkmem(ret == 0);
2976 yyval.a_value = asn1p_value_fromref(ref, 0);
2977 checkmem(yyval.a_value);
2978 free(yyvsp[-2].tv_str);
2979 free(yyvsp[0].tv_str);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002980 }
2981 break;
2982
2983 case 132:
2984#line 1305 "asn1p_y.y"
2985 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002986 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
2987 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2988 checkmem(yyval.tv_opaque.buf);
2989 yyval.tv_opaque.buf[0] = '{';
2990 yyval.tv_opaque.buf[1] = ' ';
2991 memcpy(yyval.tv_opaque.buf + 2, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2992 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2993 free(yyvsp[0].tv_opaque.buf);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002994 }
2995 break;
2996
2997 case 133:
2998#line 1315 "asn1p_y.y"
2999 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003000 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
3001 char *p = malloc(newsize + 1);
3002 checkmem(p);
3003 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
3004 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
3005 p[newsize] = '\0';
3006 free(yyvsp[-1].tv_opaque.buf);
3007 free(yyvsp[0].tv_opaque.buf);
3008 yyval.tv_opaque.buf = p;
3009 yyval.tv_opaque.len = newsize;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003010 }
3011 break;
3012
3013 case 134:
3014#line 1330 "asn1p_y.y"
3015 { yyval.a_type = ASN_BASIC_BOOLEAN; }
3016 break;
3017
3018 case 135:
Lev Walkin070a52d2004-08-22 03:19:54 +00003019#line 1331 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003020 { yyval.a_type = ASN_BASIC_NULL; }
3021 break;
3022
3023 case 136:
Lev Walkin070a52d2004-08-22 03:19:54 +00003024#line 1332 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003025 { yyval.a_type = ASN_BASIC_REAL; }
3026 break;
3027
3028 case 137:
Lev Walkin070a52d2004-08-22 03:19:54 +00003029#line 1333 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003030 { yyval.a_type = yyvsp[0].a_type; }
3031 break;
3032
3033 case 138:
Lev Walkin070a52d2004-08-22 03:19:54 +00003034#line 1334 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003035 { yyval.a_type = ASN_BASIC_OCTET_STRING; }
3036 break;
3037
3038 case 139:
Lev Walkin070a52d2004-08-22 03:19:54 +00003039#line 1335 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003040 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
3041 break;
3042
3043 case 140:
Lev Walkin070a52d2004-08-22 03:19:54 +00003044#line 1336 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003045 { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
3046 break;
3047
3048 case 141:
Lev Walkin070a52d2004-08-22 03:19:54 +00003049#line 1337 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003050 { yyval.a_type = ASN_BASIC_EXTERNAL; }
3051 break;
3052
3053 case 142:
Lev Walkin070a52d2004-08-22 03:19:54 +00003054#line 1338 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003055 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
3056 break;
3057
3058 case 143:
Lev Walkin070a52d2004-08-22 03:19:54 +00003059#line 1339 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003060 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
3061 break;
3062
3063 case 144:
Lev Walkin070a52d2004-08-22 03:19:54 +00003064#line 1340 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003065 { yyval.a_type = ASN_BASIC_UTCTime; }
3066 break;
3067
3068 case 145:
Lev Walkin070a52d2004-08-22 03:19:54 +00003069#line 1341 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003070 { yyval.a_type = ASN_BASIC_GeneralizedTime; }
3071 break;
3072
3073 case 146:
3074#line 1348 "asn1p_y.y"
3075 { yyval.a_type = ASN_BASIC_INTEGER; }
3076 break;
3077
3078 case 147:
Lev Walkin070a52d2004-08-22 03:19:54 +00003079#line 1349 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003080 { yyval.a_type = ASN_BASIC_ENUMERATED; }
3081 break;
3082
3083 case 148:
Lev Walkin070a52d2004-08-22 03:19:54 +00003084#line 1350 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003085 { yyval.a_type = ASN_BASIC_BIT_STRING; }
3086 break;
3087
3088 case 149:
3089#line 1354 "asn1p_y.y"
3090 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003091 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3092 checkmem(yyval.a_expr);
3093 yyval.a_expr->expr_type = yyvsp[0].a_type;
3094 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003095 }
3096 break;
3097
3098 case 150:
3099#line 1360 "asn1p_y.y"
3100 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003101 if(yyvsp[0].a_expr) {
3102 yyval.a_expr = yyvsp[0].a_expr;
3103 } else {
3104 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3105 checkmem(yyval.a_expr);
3106 }
3107 yyval.a_expr->expr_type = yyvsp[-1].a_type;
3108 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003109 }
3110 break;
3111
3112 case 151:
3113#line 1373 "asn1p_y.y"
3114 { yyval.a_type = ASN_STRING_BMPString; }
3115 break;
3116
3117 case 152:
Lev Walkin070a52d2004-08-22 03:19:54 +00003118#line 1374 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003119 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003120 yyval.a_type = ASN_STRING_GeneralString;
3121 return yyerror("GeneralString is not supported");
Lev Walkin609ccbb2004-09-04 04:49:21 +00003122 }
3123 break;
3124
3125 case 153:
3126#line 1378 "asn1p_y.y"
3127 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003128 yyval.a_type = ASN_STRING_GraphicString;
3129 return yyerror("GraphicString is not supported");
Lev Walkin609ccbb2004-09-04 04:49:21 +00003130 }
3131 break;
3132
3133 case 154:
3134#line 1382 "asn1p_y.y"
3135 { yyval.a_type = ASN_STRING_IA5String; }
3136 break;
3137
3138 case 155:
Lev Walkin070a52d2004-08-22 03:19:54 +00003139#line 1383 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003140 { yyval.a_type = ASN_STRING_ISO646String; }
3141 break;
3142
3143 case 156:
Lev Walkin070a52d2004-08-22 03:19:54 +00003144#line 1384 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003145 { yyval.a_type = ASN_STRING_NumericString; }
3146 break;
3147
3148 case 157:
Lev Walkin070a52d2004-08-22 03:19:54 +00003149#line 1385 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003150 { yyval.a_type = ASN_STRING_PrintableString; }
3151 break;
3152
3153 case 158:
Lev Walkin070a52d2004-08-22 03:19:54 +00003154#line 1386 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003155 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003156 yyval.a_type = ASN_STRING_T61String;
3157 return yyerror("T61String not implemented yet");
Lev Walkin609ccbb2004-09-04 04:49:21 +00003158 }
3159 break;
3160
3161 case 159:
3162#line 1390 "asn1p_y.y"
3163 { yyval.a_type = ASN_STRING_TeletexString; }
3164 break;
3165
3166 case 160:
Lev Walkin070a52d2004-08-22 03:19:54 +00003167#line 1391 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003168 { yyval.a_type = ASN_STRING_UniversalString; }
3169 break;
3170
3171 case 161:
Lev Walkin070a52d2004-08-22 03:19:54 +00003172#line 1392 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003173 { yyval.a_type = ASN_STRING_UTF8String; }
3174 break;
3175
3176 case 162:
Lev Walkin070a52d2004-08-22 03:19:54 +00003177#line 1393 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003178 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003179 yyval.a_type = ASN_STRING_VideotexString;
3180 return yyerror("VideotexString is no longer supported");
Lev Walkin609ccbb2004-09-04 04:49:21 +00003181 }
3182 break;
3183
3184 case 163:
3185#line 1397 "asn1p_y.y"
3186 { yyval.a_type = ASN_STRING_VisibleString; }
3187 break;
3188
3189 case 164:
Lev Walkin070a52d2004-08-22 03:19:54 +00003190#line 1398 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003191 { yyval.a_type = ASN_STRING_ObjectDescriptor; }
3192 break;
3193
3194 case 170:
3195#line 1410 "asn1p_y.y"
3196 { yyval.a_constr = 0; }
3197 break;
3198
3199 case 171:
Lev Walkin070a52d2004-08-22 03:19:54 +00003200#line 1411 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003201 {
Lev Walkind2ea1de2004-08-20 13:25:29 +00003202 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003203 }
3204 break;
3205
3206 case 172:
3207#line 1417 "asn1p_y.y"
3208 {
Lev Walkinf59d0752004-08-18 04:59:12 +00003209 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003210 }
3211 break;
3212
3213 case 173:
3214#line 1420 "asn1p_y.y"
3215 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003216 /*
3217 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00003218 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00003219 */
Lev Walkind2ea1de2004-08-20 13:25:29 +00003220 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003221 }
3222 break;
3223
3224 case 174:
3225#line 1430 "asn1p_y.y"
3226 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003227 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003228 }
3229 break;
3230
3231 case 175:
3232#line 1433 "asn1p_y.y"
3233 {
Lev Walkinf59d0752004-08-18 04:59:12 +00003234 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003235 }
3236 break;
3237
3238 case 176:
3239#line 1439 "asn1p_y.y"
3240 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003241 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003242 }
3243 break;
3244
3245 case 177:
3246#line 1442 "asn1p_y.y"
3247 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003248 asn1p_constraint_t *ct;
3249 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003250 ct->type = ACT_EL_EXT;
3251 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003252 }
3253 break;
3254
3255 case 178:
3256#line 1448 "asn1p_y.y"
3257 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003258 asn1p_constraint_t *ct;
3259 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003260 ct->type = ACT_EL_EXT;
3261 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003262 ct = yyval.a_constr;
3263 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003264 }
3265 break;
3266
3267 case 179:
3268#line 1459 "asn1p_y.y"
3269 {
Lev Walkinf59d0752004-08-18 04:59:12 +00003270 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003271 }
3272 break;
3273
3274 case 180:
3275#line 1462 "asn1p_y.y"
3276 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003277 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003278 }
3279 break;
3280
3281 case 181:
3282#line 1465 "asn1p_y.y"
3283 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003284 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003285 }
3286 break;
3287
3288 case 182:
3289#line 1468 "asn1p_y.y"
3290 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003291 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003292 }
3293 break;
3294
3295 case 183:
3296#line 1474 "asn1p_y.y"
3297 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003298 int ret;
3299 yyval.a_constr = asn1p_constraint_new(yylineno);
3300 checkmem(yyval.a_constr);
3301 yyval.a_constr->type = yyvsp[-3].a_ctype;
3302 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
3303 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003304 }
3305 break;
3306
3307 case 184:
3308#line 1482 "asn1p_y.y"
3309 {
Lev Walkinf59d0752004-08-18 04:59:12 +00003310 int ret;
3311 yyval.a_constr = asn1p_constraint_new(yylineno);
3312 checkmem(yyval.a_constr);
3313 yyval.a_constr->type = ACT_CA_SET;
3314 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
3315 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003316 }
3317 break;
3318
3319 case 185:
3320#line 1490 "asn1p_y.y"
3321 {
Lev Walkinf59d0752004-08-18 04:59:12 +00003322 yyval.a_constr = asn1p_constraint_new(yylineno);
3323 checkmem(yyval.a_constr);
3324 yyval.a_constr->type = ACT_EL_VALUE;
3325 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003326 }
3327 break;
3328
3329 case 186:
3330#line 1496 "asn1p_y.y"
3331 {
Lev Walkind2ea1de2004-08-20 13:25:29 +00003332 yyval.a_constr = asn1p_constraint_new(yylineno);
3333 checkmem(yyval.a_constr);
3334 yyval.a_constr->type = yyvsp[-1].a_ctype;
Lev Walkin070a52d2004-08-22 03:19:54 +00003335 yyval.a_constr->range_start = yyvsp[-2].a_value;
3336 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003337 }
3338 break;
3339
3340 case 187:
3341#line 1503 "asn1p_y.y"
3342 {
Lev Walkin070a52d2004-08-22 03:19:54 +00003343 yyval.a_constr = asn1p_constraint_new(yylineno);
3344 checkmem(yyval.a_constr);
3345 yyval.a_constr->type = yyvsp[-1].a_ctype;
3346 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3347 yyval.a_constr->range_stop = yyvsp[0].a_value;
3348 yyval.a_constr->range_start->type = ATV_MIN;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003349 }
3350 break;
3351
3352 case 188:
3353#line 1511 "asn1p_y.y"
3354 {
Lev Walkin070a52d2004-08-22 03:19:54 +00003355 yyval.a_constr = asn1p_constraint_new(yylineno);
3356 checkmem(yyval.a_constr);
3357 yyval.a_constr->type = yyvsp[-1].a_ctype;
3358 yyval.a_constr->range_start = yyvsp[-2].a_value;
3359 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3360 yyval.a_constr->range_stop->type = ATV_MAX;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003361 }
3362 break;
3363
3364 case 189:
3365#line 1519 "asn1p_y.y"
3366 {
Lev Walkin070a52d2004-08-22 03:19:54 +00003367 yyval.a_constr = asn1p_constraint_new(yylineno);
3368 checkmem(yyval.a_constr);
3369 yyval.a_constr->type = yyvsp[-1].a_ctype;
3370 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3371 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3372 yyval.a_constr->range_start->type = ATV_MIN;
3373 yyval.a_constr->range_stop->type = ATV_MAX;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003374 }
3375 break;
3376
3377 case 190:
3378#line 1528 "asn1p_y.y"
3379 {
Lev Walkind2ea1de2004-08-20 13:25:29 +00003380 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003381 }
3382 break;
3383
3384 case 191:
3385#line 1531 "asn1p_y.y"
3386 {
Lev Walkin070a52d2004-08-22 03:19:54 +00003387 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003388 }
3389 break;
3390
3391 case 192:
3392#line 1537 "asn1p_y.y"
3393 { yyval.a_ctype = ACT_EL_RANGE; }
3394 break;
3395
3396 case 193:
Lev Walkin070a52d2004-08-22 03:19:54 +00003397#line 1538 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003398 { yyval.a_ctype = ACT_EL_RLRANGE; }
3399 break;
3400
3401 case 194:
Lev Walkin070a52d2004-08-22 03:19:54 +00003402#line 1539 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003403 { yyval.a_ctype = ACT_EL_LLRANGE; }
3404 break;
3405
3406 case 195:
Lev Walkin070a52d2004-08-22 03:19:54 +00003407#line 1540 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003408 { yyval.a_ctype = ACT_EL_ULRANGE; }
3409 break;
3410
3411 case 196:
3412#line 1544 "asn1p_y.y"
3413 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003414 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003415 }
3416 break;
3417
3418 case 197:
3419#line 1547 "asn1p_y.y"
3420 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003421 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003422 }
3423 break;
3424
3425 case 198:
3426#line 1553 "asn1p_y.y"
3427 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003428 yyval.a_value = yyvsp[0].a_value;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003429 }
3430 break;
3431
3432 case 199:
3433#line 1556 "asn1p_y.y"
3434 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003435 asn1p_ref_t *ref;
3436 int ret;
3437 ref = asn1p_ref_new(yylineno);
3438 checkmem(ref);
3439 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3440 checkmem(ret == 0);
3441 yyval.a_value = asn1p_value_fromref(ref, 0);
3442 checkmem(yyval.a_value);
3443 free(yyvsp[0].tv_str);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003444 }
3445 break;
3446
3447 case 200:
3448#line 1567 "asn1p_y.y"
3449 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003450 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3451 checkmem(yyval.a_value);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003452 }
3453 break;
3454
3455 case 201:
3456#line 1572 "asn1p_y.y"
3457 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003458 yyval.a_value = asn1p_value_fromint(0);
3459 checkmem(yyval.a_value);
3460 yyval.a_value->type = ATV_FALSE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003461 }
3462 break;
3463
3464 case 202:
3465#line 1577 "asn1p_y.y"
3466 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003467 yyval.a_value = asn1p_value_fromint(1);
3468 checkmem(yyval.a_value);
3469 yyval.a_value->type = ATV_TRUE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003470 }
3471 break;
3472
3473 case 203:
3474#line 1585 "asn1p_y.y"
3475 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003476 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003477 }
3478 break;
3479
3480 case 204:
3481#line 1591 "asn1p_y.y"
3482 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003483 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003484 }
3485 break;
3486
3487 case 205:
3488#line 1594 "asn1p_y.y"
3489 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003490 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003491 }
3492 break;
3493
3494 case 206:
3495#line 1600 "asn1p_y.y"
3496 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003497 yyval.a_constr = asn1p_constraint_new(yylineno);
3498 checkmem(yyval.a_constr);
3499 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003500 }
3501 break;
3502
3503 case 207:
3504#line 1605 "asn1p_y.y"
3505 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003506 yyval.a_constr = asn1p_constraint_new(yylineno);
3507 checkmem(yyval.a_constr);
3508 yyval.a_constr->type = ACT_EL_VALUE;
3509 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3510 yyval.a_constr->presence = yyvsp[0].a_pres;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003511 }
3512 break;
3513
3514 case 208:
3515#line 1618 "asn1p_y.y"
3516 { yyval.a_pres = ACPRES_DEFAULT; }
3517 break;
3518
3519 case 209:
Lev Walkin070a52d2004-08-22 03:19:54 +00003520#line 1619 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003521 { yyval.a_pres = yyvsp[0].a_pres; }
3522 break;
3523
3524 case 210:
3525#line 1623 "asn1p_y.y"
3526 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003527 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003528 }
3529 break;
3530
3531 case 211:
3532#line 1626 "asn1p_y.y"
3533 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003534 yyval.a_pres = ACPRES_ABSENT;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003535 }
3536 break;
3537
3538 case 212:
3539#line 1629 "asn1p_y.y"
3540 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003541 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003542 }
3543 break;
3544
3545 case 213:
3546#line 1635 "asn1p_y.y"
3547 {
Lev Walkind2ea1de2004-08-20 13:25:29 +00003548 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003549 }
3550 break;
3551
3552 case 214:
3553#line 1638 "asn1p_y.y"
3554 {
Lev Walkind2ea1de2004-08-20 13:25:29 +00003555 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003556 }
3557 break;
3558
3559 case 215:
3560#line 1647 "asn1p_y.y"
3561 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003562 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3563 asn1p_constraint_t *ct;
3564 int ret;
3565 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3566 checkmem(ret == 0);
3567 ct = asn1p_constraint_new(yylineno);
3568 checkmem(yyval.a_constr);
3569 ct->type = ACT_EL_VALUE;
3570 ct->value = asn1p_value_fromref(ref, 0);
3571 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003572 }
3573 break;
3574
3575 case 216:
3576#line 1662 "asn1p_y.y"
3577 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003578 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003579 }
3580 break;
3581
3582 case 217:
3583#line 1668 "asn1p_y.y"
3584 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003585 yyval.a_constr = asn1p_constraint_new(yylineno);
3586 checkmem(yyval.a_constr);
3587 yyval.a_constr->type = ACT_EL_VALUE;
3588 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003589 }
3590 break;
3591
3592 case 218:
3593#line 1674 "asn1p_y.y"
3594 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003595 asn1p_constraint_t *ct;
3596 ct = asn1p_constraint_new(yylineno);
3597 checkmem(ct);
3598 ct->type = ACT_EL_VALUE;
3599 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3600 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003601 }
3602 break;
3603
3604 case 219:
3605#line 1688 "asn1p_y.y"
3606 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003607 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3608 int ret;
3609 *p = '@';
3610 strcpy(p + 1, yyvsp[0].tv_str);
3611 yyval.a_ref = asn1p_ref_new(yylineno);
3612 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3613 checkmem(ret == 0);
3614 free(p);
3615 free(yyvsp[0].tv_str);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003616 }
3617 break;
3618
3619 case 220:
3620#line 1699 "asn1p_y.y"
3621 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003622 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3623 int ret;
3624 p[0] = '@';
3625 p[1] = '.';
3626 strcpy(p + 2, yyvsp[0].tv_str);
3627 yyval.a_ref = asn1p_ref_new(yylineno);
3628 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3629 checkmem(ret == 0);
3630 free(p);
3631 free(yyvsp[0].tv_str);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003632 }
3633 break;
3634
3635 case 221:
3636#line 1715 "asn1p_y.y"
3637 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003638 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003639 }
3640 break;
3641
3642 case 222:
3643#line 1718 "asn1p_y.y"
3644 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003645 int l1 = strlen(yyvsp[-2].tv_str);
3646 int l3 = strlen(yyvsp[0].tv_str);
3647 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3648 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3649 yyval.tv_str[l1] = '.';
3650 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3651 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin609ccbb2004-09-04 04:49:21 +00003652 }
3653 break;
3654
3655 case 223:
3656#line 1736 "asn1p_y.y"
3657 { yyval.a_marker = EM_NOMARK; }
3658 break;
3659
3660 case 224:
Lev Walkin070a52d2004-08-22 03:19:54 +00003661#line 1737 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003662 { yyval.a_marker = yyvsp[0].a_marker; }
3663 break;
3664
3665 case 225:
3666#line 1741 "asn1p_y.y"
3667 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003668 yyval.a_marker = EM_OPTIONAL;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003669 }
3670 break;
3671
3672 case 226:
3673#line 1744 "asn1p_y.y"
3674 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003675 yyval.a_marker = EM_DEFAULT;
3676 /* FIXME: store DefaultValue somewhere */
Lev Walkin609ccbb2004-09-04 04:49:21 +00003677 }
3678 break;
3679
3680 case 227:
3681#line 1751 "asn1p_y.y"
3682 {
3683 }
3684 break;
3685
3686 case 228:
3687#line 1753 "asn1p_y.y"
3688 {
3689 }
3690 break;
3691
3692 case 229:
3693#line 1755 "asn1p_y.y"
3694 { asn1p_lexer_hack_push_opaque_state(); }
3695 break;
3696
3697 case 230:
3698#line 1755 "asn1p_y.y"
3699 {
3700 }
3701 break;
3702
3703 case 231:
3704#line 1776 "asn1p_y.y"
3705 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003706 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3707 checkmem(yyval.a_expr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003708 }
3709 break;
3710
3711 case 232:
3712#line 1780 "asn1p_y.y"
3713 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003714 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003715 }
3716 break;
3717
3718 case 233:
3719#line 1786 "asn1p_y.y"
3720 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003721 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3722 checkmem(yyval.a_expr);
3723 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003724 }
3725 break;
3726
3727 case 234:
3728#line 1791 "asn1p_y.y"
3729 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003730 yyval.a_expr = yyvsp[-2].a_expr;
3731 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003732 }
3733 break;
3734
3735 case 235:
3736#line 1798 "asn1p_y.y"
3737 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003738 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3739 checkmem(yyval.a_expr);
3740 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3741 yyval.a_expr->meta_type = AMT_VALUE;
3742 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003743 }
3744 break;
3745
3746 case 236:
3747#line 1805 "asn1p_y.y"
3748 {
Lev Walkind2ea1de2004-08-20 13:25:29 +00003749 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3750 checkmem(yyval.a_expr);
3751 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3752 yyval.a_expr->meta_type = AMT_VALUE;
3753 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3754 yyval.a_expr->value = yyvsp[-1].a_value;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003755 }
3756 break;
3757
3758 case 237:
3759#line 1813 "asn1p_y.y"
3760 {
Lev Walkind2ea1de2004-08-20 13:25:29 +00003761 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3762 checkmem(yyval.a_expr);
3763 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3764 yyval.a_expr->meta_type = AMT_VALUE;
3765 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3766 yyval.a_expr->value = yyvsp[-1].a_value;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003767 }
3768 break;
3769
3770 case 238:
3771#line 1821 "asn1p_y.y"
3772 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003773 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3774 checkmem(yyval.a_expr);
3775 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3776 yyval.a_expr->meta_type = AMT_VALUE;
3777 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003778 }
3779 break;
3780
3781 case 239:
3782#line 1828 "asn1p_y.y"
3783 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003784 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3785 checkmem(yyval.a_expr);
3786 yyval.a_expr->Identifier = strdup("...");
3787 checkmem(yyval.a_expr->Identifier);
3788 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3789 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003790 }
3791 break;
3792
3793 case 240:
3794#line 1839 "asn1p_y.y"
3795 {
Lev Walkin070a52d2004-08-22 03:19:54 +00003796 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3797 checkmem(yyval.a_value);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003798 }
3799 break;
3800
3801 case 241:
3802#line 1843 "asn1p_y.y"
3803 {
Lev Walkin070a52d2004-08-22 03:19:54 +00003804 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3805 checkmem(yyval.a_value);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003806 }
3807 break;
3808
3809 case 242:
3810#line 1874 "asn1p_y.y"
3811 { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); }
3812 break;
3813
3814 case 243:
Lev Walkin070a52d2004-08-22 03:19:54 +00003815#line 1875 "asn1p_y.y"
Lev Walkin609ccbb2004-09-04 04:49:21 +00003816 { yyval.a_tag = yyvsp[0].a_tag; }
3817 break;
3818
3819 case 244:
3820#line 1879 "asn1p_y.y"
3821 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003822 yyval.a_tag = yyvsp[0].a_tag;
3823 yyval.a_tag.tag_mode = TM_DEFAULT;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003824 }
3825 break;
3826
3827 case 245:
3828#line 1883 "asn1p_y.y"
3829 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003830 yyval.a_tag = yyvsp[-1].a_tag;
3831 yyval.a_tag.tag_mode = TM_IMPLICIT;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003832 }
3833 break;
3834
3835 case 246:
3836#line 1887 "asn1p_y.y"
3837 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003838 yyval.a_tag = yyvsp[-1].a_tag;
3839 yyval.a_tag.tag_mode = TM_EXPLICIT;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003840 }
3841 break;
3842
3843 case 247:
3844#line 1894 "asn1p_y.y"
3845 {
Lev Walkind2ea1de2004-08-20 13:25:29 +00003846 checkmem(yyvsp[0].tv_str);
3847 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003848 }
3849 break;
3850
3851 case 248:
3852#line 1898 "asn1p_y.y"
3853 {
Lev Walkin070a52d2004-08-22 03:19:54 +00003854 checkmem(yyvsp[0].tv_str);
3855 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003856 }
3857 break;
3858
3859 case 249:
3860#line 1906 "asn1p_y.y"
3861 {
Lev Walkin070a52d2004-08-22 03:19:54 +00003862 checkmem(yyvsp[0].tv_str);
3863 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003864 }
3865 break;
3866
3867 case 250:
3868#line 1913 "asn1p_y.y"
3869 {
Lev Walkin070a52d2004-08-22 03:19:54 +00003870 checkmem(yyvsp[0].tv_str);
3871 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003872 }
3873 break;
3874
3875 case 251:
3876#line 1920 "asn1p_y.y"
3877 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003878 memset(&yyval.tv_nametag, 0, sizeof(yyval.tv_nametag));
3879 yyval.tv_nametag.name = yyvsp[0].tv_str;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003880 }
3881 break;
3882
3883 case 252:
3884#line 1924 "asn1p_y.y"
3885 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003886 yyval.tv_nametag.name = yyvsp[-1].tv_str;
3887 yyval.tv_nametag.tag = yyvsp[0].a_tag;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003888 }
3889 break;
3890
3891
3892 }
3893
3894/* Line 1016 of /usr/local/share/bison/yacc.c. */
3895#line 3896 "asn1p_y.c"
Lev Walkinf15320b2004-06-03 03:38:44 +00003896
3897 yyvsp -= yylen;
3898 yyssp -= yylen;
Lev Walkinf15320b2004-06-03 03:38:44 +00003899
Lev Walkin609ccbb2004-09-04 04:49:21 +00003900
3901#if YYDEBUG
Lev Walkinf15320b2004-06-03 03:38:44 +00003902 if (yydebug)
3903 {
Lev Walkin609ccbb2004-09-04 04:49:21 +00003904 short *yyssp1 = yyss - 1;
3905 YYFPRINTF (stderr, "state stack now");
3906 while (yyssp1 != yyssp)
3907 YYFPRINTF (stderr, " %d", *++yyssp1);
3908 YYFPRINTF (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003909 }
3910#endif
3911
3912 *++yyvsp = yyval;
3913
Lev Walkinf15320b2004-06-03 03:38:44 +00003914
Lev Walkin609ccbb2004-09-04 04:49:21 +00003915 /* Now `shift' the result of the reduction. Determine what state
3916 that goes to, based on the state we popped back to and the rule
3917 number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003918
3919 yyn = yyr1[yyn];
3920
Lev Walkin609ccbb2004-09-04 04:49:21 +00003921 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
3922 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003923 yystate = yytable[yystate];
3924 else
Lev Walkin609ccbb2004-09-04 04:49:21 +00003925 yystate = yydefgoto[yyn - YYNTOKENS];
Lev Walkinf15320b2004-06-03 03:38:44 +00003926
3927 goto yynewstate;
3928
Lev Walkinf15320b2004-06-03 03:38:44 +00003929
Lev Walkin609ccbb2004-09-04 04:49:21 +00003930/*------------------------------------.
3931| yyerrlab -- here on detecting error |
3932`------------------------------------*/
3933yyerrlab:
3934 /* If not already recovering from an error, report this error. */
3935 if (!yyerrstatus)
Lev Walkinf15320b2004-06-03 03:38:44 +00003936 {
3937 ++yynerrs;
Lev Walkin609ccbb2004-09-04 04:49:21 +00003938#if YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003939 yyn = yypact[yystate];
3940
Lev Walkin609ccbb2004-09-04 04:49:21 +00003941 if (YYPACT_NINF < yyn && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003942 {
Lev Walkin609ccbb2004-09-04 04:49:21 +00003943 YYSIZE_T yysize = 0;
3944 int yytype = YYTRANSLATE (yychar);
3945 char *yymsg;
3946 int yyx, yycount;
Lev Walkinf15320b2004-06-03 03:38:44 +00003947
Lev Walkin609ccbb2004-09-04 04:49:21 +00003948 yycount = 0;
3949 /* Start YYX at -YYN if negative to avoid negative indexes in
3950 YYCHECK. */
3951 for (yyx = yyn < 0 ? -yyn : 0;
3952 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
3953 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
3954 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
3955 yysize += yystrlen ("parse error, unexpected ") + 1;
3956 yysize += yystrlen (yytname[yytype]);
3957 yymsg = (char *) YYSTACK_ALLOC (yysize);
3958 if (yymsg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003959 {
Lev Walkin609ccbb2004-09-04 04:49:21 +00003960 char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
3961 yyp = yystpcpy (yyp, yytname[yytype]);
Lev Walkinf15320b2004-06-03 03:38:44 +00003962
Lev Walkin609ccbb2004-09-04 04:49:21 +00003963 if (yycount < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003964 {
Lev Walkin609ccbb2004-09-04 04:49:21 +00003965 yycount = 0;
3966 for (yyx = yyn < 0 ? -yyn : 0;
3967 yyx < (int) (sizeof (yytname) / sizeof (char *));
3968 yyx++)
3969 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
Lev Walkinf15320b2004-06-03 03:38:44 +00003970 {
Lev Walkin609ccbb2004-09-04 04:49:21 +00003971 const char *yyq = ! yycount ? ", expecting " : " or ";
3972 yyp = yystpcpy (yyp, yyq);
3973 yyp = yystpcpy (yyp, yytname[yyx]);
3974 yycount++;
Lev Walkinf15320b2004-06-03 03:38:44 +00003975 }
3976 }
Lev Walkin609ccbb2004-09-04 04:49:21 +00003977 yyerror (yymsg);
3978 YYSTACK_FREE (yymsg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003979 }
3980 else
Lev Walkin609ccbb2004-09-04 04:49:21 +00003981 yyerror ("parse error; also virtual memory exhausted");
Lev Walkinf15320b2004-06-03 03:38:44 +00003982 }
3983 else
3984#endif /* YYERROR_VERBOSE */
Lev Walkin609ccbb2004-09-04 04:49:21 +00003985 yyerror ("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003986 }
Lev Walkinf15320b2004-06-03 03:38:44 +00003987 goto yyerrlab1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003988
Lev Walkin609ccbb2004-09-04 04:49:21 +00003989
3990/*----------------------------------------------------.
3991| yyerrlab1 -- error raised explicitly by an action. |
3992`----------------------------------------------------*/
3993yyerrlab1:
Lev Walkinf15320b2004-06-03 03:38:44 +00003994 if (yyerrstatus == 3)
3995 {
Lev Walkin609ccbb2004-09-04 04:49:21 +00003996 /* If just tried and failed to reuse lookahead token after an
3997 error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003998
Lev Walkin609ccbb2004-09-04 04:49:21 +00003999 /* Return failure if at end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00004000 if (yychar == YYEOF)
Lev Walkin609ccbb2004-09-04 04:49:21 +00004001 {
4002 /* Pop the error token. */
4003 YYPOPSTACK;
4004 /* Pop the rest of the stack. */
4005 while (yyssp > yyss)
4006 {
4007 YYDPRINTF ((stderr, "Error: popping "));
4008 YYDSYMPRINT ((stderr,
4009 yystos[*yyssp],
4010 *yyvsp));
4011 YYDPRINTF ((stderr, "\n"));
4012 yydestruct (yystos[*yyssp], *yyvsp);
4013 YYPOPSTACK;
4014 }
4015 YYABORT;
4016 }
Lev Walkinf15320b2004-06-03 03:38:44 +00004017
Lev Walkin609ccbb2004-09-04 04:49:21 +00004018 YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
4019 yychar, yytname[yychar1]));
4020 yydestruct (yychar1, yylval);
Lev Walkinf15320b2004-06-03 03:38:44 +00004021 yychar = YYEMPTY;
4022 }
4023
Lev Walkin609ccbb2004-09-04 04:49:21 +00004024 /* Else will try to reuse lookahead token after shifting the error
4025 token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00004026
Lev Walkin609ccbb2004-09-04 04:49:21 +00004027 yyerrstatus = 3; /* Each real token shifted decrements this. */
Lev Walkinf15320b2004-06-03 03:38:44 +00004028
Lev Walkin609ccbb2004-09-04 04:49:21 +00004029 for (;;)
Lev Walkinb4fcdd22004-08-13 12:35:09 +00004030 {
Lev Walkin609ccbb2004-09-04 04:49:21 +00004031 yyn = yypact[yystate];
4032 if (yyn != YYPACT_NINF)
4033 {
4034 yyn += YYTERROR;
4035 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
4036 {
4037 yyn = yytable[yyn];
4038 if (0 < yyn)
4039 break;
4040 }
4041 }
4042
4043 /* Pop the current state because it cannot handle the error token. */
4044 if (yyssp == yyss)
4045 YYABORT;
4046
4047 YYDPRINTF ((stderr, "Error: popping "));
4048 YYDSYMPRINT ((stderr,
4049 yystos[*yyssp], *yyvsp));
4050 YYDPRINTF ((stderr, "\n"));
4051
4052 yydestruct (yystos[yystate], *yyvsp);
4053 yyvsp--;
4054 yystate = *--yyssp;
4055
4056
4057#if YYDEBUG
4058 if (yydebug)
4059 {
4060 short *yyssp1 = yyss - 1;
4061 YYFPRINTF (stderr, "Error: state stack now");
4062 while (yyssp1 != yyssp)
4063 YYFPRINTF (stderr, " %d", *++yyssp1);
4064 YYFPRINTF (stderr, "\n");
4065 }
Lev Walkinb4fcdd22004-08-13 12:35:09 +00004066#endif
Lev Walkinb4fcdd22004-08-13 12:35:09 +00004067 }
Lev Walkinf15320b2004-06-03 03:38:44 +00004068
4069 if (yyn == YYFINAL)
4070 YYACCEPT;
4071
Lev Walkin609ccbb2004-09-04 04:49:21 +00004072 YYDPRINTF ((stderr, "Shifting error token, "));
Lev Walkinf15320b2004-06-03 03:38:44 +00004073
4074 *++yyvsp = yylval;
Lev Walkin609ccbb2004-09-04 04:49:21 +00004075
Lev Walkinf15320b2004-06-03 03:38:44 +00004076
4077 yystate = yyn;
4078 goto yynewstate;
4079
Lev Walkinc3b72e92004-06-03 05:07:41 +00004080
Lev Walkin609ccbb2004-09-04 04:49:21 +00004081/*-------------------------------------.
4082| yyacceptlab -- YYACCEPT comes here. |
4083`-------------------------------------*/
4084yyacceptlab:
4085 yyresult = 0;
4086 goto yyreturn;
4087
4088/*-----------------------------------.
4089| yyabortlab -- YYABORT comes here. |
4090`-----------------------------------*/
4091yyabortlab:
4092 yyresult = 1;
4093 goto yyreturn;
4094
4095#ifndef yyoverflow
4096/*----------------------------------------------.
4097| yyoverflowlab -- parser overflow comes here. |
4098`----------------------------------------------*/
4099yyoverflowlab:
4100 yyerror ("parser stack overflow");
4101 yyresult = 2;
4102 /* Fall through. */
Lev Walkinc3b72e92004-06-03 05:07:41 +00004103#endif
Lev Walkin609ccbb2004-09-04 04:49:21 +00004104
4105yyreturn:
4106#ifndef yyoverflow
4107 if (yyss != yyssa)
4108 YYSTACK_FREE (yyss);
4109#endif
4110 return yyresult;
Lev Walkinf15320b2004-06-03 03:38:44 +00004111}
Lev Walkin609ccbb2004-09-04 04:49:21 +00004112
4113
4114#line 1931 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00004115
4116
4117
4118/*
4119 * Convert Xstring ('0101'B or '5'H) to the binary vector.
4120 */
4121static asn1p_value_t *
4122_convert_bitstring2binary(char *str, int base) {
4123 asn1p_value_t *val;
4124 int slen;
4125 int memlen;
4126 int baselen;
4127 int bits;
4128 uint8_t *binary_vector;
4129 uint8_t *bv_ptr;
4130 uint8_t cur_val;
4131
4132 assert(str);
4133 assert(str[0] == '\'');
4134
4135 switch(base) {
4136 case 'B':
4137 baselen = 1;
4138 break;
4139 case 'H':
4140 baselen = 4;
4141 break;
4142 default:
4143 assert(base == 'B' || base == 'H');
4144 errno = EINVAL;
4145 return NULL;
4146 }
4147
4148 slen = strlen(str);
4149 assert(str[slen - 1] == base);
4150 assert(str[slen - 2] == '\'');
4151
4152 memlen = slen / (8 / baselen); /* Conservative estimate */
4153
4154 bv_ptr = binary_vector = malloc(memlen + 1);
4155 if(bv_ptr == NULL)
4156 /* ENOMEM */
4157 return NULL;
4158
4159 cur_val = 0;
4160 bits = 0;
4161 while(*(++str) != '\'') {
4162 switch(baselen) {
4163 case 1:
4164 switch(*str) {
4165 case '1':
4166 cur_val |= 1 << (7 - (bits % 8));
4167 case '0':
4168 break;
4169 default:
4170 assert(!"_y UNREACH1");
4171 case ' ': case '\r': case '\n':
4172 continue;
4173 }
4174 break;
4175 case 4:
4176 switch(*str) {
4177 case '0': case '1': case '2': case '3': case '4':
4178 case '5': case '6': case '7': case '8': case '9':
4179 cur_val |= (*str - '0') << (4 - (bits % 8));
4180 break;
4181 case 'A': case 'B': case 'C':
4182 case 'D': case 'E': case 'F':
4183 cur_val |= ((*str - 'A') + 10)
4184 << (4 - (bits % 8));
4185 break;
4186 default:
4187 assert(!"_y UNREACH2");
4188 case ' ': case '\r': case '\n':
4189 continue;
4190 }
4191 break;
4192 }
4193
4194 bits += baselen;
4195 if((bits % 8) == 0) {
4196 *bv_ptr++ = cur_val;
4197 cur_val = 0;
4198 }
4199 }
4200
4201 *bv_ptr = cur_val;
4202 assert((bv_ptr - binary_vector) <= memlen);
4203
4204 val = asn1p_value_frombits(binary_vector, bits, 0);
4205 if(val == NULL) {
4206 free(binary_vector);
4207 }
4208
4209 return val;
4210}
4211
4212extern char *asn1p_text;
4213
4214int
4215yyerror(const char *msg) {
4216 fprintf(stderr,
4217 "ASN.1 grammar parse error "
4218 "near line %d (token \"%s\"): %s\n",
4219 asn1p_lineno, asn1p_text, msg);
4220 return -1;
4221}
4222
4223
Lev Walkin609ccbb2004-09-04 04:49:21 +00004224