blob: a5cc4a8aced94fdd7575b67971056b02e6b5890b [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 Walkind9574ae2005-03-24 16:22:35 +0000209#define YYFINAL 429
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,
278 631, 633, 635, 637, 643, 645, 649, 651, 655, 656,
279 658, 660, 662, 664, 666, 668, 672, 677, 679, 683,
280 686, 690, 692, 696, 697, 699, 701, 704, 707, 711,
281 713, 717, 719, 724, 729, 731, 733, 735, 737, 738,
282 740, 743, 748, 749, 751, 753, 755, 756, 758, 760,
283 762, 764, 766, 767, 769
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,
350 176, 0, 221, 0, 218, 0, 97, 32, 105, 197,
351 106, 0, 198, 0, 197, 110, 198, 0, 104, 0,
352 221, 185, 199, 0, 0, 200, 0, 75, 0, 17,
353 0, 71, 0, 202, 0, 203, 0, 105, 218, 106,
354 0, 202, 105, 204, 106, 0, 205, 0, 204, 110,
355 205, 0, 115, 206, 0, 115, 113, 206, 0, 221,
356 0, 206, 113, 221, 0, 0, 208, 0, 71, 0,
357 35, 173, 0, 105, 106, 0, 105, 210, 106, 0,
358 211, 0, 210, 110, 211, 0, 221, 0, 221, 107,
359 212, 108, 0, 221, 107, 175, 108, 0, 212, 0,
360 104, 0, 9, 0, 12, 0, 0, 214, 0, 215,
361 217, 0, 116, 216, 9, 117, 0, 0, 91, 0,
362 21, 0, 77, 0, 0, 54, 0, 43, 0, 13,
363 0, 14, 0, 14, 0, 0, 221, 0, 8, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000364};
Lev Walkinf15320b2004-06-03 03:38:44 +0000365
366#endif
367
Lev Walkin1004aa92004-09-08 00:28:11 +0000368#if YYDEBUG != 0
369static const short yyrline[] = { 0,
Lev Walkind9574ae2005-03-24 16:22:35 +0000370 305, 311, 317, 333, 358, 360, 363, 367, 372, 379,
371 387, 392, 396, 405, 407, 415, 419, 427, 431, 434,
372 437, 441, 461, 463, 471, 475, 507, 511, 520, 527,
373 540, 547, 549, 561, 574, 581, 586, 592, 598, 607,
374 613, 619, 626, 632, 640, 644, 647, 654, 660, 666,
375 673, 679, 688, 698, 706, 714, 716, 726, 729, 733,
376 736, 748, 760, 766, 782, 791, 801, 811, 816, 823,
377 830, 840, 846, 852, 856, 879, 881, 883, 889, 895,
378 902, 909, 914, 920, 926, 932, 937, 947, 949, 952,
379 960, 966, 975, 981, 998, 1000, 1005, 1009, 1014, 1019,
380 1025, 1029, 1040, 1049, 1058, 1069, 1091, 1095, 1101, 1107,
381 1113, 1123, 1133, 1139, 1153, 1177, 1184, 1198, 1207, 1217,
382 1227, 1237, 1245, 1266, 1275, 1284, 1285, 1287, 1294, 1306,
383 1316, 1324, 1324, 1329, 1334, 1339, 1344, 1348, 1352, 1355,
384 1358, 1363, 1375, 1392, 1397, 1402, 1435, 1445, 1459, 1461,
385 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471,
386 1472, 1478, 1480, 1481, 1484, 1491, 1503, 1505, 1509, 1513,
387 1514, 1515, 1516, 1517, 1521, 1522, 1523, 1524, 1528, 1529,
388 1536, 1536, 1537, 1537, 1538, 1540, 1542, 1547, 1551, 1560,
389 1564, 1569, 1573, 1579, 1589, 1593, 1596, 1599, 1602, 1607,
390 1616, 1624, 1630, 1636, 1643, 1651, 1659, 1668, 1671, 1674,
391 1675, 1685, 1687, 1688, 1689, 1692, 1696, 1701, 1707, 1712,
392 1715, 1718, 1731, 1745, 1751, 1755, 1760, 1766, 1778, 1780,
393 1783, 1787, 1790, 1795, 1799, 1807, 1822, 1828, 1835, 1848,
394 1860, 1875, 1879, 1896, 1901, 1904, 1909, 1931, 1936, 1941,
395 1947, 1953, 1961, 1969, 1977, 1984, 1994, 1999, 2029, 2031,
396 2034, 2041, 2047, 2049, 2050, 2051, 2054, 2056, 2057, 2060,
397 2065, 2072, 2079, 2081, 2085
Lev Walkin1004aa92004-09-08 00:28:11 +0000398};
399#endif
400
401
402#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
403
404static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
405"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
Lev Walkind9574ae2005-03-24 16:22:35 +0000406"TOK_tuple","TOK_quadruple","TOK_number_negative","TOK_typereference","TOK_capitalreference",
407"TOK_typefieldreference","TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX",
408"TOK_ALL","TOK_ANY","TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT",
409"TOK_BMPString","TOK_BOOLEAN","TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS",
410"TOK_COMPONENT","TOK_COMPONENTS","TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT",
411"TOK_DEFINITIONS","TOK_DEFINED","TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL",
412"TOK_END","TOK_ENUMERATED","TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY",
413"TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString",
414"TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED",
415"TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INSTRUCTIONS","TOK_INTEGER",
416"TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL","TOK_NumericString",
417"TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET","TOK_OF","TOK_OPTIONAL","TOK_PATTERN",
418"TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString","TOK_PRIVATE",
419"TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE","TOK_STRING",
420"TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE","TOK_TYPE_IDENTIFIER",
421"TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime","TOK_UTF8String",
422"TOK_VideotexString","TOK_VisibleString","TOK_WITH","TOK_EXCEPT","'^'","TOK_INTERSECTION",
423"'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots","'{'","'}'","'('","')'","';'",
424"','","':'","'!'","'.'","'<'","'@'","'['","']'","ParsedGrammar","ModuleList",
425"ModuleSpecification","optObjectIdentifier","ObjectIdentifier","ObjectIdentifierBody",
426"ObjectIdentifierElement","optModuleSpecificationFlags","ModuleSpecificationFlags",
427"ModuleSpecificationFlag","optModuleSpecificationBody","ModuleSpecificationBody",
428"ModuleSpecificationElement","@1","ImportsDefinition","ImportsBundleSet","ImportsBundle",
429"ImportsList","ImportsElement","ExportsDefinition","ExportsBody","ExportsElement",
430"ValueSetDefinition","DefinedTypeRef","optValueSetBody","ValueSetBody","ValueSetElement",
431"DataTypeReference","ParameterArgumentList","ParameterArgumentName","ActualParameterList",
432"ActualParameter","optComponentTypeLists","ComponentTypeLists","ComponentType",
433"AlternativeTypeLists","AlternativeType","ClassDeclaration","optUnique","ClassFieldList",
434"ClassField","optWithSyntax","WithSyntax","@2","WithSyntaxFormat","WithSyntaxFormatToken",
435"ExtensionAndException","Type","TypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList",
Lev Walkin144db9b2004-10-12 23:26:53 +0000436"ComplexTypeReferenceElement","ClassFieldIdentifier","ClassFieldName","ValueDefinition",
Lev Walkin1e448d32005-03-24 14:26:38 +0000437"Value","@3","DefinedValue","RestrictedCharacterStringValue","Opaque","BasicTypeId",
438"BasicTypeId_UniverationCompatible","BasicType","BasicString","Union","Intersection",
439"Except","optConstraints","Constraints","SetOfConstraints","ElementSetSpecs",
440"ElementSetSpec","ConstraintSubtypeElement","@4","ConstraintRangeSpec","ConstraintSpec",
441"SingleValue","ContainedSubtype","WithComponents","WithComponentsList","WithComponentsElement",
442"optPresenceConstraint","PresenceConstraint","TableConstraint","SimpleTableConstraint",
443"ComponentRelationConstraint","AtNotationList","AtNotationElement","ComponentIdList",
444"optMarker","Marker","UniverationDefinition","UniverationList","UniverationElement",
445"SignedNumber","optTag","Tag","TagTypeValue","TagClass","TagPlicit","TypeRefName",
446"ObjectClassReference","optIdentifier","Identifier", NULL
Lev Walkin1004aa92004-09-08 00:28:11 +0000447};
448#endif
449
450static const short yyr1[] = { 0,
Lev Walkind9574ae2005-03-24 16:22:35 +0000451 118, 119, 119, 120, 121, 121, 122, 122, 123, 123,
452 124, 124, 124, 125, 125, 126, 126, 127, 127, 127,
453 127, 127, 128, 128, 129, 129, 130, 130, 130, 130,
454 130, 131, 130, 130, 132, 132, 133, 133, 134, 135,
455 135, 136, 136, 136, 137, 137, 137, 138, 138, 139,
456 139, 139, 140, 141, 141, 142, 142, 143, 143, 144,
457 144, 145, 145, 145, 145, 146, 146, 147, 147, 147,
458 147, 148, 148, 149, 149, 150, 150, 151, 151, 152,
459 152, 152, 153, 153, 154, 154, 155, 156, 156, 157,
460 157, 158, 158, 158, 159, 159, 161, 160, 162, 162,
461 163, 163, 164, 164, 164, 165, 166, 166, 166, 166,
462 166, 166, 166, 166, 166, 166, 166, 167, 167, 167,
463 167, 167, 167, 168, 168, 169, 170, 171, 171, 172,
464 173, 174, 173, 173, 173, 173, 173, 173, 173, 173,
465 173, 175, 175, 176, 176, 176, 177, 177, 178, 178,
466 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
467 178, 179, 179, 179, 180, 180, 181, 181, 181, 181,
468 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
469 182, 182, 183, 183, 184, 185, 185, 186, 186, 187,
470 187, 188, 188, 188, 189, 189, 189, 189, 189, 190,
471 190, 190, 190, 190, 190, 190, 190, 190, 190, 191,
472 190, 192, 192, 192, 192, 193, 193, 194, 194, 194,
473 194, 194, 195, 196, 197, 197, 198, 198, 199, 199,
474 200, 200, 200, 201, 201, 202, 203, 204, 204, 205,
475 205, 206, 206, 207, 207, 208, 208, 209, 209, 210,
476 210, 211, 211, 211, 211, 211, 212, 212, 213, 213,
477 214, 215, 216, 216, 216, 216, 217, 217, 217, 218,
478 218, 219, 220, 220, 221
Lev Walkin1004aa92004-09-08 00:28:11 +0000479};
480
481static const short yyr2[] = { 0,
482 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
483 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
484 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
485 1, 0, 3, 1, 3, 2, 1, 2, 4, 1,
Lev Walkin144db9b2004-10-12 23:26:53 +0000486 3, 1, 3, 1, 3, 3, 2, 1, 3, 1,
487 3, 1, 6, 1, 1, 0, 1, 1, 3, 1,
488 1, 4, 3, 3, 6, 1, 3, 1, 3, 3,
Lev Walkinc8092cb2005-02-18 16:34:21 +0000489 3, 1, 3, 1, 1, 0, 1, 1, 3, 3,
490 3, 1, 1, 3, 2, 1, 5, 0, 1, 1,
491 3, 2, 4, 4, 0, 1, 0, 6, 1, 2,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000492 1, 1, 1, 3, 3, 3, 1, 4, 4, 4,
493 6, 6, 1, 4, 4, 1, 3, 1, 3, 3,
494 3, 1, 3, 1, 3, 1, 1, 1, 1, 4,
495 3, 0, 3, 1, 1, 1, 1, 1, 1, 1,
Lev Walkind9574ae2005-03-24 16:22:35 +0000496 1, 1, 3, 1, 1, 1, 1, 2, 1, 1,
Lev Walkin1e448d32005-03-24 14:26:38 +0000497 1, 1, 2, 2, 1, 1, 2, 2, 1, 1,
498 1, 1, 1, 2, 1, 2, 1, 1, 1, 1,
Lev Walkin1004aa92004-09-08 00:28:11 +0000499 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin1e448d32005-03-24 14:26:38 +0000500 1, 1, 1, 1, 1, 0, 1, 1, 4, 3,
501 4, 1, 3, 5, 1, 3, 3, 3, 3, 4,
502 3, 1, 1, 3, 3, 3, 3, 1, 1, 0,
503 5, 1, 2, 2, 3, 1, 1, 1, 1, 1,
504 1, 1, 1, 5, 1, 3, 1, 3, 0, 1,
505 1, 1, 1, 1, 1, 3, 4, 1, 3, 2,
506 3, 1, 3, 0, 1, 1, 2, 2, 3, 1,
507 3, 1, 4, 4, 1, 1, 1, 1, 0, 1,
508 2, 4, 0, 1, 1, 1, 0, 1, 1, 1,
509 1, 1, 0, 1, 1
Lev Walkin1004aa92004-09-08 00:28:11 +0000510};
511
512static const short yydefact[] = { 0,
Lev Walkin1e448d32005-03-24 14:26:38 +0000513 270, 271, 1, 2, 5, 3, 0, 0, 6, 275,
Lev Walkin1004aa92004-09-08 00:28:11 +0000514 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
515 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
Lev Walkin1e448d32005-03-24 14:26:38 +0000516 18, 21, 19, 0, 17, 12, 23, 167, 0, 0,
517 168, 169, 170, 0, 171, 172, 180, 173, 174, 175,
518 176, 177, 178, 179, 0, 24, 25, 27, 28, 31,
Lev Walkin144db9b2004-10-12 23:26:53 +0000519 29, 30, 34, 0, 0, 32, 0, 47, 0, 48,
520 50, 52, 36, 0, 37, 0, 40, 42, 44, 4,
Lev Walkin1e448d32005-03-24 14:26:38 +0000521 26, 259, 118, 272, 0, 149, 0, 0, 163, 156,
522 160, 162, 150, 0, 0, 151, 155, 159, 0, 0,
523 54, 55, 152, 161, 122, 0, 33, 46, 45, 0,
524 0, 35, 38, 0, 0, 0, 0, 263, 64, 63,
525 0, 260, 267, 0, 164, 158, 157, 154, 153, 0,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000526 66, 0, 68, 0, 0, 0, 49, 51, 5, 41,
Lev Walkin1e448d32005-03-24 14:26:38 +0000527 43, 0, 265, 266, 264, 0, 118, 272, 113, 0,
528 0, 186, 186, 62, 186, 116, 165, 152, 107, 0,
529 269, 268, 261, 119, 121, 0, 0, 0, 0, 56,
530 128, 129, 123, 124, 126, 120, 137, 144, 138, 257,
Lev Walkind9574ae2005-03-24 16:22:35 +0000531 145, 146, 258, 135, 134, 136, 132, 130, 141, 139,
532 140, 0, 142, 39, 0, 90, 259, 127, 0, 0,
533 0, 0, 0, 76, 0, 0, 187, 188, 76, 0,
534 106, 0, 166, 259, 259, 67, 71, 70, 69, 0,
535 0, 218, 217, 0, 216, 219, 0, 60, 0, 0,
536 0, 57, 58, 221, 61, 195, 0, 202, 203, 209,
537 208, 234, 235, 220, 223, 222, 0, 0, 0, 0,
538 95, 0, 0, 246, 88, 88, 92, 245, 0, 262,
539 0, 103, 0, 83, 86, 259, 117, 0, 0, 0,
540 77, 78, 82, 259, 0, 192, 273, 0, 0, 273,
541 256, 248, 0, 250, 255, 252, 0, 72, 74, 75,
542 65, 0, 0, 212, 0, 0, 0, 0, 0, 53,
543 0, 183, 184, 181, 182, 0, 0, 185, 0, 0,
544 0, 0, 125, 147, 133, 143, 131, 0, 87, 96,
Lev Walkin1e448d32005-03-24 14:26:38 +0000545 91, 247, 89, 244, 244, 114, 0, 108, 0, 85,
546 0, 259, 109, 0, 244, 190, 0, 259, 274, 0,
547 110, 259, 249, 0, 0, 115, 259, 196, 210, 213,
Lev Walkind9574ae2005-03-24 16:22:35 +0000548 214, 207, 205, 0, 236, 201, 59, 197, 198, 199,
549 0, 206, 204, 0, 0, 238, 148, 0, 93, 94,
550 104, 105, 142, 84, 189, 81, 79, 80, 193, 0,
551 191, 0, 251, 0, 0, 73, 0, 215, 227, 0,
552 225, 186, 200, 0, 240, 242, 237, 0, 97, 0,
553 111, 112, 254, 253, 211, 224, 0, 229, 241, 0,
554 239, 0, 194, 226, 232, 233, 231, 228, 230, 243,
555 101, 0, 99, 102, 98, 100, 0, 0, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000556};
557
Lev Walkind9574ae2005-03-24 16:22:35 +0000558static const short yydefgoto[] = { 427,
Lev Walkin1004aa92004-09-08 00:28:11 +0000559 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000560 56, 57, 107, 58, 74, 75, 76, 77, 59, 69,
Lev Walkind9574ae2005-03-24 16:22:35 +0000561 70, 60, 100, 231, 232, 233, 61, 130, 131, 287,
562 288, 270, 271, 272, 263, 264, 119, 324, 195, 196,
563 319, 320, 412, 422, 423, 273, 289, 155, 156, 173,
564 174, 197, 198, 62, 188, 248, 189, 234, 315, 157,
565 103, 159, 104, 306, 307, 309, 206, 207, 208, 275,
566 276, 236, 387, 296, 237, 238, 239, 240, 390, 391,
567 418, 419, 241, 242, 243, 365, 366, 395, 257, 258,
568 213, 283, 284, 244, 259, 122, 123, 146, 163, 245,
569 105, 338, 246
Lev Walkin1004aa92004-09-08 00:28:11 +0000570};
571
Lev Walkind9574ae2005-03-24 16:22:35 +0000572static const short yypact[] = { 131,
573-32768,-32768, 131,-32768, -60,-32768, 15, 25,-32768,-32768,
574-32768,-32768, 27,-32768, -1, 141,-32768,-32768, 88, 79,
575 62, 71, 65, 89, 188, 141,-32768, 101,-32768,-32768,
576-32768,-32768,-32768, 200,-32768,-32768, 517,-32768, 215, 38,
577-32768,-32768,-32768, 61,-32768,-32768,-32768,-32768,-32768,-32768,
578-32768,-32768,-32768,-32768, 190, 517,-32768,-32768,-32768,-32768,
579-32768,-32768,-32768, 355, 746,-32768, 146,-32768, 72,-32768,
580 152,-32768,-32768, 34,-32768, -10,-32768, 156,-32768,-32768,
581-32768, -3, 158,-32768, 182,-32768, 189, 216,-32768,-32768,
582-32768,-32768,-32768, 242, 213,-32768,-32768,-32768, 821, 294,
583-32768,-32768,-32768,-32768, 185, 296,-32768,-32768,-32768, 145,
584 194,-32768,-32768, 131, 145, 196, 198, 5,-32768,-32768,
585 594,-32768, 64, 145,-32768,-32768,-32768,-32768,-32768, -66,
586-32768, 193, 195, 202, 235, 159,-32768,-32768, -60,-32768,
587-32768, 237,-32768,-32768,-32768, 299, -11, 204, 273, 206,
588 243, -27, -12,-32768, -6,-32768,-32768, 207,-32768, 209,
589-32768,-32768,-32768,-32768,-32768, 302, 821, 309, 145, 268,
590-32768,-32768, 205,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
Lev Walkin1e448d32005-03-24 14:26:38 +0000591-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
Lev Walkind9574ae2005-03-24 16:22:35 +0000592-32768, 208, 212,-32768, -19,-32768, 6,-32768, 211, 292,
593 42, 254, 217, 7, 453, 255,-32768, 219, 7, 260,
594-32768, 50,-32768, 12, 218,-32768,-32768,-32768,-32768, 234,
595 306,-32768,-32768, -4,-32768,-32768, 303,-32768, 131, 453,
596 230, 229,-32768,-32768, 184, 244, 238, -4,-32768,-32768,
597-32768, 236,-32768,-32768,-32768,-32768, 237, 342, 309, 159,
598 251, 237, 159,-32768, 259, 259,-32768,-32768, 671,-32768,
599 309, 239, 83,-32768,-32768, 218,-32768, 453, 283, 246,
600 245,-32768,-32768, 218, 252, 126, 309, 453, 248, 309,
601-32768,-32768, 102,-32768,-32768, 256, 110,-32768,-32768,-32768,
602-32768, 465, 257, 250, 263, 168, 262, 253, 266,-32768,
603 268,-32768,-32768,-32768,-32768, 465, 465,-32768, 465, 453,
604 282, 261,-32768,-32768, 367,-32768,-32768, 293,-32768,-32768,
605-32768,-32768,-32768, 8, 8,-32768, 225,-32768, 42,-32768,
606 270, 218,-32768, 7, 8,-32768, 278, 218,-32768, 276,
607-32768, 218,-32768, 56, 225,-32768, 12,-32768,-32768,-32768,
608 271,-32768,-32768, 46,-32768,-32768,-32768,-32768,-32768,-32768,
609 280,-32768,-32768, 1, 111,-32768,-32768, 281,-32768,-32768,
610-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 279, 671,
611-32768, 671,-32768, 284, 286,-32768, 342,-32768,-32768, 134,
612-32768, -6,-32768, 309, 277,-32768,-32768, 261,-32768, 453,
613-32768,-32768,-32768,-32768, 367,-32768, 46, 17, 277, 309,
614-32768, 183, 184,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
615-32768, 13,-32768,-32768,-32768,-32768, 391, 395,-32768
Lev Walkin1004aa92004-09-08 00:28:11 +0000616};
617
618static const short yypgoto[] = {-32768,
Lev Walkind9574ae2005-03-24 16:22:35 +0000619-32768, 396, 269,-32768,-32768, 389,-32768,-32768, 383,-32768,
620-32768, 354,-32768,-32768,-32768, 337,-32768, 297,-32768,-32768,
621 304,-32768, 348,-32768,-32768, 116,-32768,-32768, 258,-32768,
622 80, 210,-32768, 84,-32768, 97,-32768, 172,-32768, 177,
623-32768,-32768,-32768,-32768, 10, -187, -74, -192, -53,-32768,
624 191, -190, -122,-32768, -169,-32768, -256, -118, 43, -33,
625 -120,-32768, 48,-32768,-32768,-32768, -151,-32768,-32768, -205,
626 -165, -96,-32768, 197,-32768, -213,-32768,-32768,-32768, 29,
627-32768,-32768,-32768,-32768,-32768,-32768, 39, 45, -121,-32768,
628-32768,-32768, 99, -126, -79,-32768,-32768,-32768,-32768, 16,
629-32768, 161, -7
Lev Walkin1004aa92004-09-08 00:28:11 +0000630};
631
632
Lev Walkind9574ae2005-03-24 16:22:35 +0000633#define YYLAST 917
Lev Walkin1004aa92004-09-08 00:28:11 +0000634
635
636static const short yytable[] = { 15,
Lev Walkind9574ae2005-03-24 16:22:35 +0000637 158, 210, 121, 211, 235, 15, 256, 120, 10, 191,
638 101, 101, 175, 265, 10, 5, 421, 190, 5, 10,
639 171, 172, 10, 11, 299, 143, 117, 171, 172, 65,
640 102, 102, 72, 415, 10, 11, 79, 114, 269, 166,
641 253, 10, 253, 167, 7, 10, 1, 2, 65, 10,
642 1, 2, 64, 10, 203, 71, 67, 10, 180, 78,
643 16, 183, 331, 10, 180, 132, 79, 183, 10, 203,
644 371, 64, 340, 1, 2, 203, 254, 204, 254, 205,
645 317, 144, 353, 322, 63, 285, 251, 416, 384, 78,
646 252, 417, 209, -270, 205, 145, 28, 363, 294, 115,
647 205, 124, 72, 63, 361, 19, 161, 79, 73, 295,
648 262, -244, 118, 394, 133, -244, 165, 162, 425, 32,
649 12, 118, 255, 191, 175, 71, 191, 118, 193, 139,
650 78, 190, 17, 132, 190, 235, 160, 29, 158, 164,
651 291, 265, 112, 1, 2, 262, 68, 30, 267, 389,
652 176, 192, 10, 281, 20, 282, 31, 1, 2, 281,
653 217, 219, 21, 177, 178, 179, 10, 180, 181, 182,
654 183, 1, 2, 178, 33, 10, 180, 181, 182, 183,
655 109, 110, 133, 22, 218, 23, 421, 401, 328, 402,
656 34, 330, 329, 266, 24, 348, 274, 171, 172, 335,
657 372, 274, 369, 370, 286, 184, 290, 343, 36, 358,
658 359, 344, 360, 378, 222, 346, 397, 285, 385, 347,
659 398, 424, 37, 185, 302, 303, 304, 305, 66, 352,
660 80, 424, 10, 180, 413, 337, 183, 1, 2, 406,
661 408, 316, 193, 407, 298, 193, 186, 1, 2, 171,
662 172, 171, 172, 326, 108, 226, 111, 376, 380, 158,
663 116, 158, 382, 187, 125, 192, 83, 84, 192, 339,
664 124, 126, 339, 178, 160, 10, 180, 181, 182, 183,
665 1, 2, 302, 303, 304, 305, 220, 178, 127, 10,
666 180, 181, 182, 183, 128, 129, 134, 135, 136, 138,
667 221, 141, 142, 168, 215, 169, 170, 199, -271, 200,
668 201, 212, 202, 214, 222, 223, 10, 247, 261, 373,
669 249, 266, 250, 268, 277, 278, 274, 260, 222, 280,
670 224, 292, 293, 118, 297, 300, 286, 373, 301, 290,
671 312, 308, 192, 362, 310, 314, 392, 318, 323, 225,
672 327, 333, 332, 341, 334, 226, 396, 82, 355, 336,
673 192, 349, 345, 350, 227, 351, 354, 83, 84, 226,
674 367, 228, 229, 356, 230, 364, 368, 375, 85, 38,
675 86, 379, 87, 381, 388, 399, 396, 393, 400, 410,
676 428, 403, 88, 404, 429, 160, 89, 160, 6, 392,
677 90, 18, 420, 91, 41, 42, 43, 194, 35, 81,
678 113, 140, 106, 137, 92, 45, 357, 377, 279, 93,
679 46, 94, 47, 95, 216, 374, 386, 325, 321, 405,
680 48, 426, 96, 97, 311, 414, 411, 313, 409, 49,
681 342, 50, 383, 0, 0, 0, 51, 98, 52, 53,
682 54, 0, 0, 0, 0, 0, 0, 0, 178, 99,
683 10, 180, 181, 182, 183, 1, 2, 0, 0, 0,
684 178, 220, 10, 180, 181, 182, 183, 1, 2, 0,
685 0, 0, 0, 0, 0, 221, 0, 0, 0, 0,
686 0, 0, 0, 0, 0, 0, 0, 221, 0, 222,
687 223, 0, 0, 0, 0, 0, 0, 0, 0, 0,
688 0, 222, 223, 0, 0, 224, 0, 0, 0, 0,
689 0, 0, 0, 0, 10, 0, 0, 224, 0, 1,
690 2, 0, 0, 0, 225, 0, 0, 0, 0, 0,
691 226, 38, 0, 0, 0, 0, 225, 0, 0, 227,
692 0, 0, 226, 0, 0, 0, 39, 229, 0, 230,
693 40, 227, 0, 0, 0, 0, 41, 42, 43, 229,
694 0, 230, 44, 0, 0, 0, 0, 45, 0, 0,
695 0, 0, 46, 0, 47, 0, 0, 0, 0, 0,
696 0, 0, 48, 0, 0, 0, 0, 0, 0, 0,
697 0, 49, 0, 50, 0, 0, 147, 148, 51, 0,
698 52, 53, 54, 149, 0, 0, 0, 85, 38, 86,
699 0, 87, 150, 0, 0, 0, 0, 0, 0, 0,
700 0, 88, 0, 0, 0, 89, 0, 0, 0, 90,
701 0, 0, 91, 41, 42, 43, 0, 0, 0, 0,
702 0, 151, 0, 92, 45, 0, 0, 0, 93, 46,
703 94, 47, 95, 0, 0, 0, 0, 0, 0, 48,
704 0, 96, 97, 152, 153, 0, 0, 0, 49, 0,
705 50, 0, 154, 147, 148, 51, 98, 52, 53, 54,
706 149, 0, 0, 0, 85, 38, 86, 0, 87, 150,
707 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
708 0, 0, 89, 0, 0, 0, 90, 0, 0, 91,
709 41, 42, 43, 0, 0, 0, 0, 0, 151, 0,
710 92, 45, 0, 0, 0, 93, 46, 94, 47, 95,
711 0, 0, 0, 0, 0, 0, 48, 0, 96, 97,
712 152, 153, 0, 0, 0, 49, 0, 50, 83, 84,
713 0, 0, 51, 98, 52, 53, 54, 0, 0, 85,
714 38, 86, 0, 87, 0, 0, 0, 0, 0, 0,
715 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
716 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
717 0, 0, 0, 0, 0, 92, 45, 0, 0, 0,
718 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
719 0, 48, 0, 96, 97, 0, 0, 0, 0, 0,
720 49, 0, 50, 1, 2, 0, 0, 51, 98, 52,
721 53, 54, 0, 0, 85, 38, 86, 0, 87, 0,
722 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
723 0, 0, 89, 0, 0, 0, 90, 0, 0, 91,
724 41, 42, 43, 0, 0, 0, 0, 0, 0, 0,
725 92, 45, 0, 0, 0, 93, 46, 94, 47, 95,
726 0, 0, 0, 0, 0, 0, 48, 0, 96, 97,
727 0, 0, 0, 0, 0, 49, 0, 50, 0, 0,
728 0, 0, 51, 98, 52, 53, 54
Lev Walkin1004aa92004-09-08 00:28:11 +0000729};
730
731static const short yycheck[] = { 7,
Lev Walkind9574ae2005-03-24 16:22:35 +0000732 121, 153, 82, 155, 170, 13, 197, 82, 8, 136,
733 64, 65, 135, 201, 8, 0, 4, 136, 3, 8,
734 15, 16, 8, 9, 230, 21, 30, 15, 16, 37,
735 64, 65, 40, 17, 8, 9, 44, 48, 32, 106,
736 35, 8, 35, 110, 105, 8, 13, 14, 56, 8,
737 13, 14, 37, 8, 82, 40, 19, 8, 9, 44,
738 36, 12, 268, 8, 9, 99, 74, 12, 8, 82,
739 327, 56, 278, 13, 14, 82, 71, 105, 71, 107,
740 250, 77, 296, 253, 37, 212, 106, 71, 345, 74,
741 110, 75, 105, 105, 107, 91, 9, 311, 103, 110,
742 107, 113, 110, 56, 310, 107, 43, 115, 48, 114,
743 104, 106, 116, 113, 99, 110, 124, 54, 106, 55,
744 106, 116, 197, 250, 247, 110, 253, 116, 136, 114,
745 115, 250, 106, 167, 253, 301, 121, 59, 259, 124,
746 215, 329, 109, 13, 14, 104, 109, 86, 202, 104,
747 135, 136, 8, 104, 14, 106, 86, 13, 14, 104,
748 168, 169, 22, 5, 6, 7, 8, 9, 10, 11,
749 12, 13, 14, 6, 86, 8, 9, 10, 11, 12,
750 109, 110, 167, 43, 169, 45, 4, 380, 106, 382,
751 3, 266, 110, 201, 54, 292, 204, 15, 16, 274,
752 327, 209, 324, 325, 212, 47, 214, 106, 108, 306,
753 307, 110, 309, 335, 47, 106, 106, 344, 345, 110,
754 110, 412, 23, 65, 99, 100, 101, 102, 14, 62,
755 41, 422, 8, 9, 400, 110, 12, 13, 14, 106,
756 392, 249, 250, 110, 229, 253, 88, 13, 14, 15,
757 16, 15, 16, 261, 109, 88, 105, 332, 338, 380,
758 105, 382, 342, 105, 83, 250, 13, 14, 253, 277,
759 113, 83, 280, 6, 259, 8, 9, 10, 11, 12,
760 13, 14, 99, 100, 101, 102, 19, 6, 73, 8,
761 9, 10, 11, 12, 53, 83, 3, 113, 3, 106,
762 33, 106, 105, 111, 3, 111, 105, 9, 105, 37,
763 105, 105, 70, 105, 47, 48, 8, 113, 27, 327,
764 113, 329, 111, 107, 70, 107, 334, 117, 47, 70,
765 63, 98, 27, 116, 32, 106, 344, 345, 110, 347,
766 105, 98, 327, 62, 107, 4, 354, 97, 90, 82,
767 112, 106, 70, 106, 110, 88, 364, 3, 106, 108,
768 345, 105, 107, 114, 97, 103, 105, 13, 14, 88,
769 4, 104, 105, 108, 107, 115, 84, 108, 24, 25,
770 26, 104, 28, 108, 114, 105, 394, 108, 110, 113,
771 0, 108, 38, 108, 0, 380, 42, 382, 3, 407,
772 46, 13, 410, 49, 50, 51, 52, 139, 26, 56,
773 74, 115, 65, 110, 60, 61, 301, 334, 209, 65,
774 66, 67, 68, 69, 167, 329, 347, 256, 252, 387,
775 76, 422, 78, 79, 238, 407, 398, 247, 394, 85,
776 280, 87, 344, -1, -1, -1, 92, 93, 94, 95,
777 96, -1, -1, -1, -1, -1, -1, -1, 6, 105,
778 8, 9, 10, 11, 12, 13, 14, -1, -1, -1,
779 6, 19, 8, 9, 10, 11, 12, 13, 14, -1,
780 -1, -1, -1, -1, -1, 33, -1, -1, -1, -1,
781 -1, -1, -1, -1, -1, -1, -1, 33, -1, 47,
782 48, -1, -1, -1, -1, -1, -1, -1, -1, -1,
783 -1, 47, 48, -1, -1, 63, -1, -1, -1, -1,
784 -1, -1, -1, -1, 8, -1, -1, 63, -1, 13,
785 14, -1, -1, -1, 82, -1, -1, -1, -1, -1,
786 88, 25, -1, -1, -1, -1, 82, -1, -1, 97,
787 -1, -1, 88, -1, -1, -1, 40, 105, -1, 107,
788 44, 97, -1, -1, -1, -1, 50, 51, 52, 105,
789 -1, 107, 56, -1, -1, -1, -1, 61, -1, -1,
790 -1, -1, 66, -1, 68, -1, -1, -1, -1, -1,
791 -1, -1, 76, -1, -1, -1, -1, -1, -1, -1,
792 -1, 85, -1, 87, -1, -1, 13, 14, 92, -1,
793 94, 95, 96, 20, -1, -1, -1, 24, 25, 26,
794 -1, 28, 29, -1, -1, -1, -1, -1, -1, -1,
795 -1, 38, -1, -1, -1, 42, -1, -1, -1, 46,
796 -1, -1, 49, 50, 51, 52, -1, -1, -1, -1,
797 -1, 58, -1, 60, 61, -1, -1, -1, 65, 66,
798 67, 68, 69, -1, -1, -1, -1, -1, -1, 76,
799 -1, 78, 79, 80, 81, -1, -1, -1, 85, -1,
800 87, -1, 89, 13, 14, 92, 93, 94, 95, 96,
801 20, -1, -1, -1, 24, 25, 26, -1, 28, 29,
802 -1, -1, -1, -1, -1, -1, -1, -1, 38, -1,
803 -1, -1, 42, -1, -1, -1, 46, -1, -1, 49,
804 50, 51, 52, -1, -1, -1, -1, -1, 58, -1,
805 60, 61, -1, -1, -1, 65, 66, 67, 68, 69,
806 -1, -1, -1, -1, -1, -1, 76, -1, 78, 79,
807 80, 81, -1, -1, -1, 85, -1, 87, 13, 14,
808 -1, -1, 92, 93, 94, 95, 96, -1, -1, 24,
809 25, 26, -1, 28, -1, -1, -1, -1, -1, -1,
810 -1, -1, -1, 38, -1, -1, -1, 42, -1, -1,
811 -1, 46, -1, -1, 49, 50, 51, 52, -1, -1,
812 -1, -1, -1, -1, -1, 60, 61, -1, -1, -1,
813 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
814 -1, 76, -1, 78, 79, -1, -1, -1, -1, -1,
815 85, -1, 87, 13, 14, -1, -1, 92, 93, 94,
816 95, 96, -1, -1, 24, 25, 26, -1, 28, -1,
817 -1, -1, -1, -1, -1, -1, -1, -1, 38, -1,
818 -1, -1, 42, -1, -1, -1, 46, -1, -1, 49,
819 50, 51, 52, -1, -1, -1, -1, -1, -1, -1,
820 60, 61, -1, -1, -1, 65, 66, 67, 68, 69,
821 -1, -1, -1, -1, -1, -1, 76, -1, 78, 79,
822 -1, -1, -1, -1, -1, 85, -1, 87, -1, -1,
823 -1, -1, 92, 93, 94, 95, 96
Lev Walkin1004aa92004-09-08 00:28:11 +0000824};
825/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
826#line 3 "/usr/share/bison.simple"
827/* This file comes from bison-1.28. */
828
829/* Skeleton output parser for bison,
830 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
831
832 This program is free software; you can redistribute it and/or modify
833 it under the terms of the GNU General Public License as published by
834 the Free Software Foundation; either version 2, or (at your option)
835 any later version.
836
837 This program is distributed in the hope that it will be useful,
838 but WITHOUT ANY WARRANTY; without even the implied warranty of
839 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
840 GNU General Public License for more details.
841
842 You should have received a copy of the GNU General Public License
843 along with this program; if not, write to the Free Software
844 Foundation, Inc., 59 Temple Place - Suite 330,
845 Boston, MA 02111-1307, USA. */
846
847/* As a special exception, when this file is copied by Bison into a
848 Bison output file, you may use that output file without restriction.
849 This special exception was added by the Free Software Foundation
850 in version 1.24 of Bison. */
851
852/* This is the parser code that is written into each bison parser
853 when the %semantic_parser declaration is not specified in the grammar.
854 It was written by Richard Stallman by simplifying the hairy parser
855 used when %semantic_parser is specified. */
856
857#ifndef YYSTACK_USE_ALLOCA
858#ifdef alloca
859#define YYSTACK_USE_ALLOCA
860#else /* alloca not defined */
861#ifdef __GNUC__
862#define YYSTACK_USE_ALLOCA
863#define alloca __builtin_alloca
864#else /* not GNU C. */
865#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
866#define YYSTACK_USE_ALLOCA
867#include <alloca.h>
868#else /* not sparc */
869/* We think this test detects Watcom and Microsoft C. */
870/* This used to test MSDOS, but that is a bad idea
871 since that symbol is in the user namespace. */
872#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
873#if 0 /* No need for malloc.h, which pollutes the namespace;
874 instead, just don't use alloca. */
875#include <malloc.h>
876#endif
877#else /* not MSDOS, or __TURBOC__ */
878#if defined(_AIX)
879/* I don't know what this was needed for, but it pollutes the namespace.
880 So I turned it off. rms, 2 May 1997. */
881/* #include <malloc.h> */
882 #pragma alloca
883#define YYSTACK_USE_ALLOCA
884#else /* not MSDOS, or __TURBOC__, or _AIX */
885#if 0
886#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
887 and on HPUX 10. Eventually we can turn this on. */
888#define YYSTACK_USE_ALLOCA
889#define alloca __builtin_alloca
890#endif /* __hpux */
891#endif
892#endif /* not _AIX */
893#endif /* not MSDOS, or __TURBOC__ */
894#endif /* not sparc */
895#endif /* not GNU C */
896#endif /* alloca not defined */
897#endif /* YYSTACK_USE_ALLOCA not defined */
898
899#ifdef YYSTACK_USE_ALLOCA
900#define YYSTACK_ALLOC alloca
Lev Walkinf15320b2004-06-03 03:38:44 +0000901#else
Lev Walkin1004aa92004-09-08 00:28:11 +0000902#define YYSTACK_ALLOC malloc
Lev Walkinf15320b2004-06-03 03:38:44 +0000903#endif
904
Lev Walkin1004aa92004-09-08 00:28:11 +0000905/* Note: there must be only one dollar sign in this file.
906 It is replaced by the list of actions, each action
907 as one case of the switch. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000908
909#define yyerrok (yyerrstatus = 0)
910#define yyclearin (yychar = YYEMPTY)
911#define YYEMPTY -2
912#define YYEOF 0
913#define YYACCEPT goto yyacceptlab
Lev Walkin1004aa92004-09-08 00:28:11 +0000914#define YYABORT goto yyabortlab
Lev Walkinf15320b2004-06-03 03:38:44 +0000915#define YYERROR goto yyerrlab1
Lev Walkin1004aa92004-09-08 00:28:11 +0000916/* Like YYERROR except do call yyerror.
917 This remains here temporarily to ease the
918 transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +0000919 Once GCC version 2 has supplanted version 1, this can go. */
920#define YYFAIL goto yyerrlab
921#define YYRECOVERING() (!!yyerrstatus)
Lev Walkin1004aa92004-09-08 00:28:11 +0000922#define YYBACKUP(token, value) \
Lev Walkinf15320b2004-06-03 03:38:44 +0000923do \
924 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin1004aa92004-09-08 00:28:11 +0000925 { yychar = (token), yylval = (value); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000926 yychar1 = YYTRANSLATE (yychar); \
927 YYPOPSTACK; \
928 goto yybackup; \
929 } \
930 else \
Lev Walkin1004aa92004-09-08 00:28:11 +0000931 { yyerror ("syntax error: cannot back up"); YYERROR; } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000932while (0)
933
934#define YYTERROR 1
935#define YYERRCODE 256
936
Lev Walkin1004aa92004-09-08 00:28:11 +0000937#ifndef YYPURE
938#define YYLEX yylex()
Lev Walkinf15320b2004-06-03 03:38:44 +0000939#endif
940
Lev Walkin1004aa92004-09-08 00:28:11 +0000941#ifdef YYPURE
942#ifdef YYLSP_NEEDED
943#ifdef YYLEX_PARAM
944#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
945#else
946#define YYLEX yylex(&yylval, &yylloc)
947#endif
948#else /* not YYLSP_NEEDED */
949#ifdef YYLEX_PARAM
950#define YYLEX yylex(&yylval, YYLEX_PARAM)
951#else
952#define YYLEX yylex(&yylval)
953#endif
954#endif /* not YYLSP_NEEDED */
955#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000956
Lev Walkin1004aa92004-09-08 00:28:11 +0000957/* If nonreentrant, generate the variables here */
Lev Walkinf15320b2004-06-03 03:38:44 +0000958
Lev Walkin1004aa92004-09-08 00:28:11 +0000959#ifndef YYPURE
Lev Walkinf15320b2004-06-03 03:38:44 +0000960
Lev Walkin1004aa92004-09-08 00:28:11 +0000961int yychar; /* the lookahead symbol */
962YYSTYPE yylval; /* the semantic value of the */
963 /* lookahead symbol */
Lev Walkinf15320b2004-06-03 03:38:44 +0000964
Lev Walkin1004aa92004-09-08 00:28:11 +0000965#ifdef YYLSP_NEEDED
966YYLTYPE yylloc; /* location data for the lookahead */
967 /* symbol */
968#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000969
Lev Walkin1004aa92004-09-08 00:28:11 +0000970int yynerrs; /* number of parse errors so far */
971#endif /* not YYPURE */
972
973#if YYDEBUG != 0
974int yydebug; /* nonzero means print parse trace */
975/* Since this is uninitialized, it does not stop multiple parsers
976 from coexisting. */
977#endif
978
979/* YYINITDEPTH indicates the initial size of the parser's stacks */
980
Lev Walkinf15320b2004-06-03 03:38:44 +0000981#ifndef YYINITDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000982#define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +0000983#endif
984
Lev Walkin1004aa92004-09-08 00:28:11 +0000985/* YYMAXDEPTH is the maximum size the stacks can grow to
986 (effective only if the built-in stack extension method is used). */
Lev Walkinf15320b2004-06-03 03:38:44 +0000987
988#if YYMAXDEPTH == 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000989#undef YYMAXDEPTH
Lev Walkinf15320b2004-06-03 03:38:44 +0000990#endif
991
992#ifndef YYMAXDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000993#define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +0000994#endif
995
Lev Walkin1004aa92004-09-08 00:28:11 +0000996/* Define __yy_memcpy. Note that the size argument
997 should be passed with type unsigned int, because that is what the non-GCC
998 definitions require. With GCC, __builtin_memcpy takes an arg
999 of type size_t, but it can handle unsigned int. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001000
Lev Walkin1004aa92004-09-08 00:28:11 +00001001#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
1002#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
1003#else /* not GNU C or C++ */
1004#ifndef __cplusplus
Lev Walkinf15320b2004-06-03 03:38:44 +00001005
Lev Walkin1004aa92004-09-08 00:28:11 +00001006/* This is the most reliable way to avoid incompatibilities
1007 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +00001008static void
Lev Walkin1004aa92004-09-08 00:28:11 +00001009__yy_memcpy (to, from, count)
1010 char *to;
1011 char *from;
1012 unsigned int count;
Lev Walkin459ab022004-09-07 10:39:09 +00001013{
Lev Walkin1004aa92004-09-08 00:28:11 +00001014 register char *f = from;
1015 register char *t = to;
1016 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001017
Lev Walkin1004aa92004-09-08 00:28:11 +00001018 while (i-- > 0)
1019 *t++ = *f++;
Lev Walkin459ab022004-09-07 10:39:09 +00001020}
Lev Walkin459ab022004-09-07 10:39:09 +00001021
Lev Walkin1004aa92004-09-08 00:28:11 +00001022#else /* __cplusplus */
Lev Walkin459ab022004-09-07 10:39:09 +00001023
Lev Walkin1004aa92004-09-08 00:28:11 +00001024/* This is the most reliable way to avoid incompatibilities
1025 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +00001026static void
Lev Walkin1004aa92004-09-08 00:28:11 +00001027__yy_memcpy (char *to, char *from, unsigned int count)
Lev Walkin459ab022004-09-07 10:39:09 +00001028{
Lev Walkin1004aa92004-09-08 00:28:11 +00001029 register char *t = to;
1030 register char *f = from;
1031 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001032
Lev Walkin1004aa92004-09-08 00:28:11 +00001033 while (i-- > 0)
1034 *t++ = *f++;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001035}
Lev Walkin609ccbb2004-09-04 04:49:21 +00001036
Lev Walkin1004aa92004-09-08 00:28:11 +00001037#endif
1038#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001039
Lev Walkin1004aa92004-09-08 00:28:11 +00001040#line 217 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00001041
1042/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1043 into yyparse. The argument should have type void *.
1044 It should actually point to an object.
1045 Grammar actions can access the variable by casting it
1046 to the proper pointer type. */
1047
1048#ifdef YYPARSE_PARAM
Lev Walkin1004aa92004-09-08 00:28:11 +00001049#ifdef __cplusplus
1050#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1051#define YYPARSE_PARAM_DECL
1052#else /* not __cplusplus */
1053#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1054#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1055#endif /* not __cplusplus */
1056#else /* not YYPARSE_PARAM */
1057#define YYPARSE_PARAM_ARG
1058#define YYPARSE_PARAM_DECL
1059#endif /* not YYPARSE_PARAM */
Lev Walkinf15320b2004-06-03 03:38:44 +00001060
1061/* Prevent warning if -Wstrict-prototypes. */
1062#ifdef __GNUC__
Lev Walkin1004aa92004-09-08 00:28:11 +00001063#ifdef YYPARSE_PARAM
Lev Walkinf15320b2004-06-03 03:38:44 +00001064int yyparse (void *);
Lev Walkin1004aa92004-09-08 00:28:11 +00001065#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001066int yyparse (void);
Lev Walkin1004aa92004-09-08 00:28:11 +00001067#endif
Lev Walkinceb20e72004-09-05 10:40:41 +00001068#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001069
Lev Walkinf15320b2004-06-03 03:38:44 +00001070int
Lev Walkin1004aa92004-09-08 00:28:11 +00001071yyparse(YYPARSE_PARAM_ARG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001072 YYPARSE_PARAM_DECL
1073{
1074 register int yystate;
1075 register int yyn;
1076 register short *yyssp;
1077 register YYSTYPE *yyvsp;
Lev Walkin1004aa92004-09-08 00:28:11 +00001078 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1079 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
Lev Walkinf15320b2004-06-03 03:38:44 +00001080
Lev Walkin1004aa92004-09-08 00:28:11 +00001081 short yyssa[YYINITDEPTH]; /* the state stack */
1082 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
Lev Walkinf15320b2004-06-03 03:38:44 +00001083
Lev Walkin1004aa92004-09-08 00:28:11 +00001084 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1085 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
Lev Walkinf15320b2004-06-03 03:38:44 +00001086
Lev Walkin1004aa92004-09-08 00:28:11 +00001087#ifdef YYLSP_NEEDED
1088 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1089 YYLTYPE *yyls = yylsa;
1090 YYLTYPE *yylsp;
1091
1092#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1093#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001094#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkin1004aa92004-09-08 00:28:11 +00001095#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001096
Lev Walkin1004aa92004-09-08 00:28:11 +00001097 int yystacksize = YYINITDEPTH;
1098 int yyfree_stacks = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001099
Lev Walkin1004aa92004-09-08 00:28:11 +00001100#ifdef YYPURE
1101 int yychar;
1102 YYSTYPE yylval;
1103 int yynerrs;
1104#ifdef YYLSP_NEEDED
1105 YYLTYPE yylloc;
1106#endif
1107#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001108
Lev Walkin1004aa92004-09-08 00:28:11 +00001109 YYSTYPE yyval; /* the variable used to return */
1110 /* semantic values from the action */
1111 /* routines */
Lev Walkinf15320b2004-06-03 03:38:44 +00001112
1113 int yylen;
1114
Lev Walkin1004aa92004-09-08 00:28:11 +00001115#if YYDEBUG != 0
1116 if (yydebug)
1117 fprintf(stderr, "Starting parse\n");
1118#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001119
1120 yystate = 0;
1121 yyerrstatus = 0;
1122 yynerrs = 0;
1123 yychar = YYEMPTY; /* Cause a token to be read. */
1124
1125 /* Initialize stack pointers.
1126 Waste one element of value and location stack
1127 so that they stay on the same level as the state stack.
1128 The wasted elements are never initialized. */
1129
Lev Walkin1004aa92004-09-08 00:28:11 +00001130 yyssp = yyss - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001131 yyvsp = yyvs;
Lev Walkin1004aa92004-09-08 00:28:11 +00001132#ifdef YYLSP_NEEDED
1133 yylsp = yyls;
1134#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001135
Lev Walkin1004aa92004-09-08 00:28:11 +00001136/* Push a new state, which is found in yystate . */
1137/* In all cases, when you get here, the value and location stacks
1138 have just been pushed. so pushing a state here evens the stacks. */
1139yynewstate:
Lev Walkinf15320b2004-06-03 03:38:44 +00001140
Lev Walkin1004aa92004-09-08 00:28:11 +00001141 *++yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001142
1143 if (yyssp >= yyss + yystacksize - 1)
1144 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001145 /* Give user a chance to reallocate the stack */
1146 /* Use copies of these so that the &'s don't force the real ones into memory. */
1147 YYSTYPE *yyvs1 = yyvs;
1148 short *yyss1 = yyss;
1149#ifdef YYLSP_NEEDED
1150 YYLTYPE *yyls1 = yyls;
1151#endif
1152
Lev Walkinf15320b2004-06-03 03:38:44 +00001153 /* Get the current used size of the three stacks, in elements. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001154 int size = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001155
1156#ifdef yyoverflow
Lev Walkin1004aa92004-09-08 00:28:11 +00001157 /* Each stack pointer address is followed by the size of
1158 the data in use in that stack, in bytes. */
1159#ifdef YYLSP_NEEDED
1160 /* This used to be a conditional around just the two extra args,
1161 but that might be undefined if yyoverflow is a macro. */
1162 yyoverflow("parser stack overflow",
1163 &yyss1, size * sizeof (*yyssp),
1164 &yyvs1, size * sizeof (*yyvsp),
1165 &yyls1, size * sizeof (*yylsp),
1166 &yystacksize);
1167#else
1168 yyoverflow("parser stack overflow",
1169 &yyss1, size * sizeof (*yyssp),
1170 &yyvs1, size * sizeof (*yyvsp),
1171 &yystacksize);
1172#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001173
Lev Walkin1004aa92004-09-08 00:28:11 +00001174 yyss = yyss1; yyvs = yyvs1;
1175#ifdef YYLSP_NEEDED
1176 yyls = yyls1;
1177#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001178#else /* no yyoverflow */
1179 /* Extend the stack our own way. */
1180 if (yystacksize >= YYMAXDEPTH)
Lev Walkin1004aa92004-09-08 00:28:11 +00001181 {
1182 yyerror("parser stack overflow");
1183 if (yyfree_stacks)
1184 {
1185 free (yyss);
1186 free (yyvs);
1187#ifdef YYLSP_NEEDED
1188 free (yyls);
1189#endif
1190 }
1191 return 2;
1192 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001193 yystacksize *= 2;
1194 if (yystacksize > YYMAXDEPTH)
1195 yystacksize = YYMAXDEPTH;
Lev Walkin1004aa92004-09-08 00:28:11 +00001196#ifndef YYSTACK_USE_ALLOCA
1197 yyfree_stacks = 1;
1198#endif
1199 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1200 __yy_memcpy ((char *)yyss, (char *)yyss1,
1201 size * (unsigned int) sizeof (*yyssp));
1202 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1203 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1204 size * (unsigned int) sizeof (*yyvsp));
1205#ifdef YYLSP_NEEDED
1206 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1207 __yy_memcpy ((char *)yyls, (char *)yyls1,
1208 size * (unsigned int) sizeof (*yylsp));
1209#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001210#endif /* no yyoverflow */
1211
Lev Walkin1004aa92004-09-08 00:28:11 +00001212 yyssp = yyss + size - 1;
1213 yyvsp = yyvs + size - 1;
1214#ifdef YYLSP_NEEDED
1215 yylsp = yyls + size - 1;
1216#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001217
Lev Walkin1004aa92004-09-08 00:28:11 +00001218#if YYDEBUG != 0
1219 if (yydebug)
1220 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1221#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001222
1223 if (yyssp >= yyss + yystacksize - 1)
1224 YYABORT;
1225 }
1226
Lev Walkin1004aa92004-09-08 00:28:11 +00001227#if YYDEBUG != 0
1228 if (yydebug)
1229 fprintf(stderr, "Entering state %d\n", yystate);
1230#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001231
1232 goto yybackup;
Lev Walkin1004aa92004-09-08 00:28:11 +00001233 yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001234
1235/* Do appropriate processing given the current state. */
1236/* Read a lookahead token if we need one and don't already have one. */
1237/* yyresume: */
1238
1239 /* First try to decide what to do without reference to lookahead token. */
1240
1241 yyn = yypact[yystate];
Lev Walkin1004aa92004-09-08 00:28:11 +00001242 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001243 goto yydefault;
1244
1245 /* Not known => get a lookahead token if don't already have one. */
1246
1247 /* yychar is either YYEMPTY or YYEOF
1248 or a valid token in external form. */
1249
1250 if (yychar == YYEMPTY)
1251 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001252#if YYDEBUG != 0
1253 if (yydebug)
1254 fprintf(stderr, "Reading a token: ");
1255#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001256 yychar = YYLEX;
1257 }
1258
Lev Walkin1004aa92004-09-08 00:28:11 +00001259 /* Convert token to internal form (in yychar1) for indexing tables with */
Lev Walkinf15320b2004-06-03 03:38:44 +00001260
Lev Walkin1004aa92004-09-08 00:28:11 +00001261 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001262 {
1263 yychar1 = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001264 yychar = YYEOF; /* Don't call YYLEX any more */
Lev Walkinf15320b2004-06-03 03:38:44 +00001265
Lev Walkin1004aa92004-09-08 00:28:11 +00001266#if YYDEBUG != 0
1267 if (yydebug)
1268 fprintf(stderr, "Now at end of input.\n");
1269#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001270 }
1271 else
1272 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001273 yychar1 = YYTRANSLATE(yychar);
Lev Walkinf15320b2004-06-03 03:38:44 +00001274
Lev Walkin1004aa92004-09-08 00:28:11 +00001275#if YYDEBUG != 0
1276 if (yydebug)
1277 {
1278 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1279 /* Give the individual parser a way to print the precise meaning
1280 of a token, for further debugging info. */
1281#ifdef YYPRINT
1282 YYPRINT (stderr, yychar, yylval);
1283#endif
1284 fprintf (stderr, ")\n");
1285 }
1286#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001287 }
1288
1289 yyn += yychar1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001290 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001291 goto yydefault;
Lev Walkin1004aa92004-09-08 00:28:11 +00001292
Lev Walkinf15320b2004-06-03 03:38:44 +00001293 yyn = yytable[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001294
1295 /* yyn is what to do for this token type in this state.
1296 Negative => reduce, -yyn is rule number.
1297 Positive => shift, yyn is new state.
1298 New state is final state => don't bother to shift,
1299 just return success.
1300 0, or most negative number => error. */
1301
1302 if (yyn < 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001303 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001304 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001305 goto yyerrlab;
1306 yyn = -yyn;
1307 goto yyreduce;
1308 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001309 else if (yyn == 0)
1310 goto yyerrlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001311
1312 if (yyn == YYFINAL)
1313 YYACCEPT;
1314
1315 /* Shift the lookahead token. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001316
1317#if YYDEBUG != 0
1318 if (yydebug)
1319 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1320#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001321
1322 /* Discard the token being shifted unless it is eof. */
1323 if (yychar != YYEOF)
1324 yychar = YYEMPTY;
1325
1326 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00001327#ifdef YYLSP_NEEDED
1328 *++yylsp = yylloc;
1329#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001330
Lev Walkin1004aa92004-09-08 00:28:11 +00001331 /* count tokens shifted since error; after three, turn off error status. */
1332 if (yyerrstatus) yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001333
1334 yystate = yyn;
1335 goto yynewstate;
1336
Lev Walkin1004aa92004-09-08 00:28:11 +00001337/* Do the default action for the current state. */
Lev Walkin459ab022004-09-07 10:39:09 +00001338yydefault:
Lev Walkin1004aa92004-09-08 00:28:11 +00001339
Lev Walkinf15320b2004-06-03 03:38:44 +00001340 yyn = yydefact[yystate];
1341 if (yyn == 0)
1342 goto yyerrlab;
1343
Lev Walkin1004aa92004-09-08 00:28:11 +00001344/* Do a reduction. yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001345yyreduce:
1346 yylen = yyr2[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001347 if (yylen > 0)
1348 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Lev Walkinf15320b2004-06-03 03:38:44 +00001349
Lev Walkin1004aa92004-09-08 00:28:11 +00001350#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00001351 if (yydebug)
1352 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001353 int i;
Lev Walkinf15320b2004-06-03 03:38:44 +00001354
Lev Walkin1004aa92004-09-08 00:28:11 +00001355 fprintf (stderr, "Reducing via rule %d (line %d), ",
1356 yyn, yyrline[yyn]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001357
1358 /* Print the symbols being reduced, and their result. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001359 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1360 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1361 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001362 }
1363#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001364
Lev Walkin1004aa92004-09-08 00:28:11 +00001365
1366 switch (yyn) {
1367
1368case 1:
Lev Walkind9574ae2005-03-24 16:22:35 +00001369#line 306 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001370{
1371 *(void **)param = yyvsp[0].a_grammar;
1372 ;
1373 break;}
1374case 2:
Lev Walkind9574ae2005-03-24 16:22:35 +00001375#line 312 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001376{
Lev Walkinf15320b2004-06-03 03:38:44 +00001377 yyval.a_grammar = asn1p_new();
1378 checkmem(yyval.a_grammar);
1379 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001380 ;
1381 break;}
1382case 3:
Lev Walkind9574ae2005-03-24 16:22:35 +00001383#line 317 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001384{
Lev Walkinf15320b2004-06-03 03:38:44 +00001385 yyval.a_grammar = yyvsp[-1].a_grammar;
1386 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001387 ;
1388 break;}
1389case 4:
Lev Walkind9574ae2005-03-24 16:22:35 +00001390#line 338 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001391{
Lev Walkinf15320b2004-06-03 03:38:44 +00001392
1393 if(yyvsp[-1].a_module) {
1394 yyval.a_module = yyvsp[-1].a_module;
1395 } else {
1396 /* There's a chance that a module is just plain empty */
1397 yyval.a_module = asn1p_module_new();
1398 }
1399 checkmem(yyval.a_module);
1400
1401 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1402 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1403 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001404 ;
1405 break;}
1406case 5:
Lev Walkind9574ae2005-03-24 16:22:35 +00001407#line 359 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001408{ yyval.a_oid = 0; ;
1409 break;}
1410case 6:
Lev Walkind9574ae2005-03-24 16:22:35 +00001411#line 360 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001412{ yyval.a_oid = yyvsp[0].a_oid; ;
1413 break;}
1414case 7:
Lev Walkind9574ae2005-03-24 16:22:35 +00001415#line 364 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001416{
Lev Walkinf15320b2004-06-03 03:38:44 +00001417 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin1004aa92004-09-08 00:28:11 +00001418 ;
1419 break;}
1420case 8:
Lev Walkind9574ae2005-03-24 16:22:35 +00001421#line 367 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001422{
Lev Walkinf15320b2004-06-03 03:38:44 +00001423 yyval.a_oid = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001424 ;
1425 break;}
1426case 9:
Lev Walkind9574ae2005-03-24 16:22:35 +00001427#line 373 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001428{
Lev Walkinf15320b2004-06-03 03:38:44 +00001429 yyval.a_oid = asn1p_oid_new();
1430 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1431 if(yyvsp[0].a_oid_arc.name)
1432 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001433 ;
1434 break;}
1435case 10:
Lev Walkind9574ae2005-03-24 16:22:35 +00001436#line 379 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001437{
Lev Walkinf15320b2004-06-03 03:38:44 +00001438 yyval.a_oid = yyvsp[-1].a_oid;
1439 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1440 if(yyvsp[0].a_oid_arc.name)
1441 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001442 ;
1443 break;}
1444case 11:
Lev Walkind9574ae2005-03-24 16:22:35 +00001445#line 388 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001446{ /* iso */
Lev Walkinf15320b2004-06-03 03:38:44 +00001447 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1448 yyval.a_oid_arc.number = -1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001449 ;
1450 break;}
1451case 12:
Lev Walkind9574ae2005-03-24 16:22:35 +00001452#line 392 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001453{ /* iso(1) */
Lev Walkinf15320b2004-06-03 03:38:44 +00001454 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1455 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001456 ;
1457 break;}
1458case 13:
Lev Walkind9574ae2005-03-24 16:22:35 +00001459#line 396 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001460{ /* 1 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001461 yyval.a_oid_arc.name = 0;
1462 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001463 ;
1464 break;}
1465case 14:
Lev Walkind9574ae2005-03-24 16:22:35 +00001466#line 406 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001467{ yyval.a_module_flags = MSF_NOFLAGS; ;
1468 break;}
1469case 15:
Lev Walkind9574ae2005-03-24 16:22:35 +00001470#line 407 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001471{
Lev Walkinf15320b2004-06-03 03:38:44 +00001472 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001473 ;
1474 break;}
1475case 16:
Lev Walkind9574ae2005-03-24 16:22:35 +00001476#line 416 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001477{
Lev Walkinf15320b2004-06-03 03:38:44 +00001478 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001479 ;
1480 break;}
1481case 17:
Lev Walkind9574ae2005-03-24 16:22:35 +00001482#line 419 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001483{
Lev Walkinf15320b2004-06-03 03:38:44 +00001484 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001485 ;
1486 break;}
1487case 18:
Lev Walkind9574ae2005-03-24 16:22:35 +00001488#line 428 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001489{
Lev Walkinf15320b2004-06-03 03:38:44 +00001490 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001491 ;
1492 break;}
1493case 19:
Lev Walkind9574ae2005-03-24 16:22:35 +00001494#line 431 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001495{
Lev Walkinf15320b2004-06-03 03:38:44 +00001496 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001497 ;
1498 break;}
1499case 20:
Lev Walkind9574ae2005-03-24 16:22:35 +00001500#line 434 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001501{
Lev Walkinf15320b2004-06-03 03:38:44 +00001502 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001503 ;
1504 break;}
1505case 21:
Lev Walkind9574ae2005-03-24 16:22:35 +00001506#line 437 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001507{
Lev Walkinf15320b2004-06-03 03:38:44 +00001508 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin1004aa92004-09-08 00:28:11 +00001509 ;
1510 break;}
1511case 22:
Lev Walkind9574ae2005-03-24 16:22:35 +00001512#line 441 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001513{
Lev Walkinf59d0752004-08-18 04:59:12 +00001514 /* X.680Amd1 specifies TAG and XER */
1515 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1516 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1517 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1518 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1519 } else {
1520 fprintf(stderr,
1521 "WARNING: %s INSTRUCTIONS at line %d: "
1522 "Unrecognized encoding reference\n",
1523 yyvsp[-1].tv_str, yylineno);
1524 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1525 }
1526 free(yyvsp[-1].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00001527 ;
1528 break;}
1529case 23:
Lev Walkind9574ae2005-03-24 16:22:35 +00001530#line 462 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001531{ yyval.a_module = 0; ;
1532 break;}
1533case 24:
Lev Walkind9574ae2005-03-24 16:22:35 +00001534#line 463 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001535{
Lev Walkinf15320b2004-06-03 03:38:44 +00001536 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001537 ;
1538 break;}
1539case 25:
Lev Walkind9574ae2005-03-24 16:22:35 +00001540#line 472 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001541{
Lev Walkinf59d0752004-08-18 04:59:12 +00001542 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001543 ;
1544 break;}
1545case 26:
Lev Walkind9574ae2005-03-24 16:22:35 +00001546#line 475 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001547{
Lev Walkinf15320b2004-06-03 03:38:44 +00001548 yyval.a_module = yyvsp[-1].a_module;
1549
Lev Walkinf59d0752004-08-18 04:59:12 +00001550 /* Behave well when one of them is skipped. */
1551 if(!(yyvsp[-1].a_module)) {
1552 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1553 break;
1554 }
1555
Lev Walkinf15320b2004-06-03 03:38:44 +00001556#ifdef MY_IMPORT
1557#error MY_IMPORT DEFINED ELSEWHERE!
1558#endif
1559#define MY_IMPORT(foo,field) do { \
Lev Walkinbc55d232004-08-13 12:31:09 +00001560 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
Lev Walkinf15320b2004-06-03 03:38:44 +00001561 TQ_ADD(&(yyval.a_module->foo), \
1562 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1563 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001564 } \
1565 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1566 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001567
1568 MY_IMPORT(imports, xp_next);
1569 MY_IMPORT(exports, xp_next);
1570 MY_IMPORT(members, next);
1571#undef MY_IMPORT
1572
Lev Walkin1004aa92004-09-08 00:28:11 +00001573 ;
1574 break;}
1575case 27:
Lev Walkind9574ae2005-03-24 16:22:35 +00001576#line 508 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001577{
Lev Walkinf15320b2004-06-03 03:38:44 +00001578 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001579 ;
1580 break;}
1581case 28:
Lev Walkind9574ae2005-03-24 16:22:35 +00001582#line 511 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001583{
Lev Walkinf15320b2004-06-03 03:38:44 +00001584 yyval.a_module = asn1p_module_new();
1585 checkmem(yyval.a_module);
1586 if(yyvsp[0].a_xports) {
1587 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1588 } else {
1589 /* "EXPORTS ALL;" ? */
1590 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001591 ;
1592 break;}
1593case 29:
Lev Walkind9574ae2005-03-24 16:22:35 +00001594#line 520 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001595{
Lev Walkinf15320b2004-06-03 03:38:44 +00001596 yyval.a_module = asn1p_module_new();
1597 checkmem(yyval.a_module);
1598 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1599 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1600 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001601 ;
1602 break;}
1603case 30:
Lev Walkind9574ae2005-03-24 16:22:35 +00001604#line 527 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001605{
Lev Walkinf59d0752004-08-18 04:59:12 +00001606 yyval.a_module = asn1p_module_new();
1607 checkmem(yyval.a_module);
1608 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1609 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1610 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001611 ;
1612 break;}
1613case 31:
Lev Walkind9574ae2005-03-24 16:22:35 +00001614#line 540 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001615{
Lev Walkinf59d0752004-08-18 04:59:12 +00001616 yyval.a_module = asn1p_module_new();
1617 checkmem(yyval.a_module);
1618 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1619 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1620 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001621 ;
1622 break;}
1623case 32:
Lev Walkind9574ae2005-03-24 16:22:35 +00001624#line 548 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001625{ asn1p_lexer_hack_push_encoding_control(); ;
1626 break;}
1627case 33:
Lev Walkind9574ae2005-03-24 16:22:35 +00001628#line 549 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001629{
Lev Walkinf59d0752004-08-18 04:59:12 +00001630 fprintf(stderr,
1631 "WARNING: ENCODING-CONTROL %s "
1632 "specification at line %d ignored\n",
1633 yyvsp[-1].tv_str, yylineno);
1634 free(yyvsp[-1].tv_str);
1635 yyval.a_module = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001636 ;
1637 break;}
1638case 34:
Lev Walkind9574ae2005-03-24 16:22:35 +00001639#line 561 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001640{
Lev Walkinf15320b2004-06-03 03:38:44 +00001641 return yyerror(
1642 "Attempt to redefine a standard basic type, "
1643 "use -ftypesXY to switch back "
1644 "to older version of ASN.1 standard");
Lev Walkin1004aa92004-09-08 00:28:11 +00001645 ;
1646 break;}
1647case 35:
Lev Walkind9574ae2005-03-24 16:22:35 +00001648#line 575 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001649{
Lev Walkinf15320b2004-06-03 03:38:44 +00001650 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001651 ;
1652 break;}
1653case 36:
Lev Walkind9574ae2005-03-24 16:22:35 +00001654#line 581 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001655{
Lev Walkinf15320b2004-06-03 03:38:44 +00001656 return yyerror("Empty IMPORTS list");
Lev Walkin1004aa92004-09-08 00:28:11 +00001657 ;
1658 break;}
1659case 37:
Lev Walkind9574ae2005-03-24 16:22:35 +00001660#line 587 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001661{
Lev Walkinf15320b2004-06-03 03:38:44 +00001662 yyval.a_module = asn1p_module_new();
1663 checkmem(yyval.a_module);
1664 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001665 ;
1666 break;}
1667case 38:
Lev Walkind9574ae2005-03-24 16:22:35 +00001668#line 592 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001669{
Lev Walkinf15320b2004-06-03 03:38:44 +00001670 yyval.a_module = yyvsp[-1].a_module;
1671 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001672 ;
1673 break;}
1674case 39:
Lev Walkind9574ae2005-03-24 16:22:35 +00001675#line 599 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001676{
Lev Walkinf15320b2004-06-03 03:38:44 +00001677 yyval.a_xports = yyvsp[-3].a_xports;
1678 yyval.a_xports->from = yyvsp[-1].tv_str;
1679 yyval.a_xports->from_oid = yyvsp[0].a_oid;
1680 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001681 ;
1682 break;}
1683case 40:
Lev Walkind9574ae2005-03-24 16:22:35 +00001684#line 608 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001685{
Lev Walkinf15320b2004-06-03 03:38:44 +00001686 yyval.a_xports = asn1p_xports_new();
1687 checkmem(yyval.a_xports);
1688 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001689 ;
1690 break;}
1691case 41:
Lev Walkind9574ae2005-03-24 16:22:35 +00001692#line 613 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001693{
Lev Walkinf15320b2004-06-03 03:38:44 +00001694 yyval.a_xports = yyvsp[-2].a_xports;
1695 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001696 ;
1697 break;}
1698case 42:
Lev Walkind9574ae2005-03-24 16:22:35 +00001699#line 620 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001700{
Lev Walkinf15320b2004-06-03 03:38:44 +00001701 yyval.a_expr = asn1p_expr_new(yylineno);
1702 checkmem(yyval.a_expr);
1703 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1704 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001705 ;
1706 break;}
1707case 43:
Lev Walkind9574ae2005-03-24 16:22:35 +00001708#line 626 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001709{ /* Completely equivalent to above */
1710 yyval.a_expr = asn1p_expr_new(yylineno);
1711 checkmem(yyval.a_expr);
1712 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1713 yyval.a_expr->expr_type = A1TC_REFERENCE;
1714 ;
1715 break;}
1716case 44:
Lev Walkind9574ae2005-03-24 16:22:35 +00001717#line 632 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001718{
Lev Walkinf15320b2004-06-03 03:38:44 +00001719 yyval.a_expr = asn1p_expr_new(yylineno);
1720 checkmem(yyval.a_expr);
1721 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1722 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001723 ;
1724 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001725case 45:
Lev Walkind9574ae2005-03-24 16:22:35 +00001726#line 641 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001727{
Lev Walkinf15320b2004-06-03 03:38:44 +00001728 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin1004aa92004-09-08 00:28:11 +00001729 ;
1730 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001731case 46:
Lev Walkind9574ae2005-03-24 16:22:35 +00001732#line 644 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001733{
Lev Walkinf15320b2004-06-03 03:38:44 +00001734 yyval.a_xports = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001735 ;
1736 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001737case 47:
Lev Walkind9574ae2005-03-24 16:22:35 +00001738#line 647 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001739{
Lev Walkinf15320b2004-06-03 03:38:44 +00001740 /* Empty EXPORTS clause effectively prohibits export. */
1741 yyval.a_xports = asn1p_xports_new();
1742 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001743 ;
1744 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001745case 48:
Lev Walkind9574ae2005-03-24 16:22:35 +00001746#line 655 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001747{
Lev Walkinf15320b2004-06-03 03:38:44 +00001748 yyval.a_xports = asn1p_xports_new();
1749 assert(yyval.a_xports);
1750 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001751 ;
1752 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001753case 49:
Lev Walkind9574ae2005-03-24 16:22:35 +00001754#line 660 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001755{
Lev Walkinf15320b2004-06-03 03:38:44 +00001756 yyval.a_xports = yyvsp[-2].a_xports;
1757 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001758 ;
1759 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001760case 50:
Lev Walkind9574ae2005-03-24 16:22:35 +00001761#line 667 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001762{
Lev Walkinf15320b2004-06-03 03:38:44 +00001763 yyval.a_expr = asn1p_expr_new(yylineno);
1764 checkmem(yyval.a_expr);
1765 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1766 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin1004aa92004-09-08 00:28:11 +00001767 ;
1768 break;}
1769case 51:
Lev Walkind9574ae2005-03-24 16:22:35 +00001770#line 673 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001771{
1772 yyval.a_expr = asn1p_expr_new(yylineno);
1773 checkmem(yyval.a_expr);
1774 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1775 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1776 ;
1777 break;}
1778case 52:
Lev Walkind9574ae2005-03-24 16:22:35 +00001779#line 679 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001780{
1781 yyval.a_expr = asn1p_expr_new(yylineno);
1782 checkmem(yyval.a_expr);
1783 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1784 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1785 ;
1786 break;}
1787case 53:
Lev Walkind9574ae2005-03-24 16:22:35 +00001788#line 689 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001789{
Lev Walkinf15320b2004-06-03 03:38:44 +00001790 yyval.a_expr = yyvsp[-4].a_expr;
1791 assert(yyval.a_expr->Identifier == 0);
1792 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1793 yyval.a_expr->meta_type = AMT_VALUESET;
1794 // take care of optValueSetBody
Lev Walkin1004aa92004-09-08 00:28:11 +00001795 ;
1796 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001797case 54:
Lev Walkind9574ae2005-03-24 16:22:35 +00001798#line 699 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001799{
Lev Walkinf15320b2004-06-03 03:38:44 +00001800 yyval.a_expr = asn1p_expr_new(yylineno);
1801 checkmem(yyval.a_expr);
1802 yyval.a_expr->reference = yyvsp[0].a_ref;
1803 yyval.a_expr->expr_type = A1TC_REFERENCE;
1804 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001805 ;
1806 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001807case 55:
Lev Walkind9574ae2005-03-24 16:22:35 +00001808#line 706 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001809{
Lev Walkinf15320b2004-06-03 03:38:44 +00001810 yyval.a_expr = asn1p_expr_new(yylineno);
1811 checkmem(yyval.a_expr);
1812 yyval.a_expr->expr_type = yyvsp[0].a_type;
1813 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001814 ;
1815 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001816case 56:
Lev Walkind9574ae2005-03-24 16:22:35 +00001817#line 715 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001818{ ;
Lev Walkin1004aa92004-09-08 00:28:11 +00001819 break;}
1820case 57:
Lev Walkind9574ae2005-03-24 16:22:35 +00001821#line 716 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001822{
1823 ;
1824 break;}
1825case 58:
Lev Walkin1e448d32005-03-24 14:26:38 +00001826#line 727 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001827{
1828 ;
1829 break;}
Lev Walkind9574ae2005-03-24 16:22:35 +00001830case 59:
1831#line 729 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001832{
1833 ;
1834 break;}
Lev Walkind9574ae2005-03-24 16:22:35 +00001835case 60:
Lev Walkin1e448d32005-03-24 14:26:38 +00001836#line 734 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001837{
1838 ;
1839 break;}
Lev Walkind9574ae2005-03-24 16:22:35 +00001840case 61:
1841#line 736 "asn1p_y.y"
1842{
1843 ;
1844 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001845case 62:
Lev Walkind9574ae2005-03-24 16:22:35 +00001846#line 752 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001847{
Lev Walkinf15320b2004-06-03 03:38:44 +00001848 yyval.a_expr = asn1p_expr_new(yylineno);
1849 checkmem(yyval.a_expr);
1850 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1851 yyval.a_expr->tag = yyvsp[-1].a_tag;
1852 yyval.a_expr->expr_type = A1TC_TYPEID;
1853 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001854 ;
1855 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001856case 63:
Lev Walkind9574ae2005-03-24 16:22:35 +00001857#line 760 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001858{
Lev Walkinf15320b2004-06-03 03:38:44 +00001859 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00001860 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00001861 assert(yyval.a_expr->expr_type);
1862 assert(yyval.a_expr->meta_type);
Lev Walkin1004aa92004-09-08 00:28:11 +00001863 ;
1864 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001865case 64:
Lev Walkind9574ae2005-03-24 16:22:35 +00001866#line 766 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001867{
Lev Walkinf15320b2004-06-03 03:38:44 +00001868 yyval.a_expr = yyvsp[0].a_expr;
1869 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1870 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1871 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin1004aa92004-09-08 00:28:11 +00001872 ;
1873 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001874case 65:
Lev Walkind9574ae2005-03-24 16:22:35 +00001875#line 782 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001876{
Lev Walkinf15320b2004-06-03 03:38:44 +00001877 yyval.a_expr = yyvsp[0].a_expr;
1878 assert(yyval.a_expr->Identifier == 0);
1879 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1880 yyval.a_expr->params = yyvsp[-3].a_plist;
1881 yyval.a_expr->meta_type = AMT_PARAMTYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001882 ;
1883 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001884case 66:
Lev Walkind9574ae2005-03-24 16:22:35 +00001885#line 792 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001886{
Lev Walkinf15320b2004-06-03 03:38:44 +00001887 int ret;
1888 yyval.a_plist = asn1p_paramlist_new(yylineno);
1889 checkmem(yyval.a_plist);
1890 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1891 checkmem(ret == 0);
1892 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1893 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001894 ;
1895 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001896case 67:
Lev Walkind9574ae2005-03-24 16:22:35 +00001897#line 801 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001898{
Lev Walkinf15320b2004-06-03 03:38:44 +00001899 int ret;
1900 yyval.a_plist = yyvsp[-2].a_plist;
1901 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1902 checkmem(ret == 0);
1903 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1904 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001905 ;
1906 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001907case 68:
Lev Walkind9574ae2005-03-24 16:22:35 +00001908#line 812 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001909{
Lev Walkinf15320b2004-06-03 03:38:44 +00001910 yyval.a_parg.governor = NULL;
1911 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001912 ;
1913 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001914case 69:
Lev Walkind9574ae2005-03-24 16:22:35 +00001915#line 816 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001916{
Lev Walkinf15320b2004-06-03 03:38:44 +00001917 int ret;
1918 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1919 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1920 checkmem(ret == 0);
1921 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001922 ;
1923 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001924case 70:
Lev Walkind9574ae2005-03-24 16:22:35 +00001925#line 823 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001926{
Lev Walkinf15320b2004-06-03 03:38:44 +00001927 int ret;
1928 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinc8092cb2005-02-18 16:34:21 +00001929 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1930 checkmem(ret == 0);
1931 yyval.a_parg.argument = yyvsp[0].tv_str;
1932 ;
1933 break;}
1934case 71:
Lev Walkind9574ae2005-03-24 16:22:35 +00001935#line 830 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00001936{
1937 int ret;
1938 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00001939 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1940 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1941 checkmem(ret == 0);
1942 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001943 ;
1944 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001945case 72:
Lev Walkind9574ae2005-03-24 16:22:35 +00001946#line 841 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001947{
Lev Walkinf15320b2004-06-03 03:38:44 +00001948 yyval.a_expr = asn1p_expr_new(yylineno);
1949 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001950 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1951 ;
1952 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001953case 73:
Lev Walkind9574ae2005-03-24 16:22:35 +00001954#line 846 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001955{
Lev Walkinf15320b2004-06-03 03:38:44 +00001956 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001957 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1958 ;
1959 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001960case 74:
Lev Walkind9574ae2005-03-24 16:22:35 +00001961#line 853 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001962{
Lev Walkinf15320b2004-06-03 03:38:44 +00001963 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001964 ;
1965 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001966case 75:
Lev Walkind9574ae2005-03-24 16:22:35 +00001967#line 856 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001968{
Lev Walkinf15320b2004-06-03 03:38:44 +00001969 yyval.a_expr = asn1p_expr_new(yylineno);
1970 checkmem(yyval.a_expr);
1971 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1972 yyval.a_expr->expr_type = A1TC_REFERENCE;
1973 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001974 ;
1975 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001976case 76:
Lev Walkind9574ae2005-03-24 16:22:35 +00001977#line 880 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001978{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1979 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001980case 77:
Lev Walkind9574ae2005-03-24 16:22:35 +00001981#line 881 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001982{ yyval.a_expr = yyvsp[0].a_expr; ;
1983 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001984case 78:
Lev Walkind9574ae2005-03-24 16:22:35 +00001985#line 884 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001986{
Lev Walkinf15320b2004-06-03 03:38:44 +00001987 yyval.a_expr = asn1p_expr_new(yylineno);
1988 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001989 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1990 ;
1991 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001992case 79:
Lev Walkind9574ae2005-03-24 16:22:35 +00001993#line 889 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001994{
Lev Walkinf15320b2004-06-03 03:38:44 +00001995 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001996 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1997 ;
1998 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00001999case 80:
Lev Walkind9574ae2005-03-24 16:22:35 +00002000#line 896 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002001{
Lev Walkin070a52d2004-08-22 03:19:54 +00002002 yyval.a_expr = yyvsp[-1].a_expr;
2003 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00002004 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkin070a52d2004-08-22 03:19:54 +00002005 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002006 ;
2007 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002008case 81:
Lev Walkind9574ae2005-03-24 16:22:35 +00002009#line 902 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002010{
Lev Walkin070a52d2004-08-22 03:19:54 +00002011 yyval.a_expr = asn1p_expr_new(yylineno);
2012 checkmem(yyval.a_expr);
2013 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2014 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
Lev Walkin1004aa92004-09-08 00:28:11 +00002015 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2016 ;
2017 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002018case 82:
Lev Walkind9574ae2005-03-24 16:22:35 +00002019#line 909 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002020{
Lev Walkin070a52d2004-08-22 03:19:54 +00002021 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002022 ;
2023 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002024case 83:
Lev Walkind9574ae2005-03-24 16:22:35 +00002025#line 915 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002026{
Lev Walkin070a52d2004-08-22 03:19:54 +00002027 yyval.a_expr = asn1p_expr_new(yylineno);
2028 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002029 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2030 ;
2031 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002032case 84:
Lev Walkind9574ae2005-03-24 16:22:35 +00002033#line 920 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002034{
Lev Walkin070a52d2004-08-22 03:19:54 +00002035 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002036 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2037 ;
2038 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002039case 85:
Lev Walkind9574ae2005-03-24 16:22:35 +00002040#line 927 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002041{
Lev Walkin070a52d2004-08-22 03:19:54 +00002042 yyval.a_expr = yyvsp[0].a_expr;
2043 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00002044 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002045 ;
2046 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002047case 86:
Lev Walkind9574ae2005-03-24 16:22:35 +00002048#line 932 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002049{
Lev Walkin070a52d2004-08-22 03:19:54 +00002050 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002051 ;
2052 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002053case 87:
Lev Walkind9574ae2005-03-24 16:22:35 +00002054#line 938 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002055{
Lev Walkinf15320b2004-06-03 03:38:44 +00002056 yyval.a_expr = yyvsp[-2].a_expr;
2057 checkmem(yyval.a_expr);
2058 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2059 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2060 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin1004aa92004-09-08 00:28:11 +00002061 ;
2062 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002063case 88:
Lev Walkind9574ae2005-03-24 16:22:35 +00002064#line 948 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002065{ yyval.a_int = 0; ;
2066 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002067case 89:
Lev Walkind9574ae2005-03-24 16:22:35 +00002068#line 949 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002069{ yyval.a_int = 1; ;
2070 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002071case 90:
Lev Walkind9574ae2005-03-24 16:22:35 +00002072#line 953 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002073{
Lev Walkinf15320b2004-06-03 03:38:44 +00002074 yyval.a_expr = asn1p_expr_new(yylineno);
2075 checkmem(yyval.a_expr);
2076 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2077 yyval.a_expr->meta_type = AMT_OBJECT;
Lev Walkin1004aa92004-09-08 00:28:11 +00002078 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2079 ;
2080 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002081case 91:
Lev Walkind9574ae2005-03-24 16:22:35 +00002082#line 960 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002083{
Lev Walkinf15320b2004-06-03 03:38:44 +00002084 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002085 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2086 ;
2087 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002088case 92:
Lev Walkind9574ae2005-03-24 16:22:35 +00002089#line 967 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002090{
Lev Walkinf15320b2004-06-03 03:38:44 +00002091 yyval.a_expr = asn1p_expr_new(yylineno);
2092 checkmem(yyval.a_expr);
2093 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2094 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2095 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2096 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002097 ;
2098 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002099case 93:
Lev Walkind9574ae2005-03-24 16:22:35 +00002100#line 975 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002101{
Lev Walkin070a52d2004-08-22 03:19:54 +00002102 yyval.a_expr = yyvsp[-2].a_expr;
2103 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002104 yyval.a_expr->marker = yyvsp[0].a_marker;
2105 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002106 ;
2107 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002108case 94:
Lev Walkind9574ae2005-03-24 16:22:35 +00002109#line 981 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002110{
Lev Walkinf15320b2004-06-03 03:38:44 +00002111 int ret;
2112 yyval.a_expr = asn1p_expr_new(yylineno);
2113 checkmem(yyval.a_expr);
2114 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2115 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2116 checkmem(yyval.a_expr->reference);
2117 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2118 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2119 checkmem(ret == 0);
2120 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2121 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002122 yyval.a_expr->marker = yyvsp[0].a_marker;
2123 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002124 ;
2125 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002126case 95:
Lev Walkind9574ae2005-03-24 16:22:35 +00002127#line 999 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002128{ yyval.a_wsynt = 0; ;
2129 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002130case 96:
Lev Walkind9574ae2005-03-24 16:22:35 +00002131#line 1000 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002132{
Lev Walkinf15320b2004-06-03 03:38:44 +00002133 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002134 ;
2135 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002136case 97:
Lev Walkind9574ae2005-03-24 16:22:35 +00002137#line 1007 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002138{ asn1p_lexer_hack_enable_with_syntax(); ;
2139 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002140case 98:
Lev Walkind9574ae2005-03-24 16:22:35 +00002141#line 1009 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002142{
Lev Walkinf15320b2004-06-03 03:38:44 +00002143 yyval.a_wsynt = yyvsp[-1].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002144 ;
2145 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002146case 99:
Lev Walkind9574ae2005-03-24 16:22:35 +00002147#line 1015 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002148{
Lev Walkinf15320b2004-06-03 03:38:44 +00002149 yyval.a_wsynt = asn1p_wsyntx_new();
2150 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002151 ;
2152 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002153case 100:
Lev Walkind9574ae2005-03-24 16:22:35 +00002154#line 1019 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002155{
Lev Walkinf15320b2004-06-03 03:38:44 +00002156 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2157 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002158 ;
2159 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002160case 101:
Lev Walkind9574ae2005-03-24 16:22:35 +00002161#line 1026 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002162{
Lev Walkinf15320b2004-06-03 03:38:44 +00002163 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 +00002164 ;
2165 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002166case 102:
Lev Walkind9574ae2005-03-24 16:22:35 +00002167#line 1029 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002168{
Lev Walkinf15320b2004-06-03 03:38:44 +00002169 asn1p_ref_t *ref;
2170 int ret;
2171 ref = asn1p_ref_new(yylineno);
2172 checkmem(ref);
2173 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2174 checkmem(ret == 0);
2175 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002176 ;
2177 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002178case 103:
Lev Walkind9574ae2005-03-24 16:22:35 +00002179#line 1041 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00002180{
2181 yyval.a_expr = asn1p_expr_new(yylineno);
2182 checkmem(yyval.a_expr);
2183 yyval.a_expr->Identifier = strdup("...");
2184 checkmem(yyval.a_expr->Identifier);
Lev Walkin144db9b2004-10-12 23:26:53 +00002185 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2186 yyval.a_expr->meta_type = AMT_TYPE;
2187 ;
2188 break;}
2189case 104:
Lev Walkind9574ae2005-03-24 16:22:35 +00002190#line 1049 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002191{
2192 yyval.a_expr = asn1p_expr_new(yylineno);
2193 checkmem(yyval.a_expr);
2194 yyval.a_expr->Identifier = strdup("...");
2195 checkmem(yyval.a_expr->Identifier);
2196 yyval.a_expr->value = yyvsp[0].a_value;
2197 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2198 yyval.a_expr->meta_type = AMT_TYPE;
2199 ;
2200 break;}
2201case 105:
Lev Walkind9574ae2005-03-24 16:22:35 +00002202#line 1058 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00002203{
2204 yyval.a_expr = asn1p_expr_new(yylineno);
2205 checkmem(yyval.a_expr);
2206 yyval.a_expr->Identifier = strdup("...");
Lev Walkind2ea1de2004-08-20 13:25:29 +00002207 yyval.a_expr->value = yyvsp[0].a_value;
2208 checkmem(yyval.a_expr->Identifier);
2209 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2210 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002211 ;
2212 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002213case 106:
Lev Walkind9574ae2005-03-24 16:22:35 +00002214#line 1070 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002215{
Lev Walkin070a52d2004-08-22 03:19:54 +00002216 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00002217 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002218 /*
2219 * Outer constraint for SEQUENCE OF and SET OF applies
2220 * to the inner type.
2221 */
2222 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2223 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2224 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2225 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2226 } else {
2227 if(yyval.a_expr->constraints) {
Lev Walkinaf120f72004-09-14 02:36:39 +00002228 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002229 } else {
2230 yyval.a_expr->constraints = yyvsp[0].a_constr;
2231 }
2232 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002233 ;
2234 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002235case 107:
Lev Walkind9574ae2005-03-24 16:22:35 +00002236#line 1092 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002237{
Lev Walkind2ea1de2004-08-20 13:25:29 +00002238 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002239 ;
2240 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002241case 108:
Lev Walkind9574ae2005-03-24 16:22:35 +00002242#line 1095 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002243{
Lev Walkinc7d939d2005-03-20 11:12:40 +00002244 yyval.a_expr = yyvsp[-1].a_expr;
2245 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2246 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
Lev Walkinf15320b2004-06-03 03:38:44 +00002247 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002248 ;
2249 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002250case 109:
Lev Walkind9574ae2005-03-24 16:22:35 +00002251#line 1101 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002252{
Lev Walkin070a52d2004-08-22 03:19:54 +00002253 yyval.a_expr = yyvsp[-1].a_expr;
2254 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002255 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
Lev Walkin070a52d2004-08-22 03:19:54 +00002256 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002257 ;
2258 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002259case 110:
Lev Walkind9574ae2005-03-24 16:22:35 +00002260#line 1107 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002261{
Lev Walkin070a52d2004-08-22 03:19:54 +00002262 yyval.a_expr = yyvsp[-1].a_expr;
2263 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002264 yyval.a_expr->expr_type = ASN_CONSTR_SET;
Lev Walkin070a52d2004-08-22 03:19:54 +00002265 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002266 ;
2267 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002268case 111:
Lev Walkind9574ae2005-03-24 16:22:35 +00002269#line 1113 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002270{
Lev Walkinceb20e72004-09-05 10:40:41 +00002271 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002272 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002273 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002274 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2275 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002276 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002277 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002278 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2279 ;
2280 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002281case 112:
Lev Walkind9574ae2005-03-24 16:22:35 +00002282#line 1123 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002283{
Lev Walkinceb20e72004-09-05 10:40:41 +00002284 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002285 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002286 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002287 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2288 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002289 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002290 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002291 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2292 ;
2293 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002294case 113:
Lev Walkind9574ae2005-03-24 16:22:35 +00002295#line 1133 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002296{
Lev Walkinceb20e72004-09-05 10:40:41 +00002297 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002298 checkmem(yyval.a_expr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002299 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002300 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002301 ;
2302 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002303case 114:
Lev Walkind9574ae2005-03-24 16:22:35 +00002304#line 1139 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002305{
Lev Walkin070a52d2004-08-22 03:19:54 +00002306 int ret;
Lev Walkinceb20e72004-09-05 10:40:41 +00002307 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002308 checkmem(yyval.a_expr);
2309 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2310 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2311 yyvsp[0].tv_str, RLT_lowercase);
2312 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002313 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002314 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002315 ;
2316 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002317case 115:
Lev Walkind9574ae2005-03-24 16:22:35 +00002318#line 1153 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002319{
Lev Walkinf15320b2004-06-03 03:38:44 +00002320 int ret;
2321 yyval.a_expr = yyvsp[-1].a_expr;
2322 assert(yyval.a_expr->expr_type == 0);
2323 assert(yyval.a_expr->meta_type == 0);
2324 assert(yyval.a_expr->reference == 0);
2325 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2326 checkmem(yyval.a_expr->reference);
2327 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2328 checkmem(ret == 0);
2329 free(yyvsp[-3].tv_str);
2330 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2331 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002332 ;
2333 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002334case 116:
Lev Walkind9574ae2005-03-24 16:22:35 +00002335#line 1177 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002336{
Lev Walkinf15320b2004-06-03 03:38:44 +00002337 yyval.a_expr = asn1p_expr_new(yylineno);
2338 checkmem(yyval.a_expr);
2339 yyval.a_expr->reference = yyvsp[0].a_ref;
2340 yyval.a_expr->expr_type = A1TC_REFERENCE;
2341 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00002342 ;
2343 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002344case 117:
Lev Walkind9574ae2005-03-24 16:22:35 +00002345#line 1184 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002346{
Lev Walkinf15320b2004-06-03 03:38:44 +00002347 yyval.a_expr = asn1p_expr_new(yylineno);
2348 checkmem(yyval.a_expr);
2349 yyval.a_expr->reference = yyvsp[0].a_ref;
2350 yyval.a_expr->expr_type = A1TC_INSTANCE;
2351 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002352 ;
2353 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002354case 118:
Lev Walkind9574ae2005-03-24 16:22:35 +00002355#line 1199 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002356{
Lev Walkinf15320b2004-06-03 03:38:44 +00002357 int ret;
2358 yyval.a_ref = asn1p_ref_new(yylineno);
2359 checkmem(yyval.a_ref);
2360 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2361 checkmem(ret == 0);
2362 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002363 ;
2364 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002365case 119:
Lev Walkind9574ae2005-03-24 16:22:35 +00002366#line 1207 "asn1p_y.y"
Lev Walkinc7d939d2005-03-20 11:12:40 +00002367{
2368 int ret;
2369 yyval.a_ref = asn1p_ref_new(yylineno);
2370 checkmem(yyval.a_ref);
2371 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2372 checkmem(ret == 0);
2373 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2374 checkmem(ret == 0);
2375 free(yyvsp[-2].tv_str);
2376 ;
2377 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002378case 120:
Lev Walkind9574ae2005-03-24 16:22:35 +00002379#line 1217 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002380{
Lev Walkinf15320b2004-06-03 03:38:44 +00002381 int ret;
2382 yyval.a_ref = asn1p_ref_new(yylineno);
2383 checkmem(yyval.a_ref);
2384 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2385 checkmem(ret == 0);
Lev Walkin9c974182004-09-15 11:59:51 +00002386 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00002387 checkmem(ret == 0);
2388 free(yyvsp[-2].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002389 ;
2390 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002391case 121:
Lev Walkind9574ae2005-03-24 16:22:35 +00002392#line 1227 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002393{
Lev Walkinf15320b2004-06-03 03:38:44 +00002394 int ret;
2395 yyval.a_ref = asn1p_ref_new(yylineno);
2396 checkmem(yyval.a_ref);
Lev Walkin9c974182004-09-15 11:59:51 +00002397 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2398 checkmem(ret == 0);
2399 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2400 checkmem(ret == 0);
2401 free(yyvsp[-2].tv_str);
2402 ;
2403 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002404case 122:
Lev Walkind9574ae2005-03-24 16:22:35 +00002405#line 1237 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002406{
2407 int ret;
2408 yyval.a_ref = asn1p_ref_new(yylineno);
2409 checkmem(yyval.a_ref);
Lev Walkinf15320b2004-06-03 03:38:44 +00002410 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2411 free(yyvsp[0].tv_str);
2412 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002413 ;
2414 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002415case 123:
Lev Walkind9574ae2005-03-24 16:22:35 +00002416#line 1245 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002417{
Lev Walkinf15320b2004-06-03 03:38:44 +00002418 int ret;
2419 yyval.a_ref = yyvsp[0].a_ref;
2420 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2421 free(yyvsp[-2].tv_str);
2422 checkmem(ret == 0);
2423 /*
2424 * Move the last element infront.
2425 */
2426 {
2427 struct asn1p_ref_component_s tmp_comp;
2428 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2429 memmove(&yyval.a_ref->components[1],
2430 &yyval.a_ref->components[0],
2431 sizeof(yyval.a_ref->components[0])
2432 * (yyval.a_ref->comp_count - 1));
2433 yyval.a_ref->components[0] = tmp_comp;
2434 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002435 ;
2436 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002437case 124:
Lev Walkind9574ae2005-03-24 16:22:35 +00002438#line 1267 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002439{
Lev Walkinf15320b2004-06-03 03:38:44 +00002440 int ret;
2441 yyval.a_ref = asn1p_ref_new(yylineno);
2442 checkmem(yyval.a_ref);
2443 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2444 free(yyvsp[0].a_refcomp.name);
2445 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002446 ;
2447 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002448case 125:
Lev Walkind9574ae2005-03-24 16:22:35 +00002449#line 1275 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002450{
Lev Walkinf15320b2004-06-03 03:38:44 +00002451 int ret;
2452 yyval.a_ref = yyvsp[-2].a_ref;
2453 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2454 free(yyvsp[0].a_refcomp.name);
2455 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002456 ;
2457 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002458case 128:
Lev Walkind9574ae2005-03-24 16:22:35 +00002459#line 1289 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002460{
Lev Walkinf15320b2004-06-03 03:38:44 +00002461 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2462 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002463 ;
2464 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002465case 129:
Lev Walkind9574ae2005-03-24 16:22:35 +00002466#line 1294 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002467{
Lev Walkinf15320b2004-06-03 03:38:44 +00002468 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2469 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002470 ;
2471 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002472case 130:
Lev Walkind9574ae2005-03-24 16:22:35 +00002473#line 1307 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002474{
Lev Walkinf15320b2004-06-03 03:38:44 +00002475 yyval.a_expr = yyvsp[-2].a_expr;
2476 assert(yyval.a_expr->Identifier == NULL);
2477 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2478 yyval.a_expr->meta_type = AMT_VALUE;
2479 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002480 ;
2481 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002482case 131:
Lev Walkind9574ae2005-03-24 16:22:35 +00002483#line 1317 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002484{
2485 yyval.a_value = asn1p_value_fromint(0);
2486 checkmem(yyval.a_value);
2487 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2488 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2489 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2490 ;
2491 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002492case 132:
Lev Walkind9574ae2005-03-24 16:22:35 +00002493#line 1324 "asn1p_y.y"
Lev Walkincbad2512005-03-24 16:27:02 +00002494{ asn1p_lexer_hack_push_opaque_state(); ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002495 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002496case 133:
Lev Walkind9574ae2005-03-24 16:22:35 +00002497#line 1324 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002498{
Lev Walkinf15320b2004-06-03 03:38:44 +00002499 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2500 checkmem(yyval.a_value);
2501 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin1004aa92004-09-08 00:28:11 +00002502 ;
2503 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002504case 134:
Lev Walkind9574ae2005-03-24 16:22:35 +00002505#line 1329 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002506{
2507 yyval.a_value = asn1p_value_fromint(0);
2508 checkmem(yyval.a_value);
2509 yyval.a_value->type = ATV_NULL;
2510 ;
2511 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002512case 135:
Lev Walkind9574ae2005-03-24 16:22:35 +00002513#line 1334 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002514{
2515 yyval.a_value = asn1p_value_fromint(0);
2516 checkmem(yyval.a_value);
2517 yyval.a_value->type = ATV_FALSE;
2518 ;
2519 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002520case 136:
Lev Walkind9574ae2005-03-24 16:22:35 +00002521#line 1339 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002522{
2523 yyval.a_value = asn1p_value_fromint(0);
2524 checkmem(yyval.a_value);
2525 yyval.a_value->type = ATV_TRUE;
2526 ;
2527 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002528case 137:
Lev Walkind9574ae2005-03-24 16:22:35 +00002529#line 1344 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002530{
Lev Walkinf15320b2004-06-03 03:38:44 +00002531 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2532 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002533 ;
2534 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002535case 138:
Lev Walkind9574ae2005-03-24 16:22:35 +00002536#line 1348 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002537{
Lev Walkinf15320b2004-06-03 03:38:44 +00002538 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2539 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002540 ;
2541 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002542case 139:
Lev Walkind9574ae2005-03-24 16:22:35 +00002543#line 1352 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002544{
Lev Walkin1e448d32005-03-24 14:26:38 +00002545 yyval.a_value = yyval.a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002546 ;
2547 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002548case 140:
Lev Walkind9574ae2005-03-24 16:22:35 +00002549#line 1355 "asn1p_y.y"
Lev Walkinc7d939d2005-03-20 11:12:40 +00002550{
2551 yyval.a_value = yyvsp[0].a_value;
2552 ;
2553 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002554case 141:
Lev Walkind9574ae2005-03-24 16:22:35 +00002555#line 1358 "asn1p_y.y"
Lev Walkin83cac2f2004-09-22 16:03:36 +00002556{
2557 yyval.a_value = yyvsp[0].a_value;
2558 ;
2559 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002560case 142:
Lev Walkind9574ae2005-03-24 16:22:35 +00002561#line 1364 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002562{
Lev Walkinf15320b2004-06-03 03:38:44 +00002563 asn1p_ref_t *ref;
2564 int ret;
2565 ref = asn1p_ref_new(yylineno);
2566 checkmem(ref);
2567 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2568 checkmem(ret == 0);
2569 yyval.a_value = asn1p_value_fromref(ref, 0);
2570 checkmem(yyval.a_value);
2571 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002572 ;
2573 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002574case 143:
Lev Walkind9574ae2005-03-24 16:22:35 +00002575#line 1375 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002576{
Lev Walkinf15320b2004-06-03 03:38:44 +00002577 asn1p_ref_t *ref;
2578 int ret;
2579 ref = asn1p_ref_new(yylineno);
2580 checkmem(ref);
2581 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2582 checkmem(ret == 0);
2583 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2584 checkmem(ret == 0);
2585 yyval.a_value = asn1p_value_fromref(ref, 0);
2586 checkmem(yyval.a_value);
2587 free(yyvsp[-2].tv_str);
2588 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002589 ;
2590 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002591case 144:
Lev Walkind9574ae2005-03-24 16:22:35 +00002592#line 1393 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002593{
2594 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2595 checkmem(yyval.a_value);
2596 ;
2597 break;}
2598case 145:
Lev Walkind9574ae2005-03-24 16:22:35 +00002599#line 1397 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002600{
Lev Walkind9574ae2005-03-24 16:22:35 +00002601 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002602 checkmem(yyval.a_value);
2603 yyval.a_value->type = ATV_TUPLE;
2604 ;
2605 break;}
2606case 146:
Lev Walkind9574ae2005-03-24 16:22:35 +00002607#line 1402 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002608{
Lev Walkind9574ae2005-03-24 16:22:35 +00002609 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002610 checkmem(yyval.a_value);
2611 yyval.a_value->type = ATV_QUADRUPLE;
2612 ;
2613 break;}
2614case 147:
Lev Walkind9574ae2005-03-24 16:22:35 +00002615#line 1436 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002616{
Lev Walkin1893ddf2005-03-20 14:28:32 +00002617 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00002618 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2619 checkmem(yyval.tv_opaque.buf);
2620 yyval.tv_opaque.buf[0] = '{';
Lev Walkin1893ddf2005-03-20 14:28:32 +00002621 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00002622 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2623 free(yyvsp[0].tv_opaque.buf);
Lev Walkin1004aa92004-09-08 00:28:11 +00002624 ;
2625 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002626case 148:
Lev Walkind9574ae2005-03-24 16:22:35 +00002627#line 1445 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002628{
Lev Walkinf15320b2004-06-03 03:38:44 +00002629 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2630 char *p = malloc(newsize + 1);
2631 checkmem(p);
2632 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2633 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2634 p[newsize] = '\0';
2635 free(yyvsp[-1].tv_opaque.buf);
2636 free(yyvsp[0].tv_opaque.buf);
2637 yyval.tv_opaque.buf = p;
2638 yyval.tv_opaque.len = newsize;
Lev Walkin1004aa92004-09-08 00:28:11 +00002639 ;
2640 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002641case 149:
Lev Walkind9574ae2005-03-24 16:22:35 +00002642#line 1460 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002643{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2644 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002645case 150:
Lev Walkind9574ae2005-03-24 16:22:35 +00002646#line 1461 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002647{ yyval.a_type = ASN_BASIC_NULL; ;
2648 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002649case 151:
Lev Walkind9574ae2005-03-24 16:22:35 +00002650#line 1462 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002651{ yyval.a_type = ASN_BASIC_REAL; ;
2652 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002653case 152:
Lev Walkind9574ae2005-03-24 16:22:35 +00002654#line 1463 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002655{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002656 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002657case 153:
Lev Walkind9574ae2005-03-24 16:22:35 +00002658#line 1464 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002659{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002660 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002661case 154:
Lev Walkind9574ae2005-03-24 16:22:35 +00002662#line 1465 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002663{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002664 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002665case 155:
Lev Walkind9574ae2005-03-24 16:22:35 +00002666#line 1466 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002667{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002668 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002669case 156:
Lev Walkind9574ae2005-03-24 16:22:35 +00002670#line 1467 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002671{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002672 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002673case 157:
Lev Walkind9574ae2005-03-24 16:22:35 +00002674#line 1468 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002675{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002676 break;}
Lev Walkinc7d939d2005-03-20 11:12:40 +00002677case 158:
Lev Walkind9574ae2005-03-24 16:22:35 +00002678#line 1469 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002679{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
Lev Walkinc7d939d2005-03-20 11:12:40 +00002680 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002681case 159:
Lev Walkind9574ae2005-03-24 16:22:35 +00002682#line 1470 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002683{ yyval.a_type = ASN_BASIC_UTCTime; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002684 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002685case 160:
Lev Walkind9574ae2005-03-24 16:22:35 +00002686#line 1471 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002687{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002688 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002689case 161:
Lev Walkind9574ae2005-03-24 16:22:35 +00002690#line 1472 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002691{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002692 break;}
Lev Walkinc8092cb2005-02-18 16:34:21 +00002693case 162:
Lev Walkind9574ae2005-03-24 16:22:35 +00002694#line 1479 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002695{ yyval.a_type = ASN_BASIC_INTEGER; ;
2696 break;}
2697case 163:
Lev Walkind9574ae2005-03-24 16:22:35 +00002698#line 1480 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002699{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2700 break;}
2701case 164:
Lev Walkind9574ae2005-03-24 16:22:35 +00002702#line 1481 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002703{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2704 break;}
2705case 165:
Lev Walkind9574ae2005-03-24 16:22:35 +00002706#line 1485 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002707{
Lev Walkinceb20e72004-09-05 10:40:41 +00002708 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002709 checkmem(yyval.a_expr);
2710 yyval.a_expr->expr_type = yyvsp[0].a_type;
2711 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002712 ;
2713 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002714case 166:
Lev Walkind9574ae2005-03-24 16:22:35 +00002715#line 1491 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002716{
Lev Walkinf15320b2004-06-03 03:38:44 +00002717 if(yyvsp[0].a_expr) {
2718 yyval.a_expr = yyvsp[0].a_expr;
2719 } else {
Lev Walkinceb20e72004-09-05 10:40:41 +00002720 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002721 checkmem(yyval.a_expr);
2722 }
2723 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2724 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002725 ;
2726 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002727case 167:
Lev Walkind9574ae2005-03-24 16:22:35 +00002728#line 1504 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002729{ yyval.a_type = ASN_STRING_BMPString; ;
2730 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002731case 168:
Lev Walkind9574ae2005-03-24 16:22:35 +00002732#line 1505 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002733{
Lev Walkinf15320b2004-06-03 03:38:44 +00002734 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00002735 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002736 ;
2737 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002738case 169:
Lev Walkind9574ae2005-03-24 16:22:35 +00002739#line 1509 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002740{
Lev Walkin9c974182004-09-15 11:59:51 +00002741 yyval.a_type = ASN_STRING_GraphicString;
2742 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002743 ;
2744 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002745case 170:
Lev Walkind9574ae2005-03-24 16:22:35 +00002746#line 1513 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002747{ yyval.a_type = ASN_STRING_IA5String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002748 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002749case 171:
Lev Walkind9574ae2005-03-24 16:22:35 +00002750#line 1514 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002751{ yyval.a_type = ASN_STRING_ISO646String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002752 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002753case 172:
Lev Walkind9574ae2005-03-24 16:22:35 +00002754#line 1515 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002755{ yyval.a_type = ASN_STRING_NumericString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002756 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002757case 173:
Lev Walkind9574ae2005-03-24 16:22:35 +00002758#line 1516 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002759{ yyval.a_type = ASN_STRING_PrintableString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002760 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002761case 174:
Lev Walkind9574ae2005-03-24 16:22:35 +00002762#line 1517 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002763{
2764 yyval.a_type = ASN_STRING_T61String;
2765 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2766 ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002767 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002768case 175:
Lev Walkind9574ae2005-03-24 16:22:35 +00002769#line 1521 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002770{ yyval.a_type = ASN_STRING_TeletexString; ;
2771 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002772case 176:
Lev Walkind9574ae2005-03-24 16:22:35 +00002773#line 1522 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002774{ yyval.a_type = ASN_STRING_UniversalString; ;
2775 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002776case 177:
Lev Walkind9574ae2005-03-24 16:22:35 +00002777#line 1523 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002778{ yyval.a_type = ASN_STRING_UTF8String; ;
2779 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002780case 178:
Lev Walkind9574ae2005-03-24 16:22:35 +00002781#line 1524 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002782{
2783 yyval.a_type = ASN_STRING_VideotexString;
2784 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2785 ;
2786 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002787case 179:
Lev Walkind9574ae2005-03-24 16:22:35 +00002788#line 1528 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002789{ yyval.a_type = ASN_STRING_VisibleString; ;
2790 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002791case 180:
Lev Walkind9574ae2005-03-24 16:22:35 +00002792#line 1529 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002793{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2794 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002795case 186:
Lev Walkind9574ae2005-03-24 16:22:35 +00002796#line 1541 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002797{ yyval.a_constr = 0; ;
2798 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002799case 187:
Lev Walkind9574ae2005-03-24 16:22:35 +00002800#line 1542 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002801{
Lev Walkinceb20e72004-09-05 10:40:41 +00002802 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002803 ;
2804 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002805case 188:
Lev Walkind9574ae2005-03-24 16:22:35 +00002806#line 1548 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002807{
Lev Walkinceb20e72004-09-05 10:40:41 +00002808 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002809 ;
2810 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002811case 189:
Lev Walkind9574ae2005-03-24 16:22:35 +00002812#line 1551 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002813{
Lev Walkinf15320b2004-06-03 03:38:44 +00002814 /*
2815 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00002816 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00002817 */
Lev Walkind2ea1de2004-08-20 13:25:29 +00002818 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002819 ;
2820 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002821case 190:
Lev Walkind9574ae2005-03-24 16:22:35 +00002822#line 1561 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002823{
Lev Walkinf15320b2004-06-03 03:38:44 +00002824 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002825 ;
2826 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002827case 191:
Lev Walkind9574ae2005-03-24 16:22:35 +00002828#line 1564 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002829{
Lev Walkinf59d0752004-08-18 04:59:12 +00002830 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002831 ;
2832 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002833case 192:
Lev Walkind9574ae2005-03-24 16:22:35 +00002834#line 1570 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002835{
Lev Walkinf15320b2004-06-03 03:38:44 +00002836 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002837 ;
2838 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002839case 193:
Lev Walkind9574ae2005-03-24 16:22:35 +00002840#line 1573 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002841{
Lev Walkinf15320b2004-06-03 03:38:44 +00002842 asn1p_constraint_t *ct;
2843 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002844 ct->type = ACT_EL_EXT;
2845 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00002846 ;
2847 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002848case 194:
Lev Walkind9574ae2005-03-24 16:22:35 +00002849#line 1579 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002850{
Lev Walkinf15320b2004-06-03 03:38:44 +00002851 asn1p_constraint_t *ct;
2852 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002853 ct->type = ACT_EL_EXT;
2854 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002855 ct = yyval.a_constr;
2856 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002857 ;
2858 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002859case 195:
Lev Walkind9574ae2005-03-24 16:22:35 +00002860#line 1590 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002861{
Lev Walkinf59d0752004-08-18 04:59:12 +00002862 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002863 ;
2864 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002865case 196:
Lev Walkind9574ae2005-03-24 16:22:35 +00002866#line 1593 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002867{
2868 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2869 ;
2870 break;}
2871case 197:
Lev Walkind9574ae2005-03-24 16:22:35 +00002872#line 1596 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002873{
Lev Walkinf15320b2004-06-03 03:38:44 +00002874 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002875 ;
2876 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002877case 198:
Lev Walkind9574ae2005-03-24 16:22:35 +00002878#line 1599 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002879{
Lev Walkinf15320b2004-06-03 03:38:44 +00002880 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002881 ;
2882 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002883case 199:
Lev Walkind9574ae2005-03-24 16:22:35 +00002884#line 1602 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002885{
Lev Walkinf15320b2004-06-03 03:38:44 +00002886 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002887 ;
2888 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002889case 200:
Lev Walkind9574ae2005-03-24 16:22:35 +00002890#line 1608 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002891{
Lev Walkinf15320b2004-06-03 03:38:44 +00002892 int ret;
2893 yyval.a_constr = asn1p_constraint_new(yylineno);
2894 checkmem(yyval.a_constr);
2895 yyval.a_constr->type = yyvsp[-3].a_ctype;
2896 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2897 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002898 ;
2899 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002900case 201:
Lev Walkind9574ae2005-03-24 16:22:35 +00002901#line 1616 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002902{
Lev Walkinf59d0752004-08-18 04:59:12 +00002903 int ret;
2904 yyval.a_constr = asn1p_constraint_new(yylineno);
2905 checkmem(yyval.a_constr);
2906 yyval.a_constr->type = ACT_CA_SET;
2907 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2908 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002909 ;
2910 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002911case 202:
Lev Walkind9574ae2005-03-24 16:22:35 +00002912#line 1624 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002913{
Lev Walkinf59d0752004-08-18 04:59:12 +00002914 yyval.a_constr = asn1p_constraint_new(yylineno);
2915 checkmem(yyval.a_constr);
2916 yyval.a_constr->type = ACT_EL_VALUE;
2917 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002918 ;
2919 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002920case 203:
Lev Walkind9574ae2005-03-24 16:22:35 +00002921#line 1630 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002922{
Lev Walkin144db9b2004-10-12 23:26:53 +00002923 yyval.a_constr = asn1p_constraint_new(yylineno);
2924 checkmem(yyval.a_constr);
Lev Walkinff7dd142005-03-20 12:58:00 +00002925 yyval.a_constr->type = ACT_EL_TYPE;
2926 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin9c974182004-09-15 11:59:51 +00002927 ;
2928 break;}
Lev Walkin9c974182004-09-15 11:59:51 +00002929case 204:
Lev Walkind9574ae2005-03-24 16:22:35 +00002930#line 1636 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002931{
Lev Walkin1e448d32005-03-24 14:26:38 +00002932 yyval.a_constr = asn1p_constraint_new(yylineno);
2933 checkmem(yyval.a_constr);
2934 yyval.a_constr->type = yyvsp[-1].a_ctype;
2935 yyval.a_constr->range_start = yyvsp[-2].a_value;
2936 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkinc8092cb2005-02-18 16:34:21 +00002937 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002938 break;}
2939case 205:
Lev Walkind9574ae2005-03-24 16:22:35 +00002940#line 1643 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002941{
2942 yyval.a_constr = asn1p_constraint_new(yylineno);
2943 checkmem(yyval.a_constr);
2944 yyval.a_constr->type = yyvsp[-1].a_ctype;
2945 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2946 yyval.a_constr->range_stop = yyvsp[0].a_value;
2947 yyval.a_constr->range_start->type = ATV_MIN;
2948 ;
2949 break;}
2950case 206:
Lev Walkind9574ae2005-03-24 16:22:35 +00002951#line 1651 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002952{
2953 yyval.a_constr = asn1p_constraint_new(yylineno);
2954 checkmem(yyval.a_constr);
2955 yyval.a_constr->type = yyvsp[-1].a_ctype;
2956 yyval.a_constr->range_start = yyvsp[-2].a_value;
2957 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2958 yyval.a_constr->range_stop->type = ATV_MAX;
2959 ;
2960 break;}
2961case 207:
Lev Walkind9574ae2005-03-24 16:22:35 +00002962#line 1659 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002963{
2964 yyval.a_constr = asn1p_constraint_new(yylineno);
2965 checkmem(yyval.a_constr);
2966 yyval.a_constr->type = yyvsp[-1].a_ctype;
2967 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2968 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2969 yyval.a_constr->range_start->type = ATV_MIN;
2970 yyval.a_constr->range_stop->type = ATV_MAX;
2971 ;
2972 break;}
2973case 208:
Lev Walkind9574ae2005-03-24 16:22:35 +00002974#line 1668 "asn1p_y.y"
Lev Walkinff7dd142005-03-20 12:58:00 +00002975{
2976 yyval.a_constr = yyvsp[0].a_constr;
2977 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002978 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002979case 209:
Lev Walkind9574ae2005-03-24 16:22:35 +00002980#line 1671 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002981{
2982 yyval.a_constr = yyvsp[0].a_constr;
2983 ;
2984 break;}
2985case 210:
Lev Walkind9574ae2005-03-24 16:22:35 +00002986#line 1675 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00002987{ asn1p_lexer_hack_push_opaque_state(); ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002988 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00002989case 211:
Lev Walkind9574ae2005-03-24 16:22:35 +00002990#line 1675 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00002991{
2992 yyval.a_constr = asn1p_constraint_new(yylineno);
2993 checkmem(yyval.a_constr);
2994 yyval.a_constr->type = ACT_CT_CTDBY;
2995 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2996 checkmem(yyval.a_constr->value);
2997 yyval.a_constr->value->type = ATV_UNPARSED;
2998 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002999 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003000case 212:
Lev Walkind9574ae2005-03-24 16:22:35 +00003001#line 1686 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003002{ yyval.a_ctype = ACT_EL_RANGE; ;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003003 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003004case 213:
Lev Walkind9574ae2005-03-24 16:22:35 +00003005#line 1687 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003006{ yyval.a_ctype = ACT_EL_RLRANGE; ;
Lev Walkinff7dd142005-03-20 12:58:00 +00003007 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003008case 214:
Lev Walkind9574ae2005-03-24 16:22:35 +00003009#line 1688 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003010{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3011 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003012case 215:
Lev Walkind9574ae2005-03-24 16:22:35 +00003013#line 1689 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003014{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3015 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003016case 216:
Lev Walkind9574ae2005-03-24 16:22:35 +00003017#line 1693 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003018{
Lev Walkinceb20e72004-09-05 10:40:41 +00003019 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003020 ;
3021 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003022case 217:
Lev Walkind9574ae2005-03-24 16:22:35 +00003023#line 1696 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003024{
Lev Walkinceb20e72004-09-05 10:40:41 +00003025 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin1004aa92004-09-08 00:28:11 +00003026 ;
3027 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003028case 218:
Lev Walkind9574ae2005-03-24 16:22:35 +00003029#line 1702 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003030{
3031 yyval.a_value = asn1p_value_fromint(0);
3032 checkmem(yyval.a_value);
3033 yyval.a_value->type = ATV_FALSE;
3034 ;
3035 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003036case 219:
Lev Walkind9574ae2005-03-24 16:22:35 +00003037#line 1707 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003038{
3039 yyval.a_value = asn1p_value_fromint(1);
3040 checkmem(yyval.a_value);
3041 yyval.a_value->type = ATV_TRUE;
3042 ;
3043 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003044case 220:
Lev Walkind9574ae2005-03-24 16:22:35 +00003045#line 1712 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003046{
Lev Walkinf15320b2004-06-03 03:38:44 +00003047 yyval.a_value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003048 ;
3049 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003050case 221:
Lev Walkind9574ae2005-03-24 16:22:35 +00003051#line 1715 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003052{
Lev Walkin1e448d32005-03-24 14:26:38 +00003053 yyval.a_value = yyvsp[0].a_value;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003054 ;
3055 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003056case 222:
Lev Walkind9574ae2005-03-24 16:22:35 +00003057#line 1718 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003058{
Lev Walkinf15320b2004-06-03 03:38:44 +00003059 asn1p_ref_t *ref;
3060 int ret;
3061 ref = asn1p_ref_new(yylineno);
3062 checkmem(ref);
3063 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3064 checkmem(ret == 0);
3065 yyval.a_value = asn1p_value_fromref(ref, 0);
3066 checkmem(yyval.a_value);
3067 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003068 ;
3069 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003070case 223:
Lev Walkind9574ae2005-03-24 16:22:35 +00003071#line 1732 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003072{
Lev Walkinc8092cb2005-02-18 16:34:21 +00003073 asn1p_ref_t *ref;
3074 int ret;
3075 ref = asn1p_ref_new(yylineno);
3076 checkmem(ref);
3077 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3078 checkmem(ret == 0);
3079 yyval.a_value = asn1p_value_fromref(ref, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003080 checkmem(yyval.a_value);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003081 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003082 ;
3083 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003084case 224:
Lev Walkind9574ae2005-03-24 16:22:35 +00003085#line 1746 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003086{
Lev Walkinf15320b2004-06-03 03:38:44 +00003087 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003088 ;
3089 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003090case 225:
Lev Walkind9574ae2005-03-24 16:22:35 +00003091#line 1752 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003092{
Lev Walkinf15320b2004-06-03 03:38:44 +00003093 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003094 ;
3095 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003096case 226:
Lev Walkind9574ae2005-03-24 16:22:35 +00003097#line 1755 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003098{
Lev Walkinf15320b2004-06-03 03:38:44 +00003099 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003100 ;
3101 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003102case 227:
Lev Walkind9574ae2005-03-24 16:22:35 +00003103#line 1761 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003104{
Lev Walkinf15320b2004-06-03 03:38:44 +00003105 yyval.a_constr = asn1p_constraint_new(yylineno);
3106 checkmem(yyval.a_constr);
3107 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003108 ;
3109 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003110case 228:
Lev Walkind9574ae2005-03-24 16:22:35 +00003111#line 1766 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003112{
Lev Walkinf15320b2004-06-03 03:38:44 +00003113 yyval.a_constr = asn1p_constraint_new(yylineno);
3114 checkmem(yyval.a_constr);
3115 yyval.a_constr->type = ACT_EL_VALUE;
3116 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3117 yyval.a_constr->presence = yyvsp[0].a_pres;
Lev Walkin1004aa92004-09-08 00:28:11 +00003118 ;
3119 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003120case 229:
Lev Walkind9574ae2005-03-24 16:22:35 +00003121#line 1779 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003122{ yyval.a_pres = ACPRES_DEFAULT; ;
3123 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003124case 230:
Lev Walkind9574ae2005-03-24 16:22:35 +00003125#line 1780 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003126{ yyval.a_pres = yyvsp[0].a_pres; ;
3127 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003128case 231:
Lev Walkind9574ae2005-03-24 16:22:35 +00003129#line 1784 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003130{
Lev Walkinf15320b2004-06-03 03:38:44 +00003131 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003132 ;
3133 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003134case 232:
Lev Walkind9574ae2005-03-24 16:22:35 +00003135#line 1787 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003136{
Lev Walkinf15320b2004-06-03 03:38:44 +00003137 yyval.a_pres = ACPRES_ABSENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003138 ;
3139 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003140case 233:
Lev Walkind9574ae2005-03-24 16:22:35 +00003141#line 1790 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003142{
Lev Walkinf15320b2004-06-03 03:38:44 +00003143 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkin1004aa92004-09-08 00:28:11 +00003144 ;
3145 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003146case 234:
Lev Walkind9574ae2005-03-24 16:22:35 +00003147#line 1796 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003148{
3149 yyval.a_constr = yyvsp[0].a_constr;
3150 ;
3151 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003152case 235:
Lev Walkind9574ae2005-03-24 16:22:35 +00003153#line 1799 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003154{
3155 yyval.a_constr = yyvsp[0].a_constr;
3156 ;
3157 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003158case 236:
Lev Walkind9574ae2005-03-24 16:22:35 +00003159#line 1808 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003160{
Lev Walkinf15320b2004-06-03 03:38:44 +00003161 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3162 asn1p_constraint_t *ct;
3163 int ret;
3164 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3165 checkmem(ret == 0);
3166 ct = asn1p_constraint_new(yylineno);
3167 checkmem(yyval.a_constr);
3168 ct->type = ACT_EL_VALUE;
3169 ct->value = asn1p_value_fromref(ref, 0);
3170 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003171 ;
3172 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003173case 237:
Lev Walkind9574ae2005-03-24 16:22:35 +00003174#line 1823 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003175{
Lev Walkinf15320b2004-06-03 03:38:44 +00003176 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003177 ;
3178 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003179case 238:
Lev Walkind9574ae2005-03-24 16:22:35 +00003180#line 1829 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003181{
Lev Walkinf15320b2004-06-03 03:38:44 +00003182 yyval.a_constr = asn1p_constraint_new(yylineno);
3183 checkmem(yyval.a_constr);
3184 yyval.a_constr->type = ACT_EL_VALUE;
3185 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003186 ;
3187 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003188case 239:
Lev Walkind9574ae2005-03-24 16:22:35 +00003189#line 1835 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003190{
Lev Walkinf15320b2004-06-03 03:38:44 +00003191 asn1p_constraint_t *ct;
3192 ct = asn1p_constraint_new(yylineno);
3193 checkmem(ct);
3194 ct->type = ACT_EL_VALUE;
3195 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3196 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00003197 ;
3198 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003199case 240:
Lev Walkind9574ae2005-03-24 16:22:35 +00003200#line 1849 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003201{
Lev Walkinf15320b2004-06-03 03:38:44 +00003202 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3203 int ret;
3204 *p = '@';
3205 strcpy(p + 1, yyvsp[0].tv_str);
3206 yyval.a_ref = asn1p_ref_new(yylineno);
3207 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3208 checkmem(ret == 0);
3209 free(p);
3210 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003211 ;
3212 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003213case 241:
Lev Walkind9574ae2005-03-24 16:22:35 +00003214#line 1860 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003215{
Lev Walkinf15320b2004-06-03 03:38:44 +00003216 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3217 int ret;
3218 p[0] = '@';
3219 p[1] = '.';
3220 strcpy(p + 2, yyvsp[0].tv_str);
3221 yyval.a_ref = asn1p_ref_new(yylineno);
3222 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3223 checkmem(ret == 0);
3224 free(p);
3225 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003226 ;
3227 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003228case 242:
Lev Walkind9574ae2005-03-24 16:22:35 +00003229#line 1876 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003230{
Lev Walkinf15320b2004-06-03 03:38:44 +00003231 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003232 ;
3233 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003234case 243:
Lev Walkind9574ae2005-03-24 16:22:35 +00003235#line 1879 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003236{
Lev Walkinf15320b2004-06-03 03:38:44 +00003237 int l1 = strlen(yyvsp[-2].tv_str);
3238 int l3 = strlen(yyvsp[0].tv_str);
3239 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3240 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3241 yyval.tv_str[l1] = '.';
3242 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3243 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin1004aa92004-09-08 00:28:11 +00003244 ;
3245 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003246case 244:
Lev Walkind9574ae2005-03-24 16:22:35 +00003247#line 1897 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003248{
Lev Walkin9c974182004-09-15 11:59:51 +00003249 yyval.a_marker.flags = EM_NOMARK;
3250 yyval.a_marker.default_value = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00003251 ;
3252 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003253case 245:
Lev Walkind9574ae2005-03-24 16:22:35 +00003254#line 1901 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003255{ yyval.a_marker = yyvsp[0].a_marker; ;
Lev Walkinec208e62004-09-14 02:44:07 +00003256 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003257case 246:
Lev Walkind9574ae2005-03-24 16:22:35 +00003258#line 1905 "asn1p_y.y"
Lev Walkinec208e62004-09-14 02:44:07 +00003259{
Lev Walkin9c974182004-09-15 11:59:51 +00003260 yyval.a_marker.flags = EM_OPTIONAL;
3261 yyval.a_marker.default_value = 0;
Lev Walkinec208e62004-09-14 02:44:07 +00003262 ;
3263 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003264case 247:
Lev Walkind9574ae2005-03-24 16:22:35 +00003265#line 1909 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003266{
3267 yyval.a_marker.flags = EM_DEFAULT;
3268 yyval.a_marker.default_value = yyvsp[0].a_value;
3269 ;
3270 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003271case 248:
Lev Walkind9574ae2005-03-24 16:22:35 +00003272#line 1932 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003273{
Lev Walkinceb20e72004-09-05 10:40:41 +00003274 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003275 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003276 ;
3277 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003278case 249:
Lev Walkind9574ae2005-03-24 16:22:35 +00003279#line 1936 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003280{
Lev Walkinf15320b2004-06-03 03:38:44 +00003281 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003282 ;
3283 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003284case 250:
Lev Walkind9574ae2005-03-24 16:22:35 +00003285#line 1942 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003286{
Lev Walkinceb20e72004-09-05 10:40:41 +00003287 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003288 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003289 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3290 ;
3291 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003292case 251:
Lev Walkind9574ae2005-03-24 16:22:35 +00003293#line 1947 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003294{
Lev Walkinf15320b2004-06-03 03:38:44 +00003295 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003296 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3297 ;
3298 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003299case 252:
Lev Walkind9574ae2005-03-24 16:22:35 +00003300#line 1954 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003301{
Lev Walkinceb20e72004-09-05 10:40:41 +00003302 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003303 checkmem(yyval.a_expr);
3304 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3305 yyval.a_expr->meta_type = AMT_VALUE;
3306 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003307 ;
3308 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003309case 253:
Lev Walkind9574ae2005-03-24 16:22:35 +00003310#line 1961 "asn1p_y.y"
Lev Walkinff7dd142005-03-20 12:58:00 +00003311{
3312 yyval.a_expr = asn1p_expr_new(yylineno);
3313 checkmem(yyval.a_expr);
3314 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3315 yyval.a_expr->meta_type = AMT_VALUE;
3316 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3317 yyval.a_expr->value = yyvsp[-1].a_value;
3318 ;
3319 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003320case 254:
Lev Walkind9574ae2005-03-24 16:22:35 +00003321#line 1969 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003322{
Lev Walkinceb20e72004-09-05 10:40:41 +00003323 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003324 checkmem(yyval.a_expr);
3325 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3326 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1893ddf2005-03-20 14:28:32 +00003327 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3328 yyval.a_expr->value = yyvsp[-1].a_value;
3329 ;
3330 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003331case 255:
Lev Walkind9574ae2005-03-24 16:22:35 +00003332#line 1977 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003333{
3334 yyval.a_expr = asn1p_expr_new(yylineno);
3335 checkmem(yyval.a_expr);
3336 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3337 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkinf15320b2004-06-03 03:38:44 +00003338 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003339 ;
3340 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003341case 256:
Lev Walkind9574ae2005-03-24 16:22:35 +00003342#line 1984 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003343{
Lev Walkinceb20e72004-09-05 10:40:41 +00003344 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003345 checkmem(yyval.a_expr);
3346 yyval.a_expr->Identifier = strdup("...");
3347 checkmem(yyval.a_expr->Identifier);
3348 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3349 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003350 ;
3351 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003352case 257:
Lev Walkind9574ae2005-03-24 16:22:35 +00003353#line 1995 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003354{
3355 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3356 checkmem(yyval.a_value);
3357 ;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003358 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003359case 258:
Lev Walkind9574ae2005-03-24 16:22:35 +00003360#line 1999 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003361{
3362 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3363 checkmem(yyval.a_value);
3364 ;
Lev Walkinff7dd142005-03-20 12:58:00 +00003365 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003366case 259:
Lev Walkind9574ae2005-03-24 16:22:35 +00003367#line 2030 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003368{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3369 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003370case 260:
Lev Walkind9574ae2005-03-24 16:22:35 +00003371#line 2031 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003372{ yyval.a_tag = yyvsp[0].a_tag; ;
3373 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003374case 261:
Lev Walkind9574ae2005-03-24 16:22:35 +00003375#line 2035 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003376{
Lev Walkinc603f102005-01-23 09:51:44 +00003377 yyval.a_tag = yyvsp[-1].a_tag;
3378 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin1004aa92004-09-08 00:28:11 +00003379 ;
3380 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003381case 262:
Lev Walkind9574ae2005-03-24 16:22:35 +00003382#line 2042 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003383{
Lev Walkinc603f102005-01-23 09:51:44 +00003384 yyval.a_tag = yyvsp[-2].a_tag;
3385 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00003386 ;
3387 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003388case 263:
Lev Walkind9574ae2005-03-24 16:22:35 +00003389#line 2048 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003390{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00003391 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003392case 264:
Lev Walkind9574ae2005-03-24 16:22:35 +00003393#line 2049 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003394{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
Lev Walkin83cac2f2004-09-22 16:03:36 +00003395 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003396case 265:
Lev Walkind9574ae2005-03-24 16:22:35 +00003397#line 2050 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003398{ yyval.a_tag.tag_class = TC_APPLICATION; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003399 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003400case 266:
Lev Walkind9574ae2005-03-24 16:22:35 +00003401#line 2051 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003402{ yyval.a_tag.tag_class = TC_PRIVATE; ;
3403 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003404case 267:
Lev Walkind9574ae2005-03-24 16:22:35 +00003405#line 2055 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003406{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3407 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003408case 268:
Lev Walkind9574ae2005-03-24 16:22:35 +00003409#line 2056 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003410{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003411 break;}
Lev Walkin1e448d32005-03-24 14:26:38 +00003412case 269:
Lev Walkind9574ae2005-03-24 16:22:35 +00003413#line 2057 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003414{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003415 break;}
Lev Walkin1893ddf2005-03-20 14:28:32 +00003416case 270:
Lev Walkind9574ae2005-03-24 16:22:35 +00003417#line 2061 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003418{
Lev Walkin1e448d32005-03-24 14:26:38 +00003419 checkmem(yyvsp[0].tv_str);
Lev Walkin1893ddf2005-03-20 14:28:32 +00003420 yyval.tv_str = yyvsp[0].tv_str;
3421 ;
3422 break;}
3423case 271:
Lev Walkind9574ae2005-03-24 16:22:35 +00003424#line 2065 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00003425{
3426 checkmem(yyvsp[0].tv_str);
3427 yyval.tv_str = yyvsp[0].tv_str;
3428 ;
3429 break;}
3430case 272:
Lev Walkind9574ae2005-03-24 16:22:35 +00003431#line 2073 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00003432{
3433 checkmem(yyvsp[0].tv_str);
3434 yyval.tv_str = yyvsp[0].tv_str;
3435 ;
3436 break;}
3437case 273:
Lev Walkind9574ae2005-03-24 16:22:35 +00003438#line 2080 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00003439{ yyval.tv_str = 0; ;
3440 break;}
3441case 274:
Lev Walkind9574ae2005-03-24 16:22:35 +00003442#line 2081 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00003443{
3444 yyval.tv_str = yyvsp[0].tv_str;
3445 ;
3446 break;}
3447case 275:
Lev Walkind9574ae2005-03-24 16:22:35 +00003448#line 2086 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003449{
Lev Walkinceb20e72004-09-05 10:40:41 +00003450 checkmem(yyvsp[0].tv_str);
3451 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003452 ;
3453 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00003454}
3455 /* the action file gets copied in in place of this dollarsign */
3456#line 543 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00003457
3458 yyvsp -= yylen;
3459 yyssp -= yylen;
Lev Walkin1004aa92004-09-08 00:28:11 +00003460#ifdef YYLSP_NEEDED
3461 yylsp -= yylen;
3462#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003463
Lev Walkin1004aa92004-09-08 00:28:11 +00003464#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00003465 if (yydebug)
3466 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003467 short *ssp1 = yyss - 1;
3468 fprintf (stderr, "state stack now");
3469 while (ssp1 != yyssp)
3470 fprintf (stderr, " %d", *++ssp1);
3471 fprintf (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003472 }
3473#endif
3474
3475 *++yyvsp = yyval;
3476
Lev Walkin1004aa92004-09-08 00:28:11 +00003477#ifdef YYLSP_NEEDED
3478 yylsp++;
3479 if (yylen == 0)
3480 {
3481 yylsp->first_line = yylloc.first_line;
3482 yylsp->first_column = yylloc.first_column;
3483 yylsp->last_line = (yylsp-1)->last_line;
3484 yylsp->last_column = (yylsp-1)->last_column;
3485 yylsp->text = 0;
3486 }
3487 else
3488 {
3489 yylsp->last_line = (yylsp+yylen-1)->last_line;
3490 yylsp->last_column = (yylsp+yylen-1)->last_column;
3491 }
3492#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003493
Lev Walkin1004aa92004-09-08 00:28:11 +00003494 /* Now "shift" the result of the reduction.
3495 Determine what state that goes to,
3496 based on the state we popped back to
3497 and the rule number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003498
3499 yyn = yyr1[yyn];
3500
Lev Walkin1004aa92004-09-08 00:28:11 +00003501 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3502 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003503 yystate = yytable[yystate];
3504 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003505 yystate = yydefgoto[yyn - YYNTBASE];
Lev Walkinf15320b2004-06-03 03:38:44 +00003506
3507 goto yynewstate;
3508
Lev Walkin1004aa92004-09-08 00:28:11 +00003509yyerrlab: /* here on detecting error */
Lev Walkinf15320b2004-06-03 03:38:44 +00003510
Lev Walkin1004aa92004-09-08 00:28:11 +00003511 if (! yyerrstatus)
3512 /* If not already recovering from an error, report this error. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003513 {
3514 ++yynerrs;
Lev Walkin1004aa92004-09-08 00:28:11 +00003515
3516#ifdef YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003517 yyn = yypact[yystate];
3518
Lev Walkin1004aa92004-09-08 00:28:11 +00003519 if (yyn > YYFLAG && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003520 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003521 int size = 0;
3522 char *msg;
3523 int x, count;
Lev Walkinf15320b2004-06-03 03:38:44 +00003524
Lev Walkin1004aa92004-09-08 00:28:11 +00003525 count = 0;
3526 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3527 for (x = (yyn < 0 ? -yyn : 0);
3528 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3529 if (yycheck[x + yyn] == x)
3530 size += strlen(yytname[x]) + 15, count++;
3531 msg = (char *) malloc(size + 15);
3532 if (msg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003533 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003534 strcpy(msg, "parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003535
Lev Walkin1004aa92004-09-08 00:28:11 +00003536 if (count < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003537 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003538 count = 0;
3539 for (x = (yyn < 0 ? -yyn : 0);
3540 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3541 if (yycheck[x + yyn] == x)
Lev Walkinf15320b2004-06-03 03:38:44 +00003542 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003543 strcat(msg, count == 0 ? ", expecting `" : " or `");
3544 strcat(msg, yytname[x]);
3545 strcat(msg, "'");
3546 count++;
Lev Walkinf15320b2004-06-03 03:38:44 +00003547 }
3548 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003549 yyerror(msg);
3550 free(msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003551 }
3552 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003553 yyerror ("parse error; also virtual memory exceeded");
Lev Walkinf15320b2004-06-03 03:38:44 +00003554 }
3555 else
3556#endif /* YYERROR_VERBOSE */
Lev Walkin1004aa92004-09-08 00:28:11 +00003557 yyerror("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003558 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003559
Lev Walkinf15320b2004-06-03 03:38:44 +00003560 goto yyerrlab1;
Lev Walkin1004aa92004-09-08 00:28:11 +00003561yyerrlab1: /* here on error raised explicitly by an action */
Lev Walkinf15320b2004-06-03 03:38:44 +00003562
3563 if (yyerrstatus == 3)
3564 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003565 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003566
Lev Walkin1004aa92004-09-08 00:28:11 +00003567 /* return failure if at end of input */
Lev Walkinf15320b2004-06-03 03:38:44 +00003568 if (yychar == YYEOF)
Lev Walkin1004aa92004-09-08 00:28:11 +00003569 YYABORT;
Lev Walkinf15320b2004-06-03 03:38:44 +00003570
Lev Walkin1004aa92004-09-08 00:28:11 +00003571#if YYDEBUG != 0
3572 if (yydebug)
3573 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3574#endif
3575
Lev Walkinf15320b2004-06-03 03:38:44 +00003576 yychar = YYEMPTY;
3577 }
3578
Lev Walkin1004aa92004-09-08 00:28:11 +00003579 /* Else will try to reuse lookahead token
3580 after shifting the error token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003581
Lev Walkin1004aa92004-09-08 00:28:11 +00003582 yyerrstatus = 3; /* Each real token shifted decrements this */
Lev Walkinf15320b2004-06-03 03:38:44 +00003583
Lev Walkin1004aa92004-09-08 00:28:11 +00003584 goto yyerrhandle;
Lev Walkin459ab022004-09-07 10:39:09 +00003585
Lev Walkin1004aa92004-09-08 00:28:11 +00003586yyerrdefault: /* current state does not do anything special for the error token. */
Lev Walkin459ab022004-09-07 10:39:09 +00003587
Lev Walkin1004aa92004-09-08 00:28:11 +00003588#if 0
3589 /* This is wrong; only states that explicitly want error tokens
3590 should shift them. */
3591 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3592 if (yyn) goto yydefault;
Lev Walkinceb20e72004-09-05 10:40:41 +00003593#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003594
3595yyerrpop: /* pop the current state because it cannot handle the error token */
3596
3597 if (yyssp == yyss) YYABORT;
3598 yyvsp--;
3599 yystate = *--yyssp;
3600#ifdef YYLSP_NEEDED
3601 yylsp--;
3602#endif
3603
3604#if YYDEBUG != 0
3605 if (yydebug)
3606 {
3607 short *ssp1 = yyss - 1;
3608 fprintf (stderr, "Error: state stack now");
3609 while (ssp1 != yyssp)
3610 fprintf (stderr, " %d", *++ssp1);
3611 fprintf (stderr, "\n");
Lev Walkinceb20e72004-09-05 10:40:41 +00003612 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003613#endif
3614
3615yyerrhandle:
3616
3617 yyn = yypact[yystate];
3618 if (yyn == YYFLAG)
3619 goto yyerrdefault;
3620
3621 yyn += YYTERROR;
3622 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3623 goto yyerrdefault;
3624
3625 yyn = yytable[yyn];
3626 if (yyn < 0)
3627 {
3628 if (yyn == YYFLAG)
3629 goto yyerrpop;
3630 yyn = -yyn;
3631 goto yyreduce;
3632 }
3633 else if (yyn == 0)
3634 goto yyerrpop;
Lev Walkinf15320b2004-06-03 03:38:44 +00003635
3636 if (yyn == YYFINAL)
3637 YYACCEPT;
3638
Lev Walkin1004aa92004-09-08 00:28:11 +00003639#if YYDEBUG != 0
3640 if (yydebug)
3641 fprintf(stderr, "Shifting error token, ");
3642#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003643
3644 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00003645#ifdef YYLSP_NEEDED
3646 *++yylsp = yylloc;
3647#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003648
3649 yystate = yyn;
3650 goto yynewstate;
3651
Lev Walkin1004aa92004-09-08 00:28:11 +00003652 yyacceptlab:
3653 /* YYACCEPT comes here. */
3654 if (yyfree_stacks)
3655 {
3656 free (yyss);
3657 free (yyvs);
3658#ifdef YYLSP_NEEDED
3659 free (yyls);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003660#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003661 }
3662 return 0;
Lev Walkin459ab022004-09-07 10:39:09 +00003663
Lev Walkin1004aa92004-09-08 00:28:11 +00003664 yyabortlab:
3665 /* YYABORT comes here. */
3666 if (yyfree_stacks)
3667 {
3668 free (yyss);
3669 free (yyvs);
3670#ifdef YYLSP_NEEDED
3671 free (yyls);
Lev Walkin459ab022004-09-07 10:39:09 +00003672#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003673 }
3674 return 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003675}
Lev Walkind9574ae2005-03-24 16:22:35 +00003676#line 2092 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00003677
3678
3679
3680/*
3681 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3682 */
3683static asn1p_value_t *
3684_convert_bitstring2binary(char *str, int base) {
3685 asn1p_value_t *val;
3686 int slen;
3687 int memlen;
3688 int baselen;
3689 int bits;
3690 uint8_t *binary_vector;
3691 uint8_t *bv_ptr;
3692 uint8_t cur_val;
3693
3694 assert(str);
3695 assert(str[0] == '\'');
3696
3697 switch(base) {
3698 case 'B':
3699 baselen = 1;
3700 break;
3701 case 'H':
3702 baselen = 4;
3703 break;
3704 default:
3705 assert(base == 'B' || base == 'H');
3706 errno = EINVAL;
3707 return NULL;
3708 }
3709
3710 slen = strlen(str);
3711 assert(str[slen - 1] == base);
3712 assert(str[slen - 2] == '\'');
3713
3714 memlen = slen / (8 / baselen); /* Conservative estimate */
3715
3716 bv_ptr = binary_vector = malloc(memlen + 1);
3717 if(bv_ptr == NULL)
3718 /* ENOMEM */
3719 return NULL;
3720
3721 cur_val = 0;
3722 bits = 0;
3723 while(*(++str) != '\'') {
3724 switch(baselen) {
3725 case 1:
3726 switch(*str) {
3727 case '1':
3728 cur_val |= 1 << (7 - (bits % 8));
3729 case '0':
3730 break;
3731 default:
3732 assert(!"_y UNREACH1");
3733 case ' ': case '\r': case '\n':
3734 continue;
3735 }
3736 break;
3737 case 4:
3738 switch(*str) {
3739 case '0': case '1': case '2': case '3': case '4':
3740 case '5': case '6': case '7': case '8': case '9':
3741 cur_val |= (*str - '0') << (4 - (bits % 8));
3742 break;
3743 case 'A': case 'B': case 'C':
3744 case 'D': case 'E': case 'F':
3745 cur_val |= ((*str - 'A') + 10)
3746 << (4 - (bits % 8));
3747 break;
3748 default:
3749 assert(!"_y UNREACH2");
3750 case ' ': case '\r': case '\n':
3751 continue;
3752 }
3753 break;
3754 }
3755
3756 bits += baselen;
3757 if((bits % 8) == 0) {
3758 *bv_ptr++ = cur_val;
3759 cur_val = 0;
3760 }
3761 }
3762
3763 *bv_ptr = cur_val;
3764 assert((bv_ptr - binary_vector) <= memlen);
3765
3766 val = asn1p_value_frombits(binary_vector, bits, 0);
3767 if(val == NULL) {
3768 free(binary_vector);
3769 }
3770
3771 return val;
3772}
3773
3774extern char *asn1p_text;
3775
3776int
3777yyerror(const char *msg) {
3778 fprintf(stderr,
3779 "ASN.1 grammar parse error "
3780 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00003781 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003782 return -1;
3783}
3784
3785