blob: 520d20d76edefbf17e1759717a466dd253c843cb [file] [log] [blame]
vlm044f7442004-09-04 04:49:21 +00001/* A Bison parser, made from asn1p_y.y, by GNU bison 1.75. */
vlmfa67ddc2004-06-03 03:38:44 +00002
vlm044f7442004-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.
vlmfa67ddc2004-06-03 03:38:44 +00005
vlm044f7442004-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.
vlmfa67ddc2004-06-03 03:38:44 +000010
vlm044f7442004-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. */
vlmfa67ddc2004-06-03 03:38:44 +000047#define yyparse asn1p_parse
vlm044f7442004-09-04 04:49:21 +000048#define yylex asn1p_lex
vlmfa67ddc2004-06-03 03:38:44 +000049#define yyerror asn1p_error
vlm044f7442004-09-04 04:49:21 +000050#define yylval asn1p_lval
51#define yychar asn1p_char
vlmfa67ddc2004-06-03 03:38:44 +000052#define yydebug asn1p_debug
53#define yynerrs asn1p_nerrs
vlmfa67ddc2004-06-03 03:38:44 +000054
vlm044f7442004-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. */
vlmfa67ddc2004-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);
vlm9283dbe2004-08-18 04:59:12 +0000285void asn1p_lexer_hack_push_encoding_control(void);
vlmfa67ddc2004-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
vlm044f7442004-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
vlm9283dbe2004-08-18 04:59:12 +0000333#line 58 "asn1p_y.y"
vlmfa67ddc2004-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;
vlm044f7442004-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
vlmfa67ddc2004-06-03 03:38:44 +0000370#endif
371
vlm044f7442004-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. */
vlmfa67ddc2004-06-03 03:38:44 +0000385
386
vlm044f7442004-09-04 04:49:21 +0000387/* Line 213 of /usr/local/share/bison/yacc.c. */
388#line 389 "asn1p_y.c"
vlmfa67ddc2004-06-03 03:38:44 +0000389
vlm044f7442004-09-04 04:49:21 +0000390#if ! defined (yyoverflow) || YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +0000391
vlm044f7442004-09-04 04:49:21 +0000392/* The parser invokes alloca or malloc; define the necessary symbols. */
vlmfa67ddc2004-06-03 03:38:44 +0000393
vlm044f7442004-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
vlmfa67ddc2004-06-03 03:38:44 +0000407
vlm044f7442004-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)
vlmfa67ddc2004-06-03 03:38:44 +0000475
476#endif
477
vlm044f7442004-09-04 04:49:21 +0000478#if defined (__STDC__) || defined (__cplusplus)
479 typedef signed char yysigned_char;
vlmfa67ddc2004-06-03 03:38:44 +0000480#else
vlm044f7442004-09-04 04:49:21 +0000481 typedef short yysigned_char;
vlmfa67ddc2004-06-03 03:38:44 +0000482#endif
483
vlm044f7442004-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
vlmfa67ddc2004-06-03 03:38:44 +00001195
1196#define yyerrok (yyerrstatus = 0)
1197#define yyclearin (yychar = YYEMPTY)
1198#define YYEMPTY -2
1199#define YYEOF 0
vlm044f7442004-09-04 04:49:21 +00001200
vlmfa67ddc2004-06-03 03:38:44 +00001201#define YYACCEPT goto yyacceptlab
vlm044f7442004-09-04 04:49:21 +00001202#define YYABORT goto yyabortlab
vlmfa67ddc2004-06-03 03:38:44 +00001203#define YYERROR goto yyerrlab1
vlm044f7442004-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.
vlmfa67ddc2004-06-03 03:38:44 +00001207 Once GCC version 2 has supplanted version 1, this can go. */
vlm044f7442004-09-04 04:49:21 +00001208
vlmfa67ddc2004-06-03 03:38:44 +00001209#define YYFAIL goto yyerrlab
vlm044f7442004-09-04 04:49:21 +00001210
vlmfa67ddc2004-06-03 03:38:44 +00001211#define YYRECOVERING() (!!yyerrstatus)
vlm044f7442004-09-04 04:49:21 +00001212
1213#define YYBACKUP(Token, Value) \
vlmfa67ddc2004-06-03 03:38:44 +00001214do \
1215 if (yychar == YYEMPTY && yylen == 1) \
vlm044f7442004-09-04 04:49:21 +00001216 { \
1217 yychar = (Token); \
1218 yylval = (Value); \
vlmfa67ddc2004-06-03 03:38:44 +00001219 yychar1 = YYTRANSLATE (yychar); \
1220 YYPOPSTACK; \
1221 goto yybackup; \
1222 } \
1223 else \
vlm044f7442004-09-04 04:49:21 +00001224 { \
1225 yyerror ("syntax error: cannot back up"); \
1226 YYERROR; \
1227 } \
vlmfa67ddc2004-06-03 03:38:44 +00001228while (0)
1229
1230#define YYTERROR 1
1231#define YYERRCODE 256
1232
vlm044f7442004-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;
vlmfa67ddc2004-06-03 03:38:44 +00001242#endif
1243
vlm044f7442004-09-04 04:49:21 +00001244/* YYLEX -- calling `yylex' with the right arguments. */
vlmfa67ddc2004-06-03 03:38:44 +00001245
vlm044f7442004-09-04 04:49:21 +00001246#define YYLEX yylex ()
vlmfa67ddc2004-06-03 03:38:44 +00001247
vlm044f7442004-09-04 04:49:21 +00001248/* Enable debugging if requested. */
1249#if YYDEBUG
vlmfa67ddc2004-06-03 03:38:44 +00001250
vlm044f7442004-09-04 04:49:21 +00001251# ifndef YYFPRINTF
1252# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1253# define YYFPRINTF fprintf
1254# endif
vlmfa67ddc2004-06-03 03:38:44 +00001255
vlm044f7442004-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 */
vlmfa67ddc2004-06-03 03:38:44 +00001273
vlm044f7442004-09-04 04:49:21 +00001274/* YYINITDEPTH -- initial size of the parser's stacks. */
vlmfa67ddc2004-06-03 03:38:44 +00001275#ifndef YYINITDEPTH
vlm044f7442004-09-04 04:49:21 +00001276# define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +00001277#endif
1278
vlm044f7442004-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. */
vlmfa67ddc2004-06-03 03:38:44 +00001285
1286#if YYMAXDEPTH == 0
vlm044f7442004-09-04 04:49:21 +00001287# undef YYMAXDEPTH
vlmfa67ddc2004-06-03 03:38:44 +00001288#endif
1289
1290#ifndef YYMAXDEPTH
vlm044f7442004-09-04 04:49:21 +00001291# define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +00001292#endif
vlm044f7442004-09-04 04:49:21 +00001293
vlmfa67ddc2004-06-03 03:38:44 +00001294
vlmfa67ddc2004-06-03 03:38:44 +00001295
vlm044f7442004-09-04 04:49:21 +00001296#if YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00001297
vlm044f7442004-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
vlm827ac182004-06-03 05:07:41 +00001310{
vlm044f7442004-09-04 04:49:21 +00001311 register const char *yys = yystr;
vlm827ac182004-06-03 05:07:41 +00001312
vlm044f7442004-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 }
vlm827ac182004-06-03 05:07:41 +00001410}
vlm827ac182004-06-03 05:07:41 +00001411
vlmfa67ddc2004-06-03 03:38:44 +00001412
vlmfa67ddc2004-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
vlm044f7442004-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 */
vlmfa67ddc2004-06-03 03:38:44 +00001432
1433/* Prevent warning if -Wstrict-prototypes. */
1434#ifdef __GNUC__
vlm044f7442004-09-04 04:49:21 +00001435# ifdef YYPARSE_PARAM
vlmfa67ddc2004-06-03 03:38:44 +00001436int yyparse (void *);
vlm044f7442004-09-04 04:49:21 +00001437# else
vlmfa67ddc2004-06-03 03:38:44 +00001438int yyparse (void);
vlm044f7442004-09-04 04:49:21 +00001439# endif
vlm6f5eb0b2004-08-13 12:35:09 +00001440#endif
vlm044f7442004-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
vlm827ac182004-06-03 05:07:41 +00001452
vlmfa67ddc2004-06-03 03:38:44 +00001453int
vlm044f7442004-09-04 04:49:21 +00001454yyparse (YYPARSE_PARAM_ARG)
vlmfa67ddc2004-06-03 03:38:44 +00001455 YYPARSE_PARAM_DECL
1456{
vlm044f7442004-09-04 04:49:21 +00001457
vlmfa67ddc2004-06-03 03:38:44 +00001458 register int yystate;
1459 register int yyn;
vlm044f7442004-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;
vlmfa67ddc2004-06-03 03:38:44 +00001477 register short *yyssp;
vlm044f7442004-09-04 04:49:21 +00001478
1479 /* The semantic value stack. */
1480 YYSTYPE yyvsa[YYINITDEPTH];
1481 YYSTYPE *yyvs = yyvsa;
vlmfa67ddc2004-06-03 03:38:44 +00001482 register YYSTYPE *yyvsp;
vlmfa67ddc2004-06-03 03:38:44 +00001483
vlmfa67ddc2004-06-03 03:38:44 +00001484
vlmfa67ddc2004-06-03 03:38:44 +00001485
vlmfa67ddc2004-06-03 03:38:44 +00001486#define YYPOPSTACK (yyvsp--, yyssp--)
vlmfa67ddc2004-06-03 03:38:44 +00001487
vlm044f7442004-09-04 04:49:21 +00001488 YYSIZE_T yystacksize = YYINITDEPTH;
vlmfa67ddc2004-06-03 03:38:44 +00001489
vlm044f7442004-09-04 04:49:21 +00001490 /* The variables used to return semantic value and location from the
1491 action routines. */
1492 YYSTYPE yyval;
vlmfa67ddc2004-06-03 03:38:44 +00001493
vlmfa67ddc2004-06-03 03:38:44 +00001494
vlm044f7442004-09-04 04:49:21 +00001495 /* When reducing, the number of symbols on the RHS of the reduced
1496 rule. */
vlmfa67ddc2004-06-03 03:38:44 +00001497 int yylen;
1498
vlm044f7442004-09-04 04:49:21 +00001499 YYDPRINTF ((stderr, "Starting parse\n"));
vlmfa67ddc2004-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
vlm044f7442004-09-04 04:49:21 +00001511 yyssp = yyss;
vlmfa67ddc2004-06-03 03:38:44 +00001512 yyvsp = yyvs;
vlmfa67ddc2004-06-03 03:38:44 +00001513
vlm044f7442004-09-04 04:49:21 +00001514 goto yysetstate;
vlmfa67ddc2004-06-03 03:38:44 +00001515
vlm044f7442004-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;
vlmfa67ddc2004-06-03 03:38:44 +00001527
1528 if (yyssp >= yyss + yystacksize - 1)
1529 {
vlmfa67ddc2004-06-03 03:38:44 +00001530 /* Get the current used size of the three stacks, in elements. */
vlm044f7442004-09-04 04:49:21 +00001531 YYSIZE_T yysize = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001532
1533#ifdef yyoverflow
vlm044f7442004-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;
vlmfa67ddc2004-06-03 03:38:44 +00001540
vlm044f7442004-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 }
vlmfa67ddc2004-06-03 03:38:44 +00001555#else /* no yyoverflow */
vlm044f7442004-09-04 04:49:21 +00001556# ifndef YYSTACK_RELOCATE
1557 goto yyoverflowlab;
1558# else
vlmfa67ddc2004-06-03 03:38:44 +00001559 /* Extend the stack our own way. */
1560 if (yystacksize >= YYMAXDEPTH)
vlm044f7442004-09-04 04:49:21 +00001561 goto yyoverflowlab;
vlmfa67ddc2004-06-03 03:38:44 +00001562 yystacksize *= 2;
1563 if (yystacksize > YYMAXDEPTH)
1564 yystacksize = YYMAXDEPTH;
vlm044f7442004-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
vlmfa67ddc2004-06-03 03:38:44 +00001580#endif /* no yyoverflow */
1581
vlm044f7442004-09-04 04:49:21 +00001582 yyssp = yyss + yysize - 1;
1583 yyvsp = yyvs + yysize - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001584
vlm044f7442004-09-04 04:49:21 +00001585
1586 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1587 (unsigned long int) yystacksize));
vlmfa67ddc2004-06-03 03:38:44 +00001588
1589 if (yyssp >= yyss + yystacksize - 1)
1590 YYABORT;
1591 }
1592
vlm044f7442004-09-04 04:49:21 +00001593 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
vlmfa67ddc2004-06-03 03:38:44 +00001594
1595 goto yybackup;
vlm044f7442004-09-04 04:49:21 +00001596
1597/*-----------.
1598| yybackup. |
1599`-----------*/
1600yybackup:
vlmfa67ddc2004-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];
vlm044f7442004-09-04 04:49:21 +00001609 if (yyn == YYPACT_NINF)
vlmfa67ddc2004-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 {
vlm044f7442004-09-04 04:49:21 +00001619 YYDPRINTF ((stderr, "Reading a token: "));
vlmfa67ddc2004-06-03 03:38:44 +00001620 yychar = YYLEX;
1621 }
1622
vlm044f7442004-09-04 04:49:21 +00001623 /* Convert token to internal form (in yychar1) for indexing tables with. */
vlmfa67ddc2004-06-03 03:38:44 +00001624
vlm044f7442004-09-04 04:49:21 +00001625 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001626 {
1627 yychar1 = 0;
vlm044f7442004-09-04 04:49:21 +00001628 yychar = YYEOF; /* Don't call YYLEX any more. */
vlmfa67ddc2004-06-03 03:38:44 +00001629
vlm044f7442004-09-04 04:49:21 +00001630 YYDPRINTF ((stderr, "Now at end of input.\n"));
vlmfa67ddc2004-06-03 03:38:44 +00001631 }
1632 else
1633 {
vlm044f7442004-09-04 04:49:21 +00001634 yychar1 = YYTRANSLATE (yychar);
vlmfa67ddc2004-06-03 03:38:44 +00001635
vlm044f7442004-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"));
vlmfa67ddc2004-06-03 03:38:44 +00001641 }
1642
vlm044f7442004-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. */
vlmfa67ddc2004-06-03 03:38:44 +00001645 yyn += yychar1;
vlm044f7442004-09-04 04:49:21 +00001646 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001647 goto yydefault;
vlmfa67ddc2004-06-03 03:38:44 +00001648 yyn = yytable[yyn];
vlm044f7442004-09-04 04:49:21 +00001649 if (yyn <= 0)
vlmfa67ddc2004-06-03 03:38:44 +00001650 {
vlm044f7442004-09-04 04:49:21 +00001651 if (yyn == 0 || yyn == YYTABLE_NINF)
vlmfa67ddc2004-06-03 03:38:44 +00001652 goto yyerrlab;
1653 yyn = -yyn;
1654 goto yyreduce;
1655 }
vlmfa67ddc2004-06-03 03:38:44 +00001656
1657 if (yyn == YYFINAL)
1658 YYACCEPT;
1659
1660 /* Shift the lookahead token. */
vlm044f7442004-09-04 04:49:21 +00001661 YYDPRINTF ((stderr, "Shifting token %d (%s), ",
1662 yychar, yytname[yychar1]));
vlmfa67ddc2004-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;
vlmfa67ddc2004-06-03 03:38:44 +00001669
vlm044f7442004-09-04 04:49:21 +00001670
1671 /* Count tokens shifted since error; after three, turn off error
1672 status. */
1673 if (yyerrstatus)
1674 yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001675
1676 yystate = yyn;
1677 goto yynewstate;
1678
vlm6f5eb0b2004-08-13 12:35:09 +00001679
vlm044f7442004-09-04 04:49:21 +00001680/*-----------------------------------------------------------.
1681| yydefault -- do the default action for the current state. |
1682`-----------------------------------------------------------*/
1683yydefault:
vlmfa67ddc2004-06-03 03:38:44 +00001684 yyn = yydefact[yystate];
1685 if (yyn == 0)
1686 goto yyerrlab;
vlm044f7442004-09-04 04:49:21 +00001687 goto yyreduce;
vlmfa67ddc2004-06-03 03:38:44 +00001688
vlm044f7442004-09-04 04:49:21 +00001689
1690/*-----------------------------.
1691| yyreduce -- Do a reduction. |
1692`-----------------------------*/
vlmfa67ddc2004-06-03 03:38:44 +00001693yyreduce:
vlm044f7442004-09-04 04:49:21 +00001694 /* yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001695 yylen = yyr2[yyn];
vlmfa67ddc2004-06-03 03:38:44 +00001696
vlm044f7442004-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. */
vlmfa67ddc2004-06-03 03:38:44 +00001712 if (yydebug)
1713 {
vlm044f7442004-09-04 04:49:21 +00001714 int yyi;
vlmfa67ddc2004-06-03 03:38:44 +00001715
vlm044f7442004-09-04 04:49:21 +00001716 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
1717 yyn - 1, yyrline[yyn]);
vlmfa67ddc2004-06-03 03:38:44 +00001718
1719 /* Print the symbols being reduced, and their result. */
vlm044f7442004-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]]);
vlmfa67ddc2004-06-03 03:38:44 +00001723 }
1724#endif
vlm044f7442004-09-04 04:49:21 +00001725 switch (yyn)
1726 {
1727 case 2:
vlm5f0128b2004-08-20 13:25:29 +00001728#line 299 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001729 {
vlm6f5eb0b2004-08-13 12:35:09 +00001730 *(void **)param = yyvsp[0].a_grammar;
vlm044f7442004-09-04 04:49:21 +00001731 }
1732 break;
1733
1734 case 3:
vlm5f0128b2004-08-20 13:25:29 +00001735#line 305 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001736 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00001740 }
1741 break;
1742
1743 case 4:
vlm5f0128b2004-08-20 13:25:29 +00001744#line 310 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001745 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00001748 }
1749 break;
1750
1751 case 5:
vlm5f0128b2004-08-20 13:25:29 +00001752#line 331 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001753 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00001766 }
1767 break;
1768
1769 case 6:
vlm5f0128b2004-08-20 13:25:29 +00001770#line 352 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001771 { yyval.a_oid = 0; }
1772 break;
1773
1774 case 7:
vlm5f0128b2004-08-20 13:25:29 +00001775#line 353 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001776 { yyval.a_oid = yyvsp[0].a_oid; }
1777 break;
1778
1779 case 8:
vlm5f0128b2004-08-20 13:25:29 +00001780#line 357 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001781 {
vlmfa67ddc2004-06-03 03:38:44 +00001782 yyval.a_oid = yyvsp[-1].a_oid;
vlm044f7442004-09-04 04:49:21 +00001783 }
1784 break;
1785
1786 case 9:
vlm5f0128b2004-08-20 13:25:29 +00001787#line 360 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001788 {
vlmfa67ddc2004-06-03 03:38:44 +00001789 yyval.a_oid = 0;
vlm044f7442004-09-04 04:49:21 +00001790 }
1791 break;
1792
1793 case 10:
vlm5f0128b2004-08-20 13:25:29 +00001794#line 366 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001795 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00001800 }
1801 break;
1802
1803 case 11:
vlm5f0128b2004-08-20 13:25:29 +00001804#line 372 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001805 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00001810 }
1811 break;
1812
1813 case 12:
vlm5f0128b2004-08-20 13:25:29 +00001814#line 381 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001815 { /* iso */
vlmfa67ddc2004-06-03 03:38:44 +00001816 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1817 yyval.a_oid_arc.number = -1;
vlm044f7442004-09-04 04:49:21 +00001818 }
1819 break;
1820
1821 case 13:
vlm5f0128b2004-08-20 13:25:29 +00001822#line 385 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001823 { /* iso(1) */
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00001826 }
1827 break;
1828
1829 case 14:
vlm5f0128b2004-08-20 13:25:29 +00001830#line 389 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001831 { /* 1 */
vlmfa67ddc2004-06-03 03:38:44 +00001832 yyval.a_oid_arc.name = 0;
1833 yyval.a_oid_arc.number = yyvsp[0].a_int;
vlm044f7442004-09-04 04:49:21 +00001834 }
1835 break;
1836
1837 case 15:
vlm5f0128b2004-08-20 13:25:29 +00001838#line 399 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001839 { yyval.a_module_flags = MSF_NOFLAGS; }
1840 break;
1841
1842 case 16:
vlm5f0128b2004-08-20 13:25:29 +00001843#line 400 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001844 {
vlmfa67ddc2004-06-03 03:38:44 +00001845 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm044f7442004-09-04 04:49:21 +00001846 }
1847 break;
1848
1849 case 17:
vlm5f0128b2004-08-20 13:25:29 +00001850#line 409 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001851 {
vlmfa67ddc2004-06-03 03:38:44 +00001852 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm044f7442004-09-04 04:49:21 +00001853 }
1854 break;
1855
1856 case 18:
vlm5f0128b2004-08-20 13:25:29 +00001857#line 412 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001858 {
vlmfa67ddc2004-06-03 03:38:44 +00001859 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
vlm044f7442004-09-04 04:49:21 +00001860 }
1861 break;
1862
1863 case 19:
vlm5f0128b2004-08-20 13:25:29 +00001864#line 421 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001865 {
vlmfa67ddc2004-06-03 03:38:44 +00001866 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
vlm044f7442004-09-04 04:49:21 +00001867 }
1868 break;
1869
1870 case 20:
vlm5f0128b2004-08-20 13:25:29 +00001871#line 424 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001872 {
vlmfa67ddc2004-06-03 03:38:44 +00001873 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
vlm044f7442004-09-04 04:49:21 +00001874 }
1875 break;
1876
1877 case 21:
vlm5f0128b2004-08-20 13:25:29 +00001878#line 427 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001879 {
vlmfa67ddc2004-06-03 03:38:44 +00001880 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
vlm044f7442004-09-04 04:49:21 +00001881 }
1882 break;
1883
1884 case 22:
vlm5f0128b2004-08-20 13:25:29 +00001885#line 430 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001886 {
vlmfa67ddc2004-06-03 03:38:44 +00001887 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
vlm044f7442004-09-04 04:49:21 +00001888 }
1889 break;
1890
1891 case 23:
vlm5f0128b2004-08-20 13:25:29 +00001892#line 434 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001893 {
vlm9283dbe2004-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);
vlm044f7442004-09-04 04:49:21 +00001907 }
1908 break;
1909
1910 case 24:
vlm5f0128b2004-08-20 13:25:29 +00001911#line 455 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001912 { yyval.a_module = 0; }
1913 break;
1914
1915 case 25:
vlm5f0128b2004-08-20 13:25:29 +00001916#line 456 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001917 {
vlmfa67ddc2004-06-03 03:38:44 +00001918 yyval.a_module = yyvsp[0].a_module;
vlm044f7442004-09-04 04:49:21 +00001919 }
1920 break;
1921
1922 case 26:
vlm5f0128b2004-08-20 13:25:29 +00001923#line 465 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001924 {
vlm9283dbe2004-08-18 04:59:12 +00001925 yyval.a_module = yyvsp[0].a_module;
vlm044f7442004-09-04 04:49:21 +00001926 }
1927 break;
1928
1929 case 27:
vlm5f0128b2004-08-20 13:25:29 +00001930#line 468 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001931 {
vlmfa67ddc2004-06-03 03:38:44 +00001932 yyval.a_module = yyvsp[-1].a_module;
1933
vlm9283dbe2004-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
vlmfa67ddc2004-06-03 03:38:44 +00001940#ifdef MY_IMPORT
1941#error MY_IMPORT DEFINED ELSEWHERE!
1942#endif
1943#define MY_IMPORT(foo,field) do { \
vlm97ed7152004-08-13 12:31:09 +00001944 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
vlmfa67ddc2004-06-03 03:38:44 +00001945 TQ_ADD(&(yyval.a_module->foo), \
1946 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1947 field); \
vlm97ed7152004-08-13 12:31:09 +00001948 } \
1949 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1950 } while(0)
vlmfa67ddc2004-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
vlm044f7442004-09-04 04:49:21 +00001957 }
1958 break;
1959
1960 case 28:
vlm5f0128b2004-08-20 13:25:29 +00001961#line 501 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001962 {
vlmfa67ddc2004-06-03 03:38:44 +00001963 yyval.a_module = yyvsp[0].a_module;
vlm044f7442004-09-04 04:49:21 +00001964 }
1965 break;
1966
1967 case 29:
vlm5f0128b2004-08-20 13:25:29 +00001968#line 504 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001969 {
vlmfa67ddc2004-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 }
vlm044f7442004-09-04 04:49:21 +00001977 }
1978 break;
1979
1980 case 30:
vlm5f0128b2004-08-20 13:25:29 +00001981#line 513 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001982 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00001988 }
1989 break;
1990
1991 case 31:
vlm5f0128b2004-08-20 13:25:29 +00001992#line 520 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00001993 {
vlm9283dbe2004-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);
vlm044f7442004-09-04 04:49:21 +00001999 }
2000 break;
2001
2002 case 32:
vlm5f0128b2004-08-20 13:25:29 +00002003#line 533 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002004 {
vlm9283dbe2004-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);
vlm044f7442004-09-04 04:49:21 +00002010 }
2011 break;
2012
2013 case 33:
vlm5f0128b2004-08-20 13:25:29 +00002014#line 541 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002015 { asn1p_lexer_hack_push_encoding_control(); }
2016 break;
2017
2018 case 34:
vlm5f0128b2004-08-20 13:25:29 +00002019#line 542 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002020 {
vlm9283dbe2004-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;
vlm044f7442004-09-04 04:49:21 +00002027 }
2028 break;
2029
2030 case 35:
vlm5f0128b2004-08-20 13:25:29 +00002031#line 554 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002032 {
vlmfa67ddc2004-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");
vlm044f7442004-09-04 04:49:21 +00002037 }
2038 break;
2039
2040 case 36:
vlm5f0128b2004-08-20 13:25:29 +00002041#line 568 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002042 {
vlmfa67ddc2004-06-03 03:38:44 +00002043 yyval.a_module = yyvsp[-1].a_module;
vlm044f7442004-09-04 04:49:21 +00002044 }
2045 break;
2046
2047 case 37:
vlm5f0128b2004-08-20 13:25:29 +00002048#line 574 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002049 {
vlmfa67ddc2004-06-03 03:38:44 +00002050 return yyerror("Empty IMPORTS list");
vlm044f7442004-09-04 04:49:21 +00002051 }
2052 break;
2053
2054 case 38:
vlm5f0128b2004-08-20 13:25:29 +00002055#line 580 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002056 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002060 }
2061 break;
2062
2063 case 39:
vlm5f0128b2004-08-20 13:25:29 +00002064#line 585 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002065 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002068 }
2069 break;
2070
2071 case 40:
vlm5f0128b2004-08-20 13:25:29 +00002072#line 592 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002073 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002078 }
2079 break;
2080
2081 case 41:
vlm5f0128b2004-08-20 13:25:29 +00002082#line 601 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002083 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002087 }
2088 break;
2089
2090 case 42:
vlm5f0128b2004-08-20 13:25:29 +00002091#line 606 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002092 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002095 }
2096 break;
2097
2098 case 43:
vlm5f0128b2004-08-20 13:25:29 +00002099#line 613 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002100 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002105 }
2106 break;
2107
2108 case 44:
vlm5f0128b2004-08-20 13:25:29 +00002109#line 619 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002110 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002115 }
2116 break;
2117
2118 case 45:
vlm5f0128b2004-08-20 13:25:29 +00002119#line 628 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002120 {
vlmfa67ddc2004-06-03 03:38:44 +00002121 yyval.a_xports = yyvsp[-1].a_xports;
vlm044f7442004-09-04 04:49:21 +00002122 }
2123 break;
2124
2125 case 46:
vlm5f0128b2004-08-20 13:25:29 +00002126#line 631 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002127 {
vlmfa67ddc2004-06-03 03:38:44 +00002128 yyval.a_xports = 0;
vlm044f7442004-09-04 04:49:21 +00002129 }
2130 break;
2131
2132 case 47:
vlm5f0128b2004-08-20 13:25:29 +00002133#line 634 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002134 {
vlmfa67ddc2004-06-03 03:38:44 +00002135 /* Empty EXPORTS clause effectively prohibits export. */
2136 yyval.a_xports = asn1p_xports_new();
2137 checkmem(yyval.a_xports);
vlm044f7442004-09-04 04:49:21 +00002138 }
2139 break;
2140
2141 case 48:
vlm5f0128b2004-08-20 13:25:29 +00002142#line 642 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002143 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002147 }
2148 break;
2149
2150 case 49:
vlm5f0128b2004-08-20 13:25:29 +00002151#line 647 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002152 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002155 }
2156 break;
2157
2158 case 50:
vlm5f0128b2004-08-20 13:25:29 +00002159#line 654 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002160 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002165 }
2166 break;
2167
2168 case 51:
vlm5f0128b2004-08-20 13:25:29 +00002169#line 660 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002170 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002175 }
2176 break;
2177
2178 case 52:
vlm5f0128b2004-08-20 13:25:29 +00002179#line 670 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002180 {
vlmfa67ddc2004-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
vlm044f7442004-09-04 04:49:21 +00002186 }
2187 break;
2188
2189 case 53:
vlm5f0128b2004-08-20 13:25:29 +00002190#line 680 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002191 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002197 }
2198 break;
2199
2200 case 54:
vlm5f0128b2004-08-20 13:25:29 +00002201#line 687 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002202 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002207 }
2208 break;
2209
2210 case 55:
vlm5f0128b2004-08-20 13:25:29 +00002211#line 696 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002212 { }
2213 break;
2214
2215 case 56:
vlm5f0128b2004-08-20 13:25:29 +00002216#line 697 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002217 {
2218 }
2219 break;
2220
2221 case 57:
vlm5f0128b2004-08-20 13:25:29 +00002222#line 713 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002223 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002230 }
2231 break;
2232
2233 case 58:
vlm5f0128b2004-08-20 13:25:29 +00002234#line 721 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002235 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002241 }
2242 break;
2243
2244 case 59:
vlm5f0128b2004-08-20 13:25:29 +00002245#line 728 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002246 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002251 }
2252 break;
2253
2254 case 60:
vlmec8f6812004-08-22 03:19:54 +00002255#line 744 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002256 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002262 }
2263 break;
2264
2265 case 61:
vlmec8f6812004-08-22 03:19:54 +00002266#line 754 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002267 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002275 }
2276 break;
2277
2278 case 62:
vlmec8f6812004-08-22 03:19:54 +00002279#line 763 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002280 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002287 }
2288 break;
2289
2290 case 63:
vlmec8f6812004-08-22 03:19:54 +00002291#line 774 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002292 {
vlmfa67ddc2004-06-03 03:38:44 +00002293 yyval.a_parg.governor = NULL;
2294 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm044f7442004-09-04 04:49:21 +00002295 }
2296 break;
2297
2298 case 64:
vlmec8f6812004-08-22 03:19:54 +00002299#line 778 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002300 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002306 }
2307 break;
2308
2309 case 65:
vlmec8f6812004-08-22 03:19:54 +00002310#line 785 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002311 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002318 }
2319 break;
2320
2321 case 66:
vlmec8f6812004-08-22 03:19:54 +00002322#line 796 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002323 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002327 }
2328 break;
2329
2330 case 67:
vlmec8f6812004-08-22 03:19:54 +00002331#line 801 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002332 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002335 }
2336 break;
2337
2338 case 68:
vlmec8f6812004-08-22 03:19:54 +00002339#line 808 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002340 {
vlmfa67ddc2004-06-03 03:38:44 +00002341 yyval.a_expr = yyvsp[0].a_expr;
vlm044f7442004-09-04 04:49:21 +00002342 }
2343 break;
2344
2345 case 69:
vlmec8f6812004-08-22 03:19:54 +00002346#line 811 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002347 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002353 }
2354 break;
2355
2356 case 70:
vlmec8f6812004-08-22 03:19:54 +00002357#line 824 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002358 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002362 }
2363 break;
2364
2365 case 71:
vlmec8f6812004-08-22 03:19:54 +00002366#line 829 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002367 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002370 }
2371 break;
2372
2373 case 72:
vlmec8f6812004-08-22 03:19:54 +00002374#line 836 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002375 {
vlmec8f6812004-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;
vlm044f7442004-09-04 04:49:21 +00002381 }
2382 break;
2383
2384 case 73:
vlmec8f6812004-08-22 03:19:54 +00002385#line 843 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002386 {
vlmec8f6812004-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);
vlm044f7442004-09-04 04:49:21 +00002392 }
2393 break;
2394
2395 case 74:
vlmec8f6812004-08-22 03:19:54 +00002396#line 850 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002397 {
vlmec8f6812004-08-22 03:19:54 +00002398 yyval.a_expr = yyvsp[0].a_expr;
vlm044f7442004-09-04 04:49:21 +00002399 }
2400 break;
2401
2402 case 75:
vlmec8f6812004-08-22 03:19:54 +00002403#line 856 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002404 {
vlmec8f6812004-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);
vlm044f7442004-09-04 04:49:21 +00002408 }
2409 break;
2410
2411 case 76:
vlmec8f6812004-08-22 03:19:54 +00002412#line 861 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002413 {
vlmec8f6812004-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);
vlm044f7442004-09-04 04:49:21 +00002416 }
2417 break;
2418
2419 case 77:
vlmec8f6812004-08-22 03:19:54 +00002420#line 868 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002421 {
vlmec8f6812004-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;
vlm044f7442004-09-04 04:49:21 +00002426 }
2427 break;
2428
2429 case 78:
vlmec8f6812004-08-22 03:19:54 +00002430#line 874 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002431 {
vlmec8f6812004-08-22 03:19:54 +00002432 yyval.a_expr = yyvsp[0].a_expr;
vlm044f7442004-09-04 04:49:21 +00002433 }
2434 break;
2435
2436 case 79:
vlmec8f6812004-08-22 03:19:54 +00002437#line 880 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002438 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002444 }
2445 break;
2446
2447 case 80:
vlmec8f6812004-08-22 03:19:54 +00002448#line 890 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002449 { yyval.a_int = 0; }
2450 break;
2451
2452 case 81:
vlmec8f6812004-08-22 03:19:54 +00002453#line 891 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002454 { yyval.a_int = 1; }
2455 break;
2456
2457 case 82:
vlmec8f6812004-08-22 03:19:54 +00002458#line 895 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002459 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002465 }
2466 break;
2467
2468 case 83:
vlmec8f6812004-08-22 03:19:54 +00002469#line 902 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002470 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002473 }
2474 break;
2475
2476 case 84:
vlmec8f6812004-08-22 03:19:54 +00002477#line 909 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002478 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002485 }
2486 break;
2487
2488 case 85:
vlmec8f6812004-08-22 03:19:54 +00002489#line 917 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002490 {
vlmec8f6812004-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;
vlmfa67ddc2004-06-03 03:38:44 +00002494 yyval.a_expr->unique = yyvsp[0].a_int;
vlm044f7442004-09-04 04:49:21 +00002495 }
2496 break;
2497
2498 case 86:
vlmec8f6812004-08-22 03:19:54 +00002499#line 923 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002500 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002514 }
2515 break;
2516
2517 case 87:
vlmec8f6812004-08-22 03:19:54 +00002518#line 941 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002519 { yyval.a_wsynt = 0; }
2520 break;
2521
2522 case 88:
vlmec8f6812004-08-22 03:19:54 +00002523#line 942 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002524 {
vlmfa67ddc2004-06-03 03:38:44 +00002525 yyval.a_wsynt = yyvsp[0].a_wsynt;
vlm044f7442004-09-04 04:49:21 +00002526 }
2527 break;
2528
2529 case 89:
vlmec8f6812004-08-22 03:19:54 +00002530#line 949 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002531 { asn1p_lexer_hack_enable_with_syntax(); }
2532 break;
2533
2534 case 90:
vlmec8f6812004-08-22 03:19:54 +00002535#line 951 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002536 {
vlmfa67ddc2004-06-03 03:38:44 +00002537 yyval.a_wsynt = yyvsp[-1].a_wsynt;
vlm044f7442004-09-04 04:49:21 +00002538 }
2539 break;
2540
2541 case 91:
vlmec8f6812004-08-22 03:19:54 +00002542#line 957 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002543 {
vlmfa67ddc2004-06-03 03:38:44 +00002544 yyval.a_wsynt = asn1p_wsyntx_new();
2545 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm044f7442004-09-04 04:49:21 +00002546 }
2547 break;
2548
2549 case 92:
vlmec8f6812004-08-22 03:19:54 +00002550#line 961 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002551 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002554 }
2555 break;
2556
2557 case 93:
vlmec8f6812004-08-22 03:19:54 +00002558#line 968 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002559 {
vlmfa67ddc2004-06-03 03:38:44 +00002560 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
vlm044f7442004-09-04 04:49:21 +00002561 }
2562 break;
2563
2564 case 94:
vlmec8f6812004-08-22 03:19:54 +00002565#line 971 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002566 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002574 }
2575 break;
2576
2577 case 95:
vlm5f0128b2004-08-20 13:25:29 +00002578#line 983 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002579 {
vlm9283dbe2004-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);
vlm9283dbe2004-08-18 04:59:12 +00002584 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2585 yyval.a_expr->meta_type = AMT_TYPE;
vlm044f7442004-09-04 04:49:21 +00002586 }
2587 break;
2588
2589 case 96:
vlm5f0128b2004-08-20 13:25:29 +00002590#line 991 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002591 {
vlm9283dbe2004-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("...");
vlm9283dbe2004-08-18 04:59:12 +00002595 checkmem(yyval.a_expr->Identifier);
vlm5f0128b2004-08-20 13:25:29 +00002596 yyval.a_expr->value = yyvsp[0].a_value;
vlm9283dbe2004-08-18 04:59:12 +00002597 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2598 yyval.a_expr->meta_type = AMT_TYPE;
vlm044f7442004-09-04 04:49:21 +00002599 }
2600 break;
2601
2602 case 97:
vlm9283dbe2004-08-18 04:59:12 +00002603#line 1000 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002604 {
vlm5f0128b2004-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;
vlm044f7442004-09-04 04:49:21 +00002612 }
2613 break;
2614
2615 case 98:
vlm5f0128b2004-08-20 13:25:29 +00002616#line 1012 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002617 {
vlmec8f6812004-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 }
vlm044f7442004-09-04 04:49:21 +00002634 }
2635 break;
2636
2637 case 99:
vlmec8f6812004-08-22 03:19:54 +00002638#line 1033 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002639 {
vlm5f0128b2004-08-20 13:25:29 +00002640 yyval.a_expr = yyvsp[0].a_expr;
vlm044f7442004-09-04 04:49:21 +00002641 }
2642 break;
2643
2644 case 100:
vlmec8f6812004-08-22 03:19:54 +00002645#line 1036 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002646 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002651 }
2652 break;
2653
2654 case 101:
vlmec8f6812004-08-22 03:19:54 +00002655#line 1042 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002656 {
vlmec8f6812004-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;
vlm044f7442004-09-04 04:49:21 +00002661 }
2662 break;
2663
2664 case 102:
vlmec8f6812004-08-22 03:19:54 +00002665#line 1048 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002666 {
vlmec8f6812004-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;
vlm044f7442004-09-04 04:49:21 +00002671 }
2672 break;
2673
2674 case 103:
vlmec8f6812004-08-22 03:19:54 +00002675#line 1054 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002676 {
vlmec8f6812004-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;
vlm044f7442004-09-04 04:49:21 +00002681 }
2682 break;
2683
2684 case 104:
vlmec8f6812004-08-22 03:19:54 +00002685#line 1060 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002686 {
vlmec8f6812004-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);
vlm044f7442004-09-04 04:49:21 +00002693 }
2694 break;
2695
2696 case 105:
vlmec8f6812004-08-22 03:19:54 +00002697#line 1068 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002698 {
vlmec8f6812004-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);
vlm044f7442004-09-04 04:49:21 +00002705 }
2706 break;
2707
2708 case 106:
vlmec8f6812004-08-22 03:19:54 +00002709#line 1076 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002710 {
vlmec8f6812004-08-22 03:19:54 +00002711 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2712 checkmem(yyval.a_expr);
vlm044f7442004-09-04 04:49:21 +00002713 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002714 yyval.a_expr->meta_type = AMT_TYPE;
vlm044f7442004-09-04 04:49:21 +00002715 }
2716 break;
2717
2718 case 107:
vlmec8f6812004-08-22 03:19:54 +00002719#line 1082 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002720 {
vlmec8f6812004-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);
vlm044f7442004-09-04 04:49:21 +00002728 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002729 yyval.a_expr->meta_type = AMT_TYPE;
vlm044f7442004-09-04 04:49:21 +00002730 }
2731 break;
2732
2733 case 108:
2734#line 1096 "asn1p_y.y"
2735 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002748 }
2749 break;
2750
2751 case 109:
2752#line 1120 "asn1p_y.y"
2753 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002759 }
2760 break;
2761
2762 case 110:
2763#line 1127 "asn1p_y.y"
2764 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002770 }
2771 break;
2772
2773 case 111:
2774#line 1142 "asn1p_y.y"
2775 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002782 }
2783 break;
2784
2785 case 112:
2786#line 1150 "asn1p_y.y"
2787 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002796 }
2797 break;
2798
2799 case 113:
2800#line 1160 "asn1p_y.y"
2801 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002810 }
2811 break;
2812
2813 case 114:
2814#line 1170 "asn1p_y.y"
2815 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002822 }
2823 break;
2824
2825 case 115:
2826#line 1178 "asn1p_y.y"
2827 {
vlmfa67ddc2004-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 }
vlm044f7442004-09-04 04:49:21 +00002845 }
2846 break;
2847
2848 case 116:
2849#line 1200 "asn1p_y.y"
2850 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002857 }
2858 break;
2859
2860 case 117:
2861#line 1208 "asn1p_y.y"
2862 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002868 }
2869 break;
2870
2871 case 120:
2872#line 1222 "asn1p_y.y"
2873 {
vlmfa67ddc2004-06-03 03:38:44 +00002874 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2875 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm044f7442004-09-04 04:49:21 +00002876 }
2877 break;
2878
2879 case 121:
2880#line 1227 "asn1p_y.y"
2881 {
vlmfa67ddc2004-06-03 03:38:44 +00002882 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2883 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm044f7442004-09-04 04:49:21 +00002884 }
2885 break;
2886
2887 case 122:
2888#line 1240 "asn1p_y.y"
2889 {
vlmfa67ddc2004-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;
vlm044f7442004-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:
vlmec8f6812004-08-22 03:19:54 +00002904#line 1251 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00002905 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00002909 }
2910 break;
2911
2912 case 125:
2913#line 1256 "asn1p_y.y"
2914 {
vlmfa67ddc2004-06-03 03:38:44 +00002915 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2916 checkmem(yyval.a_value);
vlm044f7442004-09-04 04:49:21 +00002917 }
2918 break;
2919
2920 case 126:
2921#line 1260 "asn1p_y.y"
2922 {
vlmfa67ddc2004-06-03 03:38:44 +00002923 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2924 checkmem(yyval.a_value);
vlm044f7442004-09-04 04:49:21 +00002925 }
2926 break;
2927
2928 case 127:
2929#line 1264 "asn1p_y.y"
2930 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002933 }
2934 break;
2935
2936 case 128:
2937#line 1268 "asn1p_y.y"
2938 {
vlmfa67ddc2004-06-03 03:38:44 +00002939 yyval.a_value = yyvsp[0].a_value;
vlm044f7442004-09-04 04:49:21 +00002940 }
2941 break;
2942
2943 case 129:
2944#line 1271 "asn1p_y.y"
2945 {
vlm5f0128b2004-08-20 13:25:29 +00002946 yyval.a_value = yyvsp[0].a_value;
vlm044f7442004-09-04 04:49:21 +00002947 }
2948 break;
2949
2950 case 130:
2951#line 1277 "asn1p_y.y"
2952 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002962 }
2963 break;
2964
2965 case 131:
2966#line 1288 "asn1p_y.y"
2967 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002980 }
2981 break;
2982
2983 case 132:
2984#line 1305 "asn1p_y.y"
2985 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00002994 }
2995 break;
2996
2997 case 133:
2998#line 1315 "asn1p_y.y"
2999 {
vlmfa67ddc2004-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;
vlm044f7442004-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:
vlmec8f6812004-08-22 03:19:54 +00003019#line 1331 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003020 { yyval.a_type = ASN_BASIC_NULL; }
3021 break;
3022
3023 case 136:
vlmec8f6812004-08-22 03:19:54 +00003024#line 1332 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003025 { yyval.a_type = ASN_BASIC_REAL; }
3026 break;
3027
3028 case 137:
vlmec8f6812004-08-22 03:19:54 +00003029#line 1333 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003030 { yyval.a_type = yyvsp[0].a_type; }
3031 break;
3032
3033 case 138:
vlmec8f6812004-08-22 03:19:54 +00003034#line 1334 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003035 { yyval.a_type = ASN_BASIC_OCTET_STRING; }
3036 break;
3037
3038 case 139:
vlmec8f6812004-08-22 03:19:54 +00003039#line 1335 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003040 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
3041 break;
3042
3043 case 140:
vlmec8f6812004-08-22 03:19:54 +00003044#line 1336 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003045 { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
3046 break;
3047
3048 case 141:
vlmec8f6812004-08-22 03:19:54 +00003049#line 1337 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003050 { yyval.a_type = ASN_BASIC_EXTERNAL; }
3051 break;
3052
3053 case 142:
vlmec8f6812004-08-22 03:19:54 +00003054#line 1338 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003055 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
3056 break;
3057
3058 case 143:
vlmec8f6812004-08-22 03:19:54 +00003059#line 1339 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003060 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
3061 break;
3062
3063 case 144:
vlmec8f6812004-08-22 03:19:54 +00003064#line 1340 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003065 { yyval.a_type = ASN_BASIC_UTCTime; }
3066 break;
3067
3068 case 145:
vlmec8f6812004-08-22 03:19:54 +00003069#line 1341 "asn1p_y.y"
vlm044f7442004-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:
vlmec8f6812004-08-22 03:19:54 +00003079#line 1349 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003080 { yyval.a_type = ASN_BASIC_ENUMERATED; }
3081 break;
3082
3083 case 148:
vlmec8f6812004-08-22 03:19:54 +00003084#line 1350 "asn1p_y.y"
vlm044f7442004-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 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00003095 }
3096 break;
3097
3098 case 150:
3099#line 1360 "asn1p_y.y"
3100 {
vlmfa67ddc2004-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;
vlm044f7442004-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:
vlmec8f6812004-08-22 03:19:54 +00003118#line 1374 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003119 {
vlmfa67ddc2004-06-03 03:38:44 +00003120 yyval.a_type = ASN_STRING_GeneralString;
3121 return yyerror("GeneralString is not supported");
vlm044f7442004-09-04 04:49:21 +00003122 }
3123 break;
3124
3125 case 153:
3126#line 1378 "asn1p_y.y"
3127 {
vlmfa67ddc2004-06-03 03:38:44 +00003128 yyval.a_type = ASN_STRING_GraphicString;
3129 return yyerror("GraphicString is not supported");
vlm044f7442004-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:
vlmec8f6812004-08-22 03:19:54 +00003139#line 1383 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003140 { yyval.a_type = ASN_STRING_ISO646String; }
3141 break;
3142
3143 case 156:
vlmec8f6812004-08-22 03:19:54 +00003144#line 1384 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003145 { yyval.a_type = ASN_STRING_NumericString; }
3146 break;
3147
3148 case 157:
vlmec8f6812004-08-22 03:19:54 +00003149#line 1385 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003150 { yyval.a_type = ASN_STRING_PrintableString; }
3151 break;
3152
3153 case 158:
vlmec8f6812004-08-22 03:19:54 +00003154#line 1386 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003155 {
vlmfa67ddc2004-06-03 03:38:44 +00003156 yyval.a_type = ASN_STRING_T61String;
3157 return yyerror("T61String not implemented yet");
vlm044f7442004-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:
vlmec8f6812004-08-22 03:19:54 +00003167#line 1391 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003168 { yyval.a_type = ASN_STRING_UniversalString; }
3169 break;
3170
3171 case 161:
vlmec8f6812004-08-22 03:19:54 +00003172#line 1392 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003173 { yyval.a_type = ASN_STRING_UTF8String; }
3174 break;
3175
3176 case 162:
vlmec8f6812004-08-22 03:19:54 +00003177#line 1393 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003178 {
vlmfa67ddc2004-06-03 03:38:44 +00003179 yyval.a_type = ASN_STRING_VideotexString;
3180 return yyerror("VideotexString is no longer supported");
vlm044f7442004-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:
vlmec8f6812004-08-22 03:19:54 +00003190#line 1398 "asn1p_y.y"
vlm044f7442004-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:
vlmec8f6812004-08-22 03:19:54 +00003200#line 1411 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003201 {
vlm5f0128b2004-08-20 13:25:29 +00003202 yyval.a_constr = yyvsp[0].a_constr;
vlm044f7442004-09-04 04:49:21 +00003203 }
3204 break;
3205
3206 case 172:
3207#line 1417 "asn1p_y.y"
3208 {
vlm9283dbe2004-08-18 04:59:12 +00003209 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
vlm044f7442004-09-04 04:49:21 +00003210 }
3211 break;
3212
3213 case 173:
3214#line 1420 "asn1p_y.y"
3215 {
vlmfa67ddc2004-06-03 03:38:44 +00003216 /*
3217 * This is a special case, for compatibility purposes.
vlm9283dbe2004-08-18 04:59:12 +00003218 * It goes without parentheses.
vlmfa67ddc2004-06-03 03:38:44 +00003219 */
vlm5f0128b2004-08-20 13:25:29 +00003220 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
vlm044f7442004-09-04 04:49:21 +00003221 }
3222 break;
3223
3224 case 174:
3225#line 1430 "asn1p_y.y"
3226 {
vlmfa67ddc2004-06-03 03:38:44 +00003227 yyval.a_constr = yyvsp[-1].a_constr;
vlm044f7442004-09-04 04:49:21 +00003228 }
3229 break;
3230
3231 case 175:
3232#line 1433 "asn1p_y.y"
3233 {
vlm9283dbe2004-08-18 04:59:12 +00003234 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm044f7442004-09-04 04:49:21 +00003235 }
3236 break;
3237
3238 case 176:
3239#line 1439 "asn1p_y.y"
3240 {
vlmfa67ddc2004-06-03 03:38:44 +00003241 yyval.a_constr = yyvsp[0].a_constr;
vlm044f7442004-09-04 04:49:21 +00003242 }
3243 break;
3244
3245 case 177:
3246#line 1442 "asn1p_y.y"
3247 {
vlmfa67ddc2004-06-03 03:38:44 +00003248 asn1p_constraint_t *ct;
3249 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00003252 }
3253 break;
3254
3255 case 178:
3256#line 1448 "asn1p_y.y"
3257 {
vlmfa67ddc2004-06-03 03:38:44 +00003258 asn1p_constraint_t *ct;
3259 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-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);
vlm6f5eb0b2004-08-13 12:35:09 +00003262 ct = yyval.a_constr;
3263 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
vlm044f7442004-09-04 04:49:21 +00003264 }
3265 break;
3266
3267 case 179:
3268#line 1459 "asn1p_y.y"
3269 {
vlm9283dbe2004-08-18 04:59:12 +00003270 yyval.a_constr = yyvsp[0].a_constr;
vlm044f7442004-09-04 04:49:21 +00003271 }
3272 break;
3273
3274 case 180:
3275#line 1462 "asn1p_y.y"
3276 {
vlmfa67ddc2004-06-03 03:38:44 +00003277 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm044f7442004-09-04 04:49:21 +00003278 }
3279 break;
3280
3281 case 181:
3282#line 1465 "asn1p_y.y"
3283 {
vlmfa67ddc2004-06-03 03:38:44 +00003284 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm044f7442004-09-04 04:49:21 +00003285 }
3286 break;
3287
3288 case 182:
3289#line 1468 "asn1p_y.y"
3290 {
vlmfa67ddc2004-06-03 03:38:44 +00003291 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm044f7442004-09-04 04:49:21 +00003292 }
3293 break;
3294
3295 case 183:
3296#line 1474 "asn1p_y.y"
3297 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00003304 }
3305 break;
3306
3307 case 184:
3308#line 1482 "asn1p_y.y"
3309 {
vlm9283dbe2004-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);
vlm044f7442004-09-04 04:49:21 +00003316 }
3317 break;
3318
3319 case 185:
3320#line 1490 "asn1p_y.y"
3321 {
vlm9283dbe2004-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;
vlm044f7442004-09-04 04:49:21 +00003326 }
3327 break;
3328
3329 case 186:
3330#line 1496 "asn1p_y.y"
3331 {
vlm5f0128b2004-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;
vlmec8f6812004-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;
vlm044f7442004-09-04 04:49:21 +00003337 }
3338 break;
3339
3340 case 187:
3341#line 1503 "asn1p_y.y"
3342 {
vlmec8f6812004-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;
vlm044f7442004-09-04 04:49:21 +00003349 }
3350 break;
3351
3352 case 188:
3353#line 1511 "asn1p_y.y"
3354 {
vlmec8f6812004-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;
vlm044f7442004-09-04 04:49:21 +00003361 }
3362 break;
3363
3364 case 189:
3365#line 1519 "asn1p_y.y"
3366 {
vlmec8f6812004-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;
vlm044f7442004-09-04 04:49:21 +00003374 }
3375 break;
3376
3377 case 190:
3378#line 1528 "asn1p_y.y"
3379 {
vlm5f0128b2004-08-20 13:25:29 +00003380 yyval.a_constr = yyvsp[0].a_constr;
vlm044f7442004-09-04 04:49:21 +00003381 }
3382 break;
3383
3384 case 191:
3385#line 1531 "asn1p_y.y"
3386 {
vlmec8f6812004-08-22 03:19:54 +00003387 yyval.a_constr = yyvsp[0].a_constr;
vlm044f7442004-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:
vlmec8f6812004-08-22 03:19:54 +00003397#line 1538 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003398 { yyval.a_ctype = ACT_EL_RLRANGE; }
3399 break;
3400
3401 case 194:
vlmec8f6812004-08-22 03:19:54 +00003402#line 1539 "asn1p_y.y"
vlm044f7442004-09-04 04:49:21 +00003403 { yyval.a_ctype = ACT_EL_LLRANGE; }
3404 break;
3405
3406 case 195:
vlmec8f6812004-08-22 03:19:54 +00003407#line 1540 "asn1p_y.y"
vlm044f7442004-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 {
vlmfa67ddc2004-06-03 03:38:44 +00003414 yyval.a_ctype = ACT_CT_SIZE;
vlm044f7442004-09-04 04:49:21 +00003415 }
3416 break;
3417
3418 case 197:
3419#line 1547 "asn1p_y.y"
3420 {
vlmfa67ddc2004-06-03 03:38:44 +00003421 yyval.a_ctype = ACT_CT_FROM;
vlm044f7442004-09-04 04:49:21 +00003422 }
3423 break;
3424
3425 case 198:
3426#line 1553 "asn1p_y.y"
3427 {
vlmfa67ddc2004-06-03 03:38:44 +00003428 yyval.a_value = yyvsp[0].a_value;
vlm044f7442004-09-04 04:49:21 +00003429 }
3430 break;
3431
3432 case 199:
3433#line 1556 "asn1p_y.y"
3434 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00003444 }
3445 break;
3446
3447 case 200:
3448#line 1567 "asn1p_y.y"
3449 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00003452 }
3453 break;
3454
3455 case 201:
3456#line 1572 "asn1p_y.y"
3457 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00003461 }
3462 break;
3463
3464 case 202:
3465#line 1577 "asn1p_y.y"
3466 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00003470 }
3471 break;
3472
3473 case 203:
3474#line 1585 "asn1p_y.y"
3475 {
vlmfa67ddc2004-06-03 03:38:44 +00003476 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
vlm044f7442004-09-04 04:49:21 +00003477 }
3478 break;
3479
3480 case 204:
3481#line 1591 "asn1p_y.y"
3482 {
vlmfa67ddc2004-06-03 03:38:44 +00003483 yyval.a_constr = yyvsp[0].a_constr;
vlm044f7442004-09-04 04:49:21 +00003484 }
3485 break;
3486
3487 case 205:
3488#line 1594 "asn1p_y.y"
3489 {
vlmfa67ddc2004-06-03 03:38:44 +00003490 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm044f7442004-09-04 04:49:21 +00003491 }
3492 break;
3493
3494 case 206:
3495#line 1600 "asn1p_y.y"
3496 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00003500 }
3501 break;
3502
3503 case 207:
3504#line 1605 "asn1p_y.y"
3505 {
vlmfa67ddc2004-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;
vlm044f7442004-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:
vlmec8f6812004-08-22 03:19:54 +00003520#line 1619 "asn1p_y.y"
vlm044f7442004-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 {
vlmfa67ddc2004-06-03 03:38:44 +00003527 yyval.a_pres = ACPRES_PRESENT;
vlm044f7442004-09-04 04:49:21 +00003528 }
3529 break;
3530
3531 case 211:
3532#line 1626 "asn1p_y.y"
3533 {
vlmfa67ddc2004-06-03 03:38:44 +00003534 yyval.a_pres = ACPRES_ABSENT;
vlm044f7442004-09-04 04:49:21 +00003535 }
3536 break;
3537
3538 case 212:
3539#line 1629 "asn1p_y.y"
3540 {
vlmfa67ddc2004-06-03 03:38:44 +00003541 yyval.a_pres = ACPRES_OPTIONAL;
vlm044f7442004-09-04 04:49:21 +00003542 }
3543 break;
3544
3545 case 213:
3546#line 1635 "asn1p_y.y"
3547 {
vlm5f0128b2004-08-20 13:25:29 +00003548 yyval.a_constr = yyvsp[0].a_constr;
vlm044f7442004-09-04 04:49:21 +00003549 }
3550 break;
3551
3552 case 214:
3553#line 1638 "asn1p_y.y"
3554 {
vlm5f0128b2004-08-20 13:25:29 +00003555 yyval.a_constr = yyvsp[0].a_constr;
vlm044f7442004-09-04 04:49:21 +00003556 }
3557 break;
3558
3559 case 215:
3560#line 1647 "asn1p_y.y"
3561 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00003572 }
3573 break;
3574
3575 case 216:
3576#line 1662 "asn1p_y.y"
3577 {
vlmfa67ddc2004-06-03 03:38:44 +00003578 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm044f7442004-09-04 04:49:21 +00003579 }
3580 break;
3581
3582 case 217:
3583#line 1668 "asn1p_y.y"
3584 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00003589 }
3590 break;
3591
3592 case 218:
3593#line 1674 "asn1p_y.y"
3594 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00003601 }
3602 break;
3603
3604 case 219:
3605#line 1688 "asn1p_y.y"
3606 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00003616 }
3617 break;
3618
3619 case 220:
3620#line 1699 "asn1p_y.y"
3621 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00003632 }
3633 break;
3634
3635 case 221:
3636#line 1715 "asn1p_y.y"
3637 {
vlmfa67ddc2004-06-03 03:38:44 +00003638 yyval.tv_str = yyvsp[0].tv_str;
vlm044f7442004-09-04 04:49:21 +00003639 }
3640 break;
3641
3642 case 222:
3643#line 1718 "asn1p_y.y"
3644 {
vlmfa67ddc2004-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';
vlm044f7442004-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:
vlmec8f6812004-08-22 03:19:54 +00003661#line 1737 "asn1p_y.y"
vlm044f7442004-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 {
vlmfa67ddc2004-06-03 03:38:44 +00003668 yyval.a_marker = EM_OPTIONAL;
vlm044f7442004-09-04 04:49:21 +00003669 }
3670 break;
3671
3672 case 226:
3673#line 1744 "asn1p_y.y"
3674 {
vlmfa67ddc2004-06-03 03:38:44 +00003675 yyval.a_marker = EM_DEFAULT;
3676 /* FIXME: store DefaultValue somewhere */
vlm044f7442004-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 {
vlmfa67ddc2004-06-03 03:38:44 +00003706 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3707 checkmem(yyval.a_expr);
vlm044f7442004-09-04 04:49:21 +00003708 }
3709 break;
3710
3711 case 232:
3712#line 1780 "asn1p_y.y"
3713 {
vlmfa67ddc2004-06-03 03:38:44 +00003714 yyval.a_expr = yyvsp[-1].a_expr;
vlm044f7442004-09-04 04:49:21 +00003715 }
3716 break;
3717
3718 case 233:
3719#line 1786 "asn1p_y.y"
3720 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00003724 }
3725 break;
3726
3727 case 234:
3728#line 1791 "asn1p_y.y"
3729 {
vlmfa67ddc2004-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);
vlm044f7442004-09-04 04:49:21 +00003732 }
3733 break;
3734
3735 case 235:
3736#line 1798 "asn1p_y.y"
3737 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00003743 }
3744 break;
3745
3746 case 236:
3747#line 1805 "asn1p_y.y"
3748 {
vlm5f0128b2004-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;
vlm044f7442004-09-04 04:49:21 +00003755 }
3756 break;
3757
3758 case 237:
3759#line 1813 "asn1p_y.y"
3760 {
vlm5f0128b2004-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;
vlm044f7442004-09-04 04:49:21 +00003767 }
3768 break;
3769
3770 case 238:
3771#line 1821 "asn1p_y.y"
3772 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00003778 }
3779 break;
3780
3781 case 239:
3782#line 1828 "asn1p_y.y"
3783 {
vlmfa67ddc2004-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;
vlm044f7442004-09-04 04:49:21 +00003790 }
3791 break;
3792
3793 case 240:
3794#line 1839 "asn1p_y.y"
3795 {
vlmec8f6812004-08-22 03:19:54 +00003796 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3797 checkmem(yyval.a_value);
vlm044f7442004-09-04 04:49:21 +00003798 }
3799 break;
3800
3801 case 241:
3802#line 1843 "asn1p_y.y"
3803 {
vlmec8f6812004-08-22 03:19:54 +00003804 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3805 checkmem(yyval.a_value);
vlm044f7442004-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:
vlmec8f6812004-08-22 03:19:54 +00003815#line 1875 "asn1p_y.y"
vlm044f7442004-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 {
vlmfa67ddc2004-06-03 03:38:44 +00003822 yyval.a_tag = yyvsp[0].a_tag;
3823 yyval.a_tag.tag_mode = TM_DEFAULT;
vlm044f7442004-09-04 04:49:21 +00003824 }
3825 break;
3826
3827 case 245:
3828#line 1883 "asn1p_y.y"
3829 {
vlmfa67ddc2004-06-03 03:38:44 +00003830 yyval.a_tag = yyvsp[-1].a_tag;
3831 yyval.a_tag.tag_mode = TM_IMPLICIT;
vlm044f7442004-09-04 04:49:21 +00003832 }
3833 break;
3834
3835 case 246:
3836#line 1887 "asn1p_y.y"
3837 {
vlmfa67ddc2004-06-03 03:38:44 +00003838 yyval.a_tag = yyvsp[-1].a_tag;
3839 yyval.a_tag.tag_mode = TM_EXPLICIT;
vlm044f7442004-09-04 04:49:21 +00003840 }
3841 break;
3842
3843 case 247:
3844#line 1894 "asn1p_y.y"
3845 {
vlm5f0128b2004-08-20 13:25:29 +00003846 checkmem(yyvsp[0].tv_str);
3847 yyval.tv_str = yyvsp[0].tv_str;
vlm044f7442004-09-04 04:49:21 +00003848 }
3849 break;
3850
3851 case 248:
3852#line 1898 "asn1p_y.y"
3853 {
vlmec8f6812004-08-22 03:19:54 +00003854 checkmem(yyvsp[0].tv_str);
3855 yyval.tv_str = yyvsp[0].tv_str;
vlm044f7442004-09-04 04:49:21 +00003856 }
3857 break;
3858
3859 case 249:
3860#line 1906 "asn1p_y.y"
3861 {
vlmec8f6812004-08-22 03:19:54 +00003862 checkmem(yyvsp[0].tv_str);
3863 yyval.tv_str = yyvsp[0].tv_str;
vlm044f7442004-09-04 04:49:21 +00003864 }
3865 break;
3866
3867 case 250:
3868#line 1913 "asn1p_y.y"
3869 {
vlmec8f6812004-08-22 03:19:54 +00003870 checkmem(yyvsp[0].tv_str);
3871 yyval.tv_str = yyvsp[0].tv_str;
vlm044f7442004-09-04 04:49:21 +00003872 }
3873 break;
3874
3875 case 251:
3876#line 1920 "asn1p_y.y"
3877 {
vlmfa67ddc2004-06-03 03:38:44 +00003878 memset(&yyval.tv_nametag, 0, sizeof(yyval.tv_nametag));
3879 yyval.tv_nametag.name = yyvsp[0].tv_str;
vlm044f7442004-09-04 04:49:21 +00003880 }
3881 break;
3882
3883 case 252:
3884#line 1924 "asn1p_y.y"
3885 {
vlmfa67ddc2004-06-03 03:38:44 +00003886 yyval.tv_nametag.name = yyvsp[-1].tv_str;
3887 yyval.tv_nametag.tag = yyvsp[0].a_tag;
vlm044f7442004-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"
vlmfa67ddc2004-06-03 03:38:44 +00003896
3897 yyvsp -= yylen;
3898 yyssp -= yylen;
vlmfa67ddc2004-06-03 03:38:44 +00003899
vlm044f7442004-09-04 04:49:21 +00003900
3901#if YYDEBUG
vlmfa67ddc2004-06-03 03:38:44 +00003902 if (yydebug)
3903 {
vlm044f7442004-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");
vlmfa67ddc2004-06-03 03:38:44 +00003909 }
3910#endif
3911
3912 *++yyvsp = yyval;
3913
vlmfa67ddc2004-06-03 03:38:44 +00003914
vlm044f7442004-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. */
vlmfa67ddc2004-06-03 03:38:44 +00003918
3919 yyn = yyr1[yyn];
3920
vlm044f7442004-09-04 04:49:21 +00003921 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
3922 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00003923 yystate = yytable[yystate];
3924 else
vlm044f7442004-09-04 04:49:21 +00003925 yystate = yydefgoto[yyn - YYNTOKENS];
vlmfa67ddc2004-06-03 03:38:44 +00003926
3927 goto yynewstate;
3928
vlmfa67ddc2004-06-03 03:38:44 +00003929
vlm044f7442004-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)
vlmfa67ddc2004-06-03 03:38:44 +00003936 {
3937 ++yynerrs;
vlm044f7442004-09-04 04:49:21 +00003938#if YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00003939 yyn = yypact[yystate];
3940
vlm044f7442004-09-04 04:49:21 +00003941 if (YYPACT_NINF < yyn && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00003942 {
vlm044f7442004-09-04 04:49:21 +00003943 YYSIZE_T yysize = 0;
3944 int yytype = YYTRANSLATE (yychar);
3945 char *yymsg;
3946 int yyx, yycount;
vlmfa67ddc2004-06-03 03:38:44 +00003947
vlm044f7442004-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)
vlmfa67ddc2004-06-03 03:38:44 +00003959 {
vlm044f7442004-09-04 04:49:21 +00003960 char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
3961 yyp = yystpcpy (yyp, yytname[yytype]);
vlmfa67ddc2004-06-03 03:38:44 +00003962
vlm044f7442004-09-04 04:49:21 +00003963 if (yycount < 5)
vlmfa67ddc2004-06-03 03:38:44 +00003964 {
vlm044f7442004-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)
vlmfa67ddc2004-06-03 03:38:44 +00003970 {
vlm044f7442004-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++;
vlmfa67ddc2004-06-03 03:38:44 +00003975 }
3976 }
vlm044f7442004-09-04 04:49:21 +00003977 yyerror (yymsg);
3978 YYSTACK_FREE (yymsg);
vlmfa67ddc2004-06-03 03:38:44 +00003979 }
3980 else
vlm044f7442004-09-04 04:49:21 +00003981 yyerror ("parse error; also virtual memory exhausted");
vlmfa67ddc2004-06-03 03:38:44 +00003982 }
3983 else
3984#endif /* YYERROR_VERBOSE */
vlm044f7442004-09-04 04:49:21 +00003985 yyerror ("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003986 }
vlmfa67ddc2004-06-03 03:38:44 +00003987 goto yyerrlab1;
vlmfa67ddc2004-06-03 03:38:44 +00003988
vlm044f7442004-09-04 04:49:21 +00003989
3990/*----------------------------------------------------.
3991| yyerrlab1 -- error raised explicitly by an action. |
3992`----------------------------------------------------*/
3993yyerrlab1:
vlmfa67ddc2004-06-03 03:38:44 +00003994 if (yyerrstatus == 3)
3995 {
vlm044f7442004-09-04 04:49:21 +00003996 /* If just tried and failed to reuse lookahead token after an
3997 error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00003998
vlm044f7442004-09-04 04:49:21 +00003999 /* Return failure if at end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00004000 if (yychar == YYEOF)
vlm044f7442004-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 }
vlmfa67ddc2004-06-03 03:38:44 +00004017
vlm044f7442004-09-04 04:49:21 +00004018 YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
4019 yychar, yytname[yychar1]));
4020 yydestruct (yychar1, yylval);
vlmfa67ddc2004-06-03 03:38:44 +00004021 yychar = YYEMPTY;
4022 }
4023
vlm044f7442004-09-04 04:49:21 +00004024 /* Else will try to reuse lookahead token after shifting the error
4025 token. */
vlmfa67ddc2004-06-03 03:38:44 +00004026
vlm044f7442004-09-04 04:49:21 +00004027 yyerrstatus = 3; /* Each real token shifted decrements this. */
vlmfa67ddc2004-06-03 03:38:44 +00004028
vlm044f7442004-09-04 04:49:21 +00004029 for (;;)
vlm6f5eb0b2004-08-13 12:35:09 +00004030 {
vlm044f7442004-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 }
vlm6f5eb0b2004-08-13 12:35:09 +00004066#endif
vlm6f5eb0b2004-08-13 12:35:09 +00004067 }
vlmfa67ddc2004-06-03 03:38:44 +00004068
4069 if (yyn == YYFINAL)
4070 YYACCEPT;
4071
vlm044f7442004-09-04 04:49:21 +00004072 YYDPRINTF ((stderr, "Shifting error token, "));
vlmfa67ddc2004-06-03 03:38:44 +00004073
4074 *++yyvsp = yylval;
vlm044f7442004-09-04 04:49:21 +00004075
vlmfa67ddc2004-06-03 03:38:44 +00004076
4077 yystate = yyn;
4078 goto yynewstate;
4079
vlm827ac182004-06-03 05:07:41 +00004080
vlm044f7442004-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. */
vlm827ac182004-06-03 05:07:41 +00004103#endif
vlm044f7442004-09-04 04:49:21 +00004104
4105yyreturn:
4106#ifndef yyoverflow
4107 if (yyss != yyssa)
4108 YYSTACK_FREE (yyss);
4109#endif
4110 return yyresult;
vlmfa67ddc2004-06-03 03:38:44 +00004111}
vlm044f7442004-09-04 04:49:21 +00004112
4113
4114#line 1931 "asn1p_y.y"
vlmfa67ddc2004-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
vlm044f7442004-09-04 04:49:21 +00004224