blob: ae4e31a43f281003bb297ce4abffcabc8c7dee22 [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
Lev Walkind9574ae2005-03-24 16:22:35 +000021#define TOK_tuple 264
22#define TOK_quadruple 265
23#define TOK_number_negative 266
24#define TOK_typereference 267
25#define TOK_capitalreference 268
26#define TOK_typefieldreference 269
27#define TOK_valuefieldreference 270
28#define TOK_ABSENT 271
29#define TOK_ABSTRACT_SYNTAX 272
30#define TOK_ALL 273
31#define TOK_ANY 274
32#define TOK_APPLICATION 275
33#define TOK_AUTOMATIC 276
34#define TOK_BEGIN 277
35#define TOK_BIT 278
36#define TOK_BMPString 279
37#define TOK_BOOLEAN 280
38#define TOK_BY 281
39#define TOK_CHARACTER 282
40#define TOK_CHOICE 283
41#define TOK_CLASS 284
42#define TOK_COMPONENT 285
43#define TOK_COMPONENTS 286
44#define TOK_CONSTRAINED 287
45#define TOK_CONTAINING 288
46#define TOK_DEFAULT 289
47#define TOK_DEFINITIONS 290
48#define TOK_DEFINED 291
49#define TOK_EMBEDDED 292
50#define TOK_ENCODED 293
51#define TOK_ENCODING_CONTROL 294
52#define TOK_END 295
53#define TOK_ENUMERATED 296
54#define TOK_EXPLICIT 297
55#define TOK_EXPORTS 298
56#define TOK_EXTENSIBILITY 299
57#define TOK_EXTERNAL 300
58#define TOK_FALSE 301
59#define TOK_FROM 302
60#define TOK_GeneralizedTime 303
61#define TOK_GeneralString 304
62#define TOK_GraphicString 305
63#define TOK_IA5String 306
64#define TOK_IDENTIFIER 307
65#define TOK_IMPLICIT 308
66#define TOK_IMPLIED 309
67#define TOK_IMPORTS 310
68#define TOK_INCLUDES 311
69#define TOK_INSTANCE 312
70#define TOK_INSTRUCTIONS 313
71#define TOK_INTEGER 314
72#define TOK_ISO646String 315
73#define TOK_MAX 316
74#define TOK_MIN 317
75#define TOK_MINUS_INFINITY 318
76#define TOK_NULL 319
77#define TOK_NumericString 320
78#define TOK_OBJECT 321
79#define TOK_ObjectDescriptor 322
80#define TOK_OCTET 323
81#define TOK_OF 324
82#define TOK_OPTIONAL 325
83#define TOK_PATTERN 326
84#define TOK_PDV 327
85#define TOK_PLUS_INFINITY 328
86#define TOK_PRESENT 329
87#define TOK_PrintableString 330
88#define TOK_PRIVATE 331
89#define TOK_REAL 332
90#define TOK_RELATIVE_OID 333
91#define TOK_SEQUENCE 334
92#define TOK_SET 335
93#define TOK_SIZE 336
94#define TOK_STRING 337
95#define TOK_SYNTAX 338
96#define TOK_T61String 339
97#define TOK_TAGS 340
98#define TOK_TeletexString 341
99#define TOK_TRUE 342
100#define TOK_TYPE_IDENTIFIER 343
101#define TOK_UNIQUE 344
102#define TOK_UNIVERSAL 345
103#define TOK_UniversalString 346
104#define TOK_UTCTime 347
105#define TOK_UTF8String 348
106#define TOK_VideotexString 349
107#define TOK_VisibleString 350
108#define TOK_WITH 351
109#define TOK_EXCEPT 352
110#define TOK_INTERSECTION 353
111#define TOK_UNION 354
112#define TOK_TwoDots 355
113#define TOK_ThreeDots 356
Lev Walkinf15320b2004-06-03 03:38:44 +0000114
115#line 1 "asn1p_y.y"
116
117
118#include <stdlib.h>
119#include <stdio.h>
120#include <string.h>
121#include <errno.h>
122#include <assert.h>
123
124#include "asn1parser.h"
125
126#define YYPARSE_PARAM param
127#define YYERROR_VERBOSE
128
129int yylex(void);
130int yyerror(const char *msg);
131void asn1p_lexer_hack_push_opaque_state(void);
132void asn1p_lexer_hack_enable_with_syntax(void);
Lev Walkinf59d0752004-08-18 04:59:12 +0000133void asn1p_lexer_hack_push_encoding_control(void);
Lev Walkinf15320b2004-06-03 03:38:44 +0000134#define yylineno asn1p_lineno
135extern int asn1p_lineno;
136
137
138static asn1p_value_t *
139 _convert_bitstring2binary(char *str, int base);
140
Lev Walkin1004aa92004-09-08 00:28:11 +0000141#define checkmem(ptr) do { \
142 if(!(ptr)) \
143 return yyerror("Memory failure"); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000144 } while(0)
145
146#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
147 if(arg1->type != constr_type) { \
148 int __ret; \
149 root = asn1p_constraint_new(yylineno); \
150 checkmem(root); \
151 root->type = constr_type; \
152 __ret = asn1p_constraint_insert(root, \
153 arg1); \
154 checkmem(__ret == 0); \
155 } else { \
156 root = arg1; \
157 } \
158 if(arg2) { \
159 int __ret \
160 = asn1p_constraint_insert(root, arg2); \
161 checkmem(__ret == 0); \
162 } \
163 } while(0)
164
165
Lev Walkinf59d0752004-08-18 04:59:12 +0000166#line 58 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +0000167typedef union {
168 asn1p_t *a_grammar;
169 asn1p_module_flags_e a_module_flags;
170 asn1p_module_t *a_module;
171 asn1p_expr_type_e a_type; /* ASN.1 Type */
172 asn1p_expr_t *a_expr; /* Constructed collection */
173 asn1p_constraint_t *a_constr; /* Constraint */
174 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
175 asn1p_xports_t *a_xports; /* IMports/EXports */
176 asn1p_oid_t *a_oid; /* Object Identifier */
177 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
178 struct asn1p_type_tag_s a_tag; /* A tag */
179 asn1p_ref_t *a_ref; /* Reference to custom type */
180 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
181 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
182 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
183 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
184 struct asn1p_param_s a_parg; /* A parameter argument */
185 asn1p_paramlist_t *a_plist; /* A pargs list */
Lev Walkin9c974182004-09-15 11:59:51 +0000186 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
Lev Walkinf15320b2004-06-03 03:38:44 +0000187 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
Lev Walkind21c5052004-09-29 13:18:09 +0000188 asn1c_integer_t a_int;
Lev Walkinf15320b2004-06-03 03:38:44 +0000189 char *tv_str;
190 struct {
191 char *buf;
192 int len;
193 } tv_opaque;
194 struct {
195 char *name;
196 struct asn1p_type_tag_s tag;
197 } tv_nametag;
Lev Walkin1004aa92004-09-08 00:28:11 +0000198} YYSTYPE;
199#include <stdio.h>
200
201#ifndef __cplusplus
202#ifndef __STDC__
203#define const
204#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000205#endif
206
207
208
Lev Walkine596bf02005-03-28 15:01:27 +0000209#define YYFINAL 431
Lev Walkin1004aa92004-09-08 00:28:11 +0000210#define YYFLAG -32768
Lev Walkind9574ae2005-03-24 16:22:35 +0000211#define YYNTBASE 118
Lev Walkinf15320b2004-06-03 03:38:44 +0000212
Lev Walkind9574ae2005-03-24 16:22:35 +0000213#define YYTRANSLATE(x) ((unsigned)(x) <= 356 ? yytranslate[x] : 222)
Lev Walkinf15320b2004-06-03 03:38:44 +0000214
Lev Walkin1004aa92004-09-08 00:28:11 +0000215static const char yytranslate[] = { 0,
216 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
217 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
218 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkind9574ae2005-03-24 16:22:35 +0000219 2, 2, 112, 2, 2, 2, 2, 2, 2, 107,
220 108, 2, 2, 110, 2, 113, 2, 2, 2, 2,
221 2, 2, 2, 2, 2, 2, 2, 111, 109, 114,
222 2, 2, 2, 115, 2, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000223 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
224 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkind9574ae2005-03-24 16:22:35 +0000225 116, 2, 117, 99, 2, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000226 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
227 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkind9574ae2005-03-24 16:22:35 +0000228 2, 2, 105, 101, 106, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000229 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, 2, 2, 2, 2, 2,
240 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
241 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
242 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
243 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
244 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
245 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
246 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
247 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
248 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
249 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
250 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
Lev Walkind9574ae2005-03-24 16:22:35 +0000251 97, 98, 100, 102, 103, 104
Lev Walkin1004aa92004-09-08 00:28:11 +0000252};
Lev Walkinf15320b2004-06-03 03:38:44 +0000253
Lev Walkin1004aa92004-09-08 00:28:11 +0000254#if YYDEBUG != 0
255static const short yyprhs[] = { 0,
256 0, 2, 4, 7, 16, 17, 19, 23, 26, 28,
257 31, 33, 38, 40, 41, 43, 45, 48, 51, 54,
258 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
259 79, 81, 82, 86, 88, 92, 95, 97, 100, 105,
Lev Walkin144db9b2004-10-12 23:26:53 +0000260 107, 111, 113, 117, 119, 123, 127, 130, 132, 136,
261 138, 142, 144, 151, 153, 155, 156, 158, 160, 164,
262 166, 168, 173, 177, 181, 188, 190, 194, 196, 200,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000263 204, 208, 210, 214, 216, 218, 219, 221, 223, 227,
264 231, 235, 237, 239, 243, 246, 248, 254, 255, 257,
265 259, 263, 266, 271, 276, 277, 279, 280, 287, 289,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000266 292, 294, 296, 298, 302, 306, 310, 312, 317, 322,
267 327, 334, 341, 343, 348, 353, 355, 359, 361, 365,
268 369, 373, 375, 379, 381, 385, 387, 389, 391, 393,
269 398, 402, 403, 407, 409, 411, 413, 415, 417, 419,
Lev Walkind9574ae2005-03-24 16:22:35 +0000270 421, 423, 425, 429, 431, 433, 435, 437, 440, 442,
271 444, 446, 448, 451, 454, 456, 458, 461, 464, 466,
272 468, 470, 472, 474, 477, 479, 482, 484, 486, 488,
273 490, 492, 494, 496, 498, 500, 502, 504, 506, 508,
274 510, 512, 514, 516, 518, 520, 521, 523, 525, 530,
275 534, 539, 541, 545, 551, 553, 557, 561, 565, 569,
276 574, 578, 580, 582, 586, 590, 594, 598, 600, 602,
277 603, 609, 611, 614, 617, 621, 623, 625, 627, 629,
Lev Walkine596bf02005-03-28 15:01:27 +0000278 631, 633, 635, 637, 641, 647, 649, 653, 655, 659,
279 660, 662, 664, 666, 668, 670, 672, 676, 681, 683,
280 687, 690, 694, 696, 700, 701, 703, 705, 708, 711,
281 715, 717, 721, 723, 728, 733, 735, 737, 739, 741,
282 742, 744, 747, 752, 753, 755, 757, 759, 760, 762,
283 764, 766, 768, 770, 771, 773
Lev Walkin1004aa92004-09-08 00:28:11 +0000284};
Lev Walkinf15320b2004-06-03 03:38:44 +0000285
Lev Walkind9574ae2005-03-24 16:22:35 +0000286static const short yyrhs[] = { 119,
287 0, 120, 0, 119, 120, 0, 218, 121, 36, 125,
288 3, 23, 128, 41, 0, 0, 122, 0, 105, 123,
289 106, 0, 105, 106, 0, 124, 0, 123, 124, 0,
290 221, 0, 221, 107, 9, 108, 0, 9, 0, 0,
291 126, 0, 127, 0, 126, 127, 0, 43, 86, 0,
292 54, 86, 0, 22, 86, 0, 45, 55, 0, 14,
293 59, 0, 0, 129, 0, 130, 0, 129, 130, 0,
294 132, 0, 137, 0, 145, 0, 172, 0, 140, 0,
295 0, 40, 14, 131, 0, 181, 0, 56, 133, 109,
296 0, 56, 48, 0, 134, 0, 133, 134, 0, 135,
297 48, 218, 121, 0, 136, 0, 135, 110, 136, 0,
298 218, 0, 218, 105, 106, 0, 221, 0, 44, 138,
299 109, 0, 44, 19, 109, 0, 44, 109, 0, 139,
300 0, 138, 110, 139, 0, 218, 0, 218, 105, 106,
301 0, 221, 0, 218, 141, 3, 105, 142, 106, 0,
302 167, 0, 178, 0, 0, 143, 0, 144, 0, 143,
303 110, 144, 0, 104, 0, 189, 0, 218, 3, 213,
304 89, 0, 218, 3, 165, 0, 218, 3, 155, 0,
305 218, 105, 146, 106, 3, 165, 0, 147, 0, 146,
306 110, 147, 0, 218, 0, 218, 111, 221, 0, 218,
307 111, 218, 0, 178, 111, 221, 0, 149, 0, 148,
308 110, 149, 0, 165, 0, 221, 0, 0, 151, 0,
309 152, 0, 151, 110, 152, 0, 221, 165, 207, 0,
310 32, 70, 165, 0, 164, 0, 154, 0, 153, 110,
311 154, 0, 221, 165, 0, 164, 0, 30, 105, 157,
312 106, 159, 0, 0, 90, 0, 158, 0, 157, 110,
313 158, 0, 170, 207, 0, 170, 165, 156, 207, 0,
314 170, 170, 156, 207, 0, 0, 160, 0, 0, 97,
315 84, 105, 161, 162, 106, 0, 163, 0, 162, 163,
316 0, 4, 0, 170, 0, 104, 0, 104, 112, 175,
317 0, 104, 112, 212, 0, 213, 166, 185, 0, 180,
318 0, 29, 105, 153, 106, 0, 80, 105, 150, 106,
319 0, 81, 105, 150, 106, 0, 80, 185, 70, 220,
320 213, 166, 0, 81, 185, 70, 220, 213, 166, 0,
321 20, 0, 20, 37, 27, 221, 0, 218, 105, 148,
322 106, 0, 167, 0, 58, 70, 167, 0, 13, 0,
323 13, 113, 218, 0, 219, 113, 218, 0, 13, 113,
324 221, 0, 219, 0, 219, 113, 168, 0, 169, 0,
325 168, 113, 169, 0, 171, 0, 171, 0, 15, 0,
326 16, 0, 221, 141, 3, 173, 0, 221, 111, 173,
327 0, 0, 105, 174, 177, 0, 65, 0, 47, 0,
328 88, 0, 5, 0, 7, 0, 176, 0, 212, 0,
329 175, 0, 221, 0, 218, 113, 221, 0, 6, 0,
330 10, 0, 11, 0, 4, 0, 177, 4, 0, 26,
331 0, 65, 0, 78, 0, 179, 0, 69, 83, 0,
332 67, 53, 0, 79, 0, 46, 0, 38, 73, 0,
333 28, 83, 0, 93, 0, 49, 0, 181, 0, 60,
334 0, 42, 0, 24, 83, 0, 178, 0, 179, 209,
335 0, 25, 0, 50, 0, 51, 0, 52, 0, 61,
336 0, 66, 0, 76, 0, 85, 0, 87, 0, 92,
337 0, 94, 0, 95, 0, 96, 0, 68, 0, 101,
338 0, 102, 0, 99, 0, 100, 0, 98, 0, 0,
339 186, 0, 187, 0, 82, 107, 188, 108, 0, 107,
340 188, 108, 0, 187, 107, 188, 108, 0, 189, 0,
341 189, 110, 104, 0, 189, 110, 104, 110, 189, 0,
342 190, 0, 19, 98, 190, 0, 189, 182, 190, 0,
343 189, 183, 190, 0, 190, 184, 190, 0, 193, 107,
344 188, 108, 0, 107, 188, 108, 0, 194, 0, 195,
345 0, 194, 192, 194, 0, 63, 192, 194, 0, 194,
346 192, 62, 0, 63, 192, 62, 0, 201, 0, 196,
347 0, 0, 33, 27, 105, 191, 177, 0, 103, 0,
348 103, 114, 0, 114, 103, 0, 114, 103, 114, 0,
349 82, 0, 48, 0, 47, 0, 88, 0, 212, 0,
Lev Walkine596bf02005-03-28 15:01:27 +0000350 176, 0, 221, 0, 218, 0, 97, 31, 187, 0,
351 97, 32, 105, 197, 106, 0, 198, 0, 197, 110,
352 198, 0, 104, 0, 221, 185, 199, 0, 0, 200,
353 0, 75, 0, 17, 0, 71, 0, 202, 0, 203,
354 0, 105, 218, 106, 0, 202, 105, 204, 106, 0,
355 205, 0, 204, 110, 205, 0, 115, 206, 0, 115,
356 113, 206, 0, 221, 0, 206, 113, 221, 0, 0,
357 208, 0, 71, 0, 35, 173, 0, 105, 106, 0,
358 105, 210, 106, 0, 211, 0, 210, 110, 211, 0,
359 221, 0, 221, 107, 212, 108, 0, 221, 107, 175,
360 108, 0, 212, 0, 104, 0, 9, 0, 12, 0,
361 0, 214, 0, 215, 217, 0, 116, 216, 9, 117,
362 0, 0, 91, 0, 21, 0, 77, 0, 0, 54,
363 0, 43, 0, 13, 0, 14, 0, 14, 0, 0,
364 221, 0, 8, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000365};
Lev Walkinf15320b2004-06-03 03:38:44 +0000366
367#endif
368
Lev Walkin1004aa92004-09-08 00:28:11 +0000369#if YYDEBUG != 0
370static const short yyrline[] = { 0,
Lev Walkind9574ae2005-03-24 16:22:35 +0000371 305, 311, 317, 333, 358, 360, 363, 367, 372, 379,
372 387, 392, 396, 405, 407, 415, 419, 427, 431, 434,
373 437, 441, 461, 463, 471, 475, 507, 511, 520, 527,
374 540, 547, 549, 561, 574, 581, 586, 592, 598, 607,
375 613, 619, 626, 632, 640, 644, 647, 654, 660, 666,
376 673, 679, 688, 698, 706, 714, 716, 726, 729, 733,
377 736, 748, 760, 766, 782, 791, 801, 811, 816, 823,
378 830, 840, 846, 852, 856, 879, 881, 883, 889, 895,
379 902, 909, 914, 920, 926, 932, 937, 947, 949, 952,
380 960, 966, 975, 981, 998, 1000, 1005, 1009, 1014, 1019,
381 1025, 1029, 1040, 1049, 1058, 1069, 1091, 1095, 1101, 1107,
382 1113, 1123, 1133, 1139, 1153, 1177, 1184, 1198, 1207, 1217,
383 1227, 1237, 1245, 1266, 1275, 1284, 1285, 1287, 1294, 1306,
384 1316, 1324, 1324, 1329, 1334, 1339, 1344, 1348, 1352, 1355,
385 1358, 1363, 1375, 1392, 1397, 1402, 1435, 1445, 1459, 1461,
386 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471,
387 1472, 1478, 1480, 1481, 1484, 1491, 1503, 1505, 1509, 1513,
388 1514, 1515, 1516, 1517, 1521, 1522, 1523, 1524, 1528, 1529,
389 1536, 1536, 1537, 1537, 1538, 1540, 1542, 1547, 1551, 1560,
390 1564, 1569, 1573, 1579, 1589, 1593, 1596, 1599, 1602, 1607,
391 1616, 1624, 1630, 1636, 1643, 1651, 1659, 1668, 1671, 1674,
392 1675, 1685, 1687, 1688, 1689, 1692, 1696, 1701, 1707, 1712,
Lev Walkine596bf02005-03-28 15:01:27 +0000393 1715, 1718, 1731, 1745, 1749, 1754, 1758, 1763, 1770, 1783,
394 1785, 1788, 1792, 1795, 1800, 1804, 1812, 1827, 1833, 1840,
395 1853, 1865, 1880, 1884, 1901, 1906, 1909, 1914, 1936, 1941,
396 1946, 1952, 1958, 1966, 1974, 1982, 1989, 1999, 2004, 2034,
397 2036, 2039, 2046, 2052, 2054, 2055, 2056, 2059, 2061, 2062,
398 2065, 2070, 2077, 2084, 2086, 2090
Lev Walkin1004aa92004-09-08 00:28:11 +0000399};
400#endif
401
402
403#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
404
405static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
406"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
Lev Walkind9574ae2005-03-24 16:22:35 +0000407"TOK_tuple","TOK_quadruple","TOK_number_negative","TOK_typereference","TOK_capitalreference",
408"TOK_typefieldreference","TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX",
409"TOK_ALL","TOK_ANY","TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT",
410"TOK_BMPString","TOK_BOOLEAN","TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS",
411"TOK_COMPONENT","TOK_COMPONENTS","TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT",
412"TOK_DEFINITIONS","TOK_DEFINED","TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL",
413"TOK_END","TOK_ENUMERATED","TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY",
414"TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString",
415"TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED",
416"TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INSTRUCTIONS","TOK_INTEGER",
417"TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL","TOK_NumericString",
418"TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET","TOK_OF","TOK_OPTIONAL","TOK_PATTERN",
419"TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString","TOK_PRIVATE",
420"TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE","TOK_STRING",
421"TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE","TOK_TYPE_IDENTIFIER",
422"TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime","TOK_UTF8String",
423"TOK_VideotexString","TOK_VisibleString","TOK_WITH","TOK_EXCEPT","'^'","TOK_INTERSECTION",
424"'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots","'{'","'}'","'('","')'","';'",
425"','","':'","'!'","'.'","'<'","'@'","'['","']'","ParsedGrammar","ModuleList",
426"ModuleSpecification","optObjectIdentifier","ObjectIdentifier","ObjectIdentifierBody",
427"ObjectIdentifierElement","optModuleSpecificationFlags","ModuleSpecificationFlags",
428"ModuleSpecificationFlag","optModuleSpecificationBody","ModuleSpecificationBody",
429"ModuleSpecificationElement","@1","ImportsDefinition","ImportsBundleSet","ImportsBundle",
430"ImportsList","ImportsElement","ExportsDefinition","ExportsBody","ExportsElement",
431"ValueSetDefinition","DefinedTypeRef","optValueSetBody","ValueSetBody","ValueSetElement",
432"DataTypeReference","ParameterArgumentList","ParameterArgumentName","ActualParameterList",
433"ActualParameter","optComponentTypeLists","ComponentTypeLists","ComponentType",
434"AlternativeTypeLists","AlternativeType","ClassDeclaration","optUnique","ClassFieldList",
435"ClassField","optWithSyntax","WithSyntax","@2","WithSyntaxFormat","WithSyntaxFormatToken",
436"ExtensionAndException","Type","TypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList",
Lev Walkin144db9b2004-10-12 23:26:53 +0000437"ComplexTypeReferenceElement","ClassFieldIdentifier","ClassFieldName","ValueDefinition",
Lev Walkin1e448d32005-03-24 14:26:38 +0000438"Value","@3","DefinedValue","RestrictedCharacterStringValue","Opaque","BasicTypeId",
439"BasicTypeId_UniverationCompatible","BasicType","BasicString","Union","Intersection",
440"Except","optConstraints","Constraints","SetOfConstraints","ElementSetSpecs",
441"ElementSetSpec","ConstraintSubtypeElement","@4","ConstraintRangeSpec","ConstraintSpec",
Lev Walkine596bf02005-03-28 15:01:27 +0000442"SingleValue","ContainedSubtype","InnerTypeConstraint","WithComponentsList",
443"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
444"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
445"ComponentIdList","optMarker","Marker","UniverationDefinition","UniverationList",
446"UniverationElement","SignedNumber","optTag","Tag","TagTypeValue","TagClass",
447"TagPlicit","TypeRefName","ObjectClassReference","optIdentifier","Identifier", NULL
Lev Walkin1004aa92004-09-08 00:28:11 +0000448};
449#endif
450
451static const short yyr1[] = { 0,
Lev Walkind9574ae2005-03-24 16:22:35 +0000452 118, 119, 119, 120, 121, 121, 122, 122, 123, 123,
453 124, 124, 124, 125, 125, 126, 126, 127, 127, 127,
454 127, 127, 128, 128, 129, 129, 130, 130, 130, 130,
455 130, 131, 130, 130, 132, 132, 133, 133, 134, 135,
456 135, 136, 136, 136, 137, 137, 137, 138, 138, 139,
457 139, 139, 140, 141, 141, 142, 142, 143, 143, 144,
458 144, 145, 145, 145, 145, 146, 146, 147, 147, 147,
459 147, 148, 148, 149, 149, 150, 150, 151, 151, 152,
460 152, 152, 153, 153, 154, 154, 155, 156, 156, 157,
461 157, 158, 158, 158, 159, 159, 161, 160, 162, 162,
462 163, 163, 164, 164, 164, 165, 166, 166, 166, 166,
463 166, 166, 166, 166, 166, 166, 166, 167, 167, 167,
464 167, 167, 167, 168, 168, 169, 170, 171, 171, 172,
465 173, 174, 173, 173, 173, 173, 173, 173, 173, 173,
466 173, 175, 175, 176, 176, 176, 177, 177, 178, 178,
467 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
468 178, 179, 179, 179, 180, 180, 181, 181, 181, 181,
469 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
470 182, 182, 183, 183, 184, 185, 185, 186, 186, 187,
471 187, 188, 188, 188, 189, 189, 189, 189, 189, 190,
472 190, 190, 190, 190, 190, 190, 190, 190, 190, 191,
473 190, 192, 192, 192, 192, 193, 193, 194, 194, 194,
Lev Walkine596bf02005-03-28 15:01:27 +0000474 194, 194, 195, 196, 196, 197, 197, 198, 198, 199,
475 199, 200, 200, 200, 201, 201, 202, 203, 204, 204,
476 205, 205, 206, 206, 207, 207, 208, 208, 209, 209,
477 210, 210, 211, 211, 211, 211, 211, 212, 212, 213,
478 213, 214, 215, 216, 216, 216, 216, 217, 217, 217,
479 218, 218, 219, 220, 220, 221
Lev Walkin1004aa92004-09-08 00:28:11 +0000480};
481
482static const short yyr2[] = { 0,
483 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
484 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
485 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
486 1, 0, 3, 1, 3, 2, 1, 2, 4, 1,
Lev Walkin144db9b2004-10-12 23:26:53 +0000487 3, 1, 3, 1, 3, 3, 2, 1, 3, 1,
488 3, 1, 6, 1, 1, 0, 1, 1, 3, 1,
489 1, 4, 3, 3, 6, 1, 3, 1, 3, 3,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000490 3, 1, 3, 1, 1, 0, 1, 1, 3, 3,
491 3, 1, 1, 3, 2, 1, 5, 0, 1, 1,
492 3, 2, 4, 4, 0, 1, 0, 6, 1, 2,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000493 1, 1, 1, 3, 3, 3, 1, 4, 4, 4,
494 6, 6, 1, 4, 4, 1, 3, 1, 3, 3,
495 3, 1, 3, 1, 3, 1, 1, 1, 1, 4,
496 3, 0, 3, 1, 1, 1, 1, 1, 1, 1,
Lev Walkind9574ae2005-03-24 16:22:35 +0000497 1, 1, 3, 1, 1, 1, 1, 2, 1, 1,
Lev Walkin1e448d32005-03-24 14:26:38 +0000498 1, 1, 2, 2, 1, 1, 2, 2, 1, 1,
499 1, 1, 1, 2, 1, 2, 1, 1, 1, 1,
Lev Walkin1004aa92004-09-08 00:28:11 +0000500 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin1e448d32005-03-24 14:26:38 +0000501 1, 1, 1, 1, 1, 0, 1, 1, 4, 3,
502 4, 1, 3, 5, 1, 3, 3, 3, 3, 4,
503 3, 1, 1, 3, 3, 3, 3, 1, 1, 0,
504 5, 1, 2, 2, 3, 1, 1, 1, 1, 1,
Lev Walkine596bf02005-03-28 15:01:27 +0000505 1, 1, 1, 3, 5, 1, 3, 1, 3, 0,
506 1, 1, 1, 1, 1, 1, 3, 4, 1, 3,
507 2, 3, 1, 3, 0, 1, 1, 2, 2, 3,
508 1, 3, 1, 4, 4, 1, 1, 1, 1, 0,
509 1, 2, 4, 0, 1, 1, 1, 0, 1, 1,
510 1, 1, 1, 0, 1, 1
Lev Walkin1004aa92004-09-08 00:28:11 +0000511};
512
513static const short yydefact[] = { 0,
Lev Walkine596bf02005-03-28 15:01:27 +0000514 271, 272, 1, 2, 5, 3, 0, 0, 6, 276,
Lev Walkin1004aa92004-09-08 00:28:11 +0000515 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
516 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
Lev Walkin1e448d32005-03-24 14:26:38 +0000517 18, 21, 19, 0, 17, 12, 23, 167, 0, 0,
518 168, 169, 170, 0, 171, 172, 180, 173, 174, 175,
519 176, 177, 178, 179, 0, 24, 25, 27, 28, 31,
Lev Walkin144db9b2004-10-12 23:26:53 +0000520 29, 30, 34, 0, 0, 32, 0, 47, 0, 48,
521 50, 52, 36, 0, 37, 0, 40, 42, 44, 4,
Lev Walkine596bf02005-03-28 15:01:27 +0000522 26, 260, 118, 273, 0, 149, 0, 0, 163, 156,
Lev Walkin1e448d32005-03-24 14:26:38 +0000523 160, 162, 150, 0, 0, 151, 155, 159, 0, 0,
524 54, 55, 152, 161, 122, 0, 33, 46, 45, 0,
Lev Walkine596bf02005-03-28 15:01:27 +0000525 0, 35, 38, 0, 0, 0, 0, 264, 64, 63,
526 0, 261, 268, 0, 164, 158, 157, 154, 153, 0,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000527 66, 0, 68, 0, 0, 0, 49, 51, 5, 41,
Lev Walkine596bf02005-03-28 15:01:27 +0000528 43, 0, 266, 267, 265, 0, 118, 273, 113, 0,
Lev Walkin1e448d32005-03-24 14:26:38 +0000529 0, 186, 186, 62, 186, 116, 165, 152, 107, 0,
Lev Walkine596bf02005-03-28 15:01:27 +0000530 270, 269, 262, 119, 121, 0, 0, 0, 0, 56,
531 128, 129, 123, 124, 126, 120, 137, 144, 138, 258,
532 145, 146, 259, 135, 134, 136, 132, 130, 141, 139,
533 140, 0, 142, 39, 0, 90, 260, 127, 0, 0,
Lev Walkind9574ae2005-03-24 16:22:35 +0000534 0, 0, 0, 76, 0, 0, 187, 188, 76, 0,
Lev Walkine596bf02005-03-28 15:01:27 +0000535 106, 0, 166, 260, 260, 67, 71, 70, 69, 0,
Lev Walkind9574ae2005-03-24 16:22:35 +0000536 0, 218, 217, 0, 216, 219, 0, 60, 0, 0,
537 0, 57, 58, 221, 61, 195, 0, 202, 203, 209,
Lev Walkine596bf02005-03-28 15:01:27 +0000538 208, 235, 236, 220, 223, 222, 0, 0, 0, 0,
539 95, 0, 0, 247, 88, 88, 92, 246, 0, 263,
540 0, 103, 0, 83, 86, 260, 117, 0, 0, 0,
541 77, 78, 82, 260, 0, 192, 274, 0, 0, 274,
542 257, 249, 0, 251, 256, 253, 0, 72, 74, 75,
543 65, 0, 0, 212, 0, 0, 0, 0, 0, 0,
544 53, 0, 183, 184, 181, 182, 0, 0, 185, 0,
545 0, 0, 0, 125, 147, 133, 143, 131, 0, 87,
546 96, 91, 248, 89, 245, 245, 114, 0, 108, 0,
547 85, 0, 260, 109, 0, 245, 190, 0, 260, 275,
548 0, 110, 260, 250, 0, 0, 115, 260, 196, 210,
549 213, 214, 207, 205, 224, 0, 237, 201, 59, 197,
550 198, 199, 0, 206, 204, 0, 0, 239, 148, 0,
551 93, 94, 104, 105, 142, 84, 189, 81, 79, 80,
552 193, 0, 191, 0, 252, 0, 0, 73, 0, 215,
553 228, 0, 226, 186, 200, 0, 241, 243, 238, 0,
554 97, 0, 111, 112, 255, 254, 211, 225, 0, 230,
555 242, 0, 240, 0, 194, 227, 233, 234, 232, 229,
556 231, 244, 101, 0, 99, 102, 98, 100, 0, 0,
557 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000558};
559
Lev Walkine596bf02005-03-28 15:01:27 +0000560static const short yydefgoto[] = { 429,
Lev Walkin1004aa92004-09-08 00:28:11 +0000561 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000562 56, 57, 107, 58, 74, 75, 76, 77, 59, 69,
Lev Walkind9574ae2005-03-24 16:22:35 +0000563 70, 60, 100, 231, 232, 233, 61, 130, 131, 287,
Lev Walkine596bf02005-03-28 15:01:27 +0000564 288, 270, 271, 272, 263, 264, 119, 325, 195, 196,
565 320, 321, 414, 424, 425, 273, 289, 155, 156, 173,
566 174, 197, 198, 62, 188, 248, 189, 234, 316, 157,
567 103, 159, 104, 307, 308, 310, 206, 207, 208, 275,
568 276, 236, 389, 296, 237, 238, 239, 240, 392, 393,
569 420, 421, 241, 242, 243, 367, 368, 397, 257, 258,
Lev Walkind9574ae2005-03-24 16:22:35 +0000570 213, 283, 284, 244, 259, 122, 123, 146, 163, 245,
Lev Walkine596bf02005-03-28 15:01:27 +0000571 105, 339, 246
Lev Walkin1004aa92004-09-08 00:28:11 +0000572};
573
Lev Walkine596bf02005-03-28 15:01:27 +0000574static const short yypact[] = { 166,
575-32768,-32768, 166,-32768, -69,-32768, 32, 14,-32768,-32768,
576-32768,-32768, 60,-32768, -62, 132,-32768,-32768, 55, 42,
577 -13, 58, 65, 64, 125, 132,-32768, 96,-32768,-32768,
578-32768,-32768,-32768, 135,-32768,-32768, 507,-32768, 158, 9,
579-32768,-32768,-32768, 38,-32768,-32768,-32768,-32768,-32768,-32768,
580-32768,-32768,-32768,-32768, 122, 507,-32768,-32768,-32768,-32768,
581-32768,-32768,-32768, 357, 736,-32768, 100,-32768, 80,-32768,
582 146,-32768,-32768, 34,-32768, -17,-32768, 147,-32768,-32768,
583-32768, -4, 140,-32768, 178,-32768, 184, 159,-32768,-32768,
584-32768,-32768,-32768, 215, 188,-32768,-32768,-32768, 811, 269,
585-32768,-32768,-32768,-32768, 170, 282,-32768,-32768,-32768, 168,
586 180,-32768,-32768, 166, 168, 182, 186, 8,-32768,-32768,
587 584,-32768, 44, 168,-32768,-32768,-32768,-32768,-32768, -10,
588-32768, 189, 191, 198, 225, 465,-32768,-32768, -69,-32768,
589-32768, 204,-32768,-32768,-32768, 280, -8, 199, 256, 200,
590 238, -25, -24,-32768, -44,-32768,-32768, 205,-32768, 206,
591-32768,-32768,-32768,-32768,-32768, 309, 811, 305, 168, 202,
592-32768,-32768, 201,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
Lev Walkin1e448d32005-03-24 14:26:38 +0000593-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
Lev Walkine596bf02005-03-28 15:01:27 +0000594-32768, 207, 208,-32768, 50,-32768, 39,-32768, 209, 290,
595 12, 217, 211, 7, 268, 252,-32768, 218, 7, 254,
596-32768, 53,-32768, 5, 213,-32768,-32768,-32768,-32768, 229,
597 303,-32768,-32768, -1,-32768,-32768, 216,-32768, 166, 268,
598 226, 224,-32768,-32768, 156, 237, 230, -1,-32768,-32768,
599-32768, 231,-32768,-32768,-32768,-32768, 204, 336, 305, 465,
600 245, 204, 465,-32768, 253, 253,-32768,-32768, 661,-32768,
601 305, 233, 81,-32768,-32768, 213,-32768, 268, 276, 241,
602 242,-32768,-32768, 213, 243, 68, 305, 268, 247, 305,
603-32768,-32768, 82,-32768,-32768, 248, 89,-32768,-32768,-32768,
604-32768, 455, 249, 244, 258, 286, 250, 259, 257, 260,
605-32768, 202,-32768,-32768,-32768,-32768, 455, 455,-32768, 455,
606 268, 448, 251,-32768,-32768, 363,-32768,-32768, 285,-32768,
607-32768,-32768,-32768,-32768, 0, 0,-32768, 214,-32768, 12,
608-32768, 264, 213,-32768, 7, 0,-32768, 272, 213,-32768,
609 270,-32768, 213,-32768, 67, 214,-32768, 5,-32768,-32768,
610-32768, 263,-32768,-32768, 218, 19,-32768,-32768,-32768,-32768,
611-32768,-32768, 271,-32768,-32768, 6, 119,-32768,-32768, 275,
612-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
613 274, 661,-32768, 661,-32768, 278, 279,-32768, 336,-32768,
614-32768, 127,-32768, -44,-32768, 305, 277,-32768,-32768, 251,
615-32768, 268,-32768,-32768,-32768,-32768, 363,-32768, 19, 17,
616 277, 305,-32768, 149, 156,-32768,-32768,-32768,-32768,-32768,
617-32768,-32768,-32768, 28,-32768,-32768,-32768,-32768, 388, 391,
618-32768
Lev Walkin1004aa92004-09-08 00:28:11 +0000619};
620
621static const short yypgoto[] = {-32768,
Lev Walkine596bf02005-03-28 15:01:27 +0000622-32768, 389, 255,-32768,-32768, 380,-32768,-32768, 370,-32768,
623-32768, 341,-32768,-32768,-32768, 327,-32768, 289,-32768,-32768,
624 300,-32768, 346,-32768,-32768, 110,-32768,-32768, 246,-32768,
625 66, 210,-32768, 85,-32768, 86,-32768, 165,-32768, 163,
626-32768,-32768,-32768,-32768, 3, -189, -73, -186, -54,-32768,
627 181, -190, -114,-32768, -47,-32768, -251, -118, 40, -40,
628 -120,-32768, 33,-32768,-32768,-32768, -150,-32768, 133, -164,
629 -166, -201,-32768, 193,-32768, -218,-32768,-32768,-32768, 23,
630-32768,-32768,-32768,-32768,-32768,-32768, 37, 43, -152,-32768,
631-32768,-32768, 93, -128, -80,-32768,-32768,-32768,-32768, 16,
632-32768, 154, -7
Lev Walkin1004aa92004-09-08 00:28:11 +0000633};
634
635
Lev Walkine596bf02005-03-28 15:01:27 +0000636#define YYLAST 907
Lev Walkin1004aa92004-09-08 00:28:11 +0000637
638
639static const short yytable[] = { 15,
Lev Walkine596bf02005-03-28 15:01:27 +0000640 158, 121, 210, 235, 211, 15, 256, 191, 120, 101,
641 101, 265, 10, 10, 10, 5, 10, 190, 5, 10,
642 175, 1, 2, 102, 102, 117, 10, 67, 143, 65,
643 114, 423, 72, 417, 253, 7, 79, 203, 269, 10,
644 11, 10, 171, 172, 19, 10, 1, 2, 65, 16,
645 1, 2, 64, 171, 172, 71, 203, 203, 132, 78,
646 10, 180, 205, 28, 183, 300, 79, 10, 11, 63,
647 254, 64, 30, 253, 10, 180, 373, 354, 183, 204,
648 209, 205, 205, 285, 144, 73, 161, 418, 63, 78,
649 349, 419, 115, 365, 386, 166, -271, 162, 145, 167,
650 29, 294, 72, 332, 124, 360, 361, 79, 362, 254,
651 262, 118, 295, 341, 133, 262, 165, 68, 396, 32,
652 118, 191, 391, 255, 191, 71, 132, 34, 193, 139,
653 78, 190, 175, 427, 190, 235, 160, 12, 158, 164,
654 265, 291, 112, 31, -245, 20, 363, 267, -245, 33,
655 176, 192, 423, 21, 118, 251, 281, 37, 282, 252,
656 217, 219, 80, 171, 172, 17, 303, 304, 305, 306,
657 281, 66, 371, 372, 22, 10, 23, 338, 1, 2,
658 1, 2, 133, 380, 218, 24, 329, 344, 109, 110,
659 330, 345, 331, 266, 347, 403, 274, 404, 348, 374,
660 336, 274, 318, 36, 286, 323, 290, 178, 108, 10,
661 180, 181, 182, 183, 1, 2, 285, 387, 171, 172,
662 220, 10, 180, 426, 399, 183, 1, 2, 400, 83,
663 84, 127, 408, 426, 221, 415, 409, 1, 2, 171,
664 172, 317, 193, 410, 299, 193, 297, 298, 222, 223,
665 111, 116, 124, 327, 303, 304, 305, 306, 382, 378,
666 125, 158, 384, 158, 224, 192, 126, 128, 192, 340,
667 129, 134, 340, 178, 160, 10, 180, 181, 182, 183,
668 1, 2, 135, 225, 136, 138, 220, 141, 199, 226,
669 142, 178, 200, 10, 180, 181, 182, 183, 227, 168,
670 221, 169, 170, -272, 201, 228, 229, 202, 230, 212,
671 214, 215, 10, 247, 222, 223, 261, 268, 250, 249,
672 375, 277, 266, 280, 278, 260, 292, 274, 118, 293,
673 224, 301, 222, 302, 309, 313, 311, 286, 375, 315,
674 290, 319, 324, 192, 328, 333, 334, 353, 394, 225,
675 337, 335, 342, 350, 346, 226, 205, 351, 398, 82,
676 352, 192, 357, 356, 227, 366, 369, 358, 370, 83,
677 84, 377, 229, 226, 230, 381, 390, 383, 395, 401,
678 85, 38, 86, 402, 87, 405, 406, 430, 398, 412,
679 431, 6, 18, 194, 88, 35, 81, 160, 89, 160,
680 113, 394, 90, 140, 422, 91, 41, 42, 43, 137,
681 106, 359, 216, 388, 322, 376, 92, 45, 279, 379,
682 326, 93, 46, 94, 47, 95, 428, 314, 407, 355,
683 312, 416, 48, 343, 96, 97, 413, 385, 411, 0,
684 0, 49, 0, 50, 0, 0, 0, 0, 51, 98,
685 52, 53, 54, 178, 0, 10, 180, 181, 182, 183,
686 178, 99, 10, 180, 181, 182, 183, 1, 2, 177,
687 178, 179, 10, 180, 181, 182, 183, 1, 2, 0,
688 0, 0, 0, 0, 0, 0, 0, 221, 0, 0,
689 0, 0, 0, 0, 222, 0, 0, 0, 0, 0,
690 0, 222, 223, 0, 0, 0, 0, 0, 0, 364,
691 0, 184, 0, 0, 10, 0, 0, 224, 0, 1,
692 2, 0, 0, 0, 0, 0, 0, 0, 0, 185,
693 0, 38, 0, 0, 0, 226, 225, 0, 0, 0,
694 0, 0, 226, 0, 0, 0, 39, 0, 0, 0,
695 40, 227, 186, 0, 0, 0, 41, 42, 43, 229,
696 0, 230, 44, 0, 0, 0, 0, 45, 0, 187,
Lev Walkind9574ae2005-03-24 16:22:35 +0000697 0, 0, 46, 0, 47, 0, 0, 0, 0, 0,
698 0, 0, 48, 0, 0, 0, 0, 0, 0, 0,
699 0, 49, 0, 50, 0, 0, 147, 148, 51, 0,
700 52, 53, 54, 149, 0, 0, 0, 85, 38, 86,
701 0, 87, 150, 0, 0, 0, 0, 0, 0, 0,
702 0, 88, 0, 0, 0, 89, 0, 0, 0, 90,
703 0, 0, 91, 41, 42, 43, 0, 0, 0, 0,
704 0, 151, 0, 92, 45, 0, 0, 0, 93, 46,
705 94, 47, 95, 0, 0, 0, 0, 0, 0, 48,
706 0, 96, 97, 152, 153, 0, 0, 0, 49, 0,
707 50, 0, 154, 147, 148, 51, 98, 52, 53, 54,
708 149, 0, 0, 0, 85, 38, 86, 0, 87, 150,
709 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
710 0, 0, 89, 0, 0, 0, 90, 0, 0, 91,
711 41, 42, 43, 0, 0, 0, 0, 0, 151, 0,
712 92, 45, 0, 0, 0, 93, 46, 94, 47, 95,
713 0, 0, 0, 0, 0, 0, 48, 0, 96, 97,
714 152, 153, 0, 0, 0, 49, 0, 50, 83, 84,
715 0, 0, 51, 98, 52, 53, 54, 0, 0, 85,
716 38, 86, 0, 87, 0, 0, 0, 0, 0, 0,
717 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
718 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
719 0, 0, 0, 0, 0, 92, 45, 0, 0, 0,
720 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
721 0, 48, 0, 96, 97, 0, 0, 0, 0, 0,
722 49, 0, 50, 1, 2, 0, 0, 51, 98, 52,
723 53, 54, 0, 0, 85, 38, 86, 0, 87, 0,
724 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
725 0, 0, 89, 0, 0, 0, 90, 0, 0, 91,
726 41, 42, 43, 0, 0, 0, 0, 0, 0, 0,
727 92, 45, 0, 0, 0, 93, 46, 94, 47, 95,
728 0, 0, 0, 0, 0, 0, 48, 0, 96, 97,
729 0, 0, 0, 0, 0, 49, 0, 50, 0, 0,
730 0, 0, 51, 98, 52, 53, 54
Lev Walkin1004aa92004-09-08 00:28:11 +0000731};
732
733static const short yycheck[] = { 7,
Lev Walkine596bf02005-03-28 15:01:27 +0000734 121, 82, 153, 170, 155, 13, 197, 136, 82, 64,
735 65, 201, 8, 8, 8, 0, 8, 136, 3, 8,
736 135, 13, 14, 64, 65, 30, 8, 19, 21, 37,
737 48, 4, 40, 17, 35, 105, 44, 82, 32, 8,
738 9, 8, 15, 16, 107, 8, 13, 14, 56, 36,
739 13, 14, 37, 15, 16, 40, 82, 82, 99, 44,
740 8, 9, 107, 9, 12, 230, 74, 8, 9, 37,
741 71, 56, 86, 35, 8, 9, 328, 296, 12, 105,
742 105, 107, 107, 212, 77, 48, 43, 71, 56, 74,
743 292, 75, 110, 312, 346, 106, 105, 54, 91, 110,
744 59, 103, 110, 268, 113, 307, 308, 115, 310, 71,
745 104, 116, 114, 278, 99, 104, 124, 109, 113, 55,
746 116, 250, 104, 197, 253, 110, 167, 3, 136, 114,
747 115, 250, 247, 106, 253, 302, 121, 106, 259, 124,
748 330, 215, 109, 86, 106, 14, 311, 202, 110, 86,
749 135, 136, 4, 22, 116, 106, 104, 23, 106, 110,
750 168, 169, 41, 15, 16, 106, 99, 100, 101, 102,
751 104, 14, 325, 326, 43, 8, 45, 110, 13, 14,
752 13, 14, 167, 336, 169, 54, 106, 106, 109, 110,
753 110, 110, 266, 201, 106, 382, 204, 384, 110, 328,
754 274, 209, 250, 108, 212, 253, 214, 6, 109, 8,
755 9, 10, 11, 12, 13, 14, 345, 346, 15, 16,
756 19, 8, 9, 414, 106, 12, 13, 14, 110, 13,
757 14, 73, 106, 424, 33, 402, 110, 13, 14, 15,
758 16, 249, 250, 394, 229, 253, 31, 32, 47, 48,
759 105, 105, 113, 261, 99, 100, 101, 102, 339, 333,
760 83, 382, 343, 384, 63, 250, 83, 53, 253, 277,
761 83, 3, 280, 6, 259, 8, 9, 10, 11, 12,
762 13, 14, 113, 82, 3, 106, 19, 106, 9, 88,
763 105, 6, 37, 8, 9, 10, 11, 12, 97, 111,
764 33, 111, 105, 105, 105, 104, 105, 70, 107, 105,
765 105, 3, 8, 113, 47, 48, 27, 107, 111, 113,
766 328, 70, 330, 70, 107, 117, 98, 335, 116, 27,
767 63, 106, 47, 110, 98, 105, 107, 345, 346, 4,
768 348, 97, 90, 328, 112, 70, 106, 62, 356, 82,
769 108, 110, 106, 105, 107, 88, 107, 114, 366, 3,
770 103, 346, 106, 105, 97, 115, 4, 108, 84, 13,
771 14, 108, 105, 88, 107, 104, 114, 108, 108, 105,
772 24, 25, 26, 110, 28, 108, 108, 0, 396, 113,
773 0, 3, 13, 139, 38, 26, 56, 382, 42, 384,
774 74, 409, 46, 115, 412, 49, 50, 51, 52, 110,
775 65, 302, 167, 348, 252, 330, 60, 61, 209, 335,
776 256, 65, 66, 67, 68, 69, 424, 247, 389, 297,
777 238, 409, 76, 280, 78, 79, 400, 345, 396, -1,
778 -1, 85, -1, 87, -1, -1, -1, -1, 92, 93,
779 94, 95, 96, 6, -1, 8, 9, 10, 11, 12,
780 6, 105, 8, 9, 10, 11, 12, 13, 14, 5,
781 6, 7, 8, 9, 10, 11, 12, 13, 14, -1,
782 -1, -1, -1, -1, -1, -1, -1, 33, -1, -1,
783 -1, -1, -1, -1, 47, -1, -1, -1, -1, -1,
784 -1, 47, 48, -1, -1, -1, -1, -1, -1, 62,
785 -1, 47, -1, -1, 8, -1, -1, 63, -1, 13,
786 14, -1, -1, -1, -1, -1, -1, -1, -1, 65,
787 -1, 25, -1, -1, -1, 88, 82, -1, -1, -1,
788 -1, -1, 88, -1, -1, -1, 40, -1, -1, -1,
789 44, 97, 88, -1, -1, -1, 50, 51, 52, 105,
790 -1, 107, 56, -1, -1, -1, -1, 61, -1, 105,
Lev Walkind9574ae2005-03-24 16:22:35 +0000791 -1, -1, 66, -1, 68, -1, -1, -1, -1, -1,
792 -1, -1, 76, -1, -1, -1, -1, -1, -1, -1,
793 -1, 85, -1, 87, -1, -1, 13, 14, 92, -1,
794 94, 95, 96, 20, -1, -1, -1, 24, 25, 26,
795 -1, 28, 29, -1, -1, -1, -1, -1, -1, -1,
796 -1, 38, -1, -1, -1, 42, -1, -1, -1, 46,
797 -1, -1, 49, 50, 51, 52, -1, -1, -1, -1,
798 -1, 58, -1, 60, 61, -1, -1, -1, 65, 66,
799 67, 68, 69, -1, -1, -1, -1, -1, -1, 76,
800 -1, 78, 79, 80, 81, -1, -1, -1, 85, -1,
801 87, -1, 89, 13, 14, 92, 93, 94, 95, 96,
802 20, -1, -1, -1, 24, 25, 26, -1, 28, 29,
803 -1, -1, -1, -1, -1, -1, -1, -1, 38, -1,
804 -1, -1, 42, -1, -1, -1, 46, -1, -1, 49,
805 50, 51, 52, -1, -1, -1, -1, -1, 58, -1,
806 60, 61, -1, -1, -1, 65, 66, 67, 68, 69,
807 -1, -1, -1, -1, -1, -1, 76, -1, 78, 79,
808 80, 81, -1, -1, -1, 85, -1, 87, 13, 14,
809 -1, -1, 92, 93, 94, 95, 96, -1, -1, 24,
810 25, 26, -1, 28, -1, -1, -1, -1, -1, -1,
811 -1, -1, -1, 38, -1, -1, -1, 42, -1, -1,
812 -1, 46, -1, -1, 49, 50, 51, 52, -1, -1,
813 -1, -1, -1, -1, -1, 60, 61, -1, -1, -1,
814 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
815 -1, 76, -1, 78, 79, -1, -1, -1, -1, -1,
816 85, -1, 87, 13, 14, -1, -1, 92, 93, 94,
817 95, 96, -1, -1, 24, 25, 26, -1, 28, -1,
818 -1, -1, -1, -1, -1, -1, -1, -1, 38, -1,
819 -1, -1, 42, -1, -1, -1, 46, -1, -1, 49,
820 50, 51, 52, -1, -1, -1, -1, -1, -1, -1,
821 60, 61, -1, -1, -1, 65, 66, 67, 68, 69,
822 -1, -1, -1, -1, -1, -1, 76, -1, 78, 79,
823 -1, -1, -1, -1, -1, 85, -1, 87, -1, -1,
824 -1, -1, 92, 93, 94, 95, 96
Lev Walkin1004aa92004-09-08 00:28:11 +0000825};
826/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
827#line 3 "/usr/share/bison.simple"
828/* This file comes from bison-1.28. */
829
830/* Skeleton output parser for bison,
831 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
832
833 This program is free software; you can redistribute it and/or modify
834 it under the terms of the GNU General Public License as published by
835 the Free Software Foundation; either version 2, or (at your option)
836 any later version.
837
838 This program is distributed in the hope that it will be useful,
839 but WITHOUT ANY WARRANTY; without even the implied warranty of
840 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
841 GNU General Public License for more details.
842
843 You should have received a copy of the GNU General Public License
844 along with this program; if not, write to the Free Software
845 Foundation, Inc., 59 Temple Place - Suite 330,
846 Boston, MA 02111-1307, USA. */
847
848/* As a special exception, when this file is copied by Bison into a
849 Bison output file, you may use that output file without restriction.
850 This special exception was added by the Free Software Foundation
851 in version 1.24 of Bison. */
852
853/* This is the parser code that is written into each bison parser
854 when the %semantic_parser declaration is not specified in the grammar.
855 It was written by Richard Stallman by simplifying the hairy parser
856 used when %semantic_parser is specified. */
857
858#ifndef YYSTACK_USE_ALLOCA
859#ifdef alloca
860#define YYSTACK_USE_ALLOCA
861#else /* alloca not defined */
862#ifdef __GNUC__
863#define YYSTACK_USE_ALLOCA
864#define alloca __builtin_alloca
865#else /* not GNU C. */
866#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
867#define YYSTACK_USE_ALLOCA
868#include <alloca.h>
869#else /* not sparc */
870/* We think this test detects Watcom and Microsoft C. */
871/* This used to test MSDOS, but that is a bad idea
872 since that symbol is in the user namespace. */
873#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
874#if 0 /* No need for malloc.h, which pollutes the namespace;
875 instead, just don't use alloca. */
876#include <malloc.h>
877#endif
878#else /* not MSDOS, or __TURBOC__ */
879#if defined(_AIX)
880/* I don't know what this was needed for, but it pollutes the namespace.
881 So I turned it off. rms, 2 May 1997. */
882/* #include <malloc.h> */
883 #pragma alloca
884#define YYSTACK_USE_ALLOCA
885#else /* not MSDOS, or __TURBOC__, or _AIX */
886#if 0
887#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
888 and on HPUX 10. Eventually we can turn this on. */
889#define YYSTACK_USE_ALLOCA
890#define alloca __builtin_alloca
891#endif /* __hpux */
892#endif
893#endif /* not _AIX */
894#endif /* not MSDOS, or __TURBOC__ */
895#endif /* not sparc */
896#endif /* not GNU C */
897#endif /* alloca not defined */
898#endif /* YYSTACK_USE_ALLOCA not defined */
899
900#ifdef YYSTACK_USE_ALLOCA
901#define YYSTACK_ALLOC alloca
Lev Walkinf15320b2004-06-03 03:38:44 +0000902#else
Lev Walkin1004aa92004-09-08 00:28:11 +0000903#define YYSTACK_ALLOC malloc
Lev Walkinf15320b2004-06-03 03:38:44 +0000904#endif
905
Lev Walkin1004aa92004-09-08 00:28:11 +0000906/* Note: there must be only one dollar sign in this file.
907 It is replaced by the list of actions, each action
908 as one case of the switch. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000909
910#define yyerrok (yyerrstatus = 0)
911#define yyclearin (yychar = YYEMPTY)
912#define YYEMPTY -2
913#define YYEOF 0
914#define YYACCEPT goto yyacceptlab
Lev Walkin1004aa92004-09-08 00:28:11 +0000915#define YYABORT goto yyabortlab
Lev Walkinf15320b2004-06-03 03:38:44 +0000916#define YYERROR goto yyerrlab1
Lev Walkin1004aa92004-09-08 00:28:11 +0000917/* Like YYERROR except do call yyerror.
918 This remains here temporarily to ease the
919 transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +0000920 Once GCC version 2 has supplanted version 1, this can go. */
921#define YYFAIL goto yyerrlab
922#define YYRECOVERING() (!!yyerrstatus)
Lev Walkin1004aa92004-09-08 00:28:11 +0000923#define YYBACKUP(token, value) \
Lev Walkinf15320b2004-06-03 03:38:44 +0000924do \
925 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin1004aa92004-09-08 00:28:11 +0000926 { yychar = (token), yylval = (value); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000927 yychar1 = YYTRANSLATE (yychar); \
928 YYPOPSTACK; \
929 goto yybackup; \
930 } \
931 else \
Lev Walkin1004aa92004-09-08 00:28:11 +0000932 { yyerror ("syntax error: cannot back up"); YYERROR; } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000933while (0)
934
935#define YYTERROR 1
936#define YYERRCODE 256
937
Lev Walkin1004aa92004-09-08 00:28:11 +0000938#ifndef YYPURE
939#define YYLEX yylex()
Lev Walkinf15320b2004-06-03 03:38:44 +0000940#endif
941
Lev Walkin1004aa92004-09-08 00:28:11 +0000942#ifdef YYPURE
943#ifdef YYLSP_NEEDED
944#ifdef YYLEX_PARAM
945#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
946#else
947#define YYLEX yylex(&yylval, &yylloc)
948#endif
949#else /* not YYLSP_NEEDED */
950#ifdef YYLEX_PARAM
951#define YYLEX yylex(&yylval, YYLEX_PARAM)
952#else
953#define YYLEX yylex(&yylval)
954#endif
955#endif /* not YYLSP_NEEDED */
956#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000957
Lev Walkin1004aa92004-09-08 00:28:11 +0000958/* If nonreentrant, generate the variables here */
Lev Walkinf15320b2004-06-03 03:38:44 +0000959
Lev Walkin1004aa92004-09-08 00:28:11 +0000960#ifndef YYPURE
Lev Walkinf15320b2004-06-03 03:38:44 +0000961
Lev Walkin1004aa92004-09-08 00:28:11 +0000962int yychar; /* the lookahead symbol */
963YYSTYPE yylval; /* the semantic value of the */
964 /* lookahead symbol */
Lev Walkinf15320b2004-06-03 03:38:44 +0000965
Lev Walkin1004aa92004-09-08 00:28:11 +0000966#ifdef YYLSP_NEEDED
967YYLTYPE yylloc; /* location data for the lookahead */
968 /* symbol */
969#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000970
Lev Walkin1004aa92004-09-08 00:28:11 +0000971int yynerrs; /* number of parse errors so far */
972#endif /* not YYPURE */
973
974#if YYDEBUG != 0
975int yydebug; /* nonzero means print parse trace */
976/* Since this is uninitialized, it does not stop multiple parsers
977 from coexisting. */
978#endif
979
980/* YYINITDEPTH indicates the initial size of the parser's stacks */
981
Lev Walkinf15320b2004-06-03 03:38:44 +0000982#ifndef YYINITDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000983#define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +0000984#endif
985
Lev Walkin1004aa92004-09-08 00:28:11 +0000986/* YYMAXDEPTH is the maximum size the stacks can grow to
987 (effective only if the built-in stack extension method is used). */
Lev Walkinf15320b2004-06-03 03:38:44 +0000988
989#if YYMAXDEPTH == 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000990#undef YYMAXDEPTH
Lev Walkinf15320b2004-06-03 03:38:44 +0000991#endif
992
993#ifndef YYMAXDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000994#define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +0000995#endif
996
Lev Walkin1004aa92004-09-08 00:28:11 +0000997/* Define __yy_memcpy. Note that the size argument
998 should be passed with type unsigned int, because that is what the non-GCC
999 definitions require. With GCC, __builtin_memcpy takes an arg
1000 of type size_t, but it can handle unsigned int. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001001
Lev Walkin1004aa92004-09-08 00:28:11 +00001002#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
1003#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
1004#else /* not GNU C or C++ */
1005#ifndef __cplusplus
Lev Walkinf15320b2004-06-03 03:38:44 +00001006
Lev Walkin1004aa92004-09-08 00:28:11 +00001007/* This is the most reliable way to avoid incompatibilities
1008 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +00001009static void
Lev Walkin1004aa92004-09-08 00:28:11 +00001010__yy_memcpy (to, from, count)
1011 char *to;
1012 char *from;
1013 unsigned int count;
Lev Walkin459ab022004-09-07 10:39:09 +00001014{
Lev Walkin1004aa92004-09-08 00:28:11 +00001015 register char *f = from;
1016 register char *t = to;
1017 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001018
Lev Walkin1004aa92004-09-08 00:28:11 +00001019 while (i-- > 0)
1020 *t++ = *f++;
Lev Walkin459ab022004-09-07 10:39:09 +00001021}
Lev Walkin459ab022004-09-07 10:39:09 +00001022
Lev Walkin1004aa92004-09-08 00:28:11 +00001023#else /* __cplusplus */
Lev Walkin459ab022004-09-07 10:39:09 +00001024
Lev Walkin1004aa92004-09-08 00:28:11 +00001025/* This is the most reliable way to avoid incompatibilities
1026 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +00001027static void
Lev Walkin1004aa92004-09-08 00:28:11 +00001028__yy_memcpy (char *to, char *from, unsigned int count)
Lev Walkin459ab022004-09-07 10:39:09 +00001029{
Lev Walkin1004aa92004-09-08 00:28:11 +00001030 register char *t = to;
1031 register char *f = from;
1032 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001033
Lev Walkin1004aa92004-09-08 00:28:11 +00001034 while (i-- > 0)
1035 *t++ = *f++;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001036}
Lev Walkin609ccbb2004-09-04 04:49:21 +00001037
Lev Walkin1004aa92004-09-08 00:28:11 +00001038#endif
1039#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001040
Lev Walkin1004aa92004-09-08 00:28:11 +00001041#line 217 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00001042
1043/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1044 into yyparse. The argument should have type void *.
1045 It should actually point to an object.
1046 Grammar actions can access the variable by casting it
1047 to the proper pointer type. */
1048
1049#ifdef YYPARSE_PARAM
Lev Walkin1004aa92004-09-08 00:28:11 +00001050#ifdef __cplusplus
1051#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1052#define YYPARSE_PARAM_DECL
1053#else /* not __cplusplus */
1054#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1055#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1056#endif /* not __cplusplus */
1057#else /* not YYPARSE_PARAM */
1058#define YYPARSE_PARAM_ARG
1059#define YYPARSE_PARAM_DECL
1060#endif /* not YYPARSE_PARAM */
Lev Walkinf15320b2004-06-03 03:38:44 +00001061
1062/* Prevent warning if -Wstrict-prototypes. */
1063#ifdef __GNUC__
Lev Walkin1004aa92004-09-08 00:28:11 +00001064#ifdef YYPARSE_PARAM
Lev Walkinf15320b2004-06-03 03:38:44 +00001065int yyparse (void *);
Lev Walkin1004aa92004-09-08 00:28:11 +00001066#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001067int yyparse (void);
Lev Walkin1004aa92004-09-08 00:28:11 +00001068#endif
Lev Walkinceb20e72004-09-05 10:40:41 +00001069#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001070
Lev Walkinf15320b2004-06-03 03:38:44 +00001071int
Lev Walkin1004aa92004-09-08 00:28:11 +00001072yyparse(YYPARSE_PARAM_ARG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001073 YYPARSE_PARAM_DECL
1074{
1075 register int yystate;
1076 register int yyn;
1077 register short *yyssp;
1078 register YYSTYPE *yyvsp;
Lev Walkin1004aa92004-09-08 00:28:11 +00001079 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1080 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
Lev Walkinf15320b2004-06-03 03:38:44 +00001081
Lev Walkin1004aa92004-09-08 00:28:11 +00001082 short yyssa[YYINITDEPTH]; /* the state stack */
1083 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
Lev Walkinf15320b2004-06-03 03:38:44 +00001084
Lev Walkin1004aa92004-09-08 00:28:11 +00001085 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1086 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
Lev Walkinf15320b2004-06-03 03:38:44 +00001087
Lev Walkin1004aa92004-09-08 00:28:11 +00001088#ifdef YYLSP_NEEDED
1089 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1090 YYLTYPE *yyls = yylsa;
1091 YYLTYPE *yylsp;
1092
1093#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1094#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001095#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkin1004aa92004-09-08 00:28:11 +00001096#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001097
Lev Walkin1004aa92004-09-08 00:28:11 +00001098 int yystacksize = YYINITDEPTH;
1099 int yyfree_stacks = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001100
Lev Walkin1004aa92004-09-08 00:28:11 +00001101#ifdef YYPURE
1102 int yychar;
1103 YYSTYPE yylval;
1104 int yynerrs;
1105#ifdef YYLSP_NEEDED
1106 YYLTYPE yylloc;
1107#endif
1108#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001109
Lev Walkin1004aa92004-09-08 00:28:11 +00001110 YYSTYPE yyval; /* the variable used to return */
1111 /* semantic values from the action */
1112 /* routines */
Lev Walkinf15320b2004-06-03 03:38:44 +00001113
1114 int yylen;
1115
Lev Walkin1004aa92004-09-08 00:28:11 +00001116#if YYDEBUG != 0
1117 if (yydebug)
1118 fprintf(stderr, "Starting parse\n");
1119#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001120
1121 yystate = 0;
1122 yyerrstatus = 0;
1123 yynerrs = 0;
1124 yychar = YYEMPTY; /* Cause a token to be read. */
1125
1126 /* Initialize stack pointers.
1127 Waste one element of value and location stack
1128 so that they stay on the same level as the state stack.
1129 The wasted elements are never initialized. */
1130
Lev Walkin1004aa92004-09-08 00:28:11 +00001131 yyssp = yyss - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001132 yyvsp = yyvs;
Lev Walkin1004aa92004-09-08 00:28:11 +00001133#ifdef YYLSP_NEEDED
1134 yylsp = yyls;
1135#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001136
Lev Walkin1004aa92004-09-08 00:28:11 +00001137/* Push a new state, which is found in yystate . */
1138/* In all cases, when you get here, the value and location stacks
1139 have just been pushed. so pushing a state here evens the stacks. */
1140yynewstate:
Lev Walkinf15320b2004-06-03 03:38:44 +00001141
Lev Walkin1004aa92004-09-08 00:28:11 +00001142 *++yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001143
1144 if (yyssp >= yyss + yystacksize - 1)
1145 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001146 /* Give user a chance to reallocate the stack */
1147 /* Use copies of these so that the &'s don't force the real ones into memory. */
1148 YYSTYPE *yyvs1 = yyvs;
1149 short *yyss1 = yyss;
1150#ifdef YYLSP_NEEDED
1151 YYLTYPE *yyls1 = yyls;
1152#endif
1153
Lev Walkinf15320b2004-06-03 03:38:44 +00001154 /* Get the current used size of the three stacks, in elements. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001155 int size = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001156
1157#ifdef yyoverflow
Lev Walkin1004aa92004-09-08 00:28:11 +00001158 /* Each stack pointer address is followed by the size of
1159 the data in use in that stack, in bytes. */
1160#ifdef YYLSP_NEEDED
1161 /* This used to be a conditional around just the two extra args,
1162 but that might be undefined if yyoverflow is a macro. */
1163 yyoverflow("parser stack overflow",
1164 &yyss1, size * sizeof (*yyssp),
1165 &yyvs1, size * sizeof (*yyvsp),
1166 &yyls1, size * sizeof (*yylsp),
1167 &yystacksize);
1168#else
1169 yyoverflow("parser stack overflow",
1170 &yyss1, size * sizeof (*yyssp),
1171 &yyvs1, size * sizeof (*yyvsp),
1172 &yystacksize);
1173#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001174
Lev Walkin1004aa92004-09-08 00:28:11 +00001175 yyss = yyss1; yyvs = yyvs1;
1176#ifdef YYLSP_NEEDED
1177 yyls = yyls1;
1178#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001179#else /* no yyoverflow */
1180 /* Extend the stack our own way. */
1181 if (yystacksize >= YYMAXDEPTH)
Lev Walkin1004aa92004-09-08 00:28:11 +00001182 {
1183 yyerror("parser stack overflow");
1184 if (yyfree_stacks)
1185 {
1186 free (yyss);
1187 free (yyvs);
1188#ifdef YYLSP_NEEDED
1189 free (yyls);
1190#endif
1191 }
1192 return 2;
1193 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001194 yystacksize *= 2;
1195 if (yystacksize > YYMAXDEPTH)
1196 yystacksize = YYMAXDEPTH;
Lev Walkin1004aa92004-09-08 00:28:11 +00001197#ifndef YYSTACK_USE_ALLOCA
1198 yyfree_stacks = 1;
1199#endif
1200 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1201 __yy_memcpy ((char *)yyss, (char *)yyss1,
1202 size * (unsigned int) sizeof (*yyssp));
1203 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1204 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1205 size * (unsigned int) sizeof (*yyvsp));
1206#ifdef YYLSP_NEEDED
1207 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1208 __yy_memcpy ((char *)yyls, (char *)yyls1,
1209 size * (unsigned int) sizeof (*yylsp));
1210#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001211#endif /* no yyoverflow */
1212
Lev Walkin1004aa92004-09-08 00:28:11 +00001213 yyssp = yyss + size - 1;
1214 yyvsp = yyvs + size - 1;
1215#ifdef YYLSP_NEEDED
1216 yylsp = yyls + size - 1;
1217#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001218
Lev Walkin1004aa92004-09-08 00:28:11 +00001219#if YYDEBUG != 0
1220 if (yydebug)
1221 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1222#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001223
1224 if (yyssp >= yyss + yystacksize - 1)
1225 YYABORT;
1226 }
1227
Lev Walkin1004aa92004-09-08 00:28:11 +00001228#if YYDEBUG != 0
1229 if (yydebug)
1230 fprintf(stderr, "Entering state %d\n", yystate);
1231#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001232
1233 goto yybackup;
Lev Walkin1004aa92004-09-08 00:28:11 +00001234 yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001235
1236/* Do appropriate processing given the current state. */
1237/* Read a lookahead token if we need one and don't already have one. */
1238/* yyresume: */
1239
1240 /* First try to decide what to do without reference to lookahead token. */
1241
1242 yyn = yypact[yystate];
Lev Walkin1004aa92004-09-08 00:28:11 +00001243 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001244 goto yydefault;
1245
1246 /* Not known => get a lookahead token if don't already have one. */
1247
1248 /* yychar is either YYEMPTY or YYEOF
1249 or a valid token in external form. */
1250
1251 if (yychar == YYEMPTY)
1252 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001253#if YYDEBUG != 0
1254 if (yydebug)
1255 fprintf(stderr, "Reading a token: ");
1256#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001257 yychar = YYLEX;
1258 }
1259
Lev Walkin1004aa92004-09-08 00:28:11 +00001260 /* Convert token to internal form (in yychar1) for indexing tables with */
Lev Walkinf15320b2004-06-03 03:38:44 +00001261
Lev Walkin1004aa92004-09-08 00:28:11 +00001262 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001263 {
1264 yychar1 = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001265 yychar = YYEOF; /* Don't call YYLEX any more */
Lev Walkinf15320b2004-06-03 03:38:44 +00001266
Lev Walkin1004aa92004-09-08 00:28:11 +00001267#if YYDEBUG != 0
1268 if (yydebug)
1269 fprintf(stderr, "Now at end of input.\n");
1270#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001271 }
1272 else
1273 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001274 yychar1 = YYTRANSLATE(yychar);
Lev Walkinf15320b2004-06-03 03:38:44 +00001275
Lev Walkin1004aa92004-09-08 00:28:11 +00001276#if YYDEBUG != 0
1277 if (yydebug)
1278 {
1279 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1280 /* Give the individual parser a way to print the precise meaning
1281 of a token, for further debugging info. */
1282#ifdef YYPRINT
1283 YYPRINT (stderr, yychar, yylval);
1284#endif
1285 fprintf (stderr, ")\n");
1286 }
1287#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001288 }
1289
1290 yyn += yychar1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001291 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001292 goto yydefault;
Lev Walkin1004aa92004-09-08 00:28:11 +00001293
Lev Walkinf15320b2004-06-03 03:38:44 +00001294 yyn = yytable[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001295
1296 /* yyn is what to do for this token type in this state.
1297 Negative => reduce, -yyn is rule number.
1298 Positive => shift, yyn is new state.
1299 New state is final state => don't bother to shift,
1300 just return success.
1301 0, or most negative number => error. */
1302
1303 if (yyn < 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001304 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001305 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001306 goto yyerrlab;
1307 yyn = -yyn;
1308 goto yyreduce;
1309 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001310 else if (yyn == 0)
1311 goto yyerrlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001312
1313 if (yyn == YYFINAL)
1314 YYACCEPT;
1315
1316 /* Shift the lookahead token. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001317
1318#if YYDEBUG != 0
1319 if (yydebug)
1320 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1321#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001322
1323 /* Discard the token being shifted unless it is eof. */
1324 if (yychar != YYEOF)
1325 yychar = YYEMPTY;
1326
1327 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00001328#ifdef YYLSP_NEEDED
1329 *++yylsp = yylloc;
1330#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001331
Lev Walkin1004aa92004-09-08 00:28:11 +00001332 /* count tokens shifted since error; after three, turn off error status. */
1333 if (yyerrstatus) yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001334
1335 yystate = yyn;
1336 goto yynewstate;
1337
Lev Walkin1004aa92004-09-08 00:28:11 +00001338/* Do the default action for the current state. */
Lev Walkin459ab022004-09-07 10:39:09 +00001339yydefault:
Lev Walkin1004aa92004-09-08 00:28:11 +00001340
Lev Walkinf15320b2004-06-03 03:38:44 +00001341 yyn = yydefact[yystate];
1342 if (yyn == 0)
1343 goto yyerrlab;
1344
Lev Walkin1004aa92004-09-08 00:28:11 +00001345/* Do a reduction. yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001346yyreduce:
1347 yylen = yyr2[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001348 if (yylen > 0)
1349 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Lev Walkinf15320b2004-06-03 03:38:44 +00001350
Lev Walkin1004aa92004-09-08 00:28:11 +00001351#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00001352 if (yydebug)
1353 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001354 int i;
Lev Walkinf15320b2004-06-03 03:38:44 +00001355
Lev Walkin1004aa92004-09-08 00:28:11 +00001356 fprintf (stderr, "Reducing via rule %d (line %d), ",
1357 yyn, yyrline[yyn]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001358
1359 /* Print the symbols being reduced, and their result. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001360 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1361 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1362 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001363 }
1364#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001365
Lev Walkin1004aa92004-09-08 00:28:11 +00001366
1367 switch (yyn) {
1368
1369case 1:
Lev Walkind9574ae2005-03-24 16:22:35 +00001370#line 306 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001371{
1372 *(void **)param = yyvsp[0].a_grammar;
1373 ;
1374 break;}
1375case 2:
Lev Walkind9574ae2005-03-24 16:22:35 +00001376#line 312 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001377{
Lev Walkinf15320b2004-06-03 03:38:44 +00001378 yyval.a_grammar = asn1p_new();
1379 checkmem(yyval.a_grammar);
1380 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001381 ;
1382 break;}
1383case 3:
Lev Walkind9574ae2005-03-24 16:22:35 +00001384#line 317 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001385{
Lev Walkinf15320b2004-06-03 03:38:44 +00001386 yyval.a_grammar = yyvsp[-1].a_grammar;
1387 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001388 ;
1389 break;}
1390case 4:
Lev Walkind9574ae2005-03-24 16:22:35 +00001391#line 338 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001392{
Lev Walkinf15320b2004-06-03 03:38:44 +00001393
1394 if(yyvsp[-1].a_module) {
1395 yyval.a_module = yyvsp[-1].a_module;
1396 } else {
1397 /* There's a chance that a module is just plain empty */
1398 yyval.a_module = asn1p_module_new();
1399 }
1400 checkmem(yyval.a_module);
1401
1402 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1403 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1404 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001405 ;
1406 break;}
1407case 5:
Lev Walkind9574ae2005-03-24 16:22:35 +00001408#line 359 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001409{ yyval.a_oid = 0; ;
1410 break;}
1411case 6:
Lev Walkind9574ae2005-03-24 16:22:35 +00001412#line 360 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001413{ yyval.a_oid = yyvsp[0].a_oid; ;
1414 break;}
1415case 7:
Lev Walkind9574ae2005-03-24 16:22:35 +00001416#line 364 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001417{
Lev Walkinf15320b2004-06-03 03:38:44 +00001418 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin1004aa92004-09-08 00:28:11 +00001419 ;
1420 break;}
1421case 8:
Lev Walkind9574ae2005-03-24 16:22:35 +00001422#line 367 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001423{
Lev Walkinf15320b2004-06-03 03:38:44 +00001424 yyval.a_oid = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001425 ;
1426 break;}
1427case 9:
Lev Walkind9574ae2005-03-24 16:22:35 +00001428#line 373 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001429{
Lev Walkinf15320b2004-06-03 03:38:44 +00001430 yyval.a_oid = asn1p_oid_new();
1431 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1432 if(yyvsp[0].a_oid_arc.name)
1433 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001434 ;
1435 break;}
1436case 10:
Lev Walkind9574ae2005-03-24 16:22:35 +00001437#line 379 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001438{
Lev Walkinf15320b2004-06-03 03:38:44 +00001439 yyval.a_oid = yyvsp[-1].a_oid;
1440 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1441 if(yyvsp[0].a_oid_arc.name)
1442 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001443 ;
1444 break;}
1445case 11:
Lev Walkind9574ae2005-03-24 16:22:35 +00001446#line 388 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001447{ /* iso */
Lev Walkinf15320b2004-06-03 03:38:44 +00001448 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1449 yyval.a_oid_arc.number = -1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001450 ;
1451 break;}
1452case 12:
Lev Walkind9574ae2005-03-24 16:22:35 +00001453#line 392 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001454{ /* iso(1) */
Lev Walkinf15320b2004-06-03 03:38:44 +00001455 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1456 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001457 ;
1458 break;}
1459case 13:
Lev Walkind9574ae2005-03-24 16:22:35 +00001460#line 396 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001461{ /* 1 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001462 yyval.a_oid_arc.name = 0;
1463 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001464 ;
1465 break;}
1466case 14:
Lev Walkind9574ae2005-03-24 16:22:35 +00001467#line 406 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001468{ yyval.a_module_flags = MSF_NOFLAGS; ;
1469 break;}
1470case 15:
Lev Walkind9574ae2005-03-24 16:22:35 +00001471#line 407 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001472{
Lev Walkinf15320b2004-06-03 03:38:44 +00001473 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001474 ;
1475 break;}
1476case 16:
Lev Walkind9574ae2005-03-24 16:22:35 +00001477#line 416 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001478{
Lev Walkinf15320b2004-06-03 03:38:44 +00001479 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001480 ;
1481 break;}
1482case 17:
Lev Walkind9574ae2005-03-24 16:22:35 +00001483#line 419 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001484{
Lev Walkinf15320b2004-06-03 03:38:44 +00001485 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001486 ;
1487 break;}
1488case 18:
Lev Walkind9574ae2005-03-24 16:22:35 +00001489#line 428 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001490{
Lev Walkinf15320b2004-06-03 03:38:44 +00001491 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001492 ;
1493 break;}
1494case 19:
Lev Walkind9574ae2005-03-24 16:22:35 +00001495#line 431 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001496{
Lev Walkinf15320b2004-06-03 03:38:44 +00001497 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001498 ;
1499 break;}
1500case 20:
Lev Walkind9574ae2005-03-24 16:22:35 +00001501#line 434 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001502{
Lev Walkinf15320b2004-06-03 03:38:44 +00001503 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001504 ;
1505 break;}
1506case 21:
Lev Walkind9574ae2005-03-24 16:22:35 +00001507#line 437 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001508{
Lev Walkinf15320b2004-06-03 03:38:44 +00001509 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin1004aa92004-09-08 00:28:11 +00001510 ;
1511 break;}
1512case 22:
Lev Walkind9574ae2005-03-24 16:22:35 +00001513#line 441 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001514{
Lev Walkinf59d0752004-08-18 04:59:12 +00001515 /* X.680Amd1 specifies TAG and XER */
1516 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1517 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1518 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1519 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1520 } else {
1521 fprintf(stderr,
1522 "WARNING: %s INSTRUCTIONS at line %d: "
1523 "Unrecognized encoding reference\n",
1524 yyvsp[-1].tv_str, yylineno);
1525 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1526 }
1527 free(yyvsp[-1].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00001528 ;
1529 break;}
1530case 23:
Lev Walkind9574ae2005-03-24 16:22:35 +00001531#line 462 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001532{ yyval.a_module = 0; ;
1533 break;}
1534case 24:
Lev Walkind9574ae2005-03-24 16:22:35 +00001535#line 463 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001536{
Lev Walkinf15320b2004-06-03 03:38:44 +00001537 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001538 ;
1539 break;}
1540case 25:
Lev Walkind9574ae2005-03-24 16:22:35 +00001541#line 472 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001542{
Lev Walkinf59d0752004-08-18 04:59:12 +00001543 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001544 ;
1545 break;}
1546case 26:
Lev Walkind9574ae2005-03-24 16:22:35 +00001547#line 475 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001548{
Lev Walkinf15320b2004-06-03 03:38:44 +00001549 yyval.a_module = yyvsp[-1].a_module;
1550
Lev Walkinf59d0752004-08-18 04:59:12 +00001551 /* Behave well when one of them is skipped. */
1552 if(!(yyvsp[-1].a_module)) {
1553 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1554 break;
1555 }
1556
Lev Walkinf15320b2004-06-03 03:38:44 +00001557#ifdef MY_IMPORT
1558#error MY_IMPORT DEFINED ELSEWHERE!
1559#endif
1560#define MY_IMPORT(foo,field) do { \
Lev Walkinbc55d232004-08-13 12:31:09 +00001561 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
Lev Walkinf15320b2004-06-03 03:38:44 +00001562 TQ_ADD(&(yyval.a_module->foo), \
1563 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1564 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001565 } \
1566 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1567 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001568
1569 MY_IMPORT(imports, xp_next);
1570 MY_IMPORT(exports, xp_next);
1571 MY_IMPORT(members, next);
1572#undef MY_IMPORT
1573
Lev Walkin1004aa92004-09-08 00:28:11 +00001574 ;
1575 break;}
1576case 27:
Lev Walkind9574ae2005-03-24 16:22:35 +00001577#line 508 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001578{
Lev Walkinf15320b2004-06-03 03:38:44 +00001579 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001580 ;
1581 break;}
1582case 28:
Lev Walkind9574ae2005-03-24 16:22:35 +00001583#line 511 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001584{
Lev Walkinf15320b2004-06-03 03:38:44 +00001585 yyval.a_module = asn1p_module_new();
1586 checkmem(yyval.a_module);
1587 if(yyvsp[0].a_xports) {
1588 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1589 } else {
1590 /* "EXPORTS ALL;" ? */
1591 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001592 ;
1593 break;}
1594case 29:
Lev Walkind9574ae2005-03-24 16:22:35 +00001595#line 520 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001596{
Lev Walkinf15320b2004-06-03 03:38:44 +00001597 yyval.a_module = asn1p_module_new();
1598 checkmem(yyval.a_module);
1599 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1600 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1601 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001602 ;
1603 break;}
1604case 30:
Lev Walkind9574ae2005-03-24 16:22:35 +00001605#line 527 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001606{
Lev Walkinf59d0752004-08-18 04:59:12 +00001607 yyval.a_module = asn1p_module_new();
1608 checkmem(yyval.a_module);
1609 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1610 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1611 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001612 ;
1613 break;}
1614case 31:
Lev Walkind9574ae2005-03-24 16:22:35 +00001615#line 540 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001616{
Lev Walkinf59d0752004-08-18 04:59:12 +00001617 yyval.a_module = asn1p_module_new();
1618 checkmem(yyval.a_module);
1619 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1620 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1621 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001622 ;
1623 break;}
1624case 32:
Lev Walkind9574ae2005-03-24 16:22:35 +00001625#line 548 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001626{ asn1p_lexer_hack_push_encoding_control(); ;
1627 break;}
1628case 33:
Lev Walkind9574ae2005-03-24 16:22:35 +00001629#line 549 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001630{
Lev Walkinf59d0752004-08-18 04:59:12 +00001631 fprintf(stderr,
1632 "WARNING: ENCODING-CONTROL %s "
1633 "specification at line %d ignored\n",
1634 yyvsp[-1].tv_str, yylineno);
1635 free(yyvsp[-1].tv_str);
1636 yyval.a_module = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001637 ;
1638 break;}
1639case 34:
Lev Walkind9574ae2005-03-24 16:22:35 +00001640#line 561 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001641{
Lev Walkinf15320b2004-06-03 03:38:44 +00001642 return yyerror(
1643 "Attempt to redefine a standard basic type, "
1644 "use -ftypesXY to switch back "
1645 "to older version of ASN.1 standard");
Lev Walkin1004aa92004-09-08 00:28:11 +00001646 ;
1647 break;}
1648case 35:
Lev Walkind9574ae2005-03-24 16:22:35 +00001649#line 575 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001650{
Lev Walkinf15320b2004-06-03 03:38:44 +00001651 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001652 ;
1653 break;}
1654case 36:
Lev Walkind9574ae2005-03-24 16:22:35 +00001655#line 581 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001656{
Lev Walkinf15320b2004-06-03 03:38:44 +00001657 return yyerror("Empty IMPORTS list");
Lev Walkin1004aa92004-09-08 00:28:11 +00001658 ;
1659 break;}
1660case 37:
Lev Walkind9574ae2005-03-24 16:22:35 +00001661#line 587 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001662{
Lev Walkinf15320b2004-06-03 03:38:44 +00001663 yyval.a_module = asn1p_module_new();
1664 checkmem(yyval.a_module);
1665 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001666 ;
1667 break;}
1668case 38:
Lev Walkind9574ae2005-03-24 16:22:35 +00001669#line 592 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001670{
Lev Walkinf15320b2004-06-03 03:38:44 +00001671 yyval.a_module = yyvsp[-1].a_module;
1672 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001673 ;
1674 break;}
1675case 39:
Lev Walkind9574ae2005-03-24 16:22:35 +00001676#line 599 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001677{
Lev Walkinf15320b2004-06-03 03:38:44 +00001678 yyval.a_xports = yyvsp[-3].a_xports;
1679 yyval.a_xports->from = yyvsp[-1].tv_str;
1680 yyval.a_xports->from_oid = yyvsp[0].a_oid;
1681 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001682 ;
1683 break;}
1684case 40:
Lev Walkind9574ae2005-03-24 16:22:35 +00001685#line 608 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001686{
Lev Walkinf15320b2004-06-03 03:38:44 +00001687 yyval.a_xports = asn1p_xports_new();
1688 checkmem(yyval.a_xports);
1689 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001690 ;
1691 break;}
1692case 41:
Lev Walkind9574ae2005-03-24 16:22:35 +00001693#line 613 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001694{
Lev Walkinf15320b2004-06-03 03:38:44 +00001695 yyval.a_xports = yyvsp[-2].a_xports;
1696 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001697 ;
1698 break;}
1699case 42:
Lev Walkind9574ae2005-03-24 16:22:35 +00001700#line 620 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001701{
Lev Walkinf15320b2004-06-03 03:38:44 +00001702 yyval.a_expr = asn1p_expr_new(yylineno);
1703 checkmem(yyval.a_expr);
1704 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1705 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001706 ;
1707 break;}
1708case 43:
Lev Walkind9574ae2005-03-24 16:22:35 +00001709#line 626 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001710{ /* Completely equivalent to above */
1711 yyval.a_expr = asn1p_expr_new(yylineno);
1712 checkmem(yyval.a_expr);
1713 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1714 yyval.a_expr->expr_type = A1TC_REFERENCE;
1715 ;
1716 break;}
1717case 44:
Lev Walkind9574ae2005-03-24 16:22:35 +00001718#line 632 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001719{
Lev Walkinf15320b2004-06-03 03:38:44 +00001720 yyval.a_expr = asn1p_expr_new(yylineno);
1721 checkmem(yyval.a_expr);
1722 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1723 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001724 ;
1725 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001726case 45:
Lev Walkind9574ae2005-03-24 16:22:35 +00001727#line 641 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001728{
Lev Walkinf15320b2004-06-03 03:38:44 +00001729 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin1004aa92004-09-08 00:28:11 +00001730 ;
1731 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001732case 46:
Lev Walkind9574ae2005-03-24 16:22:35 +00001733#line 644 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001734{
Lev Walkinf15320b2004-06-03 03:38:44 +00001735 yyval.a_xports = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001736 ;
1737 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001738case 47:
Lev Walkind9574ae2005-03-24 16:22:35 +00001739#line 647 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001740{
Lev Walkinf15320b2004-06-03 03:38:44 +00001741 /* Empty EXPORTS clause effectively prohibits export. */
1742 yyval.a_xports = asn1p_xports_new();
1743 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001744 ;
1745 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001746case 48:
Lev Walkind9574ae2005-03-24 16:22:35 +00001747#line 655 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001748{
Lev Walkinf15320b2004-06-03 03:38:44 +00001749 yyval.a_xports = asn1p_xports_new();
1750 assert(yyval.a_xports);
1751 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001752 ;
1753 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001754case 49:
Lev Walkind9574ae2005-03-24 16:22:35 +00001755#line 660 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001756{
Lev Walkinf15320b2004-06-03 03:38:44 +00001757 yyval.a_xports = yyvsp[-2].a_xports;
1758 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001759 ;
1760 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001761case 50:
Lev Walkind9574ae2005-03-24 16:22:35 +00001762#line 667 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001763{
Lev Walkinf15320b2004-06-03 03:38:44 +00001764 yyval.a_expr = asn1p_expr_new(yylineno);
1765 checkmem(yyval.a_expr);
1766 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1767 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin1004aa92004-09-08 00:28:11 +00001768 ;
1769 break;}
1770case 51:
Lev Walkind9574ae2005-03-24 16:22:35 +00001771#line 673 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001772{
1773 yyval.a_expr = asn1p_expr_new(yylineno);
1774 checkmem(yyval.a_expr);
1775 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1776 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1777 ;
1778 break;}
1779case 52:
Lev Walkind9574ae2005-03-24 16:22:35 +00001780#line 679 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001781{
1782 yyval.a_expr = asn1p_expr_new(yylineno);
1783 checkmem(yyval.a_expr);
1784 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1785 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1786 ;
1787 break;}
1788case 53:
Lev Walkind9574ae2005-03-24 16:22:35 +00001789#line 689 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001790{
Lev Walkinf15320b2004-06-03 03:38:44 +00001791 yyval.a_expr = yyvsp[-4].a_expr;
1792 assert(yyval.a_expr->Identifier == 0);
1793 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1794 yyval.a_expr->meta_type = AMT_VALUESET;
1795 // take care of optValueSetBody
Lev Walkin1004aa92004-09-08 00:28:11 +00001796 ;
1797 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001798case 54:
Lev Walkind9574ae2005-03-24 16:22:35 +00001799#line 699 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001800{
Lev Walkinf15320b2004-06-03 03:38:44 +00001801 yyval.a_expr = asn1p_expr_new(yylineno);
1802 checkmem(yyval.a_expr);
1803 yyval.a_expr->reference = yyvsp[0].a_ref;
1804 yyval.a_expr->expr_type = A1TC_REFERENCE;
1805 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001806 ;
1807 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001808case 55:
Lev Walkind9574ae2005-03-24 16:22:35 +00001809#line 706 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001810{
Lev Walkinf15320b2004-06-03 03:38:44 +00001811 yyval.a_expr = asn1p_expr_new(yylineno);
1812 checkmem(yyval.a_expr);
1813 yyval.a_expr->expr_type = yyvsp[0].a_type;
1814 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001815 ;
1816 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001817case 56:
Lev Walkind9574ae2005-03-24 16:22:35 +00001818#line 715 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001819{ ;
Lev Walkin1004aa92004-09-08 00:28:11 +00001820 break;}
1821case 57:
Lev Walkind9574ae2005-03-24 16:22:35 +00001822#line 716 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001823{
1824 ;
1825 break;}
1826case 58:
Lev Walkin1e448d32005-03-24 14:26:38 +00001827#line 727 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001828{
1829 ;
1830 break;}
Lev Walkind9574ae2005-03-24 16:22:35 +00001831case 59:
1832#line 729 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001833{
1834 ;
1835 break;}
Lev Walkind9574ae2005-03-24 16:22:35 +00001836case 60:
Lev Walkin1e448d32005-03-24 14:26:38 +00001837#line 734 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001838{
1839 ;
1840 break;}
Lev Walkind9574ae2005-03-24 16:22:35 +00001841case 61:
1842#line 736 "asn1p_y.y"
1843{
1844 ;
1845 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001846case 62:
Lev Walkind9574ae2005-03-24 16:22:35 +00001847#line 752 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001848{
Lev Walkinf15320b2004-06-03 03:38:44 +00001849 yyval.a_expr = asn1p_expr_new(yylineno);
1850 checkmem(yyval.a_expr);
1851 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1852 yyval.a_expr->tag = yyvsp[-1].a_tag;
1853 yyval.a_expr->expr_type = A1TC_TYPEID;
1854 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001855 ;
1856 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001857case 63:
Lev Walkind9574ae2005-03-24 16:22:35 +00001858#line 760 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001859{
Lev Walkinf15320b2004-06-03 03:38:44 +00001860 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00001861 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00001862 assert(yyval.a_expr->expr_type);
1863 assert(yyval.a_expr->meta_type);
Lev Walkin1004aa92004-09-08 00:28:11 +00001864 ;
1865 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001866case 64:
Lev Walkind9574ae2005-03-24 16:22:35 +00001867#line 766 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001868{
Lev Walkinf15320b2004-06-03 03:38:44 +00001869 yyval.a_expr = yyvsp[0].a_expr;
1870 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1871 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1872 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin1004aa92004-09-08 00:28:11 +00001873 ;
1874 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001875case 65:
Lev Walkind9574ae2005-03-24 16:22:35 +00001876#line 782 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001877{
Lev Walkinf15320b2004-06-03 03:38:44 +00001878 yyval.a_expr = yyvsp[0].a_expr;
1879 assert(yyval.a_expr->Identifier == 0);
1880 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1881 yyval.a_expr->params = yyvsp[-3].a_plist;
1882 yyval.a_expr->meta_type = AMT_PARAMTYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001883 ;
1884 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001885case 66:
Lev Walkind9574ae2005-03-24 16:22:35 +00001886#line 792 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001887{
Lev Walkinf15320b2004-06-03 03:38:44 +00001888 int ret;
1889 yyval.a_plist = asn1p_paramlist_new(yylineno);
1890 checkmem(yyval.a_plist);
1891 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1892 checkmem(ret == 0);
1893 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1894 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001895 ;
1896 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001897case 67:
Lev Walkind9574ae2005-03-24 16:22:35 +00001898#line 801 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001899{
Lev Walkinf15320b2004-06-03 03:38:44 +00001900 int ret;
1901 yyval.a_plist = yyvsp[-2].a_plist;
1902 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1903 checkmem(ret == 0);
1904 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1905 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001906 ;
1907 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001908case 68:
Lev Walkind9574ae2005-03-24 16:22:35 +00001909#line 812 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001910{
Lev Walkinf15320b2004-06-03 03:38:44 +00001911 yyval.a_parg.governor = NULL;
1912 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001913 ;
1914 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001915case 69:
Lev Walkind9574ae2005-03-24 16:22:35 +00001916#line 816 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001917{
Lev Walkinf15320b2004-06-03 03:38:44 +00001918 int ret;
1919 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1920 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1921 checkmem(ret == 0);
1922 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001923 ;
1924 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001925case 70:
Lev Walkind9574ae2005-03-24 16:22:35 +00001926#line 823 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001927{
Lev Walkinf15320b2004-06-03 03:38:44 +00001928 int ret;
1929 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinc8092cb2005-02-18 16:34:21 +00001930 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1931 checkmem(ret == 0);
1932 yyval.a_parg.argument = yyvsp[0].tv_str;
1933 ;
1934 break;}
1935case 71:
Lev Walkind9574ae2005-03-24 16:22:35 +00001936#line 830 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00001937{
1938 int ret;
1939 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00001940 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1941 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1942 checkmem(ret == 0);
1943 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001944 ;
1945 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001946case 72:
Lev Walkind9574ae2005-03-24 16:22:35 +00001947#line 841 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001948{
Lev Walkinf15320b2004-06-03 03:38:44 +00001949 yyval.a_expr = asn1p_expr_new(yylineno);
1950 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001951 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1952 ;
1953 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001954case 73:
Lev Walkind9574ae2005-03-24 16:22:35 +00001955#line 846 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001956{
Lev Walkinf15320b2004-06-03 03:38:44 +00001957 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001958 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1959 ;
1960 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001961case 74:
Lev Walkind9574ae2005-03-24 16:22:35 +00001962#line 853 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001963{
Lev Walkinf15320b2004-06-03 03:38:44 +00001964 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001965 ;
1966 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001967case 75:
Lev Walkind9574ae2005-03-24 16:22:35 +00001968#line 856 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001969{
Lev Walkinf15320b2004-06-03 03:38:44 +00001970 yyval.a_expr = asn1p_expr_new(yylineno);
1971 checkmem(yyval.a_expr);
1972 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1973 yyval.a_expr->expr_type = A1TC_REFERENCE;
1974 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001975 ;
1976 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001977case 76:
Lev Walkind9574ae2005-03-24 16:22:35 +00001978#line 880 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001979{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1980 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001981case 77:
Lev Walkind9574ae2005-03-24 16:22:35 +00001982#line 881 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001983{ yyval.a_expr = yyvsp[0].a_expr; ;
1984 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001985case 78:
Lev Walkind9574ae2005-03-24 16:22:35 +00001986#line 884 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001987{
Lev Walkinf15320b2004-06-03 03:38:44 +00001988 yyval.a_expr = asn1p_expr_new(yylineno);
1989 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001990 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1991 ;
1992 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001993case 79:
Lev Walkind9574ae2005-03-24 16:22:35 +00001994#line 889 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001995{
Lev Walkinf15320b2004-06-03 03:38:44 +00001996 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001997 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1998 ;
1999 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002000case 80:
Lev Walkind9574ae2005-03-24 16:22:35 +00002001#line 896 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002002{
Lev Walkin070a52d2004-08-22 03:19:54 +00002003 yyval.a_expr = yyvsp[-1].a_expr;
2004 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00002005 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkin070a52d2004-08-22 03:19:54 +00002006 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002007 ;
2008 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002009case 81:
Lev Walkind9574ae2005-03-24 16:22:35 +00002010#line 902 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002011{
Lev Walkin070a52d2004-08-22 03:19:54 +00002012 yyval.a_expr = asn1p_expr_new(yylineno);
2013 checkmem(yyval.a_expr);
2014 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2015 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
Lev Walkin1004aa92004-09-08 00:28:11 +00002016 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2017 ;
2018 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002019case 82:
Lev Walkind9574ae2005-03-24 16:22:35 +00002020#line 909 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002021{
Lev Walkin070a52d2004-08-22 03:19:54 +00002022 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002023 ;
2024 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002025case 83:
Lev Walkind9574ae2005-03-24 16:22:35 +00002026#line 915 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002027{
Lev Walkin070a52d2004-08-22 03:19:54 +00002028 yyval.a_expr = asn1p_expr_new(yylineno);
2029 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002030 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2031 ;
2032 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002033case 84:
Lev Walkind9574ae2005-03-24 16:22:35 +00002034#line 920 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002035{
Lev Walkin070a52d2004-08-22 03:19:54 +00002036 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002037 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2038 ;
2039 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002040case 85:
Lev Walkind9574ae2005-03-24 16:22:35 +00002041#line 927 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002042{
Lev Walkin070a52d2004-08-22 03:19:54 +00002043 yyval.a_expr = yyvsp[0].a_expr;
2044 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00002045 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002046 ;
2047 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002048case 86:
Lev Walkind9574ae2005-03-24 16:22:35 +00002049#line 932 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002050{
Lev Walkin070a52d2004-08-22 03:19:54 +00002051 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002052 ;
2053 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002054case 87:
Lev Walkind9574ae2005-03-24 16:22:35 +00002055#line 938 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002056{
Lev Walkinf15320b2004-06-03 03:38:44 +00002057 yyval.a_expr = yyvsp[-2].a_expr;
2058 checkmem(yyval.a_expr);
2059 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2060 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2061 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin1004aa92004-09-08 00:28:11 +00002062 ;
2063 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002064case 88:
Lev Walkind9574ae2005-03-24 16:22:35 +00002065#line 948 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002066{ yyval.a_int = 0; ;
2067 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002068case 89:
Lev Walkind9574ae2005-03-24 16:22:35 +00002069#line 949 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002070{ yyval.a_int = 1; ;
2071 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002072case 90:
Lev Walkind9574ae2005-03-24 16:22:35 +00002073#line 953 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002074{
Lev Walkinf15320b2004-06-03 03:38:44 +00002075 yyval.a_expr = asn1p_expr_new(yylineno);
2076 checkmem(yyval.a_expr);
2077 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2078 yyval.a_expr->meta_type = AMT_OBJECT;
Lev Walkin1004aa92004-09-08 00:28:11 +00002079 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2080 ;
2081 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002082case 91:
Lev Walkind9574ae2005-03-24 16:22:35 +00002083#line 960 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002084{
Lev Walkinf15320b2004-06-03 03:38:44 +00002085 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002086 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2087 ;
2088 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002089case 92:
Lev Walkind9574ae2005-03-24 16:22:35 +00002090#line 967 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002091{
Lev Walkinf15320b2004-06-03 03:38:44 +00002092 yyval.a_expr = asn1p_expr_new(yylineno);
2093 checkmem(yyval.a_expr);
2094 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2095 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2096 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2097 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002098 ;
2099 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002100case 93:
Lev Walkind9574ae2005-03-24 16:22:35 +00002101#line 975 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002102{
Lev Walkin070a52d2004-08-22 03:19:54 +00002103 yyval.a_expr = yyvsp[-2].a_expr;
2104 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002105 yyval.a_expr->marker = yyvsp[0].a_marker;
2106 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002107 ;
2108 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002109case 94:
Lev Walkind9574ae2005-03-24 16:22:35 +00002110#line 981 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002111{
Lev Walkinf15320b2004-06-03 03:38:44 +00002112 int ret;
2113 yyval.a_expr = asn1p_expr_new(yylineno);
2114 checkmem(yyval.a_expr);
2115 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2116 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2117 checkmem(yyval.a_expr->reference);
2118 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2119 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2120 checkmem(ret == 0);
2121 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2122 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002123 yyval.a_expr->marker = yyvsp[0].a_marker;
2124 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002125 ;
2126 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002127case 95:
Lev Walkind9574ae2005-03-24 16:22:35 +00002128#line 999 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002129{ yyval.a_wsynt = 0; ;
2130 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002131case 96:
Lev Walkind9574ae2005-03-24 16:22:35 +00002132#line 1000 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002133{
Lev Walkinf15320b2004-06-03 03:38:44 +00002134 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002135 ;
2136 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002137case 97:
Lev Walkind9574ae2005-03-24 16:22:35 +00002138#line 1007 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002139{ asn1p_lexer_hack_enable_with_syntax(); ;
2140 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002141case 98:
Lev Walkind9574ae2005-03-24 16:22:35 +00002142#line 1009 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002143{
Lev Walkinf15320b2004-06-03 03:38:44 +00002144 yyval.a_wsynt = yyvsp[-1].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002145 ;
2146 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002147case 99:
Lev Walkind9574ae2005-03-24 16:22:35 +00002148#line 1015 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002149{
Lev Walkinf15320b2004-06-03 03:38:44 +00002150 yyval.a_wsynt = asn1p_wsyntx_new();
2151 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002152 ;
2153 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002154case 100:
Lev Walkind9574ae2005-03-24 16:22:35 +00002155#line 1019 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002156{
Lev Walkinf15320b2004-06-03 03:38:44 +00002157 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2158 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002159 ;
2160 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002161case 101:
Lev Walkind9574ae2005-03-24 16:22:35 +00002162#line 1026 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002163{
Lev Walkinf15320b2004-06-03 03:38:44 +00002164 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 +00002165 ;
2166 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002167case 102:
Lev Walkind9574ae2005-03-24 16:22:35 +00002168#line 1029 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002169{
Lev Walkinf15320b2004-06-03 03:38:44 +00002170 asn1p_ref_t *ref;
2171 int ret;
2172 ref = asn1p_ref_new(yylineno);
2173 checkmem(ref);
2174 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2175 checkmem(ret == 0);
2176 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002177 ;
2178 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002179case 103:
Lev Walkind9574ae2005-03-24 16:22:35 +00002180#line 1041 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00002181{
2182 yyval.a_expr = asn1p_expr_new(yylineno);
2183 checkmem(yyval.a_expr);
2184 yyval.a_expr->Identifier = strdup("...");
2185 checkmem(yyval.a_expr->Identifier);
Lev Walkin144db9b2004-10-12 23:26:53 +00002186 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2187 yyval.a_expr->meta_type = AMT_TYPE;
2188 ;
2189 break;}
2190case 104:
Lev Walkind9574ae2005-03-24 16:22:35 +00002191#line 1049 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002192{
2193 yyval.a_expr = asn1p_expr_new(yylineno);
2194 checkmem(yyval.a_expr);
2195 yyval.a_expr->Identifier = strdup("...");
2196 checkmem(yyval.a_expr->Identifier);
2197 yyval.a_expr->value = yyvsp[0].a_value;
2198 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2199 yyval.a_expr->meta_type = AMT_TYPE;
2200 ;
2201 break;}
2202case 105:
Lev Walkind9574ae2005-03-24 16:22:35 +00002203#line 1058 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00002204{
2205 yyval.a_expr = asn1p_expr_new(yylineno);
2206 checkmem(yyval.a_expr);
2207 yyval.a_expr->Identifier = strdup("...");
Lev Walkind2ea1de2004-08-20 13:25:29 +00002208 yyval.a_expr->value = yyvsp[0].a_value;
2209 checkmem(yyval.a_expr->Identifier);
2210 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2211 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002212 ;
2213 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002214case 106:
Lev Walkind9574ae2005-03-24 16:22:35 +00002215#line 1070 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002216{
Lev Walkin070a52d2004-08-22 03:19:54 +00002217 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00002218 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002219 /*
2220 * Outer constraint for SEQUENCE OF and SET OF applies
2221 * to the inner type.
2222 */
2223 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2224 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2225 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2226 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2227 } else {
2228 if(yyval.a_expr->constraints) {
Lev Walkinaf120f72004-09-14 02:36:39 +00002229 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002230 } else {
2231 yyval.a_expr->constraints = yyvsp[0].a_constr;
2232 }
2233 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002234 ;
2235 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002236case 107:
Lev Walkind9574ae2005-03-24 16:22:35 +00002237#line 1092 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002238{
Lev Walkind2ea1de2004-08-20 13:25:29 +00002239 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002240 ;
2241 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002242case 108:
Lev Walkind9574ae2005-03-24 16:22:35 +00002243#line 1095 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002244{
Lev Walkinc7d939d2005-03-20 11:12:40 +00002245 yyval.a_expr = yyvsp[-1].a_expr;
2246 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2247 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
Lev Walkinf15320b2004-06-03 03:38:44 +00002248 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002249 ;
2250 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002251case 109:
Lev Walkind9574ae2005-03-24 16:22:35 +00002252#line 1101 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002253{
Lev Walkin070a52d2004-08-22 03:19:54 +00002254 yyval.a_expr = yyvsp[-1].a_expr;
2255 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002256 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
Lev Walkin070a52d2004-08-22 03:19:54 +00002257 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002258 ;
2259 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002260case 110:
Lev Walkind9574ae2005-03-24 16:22:35 +00002261#line 1107 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002262{
Lev Walkin070a52d2004-08-22 03:19:54 +00002263 yyval.a_expr = yyvsp[-1].a_expr;
2264 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002265 yyval.a_expr->expr_type = ASN_CONSTR_SET;
Lev Walkin070a52d2004-08-22 03:19:54 +00002266 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002267 ;
2268 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002269case 111:
Lev Walkind9574ae2005-03-24 16:22:35 +00002270#line 1113 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002271{
Lev Walkinceb20e72004-09-05 10:40:41 +00002272 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002273 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002274 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002275 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2276 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002277 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002278 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002279 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2280 ;
2281 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002282case 112:
Lev Walkind9574ae2005-03-24 16:22:35 +00002283#line 1123 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002284{
Lev Walkinceb20e72004-09-05 10:40:41 +00002285 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002286 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002287 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002288 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2289 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002290 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002291 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002292 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2293 ;
2294 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002295case 113:
Lev Walkind9574ae2005-03-24 16:22:35 +00002296#line 1133 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002297{
Lev Walkinceb20e72004-09-05 10:40:41 +00002298 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002299 checkmem(yyval.a_expr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002300 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002301 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002302 ;
2303 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002304case 114:
Lev Walkind9574ae2005-03-24 16:22:35 +00002305#line 1139 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002306{
Lev Walkin070a52d2004-08-22 03:19:54 +00002307 int ret;
Lev Walkinceb20e72004-09-05 10:40:41 +00002308 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002309 checkmem(yyval.a_expr);
2310 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2311 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2312 yyvsp[0].tv_str, RLT_lowercase);
2313 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002314 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002315 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002316 ;
2317 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002318case 115:
Lev Walkind9574ae2005-03-24 16:22:35 +00002319#line 1153 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002320{
Lev Walkinf15320b2004-06-03 03:38:44 +00002321 int ret;
2322 yyval.a_expr = yyvsp[-1].a_expr;
2323 assert(yyval.a_expr->expr_type == 0);
2324 assert(yyval.a_expr->meta_type == 0);
2325 assert(yyval.a_expr->reference == 0);
2326 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2327 checkmem(yyval.a_expr->reference);
2328 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2329 checkmem(ret == 0);
2330 free(yyvsp[-3].tv_str);
2331 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2332 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002333 ;
2334 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002335case 116:
Lev Walkind9574ae2005-03-24 16:22:35 +00002336#line 1177 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002337{
Lev Walkinf15320b2004-06-03 03:38:44 +00002338 yyval.a_expr = asn1p_expr_new(yylineno);
2339 checkmem(yyval.a_expr);
2340 yyval.a_expr->reference = yyvsp[0].a_ref;
2341 yyval.a_expr->expr_type = A1TC_REFERENCE;
2342 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00002343 ;
2344 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002345case 117:
Lev Walkind9574ae2005-03-24 16:22:35 +00002346#line 1184 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002347{
Lev Walkinf15320b2004-06-03 03:38:44 +00002348 yyval.a_expr = asn1p_expr_new(yylineno);
2349 checkmem(yyval.a_expr);
2350 yyval.a_expr->reference = yyvsp[0].a_ref;
2351 yyval.a_expr->expr_type = A1TC_INSTANCE;
2352 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002353 ;
2354 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002355case 118:
Lev Walkind9574ae2005-03-24 16:22:35 +00002356#line 1199 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002357{
Lev Walkinf15320b2004-06-03 03:38:44 +00002358 int ret;
2359 yyval.a_ref = asn1p_ref_new(yylineno);
2360 checkmem(yyval.a_ref);
2361 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2362 checkmem(ret == 0);
2363 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002364 ;
2365 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002366case 119:
Lev Walkind9574ae2005-03-24 16:22:35 +00002367#line 1207 "asn1p_y.y"
Lev Walkinc7d939d2005-03-20 11:12:40 +00002368{
2369 int ret;
2370 yyval.a_ref = asn1p_ref_new(yylineno);
2371 checkmem(yyval.a_ref);
2372 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2373 checkmem(ret == 0);
2374 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2375 checkmem(ret == 0);
2376 free(yyvsp[-2].tv_str);
2377 ;
2378 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002379case 120:
Lev Walkind9574ae2005-03-24 16:22:35 +00002380#line 1217 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002381{
Lev Walkinf15320b2004-06-03 03:38:44 +00002382 int ret;
2383 yyval.a_ref = asn1p_ref_new(yylineno);
2384 checkmem(yyval.a_ref);
2385 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2386 checkmem(ret == 0);
Lev Walkin9c974182004-09-15 11:59:51 +00002387 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00002388 checkmem(ret == 0);
2389 free(yyvsp[-2].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002390 ;
2391 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002392case 121:
Lev Walkind9574ae2005-03-24 16:22:35 +00002393#line 1227 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002394{
Lev Walkinf15320b2004-06-03 03:38:44 +00002395 int ret;
2396 yyval.a_ref = asn1p_ref_new(yylineno);
2397 checkmem(yyval.a_ref);
Lev Walkin9c974182004-09-15 11:59:51 +00002398 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2399 checkmem(ret == 0);
2400 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2401 checkmem(ret == 0);
2402 free(yyvsp[-2].tv_str);
2403 ;
2404 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002405case 122:
Lev Walkind9574ae2005-03-24 16:22:35 +00002406#line 1237 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002407{
2408 int ret;
2409 yyval.a_ref = asn1p_ref_new(yylineno);
2410 checkmem(yyval.a_ref);
Lev Walkinf15320b2004-06-03 03:38:44 +00002411 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2412 free(yyvsp[0].tv_str);
2413 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002414 ;
2415 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002416case 123:
Lev Walkind9574ae2005-03-24 16:22:35 +00002417#line 1245 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002418{
Lev Walkinf15320b2004-06-03 03:38:44 +00002419 int ret;
2420 yyval.a_ref = yyvsp[0].a_ref;
2421 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2422 free(yyvsp[-2].tv_str);
2423 checkmem(ret == 0);
2424 /*
2425 * Move the last element infront.
2426 */
2427 {
2428 struct asn1p_ref_component_s tmp_comp;
2429 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2430 memmove(&yyval.a_ref->components[1],
2431 &yyval.a_ref->components[0],
2432 sizeof(yyval.a_ref->components[0])
2433 * (yyval.a_ref->comp_count - 1));
2434 yyval.a_ref->components[0] = tmp_comp;
2435 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002436 ;
2437 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002438case 124:
Lev Walkind9574ae2005-03-24 16:22:35 +00002439#line 1267 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002440{
Lev Walkinf15320b2004-06-03 03:38:44 +00002441 int ret;
2442 yyval.a_ref = asn1p_ref_new(yylineno);
2443 checkmem(yyval.a_ref);
2444 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2445 free(yyvsp[0].a_refcomp.name);
2446 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002447 ;
2448 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002449case 125:
Lev Walkind9574ae2005-03-24 16:22:35 +00002450#line 1275 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002451{
Lev Walkinf15320b2004-06-03 03:38:44 +00002452 int ret;
2453 yyval.a_ref = yyvsp[-2].a_ref;
2454 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2455 free(yyvsp[0].a_refcomp.name);
2456 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002457 ;
2458 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002459case 128:
Lev Walkind9574ae2005-03-24 16:22:35 +00002460#line 1289 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002461{
Lev Walkinf15320b2004-06-03 03:38:44 +00002462 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2463 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002464 ;
2465 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002466case 129:
Lev Walkind9574ae2005-03-24 16:22:35 +00002467#line 1294 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002468{
Lev Walkinf15320b2004-06-03 03:38:44 +00002469 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2470 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002471 ;
2472 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002473case 130:
Lev Walkind9574ae2005-03-24 16:22:35 +00002474#line 1307 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002475{
Lev Walkinf15320b2004-06-03 03:38:44 +00002476 yyval.a_expr = yyvsp[-2].a_expr;
2477 assert(yyval.a_expr->Identifier == NULL);
2478 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2479 yyval.a_expr->meta_type = AMT_VALUE;
2480 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002481 ;
2482 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002483case 131:
Lev Walkind9574ae2005-03-24 16:22:35 +00002484#line 1317 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002485{
2486 yyval.a_value = asn1p_value_fromint(0);
2487 checkmem(yyval.a_value);
2488 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2489 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2490 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2491 ;
2492 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002493case 132:
Lev Walkind9574ae2005-03-24 16:22:35 +00002494#line 1324 "asn1p_y.y"
Lev Walkincbad2512005-03-24 16:27:02 +00002495{ asn1p_lexer_hack_push_opaque_state(); ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002496 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002497case 133:
Lev Walkind9574ae2005-03-24 16:22:35 +00002498#line 1324 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002499{
Lev Walkinf15320b2004-06-03 03:38:44 +00002500 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2501 checkmem(yyval.a_value);
2502 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin1004aa92004-09-08 00:28:11 +00002503 ;
2504 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002505case 134:
Lev Walkind9574ae2005-03-24 16:22:35 +00002506#line 1329 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002507{
2508 yyval.a_value = asn1p_value_fromint(0);
2509 checkmem(yyval.a_value);
2510 yyval.a_value->type = ATV_NULL;
2511 ;
2512 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002513case 135:
Lev Walkind9574ae2005-03-24 16:22:35 +00002514#line 1334 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002515{
2516 yyval.a_value = asn1p_value_fromint(0);
2517 checkmem(yyval.a_value);
2518 yyval.a_value->type = ATV_FALSE;
2519 ;
2520 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002521case 136:
Lev Walkind9574ae2005-03-24 16:22:35 +00002522#line 1339 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002523{
2524 yyval.a_value = asn1p_value_fromint(0);
2525 checkmem(yyval.a_value);
2526 yyval.a_value->type = ATV_TRUE;
2527 ;
2528 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002529case 137:
Lev Walkind9574ae2005-03-24 16:22:35 +00002530#line 1344 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002531{
Lev Walkinf15320b2004-06-03 03:38:44 +00002532 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2533 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002534 ;
2535 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002536case 138:
Lev Walkind9574ae2005-03-24 16:22:35 +00002537#line 1348 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002538{
Lev Walkinf15320b2004-06-03 03:38:44 +00002539 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2540 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002541 ;
2542 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002543case 139:
Lev Walkind9574ae2005-03-24 16:22:35 +00002544#line 1352 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002545{
Lev Walkin1e448d32005-03-24 14:26:38 +00002546 yyval.a_value = yyval.a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002547 ;
2548 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002549case 140:
Lev Walkind9574ae2005-03-24 16:22:35 +00002550#line 1355 "asn1p_y.y"
Lev Walkinc7d939d2005-03-20 11:12:40 +00002551{
2552 yyval.a_value = yyvsp[0].a_value;
2553 ;
2554 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002555case 141:
Lev Walkind9574ae2005-03-24 16:22:35 +00002556#line 1358 "asn1p_y.y"
Lev Walkin83cac2f2004-09-22 16:03:36 +00002557{
2558 yyval.a_value = yyvsp[0].a_value;
2559 ;
2560 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002561case 142:
Lev Walkind9574ae2005-03-24 16:22:35 +00002562#line 1364 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002563{
Lev Walkinf15320b2004-06-03 03:38:44 +00002564 asn1p_ref_t *ref;
2565 int ret;
2566 ref = asn1p_ref_new(yylineno);
2567 checkmem(ref);
2568 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2569 checkmem(ret == 0);
2570 yyval.a_value = asn1p_value_fromref(ref, 0);
2571 checkmem(yyval.a_value);
2572 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002573 ;
2574 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002575case 143:
Lev Walkind9574ae2005-03-24 16:22:35 +00002576#line 1375 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002577{
Lev Walkinf15320b2004-06-03 03:38:44 +00002578 asn1p_ref_t *ref;
2579 int ret;
2580 ref = asn1p_ref_new(yylineno);
2581 checkmem(ref);
2582 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2583 checkmem(ret == 0);
2584 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2585 checkmem(ret == 0);
2586 yyval.a_value = asn1p_value_fromref(ref, 0);
2587 checkmem(yyval.a_value);
2588 free(yyvsp[-2].tv_str);
2589 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002590 ;
2591 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002592case 144:
Lev Walkind9574ae2005-03-24 16:22:35 +00002593#line 1393 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002594{
2595 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2596 checkmem(yyval.a_value);
2597 ;
2598 break;}
2599case 145:
Lev Walkind9574ae2005-03-24 16:22:35 +00002600#line 1397 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002601{
Lev Walkind9574ae2005-03-24 16:22:35 +00002602 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002603 checkmem(yyval.a_value);
2604 yyval.a_value->type = ATV_TUPLE;
2605 ;
2606 break;}
2607case 146:
Lev Walkind9574ae2005-03-24 16:22:35 +00002608#line 1402 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002609{
Lev Walkind9574ae2005-03-24 16:22:35 +00002610 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002611 checkmem(yyval.a_value);
2612 yyval.a_value->type = ATV_QUADRUPLE;
2613 ;
2614 break;}
2615case 147:
Lev Walkind9574ae2005-03-24 16:22:35 +00002616#line 1436 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002617{
Lev Walkin1893ddf2005-03-20 14:28:32 +00002618 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00002619 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2620 checkmem(yyval.tv_opaque.buf);
2621 yyval.tv_opaque.buf[0] = '{';
Lev Walkin1893ddf2005-03-20 14:28:32 +00002622 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00002623 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2624 free(yyvsp[0].tv_opaque.buf);
Lev Walkin1004aa92004-09-08 00:28:11 +00002625 ;
2626 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002627case 148:
Lev Walkind9574ae2005-03-24 16:22:35 +00002628#line 1445 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002629{
Lev Walkinf15320b2004-06-03 03:38:44 +00002630 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2631 char *p = malloc(newsize + 1);
2632 checkmem(p);
2633 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2634 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2635 p[newsize] = '\0';
2636 free(yyvsp[-1].tv_opaque.buf);
2637 free(yyvsp[0].tv_opaque.buf);
2638 yyval.tv_opaque.buf = p;
2639 yyval.tv_opaque.len = newsize;
Lev Walkin1004aa92004-09-08 00:28:11 +00002640 ;
2641 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002642case 149:
Lev Walkind9574ae2005-03-24 16:22:35 +00002643#line 1460 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002644{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2645 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002646case 150:
Lev Walkind9574ae2005-03-24 16:22:35 +00002647#line 1461 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002648{ yyval.a_type = ASN_BASIC_NULL; ;
2649 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002650case 151:
Lev Walkind9574ae2005-03-24 16:22:35 +00002651#line 1462 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002652{ yyval.a_type = ASN_BASIC_REAL; ;
2653 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002654case 152:
Lev Walkind9574ae2005-03-24 16:22:35 +00002655#line 1463 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002656{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002657 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002658case 153:
Lev Walkind9574ae2005-03-24 16:22:35 +00002659#line 1464 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002660{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002661 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002662case 154:
Lev Walkind9574ae2005-03-24 16:22:35 +00002663#line 1465 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002664{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002665 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002666case 155:
Lev Walkind9574ae2005-03-24 16:22:35 +00002667#line 1466 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002668{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002669 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002670case 156:
Lev Walkind9574ae2005-03-24 16:22:35 +00002671#line 1467 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002672{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002673 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002674case 157:
Lev Walkind9574ae2005-03-24 16:22:35 +00002675#line 1468 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002676{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002677 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002678case 158:
Lev Walkind9574ae2005-03-24 16:22:35 +00002679#line 1469 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002680{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
Lev Walkinc7d939d2005-03-20 11:12:40 +00002681 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002682case 159:
Lev Walkind9574ae2005-03-24 16:22:35 +00002683#line 1470 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002684{ yyval.a_type = ASN_BASIC_UTCTime; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002685 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002686case 160:
Lev Walkind9574ae2005-03-24 16:22:35 +00002687#line 1471 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002688{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002689 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002690case 161:
Lev Walkind9574ae2005-03-24 16:22:35 +00002691#line 1472 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002692{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002693 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002694case 162:
Lev Walkind9574ae2005-03-24 16:22:35 +00002695#line 1479 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002696{ yyval.a_type = ASN_BASIC_INTEGER; ;
2697 break;}
2698case 163:
Lev Walkind9574ae2005-03-24 16:22:35 +00002699#line 1480 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002700{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2701 break;}
2702case 164:
Lev Walkind9574ae2005-03-24 16:22:35 +00002703#line 1481 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002704{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2705 break;}
2706case 165:
Lev Walkind9574ae2005-03-24 16:22:35 +00002707#line 1485 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002708{
Lev Walkinceb20e72004-09-05 10:40:41 +00002709 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002710 checkmem(yyval.a_expr);
2711 yyval.a_expr->expr_type = yyvsp[0].a_type;
2712 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002713 ;
2714 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002715case 166:
Lev Walkind9574ae2005-03-24 16:22:35 +00002716#line 1491 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002717{
Lev Walkinf15320b2004-06-03 03:38:44 +00002718 if(yyvsp[0].a_expr) {
2719 yyval.a_expr = yyvsp[0].a_expr;
2720 } else {
Lev Walkinceb20e72004-09-05 10:40:41 +00002721 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002722 checkmem(yyval.a_expr);
2723 }
2724 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2725 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002726 ;
2727 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002728case 167:
Lev Walkind9574ae2005-03-24 16:22:35 +00002729#line 1504 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002730{ yyval.a_type = ASN_STRING_BMPString; ;
2731 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002732case 168:
Lev Walkind9574ae2005-03-24 16:22:35 +00002733#line 1505 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002734{
Lev Walkinf15320b2004-06-03 03:38:44 +00002735 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00002736 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002737 ;
2738 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002739case 169:
Lev Walkind9574ae2005-03-24 16:22:35 +00002740#line 1509 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002741{
Lev Walkin9c974182004-09-15 11:59:51 +00002742 yyval.a_type = ASN_STRING_GraphicString;
2743 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002744 ;
2745 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002746case 170:
Lev Walkind9574ae2005-03-24 16:22:35 +00002747#line 1513 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002748{ yyval.a_type = ASN_STRING_IA5String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002749 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002750case 171:
Lev Walkind9574ae2005-03-24 16:22:35 +00002751#line 1514 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002752{ yyval.a_type = ASN_STRING_ISO646String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002753 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002754case 172:
Lev Walkind9574ae2005-03-24 16:22:35 +00002755#line 1515 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002756{ yyval.a_type = ASN_STRING_NumericString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002757 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002758case 173:
Lev Walkind9574ae2005-03-24 16:22:35 +00002759#line 1516 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002760{ yyval.a_type = ASN_STRING_PrintableString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002761 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002762case 174:
Lev Walkind9574ae2005-03-24 16:22:35 +00002763#line 1517 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002764{
2765 yyval.a_type = ASN_STRING_T61String;
2766 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2767 ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002768 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002769case 175:
Lev Walkind9574ae2005-03-24 16:22:35 +00002770#line 1521 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002771{ yyval.a_type = ASN_STRING_TeletexString; ;
2772 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002773case 176:
Lev Walkind9574ae2005-03-24 16:22:35 +00002774#line 1522 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002775{ yyval.a_type = ASN_STRING_UniversalString; ;
2776 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002777case 177:
Lev Walkind9574ae2005-03-24 16:22:35 +00002778#line 1523 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002779{ yyval.a_type = ASN_STRING_UTF8String; ;
2780 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002781case 178:
Lev Walkind9574ae2005-03-24 16:22:35 +00002782#line 1524 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002783{
2784 yyval.a_type = ASN_STRING_VideotexString;
2785 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2786 ;
2787 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002788case 179:
Lev Walkind9574ae2005-03-24 16:22:35 +00002789#line 1528 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002790{ yyval.a_type = ASN_STRING_VisibleString; ;
2791 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002792case 180:
Lev Walkind9574ae2005-03-24 16:22:35 +00002793#line 1529 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002794{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2795 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002796case 186:
Lev Walkind9574ae2005-03-24 16:22:35 +00002797#line 1541 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002798{ yyval.a_constr = 0; ;
2799 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002800case 187:
Lev Walkind9574ae2005-03-24 16:22:35 +00002801#line 1542 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002802{
Lev Walkinceb20e72004-09-05 10:40:41 +00002803 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002804 ;
2805 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002806case 188:
Lev Walkind9574ae2005-03-24 16:22:35 +00002807#line 1548 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002808{
Lev Walkinceb20e72004-09-05 10:40:41 +00002809 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002810 ;
2811 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002812case 189:
Lev Walkind9574ae2005-03-24 16:22:35 +00002813#line 1551 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002814{
Lev Walkinf15320b2004-06-03 03:38:44 +00002815 /*
2816 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00002817 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00002818 */
Lev Walkind2ea1de2004-08-20 13:25:29 +00002819 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002820 ;
2821 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002822case 190:
Lev Walkind9574ae2005-03-24 16:22:35 +00002823#line 1561 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002824{
Lev Walkinf15320b2004-06-03 03:38:44 +00002825 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002826 ;
2827 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002828case 191:
Lev Walkind9574ae2005-03-24 16:22:35 +00002829#line 1564 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002830{
Lev Walkinf59d0752004-08-18 04:59:12 +00002831 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002832 ;
2833 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002834case 192:
Lev Walkind9574ae2005-03-24 16:22:35 +00002835#line 1570 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002836{
Lev Walkinf15320b2004-06-03 03:38:44 +00002837 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002838 ;
2839 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002840case 193:
Lev Walkind9574ae2005-03-24 16:22:35 +00002841#line 1573 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002842{
Lev Walkinf15320b2004-06-03 03:38:44 +00002843 asn1p_constraint_t *ct;
2844 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002845 ct->type = ACT_EL_EXT;
2846 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00002847 ;
2848 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002849case 194:
Lev Walkind9574ae2005-03-24 16:22:35 +00002850#line 1579 "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[-4].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002856 ct = yyval.a_constr;
2857 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002858 ;
2859 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002860case 195:
Lev Walkind9574ae2005-03-24 16:22:35 +00002861#line 1590 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002862{
Lev Walkinf59d0752004-08-18 04:59:12 +00002863 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002864 ;
2865 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002866case 196:
Lev Walkind9574ae2005-03-24 16:22:35 +00002867#line 1593 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002868{
2869 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2870 ;
2871 break;}
2872case 197:
Lev Walkind9574ae2005-03-24 16:22:35 +00002873#line 1596 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002874{
Lev Walkinf15320b2004-06-03 03:38:44 +00002875 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002876 ;
2877 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002878case 198:
Lev Walkind9574ae2005-03-24 16:22:35 +00002879#line 1599 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002880{
Lev Walkinf15320b2004-06-03 03:38:44 +00002881 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002882 ;
2883 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002884case 199:
Lev Walkind9574ae2005-03-24 16:22:35 +00002885#line 1602 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002886{
Lev Walkinf15320b2004-06-03 03:38:44 +00002887 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002888 ;
2889 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002890case 200:
Lev Walkind9574ae2005-03-24 16:22:35 +00002891#line 1608 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002892{
Lev Walkinf15320b2004-06-03 03:38:44 +00002893 int ret;
2894 yyval.a_constr = asn1p_constraint_new(yylineno);
2895 checkmem(yyval.a_constr);
2896 yyval.a_constr->type = yyvsp[-3].a_ctype;
2897 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2898 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002899 ;
2900 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002901case 201:
Lev Walkind9574ae2005-03-24 16:22:35 +00002902#line 1616 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002903{
Lev Walkinf59d0752004-08-18 04:59:12 +00002904 int ret;
2905 yyval.a_constr = asn1p_constraint_new(yylineno);
2906 checkmem(yyval.a_constr);
2907 yyval.a_constr->type = ACT_CA_SET;
2908 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2909 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002910 ;
2911 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002912case 202:
Lev Walkind9574ae2005-03-24 16:22:35 +00002913#line 1624 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002914{
Lev Walkinf59d0752004-08-18 04:59:12 +00002915 yyval.a_constr = asn1p_constraint_new(yylineno);
2916 checkmem(yyval.a_constr);
2917 yyval.a_constr->type = ACT_EL_VALUE;
2918 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002919 ;
2920 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002921case 203:
Lev Walkind9574ae2005-03-24 16:22:35 +00002922#line 1630 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002923{
Lev Walkin144db9b2004-10-12 23:26:53 +00002924 yyval.a_constr = asn1p_constraint_new(yylineno);
2925 checkmem(yyval.a_constr);
Lev Walkinff7dd142005-03-20 12:58:00 +00002926 yyval.a_constr->type = ACT_EL_TYPE;
2927 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin9c974182004-09-15 11:59:51 +00002928 ;
2929 break;}
Lev Walkin9c974182004-09-15 11:59:51 +00002930case 204:
Lev Walkind9574ae2005-03-24 16:22:35 +00002931#line 1636 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002932{
Lev Walkin1e448d32005-03-24 14:26:38 +00002933 yyval.a_constr = asn1p_constraint_new(yylineno);
2934 checkmem(yyval.a_constr);
2935 yyval.a_constr->type = yyvsp[-1].a_ctype;
2936 yyval.a_constr->range_start = yyvsp[-2].a_value;
2937 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkinc8092cb2005-02-18 16:34:21 +00002938 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002939 break;}
2940case 205:
Lev Walkind9574ae2005-03-24 16:22:35 +00002941#line 1643 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002942{
2943 yyval.a_constr = asn1p_constraint_new(yylineno);
2944 checkmem(yyval.a_constr);
2945 yyval.a_constr->type = yyvsp[-1].a_ctype;
2946 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2947 yyval.a_constr->range_stop = yyvsp[0].a_value;
2948 yyval.a_constr->range_start->type = ATV_MIN;
2949 ;
2950 break;}
2951case 206:
Lev Walkind9574ae2005-03-24 16:22:35 +00002952#line 1651 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002953{
2954 yyval.a_constr = asn1p_constraint_new(yylineno);
2955 checkmem(yyval.a_constr);
2956 yyval.a_constr->type = yyvsp[-1].a_ctype;
2957 yyval.a_constr->range_start = yyvsp[-2].a_value;
2958 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2959 yyval.a_constr->range_stop->type = ATV_MAX;
2960 ;
2961 break;}
2962case 207:
Lev Walkind9574ae2005-03-24 16:22:35 +00002963#line 1659 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002964{
2965 yyval.a_constr = asn1p_constraint_new(yylineno);
2966 checkmem(yyval.a_constr);
2967 yyval.a_constr->type = yyvsp[-1].a_ctype;
2968 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2969 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2970 yyval.a_constr->range_start->type = ATV_MIN;
2971 yyval.a_constr->range_stop->type = ATV_MAX;
2972 ;
2973 break;}
2974case 208:
Lev Walkind9574ae2005-03-24 16:22:35 +00002975#line 1668 "asn1p_y.y"
Lev Walkinff7dd142005-03-20 12:58:00 +00002976{
2977 yyval.a_constr = yyvsp[0].a_constr;
2978 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002979 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002980case 209:
Lev Walkind9574ae2005-03-24 16:22:35 +00002981#line 1671 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002982{
2983 yyval.a_constr = yyvsp[0].a_constr;
2984 ;
2985 break;}
2986case 210:
Lev Walkind9574ae2005-03-24 16:22:35 +00002987#line 1675 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00002988{ asn1p_lexer_hack_push_opaque_state(); ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002989 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002990case 211:
Lev Walkind9574ae2005-03-24 16:22:35 +00002991#line 1675 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00002992{
2993 yyval.a_constr = asn1p_constraint_new(yylineno);
2994 checkmem(yyval.a_constr);
2995 yyval.a_constr->type = ACT_CT_CTDBY;
2996 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2997 checkmem(yyval.a_constr->value);
2998 yyval.a_constr->value->type = ATV_UNPARSED;
2999 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003000 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003001case 212:
Lev Walkind9574ae2005-03-24 16:22:35 +00003002#line 1686 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003003{ yyval.a_ctype = ACT_EL_RANGE; ;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003004 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003005case 213:
Lev Walkind9574ae2005-03-24 16:22:35 +00003006#line 1687 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003007{ yyval.a_ctype = ACT_EL_RLRANGE; ;
Lev Walkinff7dd142005-03-20 12:58:00 +00003008 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003009case 214:
Lev Walkind9574ae2005-03-24 16:22:35 +00003010#line 1688 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003011{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3012 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003013case 215:
Lev Walkind9574ae2005-03-24 16:22:35 +00003014#line 1689 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003015{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3016 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003017case 216:
Lev Walkind9574ae2005-03-24 16:22:35 +00003018#line 1693 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003019{
Lev Walkinceb20e72004-09-05 10:40:41 +00003020 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003021 ;
3022 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003023case 217:
Lev Walkind9574ae2005-03-24 16:22:35 +00003024#line 1696 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003025{
Lev Walkinceb20e72004-09-05 10:40:41 +00003026 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin1004aa92004-09-08 00:28:11 +00003027 ;
3028 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003029case 218:
Lev Walkind9574ae2005-03-24 16:22:35 +00003030#line 1702 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003031{
3032 yyval.a_value = asn1p_value_fromint(0);
3033 checkmem(yyval.a_value);
3034 yyval.a_value->type = ATV_FALSE;
3035 ;
3036 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003037case 219:
Lev Walkind9574ae2005-03-24 16:22:35 +00003038#line 1707 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003039{
3040 yyval.a_value = asn1p_value_fromint(1);
3041 checkmem(yyval.a_value);
3042 yyval.a_value->type = ATV_TRUE;
3043 ;
3044 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003045case 220:
Lev Walkind9574ae2005-03-24 16:22:35 +00003046#line 1712 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003047{
Lev Walkinf15320b2004-06-03 03:38:44 +00003048 yyval.a_value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003049 ;
3050 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003051case 221:
Lev Walkind9574ae2005-03-24 16:22:35 +00003052#line 1715 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003053{
Lev Walkin1e448d32005-03-24 14:26:38 +00003054 yyval.a_value = yyvsp[0].a_value;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003055 ;
3056 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003057case 222:
Lev Walkind9574ae2005-03-24 16:22:35 +00003058#line 1718 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003059{
Lev Walkinf15320b2004-06-03 03:38:44 +00003060 asn1p_ref_t *ref;
3061 int ret;
3062 ref = asn1p_ref_new(yylineno);
3063 checkmem(ref);
3064 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3065 checkmem(ret == 0);
3066 yyval.a_value = asn1p_value_fromref(ref, 0);
3067 checkmem(yyval.a_value);
3068 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003069 ;
3070 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003071case 223:
Lev Walkind9574ae2005-03-24 16:22:35 +00003072#line 1732 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003073{
Lev Walkinc8092cb2005-02-18 16:34:21 +00003074 asn1p_ref_t *ref;
3075 int ret;
3076 ref = asn1p_ref_new(yylineno);
3077 checkmem(ref);
3078 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3079 checkmem(ret == 0);
3080 yyval.a_value = asn1p_value_fromref(ref, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003081 checkmem(yyval.a_value);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003082 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003083 ;
3084 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003085case 224:
Lev Walkind9574ae2005-03-24 16:22:35 +00003086#line 1746 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003087{
Lev Walkine596bf02005-03-28 15:01:27 +00003088 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003089 ;
3090 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003091case 225:
Lev Walkine596bf02005-03-28 15:01:27 +00003092#line 1749 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003093{
Lev Walkine596bf02005-03-28 15:01:27 +00003094 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003095 ;
3096 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003097case 226:
Lev Walkind9574ae2005-03-24 16:22:35 +00003098#line 1755 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003099{
Lev Walkine596bf02005-03-28 15:01:27 +00003100 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003101 ;
3102 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003103case 227:
Lev Walkine596bf02005-03-28 15:01:27 +00003104#line 1758 "asn1p_y.y"
3105{
3106 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3107 ;
3108 break;}
3109case 228:
3110#line 1764 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003111{
Lev Walkinf15320b2004-06-03 03:38:44 +00003112 yyval.a_constr = asn1p_constraint_new(yylineno);
3113 checkmem(yyval.a_constr);
3114 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkine596bf02005-03-28 15:01:27 +00003115 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003116 ;
3117 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003118case 229:
3119#line 1770 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003120{
Lev Walkinf15320b2004-06-03 03:38:44 +00003121 yyval.a_constr = asn1p_constraint_new(yylineno);
3122 checkmem(yyval.a_constr);
3123 yyval.a_constr->type = ACT_EL_VALUE;
3124 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3125 yyval.a_constr->presence = yyvsp[0].a_pres;
Lev Walkine596bf02005-03-28 15:01:27 +00003126 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003127 ;
3128 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003129case 230:
3130#line 1784 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003131{ yyval.a_pres = ACPRES_DEFAULT; ;
3132 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003133case 231:
3134#line 1785 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003135{ yyval.a_pres = yyvsp[0].a_pres; ;
3136 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003137case 232:
3138#line 1789 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003139{
Lev Walkinf15320b2004-06-03 03:38:44 +00003140 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003141 ;
3142 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003143case 233:
3144#line 1792 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003145{
Lev Walkinf15320b2004-06-03 03:38:44 +00003146 yyval.a_pres = ACPRES_ABSENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003147 ;
3148 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003149case 234:
3150#line 1795 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003151{
Lev Walkinf15320b2004-06-03 03:38:44 +00003152 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkin1004aa92004-09-08 00:28:11 +00003153 ;
3154 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003155case 235:
Lev Walkine596bf02005-03-28 15:01:27 +00003156#line 1801 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003157{
3158 yyval.a_constr = yyvsp[0].a_constr;
3159 ;
3160 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003161case 236:
Lev Walkine596bf02005-03-28 15:01:27 +00003162#line 1804 "asn1p_y.y"
3163{
3164 yyval.a_constr = yyvsp[0].a_constr;
3165 ;
3166 break;}
3167case 237:
3168#line 1813 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003169{
Lev Walkinf15320b2004-06-03 03:38:44 +00003170 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3171 asn1p_constraint_t *ct;
3172 int ret;
3173 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3174 checkmem(ret == 0);
3175 ct = asn1p_constraint_new(yylineno);
3176 checkmem(yyval.a_constr);
3177 ct->type = ACT_EL_VALUE;
3178 ct->value = asn1p_value_fromref(ref, 0);
3179 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003180 ;
3181 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003182case 238:
3183#line 1828 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003184{
Lev Walkinf15320b2004-06-03 03:38:44 +00003185 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003186 ;
3187 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003188case 239:
3189#line 1834 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003190{
Lev Walkinf15320b2004-06-03 03:38:44 +00003191 yyval.a_constr = asn1p_constraint_new(yylineno);
3192 checkmem(yyval.a_constr);
3193 yyval.a_constr->type = ACT_EL_VALUE;
3194 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003195 ;
3196 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003197case 240:
3198#line 1840 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003199{
Lev Walkinf15320b2004-06-03 03:38:44 +00003200 asn1p_constraint_t *ct;
3201 ct = asn1p_constraint_new(yylineno);
3202 checkmem(ct);
3203 ct->type = ACT_EL_VALUE;
3204 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3205 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00003206 ;
3207 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003208case 241:
3209#line 1854 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003210{
Lev Walkinf15320b2004-06-03 03:38:44 +00003211 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3212 int ret;
3213 *p = '@';
3214 strcpy(p + 1, yyvsp[0].tv_str);
3215 yyval.a_ref = asn1p_ref_new(yylineno);
3216 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3217 checkmem(ret == 0);
3218 free(p);
3219 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003220 ;
3221 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003222case 242:
3223#line 1865 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003224{
Lev Walkinf15320b2004-06-03 03:38:44 +00003225 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3226 int ret;
3227 p[0] = '@';
3228 p[1] = '.';
3229 strcpy(p + 2, yyvsp[0].tv_str);
3230 yyval.a_ref = asn1p_ref_new(yylineno);
3231 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3232 checkmem(ret == 0);
3233 free(p);
3234 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003235 ;
3236 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003237case 243:
3238#line 1881 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003239{
Lev Walkinf15320b2004-06-03 03:38:44 +00003240 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003241 ;
3242 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003243case 244:
3244#line 1884 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003245{
Lev Walkinf15320b2004-06-03 03:38:44 +00003246 int l1 = strlen(yyvsp[-2].tv_str);
3247 int l3 = strlen(yyvsp[0].tv_str);
3248 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3249 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3250 yyval.tv_str[l1] = '.';
3251 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3252 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin1004aa92004-09-08 00:28:11 +00003253 ;
3254 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003255case 245:
3256#line 1902 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003257{
Lev Walkin9c974182004-09-15 11:59:51 +00003258 yyval.a_marker.flags = EM_NOMARK;
3259 yyval.a_marker.default_value = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00003260 ;
3261 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003262case 246:
3263#line 1906 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003264{ yyval.a_marker = yyvsp[0].a_marker; ;
Lev Walkinec208e62004-09-14 02:44:07 +00003265 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003266case 247:
3267#line 1910 "asn1p_y.y"
Lev Walkinec208e62004-09-14 02:44:07 +00003268{
Lev Walkin9c974182004-09-15 11:59:51 +00003269 yyval.a_marker.flags = EM_OPTIONAL;
3270 yyval.a_marker.default_value = 0;
Lev Walkinec208e62004-09-14 02:44:07 +00003271 ;
3272 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003273case 248:
3274#line 1914 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003275{
3276 yyval.a_marker.flags = EM_DEFAULT;
3277 yyval.a_marker.default_value = yyvsp[0].a_value;
3278 ;
3279 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003280case 249:
3281#line 1937 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003282{
Lev Walkinceb20e72004-09-05 10:40:41 +00003283 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003284 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003285 ;
3286 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003287case 250:
Lev Walkine596bf02005-03-28 15:01:27 +00003288#line 1941 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003289{
Lev Walkine596bf02005-03-28 15:01:27 +00003290 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003291 ;
3292 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003293case 251:
Lev Walkind9574ae2005-03-24 16:22:35 +00003294#line 1947 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003295{
Lev Walkine596bf02005-03-28 15:01:27 +00003296 yyval.a_expr = asn1p_expr_new(yylineno);
3297 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003298 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3299 ;
3300 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003301case 252:
Lev Walkine596bf02005-03-28 15:01:27 +00003302#line 1952 "asn1p_y.y"
3303{
3304 yyval.a_expr = yyvsp[-2].a_expr;
3305 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3306 ;
3307 break;}
3308case 253:
3309#line 1959 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003310{
Lev Walkinceb20e72004-09-05 10:40:41 +00003311 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003312 checkmem(yyval.a_expr);
3313 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3314 yyval.a_expr->meta_type = AMT_VALUE;
3315 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003316 ;
3317 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003318case 254:
Lev Walkine596bf02005-03-28 15:01:27 +00003319#line 1966 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003320{
Lev Walkinceb20e72004-09-05 10:40:41 +00003321 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003322 checkmem(yyval.a_expr);
3323 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3324 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1893ddf2005-03-20 14:28:32 +00003325 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3326 yyval.a_expr->value = yyvsp[-1].a_value;
3327 ;
3328 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003329case 255:
Lev Walkine596bf02005-03-28 15:01:27 +00003330#line 1974 "asn1p_y.y"
3331{
3332 yyval.a_expr = asn1p_expr_new(yylineno);
3333 checkmem(yyval.a_expr);
3334 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3335 yyval.a_expr->meta_type = AMT_VALUE;
3336 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3337 yyval.a_expr->value = yyvsp[-1].a_value;
3338 ;
3339 break;}
3340case 256:
3341#line 1982 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003342{
3343 yyval.a_expr = asn1p_expr_new(yylineno);
3344 checkmem(yyval.a_expr);
3345 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3346 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkinf15320b2004-06-03 03:38:44 +00003347 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003348 ;
3349 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003350case 257:
3351#line 1989 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003352{
Lev Walkinceb20e72004-09-05 10:40:41 +00003353 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003354 checkmem(yyval.a_expr);
3355 yyval.a_expr->Identifier = strdup("...");
3356 checkmem(yyval.a_expr->Identifier);
3357 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3358 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003359 ;
3360 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003361case 258:
Lev Walkine596bf02005-03-28 15:01:27 +00003362#line 2000 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003363{
3364 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3365 checkmem(yyval.a_value);
3366 ;
Lev Walkinff7dd142005-03-20 12:58:00 +00003367 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003368case 259:
Lev Walkine596bf02005-03-28 15:01:27 +00003369#line 2004 "asn1p_y.y"
3370{
3371 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3372 checkmem(yyval.a_value);
3373 ;
Lev Walkin1893ddf2005-03-20 14:28:32 +00003374 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003375case 260:
Lev Walkine596bf02005-03-28 15:01:27 +00003376#line 2035 "asn1p_y.y"
3377{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
Lev Walkin1893ddf2005-03-20 14:28:32 +00003378 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003379case 261:
Lev Walkine596bf02005-03-28 15:01:27 +00003380#line 2036 "asn1p_y.y"
3381{ yyval.a_tag = yyvsp[0].a_tag; ;
3382 break;}
3383case 262:
3384#line 2040 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003385{
Lev Walkinc603f102005-01-23 09:51:44 +00003386 yyval.a_tag = yyvsp[-1].a_tag;
3387 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin1004aa92004-09-08 00:28:11 +00003388 ;
3389 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003390case 263:
3391#line 2047 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003392{
Lev Walkinc603f102005-01-23 09:51:44 +00003393 yyval.a_tag = yyvsp[-2].a_tag;
3394 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00003395 ;
3396 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003397case 264:
3398#line 2053 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003399{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00003400 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003401case 265:
3402#line 2054 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003403{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
Lev Walkin83cac2f2004-09-22 16:03:36 +00003404 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003405case 266:
3406#line 2055 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003407{ yyval.a_tag.tag_class = TC_APPLICATION; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003408 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003409case 267:
3410#line 2056 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003411{ yyval.a_tag.tag_class = TC_PRIVATE; ;
3412 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003413case 268:
3414#line 2060 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003415{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3416 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003417case 269:
3418#line 2061 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003419{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003420 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003421case 270:
3422#line 2062 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003423{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003424 break;}
Lev Walkin1893ddf2005-03-20 14:28:32 +00003425case 271:
Lev Walkine596bf02005-03-28 15:01:27 +00003426#line 2066 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00003427{
3428 checkmem(yyvsp[0].tv_str);
3429 yyval.tv_str = yyvsp[0].tv_str;
3430 ;
3431 break;}
3432case 272:
Lev Walkine596bf02005-03-28 15:01:27 +00003433#line 2070 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00003434{
3435 checkmem(yyvsp[0].tv_str);
3436 yyval.tv_str = yyvsp[0].tv_str;
3437 ;
3438 break;}
3439case 273:
Lev Walkine596bf02005-03-28 15:01:27 +00003440#line 2078 "asn1p_y.y"
3441{
3442 checkmem(yyvsp[0].tv_str);
3443 yyval.tv_str = yyvsp[0].tv_str;
3444 ;
Lev Walkin1e448d32005-03-24 14:26:38 +00003445 break;}
3446case 274:
Lev Walkine596bf02005-03-28 15:01:27 +00003447#line 2085 "asn1p_y.y"
3448{ yyval.tv_str = 0; ;
3449 break;}
3450case 275:
3451#line 2086 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00003452{
3453 yyval.tv_str = yyvsp[0].tv_str;
3454 ;
3455 break;}
Lev Walkine596bf02005-03-28 15:01:27 +00003456case 276:
3457#line 2091 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003458{
Lev Walkinceb20e72004-09-05 10:40:41 +00003459 checkmem(yyvsp[0].tv_str);
3460 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003461 ;
3462 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00003463}
3464 /* the action file gets copied in in place of this dollarsign */
3465#line 543 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00003466
3467 yyvsp -= yylen;
3468 yyssp -= yylen;
Lev Walkin1004aa92004-09-08 00:28:11 +00003469#ifdef YYLSP_NEEDED
3470 yylsp -= yylen;
3471#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003472
Lev Walkin1004aa92004-09-08 00:28:11 +00003473#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00003474 if (yydebug)
3475 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003476 short *ssp1 = yyss - 1;
3477 fprintf (stderr, "state stack now");
3478 while (ssp1 != yyssp)
3479 fprintf (stderr, " %d", *++ssp1);
3480 fprintf (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003481 }
3482#endif
3483
3484 *++yyvsp = yyval;
3485
Lev Walkin1004aa92004-09-08 00:28:11 +00003486#ifdef YYLSP_NEEDED
3487 yylsp++;
3488 if (yylen == 0)
3489 {
3490 yylsp->first_line = yylloc.first_line;
3491 yylsp->first_column = yylloc.first_column;
3492 yylsp->last_line = (yylsp-1)->last_line;
3493 yylsp->last_column = (yylsp-1)->last_column;
3494 yylsp->text = 0;
3495 }
3496 else
3497 {
3498 yylsp->last_line = (yylsp+yylen-1)->last_line;
3499 yylsp->last_column = (yylsp+yylen-1)->last_column;
3500 }
3501#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003502
Lev Walkin1004aa92004-09-08 00:28:11 +00003503 /* Now "shift" the result of the reduction.
3504 Determine what state that goes to,
3505 based on the state we popped back to
3506 and the rule number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003507
3508 yyn = yyr1[yyn];
3509
Lev Walkin1004aa92004-09-08 00:28:11 +00003510 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3511 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003512 yystate = yytable[yystate];
3513 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003514 yystate = yydefgoto[yyn - YYNTBASE];
Lev Walkinf15320b2004-06-03 03:38:44 +00003515
3516 goto yynewstate;
3517
Lev Walkin1004aa92004-09-08 00:28:11 +00003518yyerrlab: /* here on detecting error */
Lev Walkinf15320b2004-06-03 03:38:44 +00003519
Lev Walkin1004aa92004-09-08 00:28:11 +00003520 if (! yyerrstatus)
3521 /* If not already recovering from an error, report this error. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003522 {
3523 ++yynerrs;
Lev Walkin1004aa92004-09-08 00:28:11 +00003524
3525#ifdef YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003526 yyn = yypact[yystate];
3527
Lev Walkin1004aa92004-09-08 00:28:11 +00003528 if (yyn > YYFLAG && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003529 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003530 int size = 0;
3531 char *msg;
3532 int x, count;
Lev Walkinf15320b2004-06-03 03:38:44 +00003533
Lev Walkin1004aa92004-09-08 00:28:11 +00003534 count = 0;
3535 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3536 for (x = (yyn < 0 ? -yyn : 0);
3537 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3538 if (yycheck[x + yyn] == x)
3539 size += strlen(yytname[x]) + 15, count++;
3540 msg = (char *) malloc(size + 15);
3541 if (msg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003542 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003543 strcpy(msg, "parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003544
Lev Walkin1004aa92004-09-08 00:28:11 +00003545 if (count < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003546 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003547 count = 0;
3548 for (x = (yyn < 0 ? -yyn : 0);
3549 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3550 if (yycheck[x + yyn] == x)
Lev Walkinf15320b2004-06-03 03:38:44 +00003551 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003552 strcat(msg, count == 0 ? ", expecting `" : " or `");
3553 strcat(msg, yytname[x]);
3554 strcat(msg, "'");
3555 count++;
Lev Walkinf15320b2004-06-03 03:38:44 +00003556 }
3557 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003558 yyerror(msg);
3559 free(msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003560 }
3561 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003562 yyerror ("parse error; also virtual memory exceeded");
Lev Walkinf15320b2004-06-03 03:38:44 +00003563 }
3564 else
3565#endif /* YYERROR_VERBOSE */
Lev Walkin1004aa92004-09-08 00:28:11 +00003566 yyerror("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003567 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003568
Lev Walkinf15320b2004-06-03 03:38:44 +00003569 goto yyerrlab1;
Lev Walkin1004aa92004-09-08 00:28:11 +00003570yyerrlab1: /* here on error raised explicitly by an action */
Lev Walkinf15320b2004-06-03 03:38:44 +00003571
3572 if (yyerrstatus == 3)
3573 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003574 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003575
Lev Walkin1004aa92004-09-08 00:28:11 +00003576 /* return failure if at end of input */
Lev Walkinf15320b2004-06-03 03:38:44 +00003577 if (yychar == YYEOF)
Lev Walkin1004aa92004-09-08 00:28:11 +00003578 YYABORT;
Lev Walkinf15320b2004-06-03 03:38:44 +00003579
Lev Walkin1004aa92004-09-08 00:28:11 +00003580#if YYDEBUG != 0
3581 if (yydebug)
3582 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3583#endif
3584
Lev Walkinf15320b2004-06-03 03:38:44 +00003585 yychar = YYEMPTY;
3586 }
3587
Lev Walkin1004aa92004-09-08 00:28:11 +00003588 /* Else will try to reuse lookahead token
3589 after shifting the error token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003590
Lev Walkin1004aa92004-09-08 00:28:11 +00003591 yyerrstatus = 3; /* Each real token shifted decrements this */
Lev Walkinf15320b2004-06-03 03:38:44 +00003592
Lev Walkin1004aa92004-09-08 00:28:11 +00003593 goto yyerrhandle;
Lev Walkin459ab022004-09-07 10:39:09 +00003594
Lev Walkin1004aa92004-09-08 00:28:11 +00003595yyerrdefault: /* current state does not do anything special for the error token. */
Lev Walkin459ab022004-09-07 10:39:09 +00003596
Lev Walkin1004aa92004-09-08 00:28:11 +00003597#if 0
3598 /* This is wrong; only states that explicitly want error tokens
3599 should shift them. */
3600 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3601 if (yyn) goto yydefault;
Lev Walkinceb20e72004-09-05 10:40:41 +00003602#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003603
3604yyerrpop: /* pop the current state because it cannot handle the error token */
3605
3606 if (yyssp == yyss) YYABORT;
3607 yyvsp--;
3608 yystate = *--yyssp;
3609#ifdef YYLSP_NEEDED
3610 yylsp--;
3611#endif
3612
3613#if YYDEBUG != 0
3614 if (yydebug)
3615 {
3616 short *ssp1 = yyss - 1;
3617 fprintf (stderr, "Error: state stack now");
3618 while (ssp1 != yyssp)
3619 fprintf (stderr, " %d", *++ssp1);
3620 fprintf (stderr, "\n");
Lev Walkinceb20e72004-09-05 10:40:41 +00003621 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003622#endif
3623
3624yyerrhandle:
3625
3626 yyn = yypact[yystate];
3627 if (yyn == YYFLAG)
3628 goto yyerrdefault;
3629
3630 yyn += YYTERROR;
3631 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3632 goto yyerrdefault;
3633
3634 yyn = yytable[yyn];
3635 if (yyn < 0)
3636 {
3637 if (yyn == YYFLAG)
3638 goto yyerrpop;
3639 yyn = -yyn;
3640 goto yyreduce;
3641 }
3642 else if (yyn == 0)
3643 goto yyerrpop;
Lev Walkinf15320b2004-06-03 03:38:44 +00003644
3645 if (yyn == YYFINAL)
3646 YYACCEPT;
3647
Lev Walkin1004aa92004-09-08 00:28:11 +00003648#if YYDEBUG != 0
3649 if (yydebug)
3650 fprintf(stderr, "Shifting error token, ");
3651#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003652
3653 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00003654#ifdef YYLSP_NEEDED
3655 *++yylsp = yylloc;
3656#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003657
3658 yystate = yyn;
3659 goto yynewstate;
3660
Lev Walkin1004aa92004-09-08 00:28:11 +00003661 yyacceptlab:
3662 /* YYACCEPT comes here. */
3663 if (yyfree_stacks)
3664 {
3665 free (yyss);
3666 free (yyvs);
3667#ifdef YYLSP_NEEDED
3668 free (yyls);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003669#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003670 }
3671 return 0;
Lev Walkin459ab022004-09-07 10:39:09 +00003672
Lev Walkin1004aa92004-09-08 00:28:11 +00003673 yyabortlab:
3674 /* YYABORT comes here. */
3675 if (yyfree_stacks)
3676 {
3677 free (yyss);
3678 free (yyvs);
3679#ifdef YYLSP_NEEDED
3680 free (yyls);
Lev Walkin459ab022004-09-07 10:39:09 +00003681#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003682 }
3683 return 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003684}
Lev Walkine596bf02005-03-28 15:01:27 +00003685#line 2097 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00003686
3687
3688
3689/*
3690 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3691 */
3692static asn1p_value_t *
3693_convert_bitstring2binary(char *str, int base) {
3694 asn1p_value_t *val;
3695 int slen;
3696 int memlen;
3697 int baselen;
3698 int bits;
3699 uint8_t *binary_vector;
3700 uint8_t *bv_ptr;
3701 uint8_t cur_val;
3702
3703 assert(str);
3704 assert(str[0] == '\'');
3705
3706 switch(base) {
3707 case 'B':
3708 baselen = 1;
3709 break;
3710 case 'H':
3711 baselen = 4;
3712 break;
3713 default:
3714 assert(base == 'B' || base == 'H');
3715 errno = EINVAL;
3716 return NULL;
3717 }
3718
3719 slen = strlen(str);
3720 assert(str[slen - 1] == base);
3721 assert(str[slen - 2] == '\'');
3722
3723 memlen = slen / (8 / baselen); /* Conservative estimate */
3724
3725 bv_ptr = binary_vector = malloc(memlen + 1);
3726 if(bv_ptr == NULL)
3727 /* ENOMEM */
3728 return NULL;
3729
3730 cur_val = 0;
3731 bits = 0;
3732 while(*(++str) != '\'') {
3733 switch(baselen) {
3734 case 1:
3735 switch(*str) {
3736 case '1':
3737 cur_val |= 1 << (7 - (bits % 8));
3738 case '0':
3739 break;
3740 default:
3741 assert(!"_y UNREACH1");
3742 case ' ': case '\r': case '\n':
3743 continue;
3744 }
3745 break;
3746 case 4:
3747 switch(*str) {
3748 case '0': case '1': case '2': case '3': case '4':
3749 case '5': case '6': case '7': case '8': case '9':
3750 cur_val |= (*str - '0') << (4 - (bits % 8));
3751 break;
3752 case 'A': case 'B': case 'C':
3753 case 'D': case 'E': case 'F':
3754 cur_val |= ((*str - 'A') + 10)
3755 << (4 - (bits % 8));
3756 break;
3757 default:
3758 assert(!"_y UNREACH2");
3759 case ' ': case '\r': case '\n':
3760 continue;
3761 }
3762 break;
3763 }
3764
3765 bits += baselen;
3766 if((bits % 8) == 0) {
3767 *bv_ptr++ = cur_val;
3768 cur_val = 0;
3769 }
3770 }
3771
3772 *bv_ptr = cur_val;
3773 assert((bv_ptr - binary_vector) <= memlen);
3774
3775 val = asn1p_value_frombits(binary_vector, bits, 0);
3776 if(val == NULL) {
3777 free(binary_vector);
3778 }
3779
3780 return val;
3781}
3782
3783extern char *asn1p_text;
3784
3785int
3786yyerror(const char *msg) {
3787 fprintf(stderr,
3788 "ASN.1 grammar parse error "
3789 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00003790 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003791 return -1;
3792}
3793
3794