blob: 70d1a1087b0daa473ebd61d01bd4ca573f1062a6 [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 Walkinc8092cb2005-02-18 16:34:21 +0000207#define YYFINAL 417
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 Walkinc603f102005-01-23 09:51:44 +0000211#define YYTRANSLATE(x) ((unsigned)(x) <= 354 ? yytranslate[x] : 217)
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,
264 292, 294, 296, 298, 302, 306, 310, 312, 314, 319,
265 324, 329, 336, 343, 345, 350, 355, 357, 361, 363,
266 367, 371, 375, 377, 381, 383, 387, 389, 391, 393,
267 395, 400, 404, 405, 409, 411, 413, 415, 417, 419,
268 421, 423, 425, 427, 431, 433, 436, 438, 440, 442,
269 444, 447, 450, 452, 454, 457, 460, 462, 464, 466,
270 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,
273 539, 545, 547, 551, 555, 559, 564, 568, 570, 574,
274 578, 582, 586, 588, 590, 592, 595, 598, 602, 604,
275 606, 608, 610, 612, 614, 616, 618, 624, 626, 630,
276 632, 636, 637, 639, 641, 643, 645, 647, 649, 653,
277 658, 660, 664, 667, 671, 673, 677, 678, 680, 682,
278 685, 688, 692, 694, 698, 700, 705, 710, 712, 714,
279 716, 718, 719, 721, 724, 729, 730, 732, 734, 736,
280 737, 739, 741, 743, 745, 747, 748, 750
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,
284 0, 118, 0, 117, 118, 0, 213, 119, 34, 123,
285 3, 21, 126, 39, 0, 0, 120, 0, 103, 121,
286 104, 0, 103, 104, 0, 122, 0, 121, 122, 0,
287 216, 0, 216, 105, 9, 106, 0, 9, 0, 0,
288 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,
294 46, 213, 119, 0, 134, 0, 133, 108, 134, 0,
295 213, 0, 213, 103, 104, 0, 216, 0, 42, 136,
296 107, 0, 42, 17, 107, 0, 42, 107, 0, 137,
297 0, 136, 108, 137, 0, 213, 0, 213, 103, 104,
298 0, 216, 0, 213, 139, 3, 103, 140, 104, 0,
299 165, 0, 175, 0, 0, 141, 0, 142, 0, 141,
300 108, 142, 0, 102, 0, 186, 0, 213, 3, 208,
301 87, 0, 213, 3, 163, 0, 213, 3, 153, 0,
302 213, 103, 144, 104, 3, 163, 0, 145, 0, 144,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000303 108, 145, 0, 213, 0, 213, 109, 216, 0, 213,
304 109, 213, 0, 175, 109, 216, 0, 147, 0, 146,
305 108, 147, 0, 163, 0, 216, 0, 0, 149, 0,
306 150, 0, 149, 108, 150, 0, 216, 163, 202, 0,
307 30, 68, 163, 0, 162, 0, 152, 0, 151, 108,
308 152, 0, 216, 163, 0, 162, 0, 28, 103, 155,
309 104, 157, 0, 0, 88, 0, 156, 0, 155, 108,
310 156, 0, 168, 202, 0, 168, 163, 154, 202, 0,
311 168, 168, 154, 202, 0, 0, 158, 0, 0, 95,
312 82, 103, 159, 160, 104, 0, 161, 0, 160, 161,
313 0, 4, 0, 168, 0, 102, 0, 102, 110, 173,
314 0, 102, 110, 207, 0, 208, 164, 182, 0, 177,
315 0, 178, 0, 27, 103, 151, 104, 0, 78, 103,
316 148, 104, 0, 79, 103, 148, 104, 0, 78, 182,
317 68, 215, 208, 164, 0, 79, 182, 68, 215, 208,
318 164, 0, 18, 0, 18, 35, 25, 216, 0, 213,
319 103, 146, 104, 0, 165, 0, 56, 68, 165, 0,
320 11, 0, 11, 111, 213, 0, 214, 111, 213, 0,
321 11, 111, 216, 0, 214, 0, 214, 111, 166, 0,
322 167, 0, 166, 111, 167, 0, 169, 0, 169, 0,
323 13, 0, 14, 0, 216, 139, 3, 171, 0, 216,
324 109, 171, 0, 0, 103, 172, 174, 0, 63, 0,
325 45, 0, 86, 0, 5, 0, 7, 0, 6, 0,
326 207, 0, 173, 0, 216, 0, 213, 111, 216, 0,
327 4, 0, 174, 4, 0, 24, 0, 63, 0, 76,
328 0, 176, 0, 67, 81, 0, 65, 51, 0, 77,
329 0, 44, 0, 36, 71, 0, 26, 81, 0, 91,
330 0, 47, 0, 58, 0, 40, 0, 22, 81, 0,
331 175, 0, 176, 204, 0, 23, 0, 48, 0, 49,
332 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,
340 185, 106, 0, 105, 185, 106, 0, 190, 0, 190,
341 188, 190, 0, 61, 188, 190, 0, 190, 188, 60,
342 0, 61, 188, 60, 0, 196, 0, 191, 0, 101,
343 0, 101, 112, 0, 112, 101, 0, 112, 101, 112,
344 0, 80, 0, 46, 0, 45, 0, 86, 0, 207,
345 0, 6, 0, 216, 0, 213, 0, 95, 30, 103,
346 192, 104, 0, 193, 0, 192, 108, 193, 0, 102,
347 0, 216, 182, 194, 0, 0, 195, 0, 73, 0,
348 15, 0, 69, 0, 197, 0, 198, 0, 103, 213,
349 104, 0, 197, 103, 199, 104, 0, 200, 0, 199,
350 108, 200, 0, 113, 201, 0, 113, 111, 201, 0,
351 216, 0, 201, 111, 216, 0, 0, 203, 0, 69,
352 0, 33, 171, 0, 103, 104, 0, 103, 205, 104,
353 0, 206, 0, 205, 108, 206, 0, 216, 0, 216,
354 105, 207, 106, 0, 216, 105, 173, 106, 0, 207,
355 0, 102, 0, 9, 0, 10, 0, 0, 209, 0,
356 210, 212, 0, 114, 211, 9, 115, 0, 0, 89,
357 0, 19, 0, 75, 0, 0, 52, 0, 41, 0,
358 11, 0, 12, 0, 12, 0, 0, 216, 0, 8,
359 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 Walkin144db9b2004-10-12 23:26:53 +0000366 301, 307, 313, 329, 354, 356, 359, 363, 368, 375,
367 383, 388, 392, 401, 403, 411, 415, 423, 427, 430,
368 433, 437, 457, 459, 467, 471, 503, 507, 516, 523,
369 536, 543, 545, 557, 570, 577, 582, 588, 594, 603,
370 609, 615, 622, 628, 636, 640, 643, 650, 656, 662,
371 669, 675, 684, 694, 702, 710, 712, 722, 725, 729,
372 732, 744, 756, 762, 778, 787, 797, 807, 812, 819,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000373 826, 836, 842, 848, 852, 875, 877, 879, 885, 891,
374 898, 905, 910, 916, 922, 928, 933, 943, 945, 948,
375 956, 962, 971, 977, 994, 996, 1001, 1005, 1010, 1015,
376 1021, 1025, 1036, 1045, 1054, 1065, 1087, 1091, 1097, 1103,
377 1109, 1115, 1125, 1135, 1141, 1155, 1179, 1186, 1200, 1209,
378 1219, 1229, 1239, 1247, 1268, 1277, 1286, 1287, 1289, 1296,
379 1308, 1318, 1326, 1326, 1331, 1336, 1341, 1346, 1350, 1354,
380 1358, 1361, 1366, 1378, 1394, 1405, 1419, 1421, 1422, 1423,
381 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1437, 1439,
382 1440, 1443, 1450, 1462, 1464, 1468, 1472, 1473, 1474, 1475,
383 1476, 1480, 1481, 1482, 1483, 1487, 1488, 1495, 1495, 1496,
384 1496, 1497, 1499, 1501, 1506, 1510, 1519, 1523, 1528, 1532,
385 1538, 1548, 1552, 1555, 1558, 1563, 1572, 1580, 1586, 1593,
386 1601, 1609, 1618, 1621, 1626, 1628, 1629, 1630, 1633, 1637,
387 1642, 1648, 1653, 1656, 1660, 1671, 1684, 1690, 1694, 1699,
388 1705, 1717, 1719, 1722, 1726, 1729, 1734, 1738, 1746, 1761,
389 1767, 1774, 1787, 1799, 1814, 1818, 1835, 1840, 1843, 1848,
390 1870, 1875, 1880, 1886, 1892, 1900, 1908, 1916, 1923, 1933,
391 1938, 1968, 1970, 1973, 1980, 1986, 1988, 1989, 1990, 1993,
392 1995, 1996, 1999, 2004, 2011, 2018, 2020, 2024
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",
435"ConstraintRangeSpec","ConstraintSpec","ConstraintValue","WithComponents","WithComponentsList",
436"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
437"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
438"ComponentIdList","optMarker","Marker","UniverationDefinition","UniverationList",
Lev Walkinc603f102005-01-23 09:51:44 +0000439"UniverationElement","SignedNumber","optTag","Tag","TagTypeValue","TagClass",
440"TagPlicit","TypeRefName","ObjectClassReference","optIdentifier","Identifier", NULL
Lev Walkin1004aa92004-09-08 00:28:11 +0000441};
442#endif
443
444static const short yyr1[] = { 0,
Lev Walkinc603f102005-01-23 09:51:44 +0000445 116, 117, 117, 118, 119, 119, 120, 120, 121, 121,
446 122, 122, 122, 123, 123, 124, 124, 125, 125, 125,
447 125, 125, 126, 126, 127, 127, 128, 128, 128, 128,
448 128, 129, 128, 128, 130, 130, 131, 131, 132, 133,
449 133, 134, 134, 134, 135, 135, 135, 136, 136, 137,
450 137, 137, 138, 139, 139, 140, 140, 141, 141, 142,
451 142, 143, 143, 143, 143, 144, 144, 145, 145, 145,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000452 145, 146, 146, 147, 147, 148, 148, 149, 149, 150,
453 150, 150, 151, 151, 152, 152, 153, 154, 154, 155,
454 155, 156, 156, 156, 157, 157, 159, 158, 160, 160,
455 161, 161, 162, 162, 162, 163, 164, 164, 164, 164,
456 164, 164, 164, 164, 164, 164, 164, 164, 165, 165,
457 165, 165, 165, 165, 166, 166, 167, 168, 169, 169,
458 170, 171, 172, 171, 171, 171, 171, 171, 171, 171,
459 171, 171, 173, 173, 174, 174, 175, 175, 175, 175,
460 175, 175, 175, 175, 175, 175, 175, 175, 176, 176,
461 176, 177, 177, 178, 178, 178, 178, 178, 178, 178,
462 178, 178, 178, 178, 178, 178, 178, 179, 179, 180,
463 180, 181, 182, 182, 183, 183, 184, 184, 185, 185,
464 185, 186, 186, 186, 186, 187, 187, 187, 187, 187,
465 187, 187, 187, 187, 188, 188, 188, 188, 189, 189,
466 190, 190, 190, 190, 190, 190, 191, 192, 192, 193,
467 193, 194, 194, 195, 195, 195, 196, 196, 197, 198,
468 199, 199, 200, 200, 201, 201, 202, 202, 203, 203,
469 204, 204, 205, 205, 206, 206, 206, 206, 206, 207,
470 207, 208, 208, 209, 210, 211, 211, 211, 211, 212,
471 212, 212, 213, 213, 214, 215, 215, 216
Lev Walkin1004aa92004-09-08 00:28:11 +0000472};
473
474static const short yyr2[] = { 0,
475 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
476 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
477 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
478 1, 0, 3, 1, 3, 2, 1, 2, 4, 1,
Lev Walkin144db9b2004-10-12 23:26:53 +0000479 3, 1, 3, 1, 3, 3, 2, 1, 3, 1,
480 3, 1, 6, 1, 1, 0, 1, 1, 3, 1,
481 1, 4, 3, 3, 6, 1, 3, 1, 3, 3,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000482 3, 1, 3, 1, 1, 0, 1, 1, 3, 3,
483 3, 1, 1, 3, 2, 1, 5, 0, 1, 1,
484 3, 2, 4, 4, 0, 1, 0, 6, 1, 2,
485 1, 1, 1, 3, 3, 3, 1, 1, 4, 4,
486 4, 6, 6, 1, 4, 4, 1, 3, 1, 3,
487 3, 3, 1, 3, 1, 3, 1, 1, 1, 1,
488 4, 3, 0, 3, 1, 1, 1, 1, 1, 1,
489 1, 1, 1, 3, 1, 2, 1, 1, 1, 1,
490 2, 2, 1, 1, 2, 2, 1, 1, 1, 1,
491 2, 1, 2, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin1004aa92004-09-08 00:28:11 +0000492 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000493 1, 1, 0, 1, 1, 4, 3, 4, 1, 3,
494 5, 1, 3, 3, 3, 4, 3, 1, 3, 3,
495 3, 3, 1, 1, 1, 2, 2, 3, 1, 1,
496 1, 1, 1, 1, 1, 1, 5, 1, 3, 1,
497 3, 0, 1, 1, 1, 1, 1, 1, 3, 4,
498 1, 3, 2, 3, 1, 3, 0, 1, 1, 2,
499 2, 3, 1, 3, 1, 4, 4, 1, 1, 1,
500 1, 0, 1, 2, 4, 0, 1, 1, 1, 0,
501 1, 1, 1, 1, 1, 0, 1, 1
Lev Walkin1004aa92004-09-08 00:28:11 +0000502};
503
504static const short yydefact[] = { 0,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000505 263, 264, 1, 2, 5, 3, 0, 0, 6, 268,
Lev Walkin1004aa92004-09-08 00:28:11 +0000506 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
507 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000508 18, 21, 19, 0, 17, 12, 23, 164, 0, 0,
509 165, 166, 167, 0, 168, 169, 177, 170, 171, 172,
510 173, 174, 175, 176, 0, 24, 25, 27, 28, 31,
Lev Walkin144db9b2004-10-12 23:26:53 +0000511 29, 30, 34, 0, 0, 32, 0, 47, 0, 48,
512 50, 52, 36, 0, 37, 0, 40, 42, 44, 4,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000513 26, 252, 119, 265, 0, 147, 0, 0, 160, 154,
514 158, 159, 148, 0, 0, 149, 153, 157, 0, 0,
515 54, 55, 150, 123, 0, 33, 46, 45, 0, 0,
516 35, 38, 0, 0, 0, 0, 256, 64, 63, 0,
517 253, 260, 0, 161, 156, 155, 152, 151, 0, 66,
Lev Walkinc603f102005-01-23 09:51:44 +0000518 0, 68, 0, 0, 0, 49, 51, 5, 41, 43,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000519 0, 258, 259, 257, 0, 119, 265, 114, 0, 0,
520 183, 183, 62, 183, 117, 162, 150, 107, 108, 0,
521 262, 261, 254, 120, 122, 0, 0, 0, 0, 56,
522 129, 130, 124, 125, 127, 121, 138, 140, 139, 250,
523 251, 136, 135, 137, 133, 131, 142, 141, 0, 143,
524 39, 0, 90, 252, 128, 0, 0, 0, 0, 0,
525 76, 0, 0, 184, 185, 76, 0, 106, 0, 163,
526 252, 252, 67, 71, 70, 69, 214, 211, 210, 0,
527 209, 212, 0, 60, 0, 0, 0, 57, 58, 61,
528 192, 0, 198, 204, 203, 227, 228, 213, 216, 215,
529 0, 0, 0, 0, 95, 0, 0, 239, 88, 88,
530 92, 238, 0, 255, 0, 103, 0, 83, 86, 252,
531 118, 0, 0, 0, 77, 78, 82, 252, 0, 189,
532 266, 0, 0, 266, 249, 241, 0, 243, 248, 245,
533 0, 72, 74, 75, 65, 205, 0, 0, 0, 0,
534 0, 53, 0, 180, 181, 178, 179, 0, 0, 182,
535 0, 0, 0, 0, 126, 145, 134, 144, 132, 0,
536 87, 96, 91, 240, 89, 237, 237, 115, 0, 109,
537 0, 85, 0, 252, 110, 0, 237, 187, 0, 252,
538 267, 0, 111, 252, 242, 0, 0, 116, 252, 206,
539 207, 202, 200, 0, 229, 197, 59, 193, 194, 195,
540 0, 201, 199, 0, 0, 231, 146, 0, 93, 94,
541 104, 105, 143, 84, 186, 81, 79, 80, 190, 0,
542 188, 0, 244, 0, 0, 73, 208, 220, 0, 218,
543 183, 196, 0, 233, 235, 230, 0, 97, 0, 112,
544 113, 247, 246, 217, 0, 222, 234, 0, 232, 0,
545 191, 219, 225, 226, 224, 221, 223, 236, 101, 0,
546 99, 102, 98, 100, 0, 0, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000547};
548
Lev Walkinc8092cb2005-02-18 16:34:21 +0000549static const short yydefgoto[] = { 415,
Lev Walkin1004aa92004-09-08 00:28:11 +0000550 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
551 56, 57, 106, 58, 74, 75, 76, 77, 59, 69,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000552 70, 60, 100, 227, 228, 229, 61, 129, 130, 281,
553 282, 264, 265, 266, 257, 258, 118, 316, 192, 193,
554 311, 312, 400, 410, 411, 267, 283, 154, 155, 173,
555 174, 194, 195, 62, 186, 242, 187, 307, 156, 103,
556 158, 159, 298, 299, 301, 203, 204, 205, 269, 270,
557 231, 288, 232, 233, 234, 379, 380, 406, 407, 235,
558 236, 237, 355, 356, 384, 251, 252, 210, 277, 278,
559 238, 253, 121, 122, 145, 163, 239, 104, 330, 240
Lev Walkin1004aa92004-09-08 00:28:11 +0000560};
561
Lev Walkinc8092cb2005-02-18 16:34:21 +0000562static const short yypact[] = { 148,
563-32768,-32768, 148,-32768, -58,-32768, 45, 43,-32768,-32768,
564-32768,-32768, 53,-32768, -13, 144,-32768,-32768, 97, 68,
565 59, 83, 84, 95, 189, 144,-32768, 89,-32768,-32768,
566-32768,-32768,-32768, 180,-32768,-32768, 367,-32768, 191, 35,
567-32768,-32768,-32768, 201,-32768,-32768,-32768,-32768,-32768,-32768,
568-32768,-32768,-32768,-32768, 167, 367,-32768,-32768,-32768,-32768,
569-32768,-32768,-32768, 257, 581,-32768, 108,-32768, 69,-32768,
570 114,-32768,-32768, 16,-32768, -23,-32768, 122,-32768,-32768,
571-32768, -10, 133,-32768, 160,-32768, 165, 181,-32768,-32768,
572-32768,-32768,-32768, 214, 190,-32768,-32768,-32768, 598, 271,
573-32768,-32768,-32768, 171, 277,-32768,-32768,-32768, 231, 183,
574-32768,-32768, 148, 231, 194, 182, 1,-32768,-32768, 444,
575-32768, 28, 231,-32768,-32768,-32768,-32768,-32768, 82,-32768,
576 185, 186, 196, 350, 163,-32768,-32768, -58,-32768,-32768,
577 170,-32768,-32768,-32768, 291, -8, 199, 275, 208, 245,
578 -17, 75,-32768, -55,-32768,-32768, 213,-32768,-32768, 215,
579-32768,-32768,-32768,-32768,-32768, 314, 598, 313, 231, 297,
580-32768,-32768, 212,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
581-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 216, 217,
582-32768, 127,-32768, 27,-32768, 220, 303, 7, 221, 226,
583 51, 102, 268,-32768, 233, 51, 273,-32768, 48,-32768,
584 6, 225,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -12,
585-32768,-32768, 315,-32768, 148, 102, 240, 238,-32768, 272,
586 253, 251, -12,-32768,-32768, 254,-32768,-32768,-32768,-32768,
587 170, 355, 313, 163, 270, 170, 163,-32768, 279, 279,
588-32768,-32768, 521,-32768, 313, 263, 153,-32768,-32768, 225,
589-32768, 102, 306, 276, 274,-32768,-32768, 225, 278, 130,
590 313, 102, 281, 313,-32768,-32768, 154,-32768,-32768, 282,
591 155,-32768,-32768,-32768,-32768, 269, 285, 210, 286, 289,
592 288,-32768, 297,-32768,-32768,-32768,-32768, 102, 102,-32768,
593 102, 102, 280, 283,-32768,-32768, 391,-32768,-32768, 316,
594-32768,-32768,-32768,-32768,-32768, 9, 9,-32768, 343,-32768,
595 7,-32768, 298, 225,-32768, 51, 9,-32768, 295, 225,
596-32768, 300,-32768, 225,-32768, 56, 343,-32768, 6,-32768,
597 296,-32768,-32768, 30,-32768,-32768,-32768,-32768,-32768,-32768,
598 301,-32768,-32768, 11, 168,-32768,-32768, 307,-32768,-32768,
599-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 304, 521,
600-32768, 521,-32768, 305, 308,-32768,-32768,-32768, 169,-32768,
601 -55,-32768, 313, 302,-32768,-32768, 283,-32768, 102,-32768,
602-32768,-32768,-32768,-32768, 30, 24, 302, 313,-32768, 125,
603 272,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 22,
604-32768,-32768,-32768,-32768, 418, 419,-32768
Lev Walkin1004aa92004-09-08 00:28:11 +0000605};
606
607static const short yypgoto[] = {-32768,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000608-32768, 417, 284,-32768,-32768, 410,-32768,-32768, 398,-32768,
609-32768, 369,-32768,-32768,-32768, 353,-32768, 318,-32768,-32768,
610 319,-32768, 364,-32768,-32768, 137,-32768,-32768, 267,-32768,
611 96, 230,-32768, 111,-32768, 117,-32768, 192,-32768, 193,
612-32768,-32768,-32768,-32768, 33, -185, -79, -300, -53,-32768,
613 203, -186, -124,-32768, -165,-32768, -246,-32768, -48, -119,
614-32768, 18,-32768,-32768,-32768, -147,-32768,-32768, -178, -166,
615 -200, 207,-32768, -259,-32768,-32768, 50,-32768,-32768,-32768,
616-32768,-32768,-32768, 60, 63, -295,-32768,-32768,-32768, 112,
617 -126, -80,-32768,-32768,-32768,-32768, 31,-32768, 175, -7
Lev Walkin1004aa92004-09-08 00:28:11 +0000618};
619
620
Lev Walkinc8092cb2005-02-18 16:34:21 +0000621#define YYLAST 689
Lev Walkin1004aa92004-09-08 00:28:11 +0000622
623
624static const short yytable[] = { 15,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000625 157, 120, 119, 230, 207, 15, 208, 250, 188, 175,
626 101, 101, 259, 10, 10, 102, 102, 116, 10, 142,
627 359, 360, 113, 10, 200, 409, 1, 2, 343, 65,
628 5, 368, 72, 5, 171, 172, 79, 10, 403, 171,
629 172, 247, 10, 353, 7, 1, 2, 291, 65, 202,
630 131, 67, 10, 11, 63, 10, 180, 181, 10, 247,
631 10, 11, 200, 10, 180, 181, 79, 64, 161, 390,
632 71, 391, 361, 63, 78, 143, 16, 248, 309, 162,
633 263, 314, 279, 323, 114, 201, 64, 202, 286, 144,
634 374, 19, 404, 332, -263, 248, 405, 348, 349, 287,
635 350, 72, 123, 117, 78, 28, 79, 217, 256, 10,
636 180, 181, 1, 2, 249, 165, 175, 188, 131, 117,
637 188, 383, 111, 351, 29, 413, 230, 190, 409, 132,
638 -237, 378, 285, 157, -237, 259, 32, 171, 172, 71,
639 117, 68, 30, 138, 78, 261, 218, 219, 12, 275,
640 160, 276, 256, 164, 200, 20, 17, 275, 1, 2,
641 214, 216, 220, 21, 176, 189, 31, 177, 178, 179,
642 10, 180, 181, 1, 2, 108, 109, 206, 33, 202,
643 322, 221, 171, 172, 22, 166, 23, 222, 327, 167,
644 260, 34, 362, 268, 36, 24, 223, 132, 268, 215,
645 37, 280, 66, 284, 225, 80, 226, 182, 10, 279,
646 375, 1, 2, 412, 107, 217, 110, 10, 180, 181,
647 1, 2, 401, 412, 115, 183, 294, 295, 296, 297,
648 245, 83, 84, 396, 246, 308, 190, 329, 10, 190,
649 124, 1, 2, 123, 366, 125, 73, 318, 184, 370,
650 157, 126, 157, 372, 218, 290, 320, 335, 338, 82,
651 321, 336, 339, 331, 127, 185, 331, 83, 84, 342,
652 128, 386, 394, 133, 189, 387, 395, 189, 85, 135,
653 86, 134, 87, 160, 141, 217, 137, 10, 180, 181,
654 1, 2, 88, 168, 169, 222, 89, 140, 170, 196,
655 90, -264, 217, 91, 10, 180, 181, 1, 2, 197,
656 198, 363, 199, 260, 92, 209, 212, 211, 268, 93,
657 10, 94, 241, 95, 218, 244, 243, 255, 280, 363,
658 262, 284, 96, 97, 254, 271, 381, 272, 117, 352,
659 274, 218, 219, 292, 289, 293, 385, 98, 300, 189,
660 10, 180, 181, 1, 2, 302, 304, 220, 306, 99,
661 1, 2, 171, 172, 310, 222, 315, 189, 294, 295,
662 296, 297, 319, 324, 10, 385, 221, 1, 2, 325,
663 340, 326, 222, 328, 333, 341, 337, 381, 344, 38,
664 408, 223, 345, 346, 357, 354, 369, 358, 224, 225,
665 160, 226, 160, 365, 39, 371, 382, 377, 40, 388,
666 392, 389, 398, 393, 41, 42, 43, 416, 417, 6,
667 44, 191, 18, 35, 81, 45, 112, 136, 105, 347,
668 46, 139, 47, 213, 376, 273, 367, 364, 313, 303,
669 48, 317, 414, 305, 402, 397, 399, 373, 334, 49,
670 0, 50, 0, 0, 146, 147, 51, 0, 52, 53,
671 54, 148, 0, 0, 0, 85, 38, 86, 0, 87,
672 149, 0, 0, 0, 0, 0, 0, 0, 0, 88,
673 0, 0, 0, 89, 0, 0, 0, 90, 0, 0,
674 91, 41, 42, 43, 0, 0, 0, 0, 0, 150,
675 0, 92, 45, 0, 0, 0, 93, 46, 94, 47,
676 95, 0, 0, 0, 0, 0, 0, 48, 0, 96,
677 97, 151, 152, 0, 0, 0, 49, 0, 50, 0,
678 153, 146, 147, 51, 98, 52, 53, 54, 148, 0,
679 0, 0, 85, 38, 86, 0, 87, 149, 0, 0,
680 0, 0, 0, 0, 0, 0, 88, 0, 0, 0,
681 89, 0, 0, 0, 90, 0, 0, 91, 41, 42,
682 43, 0, 0, 0, 0, 0, 150, 0, 92, 45,
683 0, 0, 0, 93, 46, 94, 47, 95, 0, 0,
684 0, 83, 84, 0, 48, 0, 96, 97, 151, 152,
685 0, 0, 85, 49, 86, 50, 87, 0, 1, 2,
686 51, 98, 52, 53, 54, 0, 88, 0, 0, 85,
687 89, 86, 0, 87, 90, 0, 0, 91, 0, 0,
688 0, 0, 0, 88, 0, 0, 0, 89, 92, 0,
689 0, 90, 0, 93, 91, 94, 0, 95, 0, 0,
690 0, 0, 0, 0, 0, 92, 96, 97, 0, 0,
691 93, 0, 94, 0, 95, 0, 0, 0, 0, 0,
692 0, 98, 0, 96, 97, 0, 0, 0, 0, 0,
693 0, 0, 0, 0, 0, 0, 0, 0, 98
Lev Walkin1004aa92004-09-08 00:28:11 +0000694};
695
696static const short yycheck[] = { 7,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000697 120, 82, 82, 170, 152, 13, 154, 194, 135, 134,
698 64, 65, 198, 8, 8, 64, 65, 28, 8, 19,
699 316, 317, 46, 8, 80, 4, 11, 12, 288, 37,
700 0, 327, 40, 3, 13, 14, 44, 8, 15, 13,
701 14, 33, 8, 303, 103, 11, 12, 226, 56, 105,
702 99, 17, 8, 9, 37, 8, 9, 10, 8, 33,
703 8, 9, 80, 8, 9, 10, 74, 37, 41, 370,
704 40, 372, 319, 56, 44, 75, 34, 69, 244, 52,
705 30, 247, 209, 262, 108, 103, 56, 105, 101, 89,
706 337, 105, 69, 272, 103, 69, 73, 298, 299, 112,
707 301, 109, 111, 114, 74, 9, 114, 6, 102, 8,
708 9, 10, 11, 12, 194, 123, 241, 244, 167, 114,
709 247, 111, 107, 302, 57, 104, 293, 135, 4, 99,
710 104, 102, 212, 253, 108, 321, 53, 13, 14, 109,
711 114, 107, 84, 113, 114, 199, 45, 46, 104, 102,
712 120, 104, 102, 123, 80, 12, 104, 102, 11, 12,
713 168, 169, 61, 20, 134, 135, 84, 5, 6, 7,
714 8, 9, 10, 11, 12, 107, 108, 103, 84, 105,
715 260, 80, 13, 14, 41, 104, 43, 86, 268, 108,
716 198, 3, 319, 201, 106, 52, 95, 167, 206, 169,
717 21, 209, 12, 211, 103, 39, 105, 45, 8, 336,
718 337, 11, 12, 400, 107, 6, 103, 8, 9, 10,
719 11, 12, 389, 410, 103, 63, 97, 98, 99, 100,
720 104, 11, 12, 381, 108, 243, 244, 108, 8, 247,
721 81, 11, 12, 111, 324, 81, 46, 255, 86, 330,
722 370, 71, 372, 334, 45, 225, 104, 104, 104, 3,
723 108, 108, 108, 271, 51, 103, 274, 11, 12, 60,
724 81, 104, 104, 3, 244, 108, 108, 247, 22, 3,
725 24, 111, 26, 253, 103, 6, 104, 8, 9, 10,
726 11, 12, 36, 109, 109, 86, 40, 104, 103, 9,
727 44, 103, 6, 47, 8, 9, 10, 11, 12, 35,
728 103, 319, 68, 321, 58, 103, 3, 103, 326, 63,
729 8, 65, 111, 67, 45, 109, 111, 25, 336, 337,
730 105, 339, 76, 77, 115, 68, 344, 105, 114, 60,
731 68, 45, 46, 104, 30, 108, 354, 91, 96, 319,
732 8, 9, 10, 11, 12, 105, 103, 61, 4, 103,
733 11, 12, 13, 14, 95, 86, 88, 337, 97, 98,
734 99, 100, 110, 68, 8, 383, 80, 11, 12, 104,
735 112, 108, 86, 106, 104, 101, 105, 395, 103, 23,
736 398, 95, 104, 106, 4, 113, 102, 82, 102, 103,
737 370, 105, 372, 106, 38, 106, 106, 112, 42, 103,
738 106, 108, 111, 106, 48, 49, 50, 0, 0, 3,
739 54, 138, 13, 26, 56, 59, 74, 109, 65, 293,
740 64, 114, 66, 167, 339, 206, 326, 321, 246, 233,
741 74, 250, 410, 241, 395, 383, 387, 336, 274, 83,
742 -1, 85, -1, -1, 11, 12, 90, -1, 92, 93,
743 94, 18, -1, -1, -1, 22, 23, 24, -1, 26,
744 27, -1, -1, -1, -1, -1, -1, -1, -1, 36,
745 -1, -1, -1, 40, -1, -1, -1, 44, -1, -1,
746 47, 48, 49, 50, -1, -1, -1, -1, -1, 56,
747 -1, 58, 59, -1, -1, -1, 63, 64, 65, 66,
748 67, -1, -1, -1, -1, -1, -1, 74, -1, 76,
749 77, 78, 79, -1, -1, -1, 83, -1, 85, -1,
750 87, 11, 12, 90, 91, 92, 93, 94, 18, -1,
751 -1, -1, 22, 23, 24, -1, 26, 27, -1, -1,
752 -1, -1, -1, -1, -1, -1, 36, -1, -1, -1,
753 40, -1, -1, -1, 44, -1, -1, 47, 48, 49,
754 50, -1, -1, -1, -1, -1, 56, -1, 58, 59,
755 -1, -1, -1, 63, 64, 65, 66, 67, -1, -1,
756 -1, 11, 12, -1, 74, -1, 76, 77, 78, 79,
757 -1, -1, 22, 83, 24, 85, 26, -1, 11, 12,
758 90, 91, 92, 93, 94, -1, 36, -1, -1, 22,
759 40, 24, -1, 26, 44, -1, -1, 47, -1, -1,
760 -1, -1, -1, 36, -1, -1, -1, 40, 58, -1,
761 -1, 44, -1, 63, 47, 65, -1, 67, -1, -1,
762 -1, -1, -1, -1, -1, 58, 76, 77, -1, -1,
763 63, -1, 65, -1, 67, -1, -1, -1, -1, -1,
764 -1, 91, -1, 76, 77, -1, -1, -1, -1, -1,
765 -1, -1, -1, -1, -1, -1, -1, -1, 91
Lev Walkin1004aa92004-09-08 00:28:11 +0000766};
767/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
768#line 3 "/usr/share/bison.simple"
769/* This file comes from bison-1.28. */
770
771/* Skeleton output parser for bison,
772 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
773
774 This program is free software; you can redistribute it and/or modify
775 it under the terms of the GNU General Public License as published by
776 the Free Software Foundation; either version 2, or (at your option)
777 any later version.
778
779 This program is distributed in the hope that it will be useful,
780 but WITHOUT ANY WARRANTY; without even the implied warranty of
781 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
782 GNU General Public License for more details.
783
784 You should have received a copy of the GNU General Public License
785 along with this program; if not, write to the Free Software
786 Foundation, Inc., 59 Temple Place - Suite 330,
787 Boston, MA 02111-1307, USA. */
788
789/* As a special exception, when this file is copied by Bison into a
790 Bison output file, you may use that output file without restriction.
791 This special exception was added by the Free Software Foundation
792 in version 1.24 of Bison. */
793
794/* This is the parser code that is written into each bison parser
795 when the %semantic_parser declaration is not specified in the grammar.
796 It was written by Richard Stallman by simplifying the hairy parser
797 used when %semantic_parser is specified. */
798
799#ifndef YYSTACK_USE_ALLOCA
800#ifdef alloca
801#define YYSTACK_USE_ALLOCA
802#else /* alloca not defined */
803#ifdef __GNUC__
804#define YYSTACK_USE_ALLOCA
805#define alloca __builtin_alloca
806#else /* not GNU C. */
807#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
808#define YYSTACK_USE_ALLOCA
809#include <alloca.h>
810#else /* not sparc */
811/* We think this test detects Watcom and Microsoft C. */
812/* This used to test MSDOS, but that is a bad idea
813 since that symbol is in the user namespace. */
814#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
815#if 0 /* No need for malloc.h, which pollutes the namespace;
816 instead, just don't use alloca. */
817#include <malloc.h>
818#endif
819#else /* not MSDOS, or __TURBOC__ */
820#if defined(_AIX)
821/* I don't know what this was needed for, but it pollutes the namespace.
822 So I turned it off. rms, 2 May 1997. */
823/* #include <malloc.h> */
824 #pragma alloca
825#define YYSTACK_USE_ALLOCA
826#else /* not MSDOS, or __TURBOC__, or _AIX */
827#if 0
828#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
829 and on HPUX 10. Eventually we can turn this on. */
830#define YYSTACK_USE_ALLOCA
831#define alloca __builtin_alloca
832#endif /* __hpux */
833#endif
834#endif /* not _AIX */
835#endif /* not MSDOS, or __TURBOC__ */
836#endif /* not sparc */
837#endif /* not GNU C */
838#endif /* alloca not defined */
839#endif /* YYSTACK_USE_ALLOCA not defined */
840
841#ifdef YYSTACK_USE_ALLOCA
842#define YYSTACK_ALLOC alloca
Lev Walkinf15320b2004-06-03 03:38:44 +0000843#else
Lev Walkin1004aa92004-09-08 00:28:11 +0000844#define YYSTACK_ALLOC malloc
Lev Walkinf15320b2004-06-03 03:38:44 +0000845#endif
846
Lev Walkin1004aa92004-09-08 00:28:11 +0000847/* Note: there must be only one dollar sign in this file.
848 It is replaced by the list of actions, each action
849 as one case of the switch. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000850
851#define yyerrok (yyerrstatus = 0)
852#define yyclearin (yychar = YYEMPTY)
853#define YYEMPTY -2
854#define YYEOF 0
855#define YYACCEPT goto yyacceptlab
Lev Walkin1004aa92004-09-08 00:28:11 +0000856#define YYABORT goto yyabortlab
Lev Walkinf15320b2004-06-03 03:38:44 +0000857#define YYERROR goto yyerrlab1
Lev Walkin1004aa92004-09-08 00:28:11 +0000858/* Like YYERROR except do call yyerror.
859 This remains here temporarily to ease the
860 transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +0000861 Once GCC version 2 has supplanted version 1, this can go. */
862#define YYFAIL goto yyerrlab
863#define YYRECOVERING() (!!yyerrstatus)
Lev Walkin1004aa92004-09-08 00:28:11 +0000864#define YYBACKUP(token, value) \
Lev Walkinf15320b2004-06-03 03:38:44 +0000865do \
866 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin1004aa92004-09-08 00:28:11 +0000867 { yychar = (token), yylval = (value); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000868 yychar1 = YYTRANSLATE (yychar); \
869 YYPOPSTACK; \
870 goto yybackup; \
871 } \
872 else \
Lev Walkin1004aa92004-09-08 00:28:11 +0000873 { yyerror ("syntax error: cannot back up"); YYERROR; } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000874while (0)
875
876#define YYTERROR 1
877#define YYERRCODE 256
878
Lev Walkin1004aa92004-09-08 00:28:11 +0000879#ifndef YYPURE
880#define YYLEX yylex()
Lev Walkinf15320b2004-06-03 03:38:44 +0000881#endif
882
Lev Walkin1004aa92004-09-08 00:28:11 +0000883#ifdef YYPURE
884#ifdef YYLSP_NEEDED
885#ifdef YYLEX_PARAM
886#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
887#else
888#define YYLEX yylex(&yylval, &yylloc)
889#endif
890#else /* not YYLSP_NEEDED */
891#ifdef YYLEX_PARAM
892#define YYLEX yylex(&yylval, YYLEX_PARAM)
893#else
894#define YYLEX yylex(&yylval)
895#endif
896#endif /* not YYLSP_NEEDED */
897#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000898
Lev Walkin1004aa92004-09-08 00:28:11 +0000899/* If nonreentrant, generate the variables here */
Lev Walkinf15320b2004-06-03 03:38:44 +0000900
Lev Walkin1004aa92004-09-08 00:28:11 +0000901#ifndef YYPURE
Lev Walkinf15320b2004-06-03 03:38:44 +0000902
Lev Walkin1004aa92004-09-08 00:28:11 +0000903int yychar; /* the lookahead symbol */
904YYSTYPE yylval; /* the semantic value of the */
905 /* lookahead symbol */
Lev Walkinf15320b2004-06-03 03:38:44 +0000906
Lev Walkin1004aa92004-09-08 00:28:11 +0000907#ifdef YYLSP_NEEDED
908YYLTYPE yylloc; /* location data for the lookahead */
909 /* symbol */
910#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000911
Lev Walkin1004aa92004-09-08 00:28:11 +0000912int yynerrs; /* number of parse errors so far */
913#endif /* not YYPURE */
914
915#if YYDEBUG != 0
916int yydebug; /* nonzero means print parse trace */
917/* Since this is uninitialized, it does not stop multiple parsers
918 from coexisting. */
919#endif
920
921/* YYINITDEPTH indicates the initial size of the parser's stacks */
922
Lev Walkinf15320b2004-06-03 03:38:44 +0000923#ifndef YYINITDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000924#define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +0000925#endif
926
Lev Walkin1004aa92004-09-08 00:28:11 +0000927/* YYMAXDEPTH is the maximum size the stacks can grow to
928 (effective only if the built-in stack extension method is used). */
Lev Walkinf15320b2004-06-03 03:38:44 +0000929
930#if YYMAXDEPTH == 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000931#undef YYMAXDEPTH
Lev Walkinf15320b2004-06-03 03:38:44 +0000932#endif
933
934#ifndef YYMAXDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000935#define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +0000936#endif
937
Lev Walkin1004aa92004-09-08 00:28:11 +0000938/* Define __yy_memcpy. Note that the size argument
939 should be passed with type unsigned int, because that is what the non-GCC
940 definitions require. With GCC, __builtin_memcpy takes an arg
941 of type size_t, but it can handle unsigned int. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000942
Lev Walkin1004aa92004-09-08 00:28:11 +0000943#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
944#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
945#else /* not GNU C or C++ */
946#ifndef __cplusplus
Lev Walkinf15320b2004-06-03 03:38:44 +0000947
Lev Walkin1004aa92004-09-08 00:28:11 +0000948/* This is the most reliable way to avoid incompatibilities
949 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +0000950static void
Lev Walkin1004aa92004-09-08 00:28:11 +0000951__yy_memcpy (to, from, count)
952 char *to;
953 char *from;
954 unsigned int count;
Lev Walkin459ab022004-09-07 10:39:09 +0000955{
Lev Walkin1004aa92004-09-08 00:28:11 +0000956 register char *f = from;
957 register char *t = to;
958 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +0000959
Lev Walkin1004aa92004-09-08 00:28:11 +0000960 while (i-- > 0)
961 *t++ = *f++;
Lev Walkin459ab022004-09-07 10:39:09 +0000962}
Lev Walkin459ab022004-09-07 10:39:09 +0000963
Lev Walkin1004aa92004-09-08 00:28:11 +0000964#else /* __cplusplus */
Lev Walkin459ab022004-09-07 10:39:09 +0000965
Lev Walkin1004aa92004-09-08 00:28:11 +0000966/* This is the most reliable way to avoid incompatibilities
967 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +0000968static void
Lev Walkin1004aa92004-09-08 00:28:11 +0000969__yy_memcpy (char *to, char *from, unsigned int count)
Lev Walkin459ab022004-09-07 10:39:09 +0000970{
Lev Walkin1004aa92004-09-08 00:28:11 +0000971 register char *t = to;
972 register char *f = from;
973 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +0000974
Lev Walkin1004aa92004-09-08 00:28:11 +0000975 while (i-- > 0)
976 *t++ = *f++;
Lev Walkin609ccbb2004-09-04 04:49:21 +0000977}
Lev Walkin609ccbb2004-09-04 04:49:21 +0000978
Lev Walkin1004aa92004-09-08 00:28:11 +0000979#endif
980#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000981
Lev Walkin1004aa92004-09-08 00:28:11 +0000982#line 217 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +0000983
984/* The user can define YYPARSE_PARAM as the name of an argument to be passed
985 into yyparse. The argument should have type void *.
986 It should actually point to an object.
987 Grammar actions can access the variable by casting it
988 to the proper pointer type. */
989
990#ifdef YYPARSE_PARAM
Lev Walkin1004aa92004-09-08 00:28:11 +0000991#ifdef __cplusplus
992#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
993#define YYPARSE_PARAM_DECL
994#else /* not __cplusplus */
995#define YYPARSE_PARAM_ARG YYPARSE_PARAM
996#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
997#endif /* not __cplusplus */
998#else /* not YYPARSE_PARAM */
999#define YYPARSE_PARAM_ARG
1000#define YYPARSE_PARAM_DECL
1001#endif /* not YYPARSE_PARAM */
Lev Walkinf15320b2004-06-03 03:38:44 +00001002
1003/* Prevent warning if -Wstrict-prototypes. */
1004#ifdef __GNUC__
Lev Walkin1004aa92004-09-08 00:28:11 +00001005#ifdef YYPARSE_PARAM
Lev Walkinf15320b2004-06-03 03:38:44 +00001006int yyparse (void *);
Lev Walkin1004aa92004-09-08 00:28:11 +00001007#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001008int yyparse (void);
Lev Walkin1004aa92004-09-08 00:28:11 +00001009#endif
Lev Walkinceb20e72004-09-05 10:40:41 +00001010#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001011
Lev Walkinf15320b2004-06-03 03:38:44 +00001012int
Lev Walkin1004aa92004-09-08 00:28:11 +00001013yyparse(YYPARSE_PARAM_ARG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001014 YYPARSE_PARAM_DECL
1015{
1016 register int yystate;
1017 register int yyn;
1018 register short *yyssp;
1019 register YYSTYPE *yyvsp;
Lev Walkin1004aa92004-09-08 00:28:11 +00001020 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1021 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
Lev Walkinf15320b2004-06-03 03:38:44 +00001022
Lev Walkin1004aa92004-09-08 00:28:11 +00001023 short yyssa[YYINITDEPTH]; /* the state stack */
1024 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
Lev Walkinf15320b2004-06-03 03:38:44 +00001025
Lev Walkin1004aa92004-09-08 00:28:11 +00001026 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1027 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
Lev Walkinf15320b2004-06-03 03:38:44 +00001028
Lev Walkin1004aa92004-09-08 00:28:11 +00001029#ifdef YYLSP_NEEDED
1030 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1031 YYLTYPE *yyls = yylsa;
1032 YYLTYPE *yylsp;
1033
1034#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1035#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001036#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkin1004aa92004-09-08 00:28:11 +00001037#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001038
Lev Walkin1004aa92004-09-08 00:28:11 +00001039 int yystacksize = YYINITDEPTH;
1040 int yyfree_stacks = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001041
Lev Walkin1004aa92004-09-08 00:28:11 +00001042#ifdef YYPURE
1043 int yychar;
1044 YYSTYPE yylval;
1045 int yynerrs;
1046#ifdef YYLSP_NEEDED
1047 YYLTYPE yylloc;
1048#endif
1049#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001050
Lev Walkin1004aa92004-09-08 00:28:11 +00001051 YYSTYPE yyval; /* the variable used to return */
1052 /* semantic values from the action */
1053 /* routines */
Lev Walkinf15320b2004-06-03 03:38:44 +00001054
1055 int yylen;
1056
Lev Walkin1004aa92004-09-08 00:28:11 +00001057#if YYDEBUG != 0
1058 if (yydebug)
1059 fprintf(stderr, "Starting parse\n");
1060#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001061
1062 yystate = 0;
1063 yyerrstatus = 0;
1064 yynerrs = 0;
1065 yychar = YYEMPTY; /* Cause a token to be read. */
1066
1067 /* Initialize stack pointers.
1068 Waste one element of value and location stack
1069 so that they stay on the same level as the state stack.
1070 The wasted elements are never initialized. */
1071
Lev Walkin1004aa92004-09-08 00:28:11 +00001072 yyssp = yyss - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001073 yyvsp = yyvs;
Lev Walkin1004aa92004-09-08 00:28:11 +00001074#ifdef YYLSP_NEEDED
1075 yylsp = yyls;
1076#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001077
Lev Walkin1004aa92004-09-08 00:28:11 +00001078/* Push a new state, which is found in yystate . */
1079/* In all cases, when you get here, the value and location stacks
1080 have just been pushed. so pushing a state here evens the stacks. */
1081yynewstate:
Lev Walkinf15320b2004-06-03 03:38:44 +00001082
Lev Walkin1004aa92004-09-08 00:28:11 +00001083 *++yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001084
1085 if (yyssp >= yyss + yystacksize - 1)
1086 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001087 /* Give user a chance to reallocate the stack */
1088 /* Use copies of these so that the &'s don't force the real ones into memory. */
1089 YYSTYPE *yyvs1 = yyvs;
1090 short *yyss1 = yyss;
1091#ifdef YYLSP_NEEDED
1092 YYLTYPE *yyls1 = yyls;
1093#endif
1094
Lev Walkinf15320b2004-06-03 03:38:44 +00001095 /* Get the current used size of the three stacks, in elements. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001096 int size = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001097
1098#ifdef yyoverflow
Lev Walkin1004aa92004-09-08 00:28:11 +00001099 /* Each stack pointer address is followed by the size of
1100 the data in use in that stack, in bytes. */
1101#ifdef YYLSP_NEEDED
1102 /* This used to be a conditional around just the two extra args,
1103 but that might be undefined if yyoverflow is a macro. */
1104 yyoverflow("parser stack overflow",
1105 &yyss1, size * sizeof (*yyssp),
1106 &yyvs1, size * sizeof (*yyvsp),
1107 &yyls1, size * sizeof (*yylsp),
1108 &yystacksize);
1109#else
1110 yyoverflow("parser stack overflow",
1111 &yyss1, size * sizeof (*yyssp),
1112 &yyvs1, size * sizeof (*yyvsp),
1113 &yystacksize);
1114#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001115
Lev Walkin1004aa92004-09-08 00:28:11 +00001116 yyss = yyss1; yyvs = yyvs1;
1117#ifdef YYLSP_NEEDED
1118 yyls = yyls1;
1119#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001120#else /* no yyoverflow */
1121 /* Extend the stack our own way. */
1122 if (yystacksize >= YYMAXDEPTH)
Lev Walkin1004aa92004-09-08 00:28:11 +00001123 {
1124 yyerror("parser stack overflow");
1125 if (yyfree_stacks)
1126 {
1127 free (yyss);
1128 free (yyvs);
1129#ifdef YYLSP_NEEDED
1130 free (yyls);
1131#endif
1132 }
1133 return 2;
1134 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001135 yystacksize *= 2;
1136 if (yystacksize > YYMAXDEPTH)
1137 yystacksize = YYMAXDEPTH;
Lev Walkin1004aa92004-09-08 00:28:11 +00001138#ifndef YYSTACK_USE_ALLOCA
1139 yyfree_stacks = 1;
1140#endif
1141 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1142 __yy_memcpy ((char *)yyss, (char *)yyss1,
1143 size * (unsigned int) sizeof (*yyssp));
1144 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1145 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1146 size * (unsigned int) sizeof (*yyvsp));
1147#ifdef YYLSP_NEEDED
1148 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1149 __yy_memcpy ((char *)yyls, (char *)yyls1,
1150 size * (unsigned int) sizeof (*yylsp));
1151#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001152#endif /* no yyoverflow */
1153
Lev Walkin1004aa92004-09-08 00:28:11 +00001154 yyssp = yyss + size - 1;
1155 yyvsp = yyvs + size - 1;
1156#ifdef YYLSP_NEEDED
1157 yylsp = yyls + size - 1;
1158#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001159
Lev Walkin1004aa92004-09-08 00:28:11 +00001160#if YYDEBUG != 0
1161 if (yydebug)
1162 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1163#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001164
1165 if (yyssp >= yyss + yystacksize - 1)
1166 YYABORT;
1167 }
1168
Lev Walkin1004aa92004-09-08 00:28:11 +00001169#if YYDEBUG != 0
1170 if (yydebug)
1171 fprintf(stderr, "Entering state %d\n", yystate);
1172#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001173
1174 goto yybackup;
Lev Walkin1004aa92004-09-08 00:28:11 +00001175 yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001176
1177/* Do appropriate processing given the current state. */
1178/* Read a lookahead token if we need one and don't already have one. */
1179/* yyresume: */
1180
1181 /* First try to decide what to do without reference to lookahead token. */
1182
1183 yyn = yypact[yystate];
Lev Walkin1004aa92004-09-08 00:28:11 +00001184 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001185 goto yydefault;
1186
1187 /* Not known => get a lookahead token if don't already have one. */
1188
1189 /* yychar is either YYEMPTY or YYEOF
1190 or a valid token in external form. */
1191
1192 if (yychar == YYEMPTY)
1193 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001194#if YYDEBUG != 0
1195 if (yydebug)
1196 fprintf(stderr, "Reading a token: ");
1197#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001198 yychar = YYLEX;
1199 }
1200
Lev Walkin1004aa92004-09-08 00:28:11 +00001201 /* Convert token to internal form (in yychar1) for indexing tables with */
Lev Walkinf15320b2004-06-03 03:38:44 +00001202
Lev Walkin1004aa92004-09-08 00:28:11 +00001203 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001204 {
1205 yychar1 = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001206 yychar = YYEOF; /* Don't call YYLEX any more */
Lev Walkinf15320b2004-06-03 03:38:44 +00001207
Lev Walkin1004aa92004-09-08 00:28:11 +00001208#if YYDEBUG != 0
1209 if (yydebug)
1210 fprintf(stderr, "Now at end of input.\n");
1211#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001212 }
1213 else
1214 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001215 yychar1 = YYTRANSLATE(yychar);
Lev Walkinf15320b2004-06-03 03:38:44 +00001216
Lev Walkin1004aa92004-09-08 00:28:11 +00001217#if YYDEBUG != 0
1218 if (yydebug)
1219 {
1220 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1221 /* Give the individual parser a way to print the precise meaning
1222 of a token, for further debugging info. */
1223#ifdef YYPRINT
1224 YYPRINT (stderr, yychar, yylval);
1225#endif
1226 fprintf (stderr, ")\n");
1227 }
1228#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001229 }
1230
1231 yyn += yychar1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001232 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001233 goto yydefault;
Lev Walkin1004aa92004-09-08 00:28:11 +00001234
Lev Walkinf15320b2004-06-03 03:38:44 +00001235 yyn = yytable[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001236
1237 /* yyn is what to do for this token type in this state.
1238 Negative => reduce, -yyn is rule number.
1239 Positive => shift, yyn is new state.
1240 New state is final state => don't bother to shift,
1241 just return success.
1242 0, or most negative number => error. */
1243
1244 if (yyn < 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001245 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001246 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001247 goto yyerrlab;
1248 yyn = -yyn;
1249 goto yyreduce;
1250 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001251 else if (yyn == 0)
1252 goto yyerrlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001253
1254 if (yyn == YYFINAL)
1255 YYACCEPT;
1256
1257 /* Shift the lookahead token. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001258
1259#if YYDEBUG != 0
1260 if (yydebug)
1261 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1262#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001263
1264 /* Discard the token being shifted unless it is eof. */
1265 if (yychar != YYEOF)
1266 yychar = YYEMPTY;
1267
1268 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00001269#ifdef YYLSP_NEEDED
1270 *++yylsp = yylloc;
1271#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001272
Lev Walkin1004aa92004-09-08 00:28:11 +00001273 /* count tokens shifted since error; after three, turn off error status. */
1274 if (yyerrstatus) yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001275
1276 yystate = yyn;
1277 goto yynewstate;
1278
Lev Walkin1004aa92004-09-08 00:28:11 +00001279/* Do the default action for the current state. */
Lev Walkin459ab022004-09-07 10:39:09 +00001280yydefault:
Lev Walkin1004aa92004-09-08 00:28:11 +00001281
Lev Walkinf15320b2004-06-03 03:38:44 +00001282 yyn = yydefact[yystate];
1283 if (yyn == 0)
1284 goto yyerrlab;
1285
Lev Walkin1004aa92004-09-08 00:28:11 +00001286/* Do a reduction. yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001287yyreduce:
1288 yylen = yyr2[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001289 if (yylen > 0)
1290 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Lev Walkinf15320b2004-06-03 03:38:44 +00001291
Lev Walkin1004aa92004-09-08 00:28:11 +00001292#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00001293 if (yydebug)
1294 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001295 int i;
Lev Walkinf15320b2004-06-03 03:38:44 +00001296
Lev Walkin1004aa92004-09-08 00:28:11 +00001297 fprintf (stderr, "Reducing via rule %d (line %d), ",
1298 yyn, yyrline[yyn]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001299
1300 /* Print the symbols being reduced, and their result. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001301 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1302 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1303 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001304 }
1305#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001306
Lev Walkin1004aa92004-09-08 00:28:11 +00001307
1308 switch (yyn) {
1309
1310case 1:
Lev Walkin144db9b2004-10-12 23:26:53 +00001311#line 302 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001312{
1313 *(void **)param = yyvsp[0].a_grammar;
1314 ;
1315 break;}
1316case 2:
Lev Walkin144db9b2004-10-12 23:26:53 +00001317#line 308 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001318{
Lev Walkinf15320b2004-06-03 03:38:44 +00001319 yyval.a_grammar = asn1p_new();
1320 checkmem(yyval.a_grammar);
1321 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001322 ;
1323 break;}
1324case 3:
Lev Walkin144db9b2004-10-12 23:26:53 +00001325#line 313 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001326{
Lev Walkinf15320b2004-06-03 03:38:44 +00001327 yyval.a_grammar = yyvsp[-1].a_grammar;
1328 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001329 ;
1330 break;}
1331case 4:
Lev Walkin144db9b2004-10-12 23:26:53 +00001332#line 334 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001333{
Lev Walkinf15320b2004-06-03 03:38:44 +00001334
1335 if(yyvsp[-1].a_module) {
1336 yyval.a_module = yyvsp[-1].a_module;
1337 } else {
1338 /* There's a chance that a module is just plain empty */
1339 yyval.a_module = asn1p_module_new();
1340 }
1341 checkmem(yyval.a_module);
1342
1343 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1344 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1345 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001346 ;
1347 break;}
1348case 5:
Lev Walkin144db9b2004-10-12 23:26:53 +00001349#line 355 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001350{ yyval.a_oid = 0; ;
1351 break;}
1352case 6:
Lev Walkin144db9b2004-10-12 23:26:53 +00001353#line 356 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001354{ yyval.a_oid = yyvsp[0].a_oid; ;
1355 break;}
1356case 7:
Lev Walkin144db9b2004-10-12 23:26:53 +00001357#line 360 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001358{
Lev Walkinf15320b2004-06-03 03:38:44 +00001359 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin1004aa92004-09-08 00:28:11 +00001360 ;
1361 break;}
1362case 8:
Lev Walkin144db9b2004-10-12 23:26:53 +00001363#line 363 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001364{
Lev Walkinf15320b2004-06-03 03:38:44 +00001365 yyval.a_oid = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001366 ;
1367 break;}
1368case 9:
Lev Walkin144db9b2004-10-12 23:26:53 +00001369#line 369 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001370{
Lev Walkinf15320b2004-06-03 03:38:44 +00001371 yyval.a_oid = asn1p_oid_new();
1372 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1373 if(yyvsp[0].a_oid_arc.name)
1374 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001375 ;
1376 break;}
1377case 10:
Lev Walkin144db9b2004-10-12 23:26:53 +00001378#line 375 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001379{
Lev Walkinf15320b2004-06-03 03:38:44 +00001380 yyval.a_oid = yyvsp[-1].a_oid;
1381 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1382 if(yyvsp[0].a_oid_arc.name)
1383 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001384 ;
1385 break;}
1386case 11:
Lev Walkin144db9b2004-10-12 23:26:53 +00001387#line 384 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001388{ /* iso */
Lev Walkinf15320b2004-06-03 03:38:44 +00001389 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1390 yyval.a_oid_arc.number = -1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001391 ;
1392 break;}
1393case 12:
Lev Walkin144db9b2004-10-12 23:26:53 +00001394#line 388 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001395{ /* iso(1) */
Lev Walkinf15320b2004-06-03 03:38:44 +00001396 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1397 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001398 ;
1399 break;}
1400case 13:
Lev Walkin144db9b2004-10-12 23:26:53 +00001401#line 392 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001402{ /* 1 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001403 yyval.a_oid_arc.name = 0;
1404 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001405 ;
1406 break;}
1407case 14:
Lev Walkin144db9b2004-10-12 23:26:53 +00001408#line 402 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001409{ yyval.a_module_flags = MSF_NOFLAGS; ;
1410 break;}
1411case 15:
Lev Walkin144db9b2004-10-12 23:26:53 +00001412#line 403 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001413{
Lev Walkinf15320b2004-06-03 03:38:44 +00001414 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001415 ;
1416 break;}
1417case 16:
Lev Walkin144db9b2004-10-12 23:26:53 +00001418#line 412 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001419{
Lev Walkinf15320b2004-06-03 03:38:44 +00001420 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001421 ;
1422 break;}
1423case 17:
Lev Walkin144db9b2004-10-12 23:26:53 +00001424#line 415 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001425{
Lev Walkinf15320b2004-06-03 03:38:44 +00001426 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001427 ;
1428 break;}
1429case 18:
Lev Walkin144db9b2004-10-12 23:26:53 +00001430#line 424 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001431{
Lev Walkinf15320b2004-06-03 03:38:44 +00001432 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001433 ;
1434 break;}
1435case 19:
Lev Walkin144db9b2004-10-12 23:26:53 +00001436#line 427 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001437{
Lev Walkinf15320b2004-06-03 03:38:44 +00001438 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001439 ;
1440 break;}
1441case 20:
Lev Walkin144db9b2004-10-12 23:26:53 +00001442#line 430 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001443{
Lev Walkinf15320b2004-06-03 03:38:44 +00001444 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001445 ;
1446 break;}
1447case 21:
Lev Walkin144db9b2004-10-12 23:26:53 +00001448#line 433 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001449{
Lev Walkinf15320b2004-06-03 03:38:44 +00001450 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin1004aa92004-09-08 00:28:11 +00001451 ;
1452 break;}
1453case 22:
Lev Walkin144db9b2004-10-12 23:26:53 +00001454#line 437 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001455{
Lev Walkinf59d0752004-08-18 04:59:12 +00001456 /* X.680Amd1 specifies TAG and XER */
1457 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1458 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1459 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1460 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1461 } else {
1462 fprintf(stderr,
1463 "WARNING: %s INSTRUCTIONS at line %d: "
1464 "Unrecognized encoding reference\n",
1465 yyvsp[-1].tv_str, yylineno);
1466 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1467 }
1468 free(yyvsp[-1].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00001469 ;
1470 break;}
1471case 23:
Lev Walkin144db9b2004-10-12 23:26:53 +00001472#line 458 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001473{ yyval.a_module = 0; ;
1474 break;}
1475case 24:
Lev Walkin144db9b2004-10-12 23:26:53 +00001476#line 459 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001477{
Lev Walkinf15320b2004-06-03 03:38:44 +00001478 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001479 ;
1480 break;}
1481case 25:
Lev Walkin144db9b2004-10-12 23:26:53 +00001482#line 468 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001483{
Lev Walkinf59d0752004-08-18 04:59:12 +00001484 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001485 ;
1486 break;}
1487case 26:
Lev Walkin144db9b2004-10-12 23:26:53 +00001488#line 471 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001489{
Lev Walkinf15320b2004-06-03 03:38:44 +00001490 yyval.a_module = yyvsp[-1].a_module;
1491
Lev Walkinf59d0752004-08-18 04:59:12 +00001492 /* Behave well when one of them is skipped. */
1493 if(!(yyvsp[-1].a_module)) {
1494 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1495 break;
1496 }
1497
Lev Walkinf15320b2004-06-03 03:38:44 +00001498#ifdef MY_IMPORT
1499#error MY_IMPORT DEFINED ELSEWHERE!
1500#endif
1501#define MY_IMPORT(foo,field) do { \
Lev Walkinbc55d232004-08-13 12:31:09 +00001502 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
Lev Walkinf15320b2004-06-03 03:38:44 +00001503 TQ_ADD(&(yyval.a_module->foo), \
1504 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1505 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001506 } \
1507 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1508 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001509
1510 MY_IMPORT(imports, xp_next);
1511 MY_IMPORT(exports, xp_next);
1512 MY_IMPORT(members, next);
1513#undef MY_IMPORT
1514
Lev Walkin1004aa92004-09-08 00:28:11 +00001515 ;
1516 break;}
1517case 27:
Lev Walkin144db9b2004-10-12 23:26:53 +00001518#line 504 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001519{
Lev Walkinf15320b2004-06-03 03:38:44 +00001520 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001521 ;
1522 break;}
1523case 28:
Lev Walkin144db9b2004-10-12 23:26:53 +00001524#line 507 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001525{
Lev Walkinf15320b2004-06-03 03:38:44 +00001526 yyval.a_module = asn1p_module_new();
1527 checkmem(yyval.a_module);
1528 if(yyvsp[0].a_xports) {
1529 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1530 } else {
1531 /* "EXPORTS ALL;" ? */
1532 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001533 ;
1534 break;}
1535case 29:
Lev Walkin144db9b2004-10-12 23:26:53 +00001536#line 516 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001537{
Lev Walkinf15320b2004-06-03 03:38:44 +00001538 yyval.a_module = asn1p_module_new();
1539 checkmem(yyval.a_module);
1540 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1541 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1542 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001543 ;
1544 break;}
1545case 30:
Lev Walkin144db9b2004-10-12 23:26:53 +00001546#line 523 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001547{
Lev Walkinf59d0752004-08-18 04:59:12 +00001548 yyval.a_module = asn1p_module_new();
1549 checkmem(yyval.a_module);
1550 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1551 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1552 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001553 ;
1554 break;}
1555case 31:
Lev Walkin144db9b2004-10-12 23:26:53 +00001556#line 536 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001557{
Lev Walkinf59d0752004-08-18 04:59:12 +00001558 yyval.a_module = asn1p_module_new();
1559 checkmem(yyval.a_module);
1560 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1561 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1562 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001563 ;
1564 break;}
1565case 32:
Lev Walkin144db9b2004-10-12 23:26:53 +00001566#line 544 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001567{ asn1p_lexer_hack_push_encoding_control(); ;
1568 break;}
1569case 33:
Lev Walkin144db9b2004-10-12 23:26:53 +00001570#line 545 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001571{
Lev Walkinf59d0752004-08-18 04:59:12 +00001572 fprintf(stderr,
1573 "WARNING: ENCODING-CONTROL %s "
1574 "specification at line %d ignored\n",
1575 yyvsp[-1].tv_str, yylineno);
1576 free(yyvsp[-1].tv_str);
1577 yyval.a_module = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001578 ;
1579 break;}
1580case 34:
Lev Walkin144db9b2004-10-12 23:26:53 +00001581#line 557 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001582{
Lev Walkinf15320b2004-06-03 03:38:44 +00001583 return yyerror(
1584 "Attempt to redefine a standard basic type, "
1585 "use -ftypesXY to switch back "
1586 "to older version of ASN.1 standard");
Lev Walkin1004aa92004-09-08 00:28:11 +00001587 ;
1588 break;}
1589case 35:
Lev Walkin144db9b2004-10-12 23:26:53 +00001590#line 571 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001591{
Lev Walkinf15320b2004-06-03 03:38:44 +00001592 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001593 ;
1594 break;}
1595case 36:
Lev Walkin144db9b2004-10-12 23:26:53 +00001596#line 577 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001597{
Lev Walkinf15320b2004-06-03 03:38:44 +00001598 return yyerror("Empty IMPORTS list");
Lev Walkin1004aa92004-09-08 00:28:11 +00001599 ;
1600 break;}
1601case 37:
Lev Walkin144db9b2004-10-12 23:26:53 +00001602#line 583 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001603{
Lev Walkinf15320b2004-06-03 03:38:44 +00001604 yyval.a_module = asn1p_module_new();
1605 checkmem(yyval.a_module);
1606 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001607 ;
1608 break;}
1609case 38:
Lev Walkin144db9b2004-10-12 23:26:53 +00001610#line 588 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001611{
Lev Walkinf15320b2004-06-03 03:38:44 +00001612 yyval.a_module = yyvsp[-1].a_module;
1613 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001614 ;
1615 break;}
1616case 39:
Lev Walkin144db9b2004-10-12 23:26:53 +00001617#line 595 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001618{
Lev Walkinf15320b2004-06-03 03:38:44 +00001619 yyval.a_xports = yyvsp[-3].a_xports;
1620 yyval.a_xports->from = yyvsp[-1].tv_str;
1621 yyval.a_xports->from_oid = yyvsp[0].a_oid;
1622 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001623 ;
1624 break;}
1625case 40:
Lev Walkin144db9b2004-10-12 23:26:53 +00001626#line 604 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001627{
Lev Walkinf15320b2004-06-03 03:38:44 +00001628 yyval.a_xports = asn1p_xports_new();
1629 checkmem(yyval.a_xports);
1630 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001631 ;
1632 break;}
1633case 41:
Lev Walkin144db9b2004-10-12 23:26:53 +00001634#line 609 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001635{
Lev Walkinf15320b2004-06-03 03:38:44 +00001636 yyval.a_xports = yyvsp[-2].a_xports;
1637 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001638 ;
1639 break;}
1640case 42:
Lev Walkin144db9b2004-10-12 23:26:53 +00001641#line 616 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001642{
Lev Walkinf15320b2004-06-03 03:38:44 +00001643 yyval.a_expr = asn1p_expr_new(yylineno);
1644 checkmem(yyval.a_expr);
1645 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1646 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001647 ;
1648 break;}
1649case 43:
Lev Walkin144db9b2004-10-12 23:26:53 +00001650#line 622 "asn1p_y.y"
1651{ /* Completely equivalent to above */
1652 yyval.a_expr = asn1p_expr_new(yylineno);
1653 checkmem(yyval.a_expr);
1654 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1655 yyval.a_expr->expr_type = A1TC_REFERENCE;
1656 ;
1657 break;}
1658case 44:
1659#line 628 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001660{
Lev Walkinf15320b2004-06-03 03:38:44 +00001661 yyval.a_expr = asn1p_expr_new(yylineno);
1662 checkmem(yyval.a_expr);
1663 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1664 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001665 ;
1666 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001667case 45:
1668#line 637 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001669{
Lev Walkinf15320b2004-06-03 03:38:44 +00001670 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin1004aa92004-09-08 00:28:11 +00001671 ;
1672 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001673case 46:
1674#line 640 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001675{
Lev Walkinf15320b2004-06-03 03:38:44 +00001676 yyval.a_xports = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001677 ;
1678 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001679case 47:
1680#line 643 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001681{
Lev Walkinf15320b2004-06-03 03:38:44 +00001682 /* Empty EXPORTS clause effectively prohibits export. */
1683 yyval.a_xports = asn1p_xports_new();
1684 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001685 ;
1686 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001687case 48:
1688#line 651 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001689{
Lev Walkinf15320b2004-06-03 03:38:44 +00001690 yyval.a_xports = asn1p_xports_new();
1691 assert(yyval.a_xports);
1692 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001693 ;
1694 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001695case 49:
1696#line 656 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001697{
Lev Walkinf15320b2004-06-03 03:38:44 +00001698 yyval.a_xports = yyvsp[-2].a_xports;
1699 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001700 ;
1701 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001702case 50:
Lev Walkin144db9b2004-10-12 23:26:53 +00001703#line 663 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001704{
Lev Walkinf15320b2004-06-03 03:38:44 +00001705 yyval.a_expr = asn1p_expr_new(yylineno);
1706 checkmem(yyval.a_expr);
1707 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1708 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin1004aa92004-09-08 00:28:11 +00001709 ;
1710 break;}
1711case 51:
Lev Walkin144db9b2004-10-12 23:26:53 +00001712#line 669 "asn1p_y.y"
1713{
1714 yyval.a_expr = asn1p_expr_new(yylineno);
1715 checkmem(yyval.a_expr);
1716 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1717 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1718 ;
1719 break;}
1720case 52:
1721#line 675 "asn1p_y.y"
1722{
1723 yyval.a_expr = asn1p_expr_new(yylineno);
1724 checkmem(yyval.a_expr);
1725 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1726 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1727 ;
1728 break;}
1729case 53:
1730#line 685 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001731{
Lev Walkinf15320b2004-06-03 03:38:44 +00001732 yyval.a_expr = yyvsp[-4].a_expr;
1733 assert(yyval.a_expr->Identifier == 0);
1734 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1735 yyval.a_expr->meta_type = AMT_VALUESET;
1736 // take care of optValueSetBody
Lev Walkin1004aa92004-09-08 00:28:11 +00001737 ;
1738 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001739case 54:
1740#line 695 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001741{
Lev Walkinf15320b2004-06-03 03:38:44 +00001742 yyval.a_expr = asn1p_expr_new(yylineno);
1743 checkmem(yyval.a_expr);
1744 yyval.a_expr->reference = yyvsp[0].a_ref;
1745 yyval.a_expr->expr_type = A1TC_REFERENCE;
1746 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001747 ;
1748 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001749case 55:
1750#line 702 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001751{
Lev Walkinf15320b2004-06-03 03:38:44 +00001752 yyval.a_expr = asn1p_expr_new(yylineno);
1753 checkmem(yyval.a_expr);
1754 yyval.a_expr->expr_type = yyvsp[0].a_type;
1755 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001756 ;
1757 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001758case 56:
Lev Walkin144db9b2004-10-12 23:26:53 +00001759#line 711 "asn1p_y.y"
1760{ ;
Lev Walkin1004aa92004-09-08 00:28:11 +00001761 break;}
1762case 57:
Lev Walkin83cac2f2004-09-22 16:03:36 +00001763#line 712 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001764{
1765 ;
1766 break;}
1767case 58:
Lev Walkin144db9b2004-10-12 23:26:53 +00001768#line 723 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001769{
1770 ;
1771 break;}
1772case 59:
Lev Walkin144db9b2004-10-12 23:26:53 +00001773#line 725 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001774{
1775 ;
1776 break;}
1777case 60:
Lev Walkin144db9b2004-10-12 23:26:53 +00001778#line 730 "asn1p_y.y"
1779{
1780 ;
1781 break;}
1782case 61:
1783#line 732 "asn1p_y.y"
1784{
1785 ;
1786 break;}
1787case 62:
1788#line 748 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001789{
Lev Walkinf15320b2004-06-03 03:38:44 +00001790 yyval.a_expr = asn1p_expr_new(yylineno);
1791 checkmem(yyval.a_expr);
1792 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1793 yyval.a_expr->tag = yyvsp[-1].a_tag;
1794 yyval.a_expr->expr_type = A1TC_TYPEID;
1795 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001796 ;
1797 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001798case 63:
1799#line 756 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001800{
Lev Walkinf15320b2004-06-03 03:38:44 +00001801 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00001802 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00001803 assert(yyval.a_expr->expr_type);
1804 assert(yyval.a_expr->meta_type);
Lev Walkin1004aa92004-09-08 00:28:11 +00001805 ;
1806 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001807case 64:
1808#line 762 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001809{
Lev Walkinf15320b2004-06-03 03:38:44 +00001810 yyval.a_expr = yyvsp[0].a_expr;
1811 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1812 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1813 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin1004aa92004-09-08 00:28:11 +00001814 ;
1815 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001816case 65:
1817#line 778 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001818{
Lev Walkinf15320b2004-06-03 03:38:44 +00001819 yyval.a_expr = yyvsp[0].a_expr;
1820 assert(yyval.a_expr->Identifier == 0);
1821 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1822 yyval.a_expr->params = yyvsp[-3].a_plist;
1823 yyval.a_expr->meta_type = AMT_PARAMTYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001824 ;
1825 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001826case 66:
1827#line 788 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001828{
Lev Walkinf15320b2004-06-03 03:38:44 +00001829 int ret;
1830 yyval.a_plist = asn1p_paramlist_new(yylineno);
1831 checkmem(yyval.a_plist);
1832 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1833 checkmem(ret == 0);
1834 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1835 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001836 ;
1837 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001838case 67:
1839#line 797 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001840{
Lev Walkinf15320b2004-06-03 03:38:44 +00001841 int ret;
1842 yyval.a_plist = yyvsp[-2].a_plist;
1843 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1844 checkmem(ret == 0);
1845 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1846 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001847 ;
1848 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001849case 68:
1850#line 808 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001851{
Lev Walkinf15320b2004-06-03 03:38:44 +00001852 yyval.a_parg.governor = NULL;
1853 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001854 ;
1855 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001856case 69:
1857#line 812 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001858{
Lev Walkinf15320b2004-06-03 03:38:44 +00001859 int ret;
1860 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1861 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1862 checkmem(ret == 0);
1863 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001864 ;
1865 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001866case 70:
1867#line 819 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001868{
Lev Walkinf15320b2004-06-03 03:38:44 +00001869 int ret;
1870 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinc8092cb2005-02-18 16:34:21 +00001871 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1872 checkmem(ret == 0);
1873 yyval.a_parg.argument = yyvsp[0].tv_str;
1874 ;
1875 break;}
1876case 71:
1877#line 826 "asn1p_y.y"
1878{
1879 int ret;
1880 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00001881 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1882 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1883 checkmem(ret == 0);
1884 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001885 ;
1886 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001887case 72:
1888#line 837 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001889{
Lev Walkinf15320b2004-06-03 03:38:44 +00001890 yyval.a_expr = asn1p_expr_new(yylineno);
1891 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001892 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1893 ;
1894 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001895case 73:
1896#line 842 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001897{
Lev Walkinf15320b2004-06-03 03:38:44 +00001898 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001899 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1900 ;
1901 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001902case 74:
1903#line 849 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001904{
Lev Walkinf15320b2004-06-03 03:38:44 +00001905 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001906 ;
1907 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001908case 75:
1909#line 852 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001910{
Lev Walkinf15320b2004-06-03 03:38:44 +00001911 yyval.a_expr = asn1p_expr_new(yylineno);
1912 checkmem(yyval.a_expr);
1913 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1914 yyval.a_expr->expr_type = A1TC_REFERENCE;
1915 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001916 ;
1917 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001918case 76:
1919#line 876 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001920{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1921 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001922case 77:
1923#line 877 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001924{ yyval.a_expr = yyvsp[0].a_expr; ;
1925 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001926case 78:
1927#line 880 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001928{
Lev Walkinf15320b2004-06-03 03:38:44 +00001929 yyval.a_expr = asn1p_expr_new(yylineno);
1930 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001931 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1932 ;
1933 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001934case 79:
1935#line 885 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001936{
Lev Walkinf15320b2004-06-03 03:38:44 +00001937 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001938 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1939 ;
1940 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001941case 80:
1942#line 892 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001943{
Lev Walkin070a52d2004-08-22 03:19:54 +00001944 yyval.a_expr = yyvsp[-1].a_expr;
1945 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00001946 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkin070a52d2004-08-22 03:19:54 +00001947 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00001948 ;
1949 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001950case 81:
1951#line 898 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001952{
Lev Walkin070a52d2004-08-22 03:19:54 +00001953 yyval.a_expr = asn1p_expr_new(yylineno);
1954 checkmem(yyval.a_expr);
1955 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1956 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001957 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1958 ;
1959 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001960case 82:
1961#line 905 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001962{
Lev Walkin070a52d2004-08-22 03:19:54 +00001963 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001964 ;
1965 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001966case 83:
1967#line 911 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001968{
Lev Walkin070a52d2004-08-22 03:19:54 +00001969 yyval.a_expr = asn1p_expr_new(yylineno);
1970 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001971 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1972 ;
1973 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001974case 84:
1975#line 916 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001976{
Lev Walkin070a52d2004-08-22 03:19:54 +00001977 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001978 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1979 ;
1980 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001981case 85:
1982#line 923 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001983{
Lev Walkin070a52d2004-08-22 03:19:54 +00001984 yyval.a_expr = yyvsp[0].a_expr;
1985 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00001986 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001987 ;
1988 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001989case 86:
1990#line 928 "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 87:
1996#line 934 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001997{
Lev Walkinf15320b2004-06-03 03:38:44 +00001998 yyval.a_expr = yyvsp[-2].a_expr;
1999 checkmem(yyval.a_expr);
2000 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2001 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2002 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin1004aa92004-09-08 00:28:11 +00002003 ;
2004 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002005case 88:
2006#line 944 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002007{ yyval.a_int = 0; ;
2008 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002009case 89:
2010#line 945 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002011{ yyval.a_int = 1; ;
2012 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002013case 90:
2014#line 949 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002015{
Lev Walkinf15320b2004-06-03 03:38:44 +00002016 yyval.a_expr = asn1p_expr_new(yylineno);
2017 checkmem(yyval.a_expr);
2018 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2019 yyval.a_expr->meta_type = AMT_OBJECT;
Lev Walkin1004aa92004-09-08 00:28:11 +00002020 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2021 ;
2022 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002023case 91:
2024#line 956 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002025{
Lev Walkinf15320b2004-06-03 03:38:44 +00002026 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002027 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2028 ;
2029 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002030case 92:
2031#line 963 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002032{
Lev Walkinf15320b2004-06-03 03:38:44 +00002033 yyval.a_expr = asn1p_expr_new(yylineno);
2034 checkmem(yyval.a_expr);
2035 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2036 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2037 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2038 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002039 ;
2040 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002041case 93:
2042#line 971 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002043{
Lev Walkin070a52d2004-08-22 03:19:54 +00002044 yyval.a_expr = yyvsp[-2].a_expr;
2045 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002046 yyval.a_expr->marker = yyvsp[0].a_marker;
2047 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002048 ;
2049 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002050case 94:
2051#line 977 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002052{
Lev Walkinf15320b2004-06-03 03:38:44 +00002053 int ret;
2054 yyval.a_expr = asn1p_expr_new(yylineno);
2055 checkmem(yyval.a_expr);
2056 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2057 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2058 checkmem(yyval.a_expr->reference);
2059 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2060 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2061 checkmem(ret == 0);
2062 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2063 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002064 yyval.a_expr->marker = yyvsp[0].a_marker;
2065 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002066 ;
2067 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002068case 95:
2069#line 995 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002070{ yyval.a_wsynt = 0; ;
2071 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002072case 96:
2073#line 996 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002074{
Lev Walkinf15320b2004-06-03 03:38:44 +00002075 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002076 ;
2077 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002078case 97:
2079#line 1003 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002080{ asn1p_lexer_hack_enable_with_syntax(); ;
2081 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002082case 98:
2083#line 1005 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002084{
Lev Walkinf15320b2004-06-03 03:38:44 +00002085 yyval.a_wsynt = yyvsp[-1].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002086 ;
2087 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002088case 99:
2089#line 1011 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002090{
Lev Walkinf15320b2004-06-03 03:38:44 +00002091 yyval.a_wsynt = asn1p_wsyntx_new();
2092 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002093 ;
2094 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002095case 100:
2096#line 1015 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002097{
Lev Walkinf15320b2004-06-03 03:38:44 +00002098 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2099 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002100 ;
2101 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002102case 101:
2103#line 1022 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002104{
Lev Walkinf15320b2004-06-03 03:38:44 +00002105 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 +00002106 ;
2107 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002108case 102:
2109#line 1025 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002110{
Lev Walkinf15320b2004-06-03 03:38:44 +00002111 asn1p_ref_t *ref;
2112 int ret;
2113 ref = asn1p_ref_new(yylineno);
2114 checkmem(ref);
2115 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2116 checkmem(ret == 0);
2117 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002118 ;
2119 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002120case 103:
Lev Walkinc8092cb2005-02-18 16:34:21 +00002121#line 1037 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00002122{
2123 yyval.a_expr = asn1p_expr_new(yylineno);
2124 checkmem(yyval.a_expr);
2125 yyval.a_expr->Identifier = strdup("...");
2126 checkmem(yyval.a_expr->Identifier);
Lev Walkin144db9b2004-10-12 23:26:53 +00002127 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2128 yyval.a_expr->meta_type = AMT_TYPE;
2129 ;
2130 break;}
2131case 104:
Lev Walkinc8092cb2005-02-18 16:34:21 +00002132#line 1045 "asn1p_y.y"
2133{
2134 yyval.a_expr = asn1p_expr_new(yylineno);
2135 checkmem(yyval.a_expr);
2136 yyval.a_expr->Identifier = strdup("...");
2137 checkmem(yyval.a_expr->Identifier);
2138 yyval.a_expr->value = yyvsp[0].a_value;
2139 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2140 yyval.a_expr->meta_type = AMT_TYPE;
2141 ;
2142 break;}
2143case 105:
2144#line 1054 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00002145{
2146 yyval.a_expr = asn1p_expr_new(yylineno);
2147 checkmem(yyval.a_expr);
2148 yyval.a_expr->Identifier = strdup("...");
Lev Walkind2ea1de2004-08-20 13:25:29 +00002149 yyval.a_expr->value = yyvsp[0].a_value;
2150 checkmem(yyval.a_expr->Identifier);
2151 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2152 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002153 ;
2154 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002155case 106:
2156#line 1066 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002157{
Lev Walkin070a52d2004-08-22 03:19:54 +00002158 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00002159 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002160 /*
2161 * Outer constraint for SEQUENCE OF and SET OF applies
2162 * to the inner type.
2163 */
2164 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2165 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2166 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2167 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2168 } else {
2169 if(yyval.a_expr->constraints) {
Lev Walkinaf120f72004-09-14 02:36:39 +00002170 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002171 } else {
2172 yyval.a_expr->constraints = yyvsp[0].a_constr;
2173 }
2174 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002175 ;
2176 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002177case 107:
2178#line 1088 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002179{
Lev Walkind2ea1de2004-08-20 13:25:29 +00002180 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002181 ;
2182 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002183case 108:
2184#line 1091 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002185{
Lev Walkinf15320b2004-06-03 03:38:44 +00002186 yyval.a_expr = asn1p_expr_new(yylineno);
2187 checkmem(yyval.a_expr);
2188 yyval.a_expr->expr_type = yyvsp[0].a_type;
2189 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002190 ;
2191 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002192case 109:
2193#line 1097 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002194{
Lev Walkin070a52d2004-08-22 03:19:54 +00002195 yyval.a_expr = yyvsp[-1].a_expr;
2196 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2197 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2198 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002199 ;
2200 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002201case 110:
2202#line 1103 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002203{
Lev Walkin070a52d2004-08-22 03:19:54 +00002204 yyval.a_expr = yyvsp[-1].a_expr;
2205 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2206 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2207 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002208 ;
2209 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002210case 111:
2211#line 1109 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002212{
Lev Walkin070a52d2004-08-22 03:19:54 +00002213 yyval.a_expr = yyvsp[-1].a_expr;
2214 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2215 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2216 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002217 ;
2218 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002219case 112:
2220#line 1115 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002221{
Lev Walkinceb20e72004-09-05 10:40:41 +00002222 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002223 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002224 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002225 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2226 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002227 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002228 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002229 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2230 ;
2231 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002232case 113:
2233#line 1125 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002234{
Lev Walkinceb20e72004-09-05 10:40:41 +00002235 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002236 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002237 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002238 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2239 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002240 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002241 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002242 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2243 ;
2244 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002245case 114:
2246#line 1135 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002247{
Lev Walkinceb20e72004-09-05 10:40:41 +00002248 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002249 checkmem(yyval.a_expr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002250 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002251 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002252 ;
2253 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002254case 115:
2255#line 1141 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002256{
Lev Walkin070a52d2004-08-22 03:19:54 +00002257 int ret;
Lev Walkinceb20e72004-09-05 10:40:41 +00002258 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002259 checkmem(yyval.a_expr);
2260 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2261 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2262 yyvsp[0].tv_str, RLT_lowercase);
2263 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002264 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002265 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002266 ;
2267 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002268case 116:
2269#line 1155 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002270{
Lev Walkinf15320b2004-06-03 03:38:44 +00002271 int ret;
2272 yyval.a_expr = yyvsp[-1].a_expr;
2273 assert(yyval.a_expr->expr_type == 0);
2274 assert(yyval.a_expr->meta_type == 0);
2275 assert(yyval.a_expr->reference == 0);
2276 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2277 checkmem(yyval.a_expr->reference);
2278 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2279 checkmem(ret == 0);
2280 free(yyvsp[-3].tv_str);
2281 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2282 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002283 ;
2284 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002285case 117:
2286#line 1179 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002287{
Lev Walkinf15320b2004-06-03 03:38:44 +00002288 yyval.a_expr = asn1p_expr_new(yylineno);
2289 checkmem(yyval.a_expr);
2290 yyval.a_expr->reference = yyvsp[0].a_ref;
2291 yyval.a_expr->expr_type = A1TC_REFERENCE;
2292 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00002293 ;
2294 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002295case 118:
2296#line 1186 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002297{
Lev Walkinf15320b2004-06-03 03:38:44 +00002298 yyval.a_expr = asn1p_expr_new(yylineno);
2299 checkmem(yyval.a_expr);
2300 yyval.a_expr->reference = yyvsp[0].a_ref;
2301 yyval.a_expr->expr_type = A1TC_INSTANCE;
2302 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002303 ;
2304 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002305case 119:
2306#line 1201 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002307{
Lev Walkinf15320b2004-06-03 03:38:44 +00002308 int ret;
2309 yyval.a_ref = asn1p_ref_new(yylineno);
2310 checkmem(yyval.a_ref);
2311 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2312 checkmem(ret == 0);
2313 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002314 ;
2315 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002316case 120:
Lev Walkinc8092cb2005-02-18 16:34:21 +00002317#line 1209 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002318{
Lev Walkinf15320b2004-06-03 03:38:44 +00002319 int ret;
2320 yyval.a_ref = asn1p_ref_new(yylineno);
2321 checkmem(yyval.a_ref);
2322 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2323 checkmem(ret == 0);
Lev Walkin9c974182004-09-15 11:59:51 +00002324 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00002325 checkmem(ret == 0);
2326 free(yyvsp[-2].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002327 ;
2328 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002329case 121:
Lev Walkinc8092cb2005-02-18 16:34:21 +00002330#line 1219 "asn1p_y.y"
2331{
2332 int ret;
2333 yyval.a_ref = asn1p_ref_new(yylineno);
2334 checkmem(yyval.a_ref);
2335 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2336 checkmem(ret == 0);
2337 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2338 checkmem(ret == 0);
2339 free(yyvsp[-2].tv_str);
2340 ;
2341 break;}
2342case 122:
2343#line 1229 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002344{
Lev Walkinf15320b2004-06-03 03:38:44 +00002345 int ret;
2346 yyval.a_ref = asn1p_ref_new(yylineno);
2347 checkmem(yyval.a_ref);
Lev Walkin9c974182004-09-15 11:59:51 +00002348 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2349 checkmem(ret == 0);
2350 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2351 checkmem(ret == 0);
2352 free(yyvsp[-2].tv_str);
2353 ;
2354 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002355case 123:
2356#line 1239 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002357{
2358 int ret;
2359 yyval.a_ref = asn1p_ref_new(yylineno);
2360 checkmem(yyval.a_ref);
Lev Walkinf15320b2004-06-03 03:38:44 +00002361 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2362 free(yyvsp[0].tv_str);
2363 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002364 ;
2365 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002366case 124:
2367#line 1247 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002368{
Lev Walkinf15320b2004-06-03 03:38:44 +00002369 int ret;
2370 yyval.a_ref = yyvsp[0].a_ref;
2371 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2372 free(yyvsp[-2].tv_str);
2373 checkmem(ret == 0);
2374 /*
2375 * Move the last element infront.
2376 */
2377 {
2378 struct asn1p_ref_component_s tmp_comp;
2379 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2380 memmove(&yyval.a_ref->components[1],
2381 &yyval.a_ref->components[0],
2382 sizeof(yyval.a_ref->components[0])
2383 * (yyval.a_ref->comp_count - 1));
2384 yyval.a_ref->components[0] = tmp_comp;
2385 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002386 ;
2387 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002388case 125:
2389#line 1269 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002390{
Lev Walkinf15320b2004-06-03 03:38:44 +00002391 int ret;
2392 yyval.a_ref = asn1p_ref_new(yylineno);
2393 checkmem(yyval.a_ref);
2394 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2395 free(yyvsp[0].a_refcomp.name);
2396 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002397 ;
2398 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002399case 126:
2400#line 1277 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002401{
Lev Walkinf15320b2004-06-03 03:38:44 +00002402 int ret;
2403 yyval.a_ref = yyvsp[-2].a_ref;
2404 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2405 free(yyvsp[0].a_refcomp.name);
2406 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002407 ;
2408 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002409case 129:
2410#line 1291 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002411{
Lev Walkinf15320b2004-06-03 03:38:44 +00002412 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2413 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002414 ;
2415 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002416case 130:
2417#line 1296 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002418{
Lev Walkinf15320b2004-06-03 03:38:44 +00002419 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2420 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002421 ;
2422 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002423case 131:
2424#line 1309 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002425{
Lev Walkinf15320b2004-06-03 03:38:44 +00002426 yyval.a_expr = yyvsp[-2].a_expr;
2427 assert(yyval.a_expr->Identifier == NULL);
2428 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2429 yyval.a_expr->meta_type = AMT_VALUE;
2430 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002431 ;
2432 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002433case 132:
2434#line 1319 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002435{
2436 yyval.a_value = asn1p_value_fromint(0);
2437 checkmem(yyval.a_value);
2438 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2439 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2440 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2441 ;
2442 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002443case 133:
2444#line 1326 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002445{ asn1p_lexer_hack_push_opaque_state(); ;
2446 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002447case 134:
2448#line 1326 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002449{
Lev Walkinf15320b2004-06-03 03:38:44 +00002450 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2451 checkmem(yyval.a_value);
2452 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin1004aa92004-09-08 00:28:11 +00002453 ;
2454 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002455case 135:
2456#line 1331 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002457{
2458 yyval.a_value = asn1p_value_fromint(0);
2459 checkmem(yyval.a_value);
2460 yyval.a_value->type = ATV_NULL;
2461 ;
2462 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002463case 136:
2464#line 1336 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002465{
2466 yyval.a_value = asn1p_value_fromint(0);
2467 checkmem(yyval.a_value);
2468 yyval.a_value->type = ATV_FALSE;
2469 ;
2470 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002471case 137:
2472#line 1341 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002473{
2474 yyval.a_value = asn1p_value_fromint(0);
2475 checkmem(yyval.a_value);
2476 yyval.a_value->type = ATV_TRUE;
2477 ;
2478 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002479case 138:
2480#line 1346 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002481{
Lev Walkinf15320b2004-06-03 03:38:44 +00002482 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2483 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002484 ;
2485 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002486case 139:
2487#line 1350 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002488{
Lev Walkinf15320b2004-06-03 03:38:44 +00002489 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2490 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002491 ;
2492 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002493case 140:
2494#line 1354 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002495{
Lev Walkinf15320b2004-06-03 03:38:44 +00002496 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2497 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002498 ;
2499 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002500case 141:
Lev Walkinc8092cb2005-02-18 16:34:21 +00002501#line 1358 "asn1p_y.y"
Lev Walkin83cac2f2004-09-22 16:03:36 +00002502{
2503 yyval.a_value = yyvsp[0].a_value;
2504 ;
2505 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002506case 142:
Lev Walkinc8092cb2005-02-18 16:34:21 +00002507#line 1361 "asn1p_y.y"
2508{
2509 yyval.a_value = yyvsp[0].a_value;
2510 ;
2511 break;}
2512case 143:
2513#line 1367 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002514{
Lev Walkinf15320b2004-06-03 03:38:44 +00002515 asn1p_ref_t *ref;
2516 int ret;
2517 ref = asn1p_ref_new(yylineno);
2518 checkmem(ref);
2519 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2520 checkmem(ret == 0);
2521 yyval.a_value = asn1p_value_fromref(ref, 0);
2522 checkmem(yyval.a_value);
2523 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002524 ;
2525 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002526case 144:
2527#line 1378 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002528{
Lev Walkinf15320b2004-06-03 03:38:44 +00002529 asn1p_ref_t *ref;
2530 int ret;
2531 ref = asn1p_ref_new(yylineno);
2532 checkmem(ref);
2533 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2534 checkmem(ret == 0);
2535 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2536 checkmem(ret == 0);
2537 yyval.a_value = asn1p_value_fromref(ref, 0);
2538 checkmem(yyval.a_value);
2539 free(yyvsp[-2].tv_str);
2540 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002541 ;
2542 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002543case 145:
2544#line 1395 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002545{
Lev Walkinf15320b2004-06-03 03:38:44 +00002546 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
2547 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2548 checkmem(yyval.tv_opaque.buf);
2549 yyval.tv_opaque.buf[0] = '{';
2550 yyval.tv_opaque.buf[1] = ' ';
2551 memcpy(yyval.tv_opaque.buf + 2, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2552 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2553 free(yyvsp[0].tv_opaque.buf);
Lev Walkin1004aa92004-09-08 00:28:11 +00002554 ;
2555 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002556case 146:
2557#line 1405 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002558{
Lev Walkinf15320b2004-06-03 03:38:44 +00002559 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2560 char *p = malloc(newsize + 1);
2561 checkmem(p);
2562 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2563 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2564 p[newsize] = '\0';
2565 free(yyvsp[-1].tv_opaque.buf);
2566 free(yyvsp[0].tv_opaque.buf);
2567 yyval.tv_opaque.buf = p;
2568 yyval.tv_opaque.len = newsize;
Lev Walkin1004aa92004-09-08 00:28:11 +00002569 ;
2570 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002571case 147:
2572#line 1420 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002573{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2574 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002575case 148:
2576#line 1421 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002577{ yyval.a_type = ASN_BASIC_NULL; ;
2578 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002579case 149:
2580#line 1422 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002581{ yyval.a_type = ASN_BASIC_REAL; ;
2582 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002583case 150:
2584#line 1423 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002585{ yyval.a_type = yyvsp[0].a_type; ;
2586 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002587case 151:
2588#line 1424 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002589{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
2590 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002591case 152:
2592#line 1425 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002593{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
2594 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002595case 153:
2596#line 1426 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002597{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
2598 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002599case 154:
2600#line 1427 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002601{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
2602 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002603case 155:
2604#line 1428 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002605{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
2606 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002607case 156:
2608#line 1429 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002609{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
2610 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002611case 157:
2612#line 1430 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002613{ yyval.a_type = ASN_BASIC_UTCTime; ;
2614 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002615case 158:
2616#line 1431 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002617{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2618 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002619case 159:
2620#line 1438 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002621{ yyval.a_type = ASN_BASIC_INTEGER; ;
2622 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002623case 160:
2624#line 1439 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002625{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2626 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002627case 161:
2628#line 1440 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002629{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2630 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002631case 162:
2632#line 1444 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002633{
Lev Walkinceb20e72004-09-05 10:40:41 +00002634 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002635 checkmem(yyval.a_expr);
2636 yyval.a_expr->expr_type = yyvsp[0].a_type;
2637 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002638 ;
2639 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002640case 163:
2641#line 1450 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002642{
Lev Walkinf15320b2004-06-03 03:38:44 +00002643 if(yyvsp[0].a_expr) {
2644 yyval.a_expr = yyvsp[0].a_expr;
2645 } else {
Lev Walkinceb20e72004-09-05 10:40:41 +00002646 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002647 checkmem(yyval.a_expr);
2648 }
2649 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2650 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002651 ;
2652 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002653case 164:
2654#line 1463 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002655{ yyval.a_type = ASN_STRING_BMPString; ;
2656 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002657case 165:
2658#line 1464 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002659{
Lev Walkinf15320b2004-06-03 03:38:44 +00002660 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00002661 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002662 ;
2663 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002664case 166:
2665#line 1468 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002666{
Lev Walkin9c974182004-09-15 11:59:51 +00002667 yyval.a_type = ASN_STRING_GraphicString;
2668 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002669 ;
2670 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002671case 167:
2672#line 1472 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002673{ yyval.a_type = ASN_STRING_IA5String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002674 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002675case 168:
2676#line 1473 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002677{ yyval.a_type = ASN_STRING_ISO646String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002678 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002679case 169:
2680#line 1474 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002681{ yyval.a_type = ASN_STRING_NumericString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002682 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002683case 170:
2684#line 1475 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002685{ yyval.a_type = ASN_STRING_PrintableString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002686 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002687case 171:
2688#line 1476 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002689{
2690 yyval.a_type = ASN_STRING_T61String;
2691 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2692 ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002693 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002694case 172:
2695#line 1480 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002696{ yyval.a_type = ASN_STRING_TeletexString; ;
2697 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002698case 173:
2699#line 1481 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002700{ yyval.a_type = ASN_STRING_UniversalString; ;
2701 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002702case 174:
2703#line 1482 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002704{ yyval.a_type = ASN_STRING_UTF8String; ;
2705 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002706case 175:
2707#line 1483 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002708{
2709 yyval.a_type = ASN_STRING_VideotexString;
2710 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2711 ;
2712 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002713case 176:
2714#line 1487 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002715{ yyval.a_type = ASN_STRING_VisibleString; ;
2716 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002717case 177:
2718#line 1488 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002719{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2720 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002721case 183:
2722#line 1500 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002723{ yyval.a_constr = 0; ;
2724 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002725case 184:
2726#line 1501 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002727{
Lev Walkinceb20e72004-09-05 10:40:41 +00002728 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002729 ;
2730 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002731case 185:
2732#line 1507 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002733{
Lev Walkinceb20e72004-09-05 10:40:41 +00002734 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002735 ;
2736 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002737case 186:
2738#line 1510 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002739{
Lev Walkinf15320b2004-06-03 03:38:44 +00002740 /*
2741 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00002742 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00002743 */
Lev Walkind2ea1de2004-08-20 13:25:29 +00002744 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002745 ;
2746 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002747case 187:
2748#line 1520 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002749{
Lev Walkinf15320b2004-06-03 03:38:44 +00002750 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002751 ;
2752 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002753case 188:
2754#line 1523 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002755{
Lev Walkinf59d0752004-08-18 04:59:12 +00002756 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002757 ;
2758 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002759case 189:
2760#line 1529 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002761{
Lev Walkinf15320b2004-06-03 03:38:44 +00002762 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002763 ;
2764 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002765case 190:
2766#line 1532 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002767{
Lev Walkinf15320b2004-06-03 03:38:44 +00002768 asn1p_constraint_t *ct;
2769 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002770 ct->type = ACT_EL_EXT;
2771 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00002772 ;
2773 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002774case 191:
2775#line 1538 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002776{
Lev Walkinf15320b2004-06-03 03:38:44 +00002777 asn1p_constraint_t *ct;
2778 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002779 ct->type = ACT_EL_EXT;
2780 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002781 ct = yyval.a_constr;
2782 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002783 ;
2784 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002785case 192:
2786#line 1549 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002787{
Lev Walkinf59d0752004-08-18 04:59:12 +00002788 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002789 ;
2790 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002791case 193:
2792#line 1552 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002793{
Lev Walkinf15320b2004-06-03 03:38:44 +00002794 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002795 ;
2796 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002797case 194:
2798#line 1555 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002799{
Lev Walkinf15320b2004-06-03 03:38:44 +00002800 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002801 ;
2802 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002803case 195:
2804#line 1558 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002805{
Lev Walkinf15320b2004-06-03 03:38:44 +00002806 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002807 ;
2808 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002809case 196:
2810#line 1564 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002811{
Lev Walkinf15320b2004-06-03 03:38:44 +00002812 int ret;
2813 yyval.a_constr = asn1p_constraint_new(yylineno);
2814 checkmem(yyval.a_constr);
2815 yyval.a_constr->type = yyvsp[-3].a_ctype;
2816 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2817 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002818 ;
2819 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002820case 197:
2821#line 1572 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002822{
Lev Walkinf59d0752004-08-18 04:59:12 +00002823 int ret;
2824 yyval.a_constr = asn1p_constraint_new(yylineno);
2825 checkmem(yyval.a_constr);
2826 yyval.a_constr->type = ACT_CA_SET;
2827 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2828 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002829 ;
2830 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002831case 198:
2832#line 1580 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002833{
Lev Walkinf59d0752004-08-18 04:59:12 +00002834 yyval.a_constr = asn1p_constraint_new(yylineno);
2835 checkmem(yyval.a_constr);
2836 yyval.a_constr->type = ACT_EL_VALUE;
2837 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002838 ;
2839 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002840case 199:
2841#line 1586 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002842{
Lev Walkin144db9b2004-10-12 23:26:53 +00002843 yyval.a_constr = asn1p_constraint_new(yylineno);
2844 checkmem(yyval.a_constr);
2845 yyval.a_constr->type = yyvsp[-1].a_ctype;
2846 yyval.a_constr->range_start = yyvsp[-2].a_value;
2847 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkin9c974182004-09-15 11:59:51 +00002848 ;
2849 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002850case 200:
Lev Walkinc8092cb2005-02-18 16:34:21 +00002851#line 1593 "asn1p_y.y"
2852{
2853 yyval.a_constr = asn1p_constraint_new(yylineno);
2854 checkmem(yyval.a_constr);
2855 yyval.a_constr->type = yyvsp[-1].a_ctype;
2856 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2857 yyval.a_constr->range_stop = yyvsp[0].a_value;
2858 yyval.a_constr->range_start->type = ATV_MIN;
2859 ;
2860 break;}
2861case 201:
2862#line 1601 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00002863{
2864 yyval.a_constr = asn1p_constraint_new(yylineno);
2865 checkmem(yyval.a_constr);
2866 yyval.a_constr->type = yyvsp[-1].a_ctype;
2867 yyval.a_constr->range_start = yyvsp[-2].a_value;
2868 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2869 yyval.a_constr->range_stop->type = ATV_MAX;
2870 ;
2871 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002872case 202:
Lev Walkinc8092cb2005-02-18 16:34:21 +00002873#line 1609 "asn1p_y.y"
Lev Walkin83cac2f2004-09-22 16:03:36 +00002874{
Lev Walkinc8092cb2005-02-18 16:34:21 +00002875 yyval.a_constr = asn1p_constraint_new(yylineno);
2876 checkmem(yyval.a_constr);
2877 yyval.a_constr->type = yyvsp[-1].a_ctype;
2878 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2879 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2880 yyval.a_constr->range_start->type = ATV_MIN;
2881 yyval.a_constr->range_stop->type = ATV_MAX;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002882 ;
2883 break;}
Lev Walkin9c974182004-09-15 11:59:51 +00002884case 203:
Lev Walkinc8092cb2005-02-18 16:34:21 +00002885#line 1618 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00002886{
2887 yyval.a_constr = yyvsp[0].a_constr;
2888 ;
Lev Walkin9c974182004-09-15 11:59:51 +00002889 break;}
2890case 204:
Lev Walkinc8092cb2005-02-18 16:34:21 +00002891#line 1621 "asn1p_y.y"
2892{
2893 yyval.a_constr = yyvsp[0].a_constr;
2894 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002895 break;}
2896case 205:
Lev Walkinc8092cb2005-02-18 16:34:21 +00002897#line 1627 "asn1p_y.y"
2898{ yyval.a_ctype = ACT_EL_RANGE; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002899 break;}
2900case 206:
Lev Walkinc8092cb2005-02-18 16:34:21 +00002901#line 1628 "asn1p_y.y"
2902{ yyval.a_ctype = ACT_EL_RLRANGE; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002903 break;}
2904case 207:
Lev Walkinc8092cb2005-02-18 16:34:21 +00002905#line 1629 "asn1p_y.y"
2906{ yyval.a_ctype = ACT_EL_LLRANGE; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002907 break;}
2908case 208:
Lev Walkinc8092cb2005-02-18 16:34:21 +00002909#line 1630 "asn1p_y.y"
2910{ yyval.a_ctype = ACT_EL_ULRANGE; ;
2911 break;}
2912case 209:
2913#line 1634 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002914{
Lev Walkinceb20e72004-09-05 10:40:41 +00002915 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002916 ;
2917 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002918case 210:
2919#line 1637 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002920{
Lev Walkinceb20e72004-09-05 10:40:41 +00002921 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin1004aa92004-09-08 00:28:11 +00002922 ;
2923 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002924case 211:
2925#line 1643 "asn1p_y.y"
2926{
2927 yyval.a_value = asn1p_value_fromint(0);
2928 checkmem(yyval.a_value);
2929 yyval.a_value->type = ATV_FALSE;
2930 ;
2931 break;}
2932case 212:
2933#line 1648 "asn1p_y.y"
2934{
2935 yyval.a_value = asn1p_value_fromint(1);
2936 checkmem(yyval.a_value);
2937 yyval.a_value->type = ATV_TRUE;
2938 ;
2939 break;}
2940case 213:
2941#line 1653 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002942{
Lev Walkinf15320b2004-06-03 03:38:44 +00002943 yyval.a_value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002944 ;
2945 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002946case 214:
2947#line 1656 "asn1p_y.y"
2948{
2949 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2950 checkmem(yyval.a_value);
2951 ;
2952 break;}
2953case 215:
2954#line 1660 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002955{
Lev Walkinf15320b2004-06-03 03:38:44 +00002956 asn1p_ref_t *ref;
2957 int ret;
2958 ref = asn1p_ref_new(yylineno);
2959 checkmem(ref);
2960 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2961 checkmem(ret == 0);
2962 yyval.a_value = asn1p_value_fromref(ref, 0);
2963 checkmem(yyval.a_value);
2964 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002965 ;
2966 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002967case 216:
2968#line 1671 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002969{
Lev Walkinc8092cb2005-02-18 16:34:21 +00002970 asn1p_ref_t *ref;
2971 int ret;
2972 ref = asn1p_ref_new(yylineno);
2973 checkmem(ref);
2974 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2975 checkmem(ret == 0);
2976 yyval.a_value = asn1p_value_fromref(ref, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00002977 checkmem(yyval.a_value);
Lev Walkinc8092cb2005-02-18 16:34:21 +00002978 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002979 ;
2980 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002981case 217:
2982#line 1685 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002983{
Lev Walkinf15320b2004-06-03 03:38:44 +00002984 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002985 ;
2986 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002987case 218:
2988#line 1691 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002989{
Lev Walkinf15320b2004-06-03 03:38:44 +00002990 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002991 ;
2992 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002993case 219:
2994#line 1694 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002995{
Lev Walkinf15320b2004-06-03 03:38:44 +00002996 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002997 ;
2998 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002999case 220:
3000#line 1700 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003001{
Lev Walkinf15320b2004-06-03 03:38:44 +00003002 yyval.a_constr = asn1p_constraint_new(yylineno);
3003 checkmem(yyval.a_constr);
3004 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003005 ;
3006 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003007case 221:
3008#line 1705 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003009{
Lev Walkinf15320b2004-06-03 03:38:44 +00003010 yyval.a_constr = asn1p_constraint_new(yylineno);
3011 checkmem(yyval.a_constr);
3012 yyval.a_constr->type = ACT_EL_VALUE;
3013 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3014 yyval.a_constr->presence = yyvsp[0].a_pres;
Lev Walkin1004aa92004-09-08 00:28:11 +00003015 ;
3016 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003017case 222:
3018#line 1718 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003019{ yyval.a_pres = ACPRES_DEFAULT; ;
3020 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003021case 223:
3022#line 1719 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003023{ yyval.a_pres = yyvsp[0].a_pres; ;
3024 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003025case 224:
3026#line 1723 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003027{
Lev Walkinf15320b2004-06-03 03:38:44 +00003028 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003029 ;
3030 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003031case 225:
3032#line 1726 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003033{
Lev Walkinf15320b2004-06-03 03:38:44 +00003034 yyval.a_pres = ACPRES_ABSENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003035 ;
3036 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003037case 226:
3038#line 1729 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003039{
Lev Walkinf15320b2004-06-03 03:38:44 +00003040 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkin1004aa92004-09-08 00:28:11 +00003041 ;
3042 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00003043case 227:
Lev Walkinc8092cb2005-02-18 16:34:21 +00003044#line 1735 "asn1p_y.y"
3045{
3046 yyval.a_constr = yyvsp[0].a_constr;
3047 ;
3048 break;}
3049case 228:
3050#line 1738 "asn1p_y.y"
3051{
3052 yyval.a_constr = yyvsp[0].a_constr;
3053 ;
3054 break;}
3055case 229:
3056#line 1747 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003057{
Lev Walkinf15320b2004-06-03 03:38:44 +00003058 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3059 asn1p_constraint_t *ct;
3060 int ret;
3061 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3062 checkmem(ret == 0);
3063 ct = asn1p_constraint_new(yylineno);
3064 checkmem(yyval.a_constr);
3065 ct->type = ACT_EL_VALUE;
3066 ct->value = asn1p_value_fromref(ref, 0);
3067 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003068 ;
3069 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003070case 230:
3071#line 1762 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003072{
Lev Walkinf15320b2004-06-03 03:38:44 +00003073 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003074 ;
3075 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003076case 231:
3077#line 1768 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003078{
Lev Walkinf15320b2004-06-03 03:38:44 +00003079 yyval.a_constr = asn1p_constraint_new(yylineno);
3080 checkmem(yyval.a_constr);
3081 yyval.a_constr->type = ACT_EL_VALUE;
3082 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003083 ;
3084 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003085case 232:
3086#line 1774 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003087{
Lev Walkinf15320b2004-06-03 03:38:44 +00003088 asn1p_constraint_t *ct;
3089 ct = asn1p_constraint_new(yylineno);
3090 checkmem(ct);
3091 ct->type = ACT_EL_VALUE;
3092 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3093 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00003094 ;
3095 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003096case 233:
3097#line 1788 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003098{
Lev Walkinf15320b2004-06-03 03:38:44 +00003099 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3100 int ret;
3101 *p = '@';
3102 strcpy(p + 1, yyvsp[0].tv_str);
3103 yyval.a_ref = asn1p_ref_new(yylineno);
3104 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3105 checkmem(ret == 0);
3106 free(p);
3107 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003108 ;
3109 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003110case 234:
3111#line 1799 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003112{
Lev Walkinf15320b2004-06-03 03:38:44 +00003113 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3114 int ret;
3115 p[0] = '@';
3116 p[1] = '.';
3117 strcpy(p + 2, yyvsp[0].tv_str);
3118 yyval.a_ref = asn1p_ref_new(yylineno);
3119 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3120 checkmem(ret == 0);
3121 free(p);
3122 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003123 ;
3124 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003125case 235:
3126#line 1815 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003127{
Lev Walkinf15320b2004-06-03 03:38:44 +00003128 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003129 ;
3130 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003131case 236:
3132#line 1818 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003133{
Lev Walkinf15320b2004-06-03 03:38:44 +00003134 int l1 = strlen(yyvsp[-2].tv_str);
3135 int l3 = strlen(yyvsp[0].tv_str);
3136 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3137 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3138 yyval.tv_str[l1] = '.';
3139 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3140 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin1004aa92004-09-08 00:28:11 +00003141 ;
3142 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003143case 237:
3144#line 1836 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003145{
Lev Walkin9c974182004-09-15 11:59:51 +00003146 yyval.a_marker.flags = EM_NOMARK;
3147 yyval.a_marker.default_value = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00003148 ;
3149 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003150case 238:
3151#line 1840 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003152{ yyval.a_marker = yyvsp[0].a_marker; ;
Lev Walkinec208e62004-09-14 02:44:07 +00003153 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003154case 239:
3155#line 1844 "asn1p_y.y"
Lev Walkinec208e62004-09-14 02:44:07 +00003156{
Lev Walkin9c974182004-09-15 11:59:51 +00003157 yyval.a_marker.flags = EM_OPTIONAL;
3158 yyval.a_marker.default_value = 0;
Lev Walkinec208e62004-09-14 02:44:07 +00003159 ;
3160 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003161case 240:
3162#line 1848 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003163{
3164 yyval.a_marker.flags = EM_DEFAULT;
3165 yyval.a_marker.default_value = yyvsp[0].a_value;
3166 ;
3167 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003168case 241:
3169#line 1871 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003170{
Lev Walkinceb20e72004-09-05 10:40:41 +00003171 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003172 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003173 ;
3174 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003175case 242:
3176#line 1875 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003177{
Lev Walkinf15320b2004-06-03 03:38:44 +00003178 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003179 ;
3180 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003181case 243:
3182#line 1881 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003183{
Lev Walkinceb20e72004-09-05 10:40:41 +00003184 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003185 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003186 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3187 ;
3188 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003189case 244:
3190#line 1886 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003191{
Lev Walkinf15320b2004-06-03 03:38:44 +00003192 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003193 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3194 ;
3195 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003196case 245:
3197#line 1893 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003198{
Lev Walkinceb20e72004-09-05 10:40:41 +00003199 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003200 checkmem(yyval.a_expr);
3201 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3202 yyval.a_expr->meta_type = AMT_VALUE;
3203 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003204 ;
3205 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00003206case 246:
Lev Walkinc8092cb2005-02-18 16:34:21 +00003207#line 1900 "asn1p_y.y"
3208{
3209 yyval.a_expr = asn1p_expr_new(yylineno);
3210 checkmem(yyval.a_expr);
3211 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3212 yyval.a_expr->meta_type = AMT_VALUE;
3213 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3214 yyval.a_expr->value = yyvsp[-1].a_value;
3215 ;
3216 break;}
3217case 247:
3218#line 1908 "asn1p_y.y"
3219{
3220 yyval.a_expr = asn1p_expr_new(yylineno);
3221 checkmem(yyval.a_expr);
3222 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3223 yyval.a_expr->meta_type = AMT_VALUE;
3224 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3225 yyval.a_expr->value = yyvsp[-1].a_value;
3226 ;
3227 break;}
3228case 248:
3229#line 1916 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003230{
Lev Walkinceb20e72004-09-05 10:40:41 +00003231 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003232 checkmem(yyval.a_expr);
3233 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3234 yyval.a_expr->meta_type = AMT_VALUE;
3235 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003236 ;
3237 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003238case 249:
3239#line 1923 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003240{
Lev Walkinceb20e72004-09-05 10:40:41 +00003241 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003242 checkmem(yyval.a_expr);
3243 yyval.a_expr->Identifier = strdup("...");
3244 checkmem(yyval.a_expr->Identifier);
3245 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3246 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003247 ;
3248 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00003249case 250:
Lev Walkinc8092cb2005-02-18 16:34:21 +00003250#line 1934 "asn1p_y.y"
3251{
3252 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3253 checkmem(yyval.a_value);
3254 ;
Lev Walkin1004aa92004-09-08 00:28:11 +00003255 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00003256case 251:
Lev Walkinc8092cb2005-02-18 16:34:21 +00003257#line 1938 "asn1p_y.y"
3258{
3259 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3260 checkmem(yyval.a_value);
3261 ;
Lev Walkin9c974182004-09-15 11:59:51 +00003262 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00003263case 252:
Lev Walkinc8092cb2005-02-18 16:34:21 +00003264#line 1969 "asn1p_y.y"
3265{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3266 break;}
3267case 253:
3268#line 1970 "asn1p_y.y"
3269{ yyval.a_tag = yyvsp[0].a_tag; ;
3270 break;}
3271case 254:
3272#line 1974 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003273{
Lev Walkinc603f102005-01-23 09:51:44 +00003274 yyval.a_tag = yyvsp[-1].a_tag;
3275 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin1004aa92004-09-08 00:28:11 +00003276 ;
3277 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003278case 255:
3279#line 1981 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003280{
Lev Walkinc603f102005-01-23 09:51:44 +00003281 yyval.a_tag = yyvsp[-2].a_tag;
3282 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00003283 ;
3284 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003285case 256:
3286#line 1987 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003287{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00003288 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003289case 257:
3290#line 1988 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003291{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
Lev Walkin83cac2f2004-09-22 16:03:36 +00003292 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003293case 258:
3294#line 1989 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003295{ yyval.a_tag.tag_class = TC_APPLICATION; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003296 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003297case 259:
3298#line 1990 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003299{ yyval.a_tag.tag_class = TC_PRIVATE; ;
3300 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003301case 260:
3302#line 1994 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003303{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3304 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003305case 261:
3306#line 1995 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003307{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3308 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003309case 262:
3310#line 1996 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003311{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3312 break;}
Lev Walkinc603f102005-01-23 09:51:44 +00003313case 263:
Lev Walkinc8092cb2005-02-18 16:34:21 +00003314#line 2000 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003315{
3316 checkmem(yyvsp[0].tv_str);
3317 yyval.tv_str = yyvsp[0].tv_str;
3318 ;
3319 break;}
3320case 264:
Lev Walkinc8092cb2005-02-18 16:34:21 +00003321#line 2004 "asn1p_y.y"
3322{
3323 checkmem(yyvsp[0].tv_str);
3324 yyval.tv_str = yyvsp[0].tv_str;
3325 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003326 break;}
Lev Walkinc603f102005-01-23 09:51:44 +00003327case 265:
Lev Walkinc8092cb2005-02-18 16:34:21 +00003328#line 2012 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00003329{
Lev Walkinc8092cb2005-02-18 16:34:21 +00003330 checkmem(yyvsp[0].tv_str);
Lev Walkin144db9b2004-10-12 23:26:53 +00003331 yyval.tv_str = yyvsp[0].tv_str;
3332 ;
3333 break;}
Lev Walkinc603f102005-01-23 09:51:44 +00003334case 266:
Lev Walkinc8092cb2005-02-18 16:34:21 +00003335#line 2019 "asn1p_y.y"
3336{ yyval.tv_str = 0; ;
3337 break;}
3338case 267:
3339#line 2020 "asn1p_y.y"
3340{
3341 yyval.tv_str = yyvsp[0].tv_str;
3342 ;
3343 break;}
3344case 268:
3345#line 2025 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003346{
Lev Walkinceb20e72004-09-05 10:40:41 +00003347 checkmem(yyvsp[0].tv_str);
3348 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003349 ;
3350 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00003351}
3352 /* the action file gets copied in in place of this dollarsign */
3353#line 543 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00003354
3355 yyvsp -= yylen;
3356 yyssp -= yylen;
Lev Walkin1004aa92004-09-08 00:28:11 +00003357#ifdef YYLSP_NEEDED
3358 yylsp -= yylen;
3359#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003360
Lev Walkin1004aa92004-09-08 00:28:11 +00003361#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00003362 if (yydebug)
3363 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003364 short *ssp1 = yyss - 1;
3365 fprintf (stderr, "state stack now");
3366 while (ssp1 != yyssp)
3367 fprintf (stderr, " %d", *++ssp1);
3368 fprintf (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003369 }
3370#endif
3371
3372 *++yyvsp = yyval;
3373
Lev Walkin1004aa92004-09-08 00:28:11 +00003374#ifdef YYLSP_NEEDED
3375 yylsp++;
3376 if (yylen == 0)
3377 {
3378 yylsp->first_line = yylloc.first_line;
3379 yylsp->first_column = yylloc.first_column;
3380 yylsp->last_line = (yylsp-1)->last_line;
3381 yylsp->last_column = (yylsp-1)->last_column;
3382 yylsp->text = 0;
3383 }
3384 else
3385 {
3386 yylsp->last_line = (yylsp+yylen-1)->last_line;
3387 yylsp->last_column = (yylsp+yylen-1)->last_column;
3388 }
3389#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003390
Lev Walkin1004aa92004-09-08 00:28:11 +00003391 /* Now "shift" the result of the reduction.
3392 Determine what state that goes to,
3393 based on the state we popped back to
3394 and the rule number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003395
3396 yyn = yyr1[yyn];
3397
Lev Walkin1004aa92004-09-08 00:28:11 +00003398 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3399 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003400 yystate = yytable[yystate];
3401 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003402 yystate = yydefgoto[yyn - YYNTBASE];
Lev Walkinf15320b2004-06-03 03:38:44 +00003403
3404 goto yynewstate;
3405
Lev Walkin1004aa92004-09-08 00:28:11 +00003406yyerrlab: /* here on detecting error */
Lev Walkinf15320b2004-06-03 03:38:44 +00003407
Lev Walkin1004aa92004-09-08 00:28:11 +00003408 if (! yyerrstatus)
3409 /* If not already recovering from an error, report this error. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003410 {
3411 ++yynerrs;
Lev Walkin1004aa92004-09-08 00:28:11 +00003412
3413#ifdef YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003414 yyn = yypact[yystate];
3415
Lev Walkin1004aa92004-09-08 00:28:11 +00003416 if (yyn > YYFLAG && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003417 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003418 int size = 0;
3419 char *msg;
3420 int x, count;
Lev Walkinf15320b2004-06-03 03:38:44 +00003421
Lev Walkin1004aa92004-09-08 00:28:11 +00003422 count = 0;
3423 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3424 for (x = (yyn < 0 ? -yyn : 0);
3425 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3426 if (yycheck[x + yyn] == x)
3427 size += strlen(yytname[x]) + 15, count++;
3428 msg = (char *) malloc(size + 15);
3429 if (msg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003430 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003431 strcpy(msg, "parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003432
Lev Walkin1004aa92004-09-08 00:28:11 +00003433 if (count < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003434 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003435 count = 0;
3436 for (x = (yyn < 0 ? -yyn : 0);
3437 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3438 if (yycheck[x + yyn] == x)
Lev Walkinf15320b2004-06-03 03:38:44 +00003439 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003440 strcat(msg, count == 0 ? ", expecting `" : " or `");
3441 strcat(msg, yytname[x]);
3442 strcat(msg, "'");
3443 count++;
Lev Walkinf15320b2004-06-03 03:38:44 +00003444 }
3445 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003446 yyerror(msg);
3447 free(msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003448 }
3449 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003450 yyerror ("parse error; also virtual memory exceeded");
Lev Walkinf15320b2004-06-03 03:38:44 +00003451 }
3452 else
3453#endif /* YYERROR_VERBOSE */
Lev Walkin1004aa92004-09-08 00:28:11 +00003454 yyerror("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003455 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003456
Lev Walkinf15320b2004-06-03 03:38:44 +00003457 goto yyerrlab1;
Lev Walkin1004aa92004-09-08 00:28:11 +00003458yyerrlab1: /* here on error raised explicitly by an action */
Lev Walkinf15320b2004-06-03 03:38:44 +00003459
3460 if (yyerrstatus == 3)
3461 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003462 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003463
Lev Walkin1004aa92004-09-08 00:28:11 +00003464 /* return failure if at end of input */
Lev Walkinf15320b2004-06-03 03:38:44 +00003465 if (yychar == YYEOF)
Lev Walkin1004aa92004-09-08 00:28:11 +00003466 YYABORT;
Lev Walkinf15320b2004-06-03 03:38:44 +00003467
Lev Walkin1004aa92004-09-08 00:28:11 +00003468#if YYDEBUG != 0
3469 if (yydebug)
3470 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3471#endif
3472
Lev Walkinf15320b2004-06-03 03:38:44 +00003473 yychar = YYEMPTY;
3474 }
3475
Lev Walkin1004aa92004-09-08 00:28:11 +00003476 /* Else will try to reuse lookahead token
3477 after shifting the error token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003478
Lev Walkin1004aa92004-09-08 00:28:11 +00003479 yyerrstatus = 3; /* Each real token shifted decrements this */
Lev Walkinf15320b2004-06-03 03:38:44 +00003480
Lev Walkin1004aa92004-09-08 00:28:11 +00003481 goto yyerrhandle;
Lev Walkin459ab022004-09-07 10:39:09 +00003482
Lev Walkin1004aa92004-09-08 00:28:11 +00003483yyerrdefault: /* current state does not do anything special for the error token. */
Lev Walkin459ab022004-09-07 10:39:09 +00003484
Lev Walkin1004aa92004-09-08 00:28:11 +00003485#if 0
3486 /* This is wrong; only states that explicitly want error tokens
3487 should shift them. */
3488 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3489 if (yyn) goto yydefault;
Lev Walkinceb20e72004-09-05 10:40:41 +00003490#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003491
3492yyerrpop: /* pop the current state because it cannot handle the error token */
3493
3494 if (yyssp == yyss) YYABORT;
3495 yyvsp--;
3496 yystate = *--yyssp;
3497#ifdef YYLSP_NEEDED
3498 yylsp--;
3499#endif
3500
3501#if YYDEBUG != 0
3502 if (yydebug)
3503 {
3504 short *ssp1 = yyss - 1;
3505 fprintf (stderr, "Error: state stack now");
3506 while (ssp1 != yyssp)
3507 fprintf (stderr, " %d", *++ssp1);
3508 fprintf (stderr, "\n");
Lev Walkinceb20e72004-09-05 10:40:41 +00003509 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003510#endif
3511
3512yyerrhandle:
3513
3514 yyn = yypact[yystate];
3515 if (yyn == YYFLAG)
3516 goto yyerrdefault;
3517
3518 yyn += YYTERROR;
3519 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3520 goto yyerrdefault;
3521
3522 yyn = yytable[yyn];
3523 if (yyn < 0)
3524 {
3525 if (yyn == YYFLAG)
3526 goto yyerrpop;
3527 yyn = -yyn;
3528 goto yyreduce;
3529 }
3530 else if (yyn == 0)
3531 goto yyerrpop;
Lev Walkinf15320b2004-06-03 03:38:44 +00003532
3533 if (yyn == YYFINAL)
3534 YYACCEPT;
3535
Lev Walkin1004aa92004-09-08 00:28:11 +00003536#if YYDEBUG != 0
3537 if (yydebug)
3538 fprintf(stderr, "Shifting error token, ");
3539#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003540
3541 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00003542#ifdef YYLSP_NEEDED
3543 *++yylsp = yylloc;
3544#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003545
3546 yystate = yyn;
3547 goto yynewstate;
3548
Lev Walkin1004aa92004-09-08 00:28:11 +00003549 yyacceptlab:
3550 /* YYACCEPT comes here. */
3551 if (yyfree_stacks)
3552 {
3553 free (yyss);
3554 free (yyvs);
3555#ifdef YYLSP_NEEDED
3556 free (yyls);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003557#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003558 }
3559 return 0;
Lev Walkin459ab022004-09-07 10:39:09 +00003560
Lev Walkin1004aa92004-09-08 00:28:11 +00003561 yyabortlab:
3562 /* YYABORT comes here. */
3563 if (yyfree_stacks)
3564 {
3565 free (yyss);
3566 free (yyvs);
3567#ifdef YYLSP_NEEDED
3568 free (yyls);
Lev Walkin459ab022004-09-07 10:39:09 +00003569#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003570 }
3571 return 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003572}
Lev Walkinc8092cb2005-02-18 16:34:21 +00003573#line 2031 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00003574
3575
3576
3577/*
3578 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3579 */
3580static asn1p_value_t *
3581_convert_bitstring2binary(char *str, int base) {
3582 asn1p_value_t *val;
3583 int slen;
3584 int memlen;
3585 int baselen;
3586 int bits;
3587 uint8_t *binary_vector;
3588 uint8_t *bv_ptr;
3589 uint8_t cur_val;
3590
3591 assert(str);
3592 assert(str[0] == '\'');
3593
3594 switch(base) {
3595 case 'B':
3596 baselen = 1;
3597 break;
3598 case 'H':
3599 baselen = 4;
3600 break;
3601 default:
3602 assert(base == 'B' || base == 'H');
3603 errno = EINVAL;
3604 return NULL;
3605 }
3606
3607 slen = strlen(str);
3608 assert(str[slen - 1] == base);
3609 assert(str[slen - 2] == '\'');
3610
3611 memlen = slen / (8 / baselen); /* Conservative estimate */
3612
3613 bv_ptr = binary_vector = malloc(memlen + 1);
3614 if(bv_ptr == NULL)
3615 /* ENOMEM */
3616 return NULL;
3617
3618 cur_val = 0;
3619 bits = 0;
3620 while(*(++str) != '\'') {
3621 switch(baselen) {
3622 case 1:
3623 switch(*str) {
3624 case '1':
3625 cur_val |= 1 << (7 - (bits % 8));
3626 case '0':
3627 break;
3628 default:
3629 assert(!"_y UNREACH1");
3630 case ' ': case '\r': case '\n':
3631 continue;
3632 }
3633 break;
3634 case 4:
3635 switch(*str) {
3636 case '0': case '1': case '2': case '3': case '4':
3637 case '5': case '6': case '7': case '8': case '9':
3638 cur_val |= (*str - '0') << (4 - (bits % 8));
3639 break;
3640 case 'A': case 'B': case 'C':
3641 case 'D': case 'E': case 'F':
3642 cur_val |= ((*str - 'A') + 10)
3643 << (4 - (bits % 8));
3644 break;
3645 default:
3646 assert(!"_y UNREACH2");
3647 case ' ': case '\r': case '\n':
3648 continue;
3649 }
3650 break;
3651 }
3652
3653 bits += baselen;
3654 if((bits % 8) == 0) {
3655 *bv_ptr++ = cur_val;
3656 cur_val = 0;
3657 }
3658 }
3659
3660 *bv_ptr = cur_val;
3661 assert((bv_ptr - binary_vector) <= memlen);
3662
3663 val = asn1p_value_frombits(binary_vector, bits, 0);
3664 if(val == NULL) {
3665 free(binary_vector);
3666 }
3667
3668 return val;
3669}
3670
3671extern char *asn1p_text;
3672
3673int
3674yyerror(const char *msg) {
3675 fprintf(stderr,
3676 "ASN.1 grammar parse error "
3677 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00003678 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003679 return -1;
3680}
3681
3682