blob: 36a7b3b1fb209e145a495ad0d97a5cc2a7eab331 [file] [log] [blame]
vlmfa67ddc2004-06-03 03:38:44 +00001
vlm6a02a8a2004-09-08 00:28:11 +00002/* A Bison parser, made from asn1p_y.y
3 by GNU Bison version 1.28 */
vlmfa67ddc2004-06-03 03:38:44 +00004
vlm6a02a8a2004-09-08 00:28:11 +00005#define YYBISON 1 /* Identify Bison output. */
vlmfa67ddc2004-06-03 03:38:44 +00006
7#define yyparse asn1p_parse
vlm6a02a8a2004-09-08 00:28:11 +00008#define yylex asn1p_lex
vlmfa67ddc2004-06-03 03:38:44 +00009#define yyerror asn1p_error
vlm6a02a8a2004-09-08 00:28:11 +000010#define yylval asn1p_lval
11#define yychar asn1p_char
vlmfa67ddc2004-06-03 03:38:44 +000012#define yydebug asn1p_debug
13#define yynerrs asn1p_nerrs
vlm6a02a8a2004-09-08 00:28:11 +000014#define TOK_PPEQ 257
15#define TOK_opaque 258
16#define TOK_bstring 259
17#define TOK_cstring 260
18#define TOK_hstring 261
19#define TOK_identifier 262
20#define TOK_number 263
21#define TOK_number_negative 264
22#define TOK_typereference 265
23#define TOK_capitalreference 266
24#define TOK_typefieldreference 267
25#define TOK_valuefieldreference 268
26#define TOK_ABSENT 269
27#define TOK_ABSTRACT_SYNTAX 270
28#define TOK_ALL 271
29#define TOK_ANY 272
30#define TOK_APPLICATION 273
31#define TOK_AUTOMATIC 274
32#define TOK_BEGIN 275
33#define TOK_BIT 276
34#define TOK_BMPString 277
35#define TOK_BOOLEAN 278
36#define TOK_BY 279
37#define TOK_CHARACTER 280
38#define TOK_CHOICE 281
39#define TOK_CLASS 282
40#define TOK_COMPONENT 283
41#define TOK_COMPONENTS 284
42#define TOK_CONSTRAINED 285
43#define TOK_CONTAINING 286
44#define TOK_DEFAULT 287
45#define TOK_DEFINITIONS 288
46#define TOK_DEFINED 289
47#define TOK_EMBEDDED 290
48#define TOK_ENCODED 291
49#define TOK_ENCODING_CONTROL 292
50#define TOK_END 293
51#define TOK_ENUMERATED 294
52#define TOK_EXPLICIT 295
53#define TOK_EXPORTS 296
54#define TOK_EXTENSIBILITY 297
55#define TOK_EXTERNAL 298
56#define TOK_FALSE 299
57#define TOK_FROM 300
58#define TOK_GeneralizedTime 301
59#define TOK_GeneralString 302
60#define TOK_GraphicString 303
61#define TOK_IA5String 304
62#define TOK_IDENTIFIER 305
63#define TOK_IMPLICIT 306
64#define TOK_IMPLIED 307
65#define TOK_IMPORTS 308
66#define TOK_INCLUDES 309
67#define TOK_INSTANCE 310
68#define TOK_INSTRUCTIONS 311
69#define TOK_INTEGER 312
70#define TOK_ISO646String 313
71#define TOK_MAX 314
72#define TOK_MIN 315
73#define TOK_MINUS_INFINITY 316
74#define TOK_NULL 317
75#define TOK_NumericString 318
76#define TOK_OBJECT 319
77#define TOK_ObjectDescriptor 320
78#define TOK_OCTET 321
79#define TOK_OF 322
80#define TOK_OPTIONAL 323
81#define TOK_PATTERN 324
82#define TOK_PDV 325
83#define TOK_PLUS_INFINITY 326
84#define TOK_PRESENT 327
85#define TOK_PrintableString 328
86#define TOK_PRIVATE 329
87#define TOK_REAL 330
88#define TOK_RELATIVE_OID 331
89#define TOK_SEQUENCE 332
90#define TOK_SET 333
91#define TOK_SIZE 334
92#define TOK_STRING 335
93#define TOK_SYNTAX 336
94#define TOK_T61String 337
95#define TOK_TAGS 338
96#define TOK_TeletexString 339
97#define TOK_TRUE 340
98#define TOK_TYPE_IDENTIFIER 341
99#define TOK_UNIQUE 342
100#define TOK_UNIVERSAL 343
101#define TOK_UniversalString 344
102#define TOK_UTCTime 345
103#define TOK_UTF8String 346
104#define TOK_VideotexString 347
105#define TOK_VisibleString 348
106#define TOK_WITH 349
107#define TOK_EXCEPT 350
108#define TOK_INTERSECTION 351
109#define TOK_UNION 352
110#define TOK_TwoDots 353
111#define TOK_ThreeDots 354
vlmfa67ddc2004-06-03 03:38:44 +0000112
113#line 1 "asn1p_y.y"
114
115
116#include <stdlib.h>
117#include <stdio.h>
118#include <string.h>
119#include <errno.h>
120#include <assert.h>
121
122#include "asn1parser.h"
123
124#define YYPARSE_PARAM param
125#define YYERROR_VERBOSE
126
127int yylex(void);
128int yyerror(const char *msg);
129void asn1p_lexer_hack_push_opaque_state(void);
130void asn1p_lexer_hack_enable_with_syntax(void);
vlm9283dbe2004-08-18 04:59:12 +0000131void asn1p_lexer_hack_push_encoding_control(void);
vlmfa67ddc2004-06-03 03:38:44 +0000132#define yylineno asn1p_lineno
133extern int asn1p_lineno;
134
135
136static asn1p_value_t *
137 _convert_bitstring2binary(char *str, int base);
138
vlm6a02a8a2004-09-08 00:28:11 +0000139#define checkmem(ptr) do { \
140 if(!(ptr)) \
141 return yyerror("Memory failure"); \
vlmfa67ddc2004-06-03 03:38:44 +0000142 } while(0)
143
144#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
145 if(arg1->type != constr_type) { \
146 int __ret; \
147 root = asn1p_constraint_new(yylineno); \
148 checkmem(root); \
149 root->type = constr_type; \
150 __ret = asn1p_constraint_insert(root, \
151 arg1); \
152 checkmem(__ret == 0); \
153 } else { \
154 root = arg1; \
155 } \
156 if(arg2) { \
157 int __ret \
158 = asn1p_constraint_insert(root, arg2); \
159 checkmem(__ret == 0); \
160 } \
161 } while(0)
162
163
vlm9283dbe2004-08-18 04:59:12 +0000164#line 58 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +0000165typedef union {
166 asn1p_t *a_grammar;
167 asn1p_module_flags_e a_module_flags;
168 asn1p_module_t *a_module;
169 asn1p_expr_type_e a_type; /* ASN.1 Type */
170 asn1p_expr_t *a_expr; /* Constructed collection */
171 asn1p_constraint_t *a_constr; /* Constraint */
172 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
173 asn1p_xports_t *a_xports; /* IMports/EXports */
174 asn1p_oid_t *a_oid; /* Object Identifier */
175 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
176 struct asn1p_type_tag_s a_tag; /* A tag */
177 asn1p_ref_t *a_ref; /* Reference to custom type */
178 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
179 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
180 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
181 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
182 struct asn1p_param_s a_parg; /* A parameter argument */
183 asn1p_paramlist_t *a_plist; /* A pargs list */
vlmc94e28f2004-09-15 11:59:51 +0000184 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
vlmfa67ddc2004-06-03 03:38:44 +0000185 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
vlmec6acd42004-09-29 13:18:09 +0000186 asn1c_integer_t a_int;
vlmfa67ddc2004-06-03 03:38:44 +0000187 char *tv_str;
188 struct {
189 char *buf;
190 int len;
191 } tv_opaque;
192 struct {
193 char *name;
194 struct asn1p_type_tag_s tag;
195 } tv_nametag;
vlm6a02a8a2004-09-08 00:28:11 +0000196} YYSTYPE;
197#include <stdio.h>
198
199#ifndef __cplusplus
200#ifndef __STDC__
201#define const
202#endif
vlmfa67ddc2004-06-03 03:38:44 +0000203#endif
204
205
206
vlm2728a8d2005-01-23 09:51:44 +0000207#define YYFINAL 415
vlm6a02a8a2004-09-08 00:28:11 +0000208#define YYFLAG -32768
vlm2728a8d2005-01-23 09:51:44 +0000209#define YYNTBASE 116
vlmfa67ddc2004-06-03 03:38:44 +0000210
vlm2728a8d2005-01-23 09:51:44 +0000211#define YYTRANSLATE(x) ((unsigned)(x) <= 354 ? yytranslate[x] : 217)
vlmfa67ddc2004-06-03 03:38:44 +0000212
vlm6a02a8a2004-09-08 00:28:11 +0000213static const char yytranslate[] = { 0,
214 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
215 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
216 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2728a8d2005-01-23 09:51:44 +0000217 2, 2, 110, 2, 2, 2, 2, 2, 2, 105,
218 106, 2, 2, 108, 2, 111, 2, 2, 2, 2,
219 2, 2, 2, 2, 2, 2, 2, 109, 107, 112,
220 2, 2, 2, 113, 2, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000221 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
222 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2728a8d2005-01-23 09:51:44 +0000223 114, 2, 115, 97, 2, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000224 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
225 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2728a8d2005-01-23 09:51:44 +0000226 2, 2, 103, 99, 104, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000227 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
228 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
229 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
230 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
231 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
232 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
233 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
234 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
235 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
236 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
237 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
238 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
239 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
240 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
241 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
242 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
243 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
244 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
245 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
246 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
247 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
248 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
vlm2728a8d2005-01-23 09:51:44 +0000249 98, 100, 101, 102
vlm6a02a8a2004-09-08 00:28:11 +0000250};
vlmfa67ddc2004-06-03 03:38:44 +0000251
vlm6a02a8a2004-09-08 00:28:11 +0000252#if YYDEBUG != 0
253static const short yyprhs[] = { 0,
254 0, 2, 4, 7, 16, 17, 19, 23, 26, 28,
255 31, 33, 38, 40, 41, 43, 45, 48, 51, 54,
256 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
257 79, 81, 82, 86, 88, 92, 95, 97, 100, 105,
vlm0aa86902004-10-12 23:26:53 +0000258 107, 111, 113, 117, 119, 123, 127, 130, 132, 136,
259 138, 142, 144, 151, 153, 155, 156, 158, 160, 164,
260 166, 168, 173, 177, 181, 188, 190, 194, 196, 200,
261 204, 206, 210, 212, 214, 215, 217, 219, 223, 227,
262 231, 233, 235, 239, 242, 244, 250, 251, 253, 255,
263 259, 262, 267, 272, 273, 275, 276, 283, 285, 288,
264 290, 292, 294, 298, 302, 306, 308, 310, 315, 320,
265 325, 332, 339, 341, 346, 351, 353, 357, 359, 363,
266 367, 371, 373, 377, 379, 383, 385, 387, 389, 391,
267 396, 400, 401, 405, 407, 409, 411, 413, 415, 417,
268 419, 421, 423, 427, 429, 432, 434, 436, 438, 440,
269 443, 446, 448, 450, 453, 456, 458, 460, 462, 464,
270 467, 469, 472, 474, 476, 478, 480, 482, 484, 486,
271 488, 490, 492, 494, 496, 498, 500, 502, 504, 506,
272 508, 510, 511, 513, 515, 520, 524, 529, 531, 535,
273 541, 543, 547, 551, 555, 560, 564, 566, 570, 574,
274 578, 582, 584, 586, 588, 591, 594, 598, 600, 602,
275 604, 606, 608, 610, 612, 618, 620, 624, 626, 630,
276 631, 633, 635, 637, 639, 641, 643, 647, 652, 654,
277 658, 661, 665, 667, 671, 672, 674, 676, 679, 682,
278 686, 688, 692, 694, 699, 704, 706, 708, 710, 712,
vlm2728a8d2005-01-23 09:51:44 +0000279 713, 715, 718, 723, 724, 726, 728, 730, 731, 733,
280 735, 737, 739, 741, 742, 744
vlm6a02a8a2004-09-08 00:28:11 +0000281};
vlmfa67ddc2004-06-03 03:38:44 +0000282
vlm2728a8d2005-01-23 09:51:44 +0000283static const short yyrhs[] = { 117,
284 0, 118, 0, 117, 118, 0, 213, 119, 34, 123,
285 3, 21, 126, 39, 0, 0, 120, 0, 103, 121,
286 104, 0, 103, 104, 0, 122, 0, 121, 122, 0,
287 216, 0, 216, 105, 9, 106, 0, 9, 0, 0,
288 124, 0, 125, 0, 124, 125, 0, 41, 84, 0,
vlm6a02a8a2004-09-08 00:28:11 +0000289 52, 84, 0, 20, 84, 0, 43, 53, 0, 12,
vlm2728a8d2005-01-23 09:51:44 +0000290 57, 0, 0, 127, 0, 128, 0, 127, 128, 0,
291 130, 0, 135, 0, 143, 0, 170, 0, 138, 0,
292 0, 38, 12, 129, 0, 178, 0, 54, 131, 107,
293 0, 54, 46, 0, 132, 0, 131, 132, 0, 133,
294 46, 213, 119, 0, 134, 0, 133, 108, 134, 0,
295 213, 0, 213, 103, 104, 0, 216, 0, 42, 136,
296 107, 0, 42, 17, 107, 0, 42, 107, 0, 137,
297 0, 136, 108, 137, 0, 213, 0, 213, 103, 104,
298 0, 216, 0, 213, 139, 3, 103, 140, 104, 0,
299 165, 0, 175, 0, 0, 141, 0, 142, 0, 141,
300 108, 142, 0, 102, 0, 186, 0, 213, 3, 208,
301 87, 0, 213, 3, 163, 0, 213, 3, 153, 0,
302 213, 103, 144, 104, 3, 163, 0, 145, 0, 144,
303 108, 145, 0, 213, 0, 213, 109, 216, 0, 175,
304 109, 216, 0, 147, 0, 146, 108, 147, 0, 163,
305 0, 216, 0, 0, 149, 0, 150, 0, 149, 108,
306 150, 0, 216, 163, 202, 0, 30, 68, 163, 0,
307 162, 0, 152, 0, 151, 108, 152, 0, 216, 163,
308 0, 162, 0, 28, 103, 155, 104, 157, 0, 0,
309 88, 0, 156, 0, 155, 108, 156, 0, 168, 202,
310 0, 168, 163, 154, 202, 0, 168, 168, 154, 202,
311 0, 0, 158, 0, 0, 95, 82, 103, 159, 160,
312 104, 0, 161, 0, 160, 161, 0, 4, 0, 168,
313 0, 102, 0, 102, 110, 173, 0, 102, 110, 207,
314 0, 208, 164, 182, 0, 177, 0, 178, 0, 27,
315 103, 151, 104, 0, 78, 103, 148, 104, 0, 79,
316 103, 148, 104, 0, 78, 182, 68, 215, 208, 164,
317 0, 79, 182, 68, 215, 208, 164, 0, 18, 0,
318 18, 35, 25, 216, 0, 213, 103, 146, 104, 0,
319 165, 0, 56, 68, 165, 0, 11, 0, 11, 111,
320 213, 0, 214, 111, 213, 0, 11, 111, 216, 0,
321 214, 0, 214, 111, 166, 0, 167, 0, 166, 111,
322 167, 0, 169, 0, 169, 0, 13, 0, 14, 0,
323 216, 139, 3, 171, 0, 216, 109, 171, 0, 0,
324 103, 172, 174, 0, 63, 0, 45, 0, 86, 0,
325 5, 0, 7, 0, 6, 0, 207, 0, 173, 0,
326 216, 0, 213, 111, 216, 0, 4, 0, 174, 4,
327 0, 24, 0, 63, 0, 76, 0, 176, 0, 67,
vlm0aa86902004-10-12 23:26:53 +0000328 81, 0, 65, 51, 0, 77, 0, 44, 0, 36,
329 71, 0, 26, 81, 0, 91, 0, 47, 0, 58,
vlm2728a8d2005-01-23 09:51:44 +0000330 0, 40, 0, 22, 81, 0, 175, 0, 176, 204,
vlm0aa86902004-10-12 23:26:53 +0000331 0, 23, 0, 48, 0, 49, 0, 50, 0, 59,
332 0, 64, 0, 74, 0, 83, 0, 85, 0, 90,
333 0, 92, 0, 93, 0, 94, 0, 66, 0, 99,
334 0, 100, 0, 97, 0, 98, 0, 96, 0, 0,
vlm2728a8d2005-01-23 09:51:44 +0000335 183, 0, 184, 0, 80, 105, 185, 106, 0, 105,
336 185, 106, 0, 184, 105, 185, 106, 0, 186, 0,
337 186, 108, 102, 0, 186, 108, 102, 108, 186, 0,
338 187, 0, 186, 179, 187, 0, 186, 180, 187, 0,
339 187, 181, 187, 0, 189, 105, 185, 106, 0, 105,
340 185, 106, 0, 190, 0, 190, 188, 190, 0, 61,
341 188, 190, 0, 190, 188, 60, 0, 61, 188, 60,
342 0, 196, 0, 191, 0, 101, 0, 101, 112, 0,
343 112, 101, 0, 112, 101, 112, 0, 80, 0, 46,
344 0, 207, 0, 216, 0, 6, 0, 45, 0, 86,
345 0, 95, 30, 103, 192, 104, 0, 193, 0, 192,
346 108, 193, 0, 102, 0, 216, 182, 194, 0, 0,
347 195, 0, 73, 0, 15, 0, 69, 0, 197, 0,
348 198, 0, 103, 213, 104, 0, 197, 103, 199, 104,
349 0, 200, 0, 199, 108, 200, 0, 113, 201, 0,
350 113, 111, 201, 0, 216, 0, 201, 111, 216, 0,
351 0, 203, 0, 69, 0, 33, 171, 0, 103, 104,
352 0, 103, 205, 104, 0, 206, 0, 205, 108, 206,
353 0, 216, 0, 216, 105, 207, 106, 0, 216, 105,
354 173, 106, 0, 207, 0, 102, 0, 9, 0, 10,
355 0, 0, 209, 0, 210, 212, 0, 114, 211, 9,
356 115, 0, 0, 89, 0, 19, 0, 75, 0, 0,
357 52, 0, 41, 0, 11, 0, 12, 0, 12, 0,
358 0, 216, 0, 8, 0
vlm6a02a8a2004-09-08 00:28:11 +0000359};
vlmfa67ddc2004-06-03 03:38:44 +0000360
361#endif
362
vlm6a02a8a2004-09-08 00:28:11 +0000363#if YYDEBUG != 0
364static const short yyrline[] = { 0,
vlm0aa86902004-10-12 23:26:53 +0000365 301, 307, 313, 329, 354, 356, 359, 363, 368, 375,
366 383, 388, 392, 401, 403, 411, 415, 423, 427, 430,
367 433, 437, 457, 459, 467, 471, 503, 507, 516, 523,
368 536, 543, 545, 557, 570, 577, 582, 588, 594, 603,
369 609, 615, 622, 628, 636, 640, 643, 650, 656, 662,
370 669, 675, 684, 694, 702, 710, 712, 722, 725, 729,
371 732, 744, 756, 762, 778, 787, 797, 807, 812, 819,
372 829, 835, 841, 845, 857, 859, 861, 867, 873, 880,
373 887, 892, 898, 904, 910, 915, 925, 927, 930, 938,
374 944, 953, 959, 976, 978, 983, 987, 992, 997, 1003,
375 1007, 1018, 1027, 1036, 1047, 1069, 1073, 1079, 1085, 1091,
376 1097, 1107, 1117, 1123, 1137, 1161, 1168, 1182, 1191, 1201,
377 1211, 1221, 1229, 1250, 1259, 1268, 1269, 1271, 1278, 1290,
378 1300, 1308, 1308, 1313, 1318, 1323, 1328, 1332, 1336, 1340,
379 1343, 1348, 1360, 1376, 1387, 1401, 1403, 1404, 1405, 1406,
380 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1419, 1421, 1422,
381 1425, 1432, 1444, 1446, 1450, 1454, 1455, 1456, 1457, 1458,
382 1462, 1463, 1464, 1465, 1469, 1470, 1477, 1477, 1478, 1478,
383 1479, 1481, 1483, 1488, 1492, 1501, 1505, 1510, 1514, 1520,
384 1530, 1534, 1537, 1540, 1545, 1554, 1562, 1568, 1575, 1583,
385 1591, 1600, 1603, 1608, 1610, 1611, 1612, 1615, 1619, 1624,
386 1628, 1639, 1643, 1648, 1655, 1661, 1665, 1670, 1676, 1688,
387 1690, 1693, 1697, 1700, 1705, 1709, 1717, 1732, 1738, 1745,
388 1758, 1770, 1785, 1789, 1806, 1811, 1814, 1819, 1841, 1846,
389 1851, 1857, 1863, 1871, 1879, 1887, 1894, 1904, 1909, 1939,
vlm2728a8d2005-01-23 09:51:44 +0000390 1941, 1944, 1951, 1957, 1959, 1960, 1961, 1964, 1966, 1967,
391 1970, 1975, 1982, 1989, 1991, 1995
vlm6a02a8a2004-09-08 00:28:11 +0000392};
393#endif
394
395
396#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
397
398static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
399"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
400"TOK_number_negative","TOK_typereference","TOK_capitalreference","TOK_typefieldreference",
401"TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY",
402"TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN",
403"TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS",
404"TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED",
405"TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL","TOK_END","TOK_ENUMERATED",
406"TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE",
407"TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString","TOK_GraphicString","TOK_IA5String",
408"TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE",
409"TOK_INSTRUCTIONS","TOK_INTEGER","TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY",
410"TOK_NULL","TOK_NumericString","TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET",
411"TOK_OF","TOK_OPTIONAL","TOK_PATTERN","TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT",
412"TOK_PrintableString","TOK_PRIVATE","TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE",
413"TOK_SET","TOK_SIZE","TOK_STRING","TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString",
414"TOK_TRUE","TOK_TYPE_IDENTIFIER","TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString",
415"TOK_UTCTime","TOK_UTF8String","TOK_VideotexString","TOK_VisibleString","TOK_WITH",
416"TOK_EXCEPT","'^'","TOK_INTERSECTION","'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots",
vlm2728a8d2005-01-23 09:51:44 +0000417"'{'","'}'","'('","')'","';'","','","':'","'!'","'.'","'<'","'@'","'['","']'",
vlm6a02a8a2004-09-08 00:28:11 +0000418"ParsedGrammar","ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
419"ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags",
420"ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody",
421"ModuleSpecificationBody","ModuleSpecificationElement","@1","ImportsDefinition",
422"ImportsBundleSet","ImportsBundle","ImportsList","ImportsElement","ExportsDefinition",
423"ExportsBody","ExportsElement","ValueSetDefinition","DefinedTypeRef","optValueSetBody",
424"ValueSetBody","ValueSetElement","DataTypeReference","ParameterArgumentList",
vlm0aa86902004-10-12 23:26:53 +0000425"ParameterArgumentName","ActualParameterList","ActualParameter","optComponentTypeLists",
426"ComponentTypeLists","ComponentType","AlternativeTypeLists","AlternativeType",
427"ClassDeclaration","optUnique","ClassFieldList","ClassField","optWithSyntax",
428"WithSyntax","@2","WithSyntaxFormat","WithSyntaxFormatToken","ExtensionAndException",
429"Type","TypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList",
430"ComplexTypeReferenceElement","ClassFieldIdentifier","ClassFieldName","ValueDefinition",
431"Value","@3","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
432"BasicType","BasicString","Union","Intersection","Except","optConstraints","Constraints",
433"SetOfConstraints","ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement",
434"ConstraintRangeSpec","ConstraintSpec","ConstraintValue","WithComponents","WithComponentsList",
435"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
436"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
437"ComponentIdList","optMarker","Marker","UniverationDefinition","UniverationList",
vlm2728a8d2005-01-23 09:51:44 +0000438"UniverationElement","SignedNumber","optTag","Tag","TagTypeValue","TagClass",
439"TagPlicit","TypeRefName","ObjectClassReference","optIdentifier","Identifier", NULL
vlm6a02a8a2004-09-08 00:28:11 +0000440};
441#endif
442
443static const short yyr1[] = { 0,
vlm2728a8d2005-01-23 09:51:44 +0000444 116, 117, 117, 118, 119, 119, 120, 120, 121, 121,
445 122, 122, 122, 123, 123, 124, 124, 125, 125, 125,
446 125, 125, 126, 126, 127, 127, 128, 128, 128, 128,
447 128, 129, 128, 128, 130, 130, 131, 131, 132, 133,
448 133, 134, 134, 134, 135, 135, 135, 136, 136, 137,
449 137, 137, 138, 139, 139, 140, 140, 141, 141, 142,
450 142, 143, 143, 143, 143, 144, 144, 145, 145, 145,
451 146, 146, 147, 147, 148, 148, 149, 149, 150, 150,
452 150, 151, 151, 152, 152, 153, 154, 154, 155, 155,
453 156, 156, 156, 157, 157, 159, 158, 160, 160, 161,
454 161, 162, 162, 162, 163, 164, 164, 164, 164, 164,
455 164, 164, 164, 164, 164, 164, 164, 165, 165, 165,
456 165, 165, 165, 166, 166, 167, 168, 169, 169, 170,
457 171, 172, 171, 171, 171, 171, 171, 171, 171, 171,
458 171, 173, 173, 174, 174, 175, 175, 175, 175, 175,
459 175, 175, 175, 175, 175, 175, 175, 176, 176, 176,
460 177, 177, 178, 178, 178, 178, 178, 178, 178, 178,
461 178, 178, 178, 178, 178, 178, 179, 179, 180, 180,
462 181, 182, 182, 183, 183, 184, 184, 185, 185, 185,
463 186, 186, 186, 186, 187, 187, 187, 187, 187, 187,
464 187, 187, 187, 188, 188, 188, 188, 189, 189, 190,
465 190, 190, 190, 190, 191, 192, 192, 193, 193, 194,
466 194, 195, 195, 195, 196, 196, 197, 198, 199, 199,
467 200, 200, 201, 201, 202, 202, 203, 203, 204, 204,
468 205, 205, 206, 206, 206, 206, 206, 207, 207, 208,
469 208, 209, 210, 211, 211, 211, 211, 212, 212, 212,
470 213, 213, 214, 215, 215, 216
vlm6a02a8a2004-09-08 00:28:11 +0000471};
472
473static const short yyr2[] = { 0,
474 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
475 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
476 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
477 1, 0, 3, 1, 3, 2, 1, 2, 4, 1,
vlm0aa86902004-10-12 23:26:53 +0000478 3, 1, 3, 1, 3, 3, 2, 1, 3, 1,
479 3, 1, 6, 1, 1, 0, 1, 1, 3, 1,
480 1, 4, 3, 3, 6, 1, 3, 1, 3, 3,
481 1, 3, 1, 1, 0, 1, 1, 3, 3, 3,
482 1, 1, 3, 2, 1, 5, 0, 1, 1, 3,
483 2, 4, 4, 0, 1, 0, 6, 1, 2, 1,
484 1, 1, 3, 3, 3, 1, 1, 4, 4, 4,
485 6, 6, 1, 4, 4, 1, 3, 1, 3, 3,
486 3, 1, 3, 1, 3, 1, 1, 1, 1, 4,
487 3, 0, 3, 1, 1, 1, 1, 1, 1, 1,
488 1, 1, 3, 1, 2, 1, 1, 1, 1, 2,
489 2, 1, 1, 2, 2, 1, 1, 1, 1, 2,
490 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
vlm6a02a8a2004-09-08 00:28:11 +0000491 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
vlm0aa86902004-10-12 23:26:53 +0000492 1, 0, 1, 1, 4, 3, 4, 1, 3, 5,
493 1, 3, 3, 3, 4, 3, 1, 3, 3, 3,
494 3, 1, 1, 1, 2, 2, 3, 1, 1, 1,
495 1, 1, 1, 1, 5, 1, 3, 1, 3, 0,
496 1, 1, 1, 1, 1, 1, 3, 4, 1, 3,
497 2, 3, 1, 3, 0, 1, 1, 2, 2, 3,
498 1, 3, 1, 4, 4, 1, 1, 1, 1, 0,
vlm2728a8d2005-01-23 09:51:44 +0000499 1, 2, 4, 0, 1, 1, 1, 0, 1, 1,
500 1, 1, 1, 0, 1, 1
vlm6a02a8a2004-09-08 00:28:11 +0000501};
502
503static const short yydefact[] = { 0,
vlm2728a8d2005-01-23 09:51:44 +0000504 261, 262, 1, 2, 5, 3, 0, 0, 6, 266,
vlm6a02a8a2004-09-08 00:28:11 +0000505 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
506 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
vlm0aa86902004-10-12 23:26:53 +0000507 18, 21, 19, 0, 17, 12, 23, 163, 0, 0,
508 164, 165, 166, 0, 167, 168, 176, 169, 170, 171,
509 172, 173, 174, 175, 0, 24, 25, 27, 28, 31,
510 29, 30, 34, 0, 0, 32, 0, 47, 0, 48,
511 50, 52, 36, 0, 37, 0, 40, 42, 44, 4,
vlm2728a8d2005-01-23 09:51:44 +0000512 26, 250, 118, 263, 0, 146, 0, 0, 159, 153,
vlm0aa86902004-10-12 23:26:53 +0000513 157, 158, 147, 0, 0, 148, 152, 156, 0, 0,
514 54, 55, 149, 122, 0, 33, 46, 45, 0, 0,
vlm2728a8d2005-01-23 09:51:44 +0000515 35, 38, 0, 0, 0, 0, 254, 64, 63, 0,
516 251, 258, 0, 160, 155, 154, 151, 150, 0, 66,
517 0, 68, 0, 0, 0, 49, 51, 5, 41, 43,
518 0, 256, 257, 255, 0, 118, 263, 113, 0, 0,
519 182, 182, 62, 182, 116, 161, 149, 106, 107, 0,
520 260, 259, 252, 119, 121, 0, 0, 0, 0, 56,
521 128, 129, 123, 124, 126, 120, 137, 139, 138, 248,
522 249, 135, 134, 136, 132, 130, 141, 140, 0, 142,
523 39, 0, 89, 250, 127, 0, 0, 0, 0, 0,
524 75, 0, 0, 183, 184, 75, 0, 105, 0, 162,
525 250, 250, 67, 70, 69, 212, 213, 209, 0, 208,
526 214, 0, 60, 0, 0, 0, 57, 58, 61, 191,
527 0, 197, 203, 202, 225, 226, 210, 211, 0, 0,
528 0, 0, 94, 0, 0, 237, 87, 87, 91, 236,
529 0, 253, 0, 102, 0, 82, 85, 250, 117, 0,
530 0, 0, 76, 77, 81, 250, 0, 188, 264, 0,
531 0, 264, 247, 239, 0, 241, 246, 243, 0, 71,
532 73, 74, 65, 204, 0, 0, 0, 0, 0, 53,
533 0, 179, 180, 177, 178, 0, 0, 181, 0, 0,
534 0, 0, 125, 144, 133, 143, 131, 0, 86, 95,
535 90, 238, 88, 235, 235, 114, 0, 108, 0, 84,
536 0, 250, 109, 0, 235, 186, 0, 250, 265, 0,
537 110, 250, 240, 0, 0, 115, 250, 205, 206, 201,
538 199, 0, 227, 196, 59, 192, 193, 194, 0, 200,
539 198, 0, 0, 229, 145, 0, 92, 93, 103, 104,
540 142, 83, 185, 80, 78, 79, 189, 0, 187, 0,
541 242, 0, 0, 72, 207, 218, 0, 216, 182, 195,
542 0, 231, 233, 228, 0, 96, 0, 111, 112, 245,
543 244, 215, 0, 220, 232, 0, 230, 0, 190, 217,
544 223, 224, 222, 219, 221, 234, 100, 0, 98, 101,
545 97, 99, 0, 0, 0
vlm6a02a8a2004-09-08 00:28:11 +0000546};
547
vlm2728a8d2005-01-23 09:51:44 +0000548static const short yydefgoto[] = { 413,
vlm6a02a8a2004-09-08 00:28:11 +0000549 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
550 56, 57, 106, 58, 74, 75, 76, 77, 59, 69,
vlm2728a8d2005-01-23 09:51:44 +0000551 70, 60, 100, 226, 227, 228, 61, 129, 130, 279,
552 280, 262, 263, 264, 255, 256, 118, 314, 192, 193,
553 309, 310, 398, 408, 409, 265, 281, 154, 155, 173,
554 174, 194, 195, 62, 186, 240, 187, 305, 156, 103,
555 158, 159, 296, 297, 299, 203, 204, 205, 267, 268,
556 230, 286, 231, 232, 233, 377, 378, 404, 405, 234,
557 235, 236, 353, 354, 382, 249, 250, 210, 275, 276,
558 237, 251, 121, 122, 145, 163, 189, 104, 328, 238
vlm6a02a8a2004-09-08 00:28:11 +0000559};
560
vlm2728a8d2005-01-23 09:51:44 +0000561static const short yypact[] = { 120,
562-32768,-32768, 120,-32768, -64,-32768, 38, -5,-32768,-32768,
563-32768,-32768, 55,-32768, -25, 165,-32768,-32768, 90, 49,
564 60, 73, 74, 82, 136, 165,-32768, 54,-32768,-32768,
565-32768,-32768,-32768, 151,-32768,-32768, 314,-32768, 177, 23,
566-32768,-32768,-32768, 159,-32768,-32768,-32768,-32768,-32768,-32768,
567-32768,-32768,-32768,-32768, 187, 314,-32768,-32768,-32768,-32768,
568-32768,-32768,-32768, 256, 528,-32768, 114,-32768, 76,-32768,
569 133,-32768,-32768, 42,-32768, -20,-32768, 147,-32768,-32768,
570-32768, -3, 144,-32768, 183,-32768, 185, 198,-32768,-32768,
571-32768,-32768,-32768, 232, 212,-32768,-32768,-32768, 545, 292,
572-32768,-32768,-32768, 186, 295,-32768,-32768,-32768, 101, 195,
573-32768,-32768, 120, 101, 197, 199, 3,-32768,-32768, 391,
574-32768, 113, 101,-32768,-32768,-32768,-32768,-32768, 78,-32768,
575 200, 202, 210, 263, 279,-32768,-32768, -64,-32768,-32768,
576 182,-32768,-32768,-32768, 306, -22, 213, 283, 226, 266,
577 -12, -8,-32768, -32,-32768,-32768, 228,-32768,-32768, 233,
578-32768,-32768,-32768,-32768,-32768, 340, 545, 336, 336, 95,
579-32768,-32768, 235,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
580-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 238, 239,
581-32768, 103,-32768, 29,-32768, 236, 325, 36, 237, 248,
582 6, 142, 286,-32768, 250, 6, 289,-32768, 51,-32768,
583 5, 244,-32768,-32768,-32768,-32768,-32768,-32768, 57,-32768,
584-32768, 330,-32768, 120, 142, 257, 258,-32768, 241, 271,
585 265, 57,-32768,-32768, 269,-32768,-32768,-32768, 182, 371,
586 336, 279, 281, 182, 279,-32768, 291, 291,-32768,-32768,
587 468,-32768, 336, 267, 108,-32768,-32768, 244,-32768, 142,
588 313, 280, 275,-32768,-32768, 244, 284, 173, 336, 142,
589 287, 336,-32768,-32768, 110,-32768,-32768, 282, 116,-32768,
590-32768,-32768,-32768, 273, 293, 170, 290, 288, 294,-32768,
591 95,-32768,-32768,-32768,-32768, 142, 142,-32768, 142, 142,
592 234, 285,-32768,-32768, 392,-32768,-32768, 319,-32768,-32768,
593-32768,-32768,-32768, -17, -17,-32768, 296,-32768, 36,-32768,
594 299, 244,-32768, 6, -17,-32768, 308, 244,-32768, 305,
595-32768, 244,-32768, 61, 296,-32768, 5,-32768, 300,-32768,
596-32768, 43,-32768,-32768,-32768,-32768,-32768,-32768, 310,-32768,
597-32768, 11, 123,-32768,-32768, 316,-32768,-32768,-32768,-32768,
598-32768,-32768,-32768,-32768,-32768,-32768, 312, 468,-32768, 468,
599-32768, 315, 317,-32768,-32768,-32768, 125,-32768, -32,-32768,
600 336, 311,-32768,-32768, 285,-32768, 142,-32768,-32768,-32768,
601-32768,-32768, 43, 17, 311, 336,-32768, 160, 241,-32768,
602-32768,-32768,-32768,-32768,-32768,-32768,-32768, 14,-32768,-32768,
603-32768,-32768, 395, 424,-32768
vlm6a02a8a2004-09-08 00:28:11 +0000604};
605
606static const short yypgoto[] = {-32768,
vlm2728a8d2005-01-23 09:51:44 +0000607-32768, 422, 298,-32768,-32768, 413,-32768,-32768, 402,-32768,
608-32768, 373,-32768,-32768,-32768, 356,-32768, 318,-32768,-32768,
609 324,-32768, 369,-32768,-32768, 146,-32768,-32768, 276,-32768,
610 105, 240,-32768, 121,-32768, 129,-32768, 196,-32768, 207,
611-32768,-32768,-32768,-32768, 44, -183, -65, -129, -53,-32768,
612 214, -185, -114,-32768, -160,-32768, -252,-32768, -41, -117,
613-32768, 18,-32768,-32768,-32768, -147,-32768,-32768, -204, -168,
614 -36, 227,-32768, -207,-32768,-32768, 67,-32768,-32768,-32768,
615-32768,-32768,-32768, 77, 80, -238,-32768,-32768,-32768, 130,
616 -125, -74,-32768,-32768,-32768,-32768, 1,-32768, 191, -7
vlm6a02a8a2004-09-08 00:28:11 +0000617};
618
619
vlm2728a8d2005-01-23 09:51:44 +0000620#define YYLAST 636
vlm6a02a8a2004-09-08 00:28:11 +0000621
622
623static const short yytable[] = { 15,
vlm2728a8d2005-01-23 09:51:44 +0000624 5, 229, 157, 5, 207, 15, 208, 120, 248, 188,
625 101, 101, 10, 10, 257, 245, 119, 407, 10, 175,
626 289, 142, 102, 102, 116, 113, 171, 172, 16, 65,
627 10, 401, 72, 1, 2, 261, 79, 64, 7, 67,
628 71, 171, 172, 10, 78, 10, 11, 200, 65, 10,
629 10, 246, 1, 2, 63, 321, 64, 131, 10, 180,
630 181, 245, 10, 11, 359, 330, 79, 200, 10, 180,
631 181, 200, 202, 63, 78, 357, 358, 143, 341, 19,
632 -261, 307, 372, 277, 312, 402, 366, 114, 123, 403,
633 201, 144, 202, 351, 206, 349, 202, 246, 28, 132,
634 216, 72, 10, 180, 181, 29, 79, 254, 10, 71,
635 117, 1, 2, 138, 78, 165, 188, 411, 117, 188,
636 160, 381, 229, 164, 175, 131, 32, 190, 247, 68,
637 1, 2, -235, 157, 176, 257, -235, 254, 34, 217,
638 218, 12, 117, 30, 376, 259, 283, 216, 111, 10,
639 180, 181, 273, 161, 274, 219, 31, 284, 17, 36,
640 214, 215, 273, 407, 162, 33, 10, 132, 285, 1,
641 2, 37, 171, 172, 220, 216, 20, 10, 180, 181,
642 221, 166, 108, 109, 21, 167, 217, 218, 66, 222,
643 258, 360, 320, 266, 171, 172, 223, 224, 266, 225,
644 325, 278, 219, 282, 73, 22, 243, 23, 277, 373,
645 244, 318, 410, 333, 217, 319, 24, 334, 399, 336,
646 107, 220, 410, 337, 288, 80, 384, 221, 392, 340,
647 385, 394, 393, 306, 190, 110, 222, 190, 388, 216,
648 389, 10, 180, 181, 224, 316, 225, 83, 84, 115,
649 157, 160, 157, 368, 123, 221, 364, 370, 82, 346,
650 347, 329, 348, 124, 329, 125, 83, 84, 126, 292,
651 293, 294, 295, 1, 2, 171, 172, 85, 217, 86,
652 327, 87, 127, 177, 178, 179, 10, 180, 181, 1,
653 2, 88, 128, 350, 133, 89, 134, 135, 137, 90,
654 140, 141, 91, 10, 180, 181, 1, 2, 168, 361,
655 169, 258, 170, 92, 196, -262, 266, 197, 93, 221,
656 94, 10, 95, 182, 1, 2, 278, 361, 198, 282,
657 209, 96, 97, 199, 379, 211, 38, 292, 293, 294,
658 295, 183, 212, 10, 383, 239, 98, 242, 241, 253,
659 252, 39, 260, 269, 270, 40, 272, 117, 99, 287,
660 290, 41, 42, 43, 184, 291, 298, 44, 160, 300,
661 160, 302, 45, 383, 304, 308, 317, 46, 313, 47,
662 322, 185, 324, 323, 338, 379, 335, 48, 406, 326,
663 331, 343, 342, 339, 414, 355, 49, 352, 50, 344,
664 356, 146, 147, 51, 363, 52, 53, 54, 148, 367,
665 369, 375, 85, 38, 86, 380, 87, 149, 386, 387,
666 390, 396, 391, 415, 6, 18, 88, 35, 81, 112,
667 89, 139, 136, 105, 90, 191, 345, 91, 41, 42,
668 43, 374, 213, 315, 365, 271, 150, 362, 92, 45,
669 311, 412, 303, 93, 46, 94, 47, 95, 301, 400,
670 395, 397, 332, 371, 48, 0, 96, 97, 151, 152,
671 0, 0, 0, 49, 0, 50, 0, 153, 146, 147,
672 51, 98, 52, 53, 54, 148, 0, 0, 0, 85,
673 38, 86, 0, 87, 149, 0, 0, 0, 0, 0,
674 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
675 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
676 0, 0, 0, 150, 0, 92, 45, 0, 0, 0,
677 93, 46, 94, 47, 95, 0, 0, 0, 83, 84,
678 0, 48, 0, 96, 97, 151, 152, 0, 0, 85,
679 49, 86, 50, 87, 0, 1, 2, 51, 98, 52,
680 53, 54, 0, 88, 0, 0, 85, 89, 86, 0,
681 87, 90, 0, 0, 91, 0, 0, 0, 0, 0,
682 88, 0, 0, 0, 89, 92, 0, 0, 90, 0,
683 93, 91, 94, 0, 95, 0, 0, 0, 0, 0,
684 0, 0, 92, 96, 97, 0, 0, 93, 0, 94,
685 0, 95, 0, 0, 0, 0, 0, 0, 98, 0,
686 96, 97, 0, 0, 0, 0, 0, 0, 0, 0,
687 0, 0, 0, 0, 0, 98
vlm6a02a8a2004-09-08 00:28:11 +0000688};
689
690static const short yycheck[] = { 7,
vlm2728a8d2005-01-23 09:51:44 +0000691 0, 170, 120, 3, 152, 13, 154, 82, 194, 135,
692 64, 65, 8, 8, 198, 33, 82, 4, 8, 134,
693 225, 19, 64, 65, 28, 46, 13, 14, 34, 37,
694 8, 15, 40, 11, 12, 30, 44, 37, 103, 17,
695 40, 13, 14, 8, 44, 8, 9, 80, 56, 8,
696 8, 69, 11, 12, 37, 260, 56, 99, 8, 9,
697 10, 33, 8, 9, 317, 270, 74, 80, 8, 9,
698 10, 80, 105, 56, 74, 314, 315, 75, 286, 105,
699 103, 242, 335, 209, 245, 69, 325, 108, 111, 73,
700 103, 89, 105, 301, 103, 300, 105, 69, 9, 99,
701 6, 109, 8, 9, 10, 57, 114, 102, 8, 109,
702 114, 11, 12, 113, 114, 123, 242, 104, 114, 245,
703 120, 111, 291, 123, 239, 167, 53, 135, 194, 107,
704 11, 12, 104, 251, 134, 319, 108, 102, 3, 45,
705 46, 104, 114, 84, 102, 199, 212, 6, 107, 8,
706 9, 10, 102, 41, 104, 61, 84, 101, 104, 106,
707 168, 169, 102, 4, 52, 84, 8, 167, 112, 11,
708 12, 21, 13, 14, 80, 6, 12, 8, 9, 10,
709 86, 104, 107, 108, 20, 108, 45, 46, 12, 95,
710 198, 317, 258, 201, 13, 14, 102, 103, 206, 105,
711 266, 209, 61, 211, 46, 41, 104, 43, 334, 335,
712 108, 104, 398, 104, 45, 108, 52, 108, 387, 104,
713 107, 80, 408, 108, 224, 39, 104, 86, 104, 60,
714 108, 379, 108, 241, 242, 103, 95, 245, 368, 6,
715 370, 8, 9, 10, 103, 253, 105, 11, 12, 103,
716 368, 251, 370, 328, 111, 86, 322, 332, 3, 296,
717 297, 269, 299, 81, 272, 81, 11, 12, 71, 97,
718 98, 99, 100, 11, 12, 13, 14, 22, 45, 24,
719 108, 26, 51, 5, 6, 7, 8, 9, 10, 11,
720 12, 36, 81, 60, 3, 40, 111, 3, 104, 44,
721 104, 103, 47, 8, 9, 10, 11, 12, 109, 317,
722 109, 319, 103, 58, 9, 103, 324, 35, 63, 86,
723 65, 8, 67, 45, 11, 12, 334, 335, 103, 337,
724 103, 76, 77, 68, 342, 103, 23, 97, 98, 99,
725 100, 63, 3, 8, 352, 111, 91, 109, 111, 25,
726 115, 38, 105, 68, 105, 42, 68, 114, 103, 30,
727 104, 48, 49, 50, 86, 108, 96, 54, 368, 105,
728 370, 103, 59, 381, 4, 95, 110, 64, 88, 66,
729 68, 103, 108, 104, 112, 393, 105, 74, 396, 106,
730 104, 104, 103, 101, 0, 4, 83, 113, 85, 106,
731 82, 11, 12, 90, 106, 92, 93, 94, 18, 102,
732 106, 112, 22, 23, 24, 106, 26, 27, 103, 108,
733 106, 111, 106, 0, 3, 13, 36, 26, 56, 74,
734 40, 114, 109, 65, 44, 138, 291, 47, 48, 49,
735 50, 337, 167, 248, 324, 206, 56, 319, 58, 59,
736 244, 408, 239, 63, 64, 65, 66, 67, 232, 393,
737 381, 385, 272, 334, 74, -1, 76, 77, 78, 79,
738 -1, -1, -1, 83, -1, 85, -1, 87, 11, 12,
739 90, 91, 92, 93, 94, 18, -1, -1, -1, 22,
740 23, 24, -1, 26, 27, -1, -1, -1, -1, -1,
741 -1, -1, -1, 36, -1, -1, -1, 40, -1, -1,
742 -1, 44, -1, -1, 47, 48, 49, 50, -1, -1,
743 -1, -1, -1, 56, -1, 58, 59, -1, -1, -1,
744 63, 64, 65, 66, 67, -1, -1, -1, 11, 12,
745 -1, 74, -1, 76, 77, 78, 79, -1, -1, 22,
746 83, 24, 85, 26, -1, 11, 12, 90, 91, 92,
747 93, 94, -1, 36, -1, -1, 22, 40, 24, -1,
748 26, 44, -1, -1, 47, -1, -1, -1, -1, -1,
749 36, -1, -1, -1, 40, 58, -1, -1, 44, -1,
750 63, 47, 65, -1, 67, -1, -1, -1, -1, -1,
751 -1, -1, 58, 76, 77, -1, -1, 63, -1, 65,
752 -1, 67, -1, -1, -1, -1, -1, -1, 91, -1,
753 76, 77, -1, -1, -1, -1, -1, -1, -1, -1,
754 -1, -1, -1, -1, -1, 91
vlm6a02a8a2004-09-08 00:28:11 +0000755};
756/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
757#line 3 "/usr/share/bison.simple"
758/* This file comes from bison-1.28. */
759
760/* Skeleton output parser for bison,
761 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
762
763 This program is free software; you can redistribute it and/or modify
764 it under the terms of the GNU General Public License as published by
765 the Free Software Foundation; either version 2, or (at your option)
766 any later version.
767
768 This program is distributed in the hope that it will be useful,
769 but WITHOUT ANY WARRANTY; without even the implied warranty of
770 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
771 GNU General Public License for more details.
772
773 You should have received a copy of the GNU General Public License
774 along with this program; if not, write to the Free Software
775 Foundation, Inc., 59 Temple Place - Suite 330,
776 Boston, MA 02111-1307, USA. */
777
778/* As a special exception, when this file is copied by Bison into a
779 Bison output file, you may use that output file without restriction.
780 This special exception was added by the Free Software Foundation
781 in version 1.24 of Bison. */
782
783/* This is the parser code that is written into each bison parser
784 when the %semantic_parser declaration is not specified in the grammar.
785 It was written by Richard Stallman by simplifying the hairy parser
786 used when %semantic_parser is specified. */
787
788#ifndef YYSTACK_USE_ALLOCA
789#ifdef alloca
790#define YYSTACK_USE_ALLOCA
791#else /* alloca not defined */
792#ifdef __GNUC__
793#define YYSTACK_USE_ALLOCA
794#define alloca __builtin_alloca
795#else /* not GNU C. */
796#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
797#define YYSTACK_USE_ALLOCA
798#include <alloca.h>
799#else /* not sparc */
800/* We think this test detects Watcom and Microsoft C. */
801/* This used to test MSDOS, but that is a bad idea
802 since that symbol is in the user namespace. */
803#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
804#if 0 /* No need for malloc.h, which pollutes the namespace;
805 instead, just don't use alloca. */
806#include <malloc.h>
807#endif
808#else /* not MSDOS, or __TURBOC__ */
809#if defined(_AIX)
810/* I don't know what this was needed for, but it pollutes the namespace.
811 So I turned it off. rms, 2 May 1997. */
812/* #include <malloc.h> */
813 #pragma alloca
814#define YYSTACK_USE_ALLOCA
815#else /* not MSDOS, or __TURBOC__, or _AIX */
816#if 0
817#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
818 and on HPUX 10. Eventually we can turn this on. */
819#define YYSTACK_USE_ALLOCA
820#define alloca __builtin_alloca
821#endif /* __hpux */
822#endif
823#endif /* not _AIX */
824#endif /* not MSDOS, or __TURBOC__ */
825#endif /* not sparc */
826#endif /* not GNU C */
827#endif /* alloca not defined */
828#endif /* YYSTACK_USE_ALLOCA not defined */
829
830#ifdef YYSTACK_USE_ALLOCA
831#define YYSTACK_ALLOC alloca
vlmfa67ddc2004-06-03 03:38:44 +0000832#else
vlm6a02a8a2004-09-08 00:28:11 +0000833#define YYSTACK_ALLOC malloc
vlmfa67ddc2004-06-03 03:38:44 +0000834#endif
835
vlm6a02a8a2004-09-08 00:28:11 +0000836/* Note: there must be only one dollar sign in this file.
837 It is replaced by the list of actions, each action
838 as one case of the switch. */
vlmfa67ddc2004-06-03 03:38:44 +0000839
840#define yyerrok (yyerrstatus = 0)
841#define yyclearin (yychar = YYEMPTY)
842#define YYEMPTY -2
843#define YYEOF 0
844#define YYACCEPT goto yyacceptlab
vlm6a02a8a2004-09-08 00:28:11 +0000845#define YYABORT goto yyabortlab
vlmfa67ddc2004-06-03 03:38:44 +0000846#define YYERROR goto yyerrlab1
vlm6a02a8a2004-09-08 00:28:11 +0000847/* Like YYERROR except do call yyerror.
848 This remains here temporarily to ease the
849 transition to the new meaning of YYERROR, for GCC.
vlmfa67ddc2004-06-03 03:38:44 +0000850 Once GCC version 2 has supplanted version 1, this can go. */
851#define YYFAIL goto yyerrlab
852#define YYRECOVERING() (!!yyerrstatus)
vlm6a02a8a2004-09-08 00:28:11 +0000853#define YYBACKUP(token, value) \
vlmfa67ddc2004-06-03 03:38:44 +0000854do \
855 if (yychar == YYEMPTY && yylen == 1) \
vlm6a02a8a2004-09-08 00:28:11 +0000856 { yychar = (token), yylval = (value); \
vlmfa67ddc2004-06-03 03:38:44 +0000857 yychar1 = YYTRANSLATE (yychar); \
858 YYPOPSTACK; \
859 goto yybackup; \
860 } \
861 else \
vlm6a02a8a2004-09-08 00:28:11 +0000862 { yyerror ("syntax error: cannot back up"); YYERROR; } \
vlmfa67ddc2004-06-03 03:38:44 +0000863while (0)
864
865#define YYTERROR 1
866#define YYERRCODE 256
867
vlm6a02a8a2004-09-08 00:28:11 +0000868#ifndef YYPURE
869#define YYLEX yylex()
vlmfa67ddc2004-06-03 03:38:44 +0000870#endif
871
vlm6a02a8a2004-09-08 00:28:11 +0000872#ifdef YYPURE
873#ifdef YYLSP_NEEDED
874#ifdef YYLEX_PARAM
875#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
876#else
877#define YYLEX yylex(&yylval, &yylloc)
878#endif
879#else /* not YYLSP_NEEDED */
880#ifdef YYLEX_PARAM
881#define YYLEX yylex(&yylval, YYLEX_PARAM)
882#else
883#define YYLEX yylex(&yylval)
884#endif
885#endif /* not YYLSP_NEEDED */
886#endif
vlmfa67ddc2004-06-03 03:38:44 +0000887
vlm6a02a8a2004-09-08 00:28:11 +0000888/* If nonreentrant, generate the variables here */
vlmfa67ddc2004-06-03 03:38:44 +0000889
vlm6a02a8a2004-09-08 00:28:11 +0000890#ifndef YYPURE
vlmfa67ddc2004-06-03 03:38:44 +0000891
vlm6a02a8a2004-09-08 00:28:11 +0000892int yychar; /* the lookahead symbol */
893YYSTYPE yylval; /* the semantic value of the */
894 /* lookahead symbol */
vlmfa67ddc2004-06-03 03:38:44 +0000895
vlm6a02a8a2004-09-08 00:28:11 +0000896#ifdef YYLSP_NEEDED
897YYLTYPE yylloc; /* location data for the lookahead */
898 /* symbol */
899#endif
vlmfa67ddc2004-06-03 03:38:44 +0000900
vlm6a02a8a2004-09-08 00:28:11 +0000901int yynerrs; /* number of parse errors so far */
902#endif /* not YYPURE */
903
904#if YYDEBUG != 0
905int yydebug; /* nonzero means print parse trace */
906/* Since this is uninitialized, it does not stop multiple parsers
907 from coexisting. */
908#endif
909
910/* YYINITDEPTH indicates the initial size of the parser's stacks */
911
vlmfa67ddc2004-06-03 03:38:44 +0000912#ifndef YYINITDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000913#define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +0000914#endif
915
vlm6a02a8a2004-09-08 00:28:11 +0000916/* YYMAXDEPTH is the maximum size the stacks can grow to
917 (effective only if the built-in stack extension method is used). */
vlmfa67ddc2004-06-03 03:38:44 +0000918
919#if YYMAXDEPTH == 0
vlm6a02a8a2004-09-08 00:28:11 +0000920#undef YYMAXDEPTH
vlmfa67ddc2004-06-03 03:38:44 +0000921#endif
922
923#ifndef YYMAXDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000924#define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +0000925#endif
926
vlm6a02a8a2004-09-08 00:28:11 +0000927/* Define __yy_memcpy. Note that the size argument
928 should be passed with type unsigned int, because that is what the non-GCC
929 definitions require. With GCC, __builtin_memcpy takes an arg
930 of type size_t, but it can handle unsigned int. */
vlmfa67ddc2004-06-03 03:38:44 +0000931
vlm6a02a8a2004-09-08 00:28:11 +0000932#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
933#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
934#else /* not GNU C or C++ */
935#ifndef __cplusplus
vlmfa67ddc2004-06-03 03:38:44 +0000936
vlm6a02a8a2004-09-08 00:28:11 +0000937/* This is the most reliable way to avoid incompatibilities
938 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +0000939static void
vlm6a02a8a2004-09-08 00:28:11 +0000940__yy_memcpy (to, from, count)
941 char *to;
942 char *from;
943 unsigned int count;
vlm80103492004-09-07 10:39:09 +0000944{
vlm6a02a8a2004-09-08 00:28:11 +0000945 register char *f = from;
946 register char *t = to;
947 register int i = count;
vlm80103492004-09-07 10:39:09 +0000948
vlm6a02a8a2004-09-08 00:28:11 +0000949 while (i-- > 0)
950 *t++ = *f++;
vlm80103492004-09-07 10:39:09 +0000951}
vlm80103492004-09-07 10:39:09 +0000952
vlm6a02a8a2004-09-08 00:28:11 +0000953#else /* __cplusplus */
vlm80103492004-09-07 10:39:09 +0000954
vlm6a02a8a2004-09-08 00:28:11 +0000955/* This is the most reliable way to avoid incompatibilities
956 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +0000957static void
vlm6a02a8a2004-09-08 00:28:11 +0000958__yy_memcpy (char *to, char *from, unsigned int count)
vlm80103492004-09-07 10:39:09 +0000959{
vlm6a02a8a2004-09-08 00:28:11 +0000960 register char *t = to;
961 register char *f = from;
962 register int i = count;
vlm80103492004-09-07 10:39:09 +0000963
vlm6a02a8a2004-09-08 00:28:11 +0000964 while (i-- > 0)
965 *t++ = *f++;
vlm044f7442004-09-04 04:49:21 +0000966}
vlm044f7442004-09-04 04:49:21 +0000967
vlm6a02a8a2004-09-08 00:28:11 +0000968#endif
969#endif
vlmfa67ddc2004-06-03 03:38:44 +0000970
vlm6a02a8a2004-09-08 00:28:11 +0000971#line 217 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +0000972
973/* The user can define YYPARSE_PARAM as the name of an argument to be passed
974 into yyparse. The argument should have type void *.
975 It should actually point to an object.
976 Grammar actions can access the variable by casting it
977 to the proper pointer type. */
978
979#ifdef YYPARSE_PARAM
vlm6a02a8a2004-09-08 00:28:11 +0000980#ifdef __cplusplus
981#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
982#define YYPARSE_PARAM_DECL
983#else /* not __cplusplus */
984#define YYPARSE_PARAM_ARG YYPARSE_PARAM
985#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
986#endif /* not __cplusplus */
987#else /* not YYPARSE_PARAM */
988#define YYPARSE_PARAM_ARG
989#define YYPARSE_PARAM_DECL
990#endif /* not YYPARSE_PARAM */
vlmfa67ddc2004-06-03 03:38:44 +0000991
992/* Prevent warning if -Wstrict-prototypes. */
993#ifdef __GNUC__
vlm6a02a8a2004-09-08 00:28:11 +0000994#ifdef YYPARSE_PARAM
vlmfa67ddc2004-06-03 03:38:44 +0000995int yyparse (void *);
vlm6a02a8a2004-09-08 00:28:11 +0000996#else
vlmfa67ddc2004-06-03 03:38:44 +0000997int yyparse (void);
vlm6a02a8a2004-09-08 00:28:11 +0000998#endif
vlm39e5ed72004-09-05 10:40:41 +0000999#endif
vlm80103492004-09-07 10:39:09 +00001000
vlmfa67ddc2004-06-03 03:38:44 +00001001int
vlm6a02a8a2004-09-08 00:28:11 +00001002yyparse(YYPARSE_PARAM_ARG)
vlmfa67ddc2004-06-03 03:38:44 +00001003 YYPARSE_PARAM_DECL
1004{
1005 register int yystate;
1006 register int yyn;
1007 register short *yyssp;
1008 register YYSTYPE *yyvsp;
vlm6a02a8a2004-09-08 00:28:11 +00001009 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1010 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
vlmfa67ddc2004-06-03 03:38:44 +00001011
vlm6a02a8a2004-09-08 00:28:11 +00001012 short yyssa[YYINITDEPTH]; /* the state stack */
1013 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
vlmfa67ddc2004-06-03 03:38:44 +00001014
vlm6a02a8a2004-09-08 00:28:11 +00001015 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1016 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
vlmfa67ddc2004-06-03 03:38:44 +00001017
vlm6a02a8a2004-09-08 00:28:11 +00001018#ifdef YYLSP_NEEDED
1019 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1020 YYLTYPE *yyls = yylsa;
1021 YYLTYPE *yylsp;
1022
1023#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1024#else
vlmfa67ddc2004-06-03 03:38:44 +00001025#define YYPOPSTACK (yyvsp--, yyssp--)
vlm6a02a8a2004-09-08 00:28:11 +00001026#endif
vlmfa67ddc2004-06-03 03:38:44 +00001027
vlm6a02a8a2004-09-08 00:28:11 +00001028 int yystacksize = YYINITDEPTH;
1029 int yyfree_stacks = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001030
vlm6a02a8a2004-09-08 00:28:11 +00001031#ifdef YYPURE
1032 int yychar;
1033 YYSTYPE yylval;
1034 int yynerrs;
1035#ifdef YYLSP_NEEDED
1036 YYLTYPE yylloc;
1037#endif
1038#endif
vlmfa67ddc2004-06-03 03:38:44 +00001039
vlm6a02a8a2004-09-08 00:28:11 +00001040 YYSTYPE yyval; /* the variable used to return */
1041 /* semantic values from the action */
1042 /* routines */
vlmfa67ddc2004-06-03 03:38:44 +00001043
1044 int yylen;
1045
vlm6a02a8a2004-09-08 00:28:11 +00001046#if YYDEBUG != 0
1047 if (yydebug)
1048 fprintf(stderr, "Starting parse\n");
1049#endif
vlmfa67ddc2004-06-03 03:38:44 +00001050
1051 yystate = 0;
1052 yyerrstatus = 0;
1053 yynerrs = 0;
1054 yychar = YYEMPTY; /* Cause a token to be read. */
1055
1056 /* Initialize stack pointers.
1057 Waste one element of value and location stack
1058 so that they stay on the same level as the state stack.
1059 The wasted elements are never initialized. */
1060
vlm6a02a8a2004-09-08 00:28:11 +00001061 yyssp = yyss - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001062 yyvsp = yyvs;
vlm6a02a8a2004-09-08 00:28:11 +00001063#ifdef YYLSP_NEEDED
1064 yylsp = yyls;
1065#endif
vlmfa67ddc2004-06-03 03:38:44 +00001066
vlm6a02a8a2004-09-08 00:28:11 +00001067/* Push a new state, which is found in yystate . */
1068/* In all cases, when you get here, the value and location stacks
1069 have just been pushed. so pushing a state here evens the stacks. */
1070yynewstate:
vlmfa67ddc2004-06-03 03:38:44 +00001071
vlm6a02a8a2004-09-08 00:28:11 +00001072 *++yyssp = yystate;
vlmfa67ddc2004-06-03 03:38:44 +00001073
1074 if (yyssp >= yyss + yystacksize - 1)
1075 {
vlm6a02a8a2004-09-08 00:28:11 +00001076 /* Give user a chance to reallocate the stack */
1077 /* Use copies of these so that the &'s don't force the real ones into memory. */
1078 YYSTYPE *yyvs1 = yyvs;
1079 short *yyss1 = yyss;
1080#ifdef YYLSP_NEEDED
1081 YYLTYPE *yyls1 = yyls;
1082#endif
1083
vlmfa67ddc2004-06-03 03:38:44 +00001084 /* Get the current used size of the three stacks, in elements. */
vlm6a02a8a2004-09-08 00:28:11 +00001085 int size = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001086
1087#ifdef yyoverflow
vlm6a02a8a2004-09-08 00:28:11 +00001088 /* Each stack pointer address is followed by the size of
1089 the data in use in that stack, in bytes. */
1090#ifdef YYLSP_NEEDED
1091 /* This used to be a conditional around just the two extra args,
1092 but that might be undefined if yyoverflow is a macro. */
1093 yyoverflow("parser stack overflow",
1094 &yyss1, size * sizeof (*yyssp),
1095 &yyvs1, size * sizeof (*yyvsp),
1096 &yyls1, size * sizeof (*yylsp),
1097 &yystacksize);
1098#else
1099 yyoverflow("parser stack overflow",
1100 &yyss1, size * sizeof (*yyssp),
1101 &yyvs1, size * sizeof (*yyvsp),
1102 &yystacksize);
1103#endif
vlmfa67ddc2004-06-03 03:38:44 +00001104
vlm6a02a8a2004-09-08 00:28:11 +00001105 yyss = yyss1; yyvs = yyvs1;
1106#ifdef YYLSP_NEEDED
1107 yyls = yyls1;
1108#endif
vlmfa67ddc2004-06-03 03:38:44 +00001109#else /* no yyoverflow */
1110 /* Extend the stack our own way. */
1111 if (yystacksize >= YYMAXDEPTH)
vlm6a02a8a2004-09-08 00:28:11 +00001112 {
1113 yyerror("parser stack overflow");
1114 if (yyfree_stacks)
1115 {
1116 free (yyss);
1117 free (yyvs);
1118#ifdef YYLSP_NEEDED
1119 free (yyls);
1120#endif
1121 }
1122 return 2;
1123 }
vlmfa67ddc2004-06-03 03:38:44 +00001124 yystacksize *= 2;
1125 if (yystacksize > YYMAXDEPTH)
1126 yystacksize = YYMAXDEPTH;
vlm6a02a8a2004-09-08 00:28:11 +00001127#ifndef YYSTACK_USE_ALLOCA
1128 yyfree_stacks = 1;
1129#endif
1130 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1131 __yy_memcpy ((char *)yyss, (char *)yyss1,
1132 size * (unsigned int) sizeof (*yyssp));
1133 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1134 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1135 size * (unsigned int) sizeof (*yyvsp));
1136#ifdef YYLSP_NEEDED
1137 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1138 __yy_memcpy ((char *)yyls, (char *)yyls1,
1139 size * (unsigned int) sizeof (*yylsp));
1140#endif
vlmfa67ddc2004-06-03 03:38:44 +00001141#endif /* no yyoverflow */
1142
vlm6a02a8a2004-09-08 00:28:11 +00001143 yyssp = yyss + size - 1;
1144 yyvsp = yyvs + size - 1;
1145#ifdef YYLSP_NEEDED
1146 yylsp = yyls + size - 1;
1147#endif
vlmfa67ddc2004-06-03 03:38:44 +00001148
vlm6a02a8a2004-09-08 00:28:11 +00001149#if YYDEBUG != 0
1150 if (yydebug)
1151 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1152#endif
vlmfa67ddc2004-06-03 03:38:44 +00001153
1154 if (yyssp >= yyss + yystacksize - 1)
1155 YYABORT;
1156 }
1157
vlm6a02a8a2004-09-08 00:28:11 +00001158#if YYDEBUG != 0
1159 if (yydebug)
1160 fprintf(stderr, "Entering state %d\n", yystate);
1161#endif
vlmfa67ddc2004-06-03 03:38:44 +00001162
1163 goto yybackup;
vlm6a02a8a2004-09-08 00:28:11 +00001164 yybackup:
vlmfa67ddc2004-06-03 03:38:44 +00001165
1166/* Do appropriate processing given the current state. */
1167/* Read a lookahead token if we need one and don't already have one. */
1168/* yyresume: */
1169
1170 /* First try to decide what to do without reference to lookahead token. */
1171
1172 yyn = yypact[yystate];
vlm6a02a8a2004-09-08 00:28:11 +00001173 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001174 goto yydefault;
1175
1176 /* Not known => get a lookahead token if don't already have one. */
1177
1178 /* yychar is either YYEMPTY or YYEOF
1179 or a valid token in external form. */
1180
1181 if (yychar == YYEMPTY)
1182 {
vlm6a02a8a2004-09-08 00:28:11 +00001183#if YYDEBUG != 0
1184 if (yydebug)
1185 fprintf(stderr, "Reading a token: ");
1186#endif
vlmfa67ddc2004-06-03 03:38:44 +00001187 yychar = YYLEX;
1188 }
1189
vlm6a02a8a2004-09-08 00:28:11 +00001190 /* Convert token to internal form (in yychar1) for indexing tables with */
vlmfa67ddc2004-06-03 03:38:44 +00001191
vlm6a02a8a2004-09-08 00:28:11 +00001192 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001193 {
1194 yychar1 = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001195 yychar = YYEOF; /* Don't call YYLEX any more */
vlmfa67ddc2004-06-03 03:38:44 +00001196
vlm6a02a8a2004-09-08 00:28:11 +00001197#if YYDEBUG != 0
1198 if (yydebug)
1199 fprintf(stderr, "Now at end of input.\n");
1200#endif
vlmfa67ddc2004-06-03 03:38:44 +00001201 }
1202 else
1203 {
vlm6a02a8a2004-09-08 00:28:11 +00001204 yychar1 = YYTRANSLATE(yychar);
vlmfa67ddc2004-06-03 03:38:44 +00001205
vlm6a02a8a2004-09-08 00:28:11 +00001206#if YYDEBUG != 0
1207 if (yydebug)
1208 {
1209 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1210 /* Give the individual parser a way to print the precise meaning
1211 of a token, for further debugging info. */
1212#ifdef YYPRINT
1213 YYPRINT (stderr, yychar, yylval);
1214#endif
1215 fprintf (stderr, ")\n");
1216 }
1217#endif
vlmfa67ddc2004-06-03 03:38:44 +00001218 }
1219
1220 yyn += yychar1;
vlm6a02a8a2004-09-08 00:28:11 +00001221 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001222 goto yydefault;
vlm6a02a8a2004-09-08 00:28:11 +00001223
vlmfa67ddc2004-06-03 03:38:44 +00001224 yyn = yytable[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001225
1226 /* yyn is what to do for this token type in this state.
1227 Negative => reduce, -yyn is rule number.
1228 Positive => shift, yyn is new state.
1229 New state is final state => don't bother to shift,
1230 just return success.
1231 0, or most negative number => error. */
1232
1233 if (yyn < 0)
vlmfa67ddc2004-06-03 03:38:44 +00001234 {
vlm6a02a8a2004-09-08 00:28:11 +00001235 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001236 goto yyerrlab;
1237 yyn = -yyn;
1238 goto yyreduce;
1239 }
vlm6a02a8a2004-09-08 00:28:11 +00001240 else if (yyn == 0)
1241 goto yyerrlab;
vlmfa67ddc2004-06-03 03:38:44 +00001242
1243 if (yyn == YYFINAL)
1244 YYACCEPT;
1245
1246 /* Shift the lookahead token. */
vlm6a02a8a2004-09-08 00:28:11 +00001247
1248#if YYDEBUG != 0
1249 if (yydebug)
1250 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1251#endif
vlmfa67ddc2004-06-03 03:38:44 +00001252
1253 /* Discard the token being shifted unless it is eof. */
1254 if (yychar != YYEOF)
1255 yychar = YYEMPTY;
1256
1257 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00001258#ifdef YYLSP_NEEDED
1259 *++yylsp = yylloc;
1260#endif
vlmfa67ddc2004-06-03 03:38:44 +00001261
vlm6a02a8a2004-09-08 00:28:11 +00001262 /* count tokens shifted since error; after three, turn off error status. */
1263 if (yyerrstatus) yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001264
1265 yystate = yyn;
1266 goto yynewstate;
1267
vlm6a02a8a2004-09-08 00:28:11 +00001268/* Do the default action for the current state. */
vlm80103492004-09-07 10:39:09 +00001269yydefault:
vlm6a02a8a2004-09-08 00:28:11 +00001270
vlmfa67ddc2004-06-03 03:38:44 +00001271 yyn = yydefact[yystate];
1272 if (yyn == 0)
1273 goto yyerrlab;
1274
vlm6a02a8a2004-09-08 00:28:11 +00001275/* Do a reduction. yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001276yyreduce:
1277 yylen = yyr2[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001278 if (yylen > 0)
1279 yyval = yyvsp[1-yylen]; /* implement default value of the action */
vlmfa67ddc2004-06-03 03:38:44 +00001280
vlm6a02a8a2004-09-08 00:28:11 +00001281#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00001282 if (yydebug)
1283 {
vlm6a02a8a2004-09-08 00:28:11 +00001284 int i;
vlmfa67ddc2004-06-03 03:38:44 +00001285
vlm6a02a8a2004-09-08 00:28:11 +00001286 fprintf (stderr, "Reducing via rule %d (line %d), ",
1287 yyn, yyrline[yyn]);
vlmfa67ddc2004-06-03 03:38:44 +00001288
1289 /* Print the symbols being reduced, and their result. */
vlm6a02a8a2004-09-08 00:28:11 +00001290 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1291 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1292 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
vlmfa67ddc2004-06-03 03:38:44 +00001293 }
1294#endif
vlm80103492004-09-07 10:39:09 +00001295
vlm6a02a8a2004-09-08 00:28:11 +00001296
1297 switch (yyn) {
1298
1299case 1:
vlm0aa86902004-10-12 23:26:53 +00001300#line 302 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001301{
1302 *(void **)param = yyvsp[0].a_grammar;
1303 ;
1304 break;}
1305case 2:
vlm0aa86902004-10-12 23:26:53 +00001306#line 308 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001307{
vlmfa67ddc2004-06-03 03:38:44 +00001308 yyval.a_grammar = asn1p_new();
1309 checkmem(yyval.a_grammar);
1310 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001311 ;
1312 break;}
1313case 3:
vlm0aa86902004-10-12 23:26:53 +00001314#line 313 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001315{
vlmfa67ddc2004-06-03 03:38:44 +00001316 yyval.a_grammar = yyvsp[-1].a_grammar;
1317 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001318 ;
1319 break;}
1320case 4:
vlm0aa86902004-10-12 23:26:53 +00001321#line 334 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001322{
vlmfa67ddc2004-06-03 03:38:44 +00001323
1324 if(yyvsp[-1].a_module) {
1325 yyval.a_module = yyvsp[-1].a_module;
1326 } else {
1327 /* There's a chance that a module is just plain empty */
1328 yyval.a_module = asn1p_module_new();
1329 }
1330 checkmem(yyval.a_module);
1331
1332 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1333 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1334 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001335 ;
1336 break;}
1337case 5:
vlm0aa86902004-10-12 23:26:53 +00001338#line 355 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001339{ yyval.a_oid = 0; ;
1340 break;}
1341case 6:
vlm0aa86902004-10-12 23:26:53 +00001342#line 356 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001343{ yyval.a_oid = yyvsp[0].a_oid; ;
1344 break;}
1345case 7:
vlm0aa86902004-10-12 23:26:53 +00001346#line 360 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001347{
vlmfa67ddc2004-06-03 03:38:44 +00001348 yyval.a_oid = yyvsp[-1].a_oid;
vlm6a02a8a2004-09-08 00:28:11 +00001349 ;
1350 break;}
1351case 8:
vlm0aa86902004-10-12 23:26:53 +00001352#line 363 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001353{
vlmfa67ddc2004-06-03 03:38:44 +00001354 yyval.a_oid = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001355 ;
1356 break;}
1357case 9:
vlm0aa86902004-10-12 23:26:53 +00001358#line 369 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001359{
vlmfa67ddc2004-06-03 03:38:44 +00001360 yyval.a_oid = asn1p_oid_new();
1361 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1362 if(yyvsp[0].a_oid_arc.name)
1363 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001364 ;
1365 break;}
1366case 10:
vlm0aa86902004-10-12 23:26:53 +00001367#line 375 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001368{
vlmfa67ddc2004-06-03 03:38:44 +00001369 yyval.a_oid = yyvsp[-1].a_oid;
1370 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1371 if(yyvsp[0].a_oid_arc.name)
1372 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001373 ;
1374 break;}
1375case 11:
vlm0aa86902004-10-12 23:26:53 +00001376#line 384 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001377{ /* iso */
vlmfa67ddc2004-06-03 03:38:44 +00001378 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1379 yyval.a_oid_arc.number = -1;
vlm6a02a8a2004-09-08 00:28:11 +00001380 ;
1381 break;}
1382case 12:
vlm0aa86902004-10-12 23:26:53 +00001383#line 388 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001384{ /* iso(1) */
vlmfa67ddc2004-06-03 03:38:44 +00001385 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1386 yyval.a_oid_arc.number = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001387 ;
1388 break;}
1389case 13:
vlm0aa86902004-10-12 23:26:53 +00001390#line 392 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001391{ /* 1 */
vlmfa67ddc2004-06-03 03:38:44 +00001392 yyval.a_oid_arc.name = 0;
1393 yyval.a_oid_arc.number = yyvsp[0].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001394 ;
1395 break;}
1396case 14:
vlm0aa86902004-10-12 23:26:53 +00001397#line 402 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001398{ yyval.a_module_flags = MSF_NOFLAGS; ;
1399 break;}
1400case 15:
vlm0aa86902004-10-12 23:26:53 +00001401#line 403 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001402{
vlmfa67ddc2004-06-03 03:38:44 +00001403 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001404 ;
1405 break;}
1406case 16:
vlm0aa86902004-10-12 23:26:53 +00001407#line 412 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001408{
vlmfa67ddc2004-06-03 03:38:44 +00001409 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001410 ;
1411 break;}
1412case 17:
vlm0aa86902004-10-12 23:26:53 +00001413#line 415 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001414{
vlmfa67ddc2004-06-03 03:38:44 +00001415 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001416 ;
1417 break;}
1418case 18:
vlm0aa86902004-10-12 23:26:53 +00001419#line 424 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001420{
vlmfa67ddc2004-06-03 03:38:44 +00001421 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001422 ;
1423 break;}
1424case 19:
vlm0aa86902004-10-12 23:26:53 +00001425#line 427 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001426{
vlmfa67ddc2004-06-03 03:38:44 +00001427 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001428 ;
1429 break;}
1430case 20:
vlm0aa86902004-10-12 23:26:53 +00001431#line 430 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001432{
vlmfa67ddc2004-06-03 03:38:44 +00001433 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001434 ;
1435 break;}
1436case 21:
vlm0aa86902004-10-12 23:26:53 +00001437#line 433 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001438{
vlmfa67ddc2004-06-03 03:38:44 +00001439 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
vlm6a02a8a2004-09-08 00:28:11 +00001440 ;
1441 break;}
1442case 22:
vlm0aa86902004-10-12 23:26:53 +00001443#line 437 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001444{
vlm9283dbe2004-08-18 04:59:12 +00001445 /* X.680Amd1 specifies TAG and XER */
1446 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1447 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1448 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1449 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1450 } else {
1451 fprintf(stderr,
1452 "WARNING: %s INSTRUCTIONS at line %d: "
1453 "Unrecognized encoding reference\n",
1454 yyvsp[-1].tv_str, yylineno);
1455 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1456 }
1457 free(yyvsp[-1].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00001458 ;
1459 break;}
1460case 23:
vlm0aa86902004-10-12 23:26:53 +00001461#line 458 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001462{ yyval.a_module = 0; ;
1463 break;}
1464case 24:
vlm0aa86902004-10-12 23:26:53 +00001465#line 459 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001466{
vlmfa67ddc2004-06-03 03:38:44 +00001467 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001468 ;
1469 break;}
1470case 25:
vlm0aa86902004-10-12 23:26:53 +00001471#line 468 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001472{
vlm9283dbe2004-08-18 04:59:12 +00001473 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001474 ;
1475 break;}
1476case 26:
vlm0aa86902004-10-12 23:26:53 +00001477#line 471 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001478{
vlmfa67ddc2004-06-03 03:38:44 +00001479 yyval.a_module = yyvsp[-1].a_module;
1480
vlm9283dbe2004-08-18 04:59:12 +00001481 /* Behave well when one of them is skipped. */
1482 if(!(yyvsp[-1].a_module)) {
1483 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1484 break;
1485 }
1486
vlmfa67ddc2004-06-03 03:38:44 +00001487#ifdef MY_IMPORT
1488#error MY_IMPORT DEFINED ELSEWHERE!
1489#endif
1490#define MY_IMPORT(foo,field) do { \
vlm97ed7152004-08-13 12:31:09 +00001491 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
vlmfa67ddc2004-06-03 03:38:44 +00001492 TQ_ADD(&(yyval.a_module->foo), \
1493 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1494 field); \
vlm97ed7152004-08-13 12:31:09 +00001495 } \
1496 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1497 } while(0)
vlmfa67ddc2004-06-03 03:38:44 +00001498
1499 MY_IMPORT(imports, xp_next);
1500 MY_IMPORT(exports, xp_next);
1501 MY_IMPORT(members, next);
1502#undef MY_IMPORT
1503
vlm6a02a8a2004-09-08 00:28:11 +00001504 ;
1505 break;}
1506case 27:
vlm0aa86902004-10-12 23:26:53 +00001507#line 504 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001508{
vlmfa67ddc2004-06-03 03:38:44 +00001509 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001510 ;
1511 break;}
1512case 28:
vlm0aa86902004-10-12 23:26:53 +00001513#line 507 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001514{
vlmfa67ddc2004-06-03 03:38:44 +00001515 yyval.a_module = asn1p_module_new();
1516 checkmem(yyval.a_module);
1517 if(yyvsp[0].a_xports) {
1518 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1519 } else {
1520 /* "EXPORTS ALL;" ? */
1521 }
vlm6a02a8a2004-09-08 00:28:11 +00001522 ;
1523 break;}
1524case 29:
vlm0aa86902004-10-12 23:26:53 +00001525#line 516 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001526{
vlmfa67ddc2004-06-03 03:38:44 +00001527 yyval.a_module = asn1p_module_new();
1528 checkmem(yyval.a_module);
1529 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1530 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1531 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001532 ;
1533 break;}
1534case 30:
vlm0aa86902004-10-12 23:26:53 +00001535#line 523 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001536{
vlm9283dbe2004-08-18 04:59:12 +00001537 yyval.a_module = asn1p_module_new();
1538 checkmem(yyval.a_module);
1539 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1540 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1541 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001542 ;
1543 break;}
1544case 31:
vlm0aa86902004-10-12 23:26:53 +00001545#line 536 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001546{
vlm9283dbe2004-08-18 04:59:12 +00001547 yyval.a_module = asn1p_module_new();
1548 checkmem(yyval.a_module);
1549 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1550 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1551 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001552 ;
1553 break;}
1554case 32:
vlm0aa86902004-10-12 23:26:53 +00001555#line 544 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001556{ asn1p_lexer_hack_push_encoding_control(); ;
1557 break;}
1558case 33:
vlm0aa86902004-10-12 23:26:53 +00001559#line 545 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001560{
vlm9283dbe2004-08-18 04:59:12 +00001561 fprintf(stderr,
1562 "WARNING: ENCODING-CONTROL %s "
1563 "specification at line %d ignored\n",
1564 yyvsp[-1].tv_str, yylineno);
1565 free(yyvsp[-1].tv_str);
1566 yyval.a_module = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001567 ;
1568 break;}
1569case 34:
vlm0aa86902004-10-12 23:26:53 +00001570#line 557 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001571{
vlmfa67ddc2004-06-03 03:38:44 +00001572 return yyerror(
1573 "Attempt to redefine a standard basic type, "
1574 "use -ftypesXY to switch back "
1575 "to older version of ASN.1 standard");
vlm6a02a8a2004-09-08 00:28:11 +00001576 ;
1577 break;}
1578case 35:
vlm0aa86902004-10-12 23:26:53 +00001579#line 571 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001580{
vlmfa67ddc2004-06-03 03:38:44 +00001581 yyval.a_module = yyvsp[-1].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001582 ;
1583 break;}
1584case 36:
vlm0aa86902004-10-12 23:26:53 +00001585#line 577 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001586{
vlmfa67ddc2004-06-03 03:38:44 +00001587 return yyerror("Empty IMPORTS list");
vlm6a02a8a2004-09-08 00:28:11 +00001588 ;
1589 break;}
1590case 37:
vlm0aa86902004-10-12 23:26:53 +00001591#line 583 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001592{
vlmfa67ddc2004-06-03 03:38:44 +00001593 yyval.a_module = asn1p_module_new();
1594 checkmem(yyval.a_module);
1595 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001596 ;
1597 break;}
1598case 38:
vlm0aa86902004-10-12 23:26:53 +00001599#line 588 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001600{
vlmfa67ddc2004-06-03 03:38:44 +00001601 yyval.a_module = yyvsp[-1].a_module;
1602 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001603 ;
1604 break;}
1605case 39:
vlm0aa86902004-10-12 23:26:53 +00001606#line 595 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001607{
vlmfa67ddc2004-06-03 03:38:44 +00001608 yyval.a_xports = yyvsp[-3].a_xports;
1609 yyval.a_xports->from = yyvsp[-1].tv_str;
1610 yyval.a_xports->from_oid = yyvsp[0].a_oid;
1611 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001612 ;
1613 break;}
1614case 40:
vlm0aa86902004-10-12 23:26:53 +00001615#line 604 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001616{
vlmfa67ddc2004-06-03 03:38:44 +00001617 yyval.a_xports = asn1p_xports_new();
1618 checkmem(yyval.a_xports);
1619 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001620 ;
1621 break;}
1622case 41:
vlm0aa86902004-10-12 23:26:53 +00001623#line 609 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001624{
vlmfa67ddc2004-06-03 03:38:44 +00001625 yyval.a_xports = yyvsp[-2].a_xports;
1626 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001627 ;
1628 break;}
1629case 42:
vlm0aa86902004-10-12 23:26:53 +00001630#line 616 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001631{
vlmfa67ddc2004-06-03 03:38:44 +00001632 yyval.a_expr = asn1p_expr_new(yylineno);
1633 checkmem(yyval.a_expr);
1634 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1635 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm6a02a8a2004-09-08 00:28:11 +00001636 ;
1637 break;}
1638case 43:
vlm0aa86902004-10-12 23:26:53 +00001639#line 622 "asn1p_y.y"
1640{ /* Completely equivalent to above */
1641 yyval.a_expr = asn1p_expr_new(yylineno);
1642 checkmem(yyval.a_expr);
1643 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1644 yyval.a_expr->expr_type = A1TC_REFERENCE;
1645 ;
1646 break;}
1647case 44:
1648#line 628 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001649{
vlmfa67ddc2004-06-03 03:38:44 +00001650 yyval.a_expr = asn1p_expr_new(yylineno);
1651 checkmem(yyval.a_expr);
1652 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1653 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm6a02a8a2004-09-08 00:28:11 +00001654 ;
1655 break;}
vlm0aa86902004-10-12 23:26:53 +00001656case 45:
1657#line 637 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001658{
vlmfa67ddc2004-06-03 03:38:44 +00001659 yyval.a_xports = yyvsp[-1].a_xports;
vlm6a02a8a2004-09-08 00:28:11 +00001660 ;
1661 break;}
vlm0aa86902004-10-12 23:26:53 +00001662case 46:
1663#line 640 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001664{
vlmfa67ddc2004-06-03 03:38:44 +00001665 yyval.a_xports = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001666 ;
1667 break;}
vlm0aa86902004-10-12 23:26:53 +00001668case 47:
1669#line 643 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001670{
vlmfa67ddc2004-06-03 03:38:44 +00001671 /* Empty EXPORTS clause effectively prohibits export. */
1672 yyval.a_xports = asn1p_xports_new();
1673 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001674 ;
1675 break;}
vlm0aa86902004-10-12 23:26:53 +00001676case 48:
1677#line 651 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001678{
vlmfa67ddc2004-06-03 03:38:44 +00001679 yyval.a_xports = asn1p_xports_new();
1680 assert(yyval.a_xports);
1681 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001682 ;
1683 break;}
vlm0aa86902004-10-12 23:26:53 +00001684case 49:
1685#line 656 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001686{
vlmfa67ddc2004-06-03 03:38:44 +00001687 yyval.a_xports = yyvsp[-2].a_xports;
1688 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001689 ;
1690 break;}
vlm6a02a8a2004-09-08 00:28:11 +00001691case 50:
vlm0aa86902004-10-12 23:26:53 +00001692#line 663 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001693{
vlmfa67ddc2004-06-03 03:38:44 +00001694 yyval.a_expr = asn1p_expr_new(yylineno);
1695 checkmem(yyval.a_expr);
1696 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1697 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
vlm6a02a8a2004-09-08 00:28:11 +00001698 ;
1699 break;}
1700case 51:
vlm0aa86902004-10-12 23:26:53 +00001701#line 669 "asn1p_y.y"
1702{
1703 yyval.a_expr = asn1p_expr_new(yylineno);
1704 checkmem(yyval.a_expr);
1705 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1706 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1707 ;
1708 break;}
1709case 52:
1710#line 675 "asn1p_y.y"
1711{
1712 yyval.a_expr = asn1p_expr_new(yylineno);
1713 checkmem(yyval.a_expr);
1714 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1715 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1716 ;
1717 break;}
1718case 53:
1719#line 685 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001720{
vlmfa67ddc2004-06-03 03:38:44 +00001721 yyval.a_expr = yyvsp[-4].a_expr;
1722 assert(yyval.a_expr->Identifier == 0);
1723 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1724 yyval.a_expr->meta_type = AMT_VALUESET;
1725 // take care of optValueSetBody
vlm6a02a8a2004-09-08 00:28:11 +00001726 ;
1727 break;}
vlm0aa86902004-10-12 23:26:53 +00001728case 54:
1729#line 695 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001730{
vlmfa67ddc2004-06-03 03:38:44 +00001731 yyval.a_expr = asn1p_expr_new(yylineno);
1732 checkmem(yyval.a_expr);
1733 yyval.a_expr->reference = yyvsp[0].a_ref;
1734 yyval.a_expr->expr_type = A1TC_REFERENCE;
1735 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00001736 ;
1737 break;}
vlm0aa86902004-10-12 23:26:53 +00001738case 55:
1739#line 702 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001740{
vlmfa67ddc2004-06-03 03:38:44 +00001741 yyval.a_expr = asn1p_expr_new(yylineno);
1742 checkmem(yyval.a_expr);
1743 yyval.a_expr->expr_type = yyvsp[0].a_type;
1744 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001745 ;
1746 break;}
vlm6a02a8a2004-09-08 00:28:11 +00001747case 56:
vlm0aa86902004-10-12 23:26:53 +00001748#line 711 "asn1p_y.y"
1749{ ;
vlm6a02a8a2004-09-08 00:28:11 +00001750 break;}
1751case 57:
vlm151c0b22004-09-22 16:03:36 +00001752#line 712 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001753{
1754 ;
1755 break;}
1756case 58:
vlm0aa86902004-10-12 23:26:53 +00001757#line 723 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001758{
1759 ;
1760 break;}
1761case 59:
vlm0aa86902004-10-12 23:26:53 +00001762#line 725 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001763{
1764 ;
1765 break;}
1766case 60:
vlm0aa86902004-10-12 23:26:53 +00001767#line 730 "asn1p_y.y"
1768{
1769 ;
1770 break;}
1771case 61:
1772#line 732 "asn1p_y.y"
1773{
1774 ;
1775 break;}
1776case 62:
1777#line 748 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001778{
vlmfa67ddc2004-06-03 03:38:44 +00001779 yyval.a_expr = asn1p_expr_new(yylineno);
1780 checkmem(yyval.a_expr);
1781 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1782 yyval.a_expr->tag = yyvsp[-1].a_tag;
1783 yyval.a_expr->expr_type = A1TC_TYPEID;
1784 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001785 ;
1786 break;}
vlm0aa86902004-10-12 23:26:53 +00001787case 63:
1788#line 756 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001789{
vlmfa67ddc2004-06-03 03:38:44 +00001790 yyval.a_expr = yyvsp[0].a_expr;
vlmfce48a42004-09-14 02:36:39 +00001791 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00001792 assert(yyval.a_expr->expr_type);
1793 assert(yyval.a_expr->meta_type);
vlm6a02a8a2004-09-08 00:28:11 +00001794 ;
1795 break;}
vlm0aa86902004-10-12 23:26:53 +00001796case 64:
1797#line 762 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001798{
vlmfa67ddc2004-06-03 03:38:44 +00001799 yyval.a_expr = yyvsp[0].a_expr;
1800 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1801 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1802 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm6a02a8a2004-09-08 00:28:11 +00001803 ;
1804 break;}
vlm0aa86902004-10-12 23:26:53 +00001805case 65:
1806#line 778 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001807{
vlmfa67ddc2004-06-03 03:38:44 +00001808 yyval.a_expr = yyvsp[0].a_expr;
1809 assert(yyval.a_expr->Identifier == 0);
1810 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1811 yyval.a_expr->params = yyvsp[-3].a_plist;
1812 yyval.a_expr->meta_type = AMT_PARAMTYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001813 ;
1814 break;}
vlm0aa86902004-10-12 23:26:53 +00001815case 66:
1816#line 788 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001817{
vlmfa67ddc2004-06-03 03:38:44 +00001818 int ret;
1819 yyval.a_plist = asn1p_paramlist_new(yylineno);
1820 checkmem(yyval.a_plist);
1821 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1822 checkmem(ret == 0);
1823 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1824 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001825 ;
1826 break;}
vlm0aa86902004-10-12 23:26:53 +00001827case 67:
1828#line 797 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001829{
vlmfa67ddc2004-06-03 03:38:44 +00001830 int ret;
1831 yyval.a_plist = yyvsp[-2].a_plist;
1832 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1833 checkmem(ret == 0);
1834 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1835 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001836 ;
1837 break;}
vlm0aa86902004-10-12 23:26:53 +00001838case 68:
1839#line 808 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001840{
vlmfa67ddc2004-06-03 03:38:44 +00001841 yyval.a_parg.governor = NULL;
1842 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001843 ;
1844 break;}
vlm0aa86902004-10-12 23:26:53 +00001845case 69:
1846#line 812 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001847{
vlmfa67ddc2004-06-03 03:38:44 +00001848 int ret;
1849 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1850 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1851 checkmem(ret == 0);
1852 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001853 ;
1854 break;}
vlm0aa86902004-10-12 23:26:53 +00001855case 70:
1856#line 819 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001857{
vlmfa67ddc2004-06-03 03:38:44 +00001858 int ret;
1859 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1860 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1861 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1862 checkmem(ret == 0);
1863 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001864 ;
1865 break;}
vlm0aa86902004-10-12 23:26:53 +00001866case 71:
1867#line 830 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001868{
vlmfa67ddc2004-06-03 03:38:44 +00001869 yyval.a_expr = asn1p_expr_new(yylineno);
1870 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001871 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1872 ;
1873 break;}
vlm0aa86902004-10-12 23:26:53 +00001874case 72:
1875#line 835 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001876{
vlmfa67ddc2004-06-03 03:38:44 +00001877 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001878 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1879 ;
1880 break;}
vlm0aa86902004-10-12 23:26:53 +00001881case 73:
1882#line 842 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001883{
vlmfa67ddc2004-06-03 03:38:44 +00001884 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001885 ;
1886 break;}
vlm0aa86902004-10-12 23:26:53 +00001887case 74:
1888#line 845 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001889{
vlmfa67ddc2004-06-03 03:38:44 +00001890 yyval.a_expr = asn1p_expr_new(yylineno);
1891 checkmem(yyval.a_expr);
1892 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1893 yyval.a_expr->expr_type = A1TC_REFERENCE;
1894 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00001895 ;
1896 break;}
vlm0aa86902004-10-12 23:26:53 +00001897case 75:
1898#line 858 "asn1p_y.y"
1899{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1900 break;}
1901case 76:
1902#line 859 "asn1p_y.y"
1903{ yyval.a_expr = yyvsp[0].a_expr; ;
1904 break;}
1905case 77:
1906#line 862 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001907{
vlmfa67ddc2004-06-03 03:38:44 +00001908 yyval.a_expr = asn1p_expr_new(yylineno);
1909 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001910 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1911 ;
1912 break;}
vlm0aa86902004-10-12 23:26:53 +00001913case 78:
1914#line 867 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001915{
vlmfa67ddc2004-06-03 03:38:44 +00001916 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001917 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1918 ;
1919 break;}
vlm0aa86902004-10-12 23:26:53 +00001920case 79:
1921#line 874 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001922{
vlmec8f6812004-08-22 03:19:54 +00001923 yyval.a_expr = yyvsp[-1].a_expr;
1924 assert(yyval.a_expr->Identifier == 0);
vlmfce48a42004-09-14 02:36:39 +00001925 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmec8f6812004-08-22 03:19:54 +00001926 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00001927 ;
1928 break;}
vlm0aa86902004-10-12 23:26:53 +00001929case 80:
1930#line 880 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001931{
vlmec8f6812004-08-22 03:19:54 +00001932 yyval.a_expr = asn1p_expr_new(yylineno);
1933 checkmem(yyval.a_expr);
1934 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1935 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
vlm6a02a8a2004-09-08 00:28:11 +00001936 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1937 ;
1938 break;}
vlm0aa86902004-10-12 23:26:53 +00001939case 81:
1940#line 887 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001941{
vlmec8f6812004-08-22 03:19:54 +00001942 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001943 ;
1944 break;}
vlm0aa86902004-10-12 23:26:53 +00001945case 82:
1946#line 893 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001947{
vlmec8f6812004-08-22 03:19:54 +00001948 yyval.a_expr = asn1p_expr_new(yylineno);
1949 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001950 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1951 ;
1952 break;}
vlm0aa86902004-10-12 23:26:53 +00001953case 83:
1954#line 898 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001955{
vlmec8f6812004-08-22 03:19:54 +00001956 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001957 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1958 ;
1959 break;}
vlm0aa86902004-10-12 23:26:53 +00001960case 84:
1961#line 905 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001962{
vlmec8f6812004-08-22 03:19:54 +00001963 yyval.a_expr = yyvsp[0].a_expr;
1964 assert(yyval.a_expr->Identifier == 0);
vlmfce48a42004-09-14 02:36:39 +00001965 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001966 ;
1967 break;}
vlm0aa86902004-10-12 23:26:53 +00001968case 85:
1969#line 910 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001970{
vlmec8f6812004-08-22 03:19:54 +00001971 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001972 ;
1973 break;}
vlm0aa86902004-10-12 23:26:53 +00001974case 86:
1975#line 916 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001976{
vlmfa67ddc2004-06-03 03:38:44 +00001977 yyval.a_expr = yyvsp[-2].a_expr;
1978 checkmem(yyval.a_expr);
1979 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
1980 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1981 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm6a02a8a2004-09-08 00:28:11 +00001982 ;
1983 break;}
vlm0aa86902004-10-12 23:26:53 +00001984case 87:
1985#line 926 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001986{ yyval.a_int = 0; ;
1987 break;}
vlm0aa86902004-10-12 23:26:53 +00001988case 88:
1989#line 927 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001990{ yyval.a_int = 1; ;
1991 break;}
vlm0aa86902004-10-12 23:26:53 +00001992case 89:
1993#line 931 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001994{
vlmfa67ddc2004-06-03 03:38:44 +00001995 yyval.a_expr = asn1p_expr_new(yylineno);
1996 checkmem(yyval.a_expr);
1997 yyval.a_expr->expr_type = A1TC_CLASSDEF;
1998 yyval.a_expr->meta_type = AMT_OBJECT;
vlm6a02a8a2004-09-08 00:28:11 +00001999 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2000 ;
2001 break;}
vlm0aa86902004-10-12 23:26:53 +00002002case 90:
2003#line 938 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002004{
vlmfa67ddc2004-06-03 03:38:44 +00002005 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002006 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2007 ;
2008 break;}
vlm0aa86902004-10-12 23:26:53 +00002009case 91:
2010#line 945 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002011{
vlmfa67ddc2004-06-03 03:38:44 +00002012 yyval.a_expr = asn1p_expr_new(yylineno);
2013 checkmem(yyval.a_expr);
2014 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2015 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2016 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2017 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00002018 ;
2019 break;}
vlm0aa86902004-10-12 23:26:53 +00002020case 92:
2021#line 953 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002022{
vlmec8f6812004-08-22 03:19:54 +00002023 yyval.a_expr = yyvsp[-2].a_expr;
2024 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
vlmbde35d42004-11-24 17:43:29 +00002025 yyval.a_expr->marker = yyvsp[0].a_marker;
2026 yyval.a_expr->unique = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00002027 ;
2028 break;}
vlm0aa86902004-10-12 23:26:53 +00002029case 93:
2030#line 959 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002031{
vlmfa67ddc2004-06-03 03:38:44 +00002032 int ret;
2033 yyval.a_expr = asn1p_expr_new(yylineno);
2034 checkmem(yyval.a_expr);
2035 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2036 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2037 checkmem(yyval.a_expr->reference);
2038 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2039 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2040 checkmem(ret == 0);
2041 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2042 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
vlmbde35d42004-11-24 17:43:29 +00002043 yyval.a_expr->marker = yyvsp[0].a_marker;
2044 yyval.a_expr->unique = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00002045 ;
2046 break;}
vlm0aa86902004-10-12 23:26:53 +00002047case 94:
2048#line 977 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002049{ yyval.a_wsynt = 0; ;
2050 break;}
vlm0aa86902004-10-12 23:26:53 +00002051case 95:
2052#line 978 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002053{
vlmfa67ddc2004-06-03 03:38:44 +00002054 yyval.a_wsynt = yyvsp[0].a_wsynt;
vlm6a02a8a2004-09-08 00:28:11 +00002055 ;
2056 break;}
vlm0aa86902004-10-12 23:26:53 +00002057case 96:
2058#line 985 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002059{ asn1p_lexer_hack_enable_with_syntax(); ;
2060 break;}
vlm0aa86902004-10-12 23:26:53 +00002061case 97:
2062#line 987 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002063{
vlmfa67ddc2004-06-03 03:38:44 +00002064 yyval.a_wsynt = yyvsp[-1].a_wsynt;
vlm6a02a8a2004-09-08 00:28:11 +00002065 ;
2066 break;}
vlm0aa86902004-10-12 23:26:53 +00002067case 98:
2068#line 993 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002069{
vlmfa67ddc2004-06-03 03:38:44 +00002070 yyval.a_wsynt = asn1p_wsyntx_new();
2071 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002072 ;
2073 break;}
vlm0aa86902004-10-12 23:26:53 +00002074case 99:
2075#line 997 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002076{
vlmfa67ddc2004-06-03 03:38:44 +00002077 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2078 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002079 ;
2080 break;}
vlm0aa86902004-10-12 23:26:53 +00002081case 100:
2082#line 1004 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002083{
vlmfa67ddc2004-06-03 03:38:44 +00002084 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002085 ;
2086 break;}
vlm0aa86902004-10-12 23:26:53 +00002087case 101:
2088#line 1007 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002089{
vlmfa67ddc2004-06-03 03:38:44 +00002090 asn1p_ref_t *ref;
2091 int ret;
2092 ref = asn1p_ref_new(yylineno);
2093 checkmem(ref);
2094 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2095 checkmem(ret == 0);
2096 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002097 ;
2098 break;}
vlm0aa86902004-10-12 23:26:53 +00002099case 102:
vlm151c0b22004-09-22 16:03:36 +00002100#line 1019 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002101{
vlm39e5ed72004-09-05 10:40:41 +00002102 yyval.a_expr = asn1p_expr_new(yylineno);
vlm5f0128b2004-08-20 13:25:29 +00002103 checkmem(yyval.a_expr);
2104 yyval.a_expr->Identifier = strdup("...");
vlm0aa86902004-10-12 23:26:53 +00002105 checkmem(yyval.a_expr->Identifier);
2106 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2107 yyval.a_expr->meta_type = AMT_TYPE;
2108 ;
2109 break;}
2110case 103:
2111#line 1027 "asn1p_y.y"
2112{
2113 yyval.a_expr = asn1p_expr_new(yylineno);
2114 checkmem(yyval.a_expr);
2115 yyval.a_expr->Identifier = strdup("...");
2116 checkmem(yyval.a_expr->Identifier);
2117 yyval.a_expr->value = yyvsp[0].a_value;
2118 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2119 yyval.a_expr->meta_type = AMT_TYPE;
2120 ;
2121 break;}
2122case 104:
2123#line 1036 "asn1p_y.y"
2124{
2125 yyval.a_expr = asn1p_expr_new(yylineno);
2126 checkmem(yyval.a_expr);
2127 yyval.a_expr->Identifier = strdup("...");
vlm5f0128b2004-08-20 13:25:29 +00002128 yyval.a_expr->value = yyvsp[0].a_value;
2129 checkmem(yyval.a_expr->Identifier);
2130 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2131 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002132 ;
2133 break;}
vlm0aa86902004-10-12 23:26:53 +00002134case 105:
2135#line 1048 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002136{
vlmec8f6812004-08-22 03:19:54 +00002137 yyval.a_expr = yyvsp[-1].a_expr;
vlmfce48a42004-09-14 02:36:39 +00002138 yyval.a_expr->tag = yyvsp[-2].a_tag;
vlmec8f6812004-08-22 03:19:54 +00002139 /*
2140 * Outer constraint for SEQUENCE OF and SET OF applies
2141 * to the inner type.
2142 */
2143 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2144 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2145 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2146 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2147 } else {
2148 if(yyval.a_expr->constraints) {
vlmfce48a42004-09-14 02:36:39 +00002149 assert(!yyvsp[-1].a_expr);
vlmec8f6812004-08-22 03:19:54 +00002150 } else {
2151 yyval.a_expr->constraints = yyvsp[0].a_constr;
2152 }
2153 }
vlm6a02a8a2004-09-08 00:28:11 +00002154 ;
2155 break;}
vlm0aa86902004-10-12 23:26:53 +00002156case 106:
2157#line 1070 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002158{
vlm5f0128b2004-08-20 13:25:29 +00002159 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002160 ;
2161 break;}
vlm0aa86902004-10-12 23:26:53 +00002162case 107:
2163#line 1073 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002164{
vlmfa67ddc2004-06-03 03:38:44 +00002165 yyval.a_expr = asn1p_expr_new(yylineno);
2166 checkmem(yyval.a_expr);
2167 yyval.a_expr->expr_type = yyvsp[0].a_type;
2168 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002169 ;
2170 break;}
vlm0aa86902004-10-12 23:26:53 +00002171case 108:
2172#line 1079 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002173{
vlmec8f6812004-08-22 03:19:54 +00002174 yyval.a_expr = yyvsp[-1].a_expr;
2175 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2176 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2177 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002178 ;
2179 break;}
vlm0aa86902004-10-12 23:26:53 +00002180case 109:
2181#line 1085 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002182{
vlmec8f6812004-08-22 03:19:54 +00002183 yyval.a_expr = yyvsp[-1].a_expr;
2184 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2185 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2186 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002187 ;
2188 break;}
vlm0aa86902004-10-12 23:26:53 +00002189case 110:
2190#line 1091 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002191{
vlmec8f6812004-08-22 03:19:54 +00002192 yyval.a_expr = yyvsp[-1].a_expr;
2193 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2194 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2195 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002196 ;
2197 break;}
vlm0aa86902004-10-12 23:26:53 +00002198case 111:
2199#line 1097 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002200{
vlm39e5ed72004-09-05 10:40:41 +00002201 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002202 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002203 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002204 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2205 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002206 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002207 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002208 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2209 ;
2210 break;}
vlm0aa86902004-10-12 23:26:53 +00002211case 112:
2212#line 1107 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002213{
vlm39e5ed72004-09-05 10:40:41 +00002214 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002215 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002216 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002217 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2218 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002219 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002220 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002221 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2222 ;
2223 break;}
vlm0aa86902004-10-12 23:26:53 +00002224case 113:
2225#line 1117 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002226{
vlm39e5ed72004-09-05 10:40:41 +00002227 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002228 checkmem(yyval.a_expr);
vlm044f7442004-09-04 04:49:21 +00002229 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002230 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002231 ;
2232 break;}
vlm0aa86902004-10-12 23:26:53 +00002233case 114:
2234#line 1123 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002235{
vlmec8f6812004-08-22 03:19:54 +00002236 int ret;
vlm39e5ed72004-09-05 10:40:41 +00002237 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002238 checkmem(yyval.a_expr);
2239 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2240 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2241 yyvsp[0].tv_str, RLT_lowercase);
2242 checkmem(ret == 0);
vlm044f7442004-09-04 04:49:21 +00002243 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002244 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002245 ;
2246 break;}
vlm0aa86902004-10-12 23:26:53 +00002247case 115:
2248#line 1137 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002249{
vlmfa67ddc2004-06-03 03:38:44 +00002250 int ret;
2251 yyval.a_expr = yyvsp[-1].a_expr;
2252 assert(yyval.a_expr->expr_type == 0);
2253 assert(yyval.a_expr->meta_type == 0);
2254 assert(yyval.a_expr->reference == 0);
2255 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2256 checkmem(yyval.a_expr->reference);
2257 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2258 checkmem(ret == 0);
2259 free(yyvsp[-3].tv_str);
2260 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2261 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002262 ;
2263 break;}
vlm0aa86902004-10-12 23:26:53 +00002264case 116:
2265#line 1161 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002266{
vlmfa67ddc2004-06-03 03:38:44 +00002267 yyval.a_expr = asn1p_expr_new(yylineno);
2268 checkmem(yyval.a_expr);
2269 yyval.a_expr->reference = yyvsp[0].a_ref;
2270 yyval.a_expr->expr_type = A1TC_REFERENCE;
2271 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00002272 ;
2273 break;}
vlm0aa86902004-10-12 23:26:53 +00002274case 117:
2275#line 1168 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002276{
vlmfa67ddc2004-06-03 03:38:44 +00002277 yyval.a_expr = asn1p_expr_new(yylineno);
2278 checkmem(yyval.a_expr);
2279 yyval.a_expr->reference = yyvsp[0].a_ref;
2280 yyval.a_expr->expr_type = A1TC_INSTANCE;
2281 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002282 ;
2283 break;}
vlm0aa86902004-10-12 23:26:53 +00002284case 118:
2285#line 1183 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002286{
vlmfa67ddc2004-06-03 03:38:44 +00002287 int ret;
2288 yyval.a_ref = asn1p_ref_new(yylineno);
2289 checkmem(yyval.a_ref);
2290 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2291 checkmem(ret == 0);
2292 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002293 ;
2294 break;}
vlm0aa86902004-10-12 23:26:53 +00002295case 119:
2296#line 1191 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002297{
vlmfa67ddc2004-06-03 03:38:44 +00002298 int ret;
2299 yyval.a_ref = asn1p_ref_new(yylineno);
2300 checkmem(yyval.a_ref);
2301 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2302 checkmem(ret == 0);
2303 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2304 checkmem(ret == 0);
2305 free(yyvsp[-2].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002306 ;
2307 break;}
vlm0aa86902004-10-12 23:26:53 +00002308case 120:
2309#line 1201 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002310{
vlmfa67ddc2004-06-03 03:38:44 +00002311 int ret;
2312 yyval.a_ref = asn1p_ref_new(yylineno);
2313 checkmem(yyval.a_ref);
2314 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2315 checkmem(ret == 0);
vlmc94e28f2004-09-15 11:59:51 +00002316 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
vlmfa67ddc2004-06-03 03:38:44 +00002317 checkmem(ret == 0);
2318 free(yyvsp[-2].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002319 ;
2320 break;}
vlm0aa86902004-10-12 23:26:53 +00002321case 121:
2322#line 1211 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002323{
vlmfa67ddc2004-06-03 03:38:44 +00002324 int ret;
2325 yyval.a_ref = asn1p_ref_new(yylineno);
2326 checkmem(yyval.a_ref);
vlmc94e28f2004-09-15 11:59:51 +00002327 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2328 checkmem(ret == 0);
2329 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2330 checkmem(ret == 0);
2331 free(yyvsp[-2].tv_str);
2332 ;
2333 break;}
vlm0aa86902004-10-12 23:26:53 +00002334case 122:
2335#line 1221 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002336{
2337 int ret;
2338 yyval.a_ref = asn1p_ref_new(yylineno);
2339 checkmem(yyval.a_ref);
vlmfa67ddc2004-06-03 03:38:44 +00002340 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2341 free(yyvsp[0].tv_str);
2342 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002343 ;
2344 break;}
vlm0aa86902004-10-12 23:26:53 +00002345case 123:
2346#line 1229 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002347{
vlmfa67ddc2004-06-03 03:38:44 +00002348 int ret;
2349 yyval.a_ref = yyvsp[0].a_ref;
2350 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2351 free(yyvsp[-2].tv_str);
2352 checkmem(ret == 0);
2353 /*
2354 * Move the last element infront.
2355 */
2356 {
2357 struct asn1p_ref_component_s tmp_comp;
2358 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2359 memmove(&yyval.a_ref->components[1],
2360 &yyval.a_ref->components[0],
2361 sizeof(yyval.a_ref->components[0])
2362 * (yyval.a_ref->comp_count - 1));
2363 yyval.a_ref->components[0] = tmp_comp;
2364 }
vlm6a02a8a2004-09-08 00:28:11 +00002365 ;
2366 break;}
vlm0aa86902004-10-12 23:26:53 +00002367case 124:
2368#line 1251 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002369{
vlmfa67ddc2004-06-03 03:38:44 +00002370 int ret;
2371 yyval.a_ref = asn1p_ref_new(yylineno);
2372 checkmem(yyval.a_ref);
2373 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2374 free(yyvsp[0].a_refcomp.name);
2375 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002376 ;
2377 break;}
vlm0aa86902004-10-12 23:26:53 +00002378case 125:
2379#line 1259 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002380{
vlmfa67ddc2004-06-03 03:38:44 +00002381 int ret;
2382 yyval.a_ref = yyvsp[-2].a_ref;
2383 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2384 free(yyvsp[0].a_refcomp.name);
2385 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002386 ;
2387 break;}
vlm0aa86902004-10-12 23:26:53 +00002388case 128:
2389#line 1273 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002390{
vlmfa67ddc2004-06-03 03:38:44 +00002391 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2392 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002393 ;
2394 break;}
vlm0aa86902004-10-12 23:26:53 +00002395case 129:
2396#line 1278 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002397{
vlmfa67ddc2004-06-03 03:38:44 +00002398 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2399 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002400 ;
2401 break;}
vlm0aa86902004-10-12 23:26:53 +00002402case 130:
2403#line 1291 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002404{
vlmfa67ddc2004-06-03 03:38:44 +00002405 yyval.a_expr = yyvsp[-2].a_expr;
2406 assert(yyval.a_expr->Identifier == NULL);
2407 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2408 yyval.a_expr->meta_type = AMT_VALUE;
2409 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002410 ;
2411 break;}
vlm0aa86902004-10-12 23:26:53 +00002412case 131:
2413#line 1301 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002414{
2415 yyval.a_value = asn1p_value_fromint(0);
2416 checkmem(yyval.a_value);
2417 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2418 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2419 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2420 ;
2421 break;}
vlm0aa86902004-10-12 23:26:53 +00002422case 132:
2423#line 1308 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002424{ asn1p_lexer_hack_push_opaque_state(); ;
2425 break;}
vlm0aa86902004-10-12 23:26:53 +00002426case 133:
2427#line 1308 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002428{
vlmfa67ddc2004-06-03 03:38:44 +00002429 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2430 checkmem(yyval.a_value);
2431 yyval.a_value->type = ATV_UNPARSED;
vlm6a02a8a2004-09-08 00:28:11 +00002432 ;
2433 break;}
vlm0aa86902004-10-12 23:26:53 +00002434case 134:
2435#line 1313 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002436{
2437 yyval.a_value = asn1p_value_fromint(0);
2438 checkmem(yyval.a_value);
2439 yyval.a_value->type = ATV_NULL;
2440 ;
2441 break;}
vlm0aa86902004-10-12 23:26:53 +00002442case 135:
2443#line 1318 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002444{
2445 yyval.a_value = asn1p_value_fromint(0);
2446 checkmem(yyval.a_value);
2447 yyval.a_value->type = ATV_FALSE;
2448 ;
2449 break;}
vlm0aa86902004-10-12 23:26:53 +00002450case 136:
2451#line 1323 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002452{
2453 yyval.a_value = asn1p_value_fromint(0);
2454 checkmem(yyval.a_value);
2455 yyval.a_value->type = ATV_TRUE;
2456 ;
2457 break;}
vlm0aa86902004-10-12 23:26:53 +00002458case 137:
2459#line 1328 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002460{
vlmfa67ddc2004-06-03 03:38:44 +00002461 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2462 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002463 ;
2464 break;}
vlm0aa86902004-10-12 23:26:53 +00002465case 138:
2466#line 1332 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002467{
vlmfa67ddc2004-06-03 03:38:44 +00002468 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2469 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002470 ;
2471 break;}
vlm0aa86902004-10-12 23:26:53 +00002472case 139:
2473#line 1336 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002474{
vlmfa67ddc2004-06-03 03:38:44 +00002475 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2476 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002477 ;
2478 break;}
vlm0aa86902004-10-12 23:26:53 +00002479case 140:
2480#line 1340 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002481{
vlm5f0128b2004-08-20 13:25:29 +00002482 yyval.a_value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002483 ;
2484 break;}
vlm0aa86902004-10-12 23:26:53 +00002485case 141:
2486#line 1343 "asn1p_y.y"
vlm151c0b22004-09-22 16:03:36 +00002487{
2488 yyval.a_value = yyvsp[0].a_value;
2489 ;
2490 break;}
vlm0aa86902004-10-12 23:26:53 +00002491case 142:
2492#line 1349 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002493{
vlmfa67ddc2004-06-03 03:38:44 +00002494 asn1p_ref_t *ref;
2495 int ret;
2496 ref = asn1p_ref_new(yylineno);
2497 checkmem(ref);
2498 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2499 checkmem(ret == 0);
2500 yyval.a_value = asn1p_value_fromref(ref, 0);
2501 checkmem(yyval.a_value);
2502 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002503 ;
2504 break;}
vlm0aa86902004-10-12 23:26:53 +00002505case 143:
2506#line 1360 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002507{
vlmfa67ddc2004-06-03 03:38:44 +00002508 asn1p_ref_t *ref;
2509 int ret;
2510 ref = asn1p_ref_new(yylineno);
2511 checkmem(ref);
2512 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2513 checkmem(ret == 0);
2514 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2515 checkmem(ret == 0);
2516 yyval.a_value = asn1p_value_fromref(ref, 0);
2517 checkmem(yyval.a_value);
2518 free(yyvsp[-2].tv_str);
2519 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002520 ;
2521 break;}
vlm0aa86902004-10-12 23:26:53 +00002522case 144:
2523#line 1377 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002524{
vlmfa67ddc2004-06-03 03:38:44 +00002525 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
2526 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2527 checkmem(yyval.tv_opaque.buf);
2528 yyval.tv_opaque.buf[0] = '{';
2529 yyval.tv_opaque.buf[1] = ' ';
2530 memcpy(yyval.tv_opaque.buf + 2, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2531 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2532 free(yyvsp[0].tv_opaque.buf);
vlm6a02a8a2004-09-08 00:28:11 +00002533 ;
2534 break;}
vlm0aa86902004-10-12 23:26:53 +00002535case 145:
2536#line 1387 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002537{
vlmfa67ddc2004-06-03 03:38:44 +00002538 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2539 char *p = malloc(newsize + 1);
2540 checkmem(p);
2541 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2542 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2543 p[newsize] = '\0';
2544 free(yyvsp[-1].tv_opaque.buf);
2545 free(yyvsp[0].tv_opaque.buf);
2546 yyval.tv_opaque.buf = p;
2547 yyval.tv_opaque.len = newsize;
vlm6a02a8a2004-09-08 00:28:11 +00002548 ;
2549 break;}
vlm0aa86902004-10-12 23:26:53 +00002550case 146:
2551#line 1402 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002552{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2553 break;}
vlm0aa86902004-10-12 23:26:53 +00002554case 147:
2555#line 1403 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002556{ yyval.a_type = ASN_BASIC_NULL; ;
2557 break;}
vlm0aa86902004-10-12 23:26:53 +00002558case 148:
2559#line 1404 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002560{ yyval.a_type = ASN_BASIC_REAL; ;
2561 break;}
vlm0aa86902004-10-12 23:26:53 +00002562case 149:
2563#line 1405 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002564{ yyval.a_type = yyvsp[0].a_type; ;
2565 break;}
vlm0aa86902004-10-12 23:26:53 +00002566case 150:
2567#line 1406 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002568{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
2569 break;}
vlm0aa86902004-10-12 23:26:53 +00002570case 151:
2571#line 1407 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002572{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
2573 break;}
vlm0aa86902004-10-12 23:26:53 +00002574case 152:
2575#line 1408 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002576{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
2577 break;}
vlm0aa86902004-10-12 23:26:53 +00002578case 153:
2579#line 1409 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002580{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
2581 break;}
vlm0aa86902004-10-12 23:26:53 +00002582case 154:
2583#line 1410 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002584{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
2585 break;}
vlm0aa86902004-10-12 23:26:53 +00002586case 155:
2587#line 1411 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002588{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
2589 break;}
vlm0aa86902004-10-12 23:26:53 +00002590case 156:
2591#line 1412 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002592{ yyval.a_type = ASN_BASIC_UTCTime; ;
2593 break;}
vlm0aa86902004-10-12 23:26:53 +00002594case 157:
2595#line 1413 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002596{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2597 break;}
vlm0aa86902004-10-12 23:26:53 +00002598case 158:
2599#line 1420 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002600{ yyval.a_type = ASN_BASIC_INTEGER; ;
2601 break;}
vlm0aa86902004-10-12 23:26:53 +00002602case 159:
2603#line 1421 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002604{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2605 break;}
vlm0aa86902004-10-12 23:26:53 +00002606case 160:
2607#line 1422 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002608{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2609 break;}
vlm0aa86902004-10-12 23:26:53 +00002610case 161:
2611#line 1426 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002612{
vlm39e5ed72004-09-05 10:40:41 +00002613 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002614 checkmem(yyval.a_expr);
2615 yyval.a_expr->expr_type = yyvsp[0].a_type;
2616 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002617 ;
2618 break;}
vlm0aa86902004-10-12 23:26:53 +00002619case 162:
2620#line 1432 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002621{
vlmfa67ddc2004-06-03 03:38:44 +00002622 if(yyvsp[0].a_expr) {
2623 yyval.a_expr = yyvsp[0].a_expr;
2624 } else {
vlm39e5ed72004-09-05 10:40:41 +00002625 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002626 checkmem(yyval.a_expr);
2627 }
2628 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2629 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002630 ;
2631 break;}
vlm0aa86902004-10-12 23:26:53 +00002632case 163:
2633#line 1445 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002634{ yyval.a_type = ASN_STRING_BMPString; ;
2635 break;}
vlm0aa86902004-10-12 23:26:53 +00002636case 164:
2637#line 1446 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002638{
vlmfa67ddc2004-06-03 03:38:44 +00002639 yyval.a_type = ASN_STRING_GeneralString;
vlmc94e28f2004-09-15 11:59:51 +00002640 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002641 ;
2642 break;}
vlm0aa86902004-10-12 23:26:53 +00002643case 165:
2644#line 1450 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002645{
vlmc94e28f2004-09-15 11:59:51 +00002646 yyval.a_type = ASN_STRING_GraphicString;
2647 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002648 ;
2649 break;}
vlm0aa86902004-10-12 23:26:53 +00002650case 166:
2651#line 1454 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002652{ yyval.a_type = ASN_STRING_IA5String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002653 break;}
vlm0aa86902004-10-12 23:26:53 +00002654case 167:
2655#line 1455 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002656{ yyval.a_type = ASN_STRING_ISO646String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002657 break;}
vlm0aa86902004-10-12 23:26:53 +00002658case 168:
2659#line 1456 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002660{ yyval.a_type = ASN_STRING_NumericString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002661 break;}
vlm0aa86902004-10-12 23:26:53 +00002662case 169:
2663#line 1457 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002664{ yyval.a_type = ASN_STRING_PrintableString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002665 break;}
vlm0aa86902004-10-12 23:26:53 +00002666case 170:
2667#line 1458 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002668{
2669 yyval.a_type = ASN_STRING_T61String;
2670 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2671 ;
vlm6a02a8a2004-09-08 00:28:11 +00002672 break;}
vlm0aa86902004-10-12 23:26:53 +00002673case 171:
2674#line 1462 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002675{ yyval.a_type = ASN_STRING_TeletexString; ;
2676 break;}
vlm0aa86902004-10-12 23:26:53 +00002677case 172:
2678#line 1463 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002679{ yyval.a_type = ASN_STRING_UniversalString; ;
2680 break;}
vlm0aa86902004-10-12 23:26:53 +00002681case 173:
2682#line 1464 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002683{ yyval.a_type = ASN_STRING_UTF8String; ;
2684 break;}
vlm0aa86902004-10-12 23:26:53 +00002685case 174:
2686#line 1465 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002687{
2688 yyval.a_type = ASN_STRING_VideotexString;
2689 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2690 ;
2691 break;}
vlm0aa86902004-10-12 23:26:53 +00002692case 175:
2693#line 1469 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002694{ yyval.a_type = ASN_STRING_VisibleString; ;
2695 break;}
vlm0aa86902004-10-12 23:26:53 +00002696case 176:
2697#line 1470 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002698{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2699 break;}
vlm0aa86902004-10-12 23:26:53 +00002700case 182:
2701#line 1482 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002702{ yyval.a_constr = 0; ;
2703 break;}
vlm0aa86902004-10-12 23:26:53 +00002704case 183:
2705#line 1483 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002706{
vlm39e5ed72004-09-05 10:40:41 +00002707 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002708 ;
2709 break;}
vlm0aa86902004-10-12 23:26:53 +00002710case 184:
2711#line 1489 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002712{
vlm39e5ed72004-09-05 10:40:41 +00002713 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002714 ;
2715 break;}
vlm0aa86902004-10-12 23:26:53 +00002716case 185:
2717#line 1492 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002718{
vlmfa67ddc2004-06-03 03:38:44 +00002719 /*
2720 * This is a special case, for compatibility purposes.
vlm9283dbe2004-08-18 04:59:12 +00002721 * It goes without parentheses.
vlmfa67ddc2004-06-03 03:38:44 +00002722 */
vlm5f0128b2004-08-20 13:25:29 +00002723 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002724 ;
2725 break;}
vlm0aa86902004-10-12 23:26:53 +00002726case 186:
2727#line 1502 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002728{
vlmfa67ddc2004-06-03 03:38:44 +00002729 yyval.a_constr = yyvsp[-1].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002730 ;
2731 break;}
vlm0aa86902004-10-12 23:26:53 +00002732case 187:
2733#line 1505 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002734{
vlm9283dbe2004-08-18 04:59:12 +00002735 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002736 ;
2737 break;}
vlm0aa86902004-10-12 23:26:53 +00002738case 188:
2739#line 1511 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002740{
vlmfa67ddc2004-06-03 03:38:44 +00002741 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002742 ;
2743 break;}
vlm0aa86902004-10-12 23:26:53 +00002744case 189:
2745#line 1514 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002746{
vlmfa67ddc2004-06-03 03:38:44 +00002747 asn1p_constraint_t *ct;
2748 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002749 ct->type = ACT_EL_EXT;
2750 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00002751 ;
2752 break;}
vlm0aa86902004-10-12 23:26:53 +00002753case 190:
2754#line 1520 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002755{
vlmfa67ddc2004-06-03 03:38:44 +00002756 asn1p_constraint_t *ct;
2757 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002758 ct->type = ACT_EL_EXT;
2759 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
vlm6f5eb0b2004-08-13 12:35:09 +00002760 ct = yyval.a_constr;
2761 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002762 ;
2763 break;}
vlm0aa86902004-10-12 23:26:53 +00002764case 191:
2765#line 1531 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002766{
vlm9283dbe2004-08-18 04:59:12 +00002767 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002768 ;
2769 break;}
vlm0aa86902004-10-12 23:26:53 +00002770case 192:
2771#line 1534 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002772{
vlmfa67ddc2004-06-03 03:38:44 +00002773 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002774 ;
2775 break;}
vlm0aa86902004-10-12 23:26:53 +00002776case 193:
2777#line 1537 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002778{
vlmfa67ddc2004-06-03 03:38:44 +00002779 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002780 ;
2781 break;}
vlm0aa86902004-10-12 23:26:53 +00002782case 194:
2783#line 1540 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002784{
vlmfa67ddc2004-06-03 03:38:44 +00002785 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002786 ;
2787 break;}
vlm0aa86902004-10-12 23:26:53 +00002788case 195:
2789#line 1546 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002790{
vlmfa67ddc2004-06-03 03:38:44 +00002791 int ret;
2792 yyval.a_constr = asn1p_constraint_new(yylineno);
2793 checkmem(yyval.a_constr);
2794 yyval.a_constr->type = yyvsp[-3].a_ctype;
2795 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2796 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002797 ;
2798 break;}
vlm0aa86902004-10-12 23:26:53 +00002799case 196:
2800#line 1554 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002801{
vlm9283dbe2004-08-18 04:59:12 +00002802 int ret;
2803 yyval.a_constr = asn1p_constraint_new(yylineno);
2804 checkmem(yyval.a_constr);
2805 yyval.a_constr->type = ACT_CA_SET;
2806 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2807 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002808 ;
2809 break;}
vlm0aa86902004-10-12 23:26:53 +00002810case 197:
2811#line 1562 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002812{
vlm9283dbe2004-08-18 04:59:12 +00002813 yyval.a_constr = asn1p_constraint_new(yylineno);
2814 checkmem(yyval.a_constr);
2815 yyval.a_constr->type = ACT_EL_VALUE;
2816 yyval.a_constr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002817 ;
2818 break;}
vlm6a02a8a2004-09-08 00:28:11 +00002819case 198:
vlm0aa86902004-10-12 23:26:53 +00002820#line 1568 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002821{
vlm0aa86902004-10-12 23:26:53 +00002822 yyval.a_constr = asn1p_constraint_new(yylineno);
2823 checkmem(yyval.a_constr);
2824 yyval.a_constr->type = yyvsp[-1].a_ctype;
2825 yyval.a_constr->range_start = yyvsp[-2].a_value;
2826 yyval.a_constr->range_stop = yyvsp[0].a_value;
vlmc94e28f2004-09-15 11:59:51 +00002827 ;
2828 break;}
vlm151c0b22004-09-22 16:03:36 +00002829case 199:
vlm0aa86902004-10-12 23:26:53 +00002830#line 1575 "asn1p_y.y"
2831{
2832 yyval.a_constr = asn1p_constraint_new(yylineno);
2833 checkmem(yyval.a_constr);
2834 yyval.a_constr->type = yyvsp[-1].a_ctype;
2835 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2836 yyval.a_constr->range_stop = yyvsp[0].a_value;
2837 yyval.a_constr->range_start->type = ATV_MIN;
2838 ;
2839 break;}
2840case 200:
2841#line 1583 "asn1p_y.y"
2842{
2843 yyval.a_constr = asn1p_constraint_new(yylineno);
2844 checkmem(yyval.a_constr);
2845 yyval.a_constr->type = yyvsp[-1].a_ctype;
2846 yyval.a_constr->range_start = yyvsp[-2].a_value;
2847 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2848 yyval.a_constr->range_stop->type = ATV_MAX;
2849 ;
2850 break;}
2851case 201:
2852#line 1591 "asn1p_y.y"
2853{
2854 yyval.a_constr = asn1p_constraint_new(yylineno);
2855 checkmem(yyval.a_constr);
2856 yyval.a_constr->type = yyvsp[-1].a_ctype;
2857 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2858 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2859 yyval.a_constr->range_start->type = ATV_MIN;
2860 yyval.a_constr->range_stop->type = ATV_MAX;
2861 ;
2862 break;}
2863case 202:
2864#line 1600 "asn1p_y.y"
vlm151c0b22004-09-22 16:03:36 +00002865{
2866 yyval.a_constr = yyvsp[0].a_constr;
2867 ;
2868 break;}
vlmc94e28f2004-09-15 11:59:51 +00002869case 203:
vlm0aa86902004-10-12 23:26:53 +00002870#line 1603 "asn1p_y.y"
2871{
2872 yyval.a_constr = yyvsp[0].a_constr;
2873 ;
vlmc94e28f2004-09-15 11:59:51 +00002874 break;}
2875case 204:
vlm0aa86902004-10-12 23:26:53 +00002876#line 1609 "asn1p_y.y"
2877{ yyval.a_ctype = ACT_EL_RANGE; ;
2878 break;}
2879case 205:
2880#line 1610 "asn1p_y.y"
2881{ yyval.a_ctype = ACT_EL_RLRANGE; ;
2882 break;}
2883case 206:
2884#line 1611 "asn1p_y.y"
2885{ yyval.a_ctype = ACT_EL_LLRANGE; ;
2886 break;}
2887case 207:
2888#line 1612 "asn1p_y.y"
2889{ yyval.a_ctype = ACT_EL_ULRANGE; ;
2890 break;}
2891case 208:
2892#line 1616 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002893{
vlm39e5ed72004-09-05 10:40:41 +00002894 yyval.a_ctype = ACT_CT_SIZE;
vlm6a02a8a2004-09-08 00:28:11 +00002895 ;
2896 break;}
vlm0aa86902004-10-12 23:26:53 +00002897case 209:
2898#line 1619 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002899{
vlm39e5ed72004-09-05 10:40:41 +00002900 yyval.a_ctype = ACT_CT_FROM;
vlm6a02a8a2004-09-08 00:28:11 +00002901 ;
2902 break;}
vlm0aa86902004-10-12 23:26:53 +00002903case 210:
2904#line 1625 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002905{
vlmfa67ddc2004-06-03 03:38:44 +00002906 yyval.a_value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002907 ;
2908 break;}
vlm0aa86902004-10-12 23:26:53 +00002909case 211:
2910#line 1628 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002911{
vlmfa67ddc2004-06-03 03:38:44 +00002912 asn1p_ref_t *ref;
2913 int ret;
2914 ref = asn1p_ref_new(yylineno);
2915 checkmem(ref);
2916 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2917 checkmem(ret == 0);
2918 yyval.a_value = asn1p_value_fromref(ref, 0);
2919 checkmem(yyval.a_value);
2920 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002921 ;
2922 break;}
vlm0aa86902004-10-12 23:26:53 +00002923case 212:
2924#line 1639 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002925{
vlmfa67ddc2004-06-03 03:38:44 +00002926 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2927 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002928 ;
2929 break;}
vlm0aa86902004-10-12 23:26:53 +00002930case 213:
2931#line 1643 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002932{
vlmfa67ddc2004-06-03 03:38:44 +00002933 yyval.a_value = asn1p_value_fromint(0);
2934 checkmem(yyval.a_value);
2935 yyval.a_value->type = ATV_FALSE;
vlm6a02a8a2004-09-08 00:28:11 +00002936 ;
2937 break;}
vlm0aa86902004-10-12 23:26:53 +00002938case 214:
2939#line 1648 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002940{
vlmfa67ddc2004-06-03 03:38:44 +00002941 yyval.a_value = asn1p_value_fromint(1);
2942 checkmem(yyval.a_value);
2943 yyval.a_value->type = ATV_TRUE;
vlm6a02a8a2004-09-08 00:28:11 +00002944 ;
2945 break;}
vlm0aa86902004-10-12 23:26:53 +00002946case 215:
2947#line 1656 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002948{
vlmfa67ddc2004-06-03 03:38:44 +00002949 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002950 ;
2951 break;}
vlm0aa86902004-10-12 23:26:53 +00002952case 216:
2953#line 1662 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002954{
vlmfa67ddc2004-06-03 03:38:44 +00002955 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002956 ;
2957 break;}
vlm0aa86902004-10-12 23:26:53 +00002958case 217:
2959#line 1665 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002960{
vlmfa67ddc2004-06-03 03:38:44 +00002961 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002962 ;
2963 break;}
vlm0aa86902004-10-12 23:26:53 +00002964case 218:
2965#line 1671 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002966{
vlmfa67ddc2004-06-03 03:38:44 +00002967 yyval.a_constr = asn1p_constraint_new(yylineno);
2968 checkmem(yyval.a_constr);
2969 yyval.a_constr->type = ACT_EL_EXT;
vlm6a02a8a2004-09-08 00:28:11 +00002970 ;
2971 break;}
vlm0aa86902004-10-12 23:26:53 +00002972case 219:
2973#line 1676 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002974{
vlmfa67ddc2004-06-03 03:38:44 +00002975 yyval.a_constr = asn1p_constraint_new(yylineno);
2976 checkmem(yyval.a_constr);
2977 yyval.a_constr->type = ACT_EL_VALUE;
2978 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
2979 yyval.a_constr->presence = yyvsp[0].a_pres;
vlm6a02a8a2004-09-08 00:28:11 +00002980 ;
2981 break;}
vlm0aa86902004-10-12 23:26:53 +00002982case 220:
2983#line 1689 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002984{ yyval.a_pres = ACPRES_DEFAULT; ;
2985 break;}
vlm0aa86902004-10-12 23:26:53 +00002986case 221:
2987#line 1690 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002988{ yyval.a_pres = yyvsp[0].a_pres; ;
2989 break;}
vlm0aa86902004-10-12 23:26:53 +00002990case 222:
2991#line 1694 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002992{
vlmfa67ddc2004-06-03 03:38:44 +00002993 yyval.a_pres = ACPRES_PRESENT;
vlm6a02a8a2004-09-08 00:28:11 +00002994 ;
2995 break;}
vlm0aa86902004-10-12 23:26:53 +00002996case 223:
2997#line 1697 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002998{
vlmfa67ddc2004-06-03 03:38:44 +00002999 yyval.a_pres = ACPRES_ABSENT;
vlm6a02a8a2004-09-08 00:28:11 +00003000 ;
3001 break;}
vlm0aa86902004-10-12 23:26:53 +00003002case 224:
3003#line 1700 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003004{
vlmfa67ddc2004-06-03 03:38:44 +00003005 yyval.a_pres = ACPRES_OPTIONAL;
vlm6a02a8a2004-09-08 00:28:11 +00003006 ;
3007 break;}
vlm0aa86902004-10-12 23:26:53 +00003008case 225:
3009#line 1706 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003010{
vlm5f0128b2004-08-20 13:25:29 +00003011 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00003012 ;
3013 break;}
vlm0aa86902004-10-12 23:26:53 +00003014case 226:
3015#line 1709 "asn1p_y.y"
vlm151c0b22004-09-22 16:03:36 +00003016{
3017 yyval.a_constr = yyvsp[0].a_constr;
3018 ;
3019 break;}
vlm0aa86902004-10-12 23:26:53 +00003020case 227:
3021#line 1718 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003022{
vlmfa67ddc2004-06-03 03:38:44 +00003023 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3024 asn1p_constraint_t *ct;
3025 int ret;
3026 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3027 checkmem(ret == 0);
3028 ct = asn1p_constraint_new(yylineno);
3029 checkmem(yyval.a_constr);
3030 ct->type = ACT_EL_VALUE;
3031 ct->value = asn1p_value_fromref(ref, 0);
3032 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003033 ;
3034 break;}
vlm0aa86902004-10-12 23:26:53 +00003035case 228:
3036#line 1733 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003037{
vlmfa67ddc2004-06-03 03:38:44 +00003038 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003039 ;
3040 break;}
vlm0aa86902004-10-12 23:26:53 +00003041case 229:
3042#line 1739 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003043{
vlmfa67ddc2004-06-03 03:38:44 +00003044 yyval.a_constr = asn1p_constraint_new(yylineno);
3045 checkmem(yyval.a_constr);
3046 yyval.a_constr->type = ACT_EL_VALUE;
3047 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003048 ;
3049 break;}
vlm0aa86902004-10-12 23:26:53 +00003050case 230:
3051#line 1745 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003052{
vlmfa67ddc2004-06-03 03:38:44 +00003053 asn1p_constraint_t *ct;
3054 ct = asn1p_constraint_new(yylineno);
3055 checkmem(ct);
3056 ct->type = ACT_EL_VALUE;
3057 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3058 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00003059 ;
3060 break;}
vlm0aa86902004-10-12 23:26:53 +00003061case 231:
3062#line 1759 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003063{
vlmfa67ddc2004-06-03 03:38:44 +00003064 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3065 int ret;
3066 *p = '@';
3067 strcpy(p + 1, yyvsp[0].tv_str);
3068 yyval.a_ref = asn1p_ref_new(yylineno);
3069 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3070 checkmem(ret == 0);
3071 free(p);
3072 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003073 ;
3074 break;}
vlm0aa86902004-10-12 23:26:53 +00003075case 232:
3076#line 1770 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003077{
vlmfa67ddc2004-06-03 03:38:44 +00003078 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3079 int ret;
3080 p[0] = '@';
3081 p[1] = '.';
3082 strcpy(p + 2, yyvsp[0].tv_str);
3083 yyval.a_ref = asn1p_ref_new(yylineno);
3084 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3085 checkmem(ret == 0);
3086 free(p);
3087 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003088 ;
3089 break;}
vlm0aa86902004-10-12 23:26:53 +00003090case 233:
3091#line 1786 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003092{
vlmfa67ddc2004-06-03 03:38:44 +00003093 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003094 ;
3095 break;}
vlm0aa86902004-10-12 23:26:53 +00003096case 234:
3097#line 1789 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003098{
vlmfa67ddc2004-06-03 03:38:44 +00003099 int l1 = strlen(yyvsp[-2].tv_str);
3100 int l3 = strlen(yyvsp[0].tv_str);
3101 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3102 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3103 yyval.tv_str[l1] = '.';
3104 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3105 yyval.tv_str[l1 + 1 + l3] = '\0';
vlm6a02a8a2004-09-08 00:28:11 +00003106 ;
3107 break;}
vlm0aa86902004-10-12 23:26:53 +00003108case 235:
3109#line 1807 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003110{
vlmc94e28f2004-09-15 11:59:51 +00003111 yyval.a_marker.flags = EM_NOMARK;
3112 yyval.a_marker.default_value = 0;
vlm6a02a8a2004-09-08 00:28:11 +00003113 ;
3114 break;}
vlm0aa86902004-10-12 23:26:53 +00003115case 236:
3116#line 1811 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003117{ yyval.a_marker = yyvsp[0].a_marker; ;
vlma2374a02004-09-14 02:44:07 +00003118 break;}
vlm0aa86902004-10-12 23:26:53 +00003119case 237:
3120#line 1815 "asn1p_y.y"
vlma2374a02004-09-14 02:44:07 +00003121{
vlmc94e28f2004-09-15 11:59:51 +00003122 yyval.a_marker.flags = EM_OPTIONAL;
3123 yyval.a_marker.default_value = 0;
vlma2374a02004-09-14 02:44:07 +00003124 ;
3125 break;}
vlm0aa86902004-10-12 23:26:53 +00003126case 238:
3127#line 1819 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003128{
3129 yyval.a_marker.flags = EM_DEFAULT;
3130 yyval.a_marker.default_value = yyvsp[0].a_value;
3131 ;
3132 break;}
vlm0aa86902004-10-12 23:26:53 +00003133case 239:
3134#line 1842 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003135{
vlm39e5ed72004-09-05 10:40:41 +00003136 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003137 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003138 ;
3139 break;}
vlm0aa86902004-10-12 23:26:53 +00003140case 240:
3141#line 1846 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003142{
vlmfa67ddc2004-06-03 03:38:44 +00003143 yyval.a_expr = yyvsp[-1].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00003144 ;
3145 break;}
vlm0aa86902004-10-12 23:26:53 +00003146case 241:
3147#line 1852 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003148{
vlm39e5ed72004-09-05 10:40:41 +00003149 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003150 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003151 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3152 ;
3153 break;}
vlm0aa86902004-10-12 23:26:53 +00003154case 242:
3155#line 1857 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003156{
vlmfa67ddc2004-06-03 03:38:44 +00003157 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00003158 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3159 ;
3160 break;}
vlm0aa86902004-10-12 23:26:53 +00003161case 243:
3162#line 1864 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003163{
vlm39e5ed72004-09-05 10:40:41 +00003164 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003165 checkmem(yyval.a_expr);
3166 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3167 yyval.a_expr->meta_type = AMT_VALUE;
3168 yyval.a_expr->Identifier = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003169 ;
3170 break;}
vlm0aa86902004-10-12 23:26:53 +00003171case 244:
3172#line 1871 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003173{
vlm39e5ed72004-09-05 10:40:41 +00003174 yyval.a_expr = asn1p_expr_new(yylineno);
vlm5f0128b2004-08-20 13:25:29 +00003175 checkmem(yyval.a_expr);
3176 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3177 yyval.a_expr->meta_type = AMT_VALUE;
3178 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3179 yyval.a_expr->value = yyvsp[-1].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00003180 ;
3181 break;}
vlm0aa86902004-10-12 23:26:53 +00003182case 245:
3183#line 1879 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003184{
3185 yyval.a_expr = asn1p_expr_new(yylineno);
3186 checkmem(yyval.a_expr);
3187 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3188 yyval.a_expr->meta_type = AMT_VALUE;
3189 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3190 yyval.a_expr->value = yyvsp[-1].a_value;
3191 ;
3192 break;}
vlm0aa86902004-10-12 23:26:53 +00003193case 246:
3194#line 1887 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003195{
vlm39e5ed72004-09-05 10:40:41 +00003196 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003197 checkmem(yyval.a_expr);
3198 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3199 yyval.a_expr->meta_type = AMT_VALUE;
3200 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00003201 ;
3202 break;}
vlm0aa86902004-10-12 23:26:53 +00003203case 247:
3204#line 1894 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003205{
vlm39e5ed72004-09-05 10:40:41 +00003206 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003207 checkmem(yyval.a_expr);
3208 yyval.a_expr->Identifier = strdup("...");
3209 checkmem(yyval.a_expr->Identifier);
3210 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3211 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00003212 ;
3213 break;}
vlm0aa86902004-10-12 23:26:53 +00003214case 248:
3215#line 1905 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003216{
vlmec8f6812004-08-22 03:19:54 +00003217 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3218 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00003219 ;
3220 break;}
vlm0aa86902004-10-12 23:26:53 +00003221case 249:
3222#line 1909 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003223{
3224 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3225 checkmem(yyval.a_value);
3226 ;
vlm6a02a8a2004-09-08 00:28:11 +00003227 break;}
vlm0aa86902004-10-12 23:26:53 +00003228case 250:
3229#line 1940 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003230{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
vlm6a02a8a2004-09-08 00:28:11 +00003231 break;}
vlm0aa86902004-10-12 23:26:53 +00003232case 251:
3233#line 1941 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003234{ yyval.a_tag = yyvsp[0].a_tag; ;
3235 break;}
vlm0aa86902004-10-12 23:26:53 +00003236case 252:
3237#line 1945 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003238{
vlm2728a8d2005-01-23 09:51:44 +00003239 yyval.a_tag = yyvsp[-1].a_tag;
3240 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
vlm6a02a8a2004-09-08 00:28:11 +00003241 ;
3242 break;}
vlm0aa86902004-10-12 23:26:53 +00003243case 253:
vlm2728a8d2005-01-23 09:51:44 +00003244#line 1952 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003245{
vlm2728a8d2005-01-23 09:51:44 +00003246 yyval.a_tag = yyvsp[-2].a_tag;
3247 yyval.a_tag.tag_value = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00003248 ;
3249 break;}
vlm0aa86902004-10-12 23:26:53 +00003250case 254:
vlm2728a8d2005-01-23 09:51:44 +00003251#line 1958 "asn1p_y.y"
3252{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
vlm6a02a8a2004-09-08 00:28:11 +00003253 break;}
vlm151c0b22004-09-22 16:03:36 +00003254case 255:
vlm2728a8d2005-01-23 09:51:44 +00003255#line 1959 "asn1p_y.y"
3256{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
vlm151c0b22004-09-22 16:03:36 +00003257 break;}
3258case 256:
vlm2728a8d2005-01-23 09:51:44 +00003259#line 1960 "asn1p_y.y"
3260{ yyval.a_tag.tag_class = TC_APPLICATION; ;
vlm0aa86902004-10-12 23:26:53 +00003261 break;}
3262case 257:
vlm2728a8d2005-01-23 09:51:44 +00003263#line 1961 "asn1p_y.y"
3264{ yyval.a_tag.tag_class = TC_PRIVATE; ;
3265 break;}
3266case 258:
3267#line 1965 "asn1p_y.y"
3268{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3269 break;}
3270case 259:
3271#line 1966 "asn1p_y.y"
3272{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3273 break;}
3274case 260:
3275#line 1967 "asn1p_y.y"
3276{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3277 break;}
3278case 261:
3279#line 1971 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00003280{
3281 checkmem(yyvsp[0].tv_str);
3282 yyval.tv_str = yyvsp[0].tv_str;
3283 ;
3284 break;}
vlm2728a8d2005-01-23 09:51:44 +00003285case 262:
3286#line 1975 "asn1p_y.y"
3287{
3288 checkmem(yyvsp[0].tv_str);
3289 yyval.tv_str = yyvsp[0].tv_str;
3290 ;
3291 break;}
3292case 263:
3293#line 1983 "asn1p_y.y"
3294{
3295 checkmem(yyvsp[0].tv_str);
3296 yyval.tv_str = yyvsp[0].tv_str;
3297 ;
3298 break;}
3299case 264:
3300#line 1990 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00003301{ yyval.tv_str = 0; ;
3302 break;}
vlm2728a8d2005-01-23 09:51:44 +00003303case 265:
3304#line 1991 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00003305{
3306 yyval.tv_str = yyvsp[0].tv_str;
3307 ;
3308 break;}
vlm2728a8d2005-01-23 09:51:44 +00003309case 266:
3310#line 1996 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003311{
vlm39e5ed72004-09-05 10:40:41 +00003312 checkmem(yyvsp[0].tv_str);
3313 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003314 ;
3315 break;}
vlm6a02a8a2004-09-08 00:28:11 +00003316}
3317 /* the action file gets copied in in place of this dollarsign */
3318#line 543 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00003319
3320 yyvsp -= yylen;
3321 yyssp -= yylen;
vlm6a02a8a2004-09-08 00:28:11 +00003322#ifdef YYLSP_NEEDED
3323 yylsp -= yylen;
3324#endif
vlmfa67ddc2004-06-03 03:38:44 +00003325
vlm6a02a8a2004-09-08 00:28:11 +00003326#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00003327 if (yydebug)
3328 {
vlm6a02a8a2004-09-08 00:28:11 +00003329 short *ssp1 = yyss - 1;
3330 fprintf (stderr, "state stack now");
3331 while (ssp1 != yyssp)
3332 fprintf (stderr, " %d", *++ssp1);
3333 fprintf (stderr, "\n");
vlmfa67ddc2004-06-03 03:38:44 +00003334 }
3335#endif
3336
3337 *++yyvsp = yyval;
3338
vlm6a02a8a2004-09-08 00:28:11 +00003339#ifdef YYLSP_NEEDED
3340 yylsp++;
3341 if (yylen == 0)
3342 {
3343 yylsp->first_line = yylloc.first_line;
3344 yylsp->first_column = yylloc.first_column;
3345 yylsp->last_line = (yylsp-1)->last_line;
3346 yylsp->last_column = (yylsp-1)->last_column;
3347 yylsp->text = 0;
3348 }
3349 else
3350 {
3351 yylsp->last_line = (yylsp+yylen-1)->last_line;
3352 yylsp->last_column = (yylsp+yylen-1)->last_column;
3353 }
3354#endif
vlmfa67ddc2004-06-03 03:38:44 +00003355
vlm6a02a8a2004-09-08 00:28:11 +00003356 /* Now "shift" the result of the reduction.
3357 Determine what state that goes to,
3358 based on the state we popped back to
3359 and the rule number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00003360
3361 yyn = yyr1[yyn];
3362
vlm6a02a8a2004-09-08 00:28:11 +00003363 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3364 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00003365 yystate = yytable[yystate];
3366 else
vlm6a02a8a2004-09-08 00:28:11 +00003367 yystate = yydefgoto[yyn - YYNTBASE];
vlmfa67ddc2004-06-03 03:38:44 +00003368
3369 goto yynewstate;
3370
vlm6a02a8a2004-09-08 00:28:11 +00003371yyerrlab: /* here on detecting error */
vlmfa67ddc2004-06-03 03:38:44 +00003372
vlm6a02a8a2004-09-08 00:28:11 +00003373 if (! yyerrstatus)
3374 /* If not already recovering from an error, report this error. */
vlmfa67ddc2004-06-03 03:38:44 +00003375 {
3376 ++yynerrs;
vlm6a02a8a2004-09-08 00:28:11 +00003377
3378#ifdef YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00003379 yyn = yypact[yystate];
3380
vlm6a02a8a2004-09-08 00:28:11 +00003381 if (yyn > YYFLAG && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00003382 {
vlm6a02a8a2004-09-08 00:28:11 +00003383 int size = 0;
3384 char *msg;
3385 int x, count;
vlmfa67ddc2004-06-03 03:38:44 +00003386
vlm6a02a8a2004-09-08 00:28:11 +00003387 count = 0;
3388 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3389 for (x = (yyn < 0 ? -yyn : 0);
3390 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3391 if (yycheck[x + yyn] == x)
3392 size += strlen(yytname[x]) + 15, count++;
3393 msg = (char *) malloc(size + 15);
3394 if (msg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00003395 {
vlm6a02a8a2004-09-08 00:28:11 +00003396 strcpy(msg, "parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003397
vlm6a02a8a2004-09-08 00:28:11 +00003398 if (count < 5)
vlmfa67ddc2004-06-03 03:38:44 +00003399 {
vlm6a02a8a2004-09-08 00:28:11 +00003400 count = 0;
3401 for (x = (yyn < 0 ? -yyn : 0);
3402 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3403 if (yycheck[x + yyn] == x)
vlmfa67ddc2004-06-03 03:38:44 +00003404 {
vlm6a02a8a2004-09-08 00:28:11 +00003405 strcat(msg, count == 0 ? ", expecting `" : " or `");
3406 strcat(msg, yytname[x]);
3407 strcat(msg, "'");
3408 count++;
vlmfa67ddc2004-06-03 03:38:44 +00003409 }
3410 }
vlm6a02a8a2004-09-08 00:28:11 +00003411 yyerror(msg);
3412 free(msg);
vlmfa67ddc2004-06-03 03:38:44 +00003413 }
3414 else
vlm6a02a8a2004-09-08 00:28:11 +00003415 yyerror ("parse error; also virtual memory exceeded");
vlmfa67ddc2004-06-03 03:38:44 +00003416 }
3417 else
3418#endif /* YYERROR_VERBOSE */
vlm6a02a8a2004-09-08 00:28:11 +00003419 yyerror("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003420 }
vlm6a02a8a2004-09-08 00:28:11 +00003421
vlmfa67ddc2004-06-03 03:38:44 +00003422 goto yyerrlab1;
vlm6a02a8a2004-09-08 00:28:11 +00003423yyerrlab1: /* here on error raised explicitly by an action */
vlmfa67ddc2004-06-03 03:38:44 +00003424
3425 if (yyerrstatus == 3)
3426 {
vlm6a02a8a2004-09-08 00:28:11 +00003427 /* if just tried and failed to reuse lookahead token after an error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00003428
vlm6a02a8a2004-09-08 00:28:11 +00003429 /* return failure if at end of input */
vlmfa67ddc2004-06-03 03:38:44 +00003430 if (yychar == YYEOF)
vlm6a02a8a2004-09-08 00:28:11 +00003431 YYABORT;
vlmfa67ddc2004-06-03 03:38:44 +00003432
vlm6a02a8a2004-09-08 00:28:11 +00003433#if YYDEBUG != 0
3434 if (yydebug)
3435 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3436#endif
3437
vlmfa67ddc2004-06-03 03:38:44 +00003438 yychar = YYEMPTY;
3439 }
3440
vlm6a02a8a2004-09-08 00:28:11 +00003441 /* Else will try to reuse lookahead token
3442 after shifting the error token. */
vlmfa67ddc2004-06-03 03:38:44 +00003443
vlm6a02a8a2004-09-08 00:28:11 +00003444 yyerrstatus = 3; /* Each real token shifted decrements this */
vlmfa67ddc2004-06-03 03:38:44 +00003445
vlm6a02a8a2004-09-08 00:28:11 +00003446 goto yyerrhandle;
vlm80103492004-09-07 10:39:09 +00003447
vlm6a02a8a2004-09-08 00:28:11 +00003448yyerrdefault: /* current state does not do anything special for the error token. */
vlm80103492004-09-07 10:39:09 +00003449
vlm6a02a8a2004-09-08 00:28:11 +00003450#if 0
3451 /* This is wrong; only states that explicitly want error tokens
3452 should shift them. */
3453 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3454 if (yyn) goto yydefault;
vlm39e5ed72004-09-05 10:40:41 +00003455#endif
vlm6a02a8a2004-09-08 00:28:11 +00003456
3457yyerrpop: /* pop the current state because it cannot handle the error token */
3458
3459 if (yyssp == yyss) YYABORT;
3460 yyvsp--;
3461 yystate = *--yyssp;
3462#ifdef YYLSP_NEEDED
3463 yylsp--;
3464#endif
3465
3466#if YYDEBUG != 0
3467 if (yydebug)
3468 {
3469 short *ssp1 = yyss - 1;
3470 fprintf (stderr, "Error: state stack now");
3471 while (ssp1 != yyssp)
3472 fprintf (stderr, " %d", *++ssp1);
3473 fprintf (stderr, "\n");
vlm39e5ed72004-09-05 10:40:41 +00003474 }
vlm6a02a8a2004-09-08 00:28:11 +00003475#endif
3476
3477yyerrhandle:
3478
3479 yyn = yypact[yystate];
3480 if (yyn == YYFLAG)
3481 goto yyerrdefault;
3482
3483 yyn += YYTERROR;
3484 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3485 goto yyerrdefault;
3486
3487 yyn = yytable[yyn];
3488 if (yyn < 0)
3489 {
3490 if (yyn == YYFLAG)
3491 goto yyerrpop;
3492 yyn = -yyn;
3493 goto yyreduce;
3494 }
3495 else if (yyn == 0)
3496 goto yyerrpop;
vlmfa67ddc2004-06-03 03:38:44 +00003497
3498 if (yyn == YYFINAL)
3499 YYACCEPT;
3500
vlm6a02a8a2004-09-08 00:28:11 +00003501#if YYDEBUG != 0
3502 if (yydebug)
3503 fprintf(stderr, "Shifting error token, ");
3504#endif
vlmfa67ddc2004-06-03 03:38:44 +00003505
3506 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00003507#ifdef YYLSP_NEEDED
3508 *++yylsp = yylloc;
3509#endif
vlmfa67ddc2004-06-03 03:38:44 +00003510
3511 yystate = yyn;
3512 goto yynewstate;
3513
vlm6a02a8a2004-09-08 00:28:11 +00003514 yyacceptlab:
3515 /* YYACCEPT comes here. */
3516 if (yyfree_stacks)
3517 {
3518 free (yyss);
3519 free (yyvs);
3520#ifdef YYLSP_NEEDED
3521 free (yyls);
vlm044f7442004-09-04 04:49:21 +00003522#endif
vlm6a02a8a2004-09-08 00:28:11 +00003523 }
3524 return 0;
vlm80103492004-09-07 10:39:09 +00003525
vlm6a02a8a2004-09-08 00:28:11 +00003526 yyabortlab:
3527 /* YYABORT comes here. */
3528 if (yyfree_stacks)
3529 {
3530 free (yyss);
3531 free (yyvs);
3532#ifdef YYLSP_NEEDED
3533 free (yyls);
vlm80103492004-09-07 10:39:09 +00003534#endif
vlm6a02a8a2004-09-08 00:28:11 +00003535 }
3536 return 1;
vlmfa67ddc2004-06-03 03:38:44 +00003537}
vlm2728a8d2005-01-23 09:51:44 +00003538#line 2002 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00003539
3540
3541
3542/*
3543 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3544 */
3545static asn1p_value_t *
3546_convert_bitstring2binary(char *str, int base) {
3547 asn1p_value_t *val;
3548 int slen;
3549 int memlen;
3550 int baselen;
3551 int bits;
3552 uint8_t *binary_vector;
3553 uint8_t *bv_ptr;
3554 uint8_t cur_val;
3555
3556 assert(str);
3557 assert(str[0] == '\'');
3558
3559 switch(base) {
3560 case 'B':
3561 baselen = 1;
3562 break;
3563 case 'H':
3564 baselen = 4;
3565 break;
3566 default:
3567 assert(base == 'B' || base == 'H');
3568 errno = EINVAL;
3569 return NULL;
3570 }
3571
3572 slen = strlen(str);
3573 assert(str[slen - 1] == base);
3574 assert(str[slen - 2] == '\'');
3575
3576 memlen = slen / (8 / baselen); /* Conservative estimate */
3577
3578 bv_ptr = binary_vector = malloc(memlen + 1);
3579 if(bv_ptr == NULL)
3580 /* ENOMEM */
3581 return NULL;
3582
3583 cur_val = 0;
3584 bits = 0;
3585 while(*(++str) != '\'') {
3586 switch(baselen) {
3587 case 1:
3588 switch(*str) {
3589 case '1':
3590 cur_val |= 1 << (7 - (bits % 8));
3591 case '0':
3592 break;
3593 default:
3594 assert(!"_y UNREACH1");
3595 case ' ': case '\r': case '\n':
3596 continue;
3597 }
3598 break;
3599 case 4:
3600 switch(*str) {
3601 case '0': case '1': case '2': case '3': case '4':
3602 case '5': case '6': case '7': case '8': case '9':
3603 cur_val |= (*str - '0') << (4 - (bits % 8));
3604 break;
3605 case 'A': case 'B': case 'C':
3606 case 'D': case 'E': case 'F':
3607 cur_val |= ((*str - 'A') + 10)
3608 << (4 - (bits % 8));
3609 break;
3610 default:
3611 assert(!"_y UNREACH2");
3612 case ' ': case '\r': case '\n':
3613 continue;
3614 }
3615 break;
3616 }
3617
3618 bits += baselen;
3619 if((bits % 8) == 0) {
3620 *bv_ptr++ = cur_val;
3621 cur_val = 0;
3622 }
3623 }
3624
3625 *bv_ptr = cur_val;
3626 assert((bv_ptr - binary_vector) <= memlen);
3627
3628 val = asn1p_value_frombits(binary_vector, bits, 0);
3629 if(val == NULL) {
3630 free(binary_vector);
3631 }
3632
3633 return val;
3634}
3635
3636extern char *asn1p_text;
3637
3638int
3639yyerror(const char *msg) {
3640 fprintf(stderr,
3641 "ASN.1 grammar parse error "
3642 "near line %d (token \"%s\"): %s\n",
vlm39e5ed72004-09-05 10:40:41 +00003643 yylineno, asn1p_text, msg);
vlmfa67ddc2004-06-03 03:38:44 +00003644 return -1;
3645}
3646
3647