blob: b5c625626716b73e1e348629f7da5f26f9c45291 [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
Lev Walkin9d542d22006-03-14 16:31:37 +000028#define TOK_Literal 271
29#define TOK_ABSENT 272
30#define TOK_ABSTRACT_SYNTAX 273
31#define TOK_ALL 274
32#define TOK_ANY 275
33#define TOK_APPLICATION 276
34#define TOK_AUTOMATIC 277
35#define TOK_BEGIN 278
36#define TOK_BIT 279
37#define TOK_BMPString 280
38#define TOK_BOOLEAN 281
39#define TOK_BY 282
40#define TOK_CHARACTER 283
41#define TOK_CHOICE 284
42#define TOK_CLASS 285
43#define TOK_COMPONENT 286
44#define TOK_COMPONENTS 287
45#define TOK_CONSTRAINED 288
46#define TOK_CONTAINING 289
47#define TOK_DEFAULT 290
48#define TOK_DEFINITIONS 291
49#define TOK_DEFINED 292
50#define TOK_EMBEDDED 293
51#define TOK_ENCODED 294
52#define TOK_ENCODING_CONTROL 295
53#define TOK_END 296
54#define TOK_ENUMERATED 297
55#define TOK_EXPLICIT 298
56#define TOK_EXPORTS 299
57#define TOK_EXTENSIBILITY 300
58#define TOK_EXTERNAL 301
59#define TOK_FALSE 302
60#define TOK_FROM 303
61#define TOK_GeneralizedTime 304
62#define TOK_GeneralString 305
63#define TOK_GraphicString 306
64#define TOK_IA5String 307
65#define TOK_IDENTIFIER 308
66#define TOK_IMPLICIT 309
67#define TOK_IMPLIED 310
68#define TOK_IMPORTS 311
69#define TOK_INCLUDES 312
70#define TOK_INSTANCE 313
71#define TOK_INSTRUCTIONS 314
72#define TOK_INTEGER 315
73#define TOK_ISO646String 316
74#define TOK_MAX 317
75#define TOK_MIN 318
76#define TOK_MINUS_INFINITY 319
77#define TOK_NULL 320
78#define TOK_NumericString 321
79#define TOK_OBJECT 322
80#define TOK_ObjectDescriptor 323
81#define TOK_OCTET 324
82#define TOK_OF 325
83#define TOK_OPTIONAL 326
84#define TOK_PATTERN 327
85#define TOK_PDV 328
86#define TOK_PLUS_INFINITY 329
87#define TOK_PRESENT 330
88#define TOK_PrintableString 331
89#define TOK_PRIVATE 332
90#define TOK_REAL 333
91#define TOK_RELATIVE_OID 334
92#define TOK_SEQUENCE 335
93#define TOK_SET 336
94#define TOK_SIZE 337
95#define TOK_STRING 338
96#define TOK_SYNTAX 339
97#define TOK_T61String 340
98#define TOK_TAGS 341
99#define TOK_TeletexString 342
100#define TOK_TRUE 343
101#define TOK_TYPE_IDENTIFIER 344
102#define TOK_UNIQUE 345
103#define TOK_UNIVERSAL 346
104#define TOK_UniversalString 347
105#define TOK_UTCTime 348
106#define TOK_UTF8String 349
107#define TOK_VideotexString 350
108#define TOK_VisibleString 351
109#define TOK_WITH 352
110#define TOK_EXCEPT 353
111#define TOK_INTERSECTION 354
112#define TOK_UNION 355
113#define TOK_TwoDots 356
114#define TOK_ThreeDots 357
Lev Walkinf15320b2004-06-03 03:38:44 +0000115
116#line 1 "asn1p_y.y"
117
118
119#include <stdlib.h>
120#include <stdio.h>
121#include <string.h>
122#include <errno.h>
123#include <assert.h>
124
125#include "asn1parser.h"
126
127#define YYPARSE_PARAM param
Lev Walkin4a4bdf72005-06-07 21:43:32 +0000128#define YYPARSE_PARAM_TYPE void **
Lev Walkinf15320b2004-06-03 03:38:44 +0000129#define YYERROR_VERBOSE
130
131int yylex(void);
132int yyerror(const char *msg);
Lev Walkin4a4bdf72005-06-07 21:43:32 +0000133#ifdef YYBYACC
134int yyparse(void **param); /* byacc does not produce a prototype */
135#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000136void asn1p_lexer_hack_push_opaque_state(void);
137void asn1p_lexer_hack_enable_with_syntax(void);
Lev Walkinf59d0752004-08-18 04:59:12 +0000138void asn1p_lexer_hack_push_encoding_control(void);
Lev Walkinf15320b2004-06-03 03:38:44 +0000139#define yylineno asn1p_lineno
140extern int asn1p_lineno;
141
Lev Walkinb36317c2005-08-12 10:09:10 +0000142/*
Lev Walkinef625402005-09-05 05:17:57 +0000143 * Process directives as <ASN1C:RepresentAsPointer>
Lev Walkin4696c742005-08-22 12:23:54 +0000144 */
145extern int asn1p_as_pointer;
Lev Walkin4696c742005-08-22 12:23:54 +0000146
147/*
Lev Walkinb36317c2005-08-12 10:09:10 +0000148 * This temporary variable is used to solve the shortcomings of 1-lookahead
149 * parser.
150 */
151static struct AssignedIdentifier *saved_aid;
Lev Walkinf15320b2004-06-03 03:38:44 +0000152
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000153static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
154static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
Lev Walkinf15320b2004-06-03 03:38:44 +0000155
Lev Walkinb36317c2005-08-12 10:09:10 +0000156#define checkmem(ptr) do { \
157 if(!(ptr)) \
158 return yyerror("Memory failure"); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000159 } while(0)
160
Lev Walkinb36317c2005-08-12 10:09:10 +0000161#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
162 if(arg1->type != constr_type) { \
163 int __ret; \
164 root = asn1p_constraint_new(yylineno); \
165 checkmem(root); \
166 root->type = constr_type; \
167 __ret = asn1p_constraint_insert(root, \
168 arg1); \
169 checkmem(__ret == 0); \
170 } else { \
171 root = arg1; \
172 } \
173 if(arg2) { \
174 int __ret \
175 = asn1p_constraint_insert(root, arg2); \
176 checkmem(__ret == 0); \
177 } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000178 } while(0)
179
180
Lev Walkinef625402005-09-05 05:17:57 +0000181#line 72 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +0000182typedef union {
183 asn1p_t *a_grammar;
184 asn1p_module_flags_e a_module_flags;
185 asn1p_module_t *a_module;
186 asn1p_expr_type_e a_type; /* ASN.1 Type */
187 asn1p_expr_t *a_expr; /* Constructed collection */
188 asn1p_constraint_t *a_constr; /* Constraint */
189 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
190 asn1p_xports_t *a_xports; /* IMports/EXports */
Lev Walkinb36317c2005-08-12 10:09:10 +0000191 struct AssignedIdentifier a_aid; /* Assigned Identifier */
Lev Walkinf15320b2004-06-03 03:38:44 +0000192 asn1p_oid_t *a_oid; /* Object Identifier */
193 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
194 struct asn1p_type_tag_s a_tag; /* A tag */
195 asn1p_ref_t *a_ref; /* Reference to custom type */
196 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
197 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
198 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
199 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
200 struct asn1p_param_s a_parg; /* A parameter argument */
201 asn1p_paramlist_t *a_plist; /* A pargs list */
Lev Walkin9c974182004-09-15 11:59:51 +0000202 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
Lev Walkinf15320b2004-06-03 03:38:44 +0000203 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
Lev Walkind21c5052004-09-29 13:18:09 +0000204 asn1c_integer_t a_int;
Lev Walkinf15320b2004-06-03 03:38:44 +0000205 char *tv_str;
206 struct {
207 char *buf;
208 int len;
209 } tv_opaque;
210 struct {
211 char *name;
212 struct asn1p_type_tag_s tag;
213 } tv_nametag;
Lev Walkin1004aa92004-09-08 00:28:11 +0000214} YYSTYPE;
215#include <stdio.h>
216
217#ifndef __cplusplus
218#ifndef __STDC__
219#define const
220#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000221#endif
222
223
224
Lev Walkin9d542d22006-03-14 16:31:37 +0000225#define YYFINAL 446
Lev Walkin1004aa92004-09-08 00:28:11 +0000226#define YYFLAG -32768
Lev Walkin9d542d22006-03-14 16:31:37 +0000227#define YYNTBASE 119
Lev Walkinf15320b2004-06-03 03:38:44 +0000228
Lev Walkin9d542d22006-03-14 16:31:37 +0000229#define YYTRANSLATE(x) ((unsigned)(x) <= 357 ? yytranslate[x] : 226)
Lev Walkinf15320b2004-06-03 03:38:44 +0000230
Lev Walkin1004aa92004-09-08 00:28:11 +0000231static const char yytranslate[] = { 0,
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,
Lev Walkin9d542d22006-03-14 16:31:37 +0000235 2, 2, 115, 2, 2, 2, 2, 2, 2, 108,
236 109, 2, 2, 111, 2, 116, 2, 2, 2, 2,
237 2, 2, 2, 2, 2, 2, 2, 112, 110, 117,
238 2, 2, 2, 118, 2, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000239 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
240 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkin9d542d22006-03-14 16:31:37 +0000241 113, 2, 114, 100, 2, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000242 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
243 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkin9d542d22006-03-14 16:31:37 +0000244 2, 2, 106, 102, 107, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000245 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
246 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
247 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
248 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
249 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
250 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
251 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
252 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
253 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
254 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
255 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
256 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
257 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
258 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
259 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
260 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
261 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
262 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
263 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
264 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
265 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
266 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
Lev Walkin9d542d22006-03-14 16:31:37 +0000267 97, 98, 99, 101, 103, 104, 105
Lev Walkin1004aa92004-09-08 00:28:11 +0000268};
Lev Walkinf15320b2004-06-03 03:38:44 +0000269
Lev Walkin1004aa92004-09-08 00:28:11 +0000270#if YYDEBUG != 0
271static const short yyprhs[] = { 0,
272 0, 2, 4, 7, 16, 17, 19, 23, 26, 28,
273 31, 33, 38, 40, 41, 43, 45, 48, 51, 54,
274 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
Lev Walkinb36317c2005-08-12 10:09:10 +0000275 79, 81, 82, 86, 88, 92, 95, 97, 100, 101,
276 103, 108, 110, 114, 116, 120, 122, 126, 130, 133,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000277 135, 139, 141, 145, 147, 148, 155, 157, 159, 163,
278 167, 174, 176, 180, 182, 186, 190, 194, 196, 200,
279 202, 204, 205, 207, 209, 213, 217, 220, 224, 226,
280 228, 232, 235, 237, 239, 245, 246, 248, 250, 254,
281 257, 262, 266, 270, 274, 278, 282, 283, 285, 286,
Lev Walkin9d542d22006-03-14 16:31:37 +0000282 293, 295, 298, 300, 302, 304, 308, 310, 314, 318,
283 322, 323, 326, 328, 333, 338, 343, 350, 357, 359,
284 364, 369, 371, 375, 377, 381, 385, 389, 391, 395,
285 397, 401, 403, 405, 407, 409, 411, 415, 419, 421,
286 426, 430, 431, 435, 437, 439, 441, 443, 445, 447,
287 449, 451, 453, 457, 459, 461, 463, 465, 468, 470,
288 472, 474, 476, 479, 482, 484, 486, 489, 492, 494,
289 496, 498, 500, 502, 505, 507, 510, 512, 514, 516,
290 518, 520, 522, 524, 526, 528, 530, 532, 534, 536,
291 538, 540, 542, 544, 546, 548, 549, 551, 553, 558,
292 562, 567, 569, 573, 579, 581, 585, 589, 593, 597,
293 602, 606, 608, 610, 614, 618, 622, 626, 628, 630,
294 631, 637, 639, 642, 645, 649, 651, 653, 655, 657,
295 659, 661, 663, 665, 669, 675, 677, 681, 683, 687,
296 688, 690, 692, 694, 696, 698, 700, 704, 709, 711,
297 715, 718, 722, 724, 728, 729, 731, 733, 736, 739,
298 743, 745, 749, 751, 756, 761, 763, 765, 767, 769,
299 770, 772, 775, 780, 781, 783, 785, 787, 788, 790,
300 792, 794, 796, 798, 799, 801
Lev Walkin1004aa92004-09-08 00:28:11 +0000301};
Lev Walkinf15320b2004-06-03 03:38:44 +0000302
Lev Walkin9d542d22006-03-14 16:31:37 +0000303static const short yyrhs[] = { 120,
304 0, 121, 0, 120, 121, 0, 222, 122, 37, 126,
305 3, 24, 129, 42, 0, 0, 123, 0, 106, 124,
306 107, 0, 106, 107, 0, 125, 0, 124, 125, 0,
307 225, 0, 225, 108, 9, 109, 0, 9, 0, 0,
308 127, 0, 128, 0, 127, 128, 0, 44, 87, 0,
309 55, 87, 0, 23, 87, 0, 46, 56, 0, 14,
310 60, 0, 0, 130, 0, 131, 0, 130, 131, 0,
311 133, 0, 139, 0, 145, 0, 176, 0, 142, 0,
312 0, 41, 14, 132, 0, 185, 0, 57, 134, 110,
313 0, 57, 49, 0, 136, 0, 134, 136, 0, 0,
314 123, 0, 137, 49, 222, 135, 0, 138, 0, 137,
315 111, 138, 0, 222, 0, 222, 106, 107, 0, 225,
316 0, 45, 140, 110, 0, 45, 20, 110, 0, 45,
317 110, 0, 141, 0, 140, 111, 141, 0, 222, 0,
318 222, 106, 107, 0, 225, 0, 0, 222, 144, 3,
319 106, 143, 181, 0, 169, 0, 182, 0, 222, 3,
320 165, 0, 222, 3, 155, 0, 222, 106, 146, 107,
321 3, 165, 0, 147, 0, 146, 111, 147, 0, 222,
322 0, 222, 112, 225, 0, 222, 112, 222, 0, 182,
323 112, 225, 0, 149, 0, 148, 111, 149, 0, 165,
324 0, 225, 0, 0, 151, 0, 152, 0, 151, 111,
325 152, 0, 225, 165, 211, 0, 165, 211, 0, 33,
326 71, 165, 0, 164, 0, 154, 0, 153, 111, 154,
327 0, 225, 165, 0, 164, 0, 165, 0, 31, 106,
328 157, 107, 159, 0, 0, 91, 0, 158, 0, 157,
329 111, 158, 0, 15, 211, 0, 16, 165, 156, 211,
330 0, 16, 174, 211, 0, 16, 175, 211, 0, 15,
331 174, 211, 0, 15, 165, 211, 0, 15, 175, 211,
332 0, 0, 160, 0, 0, 98, 85, 106, 161, 162,
333 107, 0, 163, 0, 162, 163, 0, 4, 0, 17,
334 0, 172, 0, 113, 162, 114, 0, 105, 0, 105,
335 115, 179, 0, 105, 115, 216, 0, 217, 167, 189,
336 0, 0, 166, 168, 0, 184, 0, 30, 106, 153,
337 107, 0, 81, 106, 150, 107, 0, 82, 106, 150,
338 107, 0, 81, 189, 71, 224, 217, 167, 0, 82,
339 189, 71, 224, 217, 167, 0, 21, 0, 21, 38,
340 28, 225, 0, 222, 106, 148, 107, 0, 169, 0,
341 59, 71, 169, 0, 13, 0, 13, 116, 222, 0,
342 223, 116, 222, 0, 13, 116, 225, 0, 223, 0,
343 223, 116, 170, 0, 171, 0, 170, 116, 171, 0,
344 173, 0, 173, 0, 15, 0, 16, 0, 15, 0,
345 174, 116, 15, 0, 174, 116, 16, 0, 14, 0,
346 225, 144, 3, 177, 0, 225, 112, 177, 0, 0,
347 106, 178, 181, 0, 66, 0, 48, 0, 89, 0,
348 5, 0, 7, 0, 180, 0, 216, 0, 179, 0,
349 225, 0, 222, 116, 225, 0, 6, 0, 10, 0,
350 11, 0, 4, 0, 181, 4, 0, 27, 0, 66,
351 0, 79, 0, 183, 0, 70, 84, 0, 68, 54,
352 0, 80, 0, 47, 0, 39, 74, 0, 29, 84,
353 0, 94, 0, 50, 0, 185, 0, 61, 0, 43,
354 0, 25, 84, 0, 182, 0, 183, 213, 0, 26,
355 0, 51, 0, 52, 0, 53, 0, 62, 0, 67,
356 0, 77, 0, 86, 0, 88, 0, 93, 0, 95,
357 0, 96, 0, 97, 0, 69, 0, 102, 0, 103,
358 0, 100, 0, 101, 0, 99, 0, 0, 190, 0,
359 191, 0, 83, 108, 192, 109, 0, 108, 192, 109,
360 0, 191, 108, 192, 109, 0, 193, 0, 193, 111,
361 105, 0, 193, 111, 105, 111, 193, 0, 194, 0,
362 20, 99, 194, 0, 193, 186, 194, 0, 193, 187,
363 194, 0, 194, 188, 194, 0, 197, 108, 192, 109,
364 0, 108, 192, 109, 0, 198, 0, 199, 0, 198,
365 196, 198, 0, 64, 196, 198, 0, 198, 196, 63,
366 0, 64, 196, 63, 0, 205, 0, 200, 0, 0,
367 34, 28, 106, 195, 181, 0, 104, 0, 104, 117,
368 0, 117, 104, 0, 117, 104, 117, 0, 83, 0,
369 49, 0, 48, 0, 89, 0, 216, 0, 180, 0,
370 225, 0, 222, 0, 98, 32, 191, 0, 98, 33,
371 106, 201, 107, 0, 202, 0, 201, 111, 202, 0,
372 105, 0, 225, 189, 203, 0, 0, 204, 0, 76,
373 0, 18, 0, 72, 0, 206, 0, 207, 0, 106,
374 222, 107, 0, 206, 106, 208, 107, 0, 209, 0,
375 208, 111, 209, 0, 118, 210, 0, 118, 116, 210,
376 0, 225, 0, 210, 116, 225, 0, 0, 212, 0,
377 72, 0, 36, 177, 0, 106, 107, 0, 106, 214,
378 107, 0, 215, 0, 214, 111, 215, 0, 225, 0,
379 225, 108, 216, 109, 0, 225, 108, 179, 109, 0,
380 216, 0, 105, 0, 9, 0, 12, 0, 0, 218,
381 0, 219, 221, 0, 113, 220, 9, 114, 0, 0,
382 92, 0, 22, 0, 78, 0, 0, 55, 0, 44,
383 0, 13, 0, 14, 0, 14, 0, 0, 225, 0,
384 8, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000385};
Lev Walkinf15320b2004-06-03 03:38:44 +0000386
387#endif
388
Lev Walkin1004aa92004-09-08 00:28:11 +0000389#if YYDEBUG != 0
390static const short yyrline[] = { 0,
Lev Walkin9d542d22006-03-14 16:31:37 +0000391 323, 329, 335, 351, 376, 378, 381, 385, 390, 397,
392 405, 410, 414, 423, 425, 433, 437, 445, 449, 452,
393 455, 459, 479, 481, 489, 493, 525, 529, 538, 545,
394 558, 565, 567, 579, 591, 602, 607, 613, 619, 621,
395 624, 635, 641, 647, 654, 660, 668, 672, 675, 682,
396 688, 694, 701, 707, 716, 718, 727, 735, 749, 759,
397 775, 784, 794, 804, 809, 816, 823, 833, 839, 845,
398 849, 872, 874, 876, 882, 888, 896, 902, 909, 914,
399 920, 926, 932, 935, 941, 951, 953, 956, 964, 971,
400 984, 995, 1005, 1016, 1026, 1037, 1048, 1050, 1055, 1059,
401 1064, 1069, 1075, 1079, 1082, 1091, 1096, 1105, 1114, 1125,
402 1147, 1154, 1173, 1177, 1183, 1189, 1195, 1205, 1215, 1221,
403 1235, 1259, 1266, 1280, 1289, 1299, 1309, 1319, 1327, 1348,
404 1357, 1366, 1367, 1369, 1376, 1383, 1389, 1393, 1399, 1419,
405 1429, 1437, 1437, 1442, 1447, 1452, 1457, 1461, 1465, 1468,
406 1471, 1476, 1488, 1505, 1510, 1515, 1548, 1558, 1572, 1574,
407 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584,
408 1585, 1591, 1593, 1594, 1597, 1604, 1616, 1618, 1622, 1626,
409 1627, 1628, 1629, 1630, 1634, 1635, 1636, 1637, 1641, 1642,
410 1649, 1649, 1650, 1650, 1651, 1653, 1655, 1660, 1664, 1673,
411 1677, 1682, 1686, 1692, 1702, 1706, 1709, 1712, 1715, 1720,
412 1729, 1737, 1743, 1749, 1756, 1764, 1772, 1781, 1784, 1787,
413 1788, 1798, 1800, 1801, 1802, 1805, 1809, 1814, 1820, 1825,
414 1828, 1831, 1844, 1858, 1862, 1867, 1871, 1876, 1883, 1896,
415 1898, 1901, 1905, 1908, 1913, 1917, 1925, 1940, 1946, 1953,
416 1966, 1978, 1993, 1997, 2014, 2019, 2022, 2027, 2049, 2054,
417 2059, 2065, 2071, 2079, 2087, 2095, 2102, 2112, 2117, 2147,
418 2149, 2152, 2159, 2165, 2167, 2168, 2169, 2172, 2174, 2175,
419 2178, 2183, 2190, 2197, 2199, 2204
Lev Walkin1004aa92004-09-08 00:28:11 +0000420};
421#endif
422
423
424#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
425
426static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
427"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
Lev Walkind9574ae2005-03-24 16:22:35 +0000428"TOK_tuple","TOK_quadruple","TOK_number_negative","TOK_typereference","TOK_capitalreference",
Lev Walkin9d542d22006-03-14 16:31:37 +0000429"TOK_typefieldreference","TOK_valuefieldreference","TOK_Literal","TOK_ABSENT",
430"TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY","TOK_APPLICATION","TOK_AUTOMATIC",
431"TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN","TOK_BY","TOK_CHARACTER",
432"TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS","TOK_CONSTRAINED",
433"TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED","TOK_EMBEDDED",
434"TOK_ENCODED","TOK_ENCODING_CONTROL","TOK_END","TOK_ENUMERATED","TOK_EXPLICIT",
435"TOK_EXPORTS","TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime",
436"TOK_GeneralString","TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT",
437"TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INSTRUCTIONS",
438"TOK_INTEGER","TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL",
439"TOK_NumericString","TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET","TOK_OF",
440"TOK_OPTIONAL","TOK_PATTERN","TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString",
441"TOK_PRIVATE","TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE",
442"TOK_STRING","TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE",
443"TOK_TYPE_IDENTIFIER","TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime",
444"TOK_UTF8String","TOK_VideotexString","TOK_VisibleString","TOK_WITH","TOK_EXCEPT",
445"'^'","TOK_INTERSECTION","'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots","'{'",
446"'}'","'('","')'","';'","','","':'","'['","']'","'!'","'.'","'<'","'@'","ParsedGrammar",
447"ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
448"ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags",
449"ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody",
450"ModuleSpecificationBody","ModuleSpecificationElement","@1","ImportsDefinition",
451"ImportsBundleSet","AssignedIdentifier","ImportsBundle","ImportsList","ImportsElement",
452"ExportsDefinition","ExportsBody","ExportsElement","ValueSetDefinition","@2",
453"DefinedTypeRef","DataTypeReference","ParameterArgumentList","ParameterArgumentName",
454"ActualParameterList","ActualParameter","optComponentTypeLists","ComponentTypeLists",
455"ComponentType","AlternativeTypeLists","AlternativeType","ObjectClass","optUnique",
456"FieldSpec","ClassField","optWithSyntax","WithSyntax","@3","WithSyntaxList",
457"WithSyntaxToken","ExtensionAndException","Type","NSTD_IndirectMarker","TypeDeclaration",
458"TypeDeclarationSet","ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement",
459"ClassFieldIdentifier","ClassFieldName","FieldName","DefinedObjectClass","ValueDefinition",
460"Value","@4","DefinedValue","RestrictedCharacterStringValue","Opaque","BasicTypeId",
Lev Walkin9c2285a2006-03-09 08:49:26 +0000461"BasicTypeId_UniverationCompatible","BasicType","BasicString","Union","Intersection",
462"Except","optConstraints","Constraints","SetOfConstraints","ElementSetSpecs",
463"ElementSetSpec","ConstraintSubtypeElement","@5","ConstraintRangeSpec","ConstraintSpec",
464"SingleValue","ContainedSubtype","InnerTypeConstraint","WithComponentsList",
465"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
466"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
467"ComponentIdList","optMarker","Marker","UniverationDefinition","UniverationList",
468"UniverationElement","SignedNumber","optTag","Tag","TagTypeValue","TagClass",
469"TagPlicit","TypeRefName","ObjectClassReference","optIdentifier","Identifier", NULL
Lev Walkin1004aa92004-09-08 00:28:11 +0000470};
471#endif
472
473static const short yyr1[] = { 0,
Lev Walkin9d542d22006-03-14 16:31:37 +0000474 119, 120, 120, 121, 122, 122, 123, 123, 124, 124,
475 125, 125, 125, 126, 126, 127, 127, 128, 128, 128,
476 128, 128, 129, 129, 130, 130, 131, 131, 131, 131,
477 131, 132, 131, 131, 133, 133, 134, 134, 135, 135,
478 136, 137, 137, 138, 138, 138, 139, 139, 139, 140,
479 140, 141, 141, 141, 143, 142, 144, 144, 145, 145,
480 145, 146, 146, 147, 147, 147, 147, 148, 148, 149,
481 149, 150, 150, 151, 151, 152, 152, 152, 152, 153,
482 153, 154, 154, 154, 155, 156, 156, 157, 157, 158,
483 158, 158, 158, 158, 158, 158, 159, 159, 161, 160,
484 162, 162, 163, 163, 163, 163, 164, 164, 164, 165,
485 166, 167, 168, 168, 168, 168, 168, 168, 168, 168,
486 168, 168, 168, 169, 169, 169, 169, 169, 169, 170,
487 170, 171, 172, 173, 173, 174, 174, 174, 175, 176,
488 177, 178, 177, 177, 177, 177, 177, 177, 177, 177,
489 177, 179, 179, 180, 180, 180, 181, 181, 182, 182,
490 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
491 182, 183, 183, 183, 184, 184, 185, 185, 185, 185,
492 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
493 186, 186, 187, 187, 188, 189, 189, 190, 190, 191,
494 191, 192, 192, 192, 193, 193, 193, 193, 193, 194,
495 194, 194, 194, 194, 194, 194, 194, 194, 194, 195,
496 194, 196, 196, 196, 196, 197, 197, 198, 198, 198,
497 198, 198, 199, 200, 200, 201, 201, 202, 202, 203,
498 203, 204, 204, 204, 205, 205, 206, 207, 208, 208,
Lev Walkin1db91132006-03-09 09:11:53 +0000499 209, 209, 210, 210, 211, 211, 212, 212, 213, 213,
Lev Walkin9d542d22006-03-14 16:31:37 +0000500 214, 214, 215, 215, 215, 215, 215, 216, 216, 217,
501 217, 218, 219, 220, 220, 220, 220, 221, 221, 221,
502 222, 222, 223, 224, 224, 225
Lev Walkin1004aa92004-09-08 00:28:11 +0000503};
504
505static const short yyr2[] = { 0,
506 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
507 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
508 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
Lev Walkinb36317c2005-08-12 10:09:10 +0000509 1, 0, 3, 1, 3, 2, 1, 2, 0, 1,
510 4, 1, 3, 1, 3, 1, 3, 3, 2, 1,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000511 3, 1, 3, 1, 0, 6, 1, 1, 3, 3,
512 6, 1, 3, 1, 3, 3, 3, 1, 3, 1,
513 1, 0, 1, 1, 3, 3, 2, 3, 1, 1,
514 3, 2, 1, 1, 5, 0, 1, 1, 3, 2,
515 4, 3, 3, 3, 3, 3, 0, 1, 0, 6,
Lev Walkin9d542d22006-03-14 16:31:37 +0000516 1, 2, 1, 1, 1, 3, 1, 3, 3, 3,
517 0, 2, 1, 4, 4, 4, 6, 6, 1, 4,
518 4, 1, 3, 1, 3, 3, 3, 1, 3, 1,
519 3, 1, 1, 1, 1, 1, 3, 3, 1, 4,
520 3, 0, 3, 1, 1, 1, 1, 1, 1, 1,
521 1, 1, 3, 1, 1, 1, 1, 2, 1, 1,
522 1, 1, 2, 2, 1, 1, 2, 2, 1, 1,
523 1, 1, 1, 2, 1, 2, 1, 1, 1, 1,
Lev Walkin1004aa92004-09-08 00:28:11 +0000524 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin9d542d22006-03-14 16:31:37 +0000525 1, 1, 1, 1, 1, 0, 1, 1, 4, 3,
526 4, 1, 3, 5, 1, 3, 3, 3, 3, 4,
527 3, 1, 1, 3, 3, 3, 3, 1, 1, 0,
528 5, 1, 2, 2, 3, 1, 1, 1, 1, 1,
529 1, 1, 1, 3, 5, 1, 3, 1, 3, 0,
530 1, 1, 1, 1, 1, 1, 3, 4, 1, 3,
531 2, 3, 1, 3, 0, 1, 1, 2, 2, 3,
532 1, 3, 1, 4, 4, 1, 1, 1, 1, 0,
533 1, 2, 4, 0, 1, 1, 1, 0, 1, 1,
534 1, 1, 1, 0, 1, 1
Lev Walkin1004aa92004-09-08 00:28:11 +0000535};
536
537static const short yydefact[] = { 0,
Lev Walkin9d542d22006-03-14 16:31:37 +0000538 281, 282, 1, 2, 5, 3, 0, 0, 6, 286,
Lev Walkin1004aa92004-09-08 00:28:11 +0000539 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
540 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
Lev Walkin9d542d22006-03-14 16:31:37 +0000541 18, 21, 19, 0, 17, 12, 23, 177, 0, 0,
542 178, 179, 180, 0, 181, 182, 190, 183, 184, 185,
543 186, 187, 188, 189, 0, 24, 25, 27, 28, 31,
Lev Walkinb36317c2005-08-12 10:09:10 +0000544 29, 30, 34, 0, 0, 32, 0, 49, 0, 50,
545 52, 54, 36, 0, 37, 0, 42, 44, 46, 4,
Lev Walkin9d542d22006-03-14 16:31:37 +0000546 26, 270, 124, 283, 0, 159, 0, 0, 173, 166,
547 170, 172, 160, 0, 0, 161, 165, 169, 0, 0,
548 57, 58, 162, 171, 128, 0, 33, 48, 47, 0,
549 0, 35, 38, 0, 0, 0, 0, 274, 60, 59,
550 111, 271, 278, 0, 174, 168, 167, 164, 163, 0,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000551 62, 0, 64, 0, 0, 0, 51, 53, 39, 43,
Lev Walkin9d542d22006-03-14 16:31:37 +0000552 45, 0, 276, 277, 275, 0, 0, 196, 280, 279,
553 272, 125, 127, 0, 0, 0, 0, 55, 134, 135,
554 129, 130, 132, 126, 147, 154, 148, 268, 155, 156,
555 269, 145, 144, 146, 142, 140, 151, 149, 150, 0,
556 152, 40, 41, 270, 270, 0, 88, 0, 124, 283,
557 119, 0, 0, 196, 196, 112, 122, 175, 162, 113,
558 0, 0, 0, 110, 197, 198, 270, 63, 67, 66,
559 65, 0, 0, 0, 0, 0, 139, 136, 0, 257,
560 255, 255, 255, 90, 256, 86, 255, 255, 97, 0,
561 273, 0, 270, 0, 270, 0, 270, 0, 0, 176,
562 270, 0, 0, 0, 228, 227, 0, 226, 229, 0,
563 0, 0, 231, 0, 202, 205, 0, 212, 213, 219,
564 218, 245, 246, 230, 233, 232, 0, 61, 157, 56,
565 131, 143, 153, 141, 258, 95, 0, 94, 96, 87,
566 255, 92, 93, 0, 85, 98, 89, 0, 107, 0,
567 80, 83, 84, 270, 123, 0, 0, 73, 74, 79,
568 255, 270, 284, 0, 284, 267, 259, 0, 261, 266,
569 263, 0, 68, 70, 71, 0, 0, 0, 222, 0,
570 0, 0, 0, 0, 0, 200, 193, 194, 191, 192,
571 0, 0, 0, 195, 0, 0, 0, 0, 0, 158,
572 137, 138, 91, 0, 120, 0, 114, 270, 82, 270,
573 115, 270, 77, 255, 270, 285, 116, 270, 260, 0,
574 0, 121, 270, 199, 206, 220, 223, 224, 217, 215,
575 234, 0, 247, 211, 203, 207, 208, 209, 0, 216,
576 214, 0, 0, 249, 201, 99, 108, 109, 152, 81,
577 78, 75, 76, 111, 111, 262, 0, 0, 69, 0,
578 225, 238, 0, 236, 196, 0, 210, 0, 251, 253,
579 248, 0, 0, 117, 118, 265, 264, 221, 235, 0,
580 240, 204, 252, 0, 250, 103, 104, 0, 0, 101,
581 105, 133, 237, 243, 244, 242, 239, 241, 254, 0,
582 100, 102, 106, 0, 0, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000583};
584
Lev Walkin9d542d22006-03-14 16:31:37 +0000585static const short yydefgoto[] = { 444,
Lev Walkin1004aa92004-09-08 00:28:11 +0000586 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000587 56, 57, 107, 58, 74, 183, 75, 76, 77, 59,
Lev Walkin1db91132006-03-09 09:11:53 +0000588 69, 70, 60, 212, 100, 61, 130, 131, 312, 313,
589 297, 298, 299, 290, 291, 119, 281, 186, 187, 285,
Lev Walkin9d542d22006-03-14 16:31:37 +0000590 286, 413, 429, 430, 300, 301, 147, 148, 196, 101,
591 161, 162, 431, 432, 222, 223, 62, 176, 214, 177,
Lev Walkin1db91132006-03-09 09:11:53 +0000592 253, 270, 102, 103, 200, 104, 332, 333, 335, 204,
593 205, 206, 254, 255, 256, 400, 321, 257, 258, 259,
Lev Walkin9d542d22006-03-14 16:31:37 +0000594 260, 403, 404, 437, 438, 261, 262, 263, 383, 384,
Lev Walkin1db91132006-03-09 09:11:53 +0000595 409, 224, 225, 240, 308, 309, 264, 121, 122, 123,
596 146, 151, 265, 105, 355, 266
Lev Walkin1004aa92004-09-08 00:28:11 +0000597};
598
Lev Walkin9d542d22006-03-14 16:31:37 +0000599static const short yypact[] = { 76,
600-32768,-32768, 76,-32768, -55,-32768, 23, 59,-32768,-32768,
601-32768,-32768, 31,-32768, 32, 350,-32768,-32768, 101, 120,
602 136, 144, 131, 152, 192, 350,-32768, 139,-32768,-32768,
603-32768,-32768,-32768, 233,-32768,-32768, 394,-32768, 275, 34,
604-32768,-32768,-32768, 133,-32768,-32768,-32768,-32768,-32768,-32768,
605-32768,-32768,-32768,-32768, 258, 394,-32768,-32768,-32768,-32768,
606-32768,-32768,-32768, 224, 547,-32768, 197,-32768, 63,-32768,
607 203,-32768,-32768, 45,-32768, 24,-32768, 205,-32768,-32768,
608-32768, 21, 206,-32768, 240,-32768, 254, 266,-32768,-32768,
609-32768,-32768,-32768, 288, 260,-32768,-32768,-32768, 623, 343,
610-32768,-32768,-32768,-32768, 236, 352,-32768,-32768,-32768, 248,
611 251,-32768,-32768, 76, 248, 252, 257, 106,-32768,-32768,
612-32768,-32768, 43, 248,-32768,-32768,-32768,-32768,-32768, 100,
613-32768, 249, 256, 261, 300, 158,-32768,-32768, -55,-32768,
614-32768, 189,-32768,-32768,-32768, 351, 471, -27,-32768,-32768,
615-32768,-32768,-32768, 363, 623, 361, 248,-32768,-32768,-32768,
616 269,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
617-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 277,
618 262,-32768,-32768, 70, 62, 108,-32768, 263, 80, 264,
619 357, 291, 327, -13, -9,-32768,-32768,-32768, 293,-32768,
620 294, 295, 323,-32768,-32768, 301, 297,-32768,-32768,-32768,
621-32768, 407, 250, 407, 361, 158,-32768,-32768, 158,-32768,
622 14, 7, 14,-32768,-32768, 324, 7, 14, 316, 189,
623-32768, 388, 8, 265, 47, 353, 47, 354, 52,-32768,
624 9, 323, 328, 395,-32768,-32768, -16,-32768,-32768, 255,
625 76, 323,-32768, 313, 99, 331, 318, -16,-32768,-32768,
626-32768, 326,-32768,-32768,-32768,-32768, 323,-32768,-32768, 429,
627-32768, 429,-32768,-32768,-32768,-32768, 333,-32768,-32768,-32768,
628 14,-32768,-32768, 355,-32768,-32768,-32768, 361, 321, 118,
629-32768,-32768,-32768, 297,-32768, 366, 334, 337,-32768,-32768,
630 14, 297, 361, 335, 361,-32768,-32768, 162,-32768,-32768,
631 330, 173,-32768,-32768,-32768, 340, 370, 338, 341, 346,
632 234, 344, 348, 358, 364,-32768,-32768,-32768,-32768,-32768,
633 359, 370, 370,-32768, 370, 323, 380, 339, 365,-32768,
634-32768,-32768,-32768, 349,-32768, 246,-32768, 8,-32768, 297,
635-32768, 38,-32768, 14, 297,-32768,-32768, 297,-32768, 57,
636 246,-32768, 9,-32768,-32768,-32768,-32768, 345,-32768,-32768,
637 301, 2,-32768,-32768, 356,-32768,-32768,-32768, 368,-32768,
638-32768, 17, 188,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
639-32768,-32768,-32768,-32768,-32768,-32768, 372, 374,-32768, 407,
640-32768,-32768, 195,-32768, -27, 323,-32768, 361, 377,-32768,
641-32768, 339, 11,-32768,-32768,-32768,-32768, 429,-32768, 2,
642 121, 225, 377, 361,-32768,-32768,-32768, 11, 19,-32768,
643-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 5,
644-32768,-32768,-32768, 460, 466,-32768
Lev Walkin1004aa92004-09-08 00:28:11 +0000645};
646
647static const short yypgoto[] = {-32768,
Lev Walkin9d542d22006-03-14 16:31:37 +0000648-32768, 467,-32768, 336,-32768, 459,-32768,-32768, 453,-32768,
649-32768, 430,-32768,-32768,-32768,-32768, 414,-32768, 379,-32768,
650-32768, 385,-32768,-32768, 434,-32768,-32768, 347,-32768, 140,
651 267,-32768, 153,-32768, 159,-32768,-32768,-32768, 276,-32768,
652-32768,-32768, 81, -250, -228, -80,-32768, -44,-32768, -103,
653-32768, 298,-32768, -111, 332, 342,-32768, -3,-32768, -278,
654 -107, -211, 86, 369,-32768, 26,-32768,-32768,-32768, -187,
655-32768, 186, -64, 107, -141,-32768, 268,-32768, -259,-32768,
656-32768,-32768, 92,-32768,-32768,-32768,-32768,-32768,-32768, 103,
657 111, -209,-32768,-32768,-32768, 160, -125, -50,-32768,-32768,
658-32768,-32768, 1,-32768, 220, -7
Lev Walkin1004aa92004-09-08 00:28:11 +0000659};
660
661
Lev Walkin9d542d22006-03-14 16:31:37 +0000662#define YYLAST 720
Lev Walkin1004aa92004-09-08 00:28:11 +0000663
664
665static const short yytable[] = { 15,
Lev Walkin9d542d22006-03-14 16:31:37 +0000666 5, 120, 272, 5, 292, 15, 236, 238, 426, 10,
667 179, 276, 278, 279, 426, 10, 10, 282, 283, 159,
668 160, 427, 426, 163, 10, 159, 160, 427, 178, 65,
669 10, 11, 72, 159, 160, 427, 79, 64, 10, 11,
670 71, 10, 219, 197, 78, 10, 1, 2, 65, 219,
671 7, 117, 10, 67, 10, 202, 64, 1, 2, 10,
672 168, 370, 63, 171, 10, 168, 79, 387, 171, 202,
673 296, 343, 114, 202, 78, 217, 218, 381, 220, 296,
674 203, 63, 397, 217, 218, 220, 149, 319, 1, 2,
675 179, 353, 235, 179, 203, 16, 237, 150, 203, 133,
676 320, 163, 72, 221, 226, 219, 402, 79, 178, 28,
677 71, 178, 289, 310, 139, 78, 153, 428, 443, 292,
678 118, 118, 277, 428, 152, 441, 268, 143, 181, 12,
679 295, 428, 408, 118, 115, 164, 180, 17, 434, 19,
680 10, 220, 289, 68, 393, 1, 2, 201, 209, 211,
681 118, 289, 293, -72, 112, 133, 306, 210, 307, 118,
682 314, 306, 165, 166, 167, 10, 168, 169, 170, 171,
683 1, 2, 109, 110, 118, 365, -255, 316, 442, 29,
684 -255, 73, 118, 144, 132, -281, 32, 325, 418, 442,
685 376, 377, 435, 378, 34, 124, 436, 145, 327, 328,
686 329, 330, 339, 184, 185, 172, 154, 273, 181, 331,
687 155, 181, 274, 349, 229, 275, 180, 421, 230, 180,
688 388, 354, 30, 173, 347, 294, 82, 302, 348, 302,
689 31, 311, 198, 315, 310, 398, 83, 84, 33, 166,
690 132, 10, 168, 169, 170, 171, 174, 36, 85, 38,
691 86, 324, 87, 10, 168, 10, 37, 171, 1, 2,
692 1, 2, 88, 175, 159, 160, 89, 293, 359, 391,
693 90, 379, 360, 91, 41, 42, 43, 83, 84, 362,
694 345, 245, 314, 363, 92, 45, 322, 323, 66, 93,
695 46, 94, 47, 95, 411, 356, 369, 356, 412, 80,
696 48, 419, 96, 97, 394, 420, 108, 395, 111, 49,
697 116, 50, 1, 2, 159, 160, 51, 98, 52, 53,
698 54, 124, 249, 125, 327, 328, 329, 330, 166, 99,
699 10, 168, 169, 170, 171, 1, 2, 126, 389, 127,
700 294, 128, 243, 129, 302, 134, 180, 341, 342, 414,
701 415, 135, 311, 389, 136, 315, 244, 138, 141, 188,
702 156, 180, 142, 20, 405, 207, 158, 157, 10, -282,
703 245, 246, 21, 216, 410, 166, 231, 10, 168, 169,
704 170, 171, 1, 2, 213, 166, 247, 10, 168, 169,
705 170, 171, 215, 22, 232, 23, 233, 234, 239, 241,
706 410, 10, 242, 244, 24, 248, 1, 2, 267, 118,
707 269, 249, 405, 284, 280, 288, 439, 245, 246, 38,
708 250, 326, 318, 303, 305, 336, 317, 245, 251, 334,
709 252, 338, 340, 247, 39, 346, 350, 361, 40, 344,
710 351, 357, 380, 366, 41, 42, 43, 352, 364, 368,
711 44, 203, 248, 372, 386, 45, 382, 367, 249, 445,
712 46, 401, 47, 375, 373, 446, 406, 250, 249, 6,
713 48, 18, 374, 385, 182, 251, 407, 252, 35, 49,
714 416, 50, 417, 189, 190, 81, 51, 113, 52, 53,
715 54, 191, 424, 140, 137, 85, 38, 86, 106, 87,
716 192, 208, 399, 304, 392, 287, 390, 371, 440, 88,
717 271, 433, 422, 89, 425, 199, 227, 90, 423, 396,
718 91, 41, 42, 43, 358, 337, 228, 0, 0, 193,
719 0, 92, 45, 0, 0, 0, 93, 46, 94, 47,
720 95, 0, 0, 0, 0, 0, 0, 48, 0, 96,
721 97, 194, 195, 0, 0, 0, 49, 0, 50, 83,
722 84, 0, 0, 51, 98, 52, 53, 54, 0, 0,
723 0, 85, 38, 86, 0, 87, 0, 0, 0, 0,
724 0, 0, 0, 0, 0, 88, 0, 0, 0, 89,
725 0, 0, 0, 90, 0, 0, 91, 41, 42, 43,
726 0, 0, 0, 0, 0, 0, 0, 92, 45, 0,
727 0, 0, 93, 46, 94, 47, 95, 0, 0, 0,
728 0, 0, 0, 48, 0, 96, 97, 0, 0, 0,
729 0, 0, 49, 0, 50, 1, 2, 0, 0, 51,
730 98, 52, 53, 54, 0, 0, 0, 85, 38, 86,
731 0, 87, 0, 0, 0, 0, 0, 0, 0, 0,
732 0, 88, 0, 0, 0, 89, 0, 0, 0, 90,
733 0, 0, 91, 41, 42, 43, 0, 0, 0, 0,
734 0, 0, 0, 92, 45, 0, 0, 0, 93, 46,
735 94, 47, 95, 0, 0, 0, 0, 0, 0, 48,
736 0, 96, 97, 0, 0, 0, 0, 0, 49, 0,
737 50, 0, 0, 0, 0, 51, 98, 52, 53, 54
Lev Walkin1004aa92004-09-08 00:28:11 +0000738};
739
740static const short yycheck[] = { 7,
Lev Walkin9d542d22006-03-14 16:31:37 +0000741 0, 82, 214, 3, 233, 13, 194, 195, 4, 8,
742 136, 221, 222, 223, 4, 8, 8, 227, 228, 15,
743 16, 17, 4, 135, 8, 15, 16, 17, 136, 37,
744 8, 9, 40, 15, 16, 17, 44, 37, 8, 9,
745 40, 8, 36, 147, 44, 8, 13, 14, 56, 36,
746 106, 31, 8, 20, 8, 83, 56, 13, 14, 8,
747 9, 321, 37, 12, 8, 9, 74, 346, 12, 83,
748 33, 281, 49, 83, 74, 14, 15, 337, 72, 33,
749 108, 56, 361, 14, 15, 72, 44, 104, 13, 14,
750 216, 301, 106, 219, 108, 37, 106, 55, 108, 99,
751 117, 213, 110, 184, 185, 36, 105, 115, 216, 9,
752 110, 219, 105, 239, 114, 115, 124, 113, 114, 348,
753 113, 113, 116, 113, 124, 107, 207, 22, 136, 107,
754 234, 113, 116, 113, 111, 135, 136, 107, 18, 108,
755 8, 72, 105, 110, 354, 13, 14, 147, 156, 157,
756 113, 105, 233, 107, 110, 155, 105, 157, 107, 113,
757 241, 105, 5, 6, 7, 8, 9, 10, 11, 12,
758 13, 14, 110, 111, 113, 317, 107, 242, 429, 60,
759 111, 49, 113, 78, 99, 106, 56, 252, 400, 440,
760 332, 333, 72, 335, 3, 116, 76, 92, 100, 101,
761 102, 103, 267, 15, 16, 48, 107, 215, 216, 111,
762 111, 219, 216, 294, 107, 219, 216, 405, 111, 219,
763 346, 302, 87, 66, 107, 233, 3, 235, 111, 237,
764 87, 239, 147, 241, 360, 361, 13, 14, 87, 6,
765 155, 8, 9, 10, 11, 12, 89, 109, 25, 26,
766 27, 251, 29, 8, 9, 8, 24, 12, 13, 14,
767 13, 14, 39, 106, 15, 16, 43, 348, 107, 350,
768 47, 336, 111, 50, 51, 52, 53, 13, 14, 107,
769 288, 48, 363, 111, 61, 62, 32, 33, 14, 66,
770 67, 68, 69, 70, 107, 303, 63, 305, 111, 42,
771 77, 107, 79, 80, 355, 111, 110, 358, 106, 86,
772 106, 88, 13, 14, 15, 16, 93, 94, 95, 96,
773 97, 116, 89, 84, 100, 101, 102, 103, 6, 106,
774 8, 9, 10, 11, 12, 13, 14, 84, 346, 74,
775 348, 54, 20, 84, 352, 3, 346, 15, 16, 394,
776 395, 116, 360, 361, 3, 363, 34, 107, 107, 9,
777 112, 361, 106, 14, 372, 3, 106, 112, 8, 106,
778 48, 49, 23, 112, 382, 6, 114, 8, 9, 10,
779 11, 12, 13, 14, 116, 6, 64, 8, 9, 10,
780 11, 12, 116, 44, 38, 46, 106, 71, 106, 106,
781 408, 8, 108, 34, 55, 83, 13, 14, 108, 113,
782 4, 89, 420, 98, 91, 28, 424, 48, 49, 26,
783 98, 109, 28, 71, 71, 108, 99, 48, 106, 99,
784 108, 106, 4, 64, 41, 115, 71, 108, 45, 85,
785 107, 107, 63, 106, 51, 52, 53, 111, 109, 104,
786 57, 108, 83, 106, 106, 62, 118, 117, 89, 0,
787 67, 117, 69, 105, 107, 0, 111, 98, 89, 3,
788 77, 13, 109, 109, 139, 106, 109, 108, 26, 86,
789 109, 88, 109, 13, 14, 56, 93, 74, 95, 96,
790 97, 21, 116, 115, 110, 25, 26, 27, 65, 29,
791 30, 155, 363, 237, 352, 230, 348, 322, 428, 39,
792 213, 420, 406, 43, 412, 147, 185, 47, 408, 360,
793 50, 51, 52, 53, 305, 258, 185, -1, -1, 59,
794 -1, 61, 62, -1, -1, -1, 66, 67, 68, 69,
795 70, -1, -1, -1, -1, -1, -1, 77, -1, 79,
796 80, 81, 82, -1, -1, -1, 86, -1, 88, 13,
797 14, -1, -1, 93, 94, 95, 96, 97, -1, -1,
798 -1, 25, 26, 27, -1, 29, -1, -1, -1, -1,
799 -1, -1, -1, -1, -1, 39, -1, -1, -1, 43,
800 -1, -1, -1, 47, -1, -1, 50, 51, 52, 53,
801 -1, -1, -1, -1, -1, -1, -1, 61, 62, -1,
802 -1, -1, 66, 67, 68, 69, 70, -1, -1, -1,
803 -1, -1, -1, 77, -1, 79, 80, -1, -1, -1,
804 -1, -1, 86, -1, 88, 13, 14, -1, -1, 93,
805 94, 95, 96, 97, -1, -1, -1, 25, 26, 27,
806 -1, 29, -1, -1, -1, -1, -1, -1, -1, -1,
807 -1, 39, -1, -1, -1, 43, -1, -1, -1, 47,
808 -1, -1, 50, 51, 52, 53, -1, -1, -1, -1,
809 -1, -1, -1, 61, 62, -1, -1, -1, 66, 67,
810 68, 69, 70, -1, -1, -1, -1, -1, -1, 77,
811 -1, 79, 80, -1, -1, -1, -1, -1, 86, -1,
812 88, -1, -1, -1, -1, 93, 94, 95, 96, 97
Lev Walkin1004aa92004-09-08 00:28:11 +0000813};
814/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
815#line 3 "/usr/share/bison.simple"
816/* This file comes from bison-1.28. */
817
818/* Skeleton output parser for bison,
819 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
820
821 This program is free software; you can redistribute it and/or modify
822 it under the terms of the GNU General Public License as published by
823 the Free Software Foundation; either version 2, or (at your option)
824 any later version.
825
826 This program is distributed in the hope that it will be useful,
827 but WITHOUT ANY WARRANTY; without even the implied warranty of
828 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
829 GNU General Public License for more details.
830
831 You should have received a copy of the GNU General Public License
832 along with this program; if not, write to the Free Software
833 Foundation, Inc., 59 Temple Place - Suite 330,
834 Boston, MA 02111-1307, USA. */
835
836/* As a special exception, when this file is copied by Bison into a
837 Bison output file, you may use that output file without restriction.
838 This special exception was added by the Free Software Foundation
839 in version 1.24 of Bison. */
840
841/* This is the parser code that is written into each bison parser
842 when the %semantic_parser declaration is not specified in the grammar.
843 It was written by Richard Stallman by simplifying the hairy parser
844 used when %semantic_parser is specified. */
845
846#ifndef YYSTACK_USE_ALLOCA
847#ifdef alloca
848#define YYSTACK_USE_ALLOCA
849#else /* alloca not defined */
850#ifdef __GNUC__
851#define YYSTACK_USE_ALLOCA
852#define alloca __builtin_alloca
853#else /* not GNU C. */
854#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
855#define YYSTACK_USE_ALLOCA
856#include <alloca.h>
857#else /* not sparc */
858/* We think this test detects Watcom and Microsoft C. */
859/* This used to test MSDOS, but that is a bad idea
860 since that symbol is in the user namespace. */
861#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
862#if 0 /* No need for malloc.h, which pollutes the namespace;
863 instead, just don't use alloca. */
864#include <malloc.h>
865#endif
866#else /* not MSDOS, or __TURBOC__ */
867#if defined(_AIX)
868/* I don't know what this was needed for, but it pollutes the namespace.
869 So I turned it off. rms, 2 May 1997. */
870/* #include <malloc.h> */
871 #pragma alloca
872#define YYSTACK_USE_ALLOCA
873#else /* not MSDOS, or __TURBOC__, or _AIX */
874#if 0
875#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
876 and on HPUX 10. Eventually we can turn this on. */
877#define YYSTACK_USE_ALLOCA
878#define alloca __builtin_alloca
879#endif /* __hpux */
880#endif
881#endif /* not _AIX */
882#endif /* not MSDOS, or __TURBOC__ */
883#endif /* not sparc */
884#endif /* not GNU C */
885#endif /* alloca not defined */
886#endif /* YYSTACK_USE_ALLOCA not defined */
887
888#ifdef YYSTACK_USE_ALLOCA
889#define YYSTACK_ALLOC alloca
Lev Walkinf15320b2004-06-03 03:38:44 +0000890#else
Lev Walkin1004aa92004-09-08 00:28:11 +0000891#define YYSTACK_ALLOC malloc
Lev Walkinf15320b2004-06-03 03:38:44 +0000892#endif
893
Lev Walkin1004aa92004-09-08 00:28:11 +0000894/* Note: there must be only one dollar sign in this file.
895 It is replaced by the list of actions, each action
896 as one case of the switch. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000897
898#define yyerrok (yyerrstatus = 0)
899#define yyclearin (yychar = YYEMPTY)
900#define YYEMPTY -2
901#define YYEOF 0
902#define YYACCEPT goto yyacceptlab
Lev Walkin1004aa92004-09-08 00:28:11 +0000903#define YYABORT goto yyabortlab
Lev Walkinf15320b2004-06-03 03:38:44 +0000904#define YYERROR goto yyerrlab1
Lev Walkin1004aa92004-09-08 00:28:11 +0000905/* Like YYERROR except do call yyerror.
906 This remains here temporarily to ease the
907 transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +0000908 Once GCC version 2 has supplanted version 1, this can go. */
909#define YYFAIL goto yyerrlab
910#define YYRECOVERING() (!!yyerrstatus)
Lev Walkin1004aa92004-09-08 00:28:11 +0000911#define YYBACKUP(token, value) \
Lev Walkinf15320b2004-06-03 03:38:44 +0000912do \
913 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin1004aa92004-09-08 00:28:11 +0000914 { yychar = (token), yylval = (value); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000915 yychar1 = YYTRANSLATE (yychar); \
916 YYPOPSTACK; \
917 goto yybackup; \
918 } \
919 else \
Lev Walkin1004aa92004-09-08 00:28:11 +0000920 { yyerror ("syntax error: cannot back up"); YYERROR; } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000921while (0)
922
923#define YYTERROR 1
924#define YYERRCODE 256
925
Lev Walkin1004aa92004-09-08 00:28:11 +0000926#ifndef YYPURE
927#define YYLEX yylex()
Lev Walkinf15320b2004-06-03 03:38:44 +0000928#endif
929
Lev Walkin1004aa92004-09-08 00:28:11 +0000930#ifdef YYPURE
931#ifdef YYLSP_NEEDED
932#ifdef YYLEX_PARAM
933#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
934#else
935#define YYLEX yylex(&yylval, &yylloc)
936#endif
937#else /* not YYLSP_NEEDED */
938#ifdef YYLEX_PARAM
939#define YYLEX yylex(&yylval, YYLEX_PARAM)
940#else
941#define YYLEX yylex(&yylval)
942#endif
943#endif /* not YYLSP_NEEDED */
944#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000945
Lev Walkin1004aa92004-09-08 00:28:11 +0000946/* If nonreentrant, generate the variables here */
Lev Walkinf15320b2004-06-03 03:38:44 +0000947
Lev Walkin1004aa92004-09-08 00:28:11 +0000948#ifndef YYPURE
Lev Walkinf15320b2004-06-03 03:38:44 +0000949
Lev Walkin1004aa92004-09-08 00:28:11 +0000950int yychar; /* the lookahead symbol */
951YYSTYPE yylval; /* the semantic value of the */
952 /* lookahead symbol */
Lev Walkinf15320b2004-06-03 03:38:44 +0000953
Lev Walkin1004aa92004-09-08 00:28:11 +0000954#ifdef YYLSP_NEEDED
955YYLTYPE yylloc; /* location data for the lookahead */
956 /* symbol */
957#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000958
Lev Walkin1004aa92004-09-08 00:28:11 +0000959int yynerrs; /* number of parse errors so far */
960#endif /* not YYPURE */
961
962#if YYDEBUG != 0
963int yydebug; /* nonzero means print parse trace */
964/* Since this is uninitialized, it does not stop multiple parsers
965 from coexisting. */
966#endif
967
968/* YYINITDEPTH indicates the initial size of the parser's stacks */
969
Lev Walkinf15320b2004-06-03 03:38:44 +0000970#ifndef YYINITDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000971#define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +0000972#endif
973
Lev Walkin1004aa92004-09-08 00:28:11 +0000974/* YYMAXDEPTH is the maximum size the stacks can grow to
975 (effective only if the built-in stack extension method is used). */
Lev Walkinf15320b2004-06-03 03:38:44 +0000976
977#if YYMAXDEPTH == 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000978#undef YYMAXDEPTH
Lev Walkinf15320b2004-06-03 03:38:44 +0000979#endif
980
981#ifndef YYMAXDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000982#define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +0000983#endif
984
Lev Walkin1004aa92004-09-08 00:28:11 +0000985/* Define __yy_memcpy. Note that the size argument
986 should be passed with type unsigned int, because that is what the non-GCC
987 definitions require. With GCC, __builtin_memcpy takes an arg
988 of type size_t, but it can handle unsigned int. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000989
Lev Walkin1004aa92004-09-08 00:28:11 +0000990#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
991#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
992#else /* not GNU C or C++ */
993#ifndef __cplusplus
Lev Walkinf15320b2004-06-03 03:38:44 +0000994
Lev Walkin1004aa92004-09-08 00:28:11 +0000995/* This is the most reliable way to avoid incompatibilities
996 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +0000997static void
Lev Walkin1004aa92004-09-08 00:28:11 +0000998__yy_memcpy (to, from, count)
999 char *to;
1000 char *from;
1001 unsigned int count;
Lev Walkin459ab022004-09-07 10:39:09 +00001002{
Lev Walkin1004aa92004-09-08 00:28:11 +00001003 register char *f = from;
1004 register char *t = to;
1005 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001006
Lev Walkin1004aa92004-09-08 00:28:11 +00001007 while (i-- > 0)
1008 *t++ = *f++;
Lev Walkin459ab022004-09-07 10:39:09 +00001009}
Lev Walkin459ab022004-09-07 10:39:09 +00001010
Lev Walkin1004aa92004-09-08 00:28:11 +00001011#else /* __cplusplus */
Lev Walkin459ab022004-09-07 10:39:09 +00001012
Lev Walkin1004aa92004-09-08 00:28:11 +00001013/* This is the most reliable way to avoid incompatibilities
1014 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +00001015static void
Lev Walkin1004aa92004-09-08 00:28:11 +00001016__yy_memcpy (char *to, char *from, unsigned int count)
Lev Walkin459ab022004-09-07 10:39:09 +00001017{
Lev Walkin1004aa92004-09-08 00:28:11 +00001018 register char *t = to;
1019 register char *f = from;
1020 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001021
Lev Walkin1004aa92004-09-08 00:28:11 +00001022 while (i-- > 0)
1023 *t++ = *f++;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001024}
Lev Walkin609ccbb2004-09-04 04:49:21 +00001025
Lev Walkin1004aa92004-09-08 00:28:11 +00001026#endif
1027#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001028
Lev Walkin1004aa92004-09-08 00:28:11 +00001029#line 217 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00001030
1031/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1032 into yyparse. The argument should have type void *.
1033 It should actually point to an object.
1034 Grammar actions can access the variable by casting it
1035 to the proper pointer type. */
1036
1037#ifdef YYPARSE_PARAM
Lev Walkin1004aa92004-09-08 00:28:11 +00001038#ifdef __cplusplus
1039#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1040#define YYPARSE_PARAM_DECL
1041#else /* not __cplusplus */
1042#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1043#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1044#endif /* not __cplusplus */
1045#else /* not YYPARSE_PARAM */
1046#define YYPARSE_PARAM_ARG
1047#define YYPARSE_PARAM_DECL
1048#endif /* not YYPARSE_PARAM */
Lev Walkinf15320b2004-06-03 03:38:44 +00001049
1050/* Prevent warning if -Wstrict-prototypes. */
1051#ifdef __GNUC__
Lev Walkin1004aa92004-09-08 00:28:11 +00001052#ifdef YYPARSE_PARAM
Lev Walkinf15320b2004-06-03 03:38:44 +00001053int yyparse (void *);
Lev Walkin1004aa92004-09-08 00:28:11 +00001054#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001055int yyparse (void);
Lev Walkin1004aa92004-09-08 00:28:11 +00001056#endif
Lev Walkinceb20e72004-09-05 10:40:41 +00001057#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001058
Lev Walkinf15320b2004-06-03 03:38:44 +00001059int
Lev Walkin1004aa92004-09-08 00:28:11 +00001060yyparse(YYPARSE_PARAM_ARG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001061 YYPARSE_PARAM_DECL
1062{
1063 register int yystate;
1064 register int yyn;
1065 register short *yyssp;
1066 register YYSTYPE *yyvsp;
Lev Walkin1004aa92004-09-08 00:28:11 +00001067 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1068 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
Lev Walkinf15320b2004-06-03 03:38:44 +00001069
Lev Walkin1004aa92004-09-08 00:28:11 +00001070 short yyssa[YYINITDEPTH]; /* the state stack */
1071 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
Lev Walkinf15320b2004-06-03 03:38:44 +00001072
Lev Walkin1004aa92004-09-08 00:28:11 +00001073 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1074 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
Lev Walkinf15320b2004-06-03 03:38:44 +00001075
Lev Walkin1004aa92004-09-08 00:28:11 +00001076#ifdef YYLSP_NEEDED
1077 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1078 YYLTYPE *yyls = yylsa;
1079 YYLTYPE *yylsp;
1080
1081#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1082#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001083#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkin1004aa92004-09-08 00:28:11 +00001084#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001085
Lev Walkin1004aa92004-09-08 00:28:11 +00001086 int yystacksize = YYINITDEPTH;
1087 int yyfree_stacks = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001088
Lev Walkin1004aa92004-09-08 00:28:11 +00001089#ifdef YYPURE
1090 int yychar;
1091 YYSTYPE yylval;
1092 int yynerrs;
1093#ifdef YYLSP_NEEDED
1094 YYLTYPE yylloc;
1095#endif
1096#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001097
Lev Walkin1004aa92004-09-08 00:28:11 +00001098 YYSTYPE yyval; /* the variable used to return */
1099 /* semantic values from the action */
1100 /* routines */
Lev Walkinf15320b2004-06-03 03:38:44 +00001101
1102 int yylen;
1103
Lev Walkin1004aa92004-09-08 00:28:11 +00001104#if YYDEBUG != 0
1105 if (yydebug)
1106 fprintf(stderr, "Starting parse\n");
1107#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001108
1109 yystate = 0;
1110 yyerrstatus = 0;
1111 yynerrs = 0;
1112 yychar = YYEMPTY; /* Cause a token to be read. */
1113
1114 /* Initialize stack pointers.
1115 Waste one element of value and location stack
1116 so that they stay on the same level as the state stack.
1117 The wasted elements are never initialized. */
1118
Lev Walkin1004aa92004-09-08 00:28:11 +00001119 yyssp = yyss - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001120 yyvsp = yyvs;
Lev Walkin1004aa92004-09-08 00:28:11 +00001121#ifdef YYLSP_NEEDED
1122 yylsp = yyls;
1123#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001124
Lev Walkin1004aa92004-09-08 00:28:11 +00001125/* Push a new state, which is found in yystate . */
1126/* In all cases, when you get here, the value and location stacks
1127 have just been pushed. so pushing a state here evens the stacks. */
1128yynewstate:
Lev Walkinf15320b2004-06-03 03:38:44 +00001129
Lev Walkin1004aa92004-09-08 00:28:11 +00001130 *++yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001131
1132 if (yyssp >= yyss + yystacksize - 1)
1133 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001134 /* Give user a chance to reallocate the stack */
1135 /* Use copies of these so that the &'s don't force the real ones into memory. */
1136 YYSTYPE *yyvs1 = yyvs;
1137 short *yyss1 = yyss;
1138#ifdef YYLSP_NEEDED
1139 YYLTYPE *yyls1 = yyls;
1140#endif
1141
Lev Walkinf15320b2004-06-03 03:38:44 +00001142 /* Get the current used size of the three stacks, in elements. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001143 int size = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001144
1145#ifdef yyoverflow
Lev Walkin1004aa92004-09-08 00:28:11 +00001146 /* Each stack pointer address is followed by the size of
1147 the data in use in that stack, in bytes. */
1148#ifdef YYLSP_NEEDED
1149 /* This used to be a conditional around just the two extra args,
1150 but that might be undefined if yyoverflow is a macro. */
1151 yyoverflow("parser stack overflow",
1152 &yyss1, size * sizeof (*yyssp),
1153 &yyvs1, size * sizeof (*yyvsp),
1154 &yyls1, size * sizeof (*yylsp),
1155 &yystacksize);
1156#else
1157 yyoverflow("parser stack overflow",
1158 &yyss1, size * sizeof (*yyssp),
1159 &yyvs1, size * sizeof (*yyvsp),
1160 &yystacksize);
1161#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001162
Lev Walkin1004aa92004-09-08 00:28:11 +00001163 yyss = yyss1; yyvs = yyvs1;
1164#ifdef YYLSP_NEEDED
1165 yyls = yyls1;
1166#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001167#else /* no yyoverflow */
1168 /* Extend the stack our own way. */
1169 if (yystacksize >= YYMAXDEPTH)
Lev Walkin1004aa92004-09-08 00:28:11 +00001170 {
1171 yyerror("parser stack overflow");
1172 if (yyfree_stacks)
1173 {
1174 free (yyss);
1175 free (yyvs);
1176#ifdef YYLSP_NEEDED
1177 free (yyls);
1178#endif
1179 }
1180 return 2;
1181 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001182 yystacksize *= 2;
1183 if (yystacksize > YYMAXDEPTH)
1184 yystacksize = YYMAXDEPTH;
Lev Walkin1004aa92004-09-08 00:28:11 +00001185#ifndef YYSTACK_USE_ALLOCA
1186 yyfree_stacks = 1;
1187#endif
1188 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1189 __yy_memcpy ((char *)yyss, (char *)yyss1,
1190 size * (unsigned int) sizeof (*yyssp));
1191 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1192 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1193 size * (unsigned int) sizeof (*yyvsp));
1194#ifdef YYLSP_NEEDED
1195 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1196 __yy_memcpy ((char *)yyls, (char *)yyls1,
1197 size * (unsigned int) sizeof (*yylsp));
1198#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001199#endif /* no yyoverflow */
1200
Lev Walkin1004aa92004-09-08 00:28:11 +00001201 yyssp = yyss + size - 1;
1202 yyvsp = yyvs + size - 1;
1203#ifdef YYLSP_NEEDED
1204 yylsp = yyls + size - 1;
1205#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001206
Lev Walkin1004aa92004-09-08 00:28:11 +00001207#if YYDEBUG != 0
1208 if (yydebug)
1209 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1210#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001211
1212 if (yyssp >= yyss + yystacksize - 1)
1213 YYABORT;
1214 }
1215
Lev Walkin1004aa92004-09-08 00:28:11 +00001216#if YYDEBUG != 0
1217 if (yydebug)
1218 fprintf(stderr, "Entering state %d\n", yystate);
1219#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001220
1221 goto yybackup;
Lev Walkin1004aa92004-09-08 00:28:11 +00001222 yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001223
1224/* Do appropriate processing given the current state. */
1225/* Read a lookahead token if we need one and don't already have one. */
1226/* yyresume: */
1227
1228 /* First try to decide what to do without reference to lookahead token. */
1229
1230 yyn = yypact[yystate];
Lev Walkin1004aa92004-09-08 00:28:11 +00001231 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001232 goto yydefault;
1233
1234 /* Not known => get a lookahead token if don't already have one. */
1235
1236 /* yychar is either YYEMPTY or YYEOF
1237 or a valid token in external form. */
1238
1239 if (yychar == YYEMPTY)
1240 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001241#if YYDEBUG != 0
1242 if (yydebug)
1243 fprintf(stderr, "Reading a token: ");
1244#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001245 yychar = YYLEX;
1246 }
1247
Lev Walkin1004aa92004-09-08 00:28:11 +00001248 /* Convert token to internal form (in yychar1) for indexing tables with */
Lev Walkinf15320b2004-06-03 03:38:44 +00001249
Lev Walkin1004aa92004-09-08 00:28:11 +00001250 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001251 {
1252 yychar1 = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001253 yychar = YYEOF; /* Don't call YYLEX any more */
Lev Walkinf15320b2004-06-03 03:38:44 +00001254
Lev Walkin1004aa92004-09-08 00:28:11 +00001255#if YYDEBUG != 0
1256 if (yydebug)
1257 fprintf(stderr, "Now at end of input.\n");
1258#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001259 }
1260 else
1261 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001262 yychar1 = YYTRANSLATE(yychar);
Lev Walkinf15320b2004-06-03 03:38:44 +00001263
Lev Walkin1004aa92004-09-08 00:28:11 +00001264#if YYDEBUG != 0
1265 if (yydebug)
1266 {
1267 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1268 /* Give the individual parser a way to print the precise meaning
1269 of a token, for further debugging info. */
1270#ifdef YYPRINT
1271 YYPRINT (stderr, yychar, yylval);
1272#endif
1273 fprintf (stderr, ")\n");
1274 }
1275#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001276 }
1277
1278 yyn += yychar1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001279 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001280 goto yydefault;
Lev Walkin1004aa92004-09-08 00:28:11 +00001281
Lev Walkinf15320b2004-06-03 03:38:44 +00001282 yyn = yytable[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001283
1284 /* yyn is what to do for this token type in this state.
1285 Negative => reduce, -yyn is rule number.
1286 Positive => shift, yyn is new state.
1287 New state is final state => don't bother to shift,
1288 just return success.
1289 0, or most negative number => error. */
1290
1291 if (yyn < 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001292 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001293 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001294 goto yyerrlab;
1295 yyn = -yyn;
1296 goto yyreduce;
1297 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001298 else if (yyn == 0)
1299 goto yyerrlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001300
1301 if (yyn == YYFINAL)
1302 YYACCEPT;
1303
1304 /* Shift the lookahead token. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001305
1306#if YYDEBUG != 0
1307 if (yydebug)
1308 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1309#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001310
1311 /* Discard the token being shifted unless it is eof. */
1312 if (yychar != YYEOF)
1313 yychar = YYEMPTY;
1314
1315 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00001316#ifdef YYLSP_NEEDED
1317 *++yylsp = yylloc;
1318#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001319
Lev Walkin1004aa92004-09-08 00:28:11 +00001320 /* count tokens shifted since error; after three, turn off error status. */
1321 if (yyerrstatus) yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001322
1323 yystate = yyn;
1324 goto yynewstate;
1325
Lev Walkin1004aa92004-09-08 00:28:11 +00001326/* Do the default action for the current state. */
Lev Walkin459ab022004-09-07 10:39:09 +00001327yydefault:
Lev Walkin1004aa92004-09-08 00:28:11 +00001328
Lev Walkinf15320b2004-06-03 03:38:44 +00001329 yyn = yydefact[yystate];
1330 if (yyn == 0)
1331 goto yyerrlab;
1332
Lev Walkin1004aa92004-09-08 00:28:11 +00001333/* Do a reduction. yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001334yyreduce:
1335 yylen = yyr2[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001336 if (yylen > 0)
1337 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Lev Walkinf15320b2004-06-03 03:38:44 +00001338
Lev Walkin1004aa92004-09-08 00:28:11 +00001339#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00001340 if (yydebug)
1341 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001342 int i;
Lev Walkinf15320b2004-06-03 03:38:44 +00001343
Lev Walkin1004aa92004-09-08 00:28:11 +00001344 fprintf (stderr, "Reducing via rule %d (line %d), ",
1345 yyn, yyrline[yyn]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001346
1347 /* Print the symbols being reduced, and their result. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001348 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1349 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1350 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001351 }
1352#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001353
Lev Walkin1004aa92004-09-08 00:28:11 +00001354
1355 switch (yyn) {
1356
1357case 1:
Lev Walkin9d542d22006-03-14 16:31:37 +00001358#line 324 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001359{
1360 *(void **)param = yyvsp[0].a_grammar;
1361 ;
1362 break;}
1363case 2:
Lev Walkin9d542d22006-03-14 16:31:37 +00001364#line 330 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001365{
Lev Walkinf15320b2004-06-03 03:38:44 +00001366 yyval.a_grammar = asn1p_new();
1367 checkmem(yyval.a_grammar);
1368 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001369 ;
1370 break;}
1371case 3:
Lev Walkin9d542d22006-03-14 16:31:37 +00001372#line 335 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001373{
Lev Walkinf15320b2004-06-03 03:38:44 +00001374 yyval.a_grammar = yyvsp[-1].a_grammar;
1375 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001376 ;
1377 break;}
1378case 4:
Lev Walkin9d542d22006-03-14 16:31:37 +00001379#line 356 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001380{
Lev Walkinf15320b2004-06-03 03:38:44 +00001381
1382 if(yyvsp[-1].a_module) {
1383 yyval.a_module = yyvsp[-1].a_module;
1384 } else {
1385 /* There's a chance that a module is just plain empty */
1386 yyval.a_module = asn1p_module_new();
1387 }
1388 checkmem(yyval.a_module);
1389
Lev Walkinb36317c2005-08-12 10:09:10 +00001390 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00001391 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1392 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001393 ;
1394 break;}
1395case 5:
Lev Walkin9d542d22006-03-14 16:31:37 +00001396#line 377 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001397{ yyval.a_oid = 0; ;
1398 break;}
1399case 6:
Lev Walkin9d542d22006-03-14 16:31:37 +00001400#line 378 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001401{ yyval.a_oid = yyvsp[0].a_oid; ;
1402 break;}
1403case 7:
Lev Walkin9d542d22006-03-14 16:31:37 +00001404#line 382 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001405{
Lev Walkinf15320b2004-06-03 03:38:44 +00001406 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin1004aa92004-09-08 00:28:11 +00001407 ;
1408 break;}
1409case 8:
Lev Walkin9d542d22006-03-14 16:31:37 +00001410#line 385 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001411{
Lev Walkinf15320b2004-06-03 03:38:44 +00001412 yyval.a_oid = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001413 ;
1414 break;}
1415case 9:
Lev Walkin9d542d22006-03-14 16:31:37 +00001416#line 391 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001417{
Lev Walkinf15320b2004-06-03 03:38:44 +00001418 yyval.a_oid = asn1p_oid_new();
1419 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1420 if(yyvsp[0].a_oid_arc.name)
1421 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001422 ;
1423 break;}
1424case 10:
Lev Walkin9d542d22006-03-14 16:31:37 +00001425#line 397 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001426{
Lev Walkinf15320b2004-06-03 03:38:44 +00001427 yyval.a_oid = yyvsp[-1].a_oid;
1428 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1429 if(yyvsp[0].a_oid_arc.name)
1430 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001431 ;
1432 break;}
1433case 11:
Lev Walkin9d542d22006-03-14 16:31:37 +00001434#line 406 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001435{ /* iso */
Lev Walkinf15320b2004-06-03 03:38:44 +00001436 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1437 yyval.a_oid_arc.number = -1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001438 ;
1439 break;}
1440case 12:
Lev Walkin9d542d22006-03-14 16:31:37 +00001441#line 410 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001442{ /* iso(1) */
Lev Walkinf15320b2004-06-03 03:38:44 +00001443 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1444 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001445 ;
1446 break;}
1447case 13:
Lev Walkin9d542d22006-03-14 16:31:37 +00001448#line 414 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001449{ /* 1 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001450 yyval.a_oid_arc.name = 0;
1451 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001452 ;
1453 break;}
1454case 14:
Lev Walkin9d542d22006-03-14 16:31:37 +00001455#line 424 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001456{ yyval.a_module_flags = MSF_NOFLAGS; ;
1457 break;}
1458case 15:
Lev Walkin9d542d22006-03-14 16:31:37 +00001459#line 425 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001460{
Lev Walkinf15320b2004-06-03 03:38:44 +00001461 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001462 ;
1463 break;}
1464case 16:
Lev Walkin9d542d22006-03-14 16:31:37 +00001465#line 434 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001466{
Lev Walkinf15320b2004-06-03 03:38:44 +00001467 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001468 ;
1469 break;}
1470case 17:
Lev Walkin9d542d22006-03-14 16:31:37 +00001471#line 437 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001472{
Lev Walkinf15320b2004-06-03 03:38:44 +00001473 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001474 ;
1475 break;}
1476case 18:
Lev Walkin9d542d22006-03-14 16:31:37 +00001477#line 446 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001478{
Lev Walkinf15320b2004-06-03 03:38:44 +00001479 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001480 ;
1481 break;}
1482case 19:
Lev Walkin9d542d22006-03-14 16:31:37 +00001483#line 449 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001484{
Lev Walkinf15320b2004-06-03 03:38:44 +00001485 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001486 ;
1487 break;}
1488case 20:
Lev Walkin9d542d22006-03-14 16:31:37 +00001489#line 452 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001490{
Lev Walkinf15320b2004-06-03 03:38:44 +00001491 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001492 ;
1493 break;}
1494case 21:
Lev Walkin9d542d22006-03-14 16:31:37 +00001495#line 455 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001496{
Lev Walkinf15320b2004-06-03 03:38:44 +00001497 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin1004aa92004-09-08 00:28:11 +00001498 ;
1499 break;}
1500case 22:
Lev Walkin9d542d22006-03-14 16:31:37 +00001501#line 459 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001502{
Lev Walkinf59d0752004-08-18 04:59:12 +00001503 /* X.680Amd1 specifies TAG and XER */
1504 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1505 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1506 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1507 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1508 } else {
1509 fprintf(stderr,
1510 "WARNING: %s INSTRUCTIONS at line %d: "
1511 "Unrecognized encoding reference\n",
1512 yyvsp[-1].tv_str, yylineno);
1513 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1514 }
1515 free(yyvsp[-1].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00001516 ;
1517 break;}
1518case 23:
Lev Walkin9d542d22006-03-14 16:31:37 +00001519#line 480 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001520{ yyval.a_module = 0; ;
1521 break;}
1522case 24:
Lev Walkin9d542d22006-03-14 16:31:37 +00001523#line 481 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001524{
Lev Walkinf15320b2004-06-03 03:38:44 +00001525 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001526 ;
1527 break;}
1528case 25:
Lev Walkin9d542d22006-03-14 16:31:37 +00001529#line 490 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001530{
Lev Walkinf59d0752004-08-18 04:59:12 +00001531 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001532 ;
1533 break;}
1534case 26:
Lev Walkin9d542d22006-03-14 16:31:37 +00001535#line 493 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001536{
Lev Walkinf15320b2004-06-03 03:38:44 +00001537 yyval.a_module = yyvsp[-1].a_module;
1538
Lev Walkinf59d0752004-08-18 04:59:12 +00001539 /* Behave well when one of them is skipped. */
1540 if(!(yyvsp[-1].a_module)) {
1541 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1542 break;
1543 }
1544
Lev Walkinf15320b2004-06-03 03:38:44 +00001545#ifdef MY_IMPORT
1546#error MY_IMPORT DEFINED ELSEWHERE!
1547#endif
1548#define MY_IMPORT(foo,field) do { \
Lev Walkinbc55d232004-08-13 12:31:09 +00001549 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
Lev Walkinf15320b2004-06-03 03:38:44 +00001550 TQ_ADD(&(yyval.a_module->foo), \
1551 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1552 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001553 } \
1554 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1555 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001556
1557 MY_IMPORT(imports, xp_next);
1558 MY_IMPORT(exports, xp_next);
1559 MY_IMPORT(members, next);
1560#undef MY_IMPORT
1561
Lev Walkin1004aa92004-09-08 00:28:11 +00001562 ;
1563 break;}
1564case 27:
Lev Walkin9d542d22006-03-14 16:31:37 +00001565#line 526 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001566{
Lev Walkinf15320b2004-06-03 03:38:44 +00001567 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001568 ;
1569 break;}
1570case 28:
Lev Walkin9d542d22006-03-14 16:31:37 +00001571#line 529 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001572{
Lev Walkinf15320b2004-06-03 03:38:44 +00001573 yyval.a_module = asn1p_module_new();
1574 checkmem(yyval.a_module);
1575 if(yyvsp[0].a_xports) {
1576 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1577 } else {
1578 /* "EXPORTS ALL;" ? */
1579 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001580 ;
1581 break;}
1582case 29:
Lev Walkin9d542d22006-03-14 16:31:37 +00001583#line 538 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001584{
Lev Walkinf59d0752004-08-18 04:59:12 +00001585 yyval.a_module = asn1p_module_new();
1586 checkmem(yyval.a_module);
1587 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1588 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1589 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001590 ;
1591 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001592case 30:
Lev Walkin9d542d22006-03-14 16:31:37 +00001593#line 545 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001594{
1595 yyval.a_module = asn1p_module_new();
1596 checkmem(yyval.a_module);
1597 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1598 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1599 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1600 ;
1601 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001602case 31:
Lev Walkin9d542d22006-03-14 16:31:37 +00001603#line 558 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001604{
Lev Walkinf59d0752004-08-18 04:59:12 +00001605 yyval.a_module = asn1p_module_new();
1606 checkmem(yyval.a_module);
1607 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1608 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1609 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001610 ;
1611 break;}
1612case 32:
Lev Walkin9d542d22006-03-14 16:31:37 +00001613#line 566 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001614{ asn1p_lexer_hack_push_encoding_control(); ;
1615 break;}
1616case 33:
Lev Walkin9d542d22006-03-14 16:31:37 +00001617#line 567 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001618{
Lev Walkinf59d0752004-08-18 04:59:12 +00001619 fprintf(stderr,
1620 "WARNING: ENCODING-CONTROL %s "
1621 "specification at line %d ignored\n",
1622 yyvsp[-1].tv_str, yylineno);
1623 free(yyvsp[-1].tv_str);
1624 yyval.a_module = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001625 ;
1626 break;}
1627case 34:
Lev Walkin9d542d22006-03-14 16:31:37 +00001628#line 579 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001629{
Lev Walkinf15320b2004-06-03 03:38:44 +00001630 return yyerror(
Lev Walkin70853052005-11-26 11:21:55 +00001631 "Attempt to redefine a standard basic string type, "
1632 "please comment out or remove this type redefinition.");
Lev Walkin1004aa92004-09-08 00:28:11 +00001633 ;
1634 break;}
1635case 35:
Lev Walkin9d542d22006-03-14 16:31:37 +00001636#line 592 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001637{
Lev Walkinb36317c2005-08-12 10:09:10 +00001638 if(!saved_aid && 0)
1639 return yyerror("Unterminated IMPORTS FROM, "
1640 "expected semicolon ';'");
1641 saved_aid = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001642 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001643 ;
1644 break;}
1645case 36:
Lev Walkin9d542d22006-03-14 16:31:37 +00001646#line 602 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001647{
Lev Walkinf15320b2004-06-03 03:38:44 +00001648 return yyerror("Empty IMPORTS list");
Lev Walkin1004aa92004-09-08 00:28:11 +00001649 ;
1650 break;}
1651case 37:
Lev Walkin9d542d22006-03-14 16:31:37 +00001652#line 608 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001653{
Lev Walkinf15320b2004-06-03 03:38:44 +00001654 yyval.a_module = asn1p_module_new();
1655 checkmem(yyval.a_module);
1656 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001657 ;
1658 break;}
1659case 38:
Lev Walkin9d542d22006-03-14 16:31:37 +00001660#line 613 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001661{
Lev Walkinf15320b2004-06-03 03:38:44 +00001662 yyval.a_module = yyvsp[-1].a_module;
1663 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001664 ;
1665 break;}
1666case 39:
Lev Walkin9d542d22006-03-14 16:31:37 +00001667#line 620 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001668{ memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
1669 break;}
1670case 40:
Lev Walkin9d542d22006-03-14 16:31:37 +00001671#line 621 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001672{ yyval.a_aid.oid = yyvsp[0].a_oid; ;
1673 break;}
1674case 41:
Lev Walkin9d542d22006-03-14 16:31:37 +00001675#line 625 "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;
Lev Walkinb36317c2005-08-12 10:09:10 +00001678 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
1679 yyval.a_xports->identifier = yyvsp[0].a_aid;
1680 /* This stupid thing is used for look-back hack. */
1681 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
Lev Walkinf15320b2004-06-03 03:38:44 +00001682 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001683 ;
1684 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001685case 42:
Lev Walkin9d542d22006-03-14 16:31:37 +00001686#line 636 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001687{
Lev Walkinf15320b2004-06-03 03:38:44 +00001688 yyval.a_xports = asn1p_xports_new();
1689 checkmem(yyval.a_xports);
1690 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001691 ;
1692 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001693case 43:
Lev Walkin9d542d22006-03-14 16:31:37 +00001694#line 641 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001695{
Lev Walkinf15320b2004-06-03 03:38:44 +00001696 yyval.a_xports = yyvsp[-2].a_xports;
1697 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001698 ;
1699 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001700case 44:
Lev Walkin9d542d22006-03-14 16:31:37 +00001701#line 648 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001702{
Lev Walkinf15320b2004-06-03 03:38:44 +00001703 yyval.a_expr = asn1p_expr_new(yylineno);
1704 checkmem(yyval.a_expr);
1705 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1706 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001707 ;
1708 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001709case 45:
Lev Walkin9d542d22006-03-14 16:31:37 +00001710#line 654 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001711{ /* Completely equivalent to above */
1712 yyval.a_expr = asn1p_expr_new(yylineno);
1713 checkmem(yyval.a_expr);
1714 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1715 yyval.a_expr->expr_type = A1TC_REFERENCE;
1716 ;
1717 break;}
1718case 46:
Lev Walkin9d542d22006-03-14 16:31:37 +00001719#line 660 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001720{
1721 yyval.a_expr = asn1p_expr_new(yylineno);
1722 checkmem(yyval.a_expr);
1723 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1724 yyval.a_expr->expr_type = A1TC_REFERENCE;
1725 ;
1726 break;}
1727case 47:
Lev Walkin9d542d22006-03-14 16:31:37 +00001728#line 669 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001729{
Lev Walkinf15320b2004-06-03 03:38:44 +00001730 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin1004aa92004-09-08 00:28:11 +00001731 ;
1732 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001733case 48:
Lev Walkin9d542d22006-03-14 16:31:37 +00001734#line 672 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001735{
Lev Walkinf15320b2004-06-03 03:38:44 +00001736 yyval.a_xports = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001737 ;
1738 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001739case 49:
Lev Walkin9d542d22006-03-14 16:31:37 +00001740#line 675 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001741{
Lev Walkinf15320b2004-06-03 03:38:44 +00001742 /* Empty EXPORTS clause effectively prohibits export. */
1743 yyval.a_xports = asn1p_xports_new();
1744 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001745 ;
1746 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001747case 50:
Lev Walkin9d542d22006-03-14 16:31:37 +00001748#line 683 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001749{
Lev Walkinf15320b2004-06-03 03:38:44 +00001750 yyval.a_xports = asn1p_xports_new();
1751 assert(yyval.a_xports);
1752 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001753 ;
1754 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001755case 51:
Lev Walkin9d542d22006-03-14 16:31:37 +00001756#line 688 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001757{
Lev Walkinf15320b2004-06-03 03:38:44 +00001758 yyval.a_xports = yyvsp[-2].a_xports;
1759 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001760 ;
1761 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001762case 52:
Lev Walkin9d542d22006-03-14 16:31:37 +00001763#line 695 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001764{
1765 yyval.a_expr = asn1p_expr_new(yylineno);
1766 checkmem(yyval.a_expr);
1767 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1768 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1769 ;
1770 break;}
1771case 53:
Lev Walkin9d542d22006-03-14 16:31:37 +00001772#line 701 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001773{
1774 yyval.a_expr = asn1p_expr_new(yylineno);
1775 checkmem(yyval.a_expr);
1776 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1777 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1778 ;
Lev Walkin8ea99482005-03-31 21:48:13 +00001779 break;}
1780case 54:
Lev Walkin9d542d22006-03-14 16:31:37 +00001781#line 707 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001782{
1783 yyval.a_expr = asn1p_expr_new(yylineno);
1784 checkmem(yyval.a_expr);
1785 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1786 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1787 ;
1788 break;}
1789case 55:
Lev Walkin9d542d22006-03-14 16:31:37 +00001790#line 718 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001791{ asn1p_lexer_hack_push_opaque_state(); ;
1792 break;}
1793case 56:
Lev Walkin9d542d22006-03-14 16:31:37 +00001794#line 718 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001795{
Lev Walkinf15320b2004-06-03 03:38:44 +00001796 yyval.a_expr = yyvsp[-4].a_expr;
1797 assert(yyval.a_expr->Identifier == 0);
1798 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1799 yyval.a_expr->meta_type = AMT_VALUESET;
Lev Walkin8ea99482005-03-31 21:48:13 +00001800 // take care of ValueSet body
Lev Walkin1004aa92004-09-08 00:28:11 +00001801 ;
1802 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001803case 57:
Lev Walkin9d542d22006-03-14 16:31:37 +00001804#line 728 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001805{
Lev Walkinf15320b2004-06-03 03:38:44 +00001806 yyval.a_expr = asn1p_expr_new(yylineno);
1807 checkmem(yyval.a_expr);
1808 yyval.a_expr->reference = yyvsp[0].a_ref;
1809 yyval.a_expr->expr_type = A1TC_REFERENCE;
1810 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001811 ;
1812 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001813case 58:
Lev Walkin9d542d22006-03-14 16:31:37 +00001814#line 735 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001815{
Lev Walkinf15320b2004-06-03 03:38:44 +00001816 yyval.a_expr = asn1p_expr_new(yylineno);
1817 checkmem(yyval.a_expr);
1818 yyval.a_expr->expr_type = yyvsp[0].a_type;
1819 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001820 ;
1821 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001822case 59:
Lev Walkin9d542d22006-03-14 16:31:37 +00001823#line 753 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001824{
Lev Walkinf15320b2004-06-03 03:38:44 +00001825 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00001826 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00001827 assert(yyval.a_expr->expr_type);
1828 assert(yyval.a_expr->meta_type);
Lev Walkin1004aa92004-09-08 00:28:11 +00001829 ;
1830 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001831case 60:
Lev Walkin9d542d22006-03-14 16:31:37 +00001832#line 759 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001833{
Lev Walkinf15320b2004-06-03 03:38:44 +00001834 yyval.a_expr = yyvsp[0].a_expr;
1835 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1836 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
Lev Walkin9c2285a2006-03-09 08:49:26 +00001837 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin1004aa92004-09-08 00:28:11 +00001838 ;
1839 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001840case 61:
Lev Walkin9d542d22006-03-14 16:31:37 +00001841#line 775 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001842{
Lev Walkinf15320b2004-06-03 03:38:44 +00001843 yyval.a_expr = yyvsp[0].a_expr;
1844 assert(yyval.a_expr->Identifier == 0);
1845 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1846 yyval.a_expr->params = yyvsp[-3].a_plist;
1847 yyval.a_expr->meta_type = AMT_PARAMTYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001848 ;
1849 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001850case 62:
Lev Walkin9d542d22006-03-14 16:31:37 +00001851#line 785 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001852{
Lev Walkinf15320b2004-06-03 03:38:44 +00001853 int ret;
1854 yyval.a_plist = asn1p_paramlist_new(yylineno);
1855 checkmem(yyval.a_plist);
1856 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1857 checkmem(ret == 0);
1858 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1859 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001860 ;
1861 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001862case 63:
Lev Walkin9d542d22006-03-14 16:31:37 +00001863#line 794 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001864{
Lev Walkinf15320b2004-06-03 03:38:44 +00001865 int ret;
1866 yyval.a_plist = yyvsp[-2].a_plist;
1867 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1868 checkmem(ret == 0);
1869 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1870 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001871 ;
1872 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001873case 64:
Lev Walkin9d542d22006-03-14 16:31:37 +00001874#line 805 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001875{
Lev Walkinf15320b2004-06-03 03:38:44 +00001876 yyval.a_parg.governor = NULL;
1877 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001878 ;
1879 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001880case 65:
Lev Walkin9d542d22006-03-14 16:31:37 +00001881#line 809 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00001882{
1883 int ret;
1884 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1885 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1886 checkmem(ret == 0);
1887 yyval.a_parg.argument = yyvsp[0].tv_str;
1888 ;
1889 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001890case 66:
Lev Walkin9d542d22006-03-14 16:31:37 +00001891#line 816 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001892{
1893 int ret;
1894 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1895 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1896 checkmem(ret == 0);
1897 yyval.a_parg.argument = yyvsp[0].tv_str;
1898 ;
1899 break;}
1900case 67:
Lev Walkin9d542d22006-03-14 16:31:37 +00001901#line 823 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00001902{
1903 int ret;
1904 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00001905 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1906 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1907 checkmem(ret == 0);
1908 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001909 ;
1910 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001911case 68:
Lev Walkin9d542d22006-03-14 16:31:37 +00001912#line 834 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001913{
Lev Walkinf15320b2004-06-03 03:38:44 +00001914 yyval.a_expr = asn1p_expr_new(yylineno);
1915 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001916 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1917 ;
1918 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001919case 69:
Lev Walkin9d542d22006-03-14 16:31:37 +00001920#line 839 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001921{
Lev Walkinf15320b2004-06-03 03:38:44 +00001922 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001923 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1924 ;
1925 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001926case 70:
Lev Walkin9d542d22006-03-14 16:31:37 +00001927#line 846 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001928{
Lev Walkinf15320b2004-06-03 03:38:44 +00001929 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001930 ;
1931 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001932case 71:
Lev Walkin9d542d22006-03-14 16:31:37 +00001933#line 849 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001934{
Lev Walkinf15320b2004-06-03 03:38:44 +00001935 yyval.a_expr = asn1p_expr_new(yylineno);
1936 checkmem(yyval.a_expr);
1937 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1938 yyval.a_expr->expr_type = A1TC_REFERENCE;
1939 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001940 ;
1941 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001942case 72:
Lev Walkin9d542d22006-03-14 16:31:37 +00001943#line 873 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001944{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1945 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001946case 73:
Lev Walkin9d542d22006-03-14 16:31:37 +00001947#line 874 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001948{ yyval.a_expr = yyvsp[0].a_expr; ;
1949 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001950case 74:
Lev Walkin9d542d22006-03-14 16:31:37 +00001951#line 877 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001952{
Lev Walkinf15320b2004-06-03 03:38:44 +00001953 yyval.a_expr = asn1p_expr_new(yylineno);
1954 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001955 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1956 ;
1957 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001958case 75:
Lev Walkin9d542d22006-03-14 16:31:37 +00001959#line 882 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001960{
Lev Walkinf15320b2004-06-03 03:38:44 +00001961 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001962 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1963 ;
1964 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001965case 76:
Lev Walkin9d542d22006-03-14 16:31:37 +00001966#line 889 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001967{
Lev Walkin070a52d2004-08-22 03:19:54 +00001968 yyval.a_expr = yyvsp[-1].a_expr;
1969 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00001970 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinef625402005-09-05 05:17:57 +00001971 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
Lev Walkin070a52d2004-08-22 03:19:54 +00001972 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00001973 ;
1974 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001975case 77:
Lev Walkin9d542d22006-03-14 16:31:37 +00001976#line 896 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001977{
Lev Walkinef625402005-09-05 05:17:57 +00001978 yyval.a_expr = yyvsp[-1].a_expr;
1979 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
1980 yyval.a_expr->marker = yyvsp[0].a_marker;
1981 _fixup_anonymous_identifier(yyval.a_expr);
1982 ;
1983 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001984case 78:
Lev Walkin9d542d22006-03-14 16:31:37 +00001985#line 902 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00001986{
Lev Walkin070a52d2004-08-22 03:19:54 +00001987 yyval.a_expr = asn1p_expr_new(yylineno);
1988 checkmem(yyval.a_expr);
1989 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1990 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001991 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1992 ;
1993 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001994case 79:
Lev Walkin9d542d22006-03-14 16:31:37 +00001995#line 909 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001996{
Lev Walkin070a52d2004-08-22 03:19:54 +00001997 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001998 ;
1999 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002000case 80:
Lev Walkin9d542d22006-03-14 16:31:37 +00002001#line 915 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002002{
Lev Walkin070a52d2004-08-22 03:19:54 +00002003 yyval.a_expr = asn1p_expr_new(yylineno);
2004 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002005 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2006 ;
2007 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002008case 81:
Lev Walkin9d542d22006-03-14 16:31:37 +00002009#line 920 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002010{
Lev Walkin070a52d2004-08-22 03:19:54 +00002011 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002012 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2013 ;
2014 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002015case 82:
Lev Walkin9d542d22006-03-14 16:31:37 +00002016#line 927 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002017{
Lev Walkin070a52d2004-08-22 03:19:54 +00002018 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002019 assert(yyval.a_expr->Identifier == 0);
2020 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002021 ;
2022 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002023case 83:
Lev Walkin9d542d22006-03-14 16:31:37 +00002024#line 932 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002025{
2026 yyval.a_expr = yyvsp[0].a_expr;
2027 ;
2028 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002029case 84:
Lev Walkin9d542d22006-03-14 16:31:37 +00002030#line 935 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002031{
2032 yyval.a_expr = yyvsp[0].a_expr;
2033 _fixup_anonymous_identifier(yyval.a_expr);
2034 ;
2035 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002036case 85:
Lev Walkin9d542d22006-03-14 16:31:37 +00002037#line 942 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002038{
Lev Walkinf15320b2004-06-03 03:38:44 +00002039 yyval.a_expr = yyvsp[-2].a_expr;
2040 checkmem(yyval.a_expr);
2041 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2042 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
Lev Walkin9c2285a2006-03-09 08:49:26 +00002043 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin1004aa92004-09-08 00:28:11 +00002044 ;
2045 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002046case 86:
Lev Walkin9d542d22006-03-14 16:31:37 +00002047#line 952 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002048{ yyval.a_int = 0; ;
2049 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002050case 87:
Lev Walkin9d542d22006-03-14 16:31:37 +00002051#line 953 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002052{ yyval.a_int = 1; ;
2053 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002054case 88:
Lev Walkin9d542d22006-03-14 16:31:37 +00002055#line 957 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002056{
Lev Walkinf15320b2004-06-03 03:38:44 +00002057 yyval.a_expr = asn1p_expr_new(yylineno);
2058 checkmem(yyval.a_expr);
2059 yyval.a_expr->expr_type = A1TC_CLASSDEF;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002060 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2061 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2062 ;
2063 break;}
2064case 89:
Lev Walkin9d542d22006-03-14 16:31:37 +00002065#line 964 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002066{
2067 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002068 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2069 ;
2070 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002071case 90:
Lev Walkin9d542d22006-03-14 16:31:37 +00002072#line 974 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002073{
Lev Walkin9c2285a2006-03-09 08:49:26 +00002074 yyval.a_expr = asn1p_expr_new(yylineno);
2075 checkmem(yyval.a_expr);
2076 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2077 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2078 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2079 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002080 ;
2081 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002082case 91:
Lev Walkin9d542d22006-03-14 16:31:37 +00002083#line 984 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002084{
Lev Walkinf15320b2004-06-03 03:38:44 +00002085 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin9c2285a2006-03-09 08:49:26 +00002086 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00002087 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002088 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2089 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkinf15320b2004-06-03 03:38:44 +00002090 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002091 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002092 ;
2093 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002094case 92:
Lev Walkin9d542d22006-03-14 16:31:37 +00002095#line 995 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002096{
Lev Walkin9c2285a2006-03-09 08:49:26 +00002097 yyval.a_expr = asn1p_expr_new(yylineno);
2098 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2099 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2100 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2101 yyval.a_expr->reference = yyvsp[-1].a_ref;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002102 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002103 ;
2104 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002105case 93:
Lev Walkin9d542d22006-03-14 16:31:37 +00002106#line 1005 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002107{
Lev Walkinf15320b2004-06-03 03:38:44 +00002108 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin9c2285a2006-03-09 08:49:26 +00002109 checkmem(yyval.a_expr);
2110 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2111 yyval.a_expr->reference = yyvsp[-1].a_ref;
2112 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2113 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2114 yyval.a_expr->marker = yyvsp[0].a_marker;
2115 ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002116 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002117case 94:
Lev Walkin9d542d22006-03-14 16:31:37 +00002118#line 1016 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002119{
2120 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin9c2285a2006-03-09 08:49:26 +00002121 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002122 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
Lev Walkin1db91132006-03-09 09:11:53 +00002123 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2124 yyval.a_expr->reference = yyvsp[-1].a_ref;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002125 yyval.a_expr->marker = yyvsp[0].a_marker;
2126 ;
2127 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002128case 95:
Lev Walkin9d542d22006-03-14 16:31:37 +00002129#line 1026 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002130{
2131 yyval.a_expr = asn1p_expr_new(yylineno);
2132 checkmem(yyval.a_expr);
2133 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2134 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2135 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2136 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
2137 yyval.a_expr->marker = yyvsp[0].a_marker;
2138 ;
2139 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002140case 96:
Lev Walkin9d542d22006-03-14 16:31:37 +00002141#line 1037 "asn1p_y.y"
Lev Walkin1db91132006-03-09 09:11:53 +00002142{
2143 yyval.a_expr = asn1p_expr_new(yylineno);
2144 checkmem(yyval.a_expr);
2145 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2146 yyval.a_expr->reference = yyvsp[-1].a_ref;
2147 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2148 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2149 yyval.a_expr->marker = yyvsp[0].a_marker;
2150 ;
2151 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002152case 97:
Lev Walkin9d542d22006-03-14 16:31:37 +00002153#line 1049 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002154{ yyval.a_wsynt = 0; ;
2155 break;}
2156case 98:
Lev Walkin9d542d22006-03-14 16:31:37 +00002157#line 1050 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002158{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002159 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002160 ;
2161 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002162case 99:
Lev Walkin9d542d22006-03-14 16:31:37 +00002163#line 1057 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002164{ asn1p_lexer_hack_enable_with_syntax(); ;
2165 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002166case 100:
Lev Walkin9d542d22006-03-14 16:31:37 +00002167#line 1059 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002168{
2169 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2170 ;
2171 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002172case 101:
Lev Walkin9d542d22006-03-14 16:31:37 +00002173#line 1065 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002174{
Lev Walkinf15320b2004-06-03 03:38:44 +00002175 yyval.a_wsynt = asn1p_wsyntx_new();
2176 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002177 ;
2178 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002179case 102:
Lev Walkin9d542d22006-03-14 16:31:37 +00002180#line 1069 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002181{
Lev Walkinf15320b2004-06-03 03:38:44 +00002182 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2183 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002184 ;
2185 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002186case 103:
Lev Walkin9d542d22006-03-14 16:31:37 +00002187#line 1076 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002188{
Lev Walkinf15320b2004-06-03 03:38:44 +00002189 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 +00002190 ;
2191 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002192case 104:
Lev Walkin9d542d22006-03-14 16:31:37 +00002193#line 1079 "asn1p_y.y"
2194{
2195 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_str, strlen(yyvsp[0].tv_str), 0);
2196 ;
2197 break;}
2198case 105:
2199#line 1082 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002200{
Lev Walkinf15320b2004-06-03 03:38:44 +00002201 asn1p_ref_t *ref;
2202 int ret;
2203 ref = asn1p_ref_new(yylineno);
2204 checkmem(ref);
2205 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2206 checkmem(ret == 0);
2207 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002208 ;
2209 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002210case 106:
Lev Walkin9d542d22006-03-14 16:31:37 +00002211#line 1091 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002212{
Lev Walkin9d542d22006-03-14 16:31:37 +00002213 yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
Lev Walkin9c2285a2006-03-09 08:49:26 +00002214 ;
2215 break;}
2216case 107:
Lev Walkin9d542d22006-03-14 16:31:37 +00002217#line 1097 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002218{
2219 yyval.a_expr = asn1p_expr_new(yylineno);
2220 checkmem(yyval.a_expr);
2221 yyval.a_expr->Identifier = strdup("...");
Lev Walkin9c2285a2006-03-09 08:49:26 +00002222 checkmem(yyval.a_expr->Identifier);
2223 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2224 yyval.a_expr->meta_type = AMT_TYPE;
2225 ;
2226 break;}
2227case 108:
Lev Walkin9d542d22006-03-14 16:31:37 +00002228#line 1105 "asn1p_y.y"
2229{
2230 yyval.a_expr = asn1p_expr_new(yylineno);
2231 checkmem(yyval.a_expr);
2232 yyval.a_expr->Identifier = strdup("...");
2233 checkmem(yyval.a_expr->Identifier);
2234 yyval.a_expr->value = yyvsp[0].a_value;
2235 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2236 yyval.a_expr->meta_type = AMT_TYPE;
2237 ;
2238 break;}
2239case 109:
2240#line 1114 "asn1p_y.y"
2241{
2242 yyval.a_expr = asn1p_expr_new(yylineno);
2243 checkmem(yyval.a_expr);
2244 yyval.a_expr->Identifier = strdup("...");
2245 yyval.a_expr->value = yyvsp[0].a_value;
2246 checkmem(yyval.a_expr->Identifier);
2247 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2248 yyval.a_expr->meta_type = AMT_TYPE;
2249 ;
2250 break;}
2251case 110:
2252#line 1126 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002253{
Lev Walkin070a52d2004-08-22 03:19:54 +00002254 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00002255 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002256 /*
2257 * Outer constraint for SEQUENCE OF and SET OF applies
2258 * to the inner type.
2259 */
2260 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2261 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2262 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2263 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2264 } else {
2265 if(yyval.a_expr->constraints) {
Lev Walkinaf120f72004-09-14 02:36:39 +00002266 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002267 } else {
2268 yyval.a_expr->constraints = yyvsp[0].a_constr;
2269 }
2270 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002271 ;
2272 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002273case 111:
2274#line 1148 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00002275{
2276 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
2277 asn1p_as_pointer = 0;
2278 ;
Lev Walkin4696c742005-08-22 12:23:54 +00002279 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002280case 112:
2281#line 1155 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002282{
Lev Walkind2ea1de2004-08-20 13:25:29 +00002283 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinef625402005-09-05 05:17:57 +00002284 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
2285
2286 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2287 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
2288 fprintf(stderr,
2289 "INFO: Directive <ASN1C:RepresentAsPointer> "
2290 "applied to %s at line %d\n",
2291 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2292 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2293 : "member",
2294 yyval.a_expr->_lineno
2295 );
2296 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002297 ;
2298 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002299case 113:
2300#line 1174 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002301{
Lev Walkin4696c742005-08-22 12:23:54 +00002302 yyval.a_expr = yyvsp[0].a_expr;
2303 ;
2304 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002305case 114:
2306#line 1177 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002307{
Lev Walkinef625402005-09-05 05:17:57 +00002308 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinc7d939d2005-03-20 11:12:40 +00002309 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2310 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
Lev Walkinf15320b2004-06-03 03:38:44 +00002311 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002312 ;
2313 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002314case 115:
2315#line 1183 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002316{
Lev Walkinef625402005-09-05 05:17:57 +00002317 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002318 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002319 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
Lev Walkin070a52d2004-08-22 03:19:54 +00002320 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002321 ;
2322 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002323case 116:
2324#line 1189 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002325{
Lev Walkinef625402005-09-05 05:17:57 +00002326 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002327 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002328 yyval.a_expr->expr_type = ASN_CONSTR_SET;
Lev Walkin070a52d2004-08-22 03:19:54 +00002329 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002330 ;
2331 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002332case 117:
2333#line 1195 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002334{
Lev Walkinceb20e72004-09-05 10:40:41 +00002335 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002336 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002337 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002338 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2339 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002340 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002341 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002342 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2343 ;
2344 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002345case 118:
2346#line 1205 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002347{
Lev Walkinceb20e72004-09-05 10:40:41 +00002348 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002349 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002350 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002351 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2352 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002353 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002354 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002355 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2356 ;
2357 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002358case 119:
2359#line 1215 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002360{
Lev Walkinceb20e72004-09-05 10:40:41 +00002361 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002362 checkmem(yyval.a_expr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002363 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002364 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002365 ;
2366 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002367case 120:
2368#line 1221 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002369{
Lev Walkin070a52d2004-08-22 03:19:54 +00002370 int ret;
Lev Walkinceb20e72004-09-05 10:40:41 +00002371 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002372 checkmem(yyval.a_expr);
2373 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2374 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2375 yyvsp[0].tv_str, RLT_lowercase);
2376 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002377 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002378 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002379 ;
2380 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002381case 121:
2382#line 1235 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002383{
Lev Walkinf15320b2004-06-03 03:38:44 +00002384 int ret;
2385 yyval.a_expr = yyvsp[-1].a_expr;
2386 assert(yyval.a_expr->expr_type == 0);
2387 assert(yyval.a_expr->meta_type == 0);
2388 assert(yyval.a_expr->reference == 0);
2389 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2390 checkmem(yyval.a_expr->reference);
2391 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2392 checkmem(ret == 0);
2393 free(yyvsp[-3].tv_str);
2394 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2395 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002396 ;
2397 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002398case 122:
2399#line 1259 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002400{
Lev Walkinf15320b2004-06-03 03:38:44 +00002401 yyval.a_expr = asn1p_expr_new(yylineno);
2402 checkmem(yyval.a_expr);
2403 yyval.a_expr->reference = yyvsp[0].a_ref;
2404 yyval.a_expr->expr_type = A1TC_REFERENCE;
2405 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00002406 ;
2407 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002408case 123:
2409#line 1266 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002410{
Lev Walkinf15320b2004-06-03 03:38:44 +00002411 yyval.a_expr = asn1p_expr_new(yylineno);
2412 checkmem(yyval.a_expr);
2413 yyval.a_expr->reference = yyvsp[0].a_ref;
2414 yyval.a_expr->expr_type = A1TC_INSTANCE;
2415 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002416 ;
2417 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002418case 124:
2419#line 1281 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002420{
Lev Walkinf15320b2004-06-03 03:38:44 +00002421 int ret;
2422 yyval.a_ref = asn1p_ref_new(yylineno);
2423 checkmem(yyval.a_ref);
2424 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2425 checkmem(ret == 0);
2426 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002427 ;
2428 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002429case 125:
Lev Walkin9d542d22006-03-14 16:31:37 +00002430#line 1289 "asn1p_y.y"
2431{
2432 int ret;
2433 yyval.a_ref = asn1p_ref_new(yylineno);
2434 checkmem(yyval.a_ref);
2435 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2436 checkmem(ret == 0);
2437 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2438 checkmem(ret == 0);
2439 free(yyvsp[-2].tv_str);
2440 ;
2441 break;}
2442case 126:
2443#line 1299 "asn1p_y.y"
2444{
2445 int ret;
2446 yyval.a_ref = asn1p_ref_new(yylineno);
2447 checkmem(yyval.a_ref);
2448 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2449 checkmem(ret == 0);
2450 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2451 checkmem(ret == 0);
2452 free(yyvsp[-2].tv_str);
2453 ;
2454 break;}
2455case 127:
2456#line 1309 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002457{
Lev Walkinf15320b2004-06-03 03:38:44 +00002458 int ret;
2459 yyval.a_ref = asn1p_ref_new(yylineno);
2460 checkmem(yyval.a_ref);
Lev Walkin9c974182004-09-15 11:59:51 +00002461 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2462 checkmem(ret == 0);
2463 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2464 checkmem(ret == 0);
2465 free(yyvsp[-2].tv_str);
2466 ;
2467 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002468case 128:
2469#line 1319 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002470{
2471 int ret;
2472 yyval.a_ref = asn1p_ref_new(yylineno);
2473 checkmem(yyval.a_ref);
Lev Walkinf15320b2004-06-03 03:38:44 +00002474 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2475 free(yyvsp[0].tv_str);
2476 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002477 ;
2478 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002479case 129:
2480#line 1327 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002481{
Lev Walkinf15320b2004-06-03 03:38:44 +00002482 int ret;
2483 yyval.a_ref = yyvsp[0].a_ref;
2484 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2485 free(yyvsp[-2].tv_str);
2486 checkmem(ret == 0);
2487 /*
2488 * Move the last element infront.
2489 */
2490 {
2491 struct asn1p_ref_component_s tmp_comp;
2492 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2493 memmove(&yyval.a_ref->components[1],
2494 &yyval.a_ref->components[0],
2495 sizeof(yyval.a_ref->components[0])
2496 * (yyval.a_ref->comp_count - 1));
2497 yyval.a_ref->components[0] = tmp_comp;
2498 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002499 ;
2500 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002501case 130:
2502#line 1349 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002503{
Lev Walkinf15320b2004-06-03 03:38:44 +00002504 int ret;
2505 yyval.a_ref = asn1p_ref_new(yylineno);
2506 checkmem(yyval.a_ref);
2507 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2508 free(yyvsp[0].a_refcomp.name);
2509 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002510 ;
2511 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002512case 131:
2513#line 1357 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002514{
Lev Walkinf15320b2004-06-03 03:38:44 +00002515 int ret;
2516 yyval.a_ref = yyvsp[-2].a_ref;
2517 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2518 free(yyvsp[0].a_refcomp.name);
2519 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002520 ;
2521 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002522case 134:
2523#line 1371 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002524{
Lev Walkinf15320b2004-06-03 03:38:44 +00002525 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2526 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002527 ;
2528 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002529case 135:
2530#line 1376 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002531{
Lev Walkinf15320b2004-06-03 03:38:44 +00002532 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2533 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002534 ;
2535 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002536case 136:
2537#line 1385 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002538{
2539 yyval.a_ref = asn1p_ref_new(yylineno);
2540 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2541 ;
2542 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002543case 137:
2544#line 1389 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002545{
2546 yyval.a_ref = yyval.a_ref;
2547 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2548 ;
2549 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002550case 138:
2551#line 1393 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002552{
2553 yyval.a_ref = yyval.a_ref;
2554 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
2555 ;
2556 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002557case 139:
2558#line 1400 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002559{
2560 yyval.a_ref = asn1p_ref_new(yylineno);
2561 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2562 ;
2563 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002564case 140:
2565#line 1420 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002566{
Lev Walkinf15320b2004-06-03 03:38:44 +00002567 yyval.a_expr = yyvsp[-2].a_expr;
2568 assert(yyval.a_expr->Identifier == NULL);
2569 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2570 yyval.a_expr->meta_type = AMT_VALUE;
2571 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002572 ;
2573 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002574case 141:
2575#line 1430 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002576{
2577 yyval.a_value = asn1p_value_fromint(0);
2578 checkmem(yyval.a_value);
2579 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2580 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2581 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2582 ;
2583 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002584case 142:
2585#line 1437 "asn1p_y.y"
Lev Walkincbad2512005-03-24 16:27:02 +00002586{ asn1p_lexer_hack_push_opaque_state(); ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002587 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002588case 143:
2589#line 1437 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002590{
Lev Walkinf15320b2004-06-03 03:38:44 +00002591 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2592 checkmem(yyval.a_value);
2593 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin1004aa92004-09-08 00:28:11 +00002594 ;
2595 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002596case 144:
2597#line 1442 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002598{
2599 yyval.a_value = asn1p_value_fromint(0);
2600 checkmem(yyval.a_value);
2601 yyval.a_value->type = ATV_NULL;
2602 ;
2603 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002604case 145:
2605#line 1447 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002606{
2607 yyval.a_value = asn1p_value_fromint(0);
2608 checkmem(yyval.a_value);
2609 yyval.a_value->type = ATV_FALSE;
2610 ;
2611 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002612case 146:
2613#line 1452 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002614{
2615 yyval.a_value = asn1p_value_fromint(0);
2616 checkmem(yyval.a_value);
2617 yyval.a_value->type = ATV_TRUE;
2618 ;
2619 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002620case 147:
2621#line 1457 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002622{
Lev Walkinf15320b2004-06-03 03:38:44 +00002623 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2624 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002625 ;
2626 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002627case 148:
2628#line 1461 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002629{
Lev Walkinf15320b2004-06-03 03:38:44 +00002630 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2631 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002632 ;
2633 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002634case 149:
2635#line 1465 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002636{
Lev Walkin1e448d32005-03-24 14:26:38 +00002637 yyval.a_value = yyval.a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002638 ;
2639 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002640case 150:
Lev Walkin9d542d22006-03-14 16:31:37 +00002641#line 1468 "asn1p_y.y"
2642{
2643 yyval.a_value = yyvsp[0].a_value;
2644 ;
2645 break;}
2646case 151:
2647#line 1471 "asn1p_y.y"
2648{
2649 yyval.a_value = yyvsp[0].a_value;
2650 ;
2651 break;}
2652case 152:
2653#line 1477 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002654{
Lev Walkinf15320b2004-06-03 03:38:44 +00002655 asn1p_ref_t *ref;
2656 int ret;
2657 ref = asn1p_ref_new(yylineno);
2658 checkmem(ref);
2659 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2660 checkmem(ret == 0);
2661 yyval.a_value = asn1p_value_fromref(ref, 0);
2662 checkmem(yyval.a_value);
2663 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002664 ;
2665 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002666case 153:
2667#line 1488 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002668{
Lev Walkinf15320b2004-06-03 03:38:44 +00002669 asn1p_ref_t *ref;
2670 int ret;
2671 ref = asn1p_ref_new(yylineno);
2672 checkmem(ref);
2673 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2674 checkmem(ret == 0);
2675 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2676 checkmem(ret == 0);
2677 yyval.a_value = asn1p_value_fromref(ref, 0);
2678 checkmem(yyval.a_value);
2679 free(yyvsp[-2].tv_str);
2680 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002681 ;
2682 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002683case 154:
2684#line 1506 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002685{
2686 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2687 checkmem(yyval.a_value);
2688 ;
2689 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002690case 155:
2691#line 1510 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002692{
Lev Walkind9574ae2005-03-24 16:22:35 +00002693 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002694 checkmem(yyval.a_value);
2695 yyval.a_value->type = ATV_TUPLE;
2696 ;
2697 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002698case 156:
2699#line 1515 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002700{
Lev Walkind9574ae2005-03-24 16:22:35 +00002701 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002702 checkmem(yyval.a_value);
2703 yyval.a_value->type = ATV_QUADRUPLE;
2704 ;
2705 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002706case 157:
2707#line 1549 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002708{
Lev Walkin1893ddf2005-03-20 14:28:32 +00002709 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00002710 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2711 checkmem(yyval.tv_opaque.buf);
2712 yyval.tv_opaque.buf[0] = '{';
Lev Walkin1893ddf2005-03-20 14:28:32 +00002713 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00002714 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2715 free(yyvsp[0].tv_opaque.buf);
Lev Walkin1004aa92004-09-08 00:28:11 +00002716 ;
2717 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002718case 158:
2719#line 1558 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002720{
Lev Walkinf15320b2004-06-03 03:38:44 +00002721 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2722 char *p = malloc(newsize + 1);
2723 checkmem(p);
2724 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2725 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2726 p[newsize] = '\0';
2727 free(yyvsp[-1].tv_opaque.buf);
2728 free(yyvsp[0].tv_opaque.buf);
2729 yyval.tv_opaque.buf = p;
2730 yyval.tv_opaque.len = newsize;
Lev Walkin1004aa92004-09-08 00:28:11 +00002731 ;
2732 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002733case 159:
2734#line 1573 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002735{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2736 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002737case 160:
2738#line 1574 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002739{ yyval.a_type = ASN_BASIC_NULL; ;
2740 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002741case 161:
2742#line 1575 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002743{ yyval.a_type = ASN_BASIC_REAL; ;
2744 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002745case 162:
Lev Walkin9d542d22006-03-14 16:31:37 +00002746#line 1576 "asn1p_y.y"
2747{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkin4696c742005-08-22 12:23:54 +00002748 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002749case 163:
Lev Walkin9d542d22006-03-14 16:31:37 +00002750#line 1577 "asn1p_y.y"
2751{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
Lev Walkin4696c742005-08-22 12:23:54 +00002752 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002753case 164:
Lev Walkin9d542d22006-03-14 16:31:37 +00002754#line 1578 "asn1p_y.y"
2755{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
Lev Walkin4696c742005-08-22 12:23:54 +00002756 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002757case 165:
Lev Walkin9d542d22006-03-14 16:31:37 +00002758#line 1579 "asn1p_y.y"
2759{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002760 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002761case 166:
Lev Walkin9d542d22006-03-14 16:31:37 +00002762#line 1580 "asn1p_y.y"
2763{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002764 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002765case 167:
Lev Walkin9d542d22006-03-14 16:31:37 +00002766#line 1581 "asn1p_y.y"
2767{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002768 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002769case 168:
Lev Walkin9d542d22006-03-14 16:31:37 +00002770#line 1582 "asn1p_y.y"
2771{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002772 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002773case 169:
Lev Walkin9d542d22006-03-14 16:31:37 +00002774#line 1583 "asn1p_y.y"
2775{ yyval.a_type = ASN_BASIC_UTCTime; ;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002776 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002777case 170:
Lev Walkin9d542d22006-03-14 16:31:37 +00002778#line 1584 "asn1p_y.y"
2779{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002780 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002781case 171:
Lev Walkin9d542d22006-03-14 16:31:37 +00002782#line 1585 "asn1p_y.y"
2783{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002784 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002785case 172:
Lev Walkin9d542d22006-03-14 16:31:37 +00002786#line 1592 "asn1p_y.y"
2787{ yyval.a_type = ASN_BASIC_INTEGER; ;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002788 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002789case 173:
Lev Walkin9d542d22006-03-14 16:31:37 +00002790#line 1593 "asn1p_y.y"
2791{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2792 break;}
2793case 174:
2794#line 1594 "asn1p_y.y"
2795{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2796 break;}
2797case 175:
2798#line 1598 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002799{
Lev Walkinceb20e72004-09-05 10:40:41 +00002800 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002801 checkmem(yyval.a_expr);
2802 yyval.a_expr->expr_type = yyvsp[0].a_type;
2803 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002804 ;
2805 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002806case 176:
2807#line 1604 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002808{
Lev Walkinf15320b2004-06-03 03:38:44 +00002809 if(yyvsp[0].a_expr) {
2810 yyval.a_expr = yyvsp[0].a_expr;
2811 } else {
Lev Walkinceb20e72004-09-05 10:40:41 +00002812 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002813 checkmem(yyval.a_expr);
2814 }
2815 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2816 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002817 ;
2818 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002819case 177:
2820#line 1617 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002821{ yyval.a_type = ASN_STRING_BMPString; ;
2822 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002823case 178:
2824#line 1618 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002825{
Lev Walkinf15320b2004-06-03 03:38:44 +00002826 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00002827 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002828 ;
2829 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002830case 179:
2831#line 1622 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002832{
Lev Walkin9c974182004-09-15 11:59:51 +00002833 yyval.a_type = ASN_STRING_GraphicString;
2834 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002835 ;
2836 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002837case 180:
2838#line 1626 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002839{ yyval.a_type = ASN_STRING_IA5String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002840 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002841case 181:
2842#line 1627 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002843{ yyval.a_type = ASN_STRING_ISO646String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002844 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002845case 182:
2846#line 1628 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002847{ yyval.a_type = ASN_STRING_NumericString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002848 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002849case 183:
2850#line 1629 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002851{ yyval.a_type = ASN_STRING_PrintableString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002852 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002853case 184:
2854#line 1630 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002855{
2856 yyval.a_type = ASN_STRING_T61String;
2857 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2858 ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002859 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002860case 185:
2861#line 1634 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002862{ yyval.a_type = ASN_STRING_TeletexString; ;
2863 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002864case 186:
2865#line 1635 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002866{ yyval.a_type = ASN_STRING_UniversalString; ;
2867 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002868case 187:
2869#line 1636 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002870{ yyval.a_type = ASN_STRING_UTF8String; ;
2871 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002872case 188:
2873#line 1637 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002874{
2875 yyval.a_type = ASN_STRING_VideotexString;
2876 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2877 ;
2878 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002879case 189:
2880#line 1641 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002881{ yyval.a_type = ASN_STRING_VisibleString; ;
2882 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002883case 190:
2884#line 1642 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002885{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2886 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002887case 196:
2888#line 1654 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002889{ yyval.a_constr = 0; ;
2890 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002891case 197:
2892#line 1655 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002893{
Lev Walkinceb20e72004-09-05 10:40:41 +00002894 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002895 ;
2896 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002897case 198:
2898#line 1661 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002899{
Lev Walkinceb20e72004-09-05 10:40:41 +00002900 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002901 ;
2902 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002903case 199:
2904#line 1664 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002905{
Lev Walkinf15320b2004-06-03 03:38:44 +00002906 /*
2907 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00002908 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00002909 */
Lev Walkind2ea1de2004-08-20 13:25:29 +00002910 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002911 ;
2912 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002913case 200:
2914#line 1674 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002915{
Lev Walkinf15320b2004-06-03 03:38:44 +00002916 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002917 ;
2918 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002919case 201:
2920#line 1677 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002921{
Lev Walkinf59d0752004-08-18 04:59:12 +00002922 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002923 ;
2924 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002925case 202:
2926#line 1683 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002927{
Lev Walkinf15320b2004-06-03 03:38:44 +00002928 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002929 ;
2930 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002931case 203:
2932#line 1686 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002933{
Lev Walkinf15320b2004-06-03 03:38:44 +00002934 asn1p_constraint_t *ct;
2935 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002936 ct->type = ACT_EL_EXT;
2937 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00002938 ;
2939 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002940case 204:
2941#line 1692 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002942{
Lev Walkinf15320b2004-06-03 03:38:44 +00002943 asn1p_constraint_t *ct;
2944 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002945 ct->type = ACT_EL_EXT;
2946 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002947 ct = yyval.a_constr;
2948 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002949 ;
2950 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002951case 205:
2952#line 1703 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002953{
Lev Walkinf59d0752004-08-18 04:59:12 +00002954 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002955 ;
2956 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002957case 206:
2958#line 1706 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002959{
2960 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2961 ;
2962 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002963case 207:
2964#line 1709 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002965{
Lev Walkinf15320b2004-06-03 03:38:44 +00002966 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002967 ;
2968 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002969case 208:
2970#line 1712 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002971{
Lev Walkinf15320b2004-06-03 03:38:44 +00002972 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002973 ;
2974 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002975case 209:
2976#line 1715 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002977{
Lev Walkinf15320b2004-06-03 03:38:44 +00002978 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002979 ;
2980 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002981case 210:
2982#line 1721 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002983{
Lev Walkinf15320b2004-06-03 03:38:44 +00002984 int ret;
2985 yyval.a_constr = asn1p_constraint_new(yylineno);
2986 checkmem(yyval.a_constr);
2987 yyval.a_constr->type = yyvsp[-3].a_ctype;
2988 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2989 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002990 ;
2991 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00002992case 211:
2993#line 1729 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002994{
Lev Walkinf59d0752004-08-18 04:59:12 +00002995 int ret;
2996 yyval.a_constr = asn1p_constraint_new(yylineno);
2997 checkmem(yyval.a_constr);
2998 yyval.a_constr->type = ACT_CA_SET;
2999 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
3000 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003001 ;
3002 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003003case 212:
3004#line 1737 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003005{
Lev Walkinf59d0752004-08-18 04:59:12 +00003006 yyval.a_constr = asn1p_constraint_new(yylineno);
3007 checkmem(yyval.a_constr);
3008 yyval.a_constr->type = ACT_EL_VALUE;
3009 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003010 ;
3011 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003012case 213:
3013#line 1743 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003014{
Lev Walkin144db9b2004-10-12 23:26:53 +00003015 yyval.a_constr = asn1p_constraint_new(yylineno);
3016 checkmem(yyval.a_constr);
Lev Walkinff7dd142005-03-20 12:58:00 +00003017 yyval.a_constr->type = ACT_EL_TYPE;
3018 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin9c974182004-09-15 11:59:51 +00003019 ;
3020 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003021case 214:
Lev Walkin1db91132006-03-09 09:11:53 +00003022#line 1749 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003023{
3024 yyval.a_constr = asn1p_constraint_new(yylineno);
3025 checkmem(yyval.a_constr);
3026 yyval.a_constr->type = yyvsp[-1].a_ctype;
Lev Walkin9d542d22006-03-14 16:31:37 +00003027 yyval.a_constr->range_start = yyvsp[-2].a_value;
3028 yyval.a_constr->range_stop = yyvsp[0].a_value;
3029 ;
3030 break;}
3031case 215:
3032#line 1756 "asn1p_y.y"
3033{
3034 yyval.a_constr = asn1p_constraint_new(yylineno);
3035 checkmem(yyval.a_constr);
3036 yyval.a_constr->type = yyvsp[-1].a_ctype;
Lev Walkinef625402005-09-05 05:17:57 +00003037 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3038 yyval.a_constr->range_stop = yyvsp[0].a_value;
3039 yyval.a_constr->range_start->type = ATV_MIN;
3040 ;
3041 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003042case 216:
3043#line 1764 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003044{
3045 yyval.a_constr = asn1p_constraint_new(yylineno);
3046 checkmem(yyval.a_constr);
3047 yyval.a_constr->type = yyvsp[-1].a_ctype;
3048 yyval.a_constr->range_start = yyvsp[-2].a_value;
3049 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3050 yyval.a_constr->range_stop->type = ATV_MAX;
3051 ;
3052 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003053case 217:
3054#line 1772 "asn1p_y.y"
Lev Walkin1db91132006-03-09 09:11:53 +00003055{
3056 yyval.a_constr = asn1p_constraint_new(yylineno);
3057 checkmem(yyval.a_constr);
3058 yyval.a_constr->type = yyvsp[-1].a_ctype;
3059 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3060 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3061 yyval.a_constr->range_start->type = ATV_MIN;
3062 yyval.a_constr->range_stop->type = ATV_MAX;
3063 ;
3064 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003065case 218:
Lev Walkin1db91132006-03-09 09:11:53 +00003066#line 1781 "asn1p_y.y"
Lev Walkin9d542d22006-03-14 16:31:37 +00003067{
3068 yyval.a_constr = yyvsp[0].a_constr;
3069 ;
Lev Walkin4696c742005-08-22 12:23:54 +00003070 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003071case 219:
Lev Walkin9d542d22006-03-14 16:31:37 +00003072#line 1784 "asn1p_y.y"
3073{
3074 yyval.a_constr = yyvsp[0].a_constr;
3075 ;
3076 break;}
3077case 220:
3078#line 1788 "asn1p_y.y"
3079{ asn1p_lexer_hack_push_opaque_state(); ;
3080 break;}
3081case 221:
3082#line 1788 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003083{
3084 yyval.a_constr = asn1p_constraint_new(yylineno);
3085 checkmem(yyval.a_constr);
3086 yyval.a_constr->type = ACT_CT_CTDBY;
3087 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3088 checkmem(yyval.a_constr->value);
3089 yyval.a_constr->value->type = ATV_UNPARSED;
3090 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003091 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003092case 222:
3093#line 1799 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003094{ yyval.a_ctype = ACT_EL_RANGE; ;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003095 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003096case 223:
3097#line 1800 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003098{ yyval.a_ctype = ACT_EL_RLRANGE; ;
Lev Walkinff7dd142005-03-20 12:58:00 +00003099 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003100case 224:
3101#line 1801 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003102{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3103 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003104case 225:
3105#line 1802 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003106{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3107 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003108case 226:
3109#line 1806 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003110{
Lev Walkinceb20e72004-09-05 10:40:41 +00003111 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003112 ;
3113 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003114case 227:
3115#line 1809 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003116{
Lev Walkinceb20e72004-09-05 10:40:41 +00003117 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin1004aa92004-09-08 00:28:11 +00003118 ;
3119 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003120case 228:
3121#line 1815 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003122{
3123 yyval.a_value = asn1p_value_fromint(0);
3124 checkmem(yyval.a_value);
3125 yyval.a_value->type = ATV_FALSE;
3126 ;
3127 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003128case 229:
3129#line 1820 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003130{
3131 yyval.a_value = asn1p_value_fromint(1);
3132 checkmem(yyval.a_value);
3133 yyval.a_value->type = ATV_TRUE;
3134 ;
3135 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003136case 230:
Lev Walkin9d542d22006-03-14 16:31:37 +00003137#line 1825 "asn1p_y.y"
3138{
3139 yyval.a_value = yyvsp[0].a_value;
3140 ;
3141 break;}
3142case 231:
3143#line 1828 "asn1p_y.y"
3144{
3145 yyval.a_value = yyvsp[0].a_value;
3146 ;
3147 break;}
3148case 232:
3149#line 1831 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003150{
Lev Walkinf15320b2004-06-03 03:38:44 +00003151 asn1p_ref_t *ref;
3152 int ret;
3153 ref = asn1p_ref_new(yylineno);
3154 checkmem(ref);
3155 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3156 checkmem(ret == 0);
3157 yyval.a_value = asn1p_value_fromref(ref, 0);
3158 checkmem(yyval.a_value);
3159 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003160 ;
3161 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003162case 233:
3163#line 1845 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003164{
Lev Walkinc8092cb2005-02-18 16:34:21 +00003165 asn1p_ref_t *ref;
3166 int ret;
3167 ref = asn1p_ref_new(yylineno);
3168 checkmem(ref);
3169 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3170 checkmem(ret == 0);
3171 yyval.a_value = asn1p_value_fromref(ref, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003172 checkmem(yyval.a_value);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003173 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003174 ;
3175 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003176case 234:
3177#line 1859 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003178{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003179 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003180 ;
3181 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003182case 235:
3183#line 1862 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003184{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003185 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkine596bf02005-03-28 15:01:27 +00003186 ;
3187 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003188case 236:
3189#line 1868 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003190{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003191 yyval.a_constr = yyvsp[0].a_constr;
3192 ;
3193 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003194case 237:
3195#line 1871 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003196{
3197 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3198 ;
3199 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003200case 238:
3201#line 1877 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003202{
Lev Walkinf15320b2004-06-03 03:38:44 +00003203 yyval.a_constr = asn1p_constraint_new(yylineno);
3204 checkmem(yyval.a_constr);
3205 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkine596bf02005-03-28 15:01:27 +00003206 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003207 ;
3208 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003209case 239:
3210#line 1883 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003211{
Lev Walkinf15320b2004-06-03 03:38:44 +00003212 yyval.a_constr = asn1p_constraint_new(yylineno);
3213 checkmem(yyval.a_constr);
3214 yyval.a_constr->type = ACT_EL_VALUE;
3215 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3216 yyval.a_constr->presence = yyvsp[0].a_pres;
Lev Walkine596bf02005-03-28 15:01:27 +00003217 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003218 ;
3219 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003220case 240:
3221#line 1897 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003222{ yyval.a_pres = ACPRES_DEFAULT; ;
3223 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003224case 241:
3225#line 1898 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003226{ yyval.a_pres = yyvsp[0].a_pres; ;
3227 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003228case 242:
3229#line 1902 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003230{
Lev Walkinf15320b2004-06-03 03:38:44 +00003231 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003232 ;
3233 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003234case 243:
3235#line 1905 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00003236{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003237 yyval.a_pres = ACPRES_ABSENT;
Lev Walkinb36317c2005-08-12 10:09:10 +00003238 ;
3239 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003240case 244:
3241#line 1908 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00003242{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003243 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkinb36317c2005-08-12 10:09:10 +00003244 ;
3245 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003246case 245:
Lev Walkin9d542d22006-03-14 16:31:37 +00003247#line 1914 "asn1p_y.y"
3248{
3249 yyval.a_constr = yyvsp[0].a_constr;
3250 ;
3251 break;}
3252case 246:
3253#line 1917 "asn1p_y.y"
3254{
3255 yyval.a_constr = yyvsp[0].a_constr;
3256 ;
3257 break;}
3258case 247:
3259#line 1926 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003260{
Lev Walkinf15320b2004-06-03 03:38:44 +00003261 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3262 asn1p_constraint_t *ct;
3263 int ret;
3264 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3265 checkmem(ret == 0);
3266 ct = asn1p_constraint_new(yylineno);
3267 checkmem(yyval.a_constr);
3268 ct->type = ACT_EL_VALUE;
3269 ct->value = asn1p_value_fromref(ref, 0);
3270 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003271 ;
3272 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003273case 248:
3274#line 1941 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003275{
Lev Walkinf15320b2004-06-03 03:38:44 +00003276 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003277 ;
3278 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003279case 249:
3280#line 1947 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003281{
Lev Walkinf15320b2004-06-03 03:38:44 +00003282 yyval.a_constr = asn1p_constraint_new(yylineno);
3283 checkmem(yyval.a_constr);
3284 yyval.a_constr->type = ACT_EL_VALUE;
3285 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003286 ;
3287 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003288case 250:
3289#line 1953 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003290{
Lev Walkinf15320b2004-06-03 03:38:44 +00003291 asn1p_constraint_t *ct;
3292 ct = asn1p_constraint_new(yylineno);
3293 checkmem(ct);
3294 ct->type = ACT_EL_VALUE;
3295 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3296 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00003297 ;
3298 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003299case 251:
3300#line 1967 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003301{
Lev Walkinf15320b2004-06-03 03:38:44 +00003302 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3303 int ret;
3304 *p = '@';
3305 strcpy(p + 1, yyvsp[0].tv_str);
3306 yyval.a_ref = asn1p_ref_new(yylineno);
3307 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3308 checkmem(ret == 0);
3309 free(p);
3310 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003311 ;
3312 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003313case 252:
3314#line 1978 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003315{
Lev Walkinf15320b2004-06-03 03:38:44 +00003316 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3317 int ret;
3318 p[0] = '@';
3319 p[1] = '.';
3320 strcpy(p + 2, yyvsp[0].tv_str);
3321 yyval.a_ref = asn1p_ref_new(yylineno);
3322 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3323 checkmem(ret == 0);
3324 free(p);
3325 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003326 ;
3327 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003328case 253:
3329#line 1994 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003330{
Lev Walkinf15320b2004-06-03 03:38:44 +00003331 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003332 ;
3333 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003334case 254:
3335#line 1997 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003336{
Lev Walkinf15320b2004-06-03 03:38:44 +00003337 int l1 = strlen(yyvsp[-2].tv_str);
3338 int l3 = strlen(yyvsp[0].tv_str);
3339 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3340 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3341 yyval.tv_str[l1] = '.';
3342 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3343 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin1004aa92004-09-08 00:28:11 +00003344 ;
3345 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003346case 255:
3347#line 2015 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003348{
Lev Walkin9c974182004-09-15 11:59:51 +00003349 yyval.a_marker.flags = EM_NOMARK;
3350 yyval.a_marker.default_value = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00003351 ;
3352 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003353case 256:
3354#line 2019 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003355{ yyval.a_marker = yyvsp[0].a_marker; ;
Lev Walkinec208e62004-09-14 02:44:07 +00003356 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003357case 257:
3358#line 2023 "asn1p_y.y"
Lev Walkinec208e62004-09-14 02:44:07 +00003359{
Lev Walkin70853052005-11-26 11:21:55 +00003360 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
Lev Walkin9c974182004-09-15 11:59:51 +00003361 yyval.a_marker.default_value = 0;
Lev Walkinec208e62004-09-14 02:44:07 +00003362 ;
3363 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003364case 258:
3365#line 2027 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003366{
3367 yyval.a_marker.flags = EM_DEFAULT;
3368 yyval.a_marker.default_value = yyvsp[0].a_value;
3369 ;
3370 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003371case 259:
3372#line 2050 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003373{
Lev Walkinceb20e72004-09-05 10:40:41 +00003374 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003375 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003376 ;
3377 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003378case 260:
3379#line 2054 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003380{
Lev Walkine596bf02005-03-28 15:01:27 +00003381 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003382 ;
3383 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003384case 261:
3385#line 2060 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003386{
Lev Walkine596bf02005-03-28 15:01:27 +00003387 yyval.a_expr = asn1p_expr_new(yylineno);
3388 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003389 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3390 ;
3391 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003392case 262:
3393#line 2065 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003394{
3395 yyval.a_expr = yyvsp[-2].a_expr;
3396 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3397 ;
3398 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003399case 263:
3400#line 2072 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003401{
Lev Walkinceb20e72004-09-05 10:40:41 +00003402 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003403 checkmem(yyval.a_expr);
3404 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3405 yyval.a_expr->meta_type = AMT_VALUE;
3406 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003407 ;
3408 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003409case 264:
Lev Walkin9d542d22006-03-14 16:31:37 +00003410#line 2079 "asn1p_y.y"
3411{
3412 yyval.a_expr = asn1p_expr_new(yylineno);
3413 checkmem(yyval.a_expr);
3414 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3415 yyval.a_expr->meta_type = AMT_VALUE;
3416 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3417 yyval.a_expr->value = yyvsp[-1].a_value;
3418 ;
3419 break;}
3420case 265:
3421#line 2087 "asn1p_y.y"
3422{
3423 yyval.a_expr = asn1p_expr_new(yylineno);
3424 checkmem(yyval.a_expr);
3425 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3426 yyval.a_expr->meta_type = AMT_VALUE;
3427 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3428 yyval.a_expr->value = yyvsp[-1].a_value;
3429 ;
3430 break;}
3431case 266:
3432#line 2095 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003433{
3434 yyval.a_expr = asn1p_expr_new(yylineno);
3435 checkmem(yyval.a_expr);
3436 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3437 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkinf15320b2004-06-03 03:38:44 +00003438 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003439 ;
3440 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003441case 267:
3442#line 2102 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003443{
Lev Walkinceb20e72004-09-05 10:40:41 +00003444 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003445 checkmem(yyval.a_expr);
3446 yyval.a_expr->Identifier = strdup("...");
3447 checkmem(yyval.a_expr->Identifier);
3448 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3449 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003450 ;
3451 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003452case 268:
Lev Walkin9d542d22006-03-14 16:31:37 +00003453#line 2113 "asn1p_y.y"
3454{
3455 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3456 checkmem(yyval.a_value);
3457 ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003458 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003459case 269:
Lev Walkin9d542d22006-03-14 16:31:37 +00003460#line 2117 "asn1p_y.y"
3461{
3462 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3463 checkmem(yyval.a_value);
3464 ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003465 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003466case 270:
Lev Walkin9d542d22006-03-14 16:31:37 +00003467#line 2148 "asn1p_y.y"
3468{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3469 break;}
3470case 271:
3471#line 2149 "asn1p_y.y"
3472{ yyval.a_tag = yyvsp[0].a_tag; ;
3473 break;}
3474case 272:
3475#line 2153 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003476{
Lev Walkinc603f102005-01-23 09:51:44 +00003477 yyval.a_tag = yyvsp[-1].a_tag;
3478 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin1004aa92004-09-08 00:28:11 +00003479 ;
3480 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003481case 273:
3482#line 2160 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003483{
Lev Walkinc603f102005-01-23 09:51:44 +00003484 yyval.a_tag = yyvsp[-2].a_tag;
3485 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00003486 ;
3487 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003488case 274:
3489#line 2166 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003490{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00003491 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003492case 275:
3493#line 2167 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003494{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
Lev Walkin83cac2f2004-09-22 16:03:36 +00003495 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003496case 276:
3497#line 2168 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003498{ yyval.a_tag.tag_class = TC_APPLICATION; ;
Lev Walkin1e448d32005-03-24 14:26:38 +00003499 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003500case 277:
3501#line 2169 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003502{ yyval.a_tag.tag_class = TC_PRIVATE; ;
Lev Walkinb36317c2005-08-12 10:09:10 +00003503 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003504case 278:
3505#line 2173 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003506{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3507 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003508case 279:
3509#line 2174 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003510{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3511 break;}
Lev Walkin9d542d22006-03-14 16:31:37 +00003512case 280:
3513#line 2175 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003514{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3515 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003516case 281:
Lev Walkin9d542d22006-03-14 16:31:37 +00003517#line 2179 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003518{
3519 checkmem(yyvsp[0].tv_str);
3520 yyval.tv_str = yyvsp[0].tv_str;
3521 ;
3522 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003523case 282:
Lev Walkin9d542d22006-03-14 16:31:37 +00003524#line 2183 "asn1p_y.y"
3525{
3526 checkmem(yyvsp[0].tv_str);
3527 yyval.tv_str = yyvsp[0].tv_str;
3528 ;
Lev Walkinef625402005-09-05 05:17:57 +00003529 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003530case 283:
Lev Walkin9d542d22006-03-14 16:31:37 +00003531#line 2191 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003532{
Lev Walkin9d542d22006-03-14 16:31:37 +00003533 checkmem(yyvsp[0].tv_str);
Lev Walkinef625402005-09-05 05:17:57 +00003534 yyval.tv_str = yyvsp[0].tv_str;
3535 ;
3536 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003537case 284:
3538#line 2198 "asn1p_y.y"
Lev Walkin9d542d22006-03-14 16:31:37 +00003539{ yyval.tv_str = 0; ;
3540 break;}
3541case 285:
3542#line 2199 "asn1p_y.y"
3543{
3544 yyval.tv_str = yyvsp[0].tv_str;
3545 ;
3546 break;}
3547case 286:
3548#line 2205 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003549{
Lev Walkinceb20e72004-09-05 10:40:41 +00003550 checkmem(yyvsp[0].tv_str);
3551 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003552 ;
3553 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00003554}
3555 /* the action file gets copied in in place of this dollarsign */
3556#line 543 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00003557
3558 yyvsp -= yylen;
3559 yyssp -= yylen;
Lev Walkin1004aa92004-09-08 00:28:11 +00003560#ifdef YYLSP_NEEDED
3561 yylsp -= yylen;
3562#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003563
Lev Walkin1004aa92004-09-08 00:28:11 +00003564#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00003565 if (yydebug)
3566 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003567 short *ssp1 = yyss - 1;
3568 fprintf (stderr, "state stack now");
3569 while (ssp1 != yyssp)
3570 fprintf (stderr, " %d", *++ssp1);
3571 fprintf (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003572 }
3573#endif
3574
3575 *++yyvsp = yyval;
3576
Lev Walkin1004aa92004-09-08 00:28:11 +00003577#ifdef YYLSP_NEEDED
3578 yylsp++;
3579 if (yylen == 0)
3580 {
3581 yylsp->first_line = yylloc.first_line;
3582 yylsp->first_column = yylloc.first_column;
3583 yylsp->last_line = (yylsp-1)->last_line;
3584 yylsp->last_column = (yylsp-1)->last_column;
3585 yylsp->text = 0;
3586 }
3587 else
3588 {
3589 yylsp->last_line = (yylsp+yylen-1)->last_line;
3590 yylsp->last_column = (yylsp+yylen-1)->last_column;
3591 }
3592#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003593
Lev Walkin1004aa92004-09-08 00:28:11 +00003594 /* Now "shift" the result of the reduction.
3595 Determine what state that goes to,
3596 based on the state we popped back to
3597 and the rule number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003598
3599 yyn = yyr1[yyn];
3600
Lev Walkin1004aa92004-09-08 00:28:11 +00003601 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3602 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003603 yystate = yytable[yystate];
3604 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003605 yystate = yydefgoto[yyn - YYNTBASE];
Lev Walkinf15320b2004-06-03 03:38:44 +00003606
3607 goto yynewstate;
3608
Lev Walkin1004aa92004-09-08 00:28:11 +00003609yyerrlab: /* here on detecting error */
Lev Walkinf15320b2004-06-03 03:38:44 +00003610
Lev Walkin1004aa92004-09-08 00:28:11 +00003611 if (! yyerrstatus)
3612 /* If not already recovering from an error, report this error. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003613 {
3614 ++yynerrs;
Lev Walkin1004aa92004-09-08 00:28:11 +00003615
3616#ifdef YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003617 yyn = yypact[yystate];
3618
Lev Walkin1004aa92004-09-08 00:28:11 +00003619 if (yyn > YYFLAG && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003620 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003621 int size = 0;
3622 char *msg;
3623 int x, count;
Lev Walkinf15320b2004-06-03 03:38:44 +00003624
Lev Walkin1004aa92004-09-08 00:28:11 +00003625 count = 0;
3626 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3627 for (x = (yyn < 0 ? -yyn : 0);
Lev Walkin4a4bdf72005-06-07 21:43:32 +00003628 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
Lev Walkin1004aa92004-09-08 00:28:11 +00003629 if (yycheck[x + yyn] == x)
3630 size += strlen(yytname[x]) + 15, count++;
3631 msg = (char *) malloc(size + 15);
3632 if (msg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003633 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003634 strcpy(msg, "parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003635
Lev Walkin1004aa92004-09-08 00:28:11 +00003636 if (count < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003637 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003638 count = 0;
3639 for (x = (yyn < 0 ? -yyn : 0);
Lev Walkin4a4bdf72005-06-07 21:43:32 +00003640 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
Lev Walkin1004aa92004-09-08 00:28:11 +00003641 if (yycheck[x + yyn] == x)
Lev Walkinf15320b2004-06-03 03:38:44 +00003642 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003643 strcat(msg, count == 0 ? ", expecting `" : " or `");
3644 strcat(msg, yytname[x]);
3645 strcat(msg, "'");
3646 count++;
Lev Walkinf15320b2004-06-03 03:38:44 +00003647 }
3648 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003649 yyerror(msg);
3650 free(msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003651 }
3652 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003653 yyerror ("parse error; also virtual memory exceeded");
Lev Walkinf15320b2004-06-03 03:38:44 +00003654 }
3655 else
3656#endif /* YYERROR_VERBOSE */
Lev Walkin1004aa92004-09-08 00:28:11 +00003657 yyerror("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003658 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003659
Lev Walkinf15320b2004-06-03 03:38:44 +00003660 goto yyerrlab1;
Lev Walkin1004aa92004-09-08 00:28:11 +00003661yyerrlab1: /* here on error raised explicitly by an action */
Lev Walkinf15320b2004-06-03 03:38:44 +00003662
3663 if (yyerrstatus == 3)
3664 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003665 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003666
Lev Walkin1004aa92004-09-08 00:28:11 +00003667 /* return failure if at end of input */
Lev Walkinf15320b2004-06-03 03:38:44 +00003668 if (yychar == YYEOF)
Lev Walkin1004aa92004-09-08 00:28:11 +00003669 YYABORT;
Lev Walkinf15320b2004-06-03 03:38:44 +00003670
Lev Walkin1004aa92004-09-08 00:28:11 +00003671#if YYDEBUG != 0
3672 if (yydebug)
3673 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3674#endif
3675
Lev Walkinf15320b2004-06-03 03:38:44 +00003676 yychar = YYEMPTY;
3677 }
3678
Lev Walkin1004aa92004-09-08 00:28:11 +00003679 /* Else will try to reuse lookahead token
3680 after shifting the error token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003681
Lev Walkin1004aa92004-09-08 00:28:11 +00003682 yyerrstatus = 3; /* Each real token shifted decrements this */
Lev Walkinf15320b2004-06-03 03:38:44 +00003683
Lev Walkin1004aa92004-09-08 00:28:11 +00003684 goto yyerrhandle;
Lev Walkin459ab022004-09-07 10:39:09 +00003685
Lev Walkin1004aa92004-09-08 00:28:11 +00003686yyerrdefault: /* current state does not do anything special for the error token. */
Lev Walkin459ab022004-09-07 10:39:09 +00003687
Lev Walkin1004aa92004-09-08 00:28:11 +00003688#if 0
3689 /* This is wrong; only states that explicitly want error tokens
3690 should shift them. */
3691 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3692 if (yyn) goto yydefault;
Lev Walkinceb20e72004-09-05 10:40:41 +00003693#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003694
3695yyerrpop: /* pop the current state because it cannot handle the error token */
3696
3697 if (yyssp == yyss) YYABORT;
3698 yyvsp--;
3699 yystate = *--yyssp;
3700#ifdef YYLSP_NEEDED
3701 yylsp--;
3702#endif
3703
3704#if YYDEBUG != 0
3705 if (yydebug)
3706 {
3707 short *ssp1 = yyss - 1;
3708 fprintf (stderr, "Error: state stack now");
3709 while (ssp1 != yyssp)
3710 fprintf (stderr, " %d", *++ssp1);
3711 fprintf (stderr, "\n");
Lev Walkinceb20e72004-09-05 10:40:41 +00003712 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003713#endif
3714
3715yyerrhandle:
3716
3717 yyn = yypact[yystate];
3718 if (yyn == YYFLAG)
3719 goto yyerrdefault;
3720
3721 yyn += YYTERROR;
3722 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3723 goto yyerrdefault;
3724
3725 yyn = yytable[yyn];
3726 if (yyn < 0)
3727 {
3728 if (yyn == YYFLAG)
3729 goto yyerrpop;
3730 yyn = -yyn;
3731 goto yyreduce;
3732 }
3733 else if (yyn == 0)
3734 goto yyerrpop;
Lev Walkinf15320b2004-06-03 03:38:44 +00003735
3736 if (yyn == YYFINAL)
3737 YYACCEPT;
3738
Lev Walkin1004aa92004-09-08 00:28:11 +00003739#if YYDEBUG != 0
3740 if (yydebug)
3741 fprintf(stderr, "Shifting error token, ");
3742#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003743
3744 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00003745#ifdef YYLSP_NEEDED
3746 *++yylsp = yylloc;
3747#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003748
3749 yystate = yyn;
3750 goto yynewstate;
3751
Lev Walkin1004aa92004-09-08 00:28:11 +00003752 yyacceptlab:
3753 /* YYACCEPT comes here. */
3754 if (yyfree_stacks)
3755 {
3756 free (yyss);
3757 free (yyvs);
3758#ifdef YYLSP_NEEDED
3759 free (yyls);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003760#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003761 }
3762 return 0;
Lev Walkin459ab022004-09-07 10:39:09 +00003763
Lev Walkin1004aa92004-09-08 00:28:11 +00003764 yyabortlab:
3765 /* YYABORT comes here. */
3766 if (yyfree_stacks)
3767 {
3768 free (yyss);
3769 free (yyvs);
3770#ifdef YYLSP_NEEDED
3771 free (yyls);
Lev Walkin459ab022004-09-07 10:39:09 +00003772#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003773 }
3774 return 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003775}
Lev Walkin9d542d22006-03-14 16:31:37 +00003776#line 2211 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00003777
3778
3779
3780/*
3781 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3782 */
3783static asn1p_value_t *
3784_convert_bitstring2binary(char *str, int base) {
3785 asn1p_value_t *val;
3786 int slen;
3787 int memlen;
3788 int baselen;
3789 int bits;
3790 uint8_t *binary_vector;
3791 uint8_t *bv_ptr;
3792 uint8_t cur_val;
3793
3794 assert(str);
3795 assert(str[0] == '\'');
3796
3797 switch(base) {
3798 case 'B':
3799 baselen = 1;
3800 break;
3801 case 'H':
3802 baselen = 4;
3803 break;
3804 default:
3805 assert(base == 'B' || base == 'H');
3806 errno = EINVAL;
3807 return NULL;
3808 }
3809
3810 slen = strlen(str);
3811 assert(str[slen - 1] == base);
3812 assert(str[slen - 2] == '\'');
3813
3814 memlen = slen / (8 / baselen); /* Conservative estimate */
3815
3816 bv_ptr = binary_vector = malloc(memlen + 1);
3817 if(bv_ptr == NULL)
3818 /* ENOMEM */
3819 return NULL;
3820
3821 cur_val = 0;
3822 bits = 0;
3823 while(*(++str) != '\'') {
3824 switch(baselen) {
3825 case 1:
3826 switch(*str) {
3827 case '1':
3828 cur_val |= 1 << (7 - (bits % 8));
3829 case '0':
3830 break;
3831 default:
3832 assert(!"_y UNREACH1");
3833 case ' ': case '\r': case '\n':
3834 continue;
3835 }
3836 break;
3837 case 4:
3838 switch(*str) {
3839 case '0': case '1': case '2': case '3': case '4':
3840 case '5': case '6': case '7': case '8': case '9':
3841 cur_val |= (*str - '0') << (4 - (bits % 8));
3842 break;
3843 case 'A': case 'B': case 'C':
3844 case 'D': case 'E': case 'F':
3845 cur_val |= ((*str - 'A') + 10)
3846 << (4 - (bits % 8));
3847 break;
3848 default:
3849 assert(!"_y UNREACH2");
3850 case ' ': case '\r': case '\n':
3851 continue;
3852 }
3853 break;
3854 }
3855
3856 bits += baselen;
3857 if((bits % 8) == 0) {
3858 *bv_ptr++ = cur_val;
3859 cur_val = 0;
3860 }
3861 }
3862
3863 *bv_ptr = cur_val;
3864 assert((bv_ptr - binary_vector) <= memlen);
3865
3866 val = asn1p_value_frombits(binary_vector, bits, 0);
3867 if(val == NULL) {
3868 free(binary_vector);
3869 }
3870
3871 return val;
3872}
3873
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003874/*
3875 * For unnamed types (used in old X.208 compliant modules)
3876 * generate some sort of interim names, to not to force human being to fix
3877 * the specification's compliance to modern ASN.1 standards.
3878 */
3879static void
3880_fixup_anonymous_identifier(asn1p_expr_t *expr) {
3881 char *p;
3882 assert(expr->Identifier == 0);
3883
3884 /*
3885 * Try to figure out the type name
3886 * without going too much into details
3887 */
3888 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
3889 if(expr->reference && expr->reference->comp_count > 0)
3890 expr->Identifier = expr->reference->components[0].name;
3891
3892 fprintf(stderr,
3893 "WARNING: Line %d: expected lower-case member identifier, "
3894 "found an unnamed %s.\n"
3895 "WARNING: Obsolete X.208 syntax detected, "
3896 "please give the member a name.\n",
3897 yylineno, expr->Identifier ? expr->Identifier : "type");
3898
3899 if(!expr->Identifier)
3900 expr->Identifier = "unnamed";
3901 expr->Identifier = strdup(expr->Identifier);
3902 assert(expr->Identifier);
3903 /* Make a lowercase identifier from the type name */
3904 for(p = expr->Identifier; *p; p++) {
3905 switch(*p) {
3906 case 'A' ... 'Z': *p += 32; break;
3907 case ' ': *p = '_'; break;
3908 case '-': *p = '_'; break;
3909 }
3910 }
3911 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
3912 "Name clash may occur later.\n",
3913 expr->Identifier);
3914}
3915
Lev Walkinf15320b2004-06-03 03:38:44 +00003916int
3917yyerror(const char *msg) {
Lev Walkin9d542d22006-03-14 16:31:37 +00003918 extern char *asn1p_text;
Lev Walkinf15320b2004-06-03 03:38:44 +00003919 fprintf(stderr,
3920 "ASN.1 grammar parse error "
3921 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00003922 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003923 return -1;
3924}
3925