blob: 5e56d4356471587a87fcf6bbdc62db97dfbcaca9 [file] [log] [blame]
vlm827ac182004-06-03 05:07:41 +00001/* A Bison parser, made from asn1p_y.y, by GNU bison 1.75. */
vlmfa67ddc2004-06-03 03:38:44 +00002
vlm827ac182004-06-03 05:07:41 +00003/* Skeleton parser for Yacc-like parsing with Bison,
4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
vlmfa67ddc2004-06-03 03:38:44 +00005
vlm827ac182004-06-03 05:07:41 +00006 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
vlmfa67ddc2004-06-03 03:38:44 +000010
vlm827ac182004-06-03 05:07:41 +000011 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
20
21/* As a special exception, when this file is copied by Bison into a
22 Bison output file, you may use that output file without restriction.
23 This special exception was added by the Free Software Foundation
24 in version 1.24 of Bison. */
25
26/* Written by Richard Stallman by simplifying the original so called
27 ``semantic'' parser. */
28
29/* All symbols defined below should begin with yy or YY, to avoid
30 infringing on user name space. This should be done even for local
31 variables, as they might otherwise be expanded by user macros.
32 There are some unavoidable exceptions within include files to
33 define necessary library symbols; they are noted "INFRINGES ON
34 USER NAME SPACE" below. */
35
36/* Identify Bison output. */
37#define YYBISON 1
38
39/* Pure parsers. */
40#define YYPURE 0
41
42/* Using locations. */
43#define YYLSP_NEEDED 0
44
45/* If NAME_PREFIX is specified substitute the variables and functions
46 names. */
vlmfa67ddc2004-06-03 03:38:44 +000047#define yyparse asn1p_parse
vlm827ac182004-06-03 05:07:41 +000048#define yylex asn1p_lex
vlmfa67ddc2004-06-03 03:38:44 +000049#define yyerror asn1p_error
vlm827ac182004-06-03 05:07:41 +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
vlm827ac182004-06-03 05:07:41 +000055
56/* Tokens. */
57#ifndef YYTOKENTYPE
58# define YYTOKENTYPE
59 /* Put the tokens into the symbol table, so that GDB and other debuggers
60 know about them. */
61 enum yytokentype {
62 TOK_PPEQ = 258,
63 TOK_opaque = 259,
64 TOK_bstring = 260,
65 TOK_cstring = 261,
66 TOK_hstring = 262,
67 TOK_identifier = 263,
68 TOK_number = 264,
69 TOK_number_negative = 265,
70 TOK_typereference = 266,
71 TOK_objectclassreference = 267,
72 TOK_typefieldreference = 268,
73 TOK_valuefieldreference = 269,
74 TOK_ABSENT = 270,
75 TOK_ABSTRACT_SYNTAX = 271,
76 TOK_ALL = 272,
77 TOK_ANY = 273,
78 TOK_APPLICATION = 274,
79 TOK_AUTOMATIC = 275,
80 TOK_BEGIN = 276,
81 TOK_BIT = 277,
82 TOK_BMPString = 278,
83 TOK_BOOLEAN = 279,
84 TOK_BY = 280,
85 TOK_CHARACTER = 281,
86 TOK_CHOICE = 282,
87 TOK_CLASS = 283,
88 TOK_COMPONENT = 284,
89 TOK_COMPONENTS = 285,
90 TOK_CONSTRAINED = 286,
91 TOK_CONTAINING = 287,
92 TOK_DEFAULT = 288,
93 TOK_DEFINITIONS = 289,
94 TOK_DEFINED = 290,
95 TOK_EMBEDDED = 291,
96 TOK_ENCODED = 292,
97 TOK_END = 293,
98 TOK_ENUMERATED = 294,
99 TOK_EXPLICIT = 295,
100 TOK_EXPORTS = 296,
101 TOK_EXTENSIBILITY = 297,
102 TOK_EXTERNAL = 298,
103 TOK_FALSE = 299,
104 TOK_FROM = 300,
105 TOK_GeneralizedTime = 301,
106 TOK_GeneralString = 302,
107 TOK_GraphicString = 303,
108 TOK_IA5String = 304,
109 TOK_IDENTIFIER = 305,
110 TOK_IMPLICIT = 306,
111 TOK_IMPLIED = 307,
112 TOK_IMPORTS = 308,
113 TOK_INCLUDES = 309,
114 TOK_INSTANCE = 310,
115 TOK_INTEGER = 311,
116 TOK_ISO646String = 312,
117 TOK_MAX = 313,
118 TOK_MIN = 314,
119 TOK_MINUS_INFINITY = 315,
120 TOK_NULL = 316,
121 TOK_NumericString = 317,
122 TOK_OBJECT = 318,
123 TOK_ObjectDescriptor = 319,
124 TOK_OCTET = 320,
125 TOK_OF = 321,
126 TOK_OPTIONAL = 322,
127 TOK_PATTERN = 323,
128 TOK_PDV = 324,
129 TOK_PLUS_INFINITY = 325,
130 TOK_PRESENT = 326,
131 TOK_PrintableString = 327,
132 TOK_PRIVATE = 328,
133 TOK_REAL = 329,
134 TOK_RELATIVE_OID = 330,
135 TOK_SEQUENCE = 331,
136 TOK_SET = 332,
137 TOK_SIZE = 333,
138 TOK_STRING = 334,
139 TOK_SYNTAX = 335,
140 TOK_T61String = 336,
141 TOK_TAGS = 337,
142 TOK_TeletexString = 338,
143 TOK_TRUE = 339,
144 TOK_TYPE_IDENTIFIER = 340,
145 TOK_UNIQUE = 341,
146 TOK_UNIVERSAL = 342,
147 TOK_UniversalString = 343,
148 TOK_UTCTime = 344,
149 TOK_UTF8String = 345,
150 TOK_VideotexString = 346,
151 TOK_VisibleString = 347,
152 TOK_WITH = 348,
153 TOK_UNION = 349,
154 TOK_INTERSECTION = 350,
155 TOK_EXCEPT = 351,
156 TOK_TwoDots = 352,
157 TOK_ThreeDots = 353,
158 TOK_tag = 354
159 };
160#endif
161#define TOK_PPEQ 258
162#define TOK_opaque 259
163#define TOK_bstring 260
164#define TOK_cstring 261
165#define TOK_hstring 262
166#define TOK_identifier 263
167#define TOK_number 264
168#define TOK_number_negative 265
169#define TOK_typereference 266
170#define TOK_objectclassreference 267
171#define TOK_typefieldreference 268
172#define TOK_valuefieldreference 269
173#define TOK_ABSENT 270
174#define TOK_ABSTRACT_SYNTAX 271
175#define TOK_ALL 272
176#define TOK_ANY 273
177#define TOK_APPLICATION 274
178#define TOK_AUTOMATIC 275
179#define TOK_BEGIN 276
180#define TOK_BIT 277
181#define TOK_BMPString 278
182#define TOK_BOOLEAN 279
183#define TOK_BY 280
184#define TOK_CHARACTER 281
185#define TOK_CHOICE 282
186#define TOK_CLASS 283
187#define TOK_COMPONENT 284
188#define TOK_COMPONENTS 285
189#define TOK_CONSTRAINED 286
190#define TOK_CONTAINING 287
191#define TOK_DEFAULT 288
192#define TOK_DEFINITIONS 289
193#define TOK_DEFINED 290
194#define TOK_EMBEDDED 291
195#define TOK_ENCODED 292
196#define TOK_END 293
197#define TOK_ENUMERATED 294
198#define TOK_EXPLICIT 295
199#define TOK_EXPORTS 296
200#define TOK_EXTENSIBILITY 297
201#define TOK_EXTERNAL 298
202#define TOK_FALSE 299
203#define TOK_FROM 300
204#define TOK_GeneralizedTime 301
205#define TOK_GeneralString 302
206#define TOK_GraphicString 303
207#define TOK_IA5String 304
208#define TOK_IDENTIFIER 305
209#define TOK_IMPLICIT 306
210#define TOK_IMPLIED 307
211#define TOK_IMPORTS 308
212#define TOK_INCLUDES 309
213#define TOK_INSTANCE 310
214#define TOK_INTEGER 311
215#define TOK_ISO646String 312
216#define TOK_MAX 313
217#define TOK_MIN 314
218#define TOK_MINUS_INFINITY 315
219#define TOK_NULL 316
220#define TOK_NumericString 317
221#define TOK_OBJECT 318
222#define TOK_ObjectDescriptor 319
223#define TOK_OCTET 320
224#define TOK_OF 321
225#define TOK_OPTIONAL 322
226#define TOK_PATTERN 323
227#define TOK_PDV 324
228#define TOK_PLUS_INFINITY 325
229#define TOK_PRESENT 326
230#define TOK_PrintableString 327
231#define TOK_PRIVATE 328
232#define TOK_REAL 329
233#define TOK_RELATIVE_OID 330
234#define TOK_SEQUENCE 331
235#define TOK_SET 332
236#define TOK_SIZE 333
237#define TOK_STRING 334
238#define TOK_SYNTAX 335
239#define TOK_T61String 336
240#define TOK_TAGS 337
241#define TOK_TeletexString 338
242#define TOK_TRUE 339
243#define TOK_TYPE_IDENTIFIER 340
244#define TOK_UNIQUE 341
245#define TOK_UNIVERSAL 342
246#define TOK_UniversalString 343
247#define TOK_UTCTime 344
248#define TOK_UTF8String 345
249#define TOK_VideotexString 346
250#define TOK_VisibleString 347
251#define TOK_WITH 348
252#define TOK_UNION 349
253#define TOK_INTERSECTION 350
254#define TOK_EXCEPT 351
255#define TOK_TwoDots 352
256#define TOK_ThreeDots 353
257#define TOK_tag 354
258
259
260
261
262/* Copy the first part of user declarations. */
vlmfa67ddc2004-06-03 03:38:44 +0000263#line 1 "asn1p_y.y"
264
265
266#include <stdlib.h>
267#include <stdio.h>
268#include <string.h>
269#include <errno.h>
270#include <assert.h>
271
272#include "asn1parser.h"
273
274#define YYPARSE_PARAM param
275#define YYERROR_VERBOSE
276
277int yylex(void);
278int yyerror(const char *msg);
279void asn1p_lexer_hack_push_opaque_state(void);
280void asn1p_lexer_hack_enable_with_syntax(void);
281#define yylineno asn1p_lineno
282extern int asn1p_lineno;
283
284
285static asn1p_value_t *
286 _convert_bitstring2binary(char *str, int base);
287
288#define checkmem(ptr) do { \
289 if(!(ptr)) \
290 return yyerror("Memory failure"); \
291 } while(0)
292
293#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
294 if(arg1->type != constr_type) { \
295 int __ret; \
296 root = asn1p_constraint_new(yylineno); \
297 checkmem(root); \
298 root->type = constr_type; \
299 __ret = asn1p_constraint_insert(root, \
300 arg1); \
301 checkmem(__ret == 0); \
302 } else { \
303 root = arg1; \
304 } \
305 if(arg2) { \
306 int __ret \
307 = asn1p_constraint_insert(root, arg2); \
308 checkmem(__ret == 0); \
309 } \
310 } while(0)
311
312
vlm827ac182004-06-03 05:07:41 +0000313
314/* Enabling traces. */
315#ifndef YYDEBUG
316# define YYDEBUG 0
317#endif
318
319/* Enabling verbose error messages. */
320#ifdef YYERROR_VERBOSE
321# undef YYERROR_VERBOSE
322# define YYERROR_VERBOSE 1
323#else
324# define YYERROR_VERBOSE 0
325#endif
326
327#ifndef YYSTYPE
vlmfa67ddc2004-06-03 03:38:44 +0000328#line 57 "asn1p_y.y"
329typedef union {
330 asn1p_t *a_grammar;
331 asn1p_module_flags_e a_module_flags;
332 asn1p_module_t *a_module;
333 asn1p_expr_type_e a_type; /* ASN.1 Type */
334 asn1p_expr_t *a_expr; /* Constructed collection */
335 asn1p_constraint_t *a_constr; /* Constraint */
336 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
337 asn1p_xports_t *a_xports; /* IMports/EXports */
338 asn1p_oid_t *a_oid; /* Object Identifier */
339 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
340 struct asn1p_type_tag_s a_tag; /* A tag */
341 asn1p_ref_t *a_ref; /* Reference to custom type */
342 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
343 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
344 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
345 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
346 struct asn1p_param_s a_parg; /* A parameter argument */
347 asn1p_paramlist_t *a_plist; /* A pargs list */
348 enum asn1p_expr_marker_e a_marker; /* OPTIONAL/DEFAULT */
349 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
350 asn1_integer_t a_int;
351 char *tv_str;
352 struct {
353 char *buf;
354 int len;
355 } tv_opaque;
356 struct {
357 char *name;
358 struct asn1p_type_tag_s tag;
359 } tv_nametag;
vlm827ac182004-06-03 05:07:41 +0000360} yystype;
361/* Line 193 of /usr/local/share/bison/yacc.c. */
vlm97ed7152004-08-13 12:31:09 +0000362#line 363 "asn1p_y.c"
vlm827ac182004-06-03 05:07:41 +0000363# define YYSTYPE yystype
364# define YYSTYPE_IS_TRIVIAL 1
vlmfa67ddc2004-06-03 03:38:44 +0000365#endif
366
vlm827ac182004-06-03 05:07:41 +0000367#ifndef YYLTYPE
368typedef struct yyltype
369{
370 int first_line;
371 int first_column;
372 int last_line;
373 int last_column;
374} yyltype;
375# define YYLTYPE yyltype
376# define YYLTYPE_IS_TRIVIAL 1
377#endif
378
379/* Copy the second part of user declarations. */
vlmfa67ddc2004-06-03 03:38:44 +0000380
381
vlm827ac182004-06-03 05:07:41 +0000382/* Line 213 of /usr/local/share/bison/yacc.c. */
vlm97ed7152004-08-13 12:31:09 +0000383#line 384 "asn1p_y.c"
vlmfa67ddc2004-06-03 03:38:44 +0000384
vlm827ac182004-06-03 05:07:41 +0000385#if ! defined (yyoverflow) || YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +0000386
vlm827ac182004-06-03 05:07:41 +0000387/* The parser invokes alloca or malloc; define the necessary symbols. */
vlmfa67ddc2004-06-03 03:38:44 +0000388
vlm827ac182004-06-03 05:07:41 +0000389# if YYSTACK_USE_ALLOCA
390# define YYSTACK_ALLOC alloca
391# else
392# ifndef YYSTACK_USE_ALLOCA
393# if defined (alloca) || defined (_ALLOCA_H)
394# define YYSTACK_ALLOC alloca
395# else
396# ifdef __GNUC__
397# define YYSTACK_ALLOC __builtin_alloca
398# endif
399# endif
400# endif
401# endif
vlmfa67ddc2004-06-03 03:38:44 +0000402
vlm827ac182004-06-03 05:07:41 +0000403# ifdef YYSTACK_ALLOC
404 /* Pacify GCC's `empty if-body' warning. */
405# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
406# else
407# if defined (__STDC__) || defined (__cplusplus)
408# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
409# define YYSIZE_T size_t
410# endif
411# define YYSTACK_ALLOC malloc
412# define YYSTACK_FREE free
413# endif
414#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
415
416
417#if (! defined (yyoverflow) \
418 && (! defined (__cplusplus) \
419 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
420
421/* A type that is properly aligned for any stack member. */
422union yyalloc
423{
424 short yyss;
425 YYSTYPE yyvs;
426 };
427
428/* The size of the maximum gap between one aligned stack and the next. */
429# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
430
431/* The size of an array large to enough to hold all stacks, each with
432 N elements. */
433# define YYSTACK_BYTES(N) \
434 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
435 + YYSTACK_GAP_MAX)
436
437/* Copy COUNT objects from FROM to TO. The source and destination do
438 not overlap. */
439# ifndef YYCOPY
440# if 1 < __GNUC__
441# define YYCOPY(To, From, Count) \
442 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
443# else
444# define YYCOPY(To, From, Count) \
445 do \
446 { \
447 register YYSIZE_T yyi; \
448 for (yyi = 0; yyi < (Count); yyi++) \
449 (To)[yyi] = (From)[yyi]; \
450 } \
451 while (0)
452# endif
453# endif
454
455/* Relocate STACK from its old location to the new one. The
456 local variables YYSIZE and YYSTACKSIZE give the old and new number of
457 elements in the stack, and YYPTR gives the new location of the
458 stack. Advance YYPTR to a properly aligned location for the next
459 stack. */
460# define YYSTACK_RELOCATE(Stack) \
461 do \
462 { \
463 YYSIZE_T yynewbytes; \
464 YYCOPY (&yyptr->Stack, Stack, yysize); \
465 Stack = &yyptr->Stack; \
466 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
467 yyptr += yynewbytes / sizeof (*yyptr); \
468 } \
469 while (0)
vlmfa67ddc2004-06-03 03:38:44 +0000470
471#endif
472
vlm827ac182004-06-03 05:07:41 +0000473#if defined (__STDC__) || defined (__cplusplus)
474 typedef signed char yysigned_char;
vlmfa67ddc2004-06-03 03:38:44 +0000475#else
vlm827ac182004-06-03 05:07:41 +0000476 typedef short yysigned_char;
vlmfa67ddc2004-06-03 03:38:44 +0000477#endif
478
vlm827ac182004-06-03 05:07:41 +0000479/* YYFINAL -- State number of the termination state. */
480#define YYFINAL 7
481#define YYLAST 775
482
483/* YYNTOKENS -- Number of terminals. */
484#define YYNTOKENS 113
485/* YYNNTS -- Number of nonterminals. */
486#define YYNNTS 99
487/* YYNRULES -- Number of rules. */
488#define YYNRULES 248
489/* YYNRULES -- Number of states. */
490#define YYNSTATES 375
491
492/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
493#define YYUNDEFTOK 2
494#define YYMAXUTOK 354
495
496#define YYTRANSLATE(X) \
497 ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
498
499/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
500static const unsigned char yytranslate[] =
501{
502 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
503 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
504 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
505 2, 2, 2, 109, 2, 2, 2, 2, 2, 2,
506 104, 105, 2, 2, 107, 2, 110, 2, 2, 2,
507 2, 2, 2, 2, 2, 2, 2, 2, 108, 106,
508 111, 2, 2, 2, 112, 2, 2, 2, 2, 2,
509 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
510 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
511 2, 2, 2, 2, 96, 2, 2, 2, 2, 2,
512 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
513 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
514 2, 2, 2, 102, 94, 103, 2, 2, 2, 2,
515 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
516 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
517 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
518 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
519 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
520 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
521 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
522 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
523 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
524 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
525 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
526 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
527 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
528 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
529 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
530 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
531 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
532 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
533 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
534 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
535 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
536 85, 86, 87, 88, 89, 90, 91, 92, 93, 95,
537 97, 98, 99, 100, 101
538};
539
540#if YYDEBUG
541/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
542 YYRHS. */
543static const unsigned short yyprhs[] =
544{
545 0, 0, 3, 5, 7, 10, 19, 20, 22, 26,
546 29, 31, 34, 36, 41, 43, 44, 46, 48, 51,
547 54, 57, 60, 63, 64, 66, 68, 71, 73, 75,
548 77, 79, 81, 83, 87, 90, 92, 95, 100, 102,
549 106, 108, 110, 114, 118, 121, 123, 127, 129, 131,
550 138, 140, 142, 143, 145, 150, 155, 159, 166, 168,
551 172, 174, 178, 182, 184, 188, 190, 192, 194, 198,
552 204, 205, 207, 209, 213, 216, 220, 225, 226, 228,
553 229, 236, 238, 241, 243, 245, 248, 250, 254, 256,
554 260, 264, 266, 268, 270, 275, 277, 281, 283, 287,
555 291, 293, 297, 299, 303, 305, 307, 309, 311, 316,
556 317, 321, 323, 325, 327, 329, 331, 333, 337, 339,
557 342, 344, 346, 348, 350, 353, 356, 358, 360, 363,
558 366, 368, 370, 372, 374, 377, 379, 382, 384, 386,
559 388, 390, 392, 394, 396, 398, 400, 402, 404, 406,
560 408, 410, 415, 420, 425, 430, 435, 437, 442, 443,
561 445, 447, 449, 451, 453, 455, 460, 462, 465, 469,
562 471, 475, 481, 483, 487, 489, 491, 495, 497, 501,
563 503, 507, 509, 513, 518, 520, 522, 524, 527, 530,
564 534, 536, 538, 540, 542, 544, 546, 548, 550, 552,
565 558, 560, 564, 566, 570, 571, 573, 575, 577, 579,
566 581, 583, 587, 592, 594, 598, 601, 605, 607, 611,
567 612, 614, 616, 619, 621, 623, 624, 628, 631, 635,
568 637, 641, 643, 648, 653, 655, 657, 659, 661, 662,
569 664, 666, 669, 672, 674, 676, 678, 680, 682
570};
571
572/* YYRHS -- A `-1'-separated list of the rules' RHS. */
573static const short yyrhs[] =
574{
575 114, 0, -1, 115, -1, 116, -1, 115, 116, -1,
576 208, 117, 34, 121, 3, 21, 124, 38, -1, -1,
577 118, -1, 102, 119, 103, -1, 102, 103, -1, 120,
578 -1, 119, 120, -1, 210, -1, 210, 104, 9, 105,
579 -1, 9, -1, -1, 122, -1, 123, -1, 122, 123,
580 -1, 40, 82, -1, 51, 82, -1, 20, 82, -1,
581 42, 52, -1, -1, 125, -1, 126, -1, 125, 126,
582 -1, 127, -1, 132, -1, 138, -1, 162, -1, 135,
583 -1, 170, -1, 53, 128, 106, -1, 53, 45, -1,
584 129, -1, 128, 129, -1, 130, 45, 208, 117, -1,
585 131, -1, 130, 107, 131, -1, 208, -1, 210, -1,
586 41, 133, 106, -1, 41, 17, 106, -1, 41, 106,
587 -1, 134, -1, 133, 107, 134, -1, 208, -1, 210,
588 -1, 208, 136, 3, 102, 137, 103, -1, 157, -1,
589 167, -1, -1, 178, -1, 208, 3, 206, 85, -1,
590 208, 3, 206, 154, -1, 208, 3, 144, -1, 208,
591 102, 139, 103, 3, 154, -1, 140, -1, 139, 107,
592 140, -1, 208, -1, 208, 108, 210, -1, 167, 108,
593 210, -1, 142, -1, 141, 107, 142, -1, 156, -1,
594 210, -1, 153, -1, 143, 107, 153, -1, 28, 102,
595 146, 103, 148, -1, -1, 86, -1, 147, -1, 146,
596 107, 147, -1, 160, 198, -1, 160, 154, 145, -1,
597 160, 160, 198, 145, -1, -1, 149, -1, -1, 93,
598 80, 102, 150, 151, 103, -1, 152, -1, 151, 152,
599 -1, 4, -1, 160, -1, 211, 154, -1, 155, -1,
600 156, 172, 198, -1, 100, -1, 100, 109, 165, -1,
601 100, 109, 205, -1, 169, -1, 170, -1, 171, -1,
602 208, 102, 141, 103, -1, 157, -1, 55, 66, 157,
603 -1, 11, -1, 11, 110, 208, -1, 11, 110, 210,
604 -1, 209, -1, 209, 110, 158, -1, 159, -1, 158,
605 110, 159, -1, 161, -1, 161, -1, 13, -1, 14,
606 -1, 210, 136, 3, 163, -1, -1, 102, 164, 166,
607 -1, 5, -1, 7, -1, 6, -1, 205, -1, 165,
608 -1, 210, -1, 208, 110, 210, -1, 4, -1, 166,
609 4, -1, 24, -1, 61, -1, 74, -1, 168, -1,
610 65, 79, -1, 63, 50, -1, 75, -1, 43, -1,
611 36, 69, -1, 26, 79, -1, 89, -1, 46, -1,
612 56, -1, 39, -1, 22, 79, -1, 167, -1, 168,
613 202, -1, 23, -1, 47, -1, 48, -1, 49, -1,
614 57, -1, 62, -1, 72, -1, 81, -1, 83, -1,
615 88, -1, 90, -1, 91, -1, 92, -1, 64, -1,
616 27, 102, 143, 103, -1, 76, 102, 143, 103, -1,
617 77, 102, 143, 103, -1, 76, 172, 66, 156, -1,
618 77, 172, 66, 156, -1, 18, -1, 18, 35, 25,
619 210, -1, -1, 176, -1, 94, -1, 95, -1, 96,
620 -1, 97, -1, 98, -1, 78, 104, 178, 105, -1,
621 177, -1, 176, 177, -1, 104, 178, 105, -1, 179,
622 -1, 179, 107, 100, -1, 179, 107, 100, 107, 179,
623 -1, 100, -1, 100, 107, 179, -1, 180, -1, 181,
624 -1, 180, 173, 181, -1, 182, -1, 181, 174, 182,
625 -1, 183, -1, 182, 175, 183, -1, 186, -1, 186,
626 184, 186, -1, 185, 104, 178, 105, -1, 192, -1,
627 187, -1, 99, -1, 99, 111, -1, 111, 99, -1,
628 111, 99, 111, -1, 78, -1, 45, -1, 205, -1,
629 210, -1, 6, -1, 59, -1, 58, -1, 44, -1,
630 84, -1, 93, 30, 102, 188, 103, -1, 189, -1,
631 188, 107, 189, -1, 100, -1, 210, 172, 190, -1,
632 -1, 191, -1, 71, -1, 15, -1, 67, -1, 193,
633 -1, 194, -1, 102, 208, 103, -1, 193, 102, 195,
634 103, -1, 196, -1, 195, 107, 196, -1, 112, 197,
635 -1, 112, 110, 197, -1, 210, -1, 197, 110, 210,
636 -1, -1, 199, -1, 67, -1, 33, 200, -1, 186,
637 -1, 167, -1, -1, 102, 201, 166, -1, 102, 103,
638 -1, 102, 203, 103, -1, 204, -1, 203, 107, 204,
639 -1, 210, -1, 210, 104, 205, 105, -1, 210, 104,
640 165, 105, -1, 205, -1, 100, -1, 9, -1, 10,
641 -1, -1, 207, -1, 101, -1, 101, 51, -1, 101,
642 40, -1, 11, -1, 12, -1, 12, -1, 8, -1,
643 210, -1, 210, 207, -1
644};
645
646/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
647static const unsigned short yyrline[] =
648{
649 0, 297, 297, 303, 309, 325, 350, 352, 355, 359,
650 364, 371, 379, 384, 388, 397, 399, 407, 411, 419,
vlm97ed7152004-08-13 12:31:09 +0000651 423, 426, 429, 437, 439, 448, 452, 478, 482, 491,
652 498, 511, 522, 535, 542, 547, 553, 559, 568, 574,
653 580, 587, 595, 599, 602, 609, 615, 621, 628, 637,
654 647, 655, 663, 665, 677, 689, 696, 712, 722, 732,
655 742, 747, 754, 764, 770, 776, 780, 792, 798, 804,
656 814, 816, 819, 827, 833, 842, 847, 864, 866, 873,
657 871, 880, 885, 891, 895, 920, 927, 932, 940, 949,
658 958, 969, 973, 979, 987, 1011, 1018, 1032, 1041, 1051,
659 1061, 1069, 1090, 1099, 1108, 1109, 1111, 1118, 1130, 1141,
660 1140, 1147, 1151, 1155, 1159, 1162, 1167, 1179, 1195, 1206,
661 1220, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230,
662 1231, 1232, 1238, 1240, 1241, 1244, 1251, 1263, 1265, 1269,
663 1273, 1274, 1275, 1276, 1277, 1281, 1282, 1283, 1284, 1288,
664 1289, 1292, 1299, 1305, 1311, 1319, 1327, 1333, 1349, 1351,
665 1354, 1354, 1355, 1355, 1356, 1358, 1371, 1374, 1379, 1385,
666 1389, 1396, 1404, 1409, 1418, 1420, 1422, 1427, 1429, 1435,
667 1437, 1442, 1449, 1456, 1464, 1467, 1472, 1474, 1475, 1476,
668 1479, 1483, 1488, 1492, 1503, 1507, 1512, 1517, 1522, 1529,
669 1535, 1539, 1544, 1550, 1562, 1564, 1567, 1571, 1574, 1579,
670 1583, 1591, 1606, 1612, 1619, 1632, 1644, 1659, 1663, 1680,
671 1682, 1685, 1689, 1695, 1698, 1700, 1700, 1720, 1725, 1730,
672 1736, 1742, 1750, 1758, 1766, 1773, 1783, 1788, 1818, 1820,
673 1823, 1828, 1832, 1838, 1843, 1849, 1856, 1863, 1868
vlm827ac182004-06-03 05:07:41 +0000674};
675#endif
676
677#if YYDEBUG || YYERROR_VERBOSE
678/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
679 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
680static const char *const yytname[] =
681{
682 "$end", "error", "$undefined", "TOK_PPEQ", "TOK_opaque", "TOK_bstring",
683 "TOK_cstring", "TOK_hstring", "TOK_identifier", "TOK_number",
684 "TOK_number_negative", "TOK_typereference", "TOK_objectclassreference",
685 "TOK_typefieldreference", "TOK_valuefieldreference", "TOK_ABSENT",
686 "TOK_ABSTRACT_SYNTAX", "TOK_ALL", "TOK_ANY", "TOK_APPLICATION",
687 "TOK_AUTOMATIC", "TOK_BEGIN", "TOK_BIT", "TOK_BMPString", "TOK_BOOLEAN",
688 "TOK_BY", "TOK_CHARACTER", "TOK_CHOICE", "TOK_CLASS", "TOK_COMPONENT",
689 "TOK_COMPONENTS", "TOK_CONSTRAINED", "TOK_CONTAINING", "TOK_DEFAULT",
690 "TOK_DEFINITIONS", "TOK_DEFINED", "TOK_EMBEDDED", "TOK_ENCODED",
691 "TOK_END", "TOK_ENUMERATED", "TOK_EXPLICIT", "TOK_EXPORTS",
692 "TOK_EXTENSIBILITY", "TOK_EXTERNAL", "TOK_FALSE", "TOK_FROM",
693 "TOK_GeneralizedTime", "TOK_GeneralString", "TOK_GraphicString",
694 "TOK_IA5String", "TOK_IDENTIFIER", "TOK_IMPLICIT", "TOK_IMPLIED",
695 "TOK_IMPORTS", "TOK_INCLUDES", "TOK_INSTANCE", "TOK_INTEGER",
696 "TOK_ISO646String", "TOK_MAX", "TOK_MIN", "TOK_MINUS_INFINITY",
697 "TOK_NULL", "TOK_NumericString", "TOK_OBJECT", "TOK_ObjectDescriptor",
698 "TOK_OCTET", "TOK_OF", "TOK_OPTIONAL", "TOK_PATTERN", "TOK_PDV",
699 "TOK_PLUS_INFINITY", "TOK_PRESENT", "TOK_PrintableString",
700 "TOK_PRIVATE", "TOK_REAL", "TOK_RELATIVE_OID", "TOK_SEQUENCE",
701 "TOK_SET", "TOK_SIZE", "TOK_STRING", "TOK_SYNTAX", "TOK_T61String",
702 "TOK_TAGS", "TOK_TeletexString", "TOK_TRUE", "TOK_TYPE_IDENTIFIER",
703 "TOK_UNIQUE", "TOK_UNIVERSAL", "TOK_UniversalString", "TOK_UTCTime",
704 "TOK_UTF8String", "TOK_VideotexString", "TOK_VisibleString", "TOK_WITH",
705 "'|'", "TOK_UNION", "'^'", "TOK_INTERSECTION", "TOK_EXCEPT",
706 "TOK_TwoDots", "TOK_ThreeDots", "TOK_tag", "'{'", "'}'", "'('", "')'",
707 "';'", "','", "':'", "'!'", "'.'", "'<'", "'@'", "$accept",
708 "ParsedGrammar", "ModuleList", "ModuleSpecification",
709 "optObjectIdentifier", "ObjectIdentifier", "ObjectIdentifierBody",
710 "ObjectIdentifierElement", "optModuleSpecificationFlags",
711 "ModuleSpecificationFlags", "ModuleSpecificationFlag",
712 "optModuleSpecificationBody", "ModuleSpecificationBody",
713 "ModuleSpecificationElement", "ImportsDefinition", "ImportsBundleSet",
714 "ImportsBundle", "ImportsList", "ImportsElement", "ExportsDefinition",
715 "ExportsBody", "ExportsElement", "ValueSetDefinition", "DefinedTypeRef",
716 "optValueSetBody", "DataTypeReference", "ParameterArgumentList",
717 "ParameterArgumentName", "ActualParameterList", "ActualParameter",
718 "ConstructedDataTypeDefinition", "ClassDeclaration", "optUnique",
719 "ClassFieldList", "ClassField", "optWithSyntax", "WithSyntax", "@1",
720 "WithSyntaxFormat", "WithSyntaxFormatToken", "DataTypeMember",
721 "ConstrainedTypeDeclaration", "ExtensionAndException",
722 "TypeDeclaration", "ComplexTypeReference",
723 "ComplexTypeReferenceAmpList", "ComplexTypeReferenceElement",
724 "ClassFieldIdentifier", "ClassFieldName", "ValueDefinition",
725 "InlineOrDefinedValue", "@2", "DefinedValue", "Opaque", "BasicTypeId",
726 "BasicTypeId_UniverationCompatible", "BasicType", "BasicString",
727 "ConstructedType", "optConstraints", "Union", "Intersection", "Except",
728 "Constraints", "SingleConstraint", "ConstraintElementSet",
729 "ConstraintElement", "ConstraintElementUnion",
730 "ConstraintElementIntersection", "ConstraintElementException",
731 "ConstraintSubtypeElement", "ConstraintRangeSpec", "ConstraintSpec",
732 "ConstraintValue", "WithComponents", "WithComponentsList",
733 "WithComponentsElement", "optPresenceConstraint", "PresenceConstraint",
734 "TableConstraint", "SimpleTableConstraint",
735 "ComponentRelationConstraint", "AtNotationList", "AtNotationElement",
736 "ComponentIdList", "optMarker", "Marker", "DefaultValue", "@3",
737 "UniverationDefinition", "UniverationList", "UniverationElement",
738 "SignedNumber", "optTag", "Tag", "TypeRefName", "ObjectClassReference",
739 "Identifier", "TaggedIdentifier", 0
740};
741#endif
742
743# ifdef YYPRINT
744/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
745 token YYLEX-NUM. */
746static const unsigned short yytoknum[] =
747{
748 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
749 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
750 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
751 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
752 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
753 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
754 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
755 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
756 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
757 345, 346, 347, 348, 124, 349, 94, 350, 351, 352,
758 353, 354, 123, 125, 40, 41, 59, 44, 58, 33,
759 46, 60, 64
760};
761# endif
762
763/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
764static const unsigned char yyr1[] =
765{
766 0, 113, 114, 115, 115, 116, 117, 117, 118, 118,
767 119, 119, 120, 120, 120, 121, 121, 122, 122, 123,
768 123, 123, 123, 124, 124, 125, 125, 126, 126, 126,
769 126, 126, 126, 127, 127, 128, 128, 129, 130, 130,
770 131, 131, 132, 132, 132, 133, 133, 134, 134, 135,
771 136, 136, 137, 137, 138, 138, 138, 138, 139, 139,
772 140, 140, 140, 141, 141, 142, 142, 143, 143, 144,
773 145, 145, 146, 146, 147, 147, 147, 148, 148, 150,
774 149, 151, 151, 152, 152, 153, 153, 154, 155, 155,
775 155, 156, 156, 156, 156, 156, 156, 157, 157, 157,
776 157, 157, 158, 158, 159, 160, 161, 161, 162, 164,
777 163, 163, 163, 163, 163, 163, 165, 165, 166, 166,
778 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
779 167, 167, 168, 168, 168, 169, 169, 170, 170, 170,
780 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
781 170, 171, 171, 171, 171, 171, 171, 171, 172, 172,
782 173, 173, 174, 174, 175, 176, 176, 176, 177, 178,
783 178, 178, 178, 178, 179, 180, 180, 181, 181, 182,
784 182, 183, 183, 183, 183, 183, 184, 184, 184, 184,
785 185, 185, 186, 186, 186, 186, 186, 186, 186, 187,
786 188, 188, 189, 189, 190, 190, 191, 191, 191, 192,
787 192, 193, 194, 195, 195, 196, 196, 197, 197, 198,
788 198, 199, 199, 200, 200, 201, 200, 202, 202, 203,
789 203, 204, 204, 204, 204, 204, 205, 205, 206, 206,
790 207, 207, 207, 208, 208, 209, 210, 211, 211
791};
792
793/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
794static const unsigned char yyr2[] =
795{
796 0, 2, 1, 1, 2, 8, 0, 1, 3, 2,
797 1, 2, 1, 4, 1, 0, 1, 1, 2, 2,
798 2, 2, 2, 0, 1, 1, 2, 1, 1, 1,
799 1, 1, 1, 3, 2, 1, 2, 4, 1, 3,
800 1, 1, 3, 3, 2, 1, 3, 1, 1, 6,
801 1, 1, 0, 1, 4, 4, 3, 6, 1, 3,
802 1, 3, 3, 1, 3, 1, 1, 1, 3, 5,
803 0, 1, 1, 3, 2, 3, 4, 0, 1, 0,
804 6, 1, 2, 1, 1, 2, 1, 3, 1, 3,
805 3, 1, 1, 1, 4, 1, 3, 1, 3, 3,
806 1, 3, 1, 3, 1, 1, 1, 1, 4, 0,
807 3, 1, 1, 1, 1, 1, 1, 3, 1, 2,
808 1, 1, 1, 1, 2, 2, 1, 1, 2, 2,
809 1, 1, 1, 1, 2, 1, 2, 1, 1, 1,
810 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
811 1, 4, 4, 4, 4, 4, 1, 4, 0, 1,
812 1, 1, 1, 1, 1, 4, 1, 2, 3, 1,
813 3, 5, 1, 3, 1, 1, 3, 1, 3, 1,
814 3, 1, 3, 4, 1, 1, 1, 2, 2, 3,
815 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
816 1, 3, 1, 3, 0, 1, 1, 1, 1, 1,
817 1, 3, 4, 1, 3, 2, 3, 1, 3, 0,
818 1, 1, 2, 1, 1, 0, 3, 2, 3, 1,
819 3, 1, 4, 4, 1, 1, 1, 1, 0, 1,
820 1, 2, 2, 1, 1, 1, 1, 1, 2
821};
822
823/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
824 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
825 means the default is an error. */
826static const unsigned char yydefact[] =
827{
828 0, 243, 244, 0, 2, 3, 6, 1, 4, 0,
829 0, 7, 246, 14, 9, 0, 10, 12, 15, 8,
830 11, 0, 0, 0, 0, 0, 0, 16, 17, 0,
831 21, 19, 22, 20, 0, 18, 13, 23, 137, 0,
832 138, 139, 140, 0, 141, 142, 150, 143, 144, 145,
833 146, 147, 148, 149, 0, 24, 25, 27, 28, 31,
834 29, 30, 32, 0, 0, 0, 44, 0, 45, 47,
835 48, 34, 0, 35, 0, 38, 40, 41, 5, 26,
836 238, 97, 245, 0, 120, 0, 0, 133, 127, 131,
837 132, 121, 0, 0, 122, 126, 130, 0, 0, 50,
838 51, 123, 100, 0, 43, 42, 0, 33, 36, 0,
839 0, 0, 240, 56, 0, 239, 0, 134, 129, 128,
840 125, 124, 0, 58, 0, 60, 0, 0, 0, 46,
841 6, 39, 0, 242, 241, 97, 245, 156, 0, 0,
842 158, 158, 54, 55, 158, 95, 135, 123, 91, 92,
843 93, 0, 98, 99, 0, 0, 0, 0, 52, 106,
844 107, 101, 102, 104, 111, 113, 112, 236, 237, 109,
845 108, 115, 114, 0, 116, 37, 0, 72, 219, 105,
846 0, 0, 0, 0, 0, 0, 0, 159, 166, 0,
847 0, 219, 0, 136, 0, 0, 59, 62, 61, 194,
848 197, 191, 196, 195, 190, 198, 0, 172, 0, 0,
849 53, 169, 174, 175, 177, 179, 0, 181, 185, 184,
850 209, 210, 192, 193, 0, 0, 0, 77, 0, 0,
851 221, 70, 219, 74, 220, 0, 88, 0, 67, 86,
852 247, 0, 96, 0, 0, 0, 0, 167, 0, 0,
853 87, 235, 227, 0, 229, 234, 231, 0, 63, 65,
854 66, 57, 0, 0, 0, 49, 0, 160, 161, 0,
855 162, 163, 0, 164, 0, 0, 186, 0, 0, 0,
856 103, 118, 110, 117, 0, 69, 78, 73, 225, 224,
857 223, 222, 71, 75, 70, 157, 0, 151, 0, 248,
858 85, 0, 152, 168, 154, 153, 155, 228, 0, 0,
859 94, 0, 0, 173, 211, 170, 176, 178, 180, 0,
860 187, 188, 182, 0, 0, 213, 119, 0, 0, 76,
861 89, 90, 68, 165, 230, 0, 0, 64, 202, 0,
862 200, 158, 0, 183, 189, 0, 215, 217, 212, 0,
863 79, 226, 233, 232, 199, 0, 204, 171, 216, 0,
864 214, 0, 201, 207, 208, 206, 203, 205, 218, 83,
865 0, 81, 84, 80, 82
866};
867
868/* YYDEFGOTO[NTERM-NUM]. */
869static const short yydefgoto[] =
870{
871 -1, 3, 4, 5, 10, 11, 15, 16, 26, 27,
872 28, 54, 55, 56, 57, 72, 73, 74, 75, 58,
873 67, 68, 59, 98, 209, 60, 122, 123, 257, 258,
874 237, 113, 293, 176, 177, 285, 286, 361, 370, 371,
875 238, 143, 239, 144, 145, 161, 162, 178, 179, 61,
876 170, 225, 171, 282, 146, 147, 148, 149, 150, 186,
877 269, 272, 274, 187, 188, 210, 211, 212, 213, 214,
878 215, 278, 216, 217, 218, 339, 340, 366, 367, 219,
879 220, 221, 324, 325, 346, 233, 234, 291, 328, 193,
880 253, 254, 222, 114, 115, 151, 102, 223, 241
881};
882
883/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
884 STATE-NUM. */
885#define YYPACT_NINF -206
886static const short yypact[] =
887{
888 227, -206, -206, 27, 227, -206, -38, -206, -206, 13,
889 52, -206, -206, -206, -206, 47, -206, -12, 42, -206,
890 -206, 106, 51, 76, 111, 83, 146, 42, -206, 63,
891 -206, -206, -206, -206, 152, -206, -206, 380, -206, 12,
892 -206, -206, -206, 91, -206, -206, -206, -206, -206, -206,
893 -206, -206, -206, -206, 160, 380, -206, -206, -206, -206,
894 -206, -206, -206, 131, 670, 107, -206, 147, -206, -206,
895 -206, -206, 24, -206, -19, -206, -206, -206, -206, -206,
896 -3, 114, -206, 150, -206, 155, 174, -206, -206, -206,
897 -206, -206, 201, 184, -206, -206, -206, 686, 258, -206,
898 -206, -206, 156, 265, -206, -206, 191, -206, -206, 227,
899 191, 168, 101, -206, 537, -206, 191, -206, -206, -206,
900 -206, -206, 75, -206, 164, 166, 183, 242, 33, -206,
901 -38, -206, 242, -206, -206, 44, 186, 249, 189, 220,
902 -8, 36, -206, -206, -13, -206, -206, 190, -206, -206,
903 -206, 192, -206, -206, 290, 686, 293, 293, 238, -206,
904 -206, 188, -206, -206, -206, -206, -206, -206, -206, -206,
905 -206, -206, -206, 194, -206, -206, 90, -206, 462, -206,
906 280, 23, 246, 202, 23, 238, 243, 208, -206, 23,
907 244, 20, 59, -206, 321, 612, -206, -206, -206, -206,
908 -206, -206, -206, -206, -206, -206, 283, 210, 227, 212,
909 -206, 211, 165, 182, 221, -206, 217, -40, -206, -206,
910 222, -206, -206, -206, 242, 319, 293, 234, 242, 206,
911 -206, 248, 20, -206, -206, 293, 219, 97, -206, -206,
912 229, 612, -206, 238, 115, 230, 612, -206, 118, 612,
913 -206, -206, -206, 120, -206, -206, 233, 128, -206, -206,
914 -206, -206, 239, 67, 250, -206, 252, -206, -206, 67,
915 -206, -206, 67, -206, 67, 238, 231, 255, 267, 237,
916 -206, -206, 351, -206, 276, -206, -206, -206, -206, -206,
917 -206, -206, -206, -206, 248, -206, 199, -206, 23, -206,
918 -206, 253, -206, -206, -206, -206, -206, -206, 71, 199,
919 -206, 321, 29, -206, -206, 254, 182, 221, -206, 257,
920 -206, 260, -206, -6, 133, -206, -206, 261, 319, -206,
921 -206, -206, -206, -206, -206, 268, 269, -206, -206, 134,
922 -206, -13, 67, -206, -206, 293, 256, -206, -206, 237,
923 -206, 351, -206, -206, -206, 29, 18, -206, 256, 293,
924 -206, 177, -206, -206, -206, -206, -206, -206, -206, -206,
925 3, -206, -206, -206, -206
926};
927
928/* YYPGOTO[NTERM-NUM]. */
929static const short yypgoto[] =
930{
931 -206, -206, -206, 355, 235, -206, -206, 357, -206, -206,
932 348, -206, -206, 324, -206, -206, 308, -206, 271, -206,
933 -206, 281, -206, 325, -206, -206, -206, 245, -206, 79,
934 -28, -206, 100, -206, 171, -206, -206, -206, -206, 31,
935 108, -117, -206, -189, -54, -206, 181, -175, -115, -206,
936 -206, -206, -165, 80, -50, -45, -206, 58, -206, -140,
937 -206, -206, -206, -206, 228, -111, -205, -206, 138, 142,
938 143, -206, -206, -178, -206, -206, 61, -206, -206, -206,
939 -206, -206, -206, 69, 74, -142, -206, -206, -206, -206,
940 -206, 112, -120, -206, 185, 11, -206, -9, -206
941};
942
943/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
944 positive, shift that token. If negative, reduce the rule which
945 number is the opposite. If zero, do what YYDEFACT says.
946 If YYTABLE_NINF, parse error. */
947#define YYTABLE_NINF -245
948static const short yytable[] =
949{
950 17, 190, 12, 232, 191, 259, 17, 369, 172, 99,
951 99, 6, 163, 100, 100, 6, 159, 160, 101, 101,
952 12, 12, 13, 1, 2, 111, 109, 7, 64, 65,
953 70, 12, 12, 363, 77, 1, 2, 12, 164, 165,
954 166, 12, 167, 168, 1, 2, 64, 124, 63, 250,
955 69, 290, 101, 229, 76, 12, 13, 304, 313, 276,
956 306, 231, 22, 77, 9, 183, 63, 12, 167, 168,
957 183, 277, 255, 199, 245, 12, 167, 168, 261, 12,
958 167, 168, 23, 76, 24, 364, 18, 230, 110, 365,
959 294, 185, 21, 25, 184, 62, 185, 70, 112, 12,
960 322, 77, 1, 2, 345, 124, 373, 153, 125, 163,
961 101, 200, 201, 62, 183, 29, 14, 69, 66, 174,
962 130, 76, 259, 236, 300, 202, 203, 152, 242, 338,
963 107, 330, 301, 30, 80, 169, 71, 357, 189, 173,
964 185, 133, 81, 82, 335, 204, -243, 197, 198, 34,
965 19, 205, 134, 83, 116, 84, 244, 85, 31, 251,
966 206, 248, 252, 32, 319, 33, 125, 86, 36, 208,
967 87, 251, 240, 37, 88, 240, 331, 89, 154, 289,
968 240, 369, 155, 256, 101, 260, 372, 90, 255, 336,
969 159, 160, 91, 227, 92, 372, 93, 228, 78, 12,
970 297, 356, 1, 2, 298, 94, 95, 12, 167, 168,
971 1, 2, 199, 104, 12, 167, 168, 283, 302, 264,
972 96, 305, 298, 307, 116, 298, 295, 308, 83, 117,
973 84, 310, 85, 97, 118, 311, 348, 354, 1, 2,
974 349, 355, 86, 119, 199, 87, 12, 167, 168, 88,
975 200, 120, 89, 105, 106, 159, 160, 81, 82, 267,
976 268, 126, 90, 121, 202, 203, 127, 91, 128, 92,
977 132, 93, 156, 199, 157, 12, 167, 168, 270, 271,
978 94, 95, 200, 201, 180, 158, 182, 174, -244, 240,
979 205, 181, 192, 195, 194, 96, 202, 203, 224, 256,
980 174, 12, 260, 341, 226, 235, 243, 173, 288, 246,
981 249, 200, 185, 262, 347, 265, 204, 263, 266, 273,
982 173, 275, 205, 281, 279, 202, 203, 284, 296, 12,
983 112, 206, 135, 136, 292, 303, 347, 309, 207, 137,
984 208, 312, 320, 83, 38, 84, 341, 85, 138, 323,
985 368, 205, 315, 314, 321, 326, 327, 86, 333, 8,
986 87, 342, 343, 350, 88, 175, 359, 89, 40, 41,
987 42, 344, 20, 352, 353, 35, 139, 90, 44, 79,
988 108, 131, 91, 45, 92, 46, 93, 129, 12, 103,
989 337, 1, 2, 47, 329, 94, 95, 140, 141, 287,
990 196, 374, 48, 38, 49, 280, 332, 316, 351, 50,
991 96, 51, 52, 53, 317, 247, 362, 318, 360, 358,
992 334, 39, 0, 0, 0, 299, 0, 40, 41, 42,
993 0, 0, 0, 43, 0, 0, 0, 44, 0, 0,
994 0, 0, 45, 0, 46, 0, 0, 0, 0, 0,
995 0, 0, 47, 0, 0, 0, 0, 0, 0, 0,
996 0, 48, 0, 49, 0, 0, 0, 0, 50, 0,
997 51, 52, 53, 135, 136, 159, 160, 0, 0, 0,
998 137, 0, 0, 0, 83, 38, 84, 0, 85, 138,
999 0, 0, 0, 0, 0, 229, 0, 0, 86, 0,
1000 0, 87, 0, 0, 0, 88, 0, 0, 89, 40,
1001 41, 42, 0, 0, 0, 0, 0, 139, 90, 44,
1002 0, 0, 0, 91, 45, 92, 46, 93, 0, 230,
1003 0, 0, 0, 0, 47, 0, 94, 95, 140, 141,
1004 0, 0, 0, 48, 0, 49, 0, 0, 135, 136,
1005 50, 96, 51, 52, 53, 137, 0, 0, 0, 83,
1006 38, 84, 0, 85, 138, 0, 0, 0, 0, 0,
1007 0, 0, 0, 86, 0, 0, 87, 0, 0, 0,
1008 88, 0, 0, 89, 40, 41, 42, 0, 0, 0,
1009 0, 0, 139, 90, 44, 0, 0, 0, 91, 45,
1010 92, 46, 93, 0, 0, 0, 0, 0, 0, 47,
1011 0, 94, 95, 140, 141, 0, 0, 0, 48, 0,
1012 49, 0, 142, 135, 136, 50, 96, 51, 52, 53,
1013 137, 0, 0, 0, 83, 38, 84, 0, 85, 138,
1014 0, 0, 0, 0, 0, 0, 0, 0, 86, 0,
1015 0, 87, 0, 0, 0, 88, 0, 0, 89, 40,
1016 41, 42, 0, 0, 0, 0, 0, 139, 90, 44,
1017 0, 0, 0, 91, 45, 92, 46, 93, 0, 0,
1018 0, 81, 82, 0, 47, 0, 94, 95, 140, 141,
1019 0, 0, 83, 48, 84, 49, 85, 1, 2, 0,
1020 50, 96, 51, 52, 53, 0, 86, 0, 83, 87,
1021 84, 0, 85, 88, 0, 0, 89, 0, 0, 0,
1022 0, 0, 86, 0, 0, 87, 90, 0, 0, 88,
1023 0, 91, 89, 92, 0, 93, 0, 0, 0, 0,
1024 0, 0, 90, 0, 94, 95, 0, 91, 0, 92,
1025 0, 93, 0, 0, 0, 0, 0, 0, 0, 96,
1026 94, 95, 0, 0, 0, 0, 0, 0, 0, 0,
1027 0, 0, 0, 0, 0, 96
1028};
1029
1030static const short yycheck[] =
1031{
1032 9, 141, 8, 178, 144, 194, 15, 4, 128, 63,
1033 64, 0, 127, 63, 64, 4, 13, 14, 63, 64,
1034 8, 8, 9, 11, 12, 28, 45, 0, 37, 17,
1035 39, 8, 8, 15, 43, 11, 12, 8, 5, 6,
1036 7, 8, 9, 10, 11, 12, 55, 97, 37, 191,
1037 39, 229, 97, 33, 43, 8, 9, 246, 263, 99,
1038 249, 178, 20, 72, 102, 78, 55, 8, 9, 10,
1039 78, 111, 192, 6, 185, 8, 9, 10, 195, 8,
1040 9, 10, 40, 72, 42, 67, 34, 67, 107, 71,
1041 232, 104, 104, 51, 102, 37, 104, 106, 101, 8,
1042 278, 110, 11, 12, 110, 155, 103, 116, 97, 224,
1043 155, 44, 45, 55, 78, 9, 103, 106, 106, 128,
1044 109, 110, 311, 100, 241, 58, 59, 116, 182, 100,
1045 106, 296, 243, 82, 3, 102, 45, 342, 102, 128,
1046 104, 40, 11, 12, 309, 78, 102, 156, 157, 3,
1047 103, 84, 51, 22, 110, 24, 184, 26, 82, 100,
1048 93, 189, 103, 52, 275, 82, 155, 36, 105, 102,
1049 39, 100, 181, 21, 43, 184, 296, 46, 103, 229,
1050 189, 4, 107, 192, 229, 194, 361, 56, 308, 309,
1051 13, 14, 61, 103, 63, 370, 65, 107, 38, 8,
1052 103, 341, 11, 12, 107, 74, 75, 8, 9, 10,
1053 11, 12, 6, 106, 8, 9, 10, 226, 103, 208,
1054 89, 103, 107, 103, 110, 107, 235, 107, 22, 79,
1055 24, 103, 26, 102, 79, 107, 103, 103, 11, 12,
1056 107, 107, 36, 69, 6, 39, 8, 9, 10, 43,
1057 44, 50, 46, 106, 107, 13, 14, 11, 12, 94,
1058 95, 3, 56, 79, 58, 59, 110, 61, 3, 63,
1059 102, 65, 108, 6, 108, 8, 9, 10, 96, 97,
1060 74, 75, 44, 45, 35, 102, 66, 296, 102, 298,
1061 84, 102, 102, 3, 102, 89, 58, 59, 110, 308,
1062 309, 8, 311, 312, 110, 25, 104, 296, 102, 66,
1063 66, 44, 104, 30, 323, 103, 78, 107, 107, 98,
1064 309, 104, 84, 4, 102, 58, 59, 93, 109, 8,
1065 101, 93, 11, 12, 86, 105, 345, 104, 100, 18,
1066 102, 102, 111, 22, 23, 24, 355, 26, 27, 112,
1067 359, 84, 100, 103, 99, 4, 80, 36, 105, 4,
1068 39, 107, 105, 102, 43, 130, 110, 46, 47, 48,
1069 49, 111, 15, 105, 105, 27, 55, 56, 57, 55,
1070 72, 110, 61, 62, 63, 64, 65, 106, 8, 64,
1071 311, 11, 12, 72, 294, 74, 75, 76, 77, 228,
1072 155, 370, 81, 23, 83, 224, 298, 269, 328, 88,
1073 89, 90, 91, 92, 272, 187, 355, 274, 349, 345,
1074 308, 41, -1, -1, -1, 240, -1, 47, 48, 49,
1075 -1, -1, -1, 53, -1, -1, -1, 57, -1, -1,
1076 -1, -1, 62, -1, 64, -1, -1, -1, -1, -1,
1077 -1, -1, 72, -1, -1, -1, -1, -1, -1, -1,
1078 -1, 81, -1, 83, -1, -1, -1, -1, 88, -1,
1079 90, 91, 92, 11, 12, 13, 14, -1, -1, -1,
1080 18, -1, -1, -1, 22, 23, 24, -1, 26, 27,
1081 -1, -1, -1, -1, -1, 33, -1, -1, 36, -1,
1082 -1, 39, -1, -1, -1, 43, -1, -1, 46, 47,
1083 48, 49, -1, -1, -1, -1, -1, 55, 56, 57,
1084 -1, -1, -1, 61, 62, 63, 64, 65, -1, 67,
1085 -1, -1, -1, -1, 72, -1, 74, 75, 76, 77,
1086 -1, -1, -1, 81, -1, 83, -1, -1, 11, 12,
1087 88, 89, 90, 91, 92, 18, -1, -1, -1, 22,
1088 23, 24, -1, 26, 27, -1, -1, -1, -1, -1,
1089 -1, -1, -1, 36, -1, -1, 39, -1, -1, -1,
1090 43, -1, -1, 46, 47, 48, 49, -1, -1, -1,
1091 -1, -1, 55, 56, 57, -1, -1, -1, 61, 62,
1092 63, 64, 65, -1, -1, -1, -1, -1, -1, 72,
1093 -1, 74, 75, 76, 77, -1, -1, -1, 81, -1,
1094 83, -1, 85, 11, 12, 88, 89, 90, 91, 92,
1095 18, -1, -1, -1, 22, 23, 24, -1, 26, 27,
1096 -1, -1, -1, -1, -1, -1, -1, -1, 36, -1,
1097 -1, 39, -1, -1, -1, 43, -1, -1, 46, 47,
1098 48, 49, -1, -1, -1, -1, -1, 55, 56, 57,
1099 -1, -1, -1, 61, 62, 63, 64, 65, -1, -1,
1100 -1, 11, 12, -1, 72, -1, 74, 75, 76, 77,
1101 -1, -1, 22, 81, 24, 83, 26, 11, 12, -1,
1102 88, 89, 90, 91, 92, -1, 36, -1, 22, 39,
1103 24, -1, 26, 43, -1, -1, 46, -1, -1, -1,
1104 -1, -1, 36, -1, -1, 39, 56, -1, -1, 43,
1105 -1, 61, 46, 63, -1, 65, -1, -1, -1, -1,
1106 -1, -1, 56, -1, 74, 75, -1, 61, -1, 63,
1107 -1, 65, -1, -1, -1, -1, -1, -1, -1, 89,
1108 74, 75, -1, -1, -1, -1, -1, -1, -1, -1,
1109 -1, -1, -1, -1, -1, 89
1110};
1111
1112/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1113 symbol of state STATE-NUM. */
1114static const unsigned char yystos[] =
1115{
1116 0, 11, 12, 114, 115, 116, 208, 0, 116, 102,
1117 117, 118, 8, 9, 103, 119, 120, 210, 34, 103,
1118 120, 104, 20, 40, 42, 51, 121, 122, 123, 9,
1119 82, 82, 52, 82, 3, 123, 105, 21, 23, 41,
1120 47, 48, 49, 53, 57, 62, 64, 72, 81, 83,
1121 88, 90, 91, 92, 124, 125, 126, 127, 132, 135,
1122 138, 162, 170, 208, 210, 17, 106, 133, 134, 208,
1123 210, 45, 128, 129, 130, 131, 208, 210, 38, 126,
1124 3, 11, 12, 22, 24, 26, 36, 39, 43, 46,
1125 56, 61, 63, 65, 74, 75, 89, 102, 136, 157,
1126 167, 168, 209, 136, 106, 106, 107, 106, 129, 45,
1127 107, 28, 101, 144, 206, 207, 110, 79, 79, 69,
1128 50, 79, 139, 140, 167, 208, 3, 110, 3, 134,
1129 208, 131, 102, 40, 51, 11, 12, 18, 27, 55,
1130 76, 77, 85, 154, 156, 157, 167, 168, 169, 170,
1131 171, 208, 208, 210, 103, 107, 108, 108, 102, 13,
1132 14, 158, 159, 161, 5, 6, 7, 9, 10, 102,
1133 163, 165, 205, 208, 210, 117, 146, 147, 160, 161,
1134 35, 102, 66, 78, 102, 104, 172, 176, 177, 102,
1135 172, 172, 102, 202, 102, 3, 140, 210, 210, 6,
1136 44, 45, 58, 59, 78, 84, 93, 100, 102, 137,
1137 178, 179, 180, 181, 182, 183, 185, 186, 187, 192,
1138 193, 194, 205, 210, 110, 164, 110, 103, 107, 33,
1139 67, 154, 160, 198, 199, 25, 100, 143, 153, 155,
1140 210, 211, 157, 104, 143, 178, 66, 177, 143, 66,
1141 198, 100, 103, 203, 204, 205, 210, 141, 142, 156,
1142 210, 154, 30, 107, 208, 103, 107, 94, 95, 173,
1143 96, 97, 174, 98, 175, 104, 99, 111, 184, 102,
1144 159, 4, 166, 210, 93, 148, 149, 147, 102, 167,
1145 186, 200, 86, 145, 198, 210, 109, 103, 107, 207,
1146 154, 178, 103, 105, 156, 103, 156, 103, 107, 104,
1147 103, 107, 102, 179, 103, 100, 181, 182, 183, 178,
1148 111, 99, 186, 112, 195, 196, 4, 80, 201, 145,
1149 165, 205, 153, 105, 204, 165, 205, 142, 100, 188,
1150 189, 210, 107, 105, 111, 110, 197, 210, 103, 107,
1151 102, 166, 105, 105, 103, 107, 172, 179, 197, 110,
1152 196, 150, 189, 15, 67, 71, 190, 191, 210, 4,
1153 151, 152, 160, 103, 152
1154};
1155
1156#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1157# define YYSIZE_T __SIZE_TYPE__
1158#endif
1159#if ! defined (YYSIZE_T) && defined (size_t)
1160# define YYSIZE_T size_t
1161#endif
1162#if ! defined (YYSIZE_T)
1163# if defined (__STDC__) || defined (__cplusplus)
1164# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1165# define YYSIZE_T size_t
1166# endif
1167#endif
1168#if ! defined (YYSIZE_T)
1169# define YYSIZE_T unsigned int
1170#endif
vlmfa67ddc2004-06-03 03:38:44 +00001171
1172#define yyerrok (yyerrstatus = 0)
1173#define yyclearin (yychar = YYEMPTY)
1174#define YYEMPTY -2
1175#define YYEOF 0
vlm827ac182004-06-03 05:07:41 +00001176
vlmfa67ddc2004-06-03 03:38:44 +00001177#define YYACCEPT goto yyacceptlab
vlm827ac182004-06-03 05:07:41 +00001178#define YYABORT goto yyabortlab
vlmfa67ddc2004-06-03 03:38:44 +00001179#define YYERROR goto yyerrlab1
vlm827ac182004-06-03 05:07:41 +00001180
1181/* Like YYERROR except do call yyerror. This remains here temporarily
1182 to ease the transition to the new meaning of YYERROR, for GCC.
vlmfa67ddc2004-06-03 03:38:44 +00001183 Once GCC version 2 has supplanted version 1, this can go. */
vlm827ac182004-06-03 05:07:41 +00001184
vlmfa67ddc2004-06-03 03:38:44 +00001185#define YYFAIL goto yyerrlab
vlm827ac182004-06-03 05:07:41 +00001186
vlmfa67ddc2004-06-03 03:38:44 +00001187#define YYRECOVERING() (!!yyerrstatus)
vlm827ac182004-06-03 05:07:41 +00001188
1189#define YYBACKUP(Token, Value) \
vlmfa67ddc2004-06-03 03:38:44 +00001190do \
1191 if (yychar == YYEMPTY && yylen == 1) \
vlm827ac182004-06-03 05:07:41 +00001192 { \
1193 yychar = (Token); \
1194 yylval = (Value); \
vlmfa67ddc2004-06-03 03:38:44 +00001195 yychar1 = YYTRANSLATE (yychar); \
1196 YYPOPSTACK; \
1197 goto yybackup; \
1198 } \
1199 else \
vlm827ac182004-06-03 05:07:41 +00001200 { \
1201 yyerror ("syntax error: cannot back up"); \
1202 YYERROR; \
1203 } \
vlmfa67ddc2004-06-03 03:38:44 +00001204while (0)
1205
1206#define YYTERROR 1
1207#define YYERRCODE 256
1208
vlm827ac182004-06-03 05:07:41 +00001209/* YYLLOC_DEFAULT -- Compute the default location (before the actions
1210 are run). */
1211
1212#ifndef YYLLOC_DEFAULT
1213# define YYLLOC_DEFAULT(Current, Rhs, N) \
1214 Current.first_line = Rhs[1].first_line; \
1215 Current.first_column = Rhs[1].first_column; \
1216 Current.last_line = Rhs[N].last_line; \
1217 Current.last_column = Rhs[N].last_column;
vlmfa67ddc2004-06-03 03:38:44 +00001218#endif
1219
vlm827ac182004-06-03 05:07:41 +00001220/* YYLEX -- calling `yylex' with the right arguments. */
vlmfa67ddc2004-06-03 03:38:44 +00001221
vlm827ac182004-06-03 05:07:41 +00001222#define YYLEX yylex ()
vlmfa67ddc2004-06-03 03:38:44 +00001223
vlm827ac182004-06-03 05:07:41 +00001224/* Enable debugging if requested. */
1225#if YYDEBUG
vlmfa67ddc2004-06-03 03:38:44 +00001226
vlm827ac182004-06-03 05:07:41 +00001227# ifndef YYFPRINTF
1228# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1229# define YYFPRINTF fprintf
1230# endif
vlmfa67ddc2004-06-03 03:38:44 +00001231
vlm827ac182004-06-03 05:07:41 +00001232# define YYDPRINTF(Args) \
1233do { \
1234 if (yydebug) \
1235 YYFPRINTF Args; \
1236} while (0)
1237# define YYDSYMPRINT(Args) \
1238do { \
1239 if (yydebug) \
1240 yysymprint Args; \
1241} while (0)
1242/* Nonzero means print parse trace. It is left uninitialized so that
1243 multiple parsers can coexist. */
1244int yydebug;
1245#else /* !YYDEBUG */
1246# define YYDPRINTF(Args)
1247# define YYDSYMPRINT(Args)
1248#endif /* !YYDEBUG */
vlmfa67ddc2004-06-03 03:38:44 +00001249
vlm827ac182004-06-03 05:07:41 +00001250/* YYINITDEPTH -- initial size of the parser's stacks. */
vlmfa67ddc2004-06-03 03:38:44 +00001251#ifndef YYINITDEPTH
vlm827ac182004-06-03 05:07:41 +00001252# define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +00001253#endif
1254
vlm827ac182004-06-03 05:07:41 +00001255/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1256 if the built-in stack extension method is used).
1257
1258 Do not make this value too large; the results are undefined if
1259 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
1260 evaluated with infinite-precision integer arithmetic. */
vlmfa67ddc2004-06-03 03:38:44 +00001261
1262#if YYMAXDEPTH == 0
vlm827ac182004-06-03 05:07:41 +00001263# undef YYMAXDEPTH
vlmfa67ddc2004-06-03 03:38:44 +00001264#endif
1265
1266#ifndef YYMAXDEPTH
vlm827ac182004-06-03 05:07:41 +00001267# define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +00001268#endif
vlm827ac182004-06-03 05:07:41 +00001269
vlmfa67ddc2004-06-03 03:38:44 +00001270
vlmfa67ddc2004-06-03 03:38:44 +00001271
vlm827ac182004-06-03 05:07:41 +00001272#if YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00001273
vlm827ac182004-06-03 05:07:41 +00001274# ifndef yystrlen
1275# if defined (__GLIBC__) && defined (_STRING_H)
1276# define yystrlen strlen
1277# else
1278/* Return the length of YYSTR. */
1279static YYSIZE_T
1280# if defined (__STDC__) || defined (__cplusplus)
1281yystrlen (const char *yystr)
1282# else
1283yystrlen (yystr)
1284 const char *yystr;
1285# endif
vlmfa67ddc2004-06-03 03:38:44 +00001286{
vlm827ac182004-06-03 05:07:41 +00001287 register const char *yys = yystr;
vlmfa67ddc2004-06-03 03:38:44 +00001288
vlm827ac182004-06-03 05:07:41 +00001289 while (*yys++ != '\0')
1290 continue;
1291
1292 return yys - yystr - 1;
1293}
1294# endif
1295# endif
1296
1297# ifndef yystpcpy
1298# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1299# define yystpcpy stpcpy
1300# else
1301/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1302 YYDEST. */
1303static char *
1304# if defined (__STDC__) || defined (__cplusplus)
1305yystpcpy (char *yydest, const char *yysrc)
1306# else
1307yystpcpy (yydest, yysrc)
1308 char *yydest;
1309 const char *yysrc;
1310# endif
1311{
1312 register char *yyd = yydest;
1313 register const char *yys = yysrc;
1314
1315 while ((*yyd++ = *yys++) != '\0')
1316 continue;
1317
1318 return yyd - 1;
1319}
1320# endif
1321# endif
1322
1323#endif /* !YYERROR_VERBOSE */
1324
1325
1326
1327#if YYDEBUG
1328/*-----------------------------.
1329| Print this symbol on YYOUT. |
1330`-----------------------------*/
1331
1332static void
1333#if defined (__STDC__) || defined (__cplusplus)
1334yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue)
1335#else
1336yysymprint (yyout, yytype, yyvalue)
1337 FILE* yyout;
1338 int yytype;
1339 YYSTYPE yyvalue;
1340#endif
1341{
1342 /* Pacify ``unused variable'' warnings. */
1343 (void) yyvalue;
1344
1345 if (yytype < YYNTOKENS)
1346 {
1347 YYFPRINTF (yyout, "token %s (", yytname[yytype]);
1348# ifdef YYPRINT
1349 YYPRINT (yyout, yytoknum[yytype], yyvalue);
1350# endif
1351 }
1352 else
1353 YYFPRINTF (yyout, "nterm %s (", yytname[yytype]);
1354
1355 switch (yytype)
1356 {
1357 default:
1358 break;
1359 }
1360 YYFPRINTF (yyout, ")");
1361}
1362#endif /* YYDEBUG. */
1363
1364
1365/*-----------------------------------------------.
1366| Release the memory associated to this symbol. |
1367`-----------------------------------------------*/
1368
1369static void
1370#if defined (__STDC__) || defined (__cplusplus)
1371yydestruct (int yytype, YYSTYPE yyvalue)
1372#else
1373yydestruct (yytype, yyvalue)
1374 int yytype;
1375 YYSTYPE yyvalue;
1376#endif
1377{
1378 /* Pacify ``unused variable'' warnings. */
1379 (void) yyvalue;
1380
1381 switch (yytype)
1382 {
1383 default:
1384 break;
1385 }
vlmfa67ddc2004-06-03 03:38:44 +00001386}
1387
vlmfa67ddc2004-06-03 03:38:44 +00001388
vlmfa67ddc2004-06-03 03:38:44 +00001389
1390/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1391 into yyparse. The argument should have type void *.
1392 It should actually point to an object.
1393 Grammar actions can access the variable by casting it
1394 to the proper pointer type. */
1395
1396#ifdef YYPARSE_PARAM
vlm827ac182004-06-03 05:07:41 +00001397# if defined (__STDC__) || defined (__cplusplus)
1398# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1399# define YYPARSE_PARAM_DECL
1400# else
1401# define YYPARSE_PARAM_ARG YYPARSE_PARAM
1402# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1403# endif
1404#else /* !YYPARSE_PARAM */
1405# define YYPARSE_PARAM_ARG
1406# define YYPARSE_PARAM_DECL
1407#endif /* !YYPARSE_PARAM */
vlmfa67ddc2004-06-03 03:38:44 +00001408
1409/* Prevent warning if -Wstrict-prototypes. */
1410#ifdef __GNUC__
vlm827ac182004-06-03 05:07:41 +00001411# ifdef YYPARSE_PARAM
vlmfa67ddc2004-06-03 03:38:44 +00001412int yyparse (void *);
vlm827ac182004-06-03 05:07:41 +00001413# else
vlmfa67ddc2004-06-03 03:38:44 +00001414int yyparse (void);
vlm827ac182004-06-03 05:07:41 +00001415# endif
vlmfa67ddc2004-06-03 03:38:44 +00001416#endif
vlm827ac182004-06-03 05:07:41 +00001417
1418
1419/* The lookahead symbol. */
1420int yychar;
1421
1422/* The semantic value of the lookahead symbol. */
1423YYSTYPE yylval;
1424
1425/* Number of parse errors so far. */
1426int yynerrs;
1427
vlmfa67ddc2004-06-03 03:38:44 +00001428
1429int
vlm827ac182004-06-03 05:07:41 +00001430yyparse (YYPARSE_PARAM_ARG)
vlmfa67ddc2004-06-03 03:38:44 +00001431 YYPARSE_PARAM_DECL
1432{
vlm827ac182004-06-03 05:07:41 +00001433
vlmfa67ddc2004-06-03 03:38:44 +00001434 register int yystate;
1435 register int yyn;
vlm827ac182004-06-03 05:07:41 +00001436 int yyresult;
1437 /* Number of tokens to shift before error messages enabled. */
1438 int yyerrstatus;
1439 /* Lookahead token as an internal (translated) token number. */
1440 int yychar1 = 0;
1441
1442 /* Three stacks and their tools:
1443 `yyss': related to states,
1444 `yyvs': related to semantic values,
1445 `yyls': related to locations.
1446
1447 Refer to the stacks thru separate pointers, to allow yyoverflow
1448 to reallocate them elsewhere. */
1449
1450 /* The state stack. */
1451 short yyssa[YYINITDEPTH];
1452 short *yyss = yyssa;
vlmfa67ddc2004-06-03 03:38:44 +00001453 register short *yyssp;
vlm827ac182004-06-03 05:07:41 +00001454
1455 /* The semantic value stack. */
1456 YYSTYPE yyvsa[YYINITDEPTH];
1457 YYSTYPE *yyvs = yyvsa;
vlmfa67ddc2004-06-03 03:38:44 +00001458 register YYSTYPE *yyvsp;
vlmfa67ddc2004-06-03 03:38:44 +00001459
vlmfa67ddc2004-06-03 03:38:44 +00001460
vlmfa67ddc2004-06-03 03:38:44 +00001461
vlmfa67ddc2004-06-03 03:38:44 +00001462#define YYPOPSTACK (yyvsp--, yyssp--)
vlmfa67ddc2004-06-03 03:38:44 +00001463
vlm827ac182004-06-03 05:07:41 +00001464 YYSIZE_T yystacksize = YYINITDEPTH;
vlmfa67ddc2004-06-03 03:38:44 +00001465
vlm827ac182004-06-03 05:07:41 +00001466 /* The variables used to return semantic value and location from the
1467 action routines. */
1468 YYSTYPE yyval;
vlmfa67ddc2004-06-03 03:38:44 +00001469
vlmfa67ddc2004-06-03 03:38:44 +00001470
vlm827ac182004-06-03 05:07:41 +00001471 /* When reducing, the number of symbols on the RHS of the reduced
1472 rule. */
vlmfa67ddc2004-06-03 03:38:44 +00001473 int yylen;
1474
vlm827ac182004-06-03 05:07:41 +00001475 YYDPRINTF ((stderr, "Starting parse\n"));
vlmfa67ddc2004-06-03 03:38:44 +00001476
1477 yystate = 0;
1478 yyerrstatus = 0;
1479 yynerrs = 0;
1480 yychar = YYEMPTY; /* Cause a token to be read. */
1481
1482 /* Initialize stack pointers.
1483 Waste one element of value and location stack
1484 so that they stay on the same level as the state stack.
1485 The wasted elements are never initialized. */
1486
vlm827ac182004-06-03 05:07:41 +00001487 yyssp = yyss;
vlmfa67ddc2004-06-03 03:38:44 +00001488 yyvsp = yyvs;
vlmfa67ddc2004-06-03 03:38:44 +00001489
vlm827ac182004-06-03 05:07:41 +00001490 goto yysetstate;
vlmfa67ddc2004-06-03 03:38:44 +00001491
vlm827ac182004-06-03 05:07:41 +00001492/*------------------------------------------------------------.
1493| yynewstate -- Push a new state, which is found in yystate. |
1494`------------------------------------------------------------*/
1495 yynewstate:
1496 /* In all cases, when you get here, the value and location stacks
1497 have just been pushed. so pushing a state here evens the stacks.
1498 */
1499 yyssp++;
1500
1501 yysetstate:
1502 *yyssp = yystate;
vlmfa67ddc2004-06-03 03:38:44 +00001503
1504 if (yyssp >= yyss + yystacksize - 1)
1505 {
vlmfa67ddc2004-06-03 03:38:44 +00001506 /* Get the current used size of the three stacks, in elements. */
vlm827ac182004-06-03 05:07:41 +00001507 YYSIZE_T yysize = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001508
1509#ifdef yyoverflow
vlm827ac182004-06-03 05:07:41 +00001510 {
1511 /* Give user a chance to reallocate the stack. Use copies of
1512 these so that the &'s don't force the real ones into
1513 memory. */
1514 YYSTYPE *yyvs1 = yyvs;
1515 short *yyss1 = yyss;
vlmfa67ddc2004-06-03 03:38:44 +00001516
vlm827ac182004-06-03 05:07:41 +00001517
1518 /* Each stack pointer address is followed by the size of the
1519 data in use in that stack, in bytes. This used to be a
1520 conditional around just the two extra args, but that might
1521 be undefined if yyoverflow is a macro. */
1522 yyoverflow ("parser stack overflow",
1523 &yyss1, yysize * sizeof (*yyssp),
1524 &yyvs1, yysize * sizeof (*yyvsp),
1525
1526 &yystacksize);
1527
1528 yyss = yyss1;
1529 yyvs = yyvs1;
1530 }
vlmfa67ddc2004-06-03 03:38:44 +00001531#else /* no yyoverflow */
vlm827ac182004-06-03 05:07:41 +00001532# ifndef YYSTACK_RELOCATE
1533 goto yyoverflowlab;
1534# else
vlmfa67ddc2004-06-03 03:38:44 +00001535 /* Extend the stack our own way. */
1536 if (yystacksize >= YYMAXDEPTH)
vlm827ac182004-06-03 05:07:41 +00001537 goto yyoverflowlab;
vlmfa67ddc2004-06-03 03:38:44 +00001538 yystacksize *= 2;
1539 if (yystacksize > YYMAXDEPTH)
1540 yystacksize = YYMAXDEPTH;
vlm827ac182004-06-03 05:07:41 +00001541
1542 {
1543 short *yyss1 = yyss;
1544 union yyalloc *yyptr =
1545 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1546 if (! yyptr)
1547 goto yyoverflowlab;
1548 YYSTACK_RELOCATE (yyss);
1549 YYSTACK_RELOCATE (yyvs);
1550
1551# undef YYSTACK_RELOCATE
1552 if (yyss1 != yyssa)
1553 YYSTACK_FREE (yyss1);
1554 }
1555# endif
vlmfa67ddc2004-06-03 03:38:44 +00001556#endif /* no yyoverflow */
1557
vlm827ac182004-06-03 05:07:41 +00001558 yyssp = yyss + yysize - 1;
1559 yyvsp = yyvs + yysize - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001560
vlm827ac182004-06-03 05:07:41 +00001561
1562 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1563 (unsigned long int) yystacksize));
vlmfa67ddc2004-06-03 03:38:44 +00001564
1565 if (yyssp >= yyss + yystacksize - 1)
1566 YYABORT;
1567 }
1568
vlm827ac182004-06-03 05:07:41 +00001569 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
vlmfa67ddc2004-06-03 03:38:44 +00001570
1571 goto yybackup;
vlm827ac182004-06-03 05:07:41 +00001572
1573/*-----------.
1574| yybackup. |
1575`-----------*/
1576yybackup:
vlmfa67ddc2004-06-03 03:38:44 +00001577
1578/* Do appropriate processing given the current state. */
1579/* Read a lookahead token if we need one and don't already have one. */
1580/* yyresume: */
1581
1582 /* First try to decide what to do without reference to lookahead token. */
1583
1584 yyn = yypact[yystate];
vlm827ac182004-06-03 05:07:41 +00001585 if (yyn == YYPACT_NINF)
vlmfa67ddc2004-06-03 03:38:44 +00001586 goto yydefault;
1587
1588 /* Not known => get a lookahead token if don't already have one. */
1589
1590 /* yychar is either YYEMPTY or YYEOF
1591 or a valid token in external form. */
1592
1593 if (yychar == YYEMPTY)
1594 {
vlm827ac182004-06-03 05:07:41 +00001595 YYDPRINTF ((stderr, "Reading a token: "));
vlmfa67ddc2004-06-03 03:38:44 +00001596 yychar = YYLEX;
1597 }
1598
vlm827ac182004-06-03 05:07:41 +00001599 /* Convert token to internal form (in yychar1) for indexing tables with. */
vlmfa67ddc2004-06-03 03:38:44 +00001600
vlm827ac182004-06-03 05:07:41 +00001601 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001602 {
1603 yychar1 = 0;
vlm827ac182004-06-03 05:07:41 +00001604 yychar = YYEOF; /* Don't call YYLEX any more. */
vlmfa67ddc2004-06-03 03:38:44 +00001605
vlm827ac182004-06-03 05:07:41 +00001606 YYDPRINTF ((stderr, "Now at end of input.\n"));
vlmfa67ddc2004-06-03 03:38:44 +00001607 }
1608 else
1609 {
vlm827ac182004-06-03 05:07:41 +00001610 yychar1 = YYTRANSLATE (yychar);
vlmfa67ddc2004-06-03 03:38:44 +00001611
vlm827ac182004-06-03 05:07:41 +00001612 /* We have to keep this `#if YYDEBUG', since we use variables
1613 which are defined only if `YYDEBUG' is set. */
1614 YYDPRINTF ((stderr, "Next token is "));
1615 YYDSYMPRINT ((stderr, yychar1, yylval));
1616 YYDPRINTF ((stderr, "\n"));
vlmfa67ddc2004-06-03 03:38:44 +00001617 }
1618
vlm827ac182004-06-03 05:07:41 +00001619 /* If the proper action on seeing token YYCHAR1 is to reduce or to
1620 detect an error, take that action. */
vlmfa67ddc2004-06-03 03:38:44 +00001621 yyn += yychar1;
vlm827ac182004-06-03 05:07:41 +00001622 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001623 goto yydefault;
vlmfa67ddc2004-06-03 03:38:44 +00001624 yyn = yytable[yyn];
vlm827ac182004-06-03 05:07:41 +00001625 if (yyn <= 0)
vlmfa67ddc2004-06-03 03:38:44 +00001626 {
vlm827ac182004-06-03 05:07:41 +00001627 if (yyn == 0 || yyn == YYTABLE_NINF)
vlmfa67ddc2004-06-03 03:38:44 +00001628 goto yyerrlab;
1629 yyn = -yyn;
1630 goto yyreduce;
1631 }
vlmfa67ddc2004-06-03 03:38:44 +00001632
1633 if (yyn == YYFINAL)
1634 YYACCEPT;
1635
1636 /* Shift the lookahead token. */
vlm827ac182004-06-03 05:07:41 +00001637 YYDPRINTF ((stderr, "Shifting token %d (%s), ",
1638 yychar, yytname[yychar1]));
vlmfa67ddc2004-06-03 03:38:44 +00001639
1640 /* Discard the token being shifted unless it is eof. */
1641 if (yychar != YYEOF)
1642 yychar = YYEMPTY;
1643
1644 *++yyvsp = yylval;
vlmfa67ddc2004-06-03 03:38:44 +00001645
vlm827ac182004-06-03 05:07:41 +00001646
1647 /* Count tokens shifted since error; after three, turn off error
1648 status. */
1649 if (yyerrstatus)
1650 yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001651
1652 yystate = yyn;
1653 goto yynewstate;
1654
vlmfa67ddc2004-06-03 03:38:44 +00001655
vlm827ac182004-06-03 05:07:41 +00001656/*-----------------------------------------------------------.
1657| yydefault -- do the default action for the current state. |
1658`-----------------------------------------------------------*/
1659yydefault:
vlmfa67ddc2004-06-03 03:38:44 +00001660 yyn = yydefact[yystate];
1661 if (yyn == 0)
1662 goto yyerrlab;
vlm827ac182004-06-03 05:07:41 +00001663 goto yyreduce;
vlmfa67ddc2004-06-03 03:38:44 +00001664
vlm827ac182004-06-03 05:07:41 +00001665
1666/*-----------------------------.
1667| yyreduce -- Do a reduction. |
1668`-----------------------------*/
vlmfa67ddc2004-06-03 03:38:44 +00001669yyreduce:
vlm827ac182004-06-03 05:07:41 +00001670 /* yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001671 yylen = yyr2[yyn];
vlmfa67ddc2004-06-03 03:38:44 +00001672
vlm827ac182004-06-03 05:07:41 +00001673 /* If YYLEN is nonzero, implement the default value of the action:
1674 `$$ = $1'.
1675
1676 Otherwise, the following line sets YYVAL to garbage.
1677 This behavior is undocumented and Bison
1678 users should not rely upon it. Assigning to YYVAL
1679 unconditionally makes the parser a bit smaller, and it avoids a
1680 GCC warning that YYVAL may be used uninitialized. */
1681 yyval = yyvsp[1-yylen];
1682
1683
1684
1685#if YYDEBUG
1686 /* We have to keep this `#if YYDEBUG', since we use variables which
1687 are defined only if `YYDEBUG' is set. */
vlmfa67ddc2004-06-03 03:38:44 +00001688 if (yydebug)
1689 {
vlm827ac182004-06-03 05:07:41 +00001690 int yyi;
vlmfa67ddc2004-06-03 03:38:44 +00001691
vlm827ac182004-06-03 05:07:41 +00001692 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
1693 yyn - 1, yyrline[yyn]);
vlmfa67ddc2004-06-03 03:38:44 +00001694
1695 /* Print the symbols being reduced, and their result. */
vlm827ac182004-06-03 05:07:41 +00001696 for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
1697 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
1698 YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
vlmfa67ddc2004-06-03 03:38:44 +00001699 }
1700#endif
vlm827ac182004-06-03 05:07:41 +00001701 switch (yyn)
1702 {
1703 case 2:
vlmfa67ddc2004-06-03 03:38:44 +00001704#line 298 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001705 {
vlmfa67ddc2004-06-03 03:38:44 +00001706 *(void **)param = yyvsp[0].a_grammar;
vlm827ac182004-06-03 05:07:41 +00001707 }
1708 break;
1709
1710 case 3:
vlmfa67ddc2004-06-03 03:38:44 +00001711#line 304 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001712 {
vlmfa67ddc2004-06-03 03:38:44 +00001713 yyval.a_grammar = asn1p_new();
1714 checkmem(yyval.a_grammar);
1715 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm827ac182004-06-03 05:07:41 +00001716 }
1717 break;
1718
1719 case 4:
vlmfa67ddc2004-06-03 03:38:44 +00001720#line 309 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001721 {
vlmfa67ddc2004-06-03 03:38:44 +00001722 yyval.a_grammar = yyvsp[-1].a_grammar;
1723 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm827ac182004-06-03 05:07:41 +00001724 }
1725 break;
1726
1727 case 5:
vlmfa67ddc2004-06-03 03:38:44 +00001728#line 330 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001729 {
vlmfa67ddc2004-06-03 03:38:44 +00001730
1731 if(yyvsp[-1].a_module) {
1732 yyval.a_module = yyvsp[-1].a_module;
1733 } else {
1734 /* There's a chance that a module is just plain empty */
1735 yyval.a_module = asn1p_module_new();
1736 }
1737 checkmem(yyval.a_module);
1738
1739 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1740 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1741 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
vlm827ac182004-06-03 05:07:41 +00001742 }
1743 break;
1744
1745 case 6:
vlmfa67ddc2004-06-03 03:38:44 +00001746#line 351 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001747 { yyval.a_oid = 0; }
1748 break;
1749
1750 case 7:
vlmfa67ddc2004-06-03 03:38:44 +00001751#line 352 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001752 { yyval.a_oid = yyvsp[0].a_oid; }
1753 break;
1754
1755 case 8:
vlmfa67ddc2004-06-03 03:38:44 +00001756#line 356 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001757 {
vlmfa67ddc2004-06-03 03:38:44 +00001758 yyval.a_oid = yyvsp[-1].a_oid;
vlm827ac182004-06-03 05:07:41 +00001759 }
1760 break;
1761
1762 case 9:
vlmfa67ddc2004-06-03 03:38:44 +00001763#line 359 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001764 {
vlmfa67ddc2004-06-03 03:38:44 +00001765 yyval.a_oid = 0;
vlm827ac182004-06-03 05:07:41 +00001766 }
1767 break;
1768
1769 case 10:
vlmfa67ddc2004-06-03 03:38:44 +00001770#line 365 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001771 {
vlmfa67ddc2004-06-03 03:38:44 +00001772 yyval.a_oid = asn1p_oid_new();
1773 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1774 if(yyvsp[0].a_oid_arc.name)
1775 free(yyvsp[0].a_oid_arc.name);
vlm827ac182004-06-03 05:07:41 +00001776 }
1777 break;
1778
1779 case 11:
vlmfa67ddc2004-06-03 03:38:44 +00001780#line 371 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001781 {
vlmfa67ddc2004-06-03 03:38:44 +00001782 yyval.a_oid = yyvsp[-1].a_oid;
1783 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1784 if(yyvsp[0].a_oid_arc.name)
1785 free(yyvsp[0].a_oid_arc.name);
vlm827ac182004-06-03 05:07:41 +00001786 }
1787 break;
1788
1789 case 12:
vlmfa67ddc2004-06-03 03:38:44 +00001790#line 380 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001791 { /* iso */
vlmfa67ddc2004-06-03 03:38:44 +00001792 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1793 yyval.a_oid_arc.number = -1;
vlm827ac182004-06-03 05:07:41 +00001794 }
1795 break;
1796
1797 case 13:
vlmfa67ddc2004-06-03 03:38:44 +00001798#line 384 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001799 { /* iso(1) */
vlmfa67ddc2004-06-03 03:38:44 +00001800 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1801 yyval.a_oid_arc.number = yyvsp[-1].a_int;
vlm827ac182004-06-03 05:07:41 +00001802 }
1803 break;
1804
1805 case 14:
vlmfa67ddc2004-06-03 03:38:44 +00001806#line 388 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001807 { /* 1 */
vlmfa67ddc2004-06-03 03:38:44 +00001808 yyval.a_oid_arc.name = 0;
1809 yyval.a_oid_arc.number = yyvsp[0].a_int;
vlm827ac182004-06-03 05:07:41 +00001810 }
1811 break;
1812
1813 case 15:
vlmfa67ddc2004-06-03 03:38:44 +00001814#line 398 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001815 { yyval.a_module_flags = MSF_NOFLAGS; }
1816 break;
1817
1818 case 16:
vlmfa67ddc2004-06-03 03:38:44 +00001819#line 399 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001820 {
vlmfa67ddc2004-06-03 03:38:44 +00001821 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm827ac182004-06-03 05:07:41 +00001822 }
1823 break;
1824
1825 case 17:
vlmfa67ddc2004-06-03 03:38:44 +00001826#line 408 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001827 {
vlmfa67ddc2004-06-03 03:38:44 +00001828 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm827ac182004-06-03 05:07:41 +00001829 }
1830 break;
1831
1832 case 18:
vlmfa67ddc2004-06-03 03:38:44 +00001833#line 411 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001834 {
vlmfa67ddc2004-06-03 03:38:44 +00001835 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
vlm827ac182004-06-03 05:07:41 +00001836 }
1837 break;
1838
1839 case 19:
vlmfa67ddc2004-06-03 03:38:44 +00001840#line 420 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001841 {
vlmfa67ddc2004-06-03 03:38:44 +00001842 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
vlm827ac182004-06-03 05:07:41 +00001843 }
1844 break;
1845
1846 case 20:
vlmfa67ddc2004-06-03 03:38:44 +00001847#line 423 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001848 {
vlmfa67ddc2004-06-03 03:38:44 +00001849 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
vlm827ac182004-06-03 05:07:41 +00001850 }
1851 break;
1852
1853 case 21:
vlmfa67ddc2004-06-03 03:38:44 +00001854#line 426 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001855 {
vlmfa67ddc2004-06-03 03:38:44 +00001856 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
vlm827ac182004-06-03 05:07:41 +00001857 }
1858 break;
1859
1860 case 22:
vlmfa67ddc2004-06-03 03:38:44 +00001861#line 429 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001862 {
vlmfa67ddc2004-06-03 03:38:44 +00001863 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
vlm827ac182004-06-03 05:07:41 +00001864 }
1865 break;
1866
1867 case 23:
vlmfa67ddc2004-06-03 03:38:44 +00001868#line 438 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001869 { yyval.a_module = 0; }
1870 break;
1871
1872 case 24:
vlmfa67ddc2004-06-03 03:38:44 +00001873#line 439 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001874 {
vlmfa67ddc2004-06-03 03:38:44 +00001875 assert(yyvsp[0].a_module);
1876 yyval.a_module = yyvsp[0].a_module;
vlm827ac182004-06-03 05:07:41 +00001877 }
1878 break;
1879
1880 case 25:
vlmfa67ddc2004-06-03 03:38:44 +00001881#line 449 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001882 {
vlmfa67ddc2004-06-03 03:38:44 +00001883 yyval.a_module = yyvsp[0].a_module;
vlm827ac182004-06-03 05:07:41 +00001884 }
1885 break;
1886
1887 case 26:
vlmfa67ddc2004-06-03 03:38:44 +00001888#line 452 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001889 {
vlmfa67ddc2004-06-03 03:38:44 +00001890 yyval.a_module = yyvsp[-1].a_module;
1891
1892#ifdef MY_IMPORT
1893#error MY_IMPORT DEFINED ELSEWHERE!
1894#endif
1895#define MY_IMPORT(foo,field) do { \
vlm97ed7152004-08-13 12:31:09 +00001896 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
vlmfa67ddc2004-06-03 03:38:44 +00001897 TQ_ADD(&(yyval.a_module->foo), \
1898 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1899 field); \
vlm97ed7152004-08-13 12:31:09 +00001900 } \
1901 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1902 } while(0)
vlmfa67ddc2004-06-03 03:38:44 +00001903
1904 MY_IMPORT(imports, xp_next);
1905 MY_IMPORT(exports, xp_next);
1906 MY_IMPORT(members, next);
1907#undef MY_IMPORT
1908
vlm827ac182004-06-03 05:07:41 +00001909 }
1910 break;
1911
1912 case 27:
vlm97ed7152004-08-13 12:31:09 +00001913#line 479 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001914 {
vlmfa67ddc2004-06-03 03:38:44 +00001915 yyval.a_module = yyvsp[0].a_module;
vlm827ac182004-06-03 05:07:41 +00001916 }
1917 break;
1918
1919 case 28:
vlm97ed7152004-08-13 12:31:09 +00001920#line 482 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001921 {
vlmfa67ddc2004-06-03 03:38:44 +00001922 yyval.a_module = asn1p_module_new();
1923 checkmem(yyval.a_module);
1924 if(yyvsp[0].a_xports) {
1925 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1926 } else {
1927 /* "EXPORTS ALL;" ? */
1928 }
vlm827ac182004-06-03 05:07:41 +00001929 }
1930 break;
1931
1932 case 29:
vlm97ed7152004-08-13 12:31:09 +00001933#line 491 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001934 {
vlmfa67ddc2004-06-03 03:38:44 +00001935 yyval.a_module = asn1p_module_new();
1936 checkmem(yyval.a_module);
1937 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1938 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1939 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00001940 }
1941 break;
1942
1943 case 30:
vlm97ed7152004-08-13 12:31:09 +00001944#line 498 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001945 {
vlmfa67ddc2004-06-03 03:38:44 +00001946 yyval.a_module = asn1p_module_new();
1947 checkmem(yyval.a_module);
1948 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1949 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1950 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00001951 }
1952 break;
1953
1954 case 31:
vlm97ed7152004-08-13 12:31:09 +00001955#line 511 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001956 {
vlmfa67ddc2004-06-03 03:38:44 +00001957 yyval.a_module = asn1p_module_new();
1958 checkmem(yyval.a_module);
1959 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1960 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1961 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00001962 }
1963 break;
1964
1965 case 32:
vlm97ed7152004-08-13 12:31:09 +00001966#line 522 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001967 {
vlmfa67ddc2004-06-03 03:38:44 +00001968 return yyerror(
1969 "Attempt to redefine a standard basic type, "
1970 "use -ftypesXY to switch back "
1971 "to older version of ASN.1 standard");
vlm827ac182004-06-03 05:07:41 +00001972 }
1973 break;
1974
1975 case 33:
vlm97ed7152004-08-13 12:31:09 +00001976#line 536 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001977 {
vlmfa67ddc2004-06-03 03:38:44 +00001978 yyval.a_module = yyvsp[-1].a_module;
vlm827ac182004-06-03 05:07:41 +00001979 }
1980 break;
1981
1982 case 34:
vlm97ed7152004-08-13 12:31:09 +00001983#line 542 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001984 {
vlmfa67ddc2004-06-03 03:38:44 +00001985 return yyerror("Empty IMPORTS list");
vlm827ac182004-06-03 05:07:41 +00001986 }
1987 break;
1988
1989 case 35:
vlm97ed7152004-08-13 12:31:09 +00001990#line 548 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00001991 {
vlmfa67ddc2004-06-03 03:38:44 +00001992 yyval.a_module = asn1p_module_new();
1993 checkmem(yyval.a_module);
1994 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm827ac182004-06-03 05:07:41 +00001995 }
1996 break;
1997
1998 case 36:
vlm97ed7152004-08-13 12:31:09 +00001999#line 553 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002000 {
vlmfa67ddc2004-06-03 03:38:44 +00002001 yyval.a_module = yyvsp[-1].a_module;
2002 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm827ac182004-06-03 05:07:41 +00002003 }
2004 break;
2005
2006 case 37:
vlm97ed7152004-08-13 12:31:09 +00002007#line 560 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002008 {
vlmfa67ddc2004-06-03 03:38:44 +00002009 yyval.a_xports = yyvsp[-3].a_xports;
2010 yyval.a_xports->from = yyvsp[-1].tv_str;
2011 yyval.a_xports->from_oid = yyvsp[0].a_oid;
2012 checkmem(yyval.a_xports);
vlm827ac182004-06-03 05:07:41 +00002013 }
2014 break;
2015
2016 case 38:
vlm97ed7152004-08-13 12:31:09 +00002017#line 569 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002018 {
vlmfa67ddc2004-06-03 03:38:44 +00002019 yyval.a_xports = asn1p_xports_new();
2020 checkmem(yyval.a_xports);
2021 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00002022 }
2023 break;
2024
2025 case 39:
vlm97ed7152004-08-13 12:31:09 +00002026#line 574 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002027 {
vlmfa67ddc2004-06-03 03:38:44 +00002028 yyval.a_xports = yyvsp[-2].a_xports;
2029 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00002030 }
2031 break;
2032
2033 case 40:
vlm97ed7152004-08-13 12:31:09 +00002034#line 581 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002035 {
vlmfa67ddc2004-06-03 03:38:44 +00002036 yyval.a_expr = asn1p_expr_new(yylineno);
2037 checkmem(yyval.a_expr);
2038 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2039 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm827ac182004-06-03 05:07:41 +00002040 }
2041 break;
2042
2043 case 41:
vlm97ed7152004-08-13 12:31:09 +00002044#line 587 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002045 {
vlmfa67ddc2004-06-03 03:38:44 +00002046 yyval.a_expr = asn1p_expr_new(yylineno);
2047 checkmem(yyval.a_expr);
2048 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2049 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm827ac182004-06-03 05:07:41 +00002050 }
2051 break;
2052
2053 case 42:
vlm97ed7152004-08-13 12:31:09 +00002054#line 596 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002055 {
vlmfa67ddc2004-06-03 03:38:44 +00002056 yyval.a_xports = yyvsp[-1].a_xports;
vlm827ac182004-06-03 05:07:41 +00002057 }
2058 break;
2059
2060 case 43:
vlm97ed7152004-08-13 12:31:09 +00002061#line 599 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002062 {
vlmfa67ddc2004-06-03 03:38:44 +00002063 yyval.a_xports = 0;
vlm827ac182004-06-03 05:07:41 +00002064 }
2065 break;
2066
2067 case 44:
vlm97ed7152004-08-13 12:31:09 +00002068#line 602 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002069 {
vlmfa67ddc2004-06-03 03:38:44 +00002070 /* Empty EXPORTS clause effectively prohibits export. */
2071 yyval.a_xports = asn1p_xports_new();
2072 checkmem(yyval.a_xports);
vlm827ac182004-06-03 05:07:41 +00002073 }
2074 break;
2075
2076 case 45:
vlm97ed7152004-08-13 12:31:09 +00002077#line 610 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002078 {
vlmfa67ddc2004-06-03 03:38:44 +00002079 yyval.a_xports = asn1p_xports_new();
2080 assert(yyval.a_xports);
2081 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00002082 }
2083 break;
2084
2085 case 46:
vlm97ed7152004-08-13 12:31:09 +00002086#line 615 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002087 {
vlmfa67ddc2004-06-03 03:38:44 +00002088 yyval.a_xports = yyvsp[-2].a_xports;
2089 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00002090 }
2091 break;
2092
2093 case 47:
vlm97ed7152004-08-13 12:31:09 +00002094#line 622 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002095 {
vlmfa67ddc2004-06-03 03:38:44 +00002096 yyval.a_expr = asn1p_expr_new(yylineno);
2097 checkmem(yyval.a_expr);
2098 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2099 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
vlm827ac182004-06-03 05:07:41 +00002100 }
2101 break;
2102
2103 case 48:
vlm97ed7152004-08-13 12:31:09 +00002104#line 628 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002105 {
vlmfa67ddc2004-06-03 03:38:44 +00002106 yyval.a_expr = asn1p_expr_new(yylineno);
2107 checkmem(yyval.a_expr);
2108 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2109 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
vlm827ac182004-06-03 05:07:41 +00002110 }
2111 break;
2112
2113 case 49:
vlm97ed7152004-08-13 12:31:09 +00002114#line 638 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002115 {
vlmfa67ddc2004-06-03 03:38:44 +00002116 yyval.a_expr = yyvsp[-4].a_expr;
2117 assert(yyval.a_expr->Identifier == 0);
2118 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2119 yyval.a_expr->meta_type = AMT_VALUESET;
2120 // take care of optValueSetBody
vlm827ac182004-06-03 05:07:41 +00002121 }
2122 break;
2123
2124 case 50:
vlm97ed7152004-08-13 12:31:09 +00002125#line 648 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002126 {
vlmfa67ddc2004-06-03 03:38:44 +00002127 yyval.a_expr = asn1p_expr_new(yylineno);
2128 checkmem(yyval.a_expr);
2129 yyval.a_expr->reference = yyvsp[0].a_ref;
2130 yyval.a_expr->expr_type = A1TC_REFERENCE;
2131 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm827ac182004-06-03 05:07:41 +00002132 }
2133 break;
2134
2135 case 51:
vlm97ed7152004-08-13 12:31:09 +00002136#line 655 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002137 {
vlmfa67ddc2004-06-03 03:38:44 +00002138 yyval.a_expr = asn1p_expr_new(yylineno);
2139 checkmem(yyval.a_expr);
2140 yyval.a_expr->expr_type = yyvsp[0].a_type;
2141 yyval.a_expr->meta_type = AMT_TYPE;
vlm827ac182004-06-03 05:07:41 +00002142 }
2143 break;
2144
2145 case 52:
vlm97ed7152004-08-13 12:31:09 +00002146#line 664 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002147 { }
2148 break;
2149
2150 case 53:
vlm97ed7152004-08-13 12:31:09 +00002151#line 665 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002152 {
2153 }
2154 break;
2155
2156 case 54:
vlm97ed7152004-08-13 12:31:09 +00002157#line 681 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002158 {
vlmfa67ddc2004-06-03 03:38:44 +00002159 yyval.a_expr = asn1p_expr_new(yylineno);
2160 checkmem(yyval.a_expr);
2161 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2162 yyval.a_expr->tag = yyvsp[-1].a_tag;
2163 yyval.a_expr->expr_type = A1TC_TYPEID;
2164 yyval.a_expr->meta_type = AMT_TYPE;
vlm827ac182004-06-03 05:07:41 +00002165 }
2166 break;
2167
2168 case 55:
vlm97ed7152004-08-13 12:31:09 +00002169#line 689 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002170 {
vlmfa67ddc2004-06-03 03:38:44 +00002171 yyval.a_expr = yyvsp[0].a_expr;
2172 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2173 yyval.a_expr->tag = yyvsp[-1].a_tag;
2174 assert(yyval.a_expr->expr_type);
2175 assert(yyval.a_expr->meta_type);
vlm827ac182004-06-03 05:07:41 +00002176 }
2177 break;
2178
2179 case 56:
vlm97ed7152004-08-13 12:31:09 +00002180#line 696 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002181 {
vlmfa67ddc2004-06-03 03:38:44 +00002182 yyval.a_expr = yyvsp[0].a_expr;
2183 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2184 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2185 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm827ac182004-06-03 05:07:41 +00002186 }
2187 break;
2188
2189 case 57:
vlm97ed7152004-08-13 12:31:09 +00002190#line 713 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002191 {
vlmfa67ddc2004-06-03 03:38:44 +00002192 yyval.a_expr = yyvsp[0].a_expr;
2193 assert(yyval.a_expr->Identifier == 0);
2194 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2195 yyval.a_expr->params = yyvsp[-3].a_plist;
2196 yyval.a_expr->meta_type = AMT_PARAMTYPE;
vlm827ac182004-06-03 05:07:41 +00002197 }
2198 break;
2199
2200 case 58:
vlm97ed7152004-08-13 12:31:09 +00002201#line 723 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002202 {
vlmfa67ddc2004-06-03 03:38:44 +00002203 int ret;
2204 yyval.a_plist = asn1p_paramlist_new(yylineno);
2205 checkmem(yyval.a_plist);
2206 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
2207 checkmem(ret == 0);
2208 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2209 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm827ac182004-06-03 05:07:41 +00002210 }
2211 break;
2212
2213 case 59:
vlm97ed7152004-08-13 12:31:09 +00002214#line 732 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002215 {
vlmfa67ddc2004-06-03 03:38:44 +00002216 int ret;
2217 yyval.a_plist = yyvsp[-2].a_plist;
2218 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
2219 checkmem(ret == 0);
2220 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2221 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm827ac182004-06-03 05:07:41 +00002222 }
2223 break;
2224
2225 case 60:
vlm97ed7152004-08-13 12:31:09 +00002226#line 743 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002227 {
vlmfa67ddc2004-06-03 03:38:44 +00002228 yyval.a_parg.governor = NULL;
2229 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm827ac182004-06-03 05:07:41 +00002230 }
2231 break;
2232
2233 case 61:
vlm97ed7152004-08-13 12:31:09 +00002234#line 747 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002235 {
vlmfa67ddc2004-06-03 03:38:44 +00002236 int ret;
2237 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2238 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
2239 checkmem(ret == 0);
2240 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm827ac182004-06-03 05:07:41 +00002241 }
2242 break;
2243
2244 case 62:
vlm97ed7152004-08-13 12:31:09 +00002245#line 754 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002246 {
vlmfa67ddc2004-06-03 03:38:44 +00002247 int ret;
2248 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2249 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2250 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2251 checkmem(ret == 0);
2252 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm827ac182004-06-03 05:07:41 +00002253 }
2254 break;
2255
2256 case 63:
vlm97ed7152004-08-13 12:31:09 +00002257#line 765 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002258 {
vlmfa67ddc2004-06-03 03:38:44 +00002259 yyval.a_expr = asn1p_expr_new(yylineno);
2260 checkmem(yyval.a_expr);
2261 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00002262 }
2263 break;
2264
2265 case 64:
vlm97ed7152004-08-13 12:31:09 +00002266#line 770 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002267 {
vlmfa67ddc2004-06-03 03:38:44 +00002268 yyval.a_expr = yyvsp[-2].a_expr;
2269 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00002270 }
2271 break;
2272
2273 case 65:
vlm97ed7152004-08-13 12:31:09 +00002274#line 777 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002275 {
vlmfa67ddc2004-06-03 03:38:44 +00002276 yyval.a_expr = yyvsp[0].a_expr;
vlm827ac182004-06-03 05:07:41 +00002277 }
2278 break;
2279
2280 case 66:
vlm97ed7152004-08-13 12:31:09 +00002281#line 780 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002282 {
vlmfa67ddc2004-06-03 03:38:44 +00002283 yyval.a_expr = asn1p_expr_new(yylineno);
2284 checkmem(yyval.a_expr);
2285 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2286 yyval.a_expr->expr_type = A1TC_REFERENCE;
2287 yyval.a_expr->meta_type = AMT_VALUE;
vlm827ac182004-06-03 05:07:41 +00002288 }
2289 break;
2290
2291 case 67:
vlm97ed7152004-08-13 12:31:09 +00002292#line 793 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002293 {
vlmfa67ddc2004-06-03 03:38:44 +00002294 yyval.a_expr = asn1p_expr_new(yylineno);
2295 checkmem(yyval.a_expr);
2296 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00002297 }
2298 break;
2299
2300 case 68:
vlm97ed7152004-08-13 12:31:09 +00002301#line 798 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002302 {
vlmfa67ddc2004-06-03 03:38:44 +00002303 yyval.a_expr = yyvsp[-2].a_expr;
2304 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00002305 }
2306 break;
2307
2308 case 69:
vlm97ed7152004-08-13 12:31:09 +00002309#line 805 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002310 {
vlmfa67ddc2004-06-03 03:38:44 +00002311 yyval.a_expr = yyvsp[-2].a_expr;
2312 checkmem(yyval.a_expr);
2313 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2314 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2315 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm827ac182004-06-03 05:07:41 +00002316 }
2317 break;
2318
2319 case 70:
vlm97ed7152004-08-13 12:31:09 +00002320#line 815 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002321 { yyval.a_int = 0; }
2322 break;
2323
2324 case 71:
vlm97ed7152004-08-13 12:31:09 +00002325#line 816 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002326 { yyval.a_int = 1; }
2327 break;
2328
2329 case 72:
vlm97ed7152004-08-13 12:31:09 +00002330#line 820 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002331 {
vlmfa67ddc2004-06-03 03:38:44 +00002332 yyval.a_expr = asn1p_expr_new(yylineno);
2333 checkmem(yyval.a_expr);
2334 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2335 yyval.a_expr->meta_type = AMT_OBJECT;
2336 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00002337 }
2338 break;
2339
2340 case 73:
vlm97ed7152004-08-13 12:31:09 +00002341#line 827 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002342 {
vlmfa67ddc2004-06-03 03:38:44 +00002343 yyval.a_expr = yyvsp[-2].a_expr;
2344 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00002345 }
2346 break;
2347
2348 case 74:
vlm97ed7152004-08-13 12:31:09 +00002349#line 834 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002350 {
vlmfa67ddc2004-06-03 03:38:44 +00002351 yyval.a_expr = asn1p_expr_new(yylineno);
2352 checkmem(yyval.a_expr);
2353 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2354 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2355 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2356 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm827ac182004-06-03 05:07:41 +00002357 }
2358 break;
2359
2360 case 75:
vlm97ed7152004-08-13 12:31:09 +00002361#line 842 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002362 {
vlmfa67ddc2004-06-03 03:38:44 +00002363 yyval.a_expr = yyvsp[-1].a_expr;
2364 yyval.a_expr->Identifier = yyvsp[-2].a_refcomp.name;
2365 yyval.a_expr->unique = yyvsp[0].a_int;
vlm827ac182004-06-03 05:07:41 +00002366 }
2367 break;
2368
2369 case 76:
vlm97ed7152004-08-13 12:31:09 +00002370#line 847 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002371 {
vlmfa67ddc2004-06-03 03:38:44 +00002372 int ret;
2373 yyval.a_expr = asn1p_expr_new(yylineno);
2374 checkmem(yyval.a_expr);
2375 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2376 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2377 checkmem(yyval.a_expr->reference);
2378 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2379 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2380 checkmem(ret == 0);
2381 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2382 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2383 yyval.a_expr->marker = yyvsp[-1].a_marker;
2384 yyval.a_expr->unique = yyvsp[0].a_int;
vlm827ac182004-06-03 05:07:41 +00002385 }
2386 break;
2387
2388 case 77:
vlm97ed7152004-08-13 12:31:09 +00002389#line 865 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002390 { yyval.a_wsynt = 0; }
2391 break;
2392
2393 case 78:
vlm97ed7152004-08-13 12:31:09 +00002394#line 866 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002395 {
vlmfa67ddc2004-06-03 03:38:44 +00002396 yyval.a_wsynt = yyvsp[0].a_wsynt;
vlm827ac182004-06-03 05:07:41 +00002397 }
2398 break;
2399
2400 case 79:
vlm97ed7152004-08-13 12:31:09 +00002401#line 873 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002402 { asn1p_lexer_hack_enable_with_syntax(); }
2403 break;
2404
2405 case 80:
vlm97ed7152004-08-13 12:31:09 +00002406#line 875 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002407 {
vlmfa67ddc2004-06-03 03:38:44 +00002408 yyval.a_wsynt = yyvsp[-1].a_wsynt;
vlm827ac182004-06-03 05:07:41 +00002409 }
2410 break;
2411
2412 case 81:
vlm97ed7152004-08-13 12:31:09 +00002413#line 881 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002414 {
vlmfa67ddc2004-06-03 03:38:44 +00002415 yyval.a_wsynt = asn1p_wsyntx_new();
2416 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm827ac182004-06-03 05:07:41 +00002417 }
2418 break;
2419
2420 case 82:
vlm97ed7152004-08-13 12:31:09 +00002421#line 885 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002422 {
vlmfa67ddc2004-06-03 03:38:44 +00002423 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2424 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm827ac182004-06-03 05:07:41 +00002425 }
2426 break;
2427
2428 case 83:
vlm97ed7152004-08-13 12:31:09 +00002429#line 892 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002430 {
vlmfa67ddc2004-06-03 03:38:44 +00002431 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
vlm827ac182004-06-03 05:07:41 +00002432 }
2433 break;
2434
2435 case 84:
vlm97ed7152004-08-13 12:31:09 +00002436#line 895 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002437 {
vlmfa67ddc2004-06-03 03:38:44 +00002438 asn1p_ref_t *ref;
2439 int ret;
2440 ref = asn1p_ref_new(yylineno);
2441 checkmem(ref);
2442 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2443 checkmem(ret == 0);
2444 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
vlm827ac182004-06-03 05:07:41 +00002445 }
2446 break;
2447
2448 case 85:
vlm97ed7152004-08-13 12:31:09 +00002449#line 921 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002450 {
vlmfa67ddc2004-06-03 03:38:44 +00002451 yyval.a_expr = yyvsp[0].a_expr;
2452 assert(yyval.a_expr->Identifier == 0);
2453 yyval.a_expr->Identifier = yyvsp[-1].tv_nametag.name;
2454 yyval.a_expr->tag = yyvsp[-1].tv_nametag.tag;
vlm827ac182004-06-03 05:07:41 +00002455 }
2456 break;
2457
2458 case 86:
vlm97ed7152004-08-13 12:31:09 +00002459#line 927 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002460 {
vlmfa67ddc2004-06-03 03:38:44 +00002461 yyval.a_expr = yyvsp[0].a_expr;
vlm827ac182004-06-03 05:07:41 +00002462 }
2463 break;
2464
2465 case 87:
vlm97ed7152004-08-13 12:31:09 +00002466#line 933 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002467 {
vlmfa67ddc2004-06-03 03:38:44 +00002468 yyval.a_expr = yyvsp[-2].a_expr;
2469 yyval.a_expr->constraints = yyvsp[-1].a_constr;
2470 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm827ac182004-06-03 05:07:41 +00002471 }
2472 break;
2473
2474 case 88:
vlm97ed7152004-08-13 12:31:09 +00002475#line 941 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002476 {
vlmfa67ddc2004-06-03 03:38:44 +00002477 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2478 checkmem(yyval.a_expr);
2479 yyval.a_expr->Identifier = strdup("...");
2480 checkmem(yyval.a_expr->Identifier);
2481 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2482 yyval.a_expr->meta_type = AMT_TYPE;
vlm827ac182004-06-03 05:07:41 +00002483 }
2484 break;
2485
2486 case 89:
vlm97ed7152004-08-13 12:31:09 +00002487#line 949 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002488 {
vlmfa67ddc2004-06-03 03:38:44 +00002489 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2490 checkmem(yyval.a_expr);
2491 yyval.a_expr->Identifier = strdup("...");
2492 checkmem(yyval.a_expr->Identifier);
2493 yyval.a_expr->value = yyvsp[0].a_value;
2494 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2495 yyval.a_expr->meta_type = AMT_TYPE;
vlm827ac182004-06-03 05:07:41 +00002496 }
2497 break;
2498
2499 case 90:
vlm97ed7152004-08-13 12:31:09 +00002500#line 958 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002501 {
vlmfa67ddc2004-06-03 03:38:44 +00002502 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2503 checkmem(yyval.a_expr);
2504 yyval.a_expr->Identifier = strdup("...");
2505 yyval.a_expr->value = yyvsp[0].a_value;
2506 checkmem(yyval.a_expr->Identifier);
2507 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2508 yyval.a_expr->meta_type = AMT_TYPE;
vlm827ac182004-06-03 05:07:41 +00002509 }
2510 break;
2511
2512 case 91:
vlm97ed7152004-08-13 12:31:09 +00002513#line 970 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002514 {
vlmfa67ddc2004-06-03 03:38:44 +00002515 yyval.a_expr = yyvsp[0].a_expr;
vlm827ac182004-06-03 05:07:41 +00002516 }
2517 break;
2518
2519 case 92:
vlm97ed7152004-08-13 12:31:09 +00002520#line 973 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002521 {
vlmfa67ddc2004-06-03 03:38:44 +00002522 yyval.a_expr = asn1p_expr_new(yylineno);
2523 checkmem(yyval.a_expr);
2524 yyval.a_expr->expr_type = yyvsp[0].a_type;
2525 yyval.a_expr->meta_type = AMT_TYPE;
vlm827ac182004-06-03 05:07:41 +00002526 }
2527 break;
2528
2529 case 93:
vlm97ed7152004-08-13 12:31:09 +00002530#line 979 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002531 {
vlmfa67ddc2004-06-03 03:38:44 +00002532 yyval.a_expr = yyvsp[0].a_expr;
2533 checkmem(yyval.a_expr);
2534 assert(yyval.a_expr->meta_type);
vlm827ac182004-06-03 05:07:41 +00002535 }
2536 break;
2537
2538 case 94:
vlm97ed7152004-08-13 12:31:09 +00002539#line 987 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002540 {
vlmfa67ddc2004-06-03 03:38:44 +00002541 int ret;
2542 yyval.a_expr = yyvsp[-1].a_expr;
2543 assert(yyval.a_expr->expr_type == 0);
2544 assert(yyval.a_expr->meta_type == 0);
2545 assert(yyval.a_expr->reference == 0);
2546 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2547 checkmem(yyval.a_expr->reference);
2548 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2549 checkmem(ret == 0);
2550 free(yyvsp[-3].tv_str);
2551 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2552 yyval.a_expr->meta_type = AMT_TYPE;
vlm827ac182004-06-03 05:07:41 +00002553 }
2554 break;
2555
2556 case 95:
vlm97ed7152004-08-13 12:31:09 +00002557#line 1011 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002558 {
vlmfa67ddc2004-06-03 03:38:44 +00002559 yyval.a_expr = asn1p_expr_new(yylineno);
2560 checkmem(yyval.a_expr);
2561 yyval.a_expr->reference = yyvsp[0].a_ref;
2562 yyval.a_expr->expr_type = A1TC_REFERENCE;
2563 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm827ac182004-06-03 05:07:41 +00002564 }
2565 break;
2566
2567 case 96:
vlm97ed7152004-08-13 12:31:09 +00002568#line 1018 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002569 {
vlmfa67ddc2004-06-03 03:38:44 +00002570 yyval.a_expr = asn1p_expr_new(yylineno);
2571 checkmem(yyval.a_expr);
2572 yyval.a_expr->reference = yyvsp[0].a_ref;
2573 yyval.a_expr->expr_type = A1TC_INSTANCE;
2574 yyval.a_expr->meta_type = AMT_TYPE;
vlm827ac182004-06-03 05:07:41 +00002575 }
2576 break;
2577
2578 case 97:
vlm97ed7152004-08-13 12:31:09 +00002579#line 1033 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002580 {
vlmfa67ddc2004-06-03 03:38:44 +00002581 int ret;
2582 yyval.a_ref = asn1p_ref_new(yylineno);
2583 checkmem(yyval.a_ref);
2584 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2585 checkmem(ret == 0);
2586 free(yyvsp[0].tv_str);
vlm827ac182004-06-03 05:07:41 +00002587 }
2588 break;
2589
2590 case 98:
vlm97ed7152004-08-13 12:31:09 +00002591#line 1041 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002592 {
vlmfa67ddc2004-06-03 03:38:44 +00002593 int ret;
2594 yyval.a_ref = asn1p_ref_new(yylineno);
2595 checkmem(yyval.a_ref);
2596 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2597 checkmem(ret == 0);
2598 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2599 checkmem(ret == 0);
2600 free(yyvsp[-2].tv_str);
vlm827ac182004-06-03 05:07:41 +00002601 }
2602 break;
2603
2604 case 99:
vlm97ed7152004-08-13 12:31:09 +00002605#line 1051 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002606 {
vlmfa67ddc2004-06-03 03:38:44 +00002607 int ret;
2608 yyval.a_ref = asn1p_ref_new(yylineno);
2609 checkmem(yyval.a_ref);
2610 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2611 checkmem(ret == 0);
2612 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2613 checkmem(ret == 0);
2614 free(yyvsp[-2].tv_str);
vlm827ac182004-06-03 05:07:41 +00002615 }
2616 break;
2617
2618 case 100:
vlm97ed7152004-08-13 12:31:09 +00002619#line 1061 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002620 {
vlmfa67ddc2004-06-03 03:38:44 +00002621 int ret;
2622 yyval.a_ref = asn1p_ref_new(yylineno);
2623 checkmem(yyval.a_ref);
2624 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2625 free(yyvsp[0].tv_str);
2626 checkmem(ret == 0);
vlm827ac182004-06-03 05:07:41 +00002627 }
2628 break;
2629
2630 case 101:
vlm97ed7152004-08-13 12:31:09 +00002631#line 1069 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002632 {
vlmfa67ddc2004-06-03 03:38:44 +00002633 int ret;
2634 yyval.a_ref = yyvsp[0].a_ref;
2635 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2636 free(yyvsp[-2].tv_str);
2637 checkmem(ret == 0);
2638 /*
2639 * Move the last element infront.
2640 */
2641 {
2642 struct asn1p_ref_component_s tmp_comp;
2643 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2644 memmove(&yyval.a_ref->components[1],
2645 &yyval.a_ref->components[0],
2646 sizeof(yyval.a_ref->components[0])
2647 * (yyval.a_ref->comp_count - 1));
2648 yyval.a_ref->components[0] = tmp_comp;
2649 }
vlm827ac182004-06-03 05:07:41 +00002650 }
2651 break;
2652
2653 case 102:
vlm97ed7152004-08-13 12:31:09 +00002654#line 1091 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002655 {
vlmfa67ddc2004-06-03 03:38:44 +00002656 int ret;
2657 yyval.a_ref = asn1p_ref_new(yylineno);
2658 checkmem(yyval.a_ref);
2659 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2660 free(yyvsp[0].a_refcomp.name);
2661 checkmem(ret == 0);
vlm827ac182004-06-03 05:07:41 +00002662 }
2663 break;
2664
2665 case 103:
vlm97ed7152004-08-13 12:31:09 +00002666#line 1099 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002667 {
vlmfa67ddc2004-06-03 03:38:44 +00002668 int ret;
2669 yyval.a_ref = yyvsp[-2].a_ref;
2670 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2671 free(yyvsp[0].a_refcomp.name);
2672 checkmem(ret == 0);
vlm827ac182004-06-03 05:07:41 +00002673 }
2674 break;
2675
2676 case 106:
vlm97ed7152004-08-13 12:31:09 +00002677#line 1113 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002678 {
vlmfa67ddc2004-06-03 03:38:44 +00002679 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2680 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm827ac182004-06-03 05:07:41 +00002681 }
2682 break;
2683
2684 case 107:
vlm97ed7152004-08-13 12:31:09 +00002685#line 1118 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002686 {
vlmfa67ddc2004-06-03 03:38:44 +00002687 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2688 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm827ac182004-06-03 05:07:41 +00002689 }
2690 break;
2691
2692 case 108:
vlm97ed7152004-08-13 12:31:09 +00002693#line 1131 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002694 {
vlmfa67ddc2004-06-03 03:38:44 +00002695 yyval.a_expr = yyvsp[-2].a_expr;
2696 assert(yyval.a_expr->Identifier == NULL);
2697 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2698 yyval.a_expr->meta_type = AMT_VALUE;
2699 yyval.a_expr->value = yyvsp[0].a_value;
vlm827ac182004-06-03 05:07:41 +00002700 }
2701 break;
2702
2703 case 109:
vlm97ed7152004-08-13 12:31:09 +00002704#line 1141 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002705 { asn1p_lexer_hack_push_opaque_state(); }
2706 break;
2707
2708 case 110:
vlm97ed7152004-08-13 12:31:09 +00002709#line 1142 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002710 {
vlmfa67ddc2004-06-03 03:38:44 +00002711 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2712 checkmem(yyval.a_value);
2713 yyval.a_value->type = ATV_UNPARSED;
vlm827ac182004-06-03 05:07:41 +00002714 }
2715 break;
2716
2717 case 111:
vlm97ed7152004-08-13 12:31:09 +00002718#line 1147 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002719 {
vlmfa67ddc2004-06-03 03:38:44 +00002720 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2721 checkmem(yyval.a_value);
vlm827ac182004-06-03 05:07:41 +00002722 }
2723 break;
2724
2725 case 112:
vlm97ed7152004-08-13 12:31:09 +00002726#line 1151 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002727 {
vlmfa67ddc2004-06-03 03:38:44 +00002728 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2729 checkmem(yyval.a_value);
vlm827ac182004-06-03 05:07:41 +00002730 }
2731 break;
2732
2733 case 113:
vlm97ed7152004-08-13 12:31:09 +00002734#line 1155 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002735 {
vlmfa67ddc2004-06-03 03:38:44 +00002736 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2737 checkmem(yyval.a_value);
vlm827ac182004-06-03 05:07:41 +00002738 }
2739 break;
2740
2741 case 114:
vlm97ed7152004-08-13 12:31:09 +00002742#line 1159 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002743 {
vlmfa67ddc2004-06-03 03:38:44 +00002744 yyval.a_value = yyvsp[0].a_value;
vlm827ac182004-06-03 05:07:41 +00002745 }
2746 break;
2747
2748 case 115:
vlm97ed7152004-08-13 12:31:09 +00002749#line 1162 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002750 {
vlmfa67ddc2004-06-03 03:38:44 +00002751 yyval.a_value = yyvsp[0].a_value;
vlm827ac182004-06-03 05:07:41 +00002752 }
2753 break;
2754
2755 case 116:
vlm97ed7152004-08-13 12:31:09 +00002756#line 1168 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002757 {
vlmfa67ddc2004-06-03 03:38:44 +00002758 asn1p_ref_t *ref;
2759 int ret;
2760 ref = asn1p_ref_new(yylineno);
2761 checkmem(ref);
2762 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2763 checkmem(ret == 0);
2764 yyval.a_value = asn1p_value_fromref(ref, 0);
2765 checkmem(yyval.a_value);
2766 free(yyvsp[0].tv_str);
vlm827ac182004-06-03 05:07:41 +00002767 }
2768 break;
2769
2770 case 117:
vlm97ed7152004-08-13 12:31:09 +00002771#line 1179 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002772 {
vlmfa67ddc2004-06-03 03:38:44 +00002773 asn1p_ref_t *ref;
2774 int ret;
2775 ref = asn1p_ref_new(yylineno);
2776 checkmem(ref);
2777 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2778 checkmem(ret == 0);
2779 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2780 checkmem(ret == 0);
2781 yyval.a_value = asn1p_value_fromref(ref, 0);
2782 checkmem(yyval.a_value);
2783 free(yyvsp[-2].tv_str);
2784 free(yyvsp[0].tv_str);
vlm827ac182004-06-03 05:07:41 +00002785 }
2786 break;
2787
2788 case 118:
vlm97ed7152004-08-13 12:31:09 +00002789#line 1196 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002790 {
vlmfa67ddc2004-06-03 03:38:44 +00002791 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
2792 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2793 checkmem(yyval.tv_opaque.buf);
2794 yyval.tv_opaque.buf[0] = '{';
2795 yyval.tv_opaque.buf[1] = ' ';
2796 memcpy(yyval.tv_opaque.buf + 2, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2797 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2798 free(yyvsp[0].tv_opaque.buf);
vlm827ac182004-06-03 05:07:41 +00002799 }
2800 break;
2801
2802 case 119:
vlm97ed7152004-08-13 12:31:09 +00002803#line 1206 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002804 {
vlmfa67ddc2004-06-03 03:38:44 +00002805 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2806 char *p = malloc(newsize + 1);
2807 checkmem(p);
2808 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2809 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2810 p[newsize] = '\0';
2811 free(yyvsp[-1].tv_opaque.buf);
2812 free(yyvsp[0].tv_opaque.buf);
2813 yyval.tv_opaque.buf = p;
2814 yyval.tv_opaque.len = newsize;
vlm827ac182004-06-03 05:07:41 +00002815 }
2816 break;
2817
2818 case 120:
vlm97ed7152004-08-13 12:31:09 +00002819#line 1221 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002820 { yyval.a_type = ASN_BASIC_BOOLEAN; }
2821 break;
2822
2823 case 121:
vlm97ed7152004-08-13 12:31:09 +00002824#line 1222 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002825 { yyval.a_type = ASN_BASIC_NULL; }
2826 break;
2827
2828 case 122:
vlm97ed7152004-08-13 12:31:09 +00002829#line 1223 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002830 { yyval.a_type = ASN_BASIC_REAL; }
2831 break;
2832
2833 case 123:
vlm97ed7152004-08-13 12:31:09 +00002834#line 1224 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002835 { yyval.a_type = yyvsp[0].a_type; }
2836 break;
2837
2838 case 124:
vlm97ed7152004-08-13 12:31:09 +00002839#line 1225 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002840 { yyval.a_type = ASN_BASIC_OCTET_STRING; }
2841 break;
2842
2843 case 125:
vlm97ed7152004-08-13 12:31:09 +00002844#line 1226 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002845 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
2846 break;
2847
2848 case 126:
vlm97ed7152004-08-13 12:31:09 +00002849#line 1227 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002850 { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
2851 break;
2852
2853 case 127:
vlm97ed7152004-08-13 12:31:09 +00002854#line 1228 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002855 { yyval.a_type = ASN_BASIC_EXTERNAL; }
2856 break;
2857
2858 case 128:
vlm97ed7152004-08-13 12:31:09 +00002859#line 1229 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002860 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
2861 break;
2862
2863 case 129:
vlm97ed7152004-08-13 12:31:09 +00002864#line 1230 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002865 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
2866 break;
2867
2868 case 130:
vlm97ed7152004-08-13 12:31:09 +00002869#line 1231 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002870 { yyval.a_type = ASN_BASIC_UTCTime; }
2871 break;
2872
2873 case 131:
vlm97ed7152004-08-13 12:31:09 +00002874#line 1232 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002875 { yyval.a_type = ASN_BASIC_GeneralizedTime; }
2876 break;
2877
2878 case 132:
vlm97ed7152004-08-13 12:31:09 +00002879#line 1239 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002880 { yyval.a_type = ASN_BASIC_INTEGER; }
2881 break;
2882
2883 case 133:
vlm97ed7152004-08-13 12:31:09 +00002884#line 1240 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002885 { yyval.a_type = ASN_BASIC_ENUMERATED; }
2886 break;
2887
2888 case 134:
vlm97ed7152004-08-13 12:31:09 +00002889#line 1241 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002890 { yyval.a_type = ASN_BASIC_BIT_STRING; }
2891 break;
2892
2893 case 135:
vlm97ed7152004-08-13 12:31:09 +00002894#line 1245 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002895 {
vlmfa67ddc2004-06-03 03:38:44 +00002896 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2897 checkmem(yyval.a_expr);
2898 yyval.a_expr->expr_type = yyvsp[0].a_type;
2899 yyval.a_expr->meta_type = AMT_TYPE;
vlm827ac182004-06-03 05:07:41 +00002900 }
2901 break;
2902
2903 case 136:
vlm97ed7152004-08-13 12:31:09 +00002904#line 1251 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002905 {
vlmfa67ddc2004-06-03 03:38:44 +00002906 if(yyvsp[0].a_expr) {
2907 yyval.a_expr = yyvsp[0].a_expr;
2908 } else {
2909 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2910 checkmem(yyval.a_expr);
2911 }
2912 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2913 yyval.a_expr->meta_type = AMT_TYPE;
vlm827ac182004-06-03 05:07:41 +00002914 }
2915 break;
2916
2917 case 137:
vlm97ed7152004-08-13 12:31:09 +00002918#line 1264 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002919 { yyval.a_type = ASN_STRING_BMPString; }
2920 break;
2921
2922 case 138:
vlm97ed7152004-08-13 12:31:09 +00002923#line 1265 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002924 {
vlmfa67ddc2004-06-03 03:38:44 +00002925 yyval.a_type = ASN_STRING_GeneralString;
2926 return yyerror("GeneralString is not supported");
vlm827ac182004-06-03 05:07:41 +00002927 }
2928 break;
2929
2930 case 139:
vlm97ed7152004-08-13 12:31:09 +00002931#line 1269 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002932 {
vlmfa67ddc2004-06-03 03:38:44 +00002933 yyval.a_type = ASN_STRING_GraphicString;
2934 return yyerror("GraphicString is not supported");
vlm827ac182004-06-03 05:07:41 +00002935 }
2936 break;
2937
2938 case 140:
vlm97ed7152004-08-13 12:31:09 +00002939#line 1273 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002940 { yyval.a_type = ASN_STRING_IA5String; }
2941 break;
2942
2943 case 141:
vlm97ed7152004-08-13 12:31:09 +00002944#line 1274 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002945 { yyval.a_type = ASN_STRING_ISO646String; }
2946 break;
2947
2948 case 142:
vlm97ed7152004-08-13 12:31:09 +00002949#line 1275 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002950 { yyval.a_type = ASN_STRING_NumericString; }
2951 break;
2952
2953 case 143:
vlm97ed7152004-08-13 12:31:09 +00002954#line 1276 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002955 { yyval.a_type = ASN_STRING_PrintableString; }
2956 break;
2957
2958 case 144:
vlm97ed7152004-08-13 12:31:09 +00002959#line 1277 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002960 {
vlmfa67ddc2004-06-03 03:38:44 +00002961 yyval.a_type = ASN_STRING_T61String;
2962 return yyerror("T61String not implemented yet");
vlm827ac182004-06-03 05:07:41 +00002963 }
2964 break;
2965
2966 case 145:
vlm97ed7152004-08-13 12:31:09 +00002967#line 1281 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002968 { yyval.a_type = ASN_STRING_TeletexString; }
2969 break;
2970
2971 case 146:
vlm97ed7152004-08-13 12:31:09 +00002972#line 1282 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002973 { yyval.a_type = ASN_STRING_UniversalString; }
2974 break;
2975
2976 case 147:
vlm97ed7152004-08-13 12:31:09 +00002977#line 1283 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002978 { yyval.a_type = ASN_STRING_UTF8String; }
2979 break;
2980
2981 case 148:
vlm97ed7152004-08-13 12:31:09 +00002982#line 1284 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002983 {
vlmfa67ddc2004-06-03 03:38:44 +00002984 yyval.a_type = ASN_STRING_VideotexString;
2985 return yyerror("VideotexString is no longer supported");
vlm827ac182004-06-03 05:07:41 +00002986 }
2987 break;
2988
2989 case 149:
vlm97ed7152004-08-13 12:31:09 +00002990#line 1288 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002991 { yyval.a_type = ASN_STRING_VisibleString; }
2992 break;
2993
2994 case 150:
vlm97ed7152004-08-13 12:31:09 +00002995#line 1289 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00002996 { yyval.a_type = ASN_STRING_ObjectDescriptor; }
2997 break;
2998
2999 case 151:
vlm97ed7152004-08-13 12:31:09 +00003000#line 1293 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003001 {
vlmfa67ddc2004-06-03 03:38:44 +00003002 yyval.a_expr = yyvsp[-1].a_expr;
3003 assert(yyval.a_expr->expr_type == A1TC_INVALID);
3004 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
3005 yyval.a_expr->meta_type = AMT_TYPE;
vlm827ac182004-06-03 05:07:41 +00003006 }
3007 break;
3008
3009 case 152:
vlm97ed7152004-08-13 12:31:09 +00003010#line 1299 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003011 {
vlmfa67ddc2004-06-03 03:38:44 +00003012 yyval.a_expr = yyvsp[-1].a_expr;
3013 assert(yyval.a_expr->expr_type == A1TC_INVALID);
3014 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
3015 yyval.a_expr->meta_type = AMT_TYPE;
vlm827ac182004-06-03 05:07:41 +00003016 }
3017 break;
3018
3019 case 153:
vlm97ed7152004-08-13 12:31:09 +00003020#line 1305 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003021 {
vlmfa67ddc2004-06-03 03:38:44 +00003022 yyval.a_expr = yyvsp[-1].a_expr;
3023 assert(yyval.a_expr->expr_type == A1TC_INVALID);
3024 yyval.a_expr->expr_type = ASN_CONSTR_SET;
3025 yyval.a_expr->meta_type = AMT_TYPE;
vlm827ac182004-06-03 05:07:41 +00003026 }
3027 break;
3028
3029 case 154:
vlm97ed7152004-08-13 12:31:09 +00003030#line 1311 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003031 {
vlmfa67ddc2004-06-03 03:38:44 +00003032 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3033 checkmem(yyval.a_expr);
3034 yyval.a_expr->constraints = yyvsp[-2].a_constr;
3035 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
3036 yyval.a_expr->meta_type = AMT_TYPE;
3037 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00003038 }
3039 break;
3040
3041 case 155:
vlm97ed7152004-08-13 12:31:09 +00003042#line 1319 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003043 {
vlmfa67ddc2004-06-03 03:38:44 +00003044 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3045 checkmem(yyval.a_expr);
3046 yyval.a_expr->constraints = yyvsp[-2].a_constr;
3047 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
3048 yyval.a_expr->meta_type = AMT_TYPE;
3049 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00003050 }
3051 break;
3052
3053 case 156:
vlm97ed7152004-08-13 12:31:09 +00003054#line 1327 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003055 {
vlmfa67ddc2004-06-03 03:38:44 +00003056 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3057 checkmem(yyval.a_expr);
3058 yyval.a_expr->expr_type = ASN_CONSTR_ANY;
3059 yyval.a_expr->meta_type = AMT_TYPE;
vlm827ac182004-06-03 05:07:41 +00003060 }
3061 break;
3062
3063 case 157:
vlm97ed7152004-08-13 12:31:09 +00003064#line 1333 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003065 {
vlmfa67ddc2004-06-03 03:38:44 +00003066 int ret;
3067 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3068 checkmem(yyval.a_expr);
3069 yyval.a_expr->reference = asn1p_ref_new(yylineno);
3070 ret = asn1p_ref_add_component(yyval.a_expr->reference,
3071 yyvsp[0].tv_str, RLT_lowercase);
3072 checkmem(ret == 0);
3073 yyval.a_expr->expr_type = ASN_CONSTR_ANY;
3074 yyval.a_expr->meta_type = AMT_TYPE;
vlm827ac182004-06-03 05:07:41 +00003075 }
3076 break;
3077
3078 case 158:
vlm97ed7152004-08-13 12:31:09 +00003079#line 1350 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003080 { yyval.a_constr = 0; }
3081 break;
3082
3083 case 159:
vlm97ed7152004-08-13 12:31:09 +00003084#line 1351 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003085 { yyval.a_constr = yyvsp[0].a_constr; }
3086 break;
3087
3088 case 165:
vlm97ed7152004-08-13 12:31:09 +00003089#line 1359 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003090 {
vlmfa67ddc2004-06-03 03:38:44 +00003091 /*
3092 * This is a special case, for compatibility purposes.
3093 * It goes without parenthesis.
3094 */
3095 int ret;
3096 yyval.a_constr = asn1p_constraint_new(yylineno);
3097 checkmem(yyval.a_constr);
3098 yyval.a_constr->type = ACT_CT_SIZE;
3099 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
3100 checkmem(ret == 0);
vlm827ac182004-06-03 05:07:41 +00003101 }
3102 break;
3103
3104 case 166:
vlm97ed7152004-08-13 12:31:09 +00003105#line 1371 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003106 {
vlmfa67ddc2004-06-03 03:38:44 +00003107 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
vlm827ac182004-06-03 05:07:41 +00003108 }
3109 break;
3110
3111 case 167:
vlm97ed7152004-08-13 12:31:09 +00003112#line 1374 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003113 {
vlmfa67ddc2004-06-03 03:38:44 +00003114 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-1].a_constr, yyvsp[0].a_constr);
vlm827ac182004-06-03 05:07:41 +00003115 }
3116 break;
3117
3118 case 168:
vlm97ed7152004-08-13 12:31:09 +00003119#line 1380 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003120 {
vlmfa67ddc2004-06-03 03:38:44 +00003121 yyval.a_constr = yyvsp[-1].a_constr;
vlm827ac182004-06-03 05:07:41 +00003122 }
3123 break;
3124
3125 case 169:
vlm97ed7152004-08-13 12:31:09 +00003126#line 1386 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003127 {
vlmfa67ddc2004-06-03 03:38:44 +00003128 yyval.a_constr = yyvsp[0].a_constr;
vlm827ac182004-06-03 05:07:41 +00003129 }
3130 break;
3131
3132 case 170:
vlm97ed7152004-08-13 12:31:09 +00003133#line 1389 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003134 {
vlmfa67ddc2004-06-03 03:38:44 +00003135 asn1p_constraint_t *ct;
3136 ct = asn1p_constraint_new(yylineno);
3137 checkmem(ct);
3138 ct->type = ACT_EL_EXT;
3139 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm827ac182004-06-03 05:07:41 +00003140 }
3141 break;
3142
3143 case 171:
vlm97ed7152004-08-13 12:31:09 +00003144#line 1396 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003145 {
vlmfa67ddc2004-06-03 03:38:44 +00003146 asn1p_constraint_t *ct;
3147 ct = asn1p_constraint_new(yylineno);
3148 checkmem(ct);
3149 ct->type = ACT_EL_EXT;
3150 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
3151 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, yyvsp[0].a_constr);
vlm827ac182004-06-03 05:07:41 +00003152 }
3153 break;
3154
3155 case 172:
vlm97ed7152004-08-13 12:31:09 +00003156#line 1404 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003157 {
vlmfa67ddc2004-06-03 03:38:44 +00003158 yyval.a_constr = asn1p_constraint_new(yylineno);
3159 checkmem(yyval.a_constr);
3160 yyval.a_constr->type = ACT_EL_EXT;
vlm827ac182004-06-03 05:07:41 +00003161 }
3162 break;
3163
3164 case 173:
vlm97ed7152004-08-13 12:31:09 +00003165#line 1409 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003166 {
vlmfa67ddc2004-06-03 03:38:44 +00003167 asn1p_constraint_t *ct;
3168 ct = asn1p_constraint_new(yylineno);
3169 checkmem(ct);
3170 ct->type = ACT_EL_EXT;
3171 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
vlm827ac182004-06-03 05:07:41 +00003172 }
3173 break;
3174
3175 case 174:
vlm97ed7152004-08-13 12:31:09 +00003176#line 1418 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003177 { yyval.a_constr = yyvsp[0].a_constr; }
3178 break;
3179
3180 case 175:
vlm97ed7152004-08-13 12:31:09 +00003181#line 1421 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003182 { yyval.a_constr = yyvsp[0].a_constr; }
3183 break;
3184
3185 case 176:
vlm97ed7152004-08-13 12:31:09 +00003186#line 1422 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003187 {
vlmfa67ddc2004-06-03 03:38:44 +00003188 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm827ac182004-06-03 05:07:41 +00003189 }
3190 break;
3191
3192 case 177:
vlm97ed7152004-08-13 12:31:09 +00003193#line 1428 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003194 { yyval.a_constr = yyvsp[0].a_constr; }
3195 break;
3196
3197 case 178:
vlm97ed7152004-08-13 12:31:09 +00003198#line 1430 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003199 {
vlmfa67ddc2004-06-03 03:38:44 +00003200 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm827ac182004-06-03 05:07:41 +00003201 }
3202 break;
3203
3204 case 179:
vlm97ed7152004-08-13 12:31:09 +00003205#line 1436 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003206 { yyval.a_constr = yyvsp[0].a_constr; }
3207 break;
3208
3209 case 180:
vlm97ed7152004-08-13 12:31:09 +00003210#line 1437 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003211 {
vlmfa67ddc2004-06-03 03:38:44 +00003212 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm827ac182004-06-03 05:07:41 +00003213 }
3214 break;
3215
3216 case 181:
vlm97ed7152004-08-13 12:31:09 +00003217#line 1443 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003218 {
vlmfa67ddc2004-06-03 03:38:44 +00003219 yyval.a_constr = asn1p_constraint_new(yylineno);
3220 checkmem(yyval.a_constr);
3221 yyval.a_constr->type = ACT_EL_VALUE;
3222 yyval.a_constr->value = yyvsp[0].a_value;
vlm827ac182004-06-03 05:07:41 +00003223 }
3224 break;
3225
3226 case 182:
vlm97ed7152004-08-13 12:31:09 +00003227#line 1449 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003228 {
vlmfa67ddc2004-06-03 03:38:44 +00003229 yyval.a_constr = asn1p_constraint_new(yylineno);
3230 checkmem(yyval.a_constr);
3231 yyval.a_constr->type = yyvsp[-1].a_ctype;
3232 yyval.a_constr->range_start = yyvsp[-2].a_value;
3233 yyval.a_constr->range_stop = yyvsp[0].a_value;
vlm827ac182004-06-03 05:07:41 +00003234 }
3235 break;
3236
3237 case 183:
vlm97ed7152004-08-13 12:31:09 +00003238#line 1456 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003239 {
vlmfa67ddc2004-06-03 03:38:44 +00003240 int ret;
3241 yyval.a_constr = asn1p_constraint_new(yylineno);
3242 checkmem(yyval.a_constr);
3243 yyval.a_constr->type = yyvsp[-3].a_ctype;
3244 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
3245 checkmem(ret == 0);
vlm827ac182004-06-03 05:07:41 +00003246 }
3247 break;
3248
3249 case 184:
vlm97ed7152004-08-13 12:31:09 +00003250#line 1464 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003251 {
vlmfa67ddc2004-06-03 03:38:44 +00003252 yyval.a_constr = yyvsp[0].a_constr;
vlm827ac182004-06-03 05:07:41 +00003253 }
3254 break;
3255
3256 case 185:
vlm97ed7152004-08-13 12:31:09 +00003257#line 1467 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003258 {
vlmfa67ddc2004-06-03 03:38:44 +00003259 yyval.a_constr = yyvsp[0].a_constr;
vlm827ac182004-06-03 05:07:41 +00003260 }
3261 break;
3262
3263 case 186:
vlm97ed7152004-08-13 12:31:09 +00003264#line 1473 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003265 { yyval.a_ctype = ACT_EL_RANGE; }
3266 break;
3267
3268 case 187:
vlm97ed7152004-08-13 12:31:09 +00003269#line 1474 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003270 { yyval.a_ctype = ACT_EL_RLRANGE; }
3271 break;
3272
3273 case 188:
vlm97ed7152004-08-13 12:31:09 +00003274#line 1475 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003275 { yyval.a_ctype = ACT_EL_LLRANGE; }
3276 break;
3277
3278 case 189:
vlm97ed7152004-08-13 12:31:09 +00003279#line 1476 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003280 { yyval.a_ctype = ACT_EL_ULRANGE; }
3281 break;
3282
3283 case 190:
vlm97ed7152004-08-13 12:31:09 +00003284#line 1480 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003285 {
vlmfa67ddc2004-06-03 03:38:44 +00003286 yyval.a_ctype = ACT_CT_SIZE;
vlm827ac182004-06-03 05:07:41 +00003287 }
3288 break;
3289
3290 case 191:
vlm97ed7152004-08-13 12:31:09 +00003291#line 1483 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003292 {
vlmfa67ddc2004-06-03 03:38:44 +00003293 yyval.a_ctype = ACT_CT_FROM;
vlm827ac182004-06-03 05:07:41 +00003294 }
3295 break;
3296
3297 case 192:
vlm97ed7152004-08-13 12:31:09 +00003298#line 1489 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003299 {
vlmfa67ddc2004-06-03 03:38:44 +00003300 yyval.a_value = yyvsp[0].a_value;
vlm827ac182004-06-03 05:07:41 +00003301 }
3302 break;
3303
3304 case 193:
vlm97ed7152004-08-13 12:31:09 +00003305#line 1492 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003306 {
vlmfa67ddc2004-06-03 03:38:44 +00003307 asn1p_ref_t *ref;
3308 int ret;
3309 ref = asn1p_ref_new(yylineno);
3310 checkmem(ref);
3311 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3312 checkmem(ret == 0);
3313 yyval.a_value = asn1p_value_fromref(ref, 0);
3314 checkmem(yyval.a_value);
3315 free(yyvsp[0].tv_str);
vlm827ac182004-06-03 05:07:41 +00003316 }
3317 break;
3318
3319 case 194:
vlm97ed7152004-08-13 12:31:09 +00003320#line 1503 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003321 {
vlmfa67ddc2004-06-03 03:38:44 +00003322 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3323 checkmem(yyval.a_value);
vlm827ac182004-06-03 05:07:41 +00003324 }
3325 break;
3326
3327 case 195:
vlm97ed7152004-08-13 12:31:09 +00003328#line 1507 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003329 {
vlmfa67ddc2004-06-03 03:38:44 +00003330 yyval.a_value = asn1p_value_fromint(123);
3331 checkmem(yyval.a_value);
3332 yyval.a_value->type = ATV_MIN;
vlm827ac182004-06-03 05:07:41 +00003333 }
3334 break;
3335
3336 case 196:
vlm97ed7152004-08-13 12:31:09 +00003337#line 1512 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003338 {
vlmfa67ddc2004-06-03 03:38:44 +00003339 yyval.a_value = asn1p_value_fromint(321);
3340 checkmem(yyval.a_value);
3341 yyval.a_value->type = ATV_MAX;
vlm827ac182004-06-03 05:07:41 +00003342 }
3343 break;
3344
3345 case 197:
vlm97ed7152004-08-13 12:31:09 +00003346#line 1517 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003347 {
vlmfa67ddc2004-06-03 03:38:44 +00003348 yyval.a_value = asn1p_value_fromint(0);
3349 checkmem(yyval.a_value);
3350 yyval.a_value->type = ATV_FALSE;
vlm827ac182004-06-03 05:07:41 +00003351 }
3352 break;
3353
3354 case 198:
vlm97ed7152004-08-13 12:31:09 +00003355#line 1522 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003356 {
vlmfa67ddc2004-06-03 03:38:44 +00003357 yyval.a_value = asn1p_value_fromint(1);
3358 checkmem(yyval.a_value);
3359 yyval.a_value->type = ATV_TRUE;
vlm827ac182004-06-03 05:07:41 +00003360 }
3361 break;
3362
3363 case 199:
vlm97ed7152004-08-13 12:31:09 +00003364#line 1530 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003365 {
vlmfa67ddc2004-06-03 03:38:44 +00003366 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
vlm827ac182004-06-03 05:07:41 +00003367 }
3368 break;
3369
3370 case 200:
vlm97ed7152004-08-13 12:31:09 +00003371#line 1536 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003372 {
vlmfa67ddc2004-06-03 03:38:44 +00003373 yyval.a_constr = yyvsp[0].a_constr;
vlm827ac182004-06-03 05:07:41 +00003374 }
3375 break;
3376
3377 case 201:
vlm97ed7152004-08-13 12:31:09 +00003378#line 1539 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003379 {
vlmfa67ddc2004-06-03 03:38:44 +00003380 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm827ac182004-06-03 05:07:41 +00003381 }
3382 break;
3383
3384 case 202:
vlm97ed7152004-08-13 12:31:09 +00003385#line 1545 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003386 {
vlmfa67ddc2004-06-03 03:38:44 +00003387 yyval.a_constr = asn1p_constraint_new(yylineno);
3388 checkmem(yyval.a_constr);
3389 yyval.a_constr->type = ACT_EL_EXT;
vlm827ac182004-06-03 05:07:41 +00003390 }
3391 break;
3392
3393 case 203:
vlm97ed7152004-08-13 12:31:09 +00003394#line 1550 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003395 {
vlmfa67ddc2004-06-03 03:38:44 +00003396 yyval.a_constr = asn1p_constraint_new(yylineno);
3397 checkmem(yyval.a_constr);
3398 yyval.a_constr->type = ACT_EL_VALUE;
3399 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3400 yyval.a_constr->presence = yyvsp[0].a_pres;
vlm827ac182004-06-03 05:07:41 +00003401 }
3402 break;
3403
3404 case 204:
vlm97ed7152004-08-13 12:31:09 +00003405#line 1563 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003406 { yyval.a_pres = ACPRES_DEFAULT; }
3407 break;
3408
3409 case 205:
vlm97ed7152004-08-13 12:31:09 +00003410#line 1564 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003411 { yyval.a_pres = yyvsp[0].a_pres; }
3412 break;
3413
3414 case 206:
vlm97ed7152004-08-13 12:31:09 +00003415#line 1568 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003416 {
vlmfa67ddc2004-06-03 03:38:44 +00003417 yyval.a_pres = ACPRES_PRESENT;
vlm827ac182004-06-03 05:07:41 +00003418 }
3419 break;
3420
3421 case 207:
vlm97ed7152004-08-13 12:31:09 +00003422#line 1571 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003423 {
vlmfa67ddc2004-06-03 03:38:44 +00003424 yyval.a_pres = ACPRES_ABSENT;
vlm827ac182004-06-03 05:07:41 +00003425 }
3426 break;
3427
3428 case 208:
vlm97ed7152004-08-13 12:31:09 +00003429#line 1574 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003430 {
vlmfa67ddc2004-06-03 03:38:44 +00003431 yyval.a_pres = ACPRES_OPTIONAL;
vlm827ac182004-06-03 05:07:41 +00003432 }
3433 break;
3434
3435 case 209:
vlm97ed7152004-08-13 12:31:09 +00003436#line 1580 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003437 {
vlmfa67ddc2004-06-03 03:38:44 +00003438 yyval.a_constr = yyvsp[0].a_constr;
vlm827ac182004-06-03 05:07:41 +00003439 }
3440 break;
3441
3442 case 210:
vlm97ed7152004-08-13 12:31:09 +00003443#line 1583 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003444 {
vlmfa67ddc2004-06-03 03:38:44 +00003445 yyval.a_constr = yyvsp[0].a_constr;
vlm827ac182004-06-03 05:07:41 +00003446 }
3447 break;
3448
3449 case 211:
vlm97ed7152004-08-13 12:31:09 +00003450#line 1592 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003451 {
vlmfa67ddc2004-06-03 03:38:44 +00003452 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3453 asn1p_constraint_t *ct;
3454 int ret;
3455 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3456 checkmem(ret == 0);
3457 ct = asn1p_constraint_new(yylineno);
3458 checkmem(yyval.a_constr);
3459 ct->type = ACT_EL_VALUE;
3460 ct->value = asn1p_value_fromref(ref, 0);
3461 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
vlm827ac182004-06-03 05:07:41 +00003462 }
3463 break;
3464
3465 case 212:
vlm97ed7152004-08-13 12:31:09 +00003466#line 1607 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003467 {
vlmfa67ddc2004-06-03 03:38:44 +00003468 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm827ac182004-06-03 05:07:41 +00003469 }
3470 break;
3471
3472 case 213:
vlm97ed7152004-08-13 12:31:09 +00003473#line 1613 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003474 {
vlmfa67ddc2004-06-03 03:38:44 +00003475 yyval.a_constr = asn1p_constraint_new(yylineno);
3476 checkmem(yyval.a_constr);
3477 yyval.a_constr->type = ACT_EL_VALUE;
3478 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
vlm827ac182004-06-03 05:07:41 +00003479 }
3480 break;
3481
3482 case 214:
vlm97ed7152004-08-13 12:31:09 +00003483#line 1619 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003484 {
vlmfa67ddc2004-06-03 03:38:44 +00003485 asn1p_constraint_t *ct;
3486 ct = asn1p_constraint_new(yylineno);
3487 checkmem(ct);
3488 ct->type = ACT_EL_VALUE;
3489 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3490 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm827ac182004-06-03 05:07:41 +00003491 }
3492 break;
3493
3494 case 215:
vlm97ed7152004-08-13 12:31:09 +00003495#line 1633 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003496 {
vlmfa67ddc2004-06-03 03:38:44 +00003497 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3498 int ret;
3499 *p = '@';
3500 strcpy(p + 1, yyvsp[0].tv_str);
3501 yyval.a_ref = asn1p_ref_new(yylineno);
3502 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3503 checkmem(ret == 0);
3504 free(p);
3505 free(yyvsp[0].tv_str);
vlm827ac182004-06-03 05:07:41 +00003506 }
3507 break;
3508
3509 case 216:
vlm97ed7152004-08-13 12:31:09 +00003510#line 1644 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003511 {
vlmfa67ddc2004-06-03 03:38:44 +00003512 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3513 int ret;
3514 p[0] = '@';
3515 p[1] = '.';
3516 strcpy(p + 2, yyvsp[0].tv_str);
3517 yyval.a_ref = asn1p_ref_new(yylineno);
3518 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3519 checkmem(ret == 0);
3520 free(p);
3521 free(yyvsp[0].tv_str);
vlm827ac182004-06-03 05:07:41 +00003522 }
3523 break;
3524
3525 case 217:
vlm97ed7152004-08-13 12:31:09 +00003526#line 1660 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003527 {
vlmfa67ddc2004-06-03 03:38:44 +00003528 yyval.tv_str = yyvsp[0].tv_str;
vlm827ac182004-06-03 05:07:41 +00003529 }
3530 break;
3531
3532 case 218:
vlm97ed7152004-08-13 12:31:09 +00003533#line 1663 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003534 {
vlmfa67ddc2004-06-03 03:38:44 +00003535 int l1 = strlen(yyvsp[-2].tv_str);
3536 int l3 = strlen(yyvsp[0].tv_str);
3537 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3538 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3539 yyval.tv_str[l1] = '.';
3540 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3541 yyval.tv_str[l1 + 1 + l3] = '\0';
vlm827ac182004-06-03 05:07:41 +00003542 }
3543 break;
3544
3545 case 219:
vlm97ed7152004-08-13 12:31:09 +00003546#line 1681 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003547 { yyval.a_marker = EM_NOMARK; }
3548 break;
3549
3550 case 220:
vlm97ed7152004-08-13 12:31:09 +00003551#line 1682 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003552 { yyval.a_marker = yyvsp[0].a_marker; }
3553 break;
3554
3555 case 221:
vlm97ed7152004-08-13 12:31:09 +00003556#line 1686 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003557 {
vlmfa67ddc2004-06-03 03:38:44 +00003558 yyval.a_marker = EM_OPTIONAL;
vlm827ac182004-06-03 05:07:41 +00003559 }
3560 break;
3561
3562 case 222:
vlm97ed7152004-08-13 12:31:09 +00003563#line 1689 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003564 {
vlmfa67ddc2004-06-03 03:38:44 +00003565 yyval.a_marker = EM_DEFAULT;
3566 /* FIXME: store DefaultValue somewhere */
vlm827ac182004-06-03 05:07:41 +00003567 }
3568 break;
3569
3570 case 223:
vlm97ed7152004-08-13 12:31:09 +00003571#line 1696 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003572 {
3573 }
3574 break;
3575
3576 case 224:
vlm97ed7152004-08-13 12:31:09 +00003577#line 1698 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003578 {
3579 }
3580 break;
3581
3582 case 225:
vlm97ed7152004-08-13 12:31:09 +00003583#line 1700 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003584 { asn1p_lexer_hack_push_opaque_state(); }
3585 break;
3586
3587 case 226:
vlm97ed7152004-08-13 12:31:09 +00003588#line 1700 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003589 {
3590 }
3591 break;
3592
3593 case 227:
vlm97ed7152004-08-13 12:31:09 +00003594#line 1721 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003595 {
vlmfa67ddc2004-06-03 03:38:44 +00003596 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3597 checkmem(yyval.a_expr);
vlm827ac182004-06-03 05:07:41 +00003598 }
3599 break;
3600
3601 case 228:
vlm97ed7152004-08-13 12:31:09 +00003602#line 1725 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003603 {
vlmfa67ddc2004-06-03 03:38:44 +00003604 yyval.a_expr = yyvsp[-1].a_expr;
vlm827ac182004-06-03 05:07:41 +00003605 }
3606 break;
3607
3608 case 229:
vlm97ed7152004-08-13 12:31:09 +00003609#line 1731 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003610 {
vlmfa67ddc2004-06-03 03:38:44 +00003611 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3612 checkmem(yyval.a_expr);
3613 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00003614 }
3615 break;
3616
3617 case 230:
vlm97ed7152004-08-13 12:31:09 +00003618#line 1736 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003619 {
vlmfa67ddc2004-06-03 03:38:44 +00003620 yyval.a_expr = yyvsp[-2].a_expr;
3621 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm827ac182004-06-03 05:07:41 +00003622 }
3623 break;
3624
3625 case 231:
vlm97ed7152004-08-13 12:31:09 +00003626#line 1743 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003627 {
vlmfa67ddc2004-06-03 03:38:44 +00003628 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3629 checkmem(yyval.a_expr);
3630 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3631 yyval.a_expr->meta_type = AMT_VALUE;
3632 yyval.a_expr->Identifier = yyvsp[0].tv_str;
vlm827ac182004-06-03 05:07:41 +00003633 }
3634 break;
3635
3636 case 232:
vlm97ed7152004-08-13 12:31:09 +00003637#line 1750 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003638 {
vlmfa67ddc2004-06-03 03:38:44 +00003639 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3640 checkmem(yyval.a_expr);
3641 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3642 yyval.a_expr->meta_type = AMT_VALUE;
3643 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3644 yyval.a_expr->value = yyvsp[-1].a_value;
vlm827ac182004-06-03 05:07:41 +00003645 }
3646 break;
3647
3648 case 233:
vlm97ed7152004-08-13 12:31:09 +00003649#line 1758 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003650 {
vlmfa67ddc2004-06-03 03:38:44 +00003651 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3652 checkmem(yyval.a_expr);
3653 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3654 yyval.a_expr->meta_type = AMT_VALUE;
3655 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3656 yyval.a_expr->value = yyvsp[-1].a_value;
vlm827ac182004-06-03 05:07:41 +00003657 }
3658 break;
3659
3660 case 234:
vlm97ed7152004-08-13 12:31:09 +00003661#line 1766 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003662 {
vlmfa67ddc2004-06-03 03:38:44 +00003663 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3664 checkmem(yyval.a_expr);
3665 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3666 yyval.a_expr->meta_type = AMT_VALUE;
3667 yyval.a_expr->value = yyvsp[0].a_value;
vlm827ac182004-06-03 05:07:41 +00003668 }
3669 break;
3670
3671 case 235:
vlm97ed7152004-08-13 12:31:09 +00003672#line 1773 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003673 {
vlmfa67ddc2004-06-03 03:38:44 +00003674 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3675 checkmem(yyval.a_expr);
3676 yyval.a_expr->Identifier = strdup("...");
3677 checkmem(yyval.a_expr->Identifier);
3678 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3679 yyval.a_expr->meta_type = AMT_VALUE;
vlm827ac182004-06-03 05:07:41 +00003680 }
3681 break;
3682
3683 case 236:
vlm97ed7152004-08-13 12:31:09 +00003684#line 1784 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003685 {
vlmfa67ddc2004-06-03 03:38:44 +00003686 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3687 checkmem(yyval.a_value);
vlm827ac182004-06-03 05:07:41 +00003688 }
3689 break;
3690
3691 case 237:
vlm97ed7152004-08-13 12:31:09 +00003692#line 1788 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003693 {
vlmfa67ddc2004-06-03 03:38:44 +00003694 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3695 checkmem(yyval.a_value);
vlm827ac182004-06-03 05:07:41 +00003696 }
3697 break;
3698
3699 case 238:
vlm97ed7152004-08-13 12:31:09 +00003700#line 1819 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003701 { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); }
3702 break;
3703
3704 case 239:
vlm97ed7152004-08-13 12:31:09 +00003705#line 1820 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003706 { yyval.a_tag = yyvsp[0].a_tag; }
3707 break;
3708
3709 case 240:
vlm97ed7152004-08-13 12:31:09 +00003710#line 1824 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003711 {
vlmfa67ddc2004-06-03 03:38:44 +00003712 yyval.a_tag = yyvsp[0].a_tag;
3713 yyval.a_tag.tag_mode = TM_DEFAULT;
vlm827ac182004-06-03 05:07:41 +00003714 }
3715 break;
3716
3717 case 241:
vlm97ed7152004-08-13 12:31:09 +00003718#line 1828 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003719 {
vlmfa67ddc2004-06-03 03:38:44 +00003720 yyval.a_tag = yyvsp[-1].a_tag;
3721 yyval.a_tag.tag_mode = TM_IMPLICIT;
vlm827ac182004-06-03 05:07:41 +00003722 }
3723 break;
3724
3725 case 242:
vlm97ed7152004-08-13 12:31:09 +00003726#line 1832 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003727 {
vlmfa67ddc2004-06-03 03:38:44 +00003728 yyval.a_tag = yyvsp[-1].a_tag;
3729 yyval.a_tag.tag_mode = TM_EXPLICIT;
vlm827ac182004-06-03 05:07:41 +00003730 }
3731 break;
3732
3733 case 243:
vlm97ed7152004-08-13 12:31:09 +00003734#line 1839 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003735 {
vlmfa67ddc2004-06-03 03:38:44 +00003736 checkmem(yyvsp[0].tv_str);
3737 yyval.tv_str = yyvsp[0].tv_str;
vlm827ac182004-06-03 05:07:41 +00003738 }
3739 break;
3740
3741 case 244:
vlm97ed7152004-08-13 12:31:09 +00003742#line 1843 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003743 {
vlmfa67ddc2004-06-03 03:38:44 +00003744 checkmem(yyvsp[0].tv_str);
3745 yyval.tv_str = yyvsp[0].tv_str;
vlm827ac182004-06-03 05:07:41 +00003746 }
3747 break;
3748
3749 case 245:
vlm97ed7152004-08-13 12:31:09 +00003750#line 1850 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003751 {
vlmfa67ddc2004-06-03 03:38:44 +00003752 checkmem(yyvsp[0].tv_str);
3753 yyval.tv_str = yyvsp[0].tv_str;
vlm827ac182004-06-03 05:07:41 +00003754 }
3755 break;
3756
3757 case 246:
vlm97ed7152004-08-13 12:31:09 +00003758#line 1857 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003759 {
vlmfa67ddc2004-06-03 03:38:44 +00003760 checkmem(yyvsp[0].tv_str);
3761 yyval.tv_str = yyvsp[0].tv_str;
vlm827ac182004-06-03 05:07:41 +00003762 }
3763 break;
3764
3765 case 247:
vlm97ed7152004-08-13 12:31:09 +00003766#line 1864 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003767 {
vlmfa67ddc2004-06-03 03:38:44 +00003768 memset(&yyval.tv_nametag, 0, sizeof(yyval.tv_nametag));
3769 yyval.tv_nametag.name = yyvsp[0].tv_str;
vlm827ac182004-06-03 05:07:41 +00003770 }
3771 break;
3772
3773 case 248:
vlm97ed7152004-08-13 12:31:09 +00003774#line 1868 "asn1p_y.y"
vlm827ac182004-06-03 05:07:41 +00003775 {
vlmfa67ddc2004-06-03 03:38:44 +00003776 yyval.tv_nametag.name = yyvsp[-1].tv_str;
3777 yyval.tv_nametag.tag = yyvsp[0].a_tag;
vlm827ac182004-06-03 05:07:41 +00003778 }
3779 break;
3780
3781
3782 }
3783
3784/* Line 1016 of /usr/local/share/bison/yacc.c. */
vlm97ed7152004-08-13 12:31:09 +00003785#line 3786 "asn1p_y.c"
vlmfa67ddc2004-06-03 03:38:44 +00003786
3787 yyvsp -= yylen;
3788 yyssp -= yylen;
vlmfa67ddc2004-06-03 03:38:44 +00003789
vlm827ac182004-06-03 05:07:41 +00003790
3791#if YYDEBUG
vlmfa67ddc2004-06-03 03:38:44 +00003792 if (yydebug)
3793 {
vlm827ac182004-06-03 05:07:41 +00003794 short *yyssp1 = yyss - 1;
3795 YYFPRINTF (stderr, "state stack now");
3796 while (yyssp1 != yyssp)
3797 YYFPRINTF (stderr, " %d", *++yyssp1);
3798 YYFPRINTF (stderr, "\n");
vlmfa67ddc2004-06-03 03:38:44 +00003799 }
3800#endif
3801
3802 *++yyvsp = yyval;
3803
vlmfa67ddc2004-06-03 03:38:44 +00003804
vlm827ac182004-06-03 05:07:41 +00003805 /* Now `shift' the result of the reduction. Determine what state
3806 that goes to, based on the state we popped back to and the rule
3807 number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00003808
3809 yyn = yyr1[yyn];
3810
vlm827ac182004-06-03 05:07:41 +00003811 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
3812 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00003813 yystate = yytable[yystate];
3814 else
vlm827ac182004-06-03 05:07:41 +00003815 yystate = yydefgoto[yyn - YYNTOKENS];
vlmfa67ddc2004-06-03 03:38:44 +00003816
3817 goto yynewstate;
3818
vlmfa67ddc2004-06-03 03:38:44 +00003819
vlm827ac182004-06-03 05:07:41 +00003820/*------------------------------------.
3821| yyerrlab -- here on detecting error |
3822`------------------------------------*/
3823yyerrlab:
3824 /* If not already recovering from an error, report this error. */
3825 if (!yyerrstatus)
vlmfa67ddc2004-06-03 03:38:44 +00003826 {
3827 ++yynerrs;
vlm827ac182004-06-03 05:07:41 +00003828#if YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00003829 yyn = yypact[yystate];
3830
vlm827ac182004-06-03 05:07:41 +00003831 if (YYPACT_NINF < yyn && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00003832 {
vlm827ac182004-06-03 05:07:41 +00003833 YYSIZE_T yysize = 0;
3834 int yytype = YYTRANSLATE (yychar);
3835 char *yymsg;
3836 int yyx, yycount;
vlmfa67ddc2004-06-03 03:38:44 +00003837
vlm827ac182004-06-03 05:07:41 +00003838 yycount = 0;
3839 /* Start YYX at -YYN if negative to avoid negative indexes in
3840 YYCHECK. */
3841 for (yyx = yyn < 0 ? -yyn : 0;
3842 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
3843 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
3844 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
3845 yysize += yystrlen ("parse error, unexpected ") + 1;
3846 yysize += yystrlen (yytname[yytype]);
3847 yymsg = (char *) YYSTACK_ALLOC (yysize);
3848 if (yymsg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00003849 {
vlm827ac182004-06-03 05:07:41 +00003850 char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
3851 yyp = yystpcpy (yyp, yytname[yytype]);
vlmfa67ddc2004-06-03 03:38:44 +00003852
vlm827ac182004-06-03 05:07:41 +00003853 if (yycount < 5)
vlmfa67ddc2004-06-03 03:38:44 +00003854 {
vlm827ac182004-06-03 05:07:41 +00003855 yycount = 0;
3856 for (yyx = yyn < 0 ? -yyn : 0;
3857 yyx < (int) (sizeof (yytname) / sizeof (char *));
3858 yyx++)
3859 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
vlmfa67ddc2004-06-03 03:38:44 +00003860 {
vlm827ac182004-06-03 05:07:41 +00003861 const char *yyq = ! yycount ? ", expecting " : " or ";
3862 yyp = yystpcpy (yyp, yyq);
3863 yyp = yystpcpy (yyp, yytname[yyx]);
3864 yycount++;
vlmfa67ddc2004-06-03 03:38:44 +00003865 }
3866 }
vlm827ac182004-06-03 05:07:41 +00003867 yyerror (yymsg);
3868 YYSTACK_FREE (yymsg);
vlmfa67ddc2004-06-03 03:38:44 +00003869 }
3870 else
vlm827ac182004-06-03 05:07:41 +00003871 yyerror ("parse error; also virtual memory exhausted");
vlmfa67ddc2004-06-03 03:38:44 +00003872 }
3873 else
3874#endif /* YYERROR_VERBOSE */
vlm827ac182004-06-03 05:07:41 +00003875 yyerror ("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003876 }
vlmfa67ddc2004-06-03 03:38:44 +00003877 goto yyerrlab1;
vlmfa67ddc2004-06-03 03:38:44 +00003878
vlm827ac182004-06-03 05:07:41 +00003879
3880/*----------------------------------------------------.
3881| yyerrlab1 -- error raised explicitly by an action. |
3882`----------------------------------------------------*/
3883yyerrlab1:
vlmfa67ddc2004-06-03 03:38:44 +00003884 if (yyerrstatus == 3)
3885 {
vlm827ac182004-06-03 05:07:41 +00003886 /* If just tried and failed to reuse lookahead token after an
3887 error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00003888
vlm827ac182004-06-03 05:07:41 +00003889 /* Return failure if at end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00003890 if (yychar == YYEOF)
vlm827ac182004-06-03 05:07:41 +00003891 {
3892 /* Pop the error token. */
3893 YYPOPSTACK;
3894 /* Pop the rest of the stack. */
3895 while (yyssp > yyss)
3896 {
3897 YYDPRINTF ((stderr, "Error: popping "));
3898 YYDSYMPRINT ((stderr,
3899 yystos[*yyssp],
3900 *yyvsp));
3901 YYDPRINTF ((stderr, "\n"));
3902 yydestruct (yystos[*yyssp], *yyvsp);
3903 YYPOPSTACK;
3904 }
3905 YYABORT;
3906 }
vlmfa67ddc2004-06-03 03:38:44 +00003907
vlm827ac182004-06-03 05:07:41 +00003908 YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
3909 yychar, yytname[yychar1]));
3910 yydestruct (yychar1, yylval);
vlmfa67ddc2004-06-03 03:38:44 +00003911 yychar = YYEMPTY;
3912 }
3913
vlm827ac182004-06-03 05:07:41 +00003914 /* Else will try to reuse lookahead token after shifting the error
3915 token. */
vlmfa67ddc2004-06-03 03:38:44 +00003916
vlm827ac182004-06-03 05:07:41 +00003917 yyerrstatus = 3; /* Each real token shifted decrements this. */
vlmfa67ddc2004-06-03 03:38:44 +00003918
vlm827ac182004-06-03 05:07:41 +00003919 for (;;)
vlmfa67ddc2004-06-03 03:38:44 +00003920 {
vlm827ac182004-06-03 05:07:41 +00003921 yyn = yypact[yystate];
3922 if (yyn != YYPACT_NINF)
3923 {
3924 yyn += YYTERROR;
3925 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
3926 {
3927 yyn = yytable[yyn];
3928 if (0 < yyn)
3929 break;
3930 }
3931 }
3932
3933 /* Pop the current state because it cannot handle the error token. */
3934 if (yyssp == yyss)
3935 YYABORT;
3936
3937 YYDPRINTF ((stderr, "Error: popping "));
3938 YYDSYMPRINT ((stderr,
3939 yystos[*yyssp], *yyvsp));
3940 YYDPRINTF ((stderr, "\n"));
3941
3942 yydestruct (yystos[yystate], *yyvsp);
3943 yyvsp--;
3944 yystate = *--yyssp;
3945
3946
3947#if YYDEBUG
3948 if (yydebug)
3949 {
3950 short *yyssp1 = yyss - 1;
3951 YYFPRINTF (stderr, "Error: state stack now");
3952 while (yyssp1 != yyssp)
3953 YYFPRINTF (stderr, " %d", *++yyssp1);
3954 YYFPRINTF (stderr, "\n");
3955 }
vlmfa67ddc2004-06-03 03:38:44 +00003956#endif
vlmfa67ddc2004-06-03 03:38:44 +00003957 }
vlmfa67ddc2004-06-03 03:38:44 +00003958
3959 if (yyn == YYFINAL)
3960 YYACCEPT;
3961
vlm827ac182004-06-03 05:07:41 +00003962 YYDPRINTF ((stderr, "Shifting error token, "));
vlmfa67ddc2004-06-03 03:38:44 +00003963
3964 *++yyvsp = yylval;
vlm827ac182004-06-03 05:07:41 +00003965
vlmfa67ddc2004-06-03 03:38:44 +00003966
3967 yystate = yyn;
3968 goto yynewstate;
3969
vlmfa67ddc2004-06-03 03:38:44 +00003970
vlm827ac182004-06-03 05:07:41 +00003971/*-------------------------------------.
3972| yyacceptlab -- YYACCEPT comes here. |
3973`-------------------------------------*/
3974yyacceptlab:
3975 yyresult = 0;
3976 goto yyreturn;
3977
3978/*-----------------------------------.
3979| yyabortlab -- YYABORT comes here. |
3980`-----------------------------------*/
3981yyabortlab:
3982 yyresult = 1;
3983 goto yyreturn;
3984
3985#ifndef yyoverflow
3986/*----------------------------------------------.
3987| yyoverflowlab -- parser overflow comes here. |
3988`----------------------------------------------*/
3989yyoverflowlab:
3990 yyerror ("parser stack overflow");
3991 yyresult = 2;
3992 /* Fall through. */
vlmfa67ddc2004-06-03 03:38:44 +00003993#endif
vlm827ac182004-06-03 05:07:41 +00003994
3995yyreturn:
3996#ifndef yyoverflow
3997 if (yyss != yyssa)
3998 YYSTACK_FREE (yyss);
3999#endif
4000 return yyresult;
vlmfa67ddc2004-06-03 03:38:44 +00004001}
vlm827ac182004-06-03 05:07:41 +00004002
4003
vlm97ed7152004-08-13 12:31:09 +00004004#line 1875 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00004005
4006
4007
4008/*
4009 * Convert Xstring ('0101'B or '5'H) to the binary vector.
4010 */
4011static asn1p_value_t *
4012_convert_bitstring2binary(char *str, int base) {
4013 asn1p_value_t *val;
4014 int slen;
4015 int memlen;
4016 int baselen;
4017 int bits;
4018 uint8_t *binary_vector;
4019 uint8_t *bv_ptr;
4020 uint8_t cur_val;
4021
4022 assert(str);
4023 assert(str[0] == '\'');
4024
4025 switch(base) {
4026 case 'B':
4027 baselen = 1;
4028 break;
4029 case 'H':
4030 baselen = 4;
4031 break;
4032 default:
4033 assert(base == 'B' || base == 'H');
4034 errno = EINVAL;
4035 return NULL;
4036 }
4037
4038 slen = strlen(str);
4039 assert(str[slen - 1] == base);
4040 assert(str[slen - 2] == '\'');
4041
4042 memlen = slen / (8 / baselen); /* Conservative estimate */
4043
4044 bv_ptr = binary_vector = malloc(memlen + 1);
4045 if(bv_ptr == NULL)
4046 /* ENOMEM */
4047 return NULL;
4048
4049 cur_val = 0;
4050 bits = 0;
4051 while(*(++str) != '\'') {
4052 switch(baselen) {
4053 case 1:
4054 switch(*str) {
4055 case '1':
4056 cur_val |= 1 << (7 - (bits % 8));
4057 case '0':
4058 break;
4059 default:
4060 assert(!"_y UNREACH1");
4061 case ' ': case '\r': case '\n':
4062 continue;
4063 }
4064 break;
4065 case 4:
4066 switch(*str) {
4067 case '0': case '1': case '2': case '3': case '4':
4068 case '5': case '6': case '7': case '8': case '9':
4069 cur_val |= (*str - '0') << (4 - (bits % 8));
4070 break;
4071 case 'A': case 'B': case 'C':
4072 case 'D': case 'E': case 'F':
4073 cur_val |= ((*str - 'A') + 10)
4074 << (4 - (bits % 8));
4075 break;
4076 default:
4077 assert(!"_y UNREACH2");
4078 case ' ': case '\r': case '\n':
4079 continue;
4080 }
4081 break;
4082 }
4083
4084 bits += baselen;
4085 if((bits % 8) == 0) {
4086 *bv_ptr++ = cur_val;
4087 cur_val = 0;
4088 }
4089 }
4090
4091 *bv_ptr = cur_val;
4092 assert((bv_ptr - binary_vector) <= memlen);
4093
4094 val = asn1p_value_frombits(binary_vector, bits, 0);
4095 if(val == NULL) {
4096 free(binary_vector);
4097 }
4098
4099 return val;
4100}
4101
4102extern char *asn1p_text;
4103
4104int
4105yyerror(const char *msg) {
4106 fprintf(stderr,
4107 "ASN.1 grammar parse error "
4108 "near line %d (token \"%s\"): %s\n",
4109 asn1p_lineno, asn1p_text, msg);
4110 return -1;
4111}
4112
4113
vlm827ac182004-06-03 05:07:41 +00004114