blob: 353c4fa44a77eafad15de87f78b27393157fa9f1 [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 Walkin1e448d32005-03-24 14:26:38 +0000207#define YYFINAL 437
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 Walkin1e448d32005-03-24 14:26:38 +0000211#define YYTRANSLATE(x) ((unsigned)(x) <= 354 ? yytranslate[x] : 220)
Lev Walkinf15320b2004-06-03 03:38:44 +0000212
Lev Walkin1004aa92004-09-08 00:28:11 +0000213static const char yytranslate[] = { 0,
214 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
215 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
216 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinc603f102005-01-23 09:51:44 +0000217 2, 2, 110, 2, 2, 2, 2, 2, 2, 105,
218 106, 2, 2, 108, 2, 111, 2, 2, 2, 2,
219 2, 2, 2, 2, 2, 2, 2, 109, 107, 112,
220 2, 2, 2, 113, 2, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000221 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
222 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinc603f102005-01-23 09:51:44 +0000223 114, 2, 115, 97, 2, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000224 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
225 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinc603f102005-01-23 09:51:44 +0000226 2, 2, 103, 99, 104, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000227 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
228 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
229 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
230 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
231 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
232 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
233 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
234 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
235 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
236 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
237 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
238 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
239 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
240 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
241 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
242 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
243 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
244 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
245 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
246 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
247 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
248 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
Lev Walkinc603f102005-01-23 09:51:44 +0000249 98, 100, 101, 102
Lev Walkin1004aa92004-09-08 00:28:11 +0000250};
Lev Walkinf15320b2004-06-03 03:38:44 +0000251
Lev Walkin1004aa92004-09-08 00:28:11 +0000252#if YYDEBUG != 0
253static const short yyprhs[] = { 0,
254 0, 2, 4, 7, 16, 17, 19, 23, 26, 28,
255 31, 33, 38, 40, 41, 43, 45, 48, 51, 54,
256 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
257 79, 81, 82, 86, 88, 92, 95, 97, 100, 105,
Lev Walkin144db9b2004-10-12 23:26:53 +0000258 107, 111, 113, 117, 119, 123, 127, 130, 132, 136,
259 138, 142, 144, 151, 153, 155, 156, 158, 160, 164,
260 166, 168, 173, 177, 181, 188, 190, 194, 196, 200,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000261 204, 208, 210, 214, 216, 218, 219, 221, 223, 227,
262 231, 235, 237, 239, 243, 246, 248, 254, 255, 257,
263 259, 263, 266, 271, 276, 277, 279, 280, 287, 289,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000264 292, 294, 296, 298, 302, 306, 310, 312, 317, 322,
265 327, 334, 341, 343, 348, 353, 355, 359, 361, 365,
266 369, 373, 375, 379, 381, 385, 387, 389, 391, 393,
267 398, 402, 403, 407, 409, 411, 413, 415, 417, 419,
Lev Walkin1e448d32005-03-24 14:26:38 +0000268 421, 423, 425, 429, 431, 437, 447, 449, 452, 454,
269 456, 458, 460, 463, 466, 468, 470, 473, 476, 478,
270 480, 482, 484, 486, 489, 491, 494, 496, 498, 500,
271 502, 504, 506, 508, 510, 512, 514, 516, 518, 520,
272 522, 524, 526, 528, 530, 532, 533, 535, 537, 542,
273 546, 551, 553, 557, 563, 565, 569, 573, 577, 581,
274 586, 590, 592, 594, 598, 602, 606, 610, 612, 614,
275 615, 621, 623, 626, 629, 633, 635, 637, 639, 641,
276 643, 645, 647, 649, 655, 657, 661, 663, 667, 668,
277 670, 672, 674, 676, 678, 680, 684, 689, 691, 695,
278 698, 702, 704, 708, 709, 711, 713, 716, 719, 723,
279 725, 729, 731, 736, 741, 743, 745, 747, 749, 750,
280 752, 755, 760, 761, 763, 765, 767, 768, 770, 772,
281 774, 776, 778, 779, 781
Lev Walkin1004aa92004-09-08 00:28:11 +0000282};
Lev Walkinf15320b2004-06-03 03:38:44 +0000283
Lev Walkinc603f102005-01-23 09:51:44 +0000284static const short yyrhs[] = { 117,
Lev Walkin1e448d32005-03-24 14:26:38 +0000285 0, 118, 0, 117, 118, 0, 216, 119, 34, 123,
Lev Walkinc603f102005-01-23 09:51:44 +0000286 3, 21, 126, 39, 0, 0, 120, 0, 103, 121,
287 104, 0, 103, 104, 0, 122, 0, 121, 122, 0,
Lev Walkin1e448d32005-03-24 14:26:38 +0000288 219, 0, 219, 105, 9, 106, 0, 9, 0, 0,
Lev Walkinc603f102005-01-23 09:51:44 +0000289 124, 0, 125, 0, 124, 125, 0, 41, 84, 0,
Lev Walkin1004aa92004-09-08 00:28:11 +0000290 52, 84, 0, 20, 84, 0, 43, 53, 0, 12,
Lev Walkinc603f102005-01-23 09:51:44 +0000291 57, 0, 0, 127, 0, 128, 0, 127, 128, 0,
292 130, 0, 135, 0, 143, 0, 170, 0, 138, 0,
Lev Walkin1e448d32005-03-24 14:26:38 +0000293 0, 38, 12, 129, 0, 179, 0, 54, 131, 107,
Lev Walkinc603f102005-01-23 09:51:44 +0000294 0, 54, 46, 0, 132, 0, 131, 132, 0, 133,
Lev Walkin1e448d32005-03-24 14:26:38 +0000295 46, 216, 119, 0, 134, 0, 133, 108, 134, 0,
296 216, 0, 216, 103, 104, 0, 219, 0, 42, 136,
Lev Walkinc603f102005-01-23 09:51:44 +0000297 107, 0, 42, 17, 107, 0, 42, 107, 0, 137,
Lev Walkin1e448d32005-03-24 14:26:38 +0000298 0, 136, 108, 137, 0, 216, 0, 216, 103, 104,
299 0, 219, 0, 216, 139, 3, 103, 140, 104, 0,
300 165, 0, 176, 0, 0, 141, 0, 142, 0, 141,
301 108, 142, 0, 102, 0, 187, 0, 216, 3, 211,
302 87, 0, 216, 3, 163, 0, 216, 3, 153, 0,
303 216, 103, 144, 104, 3, 163, 0, 145, 0, 144,
304 108, 145, 0, 216, 0, 216, 109, 219, 0, 216,
305 109, 216, 0, 176, 109, 219, 0, 147, 0, 146,
306 108, 147, 0, 163, 0, 219, 0, 0, 149, 0,
307 150, 0, 149, 108, 150, 0, 219, 163, 205, 0,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000308 30, 68, 163, 0, 162, 0, 152, 0, 151, 108,
Lev Walkin1e448d32005-03-24 14:26:38 +0000309 152, 0, 219, 163, 0, 162, 0, 28, 103, 155,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000310 104, 157, 0, 0, 88, 0, 156, 0, 155, 108,
Lev Walkin1e448d32005-03-24 14:26:38 +0000311 156, 0, 168, 205, 0, 168, 163, 154, 205, 0,
312 168, 168, 154, 205, 0, 0, 158, 0, 0, 95,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000313 82, 103, 159, 160, 104, 0, 161, 0, 160, 161,
314 0, 4, 0, 168, 0, 102, 0, 102, 110, 173,
Lev Walkin1e448d32005-03-24 14:26:38 +0000315 0, 102, 110, 210, 0, 211, 164, 183, 0, 178,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000316 0, 27, 103, 151, 104, 0, 78, 103, 148, 104,
Lev Walkin1e448d32005-03-24 14:26:38 +0000317 0, 79, 103, 148, 104, 0, 78, 183, 68, 218,
318 211, 164, 0, 79, 183, 68, 218, 211, 164, 0,
319 18, 0, 18, 35, 25, 219, 0, 216, 103, 146,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000320 104, 0, 165, 0, 56, 68, 165, 0, 11, 0,
Lev Walkin1e448d32005-03-24 14:26:38 +0000321 11, 111, 216, 0, 217, 111, 216, 0, 11, 111,
322 219, 0, 217, 0, 217, 111, 166, 0, 167, 0,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000323 166, 111, 167, 0, 169, 0, 169, 0, 13, 0,
Lev Walkin1e448d32005-03-24 14:26:38 +0000324 14, 0, 219, 139, 3, 171, 0, 219, 109, 171,
325 0, 0, 103, 172, 175, 0, 63, 0, 45, 0,
326 86, 0, 5, 0, 7, 0, 174, 0, 210, 0,
327 173, 0, 219, 0, 216, 111, 219, 0, 6, 0,
328 103, 9, 108, 9, 104, 0, 103, 9, 108, 9,
329 108, 9, 108, 9, 104, 0, 4, 0, 175, 4,
330 0, 24, 0, 63, 0, 76, 0, 177, 0, 67,
331 81, 0, 65, 51, 0, 77, 0, 44, 0, 36,
332 71, 0, 26, 81, 0, 91, 0, 47, 0, 179,
333 0, 58, 0, 40, 0, 22, 81, 0, 176, 0,
334 177, 207, 0, 23, 0, 48, 0, 49, 0, 50,
335 0, 59, 0, 64, 0, 74, 0, 83, 0, 85,
336 0, 90, 0, 92, 0, 93, 0, 94, 0, 66,
337 0, 99, 0, 100, 0, 97, 0, 98, 0, 96,
338 0, 0, 184, 0, 185, 0, 80, 105, 186, 106,
339 0, 105, 186, 106, 0, 185, 105, 186, 106, 0,
340 187, 0, 187, 108, 102, 0, 187, 108, 102, 108,
341 187, 0, 188, 0, 17, 96, 188, 0, 187, 180,
342 188, 0, 187, 181, 188, 0, 188, 182, 188, 0,
343 191, 105, 186, 106, 0, 105, 186, 106, 0, 192,
344 0, 193, 0, 192, 190, 192, 0, 61, 190, 192,
345 0, 192, 190, 60, 0, 61, 190, 60, 0, 199,
346 0, 194, 0, 0, 31, 25, 103, 189, 175, 0,
347 101, 0, 101, 112, 0, 112, 101, 0, 112, 101,
348 112, 0, 80, 0, 46, 0, 45, 0, 86, 0,
349 210, 0, 174, 0, 219, 0, 216, 0, 95, 30,
350 103, 195, 104, 0, 196, 0, 195, 108, 196, 0,
351 102, 0, 219, 183, 197, 0, 0, 198, 0, 73,
352 0, 15, 0, 69, 0, 200, 0, 201, 0, 103,
353 216, 104, 0, 200, 103, 202, 104, 0, 203, 0,
354 202, 108, 203, 0, 113, 204, 0, 113, 111, 204,
355 0, 219, 0, 204, 111, 219, 0, 0, 206, 0,
356 69, 0, 33, 171, 0, 103, 104, 0, 103, 208,
357 104, 0, 209, 0, 208, 108, 209, 0, 219, 0,
358 219, 105, 210, 106, 0, 219, 105, 173, 106, 0,
359 210, 0, 102, 0, 9, 0, 10, 0, 0, 212,
360 0, 213, 215, 0, 114, 214, 9, 115, 0, 0,
361 89, 0, 19, 0, 75, 0, 0, 52, 0, 41,
362 0, 11, 0, 12, 0, 12, 0, 0, 219, 0,
363 8, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000364};
Lev Walkinf15320b2004-06-03 03:38:44 +0000365
366#endif
367
Lev Walkin1004aa92004-09-08 00:28:11 +0000368#if YYDEBUG != 0
369static const short yyrline[] = { 0,
Lev Walkin1e448d32005-03-24 14:26:38 +0000370 303, 309, 315, 331, 356, 358, 361, 365, 370, 377,
371 385, 390, 394, 403, 405, 413, 417, 425, 429, 432,
372 435, 439, 459, 461, 469, 473, 505, 509, 518, 525,
373 538, 545, 547, 559, 572, 579, 584, 590, 596, 605,
374 611, 617, 624, 630, 638, 642, 645, 652, 658, 664,
375 671, 677, 686, 696, 704, 712, 714, 724, 727, 731,
376 734, 746, 758, 764, 780, 789, 799, 809, 814, 821,
377 828, 838, 844, 850, 854, 877, 879, 881, 887, 893,
378 900, 907, 912, 918, 924, 930, 935, 945, 947, 950,
379 958, 964, 973, 979, 996, 998, 1003, 1007, 1012, 1017,
380 1023, 1027, 1038, 1047, 1056, 1067, 1089, 1093, 1099, 1105,
381 1111, 1121, 1131, 1137, 1151, 1175, 1182, 1196, 1205, 1215,
382 1225, 1235, 1243, 1264, 1273, 1282, 1283, 1285, 1292, 1304,
383 1314, 1322, 1322, 1327, 1332, 1337, 1342, 1346, 1350, 1353,
384 1356, 1361, 1373, 1390, 1395, 1405, 1421, 1431, 1445, 1447,
385 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457,
386 1458, 1464, 1466, 1467, 1470, 1477, 1489, 1491, 1495, 1499,
387 1500, 1501, 1502, 1503, 1507, 1508, 1509, 1510, 1514, 1515,
388 1522, 1522, 1523, 1523, 1524, 1526, 1528, 1533, 1537, 1546,
389 1550, 1555, 1559, 1565, 1575, 1579, 1582, 1585, 1588, 1593,
390 1602, 1610, 1616, 1622, 1629, 1637, 1645, 1654, 1657, 1660,
391 1661, 1671, 1673, 1674, 1675, 1678, 1682, 1687, 1693, 1698,
392 1701, 1704, 1717, 1731, 1737, 1741, 1746, 1752, 1764, 1766,
393 1769, 1773, 1776, 1781, 1785, 1793, 1808, 1814, 1821, 1834,
394 1846, 1861, 1865, 1882, 1887, 1890, 1895, 1917, 1922, 1927,
395 1933, 1939, 1947, 1955, 1963, 1970, 1980, 1985, 2015, 2017,
396 2020, 2027, 2033, 2035, 2036, 2037, 2040, 2042, 2043, 2046,
397 2051, 2058, 2065, 2067, 2071
Lev Walkin1004aa92004-09-08 00:28:11 +0000398};
399#endif
400
401
402#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
403
404static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
405"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
406"TOK_number_negative","TOK_typereference","TOK_capitalreference","TOK_typefieldreference",
407"TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY",
408"TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN",
409"TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS",
410"TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED",
411"TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL","TOK_END","TOK_ENUMERATED",
412"TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE",
413"TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString","TOK_GraphicString","TOK_IA5String",
414"TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE",
415"TOK_INSTRUCTIONS","TOK_INTEGER","TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY",
416"TOK_NULL","TOK_NumericString","TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET",
417"TOK_OF","TOK_OPTIONAL","TOK_PATTERN","TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT",
418"TOK_PrintableString","TOK_PRIVATE","TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE",
419"TOK_SET","TOK_SIZE","TOK_STRING","TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString",
420"TOK_TRUE","TOK_TYPE_IDENTIFIER","TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString",
421"TOK_UTCTime","TOK_UTF8String","TOK_VideotexString","TOK_VisibleString","TOK_WITH",
422"TOK_EXCEPT","'^'","TOK_INTERSECTION","'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots",
Lev Walkinc603f102005-01-23 09:51:44 +0000423"'{'","'}'","'('","')'","';'","','","':'","'!'","'.'","'<'","'@'","'['","']'",
Lev Walkin1004aa92004-09-08 00:28:11 +0000424"ParsedGrammar","ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
425"ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags",
426"ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody",
427"ModuleSpecificationBody","ModuleSpecificationElement","@1","ImportsDefinition",
428"ImportsBundleSet","ImportsBundle","ImportsList","ImportsElement","ExportsDefinition",
429"ExportsBody","ExportsElement","ValueSetDefinition","DefinedTypeRef","optValueSetBody",
430"ValueSetBody","ValueSetElement","DataTypeReference","ParameterArgumentList",
Lev Walkin144db9b2004-10-12 23:26:53 +0000431"ParameterArgumentName","ActualParameterList","ActualParameter","optComponentTypeLists",
432"ComponentTypeLists","ComponentType","AlternativeTypeLists","AlternativeType",
433"ClassDeclaration","optUnique","ClassFieldList","ClassField","optWithSyntax",
434"WithSyntax","@2","WithSyntaxFormat","WithSyntaxFormatToken","ExtensionAndException",
435"Type","TypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList",
436"ComplexTypeReferenceElement","ClassFieldIdentifier","ClassFieldName","ValueDefinition",
Lev Walkin1e448d32005-03-24 14:26:38 +0000437"Value","@3","DefinedValue","RestrictedCharacterStringValue","Opaque","BasicTypeId",
438"BasicTypeId_UniverationCompatible","BasicType","BasicString","Union","Intersection",
439"Except","optConstraints","Constraints","SetOfConstraints","ElementSetSpecs",
440"ElementSetSpec","ConstraintSubtypeElement","@4","ConstraintRangeSpec","ConstraintSpec",
441"SingleValue","ContainedSubtype","WithComponents","WithComponentsList","WithComponentsElement",
442"optPresenceConstraint","PresenceConstraint","TableConstraint","SimpleTableConstraint",
443"ComponentRelationConstraint","AtNotationList","AtNotationElement","ComponentIdList",
444"optMarker","Marker","UniverationDefinition","UniverationList","UniverationElement",
445"SignedNumber","optTag","Tag","TagTypeValue","TagClass","TagPlicit","TypeRefName",
446"ObjectClassReference","optIdentifier","Identifier", NULL
Lev Walkin1004aa92004-09-08 00:28:11 +0000447};
448#endif
449
450static const short yyr1[] = { 0,
Lev Walkinc603f102005-01-23 09:51:44 +0000451 116, 117, 117, 118, 119, 119, 120, 120, 121, 121,
452 122, 122, 122, 123, 123, 124, 124, 125, 125, 125,
453 125, 125, 126, 126, 127, 127, 128, 128, 128, 128,
454 128, 129, 128, 128, 130, 130, 131, 131, 132, 133,
455 133, 134, 134, 134, 135, 135, 135, 136, 136, 137,
456 137, 137, 138, 139, 139, 140, 140, 141, 141, 142,
457 142, 143, 143, 143, 143, 144, 144, 145, 145, 145,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000458 145, 146, 146, 147, 147, 148, 148, 149, 149, 150,
459 150, 150, 151, 151, 152, 152, 153, 154, 154, 155,
460 155, 156, 156, 156, 157, 157, 159, 158, 160, 160,
461 161, 161, 162, 162, 162, 163, 164, 164, 164, 164,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000462 164, 164, 164, 164, 164, 164, 164, 165, 165, 165,
463 165, 165, 165, 166, 166, 167, 168, 169, 169, 170,
464 171, 172, 171, 171, 171, 171, 171, 171, 171, 171,
Lev Walkin1e448d32005-03-24 14:26:38 +0000465 171, 173, 173, 174, 174, 174, 175, 175, 176, 176,
466 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
467 176, 177, 177, 177, 178, 178, 179, 179, 179, 179,
468 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
469 180, 180, 181, 181, 182, 183, 183, 184, 184, 185,
470 185, 186, 186, 186, 187, 187, 187, 187, 187, 188,
471 188, 188, 188, 188, 188, 188, 188, 188, 188, 189,
472 188, 190, 190, 190, 190, 191, 191, 192, 192, 192,
473 192, 192, 193, 194, 195, 195, 196, 196, 197, 197,
474 198, 198, 198, 199, 199, 200, 201, 202, 202, 203,
475 203, 204, 204, 205, 205, 206, 206, 207, 207, 208,
476 208, 209, 209, 209, 209, 209, 210, 210, 211, 211,
477 212, 213, 214, 214, 214, 214, 215, 215, 215, 216,
478 216, 217, 218, 218, 219
Lev Walkin1004aa92004-09-08 00:28:11 +0000479};
480
481static const short yyr2[] = { 0,
482 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
483 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
484 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
485 1, 0, 3, 1, 3, 2, 1, 2, 4, 1,
Lev Walkin144db9b2004-10-12 23:26:53 +0000486 3, 1, 3, 1, 3, 3, 2, 1, 3, 1,
487 3, 1, 6, 1, 1, 0, 1, 1, 3, 1,
488 1, 4, 3, 3, 6, 1, 3, 1, 3, 3,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000489 3, 1, 3, 1, 1, 0, 1, 1, 3, 3,
490 3, 1, 1, 3, 2, 1, 5, 0, 1, 1,
491 3, 2, 4, 4, 0, 1, 0, 6, 1, 2,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000492 1, 1, 1, 3, 3, 3, 1, 4, 4, 4,
493 6, 6, 1, 4, 4, 1, 3, 1, 3, 3,
494 3, 1, 3, 1, 3, 1, 1, 1, 1, 4,
495 3, 0, 3, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin1e448d32005-03-24 14:26:38 +0000496 1, 1, 3, 1, 5, 9, 1, 2, 1, 1,
497 1, 1, 2, 2, 1, 1, 2, 2, 1, 1,
498 1, 1, 1, 2, 1, 2, 1, 1, 1, 1,
Lev Walkin1004aa92004-09-08 00:28:11 +0000499 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin1e448d32005-03-24 14:26:38 +0000500 1, 1, 1, 1, 1, 0, 1, 1, 4, 3,
501 4, 1, 3, 5, 1, 3, 3, 3, 3, 4,
502 3, 1, 1, 3, 3, 3, 3, 1, 1, 0,
503 5, 1, 2, 2, 3, 1, 1, 1, 1, 1,
504 1, 1, 1, 5, 1, 3, 1, 3, 0, 1,
505 1, 1, 1, 1, 1, 3, 4, 1, 3, 2,
506 3, 1, 3, 0, 1, 1, 2, 2, 3, 1,
507 3, 1, 4, 4, 1, 1, 1, 1, 0, 1,
508 2, 4, 0, 1, 1, 1, 0, 1, 1, 1,
509 1, 1, 0, 1, 1
Lev Walkin1004aa92004-09-08 00:28:11 +0000510};
511
512static const short yydefact[] = { 0,
Lev Walkin1e448d32005-03-24 14:26:38 +0000513 270, 271, 1, 2, 5, 3, 0, 0, 6, 275,
Lev Walkin1004aa92004-09-08 00:28:11 +0000514 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
515 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
Lev Walkin1e448d32005-03-24 14:26:38 +0000516 18, 21, 19, 0, 17, 12, 23, 167, 0, 0,
517 168, 169, 170, 0, 171, 172, 180, 173, 174, 175,
518 176, 177, 178, 179, 0, 24, 25, 27, 28, 31,
Lev Walkin144db9b2004-10-12 23:26:53 +0000519 29, 30, 34, 0, 0, 32, 0, 47, 0, 48,
520 50, 52, 36, 0, 37, 0, 40, 42, 44, 4,
Lev Walkin1e448d32005-03-24 14:26:38 +0000521 26, 259, 118, 272, 0, 149, 0, 0, 163, 156,
522 160, 162, 150, 0, 0, 151, 155, 159, 0, 0,
523 54, 55, 152, 161, 122, 0, 33, 46, 45, 0,
524 0, 35, 38, 0, 0, 0, 0, 263, 64, 63,
525 0, 260, 267, 0, 164, 158, 157, 154, 153, 0,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000526 66, 0, 68, 0, 0, 0, 49, 51, 5, 41,
Lev Walkin1e448d32005-03-24 14:26:38 +0000527 43, 0, 265, 266, 264, 0, 118, 272, 113, 0,
528 0, 186, 186, 62, 186, 116, 165, 152, 107, 0,
529 269, 268, 261, 119, 121, 0, 0, 0, 0, 56,
530 128, 129, 123, 124, 126, 120, 137, 144, 138, 257,
531 258, 135, 134, 136, 132, 130, 141, 139, 140, 0,
532 142, 39, 0, 90, 259, 127, 0, 0, 0, 0,
533 0, 76, 0, 0, 187, 188, 76, 0, 106, 0,
534 166, 259, 259, 67, 71, 70, 69, 0, 0, 218,
535 217, 0, 216, 219, 0, 60, 0, 0, 0, 57,
536 58, 221, 61, 195, 0, 202, 203, 209, 208, 234,
537 235, 220, 223, 222, 0, 0, 0, 0, 0, 95,
538 0, 0, 246, 88, 88, 92, 245, 0, 262, 0,
539 103, 0, 83, 86, 259, 117, 0, 0, 0, 77,
540 78, 82, 259, 0, 192, 273, 0, 0, 273, 256,
541 248, 0, 250, 255, 252, 0, 72, 74, 75, 65,
542 0, 0, 212, 0, 0, 0, 0, 0, 53, 0,
543 183, 184, 181, 182, 0, 0, 185, 0, 0, 0,
544 0, 125, 0, 147, 133, 143, 131, 0, 87, 96,
545 91, 247, 89, 244, 244, 114, 0, 108, 0, 85,
546 0, 259, 109, 0, 244, 190, 0, 259, 274, 0,
547 110, 259, 249, 0, 0, 115, 259, 196, 210, 213,
548 214, 207, 0, 205, 0, 236, 201, 59, 197, 198,
549 199, 0, 206, 204, 0, 0, 238, 0, 148, 0,
550 93, 94, 104, 105, 142, 84, 189, 81, 79, 80,
551 193, 0, 191, 0, 251, 0, 0, 73, 0, 215,
552 227, 0, 225, 186, 200, 0, 240, 242, 237, 0,
553 145, 0, 97, 0, 111, 112, 254, 253, 211, 224,
554 0, 229, 241, 0, 239, 0, 0, 194, 226, 232,
555 233, 231, 228, 230, 243, 0, 101, 0, 99, 102,
556 0, 98, 100, 146, 0, 0, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000557};
558
Lev Walkin1e448d32005-03-24 14:26:38 +0000559static const short yydefgoto[] = { 435,
Lev Walkin1004aa92004-09-08 00:28:11 +0000560 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000561 56, 57, 107, 58, 74, 75, 76, 77, 59, 69,
Lev Walkin1e448d32005-03-24 14:26:38 +0000562 70, 60, 100, 229, 230, 231, 61, 130, 131, 286,
563 287, 269, 270, 271, 262, 263, 119, 324, 193, 194,
564 319, 320, 417, 428, 429, 272, 288, 155, 156, 173,
565 174, 195, 196, 62, 186, 247, 187, 232, 315, 157,
566 103, 159, 104, 305, 306, 308, 204, 205, 206, 274,
567 275, 234, 389, 295, 235, 236, 237, 238, 392, 393,
568 423, 424, 239, 240, 241, 366, 367, 397, 256, 257,
569 211, 282, 283, 242, 258, 122, 123, 146, 163, 243,
570 105, 338, 244
Lev Walkin1004aa92004-09-08 00:28:11 +0000571};
572
Lev Walkin1e448d32005-03-24 14:26:38 +0000573static const short yypact[] = { 203,
574-32768,-32768, 203,-32768, -62,-32768, 39, 24,-32768,-32768,
575-32768,-32768, 43,-32768, -31, 138,-32768,-32768, 75, 50,
576 30, 38, 112, 87, 170, 138,-32768, 76,-32768,-32768,
577-32768,-32768,-32768, 187,-32768,-32768, 490,-32768, 213, 9,
578-32768,-32768,-32768, 155,-32768,-32768,-32768,-32768,-32768,-32768,
579-32768,-32768,-32768,-32768, 172, 490,-32768,-32768,-32768,-32768,
580-32768,-32768,-32768, 361, 719,-32768, 121,-32768, 149,-32768,
581 143,-32768,-32768, 27,-32768, -22,-32768, 148,-32768,-32768,
582-32768, -10, 123,-32768, 173,-32768, 177, 202,-32768,-32768,
583-32768,-32768,-32768, 229, 200,-32768,-32768,-32768, 794, 284,
584-32768,-32768,-32768,-32768, 179, 285,-32768,-32768,-32768, 186,
585 198,-32768,-32768, 203, 186, 201, 205, 10,-32768,-32768,
586 567,-32768, 54, 186,-32768,-32768,-32768,-32768,-32768, -21,
587-32768, 194, 195, 206, 272, 460,-32768,-32768, -62,-32768,
588-32768, 247,-32768,-32768,-32768, 297, 8, 207, 276, 210,
589 244, 104, 107,-32768, -40,-32768,-32768, 212,-32768, 214,
590-32768,-32768,-32768,-32768,-32768, 315, 794, 311, 186, 221,
591-32768,-32768, 219,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
592-32768,-32768,-32768,-32768, 312,-32768,-32768,-32768,-32768, 220,
593 216,-32768, -15,-32768, 31,-32768, 217, 308, 7, 259,
594 230, 58, 283, 266,-32768, 231, 58, 271,-32768, 53,
595-32768, 6, 227,-32768,-32768,-32768,-32768, 246, 320,-32768,
596-32768, 68,-32768,-32768, 316,-32768, 238, 283, 243, 241,
597-32768,-32768, 199, 254, 248, 68,-32768,-32768,-32768, 249,
598-32768,-32768,-32768,-32768, 247, 251, 347, 311, 460, 260,
599 247, 460,-32768, 268, 268,-32768,-32768, 644,-32768, 311,
600 250, -3,-32768,-32768, 227,-32768, 283, 286, 253, 257,
601-32768,-32768, 227, 256, 78, 311, 283, 262, 311,-32768,
602-32768, 85,-32768,-32768, 263, 98,-32768,-32768,-32768,-32768,
603 450, 264, 258, 270, 67, 273, 275, 269,-32768, 221,
604-32768,-32768,-32768,-32768, 450, 450,-32768, 450, 283, 88,
605 261,-32768, 368,-32768, 376,-32768,-32768, 299,-32768,-32768,
606-32768,-32768,-32768, 1, 1,-32768, 267,-32768, 7,-32768,
607 287, 227,-32768, 58, 1,-32768, 280, 227,-32768, 288,
608-32768, 227,-32768, 70, 267,-32768, 6,-32768,-32768,-32768,
609 278,-32768, 312,-32768, 47,-32768,-32768,-32768,-32768,-32768,
610-32768, 289,-32768,-32768, 17, 116,-32768, 131,-32768, 293,
611-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
612 291, 644,-32768, 644,-32768, 296, 300,-32768, 347,-32768,
613-32768, 136,-32768, -40,-32768, 311, 281,-32768,-32768, 261,
614-32768, 382,-32768, 283,-32768,-32768,-32768,-32768, 376,-32768,
615 47, 95, 281, 311,-32768, 295, 209, 199,-32768,-32768,
616-32768,-32768,-32768,-32768,-32768, 403,-32768, 55,-32768,-32768,
617 309,-32768,-32768,-32768, 414, 415,-32768
Lev Walkin1004aa92004-09-08 00:28:11 +0000618};
619
620static const short yypgoto[] = {-32768,
Lev Walkin1e448d32005-03-24 14:26:38 +0000621-32768, 413, 279,-32768,-32768, 404,-32768,-32768, 395,-32768,
622-32768, 366,-32768,-32768,-32768, 349,-32768, 314,-32768,-32768,
623 321,-32768, 365,-32768,-32768, 132,-32768,-32768, 274,-32768,
624 86, 232,-32768, 100,-32768, 111,-32768, 181,-32768, 191,
625-32768,-32768,-32768,-32768, 15, -187, -77, -228, -54,-32768,
626 204, -191, -122,-32768, -206,-32768, -291, -108, 56, -42,
627 -120,-32768, -6,-32768,-32768,-32768, -146,-32768,-32768, -196,
628 -168, -87,-32768, 211,-32768, -268,-32768,-32768,-32768, 37,
629-32768,-32768,-32768,-32768,-32768,-32768, 57, 77, -233,-32768,
630-32768,-32768, 106, -128, -79,-32768,-32768,-32768,-32768, 16,
631-32768, 184, -7
Lev Walkin1004aa92004-09-08 00:28:11 +0000632};
633
634
Lev Walkin1e448d32005-03-24 14:26:38 +0000635#define YYLAST 888
Lev Walkin1004aa92004-09-08 00:28:11 +0000636
637
638static const short yytable[] = { 15,
Lev Walkin1e448d32005-03-24 14:26:38 +0000639 158, 233, 121, 255, 120, 15, 208, 189, 209, 101,
640 101, 264, 175, 10, 10, 5, 10, 117, 5, 1,
641 2, 102, 102, 114, 10, 67, 354, 188, 143, 65,
642 63, 298, 72, 252, 10, 373, 79, 1, 2, 201,
643 7, 364, 317, 171, 172, 322, 10, 11, 65, 63,
644 10, 11, 64, 386, 10, 71, 132, 16, 427, 78,
645 10, 180, 181, 252, 203, 10, 79, 171, 172, 253,
646 331, 64, 178, 19, 10, 180, 181, 10, 180, 181,
647 340, 284, 166, 28, 144, 115, 167, 268, 250, 78,
648 371, 372, 251, 178, 161, 10, 180, 181, 145, 253,
649 328, 380, 72, 118, 329, 162, 29, 79, 261, 420,
650 -270, 220, 362, 30, 133, 68, 165, 254, 124, 118,
651 189, 31, 175, 189, 132, 71, 352, 396, 191, 139,
652 78, 233, 220, 112, -244, 290, 160, 158, -244, 164,
653 188, 264, 12, 188, 118, 266, 17, 363, 391, 20,
654 176, 190, 224, 405, 280, 406, 281, 21, 432, 261,
655 215, 217, 10, 421, 32, 1, 2, 422, 293, 353,
656 33, 280, 34, 224, 301, 302, 303, 304, 22, 294,
657 23, 36, 133, 201, 216, 337, 201, 330, 343, 24,
658 353, 265, 344, 10, 273, 335, 1, 2, 374, 273,
659 73, 346, 285, 348, 289, 347, 202, 37, 203, 207,
660 80, 203, 427, 1, 2, 284, 387, 359, 360, 399,
661 361, 171, 172, 400, 66, 430, 178, 108, 10, 180,
662 181, 1, 2, 124, 401, 418, 430, 218, 402, 410,
663 316, 191, 297, 411, 191, 111, 246, 412, 1, 2,
664 116, 219, 326, 125, 378, 109, 110, 126, 382, 171,
665 172, 158, 384, 158, 190, 220, 221, 190, 339, 83,
666 84, 339, 127, 160, 10, 180, 181, 1, 2, 128,
667 129, 222, 1, 2, 171, 172, 134, 136, 178, 135,
668 10, 180, 181, 1, 2, 301, 302, 303, 304, 218,
669 223, 138, 168, 169, 141, 197, 224, 142, 170, -271,
670 198, 200, 199, 219, 210, 225, 212, 213, 10, 375,
671 246, 265, 226, 227, 249, 228, 273, 220, 221, 245,
672 248, 259, 260, 276, 267, 277, 285, 375, 279, 289,
673 118, 291, 190, 222, 292, 296, 299, 394, 300, 307,
674 314, 311, 309, 332, 318, 323, 333, 398, 313, 327,
675 190, 336, 223, 82, 334, 341, 349, 345, 224, 350,
676 351, 83, 84, 365, 357, 355, 368, 225, 356, 369,
677 370, 381, 85, 38, 86, 227, 87, 228, 398, 390,
678 416, 414, 377, 383, 395, 403, 88, 160, 404, 160,
679 89, 407, 426, 394, 90, 408, 425, 91, 41, 42,
680 43, 431, 434, 436, 437, 6, 18, 192, 92, 45,
681 35, 81, 113, 93, 46, 94, 47, 95, 140, 106,
682 137, 358, 388, 379, 48, 325, 96, 97, 278, 376,
683 214, 321, 433, 49, 409, 50, 310, 419, 312, 385,
684 51, 98, 52, 53, 54, 178, 415, 10, 180, 181,
685 1, 2, 342, 99, 177, 178, 179, 10, 180, 181,
686 1, 2, 413, 0, 0, 0, 0, 0, 0, 0,
687 219, 0, 0, 0, 0, 0, 0, 0, 0, 0,
688 0, 0, 0, 0, 220, 221, 0, 10, 0, 0,
689 1, 2, 0, 0, 182, 0, 0, 0, 0, 0,
690 222, 0, 38, 0, 0, 0, 0, 0, 0, 0,
691 0, 0, 183, 0, 0, 0, 0, 39, 0, 223,
692 0, 40, 0, 0, 0, 224, 0, 41, 42, 43,
693 0, 0, 0, 44, 225, 184, 0, 0, 45, 0,
694 0, 0, 227, 46, 228, 47, 0, 0, 0, 0,
695 0, 0, 185, 48, 0, 0, 0, 0, 0, 0,
696 0, 0, 49, 0, 50, 0, 0, 147, 148, 51,
697 0, 52, 53, 54, 149, 0, 0, 0, 85, 38,
698 86, 0, 87, 150, 0, 0, 0, 0, 0, 0,
699 0, 0, 88, 0, 0, 0, 89, 0, 0, 0,
700 90, 0, 0, 91, 41, 42, 43, 0, 0, 0,
701 0, 0, 151, 0, 92, 45, 0, 0, 0, 93,
702 46, 94, 47, 95, 0, 0, 0, 0, 0, 0,
703 48, 0, 96, 97, 152, 153, 0, 0, 0, 49,
704 0, 50, 0, 154, 147, 148, 51, 98, 52, 53,
Lev Walkin1893ddf2005-03-20 14:28:32 +0000705 54, 149, 0, 0, 0, 85, 38, 86, 0, 87,
706 150, 0, 0, 0, 0, 0, 0, 0, 0, 88,
707 0, 0, 0, 89, 0, 0, 0, 90, 0, 0,
708 91, 41, 42, 43, 0, 0, 0, 0, 0, 151,
709 0, 92, 45, 0, 0, 0, 93, 46, 94, 47,
710 95, 0, 0, 0, 0, 0, 0, 48, 0, 96,
Lev Walkin1e448d32005-03-24 14:26:38 +0000711 97, 152, 153, 0, 0, 0, 49, 0, 50, 83,
712 84, 0, 0, 51, 98, 52, 53, 54, 0, 0,
713 85, 38, 86, 0, 87, 0, 0, 0, 0, 0,
714 0, 0, 0, 0, 88, 0, 0, 0, 89, 0,
715 0, 0, 90, 0, 0, 91, 41, 42, 43, 0,
716 0, 0, 0, 0, 0, 0, 92, 45, 0, 0,
717 0, 93, 46, 94, 47, 95, 0, 0, 0, 0,
718 0, 0, 48, 0, 96, 97, 0, 0, 0, 0,
719 0, 49, 0, 50, 1, 2, 0, 0, 51, 98,
720 52, 53, 54, 0, 0, 85, 38, 86, 0, 87,
721 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,
722 0, 0, 0, 89, 0, 0, 0, 90, 0, 0,
723 91, 41, 42, 43, 0, 0, 0, 0, 0, 0,
724 0, 92, 45, 0, 0, 0, 93, 46, 94, 47,
725 95, 0, 0, 0, 0, 0, 0, 48, 0, 96,
726 97, 0, 0, 0, 0, 0, 49, 0, 50, 0,
727 0, 0, 0, 51, 98, 52, 53, 54
Lev Walkin1004aa92004-09-08 00:28:11 +0000728};
729
730static const short yycheck[] = { 7,
Lev Walkin1e448d32005-03-24 14:26:38 +0000731 121, 170, 82, 195, 82, 13, 153, 136, 155, 64,
732 65, 199, 135, 8, 8, 0, 8, 28, 3, 11,
733 12, 64, 65, 46, 8, 17, 295, 136, 19, 37,
734 37, 228, 40, 33, 8, 327, 44, 11, 12, 80,
735 103, 310, 249, 13, 14, 252, 8, 9, 56, 56,
736 8, 9, 37, 345, 8, 40, 99, 34, 4, 44,
737 8, 9, 10, 33, 105, 8, 74, 13, 14, 69,
738 267, 56, 6, 105, 8, 9, 10, 8, 9, 10,
739 277, 210, 104, 9, 75, 108, 108, 30, 104, 74,
740 324, 325, 108, 6, 41, 8, 9, 10, 89, 69,
741 104, 335, 110, 114, 108, 52, 57, 115, 102, 15,
742 103, 45, 309, 84, 99, 107, 124, 195, 111, 114,
743 249, 84, 245, 252, 167, 110, 60, 111, 136, 114,
744 115, 300, 45, 107, 104, 213, 121, 258, 108, 124,
745 249, 329, 104, 252, 114, 200, 104, 60, 102, 12,
746 135, 136, 86, 382, 102, 384, 104, 20, 104, 102,
747 168, 169, 8, 69, 53, 11, 12, 73, 101, 103,
748 84, 102, 3, 86, 97, 98, 99, 100, 41, 112,
749 43, 106, 167, 80, 169, 108, 80, 265, 104, 52,
750 103, 199, 108, 8, 202, 273, 11, 12, 327, 207,
751 46, 104, 210, 291, 212, 108, 103, 21, 105, 103,
752 39, 105, 4, 11, 12, 344, 345, 305, 306, 104,
753 308, 13, 14, 108, 12, 417, 6, 107, 8, 9,
754 10, 11, 12, 111, 104, 404, 428, 17, 108, 104,
755 248, 249, 227, 108, 252, 103, 9, 394, 11, 12,
756 103, 31, 260, 81, 332, 107, 108, 81, 338, 13,
757 14, 382, 342, 384, 249, 45, 46, 252, 276, 11,
758 12, 279, 71, 258, 8, 9, 10, 11, 12, 51,
759 81, 61, 11, 12, 13, 14, 3, 3, 6, 111,
760 8, 9, 10, 11, 12, 97, 98, 99, 100, 17,
761 80, 104, 109, 109, 104, 9, 86, 103, 103, 103,
762 35, 68, 103, 31, 103, 95, 103, 3, 8, 327,
763 9, 329, 102, 103, 109, 105, 334, 45, 46, 111,
764 111, 115, 25, 68, 105, 105, 344, 345, 68, 347,
765 114, 96, 327, 61, 25, 30, 104, 355, 108, 96,
766 4, 103, 105, 68, 95, 88, 104, 365, 108, 110,
767 345, 106, 80, 3, 108, 104, 103, 105, 86, 112,
768 101, 11, 12, 113, 106, 103, 9, 95, 104, 4,
769 82, 102, 22, 23, 24, 103, 26, 105, 396, 112,
770 9, 111, 106, 106, 106, 103, 36, 382, 108, 384,
771 40, 106, 108, 411, 44, 106, 414, 47, 48, 49,
772 50, 9, 104, 0, 0, 3, 13, 139, 58, 59,
773 26, 56, 74, 63, 64, 65, 66, 67, 115, 65,
774 110, 300, 347, 334, 74, 255, 76, 77, 207, 329,
775 167, 251, 428, 83, 389, 85, 236, 411, 245, 344,
776 90, 91, 92, 93, 94, 6, 400, 8, 9, 10,
777 11, 12, 279, 103, 5, 6, 7, 8, 9, 10,
778 11, 12, 396, -1, -1, -1, -1, -1, -1, -1,
779 31, -1, -1, -1, -1, -1, -1, -1, -1, -1,
780 -1, -1, -1, -1, 45, 46, -1, 8, -1, -1,
781 11, 12, -1, -1, 45, -1, -1, -1, -1, -1,
782 61, -1, 23, -1, -1, -1, -1, -1, -1, -1,
783 -1, -1, 63, -1, -1, -1, -1, 38, -1, 80,
784 -1, 42, -1, -1, -1, 86, -1, 48, 49, 50,
785 -1, -1, -1, 54, 95, 86, -1, -1, 59, -1,
786 -1, -1, 103, 64, 105, 66, -1, -1, -1, -1,
787 -1, -1, 103, 74, -1, -1, -1, -1, -1, -1,
788 -1, -1, 83, -1, 85, -1, -1, 11, 12, 90,
789 -1, 92, 93, 94, 18, -1, -1, -1, 22, 23,
790 24, -1, 26, 27, -1, -1, -1, -1, -1, -1,
791 -1, -1, 36, -1, -1, -1, 40, -1, -1, -1,
792 44, -1, -1, 47, 48, 49, 50, -1, -1, -1,
793 -1, -1, 56, -1, 58, 59, -1, -1, -1, 63,
794 64, 65, 66, 67, -1, -1, -1, -1, -1, -1,
795 74, -1, 76, 77, 78, 79, -1, -1, -1, 83,
796 -1, 85, -1, 87, 11, 12, 90, 91, 92, 93,
Lev Walkin1893ddf2005-03-20 14:28:32 +0000797 94, 18, -1, -1, -1, 22, 23, 24, -1, 26,
798 27, -1, -1, -1, -1, -1, -1, -1, -1, 36,
799 -1, -1, -1, 40, -1, -1, -1, 44, -1, -1,
800 47, 48, 49, 50, -1, -1, -1, -1, -1, 56,
801 -1, 58, 59, -1, -1, -1, 63, 64, 65, 66,
802 67, -1, -1, -1, -1, -1, -1, 74, -1, 76,
Lev Walkin1e448d32005-03-24 14:26:38 +0000803 77, 78, 79, -1, -1, -1, 83, -1, 85, 11,
804 12, -1, -1, 90, 91, 92, 93, 94, -1, -1,
805 22, 23, 24, -1, 26, -1, -1, -1, -1, -1,
806 -1, -1, -1, -1, 36, -1, -1, -1, 40, -1,
807 -1, -1, 44, -1, -1, 47, 48, 49, 50, -1,
808 -1, -1, -1, -1, -1, -1, 58, 59, -1, -1,
809 -1, 63, 64, 65, 66, 67, -1, -1, -1, -1,
810 -1, -1, 74, -1, 76, 77, -1, -1, -1, -1,
811 -1, 83, -1, 85, 11, 12, -1, -1, 90, 91,
812 92, 93, 94, -1, -1, 22, 23, 24, -1, 26,
813 -1, -1, -1, -1, -1, -1, -1, -1, -1, 36,
814 -1, -1, -1, 40, -1, -1, -1, 44, -1, -1,
815 47, 48, 49, 50, -1, -1, -1, -1, -1, -1,
816 -1, 58, 59, -1, -1, -1, 63, 64, 65, 66,
817 67, -1, -1, -1, -1, -1, -1, 74, -1, 76,
818 77, -1, -1, -1, -1, -1, 83, -1, 85, -1,
819 -1, -1, -1, 90, 91, 92, 93, 94
Lev Walkin1004aa92004-09-08 00:28:11 +0000820};
821/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
822#line 3 "/usr/share/bison.simple"
823/* This file comes from bison-1.28. */
824
825/* Skeleton output parser for bison,
826 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
827
828 This program is free software; you can redistribute it and/or modify
829 it under the terms of the GNU General Public License as published by
830 the Free Software Foundation; either version 2, or (at your option)
831 any later version.
832
833 This program is distributed in the hope that it will be useful,
834 but WITHOUT ANY WARRANTY; without even the implied warranty of
835 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
836 GNU General Public License for more details.
837
838 You should have received a copy of the GNU General Public License
839 along with this program; if not, write to the Free Software
840 Foundation, Inc., 59 Temple Place - Suite 330,
841 Boston, MA 02111-1307, USA. */
842
843/* As a special exception, when this file is copied by Bison into a
844 Bison output file, you may use that output file without restriction.
845 This special exception was added by the Free Software Foundation
846 in version 1.24 of Bison. */
847
848/* This is the parser code that is written into each bison parser
849 when the %semantic_parser declaration is not specified in the grammar.
850 It was written by Richard Stallman by simplifying the hairy parser
851 used when %semantic_parser is specified. */
852
853#ifndef YYSTACK_USE_ALLOCA
854#ifdef alloca
855#define YYSTACK_USE_ALLOCA
856#else /* alloca not defined */
857#ifdef __GNUC__
858#define YYSTACK_USE_ALLOCA
859#define alloca __builtin_alloca
860#else /* not GNU C. */
861#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
862#define YYSTACK_USE_ALLOCA
863#include <alloca.h>
864#else /* not sparc */
865/* We think this test detects Watcom and Microsoft C. */
866/* This used to test MSDOS, but that is a bad idea
867 since that symbol is in the user namespace. */
868#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
869#if 0 /* No need for malloc.h, which pollutes the namespace;
870 instead, just don't use alloca. */
871#include <malloc.h>
872#endif
873#else /* not MSDOS, or __TURBOC__ */
874#if defined(_AIX)
875/* I don't know what this was needed for, but it pollutes the namespace.
876 So I turned it off. rms, 2 May 1997. */
877/* #include <malloc.h> */
878 #pragma alloca
879#define YYSTACK_USE_ALLOCA
880#else /* not MSDOS, or __TURBOC__, or _AIX */
881#if 0
882#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
883 and on HPUX 10. Eventually we can turn this on. */
884#define YYSTACK_USE_ALLOCA
885#define alloca __builtin_alloca
886#endif /* __hpux */
887#endif
888#endif /* not _AIX */
889#endif /* not MSDOS, or __TURBOC__ */
890#endif /* not sparc */
891#endif /* not GNU C */
892#endif /* alloca not defined */
893#endif /* YYSTACK_USE_ALLOCA not defined */
894
895#ifdef YYSTACK_USE_ALLOCA
896#define YYSTACK_ALLOC alloca
Lev Walkinf15320b2004-06-03 03:38:44 +0000897#else
Lev Walkin1004aa92004-09-08 00:28:11 +0000898#define YYSTACK_ALLOC malloc
Lev Walkinf15320b2004-06-03 03:38:44 +0000899#endif
900
Lev Walkin1004aa92004-09-08 00:28:11 +0000901/* Note: there must be only one dollar sign in this file.
902 It is replaced by the list of actions, each action
903 as one case of the switch. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000904
905#define yyerrok (yyerrstatus = 0)
906#define yyclearin (yychar = YYEMPTY)
907#define YYEMPTY -2
908#define YYEOF 0
909#define YYACCEPT goto yyacceptlab
Lev Walkin1004aa92004-09-08 00:28:11 +0000910#define YYABORT goto yyabortlab
Lev Walkinf15320b2004-06-03 03:38:44 +0000911#define YYERROR goto yyerrlab1
Lev Walkin1004aa92004-09-08 00:28:11 +0000912/* Like YYERROR except do call yyerror.
913 This remains here temporarily to ease the
914 transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +0000915 Once GCC version 2 has supplanted version 1, this can go. */
916#define YYFAIL goto yyerrlab
917#define YYRECOVERING() (!!yyerrstatus)
Lev Walkin1004aa92004-09-08 00:28:11 +0000918#define YYBACKUP(token, value) \
Lev Walkinf15320b2004-06-03 03:38:44 +0000919do \
920 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin1004aa92004-09-08 00:28:11 +0000921 { yychar = (token), yylval = (value); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000922 yychar1 = YYTRANSLATE (yychar); \
923 YYPOPSTACK; \
924 goto yybackup; \
925 } \
926 else \
Lev Walkin1004aa92004-09-08 00:28:11 +0000927 { yyerror ("syntax error: cannot back up"); YYERROR; } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000928while (0)
929
930#define YYTERROR 1
931#define YYERRCODE 256
932
Lev Walkin1004aa92004-09-08 00:28:11 +0000933#ifndef YYPURE
934#define YYLEX yylex()
Lev Walkinf15320b2004-06-03 03:38:44 +0000935#endif
936
Lev Walkin1004aa92004-09-08 00:28:11 +0000937#ifdef YYPURE
938#ifdef YYLSP_NEEDED
939#ifdef YYLEX_PARAM
940#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
941#else
942#define YYLEX yylex(&yylval, &yylloc)
943#endif
944#else /* not YYLSP_NEEDED */
945#ifdef YYLEX_PARAM
946#define YYLEX yylex(&yylval, YYLEX_PARAM)
947#else
948#define YYLEX yylex(&yylval)
949#endif
950#endif /* not YYLSP_NEEDED */
951#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000952
Lev Walkin1004aa92004-09-08 00:28:11 +0000953/* If nonreentrant, generate the variables here */
Lev Walkinf15320b2004-06-03 03:38:44 +0000954
Lev Walkin1004aa92004-09-08 00:28:11 +0000955#ifndef YYPURE
Lev Walkinf15320b2004-06-03 03:38:44 +0000956
Lev Walkin1004aa92004-09-08 00:28:11 +0000957int yychar; /* the lookahead symbol */
958YYSTYPE yylval; /* the semantic value of the */
959 /* lookahead symbol */
Lev Walkinf15320b2004-06-03 03:38:44 +0000960
Lev Walkin1004aa92004-09-08 00:28:11 +0000961#ifdef YYLSP_NEEDED
962YYLTYPE yylloc; /* location data for the lookahead */
963 /* symbol */
964#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000965
Lev Walkin1004aa92004-09-08 00:28:11 +0000966int yynerrs; /* number of parse errors so far */
967#endif /* not YYPURE */
968
969#if YYDEBUG != 0
970int yydebug; /* nonzero means print parse trace */
971/* Since this is uninitialized, it does not stop multiple parsers
972 from coexisting. */
973#endif
974
975/* YYINITDEPTH indicates the initial size of the parser's stacks */
976
Lev Walkinf15320b2004-06-03 03:38:44 +0000977#ifndef YYINITDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000978#define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +0000979#endif
980
Lev Walkin1004aa92004-09-08 00:28:11 +0000981/* YYMAXDEPTH is the maximum size the stacks can grow to
982 (effective only if the built-in stack extension method is used). */
Lev Walkinf15320b2004-06-03 03:38:44 +0000983
984#if YYMAXDEPTH == 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000985#undef YYMAXDEPTH
Lev Walkinf15320b2004-06-03 03:38:44 +0000986#endif
987
988#ifndef YYMAXDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000989#define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +0000990#endif
991
Lev Walkin1004aa92004-09-08 00:28:11 +0000992/* Define __yy_memcpy. Note that the size argument
993 should be passed with type unsigned int, because that is what the non-GCC
994 definitions require. With GCC, __builtin_memcpy takes an arg
995 of type size_t, but it can handle unsigned int. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000996
Lev Walkin1004aa92004-09-08 00:28:11 +0000997#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
998#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
999#else /* not GNU C or C++ */
1000#ifndef __cplusplus
Lev Walkinf15320b2004-06-03 03:38:44 +00001001
Lev Walkin1004aa92004-09-08 00:28:11 +00001002/* This is the most reliable way to avoid incompatibilities
1003 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +00001004static void
Lev Walkin1004aa92004-09-08 00:28:11 +00001005__yy_memcpy (to, from, count)
1006 char *to;
1007 char *from;
1008 unsigned int count;
Lev Walkin459ab022004-09-07 10:39:09 +00001009{
Lev Walkin1004aa92004-09-08 00:28:11 +00001010 register char *f = from;
1011 register char *t = to;
1012 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001013
Lev Walkin1004aa92004-09-08 00:28:11 +00001014 while (i-- > 0)
1015 *t++ = *f++;
Lev Walkin459ab022004-09-07 10:39:09 +00001016}
Lev Walkin459ab022004-09-07 10:39:09 +00001017
Lev Walkin1004aa92004-09-08 00:28:11 +00001018#else /* __cplusplus */
Lev Walkin459ab022004-09-07 10:39:09 +00001019
Lev Walkin1004aa92004-09-08 00:28:11 +00001020/* This is the most reliable way to avoid incompatibilities
1021 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +00001022static void
Lev Walkin1004aa92004-09-08 00:28:11 +00001023__yy_memcpy (char *to, char *from, unsigned int count)
Lev Walkin459ab022004-09-07 10:39:09 +00001024{
Lev Walkin1004aa92004-09-08 00:28:11 +00001025 register char *t = to;
1026 register char *f = from;
1027 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001028
Lev Walkin1004aa92004-09-08 00:28:11 +00001029 while (i-- > 0)
1030 *t++ = *f++;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001031}
Lev Walkin609ccbb2004-09-04 04:49:21 +00001032
Lev Walkin1004aa92004-09-08 00:28:11 +00001033#endif
1034#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001035
Lev Walkin1004aa92004-09-08 00:28:11 +00001036#line 217 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00001037
1038/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1039 into yyparse. The argument should have type void *.
1040 It should actually point to an object.
1041 Grammar actions can access the variable by casting it
1042 to the proper pointer type. */
1043
1044#ifdef YYPARSE_PARAM
Lev Walkin1004aa92004-09-08 00:28:11 +00001045#ifdef __cplusplus
1046#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1047#define YYPARSE_PARAM_DECL
1048#else /* not __cplusplus */
1049#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1050#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1051#endif /* not __cplusplus */
1052#else /* not YYPARSE_PARAM */
1053#define YYPARSE_PARAM_ARG
1054#define YYPARSE_PARAM_DECL
1055#endif /* not YYPARSE_PARAM */
Lev Walkinf15320b2004-06-03 03:38:44 +00001056
1057/* Prevent warning if -Wstrict-prototypes. */
1058#ifdef __GNUC__
Lev Walkin1004aa92004-09-08 00:28:11 +00001059#ifdef YYPARSE_PARAM
Lev Walkinf15320b2004-06-03 03:38:44 +00001060int yyparse (void *);
Lev Walkin1004aa92004-09-08 00:28:11 +00001061#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001062int yyparse (void);
Lev Walkin1004aa92004-09-08 00:28:11 +00001063#endif
Lev Walkinceb20e72004-09-05 10:40:41 +00001064#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001065
Lev Walkinf15320b2004-06-03 03:38:44 +00001066int
Lev Walkin1004aa92004-09-08 00:28:11 +00001067yyparse(YYPARSE_PARAM_ARG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001068 YYPARSE_PARAM_DECL
1069{
1070 register int yystate;
1071 register int yyn;
1072 register short *yyssp;
1073 register YYSTYPE *yyvsp;
Lev Walkin1004aa92004-09-08 00:28:11 +00001074 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1075 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
Lev Walkinf15320b2004-06-03 03:38:44 +00001076
Lev Walkin1004aa92004-09-08 00:28:11 +00001077 short yyssa[YYINITDEPTH]; /* the state stack */
1078 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
Lev Walkinf15320b2004-06-03 03:38:44 +00001079
Lev Walkin1004aa92004-09-08 00:28:11 +00001080 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1081 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
Lev Walkinf15320b2004-06-03 03:38:44 +00001082
Lev Walkin1004aa92004-09-08 00:28:11 +00001083#ifdef YYLSP_NEEDED
1084 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1085 YYLTYPE *yyls = yylsa;
1086 YYLTYPE *yylsp;
1087
1088#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1089#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001090#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkin1004aa92004-09-08 00:28:11 +00001091#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001092
Lev Walkin1004aa92004-09-08 00:28:11 +00001093 int yystacksize = YYINITDEPTH;
1094 int yyfree_stacks = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001095
Lev Walkin1004aa92004-09-08 00:28:11 +00001096#ifdef YYPURE
1097 int yychar;
1098 YYSTYPE yylval;
1099 int yynerrs;
1100#ifdef YYLSP_NEEDED
1101 YYLTYPE yylloc;
1102#endif
1103#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001104
Lev Walkin1004aa92004-09-08 00:28:11 +00001105 YYSTYPE yyval; /* the variable used to return */
1106 /* semantic values from the action */
1107 /* routines */
Lev Walkinf15320b2004-06-03 03:38:44 +00001108
1109 int yylen;
1110
Lev Walkin1004aa92004-09-08 00:28:11 +00001111#if YYDEBUG != 0
1112 if (yydebug)
1113 fprintf(stderr, "Starting parse\n");
1114#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001115
1116 yystate = 0;
1117 yyerrstatus = 0;
1118 yynerrs = 0;
1119 yychar = YYEMPTY; /* Cause a token to be read. */
1120
1121 /* Initialize stack pointers.
1122 Waste one element of value and location stack
1123 so that they stay on the same level as the state stack.
1124 The wasted elements are never initialized. */
1125
Lev Walkin1004aa92004-09-08 00:28:11 +00001126 yyssp = yyss - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001127 yyvsp = yyvs;
Lev Walkin1004aa92004-09-08 00:28:11 +00001128#ifdef YYLSP_NEEDED
1129 yylsp = yyls;
1130#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001131
Lev Walkin1004aa92004-09-08 00:28:11 +00001132/* Push a new state, which is found in yystate . */
1133/* In all cases, when you get here, the value and location stacks
1134 have just been pushed. so pushing a state here evens the stacks. */
1135yynewstate:
Lev Walkinf15320b2004-06-03 03:38:44 +00001136
Lev Walkin1004aa92004-09-08 00:28:11 +00001137 *++yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001138
1139 if (yyssp >= yyss + yystacksize - 1)
1140 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001141 /* Give user a chance to reallocate the stack */
1142 /* Use copies of these so that the &'s don't force the real ones into memory. */
1143 YYSTYPE *yyvs1 = yyvs;
1144 short *yyss1 = yyss;
1145#ifdef YYLSP_NEEDED
1146 YYLTYPE *yyls1 = yyls;
1147#endif
1148
Lev Walkinf15320b2004-06-03 03:38:44 +00001149 /* Get the current used size of the three stacks, in elements. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001150 int size = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001151
1152#ifdef yyoverflow
Lev Walkin1004aa92004-09-08 00:28:11 +00001153 /* Each stack pointer address is followed by the size of
1154 the data in use in that stack, in bytes. */
1155#ifdef YYLSP_NEEDED
1156 /* This used to be a conditional around just the two extra args,
1157 but that might be undefined if yyoverflow is a macro. */
1158 yyoverflow("parser stack overflow",
1159 &yyss1, size * sizeof (*yyssp),
1160 &yyvs1, size * sizeof (*yyvsp),
1161 &yyls1, size * sizeof (*yylsp),
1162 &yystacksize);
1163#else
1164 yyoverflow("parser stack overflow",
1165 &yyss1, size * sizeof (*yyssp),
1166 &yyvs1, size * sizeof (*yyvsp),
1167 &yystacksize);
1168#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001169
Lev Walkin1004aa92004-09-08 00:28:11 +00001170 yyss = yyss1; yyvs = yyvs1;
1171#ifdef YYLSP_NEEDED
1172 yyls = yyls1;
1173#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001174#else /* no yyoverflow */
1175 /* Extend the stack our own way. */
1176 if (yystacksize >= YYMAXDEPTH)
Lev Walkin1004aa92004-09-08 00:28:11 +00001177 {
1178 yyerror("parser stack overflow");
1179 if (yyfree_stacks)
1180 {
1181 free (yyss);
1182 free (yyvs);
1183#ifdef YYLSP_NEEDED
1184 free (yyls);
1185#endif
1186 }
1187 return 2;
1188 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001189 yystacksize *= 2;
1190 if (yystacksize > YYMAXDEPTH)
1191 yystacksize = YYMAXDEPTH;
Lev Walkin1004aa92004-09-08 00:28:11 +00001192#ifndef YYSTACK_USE_ALLOCA
1193 yyfree_stacks = 1;
1194#endif
1195 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1196 __yy_memcpy ((char *)yyss, (char *)yyss1,
1197 size * (unsigned int) sizeof (*yyssp));
1198 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1199 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1200 size * (unsigned int) sizeof (*yyvsp));
1201#ifdef YYLSP_NEEDED
1202 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1203 __yy_memcpy ((char *)yyls, (char *)yyls1,
1204 size * (unsigned int) sizeof (*yylsp));
1205#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001206#endif /* no yyoverflow */
1207
Lev Walkin1004aa92004-09-08 00:28:11 +00001208 yyssp = yyss + size - 1;
1209 yyvsp = yyvs + size - 1;
1210#ifdef YYLSP_NEEDED
1211 yylsp = yyls + size - 1;
1212#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001213
Lev Walkin1004aa92004-09-08 00:28:11 +00001214#if YYDEBUG != 0
1215 if (yydebug)
1216 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1217#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001218
1219 if (yyssp >= yyss + yystacksize - 1)
1220 YYABORT;
1221 }
1222
Lev Walkin1004aa92004-09-08 00:28:11 +00001223#if YYDEBUG != 0
1224 if (yydebug)
1225 fprintf(stderr, "Entering state %d\n", yystate);
1226#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001227
1228 goto yybackup;
Lev Walkin1004aa92004-09-08 00:28:11 +00001229 yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001230
1231/* Do appropriate processing given the current state. */
1232/* Read a lookahead token if we need one and don't already have one. */
1233/* yyresume: */
1234
1235 /* First try to decide what to do without reference to lookahead token. */
1236
1237 yyn = yypact[yystate];
Lev Walkin1004aa92004-09-08 00:28:11 +00001238 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001239 goto yydefault;
1240
1241 /* Not known => get a lookahead token if don't already have one. */
1242
1243 /* yychar is either YYEMPTY or YYEOF
1244 or a valid token in external form. */
1245
1246 if (yychar == YYEMPTY)
1247 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001248#if YYDEBUG != 0
1249 if (yydebug)
1250 fprintf(stderr, "Reading a token: ");
1251#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001252 yychar = YYLEX;
1253 }
1254
Lev Walkin1004aa92004-09-08 00:28:11 +00001255 /* Convert token to internal form (in yychar1) for indexing tables with */
Lev Walkinf15320b2004-06-03 03:38:44 +00001256
Lev Walkin1004aa92004-09-08 00:28:11 +00001257 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001258 {
1259 yychar1 = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001260 yychar = YYEOF; /* Don't call YYLEX any more */
Lev Walkinf15320b2004-06-03 03:38:44 +00001261
Lev Walkin1004aa92004-09-08 00:28:11 +00001262#if YYDEBUG != 0
1263 if (yydebug)
1264 fprintf(stderr, "Now at end of input.\n");
1265#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001266 }
1267 else
1268 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001269 yychar1 = YYTRANSLATE(yychar);
Lev Walkinf15320b2004-06-03 03:38:44 +00001270
Lev Walkin1004aa92004-09-08 00:28:11 +00001271#if YYDEBUG != 0
1272 if (yydebug)
1273 {
1274 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1275 /* Give the individual parser a way to print the precise meaning
1276 of a token, for further debugging info. */
1277#ifdef YYPRINT
1278 YYPRINT (stderr, yychar, yylval);
1279#endif
1280 fprintf (stderr, ")\n");
1281 }
1282#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001283 }
1284
1285 yyn += yychar1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001286 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001287 goto yydefault;
Lev Walkin1004aa92004-09-08 00:28:11 +00001288
Lev Walkinf15320b2004-06-03 03:38:44 +00001289 yyn = yytable[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001290
1291 /* yyn is what to do for this token type in this state.
1292 Negative => reduce, -yyn is rule number.
1293 Positive => shift, yyn is new state.
1294 New state is final state => don't bother to shift,
1295 just return success.
1296 0, or most negative number => error. */
1297
1298 if (yyn < 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001299 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001300 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001301 goto yyerrlab;
1302 yyn = -yyn;
1303 goto yyreduce;
1304 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001305 else if (yyn == 0)
1306 goto yyerrlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001307
1308 if (yyn == YYFINAL)
1309 YYACCEPT;
1310
1311 /* Shift the lookahead token. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001312
1313#if YYDEBUG != 0
1314 if (yydebug)
1315 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1316#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001317
1318 /* Discard the token being shifted unless it is eof. */
1319 if (yychar != YYEOF)
1320 yychar = YYEMPTY;
1321
1322 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00001323#ifdef YYLSP_NEEDED
1324 *++yylsp = yylloc;
1325#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001326
Lev Walkin1004aa92004-09-08 00:28:11 +00001327 /* count tokens shifted since error; after three, turn off error status. */
1328 if (yyerrstatus) yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001329
1330 yystate = yyn;
1331 goto yynewstate;
1332
Lev Walkin1004aa92004-09-08 00:28:11 +00001333/* Do the default action for the current state. */
Lev Walkin459ab022004-09-07 10:39:09 +00001334yydefault:
Lev Walkin1004aa92004-09-08 00:28:11 +00001335
Lev Walkinf15320b2004-06-03 03:38:44 +00001336 yyn = yydefact[yystate];
1337 if (yyn == 0)
1338 goto yyerrlab;
1339
Lev Walkin1004aa92004-09-08 00:28:11 +00001340/* Do a reduction. yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001341yyreduce:
1342 yylen = yyr2[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001343 if (yylen > 0)
1344 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Lev Walkinf15320b2004-06-03 03:38:44 +00001345
Lev Walkin1004aa92004-09-08 00:28:11 +00001346#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00001347 if (yydebug)
1348 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001349 int i;
Lev Walkinf15320b2004-06-03 03:38:44 +00001350
Lev Walkin1004aa92004-09-08 00:28:11 +00001351 fprintf (stderr, "Reducing via rule %d (line %d), ",
1352 yyn, yyrline[yyn]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001353
1354 /* Print the symbols being reduced, and their result. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001355 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1356 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1357 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001358 }
1359#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001360
Lev Walkin1004aa92004-09-08 00:28:11 +00001361
1362 switch (yyn) {
1363
1364case 1:
Lev Walkin1e448d32005-03-24 14:26:38 +00001365#line 304 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001366{
1367 *(void **)param = yyvsp[0].a_grammar;
1368 ;
1369 break;}
1370case 2:
Lev Walkin1e448d32005-03-24 14:26:38 +00001371#line 310 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001372{
Lev Walkinf15320b2004-06-03 03:38:44 +00001373 yyval.a_grammar = asn1p_new();
1374 checkmem(yyval.a_grammar);
1375 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001376 ;
1377 break;}
1378case 3:
Lev Walkin1e448d32005-03-24 14:26:38 +00001379#line 315 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001380{
Lev Walkinf15320b2004-06-03 03:38:44 +00001381 yyval.a_grammar = yyvsp[-1].a_grammar;
1382 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001383 ;
1384 break;}
1385case 4:
Lev Walkin1e448d32005-03-24 14:26:38 +00001386#line 336 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001387{
Lev Walkinf15320b2004-06-03 03:38:44 +00001388
1389 if(yyvsp[-1].a_module) {
1390 yyval.a_module = yyvsp[-1].a_module;
1391 } else {
1392 /* There's a chance that a module is just plain empty */
1393 yyval.a_module = asn1p_module_new();
1394 }
1395 checkmem(yyval.a_module);
1396
1397 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1398 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1399 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001400 ;
1401 break;}
1402case 5:
Lev Walkin1e448d32005-03-24 14:26:38 +00001403#line 357 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001404{ yyval.a_oid = 0; ;
1405 break;}
1406case 6:
Lev Walkin1e448d32005-03-24 14:26:38 +00001407#line 358 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001408{ yyval.a_oid = yyvsp[0].a_oid; ;
1409 break;}
1410case 7:
Lev Walkin1e448d32005-03-24 14:26:38 +00001411#line 362 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001412{
Lev Walkinf15320b2004-06-03 03:38:44 +00001413 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin1004aa92004-09-08 00:28:11 +00001414 ;
1415 break;}
1416case 8:
Lev Walkin1e448d32005-03-24 14:26:38 +00001417#line 365 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001418{
Lev Walkinf15320b2004-06-03 03:38:44 +00001419 yyval.a_oid = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001420 ;
1421 break;}
1422case 9:
Lev Walkin1e448d32005-03-24 14:26:38 +00001423#line 371 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001424{
Lev Walkinf15320b2004-06-03 03:38:44 +00001425 yyval.a_oid = asn1p_oid_new();
1426 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1427 if(yyvsp[0].a_oid_arc.name)
1428 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001429 ;
1430 break;}
1431case 10:
Lev Walkin1e448d32005-03-24 14:26:38 +00001432#line 377 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001433{
Lev Walkinf15320b2004-06-03 03:38:44 +00001434 yyval.a_oid = yyvsp[-1].a_oid;
1435 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1436 if(yyvsp[0].a_oid_arc.name)
1437 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001438 ;
1439 break;}
1440case 11:
Lev Walkin1e448d32005-03-24 14:26:38 +00001441#line 386 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001442{ /* iso */
Lev Walkinf15320b2004-06-03 03:38:44 +00001443 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1444 yyval.a_oid_arc.number = -1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001445 ;
1446 break;}
1447case 12:
Lev Walkin1e448d32005-03-24 14:26:38 +00001448#line 390 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001449{ /* iso(1) */
Lev Walkinf15320b2004-06-03 03:38:44 +00001450 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1451 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001452 ;
1453 break;}
1454case 13:
Lev Walkin1e448d32005-03-24 14:26:38 +00001455#line 394 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001456{ /* 1 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001457 yyval.a_oid_arc.name = 0;
1458 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001459 ;
1460 break;}
1461case 14:
Lev Walkin1e448d32005-03-24 14:26:38 +00001462#line 404 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001463{ yyval.a_module_flags = MSF_NOFLAGS; ;
1464 break;}
1465case 15:
Lev Walkin1e448d32005-03-24 14:26:38 +00001466#line 405 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001467{
Lev Walkinf15320b2004-06-03 03:38:44 +00001468 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001469 ;
1470 break;}
1471case 16:
Lev Walkin1e448d32005-03-24 14:26:38 +00001472#line 414 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001473{
Lev Walkinf15320b2004-06-03 03:38:44 +00001474 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001475 ;
1476 break;}
1477case 17:
Lev Walkin1e448d32005-03-24 14:26:38 +00001478#line 417 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001479{
Lev Walkinf15320b2004-06-03 03:38:44 +00001480 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001481 ;
1482 break;}
1483case 18:
Lev Walkin1e448d32005-03-24 14:26:38 +00001484#line 426 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001485{
Lev Walkinf15320b2004-06-03 03:38:44 +00001486 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001487 ;
1488 break;}
1489case 19:
Lev Walkin1e448d32005-03-24 14:26:38 +00001490#line 429 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001491{
Lev Walkinf15320b2004-06-03 03:38:44 +00001492 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001493 ;
1494 break;}
1495case 20:
Lev Walkin1e448d32005-03-24 14:26:38 +00001496#line 432 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001497{
Lev Walkinf15320b2004-06-03 03:38:44 +00001498 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001499 ;
1500 break;}
1501case 21:
Lev Walkin1e448d32005-03-24 14:26:38 +00001502#line 435 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001503{
Lev Walkinf15320b2004-06-03 03:38:44 +00001504 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin1004aa92004-09-08 00:28:11 +00001505 ;
1506 break;}
1507case 22:
Lev Walkin1e448d32005-03-24 14:26:38 +00001508#line 439 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001509{
Lev Walkinf59d0752004-08-18 04:59:12 +00001510 /* X.680Amd1 specifies TAG and XER */
1511 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1512 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1513 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1514 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1515 } else {
1516 fprintf(stderr,
1517 "WARNING: %s INSTRUCTIONS at line %d: "
1518 "Unrecognized encoding reference\n",
1519 yyvsp[-1].tv_str, yylineno);
1520 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1521 }
1522 free(yyvsp[-1].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00001523 ;
1524 break;}
1525case 23:
Lev Walkin1e448d32005-03-24 14:26:38 +00001526#line 460 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001527{ yyval.a_module = 0; ;
1528 break;}
1529case 24:
Lev Walkin1e448d32005-03-24 14:26:38 +00001530#line 461 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001531{
Lev Walkinf15320b2004-06-03 03:38:44 +00001532 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001533 ;
1534 break;}
1535case 25:
Lev Walkin1e448d32005-03-24 14:26:38 +00001536#line 470 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001537{
Lev Walkinf59d0752004-08-18 04:59:12 +00001538 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001539 ;
1540 break;}
1541case 26:
Lev Walkin1e448d32005-03-24 14:26:38 +00001542#line 473 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001543{
Lev Walkinf15320b2004-06-03 03:38:44 +00001544 yyval.a_module = yyvsp[-1].a_module;
1545
Lev Walkinf59d0752004-08-18 04:59:12 +00001546 /* Behave well when one of them is skipped. */
1547 if(!(yyvsp[-1].a_module)) {
1548 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1549 break;
1550 }
1551
Lev Walkinf15320b2004-06-03 03:38:44 +00001552#ifdef MY_IMPORT
1553#error MY_IMPORT DEFINED ELSEWHERE!
1554#endif
1555#define MY_IMPORT(foo,field) do { \
Lev Walkinbc55d232004-08-13 12:31:09 +00001556 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
Lev Walkinf15320b2004-06-03 03:38:44 +00001557 TQ_ADD(&(yyval.a_module->foo), \
1558 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1559 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001560 } \
1561 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1562 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001563
1564 MY_IMPORT(imports, xp_next);
1565 MY_IMPORT(exports, xp_next);
1566 MY_IMPORT(members, next);
1567#undef MY_IMPORT
1568
Lev Walkin1004aa92004-09-08 00:28:11 +00001569 ;
1570 break;}
1571case 27:
Lev Walkin1e448d32005-03-24 14:26:38 +00001572#line 506 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001573{
Lev Walkinf15320b2004-06-03 03:38:44 +00001574 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001575 ;
1576 break;}
1577case 28:
Lev Walkin1e448d32005-03-24 14:26:38 +00001578#line 509 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001579{
Lev Walkinf15320b2004-06-03 03:38:44 +00001580 yyval.a_module = asn1p_module_new();
1581 checkmem(yyval.a_module);
1582 if(yyvsp[0].a_xports) {
1583 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1584 } else {
1585 /* "EXPORTS ALL;" ? */
1586 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001587 ;
1588 break;}
1589case 29:
Lev Walkin1e448d32005-03-24 14:26:38 +00001590#line 518 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001591{
Lev Walkinf15320b2004-06-03 03:38:44 +00001592 yyval.a_module = asn1p_module_new();
1593 checkmem(yyval.a_module);
1594 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1595 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1596 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001597 ;
1598 break;}
1599case 30:
Lev Walkin1e448d32005-03-24 14:26:38 +00001600#line 525 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001601{
Lev Walkinf59d0752004-08-18 04:59:12 +00001602 yyval.a_module = asn1p_module_new();
1603 checkmem(yyval.a_module);
1604 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1605 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1606 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001607 ;
1608 break;}
1609case 31:
Lev Walkin1e448d32005-03-24 14:26:38 +00001610#line 538 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001611{
Lev Walkinf59d0752004-08-18 04:59:12 +00001612 yyval.a_module = asn1p_module_new();
1613 checkmem(yyval.a_module);
1614 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1615 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1616 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001617 ;
1618 break;}
1619case 32:
Lev Walkin1e448d32005-03-24 14:26:38 +00001620#line 546 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001621{ asn1p_lexer_hack_push_encoding_control(); ;
1622 break;}
1623case 33:
Lev Walkin1e448d32005-03-24 14:26:38 +00001624#line 547 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001625{
Lev Walkinf59d0752004-08-18 04:59:12 +00001626 fprintf(stderr,
1627 "WARNING: ENCODING-CONTROL %s "
1628 "specification at line %d ignored\n",
1629 yyvsp[-1].tv_str, yylineno);
1630 free(yyvsp[-1].tv_str);
1631 yyval.a_module = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001632 ;
1633 break;}
1634case 34:
Lev Walkin1e448d32005-03-24 14:26:38 +00001635#line 559 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001636{
Lev Walkinf15320b2004-06-03 03:38:44 +00001637 return yyerror(
1638 "Attempt to redefine a standard basic type, "
1639 "use -ftypesXY to switch back "
1640 "to older version of ASN.1 standard");
Lev Walkin1004aa92004-09-08 00:28:11 +00001641 ;
1642 break;}
1643case 35:
Lev Walkin1e448d32005-03-24 14:26:38 +00001644#line 573 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001645{
Lev Walkinf15320b2004-06-03 03:38:44 +00001646 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001647 ;
1648 break;}
1649case 36:
Lev Walkin1e448d32005-03-24 14:26:38 +00001650#line 579 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001651{
Lev Walkinf15320b2004-06-03 03:38:44 +00001652 return yyerror("Empty IMPORTS list");
Lev Walkin1004aa92004-09-08 00:28:11 +00001653 ;
1654 break;}
1655case 37:
Lev Walkin1e448d32005-03-24 14:26:38 +00001656#line 585 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001657{
Lev Walkinf15320b2004-06-03 03:38:44 +00001658 yyval.a_module = asn1p_module_new();
1659 checkmem(yyval.a_module);
1660 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001661 ;
1662 break;}
1663case 38:
Lev Walkin1e448d32005-03-24 14:26:38 +00001664#line 590 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001665{
Lev Walkinf15320b2004-06-03 03:38:44 +00001666 yyval.a_module = yyvsp[-1].a_module;
1667 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001668 ;
1669 break;}
1670case 39:
Lev Walkin1e448d32005-03-24 14:26:38 +00001671#line 597 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001672{
Lev Walkinf15320b2004-06-03 03:38:44 +00001673 yyval.a_xports = yyvsp[-3].a_xports;
1674 yyval.a_xports->from = yyvsp[-1].tv_str;
1675 yyval.a_xports->from_oid = yyvsp[0].a_oid;
1676 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001677 ;
1678 break;}
1679case 40:
Lev Walkin1e448d32005-03-24 14:26:38 +00001680#line 606 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001681{
Lev Walkinf15320b2004-06-03 03:38:44 +00001682 yyval.a_xports = asn1p_xports_new();
1683 checkmem(yyval.a_xports);
1684 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001685 ;
1686 break;}
1687case 41:
Lev Walkin1e448d32005-03-24 14:26:38 +00001688#line 611 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001689{
Lev Walkinf15320b2004-06-03 03:38:44 +00001690 yyval.a_xports = yyvsp[-2].a_xports;
1691 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001692 ;
1693 break;}
1694case 42:
Lev Walkin1e448d32005-03-24 14:26:38 +00001695#line 618 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001696{
Lev Walkinf15320b2004-06-03 03:38:44 +00001697 yyval.a_expr = asn1p_expr_new(yylineno);
1698 checkmem(yyval.a_expr);
1699 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1700 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001701 ;
1702 break;}
1703case 43:
Lev Walkin1e448d32005-03-24 14:26:38 +00001704#line 624 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001705{ /* Completely equivalent to above */
1706 yyval.a_expr = asn1p_expr_new(yylineno);
1707 checkmem(yyval.a_expr);
1708 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1709 yyval.a_expr->expr_type = A1TC_REFERENCE;
1710 ;
1711 break;}
1712case 44:
Lev Walkin1e448d32005-03-24 14:26:38 +00001713#line 630 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001714{
Lev Walkinf15320b2004-06-03 03:38:44 +00001715 yyval.a_expr = asn1p_expr_new(yylineno);
1716 checkmem(yyval.a_expr);
1717 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1718 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001719 ;
1720 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001721case 45:
Lev Walkin1e448d32005-03-24 14:26:38 +00001722#line 639 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001723{
Lev Walkinf15320b2004-06-03 03:38:44 +00001724 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin1004aa92004-09-08 00:28:11 +00001725 ;
1726 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001727case 46:
Lev Walkin1e448d32005-03-24 14:26:38 +00001728#line 642 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001729{
Lev Walkinf15320b2004-06-03 03:38:44 +00001730 yyval.a_xports = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001731 ;
1732 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001733case 47:
Lev Walkin1e448d32005-03-24 14:26:38 +00001734#line 645 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001735{
Lev Walkinf15320b2004-06-03 03:38:44 +00001736 /* Empty EXPORTS clause effectively prohibits export. */
1737 yyval.a_xports = asn1p_xports_new();
1738 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001739 ;
1740 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001741case 48:
Lev Walkin1e448d32005-03-24 14:26:38 +00001742#line 653 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001743{
Lev Walkinf15320b2004-06-03 03:38:44 +00001744 yyval.a_xports = asn1p_xports_new();
1745 assert(yyval.a_xports);
1746 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001747 ;
1748 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001749case 49:
Lev Walkin1e448d32005-03-24 14:26:38 +00001750#line 658 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001751{
Lev Walkinf15320b2004-06-03 03:38:44 +00001752 yyval.a_xports = yyvsp[-2].a_xports;
1753 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001754 ;
1755 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001756case 50:
Lev Walkin1e448d32005-03-24 14:26:38 +00001757#line 665 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001758{
Lev Walkinf15320b2004-06-03 03:38:44 +00001759 yyval.a_expr = asn1p_expr_new(yylineno);
1760 checkmem(yyval.a_expr);
1761 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1762 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin1004aa92004-09-08 00:28:11 +00001763 ;
1764 break;}
1765case 51:
Lev Walkin1e448d32005-03-24 14:26:38 +00001766#line 671 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001767{
1768 yyval.a_expr = asn1p_expr_new(yylineno);
1769 checkmem(yyval.a_expr);
1770 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1771 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1772 ;
1773 break;}
1774case 52:
Lev Walkin1e448d32005-03-24 14:26:38 +00001775#line 677 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001776{
1777 yyval.a_expr = asn1p_expr_new(yylineno);
1778 checkmem(yyval.a_expr);
1779 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1780 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1781 ;
1782 break;}
1783case 53:
Lev Walkin1e448d32005-03-24 14:26:38 +00001784#line 687 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001785{
Lev Walkinf15320b2004-06-03 03:38:44 +00001786 yyval.a_expr = yyvsp[-4].a_expr;
1787 assert(yyval.a_expr->Identifier == 0);
1788 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1789 yyval.a_expr->meta_type = AMT_VALUESET;
1790 // take care of optValueSetBody
Lev Walkin1004aa92004-09-08 00:28:11 +00001791 ;
1792 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001793case 54:
Lev Walkin1e448d32005-03-24 14:26:38 +00001794#line 697 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001795{
Lev Walkinf15320b2004-06-03 03:38:44 +00001796 yyval.a_expr = asn1p_expr_new(yylineno);
1797 checkmem(yyval.a_expr);
1798 yyval.a_expr->reference = yyvsp[0].a_ref;
1799 yyval.a_expr->expr_type = A1TC_REFERENCE;
1800 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001801 ;
1802 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001803case 55:
Lev Walkin1e448d32005-03-24 14:26:38 +00001804#line 704 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001805{
Lev Walkinf15320b2004-06-03 03:38:44 +00001806 yyval.a_expr = asn1p_expr_new(yylineno);
1807 checkmem(yyval.a_expr);
1808 yyval.a_expr->expr_type = yyvsp[0].a_type;
1809 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001810 ;
1811 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001812case 56:
Lev Walkin1e448d32005-03-24 14:26:38 +00001813#line 713 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001814{ ;
Lev Walkin1004aa92004-09-08 00:28:11 +00001815 break;}
1816case 57:
Lev Walkin1e448d32005-03-24 14:26:38 +00001817#line 714 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001818{
1819 ;
1820 break;}
1821case 58:
Lev Walkin1e448d32005-03-24 14:26:38 +00001822#line 725 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001823{
1824 ;
1825 break;}
1826case 59:
Lev Walkin1e448d32005-03-24 14:26:38 +00001827#line 727 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001828{
1829 ;
1830 break;}
1831case 60:
Lev Walkin1e448d32005-03-24 14:26:38 +00001832#line 732 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001833{
1834 ;
1835 break;}
1836case 61:
Lev Walkin1e448d32005-03-24 14:26:38 +00001837#line 734 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001838{
1839 ;
1840 break;}
1841case 62:
Lev Walkin1e448d32005-03-24 14:26:38 +00001842#line 750 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001843{
Lev Walkinf15320b2004-06-03 03:38:44 +00001844 yyval.a_expr = asn1p_expr_new(yylineno);
1845 checkmem(yyval.a_expr);
1846 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1847 yyval.a_expr->tag = yyvsp[-1].a_tag;
1848 yyval.a_expr->expr_type = A1TC_TYPEID;
1849 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001850 ;
1851 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001852case 63:
Lev Walkin1e448d32005-03-24 14:26:38 +00001853#line 758 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001854{
Lev Walkinf15320b2004-06-03 03:38:44 +00001855 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00001856 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00001857 assert(yyval.a_expr->expr_type);
1858 assert(yyval.a_expr->meta_type);
Lev Walkin1004aa92004-09-08 00:28:11 +00001859 ;
1860 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001861case 64:
Lev Walkin1e448d32005-03-24 14:26:38 +00001862#line 764 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001863{
Lev Walkinf15320b2004-06-03 03:38:44 +00001864 yyval.a_expr = yyvsp[0].a_expr;
1865 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1866 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1867 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin1004aa92004-09-08 00:28:11 +00001868 ;
1869 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001870case 65:
Lev Walkin1e448d32005-03-24 14:26:38 +00001871#line 780 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001872{
Lev Walkinf15320b2004-06-03 03:38:44 +00001873 yyval.a_expr = yyvsp[0].a_expr;
1874 assert(yyval.a_expr->Identifier == 0);
1875 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1876 yyval.a_expr->params = yyvsp[-3].a_plist;
1877 yyval.a_expr->meta_type = AMT_PARAMTYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001878 ;
1879 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001880case 66:
Lev Walkin1e448d32005-03-24 14:26:38 +00001881#line 790 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001882{
Lev Walkinf15320b2004-06-03 03:38:44 +00001883 int ret;
1884 yyval.a_plist = asn1p_paramlist_new(yylineno);
1885 checkmem(yyval.a_plist);
1886 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1887 checkmem(ret == 0);
1888 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1889 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001890 ;
1891 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001892case 67:
Lev Walkin1e448d32005-03-24 14:26:38 +00001893#line 799 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001894{
Lev Walkinf15320b2004-06-03 03:38:44 +00001895 int ret;
1896 yyval.a_plist = yyvsp[-2].a_plist;
1897 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1898 checkmem(ret == 0);
1899 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1900 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001901 ;
1902 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001903case 68:
Lev Walkin1e448d32005-03-24 14:26:38 +00001904#line 810 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001905{
Lev Walkinf15320b2004-06-03 03:38:44 +00001906 yyval.a_parg.governor = NULL;
1907 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001908 ;
1909 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001910case 69:
Lev Walkin1e448d32005-03-24 14:26:38 +00001911#line 814 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001912{
Lev Walkinf15320b2004-06-03 03:38:44 +00001913 int ret;
1914 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1915 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1916 checkmem(ret == 0);
1917 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001918 ;
1919 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001920case 70:
Lev Walkin1e448d32005-03-24 14:26:38 +00001921#line 821 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001922{
Lev Walkinf15320b2004-06-03 03:38:44 +00001923 int ret;
1924 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinc8092cb2005-02-18 16:34:21 +00001925 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1926 checkmem(ret == 0);
1927 yyval.a_parg.argument = yyvsp[0].tv_str;
1928 ;
1929 break;}
1930case 71:
Lev Walkin1e448d32005-03-24 14:26:38 +00001931#line 828 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00001932{
1933 int ret;
1934 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00001935 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1936 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1937 checkmem(ret == 0);
1938 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001939 ;
1940 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001941case 72:
Lev Walkin1e448d32005-03-24 14:26:38 +00001942#line 839 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001943{
Lev Walkinf15320b2004-06-03 03:38:44 +00001944 yyval.a_expr = asn1p_expr_new(yylineno);
1945 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001946 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1947 ;
1948 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001949case 73:
Lev Walkin1e448d32005-03-24 14:26:38 +00001950#line 844 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001951{
Lev Walkinf15320b2004-06-03 03:38:44 +00001952 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001953 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1954 ;
1955 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001956case 74:
Lev Walkin1e448d32005-03-24 14:26:38 +00001957#line 851 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001958{
Lev Walkinf15320b2004-06-03 03:38:44 +00001959 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001960 ;
1961 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001962case 75:
Lev Walkin1e448d32005-03-24 14:26:38 +00001963#line 854 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001964{
Lev Walkinf15320b2004-06-03 03:38:44 +00001965 yyval.a_expr = asn1p_expr_new(yylineno);
1966 checkmem(yyval.a_expr);
1967 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1968 yyval.a_expr->expr_type = A1TC_REFERENCE;
1969 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001970 ;
1971 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001972case 76:
Lev Walkin1e448d32005-03-24 14:26:38 +00001973#line 878 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001974{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1975 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001976case 77:
Lev Walkin1e448d32005-03-24 14:26:38 +00001977#line 879 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001978{ yyval.a_expr = yyvsp[0].a_expr; ;
1979 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001980case 78:
Lev Walkin1e448d32005-03-24 14:26:38 +00001981#line 882 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001982{
Lev Walkinf15320b2004-06-03 03:38:44 +00001983 yyval.a_expr = asn1p_expr_new(yylineno);
1984 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001985 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1986 ;
1987 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001988case 79:
Lev Walkin1e448d32005-03-24 14:26:38 +00001989#line 887 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001990{
Lev Walkinf15320b2004-06-03 03:38:44 +00001991 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001992 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1993 ;
1994 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001995case 80:
Lev Walkin1e448d32005-03-24 14:26:38 +00001996#line 894 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001997{
Lev Walkin070a52d2004-08-22 03:19:54 +00001998 yyval.a_expr = yyvsp[-1].a_expr;
1999 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00002000 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkin070a52d2004-08-22 03:19:54 +00002001 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002002 ;
2003 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002004case 81:
Lev Walkin1e448d32005-03-24 14:26:38 +00002005#line 900 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002006{
Lev Walkin070a52d2004-08-22 03:19:54 +00002007 yyval.a_expr = asn1p_expr_new(yylineno);
2008 checkmem(yyval.a_expr);
2009 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2010 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
Lev Walkin1004aa92004-09-08 00:28:11 +00002011 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2012 ;
2013 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002014case 82:
Lev Walkin1e448d32005-03-24 14:26:38 +00002015#line 907 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002016{
Lev Walkin070a52d2004-08-22 03:19:54 +00002017 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002018 ;
2019 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002020case 83:
Lev Walkin1e448d32005-03-24 14:26:38 +00002021#line 913 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002022{
Lev Walkin070a52d2004-08-22 03:19:54 +00002023 yyval.a_expr = asn1p_expr_new(yylineno);
2024 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002025 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2026 ;
2027 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002028case 84:
Lev Walkin1e448d32005-03-24 14:26:38 +00002029#line 918 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002030{
Lev Walkin070a52d2004-08-22 03:19:54 +00002031 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002032 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2033 ;
2034 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002035case 85:
Lev Walkin1e448d32005-03-24 14:26:38 +00002036#line 925 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002037{
Lev Walkin070a52d2004-08-22 03:19:54 +00002038 yyval.a_expr = yyvsp[0].a_expr;
2039 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00002040 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002041 ;
2042 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002043case 86:
Lev Walkin1e448d32005-03-24 14:26:38 +00002044#line 930 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002045{
Lev Walkin070a52d2004-08-22 03:19:54 +00002046 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002047 ;
2048 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002049case 87:
Lev Walkin1e448d32005-03-24 14:26:38 +00002050#line 936 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002051{
Lev Walkinf15320b2004-06-03 03:38:44 +00002052 yyval.a_expr = yyvsp[-2].a_expr;
2053 checkmem(yyval.a_expr);
2054 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2055 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2056 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin1004aa92004-09-08 00:28:11 +00002057 ;
2058 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002059case 88:
Lev Walkin1e448d32005-03-24 14:26:38 +00002060#line 946 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002061{ yyval.a_int = 0; ;
2062 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002063case 89:
Lev Walkin1e448d32005-03-24 14:26:38 +00002064#line 947 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002065{ yyval.a_int = 1; ;
2066 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002067case 90:
Lev Walkin1e448d32005-03-24 14:26:38 +00002068#line 951 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002069{
Lev Walkinf15320b2004-06-03 03:38:44 +00002070 yyval.a_expr = asn1p_expr_new(yylineno);
2071 checkmem(yyval.a_expr);
2072 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2073 yyval.a_expr->meta_type = AMT_OBJECT;
Lev Walkin1004aa92004-09-08 00:28:11 +00002074 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2075 ;
2076 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002077case 91:
Lev Walkin1e448d32005-03-24 14:26:38 +00002078#line 958 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002079{
Lev Walkinf15320b2004-06-03 03:38:44 +00002080 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002081 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2082 ;
2083 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002084case 92:
Lev Walkin1e448d32005-03-24 14:26:38 +00002085#line 965 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002086{
Lev Walkinf15320b2004-06-03 03:38:44 +00002087 yyval.a_expr = asn1p_expr_new(yylineno);
2088 checkmem(yyval.a_expr);
2089 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2090 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2091 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2092 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002093 ;
2094 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002095case 93:
Lev Walkin1e448d32005-03-24 14:26:38 +00002096#line 973 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002097{
Lev Walkin070a52d2004-08-22 03:19:54 +00002098 yyval.a_expr = yyvsp[-2].a_expr;
2099 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002100 yyval.a_expr->marker = yyvsp[0].a_marker;
2101 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002102 ;
2103 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002104case 94:
Lev Walkin1e448d32005-03-24 14:26:38 +00002105#line 979 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002106{
Lev Walkinf15320b2004-06-03 03:38:44 +00002107 int ret;
2108 yyval.a_expr = asn1p_expr_new(yylineno);
2109 checkmem(yyval.a_expr);
2110 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2111 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2112 checkmem(yyval.a_expr->reference);
2113 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2114 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2115 checkmem(ret == 0);
2116 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2117 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002118 yyval.a_expr->marker = yyvsp[0].a_marker;
2119 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002120 ;
2121 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002122case 95:
Lev Walkin1e448d32005-03-24 14:26:38 +00002123#line 997 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002124{ yyval.a_wsynt = 0; ;
2125 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002126case 96:
Lev Walkin1e448d32005-03-24 14:26:38 +00002127#line 998 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002128{
Lev Walkinf15320b2004-06-03 03:38:44 +00002129 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002130 ;
2131 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002132case 97:
Lev Walkin1e448d32005-03-24 14:26:38 +00002133#line 1005 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002134{ asn1p_lexer_hack_enable_with_syntax(); ;
2135 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002136case 98:
Lev Walkin1e448d32005-03-24 14:26:38 +00002137#line 1007 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002138{
Lev Walkinf15320b2004-06-03 03:38:44 +00002139 yyval.a_wsynt = yyvsp[-1].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002140 ;
2141 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002142case 99:
Lev Walkin1e448d32005-03-24 14:26:38 +00002143#line 1013 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002144{
Lev Walkinf15320b2004-06-03 03:38:44 +00002145 yyval.a_wsynt = asn1p_wsyntx_new();
2146 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002147 ;
2148 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002149case 100:
Lev Walkin1e448d32005-03-24 14:26:38 +00002150#line 1017 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002151{
Lev Walkinf15320b2004-06-03 03:38:44 +00002152 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2153 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002154 ;
2155 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002156case 101:
Lev Walkin1e448d32005-03-24 14:26:38 +00002157#line 1024 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002158{
Lev Walkinf15320b2004-06-03 03:38:44 +00002159 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 +00002160 ;
2161 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002162case 102:
Lev Walkin1e448d32005-03-24 14:26:38 +00002163#line 1027 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002164{
Lev Walkinf15320b2004-06-03 03:38:44 +00002165 asn1p_ref_t *ref;
2166 int ret;
2167 ref = asn1p_ref_new(yylineno);
2168 checkmem(ref);
2169 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2170 checkmem(ret == 0);
2171 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002172 ;
2173 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002174case 103:
Lev Walkin1e448d32005-03-24 14:26:38 +00002175#line 1039 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00002176{
2177 yyval.a_expr = asn1p_expr_new(yylineno);
2178 checkmem(yyval.a_expr);
2179 yyval.a_expr->Identifier = strdup("...");
2180 checkmem(yyval.a_expr->Identifier);
Lev Walkin144db9b2004-10-12 23:26:53 +00002181 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2182 yyval.a_expr->meta_type = AMT_TYPE;
2183 ;
2184 break;}
2185case 104:
Lev Walkin1e448d32005-03-24 14:26:38 +00002186#line 1047 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002187{
2188 yyval.a_expr = asn1p_expr_new(yylineno);
2189 checkmem(yyval.a_expr);
2190 yyval.a_expr->Identifier = strdup("...");
2191 checkmem(yyval.a_expr->Identifier);
2192 yyval.a_expr->value = yyvsp[0].a_value;
2193 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2194 yyval.a_expr->meta_type = AMT_TYPE;
2195 ;
2196 break;}
2197case 105:
Lev Walkin1e448d32005-03-24 14:26:38 +00002198#line 1056 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00002199{
2200 yyval.a_expr = asn1p_expr_new(yylineno);
2201 checkmem(yyval.a_expr);
2202 yyval.a_expr->Identifier = strdup("...");
Lev Walkind2ea1de2004-08-20 13:25:29 +00002203 yyval.a_expr->value = yyvsp[0].a_value;
2204 checkmem(yyval.a_expr->Identifier);
2205 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2206 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002207 ;
2208 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002209case 106:
Lev Walkin1e448d32005-03-24 14:26:38 +00002210#line 1068 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002211{
Lev Walkin070a52d2004-08-22 03:19:54 +00002212 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00002213 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002214 /*
2215 * Outer constraint for SEQUENCE OF and SET OF applies
2216 * to the inner type.
2217 */
2218 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2219 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2220 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2221 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2222 } else {
2223 if(yyval.a_expr->constraints) {
Lev Walkinaf120f72004-09-14 02:36:39 +00002224 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002225 } else {
2226 yyval.a_expr->constraints = yyvsp[0].a_constr;
2227 }
2228 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002229 ;
2230 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002231case 107:
Lev Walkin1e448d32005-03-24 14:26:38 +00002232#line 1090 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002233{
Lev Walkind2ea1de2004-08-20 13:25:29 +00002234 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002235 ;
2236 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002237case 108:
Lev Walkin1e448d32005-03-24 14:26:38 +00002238#line 1093 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002239{
Lev Walkinc7d939d2005-03-20 11:12:40 +00002240 yyval.a_expr = yyvsp[-1].a_expr;
2241 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2242 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
Lev Walkinf15320b2004-06-03 03:38:44 +00002243 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002244 ;
2245 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002246case 109:
Lev Walkin1e448d32005-03-24 14:26:38 +00002247#line 1099 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002248{
Lev Walkin070a52d2004-08-22 03:19:54 +00002249 yyval.a_expr = yyvsp[-1].a_expr;
2250 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002251 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
Lev Walkin070a52d2004-08-22 03:19:54 +00002252 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002253 ;
2254 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002255case 110:
Lev Walkin1e448d32005-03-24 14:26:38 +00002256#line 1105 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002257{
Lev Walkin070a52d2004-08-22 03:19:54 +00002258 yyval.a_expr = yyvsp[-1].a_expr;
2259 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002260 yyval.a_expr->expr_type = ASN_CONSTR_SET;
Lev Walkin070a52d2004-08-22 03:19:54 +00002261 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002262 ;
2263 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002264case 111:
Lev Walkin1e448d32005-03-24 14:26:38 +00002265#line 1111 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002266{
Lev Walkinceb20e72004-09-05 10:40:41 +00002267 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002268 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002269 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002270 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2271 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002272 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002273 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002274 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2275 ;
2276 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002277case 112:
Lev Walkin1e448d32005-03-24 14:26:38 +00002278#line 1121 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002279{
Lev Walkinceb20e72004-09-05 10:40:41 +00002280 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002281 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002282 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002283 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2284 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002285 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002286 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002287 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2288 ;
2289 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002290case 113:
Lev Walkin1e448d32005-03-24 14:26:38 +00002291#line 1131 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002292{
Lev Walkinceb20e72004-09-05 10:40:41 +00002293 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002294 checkmem(yyval.a_expr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002295 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002296 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002297 ;
2298 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002299case 114:
Lev Walkin1e448d32005-03-24 14:26:38 +00002300#line 1137 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002301{
Lev Walkin070a52d2004-08-22 03:19:54 +00002302 int ret;
Lev Walkinceb20e72004-09-05 10:40:41 +00002303 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002304 checkmem(yyval.a_expr);
2305 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2306 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2307 yyvsp[0].tv_str, RLT_lowercase);
2308 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002309 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002310 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002311 ;
2312 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002313case 115:
Lev Walkin1e448d32005-03-24 14:26:38 +00002314#line 1151 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002315{
Lev Walkinf15320b2004-06-03 03:38:44 +00002316 int ret;
2317 yyval.a_expr = yyvsp[-1].a_expr;
2318 assert(yyval.a_expr->expr_type == 0);
2319 assert(yyval.a_expr->meta_type == 0);
2320 assert(yyval.a_expr->reference == 0);
2321 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2322 checkmem(yyval.a_expr->reference);
2323 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2324 checkmem(ret == 0);
2325 free(yyvsp[-3].tv_str);
2326 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2327 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002328 ;
2329 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002330case 116:
Lev Walkin1e448d32005-03-24 14:26:38 +00002331#line 1175 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002332{
Lev Walkinf15320b2004-06-03 03:38:44 +00002333 yyval.a_expr = asn1p_expr_new(yylineno);
2334 checkmem(yyval.a_expr);
2335 yyval.a_expr->reference = yyvsp[0].a_ref;
2336 yyval.a_expr->expr_type = A1TC_REFERENCE;
2337 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00002338 ;
2339 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002340case 117:
Lev Walkin1e448d32005-03-24 14:26:38 +00002341#line 1182 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002342{
Lev Walkinf15320b2004-06-03 03:38:44 +00002343 yyval.a_expr = asn1p_expr_new(yylineno);
2344 checkmem(yyval.a_expr);
2345 yyval.a_expr->reference = yyvsp[0].a_ref;
2346 yyval.a_expr->expr_type = A1TC_INSTANCE;
2347 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002348 ;
2349 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002350case 118:
Lev Walkin1e448d32005-03-24 14:26:38 +00002351#line 1197 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002352{
Lev Walkinf15320b2004-06-03 03:38:44 +00002353 int ret;
2354 yyval.a_ref = asn1p_ref_new(yylineno);
2355 checkmem(yyval.a_ref);
2356 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2357 checkmem(ret == 0);
2358 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002359 ;
2360 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002361case 119:
Lev Walkin1e448d32005-03-24 14:26:38 +00002362#line 1205 "asn1p_y.y"
Lev Walkinc7d939d2005-03-20 11:12:40 +00002363{
2364 int ret;
2365 yyval.a_ref = asn1p_ref_new(yylineno);
2366 checkmem(yyval.a_ref);
2367 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2368 checkmem(ret == 0);
2369 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2370 checkmem(ret == 0);
2371 free(yyvsp[-2].tv_str);
2372 ;
2373 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002374case 120:
Lev Walkin1e448d32005-03-24 14:26:38 +00002375#line 1215 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002376{
Lev Walkinf15320b2004-06-03 03:38:44 +00002377 int ret;
2378 yyval.a_ref = asn1p_ref_new(yylineno);
2379 checkmem(yyval.a_ref);
2380 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2381 checkmem(ret == 0);
Lev Walkin9c974182004-09-15 11:59:51 +00002382 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00002383 checkmem(ret == 0);
2384 free(yyvsp[-2].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002385 ;
2386 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002387case 121:
Lev Walkin1e448d32005-03-24 14:26:38 +00002388#line 1225 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002389{
Lev Walkinf15320b2004-06-03 03:38:44 +00002390 int ret;
2391 yyval.a_ref = asn1p_ref_new(yylineno);
2392 checkmem(yyval.a_ref);
Lev Walkin9c974182004-09-15 11:59:51 +00002393 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2394 checkmem(ret == 0);
2395 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2396 checkmem(ret == 0);
2397 free(yyvsp[-2].tv_str);
2398 ;
2399 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002400case 122:
Lev Walkin1e448d32005-03-24 14:26:38 +00002401#line 1235 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002402{
2403 int ret;
2404 yyval.a_ref = asn1p_ref_new(yylineno);
2405 checkmem(yyval.a_ref);
Lev Walkinf15320b2004-06-03 03:38:44 +00002406 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2407 free(yyvsp[0].tv_str);
2408 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002409 ;
2410 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002411case 123:
Lev Walkin1e448d32005-03-24 14:26:38 +00002412#line 1243 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002413{
Lev Walkinf15320b2004-06-03 03:38:44 +00002414 int ret;
2415 yyval.a_ref = yyvsp[0].a_ref;
2416 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2417 free(yyvsp[-2].tv_str);
2418 checkmem(ret == 0);
2419 /*
2420 * Move the last element infront.
2421 */
2422 {
2423 struct asn1p_ref_component_s tmp_comp;
2424 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2425 memmove(&yyval.a_ref->components[1],
2426 &yyval.a_ref->components[0],
2427 sizeof(yyval.a_ref->components[0])
2428 * (yyval.a_ref->comp_count - 1));
2429 yyval.a_ref->components[0] = tmp_comp;
2430 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002431 ;
2432 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002433case 124:
Lev Walkin1e448d32005-03-24 14:26:38 +00002434#line 1265 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002435{
Lev Walkinf15320b2004-06-03 03:38:44 +00002436 int ret;
2437 yyval.a_ref = asn1p_ref_new(yylineno);
2438 checkmem(yyval.a_ref);
2439 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2440 free(yyvsp[0].a_refcomp.name);
2441 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002442 ;
2443 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002444case 125:
Lev Walkin1e448d32005-03-24 14:26:38 +00002445#line 1273 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002446{
Lev Walkinf15320b2004-06-03 03:38:44 +00002447 int ret;
2448 yyval.a_ref = yyvsp[-2].a_ref;
2449 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2450 free(yyvsp[0].a_refcomp.name);
2451 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002452 ;
2453 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002454case 128:
Lev Walkin1e448d32005-03-24 14:26:38 +00002455#line 1287 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002456{
Lev Walkinf15320b2004-06-03 03:38:44 +00002457 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2458 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002459 ;
2460 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002461case 129:
Lev Walkin1e448d32005-03-24 14:26:38 +00002462#line 1292 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002463{
Lev Walkinf15320b2004-06-03 03:38:44 +00002464 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2465 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002466 ;
2467 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002468case 130:
Lev Walkin1e448d32005-03-24 14:26:38 +00002469#line 1305 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002470{
Lev Walkinf15320b2004-06-03 03:38:44 +00002471 yyval.a_expr = yyvsp[-2].a_expr;
2472 assert(yyval.a_expr->Identifier == NULL);
2473 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2474 yyval.a_expr->meta_type = AMT_VALUE;
2475 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002476 ;
2477 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002478case 131:
Lev Walkin1e448d32005-03-24 14:26:38 +00002479#line 1315 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002480{
2481 yyval.a_value = asn1p_value_fromint(0);
2482 checkmem(yyval.a_value);
2483 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2484 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2485 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2486 ;
2487 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002488case 132:
Lev Walkin1e448d32005-03-24 14:26:38 +00002489#line 1322 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002490{ asn1p_lexer_hack_push_opaque_state(); ;
2491 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002492case 133:
Lev Walkin1e448d32005-03-24 14:26:38 +00002493#line 1322 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002494{
Lev Walkinf15320b2004-06-03 03:38:44 +00002495 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2496 checkmem(yyval.a_value);
2497 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin1004aa92004-09-08 00:28:11 +00002498 ;
2499 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002500case 134:
Lev Walkin1e448d32005-03-24 14:26:38 +00002501#line 1327 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002502{
2503 yyval.a_value = asn1p_value_fromint(0);
2504 checkmem(yyval.a_value);
2505 yyval.a_value->type = ATV_NULL;
2506 ;
2507 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002508case 135:
Lev Walkin1e448d32005-03-24 14:26:38 +00002509#line 1332 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002510{
2511 yyval.a_value = asn1p_value_fromint(0);
2512 checkmem(yyval.a_value);
2513 yyval.a_value->type = ATV_FALSE;
2514 ;
2515 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002516case 136:
Lev Walkin1e448d32005-03-24 14:26:38 +00002517#line 1337 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002518{
2519 yyval.a_value = asn1p_value_fromint(0);
2520 checkmem(yyval.a_value);
2521 yyval.a_value->type = ATV_TRUE;
2522 ;
2523 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002524case 137:
Lev Walkin1e448d32005-03-24 14:26:38 +00002525#line 1342 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002526{
Lev Walkinf15320b2004-06-03 03:38:44 +00002527 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2528 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002529 ;
2530 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002531case 138:
Lev Walkin1e448d32005-03-24 14:26:38 +00002532#line 1346 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002533{
Lev Walkinf15320b2004-06-03 03:38:44 +00002534 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2535 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002536 ;
2537 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002538case 139:
Lev Walkin1e448d32005-03-24 14:26:38 +00002539#line 1350 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002540{
Lev Walkin1e448d32005-03-24 14:26:38 +00002541 yyval.a_value = yyval.a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002542 ;
2543 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002544case 140:
Lev Walkinff7dd142005-03-20 12:58:00 +00002545#line 1353 "asn1p_y.y"
Lev Walkinc7d939d2005-03-20 11:12:40 +00002546{
2547 yyval.a_value = yyvsp[0].a_value;
2548 ;
2549 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002550case 141:
Lev Walkinff7dd142005-03-20 12:58:00 +00002551#line 1356 "asn1p_y.y"
Lev Walkin83cac2f2004-09-22 16:03:36 +00002552{
2553 yyval.a_value = yyvsp[0].a_value;
2554 ;
2555 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002556case 142:
Lev Walkinff7dd142005-03-20 12:58:00 +00002557#line 1362 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002558{
Lev Walkinf15320b2004-06-03 03:38:44 +00002559 asn1p_ref_t *ref;
2560 int ret;
2561 ref = asn1p_ref_new(yylineno);
2562 checkmem(ref);
2563 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2564 checkmem(ret == 0);
2565 yyval.a_value = asn1p_value_fromref(ref, 0);
2566 checkmem(yyval.a_value);
2567 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002568 ;
2569 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002570case 143:
Lev Walkinff7dd142005-03-20 12:58:00 +00002571#line 1373 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002572{
Lev Walkinf15320b2004-06-03 03:38:44 +00002573 asn1p_ref_t *ref;
2574 int ret;
2575 ref = asn1p_ref_new(yylineno);
2576 checkmem(ref);
2577 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2578 checkmem(ret == 0);
2579 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2580 checkmem(ret == 0);
2581 yyval.a_value = asn1p_value_fromref(ref, 0);
2582 checkmem(yyval.a_value);
2583 free(yyvsp[-2].tv_str);
2584 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002585 ;
2586 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002587case 144:
Lev Walkin1e448d32005-03-24 14:26:38 +00002588#line 1391 "asn1p_y.y"
2589{
2590 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2591 checkmem(yyval.a_value);
2592 ;
2593 break;}
2594case 145:
2595#line 1395 "asn1p_y.y"
2596{
2597 asn1c_integer_t v = (yyvsp[-3].a_int << 4) + yyvsp[-1].a_int;
2598 if(yyvsp[-3].a_int > 7) return yyerror("X.680:2003, #37.14 "
2599 "mandates 0..7 range for Tuple's TableColumn");
2600 if(yyvsp[-1].a_int > 15) return yyerror("X.680:2003, #37.14 "
2601 "mandates 0..15 range for Tuple's TableRow");
2602 yyval.a_value = asn1p_value_fromint(v);
2603 checkmem(yyval.a_value);
2604 yyval.a_value->type = ATV_TUPLE;
2605 ;
2606 break;}
2607case 146:
2608#line 1405 "asn1p_y.y"
2609{
2610 asn1c_integer_t v = (yyvsp[-7].a_int << 24) | (yyvsp[-5].a_int << 16) | (yyvsp[-3].a_int << 8) | yyvsp[-1].a_int;
2611 if(yyvsp[-7].a_int > 127) return yyerror("X.680:2003, #37.12 "
2612 "mandates 0..127 range for Quadruple's Group");
2613 if(yyvsp[-5].a_int > 255) return yyerror("X.680:2003, #37.12 "
2614 "mandates 0..255 range for Quadruple's Plane");
2615 if(yyvsp[-3].a_int > 255) return yyerror("X.680:2003, #37.12 "
2616 "mandates 0..255 range for Quadruple's Row");
2617 if(yyvsp[-1].a_int > 255) return yyerror("X.680:2003, #37.12 "
2618 "mandates 0..255 range for Quadruple's Cell");
2619 yyval.a_value = asn1p_value_fromint(v);
2620 checkmem(yyval.a_value);
2621 yyval.a_value->type = ATV_QUADRUPLE;
2622 ;
2623 break;}
2624case 147:
2625#line 1422 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002626{
Lev Walkin1893ddf2005-03-20 14:28:32 +00002627 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00002628 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2629 checkmem(yyval.tv_opaque.buf);
2630 yyval.tv_opaque.buf[0] = '{';
Lev Walkin1893ddf2005-03-20 14:28:32 +00002631 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00002632 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2633 free(yyvsp[0].tv_opaque.buf);
Lev Walkin1004aa92004-09-08 00:28:11 +00002634 ;
2635 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002636case 148:
2637#line 1431 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002638{
Lev Walkinf15320b2004-06-03 03:38:44 +00002639 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2640 char *p = malloc(newsize + 1);
2641 checkmem(p);
2642 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2643 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2644 p[newsize] = '\0';
2645 free(yyvsp[-1].tv_opaque.buf);
2646 free(yyvsp[0].tv_opaque.buf);
2647 yyval.tv_opaque.buf = p;
2648 yyval.tv_opaque.len = newsize;
Lev Walkin1004aa92004-09-08 00:28:11 +00002649 ;
2650 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002651case 149:
2652#line 1446 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002653{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2654 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002655case 150:
2656#line 1447 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002657{ yyval.a_type = ASN_BASIC_NULL; ;
2658 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002659case 151:
2660#line 1448 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002661{ yyval.a_type = ASN_BASIC_REAL; ;
2662 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002663case 152:
Lev Walkin1e448d32005-03-24 14:26:38 +00002664#line 1449 "asn1p_y.y"
2665{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002666 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002667case 153:
Lev Walkin1e448d32005-03-24 14:26:38 +00002668#line 1450 "asn1p_y.y"
2669{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002670 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002671case 154:
Lev Walkin1e448d32005-03-24 14:26:38 +00002672#line 1451 "asn1p_y.y"
2673{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002674 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002675case 155:
Lev Walkin1e448d32005-03-24 14:26:38 +00002676#line 1452 "asn1p_y.y"
2677{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002678 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002679case 156:
Lev Walkin1e448d32005-03-24 14:26:38 +00002680#line 1453 "asn1p_y.y"
2681{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002682 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002683case 157:
Lev Walkin1e448d32005-03-24 14:26:38 +00002684#line 1454 "asn1p_y.y"
2685{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002686 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002687case 158:
Lev Walkin1e448d32005-03-24 14:26:38 +00002688#line 1455 "asn1p_y.y"
2689{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
Lev Walkinc7d939d2005-03-20 11:12:40 +00002690 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002691case 159:
Lev Walkin1e448d32005-03-24 14:26:38 +00002692#line 1456 "asn1p_y.y"
2693{ yyval.a_type = ASN_BASIC_UTCTime; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002694 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002695case 160:
Lev Walkin1e448d32005-03-24 14:26:38 +00002696#line 1457 "asn1p_y.y"
2697{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002698 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002699case 161:
Lev Walkin1e448d32005-03-24 14:26:38 +00002700#line 1458 "asn1p_y.y"
2701{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002702 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002703case 162:
Lev Walkin1e448d32005-03-24 14:26:38 +00002704#line 1465 "asn1p_y.y"
2705{ yyval.a_type = ASN_BASIC_INTEGER; ;
2706 break;}
2707case 163:
2708#line 1466 "asn1p_y.y"
2709{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2710 break;}
2711case 164:
2712#line 1467 "asn1p_y.y"
2713{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2714 break;}
2715case 165:
2716#line 1471 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002717{
Lev Walkinceb20e72004-09-05 10:40:41 +00002718 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002719 checkmem(yyval.a_expr);
2720 yyval.a_expr->expr_type = yyvsp[0].a_type;
2721 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002722 ;
2723 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002724case 166:
2725#line 1477 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002726{
Lev Walkinf15320b2004-06-03 03:38:44 +00002727 if(yyvsp[0].a_expr) {
2728 yyval.a_expr = yyvsp[0].a_expr;
2729 } else {
Lev Walkinceb20e72004-09-05 10:40:41 +00002730 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002731 checkmem(yyval.a_expr);
2732 }
2733 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2734 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002735 ;
2736 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002737case 167:
2738#line 1490 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002739{ yyval.a_type = ASN_STRING_BMPString; ;
2740 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002741case 168:
2742#line 1491 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002743{
Lev Walkinf15320b2004-06-03 03:38:44 +00002744 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00002745 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002746 ;
2747 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002748case 169:
2749#line 1495 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002750{
Lev Walkin9c974182004-09-15 11:59:51 +00002751 yyval.a_type = ASN_STRING_GraphicString;
2752 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002753 ;
2754 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002755case 170:
2756#line 1499 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002757{ yyval.a_type = ASN_STRING_IA5String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002758 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002759case 171:
2760#line 1500 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002761{ yyval.a_type = ASN_STRING_ISO646String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002762 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002763case 172:
2764#line 1501 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002765{ yyval.a_type = ASN_STRING_NumericString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002766 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002767case 173:
2768#line 1502 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002769{ yyval.a_type = ASN_STRING_PrintableString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002770 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002771case 174:
2772#line 1503 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002773{
2774 yyval.a_type = ASN_STRING_T61String;
2775 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2776 ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002777 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002778case 175:
2779#line 1507 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002780{ yyval.a_type = ASN_STRING_TeletexString; ;
2781 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002782case 176:
2783#line 1508 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002784{ yyval.a_type = ASN_STRING_UniversalString; ;
2785 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002786case 177:
2787#line 1509 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002788{ yyval.a_type = ASN_STRING_UTF8String; ;
2789 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002790case 178:
2791#line 1510 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002792{
2793 yyval.a_type = ASN_STRING_VideotexString;
2794 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2795 ;
2796 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002797case 179:
2798#line 1514 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002799{ yyval.a_type = ASN_STRING_VisibleString; ;
2800 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002801case 180:
2802#line 1515 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002803{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2804 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002805case 186:
2806#line 1527 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002807{ yyval.a_constr = 0; ;
2808 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002809case 187:
2810#line 1528 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002811{
Lev Walkinceb20e72004-09-05 10:40:41 +00002812 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002813 ;
2814 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002815case 188:
2816#line 1534 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002817{
Lev Walkinceb20e72004-09-05 10:40:41 +00002818 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002819 ;
2820 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002821case 189:
2822#line 1537 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002823{
Lev Walkinf15320b2004-06-03 03:38:44 +00002824 /*
2825 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00002826 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00002827 */
Lev Walkind2ea1de2004-08-20 13:25:29 +00002828 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002829 ;
2830 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002831case 190:
2832#line 1547 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002833{
Lev Walkinf15320b2004-06-03 03:38:44 +00002834 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002835 ;
2836 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002837case 191:
2838#line 1550 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002839{
Lev Walkinf59d0752004-08-18 04:59:12 +00002840 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002841 ;
2842 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002843case 192:
2844#line 1556 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002845{
Lev Walkinf15320b2004-06-03 03:38:44 +00002846 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002847 ;
2848 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002849case 193:
2850#line 1559 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002851{
Lev Walkinf15320b2004-06-03 03:38:44 +00002852 asn1p_constraint_t *ct;
2853 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002854 ct->type = ACT_EL_EXT;
2855 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00002856 ;
2857 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002858case 194:
2859#line 1565 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002860{
Lev Walkinf15320b2004-06-03 03:38:44 +00002861 asn1p_constraint_t *ct;
2862 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002863 ct->type = ACT_EL_EXT;
2864 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002865 ct = yyval.a_constr;
2866 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002867 ;
2868 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002869case 195:
2870#line 1576 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002871{
Lev Walkinf59d0752004-08-18 04:59:12 +00002872 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002873 ;
2874 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002875case 196:
2876#line 1579 "asn1p_y.y"
2877{
2878 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2879 ;
2880 break;}
2881case 197:
2882#line 1582 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002883{
Lev Walkinf15320b2004-06-03 03:38:44 +00002884 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002885 ;
2886 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002887case 198:
2888#line 1585 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002889{
Lev Walkinf15320b2004-06-03 03:38:44 +00002890 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002891 ;
2892 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002893case 199:
2894#line 1588 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002895{
Lev Walkinf15320b2004-06-03 03:38:44 +00002896 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002897 ;
2898 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002899case 200:
2900#line 1594 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002901{
Lev Walkinf15320b2004-06-03 03:38:44 +00002902 int ret;
2903 yyval.a_constr = asn1p_constraint_new(yylineno);
2904 checkmem(yyval.a_constr);
2905 yyval.a_constr->type = yyvsp[-3].a_ctype;
2906 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2907 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002908 ;
2909 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002910case 201:
2911#line 1602 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002912{
Lev Walkinf59d0752004-08-18 04:59:12 +00002913 int ret;
2914 yyval.a_constr = asn1p_constraint_new(yylineno);
2915 checkmem(yyval.a_constr);
2916 yyval.a_constr->type = ACT_CA_SET;
2917 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2918 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002919 ;
2920 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002921case 202:
2922#line 1610 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002923{
Lev Walkinf59d0752004-08-18 04:59:12 +00002924 yyval.a_constr = asn1p_constraint_new(yylineno);
2925 checkmem(yyval.a_constr);
2926 yyval.a_constr->type = ACT_EL_VALUE;
2927 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002928 ;
2929 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002930case 203:
2931#line 1616 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002932{
Lev Walkin144db9b2004-10-12 23:26:53 +00002933 yyval.a_constr = asn1p_constraint_new(yylineno);
2934 checkmem(yyval.a_constr);
Lev Walkinff7dd142005-03-20 12:58:00 +00002935 yyval.a_constr->type = ACT_EL_TYPE;
2936 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin9c974182004-09-15 11:59:51 +00002937 ;
2938 break;}
Lev Walkin9c974182004-09-15 11:59:51 +00002939case 204:
Lev Walkin1e448d32005-03-24 14:26:38 +00002940#line 1622 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002941{
Lev Walkin1e448d32005-03-24 14:26:38 +00002942 yyval.a_constr = asn1p_constraint_new(yylineno);
2943 checkmem(yyval.a_constr);
2944 yyval.a_constr->type = yyvsp[-1].a_ctype;
2945 yyval.a_constr->range_start = yyvsp[-2].a_value;
2946 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkinc8092cb2005-02-18 16:34:21 +00002947 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002948 break;}
2949case 205:
Lev Walkin1e448d32005-03-24 14:26:38 +00002950#line 1629 "asn1p_y.y"
2951{
2952 yyval.a_constr = asn1p_constraint_new(yylineno);
2953 checkmem(yyval.a_constr);
2954 yyval.a_constr->type = yyvsp[-1].a_ctype;
2955 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2956 yyval.a_constr->range_stop = yyvsp[0].a_value;
2957 yyval.a_constr->range_start->type = ATV_MIN;
2958 ;
2959 break;}
2960case 206:
2961#line 1637 "asn1p_y.y"
2962{
2963 yyval.a_constr = asn1p_constraint_new(yylineno);
2964 checkmem(yyval.a_constr);
2965 yyval.a_constr->type = yyvsp[-1].a_ctype;
2966 yyval.a_constr->range_start = yyvsp[-2].a_value;
2967 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2968 yyval.a_constr->range_stop->type = ATV_MAX;
2969 ;
2970 break;}
2971case 207:
2972#line 1645 "asn1p_y.y"
2973{
2974 yyval.a_constr = asn1p_constraint_new(yylineno);
2975 checkmem(yyval.a_constr);
2976 yyval.a_constr->type = yyvsp[-1].a_ctype;
2977 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2978 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2979 yyval.a_constr->range_start->type = ATV_MIN;
2980 yyval.a_constr->range_stop->type = ATV_MAX;
2981 ;
2982 break;}
2983case 208:
2984#line 1654 "asn1p_y.y"
Lev Walkinff7dd142005-03-20 12:58:00 +00002985{
2986 yyval.a_constr = yyvsp[0].a_constr;
2987 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002988 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002989case 209:
2990#line 1657 "asn1p_y.y"
2991{
2992 yyval.a_constr = yyvsp[0].a_constr;
2993 ;
2994 break;}
2995case 210:
2996#line 1661 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00002997{ asn1p_lexer_hack_push_opaque_state(); ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002998 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002999case 211:
3000#line 1661 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003001{
3002 yyval.a_constr = asn1p_constraint_new(yylineno);
3003 checkmem(yyval.a_constr);
3004 yyval.a_constr->type = ACT_CT_CTDBY;
3005 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3006 checkmem(yyval.a_constr->value);
3007 yyval.a_constr->value->type = ATV_UNPARSED;
3008 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003009 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003010case 212:
3011#line 1672 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003012{ yyval.a_ctype = ACT_EL_RANGE; ;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003013 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003014case 213:
3015#line 1673 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003016{ yyval.a_ctype = ACT_EL_RLRANGE; ;
Lev Walkinff7dd142005-03-20 12:58:00 +00003017 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003018case 214:
3019#line 1674 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003020{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3021 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003022case 215:
3023#line 1675 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003024{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3025 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003026case 216:
3027#line 1679 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003028{
Lev Walkinceb20e72004-09-05 10:40:41 +00003029 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003030 ;
3031 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003032case 217:
3033#line 1682 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003034{
Lev Walkinceb20e72004-09-05 10:40:41 +00003035 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin1004aa92004-09-08 00:28:11 +00003036 ;
3037 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003038case 218:
3039#line 1688 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003040{
3041 yyval.a_value = asn1p_value_fromint(0);
3042 checkmem(yyval.a_value);
3043 yyval.a_value->type = ATV_FALSE;
3044 ;
3045 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003046case 219:
3047#line 1693 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003048{
3049 yyval.a_value = asn1p_value_fromint(1);
3050 checkmem(yyval.a_value);
3051 yyval.a_value->type = ATV_TRUE;
3052 ;
3053 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003054case 220:
3055#line 1698 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003056{
Lev Walkinf15320b2004-06-03 03:38:44 +00003057 yyval.a_value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003058 ;
3059 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003060case 221:
3061#line 1701 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003062{
Lev Walkin1e448d32005-03-24 14:26:38 +00003063 yyval.a_value = yyvsp[0].a_value;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003064 ;
3065 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003066case 222:
3067#line 1704 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003068{
Lev Walkinf15320b2004-06-03 03:38:44 +00003069 asn1p_ref_t *ref;
3070 int ret;
3071 ref = asn1p_ref_new(yylineno);
3072 checkmem(ref);
3073 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3074 checkmem(ret == 0);
3075 yyval.a_value = asn1p_value_fromref(ref, 0);
3076 checkmem(yyval.a_value);
3077 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003078 ;
3079 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003080case 223:
3081#line 1718 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003082{
Lev Walkinc8092cb2005-02-18 16:34:21 +00003083 asn1p_ref_t *ref;
3084 int ret;
3085 ref = asn1p_ref_new(yylineno);
3086 checkmem(ref);
3087 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3088 checkmem(ret == 0);
3089 yyval.a_value = asn1p_value_fromref(ref, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003090 checkmem(yyval.a_value);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003091 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003092 ;
3093 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003094case 224:
3095#line 1732 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003096{
Lev Walkinf15320b2004-06-03 03:38:44 +00003097 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003098 ;
3099 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003100case 225:
3101#line 1738 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003102{
Lev Walkinf15320b2004-06-03 03:38:44 +00003103 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003104 ;
3105 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003106case 226:
3107#line 1741 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003108{
Lev Walkinf15320b2004-06-03 03:38:44 +00003109 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003110 ;
3111 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003112case 227:
3113#line 1747 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003114{
Lev Walkinf15320b2004-06-03 03:38:44 +00003115 yyval.a_constr = asn1p_constraint_new(yylineno);
3116 checkmem(yyval.a_constr);
3117 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003118 ;
3119 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003120case 228:
3121#line 1752 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003122{
Lev Walkinf15320b2004-06-03 03:38:44 +00003123 yyval.a_constr = asn1p_constraint_new(yylineno);
3124 checkmem(yyval.a_constr);
3125 yyval.a_constr->type = ACT_EL_VALUE;
3126 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3127 yyval.a_constr->presence = yyvsp[0].a_pres;
Lev Walkin1004aa92004-09-08 00:28:11 +00003128 ;
3129 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003130case 229:
3131#line 1765 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003132{ yyval.a_pres = ACPRES_DEFAULT; ;
3133 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003134case 230:
3135#line 1766 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003136{ yyval.a_pres = yyvsp[0].a_pres; ;
3137 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003138case 231:
3139#line 1770 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003140{
Lev Walkinf15320b2004-06-03 03:38:44 +00003141 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003142 ;
3143 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003144case 232:
3145#line 1773 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003146{
Lev Walkinf15320b2004-06-03 03:38:44 +00003147 yyval.a_pres = ACPRES_ABSENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003148 ;
3149 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003150case 233:
3151#line 1776 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003152{
Lev Walkinf15320b2004-06-03 03:38:44 +00003153 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkin1004aa92004-09-08 00:28:11 +00003154 ;
3155 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003156case 234:
3157#line 1782 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003158{
3159 yyval.a_constr = yyvsp[0].a_constr;
3160 ;
3161 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003162case 235:
3163#line 1785 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003164{
3165 yyval.a_constr = yyvsp[0].a_constr;
3166 ;
3167 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003168case 236:
3169#line 1794 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003170{
Lev Walkinf15320b2004-06-03 03:38:44 +00003171 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3172 asn1p_constraint_t *ct;
3173 int ret;
3174 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3175 checkmem(ret == 0);
3176 ct = asn1p_constraint_new(yylineno);
3177 checkmem(yyval.a_constr);
3178 ct->type = ACT_EL_VALUE;
3179 ct->value = asn1p_value_fromref(ref, 0);
3180 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003181 ;
3182 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003183case 237:
3184#line 1809 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003185{
Lev Walkinf15320b2004-06-03 03:38:44 +00003186 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003187 ;
3188 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003189case 238:
3190#line 1815 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003191{
Lev Walkinf15320b2004-06-03 03:38:44 +00003192 yyval.a_constr = asn1p_constraint_new(yylineno);
3193 checkmem(yyval.a_constr);
3194 yyval.a_constr->type = ACT_EL_VALUE;
3195 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003196 ;
3197 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003198case 239:
3199#line 1821 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003200{
Lev Walkinf15320b2004-06-03 03:38:44 +00003201 asn1p_constraint_t *ct;
3202 ct = asn1p_constraint_new(yylineno);
3203 checkmem(ct);
3204 ct->type = ACT_EL_VALUE;
3205 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3206 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00003207 ;
3208 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003209case 240:
3210#line 1835 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003211{
Lev Walkinf15320b2004-06-03 03:38:44 +00003212 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3213 int ret;
3214 *p = '@';
3215 strcpy(p + 1, yyvsp[0].tv_str);
3216 yyval.a_ref = asn1p_ref_new(yylineno);
3217 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3218 checkmem(ret == 0);
3219 free(p);
3220 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003221 ;
3222 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003223case 241:
3224#line 1846 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003225{
Lev Walkinf15320b2004-06-03 03:38:44 +00003226 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3227 int ret;
3228 p[0] = '@';
3229 p[1] = '.';
3230 strcpy(p + 2, yyvsp[0].tv_str);
3231 yyval.a_ref = asn1p_ref_new(yylineno);
3232 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3233 checkmem(ret == 0);
3234 free(p);
3235 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003236 ;
3237 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003238case 242:
3239#line 1862 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003240{
Lev Walkinf15320b2004-06-03 03:38:44 +00003241 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003242 ;
3243 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003244case 243:
3245#line 1865 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003246{
Lev Walkinf15320b2004-06-03 03:38:44 +00003247 int l1 = strlen(yyvsp[-2].tv_str);
3248 int l3 = strlen(yyvsp[0].tv_str);
3249 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3250 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3251 yyval.tv_str[l1] = '.';
3252 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3253 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin1004aa92004-09-08 00:28:11 +00003254 ;
3255 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003256case 244:
3257#line 1883 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003258{
Lev Walkin9c974182004-09-15 11:59:51 +00003259 yyval.a_marker.flags = EM_NOMARK;
3260 yyval.a_marker.default_value = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00003261 ;
3262 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003263case 245:
3264#line 1887 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003265{ yyval.a_marker = yyvsp[0].a_marker; ;
Lev Walkinec208e62004-09-14 02:44:07 +00003266 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003267case 246:
3268#line 1891 "asn1p_y.y"
Lev Walkinec208e62004-09-14 02:44:07 +00003269{
Lev Walkin9c974182004-09-15 11:59:51 +00003270 yyval.a_marker.flags = EM_OPTIONAL;
3271 yyval.a_marker.default_value = 0;
Lev Walkinec208e62004-09-14 02:44:07 +00003272 ;
3273 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003274case 247:
3275#line 1895 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003276{
3277 yyval.a_marker.flags = EM_DEFAULT;
3278 yyval.a_marker.default_value = yyvsp[0].a_value;
3279 ;
3280 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003281case 248:
3282#line 1918 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003283{
Lev Walkinceb20e72004-09-05 10:40:41 +00003284 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003285 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003286 ;
3287 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003288case 249:
3289#line 1922 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003290{
Lev Walkinf15320b2004-06-03 03:38:44 +00003291 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003292 ;
3293 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003294case 250:
3295#line 1928 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003296{
Lev Walkinceb20e72004-09-05 10:40:41 +00003297 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003298 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003299 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3300 ;
3301 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003302case 251:
3303#line 1933 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003304{
Lev Walkinf15320b2004-06-03 03:38:44 +00003305 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003306 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3307 ;
3308 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003309case 252:
3310#line 1940 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003311{
Lev Walkinceb20e72004-09-05 10:40:41 +00003312 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003313 checkmem(yyval.a_expr);
3314 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3315 yyval.a_expr->meta_type = AMT_VALUE;
3316 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003317 ;
3318 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003319case 253:
3320#line 1947 "asn1p_y.y"
Lev Walkinff7dd142005-03-20 12:58:00 +00003321{
3322 yyval.a_expr = asn1p_expr_new(yylineno);
3323 checkmem(yyval.a_expr);
3324 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3325 yyval.a_expr->meta_type = AMT_VALUE;
3326 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3327 yyval.a_expr->value = yyvsp[-1].a_value;
3328 ;
3329 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003330case 254:
3331#line 1955 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003332{
Lev Walkinceb20e72004-09-05 10:40:41 +00003333 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003334 checkmem(yyval.a_expr);
3335 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3336 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1893ddf2005-03-20 14:28:32 +00003337 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3338 yyval.a_expr->value = yyvsp[-1].a_value;
3339 ;
3340 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003341case 255:
3342#line 1963 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003343{
3344 yyval.a_expr = asn1p_expr_new(yylineno);
3345 checkmem(yyval.a_expr);
3346 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3347 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkinf15320b2004-06-03 03:38:44 +00003348 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003349 ;
3350 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003351case 256:
3352#line 1970 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003353{
Lev Walkinceb20e72004-09-05 10:40:41 +00003354 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003355 checkmem(yyval.a_expr);
3356 yyval.a_expr->Identifier = strdup("...");
3357 checkmem(yyval.a_expr->Identifier);
3358 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3359 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003360 ;
3361 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003362case 257:
3363#line 1981 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003364{
3365 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3366 checkmem(yyval.a_value);
3367 ;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003368 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003369case 258:
3370#line 1985 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003371{
3372 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3373 checkmem(yyval.a_value);
3374 ;
Lev Walkinff7dd142005-03-20 12:58:00 +00003375 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003376case 259:
3377#line 2016 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003378{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3379 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003380case 260:
3381#line 2017 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003382{ yyval.a_tag = yyvsp[0].a_tag; ;
3383 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003384case 261:
3385#line 2021 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003386{
Lev Walkinc603f102005-01-23 09:51:44 +00003387 yyval.a_tag = yyvsp[-1].a_tag;
3388 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin1004aa92004-09-08 00:28:11 +00003389 ;
3390 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003391case 262:
3392#line 2028 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003393{
Lev Walkinc603f102005-01-23 09:51:44 +00003394 yyval.a_tag = yyvsp[-2].a_tag;
3395 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00003396 ;
3397 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003398case 263:
3399#line 2034 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003400{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00003401 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003402case 264:
3403#line 2035 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003404{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
Lev Walkin83cac2f2004-09-22 16:03:36 +00003405 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003406case 265:
3407#line 2036 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003408{ yyval.a_tag.tag_class = TC_APPLICATION; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003409 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003410case 266:
3411#line 2037 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003412{ yyval.a_tag.tag_class = TC_PRIVATE; ;
3413 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003414case 267:
3415#line 2041 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003416{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3417 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003418case 268:
3419#line 2042 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003420{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003421 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003422case 269:
3423#line 2043 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003424{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003425 break;}
Lev Walkin1893ddf2005-03-20 14:28:32 +00003426case 270:
Lev Walkin1e448d32005-03-24 14:26:38 +00003427#line 2047 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003428{
Lev Walkin1e448d32005-03-24 14:26:38 +00003429 checkmem(yyvsp[0].tv_str);
Lev Walkin1893ddf2005-03-20 14:28:32 +00003430 yyval.tv_str = yyvsp[0].tv_str;
3431 ;
3432 break;}
3433case 271:
Lev Walkin1e448d32005-03-24 14:26:38 +00003434#line 2051 "asn1p_y.y"
3435{
3436 checkmem(yyvsp[0].tv_str);
3437 yyval.tv_str = yyvsp[0].tv_str;
3438 ;
3439 break;}
3440case 272:
3441#line 2059 "asn1p_y.y"
3442{
3443 checkmem(yyvsp[0].tv_str);
3444 yyval.tv_str = yyvsp[0].tv_str;
3445 ;
3446 break;}
3447case 273:
3448#line 2066 "asn1p_y.y"
3449{ yyval.tv_str = 0; ;
3450 break;}
3451case 274:
3452#line 2067 "asn1p_y.y"
3453{
3454 yyval.tv_str = yyvsp[0].tv_str;
3455 ;
3456 break;}
3457case 275:
3458#line 2072 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003459{
Lev Walkinceb20e72004-09-05 10:40:41 +00003460 checkmem(yyvsp[0].tv_str);
3461 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003462 ;
3463 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00003464}
3465 /* the action file gets copied in in place of this dollarsign */
3466#line 543 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00003467
3468 yyvsp -= yylen;
3469 yyssp -= yylen;
Lev Walkin1004aa92004-09-08 00:28:11 +00003470#ifdef YYLSP_NEEDED
3471 yylsp -= yylen;
3472#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003473
Lev Walkin1004aa92004-09-08 00:28:11 +00003474#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00003475 if (yydebug)
3476 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003477 short *ssp1 = yyss - 1;
3478 fprintf (stderr, "state stack now");
3479 while (ssp1 != yyssp)
3480 fprintf (stderr, " %d", *++ssp1);
3481 fprintf (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003482 }
3483#endif
3484
3485 *++yyvsp = yyval;
3486
Lev Walkin1004aa92004-09-08 00:28:11 +00003487#ifdef YYLSP_NEEDED
3488 yylsp++;
3489 if (yylen == 0)
3490 {
3491 yylsp->first_line = yylloc.first_line;
3492 yylsp->first_column = yylloc.first_column;
3493 yylsp->last_line = (yylsp-1)->last_line;
3494 yylsp->last_column = (yylsp-1)->last_column;
3495 yylsp->text = 0;
3496 }
3497 else
3498 {
3499 yylsp->last_line = (yylsp+yylen-1)->last_line;
3500 yylsp->last_column = (yylsp+yylen-1)->last_column;
3501 }
3502#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003503
Lev Walkin1004aa92004-09-08 00:28:11 +00003504 /* Now "shift" the result of the reduction.
3505 Determine what state that goes to,
3506 based on the state we popped back to
3507 and the rule number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003508
3509 yyn = yyr1[yyn];
3510
Lev Walkin1004aa92004-09-08 00:28:11 +00003511 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3512 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003513 yystate = yytable[yystate];
3514 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003515 yystate = yydefgoto[yyn - YYNTBASE];
Lev Walkinf15320b2004-06-03 03:38:44 +00003516
3517 goto yynewstate;
3518
Lev Walkin1004aa92004-09-08 00:28:11 +00003519yyerrlab: /* here on detecting error */
Lev Walkinf15320b2004-06-03 03:38:44 +00003520
Lev Walkin1004aa92004-09-08 00:28:11 +00003521 if (! yyerrstatus)
3522 /* If not already recovering from an error, report this error. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003523 {
3524 ++yynerrs;
Lev Walkin1004aa92004-09-08 00:28:11 +00003525
3526#ifdef YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003527 yyn = yypact[yystate];
3528
Lev Walkin1004aa92004-09-08 00:28:11 +00003529 if (yyn > YYFLAG && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003530 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003531 int size = 0;
3532 char *msg;
3533 int x, count;
Lev Walkinf15320b2004-06-03 03:38:44 +00003534
Lev Walkin1004aa92004-09-08 00:28:11 +00003535 count = 0;
3536 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3537 for (x = (yyn < 0 ? -yyn : 0);
3538 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3539 if (yycheck[x + yyn] == x)
3540 size += strlen(yytname[x]) + 15, count++;
3541 msg = (char *) malloc(size + 15);
3542 if (msg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003543 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003544 strcpy(msg, "parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003545
Lev Walkin1004aa92004-09-08 00:28:11 +00003546 if (count < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003547 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003548 count = 0;
3549 for (x = (yyn < 0 ? -yyn : 0);
3550 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3551 if (yycheck[x + yyn] == x)
Lev Walkinf15320b2004-06-03 03:38:44 +00003552 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003553 strcat(msg, count == 0 ? ", expecting `" : " or `");
3554 strcat(msg, yytname[x]);
3555 strcat(msg, "'");
3556 count++;
Lev Walkinf15320b2004-06-03 03:38:44 +00003557 }
3558 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003559 yyerror(msg);
3560 free(msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003561 }
3562 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003563 yyerror ("parse error; also virtual memory exceeded");
Lev Walkinf15320b2004-06-03 03:38:44 +00003564 }
3565 else
3566#endif /* YYERROR_VERBOSE */
Lev Walkin1004aa92004-09-08 00:28:11 +00003567 yyerror("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003568 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003569
Lev Walkinf15320b2004-06-03 03:38:44 +00003570 goto yyerrlab1;
Lev Walkin1004aa92004-09-08 00:28:11 +00003571yyerrlab1: /* here on error raised explicitly by an action */
Lev Walkinf15320b2004-06-03 03:38:44 +00003572
3573 if (yyerrstatus == 3)
3574 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003575 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003576
Lev Walkin1004aa92004-09-08 00:28:11 +00003577 /* return failure if at end of input */
Lev Walkinf15320b2004-06-03 03:38:44 +00003578 if (yychar == YYEOF)
Lev Walkin1004aa92004-09-08 00:28:11 +00003579 YYABORT;
Lev Walkinf15320b2004-06-03 03:38:44 +00003580
Lev Walkin1004aa92004-09-08 00:28:11 +00003581#if YYDEBUG != 0
3582 if (yydebug)
3583 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3584#endif
3585
Lev Walkinf15320b2004-06-03 03:38:44 +00003586 yychar = YYEMPTY;
3587 }
3588
Lev Walkin1004aa92004-09-08 00:28:11 +00003589 /* Else will try to reuse lookahead token
3590 after shifting the error token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003591
Lev Walkin1004aa92004-09-08 00:28:11 +00003592 yyerrstatus = 3; /* Each real token shifted decrements this */
Lev Walkinf15320b2004-06-03 03:38:44 +00003593
Lev Walkin1004aa92004-09-08 00:28:11 +00003594 goto yyerrhandle;
Lev Walkin459ab022004-09-07 10:39:09 +00003595
Lev Walkin1004aa92004-09-08 00:28:11 +00003596yyerrdefault: /* current state does not do anything special for the error token. */
Lev Walkin459ab022004-09-07 10:39:09 +00003597
Lev Walkin1004aa92004-09-08 00:28:11 +00003598#if 0
3599 /* This is wrong; only states that explicitly want error tokens
3600 should shift them. */
3601 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3602 if (yyn) goto yydefault;
Lev Walkinceb20e72004-09-05 10:40:41 +00003603#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003604
3605yyerrpop: /* pop the current state because it cannot handle the error token */
3606
3607 if (yyssp == yyss) YYABORT;
3608 yyvsp--;
3609 yystate = *--yyssp;
3610#ifdef YYLSP_NEEDED
3611 yylsp--;
3612#endif
3613
3614#if YYDEBUG != 0
3615 if (yydebug)
3616 {
3617 short *ssp1 = yyss - 1;
3618 fprintf (stderr, "Error: state stack now");
3619 while (ssp1 != yyssp)
3620 fprintf (stderr, " %d", *++ssp1);
3621 fprintf (stderr, "\n");
Lev Walkinceb20e72004-09-05 10:40:41 +00003622 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003623#endif
3624
3625yyerrhandle:
3626
3627 yyn = yypact[yystate];
3628 if (yyn == YYFLAG)
3629 goto yyerrdefault;
3630
3631 yyn += YYTERROR;
3632 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3633 goto yyerrdefault;
3634
3635 yyn = yytable[yyn];
3636 if (yyn < 0)
3637 {
3638 if (yyn == YYFLAG)
3639 goto yyerrpop;
3640 yyn = -yyn;
3641 goto yyreduce;
3642 }
3643 else if (yyn == 0)
3644 goto yyerrpop;
Lev Walkinf15320b2004-06-03 03:38:44 +00003645
3646 if (yyn == YYFINAL)
3647 YYACCEPT;
3648
Lev Walkin1004aa92004-09-08 00:28:11 +00003649#if YYDEBUG != 0
3650 if (yydebug)
3651 fprintf(stderr, "Shifting error token, ");
3652#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003653
3654 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00003655#ifdef YYLSP_NEEDED
3656 *++yylsp = yylloc;
3657#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003658
3659 yystate = yyn;
3660 goto yynewstate;
3661
Lev Walkin1004aa92004-09-08 00:28:11 +00003662 yyacceptlab:
3663 /* YYACCEPT comes here. */
3664 if (yyfree_stacks)
3665 {
3666 free (yyss);
3667 free (yyvs);
3668#ifdef YYLSP_NEEDED
3669 free (yyls);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003670#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003671 }
3672 return 0;
Lev Walkin459ab022004-09-07 10:39:09 +00003673
Lev Walkin1004aa92004-09-08 00:28:11 +00003674 yyabortlab:
3675 /* YYABORT comes here. */
3676 if (yyfree_stacks)
3677 {
3678 free (yyss);
3679 free (yyvs);
3680#ifdef YYLSP_NEEDED
3681 free (yyls);
Lev Walkin459ab022004-09-07 10:39:09 +00003682#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003683 }
3684 return 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003685}
Lev Walkin1e448d32005-03-24 14:26:38 +00003686#line 2078 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00003687
3688
3689
3690/*
3691 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3692 */
3693static asn1p_value_t *
3694_convert_bitstring2binary(char *str, int base) {
3695 asn1p_value_t *val;
3696 int slen;
3697 int memlen;
3698 int baselen;
3699 int bits;
3700 uint8_t *binary_vector;
3701 uint8_t *bv_ptr;
3702 uint8_t cur_val;
3703
3704 assert(str);
3705 assert(str[0] == '\'');
3706
3707 switch(base) {
3708 case 'B':
3709 baselen = 1;
3710 break;
3711 case 'H':
3712 baselen = 4;
3713 break;
3714 default:
3715 assert(base == 'B' || base == 'H');
3716 errno = EINVAL;
3717 return NULL;
3718 }
3719
3720 slen = strlen(str);
3721 assert(str[slen - 1] == base);
3722 assert(str[slen - 2] == '\'');
3723
3724 memlen = slen / (8 / baselen); /* Conservative estimate */
3725
3726 bv_ptr = binary_vector = malloc(memlen + 1);
3727 if(bv_ptr == NULL)
3728 /* ENOMEM */
3729 return NULL;
3730
3731 cur_val = 0;
3732 bits = 0;
3733 while(*(++str) != '\'') {
3734 switch(baselen) {
3735 case 1:
3736 switch(*str) {
3737 case '1':
3738 cur_val |= 1 << (7 - (bits % 8));
3739 case '0':
3740 break;
3741 default:
3742 assert(!"_y UNREACH1");
3743 case ' ': case '\r': case '\n':
3744 continue;
3745 }
3746 break;
3747 case 4:
3748 switch(*str) {
3749 case '0': case '1': case '2': case '3': case '4':
3750 case '5': case '6': case '7': case '8': case '9':
3751 cur_val |= (*str - '0') << (4 - (bits % 8));
3752 break;
3753 case 'A': case 'B': case 'C':
3754 case 'D': case 'E': case 'F':
3755 cur_val |= ((*str - 'A') + 10)
3756 << (4 - (bits % 8));
3757 break;
3758 default:
3759 assert(!"_y UNREACH2");
3760 case ' ': case '\r': case '\n':
3761 continue;
3762 }
3763 break;
3764 }
3765
3766 bits += baselen;
3767 if((bits % 8) == 0) {
3768 *bv_ptr++ = cur_val;
3769 cur_val = 0;
3770 }
3771 }
3772
3773 *bv_ptr = cur_val;
3774 assert((bv_ptr - binary_vector) <= memlen);
3775
3776 val = asn1p_value_frombits(binary_vector, bits, 0);
3777 if(val == NULL) {
3778 free(binary_vector);
3779 }
3780
3781 return val;
3782}
3783
3784extern char *asn1p_text;
3785
3786int
3787yyerror(const char *msg) {
3788 fprintf(stderr,
3789 "ASN.1 grammar parse error "
3790 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00003791 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003792 return -1;
3793}
3794
3795