blob: 6aa198347f2853ac066a9fcda66af9643143aca5 [file] [log] [blame]
Lev Walkinf15320b2004-06-03 03:38:44 +00001
Lev Walkin1004aa92004-09-08 00:28:11 +00002/* A Bison parser, made from asn1p_y.y
3 by GNU Bison version 1.28 */
Lev Walkinf15320b2004-06-03 03:38:44 +00004
Lev Walkin1004aa92004-09-08 00:28:11 +00005#define YYBISON 1 /* Identify Bison output. */
Lev Walkinf15320b2004-06-03 03:38:44 +00006
7#define yyparse asn1p_parse
Lev Walkin1004aa92004-09-08 00:28:11 +00008#define yylex asn1p_lex
Lev Walkinf15320b2004-06-03 03:38:44 +00009#define yyerror asn1p_error
Lev Walkin1004aa92004-09-08 00:28:11 +000010#define yylval asn1p_lval
11#define yychar asn1p_char
Lev Walkinf15320b2004-06-03 03:38:44 +000012#define yydebug asn1p_debug
13#define yynerrs asn1p_nerrs
Lev Walkin1004aa92004-09-08 00:28:11 +000014#define TOK_PPEQ 257
15#define TOK_opaque 258
16#define TOK_bstring 259
17#define TOK_cstring 260
18#define TOK_hstring 261
19#define TOK_identifier 262
20#define TOK_number 263
21#define TOK_number_negative 264
22#define TOK_typereference 265
23#define TOK_capitalreference 266
24#define TOK_typefieldreference 267
25#define TOK_valuefieldreference 268
26#define TOK_ABSENT 269
27#define TOK_ABSTRACT_SYNTAX 270
28#define TOK_ALL 271
29#define TOK_ANY 272
30#define TOK_APPLICATION 273
31#define TOK_AUTOMATIC 274
32#define TOK_BEGIN 275
33#define TOK_BIT 276
34#define TOK_BMPString 277
35#define TOK_BOOLEAN 278
36#define TOK_BY 279
37#define TOK_CHARACTER 280
38#define TOK_CHOICE 281
39#define TOK_CLASS 282
40#define TOK_COMPONENT 283
41#define TOK_COMPONENTS 284
42#define TOK_CONSTRAINED 285
43#define TOK_CONTAINING 286
44#define TOK_DEFAULT 287
45#define TOK_DEFINITIONS 288
46#define TOK_DEFINED 289
47#define TOK_EMBEDDED 290
48#define TOK_ENCODED 291
49#define TOK_ENCODING_CONTROL 292
50#define TOK_END 293
51#define TOK_ENUMERATED 294
52#define TOK_EXPLICIT 295
53#define TOK_EXPORTS 296
54#define TOK_EXTENSIBILITY 297
55#define TOK_EXTERNAL 298
56#define TOK_FALSE 299
57#define TOK_FROM 300
58#define TOK_GeneralizedTime 301
59#define TOK_GeneralString 302
60#define TOK_GraphicString 303
61#define TOK_IA5String 304
62#define TOK_IDENTIFIER 305
63#define TOK_IMPLICIT 306
64#define TOK_IMPLIED 307
65#define TOK_IMPORTS 308
66#define TOK_INCLUDES 309
67#define TOK_INSTANCE 310
68#define TOK_INSTRUCTIONS 311
69#define TOK_INTEGER 312
70#define TOK_ISO646String 313
71#define TOK_MAX 314
72#define TOK_MIN 315
73#define TOK_MINUS_INFINITY 316
74#define TOK_NULL 317
75#define TOK_NumericString 318
76#define TOK_OBJECT 319
77#define TOK_ObjectDescriptor 320
78#define TOK_OCTET 321
79#define TOK_OF 322
80#define TOK_OPTIONAL 323
81#define TOK_PATTERN 324
82#define TOK_PDV 325
83#define TOK_PLUS_INFINITY 326
84#define TOK_PRESENT 327
85#define TOK_PrintableString 328
86#define TOK_PRIVATE 329
87#define TOK_REAL 330
88#define TOK_RELATIVE_OID 331
89#define TOK_SEQUENCE 332
90#define TOK_SET 333
91#define TOK_SIZE 334
92#define TOK_STRING 335
93#define TOK_SYNTAX 336
94#define TOK_T61String 337
95#define TOK_TAGS 338
96#define TOK_TeletexString 339
97#define TOK_TRUE 340
98#define TOK_TYPE_IDENTIFIER 341
99#define TOK_UNIQUE 342
100#define TOK_UNIVERSAL 343
101#define TOK_UniversalString 344
102#define TOK_UTCTime 345
103#define TOK_UTF8String 346
104#define TOK_VideotexString 347
105#define TOK_VisibleString 348
106#define TOK_WITH 349
107#define TOK_EXCEPT 350
108#define TOK_INTERSECTION 351
109#define TOK_UNION 352
110#define TOK_TwoDots 353
111#define TOK_ThreeDots 354
Lev Walkinf15320b2004-06-03 03:38:44 +0000112
113#line 1 "asn1p_y.y"
114
115
116#include <stdlib.h>
117#include <stdio.h>
118#include <string.h>
119#include <errno.h>
120#include <assert.h>
121
122#include "asn1parser.h"
123
124#define YYPARSE_PARAM param
125#define YYERROR_VERBOSE
126
127int yylex(void);
128int yyerror(const char *msg);
129void asn1p_lexer_hack_push_opaque_state(void);
130void asn1p_lexer_hack_enable_with_syntax(void);
Lev Walkinf59d0752004-08-18 04:59:12 +0000131void asn1p_lexer_hack_push_encoding_control(void);
Lev Walkinf15320b2004-06-03 03:38:44 +0000132#define yylineno asn1p_lineno
133extern int asn1p_lineno;
134
135
136static asn1p_value_t *
137 _convert_bitstring2binary(char *str, int base);
138
Lev Walkin1004aa92004-09-08 00:28:11 +0000139#define checkmem(ptr) do { \
140 if(!(ptr)) \
141 return yyerror("Memory failure"); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000142 } while(0)
143
144#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
145 if(arg1->type != constr_type) { \
146 int __ret; \
147 root = asn1p_constraint_new(yylineno); \
148 checkmem(root); \
149 root->type = constr_type; \
150 __ret = asn1p_constraint_insert(root, \
151 arg1); \
152 checkmem(__ret == 0); \
153 } else { \
154 root = arg1; \
155 } \
156 if(arg2) { \
157 int __ret \
158 = asn1p_constraint_insert(root, arg2); \
159 checkmem(__ret == 0); \
160 } \
161 } while(0)
162
163
Lev Walkinf59d0752004-08-18 04:59:12 +0000164#line 58 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +0000165typedef union {
166 asn1p_t *a_grammar;
167 asn1p_module_flags_e a_module_flags;
168 asn1p_module_t *a_module;
169 asn1p_expr_type_e a_type; /* ASN.1 Type */
170 asn1p_expr_t *a_expr; /* Constructed collection */
171 asn1p_constraint_t *a_constr; /* Constraint */
172 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
173 asn1p_xports_t *a_xports; /* IMports/EXports */
174 asn1p_oid_t *a_oid; /* Object Identifier */
175 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
176 struct asn1p_type_tag_s a_tag; /* A tag */
177 asn1p_ref_t *a_ref; /* Reference to custom type */
178 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
179 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
180 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
181 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
182 struct asn1p_param_s a_parg; /* A parameter argument */
183 asn1p_paramlist_t *a_plist; /* A pargs list */
Lev Walkin9c974182004-09-15 11:59:51 +0000184 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
Lev Walkinf15320b2004-06-03 03:38:44 +0000185 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
Lev Walkind21c5052004-09-29 13:18:09 +0000186 asn1c_integer_t a_int;
Lev Walkinf15320b2004-06-03 03:38:44 +0000187 char *tv_str;
188 struct {
189 char *buf;
190 int len;
191 } tv_opaque;
192 struct {
193 char *name;
194 struct asn1p_type_tag_s tag;
195 } tv_nametag;
Lev Walkin1004aa92004-09-08 00:28:11 +0000196} YYSTYPE;
197#include <stdio.h>
198
199#ifndef __cplusplus
200#ifndef __STDC__
201#define const
202#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000203#endif
204
205
206
Lev Walkinff7dd142005-03-20 12:58:00 +0000207#define YYFINAL 418
Lev Walkin1004aa92004-09-08 00:28:11 +0000208#define YYFLAG -32768
Lev Walkinc603f102005-01-23 09:51:44 +0000209#define YYNTBASE 116
Lev Walkinf15320b2004-06-03 03:38:44 +0000210
Lev Walkinff7dd142005-03-20 12:58:00 +0000211#define YYTRANSLATE(x) ((unsigned)(x) <= 354 ? yytranslate[x] : 218)
Lev Walkinf15320b2004-06-03 03:38:44 +0000212
Lev Walkin1004aa92004-09-08 00:28:11 +0000213static const char yytranslate[] = { 0,
214 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
215 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
216 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinc603f102005-01-23 09:51:44 +0000217 2, 2, 110, 2, 2, 2, 2, 2, 2, 105,
218 106, 2, 2, 108, 2, 111, 2, 2, 2, 2,
219 2, 2, 2, 2, 2, 2, 2, 109, 107, 112,
220 2, 2, 2, 113, 2, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000221 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
222 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinc603f102005-01-23 09:51:44 +0000223 114, 2, 115, 97, 2, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000224 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
225 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinc603f102005-01-23 09:51:44 +0000226 2, 2, 103, 99, 104, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000227 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
228 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
229 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
230 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
231 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
232 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
233 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
234 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
235 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
236 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
237 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
238 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
239 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
240 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
241 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
242 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
243 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
244 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
245 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
246 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
247 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
248 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
Lev Walkinc603f102005-01-23 09:51:44 +0000249 98, 100, 101, 102
Lev Walkin1004aa92004-09-08 00:28:11 +0000250};
Lev Walkinf15320b2004-06-03 03:38:44 +0000251
Lev Walkin1004aa92004-09-08 00:28:11 +0000252#if YYDEBUG != 0
253static const short yyprhs[] = { 0,
254 0, 2, 4, 7, 16, 17, 19, 23, 26, 28,
255 31, 33, 38, 40, 41, 43, 45, 48, 51, 54,
256 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
257 79, 81, 82, 86, 88, 92, 95, 97, 100, 105,
Lev Walkin144db9b2004-10-12 23:26:53 +0000258 107, 111, 113, 117, 119, 123, 127, 130, 132, 136,
259 138, 142, 144, 151, 153, 155, 156, 158, 160, 164,
260 166, 168, 173, 177, 181, 188, 190, 194, 196, 200,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000261 204, 208, 210, 214, 216, 218, 219, 221, 223, 227,
262 231, 235, 237, 239, 243, 246, 248, 254, 255, 257,
263 259, 263, 266, 271, 276, 277, 279, 280, 287, 289,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000264 292, 294, 296, 298, 302, 306, 310, 312, 317, 322,
265 327, 334, 341, 343, 348, 353, 355, 359, 361, 365,
266 369, 373, 375, 379, 381, 385, 387, 389, 391, 393,
267 398, 402, 403, 407, 409, 411, 413, 415, 417, 419,
268 421, 423, 425, 429, 431, 434, 436, 438, 440, 442,
269 445, 448, 450, 452, 455, 458, 460, 462, 464, 466,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000270 468, 471, 473, 476, 478, 480, 482, 484, 486, 488,
271 490, 492, 494, 496, 498, 500, 502, 504, 506, 508,
272 510, 512, 514, 515, 517, 519, 524, 528, 533, 535,
Lev Walkinff7dd142005-03-20 12:58:00 +0000273 539, 545, 547, 551, 555, 559, 564, 568, 570, 572,
274 576, 580, 584, 588, 590, 592, 594, 597, 600, 604,
275 606, 608, 610, 612, 614, 616, 618, 620, 626, 628,
276 632, 634, 638, 639, 641, 643, 645, 647, 649, 651,
277 655, 660, 662, 666, 669, 673, 675, 679, 680, 682,
278 684, 687, 690, 694, 696, 700, 702, 707, 712, 714,
279 716, 718, 720, 721, 723, 726, 731, 732, 734, 736,
280 738, 739, 741, 743, 745, 747, 749, 750, 752
Lev Walkin1004aa92004-09-08 00:28:11 +0000281};
Lev Walkinf15320b2004-06-03 03:38:44 +0000282
Lev Walkinc603f102005-01-23 09:51:44 +0000283static const short yyrhs[] = { 117,
Lev Walkinff7dd142005-03-20 12:58:00 +0000284 0, 118, 0, 117, 118, 0, 214, 119, 34, 123,
Lev Walkinc603f102005-01-23 09:51:44 +0000285 3, 21, 126, 39, 0, 0, 120, 0, 103, 121,
286 104, 0, 103, 104, 0, 122, 0, 121, 122, 0,
Lev Walkinff7dd142005-03-20 12:58:00 +0000287 217, 0, 217, 105, 9, 106, 0, 9, 0, 0,
Lev Walkinc603f102005-01-23 09:51:44 +0000288 124, 0, 125, 0, 124, 125, 0, 41, 84, 0,
Lev Walkin1004aa92004-09-08 00:28:11 +0000289 52, 84, 0, 20, 84, 0, 43, 53, 0, 12,
Lev Walkinc603f102005-01-23 09:51:44 +0000290 57, 0, 0, 127, 0, 128, 0, 127, 128, 0,
291 130, 0, 135, 0, 143, 0, 170, 0, 138, 0,
292 0, 38, 12, 129, 0, 178, 0, 54, 131, 107,
293 0, 54, 46, 0, 132, 0, 131, 132, 0, 133,
Lev Walkinff7dd142005-03-20 12:58:00 +0000294 46, 214, 119, 0, 134, 0, 133, 108, 134, 0,
295 214, 0, 214, 103, 104, 0, 217, 0, 42, 136,
Lev Walkinc603f102005-01-23 09:51:44 +0000296 107, 0, 42, 17, 107, 0, 42, 107, 0, 137,
Lev Walkinff7dd142005-03-20 12:58:00 +0000297 0, 136, 108, 137, 0, 214, 0, 214, 103, 104,
298 0, 217, 0, 214, 139, 3, 103, 140, 104, 0,
Lev Walkinc603f102005-01-23 09:51:44 +0000299 165, 0, 175, 0, 0, 141, 0, 142, 0, 141,
Lev Walkinff7dd142005-03-20 12:58:00 +0000300 108, 142, 0, 102, 0, 186, 0, 214, 3, 209,
301 87, 0, 214, 3, 163, 0, 214, 3, 153, 0,
302 214, 103, 144, 104, 3, 163, 0, 145, 0, 144,
303 108, 145, 0, 214, 0, 214, 109, 217, 0, 214,
304 109, 214, 0, 175, 109, 217, 0, 147, 0, 146,
305 108, 147, 0, 163, 0, 217, 0, 0, 149, 0,
306 150, 0, 149, 108, 150, 0, 217, 163, 203, 0,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000307 30, 68, 163, 0, 162, 0, 152, 0, 151, 108,
Lev Walkinff7dd142005-03-20 12:58:00 +0000308 152, 0, 217, 163, 0, 162, 0, 28, 103, 155,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000309 104, 157, 0, 0, 88, 0, 156, 0, 155, 108,
Lev Walkinff7dd142005-03-20 12:58:00 +0000310 156, 0, 168, 203, 0, 168, 163, 154, 203, 0,
311 168, 168, 154, 203, 0, 0, 158, 0, 0, 95,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000312 82, 103, 159, 160, 104, 0, 161, 0, 160, 161,
313 0, 4, 0, 168, 0, 102, 0, 102, 110, 173,
Lev Walkinff7dd142005-03-20 12:58:00 +0000314 0, 102, 110, 208, 0, 209, 164, 182, 0, 177,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000315 0, 27, 103, 151, 104, 0, 78, 103, 148, 104,
Lev Walkinff7dd142005-03-20 12:58:00 +0000316 0, 79, 103, 148, 104, 0, 78, 182, 68, 216,
317 209, 164, 0, 79, 182, 68, 216, 209, 164, 0,
318 18, 0, 18, 35, 25, 217, 0, 214, 103, 146,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000319 104, 0, 165, 0, 56, 68, 165, 0, 11, 0,
Lev Walkinff7dd142005-03-20 12:58:00 +0000320 11, 111, 214, 0, 215, 111, 214, 0, 11, 111,
321 217, 0, 215, 0, 215, 111, 166, 0, 167, 0,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000322 166, 111, 167, 0, 169, 0, 169, 0, 13, 0,
Lev Walkinff7dd142005-03-20 12:58:00 +0000323 14, 0, 217, 139, 3, 171, 0, 217, 109, 171,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000324 0, 0, 103, 172, 174, 0, 63, 0, 45, 0,
Lev Walkinff7dd142005-03-20 12:58:00 +0000325 86, 0, 5, 0, 7, 0, 6, 0, 208, 0,
326 173, 0, 217, 0, 214, 111, 217, 0, 4, 0,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000327 174, 4, 0, 24, 0, 63, 0, 76, 0, 176,
328 0, 67, 81, 0, 65, 51, 0, 77, 0, 44,
329 0, 36, 71, 0, 26, 81, 0, 91, 0, 47,
330 0, 178, 0, 58, 0, 40, 0, 22, 81, 0,
Lev Walkinff7dd142005-03-20 12:58:00 +0000331 175, 0, 176, 205, 0, 23, 0, 48, 0, 49,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000332 0, 50, 0, 59, 0, 64, 0, 74, 0, 83,
333 0, 85, 0, 90, 0, 92, 0, 93, 0, 94,
334 0, 66, 0, 99, 0, 100, 0, 97, 0, 98,
335 0, 96, 0, 0, 183, 0, 184, 0, 80, 105,
336 185, 106, 0, 105, 185, 106, 0, 184, 105, 185,
337 106, 0, 186, 0, 186, 108, 102, 0, 186, 108,
338 102, 108, 186, 0, 187, 0, 186, 179, 187, 0,
339 186, 180, 187, 0, 187, 181, 187, 0, 189, 105,
Lev Walkinff7dd142005-03-20 12:58:00 +0000340 185, 106, 0, 105, 185, 106, 0, 190, 0, 191,
341 0, 190, 188, 190, 0, 61, 188, 190, 0, 190,
342 188, 60, 0, 61, 188, 60, 0, 197, 0, 192,
343 0, 101, 0, 101, 112, 0, 112, 101, 0, 112,
344 101, 112, 0, 80, 0, 46, 0, 45, 0, 86,
345 0, 208, 0, 6, 0, 217, 0, 214, 0, 95,
346 30, 103, 193, 104, 0, 194, 0, 193, 108, 194,
347 0, 102, 0, 217, 182, 195, 0, 0, 196, 0,
348 73, 0, 15, 0, 69, 0, 198, 0, 199, 0,
349 103, 214, 104, 0, 198, 103, 200, 104, 0, 201,
350 0, 200, 108, 201, 0, 113, 202, 0, 113, 111,
351 202, 0, 217, 0, 202, 111, 217, 0, 0, 204,
352 0, 69, 0, 33, 171, 0, 103, 104, 0, 103,
353 206, 104, 0, 207, 0, 206, 108, 207, 0, 217,
354 0, 217, 105, 208, 106, 0, 217, 105, 173, 106,
355 0, 208, 0, 102, 0, 9, 0, 10, 0, 0,
356 210, 0, 211, 213, 0, 114, 212, 9, 115, 0,
357 0, 89, 0, 19, 0, 75, 0, 0, 52, 0,
358 41, 0, 11, 0, 12, 0, 12, 0, 0, 217,
359 0, 8, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000360};
Lev Walkinf15320b2004-06-03 03:38:44 +0000361
362#endif
363
Lev Walkin1004aa92004-09-08 00:28:11 +0000364#if YYDEBUG != 0
365static const short yyrline[] = { 0,
Lev Walkinff7dd142005-03-20 12:58:00 +0000366 302, 308, 314, 330, 355, 357, 360, 364, 369, 376,
367 384, 389, 393, 402, 404, 412, 416, 424, 428, 431,
368 434, 438, 458, 460, 468, 472, 504, 508, 517, 524,
369 537, 544, 546, 558, 571, 578, 583, 589, 595, 604,
370 610, 616, 623, 629, 637, 641, 644, 651, 657, 663,
371 670, 676, 685, 695, 703, 711, 713, 723, 726, 730,
372 733, 745, 757, 763, 779, 788, 798, 808, 813, 820,
373 827, 837, 843, 849, 853, 876, 878, 880, 886, 892,
374 899, 906, 911, 917, 923, 929, 934, 944, 946, 949,
375 957, 963, 972, 978, 995, 997, 1002, 1006, 1011, 1016,
376 1022, 1026, 1037, 1046, 1055, 1066, 1088, 1092, 1098, 1104,
377 1110, 1120, 1130, 1136, 1150, 1174, 1181, 1195, 1204, 1214,
378 1224, 1234, 1242, 1263, 1272, 1281, 1282, 1284, 1291, 1303,
379 1313, 1321, 1321, 1326, 1331, 1336, 1341, 1345, 1349, 1353,
380 1356, 1361, 1373, 1389, 1400, 1414, 1416, 1417, 1418, 1419,
381 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1433, 1435,
382 1436, 1439, 1446, 1458, 1460, 1464, 1468, 1469, 1470, 1471,
383 1472, 1476, 1477, 1478, 1479, 1483, 1484, 1491, 1491, 1492,
384 1492, 1493, 1495, 1497, 1502, 1506, 1515, 1519, 1524, 1528,
385 1534, 1544, 1548, 1551, 1554, 1559, 1568, 1576, 1582, 1588,
386 1595, 1603, 1611, 1620, 1623, 1628, 1630, 1631, 1632, 1635,
387 1639, 1644, 1650, 1655, 1658, 1662, 1675, 1689, 1695, 1699,
388 1704, 1710, 1722, 1724, 1727, 1731, 1734, 1739, 1743, 1751,
389 1766, 1772, 1779, 1792, 1804, 1819, 1823, 1840, 1845, 1848,
390 1853, 1875, 1880, 1885, 1891, 1897, 1905, 1913, 1921, 1928,
391 1938, 1943, 1973, 1975, 1978, 1985, 1991, 1993, 1994, 1995,
392 1998, 2000, 2001, 2004, 2009, 2016, 2023, 2025, 2029
Lev Walkin1004aa92004-09-08 00:28:11 +0000393};
394#endif
395
396
397#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
398
399static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
400"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
401"TOK_number_negative","TOK_typereference","TOK_capitalreference","TOK_typefieldreference",
402"TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY",
403"TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN",
404"TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS",
405"TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED",
406"TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL","TOK_END","TOK_ENUMERATED",
407"TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE",
408"TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString","TOK_GraphicString","TOK_IA5String",
409"TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE",
410"TOK_INSTRUCTIONS","TOK_INTEGER","TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY",
411"TOK_NULL","TOK_NumericString","TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET",
412"TOK_OF","TOK_OPTIONAL","TOK_PATTERN","TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT",
413"TOK_PrintableString","TOK_PRIVATE","TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE",
414"TOK_SET","TOK_SIZE","TOK_STRING","TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString",
415"TOK_TRUE","TOK_TYPE_IDENTIFIER","TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString",
416"TOK_UTCTime","TOK_UTF8String","TOK_VideotexString","TOK_VisibleString","TOK_WITH",
417"TOK_EXCEPT","'^'","TOK_INTERSECTION","'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots",
Lev Walkinc603f102005-01-23 09:51:44 +0000418"'{'","'}'","'('","')'","';'","','","':'","'!'","'.'","'<'","'@'","'['","']'",
Lev Walkin1004aa92004-09-08 00:28:11 +0000419"ParsedGrammar","ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
420"ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags",
421"ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody",
422"ModuleSpecificationBody","ModuleSpecificationElement","@1","ImportsDefinition",
423"ImportsBundleSet","ImportsBundle","ImportsList","ImportsElement","ExportsDefinition",
424"ExportsBody","ExportsElement","ValueSetDefinition","DefinedTypeRef","optValueSetBody",
425"ValueSetBody","ValueSetElement","DataTypeReference","ParameterArgumentList",
Lev Walkin144db9b2004-10-12 23:26:53 +0000426"ParameterArgumentName","ActualParameterList","ActualParameter","optComponentTypeLists",
427"ComponentTypeLists","ComponentType","AlternativeTypeLists","AlternativeType",
428"ClassDeclaration","optUnique","ClassFieldList","ClassField","optWithSyntax",
429"WithSyntax","@2","WithSyntaxFormat","WithSyntaxFormatToken","ExtensionAndException",
430"Type","TypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList",
431"ComplexTypeReferenceElement","ClassFieldIdentifier","ClassFieldName","ValueDefinition",
432"Value","@3","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
433"BasicType","BasicString","Union","Intersection","Except","optConstraints","Constraints",
434"SetOfConstraints","ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement",
Lev Walkinff7dd142005-03-20 12:58:00 +0000435"ConstraintRangeSpec","ConstraintSpec","SingleValue","ContainedSubtype","WithComponents",
436"WithComponentsList","WithComponentsElement","optPresenceConstraint","PresenceConstraint",
437"TableConstraint","SimpleTableConstraint","ComponentRelationConstraint","AtNotationList",
438"AtNotationElement","ComponentIdList","optMarker","Marker","UniverationDefinition",
439"UniverationList","UniverationElement","SignedNumber","optTag","Tag","TagTypeValue",
440"TagClass","TagPlicit","TypeRefName","ObjectClassReference","optIdentifier",
441"Identifier", NULL
Lev Walkin1004aa92004-09-08 00:28:11 +0000442};
443#endif
444
445static const short yyr1[] = { 0,
Lev Walkinc603f102005-01-23 09:51:44 +0000446 116, 117, 117, 118, 119, 119, 120, 120, 121, 121,
447 122, 122, 122, 123, 123, 124, 124, 125, 125, 125,
448 125, 125, 126, 126, 127, 127, 128, 128, 128, 128,
449 128, 129, 128, 128, 130, 130, 131, 131, 132, 133,
450 133, 134, 134, 134, 135, 135, 135, 136, 136, 137,
451 137, 137, 138, 139, 139, 140, 140, 141, 141, 142,
452 142, 143, 143, 143, 143, 144, 144, 145, 145, 145,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000453 145, 146, 146, 147, 147, 148, 148, 149, 149, 150,
454 150, 150, 151, 151, 152, 152, 153, 154, 154, 155,
455 155, 156, 156, 156, 157, 157, 159, 158, 160, 160,
456 161, 161, 162, 162, 162, 163, 164, 164, 164, 164,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000457 164, 164, 164, 164, 164, 164, 164, 165, 165, 165,
458 165, 165, 165, 166, 166, 167, 168, 169, 169, 170,
459 171, 172, 171, 171, 171, 171, 171, 171, 171, 171,
460 171, 173, 173, 174, 174, 175, 175, 175, 175, 175,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000461 175, 175, 175, 175, 175, 175, 175, 175, 176, 176,
462 176, 177, 177, 178, 178, 178, 178, 178, 178, 178,
463 178, 178, 178, 178, 178, 178, 178, 179, 179, 180,
464 180, 181, 182, 182, 183, 183, 184, 184, 185, 185,
465 185, 186, 186, 186, 186, 187, 187, 187, 187, 187,
Lev Walkinff7dd142005-03-20 12:58:00 +0000466 187, 187, 187, 187, 187, 188, 188, 188, 188, 189,
467 189, 190, 190, 190, 190, 190, 191, 192, 193, 193,
468 194, 194, 195, 195, 196, 196, 196, 197, 197, 198,
469 199, 200, 200, 201, 201, 202, 202, 203, 203, 204,
470 204, 205, 205, 206, 206, 207, 207, 207, 207, 207,
471 208, 208, 209, 209, 210, 211, 212, 212, 212, 212,
472 213, 213, 213, 214, 214, 215, 216, 216, 217
Lev Walkin1004aa92004-09-08 00:28:11 +0000473};
474
475static const short yyr2[] = { 0,
476 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
477 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
478 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
479 1, 0, 3, 1, 3, 2, 1, 2, 4, 1,
Lev Walkin144db9b2004-10-12 23:26:53 +0000480 3, 1, 3, 1, 3, 3, 2, 1, 3, 1,
481 3, 1, 6, 1, 1, 0, 1, 1, 3, 1,
482 1, 4, 3, 3, 6, 1, 3, 1, 3, 3,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000483 3, 1, 3, 1, 1, 0, 1, 1, 3, 3,
484 3, 1, 1, 3, 2, 1, 5, 0, 1, 1,
485 3, 2, 4, 4, 0, 1, 0, 6, 1, 2,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000486 1, 1, 1, 3, 3, 3, 1, 4, 4, 4,
487 6, 6, 1, 4, 4, 1, 3, 1, 3, 3,
488 3, 1, 3, 1, 3, 1, 1, 1, 1, 4,
489 3, 0, 3, 1, 1, 1, 1, 1, 1, 1,
490 1, 1, 3, 1, 2, 1, 1, 1, 1, 2,
491 2, 1, 1, 2, 2, 1, 1, 1, 1, 1,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000492 2, 1, 2, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin1004aa92004-09-08 00:28:11 +0000493 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000494 1, 1, 0, 1, 1, 4, 3, 4, 1, 3,
Lev Walkinff7dd142005-03-20 12:58:00 +0000495 5, 1, 3, 3, 3, 4, 3, 1, 1, 3,
496 3, 3, 3, 1, 1, 1, 2, 2, 3, 1,
497 1, 1, 1, 1, 1, 1, 1, 5, 1, 3,
498 1, 3, 0, 1, 1, 1, 1, 1, 1, 3,
499 4, 1, 3, 2, 3, 1, 3, 0, 1, 1,
500 2, 2, 3, 1, 3, 1, 4, 4, 1, 1,
501 1, 1, 0, 1, 2, 4, 0, 1, 1, 1,
502 0, 1, 1, 1, 1, 1, 0, 1, 1
Lev Walkin1004aa92004-09-08 00:28:11 +0000503};
504
505static const short yydefact[] = { 0,
Lev Walkinff7dd142005-03-20 12:58:00 +0000506 264, 265, 1, 2, 5, 3, 0, 0, 6, 269,
Lev Walkin1004aa92004-09-08 00:28:11 +0000507 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
508 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000509 18, 21, 19, 0, 17, 12, 23, 164, 0, 0,
510 165, 166, 167, 0, 168, 169, 177, 170, 171, 172,
511 173, 174, 175, 176, 0, 24, 25, 27, 28, 31,
Lev Walkin144db9b2004-10-12 23:26:53 +0000512 29, 30, 34, 0, 0, 32, 0, 47, 0, 48,
513 50, 52, 36, 0, 37, 0, 40, 42, 44, 4,
Lev Walkinff7dd142005-03-20 12:58:00 +0000514 26, 253, 118, 266, 0, 146, 0, 0, 160, 153,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000515 157, 159, 147, 0, 0, 148, 152, 156, 0, 0,
516 54, 55, 149, 158, 122, 0, 33, 46, 45, 0,
Lev Walkinff7dd142005-03-20 12:58:00 +0000517 0, 35, 38, 0, 0, 0, 0, 257, 64, 63,
518 0, 254, 261, 0, 161, 155, 154, 151, 150, 0,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000519 66, 0, 68, 0, 0, 0, 49, 51, 5, 41,
Lev Walkinff7dd142005-03-20 12:58:00 +0000520 43, 0, 259, 260, 258, 0, 118, 266, 113, 0,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000521 0, 183, 183, 62, 183, 116, 162, 149, 107, 0,
Lev Walkinff7dd142005-03-20 12:58:00 +0000522 263, 262, 255, 119, 121, 0, 0, 0, 0, 56,
523 128, 129, 123, 124, 126, 120, 137, 139, 138, 251,
524 252, 135, 134, 136, 132, 130, 141, 140, 0, 142,
525 39, 0, 90, 253, 127, 0, 0, 0, 0, 0,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000526 76, 0, 0, 184, 185, 76, 0, 106, 0, 163,
Lev Walkinff7dd142005-03-20 12:58:00 +0000527 253, 253, 67, 71, 70, 69, 215, 212, 211, 0,
528 210, 213, 0, 60, 0, 0, 0, 57, 58, 61,
529 192, 0, 198, 199, 205, 204, 228, 229, 214, 217,
530 216, 0, 0, 0, 0, 95, 0, 0, 240, 88,
531 88, 92, 239, 0, 256, 0, 103, 0, 83, 86,
532 253, 117, 0, 0, 0, 77, 78, 82, 253, 0,
533 189, 267, 0, 0, 267, 250, 242, 0, 244, 249,
534 246, 0, 72, 74, 75, 65, 206, 0, 0, 0,
535 0, 0, 53, 0, 180, 181, 178, 179, 0, 0,
536 182, 0, 0, 0, 0, 125, 144, 133, 143, 131,
537 0, 87, 96, 91, 241, 89, 238, 238, 114, 0,
538 108, 0, 85, 0, 253, 109, 0, 238, 187, 0,
539 253, 268, 0, 110, 253, 243, 0, 0, 115, 253,
540 207, 208, 203, 201, 0, 230, 197, 59, 193, 194,
541 195, 0, 202, 200, 0, 0, 232, 145, 0, 93,
542 94, 104, 105, 142, 84, 186, 81, 79, 80, 190,
543 0, 188, 0, 245, 0, 0, 73, 209, 221, 0,
544 219, 183, 196, 0, 234, 236, 231, 0, 97, 0,
545 111, 112, 248, 247, 218, 0, 223, 235, 0, 233,
546 0, 191, 220, 226, 227, 225, 222, 224, 237, 101,
547 0, 99, 102, 98, 100, 0, 0, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000548};
549
Lev Walkinff7dd142005-03-20 12:58:00 +0000550static const short yydefgoto[] = { 416,
Lev Walkin1004aa92004-09-08 00:28:11 +0000551 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000552 56, 57, 107, 58, 74, 75, 76, 77, 59, 69,
Lev Walkinff7dd142005-03-20 12:58:00 +0000553 70, 60, 100, 227, 228, 229, 61, 130, 131, 282,
554 283, 265, 266, 267, 258, 259, 119, 317, 192, 193,
555 312, 313, 401, 411, 412, 268, 284, 155, 156, 173,
556 174, 194, 195, 62, 186, 243, 187, 308, 157, 103,
557 159, 104, 299, 300, 302, 203, 204, 205, 270, 271,
558 231, 289, 232, 233, 234, 235, 380, 381, 407, 408,
559 236, 237, 238, 356, 357, 385, 252, 253, 210, 278,
560 279, 239, 254, 122, 123, 146, 163, 240, 105, 331,
561 241
Lev Walkin1004aa92004-09-08 00:28:11 +0000562};
563
Lev Walkinff7dd142005-03-20 12:58:00 +0000564static const short yypact[] = { 228,
565-32768,-32768, 228,-32768, -71,-32768, 38, 59,-32768,-32768,
566-32768,-32768, 49,-32768, -3, 58,-32768,-32768, 74, 54,
567 60, 67, 112, 84, 136, 58,-32768, 82,-32768,-32768,
568-32768,-32768,-32768, 152,-32768,-32768, 419,-32768, 178, 33,
569-32768,-32768,-32768, 61,-32768,-32768,-32768,-32768,-32768,-32768,
570-32768,-32768,-32768,-32768, 181, 419,-32768,-32768,-32768,-32768,
571-32768,-32768,-32768, 332, 648,-32768, 121,-32768, 144,-32768,
572 132,-32768,-32768, 17,-32768, -22,-32768, 143,-32768,-32768,
573-32768, -17, 137,-32768, 183,-32768, 194, 186,-32768,-32768,
574-32768,-32768,-32768, 208, 203,-32768,-32768,-32768, 723, 275,
575-32768,-32768,-32768,-32768, 179, 288,-32768,-32768,-32768, 184,
576 190,-32768,-32768, 228, 184, 191, 193, 20,-32768,-32768,
577 496,-32768, 86, 184,-32768,-32768,-32768,-32768,-32768, 79,
578-32768, 188, 195, 200, 258, 355,-32768,-32768, -71,-32768,
579-32768, 260,-32768,-32768,-32768, 284, 53, 202, 263, 205,
580 238, -15, -14,-32768, 55,-32768,-32768, 206,-32768, 207,
581-32768,-32768,-32768,-32768,-32768, 308, 723, 304, 184, 197,
582-32768,-32768, 210,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
583-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 211, 209,
584-32768, 93,-32768, 29,-32768, 199, 292, 11, 269, 214,
585 10, 221, 255,-32768, 220, 10, 259,-32768, 46,-32768,
586 6, 215,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 62,
587-32768,-32768, 298,-32768, 228, 221, 230, 224,-32768, 189,
588 240, 232, 62,-32768,-32768,-32768, 236,-32768,-32768,-32768,
589-32768, 260, 336, 304, 355, 246, 260, 355,-32768, 254,
590 254,-32768,-32768, 573,-32768, 304, 235, 108,-32768,-32768,
591 215,-32768, 221, 278, 243, 241,-32768,-32768, 215, 244,
592 72, 304, 221, 248, 304,-32768,-32768, 109,-32768,-32768,
593 252, 110,-32768,-32768,-32768,-32768, 247, 270, 71, 250,
594 266, 267,-32768, 197,-32768,-32768,-32768,-32768, 221, 221,
595-32768, 221, 221, 176, 261,-32768,-32768, 371,-32768,-32768,
596 296,-32768,-32768,-32768,-32768,-32768, 15, 15,-32768, 167,
597-32768, 11,-32768, 277, 215,-32768, 10, 15,-32768, 282,
598 215,-32768, 279,-32768, 215,-32768, 13, 167,-32768, 6,
599-32768, 274,-32768,-32768, 52,-32768,-32768,-32768,-32768,-32768,
600-32768, 281,-32768,-32768, 12, 115,-32768,-32768, 285,-32768,
601-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 286,
602 573,-32768, 573,-32768, 287, 295,-32768,-32768,-32768, 118,
603-32768, 55,-32768, 304, 294,-32768,-32768, 261,-32768, 221,
604-32768,-32768,-32768,-32768,-32768, 52, 23, 294, 304,-32768,
605 145, 189,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
606 22,-32768,-32768,-32768,-32768, 403, 407,-32768
Lev Walkin1004aa92004-09-08 00:28:11 +0000607};
608
609static const short yypgoto[] = {-32768,
Lev Walkinff7dd142005-03-20 12:58:00 +0000610-32768, 408, 271,-32768,-32768, 399,-32768,-32768, 387,-32768,
611-32768, 358,-32768,-32768,-32768, 342,-32768, 305,-32768,-32768,
612 309,-32768, 356,-32768,-32768, 134,-32768,-32768, 262,-32768,
613 92, 227,-32768, 107,-32768, 114,-32768, 187,-32768, 192,
614-32768,-32768,-32768,-32768, 26, -188, -80, -312, -52,-32768,
615 198, -186, -120,-32768, -1,-32768, -244,-32768, -48, -118,
616-32768, 69,-32768,-32768,-32768, -148,-32768,-32768, -199, -166,
617 -39, 212,-32768, -204,-32768,-32768,-32768, 47,-32768,-32768,
618-32768,-32768,-32768,-32768, 56, 63, -265,-32768,-32768,-32768,
619 111, -127, -81,-32768,-32768,-32768,-32768, 31,-32768, 171,
620 -7
Lev Walkin1004aa92004-09-08 00:28:11 +0000621};
622
623
Lev Walkinff7dd142005-03-20 12:58:00 +0000624#define YYLAST 817
Lev Walkin1004aa92004-09-08 00:28:11 +0000625
626
627static const short yytable[] = { 15,
Lev Walkinff7dd142005-03-20 12:58:00 +0000628 121, 120, 158, 230, 207, 15, 208, 251, 188, 260,
629 117, 101, 101, 10, 175, 102, 102, 10, 10, 10,
630 10, 180, 181, 114, 10, 410, 292, 1, 2, 65,
631 5, 7, 72, 5, 171, 172, 79, 404, 143, 264,
632 10, 171, 172, 1, 2, 10, 11, 248, 65, 67,
633 132, 360, 361, 10, 180, 181, 10, 11, 391, 10,
634 392, 248, 369, 324, 200, 200, 79, 64, 10, 20,
635 71, 1, 2, 333, 78, 362, 217, 21, 10, 180,
636 181, 280, 28, 249, 344, 115, 64, 201, 206, 202,
637 202, 405, 16, 375, 144, 406, 118, 249, 22, 354,
638 23, 19, 72, 352, 78, 63, 73, 79, 145, 24,
639 29, 257, 257, 250, 276, 218, 165, 188, 132, 118,
640 188, 175, 384, 112, 63, 414, 161, 230, 190, 133,
641 343, 286, -238, 260, 200, 158, -238, 162, 34, 68,
642 71, 12, 118, 30, 139, 78, 262, 276, 410, 277,
643 31, 160, 17, 379, 164, -264, 222, 171, 172, 202,
644 214, 216, 287, 124, 32, 176, 189, 33, 295, 296,
645 297, 298, 37, 288, 10, 180, 181, 1, 2, 330,
646 323, 217, 166, 10, 180, 181, 167, 36, 328, 66,
647 261, 10, 363, 269, 1, 2, 246, 133, 269, 215,
648 247, 281, 217, 285, 10, 180, 181, 1, 2, 280,
649 376, 321, 336, 339, 413, 322, 337, 340, 387, 80,
650 218, 395, 388, 402, 413, 396, 217, 108, 10, 180,
651 181, 1, 2, 397, 111, 353, 309, 190, 1, 2,
652 190, 218, 219, 310, 367, 116, 315, 124, 319, 371,
653 109, 110, 158, 373, 158, 291, 127, 220, 128, 349,
654 350, 222, 351, 125, 332, 218, 219, 332, 1, 2,
655 171, 172, 171, 172, 126, 189, 221, 134, 189, 83,
656 84, 220, 222, 129, 160, 295, 296, 297, 298, 135,
657 136, 223, 196, 138, 141, 142, 168, 197, 224, 225,
658 221, 226, 170, 169, -265, 199, 222, 198, 209, 211,
659 212, 10, 364, 255, 261, 223, 256, 245, 263, 269,
660 242, 244, 272, 225, 273, 226, 275, 290, 118, 281,
661 364, 294, 285, 293, 82, 301, 303, 382, 305, 307,
662 311, 316, 83, 84, 320, 325, 326, 386, 327, 329,
663 189, 334, 345, 85, 38, 86, 338, 87, 341, 177,
664 178, 179, 10, 180, 181, 1, 2, 88, 189, 346,
665 342, 89, 347, 355, 358, 90, 386, 359, 91, 41,
666 42, 43, 366, 370, 372, 378, 383, 389, 382, 92,
667 45, 409, 393, 390, 93, 46, 94, 47, 95, 182,
668 394, 160, 417, 160, 399, 48, 418, 96, 97, 191,
669 6, 18, 35, 81, 49, 113, 50, 183, 137, 140,
670 106, 51, 98, 52, 53, 54, 10, 348, 213, 1,
671 2, 377, 274, 368, 99, 365, 415, 318, 314, 306,
672 184, 38, 403, 400, 304, 335, 398, 374, 0, 0,
673 0, 0, 0, 0, 0, 0, 39, 185, 0, 0,
674 40, 0, 0, 0, 0, 0, 41, 42, 43, 0,
675 0, 0, 44, 0, 0, 0, 0, 45, 0, 0,
676 0, 0, 46, 0, 47, 0, 0, 0, 0, 0,
677 0, 0, 48, 0, 0, 0, 0, 0, 0, 0,
678 0, 49, 0, 50, 0, 0, 147, 148, 51, 0,
679 52, 53, 54, 149, 0, 0, 0, 85, 38, 86,
680 0, 87, 150, 0, 0, 0, 0, 0, 0, 0,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000681 0, 88, 0, 0, 0, 89, 0, 0, 0, 90,
682 0, 0, 91, 41, 42, 43, 0, 0, 0, 0,
Lev Walkinff7dd142005-03-20 12:58:00 +0000683 0, 151, 0, 92, 45, 0, 0, 0, 93, 46,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000684 94, 47, 95, 0, 0, 0, 0, 0, 0, 48,
Lev Walkinff7dd142005-03-20 12:58:00 +0000685 0, 96, 97, 152, 153, 0, 0, 0, 49, 0,
686 50, 0, 154, 147, 148, 51, 98, 52, 53, 54,
687 149, 0, 0, 0, 85, 38, 86, 0, 87, 150,
688 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
689 0, 0, 89, 0, 0, 0, 90, 0, 0, 91,
690 41, 42, 43, 0, 0, 0, 0, 0, 151, 0,
691 92, 45, 0, 0, 0, 93, 46, 94, 47, 95,
692 0, 0, 0, 0, 0, 0, 48, 0, 96, 97,
693 152, 153, 0, 0, 0, 49, 0, 50, 83, 84,
694 0, 0, 51, 98, 52, 53, 54, 0, 0, 85,
695 38, 86, 0, 87, 0, 0, 0, 0, 0, 0,
696 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
697 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
698 0, 0, 0, 0, 0, 92, 45, 0, 0, 0,
699 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
700 0, 48, 0, 96, 97, 0, 0, 0, 0, 0,
701 49, 0, 50, 1, 2, 0, 0, 51, 98, 52,
702 53, 54, 0, 0, 85, 38, 86, 0, 87, 0,
703 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
704 0, 0, 89, 0, 0, 0, 90, 0, 0, 91,
705 41, 42, 43, 0, 0, 0, 0, 0, 0, 0,
706 92, 45, 0, 0, 0, 93, 46, 94, 47, 95,
707 0, 0, 0, 0, 0, 0, 48, 0, 96, 97,
708 0, 0, 0, 0, 0, 49, 0, 50, 0, 0,
709 0, 0, 51, 98, 52, 53, 54
Lev Walkin1004aa92004-09-08 00:28:11 +0000710};
711
712static const short yycheck[] = { 7,
Lev Walkinff7dd142005-03-20 12:58:00 +0000713 82, 82, 121, 170, 153, 13, 155, 194, 136, 198,
714 28, 64, 65, 8, 135, 64, 65, 8, 8, 8,
715 8, 9, 10, 46, 8, 4, 226, 11, 12, 37,
716 0, 103, 40, 3, 13, 14, 44, 15, 19, 30,
717 8, 13, 14, 11, 12, 8, 9, 33, 56, 17,
718 99, 317, 318, 8, 9, 10, 8, 9, 371, 8,
719 373, 33, 328, 263, 80, 80, 74, 37, 8, 12,
720 40, 11, 12, 273, 44, 320, 6, 20, 8, 9,
721 10, 209, 9, 69, 289, 108, 56, 103, 103, 105,
722 105, 69, 34, 338, 75, 73, 114, 69, 41, 304,
723 43, 105, 110, 303, 74, 37, 46, 115, 89, 52,
724 57, 102, 102, 194, 102, 45, 124, 245, 167, 114,
725 248, 242, 111, 107, 56, 104, 41, 294, 136, 99,
726 60, 212, 104, 322, 80, 254, 108, 52, 3, 107,
727 110, 104, 114, 84, 114, 115, 199, 102, 4, 104,
728 84, 121, 104, 102, 124, 103, 86, 13, 14, 105,
729 168, 169, 101, 111, 53, 135, 136, 84, 97, 98,
730 99, 100, 21, 112, 8, 9, 10, 11, 12, 108,
731 261, 6, 104, 8, 9, 10, 108, 106, 269, 12,
732 198, 8, 320, 201, 11, 12, 104, 167, 206, 169,
733 108, 209, 6, 211, 8, 9, 10, 11, 12, 337,
734 338, 104, 104, 104, 401, 108, 108, 108, 104, 39,
735 45, 104, 108, 390, 411, 108, 6, 107, 8, 9,
736 10, 11, 12, 382, 103, 60, 244, 245, 11, 12,
737 248, 45, 46, 245, 325, 103, 248, 111, 256, 331,
738 107, 108, 371, 335, 373, 225, 71, 61, 51, 299,
739 300, 86, 302, 81, 272, 45, 46, 275, 11, 12,
740 13, 14, 13, 14, 81, 245, 80, 3, 248, 11,
741 12, 61, 86, 81, 254, 97, 98, 99, 100, 111,
742 3, 95, 9, 104, 104, 103, 109, 35, 102, 103,
743 80, 105, 103, 109, 103, 68, 86, 103, 103, 103,
744 3, 8, 320, 115, 322, 95, 25, 109, 105, 327,
745 111, 111, 68, 103, 105, 105, 68, 30, 114, 337,
746 338, 108, 340, 104, 3, 96, 105, 345, 103, 4,
747 95, 88, 11, 12, 110, 68, 104, 355, 108, 106,
748 320, 104, 103, 22, 23, 24, 105, 26, 112, 5,
749 6, 7, 8, 9, 10, 11, 12, 36, 338, 104,
750 101, 40, 106, 113, 4, 44, 384, 82, 47, 48,
751 49, 50, 106, 102, 106, 112, 106, 103, 396, 58,
752 59, 399, 106, 108, 63, 64, 65, 66, 67, 45,
753 106, 371, 0, 373, 111, 74, 0, 76, 77, 139,
754 3, 13, 26, 56, 83, 74, 85, 63, 110, 115,
755 65, 90, 91, 92, 93, 94, 8, 294, 167, 11,
756 12, 340, 206, 327, 103, 322, 411, 251, 247, 242,
757 86, 23, 396, 388, 233, 275, 384, 337, -1, -1,
758 -1, -1, -1, -1, -1, -1, 38, 103, -1, -1,
759 42, -1, -1, -1, -1, -1, 48, 49, 50, -1,
760 -1, -1, 54, -1, -1, -1, -1, 59, -1, -1,
761 -1, -1, 64, -1, 66, -1, -1, -1, -1, -1,
762 -1, -1, 74, -1, -1, -1, -1, -1, -1, -1,
763 -1, 83, -1, 85, -1, -1, 11, 12, 90, -1,
764 92, 93, 94, 18, -1, -1, -1, 22, 23, 24,
765 -1, 26, 27, -1, -1, -1, -1, -1, -1, -1,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000766 -1, 36, -1, -1, -1, 40, -1, -1, -1, 44,
767 -1, -1, 47, 48, 49, 50, -1, -1, -1, -1,
Lev Walkinff7dd142005-03-20 12:58:00 +0000768 -1, 56, -1, 58, 59, -1, -1, -1, 63, 64,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000769 65, 66, 67, -1, -1, -1, -1, -1, -1, 74,
Lev Walkinff7dd142005-03-20 12:58:00 +0000770 -1, 76, 77, 78, 79, -1, -1, -1, 83, -1,
771 85, -1, 87, 11, 12, 90, 91, 92, 93, 94,
772 18, -1, -1, -1, 22, 23, 24, -1, 26, 27,
773 -1, -1, -1, -1, -1, -1, -1, -1, 36, -1,
774 -1, -1, 40, -1, -1, -1, 44, -1, -1, 47,
775 48, 49, 50, -1, -1, -1, -1, -1, 56, -1,
776 58, 59, -1, -1, -1, 63, 64, 65, 66, 67,
777 -1, -1, -1, -1, -1, -1, 74, -1, 76, 77,
778 78, 79, -1, -1, -1, 83, -1, 85, 11, 12,
779 -1, -1, 90, 91, 92, 93, 94, -1, -1, 22,
780 23, 24, -1, 26, -1, -1, -1, -1, -1, -1,
781 -1, -1, -1, 36, -1, -1, -1, 40, -1, -1,
782 -1, 44, -1, -1, 47, 48, 49, 50, -1, -1,
783 -1, -1, -1, -1, -1, 58, 59, -1, -1, -1,
784 63, 64, 65, 66, 67, -1, -1, -1, -1, -1,
785 -1, 74, -1, 76, 77, -1, -1, -1, -1, -1,
786 83, -1, 85, 11, 12, -1, -1, 90, 91, 92,
787 93, 94, -1, -1, 22, 23, 24, -1, 26, -1,
788 -1, -1, -1, -1, -1, -1, -1, -1, 36, -1,
789 -1, -1, 40, -1, -1, -1, 44, -1, -1, 47,
790 48, 49, 50, -1, -1, -1, -1, -1, -1, -1,
791 58, 59, -1, -1, -1, 63, 64, 65, 66, 67,
792 -1, -1, -1, -1, -1, -1, 74, -1, 76, 77,
793 -1, -1, -1, -1, -1, 83, -1, 85, -1, -1,
794 -1, -1, 90, 91, 92, 93, 94
Lev Walkin1004aa92004-09-08 00:28:11 +0000795};
796/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
797#line 3 "/usr/share/bison.simple"
798/* This file comes from bison-1.28. */
799
800/* Skeleton output parser for bison,
801 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
802
803 This program is free software; you can redistribute it and/or modify
804 it under the terms of the GNU General Public License as published by
805 the Free Software Foundation; either version 2, or (at your option)
806 any later version.
807
808 This program is distributed in the hope that it will be useful,
809 but WITHOUT ANY WARRANTY; without even the implied warranty of
810 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
811 GNU General Public License for more details.
812
813 You should have received a copy of the GNU General Public License
814 along with this program; if not, write to the Free Software
815 Foundation, Inc., 59 Temple Place - Suite 330,
816 Boston, MA 02111-1307, USA. */
817
818/* As a special exception, when this file is copied by Bison into a
819 Bison output file, you may use that output file without restriction.
820 This special exception was added by the Free Software Foundation
821 in version 1.24 of Bison. */
822
823/* This is the parser code that is written into each bison parser
824 when the %semantic_parser declaration is not specified in the grammar.
825 It was written by Richard Stallman by simplifying the hairy parser
826 used when %semantic_parser is specified. */
827
828#ifndef YYSTACK_USE_ALLOCA
829#ifdef alloca
830#define YYSTACK_USE_ALLOCA
831#else /* alloca not defined */
832#ifdef __GNUC__
833#define YYSTACK_USE_ALLOCA
834#define alloca __builtin_alloca
835#else /* not GNU C. */
836#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
837#define YYSTACK_USE_ALLOCA
838#include <alloca.h>
839#else /* not sparc */
840/* We think this test detects Watcom and Microsoft C. */
841/* This used to test MSDOS, but that is a bad idea
842 since that symbol is in the user namespace. */
843#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
844#if 0 /* No need for malloc.h, which pollutes the namespace;
845 instead, just don't use alloca. */
846#include <malloc.h>
847#endif
848#else /* not MSDOS, or __TURBOC__ */
849#if defined(_AIX)
850/* I don't know what this was needed for, but it pollutes the namespace.
851 So I turned it off. rms, 2 May 1997. */
852/* #include <malloc.h> */
853 #pragma alloca
854#define YYSTACK_USE_ALLOCA
855#else /* not MSDOS, or __TURBOC__, or _AIX */
856#if 0
857#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
858 and on HPUX 10. Eventually we can turn this on. */
859#define YYSTACK_USE_ALLOCA
860#define alloca __builtin_alloca
861#endif /* __hpux */
862#endif
863#endif /* not _AIX */
864#endif /* not MSDOS, or __TURBOC__ */
865#endif /* not sparc */
866#endif /* not GNU C */
867#endif /* alloca not defined */
868#endif /* YYSTACK_USE_ALLOCA not defined */
869
870#ifdef YYSTACK_USE_ALLOCA
871#define YYSTACK_ALLOC alloca
Lev Walkinf15320b2004-06-03 03:38:44 +0000872#else
Lev Walkin1004aa92004-09-08 00:28:11 +0000873#define YYSTACK_ALLOC malloc
Lev Walkinf15320b2004-06-03 03:38:44 +0000874#endif
875
Lev Walkin1004aa92004-09-08 00:28:11 +0000876/* Note: there must be only one dollar sign in this file.
877 It is replaced by the list of actions, each action
878 as one case of the switch. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000879
880#define yyerrok (yyerrstatus = 0)
881#define yyclearin (yychar = YYEMPTY)
882#define YYEMPTY -2
883#define YYEOF 0
884#define YYACCEPT goto yyacceptlab
Lev Walkin1004aa92004-09-08 00:28:11 +0000885#define YYABORT goto yyabortlab
Lev Walkinf15320b2004-06-03 03:38:44 +0000886#define YYERROR goto yyerrlab1
Lev Walkin1004aa92004-09-08 00:28:11 +0000887/* Like YYERROR except do call yyerror.
888 This remains here temporarily to ease the
889 transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +0000890 Once GCC version 2 has supplanted version 1, this can go. */
891#define YYFAIL goto yyerrlab
892#define YYRECOVERING() (!!yyerrstatus)
Lev Walkin1004aa92004-09-08 00:28:11 +0000893#define YYBACKUP(token, value) \
Lev Walkinf15320b2004-06-03 03:38:44 +0000894do \
895 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin1004aa92004-09-08 00:28:11 +0000896 { yychar = (token), yylval = (value); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000897 yychar1 = YYTRANSLATE (yychar); \
898 YYPOPSTACK; \
899 goto yybackup; \
900 } \
901 else \
Lev Walkin1004aa92004-09-08 00:28:11 +0000902 { yyerror ("syntax error: cannot back up"); YYERROR; } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000903while (0)
904
905#define YYTERROR 1
906#define YYERRCODE 256
907
Lev Walkin1004aa92004-09-08 00:28:11 +0000908#ifndef YYPURE
909#define YYLEX yylex()
Lev Walkinf15320b2004-06-03 03:38:44 +0000910#endif
911
Lev Walkin1004aa92004-09-08 00:28:11 +0000912#ifdef YYPURE
913#ifdef YYLSP_NEEDED
914#ifdef YYLEX_PARAM
915#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
916#else
917#define YYLEX yylex(&yylval, &yylloc)
918#endif
919#else /* not YYLSP_NEEDED */
920#ifdef YYLEX_PARAM
921#define YYLEX yylex(&yylval, YYLEX_PARAM)
922#else
923#define YYLEX yylex(&yylval)
924#endif
925#endif /* not YYLSP_NEEDED */
926#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000927
Lev Walkin1004aa92004-09-08 00:28:11 +0000928/* If nonreentrant, generate the variables here */
Lev Walkinf15320b2004-06-03 03:38:44 +0000929
Lev Walkin1004aa92004-09-08 00:28:11 +0000930#ifndef YYPURE
Lev Walkinf15320b2004-06-03 03:38:44 +0000931
Lev Walkin1004aa92004-09-08 00:28:11 +0000932int yychar; /* the lookahead symbol */
933YYSTYPE yylval; /* the semantic value of the */
934 /* lookahead symbol */
Lev Walkinf15320b2004-06-03 03:38:44 +0000935
Lev Walkin1004aa92004-09-08 00:28:11 +0000936#ifdef YYLSP_NEEDED
937YYLTYPE yylloc; /* location data for the lookahead */
938 /* symbol */
939#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000940
Lev Walkin1004aa92004-09-08 00:28:11 +0000941int yynerrs; /* number of parse errors so far */
942#endif /* not YYPURE */
943
944#if YYDEBUG != 0
945int yydebug; /* nonzero means print parse trace */
946/* Since this is uninitialized, it does not stop multiple parsers
947 from coexisting. */
948#endif
949
950/* YYINITDEPTH indicates the initial size of the parser's stacks */
951
Lev Walkinf15320b2004-06-03 03:38:44 +0000952#ifndef YYINITDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000953#define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +0000954#endif
955
Lev Walkin1004aa92004-09-08 00:28:11 +0000956/* YYMAXDEPTH is the maximum size the stacks can grow to
957 (effective only if the built-in stack extension method is used). */
Lev Walkinf15320b2004-06-03 03:38:44 +0000958
959#if YYMAXDEPTH == 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000960#undef YYMAXDEPTH
Lev Walkinf15320b2004-06-03 03:38:44 +0000961#endif
962
963#ifndef YYMAXDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000964#define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +0000965#endif
966
Lev Walkin1004aa92004-09-08 00:28:11 +0000967/* Define __yy_memcpy. Note that the size argument
968 should be passed with type unsigned int, because that is what the non-GCC
969 definitions require. With GCC, __builtin_memcpy takes an arg
970 of type size_t, but it can handle unsigned int. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000971
Lev Walkin1004aa92004-09-08 00:28:11 +0000972#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
973#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
974#else /* not GNU C or C++ */
975#ifndef __cplusplus
Lev Walkinf15320b2004-06-03 03:38:44 +0000976
Lev Walkin1004aa92004-09-08 00:28:11 +0000977/* This is the most reliable way to avoid incompatibilities
978 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +0000979static void
Lev Walkin1004aa92004-09-08 00:28:11 +0000980__yy_memcpy (to, from, count)
981 char *to;
982 char *from;
983 unsigned int count;
Lev Walkin459ab022004-09-07 10:39:09 +0000984{
Lev Walkin1004aa92004-09-08 00:28:11 +0000985 register char *f = from;
986 register char *t = to;
987 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +0000988
Lev Walkin1004aa92004-09-08 00:28:11 +0000989 while (i-- > 0)
990 *t++ = *f++;
Lev Walkin459ab022004-09-07 10:39:09 +0000991}
Lev Walkin459ab022004-09-07 10:39:09 +0000992
Lev Walkin1004aa92004-09-08 00:28:11 +0000993#else /* __cplusplus */
Lev Walkin459ab022004-09-07 10:39:09 +0000994
Lev Walkin1004aa92004-09-08 00:28:11 +0000995/* This is the most reliable way to avoid incompatibilities
996 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +0000997static void
Lev Walkin1004aa92004-09-08 00:28:11 +0000998__yy_memcpy (char *to, char *from, unsigned int count)
Lev Walkin459ab022004-09-07 10:39:09 +0000999{
Lev Walkin1004aa92004-09-08 00:28:11 +00001000 register char *t = to;
1001 register char *f = from;
1002 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001003
Lev Walkin1004aa92004-09-08 00:28:11 +00001004 while (i-- > 0)
1005 *t++ = *f++;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001006}
Lev Walkin609ccbb2004-09-04 04:49:21 +00001007
Lev Walkin1004aa92004-09-08 00:28:11 +00001008#endif
1009#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001010
Lev Walkin1004aa92004-09-08 00:28:11 +00001011#line 217 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00001012
1013/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1014 into yyparse. The argument should have type void *.
1015 It should actually point to an object.
1016 Grammar actions can access the variable by casting it
1017 to the proper pointer type. */
1018
1019#ifdef YYPARSE_PARAM
Lev Walkin1004aa92004-09-08 00:28:11 +00001020#ifdef __cplusplus
1021#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1022#define YYPARSE_PARAM_DECL
1023#else /* not __cplusplus */
1024#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1025#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1026#endif /* not __cplusplus */
1027#else /* not YYPARSE_PARAM */
1028#define YYPARSE_PARAM_ARG
1029#define YYPARSE_PARAM_DECL
1030#endif /* not YYPARSE_PARAM */
Lev Walkinf15320b2004-06-03 03:38:44 +00001031
1032/* Prevent warning if -Wstrict-prototypes. */
1033#ifdef __GNUC__
Lev Walkin1004aa92004-09-08 00:28:11 +00001034#ifdef YYPARSE_PARAM
Lev Walkinf15320b2004-06-03 03:38:44 +00001035int yyparse (void *);
Lev Walkin1004aa92004-09-08 00:28:11 +00001036#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001037int yyparse (void);
Lev Walkin1004aa92004-09-08 00:28:11 +00001038#endif
Lev Walkinceb20e72004-09-05 10:40:41 +00001039#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001040
Lev Walkinf15320b2004-06-03 03:38:44 +00001041int
Lev Walkin1004aa92004-09-08 00:28:11 +00001042yyparse(YYPARSE_PARAM_ARG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001043 YYPARSE_PARAM_DECL
1044{
1045 register int yystate;
1046 register int yyn;
1047 register short *yyssp;
1048 register YYSTYPE *yyvsp;
Lev Walkin1004aa92004-09-08 00:28:11 +00001049 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1050 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
Lev Walkinf15320b2004-06-03 03:38:44 +00001051
Lev Walkin1004aa92004-09-08 00:28:11 +00001052 short yyssa[YYINITDEPTH]; /* the state stack */
1053 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
Lev Walkinf15320b2004-06-03 03:38:44 +00001054
Lev Walkin1004aa92004-09-08 00:28:11 +00001055 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1056 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
Lev Walkinf15320b2004-06-03 03:38:44 +00001057
Lev Walkin1004aa92004-09-08 00:28:11 +00001058#ifdef YYLSP_NEEDED
1059 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1060 YYLTYPE *yyls = yylsa;
1061 YYLTYPE *yylsp;
1062
1063#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1064#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001065#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkin1004aa92004-09-08 00:28:11 +00001066#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001067
Lev Walkin1004aa92004-09-08 00:28:11 +00001068 int yystacksize = YYINITDEPTH;
1069 int yyfree_stacks = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001070
Lev Walkin1004aa92004-09-08 00:28:11 +00001071#ifdef YYPURE
1072 int yychar;
1073 YYSTYPE yylval;
1074 int yynerrs;
1075#ifdef YYLSP_NEEDED
1076 YYLTYPE yylloc;
1077#endif
1078#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001079
Lev Walkin1004aa92004-09-08 00:28:11 +00001080 YYSTYPE yyval; /* the variable used to return */
1081 /* semantic values from the action */
1082 /* routines */
Lev Walkinf15320b2004-06-03 03:38:44 +00001083
1084 int yylen;
1085
Lev Walkin1004aa92004-09-08 00:28:11 +00001086#if YYDEBUG != 0
1087 if (yydebug)
1088 fprintf(stderr, "Starting parse\n");
1089#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001090
1091 yystate = 0;
1092 yyerrstatus = 0;
1093 yynerrs = 0;
1094 yychar = YYEMPTY; /* Cause a token to be read. */
1095
1096 /* Initialize stack pointers.
1097 Waste one element of value and location stack
1098 so that they stay on the same level as the state stack.
1099 The wasted elements are never initialized. */
1100
Lev Walkin1004aa92004-09-08 00:28:11 +00001101 yyssp = yyss - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001102 yyvsp = yyvs;
Lev Walkin1004aa92004-09-08 00:28:11 +00001103#ifdef YYLSP_NEEDED
1104 yylsp = yyls;
1105#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001106
Lev Walkin1004aa92004-09-08 00:28:11 +00001107/* Push a new state, which is found in yystate . */
1108/* In all cases, when you get here, the value and location stacks
1109 have just been pushed. so pushing a state here evens the stacks. */
1110yynewstate:
Lev Walkinf15320b2004-06-03 03:38:44 +00001111
Lev Walkin1004aa92004-09-08 00:28:11 +00001112 *++yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001113
1114 if (yyssp >= yyss + yystacksize - 1)
1115 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001116 /* Give user a chance to reallocate the stack */
1117 /* Use copies of these so that the &'s don't force the real ones into memory. */
1118 YYSTYPE *yyvs1 = yyvs;
1119 short *yyss1 = yyss;
1120#ifdef YYLSP_NEEDED
1121 YYLTYPE *yyls1 = yyls;
1122#endif
1123
Lev Walkinf15320b2004-06-03 03:38:44 +00001124 /* Get the current used size of the three stacks, in elements. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001125 int size = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001126
1127#ifdef yyoverflow
Lev Walkin1004aa92004-09-08 00:28:11 +00001128 /* Each stack pointer address is followed by the size of
1129 the data in use in that stack, in bytes. */
1130#ifdef YYLSP_NEEDED
1131 /* This used to be a conditional around just the two extra args,
1132 but that might be undefined if yyoverflow is a macro. */
1133 yyoverflow("parser stack overflow",
1134 &yyss1, size * sizeof (*yyssp),
1135 &yyvs1, size * sizeof (*yyvsp),
1136 &yyls1, size * sizeof (*yylsp),
1137 &yystacksize);
1138#else
1139 yyoverflow("parser stack overflow",
1140 &yyss1, size * sizeof (*yyssp),
1141 &yyvs1, size * sizeof (*yyvsp),
1142 &yystacksize);
1143#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001144
Lev Walkin1004aa92004-09-08 00:28:11 +00001145 yyss = yyss1; yyvs = yyvs1;
1146#ifdef YYLSP_NEEDED
1147 yyls = yyls1;
1148#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001149#else /* no yyoverflow */
1150 /* Extend the stack our own way. */
1151 if (yystacksize >= YYMAXDEPTH)
Lev Walkin1004aa92004-09-08 00:28:11 +00001152 {
1153 yyerror("parser stack overflow");
1154 if (yyfree_stacks)
1155 {
1156 free (yyss);
1157 free (yyvs);
1158#ifdef YYLSP_NEEDED
1159 free (yyls);
1160#endif
1161 }
1162 return 2;
1163 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001164 yystacksize *= 2;
1165 if (yystacksize > YYMAXDEPTH)
1166 yystacksize = YYMAXDEPTH;
Lev Walkin1004aa92004-09-08 00:28:11 +00001167#ifndef YYSTACK_USE_ALLOCA
1168 yyfree_stacks = 1;
1169#endif
1170 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1171 __yy_memcpy ((char *)yyss, (char *)yyss1,
1172 size * (unsigned int) sizeof (*yyssp));
1173 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1174 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1175 size * (unsigned int) sizeof (*yyvsp));
1176#ifdef YYLSP_NEEDED
1177 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1178 __yy_memcpy ((char *)yyls, (char *)yyls1,
1179 size * (unsigned int) sizeof (*yylsp));
1180#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001181#endif /* no yyoverflow */
1182
Lev Walkin1004aa92004-09-08 00:28:11 +00001183 yyssp = yyss + size - 1;
1184 yyvsp = yyvs + size - 1;
1185#ifdef YYLSP_NEEDED
1186 yylsp = yyls + size - 1;
1187#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001188
Lev Walkin1004aa92004-09-08 00:28:11 +00001189#if YYDEBUG != 0
1190 if (yydebug)
1191 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1192#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001193
1194 if (yyssp >= yyss + yystacksize - 1)
1195 YYABORT;
1196 }
1197
Lev Walkin1004aa92004-09-08 00:28:11 +00001198#if YYDEBUG != 0
1199 if (yydebug)
1200 fprintf(stderr, "Entering state %d\n", yystate);
1201#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001202
1203 goto yybackup;
Lev Walkin1004aa92004-09-08 00:28:11 +00001204 yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001205
1206/* Do appropriate processing given the current state. */
1207/* Read a lookahead token if we need one and don't already have one. */
1208/* yyresume: */
1209
1210 /* First try to decide what to do without reference to lookahead token. */
1211
1212 yyn = yypact[yystate];
Lev Walkin1004aa92004-09-08 00:28:11 +00001213 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001214 goto yydefault;
1215
1216 /* Not known => get a lookahead token if don't already have one. */
1217
1218 /* yychar is either YYEMPTY or YYEOF
1219 or a valid token in external form. */
1220
1221 if (yychar == YYEMPTY)
1222 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001223#if YYDEBUG != 0
1224 if (yydebug)
1225 fprintf(stderr, "Reading a token: ");
1226#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001227 yychar = YYLEX;
1228 }
1229
Lev Walkin1004aa92004-09-08 00:28:11 +00001230 /* Convert token to internal form (in yychar1) for indexing tables with */
Lev Walkinf15320b2004-06-03 03:38:44 +00001231
Lev Walkin1004aa92004-09-08 00:28:11 +00001232 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001233 {
1234 yychar1 = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001235 yychar = YYEOF; /* Don't call YYLEX any more */
Lev Walkinf15320b2004-06-03 03:38:44 +00001236
Lev Walkin1004aa92004-09-08 00:28:11 +00001237#if YYDEBUG != 0
1238 if (yydebug)
1239 fprintf(stderr, "Now at end of input.\n");
1240#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001241 }
1242 else
1243 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001244 yychar1 = YYTRANSLATE(yychar);
Lev Walkinf15320b2004-06-03 03:38:44 +00001245
Lev Walkin1004aa92004-09-08 00:28:11 +00001246#if YYDEBUG != 0
1247 if (yydebug)
1248 {
1249 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1250 /* Give the individual parser a way to print the precise meaning
1251 of a token, for further debugging info. */
1252#ifdef YYPRINT
1253 YYPRINT (stderr, yychar, yylval);
1254#endif
1255 fprintf (stderr, ")\n");
1256 }
1257#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001258 }
1259
1260 yyn += yychar1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001261 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001262 goto yydefault;
Lev Walkin1004aa92004-09-08 00:28:11 +00001263
Lev Walkinf15320b2004-06-03 03:38:44 +00001264 yyn = yytable[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001265
1266 /* yyn is what to do for this token type in this state.
1267 Negative => reduce, -yyn is rule number.
1268 Positive => shift, yyn is new state.
1269 New state is final state => don't bother to shift,
1270 just return success.
1271 0, or most negative number => error. */
1272
1273 if (yyn < 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001274 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001275 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001276 goto yyerrlab;
1277 yyn = -yyn;
1278 goto yyreduce;
1279 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001280 else if (yyn == 0)
1281 goto yyerrlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001282
1283 if (yyn == YYFINAL)
1284 YYACCEPT;
1285
1286 /* Shift the lookahead token. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001287
1288#if YYDEBUG != 0
1289 if (yydebug)
1290 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1291#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001292
1293 /* Discard the token being shifted unless it is eof. */
1294 if (yychar != YYEOF)
1295 yychar = YYEMPTY;
1296
1297 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00001298#ifdef YYLSP_NEEDED
1299 *++yylsp = yylloc;
1300#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001301
Lev Walkin1004aa92004-09-08 00:28:11 +00001302 /* count tokens shifted since error; after three, turn off error status. */
1303 if (yyerrstatus) yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001304
1305 yystate = yyn;
1306 goto yynewstate;
1307
Lev Walkin1004aa92004-09-08 00:28:11 +00001308/* Do the default action for the current state. */
Lev Walkin459ab022004-09-07 10:39:09 +00001309yydefault:
Lev Walkin1004aa92004-09-08 00:28:11 +00001310
Lev Walkinf15320b2004-06-03 03:38:44 +00001311 yyn = yydefact[yystate];
1312 if (yyn == 0)
1313 goto yyerrlab;
1314
Lev Walkin1004aa92004-09-08 00:28:11 +00001315/* Do a reduction. yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001316yyreduce:
1317 yylen = yyr2[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001318 if (yylen > 0)
1319 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Lev Walkinf15320b2004-06-03 03:38:44 +00001320
Lev Walkin1004aa92004-09-08 00:28:11 +00001321#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00001322 if (yydebug)
1323 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001324 int i;
Lev Walkinf15320b2004-06-03 03:38:44 +00001325
Lev Walkin1004aa92004-09-08 00:28:11 +00001326 fprintf (stderr, "Reducing via rule %d (line %d), ",
1327 yyn, yyrline[yyn]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001328
1329 /* Print the symbols being reduced, and their result. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001330 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1331 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1332 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001333 }
1334#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001335
Lev Walkin1004aa92004-09-08 00:28:11 +00001336
1337 switch (yyn) {
1338
1339case 1:
Lev Walkinff7dd142005-03-20 12:58:00 +00001340#line 303 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001341{
1342 *(void **)param = yyvsp[0].a_grammar;
1343 ;
1344 break;}
1345case 2:
Lev Walkinff7dd142005-03-20 12:58:00 +00001346#line 309 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001347{
Lev Walkinf15320b2004-06-03 03:38:44 +00001348 yyval.a_grammar = asn1p_new();
1349 checkmem(yyval.a_grammar);
1350 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001351 ;
1352 break;}
1353case 3:
Lev Walkinff7dd142005-03-20 12:58:00 +00001354#line 314 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001355{
Lev Walkinf15320b2004-06-03 03:38:44 +00001356 yyval.a_grammar = yyvsp[-1].a_grammar;
1357 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001358 ;
1359 break;}
1360case 4:
Lev Walkinff7dd142005-03-20 12:58:00 +00001361#line 335 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001362{
Lev Walkinf15320b2004-06-03 03:38:44 +00001363
1364 if(yyvsp[-1].a_module) {
1365 yyval.a_module = yyvsp[-1].a_module;
1366 } else {
1367 /* There's a chance that a module is just plain empty */
1368 yyval.a_module = asn1p_module_new();
1369 }
1370 checkmem(yyval.a_module);
1371
1372 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1373 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1374 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001375 ;
1376 break;}
1377case 5:
Lev Walkinff7dd142005-03-20 12:58:00 +00001378#line 356 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001379{ yyval.a_oid = 0; ;
1380 break;}
1381case 6:
Lev Walkinff7dd142005-03-20 12:58:00 +00001382#line 357 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001383{ yyval.a_oid = yyvsp[0].a_oid; ;
1384 break;}
1385case 7:
Lev Walkinff7dd142005-03-20 12:58:00 +00001386#line 361 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001387{
Lev Walkinf15320b2004-06-03 03:38:44 +00001388 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin1004aa92004-09-08 00:28:11 +00001389 ;
1390 break;}
1391case 8:
Lev Walkinff7dd142005-03-20 12:58:00 +00001392#line 364 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001393{
Lev Walkinf15320b2004-06-03 03:38:44 +00001394 yyval.a_oid = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001395 ;
1396 break;}
1397case 9:
Lev Walkinff7dd142005-03-20 12:58:00 +00001398#line 370 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001399{
Lev Walkinf15320b2004-06-03 03:38:44 +00001400 yyval.a_oid = asn1p_oid_new();
1401 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1402 if(yyvsp[0].a_oid_arc.name)
1403 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001404 ;
1405 break;}
1406case 10:
Lev Walkinff7dd142005-03-20 12:58:00 +00001407#line 376 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001408{
Lev Walkinf15320b2004-06-03 03:38:44 +00001409 yyval.a_oid = yyvsp[-1].a_oid;
1410 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1411 if(yyvsp[0].a_oid_arc.name)
1412 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001413 ;
1414 break;}
1415case 11:
Lev Walkinff7dd142005-03-20 12:58:00 +00001416#line 385 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001417{ /* iso */
Lev Walkinf15320b2004-06-03 03:38:44 +00001418 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1419 yyval.a_oid_arc.number = -1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001420 ;
1421 break;}
1422case 12:
Lev Walkinff7dd142005-03-20 12:58:00 +00001423#line 389 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001424{ /* iso(1) */
Lev Walkinf15320b2004-06-03 03:38:44 +00001425 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1426 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001427 ;
1428 break;}
1429case 13:
Lev Walkinff7dd142005-03-20 12:58:00 +00001430#line 393 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001431{ /* 1 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001432 yyval.a_oid_arc.name = 0;
1433 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001434 ;
1435 break;}
1436case 14:
Lev Walkinff7dd142005-03-20 12:58:00 +00001437#line 403 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001438{ yyval.a_module_flags = MSF_NOFLAGS; ;
1439 break;}
1440case 15:
Lev Walkinff7dd142005-03-20 12:58:00 +00001441#line 404 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001442{
Lev Walkinf15320b2004-06-03 03:38:44 +00001443 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001444 ;
1445 break;}
1446case 16:
Lev Walkinff7dd142005-03-20 12:58:00 +00001447#line 413 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001448{
Lev Walkinf15320b2004-06-03 03:38:44 +00001449 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001450 ;
1451 break;}
1452case 17:
Lev Walkinff7dd142005-03-20 12:58:00 +00001453#line 416 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001454{
Lev Walkinf15320b2004-06-03 03:38:44 +00001455 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001456 ;
1457 break;}
1458case 18:
Lev Walkinff7dd142005-03-20 12:58:00 +00001459#line 425 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001460{
Lev Walkinf15320b2004-06-03 03:38:44 +00001461 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001462 ;
1463 break;}
1464case 19:
Lev Walkinff7dd142005-03-20 12:58:00 +00001465#line 428 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001466{
Lev Walkinf15320b2004-06-03 03:38:44 +00001467 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001468 ;
1469 break;}
1470case 20:
Lev Walkinff7dd142005-03-20 12:58:00 +00001471#line 431 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001472{
Lev Walkinf15320b2004-06-03 03:38:44 +00001473 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001474 ;
1475 break;}
1476case 21:
Lev Walkinff7dd142005-03-20 12:58:00 +00001477#line 434 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001478{
Lev Walkinf15320b2004-06-03 03:38:44 +00001479 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin1004aa92004-09-08 00:28:11 +00001480 ;
1481 break;}
1482case 22:
Lev Walkinff7dd142005-03-20 12:58:00 +00001483#line 438 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001484{
Lev Walkinf59d0752004-08-18 04:59:12 +00001485 /* X.680Amd1 specifies TAG and XER */
1486 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1487 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1488 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1489 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1490 } else {
1491 fprintf(stderr,
1492 "WARNING: %s INSTRUCTIONS at line %d: "
1493 "Unrecognized encoding reference\n",
1494 yyvsp[-1].tv_str, yylineno);
1495 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1496 }
1497 free(yyvsp[-1].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00001498 ;
1499 break;}
1500case 23:
Lev Walkinff7dd142005-03-20 12:58:00 +00001501#line 459 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001502{ yyval.a_module = 0; ;
1503 break;}
1504case 24:
Lev Walkinff7dd142005-03-20 12:58:00 +00001505#line 460 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001506{
Lev Walkinf15320b2004-06-03 03:38:44 +00001507 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001508 ;
1509 break;}
1510case 25:
Lev Walkinff7dd142005-03-20 12:58:00 +00001511#line 469 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001512{
Lev Walkinf59d0752004-08-18 04:59:12 +00001513 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001514 ;
1515 break;}
1516case 26:
Lev Walkinff7dd142005-03-20 12:58:00 +00001517#line 472 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001518{
Lev Walkinf15320b2004-06-03 03:38:44 +00001519 yyval.a_module = yyvsp[-1].a_module;
1520
Lev Walkinf59d0752004-08-18 04:59:12 +00001521 /* Behave well when one of them is skipped. */
1522 if(!(yyvsp[-1].a_module)) {
1523 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1524 break;
1525 }
1526
Lev Walkinf15320b2004-06-03 03:38:44 +00001527#ifdef MY_IMPORT
1528#error MY_IMPORT DEFINED ELSEWHERE!
1529#endif
1530#define MY_IMPORT(foo,field) do { \
Lev Walkinbc55d232004-08-13 12:31:09 +00001531 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
Lev Walkinf15320b2004-06-03 03:38:44 +00001532 TQ_ADD(&(yyval.a_module->foo), \
1533 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1534 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001535 } \
1536 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1537 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001538
1539 MY_IMPORT(imports, xp_next);
1540 MY_IMPORT(exports, xp_next);
1541 MY_IMPORT(members, next);
1542#undef MY_IMPORT
1543
Lev Walkin1004aa92004-09-08 00:28:11 +00001544 ;
1545 break;}
1546case 27:
Lev Walkinff7dd142005-03-20 12:58:00 +00001547#line 505 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001548{
Lev Walkinf15320b2004-06-03 03:38:44 +00001549 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001550 ;
1551 break;}
1552case 28:
Lev Walkinff7dd142005-03-20 12:58:00 +00001553#line 508 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001554{
Lev Walkinf15320b2004-06-03 03:38:44 +00001555 yyval.a_module = asn1p_module_new();
1556 checkmem(yyval.a_module);
1557 if(yyvsp[0].a_xports) {
1558 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1559 } else {
1560 /* "EXPORTS ALL;" ? */
1561 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001562 ;
1563 break;}
1564case 29:
Lev Walkinff7dd142005-03-20 12:58:00 +00001565#line 517 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001566{
Lev Walkinf15320b2004-06-03 03:38:44 +00001567 yyval.a_module = asn1p_module_new();
1568 checkmem(yyval.a_module);
1569 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1570 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1571 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001572 ;
1573 break;}
1574case 30:
Lev Walkinff7dd142005-03-20 12:58:00 +00001575#line 524 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001576{
Lev Walkinf59d0752004-08-18 04:59:12 +00001577 yyval.a_module = asn1p_module_new();
1578 checkmem(yyval.a_module);
1579 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1580 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1581 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001582 ;
1583 break;}
1584case 31:
Lev Walkinff7dd142005-03-20 12:58:00 +00001585#line 537 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001586{
Lev Walkinf59d0752004-08-18 04:59:12 +00001587 yyval.a_module = asn1p_module_new();
1588 checkmem(yyval.a_module);
1589 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1590 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1591 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001592 ;
1593 break;}
1594case 32:
Lev Walkinff7dd142005-03-20 12:58:00 +00001595#line 545 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001596{ asn1p_lexer_hack_push_encoding_control(); ;
1597 break;}
1598case 33:
Lev Walkinff7dd142005-03-20 12:58:00 +00001599#line 546 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001600{
Lev Walkinf59d0752004-08-18 04:59:12 +00001601 fprintf(stderr,
1602 "WARNING: ENCODING-CONTROL %s "
1603 "specification at line %d ignored\n",
1604 yyvsp[-1].tv_str, yylineno);
1605 free(yyvsp[-1].tv_str);
1606 yyval.a_module = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001607 ;
1608 break;}
1609case 34:
Lev Walkinff7dd142005-03-20 12:58:00 +00001610#line 558 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001611{
Lev Walkinf15320b2004-06-03 03:38:44 +00001612 return yyerror(
1613 "Attempt to redefine a standard basic type, "
1614 "use -ftypesXY to switch back "
1615 "to older version of ASN.1 standard");
Lev Walkin1004aa92004-09-08 00:28:11 +00001616 ;
1617 break;}
1618case 35:
Lev Walkinff7dd142005-03-20 12:58:00 +00001619#line 572 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001620{
Lev Walkinf15320b2004-06-03 03:38:44 +00001621 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001622 ;
1623 break;}
1624case 36:
Lev Walkinff7dd142005-03-20 12:58:00 +00001625#line 578 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001626{
Lev Walkinf15320b2004-06-03 03:38:44 +00001627 return yyerror("Empty IMPORTS list");
Lev Walkin1004aa92004-09-08 00:28:11 +00001628 ;
1629 break;}
1630case 37:
Lev Walkinff7dd142005-03-20 12:58:00 +00001631#line 584 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001632{
Lev Walkinf15320b2004-06-03 03:38:44 +00001633 yyval.a_module = asn1p_module_new();
1634 checkmem(yyval.a_module);
1635 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001636 ;
1637 break;}
1638case 38:
Lev Walkinff7dd142005-03-20 12:58:00 +00001639#line 589 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001640{
Lev Walkinf15320b2004-06-03 03:38:44 +00001641 yyval.a_module = yyvsp[-1].a_module;
1642 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001643 ;
1644 break;}
1645case 39:
Lev Walkinff7dd142005-03-20 12:58:00 +00001646#line 596 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001647{
Lev Walkinf15320b2004-06-03 03:38:44 +00001648 yyval.a_xports = yyvsp[-3].a_xports;
1649 yyval.a_xports->from = yyvsp[-1].tv_str;
1650 yyval.a_xports->from_oid = yyvsp[0].a_oid;
1651 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001652 ;
1653 break;}
1654case 40:
Lev Walkinff7dd142005-03-20 12:58:00 +00001655#line 605 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001656{
Lev Walkinf15320b2004-06-03 03:38:44 +00001657 yyval.a_xports = asn1p_xports_new();
1658 checkmem(yyval.a_xports);
1659 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001660 ;
1661 break;}
1662case 41:
Lev Walkinff7dd142005-03-20 12:58:00 +00001663#line 610 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001664{
Lev Walkinf15320b2004-06-03 03:38:44 +00001665 yyval.a_xports = yyvsp[-2].a_xports;
1666 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001667 ;
1668 break;}
1669case 42:
Lev Walkinff7dd142005-03-20 12:58:00 +00001670#line 617 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001671{
Lev Walkinf15320b2004-06-03 03:38:44 +00001672 yyval.a_expr = asn1p_expr_new(yylineno);
1673 checkmem(yyval.a_expr);
1674 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1675 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001676 ;
1677 break;}
1678case 43:
Lev Walkinff7dd142005-03-20 12:58:00 +00001679#line 623 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001680{ /* Completely equivalent to above */
1681 yyval.a_expr = asn1p_expr_new(yylineno);
1682 checkmem(yyval.a_expr);
1683 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1684 yyval.a_expr->expr_type = A1TC_REFERENCE;
1685 ;
1686 break;}
1687case 44:
Lev Walkinff7dd142005-03-20 12:58:00 +00001688#line 629 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001689{
Lev Walkinf15320b2004-06-03 03:38:44 +00001690 yyval.a_expr = asn1p_expr_new(yylineno);
1691 checkmem(yyval.a_expr);
1692 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1693 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001694 ;
1695 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001696case 45:
Lev Walkinff7dd142005-03-20 12:58:00 +00001697#line 638 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001698{
Lev Walkinf15320b2004-06-03 03:38:44 +00001699 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin1004aa92004-09-08 00:28:11 +00001700 ;
1701 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001702case 46:
Lev Walkinff7dd142005-03-20 12:58:00 +00001703#line 641 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001704{
Lev Walkinf15320b2004-06-03 03:38:44 +00001705 yyval.a_xports = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001706 ;
1707 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001708case 47:
Lev Walkinff7dd142005-03-20 12:58:00 +00001709#line 644 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001710{
Lev Walkinf15320b2004-06-03 03:38:44 +00001711 /* Empty EXPORTS clause effectively prohibits export. */
1712 yyval.a_xports = asn1p_xports_new();
1713 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001714 ;
1715 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001716case 48:
Lev Walkinff7dd142005-03-20 12:58:00 +00001717#line 652 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001718{
Lev Walkinf15320b2004-06-03 03:38:44 +00001719 yyval.a_xports = asn1p_xports_new();
1720 assert(yyval.a_xports);
1721 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001722 ;
1723 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001724case 49:
Lev Walkinff7dd142005-03-20 12:58:00 +00001725#line 657 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001726{
Lev Walkinf15320b2004-06-03 03:38:44 +00001727 yyval.a_xports = yyvsp[-2].a_xports;
1728 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001729 ;
1730 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001731case 50:
Lev Walkinff7dd142005-03-20 12:58:00 +00001732#line 664 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001733{
Lev Walkinf15320b2004-06-03 03:38:44 +00001734 yyval.a_expr = asn1p_expr_new(yylineno);
1735 checkmem(yyval.a_expr);
1736 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1737 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin1004aa92004-09-08 00:28:11 +00001738 ;
1739 break;}
1740case 51:
Lev Walkinff7dd142005-03-20 12:58:00 +00001741#line 670 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001742{
1743 yyval.a_expr = asn1p_expr_new(yylineno);
1744 checkmem(yyval.a_expr);
1745 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1746 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1747 ;
1748 break;}
1749case 52:
Lev Walkinff7dd142005-03-20 12:58:00 +00001750#line 676 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001751{
1752 yyval.a_expr = asn1p_expr_new(yylineno);
1753 checkmem(yyval.a_expr);
1754 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1755 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1756 ;
1757 break;}
1758case 53:
Lev Walkinff7dd142005-03-20 12:58:00 +00001759#line 686 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001760{
Lev Walkinf15320b2004-06-03 03:38:44 +00001761 yyval.a_expr = yyvsp[-4].a_expr;
1762 assert(yyval.a_expr->Identifier == 0);
1763 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1764 yyval.a_expr->meta_type = AMT_VALUESET;
1765 // take care of optValueSetBody
Lev Walkin1004aa92004-09-08 00:28:11 +00001766 ;
1767 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001768case 54:
Lev Walkinff7dd142005-03-20 12:58:00 +00001769#line 696 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001770{
Lev Walkinf15320b2004-06-03 03:38:44 +00001771 yyval.a_expr = asn1p_expr_new(yylineno);
1772 checkmem(yyval.a_expr);
1773 yyval.a_expr->reference = yyvsp[0].a_ref;
1774 yyval.a_expr->expr_type = A1TC_REFERENCE;
1775 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001776 ;
1777 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001778case 55:
Lev Walkinff7dd142005-03-20 12:58:00 +00001779#line 703 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001780{
Lev Walkinf15320b2004-06-03 03:38:44 +00001781 yyval.a_expr = asn1p_expr_new(yylineno);
1782 checkmem(yyval.a_expr);
1783 yyval.a_expr->expr_type = yyvsp[0].a_type;
1784 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001785 ;
1786 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001787case 56:
Lev Walkinff7dd142005-03-20 12:58:00 +00001788#line 712 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001789{ ;
Lev Walkin1004aa92004-09-08 00:28:11 +00001790 break;}
1791case 57:
Lev Walkinff7dd142005-03-20 12:58:00 +00001792#line 713 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001793{
1794 ;
1795 break;}
1796case 58:
Lev Walkinff7dd142005-03-20 12:58:00 +00001797#line 724 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001798{
1799 ;
1800 break;}
1801case 59:
Lev Walkinff7dd142005-03-20 12:58:00 +00001802#line 726 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001803{
1804 ;
1805 break;}
1806case 60:
Lev Walkinff7dd142005-03-20 12:58:00 +00001807#line 731 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001808{
1809 ;
1810 break;}
1811case 61:
Lev Walkinff7dd142005-03-20 12:58:00 +00001812#line 733 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001813{
1814 ;
1815 break;}
1816case 62:
Lev Walkinff7dd142005-03-20 12:58:00 +00001817#line 749 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001818{
Lev Walkinf15320b2004-06-03 03:38:44 +00001819 yyval.a_expr = asn1p_expr_new(yylineno);
1820 checkmem(yyval.a_expr);
1821 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1822 yyval.a_expr->tag = yyvsp[-1].a_tag;
1823 yyval.a_expr->expr_type = A1TC_TYPEID;
1824 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001825 ;
1826 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001827case 63:
Lev Walkinff7dd142005-03-20 12:58:00 +00001828#line 757 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001829{
Lev Walkinf15320b2004-06-03 03:38:44 +00001830 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00001831 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00001832 assert(yyval.a_expr->expr_type);
1833 assert(yyval.a_expr->meta_type);
Lev Walkin1004aa92004-09-08 00:28:11 +00001834 ;
1835 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001836case 64:
Lev Walkinff7dd142005-03-20 12:58:00 +00001837#line 763 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001838{
Lev Walkinf15320b2004-06-03 03:38:44 +00001839 yyval.a_expr = yyvsp[0].a_expr;
1840 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1841 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1842 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin1004aa92004-09-08 00:28:11 +00001843 ;
1844 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001845case 65:
Lev Walkinff7dd142005-03-20 12:58:00 +00001846#line 779 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001847{
Lev Walkinf15320b2004-06-03 03:38:44 +00001848 yyval.a_expr = yyvsp[0].a_expr;
1849 assert(yyval.a_expr->Identifier == 0);
1850 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1851 yyval.a_expr->params = yyvsp[-3].a_plist;
1852 yyval.a_expr->meta_type = AMT_PARAMTYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001853 ;
1854 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001855case 66:
Lev Walkinff7dd142005-03-20 12:58:00 +00001856#line 789 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001857{
Lev Walkinf15320b2004-06-03 03:38:44 +00001858 int ret;
1859 yyval.a_plist = asn1p_paramlist_new(yylineno);
1860 checkmem(yyval.a_plist);
1861 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1862 checkmem(ret == 0);
1863 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1864 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001865 ;
1866 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001867case 67:
Lev Walkinff7dd142005-03-20 12:58:00 +00001868#line 798 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001869{
Lev Walkinf15320b2004-06-03 03:38:44 +00001870 int ret;
1871 yyval.a_plist = yyvsp[-2].a_plist;
1872 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1873 checkmem(ret == 0);
1874 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1875 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001876 ;
1877 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001878case 68:
Lev Walkinff7dd142005-03-20 12:58:00 +00001879#line 809 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001880{
Lev Walkinf15320b2004-06-03 03:38:44 +00001881 yyval.a_parg.governor = NULL;
1882 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001883 ;
1884 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001885case 69:
Lev Walkinff7dd142005-03-20 12:58:00 +00001886#line 813 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001887{
Lev Walkinf15320b2004-06-03 03:38:44 +00001888 int ret;
1889 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1890 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1891 checkmem(ret == 0);
1892 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001893 ;
1894 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001895case 70:
Lev Walkinff7dd142005-03-20 12:58:00 +00001896#line 820 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001897{
Lev Walkinf15320b2004-06-03 03:38:44 +00001898 int ret;
1899 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinc8092cb2005-02-18 16:34:21 +00001900 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1901 checkmem(ret == 0);
1902 yyval.a_parg.argument = yyvsp[0].tv_str;
1903 ;
1904 break;}
1905case 71:
Lev Walkinff7dd142005-03-20 12:58:00 +00001906#line 827 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00001907{
1908 int ret;
1909 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00001910 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1911 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1912 checkmem(ret == 0);
1913 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001914 ;
1915 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001916case 72:
Lev Walkinff7dd142005-03-20 12:58:00 +00001917#line 838 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001918{
Lev Walkinf15320b2004-06-03 03:38:44 +00001919 yyval.a_expr = asn1p_expr_new(yylineno);
1920 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001921 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1922 ;
1923 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001924case 73:
Lev Walkinff7dd142005-03-20 12:58:00 +00001925#line 843 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001926{
Lev Walkinf15320b2004-06-03 03:38:44 +00001927 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001928 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1929 ;
1930 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001931case 74:
Lev Walkinff7dd142005-03-20 12:58:00 +00001932#line 850 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001933{
Lev Walkinf15320b2004-06-03 03:38:44 +00001934 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001935 ;
1936 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001937case 75:
Lev Walkinff7dd142005-03-20 12:58:00 +00001938#line 853 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001939{
Lev Walkinf15320b2004-06-03 03:38:44 +00001940 yyval.a_expr = asn1p_expr_new(yylineno);
1941 checkmem(yyval.a_expr);
1942 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1943 yyval.a_expr->expr_type = A1TC_REFERENCE;
1944 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001945 ;
1946 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001947case 76:
Lev Walkinff7dd142005-03-20 12:58:00 +00001948#line 877 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001949{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1950 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001951case 77:
Lev Walkinff7dd142005-03-20 12:58:00 +00001952#line 878 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001953{ yyval.a_expr = yyvsp[0].a_expr; ;
1954 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001955case 78:
Lev Walkinff7dd142005-03-20 12:58:00 +00001956#line 881 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001957{
Lev Walkinf15320b2004-06-03 03:38:44 +00001958 yyval.a_expr = asn1p_expr_new(yylineno);
1959 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001960 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1961 ;
1962 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001963case 79:
Lev Walkinff7dd142005-03-20 12:58:00 +00001964#line 886 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001965{
Lev Walkinf15320b2004-06-03 03:38:44 +00001966 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001967 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1968 ;
1969 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001970case 80:
Lev Walkinff7dd142005-03-20 12:58:00 +00001971#line 893 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001972{
Lev Walkin070a52d2004-08-22 03:19:54 +00001973 yyval.a_expr = yyvsp[-1].a_expr;
1974 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00001975 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkin070a52d2004-08-22 03:19:54 +00001976 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00001977 ;
1978 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001979case 81:
Lev Walkinff7dd142005-03-20 12:58:00 +00001980#line 899 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001981{
Lev Walkin070a52d2004-08-22 03:19:54 +00001982 yyval.a_expr = asn1p_expr_new(yylineno);
1983 checkmem(yyval.a_expr);
1984 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1985 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001986 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1987 ;
1988 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001989case 82:
Lev Walkinff7dd142005-03-20 12:58:00 +00001990#line 906 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001991{
Lev Walkin070a52d2004-08-22 03:19:54 +00001992 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001993 ;
1994 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001995case 83:
Lev Walkinff7dd142005-03-20 12:58:00 +00001996#line 912 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001997{
Lev Walkin070a52d2004-08-22 03:19:54 +00001998 yyval.a_expr = asn1p_expr_new(yylineno);
1999 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002000 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2001 ;
2002 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002003case 84:
Lev Walkinff7dd142005-03-20 12:58:00 +00002004#line 917 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002005{
Lev Walkin070a52d2004-08-22 03:19:54 +00002006 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002007 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2008 ;
2009 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002010case 85:
Lev Walkinff7dd142005-03-20 12:58:00 +00002011#line 924 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002012{
Lev Walkin070a52d2004-08-22 03:19:54 +00002013 yyval.a_expr = yyvsp[0].a_expr;
2014 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00002015 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002016 ;
2017 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002018case 86:
Lev Walkinff7dd142005-03-20 12:58:00 +00002019#line 929 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002020{
Lev Walkin070a52d2004-08-22 03:19:54 +00002021 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002022 ;
2023 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002024case 87:
Lev Walkinff7dd142005-03-20 12:58:00 +00002025#line 935 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002026{
Lev Walkinf15320b2004-06-03 03:38:44 +00002027 yyval.a_expr = yyvsp[-2].a_expr;
2028 checkmem(yyval.a_expr);
2029 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2030 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2031 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin1004aa92004-09-08 00:28:11 +00002032 ;
2033 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002034case 88:
Lev Walkinff7dd142005-03-20 12:58:00 +00002035#line 945 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002036{ yyval.a_int = 0; ;
2037 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002038case 89:
Lev Walkinff7dd142005-03-20 12:58:00 +00002039#line 946 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002040{ yyval.a_int = 1; ;
2041 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002042case 90:
Lev Walkinff7dd142005-03-20 12:58:00 +00002043#line 950 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002044{
Lev Walkinf15320b2004-06-03 03:38:44 +00002045 yyval.a_expr = asn1p_expr_new(yylineno);
2046 checkmem(yyval.a_expr);
2047 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2048 yyval.a_expr->meta_type = AMT_OBJECT;
Lev Walkin1004aa92004-09-08 00:28:11 +00002049 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2050 ;
2051 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002052case 91:
Lev Walkinff7dd142005-03-20 12:58:00 +00002053#line 957 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002054{
Lev Walkinf15320b2004-06-03 03:38:44 +00002055 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002056 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2057 ;
2058 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002059case 92:
Lev Walkinff7dd142005-03-20 12:58:00 +00002060#line 964 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002061{
Lev Walkinf15320b2004-06-03 03:38:44 +00002062 yyval.a_expr = asn1p_expr_new(yylineno);
2063 checkmem(yyval.a_expr);
2064 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2065 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2066 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2067 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002068 ;
2069 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002070case 93:
Lev Walkinff7dd142005-03-20 12:58:00 +00002071#line 972 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002072{
Lev Walkin070a52d2004-08-22 03:19:54 +00002073 yyval.a_expr = yyvsp[-2].a_expr;
2074 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002075 yyval.a_expr->marker = yyvsp[0].a_marker;
2076 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002077 ;
2078 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002079case 94:
Lev Walkinff7dd142005-03-20 12:58:00 +00002080#line 978 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002081{
Lev Walkinf15320b2004-06-03 03:38:44 +00002082 int ret;
2083 yyval.a_expr = asn1p_expr_new(yylineno);
2084 checkmem(yyval.a_expr);
2085 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2086 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2087 checkmem(yyval.a_expr->reference);
2088 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2089 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2090 checkmem(ret == 0);
2091 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2092 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002093 yyval.a_expr->marker = yyvsp[0].a_marker;
2094 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002095 ;
2096 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002097case 95:
Lev Walkinff7dd142005-03-20 12:58:00 +00002098#line 996 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002099{ yyval.a_wsynt = 0; ;
2100 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002101case 96:
Lev Walkinff7dd142005-03-20 12:58:00 +00002102#line 997 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002103{
Lev Walkinf15320b2004-06-03 03:38:44 +00002104 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002105 ;
2106 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002107case 97:
Lev Walkinff7dd142005-03-20 12:58:00 +00002108#line 1004 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002109{ asn1p_lexer_hack_enable_with_syntax(); ;
2110 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002111case 98:
Lev Walkinff7dd142005-03-20 12:58:00 +00002112#line 1006 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002113{
Lev Walkinf15320b2004-06-03 03:38:44 +00002114 yyval.a_wsynt = yyvsp[-1].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002115 ;
2116 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002117case 99:
Lev Walkinff7dd142005-03-20 12:58:00 +00002118#line 1012 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002119{
Lev Walkinf15320b2004-06-03 03:38:44 +00002120 yyval.a_wsynt = asn1p_wsyntx_new();
2121 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002122 ;
2123 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002124case 100:
Lev Walkinff7dd142005-03-20 12:58:00 +00002125#line 1016 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002126{
Lev Walkinf15320b2004-06-03 03:38:44 +00002127 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2128 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002129 ;
2130 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002131case 101:
Lev Walkinff7dd142005-03-20 12:58:00 +00002132#line 1023 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002133{
Lev Walkinf15320b2004-06-03 03:38:44 +00002134 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002135 ;
2136 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002137case 102:
Lev Walkinff7dd142005-03-20 12:58:00 +00002138#line 1026 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002139{
Lev Walkinf15320b2004-06-03 03:38:44 +00002140 asn1p_ref_t *ref;
2141 int ret;
2142 ref = asn1p_ref_new(yylineno);
2143 checkmem(ref);
2144 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2145 checkmem(ret == 0);
2146 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002147 ;
2148 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002149case 103:
Lev Walkinff7dd142005-03-20 12:58:00 +00002150#line 1038 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00002151{
2152 yyval.a_expr = asn1p_expr_new(yylineno);
2153 checkmem(yyval.a_expr);
2154 yyval.a_expr->Identifier = strdup("...");
2155 checkmem(yyval.a_expr->Identifier);
Lev Walkin144db9b2004-10-12 23:26:53 +00002156 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2157 yyval.a_expr->meta_type = AMT_TYPE;
2158 ;
2159 break;}
2160case 104:
Lev Walkinff7dd142005-03-20 12:58:00 +00002161#line 1046 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002162{
2163 yyval.a_expr = asn1p_expr_new(yylineno);
2164 checkmem(yyval.a_expr);
2165 yyval.a_expr->Identifier = strdup("...");
2166 checkmem(yyval.a_expr->Identifier);
2167 yyval.a_expr->value = yyvsp[0].a_value;
2168 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2169 yyval.a_expr->meta_type = AMT_TYPE;
2170 ;
2171 break;}
2172case 105:
Lev Walkinff7dd142005-03-20 12:58:00 +00002173#line 1055 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00002174{
2175 yyval.a_expr = asn1p_expr_new(yylineno);
2176 checkmem(yyval.a_expr);
2177 yyval.a_expr->Identifier = strdup("...");
Lev Walkind2ea1de2004-08-20 13:25:29 +00002178 yyval.a_expr->value = yyvsp[0].a_value;
2179 checkmem(yyval.a_expr->Identifier);
2180 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2181 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002182 ;
2183 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002184case 106:
Lev Walkinff7dd142005-03-20 12:58:00 +00002185#line 1067 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002186{
Lev Walkin070a52d2004-08-22 03:19:54 +00002187 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00002188 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002189 /*
2190 * Outer constraint for SEQUENCE OF and SET OF applies
2191 * to the inner type.
2192 */
2193 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2194 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2195 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2196 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2197 } else {
2198 if(yyval.a_expr->constraints) {
Lev Walkinaf120f72004-09-14 02:36:39 +00002199 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002200 } else {
2201 yyval.a_expr->constraints = yyvsp[0].a_constr;
2202 }
2203 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002204 ;
2205 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002206case 107:
Lev Walkinff7dd142005-03-20 12:58:00 +00002207#line 1089 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002208{
Lev Walkind2ea1de2004-08-20 13:25:29 +00002209 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002210 ;
2211 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002212case 108:
Lev Walkinff7dd142005-03-20 12:58:00 +00002213#line 1092 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002214{
Lev Walkinc7d939d2005-03-20 11:12:40 +00002215 yyval.a_expr = yyvsp[-1].a_expr;
2216 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2217 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
Lev Walkinf15320b2004-06-03 03:38:44 +00002218 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002219 ;
2220 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002221case 109:
Lev Walkinff7dd142005-03-20 12:58:00 +00002222#line 1098 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002223{
Lev Walkin070a52d2004-08-22 03:19:54 +00002224 yyval.a_expr = yyvsp[-1].a_expr;
2225 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002226 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
Lev Walkin070a52d2004-08-22 03:19:54 +00002227 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002228 ;
2229 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002230case 110:
Lev Walkinff7dd142005-03-20 12:58:00 +00002231#line 1104 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002232{
Lev Walkin070a52d2004-08-22 03:19:54 +00002233 yyval.a_expr = yyvsp[-1].a_expr;
2234 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002235 yyval.a_expr->expr_type = ASN_CONSTR_SET;
Lev Walkin070a52d2004-08-22 03:19:54 +00002236 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002237 ;
2238 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002239case 111:
Lev Walkinff7dd142005-03-20 12:58:00 +00002240#line 1110 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002241{
Lev Walkinceb20e72004-09-05 10:40:41 +00002242 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002243 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002244 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002245 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2246 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002247 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002248 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002249 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2250 ;
2251 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002252case 112:
Lev Walkinff7dd142005-03-20 12:58:00 +00002253#line 1120 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002254{
Lev Walkinceb20e72004-09-05 10:40:41 +00002255 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002256 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002257 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002258 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2259 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002260 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002261 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002262 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2263 ;
2264 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002265case 113:
Lev Walkinff7dd142005-03-20 12:58:00 +00002266#line 1130 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002267{
Lev Walkinceb20e72004-09-05 10:40:41 +00002268 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002269 checkmem(yyval.a_expr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002270 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002271 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002272 ;
2273 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002274case 114:
Lev Walkinff7dd142005-03-20 12:58:00 +00002275#line 1136 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002276{
Lev Walkin070a52d2004-08-22 03:19:54 +00002277 int ret;
Lev Walkinceb20e72004-09-05 10:40:41 +00002278 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002279 checkmem(yyval.a_expr);
2280 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2281 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2282 yyvsp[0].tv_str, RLT_lowercase);
2283 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002284 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002285 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002286 ;
2287 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002288case 115:
Lev Walkinff7dd142005-03-20 12:58:00 +00002289#line 1150 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002290{
Lev Walkinf15320b2004-06-03 03:38:44 +00002291 int ret;
2292 yyval.a_expr = yyvsp[-1].a_expr;
2293 assert(yyval.a_expr->expr_type == 0);
2294 assert(yyval.a_expr->meta_type == 0);
2295 assert(yyval.a_expr->reference == 0);
2296 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2297 checkmem(yyval.a_expr->reference);
2298 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2299 checkmem(ret == 0);
2300 free(yyvsp[-3].tv_str);
2301 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2302 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002303 ;
2304 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002305case 116:
Lev Walkinff7dd142005-03-20 12:58:00 +00002306#line 1174 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002307{
Lev Walkinf15320b2004-06-03 03:38:44 +00002308 yyval.a_expr = asn1p_expr_new(yylineno);
2309 checkmem(yyval.a_expr);
2310 yyval.a_expr->reference = yyvsp[0].a_ref;
2311 yyval.a_expr->expr_type = A1TC_REFERENCE;
2312 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00002313 ;
2314 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002315case 117:
Lev Walkinff7dd142005-03-20 12:58:00 +00002316#line 1181 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002317{
Lev Walkinf15320b2004-06-03 03:38:44 +00002318 yyval.a_expr = asn1p_expr_new(yylineno);
2319 checkmem(yyval.a_expr);
2320 yyval.a_expr->reference = yyvsp[0].a_ref;
2321 yyval.a_expr->expr_type = A1TC_INSTANCE;
2322 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002323 ;
2324 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002325case 118:
Lev Walkinff7dd142005-03-20 12:58:00 +00002326#line 1196 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002327{
Lev Walkinf15320b2004-06-03 03:38:44 +00002328 int ret;
2329 yyval.a_ref = asn1p_ref_new(yylineno);
2330 checkmem(yyval.a_ref);
2331 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2332 checkmem(ret == 0);
2333 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002334 ;
2335 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002336case 119:
Lev Walkinff7dd142005-03-20 12:58:00 +00002337#line 1204 "asn1p_y.y"
Lev Walkinc7d939d2005-03-20 11:12:40 +00002338{
2339 int ret;
2340 yyval.a_ref = asn1p_ref_new(yylineno);
2341 checkmem(yyval.a_ref);
2342 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2343 checkmem(ret == 0);
2344 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2345 checkmem(ret == 0);
2346 free(yyvsp[-2].tv_str);
2347 ;
2348 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002349case 120:
Lev Walkinff7dd142005-03-20 12:58:00 +00002350#line 1214 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002351{
Lev Walkinf15320b2004-06-03 03:38:44 +00002352 int ret;
2353 yyval.a_ref = asn1p_ref_new(yylineno);
2354 checkmem(yyval.a_ref);
2355 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2356 checkmem(ret == 0);
Lev Walkin9c974182004-09-15 11:59:51 +00002357 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00002358 checkmem(ret == 0);
2359 free(yyvsp[-2].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002360 ;
2361 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002362case 121:
Lev Walkinff7dd142005-03-20 12:58:00 +00002363#line 1224 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002364{
Lev Walkinf15320b2004-06-03 03:38:44 +00002365 int ret;
2366 yyval.a_ref = asn1p_ref_new(yylineno);
2367 checkmem(yyval.a_ref);
Lev Walkin9c974182004-09-15 11:59:51 +00002368 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2369 checkmem(ret == 0);
2370 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2371 checkmem(ret == 0);
2372 free(yyvsp[-2].tv_str);
2373 ;
2374 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002375case 122:
Lev Walkinff7dd142005-03-20 12:58:00 +00002376#line 1234 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002377{
2378 int ret;
2379 yyval.a_ref = asn1p_ref_new(yylineno);
2380 checkmem(yyval.a_ref);
Lev Walkinf15320b2004-06-03 03:38:44 +00002381 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2382 free(yyvsp[0].tv_str);
2383 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002384 ;
2385 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002386case 123:
Lev Walkinff7dd142005-03-20 12:58:00 +00002387#line 1242 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002388{
Lev Walkinf15320b2004-06-03 03:38:44 +00002389 int ret;
2390 yyval.a_ref = yyvsp[0].a_ref;
2391 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2392 free(yyvsp[-2].tv_str);
2393 checkmem(ret == 0);
2394 /*
2395 * Move the last element infront.
2396 */
2397 {
2398 struct asn1p_ref_component_s tmp_comp;
2399 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2400 memmove(&yyval.a_ref->components[1],
2401 &yyval.a_ref->components[0],
2402 sizeof(yyval.a_ref->components[0])
2403 * (yyval.a_ref->comp_count - 1));
2404 yyval.a_ref->components[0] = tmp_comp;
2405 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002406 ;
2407 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002408case 124:
Lev Walkinff7dd142005-03-20 12:58:00 +00002409#line 1264 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002410{
Lev Walkinf15320b2004-06-03 03:38:44 +00002411 int ret;
2412 yyval.a_ref = asn1p_ref_new(yylineno);
2413 checkmem(yyval.a_ref);
2414 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2415 free(yyvsp[0].a_refcomp.name);
2416 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002417 ;
2418 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002419case 125:
Lev Walkinff7dd142005-03-20 12:58:00 +00002420#line 1272 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002421{
Lev Walkinf15320b2004-06-03 03:38:44 +00002422 int ret;
2423 yyval.a_ref = yyvsp[-2].a_ref;
2424 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2425 free(yyvsp[0].a_refcomp.name);
2426 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002427 ;
2428 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002429case 128:
Lev Walkinff7dd142005-03-20 12:58:00 +00002430#line 1286 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002431{
Lev Walkinf15320b2004-06-03 03:38:44 +00002432 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2433 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002434 ;
2435 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002436case 129:
Lev Walkinff7dd142005-03-20 12:58:00 +00002437#line 1291 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002438{
Lev Walkinf15320b2004-06-03 03:38:44 +00002439 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2440 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002441 ;
2442 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002443case 130:
Lev Walkinff7dd142005-03-20 12:58:00 +00002444#line 1304 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002445{
Lev Walkinf15320b2004-06-03 03:38:44 +00002446 yyval.a_expr = yyvsp[-2].a_expr;
2447 assert(yyval.a_expr->Identifier == NULL);
2448 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2449 yyval.a_expr->meta_type = AMT_VALUE;
2450 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002451 ;
2452 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002453case 131:
Lev Walkinff7dd142005-03-20 12:58:00 +00002454#line 1314 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002455{
2456 yyval.a_value = asn1p_value_fromint(0);
2457 checkmem(yyval.a_value);
2458 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2459 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2460 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2461 ;
2462 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002463case 132:
Lev Walkinff7dd142005-03-20 12:58:00 +00002464#line 1321 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002465{ asn1p_lexer_hack_push_opaque_state(); ;
2466 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002467case 133:
Lev Walkinff7dd142005-03-20 12:58:00 +00002468#line 1321 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002469{
Lev Walkinf15320b2004-06-03 03:38:44 +00002470 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2471 checkmem(yyval.a_value);
2472 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin1004aa92004-09-08 00:28:11 +00002473 ;
2474 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002475case 134:
Lev Walkinff7dd142005-03-20 12:58:00 +00002476#line 1326 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002477{
2478 yyval.a_value = asn1p_value_fromint(0);
2479 checkmem(yyval.a_value);
2480 yyval.a_value->type = ATV_NULL;
2481 ;
2482 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002483case 135:
Lev Walkinff7dd142005-03-20 12:58:00 +00002484#line 1331 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002485{
2486 yyval.a_value = asn1p_value_fromint(0);
2487 checkmem(yyval.a_value);
2488 yyval.a_value->type = ATV_FALSE;
2489 ;
2490 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002491case 136:
Lev Walkinff7dd142005-03-20 12:58:00 +00002492#line 1336 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002493{
2494 yyval.a_value = asn1p_value_fromint(0);
2495 checkmem(yyval.a_value);
2496 yyval.a_value->type = ATV_TRUE;
2497 ;
2498 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002499case 137:
Lev Walkinff7dd142005-03-20 12:58:00 +00002500#line 1341 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002501{
Lev Walkinf15320b2004-06-03 03:38:44 +00002502 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2503 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002504 ;
2505 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002506case 138:
Lev Walkinff7dd142005-03-20 12:58:00 +00002507#line 1345 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002508{
Lev Walkinf15320b2004-06-03 03:38:44 +00002509 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2510 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002511 ;
2512 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002513case 139:
Lev Walkinff7dd142005-03-20 12:58:00 +00002514#line 1349 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002515{
Lev Walkinf15320b2004-06-03 03:38:44 +00002516 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2517 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002518 ;
2519 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002520case 140:
Lev Walkinff7dd142005-03-20 12:58:00 +00002521#line 1353 "asn1p_y.y"
Lev Walkinc7d939d2005-03-20 11:12:40 +00002522{
2523 yyval.a_value = yyvsp[0].a_value;
2524 ;
2525 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002526case 141:
Lev Walkinff7dd142005-03-20 12:58:00 +00002527#line 1356 "asn1p_y.y"
Lev Walkin83cac2f2004-09-22 16:03:36 +00002528{
2529 yyval.a_value = yyvsp[0].a_value;
2530 ;
2531 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002532case 142:
Lev Walkinff7dd142005-03-20 12:58:00 +00002533#line 1362 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002534{
Lev Walkinf15320b2004-06-03 03:38:44 +00002535 asn1p_ref_t *ref;
2536 int ret;
2537 ref = asn1p_ref_new(yylineno);
2538 checkmem(ref);
2539 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2540 checkmem(ret == 0);
2541 yyval.a_value = asn1p_value_fromref(ref, 0);
2542 checkmem(yyval.a_value);
2543 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002544 ;
2545 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002546case 143:
Lev Walkinff7dd142005-03-20 12:58:00 +00002547#line 1373 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002548{
Lev Walkinf15320b2004-06-03 03:38:44 +00002549 asn1p_ref_t *ref;
2550 int ret;
2551 ref = asn1p_ref_new(yylineno);
2552 checkmem(ref);
2553 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2554 checkmem(ret == 0);
2555 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2556 checkmem(ret == 0);
2557 yyval.a_value = asn1p_value_fromref(ref, 0);
2558 checkmem(yyval.a_value);
2559 free(yyvsp[-2].tv_str);
2560 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002561 ;
2562 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002563case 144:
Lev Walkinff7dd142005-03-20 12:58:00 +00002564#line 1390 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002565{
Lev Walkinf15320b2004-06-03 03:38:44 +00002566 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
2567 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2568 checkmem(yyval.tv_opaque.buf);
2569 yyval.tv_opaque.buf[0] = '{';
2570 yyval.tv_opaque.buf[1] = ' ';
2571 memcpy(yyval.tv_opaque.buf + 2, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2572 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2573 free(yyvsp[0].tv_opaque.buf);
Lev Walkin1004aa92004-09-08 00:28:11 +00002574 ;
2575 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002576case 145:
Lev Walkinff7dd142005-03-20 12:58:00 +00002577#line 1400 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002578{
Lev Walkinf15320b2004-06-03 03:38:44 +00002579 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2580 char *p = malloc(newsize + 1);
2581 checkmem(p);
2582 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2583 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2584 p[newsize] = '\0';
2585 free(yyvsp[-1].tv_opaque.buf);
2586 free(yyvsp[0].tv_opaque.buf);
2587 yyval.tv_opaque.buf = p;
2588 yyval.tv_opaque.len = newsize;
Lev Walkin1004aa92004-09-08 00:28:11 +00002589 ;
2590 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002591case 146:
Lev Walkinff7dd142005-03-20 12:58:00 +00002592#line 1415 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002593{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2594 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002595case 147:
Lev Walkinff7dd142005-03-20 12:58:00 +00002596#line 1416 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002597{ yyval.a_type = ASN_BASIC_NULL; ;
2598 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002599case 148:
Lev Walkinff7dd142005-03-20 12:58:00 +00002600#line 1417 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002601{ yyval.a_type = ASN_BASIC_REAL; ;
2602 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002603case 149:
Lev Walkinff7dd142005-03-20 12:58:00 +00002604#line 1418 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002605{ yyval.a_type = yyvsp[0].a_type; ;
2606 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002607case 150:
Lev Walkinff7dd142005-03-20 12:58:00 +00002608#line 1419 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002609{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
2610 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002611case 151:
Lev Walkinff7dd142005-03-20 12:58:00 +00002612#line 1420 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002613{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
2614 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002615case 152:
Lev Walkinff7dd142005-03-20 12:58:00 +00002616#line 1421 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002617{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
2618 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002619case 153:
Lev Walkinff7dd142005-03-20 12:58:00 +00002620#line 1422 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002621{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
2622 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002623case 154:
Lev Walkinff7dd142005-03-20 12:58:00 +00002624#line 1423 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002625{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
2626 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002627case 155:
Lev Walkinff7dd142005-03-20 12:58:00 +00002628#line 1424 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002629{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
2630 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002631case 156:
Lev Walkinff7dd142005-03-20 12:58:00 +00002632#line 1425 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002633{ yyval.a_type = ASN_BASIC_UTCTime; ;
2634 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002635case 157:
Lev Walkinff7dd142005-03-20 12:58:00 +00002636#line 1426 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002637{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2638 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002639case 158:
Lev Walkinff7dd142005-03-20 12:58:00 +00002640#line 1427 "asn1p_y.y"
Lev Walkinc7d939d2005-03-20 11:12:40 +00002641{ yyval.a_type = yyvsp[0].a_type; ;
2642 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002643case 159:
Lev Walkinff7dd142005-03-20 12:58:00 +00002644#line 1434 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002645{ yyval.a_type = ASN_BASIC_INTEGER; ;
2646 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002647case 160:
Lev Walkinff7dd142005-03-20 12:58:00 +00002648#line 1435 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002649{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2650 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002651case 161:
Lev Walkinff7dd142005-03-20 12:58:00 +00002652#line 1436 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002653{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2654 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002655case 162:
Lev Walkinff7dd142005-03-20 12:58:00 +00002656#line 1440 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002657{
Lev Walkinceb20e72004-09-05 10:40:41 +00002658 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002659 checkmem(yyval.a_expr);
2660 yyval.a_expr->expr_type = yyvsp[0].a_type;
2661 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002662 ;
2663 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002664case 163:
Lev Walkinff7dd142005-03-20 12:58:00 +00002665#line 1446 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002666{
Lev Walkinf15320b2004-06-03 03:38:44 +00002667 if(yyvsp[0].a_expr) {
2668 yyval.a_expr = yyvsp[0].a_expr;
2669 } else {
Lev Walkinceb20e72004-09-05 10:40:41 +00002670 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002671 checkmem(yyval.a_expr);
2672 }
2673 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2674 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002675 ;
2676 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002677case 164:
Lev Walkinff7dd142005-03-20 12:58:00 +00002678#line 1459 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002679{ yyval.a_type = ASN_STRING_BMPString; ;
2680 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002681case 165:
Lev Walkinff7dd142005-03-20 12:58:00 +00002682#line 1460 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002683{
Lev Walkinf15320b2004-06-03 03:38:44 +00002684 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00002685 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002686 ;
2687 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002688case 166:
Lev Walkinff7dd142005-03-20 12:58:00 +00002689#line 1464 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002690{
Lev Walkin9c974182004-09-15 11:59:51 +00002691 yyval.a_type = ASN_STRING_GraphicString;
2692 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002693 ;
2694 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002695case 167:
Lev Walkinff7dd142005-03-20 12:58:00 +00002696#line 1468 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002697{ yyval.a_type = ASN_STRING_IA5String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002698 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002699case 168:
Lev Walkinff7dd142005-03-20 12:58:00 +00002700#line 1469 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002701{ yyval.a_type = ASN_STRING_ISO646String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002702 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002703case 169:
Lev Walkinff7dd142005-03-20 12:58:00 +00002704#line 1470 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002705{ yyval.a_type = ASN_STRING_NumericString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002706 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002707case 170:
Lev Walkinff7dd142005-03-20 12:58:00 +00002708#line 1471 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002709{ yyval.a_type = ASN_STRING_PrintableString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002710 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002711case 171:
Lev Walkinff7dd142005-03-20 12:58:00 +00002712#line 1472 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002713{
2714 yyval.a_type = ASN_STRING_T61String;
2715 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2716 ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002717 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002718case 172:
Lev Walkinff7dd142005-03-20 12:58:00 +00002719#line 1476 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002720{ yyval.a_type = ASN_STRING_TeletexString; ;
2721 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002722case 173:
Lev Walkinff7dd142005-03-20 12:58:00 +00002723#line 1477 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002724{ yyval.a_type = ASN_STRING_UniversalString; ;
2725 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002726case 174:
Lev Walkinff7dd142005-03-20 12:58:00 +00002727#line 1478 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002728{ yyval.a_type = ASN_STRING_UTF8String; ;
2729 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002730case 175:
Lev Walkinff7dd142005-03-20 12:58:00 +00002731#line 1479 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002732{
2733 yyval.a_type = ASN_STRING_VideotexString;
2734 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2735 ;
2736 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002737case 176:
Lev Walkinff7dd142005-03-20 12:58:00 +00002738#line 1483 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002739{ yyval.a_type = ASN_STRING_VisibleString; ;
2740 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002741case 177:
Lev Walkinff7dd142005-03-20 12:58:00 +00002742#line 1484 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002743{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2744 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002745case 183:
Lev Walkinff7dd142005-03-20 12:58:00 +00002746#line 1496 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002747{ yyval.a_constr = 0; ;
2748 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002749case 184:
Lev Walkinff7dd142005-03-20 12:58:00 +00002750#line 1497 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002751{
Lev Walkinceb20e72004-09-05 10:40:41 +00002752 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002753 ;
2754 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002755case 185:
Lev Walkinff7dd142005-03-20 12:58:00 +00002756#line 1503 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002757{
Lev Walkinceb20e72004-09-05 10:40:41 +00002758 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002759 ;
2760 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002761case 186:
Lev Walkinff7dd142005-03-20 12:58:00 +00002762#line 1506 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002763{
Lev Walkinf15320b2004-06-03 03:38:44 +00002764 /*
2765 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00002766 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00002767 */
Lev Walkind2ea1de2004-08-20 13:25:29 +00002768 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002769 ;
2770 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002771case 187:
Lev Walkinff7dd142005-03-20 12:58:00 +00002772#line 1516 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002773{
Lev Walkinf15320b2004-06-03 03:38:44 +00002774 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002775 ;
2776 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002777case 188:
Lev Walkinff7dd142005-03-20 12:58:00 +00002778#line 1519 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002779{
Lev Walkinf59d0752004-08-18 04:59:12 +00002780 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002781 ;
2782 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002783case 189:
Lev Walkinff7dd142005-03-20 12:58:00 +00002784#line 1525 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002785{
Lev Walkinf15320b2004-06-03 03:38:44 +00002786 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002787 ;
2788 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002789case 190:
Lev Walkinff7dd142005-03-20 12:58:00 +00002790#line 1528 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002791{
Lev Walkinf15320b2004-06-03 03:38:44 +00002792 asn1p_constraint_t *ct;
2793 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002794 ct->type = ACT_EL_EXT;
2795 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00002796 ;
2797 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002798case 191:
Lev Walkinff7dd142005-03-20 12:58:00 +00002799#line 1534 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002800{
Lev Walkinf15320b2004-06-03 03:38:44 +00002801 asn1p_constraint_t *ct;
2802 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002803 ct->type = ACT_EL_EXT;
2804 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002805 ct = yyval.a_constr;
2806 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002807 ;
2808 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002809case 192:
Lev Walkinff7dd142005-03-20 12:58:00 +00002810#line 1545 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002811{
Lev Walkinf59d0752004-08-18 04:59:12 +00002812 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002813 ;
2814 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002815case 193:
Lev Walkinff7dd142005-03-20 12:58:00 +00002816#line 1548 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002817{
Lev Walkinf15320b2004-06-03 03:38:44 +00002818 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002819 ;
2820 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002821case 194:
Lev Walkinff7dd142005-03-20 12:58:00 +00002822#line 1551 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002823{
Lev Walkinf15320b2004-06-03 03:38:44 +00002824 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002825 ;
2826 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002827case 195:
Lev Walkinff7dd142005-03-20 12:58:00 +00002828#line 1554 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002829{
Lev Walkinf15320b2004-06-03 03:38:44 +00002830 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002831 ;
2832 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002833case 196:
Lev Walkinff7dd142005-03-20 12:58:00 +00002834#line 1560 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002835{
Lev Walkinf15320b2004-06-03 03:38:44 +00002836 int ret;
2837 yyval.a_constr = asn1p_constraint_new(yylineno);
2838 checkmem(yyval.a_constr);
2839 yyval.a_constr->type = yyvsp[-3].a_ctype;
2840 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2841 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002842 ;
2843 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002844case 197:
Lev Walkinff7dd142005-03-20 12:58:00 +00002845#line 1568 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002846{
Lev Walkinf59d0752004-08-18 04:59:12 +00002847 int ret;
2848 yyval.a_constr = asn1p_constraint_new(yylineno);
2849 checkmem(yyval.a_constr);
2850 yyval.a_constr->type = ACT_CA_SET;
2851 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2852 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002853 ;
2854 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002855case 198:
Lev Walkinff7dd142005-03-20 12:58:00 +00002856#line 1576 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002857{
Lev Walkinf59d0752004-08-18 04:59:12 +00002858 yyval.a_constr = asn1p_constraint_new(yylineno);
2859 checkmem(yyval.a_constr);
2860 yyval.a_constr->type = ACT_EL_VALUE;
2861 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002862 ;
2863 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002864case 199:
Lev Walkinff7dd142005-03-20 12:58:00 +00002865#line 1582 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002866{
Lev Walkin144db9b2004-10-12 23:26:53 +00002867 yyval.a_constr = asn1p_constraint_new(yylineno);
2868 checkmem(yyval.a_constr);
Lev Walkinff7dd142005-03-20 12:58:00 +00002869 yyval.a_constr->type = ACT_EL_TYPE;
2870 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin9c974182004-09-15 11:59:51 +00002871 ;
2872 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002873case 200:
Lev Walkinc7d939d2005-03-20 11:12:40 +00002874#line 1588 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002875{
2876 yyval.a_constr = asn1p_constraint_new(yylineno);
2877 checkmem(yyval.a_constr);
2878 yyval.a_constr->type = yyvsp[-1].a_ctype;
Lev Walkinff7dd142005-03-20 12:58:00 +00002879 yyval.a_constr->range_start = yyvsp[-2].a_value;
2880 yyval.a_constr->range_stop = yyvsp[0].a_value;
2881 ;
2882 break;}
2883case 201:
2884#line 1595 "asn1p_y.y"
2885{
2886 yyval.a_constr = asn1p_constraint_new(yylineno);
2887 checkmem(yyval.a_constr);
2888 yyval.a_constr->type = yyvsp[-1].a_ctype;
Lev Walkinc8092cb2005-02-18 16:34:21 +00002889 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2890 yyval.a_constr->range_stop = yyvsp[0].a_value;
2891 yyval.a_constr->range_start->type = ATV_MIN;
2892 ;
2893 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00002894case 202:
2895#line 1603 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00002896{
2897 yyval.a_constr = asn1p_constraint_new(yylineno);
2898 checkmem(yyval.a_constr);
2899 yyval.a_constr->type = yyvsp[-1].a_ctype;
2900 yyval.a_constr->range_start = yyvsp[-2].a_value;
2901 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2902 yyval.a_constr->range_stop->type = ATV_MAX;
2903 ;
2904 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00002905case 203:
2906#line 1611 "asn1p_y.y"
Lev Walkin83cac2f2004-09-22 16:03:36 +00002907{
Lev Walkinc8092cb2005-02-18 16:34:21 +00002908 yyval.a_constr = asn1p_constraint_new(yylineno);
2909 checkmem(yyval.a_constr);
2910 yyval.a_constr->type = yyvsp[-1].a_ctype;
2911 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2912 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2913 yyval.a_constr->range_start->type = ATV_MIN;
2914 yyval.a_constr->range_stop->type = ATV_MAX;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002915 ;
2916 break;}
Lev Walkin9c974182004-09-15 11:59:51 +00002917case 204:
Lev Walkinff7dd142005-03-20 12:58:00 +00002918#line 1620 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002919{
2920 yyval.a_constr = yyvsp[0].a_constr;
2921 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002922 break;}
2923case 205:
Lev Walkinff7dd142005-03-20 12:58:00 +00002924#line 1623 "asn1p_y.y"
2925{
2926 yyval.a_constr = yyvsp[0].a_constr;
2927 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002928 break;}
2929case 206:
Lev Walkinff7dd142005-03-20 12:58:00 +00002930#line 1629 "asn1p_y.y"
2931{ yyval.a_ctype = ACT_EL_RANGE; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002932 break;}
2933case 207:
Lev Walkinff7dd142005-03-20 12:58:00 +00002934#line 1630 "asn1p_y.y"
2935{ yyval.a_ctype = ACT_EL_RLRANGE; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002936 break;}
2937case 208:
Lev Walkinff7dd142005-03-20 12:58:00 +00002938#line 1631 "asn1p_y.y"
2939{ yyval.a_ctype = ACT_EL_LLRANGE; ;
Lev Walkinc8092cb2005-02-18 16:34:21 +00002940 break;}
2941case 209:
Lev Walkinff7dd142005-03-20 12:58:00 +00002942#line 1632 "asn1p_y.y"
2943{ yyval.a_ctype = ACT_EL_ULRANGE; ;
2944 break;}
2945case 210:
2946#line 1636 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002947{
Lev Walkinceb20e72004-09-05 10:40:41 +00002948 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002949 ;
2950 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00002951case 211:
2952#line 1639 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002953{
Lev Walkinceb20e72004-09-05 10:40:41 +00002954 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin1004aa92004-09-08 00:28:11 +00002955 ;
2956 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00002957case 212:
2958#line 1645 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002959{
2960 yyval.a_value = asn1p_value_fromint(0);
2961 checkmem(yyval.a_value);
2962 yyval.a_value->type = ATV_FALSE;
2963 ;
2964 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00002965case 213:
2966#line 1650 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002967{
2968 yyval.a_value = asn1p_value_fromint(1);
2969 checkmem(yyval.a_value);
2970 yyval.a_value->type = ATV_TRUE;
2971 ;
2972 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00002973case 214:
2974#line 1655 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002975{
Lev Walkinf15320b2004-06-03 03:38:44 +00002976 yyval.a_value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002977 ;
2978 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00002979case 215:
2980#line 1658 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002981{
2982 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2983 checkmem(yyval.a_value);
2984 ;
2985 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00002986case 216:
2987#line 1662 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002988{
Lev Walkinf15320b2004-06-03 03:38:44 +00002989 asn1p_ref_t *ref;
2990 int ret;
2991 ref = asn1p_ref_new(yylineno);
2992 checkmem(ref);
2993 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2994 checkmem(ret == 0);
2995 yyval.a_value = asn1p_value_fromref(ref, 0);
2996 checkmem(yyval.a_value);
2997 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002998 ;
2999 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003000case 217:
3001#line 1676 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003002{
Lev Walkinc8092cb2005-02-18 16:34:21 +00003003 asn1p_ref_t *ref;
3004 int ret;
3005 ref = asn1p_ref_new(yylineno);
3006 checkmem(ref);
3007 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3008 checkmem(ret == 0);
3009 yyval.a_value = asn1p_value_fromref(ref, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003010 checkmem(yyval.a_value);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003011 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003012 ;
3013 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003014case 218:
3015#line 1690 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003016{
Lev Walkinf15320b2004-06-03 03:38:44 +00003017 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003018 ;
3019 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003020case 219:
3021#line 1696 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003022{
Lev Walkinf15320b2004-06-03 03:38:44 +00003023 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003024 ;
3025 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003026case 220:
3027#line 1699 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003028{
Lev Walkinf15320b2004-06-03 03:38:44 +00003029 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003030 ;
3031 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003032case 221:
3033#line 1705 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003034{
Lev Walkinf15320b2004-06-03 03:38:44 +00003035 yyval.a_constr = asn1p_constraint_new(yylineno);
3036 checkmem(yyval.a_constr);
3037 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003038 ;
3039 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003040case 222:
3041#line 1710 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003042{
Lev Walkinf15320b2004-06-03 03:38:44 +00003043 yyval.a_constr = asn1p_constraint_new(yylineno);
3044 checkmem(yyval.a_constr);
3045 yyval.a_constr->type = ACT_EL_VALUE;
3046 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3047 yyval.a_constr->presence = yyvsp[0].a_pres;
Lev Walkin1004aa92004-09-08 00:28:11 +00003048 ;
3049 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003050case 223:
3051#line 1723 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003052{ yyval.a_pres = ACPRES_DEFAULT; ;
3053 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003054case 224:
3055#line 1724 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003056{ yyval.a_pres = yyvsp[0].a_pres; ;
3057 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003058case 225:
3059#line 1728 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003060{
Lev Walkinf15320b2004-06-03 03:38:44 +00003061 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003062 ;
3063 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003064case 226:
3065#line 1731 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003066{
Lev Walkinf15320b2004-06-03 03:38:44 +00003067 yyval.a_pres = ACPRES_ABSENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003068 ;
3069 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003070case 227:
3071#line 1734 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003072{
Lev Walkinf15320b2004-06-03 03:38:44 +00003073 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkin1004aa92004-09-08 00:28:11 +00003074 ;
3075 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003076case 228:
Lev Walkinff7dd142005-03-20 12:58:00 +00003077#line 1740 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003078{
3079 yyval.a_constr = yyvsp[0].a_constr;
3080 ;
3081 break;}
3082case 229:
Lev Walkinff7dd142005-03-20 12:58:00 +00003083#line 1743 "asn1p_y.y"
3084{
3085 yyval.a_constr = yyvsp[0].a_constr;
3086 ;
3087 break;}
3088case 230:
3089#line 1752 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003090{
Lev Walkinf15320b2004-06-03 03:38:44 +00003091 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3092 asn1p_constraint_t *ct;
3093 int ret;
3094 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3095 checkmem(ret == 0);
3096 ct = asn1p_constraint_new(yylineno);
3097 checkmem(yyval.a_constr);
3098 ct->type = ACT_EL_VALUE;
3099 ct->value = asn1p_value_fromref(ref, 0);
3100 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003101 ;
3102 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003103case 231:
3104#line 1767 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003105{
Lev Walkinf15320b2004-06-03 03:38:44 +00003106 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003107 ;
3108 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003109case 232:
3110#line 1773 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003111{
Lev Walkinf15320b2004-06-03 03:38:44 +00003112 yyval.a_constr = asn1p_constraint_new(yylineno);
3113 checkmem(yyval.a_constr);
3114 yyval.a_constr->type = ACT_EL_VALUE;
3115 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003116 ;
3117 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003118case 233:
3119#line 1779 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003120{
Lev Walkinf15320b2004-06-03 03:38:44 +00003121 asn1p_constraint_t *ct;
3122 ct = asn1p_constraint_new(yylineno);
3123 checkmem(ct);
3124 ct->type = ACT_EL_VALUE;
3125 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3126 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00003127 ;
3128 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003129case 234:
3130#line 1793 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003131{
Lev Walkinf15320b2004-06-03 03:38:44 +00003132 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3133 int ret;
3134 *p = '@';
3135 strcpy(p + 1, yyvsp[0].tv_str);
3136 yyval.a_ref = asn1p_ref_new(yylineno);
3137 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3138 checkmem(ret == 0);
3139 free(p);
3140 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003141 ;
3142 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003143case 235:
3144#line 1804 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003145{
Lev Walkinf15320b2004-06-03 03:38:44 +00003146 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3147 int ret;
3148 p[0] = '@';
3149 p[1] = '.';
3150 strcpy(p + 2, yyvsp[0].tv_str);
3151 yyval.a_ref = asn1p_ref_new(yylineno);
3152 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3153 checkmem(ret == 0);
3154 free(p);
3155 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003156 ;
3157 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003158case 236:
3159#line 1820 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003160{
Lev Walkinf15320b2004-06-03 03:38:44 +00003161 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003162 ;
3163 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003164case 237:
3165#line 1823 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003166{
Lev Walkinf15320b2004-06-03 03:38:44 +00003167 int l1 = strlen(yyvsp[-2].tv_str);
3168 int l3 = strlen(yyvsp[0].tv_str);
3169 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3170 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3171 yyval.tv_str[l1] = '.';
3172 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3173 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin1004aa92004-09-08 00:28:11 +00003174 ;
3175 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003176case 238:
3177#line 1841 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003178{
Lev Walkin9c974182004-09-15 11:59:51 +00003179 yyval.a_marker.flags = EM_NOMARK;
3180 yyval.a_marker.default_value = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00003181 ;
3182 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003183case 239:
3184#line 1845 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003185{ yyval.a_marker = yyvsp[0].a_marker; ;
Lev Walkinec208e62004-09-14 02:44:07 +00003186 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003187case 240:
3188#line 1849 "asn1p_y.y"
Lev Walkinec208e62004-09-14 02:44:07 +00003189{
Lev Walkin9c974182004-09-15 11:59:51 +00003190 yyval.a_marker.flags = EM_OPTIONAL;
3191 yyval.a_marker.default_value = 0;
Lev Walkinec208e62004-09-14 02:44:07 +00003192 ;
3193 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003194case 241:
3195#line 1853 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003196{
3197 yyval.a_marker.flags = EM_DEFAULT;
3198 yyval.a_marker.default_value = yyvsp[0].a_value;
3199 ;
3200 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003201case 242:
3202#line 1876 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003203{
Lev Walkinceb20e72004-09-05 10:40:41 +00003204 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003205 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003206 ;
3207 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003208case 243:
3209#line 1880 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003210{
Lev Walkinf15320b2004-06-03 03:38:44 +00003211 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003212 ;
3213 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003214case 244:
3215#line 1886 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003216{
Lev Walkinceb20e72004-09-05 10:40:41 +00003217 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003218 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003219 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3220 ;
3221 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003222case 245:
3223#line 1891 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003224{
Lev Walkinf15320b2004-06-03 03:38:44 +00003225 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003226 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3227 ;
3228 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003229case 246:
3230#line 1898 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003231{
Lev Walkinceb20e72004-09-05 10:40:41 +00003232 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003233 checkmem(yyval.a_expr);
3234 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3235 yyval.a_expr->meta_type = AMT_VALUE;
3236 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003237 ;
3238 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003239case 247:
Lev Walkinff7dd142005-03-20 12:58:00 +00003240#line 1905 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003241{
3242 yyval.a_expr = asn1p_expr_new(yylineno);
3243 checkmem(yyval.a_expr);
3244 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3245 yyval.a_expr->meta_type = AMT_VALUE;
3246 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3247 yyval.a_expr->value = yyvsp[-1].a_value;
3248 ;
3249 break;}
3250case 248:
Lev Walkinff7dd142005-03-20 12:58:00 +00003251#line 1913 "asn1p_y.y"
3252{
3253 yyval.a_expr = asn1p_expr_new(yylineno);
3254 checkmem(yyval.a_expr);
3255 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3256 yyval.a_expr->meta_type = AMT_VALUE;
3257 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3258 yyval.a_expr->value = yyvsp[-1].a_value;
3259 ;
3260 break;}
3261case 249:
3262#line 1921 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003263{
Lev Walkinceb20e72004-09-05 10:40:41 +00003264 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003265 checkmem(yyval.a_expr);
3266 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3267 yyval.a_expr->meta_type = AMT_VALUE;
3268 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003269 ;
3270 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003271case 250:
3272#line 1928 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003273{
Lev Walkinceb20e72004-09-05 10:40:41 +00003274 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003275 checkmem(yyval.a_expr);
3276 yyval.a_expr->Identifier = strdup("...");
3277 checkmem(yyval.a_expr->Identifier);
3278 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3279 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003280 ;
3281 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00003282case 251:
Lev Walkinff7dd142005-03-20 12:58:00 +00003283#line 1939 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003284{
3285 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3286 checkmem(yyval.a_value);
3287 ;
Lev Walkin9c974182004-09-15 11:59:51 +00003288 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00003289case 252:
Lev Walkinff7dd142005-03-20 12:58:00 +00003290#line 1943 "asn1p_y.y"
3291{
3292 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3293 checkmem(yyval.a_value);
3294 ;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003295 break;}
3296case 253:
Lev Walkinff7dd142005-03-20 12:58:00 +00003297#line 1974 "asn1p_y.y"
3298{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003299 break;}
3300case 254:
Lev Walkinff7dd142005-03-20 12:58:00 +00003301#line 1975 "asn1p_y.y"
3302{ yyval.a_tag = yyvsp[0].a_tag; ;
3303 break;}
3304case 255:
3305#line 1979 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003306{
Lev Walkinc603f102005-01-23 09:51:44 +00003307 yyval.a_tag = yyvsp[-1].a_tag;
3308 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin1004aa92004-09-08 00:28:11 +00003309 ;
3310 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003311case 256:
3312#line 1986 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003313{
Lev Walkinc603f102005-01-23 09:51:44 +00003314 yyval.a_tag = yyvsp[-2].a_tag;
3315 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00003316 ;
3317 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003318case 257:
3319#line 1992 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003320{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00003321 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003322case 258:
3323#line 1993 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003324{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
Lev Walkin83cac2f2004-09-22 16:03:36 +00003325 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003326case 259:
3327#line 1994 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003328{ yyval.a_tag.tag_class = TC_APPLICATION; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003329 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003330case 260:
3331#line 1995 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003332{ yyval.a_tag.tag_class = TC_PRIVATE; ;
3333 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003334case 261:
3335#line 1999 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003336{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3337 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003338case 262:
3339#line 2000 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003340{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3341 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003342case 263:
3343#line 2001 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003344{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3345 break;}
Lev Walkinc603f102005-01-23 09:51:44 +00003346case 264:
Lev Walkinff7dd142005-03-20 12:58:00 +00003347#line 2005 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003348{
3349 checkmem(yyvsp[0].tv_str);
3350 yyval.tv_str = yyvsp[0].tv_str;
3351 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003352 break;}
Lev Walkinc603f102005-01-23 09:51:44 +00003353case 265:
Lev Walkinff7dd142005-03-20 12:58:00 +00003354#line 2009 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00003355{
Lev Walkinc8092cb2005-02-18 16:34:21 +00003356 checkmem(yyvsp[0].tv_str);
Lev Walkin144db9b2004-10-12 23:26:53 +00003357 yyval.tv_str = yyvsp[0].tv_str;
3358 ;
3359 break;}
Lev Walkinc603f102005-01-23 09:51:44 +00003360case 266:
Lev Walkinff7dd142005-03-20 12:58:00 +00003361#line 2017 "asn1p_y.y"
3362{
3363 checkmem(yyvsp[0].tv_str);
3364 yyval.tv_str = yyvsp[0].tv_str;
3365 ;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003366 break;}
3367case 267:
Lev Walkinff7dd142005-03-20 12:58:00 +00003368#line 2024 "asn1p_y.y"
3369{ yyval.tv_str = 0; ;
3370 break;}
3371case 268:
3372#line 2025 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003373{
3374 yyval.tv_str = yyvsp[0].tv_str;
3375 ;
3376 break;}
Lev Walkinff7dd142005-03-20 12:58:00 +00003377case 269:
3378#line 2030 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003379{
Lev Walkinceb20e72004-09-05 10:40:41 +00003380 checkmem(yyvsp[0].tv_str);
3381 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003382 ;
3383 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00003384}
3385 /* the action file gets copied in in place of this dollarsign */
3386#line 543 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00003387
3388 yyvsp -= yylen;
3389 yyssp -= yylen;
Lev Walkin1004aa92004-09-08 00:28:11 +00003390#ifdef YYLSP_NEEDED
3391 yylsp -= yylen;
3392#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003393
Lev Walkin1004aa92004-09-08 00:28:11 +00003394#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00003395 if (yydebug)
3396 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003397 short *ssp1 = yyss - 1;
3398 fprintf (stderr, "state stack now");
3399 while (ssp1 != yyssp)
3400 fprintf (stderr, " %d", *++ssp1);
3401 fprintf (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003402 }
3403#endif
3404
3405 *++yyvsp = yyval;
3406
Lev Walkin1004aa92004-09-08 00:28:11 +00003407#ifdef YYLSP_NEEDED
3408 yylsp++;
3409 if (yylen == 0)
3410 {
3411 yylsp->first_line = yylloc.first_line;
3412 yylsp->first_column = yylloc.first_column;
3413 yylsp->last_line = (yylsp-1)->last_line;
3414 yylsp->last_column = (yylsp-1)->last_column;
3415 yylsp->text = 0;
3416 }
3417 else
3418 {
3419 yylsp->last_line = (yylsp+yylen-1)->last_line;
3420 yylsp->last_column = (yylsp+yylen-1)->last_column;
3421 }
3422#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003423
Lev Walkin1004aa92004-09-08 00:28:11 +00003424 /* Now "shift" the result of the reduction.
3425 Determine what state that goes to,
3426 based on the state we popped back to
3427 and the rule number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003428
3429 yyn = yyr1[yyn];
3430
Lev Walkin1004aa92004-09-08 00:28:11 +00003431 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3432 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003433 yystate = yytable[yystate];
3434 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003435 yystate = yydefgoto[yyn - YYNTBASE];
Lev Walkinf15320b2004-06-03 03:38:44 +00003436
3437 goto yynewstate;
3438
Lev Walkin1004aa92004-09-08 00:28:11 +00003439yyerrlab: /* here on detecting error */
Lev Walkinf15320b2004-06-03 03:38:44 +00003440
Lev Walkin1004aa92004-09-08 00:28:11 +00003441 if (! yyerrstatus)
3442 /* If not already recovering from an error, report this error. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003443 {
3444 ++yynerrs;
Lev Walkin1004aa92004-09-08 00:28:11 +00003445
3446#ifdef YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003447 yyn = yypact[yystate];
3448
Lev Walkin1004aa92004-09-08 00:28:11 +00003449 if (yyn > YYFLAG && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003450 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003451 int size = 0;
3452 char *msg;
3453 int x, count;
Lev Walkinf15320b2004-06-03 03:38:44 +00003454
Lev Walkin1004aa92004-09-08 00:28:11 +00003455 count = 0;
3456 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3457 for (x = (yyn < 0 ? -yyn : 0);
3458 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3459 if (yycheck[x + yyn] == x)
3460 size += strlen(yytname[x]) + 15, count++;
3461 msg = (char *) malloc(size + 15);
3462 if (msg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003463 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003464 strcpy(msg, "parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003465
Lev Walkin1004aa92004-09-08 00:28:11 +00003466 if (count < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003467 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003468 count = 0;
3469 for (x = (yyn < 0 ? -yyn : 0);
3470 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3471 if (yycheck[x + yyn] == x)
Lev Walkinf15320b2004-06-03 03:38:44 +00003472 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003473 strcat(msg, count == 0 ? ", expecting `" : " or `");
3474 strcat(msg, yytname[x]);
3475 strcat(msg, "'");
3476 count++;
Lev Walkinf15320b2004-06-03 03:38:44 +00003477 }
3478 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003479 yyerror(msg);
3480 free(msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003481 }
3482 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003483 yyerror ("parse error; also virtual memory exceeded");
Lev Walkinf15320b2004-06-03 03:38:44 +00003484 }
3485 else
3486#endif /* YYERROR_VERBOSE */
Lev Walkin1004aa92004-09-08 00:28:11 +00003487 yyerror("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003488 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003489
Lev Walkinf15320b2004-06-03 03:38:44 +00003490 goto yyerrlab1;
Lev Walkin1004aa92004-09-08 00:28:11 +00003491yyerrlab1: /* here on error raised explicitly by an action */
Lev Walkinf15320b2004-06-03 03:38:44 +00003492
3493 if (yyerrstatus == 3)
3494 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003495 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003496
Lev Walkin1004aa92004-09-08 00:28:11 +00003497 /* return failure if at end of input */
Lev Walkinf15320b2004-06-03 03:38:44 +00003498 if (yychar == YYEOF)
Lev Walkin1004aa92004-09-08 00:28:11 +00003499 YYABORT;
Lev Walkinf15320b2004-06-03 03:38:44 +00003500
Lev Walkin1004aa92004-09-08 00:28:11 +00003501#if YYDEBUG != 0
3502 if (yydebug)
3503 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3504#endif
3505
Lev Walkinf15320b2004-06-03 03:38:44 +00003506 yychar = YYEMPTY;
3507 }
3508
Lev Walkin1004aa92004-09-08 00:28:11 +00003509 /* Else will try to reuse lookahead token
3510 after shifting the error token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003511
Lev Walkin1004aa92004-09-08 00:28:11 +00003512 yyerrstatus = 3; /* Each real token shifted decrements this */
Lev Walkinf15320b2004-06-03 03:38:44 +00003513
Lev Walkin1004aa92004-09-08 00:28:11 +00003514 goto yyerrhandle;
Lev Walkin459ab022004-09-07 10:39:09 +00003515
Lev Walkin1004aa92004-09-08 00:28:11 +00003516yyerrdefault: /* current state does not do anything special for the error token. */
Lev Walkin459ab022004-09-07 10:39:09 +00003517
Lev Walkin1004aa92004-09-08 00:28:11 +00003518#if 0
3519 /* This is wrong; only states that explicitly want error tokens
3520 should shift them. */
3521 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3522 if (yyn) goto yydefault;
Lev Walkinceb20e72004-09-05 10:40:41 +00003523#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003524
3525yyerrpop: /* pop the current state because it cannot handle the error token */
3526
3527 if (yyssp == yyss) YYABORT;
3528 yyvsp--;
3529 yystate = *--yyssp;
3530#ifdef YYLSP_NEEDED
3531 yylsp--;
3532#endif
3533
3534#if YYDEBUG != 0
3535 if (yydebug)
3536 {
3537 short *ssp1 = yyss - 1;
3538 fprintf (stderr, "Error: state stack now");
3539 while (ssp1 != yyssp)
3540 fprintf (stderr, " %d", *++ssp1);
3541 fprintf (stderr, "\n");
Lev Walkinceb20e72004-09-05 10:40:41 +00003542 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003543#endif
3544
3545yyerrhandle:
3546
3547 yyn = yypact[yystate];
3548 if (yyn == YYFLAG)
3549 goto yyerrdefault;
3550
3551 yyn += YYTERROR;
3552 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3553 goto yyerrdefault;
3554
3555 yyn = yytable[yyn];
3556 if (yyn < 0)
3557 {
3558 if (yyn == YYFLAG)
3559 goto yyerrpop;
3560 yyn = -yyn;
3561 goto yyreduce;
3562 }
3563 else if (yyn == 0)
3564 goto yyerrpop;
Lev Walkinf15320b2004-06-03 03:38:44 +00003565
3566 if (yyn == YYFINAL)
3567 YYACCEPT;
3568
Lev Walkin1004aa92004-09-08 00:28:11 +00003569#if YYDEBUG != 0
3570 if (yydebug)
3571 fprintf(stderr, "Shifting error token, ");
3572#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003573
3574 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00003575#ifdef YYLSP_NEEDED
3576 *++yylsp = yylloc;
3577#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003578
3579 yystate = yyn;
3580 goto yynewstate;
3581
Lev Walkin1004aa92004-09-08 00:28:11 +00003582 yyacceptlab:
3583 /* YYACCEPT comes here. */
3584 if (yyfree_stacks)
3585 {
3586 free (yyss);
3587 free (yyvs);
3588#ifdef YYLSP_NEEDED
3589 free (yyls);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003590#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003591 }
3592 return 0;
Lev Walkin459ab022004-09-07 10:39:09 +00003593
Lev Walkin1004aa92004-09-08 00:28:11 +00003594 yyabortlab:
3595 /* YYABORT comes here. */
3596 if (yyfree_stacks)
3597 {
3598 free (yyss);
3599 free (yyvs);
3600#ifdef YYLSP_NEEDED
3601 free (yyls);
Lev Walkin459ab022004-09-07 10:39:09 +00003602#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003603 }
3604 return 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003605}
Lev Walkinff7dd142005-03-20 12:58:00 +00003606#line 2036 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00003607
3608
3609
3610/*
3611 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3612 */
3613static asn1p_value_t *
3614_convert_bitstring2binary(char *str, int base) {
3615 asn1p_value_t *val;
3616 int slen;
3617 int memlen;
3618 int baselen;
3619 int bits;
3620 uint8_t *binary_vector;
3621 uint8_t *bv_ptr;
3622 uint8_t cur_val;
3623
3624 assert(str);
3625 assert(str[0] == '\'');
3626
3627 switch(base) {
3628 case 'B':
3629 baselen = 1;
3630 break;
3631 case 'H':
3632 baselen = 4;
3633 break;
3634 default:
3635 assert(base == 'B' || base == 'H');
3636 errno = EINVAL;
3637 return NULL;
3638 }
3639
3640 slen = strlen(str);
3641 assert(str[slen - 1] == base);
3642 assert(str[slen - 2] == '\'');
3643
3644 memlen = slen / (8 / baselen); /* Conservative estimate */
3645
3646 bv_ptr = binary_vector = malloc(memlen + 1);
3647 if(bv_ptr == NULL)
3648 /* ENOMEM */
3649 return NULL;
3650
3651 cur_val = 0;
3652 bits = 0;
3653 while(*(++str) != '\'') {
3654 switch(baselen) {
3655 case 1:
3656 switch(*str) {
3657 case '1':
3658 cur_val |= 1 << (7 - (bits % 8));
3659 case '0':
3660 break;
3661 default:
3662 assert(!"_y UNREACH1");
3663 case ' ': case '\r': case '\n':
3664 continue;
3665 }
3666 break;
3667 case 4:
3668 switch(*str) {
3669 case '0': case '1': case '2': case '3': case '4':
3670 case '5': case '6': case '7': case '8': case '9':
3671 cur_val |= (*str - '0') << (4 - (bits % 8));
3672 break;
3673 case 'A': case 'B': case 'C':
3674 case 'D': case 'E': case 'F':
3675 cur_val |= ((*str - 'A') + 10)
3676 << (4 - (bits % 8));
3677 break;
3678 default:
3679 assert(!"_y UNREACH2");
3680 case ' ': case '\r': case '\n':
3681 continue;
3682 }
3683 break;
3684 }
3685
3686 bits += baselen;
3687 if((bits % 8) == 0) {
3688 *bv_ptr++ = cur_val;
3689 cur_val = 0;
3690 }
3691 }
3692
3693 *bv_ptr = cur_val;
3694 assert((bv_ptr - binary_vector) <= memlen);
3695
3696 val = asn1p_value_frombits(binary_vector, bits, 0);
3697 if(val == NULL) {
3698 free(binary_vector);
3699 }
3700
3701 return val;
3702}
3703
3704extern char *asn1p_text;
3705
3706int
3707yyerror(const char *msg) {
3708 fprintf(stderr,
3709 "ASN.1 grammar parse error "
3710 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00003711 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003712 return -1;
3713}
3714
3715