blob: 70d1a1087b0daa473ebd61d01bd4ca573f1062a6 [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
vlm4053ca52005-02-18 16:34:21 +0000207#define YYFINAL 417
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,
vlm4053ca52005-02-18 16:34:21 +0000261 204, 208, 210, 214, 216, 218, 219, 221, 223, 227,
262 231, 235, 237, 239, 243, 246, 248, 254, 255, 257,
263 259, 263, 266, 271, 276, 277, 279, 280, 287, 289,
264 292, 294, 296, 298, 302, 306, 310, 312, 314, 319,
265 324, 329, 336, 343, 345, 350, 355, 357, 361, 363,
266 367, 371, 375, 377, 381, 383, 387, 389, 391, 393,
267 395, 400, 404, 405, 409, 411, 413, 415, 417, 419,
268 421, 423, 425, 427, 431, 433, 436, 438, 440, 442,
269 444, 447, 450, 452, 454, 457, 460, 462, 464, 466,
270 468, 471, 473, 476, 478, 480, 482, 484, 486, 488,
271 490, 492, 494, 496, 498, 500, 502, 504, 506, 508,
272 510, 512, 514, 515, 517, 519, 524, 528, 533, 535,
273 539, 545, 547, 551, 555, 559, 564, 568, 570, 574,
274 578, 582, 586, 588, 590, 592, 595, 598, 602, 604,
275 606, 608, 610, 612, 614, 616, 618, 624, 626, 630,
276 632, 636, 637, 639, 641, 643, 645, 647, 649, 653,
277 658, 660, 664, 667, 671, 673, 677, 678, 680, 682,
278 685, 688, 692, 694, 698, 700, 705, 710, 712, 714,
279 716, 718, 719, 721, 724, 729, 730, 732, 734, 736,
280 737, 739, 741, 743, 745, 747, 748, 750
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,
vlm4053ca52005-02-18 16:34:21 +0000303 108, 145, 0, 213, 0, 213, 109, 216, 0, 213,
304 109, 213, 0, 175, 109, 216, 0, 147, 0, 146,
305 108, 147, 0, 163, 0, 216, 0, 0, 149, 0,
306 150, 0, 149, 108, 150, 0, 216, 163, 202, 0,
307 30, 68, 163, 0, 162, 0, 152, 0, 151, 108,
308 152, 0, 216, 163, 0, 162, 0, 28, 103, 155,
309 104, 157, 0, 0, 88, 0, 156, 0, 155, 108,
310 156, 0, 168, 202, 0, 168, 163, 154, 202, 0,
311 168, 168, 154, 202, 0, 0, 158, 0, 0, 95,
312 82, 103, 159, 160, 104, 0, 161, 0, 160, 161,
313 0, 4, 0, 168, 0, 102, 0, 102, 110, 173,
314 0, 102, 110, 207, 0, 208, 164, 182, 0, 177,
315 0, 178, 0, 27, 103, 151, 104, 0, 78, 103,
316 148, 104, 0, 79, 103, 148, 104, 0, 78, 182,
317 68, 215, 208, 164, 0, 79, 182, 68, 215, 208,
318 164, 0, 18, 0, 18, 35, 25, 216, 0, 213,
319 103, 146, 104, 0, 165, 0, 56, 68, 165, 0,
320 11, 0, 11, 111, 213, 0, 214, 111, 213, 0,
321 11, 111, 216, 0, 214, 0, 214, 111, 166, 0,
322 167, 0, 166, 111, 167, 0, 169, 0, 169, 0,
323 13, 0, 14, 0, 216, 139, 3, 171, 0, 216,
324 109, 171, 0, 0, 103, 172, 174, 0, 63, 0,
325 45, 0, 86, 0, 5, 0, 7, 0, 6, 0,
326 207, 0, 173, 0, 216, 0, 213, 111, 216, 0,
327 4, 0, 174, 4, 0, 24, 0, 63, 0, 76,
328 0, 176, 0, 67, 81, 0, 65, 51, 0, 77,
329 0, 44, 0, 36, 71, 0, 26, 81, 0, 91,
330 0, 47, 0, 58, 0, 40, 0, 22, 81, 0,
331 175, 0, 176, 204, 0, 23, 0, 48, 0, 49,
332 0, 50, 0, 59, 0, 64, 0, 74, 0, 83,
333 0, 85, 0, 90, 0, 92, 0, 93, 0, 94,
334 0, 66, 0, 99, 0, 100, 0, 97, 0, 98,
335 0, 96, 0, 0, 183, 0, 184, 0, 80, 105,
336 185, 106, 0, 105, 185, 106, 0, 184, 105, 185,
337 106, 0, 186, 0, 186, 108, 102, 0, 186, 108,
338 102, 108, 186, 0, 187, 0, 186, 179, 187, 0,
339 186, 180, 187, 0, 187, 181, 187, 0, 189, 105,
340 185, 106, 0, 105, 185, 106, 0, 190, 0, 190,
341 188, 190, 0, 61, 188, 190, 0, 190, 188, 60,
342 0, 61, 188, 60, 0, 196, 0, 191, 0, 101,
343 0, 101, 112, 0, 112, 101, 0, 112, 101, 112,
344 0, 80, 0, 46, 0, 45, 0, 86, 0, 207,
345 0, 6, 0, 216, 0, 213, 0, 95, 30, 103,
346 192, 104, 0, 193, 0, 192, 108, 193, 0, 102,
347 0, 216, 182, 194, 0, 0, 195, 0, 73, 0,
348 15, 0, 69, 0, 197, 0, 198, 0, 103, 213,
349 104, 0, 197, 103, 199, 104, 0, 200, 0, 199,
350 108, 200, 0, 113, 201, 0, 113, 111, 201, 0,
351 216, 0, 201, 111, 216, 0, 0, 203, 0, 69,
352 0, 33, 171, 0, 103, 104, 0, 103, 205, 104,
353 0, 206, 0, 205, 108, 206, 0, 216, 0, 216,
354 105, 207, 106, 0, 216, 105, 173, 106, 0, 207,
355 0, 102, 0, 9, 0, 10, 0, 0, 209, 0,
356 210, 212, 0, 114, 211, 9, 115, 0, 0, 89,
357 0, 19, 0, 75, 0, 0, 52, 0, 41, 0,
358 11, 0, 12, 0, 12, 0, 0, 216, 0, 8,
359 0
vlm6a02a8a2004-09-08 00:28:11 +0000360};
vlmfa67ddc2004-06-03 03:38:44 +0000361
362#endif
363
vlm6a02a8a2004-09-08 00:28:11 +0000364#if YYDEBUG != 0
365static const short yyrline[] = { 0,
vlm0aa86902004-10-12 23:26:53 +0000366 301, 307, 313, 329, 354, 356, 359, 363, 368, 375,
367 383, 388, 392, 401, 403, 411, 415, 423, 427, 430,
368 433, 437, 457, 459, 467, 471, 503, 507, 516, 523,
369 536, 543, 545, 557, 570, 577, 582, 588, 594, 603,
370 609, 615, 622, 628, 636, 640, 643, 650, 656, 662,
371 669, 675, 684, 694, 702, 710, 712, 722, 725, 729,
372 732, 744, 756, 762, 778, 787, 797, 807, 812, 819,
vlm4053ca52005-02-18 16:34:21 +0000373 826, 836, 842, 848, 852, 875, 877, 879, 885, 891,
374 898, 905, 910, 916, 922, 928, 933, 943, 945, 948,
375 956, 962, 971, 977, 994, 996, 1001, 1005, 1010, 1015,
376 1021, 1025, 1036, 1045, 1054, 1065, 1087, 1091, 1097, 1103,
377 1109, 1115, 1125, 1135, 1141, 1155, 1179, 1186, 1200, 1209,
378 1219, 1229, 1239, 1247, 1268, 1277, 1286, 1287, 1289, 1296,
379 1308, 1318, 1326, 1326, 1331, 1336, 1341, 1346, 1350, 1354,
380 1358, 1361, 1366, 1378, 1394, 1405, 1419, 1421, 1422, 1423,
381 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1437, 1439,
382 1440, 1443, 1450, 1462, 1464, 1468, 1472, 1473, 1474, 1475,
383 1476, 1480, 1481, 1482, 1483, 1487, 1488, 1495, 1495, 1496,
384 1496, 1497, 1499, 1501, 1506, 1510, 1519, 1523, 1528, 1532,
385 1538, 1548, 1552, 1555, 1558, 1563, 1572, 1580, 1586, 1593,
386 1601, 1609, 1618, 1621, 1626, 1628, 1629, 1630, 1633, 1637,
387 1642, 1648, 1653, 1656, 1660, 1671, 1684, 1690, 1694, 1699,
388 1705, 1717, 1719, 1722, 1726, 1729, 1734, 1738, 1746, 1761,
389 1767, 1774, 1787, 1799, 1814, 1818, 1835, 1840, 1843, 1848,
390 1870, 1875, 1880, 1886, 1892, 1900, 1908, 1916, 1923, 1933,
391 1938, 1968, 1970, 1973, 1980, 1986, 1988, 1989, 1990, 1993,
392 1995, 1996, 1999, 2004, 2011, 2018, 2020, 2024
vlm6a02a8a2004-09-08 00:28:11 +0000393};
394#endif
395
396
397#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
398
399static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
400"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
401"TOK_number_negative","TOK_typereference","TOK_capitalreference","TOK_typefieldreference",
402"TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY",
403"TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN",
404"TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS",
405"TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED",
406"TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL","TOK_END","TOK_ENUMERATED",
407"TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE",
408"TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString","TOK_GraphicString","TOK_IA5String",
409"TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE",
410"TOK_INSTRUCTIONS","TOK_INTEGER","TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY",
411"TOK_NULL","TOK_NumericString","TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET",
412"TOK_OF","TOK_OPTIONAL","TOK_PATTERN","TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT",
413"TOK_PrintableString","TOK_PRIVATE","TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE",
414"TOK_SET","TOK_SIZE","TOK_STRING","TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString",
415"TOK_TRUE","TOK_TYPE_IDENTIFIER","TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString",
416"TOK_UTCTime","TOK_UTF8String","TOK_VideotexString","TOK_VisibleString","TOK_WITH",
417"TOK_EXCEPT","'^'","TOK_INTERSECTION","'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots",
vlm2728a8d2005-01-23 09:51:44 +0000418"'{'","'}'","'('","')'","';'","','","':'","'!'","'.'","'<'","'@'","'['","']'",
vlm6a02a8a2004-09-08 00:28:11 +0000419"ParsedGrammar","ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
420"ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags",
421"ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody",
422"ModuleSpecificationBody","ModuleSpecificationElement","@1","ImportsDefinition",
423"ImportsBundleSet","ImportsBundle","ImportsList","ImportsElement","ExportsDefinition",
424"ExportsBody","ExportsElement","ValueSetDefinition","DefinedTypeRef","optValueSetBody",
425"ValueSetBody","ValueSetElement","DataTypeReference","ParameterArgumentList",
vlm0aa86902004-10-12 23:26:53 +0000426"ParameterArgumentName","ActualParameterList","ActualParameter","optComponentTypeLists",
427"ComponentTypeLists","ComponentType","AlternativeTypeLists","AlternativeType",
428"ClassDeclaration","optUnique","ClassFieldList","ClassField","optWithSyntax",
429"WithSyntax","@2","WithSyntaxFormat","WithSyntaxFormatToken","ExtensionAndException",
430"Type","TypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList",
431"ComplexTypeReferenceElement","ClassFieldIdentifier","ClassFieldName","ValueDefinition",
432"Value","@3","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
433"BasicType","BasicString","Union","Intersection","Except","optConstraints","Constraints",
434"SetOfConstraints","ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement",
435"ConstraintRangeSpec","ConstraintSpec","ConstraintValue","WithComponents","WithComponentsList",
436"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
437"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
438"ComponentIdList","optMarker","Marker","UniverationDefinition","UniverationList",
vlm2728a8d2005-01-23 09:51:44 +0000439"UniverationElement","SignedNumber","optTag","Tag","TagTypeValue","TagClass",
440"TagPlicit","TypeRefName","ObjectClassReference","optIdentifier","Identifier", NULL
vlm6a02a8a2004-09-08 00:28:11 +0000441};
442#endif
443
444static const short yyr1[] = { 0,
vlm2728a8d2005-01-23 09:51:44 +0000445 116, 117, 117, 118, 119, 119, 120, 120, 121, 121,
446 122, 122, 122, 123, 123, 124, 124, 125, 125, 125,
447 125, 125, 126, 126, 127, 127, 128, 128, 128, 128,
448 128, 129, 128, 128, 130, 130, 131, 131, 132, 133,
449 133, 134, 134, 134, 135, 135, 135, 136, 136, 137,
450 137, 137, 138, 139, 139, 140, 140, 141, 141, 142,
451 142, 143, 143, 143, 143, 144, 144, 145, 145, 145,
vlm4053ca52005-02-18 16:34:21 +0000452 145, 146, 146, 147, 147, 148, 148, 149, 149, 150,
453 150, 150, 151, 151, 152, 152, 153, 154, 154, 155,
454 155, 156, 156, 156, 157, 157, 159, 158, 160, 160,
455 161, 161, 162, 162, 162, 163, 164, 164, 164, 164,
456 164, 164, 164, 164, 164, 164, 164, 164, 165, 165,
457 165, 165, 165, 165, 166, 166, 167, 168, 169, 169,
458 170, 171, 172, 171, 171, 171, 171, 171, 171, 171,
459 171, 171, 173, 173, 174, 174, 175, 175, 175, 175,
460 175, 175, 175, 175, 175, 175, 175, 175, 176, 176,
461 176, 177, 177, 178, 178, 178, 178, 178, 178, 178,
462 178, 178, 178, 178, 178, 178, 178, 179, 179, 180,
463 180, 181, 182, 182, 183, 183, 184, 184, 185, 185,
464 185, 186, 186, 186, 186, 187, 187, 187, 187, 187,
465 187, 187, 187, 187, 188, 188, 188, 188, 189, 189,
466 190, 190, 190, 190, 190, 190, 191, 192, 192, 193,
467 193, 194, 194, 195, 195, 195, 196, 196, 197, 198,
468 199, 199, 200, 200, 201, 201, 202, 202, 203, 203,
469 204, 204, 205, 205, 206, 206, 206, 206, 206, 207,
470 207, 208, 208, 209, 210, 211, 211, 211, 211, 212,
471 212, 212, 213, 213, 214, 215, 215, 216
vlm6a02a8a2004-09-08 00:28:11 +0000472};
473
474static const short yyr2[] = { 0,
475 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
476 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
477 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
478 1, 0, 3, 1, 3, 2, 1, 2, 4, 1,
vlm0aa86902004-10-12 23:26:53 +0000479 3, 1, 3, 1, 3, 3, 2, 1, 3, 1,
480 3, 1, 6, 1, 1, 0, 1, 1, 3, 1,
481 1, 4, 3, 3, 6, 1, 3, 1, 3, 3,
vlm4053ca52005-02-18 16:34:21 +0000482 3, 1, 3, 1, 1, 0, 1, 1, 3, 3,
483 3, 1, 1, 3, 2, 1, 5, 0, 1, 1,
484 3, 2, 4, 4, 0, 1, 0, 6, 1, 2,
485 1, 1, 1, 3, 3, 3, 1, 1, 4, 4,
486 4, 6, 6, 1, 4, 4, 1, 3, 1, 3,
487 3, 3, 1, 3, 1, 3, 1, 1, 1, 1,
488 4, 3, 0, 3, 1, 1, 1, 1, 1, 1,
489 1, 1, 1, 3, 1, 2, 1, 1, 1, 1,
490 2, 2, 1, 1, 2, 2, 1, 1, 1, 1,
491 2, 1, 2, 1, 1, 1, 1, 1, 1, 1,
vlm6a02a8a2004-09-08 00:28:11 +0000492 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
vlm4053ca52005-02-18 16:34:21 +0000493 1, 1, 0, 1, 1, 4, 3, 4, 1, 3,
494 5, 1, 3, 3, 3, 4, 3, 1, 3, 3,
495 3, 3, 1, 1, 1, 2, 2, 3, 1, 1,
496 1, 1, 1, 1, 1, 1, 5, 1, 3, 1,
497 3, 0, 1, 1, 1, 1, 1, 1, 3, 4,
498 1, 3, 2, 3, 1, 3, 0, 1, 1, 2,
499 2, 3, 1, 3, 1, 4, 4, 1, 1, 1,
500 1, 0, 1, 2, 4, 0, 1, 1, 1, 0,
501 1, 1, 1, 1, 1, 0, 1, 1
vlm6a02a8a2004-09-08 00:28:11 +0000502};
503
504static const short yydefact[] = { 0,
vlm4053ca52005-02-18 16:34:21 +0000505 263, 264, 1, 2, 5, 3, 0, 0, 6, 268,
vlm6a02a8a2004-09-08 00:28:11 +0000506 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
507 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
vlm4053ca52005-02-18 16:34:21 +0000508 18, 21, 19, 0, 17, 12, 23, 164, 0, 0,
509 165, 166, 167, 0, 168, 169, 177, 170, 171, 172,
510 173, 174, 175, 176, 0, 24, 25, 27, 28, 31,
vlm0aa86902004-10-12 23:26:53 +0000511 29, 30, 34, 0, 0, 32, 0, 47, 0, 48,
512 50, 52, 36, 0, 37, 0, 40, 42, 44, 4,
vlm4053ca52005-02-18 16:34:21 +0000513 26, 252, 119, 265, 0, 147, 0, 0, 160, 154,
514 158, 159, 148, 0, 0, 149, 153, 157, 0, 0,
515 54, 55, 150, 123, 0, 33, 46, 45, 0, 0,
516 35, 38, 0, 0, 0, 0, 256, 64, 63, 0,
517 253, 260, 0, 161, 156, 155, 152, 151, 0, 66,
vlm2728a8d2005-01-23 09:51:44 +0000518 0, 68, 0, 0, 0, 49, 51, 5, 41, 43,
vlm4053ca52005-02-18 16:34:21 +0000519 0, 258, 259, 257, 0, 119, 265, 114, 0, 0,
520 183, 183, 62, 183, 117, 162, 150, 107, 108, 0,
521 262, 261, 254, 120, 122, 0, 0, 0, 0, 56,
522 129, 130, 124, 125, 127, 121, 138, 140, 139, 250,
523 251, 136, 135, 137, 133, 131, 142, 141, 0, 143,
524 39, 0, 90, 252, 128, 0, 0, 0, 0, 0,
525 76, 0, 0, 184, 185, 76, 0, 106, 0, 163,
526 252, 252, 67, 71, 70, 69, 214, 211, 210, 0,
527 209, 212, 0, 60, 0, 0, 0, 57, 58, 61,
528 192, 0, 198, 204, 203, 227, 228, 213, 216, 215,
529 0, 0, 0, 0, 95, 0, 0, 239, 88, 88,
530 92, 238, 0, 255, 0, 103, 0, 83, 86, 252,
531 118, 0, 0, 0, 77, 78, 82, 252, 0, 189,
532 266, 0, 0, 266, 249, 241, 0, 243, 248, 245,
533 0, 72, 74, 75, 65, 205, 0, 0, 0, 0,
534 0, 53, 0, 180, 181, 178, 179, 0, 0, 182,
535 0, 0, 0, 0, 126, 145, 134, 144, 132, 0,
536 87, 96, 91, 240, 89, 237, 237, 115, 0, 109,
537 0, 85, 0, 252, 110, 0, 237, 187, 0, 252,
538 267, 0, 111, 252, 242, 0, 0, 116, 252, 206,
539 207, 202, 200, 0, 229, 197, 59, 193, 194, 195,
540 0, 201, 199, 0, 0, 231, 146, 0, 93, 94,
541 104, 105, 143, 84, 186, 81, 79, 80, 190, 0,
542 188, 0, 244, 0, 0, 73, 208, 220, 0, 218,
543 183, 196, 0, 233, 235, 230, 0, 97, 0, 112,
544 113, 247, 246, 217, 0, 222, 234, 0, 232, 0,
545 191, 219, 225, 226, 224, 221, 223, 236, 101, 0,
546 99, 102, 98, 100, 0, 0, 0
vlm6a02a8a2004-09-08 00:28:11 +0000547};
548
vlm4053ca52005-02-18 16:34:21 +0000549static const short yydefgoto[] = { 415,
vlm6a02a8a2004-09-08 00:28:11 +0000550 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
551 56, 57, 106, 58, 74, 75, 76, 77, 59, 69,
vlm4053ca52005-02-18 16:34:21 +0000552 70, 60, 100, 227, 228, 229, 61, 129, 130, 281,
553 282, 264, 265, 266, 257, 258, 118, 316, 192, 193,
554 311, 312, 400, 410, 411, 267, 283, 154, 155, 173,
555 174, 194, 195, 62, 186, 242, 187, 307, 156, 103,
556 158, 159, 298, 299, 301, 203, 204, 205, 269, 270,
557 231, 288, 232, 233, 234, 379, 380, 406, 407, 235,
558 236, 237, 355, 356, 384, 251, 252, 210, 277, 278,
559 238, 253, 121, 122, 145, 163, 239, 104, 330, 240
vlm6a02a8a2004-09-08 00:28:11 +0000560};
561
vlm4053ca52005-02-18 16:34:21 +0000562static const short yypact[] = { 148,
563-32768,-32768, 148,-32768, -58,-32768, 45, 43,-32768,-32768,
564-32768,-32768, 53,-32768, -13, 144,-32768,-32768, 97, 68,
565 59, 83, 84, 95, 189, 144,-32768, 89,-32768,-32768,
566-32768,-32768,-32768, 180,-32768,-32768, 367,-32768, 191, 35,
567-32768,-32768,-32768, 201,-32768,-32768,-32768,-32768,-32768,-32768,
568-32768,-32768,-32768,-32768, 167, 367,-32768,-32768,-32768,-32768,
569-32768,-32768,-32768, 257, 581,-32768, 108,-32768, 69,-32768,
570 114,-32768,-32768, 16,-32768, -23,-32768, 122,-32768,-32768,
571-32768, -10, 133,-32768, 160,-32768, 165, 181,-32768,-32768,
572-32768,-32768,-32768, 214, 190,-32768,-32768,-32768, 598, 271,
573-32768,-32768,-32768, 171, 277,-32768,-32768,-32768, 231, 183,
574-32768,-32768, 148, 231, 194, 182, 1,-32768,-32768, 444,
575-32768, 28, 231,-32768,-32768,-32768,-32768,-32768, 82,-32768,
576 185, 186, 196, 350, 163,-32768,-32768, -58,-32768,-32768,
577 170,-32768,-32768,-32768, 291, -8, 199, 275, 208, 245,
578 -17, 75,-32768, -55,-32768,-32768, 213,-32768,-32768, 215,
579-32768,-32768,-32768,-32768,-32768, 314, 598, 313, 231, 297,
580-32768,-32768, 212,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
581-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 216, 217,
582-32768, 127,-32768, 27,-32768, 220, 303, 7, 221, 226,
583 51, 102, 268,-32768, 233, 51, 273,-32768, 48,-32768,
584 6, 225,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -12,
585-32768,-32768, 315,-32768, 148, 102, 240, 238,-32768, 272,
586 253, 251, -12,-32768,-32768, 254,-32768,-32768,-32768,-32768,
587 170, 355, 313, 163, 270, 170, 163,-32768, 279, 279,
588-32768,-32768, 521,-32768, 313, 263, 153,-32768,-32768, 225,
589-32768, 102, 306, 276, 274,-32768,-32768, 225, 278, 130,
590 313, 102, 281, 313,-32768,-32768, 154,-32768,-32768, 282,
591 155,-32768,-32768,-32768,-32768, 269, 285, 210, 286, 289,
592 288,-32768, 297,-32768,-32768,-32768,-32768, 102, 102,-32768,
593 102, 102, 280, 283,-32768,-32768, 391,-32768,-32768, 316,
594-32768,-32768,-32768,-32768,-32768, 9, 9,-32768, 343,-32768,
595 7,-32768, 298, 225,-32768, 51, 9,-32768, 295, 225,
596-32768, 300,-32768, 225,-32768, 56, 343,-32768, 6,-32768,
597 296,-32768,-32768, 30,-32768,-32768,-32768,-32768,-32768,-32768,
598 301,-32768,-32768, 11, 168,-32768,-32768, 307,-32768,-32768,
599-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 304, 521,
600-32768, 521,-32768, 305, 308,-32768,-32768,-32768, 169,-32768,
601 -55,-32768, 313, 302,-32768,-32768, 283,-32768, 102,-32768,
602-32768,-32768,-32768,-32768, 30, 24, 302, 313,-32768, 125,
603 272,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 22,
604-32768,-32768,-32768,-32768, 418, 419,-32768
vlm6a02a8a2004-09-08 00:28:11 +0000605};
606
607static const short yypgoto[] = {-32768,
vlm4053ca52005-02-18 16:34:21 +0000608-32768, 417, 284,-32768,-32768, 410,-32768,-32768, 398,-32768,
609-32768, 369,-32768,-32768,-32768, 353,-32768, 318,-32768,-32768,
610 319,-32768, 364,-32768,-32768, 137,-32768,-32768, 267,-32768,
611 96, 230,-32768, 111,-32768, 117,-32768, 192,-32768, 193,
612-32768,-32768,-32768,-32768, 33, -185, -79, -300, -53,-32768,
613 203, -186, -124,-32768, -165,-32768, -246,-32768, -48, -119,
614-32768, 18,-32768,-32768,-32768, -147,-32768,-32768, -178, -166,
615 -200, 207,-32768, -259,-32768,-32768, 50,-32768,-32768,-32768,
616-32768,-32768,-32768, 60, 63, -295,-32768,-32768,-32768, 112,
617 -126, -80,-32768,-32768,-32768,-32768, 31,-32768, 175, -7
vlm6a02a8a2004-09-08 00:28:11 +0000618};
619
620
vlm4053ca52005-02-18 16:34:21 +0000621#define YYLAST 689
vlm6a02a8a2004-09-08 00:28:11 +0000622
623
624static const short yytable[] = { 15,
vlm4053ca52005-02-18 16:34:21 +0000625 157, 120, 119, 230, 207, 15, 208, 250, 188, 175,
626 101, 101, 259, 10, 10, 102, 102, 116, 10, 142,
627 359, 360, 113, 10, 200, 409, 1, 2, 343, 65,
628 5, 368, 72, 5, 171, 172, 79, 10, 403, 171,
629 172, 247, 10, 353, 7, 1, 2, 291, 65, 202,
630 131, 67, 10, 11, 63, 10, 180, 181, 10, 247,
631 10, 11, 200, 10, 180, 181, 79, 64, 161, 390,
632 71, 391, 361, 63, 78, 143, 16, 248, 309, 162,
633 263, 314, 279, 323, 114, 201, 64, 202, 286, 144,
634 374, 19, 404, 332, -263, 248, 405, 348, 349, 287,
635 350, 72, 123, 117, 78, 28, 79, 217, 256, 10,
636 180, 181, 1, 2, 249, 165, 175, 188, 131, 117,
637 188, 383, 111, 351, 29, 413, 230, 190, 409, 132,
638 -237, 378, 285, 157, -237, 259, 32, 171, 172, 71,
639 117, 68, 30, 138, 78, 261, 218, 219, 12, 275,
640 160, 276, 256, 164, 200, 20, 17, 275, 1, 2,
641 214, 216, 220, 21, 176, 189, 31, 177, 178, 179,
642 10, 180, 181, 1, 2, 108, 109, 206, 33, 202,
643 322, 221, 171, 172, 22, 166, 23, 222, 327, 167,
644 260, 34, 362, 268, 36, 24, 223, 132, 268, 215,
645 37, 280, 66, 284, 225, 80, 226, 182, 10, 279,
646 375, 1, 2, 412, 107, 217, 110, 10, 180, 181,
647 1, 2, 401, 412, 115, 183, 294, 295, 296, 297,
648 245, 83, 84, 396, 246, 308, 190, 329, 10, 190,
649 124, 1, 2, 123, 366, 125, 73, 318, 184, 370,
650 157, 126, 157, 372, 218, 290, 320, 335, 338, 82,
651 321, 336, 339, 331, 127, 185, 331, 83, 84, 342,
652 128, 386, 394, 133, 189, 387, 395, 189, 85, 135,
653 86, 134, 87, 160, 141, 217, 137, 10, 180, 181,
654 1, 2, 88, 168, 169, 222, 89, 140, 170, 196,
655 90, -264, 217, 91, 10, 180, 181, 1, 2, 197,
656 198, 363, 199, 260, 92, 209, 212, 211, 268, 93,
657 10, 94, 241, 95, 218, 244, 243, 255, 280, 363,
658 262, 284, 96, 97, 254, 271, 381, 272, 117, 352,
659 274, 218, 219, 292, 289, 293, 385, 98, 300, 189,
660 10, 180, 181, 1, 2, 302, 304, 220, 306, 99,
661 1, 2, 171, 172, 310, 222, 315, 189, 294, 295,
662 296, 297, 319, 324, 10, 385, 221, 1, 2, 325,
663 340, 326, 222, 328, 333, 341, 337, 381, 344, 38,
664 408, 223, 345, 346, 357, 354, 369, 358, 224, 225,
665 160, 226, 160, 365, 39, 371, 382, 377, 40, 388,
666 392, 389, 398, 393, 41, 42, 43, 416, 417, 6,
667 44, 191, 18, 35, 81, 45, 112, 136, 105, 347,
668 46, 139, 47, 213, 376, 273, 367, 364, 313, 303,
669 48, 317, 414, 305, 402, 397, 399, 373, 334, 49,
670 0, 50, 0, 0, 146, 147, 51, 0, 52, 53,
671 54, 148, 0, 0, 0, 85, 38, 86, 0, 87,
672 149, 0, 0, 0, 0, 0, 0, 0, 0, 88,
673 0, 0, 0, 89, 0, 0, 0, 90, 0, 0,
674 91, 41, 42, 43, 0, 0, 0, 0, 0, 150,
675 0, 92, 45, 0, 0, 0, 93, 46, 94, 47,
676 95, 0, 0, 0, 0, 0, 0, 48, 0, 96,
677 97, 151, 152, 0, 0, 0, 49, 0, 50, 0,
678 153, 146, 147, 51, 98, 52, 53, 54, 148, 0,
679 0, 0, 85, 38, 86, 0, 87, 149, 0, 0,
680 0, 0, 0, 0, 0, 0, 88, 0, 0, 0,
681 89, 0, 0, 0, 90, 0, 0, 91, 41, 42,
682 43, 0, 0, 0, 0, 0, 150, 0, 92, 45,
683 0, 0, 0, 93, 46, 94, 47, 95, 0, 0,
684 0, 83, 84, 0, 48, 0, 96, 97, 151, 152,
685 0, 0, 85, 49, 86, 50, 87, 0, 1, 2,
686 51, 98, 52, 53, 54, 0, 88, 0, 0, 85,
687 89, 86, 0, 87, 90, 0, 0, 91, 0, 0,
688 0, 0, 0, 88, 0, 0, 0, 89, 92, 0,
689 0, 90, 0, 93, 91, 94, 0, 95, 0, 0,
690 0, 0, 0, 0, 0, 92, 96, 97, 0, 0,
691 93, 0, 94, 0, 95, 0, 0, 0, 0, 0,
692 0, 98, 0, 96, 97, 0, 0, 0, 0, 0,
693 0, 0, 0, 0, 0, 0, 0, 0, 98
vlm6a02a8a2004-09-08 00:28:11 +0000694};
695
696static const short yycheck[] = { 7,
vlm4053ca52005-02-18 16:34:21 +0000697 120, 82, 82, 170, 152, 13, 154, 194, 135, 134,
698 64, 65, 198, 8, 8, 64, 65, 28, 8, 19,
699 316, 317, 46, 8, 80, 4, 11, 12, 288, 37,
700 0, 327, 40, 3, 13, 14, 44, 8, 15, 13,
701 14, 33, 8, 303, 103, 11, 12, 226, 56, 105,
702 99, 17, 8, 9, 37, 8, 9, 10, 8, 33,
703 8, 9, 80, 8, 9, 10, 74, 37, 41, 370,
704 40, 372, 319, 56, 44, 75, 34, 69, 244, 52,
705 30, 247, 209, 262, 108, 103, 56, 105, 101, 89,
706 337, 105, 69, 272, 103, 69, 73, 298, 299, 112,
707 301, 109, 111, 114, 74, 9, 114, 6, 102, 8,
708 9, 10, 11, 12, 194, 123, 241, 244, 167, 114,
709 247, 111, 107, 302, 57, 104, 293, 135, 4, 99,
710 104, 102, 212, 253, 108, 321, 53, 13, 14, 109,
711 114, 107, 84, 113, 114, 199, 45, 46, 104, 102,
712 120, 104, 102, 123, 80, 12, 104, 102, 11, 12,
713 168, 169, 61, 20, 134, 135, 84, 5, 6, 7,
714 8, 9, 10, 11, 12, 107, 108, 103, 84, 105,
715 260, 80, 13, 14, 41, 104, 43, 86, 268, 108,
716 198, 3, 319, 201, 106, 52, 95, 167, 206, 169,
717 21, 209, 12, 211, 103, 39, 105, 45, 8, 336,
718 337, 11, 12, 400, 107, 6, 103, 8, 9, 10,
719 11, 12, 389, 410, 103, 63, 97, 98, 99, 100,
720 104, 11, 12, 381, 108, 243, 244, 108, 8, 247,
721 81, 11, 12, 111, 324, 81, 46, 255, 86, 330,
722 370, 71, 372, 334, 45, 225, 104, 104, 104, 3,
723 108, 108, 108, 271, 51, 103, 274, 11, 12, 60,
724 81, 104, 104, 3, 244, 108, 108, 247, 22, 3,
725 24, 111, 26, 253, 103, 6, 104, 8, 9, 10,
726 11, 12, 36, 109, 109, 86, 40, 104, 103, 9,
727 44, 103, 6, 47, 8, 9, 10, 11, 12, 35,
728 103, 319, 68, 321, 58, 103, 3, 103, 326, 63,
729 8, 65, 111, 67, 45, 109, 111, 25, 336, 337,
730 105, 339, 76, 77, 115, 68, 344, 105, 114, 60,
731 68, 45, 46, 104, 30, 108, 354, 91, 96, 319,
732 8, 9, 10, 11, 12, 105, 103, 61, 4, 103,
733 11, 12, 13, 14, 95, 86, 88, 337, 97, 98,
734 99, 100, 110, 68, 8, 383, 80, 11, 12, 104,
735 112, 108, 86, 106, 104, 101, 105, 395, 103, 23,
736 398, 95, 104, 106, 4, 113, 102, 82, 102, 103,
737 370, 105, 372, 106, 38, 106, 106, 112, 42, 103,
738 106, 108, 111, 106, 48, 49, 50, 0, 0, 3,
739 54, 138, 13, 26, 56, 59, 74, 109, 65, 293,
740 64, 114, 66, 167, 339, 206, 326, 321, 246, 233,
741 74, 250, 410, 241, 395, 383, 387, 336, 274, 83,
742 -1, 85, -1, -1, 11, 12, 90, -1, 92, 93,
743 94, 18, -1, -1, -1, 22, 23, 24, -1, 26,
744 27, -1, -1, -1, -1, -1, -1, -1, -1, 36,
745 -1, -1, -1, 40, -1, -1, -1, 44, -1, -1,
746 47, 48, 49, 50, -1, -1, -1, -1, -1, 56,
747 -1, 58, 59, -1, -1, -1, 63, 64, 65, 66,
748 67, -1, -1, -1, -1, -1, -1, 74, -1, 76,
749 77, 78, 79, -1, -1, -1, 83, -1, 85, -1,
750 87, 11, 12, 90, 91, 92, 93, 94, 18, -1,
751 -1, -1, 22, 23, 24, -1, 26, 27, -1, -1,
752 -1, -1, -1, -1, -1, -1, 36, -1, -1, -1,
753 40, -1, -1, -1, 44, -1, -1, 47, 48, 49,
754 50, -1, -1, -1, -1, -1, 56, -1, 58, 59,
755 -1, -1, -1, 63, 64, 65, 66, 67, -1, -1,
756 -1, 11, 12, -1, 74, -1, 76, 77, 78, 79,
757 -1, -1, 22, 83, 24, 85, 26, -1, 11, 12,
758 90, 91, 92, 93, 94, -1, 36, -1, -1, 22,
759 40, 24, -1, 26, 44, -1, -1, 47, -1, -1,
760 -1, -1, -1, 36, -1, -1, -1, 40, 58, -1,
761 -1, 44, -1, 63, 47, 65, -1, 67, -1, -1,
762 -1, -1, -1, -1, -1, 58, 76, 77, -1, -1,
763 63, -1, 65, -1, 67, -1, -1, -1, -1, -1,
764 -1, 91, -1, 76, 77, -1, -1, -1, -1, -1,
765 -1, -1, -1, -1, -1, -1, -1, -1, 91
vlm6a02a8a2004-09-08 00:28:11 +0000766};
767/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
768#line 3 "/usr/share/bison.simple"
769/* This file comes from bison-1.28. */
770
771/* Skeleton output parser for bison,
772 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
773
774 This program is free software; you can redistribute it and/or modify
775 it under the terms of the GNU General Public License as published by
776 the Free Software Foundation; either version 2, or (at your option)
777 any later version.
778
779 This program is distributed in the hope that it will be useful,
780 but WITHOUT ANY WARRANTY; without even the implied warranty of
781 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
782 GNU General Public License for more details.
783
784 You should have received a copy of the GNU General Public License
785 along with this program; if not, write to the Free Software
786 Foundation, Inc., 59 Temple Place - Suite 330,
787 Boston, MA 02111-1307, USA. */
788
789/* As a special exception, when this file is copied by Bison into a
790 Bison output file, you may use that output file without restriction.
791 This special exception was added by the Free Software Foundation
792 in version 1.24 of Bison. */
793
794/* This is the parser code that is written into each bison parser
795 when the %semantic_parser declaration is not specified in the grammar.
796 It was written by Richard Stallman by simplifying the hairy parser
797 used when %semantic_parser is specified. */
798
799#ifndef YYSTACK_USE_ALLOCA
800#ifdef alloca
801#define YYSTACK_USE_ALLOCA
802#else /* alloca not defined */
803#ifdef __GNUC__
804#define YYSTACK_USE_ALLOCA
805#define alloca __builtin_alloca
806#else /* not GNU C. */
807#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
808#define YYSTACK_USE_ALLOCA
809#include <alloca.h>
810#else /* not sparc */
811/* We think this test detects Watcom and Microsoft C. */
812/* This used to test MSDOS, but that is a bad idea
813 since that symbol is in the user namespace. */
814#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
815#if 0 /* No need for malloc.h, which pollutes the namespace;
816 instead, just don't use alloca. */
817#include <malloc.h>
818#endif
819#else /* not MSDOS, or __TURBOC__ */
820#if defined(_AIX)
821/* I don't know what this was needed for, but it pollutes the namespace.
822 So I turned it off. rms, 2 May 1997. */
823/* #include <malloc.h> */
824 #pragma alloca
825#define YYSTACK_USE_ALLOCA
826#else /* not MSDOS, or __TURBOC__, or _AIX */
827#if 0
828#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
829 and on HPUX 10. Eventually we can turn this on. */
830#define YYSTACK_USE_ALLOCA
831#define alloca __builtin_alloca
832#endif /* __hpux */
833#endif
834#endif /* not _AIX */
835#endif /* not MSDOS, or __TURBOC__ */
836#endif /* not sparc */
837#endif /* not GNU C */
838#endif /* alloca not defined */
839#endif /* YYSTACK_USE_ALLOCA not defined */
840
841#ifdef YYSTACK_USE_ALLOCA
842#define YYSTACK_ALLOC alloca
vlmfa67ddc2004-06-03 03:38:44 +0000843#else
vlm6a02a8a2004-09-08 00:28:11 +0000844#define YYSTACK_ALLOC malloc
vlmfa67ddc2004-06-03 03:38:44 +0000845#endif
846
vlm6a02a8a2004-09-08 00:28:11 +0000847/* Note: there must be only one dollar sign in this file.
848 It is replaced by the list of actions, each action
849 as one case of the switch. */
vlmfa67ddc2004-06-03 03:38:44 +0000850
851#define yyerrok (yyerrstatus = 0)
852#define yyclearin (yychar = YYEMPTY)
853#define YYEMPTY -2
854#define YYEOF 0
855#define YYACCEPT goto yyacceptlab
vlm6a02a8a2004-09-08 00:28:11 +0000856#define YYABORT goto yyabortlab
vlmfa67ddc2004-06-03 03:38:44 +0000857#define YYERROR goto yyerrlab1
vlm6a02a8a2004-09-08 00:28:11 +0000858/* Like YYERROR except do call yyerror.
859 This remains here temporarily to ease the
860 transition to the new meaning of YYERROR, for GCC.
vlmfa67ddc2004-06-03 03:38:44 +0000861 Once GCC version 2 has supplanted version 1, this can go. */
862#define YYFAIL goto yyerrlab
863#define YYRECOVERING() (!!yyerrstatus)
vlm6a02a8a2004-09-08 00:28:11 +0000864#define YYBACKUP(token, value) \
vlmfa67ddc2004-06-03 03:38:44 +0000865do \
866 if (yychar == YYEMPTY && yylen == 1) \
vlm6a02a8a2004-09-08 00:28:11 +0000867 { yychar = (token), yylval = (value); \
vlmfa67ddc2004-06-03 03:38:44 +0000868 yychar1 = YYTRANSLATE (yychar); \
869 YYPOPSTACK; \
870 goto yybackup; \
871 } \
872 else \
vlm6a02a8a2004-09-08 00:28:11 +0000873 { yyerror ("syntax error: cannot back up"); YYERROR; } \
vlmfa67ddc2004-06-03 03:38:44 +0000874while (0)
875
876#define YYTERROR 1
877#define YYERRCODE 256
878
vlm6a02a8a2004-09-08 00:28:11 +0000879#ifndef YYPURE
880#define YYLEX yylex()
vlmfa67ddc2004-06-03 03:38:44 +0000881#endif
882
vlm6a02a8a2004-09-08 00:28:11 +0000883#ifdef YYPURE
884#ifdef YYLSP_NEEDED
885#ifdef YYLEX_PARAM
886#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
887#else
888#define YYLEX yylex(&yylval, &yylloc)
889#endif
890#else /* not YYLSP_NEEDED */
891#ifdef YYLEX_PARAM
892#define YYLEX yylex(&yylval, YYLEX_PARAM)
893#else
894#define YYLEX yylex(&yylval)
895#endif
896#endif /* not YYLSP_NEEDED */
897#endif
vlmfa67ddc2004-06-03 03:38:44 +0000898
vlm6a02a8a2004-09-08 00:28:11 +0000899/* If nonreentrant, generate the variables here */
vlmfa67ddc2004-06-03 03:38:44 +0000900
vlm6a02a8a2004-09-08 00:28:11 +0000901#ifndef YYPURE
vlmfa67ddc2004-06-03 03:38:44 +0000902
vlm6a02a8a2004-09-08 00:28:11 +0000903int yychar; /* the lookahead symbol */
904YYSTYPE yylval; /* the semantic value of the */
905 /* lookahead symbol */
vlmfa67ddc2004-06-03 03:38:44 +0000906
vlm6a02a8a2004-09-08 00:28:11 +0000907#ifdef YYLSP_NEEDED
908YYLTYPE yylloc; /* location data for the lookahead */
909 /* symbol */
910#endif
vlmfa67ddc2004-06-03 03:38:44 +0000911
vlm6a02a8a2004-09-08 00:28:11 +0000912int yynerrs; /* number of parse errors so far */
913#endif /* not YYPURE */
914
915#if YYDEBUG != 0
916int yydebug; /* nonzero means print parse trace */
917/* Since this is uninitialized, it does not stop multiple parsers
918 from coexisting. */
919#endif
920
921/* YYINITDEPTH indicates the initial size of the parser's stacks */
922
vlmfa67ddc2004-06-03 03:38:44 +0000923#ifndef YYINITDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000924#define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +0000925#endif
926
vlm6a02a8a2004-09-08 00:28:11 +0000927/* YYMAXDEPTH is the maximum size the stacks can grow to
928 (effective only if the built-in stack extension method is used). */
vlmfa67ddc2004-06-03 03:38:44 +0000929
930#if YYMAXDEPTH == 0
vlm6a02a8a2004-09-08 00:28:11 +0000931#undef YYMAXDEPTH
vlmfa67ddc2004-06-03 03:38:44 +0000932#endif
933
934#ifndef YYMAXDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000935#define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +0000936#endif
937
vlm6a02a8a2004-09-08 00:28:11 +0000938/* Define __yy_memcpy. Note that the size argument
939 should be passed with type unsigned int, because that is what the non-GCC
940 definitions require. With GCC, __builtin_memcpy takes an arg
941 of type size_t, but it can handle unsigned int. */
vlmfa67ddc2004-06-03 03:38:44 +0000942
vlm6a02a8a2004-09-08 00:28:11 +0000943#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
944#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
945#else /* not GNU C or C++ */
946#ifndef __cplusplus
vlmfa67ddc2004-06-03 03:38:44 +0000947
vlm6a02a8a2004-09-08 00:28:11 +0000948/* This is the most reliable way to avoid incompatibilities
949 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +0000950static void
vlm6a02a8a2004-09-08 00:28:11 +0000951__yy_memcpy (to, from, count)
952 char *to;
953 char *from;
954 unsigned int count;
vlm80103492004-09-07 10:39:09 +0000955{
vlm6a02a8a2004-09-08 00:28:11 +0000956 register char *f = from;
957 register char *t = to;
958 register int i = count;
vlm80103492004-09-07 10:39:09 +0000959
vlm6a02a8a2004-09-08 00:28:11 +0000960 while (i-- > 0)
961 *t++ = *f++;
vlm80103492004-09-07 10:39:09 +0000962}
vlm80103492004-09-07 10:39:09 +0000963
vlm6a02a8a2004-09-08 00:28:11 +0000964#else /* __cplusplus */
vlm80103492004-09-07 10:39:09 +0000965
vlm6a02a8a2004-09-08 00:28:11 +0000966/* This is the most reliable way to avoid incompatibilities
967 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +0000968static void
vlm6a02a8a2004-09-08 00:28:11 +0000969__yy_memcpy (char *to, char *from, unsigned int count)
vlm80103492004-09-07 10:39:09 +0000970{
vlm6a02a8a2004-09-08 00:28:11 +0000971 register char *t = to;
972 register char *f = from;
973 register int i = count;
vlm80103492004-09-07 10:39:09 +0000974
vlm6a02a8a2004-09-08 00:28:11 +0000975 while (i-- > 0)
976 *t++ = *f++;
vlm044f7442004-09-04 04:49:21 +0000977}
vlm044f7442004-09-04 04:49:21 +0000978
vlm6a02a8a2004-09-08 00:28:11 +0000979#endif
980#endif
vlmfa67ddc2004-06-03 03:38:44 +0000981
vlm6a02a8a2004-09-08 00:28:11 +0000982#line 217 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +0000983
984/* The user can define YYPARSE_PARAM as the name of an argument to be passed
985 into yyparse. The argument should have type void *.
986 It should actually point to an object.
987 Grammar actions can access the variable by casting it
988 to the proper pointer type. */
989
990#ifdef YYPARSE_PARAM
vlm6a02a8a2004-09-08 00:28:11 +0000991#ifdef __cplusplus
992#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
993#define YYPARSE_PARAM_DECL
994#else /* not __cplusplus */
995#define YYPARSE_PARAM_ARG YYPARSE_PARAM
996#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
997#endif /* not __cplusplus */
998#else /* not YYPARSE_PARAM */
999#define YYPARSE_PARAM_ARG
1000#define YYPARSE_PARAM_DECL
1001#endif /* not YYPARSE_PARAM */
vlmfa67ddc2004-06-03 03:38:44 +00001002
1003/* Prevent warning if -Wstrict-prototypes. */
1004#ifdef __GNUC__
vlm6a02a8a2004-09-08 00:28:11 +00001005#ifdef YYPARSE_PARAM
vlmfa67ddc2004-06-03 03:38:44 +00001006int yyparse (void *);
vlm6a02a8a2004-09-08 00:28:11 +00001007#else
vlmfa67ddc2004-06-03 03:38:44 +00001008int yyparse (void);
vlm6a02a8a2004-09-08 00:28:11 +00001009#endif
vlm39e5ed72004-09-05 10:40:41 +00001010#endif
vlm80103492004-09-07 10:39:09 +00001011
vlmfa67ddc2004-06-03 03:38:44 +00001012int
vlm6a02a8a2004-09-08 00:28:11 +00001013yyparse(YYPARSE_PARAM_ARG)
vlmfa67ddc2004-06-03 03:38:44 +00001014 YYPARSE_PARAM_DECL
1015{
1016 register int yystate;
1017 register int yyn;
1018 register short *yyssp;
1019 register YYSTYPE *yyvsp;
vlm6a02a8a2004-09-08 00:28:11 +00001020 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1021 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
vlmfa67ddc2004-06-03 03:38:44 +00001022
vlm6a02a8a2004-09-08 00:28:11 +00001023 short yyssa[YYINITDEPTH]; /* the state stack */
1024 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
vlmfa67ddc2004-06-03 03:38:44 +00001025
vlm6a02a8a2004-09-08 00:28:11 +00001026 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1027 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
vlmfa67ddc2004-06-03 03:38:44 +00001028
vlm6a02a8a2004-09-08 00:28:11 +00001029#ifdef YYLSP_NEEDED
1030 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1031 YYLTYPE *yyls = yylsa;
1032 YYLTYPE *yylsp;
1033
1034#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1035#else
vlmfa67ddc2004-06-03 03:38:44 +00001036#define YYPOPSTACK (yyvsp--, yyssp--)
vlm6a02a8a2004-09-08 00:28:11 +00001037#endif
vlmfa67ddc2004-06-03 03:38:44 +00001038
vlm6a02a8a2004-09-08 00:28:11 +00001039 int yystacksize = YYINITDEPTH;
1040 int yyfree_stacks = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001041
vlm6a02a8a2004-09-08 00:28:11 +00001042#ifdef YYPURE
1043 int yychar;
1044 YYSTYPE yylval;
1045 int yynerrs;
1046#ifdef YYLSP_NEEDED
1047 YYLTYPE yylloc;
1048#endif
1049#endif
vlmfa67ddc2004-06-03 03:38:44 +00001050
vlm6a02a8a2004-09-08 00:28:11 +00001051 YYSTYPE yyval; /* the variable used to return */
1052 /* semantic values from the action */
1053 /* routines */
vlmfa67ddc2004-06-03 03:38:44 +00001054
1055 int yylen;
1056
vlm6a02a8a2004-09-08 00:28:11 +00001057#if YYDEBUG != 0
1058 if (yydebug)
1059 fprintf(stderr, "Starting parse\n");
1060#endif
vlmfa67ddc2004-06-03 03:38:44 +00001061
1062 yystate = 0;
1063 yyerrstatus = 0;
1064 yynerrs = 0;
1065 yychar = YYEMPTY; /* Cause a token to be read. */
1066
1067 /* Initialize stack pointers.
1068 Waste one element of value and location stack
1069 so that they stay on the same level as the state stack.
1070 The wasted elements are never initialized. */
1071
vlm6a02a8a2004-09-08 00:28:11 +00001072 yyssp = yyss - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001073 yyvsp = yyvs;
vlm6a02a8a2004-09-08 00:28:11 +00001074#ifdef YYLSP_NEEDED
1075 yylsp = yyls;
1076#endif
vlmfa67ddc2004-06-03 03:38:44 +00001077
vlm6a02a8a2004-09-08 00:28:11 +00001078/* Push a new state, which is found in yystate . */
1079/* In all cases, when you get here, the value and location stacks
1080 have just been pushed. so pushing a state here evens the stacks. */
1081yynewstate:
vlmfa67ddc2004-06-03 03:38:44 +00001082
vlm6a02a8a2004-09-08 00:28:11 +00001083 *++yyssp = yystate;
vlmfa67ddc2004-06-03 03:38:44 +00001084
1085 if (yyssp >= yyss + yystacksize - 1)
1086 {
vlm6a02a8a2004-09-08 00:28:11 +00001087 /* Give user a chance to reallocate the stack */
1088 /* Use copies of these so that the &'s don't force the real ones into memory. */
1089 YYSTYPE *yyvs1 = yyvs;
1090 short *yyss1 = yyss;
1091#ifdef YYLSP_NEEDED
1092 YYLTYPE *yyls1 = yyls;
1093#endif
1094
vlmfa67ddc2004-06-03 03:38:44 +00001095 /* Get the current used size of the three stacks, in elements. */
vlm6a02a8a2004-09-08 00:28:11 +00001096 int size = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001097
1098#ifdef yyoverflow
vlm6a02a8a2004-09-08 00:28:11 +00001099 /* Each stack pointer address is followed by the size of
1100 the data in use in that stack, in bytes. */
1101#ifdef YYLSP_NEEDED
1102 /* This used to be a conditional around just the two extra args,
1103 but that might be undefined if yyoverflow is a macro. */
1104 yyoverflow("parser stack overflow",
1105 &yyss1, size * sizeof (*yyssp),
1106 &yyvs1, size * sizeof (*yyvsp),
1107 &yyls1, size * sizeof (*yylsp),
1108 &yystacksize);
1109#else
1110 yyoverflow("parser stack overflow",
1111 &yyss1, size * sizeof (*yyssp),
1112 &yyvs1, size * sizeof (*yyvsp),
1113 &yystacksize);
1114#endif
vlmfa67ddc2004-06-03 03:38:44 +00001115
vlm6a02a8a2004-09-08 00:28:11 +00001116 yyss = yyss1; yyvs = yyvs1;
1117#ifdef YYLSP_NEEDED
1118 yyls = yyls1;
1119#endif
vlmfa67ddc2004-06-03 03:38:44 +00001120#else /* no yyoverflow */
1121 /* Extend the stack our own way. */
1122 if (yystacksize >= YYMAXDEPTH)
vlm6a02a8a2004-09-08 00:28:11 +00001123 {
1124 yyerror("parser stack overflow");
1125 if (yyfree_stacks)
1126 {
1127 free (yyss);
1128 free (yyvs);
1129#ifdef YYLSP_NEEDED
1130 free (yyls);
1131#endif
1132 }
1133 return 2;
1134 }
vlmfa67ddc2004-06-03 03:38:44 +00001135 yystacksize *= 2;
1136 if (yystacksize > YYMAXDEPTH)
1137 yystacksize = YYMAXDEPTH;
vlm6a02a8a2004-09-08 00:28:11 +00001138#ifndef YYSTACK_USE_ALLOCA
1139 yyfree_stacks = 1;
1140#endif
1141 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1142 __yy_memcpy ((char *)yyss, (char *)yyss1,
1143 size * (unsigned int) sizeof (*yyssp));
1144 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1145 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1146 size * (unsigned int) sizeof (*yyvsp));
1147#ifdef YYLSP_NEEDED
1148 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1149 __yy_memcpy ((char *)yyls, (char *)yyls1,
1150 size * (unsigned int) sizeof (*yylsp));
1151#endif
vlmfa67ddc2004-06-03 03:38:44 +00001152#endif /* no yyoverflow */
1153
vlm6a02a8a2004-09-08 00:28:11 +00001154 yyssp = yyss + size - 1;
1155 yyvsp = yyvs + size - 1;
1156#ifdef YYLSP_NEEDED
1157 yylsp = yyls + size - 1;
1158#endif
vlmfa67ddc2004-06-03 03:38:44 +00001159
vlm6a02a8a2004-09-08 00:28:11 +00001160#if YYDEBUG != 0
1161 if (yydebug)
1162 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1163#endif
vlmfa67ddc2004-06-03 03:38:44 +00001164
1165 if (yyssp >= yyss + yystacksize - 1)
1166 YYABORT;
1167 }
1168
vlm6a02a8a2004-09-08 00:28:11 +00001169#if YYDEBUG != 0
1170 if (yydebug)
1171 fprintf(stderr, "Entering state %d\n", yystate);
1172#endif
vlmfa67ddc2004-06-03 03:38:44 +00001173
1174 goto yybackup;
vlm6a02a8a2004-09-08 00:28:11 +00001175 yybackup:
vlmfa67ddc2004-06-03 03:38:44 +00001176
1177/* Do appropriate processing given the current state. */
1178/* Read a lookahead token if we need one and don't already have one. */
1179/* yyresume: */
1180
1181 /* First try to decide what to do without reference to lookahead token. */
1182
1183 yyn = yypact[yystate];
vlm6a02a8a2004-09-08 00:28:11 +00001184 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001185 goto yydefault;
1186
1187 /* Not known => get a lookahead token if don't already have one. */
1188
1189 /* yychar is either YYEMPTY or YYEOF
1190 or a valid token in external form. */
1191
1192 if (yychar == YYEMPTY)
1193 {
vlm6a02a8a2004-09-08 00:28:11 +00001194#if YYDEBUG != 0
1195 if (yydebug)
1196 fprintf(stderr, "Reading a token: ");
1197#endif
vlmfa67ddc2004-06-03 03:38:44 +00001198 yychar = YYLEX;
1199 }
1200
vlm6a02a8a2004-09-08 00:28:11 +00001201 /* Convert token to internal form (in yychar1) for indexing tables with */
vlmfa67ddc2004-06-03 03:38:44 +00001202
vlm6a02a8a2004-09-08 00:28:11 +00001203 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001204 {
1205 yychar1 = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001206 yychar = YYEOF; /* Don't call YYLEX any more */
vlmfa67ddc2004-06-03 03:38:44 +00001207
vlm6a02a8a2004-09-08 00:28:11 +00001208#if YYDEBUG != 0
1209 if (yydebug)
1210 fprintf(stderr, "Now at end of input.\n");
1211#endif
vlmfa67ddc2004-06-03 03:38:44 +00001212 }
1213 else
1214 {
vlm6a02a8a2004-09-08 00:28:11 +00001215 yychar1 = YYTRANSLATE(yychar);
vlmfa67ddc2004-06-03 03:38:44 +00001216
vlm6a02a8a2004-09-08 00:28:11 +00001217#if YYDEBUG != 0
1218 if (yydebug)
1219 {
1220 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1221 /* Give the individual parser a way to print the precise meaning
1222 of a token, for further debugging info. */
1223#ifdef YYPRINT
1224 YYPRINT (stderr, yychar, yylval);
1225#endif
1226 fprintf (stderr, ")\n");
1227 }
1228#endif
vlmfa67ddc2004-06-03 03:38:44 +00001229 }
1230
1231 yyn += yychar1;
vlm6a02a8a2004-09-08 00:28:11 +00001232 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001233 goto yydefault;
vlm6a02a8a2004-09-08 00:28:11 +00001234
vlmfa67ddc2004-06-03 03:38:44 +00001235 yyn = yytable[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001236
1237 /* yyn is what to do for this token type in this state.
1238 Negative => reduce, -yyn is rule number.
1239 Positive => shift, yyn is new state.
1240 New state is final state => don't bother to shift,
1241 just return success.
1242 0, or most negative number => error. */
1243
1244 if (yyn < 0)
vlmfa67ddc2004-06-03 03:38:44 +00001245 {
vlm6a02a8a2004-09-08 00:28:11 +00001246 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001247 goto yyerrlab;
1248 yyn = -yyn;
1249 goto yyreduce;
1250 }
vlm6a02a8a2004-09-08 00:28:11 +00001251 else if (yyn == 0)
1252 goto yyerrlab;
vlmfa67ddc2004-06-03 03:38:44 +00001253
1254 if (yyn == YYFINAL)
1255 YYACCEPT;
1256
1257 /* Shift the lookahead token. */
vlm6a02a8a2004-09-08 00:28:11 +00001258
1259#if YYDEBUG != 0
1260 if (yydebug)
1261 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1262#endif
vlmfa67ddc2004-06-03 03:38:44 +00001263
1264 /* Discard the token being shifted unless it is eof. */
1265 if (yychar != YYEOF)
1266 yychar = YYEMPTY;
1267
1268 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00001269#ifdef YYLSP_NEEDED
1270 *++yylsp = yylloc;
1271#endif
vlmfa67ddc2004-06-03 03:38:44 +00001272
vlm6a02a8a2004-09-08 00:28:11 +00001273 /* count tokens shifted since error; after three, turn off error status. */
1274 if (yyerrstatus) yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001275
1276 yystate = yyn;
1277 goto yynewstate;
1278
vlm6a02a8a2004-09-08 00:28:11 +00001279/* Do the default action for the current state. */
vlm80103492004-09-07 10:39:09 +00001280yydefault:
vlm6a02a8a2004-09-08 00:28:11 +00001281
vlmfa67ddc2004-06-03 03:38:44 +00001282 yyn = yydefact[yystate];
1283 if (yyn == 0)
1284 goto yyerrlab;
1285
vlm6a02a8a2004-09-08 00:28:11 +00001286/* Do a reduction. yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001287yyreduce:
1288 yylen = yyr2[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001289 if (yylen > 0)
1290 yyval = yyvsp[1-yylen]; /* implement default value of the action */
vlmfa67ddc2004-06-03 03:38:44 +00001291
vlm6a02a8a2004-09-08 00:28:11 +00001292#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00001293 if (yydebug)
1294 {
vlm6a02a8a2004-09-08 00:28:11 +00001295 int i;
vlmfa67ddc2004-06-03 03:38:44 +00001296
vlm6a02a8a2004-09-08 00:28:11 +00001297 fprintf (stderr, "Reducing via rule %d (line %d), ",
1298 yyn, yyrline[yyn]);
vlmfa67ddc2004-06-03 03:38:44 +00001299
1300 /* Print the symbols being reduced, and their result. */
vlm6a02a8a2004-09-08 00:28:11 +00001301 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1302 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1303 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
vlmfa67ddc2004-06-03 03:38:44 +00001304 }
1305#endif
vlm80103492004-09-07 10:39:09 +00001306
vlm6a02a8a2004-09-08 00:28:11 +00001307
1308 switch (yyn) {
1309
1310case 1:
vlm0aa86902004-10-12 23:26:53 +00001311#line 302 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001312{
1313 *(void **)param = yyvsp[0].a_grammar;
1314 ;
1315 break;}
1316case 2:
vlm0aa86902004-10-12 23:26:53 +00001317#line 308 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001318{
vlmfa67ddc2004-06-03 03:38:44 +00001319 yyval.a_grammar = asn1p_new();
1320 checkmem(yyval.a_grammar);
1321 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001322 ;
1323 break;}
1324case 3:
vlm0aa86902004-10-12 23:26:53 +00001325#line 313 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001326{
vlmfa67ddc2004-06-03 03:38:44 +00001327 yyval.a_grammar = yyvsp[-1].a_grammar;
1328 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001329 ;
1330 break;}
1331case 4:
vlm0aa86902004-10-12 23:26:53 +00001332#line 334 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001333{
vlmfa67ddc2004-06-03 03:38:44 +00001334
1335 if(yyvsp[-1].a_module) {
1336 yyval.a_module = yyvsp[-1].a_module;
1337 } else {
1338 /* There's a chance that a module is just plain empty */
1339 yyval.a_module = asn1p_module_new();
1340 }
1341 checkmem(yyval.a_module);
1342
1343 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1344 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1345 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001346 ;
1347 break;}
1348case 5:
vlm0aa86902004-10-12 23:26:53 +00001349#line 355 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001350{ yyval.a_oid = 0; ;
1351 break;}
1352case 6:
vlm0aa86902004-10-12 23:26:53 +00001353#line 356 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001354{ yyval.a_oid = yyvsp[0].a_oid; ;
1355 break;}
1356case 7:
vlm0aa86902004-10-12 23:26:53 +00001357#line 360 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001358{
vlmfa67ddc2004-06-03 03:38:44 +00001359 yyval.a_oid = yyvsp[-1].a_oid;
vlm6a02a8a2004-09-08 00:28:11 +00001360 ;
1361 break;}
1362case 8:
vlm0aa86902004-10-12 23:26:53 +00001363#line 363 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001364{
vlmfa67ddc2004-06-03 03:38:44 +00001365 yyval.a_oid = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001366 ;
1367 break;}
1368case 9:
vlm0aa86902004-10-12 23:26:53 +00001369#line 369 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001370{
vlmfa67ddc2004-06-03 03:38:44 +00001371 yyval.a_oid = asn1p_oid_new();
1372 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1373 if(yyvsp[0].a_oid_arc.name)
1374 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001375 ;
1376 break;}
1377case 10:
vlm0aa86902004-10-12 23:26:53 +00001378#line 375 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001379{
vlmfa67ddc2004-06-03 03:38:44 +00001380 yyval.a_oid = yyvsp[-1].a_oid;
1381 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1382 if(yyvsp[0].a_oid_arc.name)
1383 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001384 ;
1385 break;}
1386case 11:
vlm0aa86902004-10-12 23:26:53 +00001387#line 384 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001388{ /* iso */
vlmfa67ddc2004-06-03 03:38:44 +00001389 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1390 yyval.a_oid_arc.number = -1;
vlm6a02a8a2004-09-08 00:28:11 +00001391 ;
1392 break;}
1393case 12:
vlm0aa86902004-10-12 23:26:53 +00001394#line 388 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001395{ /* iso(1) */
vlmfa67ddc2004-06-03 03:38:44 +00001396 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1397 yyval.a_oid_arc.number = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001398 ;
1399 break;}
1400case 13:
vlm0aa86902004-10-12 23:26:53 +00001401#line 392 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001402{ /* 1 */
vlmfa67ddc2004-06-03 03:38:44 +00001403 yyval.a_oid_arc.name = 0;
1404 yyval.a_oid_arc.number = yyvsp[0].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001405 ;
1406 break;}
1407case 14:
vlm0aa86902004-10-12 23:26:53 +00001408#line 402 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001409{ yyval.a_module_flags = MSF_NOFLAGS; ;
1410 break;}
1411case 15:
vlm0aa86902004-10-12 23:26:53 +00001412#line 403 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001413{
vlmfa67ddc2004-06-03 03:38:44 +00001414 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001415 ;
1416 break;}
1417case 16:
vlm0aa86902004-10-12 23:26:53 +00001418#line 412 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001419{
vlmfa67ddc2004-06-03 03:38:44 +00001420 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001421 ;
1422 break;}
1423case 17:
vlm0aa86902004-10-12 23:26:53 +00001424#line 415 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001425{
vlmfa67ddc2004-06-03 03:38:44 +00001426 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001427 ;
1428 break;}
1429case 18:
vlm0aa86902004-10-12 23:26:53 +00001430#line 424 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001431{
vlmfa67ddc2004-06-03 03:38:44 +00001432 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001433 ;
1434 break;}
1435case 19:
vlm0aa86902004-10-12 23:26:53 +00001436#line 427 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001437{
vlmfa67ddc2004-06-03 03:38:44 +00001438 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001439 ;
1440 break;}
1441case 20:
vlm0aa86902004-10-12 23:26:53 +00001442#line 430 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001443{
vlmfa67ddc2004-06-03 03:38:44 +00001444 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001445 ;
1446 break;}
1447case 21:
vlm0aa86902004-10-12 23:26:53 +00001448#line 433 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001449{
vlmfa67ddc2004-06-03 03:38:44 +00001450 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
vlm6a02a8a2004-09-08 00:28:11 +00001451 ;
1452 break;}
1453case 22:
vlm0aa86902004-10-12 23:26:53 +00001454#line 437 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001455{
vlm9283dbe2004-08-18 04:59:12 +00001456 /* X.680Amd1 specifies TAG and XER */
1457 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1458 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1459 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1460 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1461 } else {
1462 fprintf(stderr,
1463 "WARNING: %s INSTRUCTIONS at line %d: "
1464 "Unrecognized encoding reference\n",
1465 yyvsp[-1].tv_str, yylineno);
1466 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1467 }
1468 free(yyvsp[-1].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00001469 ;
1470 break;}
1471case 23:
vlm0aa86902004-10-12 23:26:53 +00001472#line 458 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001473{ yyval.a_module = 0; ;
1474 break;}
1475case 24:
vlm0aa86902004-10-12 23:26:53 +00001476#line 459 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001477{
vlmfa67ddc2004-06-03 03:38:44 +00001478 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001479 ;
1480 break;}
1481case 25:
vlm0aa86902004-10-12 23:26:53 +00001482#line 468 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001483{
vlm9283dbe2004-08-18 04:59:12 +00001484 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001485 ;
1486 break;}
1487case 26:
vlm0aa86902004-10-12 23:26:53 +00001488#line 471 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001489{
vlmfa67ddc2004-06-03 03:38:44 +00001490 yyval.a_module = yyvsp[-1].a_module;
1491
vlm9283dbe2004-08-18 04:59:12 +00001492 /* Behave well when one of them is skipped. */
1493 if(!(yyvsp[-1].a_module)) {
1494 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1495 break;
1496 }
1497
vlmfa67ddc2004-06-03 03:38:44 +00001498#ifdef MY_IMPORT
1499#error MY_IMPORT DEFINED ELSEWHERE!
1500#endif
1501#define MY_IMPORT(foo,field) do { \
vlm97ed7152004-08-13 12:31:09 +00001502 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
vlmfa67ddc2004-06-03 03:38:44 +00001503 TQ_ADD(&(yyval.a_module->foo), \
1504 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1505 field); \
vlm97ed7152004-08-13 12:31:09 +00001506 } \
1507 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1508 } while(0)
vlmfa67ddc2004-06-03 03:38:44 +00001509
1510 MY_IMPORT(imports, xp_next);
1511 MY_IMPORT(exports, xp_next);
1512 MY_IMPORT(members, next);
1513#undef MY_IMPORT
1514
vlm6a02a8a2004-09-08 00:28:11 +00001515 ;
1516 break;}
1517case 27:
vlm0aa86902004-10-12 23:26:53 +00001518#line 504 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001519{
vlmfa67ddc2004-06-03 03:38:44 +00001520 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001521 ;
1522 break;}
1523case 28:
vlm0aa86902004-10-12 23:26:53 +00001524#line 507 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001525{
vlmfa67ddc2004-06-03 03:38:44 +00001526 yyval.a_module = asn1p_module_new();
1527 checkmem(yyval.a_module);
1528 if(yyvsp[0].a_xports) {
1529 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1530 } else {
1531 /* "EXPORTS ALL;" ? */
1532 }
vlm6a02a8a2004-09-08 00:28:11 +00001533 ;
1534 break;}
1535case 29:
vlm0aa86902004-10-12 23:26:53 +00001536#line 516 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001537{
vlmfa67ddc2004-06-03 03:38:44 +00001538 yyval.a_module = asn1p_module_new();
1539 checkmem(yyval.a_module);
1540 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1541 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1542 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001543 ;
1544 break;}
1545case 30:
vlm0aa86902004-10-12 23:26:53 +00001546#line 523 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001547{
vlm9283dbe2004-08-18 04:59:12 +00001548 yyval.a_module = asn1p_module_new();
1549 checkmem(yyval.a_module);
1550 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1551 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1552 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001553 ;
1554 break;}
1555case 31:
vlm0aa86902004-10-12 23:26:53 +00001556#line 536 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001557{
vlm9283dbe2004-08-18 04:59:12 +00001558 yyval.a_module = asn1p_module_new();
1559 checkmem(yyval.a_module);
1560 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1561 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1562 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001563 ;
1564 break;}
1565case 32:
vlm0aa86902004-10-12 23:26:53 +00001566#line 544 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001567{ asn1p_lexer_hack_push_encoding_control(); ;
1568 break;}
1569case 33:
vlm0aa86902004-10-12 23:26:53 +00001570#line 545 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001571{
vlm9283dbe2004-08-18 04:59:12 +00001572 fprintf(stderr,
1573 "WARNING: ENCODING-CONTROL %s "
1574 "specification at line %d ignored\n",
1575 yyvsp[-1].tv_str, yylineno);
1576 free(yyvsp[-1].tv_str);
1577 yyval.a_module = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001578 ;
1579 break;}
1580case 34:
vlm0aa86902004-10-12 23:26:53 +00001581#line 557 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001582{
vlmfa67ddc2004-06-03 03:38:44 +00001583 return yyerror(
1584 "Attempt to redefine a standard basic type, "
1585 "use -ftypesXY to switch back "
1586 "to older version of ASN.1 standard");
vlm6a02a8a2004-09-08 00:28:11 +00001587 ;
1588 break;}
1589case 35:
vlm0aa86902004-10-12 23:26:53 +00001590#line 571 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001591{
vlmfa67ddc2004-06-03 03:38:44 +00001592 yyval.a_module = yyvsp[-1].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001593 ;
1594 break;}
1595case 36:
vlm0aa86902004-10-12 23:26:53 +00001596#line 577 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001597{
vlmfa67ddc2004-06-03 03:38:44 +00001598 return yyerror("Empty IMPORTS list");
vlm6a02a8a2004-09-08 00:28:11 +00001599 ;
1600 break;}
1601case 37:
vlm0aa86902004-10-12 23:26:53 +00001602#line 583 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001603{
vlmfa67ddc2004-06-03 03:38:44 +00001604 yyval.a_module = asn1p_module_new();
1605 checkmem(yyval.a_module);
1606 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001607 ;
1608 break;}
1609case 38:
vlm0aa86902004-10-12 23:26:53 +00001610#line 588 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001611{
vlmfa67ddc2004-06-03 03:38:44 +00001612 yyval.a_module = yyvsp[-1].a_module;
1613 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001614 ;
1615 break;}
1616case 39:
vlm0aa86902004-10-12 23:26:53 +00001617#line 595 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001618{
vlmfa67ddc2004-06-03 03:38:44 +00001619 yyval.a_xports = yyvsp[-3].a_xports;
1620 yyval.a_xports->from = yyvsp[-1].tv_str;
1621 yyval.a_xports->from_oid = yyvsp[0].a_oid;
1622 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001623 ;
1624 break;}
1625case 40:
vlm0aa86902004-10-12 23:26:53 +00001626#line 604 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001627{
vlmfa67ddc2004-06-03 03:38:44 +00001628 yyval.a_xports = asn1p_xports_new();
1629 checkmem(yyval.a_xports);
1630 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001631 ;
1632 break;}
1633case 41:
vlm0aa86902004-10-12 23:26:53 +00001634#line 609 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001635{
vlmfa67ddc2004-06-03 03:38:44 +00001636 yyval.a_xports = yyvsp[-2].a_xports;
1637 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001638 ;
1639 break;}
1640case 42:
vlm0aa86902004-10-12 23:26:53 +00001641#line 616 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001642{
vlmfa67ddc2004-06-03 03:38:44 +00001643 yyval.a_expr = asn1p_expr_new(yylineno);
1644 checkmem(yyval.a_expr);
1645 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1646 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm6a02a8a2004-09-08 00:28:11 +00001647 ;
1648 break;}
1649case 43:
vlm0aa86902004-10-12 23:26:53 +00001650#line 622 "asn1p_y.y"
1651{ /* Completely equivalent to above */
1652 yyval.a_expr = asn1p_expr_new(yylineno);
1653 checkmem(yyval.a_expr);
1654 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1655 yyval.a_expr->expr_type = A1TC_REFERENCE;
1656 ;
1657 break;}
1658case 44:
1659#line 628 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001660{
vlmfa67ddc2004-06-03 03:38:44 +00001661 yyval.a_expr = asn1p_expr_new(yylineno);
1662 checkmem(yyval.a_expr);
1663 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1664 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm6a02a8a2004-09-08 00:28:11 +00001665 ;
1666 break;}
vlm0aa86902004-10-12 23:26:53 +00001667case 45:
1668#line 637 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001669{
vlmfa67ddc2004-06-03 03:38:44 +00001670 yyval.a_xports = yyvsp[-1].a_xports;
vlm6a02a8a2004-09-08 00:28:11 +00001671 ;
1672 break;}
vlm0aa86902004-10-12 23:26:53 +00001673case 46:
1674#line 640 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001675{
vlmfa67ddc2004-06-03 03:38:44 +00001676 yyval.a_xports = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001677 ;
1678 break;}
vlm0aa86902004-10-12 23:26:53 +00001679case 47:
1680#line 643 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001681{
vlmfa67ddc2004-06-03 03:38:44 +00001682 /* Empty EXPORTS clause effectively prohibits export. */
1683 yyval.a_xports = asn1p_xports_new();
1684 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001685 ;
1686 break;}
vlm0aa86902004-10-12 23:26:53 +00001687case 48:
1688#line 651 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001689{
vlmfa67ddc2004-06-03 03:38:44 +00001690 yyval.a_xports = asn1p_xports_new();
1691 assert(yyval.a_xports);
1692 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001693 ;
1694 break;}
vlm0aa86902004-10-12 23:26:53 +00001695case 49:
1696#line 656 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001697{
vlmfa67ddc2004-06-03 03:38:44 +00001698 yyval.a_xports = yyvsp[-2].a_xports;
1699 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001700 ;
1701 break;}
vlm6a02a8a2004-09-08 00:28:11 +00001702case 50:
vlm0aa86902004-10-12 23:26:53 +00001703#line 663 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001704{
vlmfa67ddc2004-06-03 03:38:44 +00001705 yyval.a_expr = asn1p_expr_new(yylineno);
1706 checkmem(yyval.a_expr);
1707 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1708 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
vlm6a02a8a2004-09-08 00:28:11 +00001709 ;
1710 break;}
1711case 51:
vlm0aa86902004-10-12 23:26:53 +00001712#line 669 "asn1p_y.y"
1713{
1714 yyval.a_expr = asn1p_expr_new(yylineno);
1715 checkmem(yyval.a_expr);
1716 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1717 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1718 ;
1719 break;}
1720case 52:
1721#line 675 "asn1p_y.y"
1722{
1723 yyval.a_expr = asn1p_expr_new(yylineno);
1724 checkmem(yyval.a_expr);
1725 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1726 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1727 ;
1728 break;}
1729case 53:
1730#line 685 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001731{
vlmfa67ddc2004-06-03 03:38:44 +00001732 yyval.a_expr = yyvsp[-4].a_expr;
1733 assert(yyval.a_expr->Identifier == 0);
1734 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1735 yyval.a_expr->meta_type = AMT_VALUESET;
1736 // take care of optValueSetBody
vlm6a02a8a2004-09-08 00:28:11 +00001737 ;
1738 break;}
vlm0aa86902004-10-12 23:26:53 +00001739case 54:
1740#line 695 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001741{
vlmfa67ddc2004-06-03 03:38:44 +00001742 yyval.a_expr = asn1p_expr_new(yylineno);
1743 checkmem(yyval.a_expr);
1744 yyval.a_expr->reference = yyvsp[0].a_ref;
1745 yyval.a_expr->expr_type = A1TC_REFERENCE;
1746 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00001747 ;
1748 break;}
vlm0aa86902004-10-12 23:26:53 +00001749case 55:
1750#line 702 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001751{
vlmfa67ddc2004-06-03 03:38:44 +00001752 yyval.a_expr = asn1p_expr_new(yylineno);
1753 checkmem(yyval.a_expr);
1754 yyval.a_expr->expr_type = yyvsp[0].a_type;
1755 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001756 ;
1757 break;}
vlm6a02a8a2004-09-08 00:28:11 +00001758case 56:
vlm0aa86902004-10-12 23:26:53 +00001759#line 711 "asn1p_y.y"
1760{ ;
vlm6a02a8a2004-09-08 00:28:11 +00001761 break;}
1762case 57:
vlm151c0b22004-09-22 16:03:36 +00001763#line 712 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001764{
1765 ;
1766 break;}
1767case 58:
vlm0aa86902004-10-12 23:26:53 +00001768#line 723 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001769{
1770 ;
1771 break;}
1772case 59:
vlm0aa86902004-10-12 23:26:53 +00001773#line 725 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001774{
1775 ;
1776 break;}
1777case 60:
vlm0aa86902004-10-12 23:26:53 +00001778#line 730 "asn1p_y.y"
1779{
1780 ;
1781 break;}
1782case 61:
1783#line 732 "asn1p_y.y"
1784{
1785 ;
1786 break;}
1787case 62:
1788#line 748 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001789{
vlmfa67ddc2004-06-03 03:38:44 +00001790 yyval.a_expr = asn1p_expr_new(yylineno);
1791 checkmem(yyval.a_expr);
1792 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1793 yyval.a_expr->tag = yyvsp[-1].a_tag;
1794 yyval.a_expr->expr_type = A1TC_TYPEID;
1795 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001796 ;
1797 break;}
vlm0aa86902004-10-12 23:26:53 +00001798case 63:
1799#line 756 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001800{
vlmfa67ddc2004-06-03 03:38:44 +00001801 yyval.a_expr = yyvsp[0].a_expr;
vlmfce48a42004-09-14 02:36:39 +00001802 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00001803 assert(yyval.a_expr->expr_type);
1804 assert(yyval.a_expr->meta_type);
vlm6a02a8a2004-09-08 00:28:11 +00001805 ;
1806 break;}
vlm0aa86902004-10-12 23:26:53 +00001807case 64:
1808#line 762 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001809{
vlmfa67ddc2004-06-03 03:38:44 +00001810 yyval.a_expr = yyvsp[0].a_expr;
1811 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1812 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1813 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm6a02a8a2004-09-08 00:28:11 +00001814 ;
1815 break;}
vlm0aa86902004-10-12 23:26:53 +00001816case 65:
1817#line 778 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001818{
vlmfa67ddc2004-06-03 03:38:44 +00001819 yyval.a_expr = yyvsp[0].a_expr;
1820 assert(yyval.a_expr->Identifier == 0);
1821 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1822 yyval.a_expr->params = yyvsp[-3].a_plist;
1823 yyval.a_expr->meta_type = AMT_PARAMTYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001824 ;
1825 break;}
vlm0aa86902004-10-12 23:26:53 +00001826case 66:
1827#line 788 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001828{
vlmfa67ddc2004-06-03 03:38:44 +00001829 int ret;
1830 yyval.a_plist = asn1p_paramlist_new(yylineno);
1831 checkmem(yyval.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 67:
1839#line 797 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001840{
vlmfa67ddc2004-06-03 03:38:44 +00001841 int ret;
1842 yyval.a_plist = yyvsp[-2].a_plist;
1843 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1844 checkmem(ret == 0);
1845 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1846 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001847 ;
1848 break;}
vlm0aa86902004-10-12 23:26:53 +00001849case 68:
1850#line 808 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001851{
vlmfa67ddc2004-06-03 03:38:44 +00001852 yyval.a_parg.governor = NULL;
1853 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001854 ;
1855 break;}
vlm0aa86902004-10-12 23:26:53 +00001856case 69:
1857#line 812 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001858{
vlmfa67ddc2004-06-03 03:38:44 +00001859 int ret;
1860 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1861 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
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 70:
1867#line 819 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001868{
vlmfa67ddc2004-06-03 03:38:44 +00001869 int ret;
1870 yyval.a_parg.governor = asn1p_ref_new(yylineno);
vlm4053ca52005-02-18 16:34:21 +00001871 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1872 checkmem(ret == 0);
1873 yyval.a_parg.argument = yyvsp[0].tv_str;
1874 ;
1875 break;}
1876case 71:
1877#line 826 "asn1p_y.y"
1878{
1879 int ret;
1880 yyval.a_parg.governor = asn1p_ref_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00001881 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1882 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1883 checkmem(ret == 0);
1884 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001885 ;
1886 break;}
vlm4053ca52005-02-18 16:34:21 +00001887case 72:
1888#line 837 "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);
vlm6a02a8a2004-09-08 00:28:11 +00001892 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1893 ;
1894 break;}
vlm4053ca52005-02-18 16:34:21 +00001895case 73:
1896#line 842 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001897{
vlmfa67ddc2004-06-03 03:38:44 +00001898 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001899 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1900 ;
1901 break;}
vlm4053ca52005-02-18 16:34:21 +00001902case 74:
1903#line 849 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001904{
vlmfa67ddc2004-06-03 03:38:44 +00001905 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001906 ;
1907 break;}
vlm4053ca52005-02-18 16:34:21 +00001908case 75:
1909#line 852 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001910{
vlmfa67ddc2004-06-03 03:38:44 +00001911 yyval.a_expr = asn1p_expr_new(yylineno);
1912 checkmem(yyval.a_expr);
1913 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1914 yyval.a_expr->expr_type = A1TC_REFERENCE;
1915 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00001916 ;
1917 break;}
vlm4053ca52005-02-18 16:34:21 +00001918case 76:
1919#line 876 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001920{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1921 break;}
vlm4053ca52005-02-18 16:34:21 +00001922case 77:
1923#line 877 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001924{ yyval.a_expr = yyvsp[0].a_expr; ;
1925 break;}
vlm4053ca52005-02-18 16:34:21 +00001926case 78:
1927#line 880 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001928{
vlmfa67ddc2004-06-03 03:38:44 +00001929 yyval.a_expr = asn1p_expr_new(yylineno);
1930 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001931 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1932 ;
1933 break;}
vlm4053ca52005-02-18 16:34:21 +00001934case 79:
1935#line 885 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001936{
vlmfa67ddc2004-06-03 03:38:44 +00001937 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001938 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1939 ;
1940 break;}
vlm4053ca52005-02-18 16:34:21 +00001941case 80:
1942#line 892 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001943{
vlmec8f6812004-08-22 03:19:54 +00001944 yyval.a_expr = yyvsp[-1].a_expr;
1945 assert(yyval.a_expr->Identifier == 0);
vlmfce48a42004-09-14 02:36:39 +00001946 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmec8f6812004-08-22 03:19:54 +00001947 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00001948 ;
1949 break;}
vlm4053ca52005-02-18 16:34:21 +00001950case 81:
1951#line 898 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001952{
vlmec8f6812004-08-22 03:19:54 +00001953 yyval.a_expr = asn1p_expr_new(yylineno);
1954 checkmem(yyval.a_expr);
1955 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1956 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
vlm6a02a8a2004-09-08 00:28:11 +00001957 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1958 ;
1959 break;}
vlm4053ca52005-02-18 16:34:21 +00001960case 82:
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;
vlm6a02a8a2004-09-08 00:28:11 +00001964 ;
1965 break;}
vlm4053ca52005-02-18 16:34:21 +00001966case 83:
1967#line 911 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001968{
vlmec8f6812004-08-22 03:19:54 +00001969 yyval.a_expr = asn1p_expr_new(yylineno);
1970 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001971 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1972 ;
1973 break;}
vlm4053ca52005-02-18 16:34:21 +00001974case 84:
1975#line 916 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001976{
vlmec8f6812004-08-22 03:19:54 +00001977 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001978 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1979 ;
1980 break;}
vlm4053ca52005-02-18 16:34:21 +00001981case 85:
1982#line 923 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001983{
vlmec8f6812004-08-22 03:19:54 +00001984 yyval.a_expr = yyvsp[0].a_expr;
1985 assert(yyval.a_expr->Identifier == 0);
vlmfce48a42004-09-14 02:36:39 +00001986 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001987 ;
1988 break;}
vlm4053ca52005-02-18 16:34:21 +00001989case 86:
1990#line 928 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001991{
vlmec8f6812004-08-22 03:19:54 +00001992 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001993 ;
1994 break;}
vlm4053ca52005-02-18 16:34:21 +00001995case 87:
1996#line 934 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001997{
vlmfa67ddc2004-06-03 03:38:44 +00001998 yyval.a_expr = yyvsp[-2].a_expr;
1999 checkmem(yyval.a_expr);
2000 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2001 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2002 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm6a02a8a2004-09-08 00:28:11 +00002003 ;
2004 break;}
vlm4053ca52005-02-18 16:34:21 +00002005case 88:
2006#line 944 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002007{ yyval.a_int = 0; ;
2008 break;}
vlm4053ca52005-02-18 16:34:21 +00002009case 89:
2010#line 945 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002011{ yyval.a_int = 1; ;
2012 break;}
vlm4053ca52005-02-18 16:34:21 +00002013case 90:
2014#line 949 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002015{
vlmfa67ddc2004-06-03 03:38:44 +00002016 yyval.a_expr = asn1p_expr_new(yylineno);
2017 checkmem(yyval.a_expr);
2018 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2019 yyval.a_expr->meta_type = AMT_OBJECT;
vlm6a02a8a2004-09-08 00:28:11 +00002020 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2021 ;
2022 break;}
vlm4053ca52005-02-18 16:34:21 +00002023case 91:
2024#line 956 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002025{
vlmfa67ddc2004-06-03 03:38:44 +00002026 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002027 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2028 ;
2029 break;}
vlm4053ca52005-02-18 16:34:21 +00002030case 92:
2031#line 963 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002032{
vlmfa67ddc2004-06-03 03:38:44 +00002033 yyval.a_expr = asn1p_expr_new(yylineno);
2034 checkmem(yyval.a_expr);
2035 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2036 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2037 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2038 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00002039 ;
2040 break;}
vlm4053ca52005-02-18 16:34:21 +00002041case 93:
2042#line 971 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002043{
vlmec8f6812004-08-22 03:19:54 +00002044 yyval.a_expr = yyvsp[-2].a_expr;
2045 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
vlmbde35d42004-11-24 17:43:29 +00002046 yyval.a_expr->marker = yyvsp[0].a_marker;
2047 yyval.a_expr->unique = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00002048 ;
2049 break;}
vlm4053ca52005-02-18 16:34:21 +00002050case 94:
2051#line 977 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002052{
vlmfa67ddc2004-06-03 03:38:44 +00002053 int ret;
2054 yyval.a_expr = asn1p_expr_new(yylineno);
2055 checkmem(yyval.a_expr);
2056 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2057 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2058 checkmem(yyval.a_expr->reference);
2059 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2060 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2061 checkmem(ret == 0);
2062 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2063 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
vlmbde35d42004-11-24 17:43:29 +00002064 yyval.a_expr->marker = yyvsp[0].a_marker;
2065 yyval.a_expr->unique = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00002066 ;
2067 break;}
vlm4053ca52005-02-18 16:34:21 +00002068case 95:
2069#line 995 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002070{ yyval.a_wsynt = 0; ;
2071 break;}
vlm4053ca52005-02-18 16:34:21 +00002072case 96:
2073#line 996 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002074{
vlmfa67ddc2004-06-03 03:38:44 +00002075 yyval.a_wsynt = yyvsp[0].a_wsynt;
vlm6a02a8a2004-09-08 00:28:11 +00002076 ;
2077 break;}
vlm4053ca52005-02-18 16:34:21 +00002078case 97:
2079#line 1003 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002080{ asn1p_lexer_hack_enable_with_syntax(); ;
2081 break;}
vlm4053ca52005-02-18 16:34:21 +00002082case 98:
2083#line 1005 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002084{
vlmfa67ddc2004-06-03 03:38:44 +00002085 yyval.a_wsynt = yyvsp[-1].a_wsynt;
vlm6a02a8a2004-09-08 00:28:11 +00002086 ;
2087 break;}
vlm4053ca52005-02-18 16:34:21 +00002088case 99:
2089#line 1011 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002090{
vlmfa67ddc2004-06-03 03:38:44 +00002091 yyval.a_wsynt = asn1p_wsyntx_new();
2092 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002093 ;
2094 break;}
vlm4053ca52005-02-18 16:34:21 +00002095case 100:
2096#line 1015 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002097{
vlmfa67ddc2004-06-03 03:38:44 +00002098 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2099 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002100 ;
2101 break;}
vlm4053ca52005-02-18 16:34:21 +00002102case 101:
2103#line 1022 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002104{
vlmfa67ddc2004-06-03 03:38:44 +00002105 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002106 ;
2107 break;}
vlm4053ca52005-02-18 16:34:21 +00002108case 102:
2109#line 1025 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002110{
vlmfa67ddc2004-06-03 03:38:44 +00002111 asn1p_ref_t *ref;
2112 int ret;
2113 ref = asn1p_ref_new(yylineno);
2114 checkmem(ref);
2115 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2116 checkmem(ret == 0);
2117 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002118 ;
2119 break;}
vlm0aa86902004-10-12 23:26:53 +00002120case 103:
vlm4053ca52005-02-18 16:34:21 +00002121#line 1037 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00002122{
2123 yyval.a_expr = asn1p_expr_new(yylineno);
2124 checkmem(yyval.a_expr);
2125 yyval.a_expr->Identifier = strdup("...");
2126 checkmem(yyval.a_expr->Identifier);
vlm0aa86902004-10-12 23:26:53 +00002127 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2128 yyval.a_expr->meta_type = AMT_TYPE;
2129 ;
2130 break;}
2131case 104:
vlm4053ca52005-02-18 16:34:21 +00002132#line 1045 "asn1p_y.y"
2133{
2134 yyval.a_expr = asn1p_expr_new(yylineno);
2135 checkmem(yyval.a_expr);
2136 yyval.a_expr->Identifier = strdup("...");
2137 checkmem(yyval.a_expr->Identifier);
2138 yyval.a_expr->value = yyvsp[0].a_value;
2139 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2140 yyval.a_expr->meta_type = AMT_TYPE;
2141 ;
2142 break;}
2143case 105:
2144#line 1054 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00002145{
2146 yyval.a_expr = asn1p_expr_new(yylineno);
2147 checkmem(yyval.a_expr);
2148 yyval.a_expr->Identifier = strdup("...");
vlm5f0128b2004-08-20 13:25:29 +00002149 yyval.a_expr->value = yyvsp[0].a_value;
2150 checkmem(yyval.a_expr->Identifier);
2151 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2152 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002153 ;
2154 break;}
vlm4053ca52005-02-18 16:34:21 +00002155case 106:
2156#line 1066 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002157{
vlmec8f6812004-08-22 03:19:54 +00002158 yyval.a_expr = yyvsp[-1].a_expr;
vlmfce48a42004-09-14 02:36:39 +00002159 yyval.a_expr->tag = yyvsp[-2].a_tag;
vlmec8f6812004-08-22 03:19:54 +00002160 /*
2161 * Outer constraint for SEQUENCE OF and SET OF applies
2162 * to the inner type.
2163 */
2164 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2165 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2166 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2167 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2168 } else {
2169 if(yyval.a_expr->constraints) {
vlmfce48a42004-09-14 02:36:39 +00002170 assert(!yyvsp[-1].a_expr);
vlmec8f6812004-08-22 03:19:54 +00002171 } else {
2172 yyval.a_expr->constraints = yyvsp[0].a_constr;
2173 }
2174 }
vlm6a02a8a2004-09-08 00:28:11 +00002175 ;
2176 break;}
vlm4053ca52005-02-18 16:34:21 +00002177case 107:
2178#line 1088 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002179{
vlm5f0128b2004-08-20 13:25:29 +00002180 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002181 ;
2182 break;}
vlm4053ca52005-02-18 16:34:21 +00002183case 108:
2184#line 1091 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002185{
vlmfa67ddc2004-06-03 03:38:44 +00002186 yyval.a_expr = asn1p_expr_new(yylineno);
2187 checkmem(yyval.a_expr);
2188 yyval.a_expr->expr_type = yyvsp[0].a_type;
2189 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002190 ;
2191 break;}
vlm4053ca52005-02-18 16:34:21 +00002192case 109:
2193#line 1097 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002194{
vlmec8f6812004-08-22 03:19:54 +00002195 yyval.a_expr = yyvsp[-1].a_expr;
2196 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2197 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2198 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002199 ;
2200 break;}
vlm4053ca52005-02-18 16:34:21 +00002201case 110:
2202#line 1103 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002203{
vlmec8f6812004-08-22 03:19:54 +00002204 yyval.a_expr = yyvsp[-1].a_expr;
2205 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2206 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2207 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002208 ;
2209 break;}
vlm4053ca52005-02-18 16:34:21 +00002210case 111:
2211#line 1109 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002212{
vlmec8f6812004-08-22 03:19:54 +00002213 yyval.a_expr = yyvsp[-1].a_expr;
2214 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2215 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2216 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002217 ;
2218 break;}
vlm4053ca52005-02-18 16:34:21 +00002219case 112:
2220#line 1115 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002221{
vlm39e5ed72004-09-05 10:40:41 +00002222 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002223 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002224 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002225 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2226 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002227 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002228 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002229 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2230 ;
2231 break;}
vlm4053ca52005-02-18 16:34:21 +00002232case 113:
2233#line 1125 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002234{
vlm39e5ed72004-09-05 10:40:41 +00002235 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002236 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002237 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002238 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2239 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002240 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002241 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002242 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2243 ;
2244 break;}
vlm4053ca52005-02-18 16:34:21 +00002245case 114:
2246#line 1135 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002247{
vlm39e5ed72004-09-05 10:40:41 +00002248 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002249 checkmem(yyval.a_expr);
vlm044f7442004-09-04 04:49:21 +00002250 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002251 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002252 ;
2253 break;}
vlm4053ca52005-02-18 16:34:21 +00002254case 115:
2255#line 1141 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002256{
vlmec8f6812004-08-22 03:19:54 +00002257 int ret;
vlm39e5ed72004-09-05 10:40:41 +00002258 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002259 checkmem(yyval.a_expr);
2260 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2261 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2262 yyvsp[0].tv_str, RLT_lowercase);
2263 checkmem(ret == 0);
vlm044f7442004-09-04 04:49:21 +00002264 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002265 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002266 ;
2267 break;}
vlm4053ca52005-02-18 16:34:21 +00002268case 116:
2269#line 1155 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002270{
vlmfa67ddc2004-06-03 03:38:44 +00002271 int ret;
2272 yyval.a_expr = yyvsp[-1].a_expr;
2273 assert(yyval.a_expr->expr_type == 0);
2274 assert(yyval.a_expr->meta_type == 0);
2275 assert(yyval.a_expr->reference == 0);
2276 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2277 checkmem(yyval.a_expr->reference);
2278 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2279 checkmem(ret == 0);
2280 free(yyvsp[-3].tv_str);
2281 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2282 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002283 ;
2284 break;}
vlm4053ca52005-02-18 16:34:21 +00002285case 117:
2286#line 1179 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002287{
vlmfa67ddc2004-06-03 03:38:44 +00002288 yyval.a_expr = asn1p_expr_new(yylineno);
2289 checkmem(yyval.a_expr);
2290 yyval.a_expr->reference = yyvsp[0].a_ref;
2291 yyval.a_expr->expr_type = A1TC_REFERENCE;
2292 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00002293 ;
2294 break;}
vlm4053ca52005-02-18 16:34:21 +00002295case 118:
2296#line 1186 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002297{
vlmfa67ddc2004-06-03 03:38:44 +00002298 yyval.a_expr = asn1p_expr_new(yylineno);
2299 checkmem(yyval.a_expr);
2300 yyval.a_expr->reference = yyvsp[0].a_ref;
2301 yyval.a_expr->expr_type = A1TC_INSTANCE;
2302 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002303 ;
2304 break;}
vlm4053ca52005-02-18 16:34:21 +00002305case 119:
2306#line 1201 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002307{
vlmfa67ddc2004-06-03 03:38:44 +00002308 int ret;
2309 yyval.a_ref = asn1p_ref_new(yylineno);
2310 checkmem(yyval.a_ref);
2311 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2312 checkmem(ret == 0);
2313 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002314 ;
2315 break;}
vlm0aa86902004-10-12 23:26:53 +00002316case 120:
vlm4053ca52005-02-18 16:34:21 +00002317#line 1209 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002318{
vlmfa67ddc2004-06-03 03:38:44 +00002319 int ret;
2320 yyval.a_ref = asn1p_ref_new(yylineno);
2321 checkmem(yyval.a_ref);
2322 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2323 checkmem(ret == 0);
vlmc94e28f2004-09-15 11:59:51 +00002324 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
vlmfa67ddc2004-06-03 03:38:44 +00002325 checkmem(ret == 0);
2326 free(yyvsp[-2].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002327 ;
2328 break;}
vlm0aa86902004-10-12 23:26:53 +00002329case 121:
vlm4053ca52005-02-18 16:34:21 +00002330#line 1219 "asn1p_y.y"
2331{
2332 int ret;
2333 yyval.a_ref = asn1p_ref_new(yylineno);
2334 checkmem(yyval.a_ref);
2335 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2336 checkmem(ret == 0);
2337 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2338 checkmem(ret == 0);
2339 free(yyvsp[-2].tv_str);
2340 ;
2341 break;}
2342case 122:
2343#line 1229 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002344{
vlmfa67ddc2004-06-03 03:38:44 +00002345 int ret;
2346 yyval.a_ref = asn1p_ref_new(yylineno);
2347 checkmem(yyval.a_ref);
vlmc94e28f2004-09-15 11:59:51 +00002348 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2349 checkmem(ret == 0);
2350 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2351 checkmem(ret == 0);
2352 free(yyvsp[-2].tv_str);
2353 ;
2354 break;}
vlm4053ca52005-02-18 16:34:21 +00002355case 123:
2356#line 1239 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002357{
2358 int ret;
2359 yyval.a_ref = asn1p_ref_new(yylineno);
2360 checkmem(yyval.a_ref);
vlmfa67ddc2004-06-03 03:38:44 +00002361 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2362 free(yyvsp[0].tv_str);
2363 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002364 ;
2365 break;}
vlm4053ca52005-02-18 16:34:21 +00002366case 124:
2367#line 1247 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002368{
vlmfa67ddc2004-06-03 03:38:44 +00002369 int ret;
2370 yyval.a_ref = yyvsp[0].a_ref;
2371 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2372 free(yyvsp[-2].tv_str);
2373 checkmem(ret == 0);
2374 /*
2375 * Move the last element infront.
2376 */
2377 {
2378 struct asn1p_ref_component_s tmp_comp;
2379 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2380 memmove(&yyval.a_ref->components[1],
2381 &yyval.a_ref->components[0],
2382 sizeof(yyval.a_ref->components[0])
2383 * (yyval.a_ref->comp_count - 1));
2384 yyval.a_ref->components[0] = tmp_comp;
2385 }
vlm6a02a8a2004-09-08 00:28:11 +00002386 ;
2387 break;}
vlm4053ca52005-02-18 16:34:21 +00002388case 125:
2389#line 1269 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002390{
vlmfa67ddc2004-06-03 03:38:44 +00002391 int ret;
2392 yyval.a_ref = asn1p_ref_new(yylineno);
2393 checkmem(yyval.a_ref);
2394 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2395 free(yyvsp[0].a_refcomp.name);
2396 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002397 ;
2398 break;}
vlm4053ca52005-02-18 16:34:21 +00002399case 126:
2400#line 1277 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002401{
vlmfa67ddc2004-06-03 03:38:44 +00002402 int ret;
2403 yyval.a_ref = yyvsp[-2].a_ref;
2404 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2405 free(yyvsp[0].a_refcomp.name);
2406 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002407 ;
2408 break;}
vlm4053ca52005-02-18 16:34:21 +00002409case 129:
2410#line 1291 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002411{
vlmfa67ddc2004-06-03 03:38:44 +00002412 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2413 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002414 ;
2415 break;}
vlm4053ca52005-02-18 16:34:21 +00002416case 130:
2417#line 1296 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002418{
vlmfa67ddc2004-06-03 03:38:44 +00002419 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2420 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002421 ;
2422 break;}
vlm4053ca52005-02-18 16:34:21 +00002423case 131:
2424#line 1309 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002425{
vlmfa67ddc2004-06-03 03:38:44 +00002426 yyval.a_expr = yyvsp[-2].a_expr;
2427 assert(yyval.a_expr->Identifier == NULL);
2428 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2429 yyval.a_expr->meta_type = AMT_VALUE;
2430 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002431 ;
2432 break;}
vlm4053ca52005-02-18 16:34:21 +00002433case 132:
2434#line 1319 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002435{
2436 yyval.a_value = asn1p_value_fromint(0);
2437 checkmem(yyval.a_value);
2438 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2439 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2440 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2441 ;
2442 break;}
vlm4053ca52005-02-18 16:34:21 +00002443case 133:
2444#line 1326 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002445{ asn1p_lexer_hack_push_opaque_state(); ;
2446 break;}
vlm4053ca52005-02-18 16:34:21 +00002447case 134:
2448#line 1326 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002449{
vlmfa67ddc2004-06-03 03:38:44 +00002450 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2451 checkmem(yyval.a_value);
2452 yyval.a_value->type = ATV_UNPARSED;
vlm6a02a8a2004-09-08 00:28:11 +00002453 ;
2454 break;}
vlm4053ca52005-02-18 16:34:21 +00002455case 135:
2456#line 1331 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002457{
2458 yyval.a_value = asn1p_value_fromint(0);
2459 checkmem(yyval.a_value);
2460 yyval.a_value->type = ATV_NULL;
2461 ;
2462 break;}
vlm4053ca52005-02-18 16:34:21 +00002463case 136:
2464#line 1336 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002465{
2466 yyval.a_value = asn1p_value_fromint(0);
2467 checkmem(yyval.a_value);
2468 yyval.a_value->type = ATV_FALSE;
2469 ;
2470 break;}
vlm4053ca52005-02-18 16:34:21 +00002471case 137:
2472#line 1341 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002473{
2474 yyval.a_value = asn1p_value_fromint(0);
2475 checkmem(yyval.a_value);
2476 yyval.a_value->type = ATV_TRUE;
2477 ;
2478 break;}
vlm4053ca52005-02-18 16:34:21 +00002479case 138:
2480#line 1346 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002481{
vlmfa67ddc2004-06-03 03:38:44 +00002482 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2483 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002484 ;
2485 break;}
vlm4053ca52005-02-18 16:34:21 +00002486case 139:
2487#line 1350 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002488{
vlmfa67ddc2004-06-03 03:38:44 +00002489 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2490 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002491 ;
2492 break;}
vlm4053ca52005-02-18 16:34:21 +00002493case 140:
2494#line 1354 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002495{
vlmfa67ddc2004-06-03 03:38:44 +00002496 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2497 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002498 ;
2499 break;}
vlm0aa86902004-10-12 23:26:53 +00002500case 141:
vlm4053ca52005-02-18 16:34:21 +00002501#line 1358 "asn1p_y.y"
vlm151c0b22004-09-22 16:03:36 +00002502{
2503 yyval.a_value = yyvsp[0].a_value;
2504 ;
2505 break;}
vlm0aa86902004-10-12 23:26:53 +00002506case 142:
vlm4053ca52005-02-18 16:34:21 +00002507#line 1361 "asn1p_y.y"
2508{
2509 yyval.a_value = yyvsp[0].a_value;
2510 ;
2511 break;}
2512case 143:
2513#line 1367 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002514{
vlmfa67ddc2004-06-03 03:38:44 +00002515 asn1p_ref_t *ref;
2516 int ret;
2517 ref = asn1p_ref_new(yylineno);
2518 checkmem(ref);
2519 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2520 checkmem(ret == 0);
2521 yyval.a_value = asn1p_value_fromref(ref, 0);
2522 checkmem(yyval.a_value);
2523 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002524 ;
2525 break;}
vlm4053ca52005-02-18 16:34:21 +00002526case 144:
2527#line 1378 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002528{
vlmfa67ddc2004-06-03 03:38:44 +00002529 asn1p_ref_t *ref;
2530 int ret;
2531 ref = asn1p_ref_new(yylineno);
2532 checkmem(ref);
2533 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2534 checkmem(ret == 0);
2535 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2536 checkmem(ret == 0);
2537 yyval.a_value = asn1p_value_fromref(ref, 0);
2538 checkmem(yyval.a_value);
2539 free(yyvsp[-2].tv_str);
2540 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002541 ;
2542 break;}
vlm4053ca52005-02-18 16:34:21 +00002543case 145:
2544#line 1395 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002545{
vlmfa67ddc2004-06-03 03:38:44 +00002546 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
2547 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2548 checkmem(yyval.tv_opaque.buf);
2549 yyval.tv_opaque.buf[0] = '{';
2550 yyval.tv_opaque.buf[1] = ' ';
2551 memcpy(yyval.tv_opaque.buf + 2, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2552 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2553 free(yyvsp[0].tv_opaque.buf);
vlm6a02a8a2004-09-08 00:28:11 +00002554 ;
2555 break;}
vlm4053ca52005-02-18 16:34:21 +00002556case 146:
2557#line 1405 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002558{
vlmfa67ddc2004-06-03 03:38:44 +00002559 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2560 char *p = malloc(newsize + 1);
2561 checkmem(p);
2562 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2563 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2564 p[newsize] = '\0';
2565 free(yyvsp[-1].tv_opaque.buf);
2566 free(yyvsp[0].tv_opaque.buf);
2567 yyval.tv_opaque.buf = p;
2568 yyval.tv_opaque.len = newsize;
vlm6a02a8a2004-09-08 00:28:11 +00002569 ;
2570 break;}
vlm4053ca52005-02-18 16:34:21 +00002571case 147:
2572#line 1420 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002573{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2574 break;}
vlm4053ca52005-02-18 16:34:21 +00002575case 148:
2576#line 1421 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002577{ yyval.a_type = ASN_BASIC_NULL; ;
2578 break;}
vlm4053ca52005-02-18 16:34:21 +00002579case 149:
2580#line 1422 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002581{ yyval.a_type = ASN_BASIC_REAL; ;
2582 break;}
vlm4053ca52005-02-18 16:34:21 +00002583case 150:
2584#line 1423 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002585{ yyval.a_type = yyvsp[0].a_type; ;
2586 break;}
vlm4053ca52005-02-18 16:34:21 +00002587case 151:
2588#line 1424 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002589{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
2590 break;}
vlm4053ca52005-02-18 16:34:21 +00002591case 152:
2592#line 1425 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002593{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
2594 break;}
vlm4053ca52005-02-18 16:34:21 +00002595case 153:
2596#line 1426 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002597{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
2598 break;}
vlm4053ca52005-02-18 16:34:21 +00002599case 154:
2600#line 1427 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002601{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
2602 break;}
vlm4053ca52005-02-18 16:34:21 +00002603case 155:
2604#line 1428 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002605{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
2606 break;}
vlm4053ca52005-02-18 16:34:21 +00002607case 156:
2608#line 1429 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002609{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
2610 break;}
vlm4053ca52005-02-18 16:34:21 +00002611case 157:
2612#line 1430 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002613{ yyval.a_type = ASN_BASIC_UTCTime; ;
2614 break;}
vlm4053ca52005-02-18 16:34:21 +00002615case 158:
2616#line 1431 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002617{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2618 break;}
vlm4053ca52005-02-18 16:34:21 +00002619case 159:
2620#line 1438 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002621{ yyval.a_type = ASN_BASIC_INTEGER; ;
2622 break;}
vlm4053ca52005-02-18 16:34:21 +00002623case 160:
2624#line 1439 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002625{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2626 break;}
vlm4053ca52005-02-18 16:34:21 +00002627case 161:
2628#line 1440 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002629{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2630 break;}
vlm4053ca52005-02-18 16:34:21 +00002631case 162:
2632#line 1444 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002633{
vlm39e5ed72004-09-05 10:40:41 +00002634 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002635 checkmem(yyval.a_expr);
2636 yyval.a_expr->expr_type = yyvsp[0].a_type;
2637 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002638 ;
2639 break;}
vlm4053ca52005-02-18 16:34:21 +00002640case 163:
2641#line 1450 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002642{
vlmfa67ddc2004-06-03 03:38:44 +00002643 if(yyvsp[0].a_expr) {
2644 yyval.a_expr = yyvsp[0].a_expr;
2645 } else {
vlm39e5ed72004-09-05 10:40:41 +00002646 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002647 checkmem(yyval.a_expr);
2648 }
2649 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2650 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002651 ;
2652 break;}
vlm4053ca52005-02-18 16:34:21 +00002653case 164:
2654#line 1463 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002655{ yyval.a_type = ASN_STRING_BMPString; ;
2656 break;}
vlm4053ca52005-02-18 16:34:21 +00002657case 165:
2658#line 1464 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002659{
vlmfa67ddc2004-06-03 03:38:44 +00002660 yyval.a_type = ASN_STRING_GeneralString;
vlmc94e28f2004-09-15 11:59:51 +00002661 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002662 ;
2663 break;}
vlm4053ca52005-02-18 16:34:21 +00002664case 166:
2665#line 1468 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002666{
vlmc94e28f2004-09-15 11:59:51 +00002667 yyval.a_type = ASN_STRING_GraphicString;
2668 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002669 ;
2670 break;}
vlm4053ca52005-02-18 16:34:21 +00002671case 167:
2672#line 1472 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002673{ yyval.a_type = ASN_STRING_IA5String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002674 break;}
vlm4053ca52005-02-18 16:34:21 +00002675case 168:
2676#line 1473 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002677{ yyval.a_type = ASN_STRING_ISO646String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002678 break;}
vlm4053ca52005-02-18 16:34:21 +00002679case 169:
2680#line 1474 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002681{ yyval.a_type = ASN_STRING_NumericString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002682 break;}
vlm4053ca52005-02-18 16:34:21 +00002683case 170:
2684#line 1475 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002685{ yyval.a_type = ASN_STRING_PrintableString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002686 break;}
vlm4053ca52005-02-18 16:34:21 +00002687case 171:
2688#line 1476 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002689{
2690 yyval.a_type = ASN_STRING_T61String;
2691 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2692 ;
vlm6a02a8a2004-09-08 00:28:11 +00002693 break;}
vlm4053ca52005-02-18 16:34:21 +00002694case 172:
2695#line 1480 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002696{ yyval.a_type = ASN_STRING_TeletexString; ;
2697 break;}
vlm4053ca52005-02-18 16:34:21 +00002698case 173:
2699#line 1481 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002700{ yyval.a_type = ASN_STRING_UniversalString; ;
2701 break;}
vlm4053ca52005-02-18 16:34:21 +00002702case 174:
2703#line 1482 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002704{ yyval.a_type = ASN_STRING_UTF8String; ;
2705 break;}
vlm4053ca52005-02-18 16:34:21 +00002706case 175:
2707#line 1483 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002708{
2709 yyval.a_type = ASN_STRING_VideotexString;
2710 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2711 ;
2712 break;}
vlm4053ca52005-02-18 16:34:21 +00002713case 176:
2714#line 1487 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002715{ yyval.a_type = ASN_STRING_VisibleString; ;
2716 break;}
vlm4053ca52005-02-18 16:34:21 +00002717case 177:
2718#line 1488 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002719{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2720 break;}
vlm4053ca52005-02-18 16:34:21 +00002721case 183:
2722#line 1500 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002723{ yyval.a_constr = 0; ;
2724 break;}
vlm4053ca52005-02-18 16:34:21 +00002725case 184:
2726#line 1501 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002727{
vlm39e5ed72004-09-05 10:40:41 +00002728 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002729 ;
2730 break;}
vlm4053ca52005-02-18 16:34:21 +00002731case 185:
2732#line 1507 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002733{
vlm39e5ed72004-09-05 10:40:41 +00002734 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002735 ;
2736 break;}
vlm4053ca52005-02-18 16:34:21 +00002737case 186:
2738#line 1510 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002739{
vlmfa67ddc2004-06-03 03:38:44 +00002740 /*
2741 * This is a special case, for compatibility purposes.
vlm9283dbe2004-08-18 04:59:12 +00002742 * It goes without parentheses.
vlmfa67ddc2004-06-03 03:38:44 +00002743 */
vlm5f0128b2004-08-20 13:25:29 +00002744 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002745 ;
2746 break;}
vlm4053ca52005-02-18 16:34:21 +00002747case 187:
2748#line 1520 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002749{
vlmfa67ddc2004-06-03 03:38:44 +00002750 yyval.a_constr = yyvsp[-1].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002751 ;
2752 break;}
vlm4053ca52005-02-18 16:34:21 +00002753case 188:
2754#line 1523 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002755{
vlm9283dbe2004-08-18 04:59:12 +00002756 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002757 ;
2758 break;}
vlm4053ca52005-02-18 16:34:21 +00002759case 189:
2760#line 1529 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002761{
vlmfa67ddc2004-06-03 03:38:44 +00002762 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002763 ;
2764 break;}
vlm4053ca52005-02-18 16:34:21 +00002765case 190:
2766#line 1532 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002767{
vlmfa67ddc2004-06-03 03:38:44 +00002768 asn1p_constraint_t *ct;
2769 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002770 ct->type = ACT_EL_EXT;
2771 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00002772 ;
2773 break;}
vlm4053ca52005-02-18 16:34:21 +00002774case 191:
2775#line 1538 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002776{
vlmfa67ddc2004-06-03 03:38:44 +00002777 asn1p_constraint_t *ct;
2778 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002779 ct->type = ACT_EL_EXT;
2780 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
vlm6f5eb0b2004-08-13 12:35:09 +00002781 ct = yyval.a_constr;
2782 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002783 ;
2784 break;}
vlm4053ca52005-02-18 16:34:21 +00002785case 192:
2786#line 1549 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002787{
vlm9283dbe2004-08-18 04:59:12 +00002788 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002789 ;
2790 break;}
vlm4053ca52005-02-18 16:34:21 +00002791case 193:
2792#line 1552 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002793{
vlmfa67ddc2004-06-03 03:38:44 +00002794 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002795 ;
2796 break;}
vlm4053ca52005-02-18 16:34:21 +00002797case 194:
2798#line 1555 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002799{
vlmfa67ddc2004-06-03 03:38:44 +00002800 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002801 ;
2802 break;}
vlm4053ca52005-02-18 16:34:21 +00002803case 195:
2804#line 1558 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002805{
vlmfa67ddc2004-06-03 03:38:44 +00002806 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002807 ;
2808 break;}
vlm4053ca52005-02-18 16:34:21 +00002809case 196:
2810#line 1564 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002811{
vlmfa67ddc2004-06-03 03:38:44 +00002812 int ret;
2813 yyval.a_constr = asn1p_constraint_new(yylineno);
2814 checkmem(yyval.a_constr);
2815 yyval.a_constr->type = yyvsp[-3].a_ctype;
2816 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2817 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002818 ;
2819 break;}
vlm4053ca52005-02-18 16:34:21 +00002820case 197:
2821#line 1572 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002822{
vlm9283dbe2004-08-18 04:59:12 +00002823 int ret;
2824 yyval.a_constr = asn1p_constraint_new(yylineno);
2825 checkmem(yyval.a_constr);
2826 yyval.a_constr->type = ACT_CA_SET;
2827 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2828 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002829 ;
2830 break;}
vlm4053ca52005-02-18 16:34:21 +00002831case 198:
2832#line 1580 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002833{
vlm9283dbe2004-08-18 04:59:12 +00002834 yyval.a_constr = asn1p_constraint_new(yylineno);
2835 checkmem(yyval.a_constr);
2836 yyval.a_constr->type = ACT_EL_VALUE;
2837 yyval.a_constr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002838 ;
2839 break;}
vlm4053ca52005-02-18 16:34:21 +00002840case 199:
2841#line 1586 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002842{
vlm0aa86902004-10-12 23:26:53 +00002843 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 = yyvsp[0].a_value;
vlmc94e28f2004-09-15 11:59:51 +00002848 ;
2849 break;}
vlm0aa86902004-10-12 23:26:53 +00002850case 200:
vlm4053ca52005-02-18 16:34:21 +00002851#line 1593 "asn1p_y.y"
2852{
2853 yyval.a_constr = asn1p_constraint_new(yylineno);
2854 checkmem(yyval.a_constr);
2855 yyval.a_constr->type = yyvsp[-1].a_ctype;
2856 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2857 yyval.a_constr->range_stop = yyvsp[0].a_value;
2858 yyval.a_constr->range_start->type = ATV_MIN;
2859 ;
2860 break;}
2861case 201:
2862#line 1601 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00002863{
2864 yyval.a_constr = asn1p_constraint_new(yylineno);
2865 checkmem(yyval.a_constr);
2866 yyval.a_constr->type = yyvsp[-1].a_ctype;
2867 yyval.a_constr->range_start = yyvsp[-2].a_value;
2868 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2869 yyval.a_constr->range_stop->type = ATV_MAX;
2870 ;
2871 break;}
vlm0aa86902004-10-12 23:26:53 +00002872case 202:
vlm4053ca52005-02-18 16:34:21 +00002873#line 1609 "asn1p_y.y"
vlm151c0b22004-09-22 16:03:36 +00002874{
vlm4053ca52005-02-18 16:34:21 +00002875 yyval.a_constr = asn1p_constraint_new(yylineno);
2876 checkmem(yyval.a_constr);
2877 yyval.a_constr->type = yyvsp[-1].a_ctype;
2878 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2879 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2880 yyval.a_constr->range_start->type = ATV_MIN;
2881 yyval.a_constr->range_stop->type = ATV_MAX;
vlm151c0b22004-09-22 16:03:36 +00002882 ;
2883 break;}
vlmc94e28f2004-09-15 11:59:51 +00002884case 203:
vlm4053ca52005-02-18 16:34:21 +00002885#line 1618 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00002886{
2887 yyval.a_constr = yyvsp[0].a_constr;
2888 ;
vlmc94e28f2004-09-15 11:59:51 +00002889 break;}
2890case 204:
vlm4053ca52005-02-18 16:34:21 +00002891#line 1621 "asn1p_y.y"
2892{
2893 yyval.a_constr = yyvsp[0].a_constr;
2894 ;
vlm0aa86902004-10-12 23:26:53 +00002895 break;}
2896case 205:
vlm4053ca52005-02-18 16:34:21 +00002897#line 1627 "asn1p_y.y"
2898{ yyval.a_ctype = ACT_EL_RANGE; ;
vlm0aa86902004-10-12 23:26:53 +00002899 break;}
2900case 206:
vlm4053ca52005-02-18 16:34:21 +00002901#line 1628 "asn1p_y.y"
2902{ yyval.a_ctype = ACT_EL_RLRANGE; ;
vlm0aa86902004-10-12 23:26:53 +00002903 break;}
2904case 207:
vlm4053ca52005-02-18 16:34:21 +00002905#line 1629 "asn1p_y.y"
2906{ yyval.a_ctype = ACT_EL_LLRANGE; ;
vlm0aa86902004-10-12 23:26:53 +00002907 break;}
2908case 208:
vlm4053ca52005-02-18 16:34:21 +00002909#line 1630 "asn1p_y.y"
2910{ yyval.a_ctype = ACT_EL_ULRANGE; ;
2911 break;}
2912case 209:
2913#line 1634 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002914{
vlm39e5ed72004-09-05 10:40:41 +00002915 yyval.a_ctype = ACT_CT_SIZE;
vlm6a02a8a2004-09-08 00:28:11 +00002916 ;
2917 break;}
vlm4053ca52005-02-18 16:34:21 +00002918case 210:
2919#line 1637 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002920{
vlm39e5ed72004-09-05 10:40:41 +00002921 yyval.a_ctype = ACT_CT_FROM;
vlm6a02a8a2004-09-08 00:28:11 +00002922 ;
2923 break;}
vlm4053ca52005-02-18 16:34:21 +00002924case 211:
2925#line 1643 "asn1p_y.y"
2926{
2927 yyval.a_value = asn1p_value_fromint(0);
2928 checkmem(yyval.a_value);
2929 yyval.a_value->type = ATV_FALSE;
2930 ;
2931 break;}
2932case 212:
2933#line 1648 "asn1p_y.y"
2934{
2935 yyval.a_value = asn1p_value_fromint(1);
2936 checkmem(yyval.a_value);
2937 yyval.a_value->type = ATV_TRUE;
2938 ;
2939 break;}
2940case 213:
2941#line 1653 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002942{
vlmfa67ddc2004-06-03 03:38:44 +00002943 yyval.a_value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002944 ;
2945 break;}
vlm4053ca52005-02-18 16:34:21 +00002946case 214:
2947#line 1656 "asn1p_y.y"
2948{
2949 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2950 checkmem(yyval.a_value);
2951 ;
2952 break;}
2953case 215:
2954#line 1660 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002955{
vlmfa67ddc2004-06-03 03:38:44 +00002956 asn1p_ref_t *ref;
2957 int ret;
2958 ref = asn1p_ref_new(yylineno);
2959 checkmem(ref);
2960 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2961 checkmem(ret == 0);
2962 yyval.a_value = asn1p_value_fromref(ref, 0);
2963 checkmem(yyval.a_value);
2964 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002965 ;
2966 break;}
vlm4053ca52005-02-18 16:34:21 +00002967case 216:
2968#line 1671 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002969{
vlm4053ca52005-02-18 16:34:21 +00002970 asn1p_ref_t *ref;
2971 int ret;
2972 ref = asn1p_ref_new(yylineno);
2973 checkmem(ref);
2974 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2975 checkmem(ret == 0);
2976 yyval.a_value = asn1p_value_fromref(ref, 0);
vlmfa67ddc2004-06-03 03:38:44 +00002977 checkmem(yyval.a_value);
vlm4053ca52005-02-18 16:34:21 +00002978 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002979 ;
2980 break;}
vlm4053ca52005-02-18 16:34:21 +00002981case 217:
2982#line 1685 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002983{
vlmfa67ddc2004-06-03 03:38:44 +00002984 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002985 ;
2986 break;}
vlm4053ca52005-02-18 16:34:21 +00002987case 218:
2988#line 1691 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002989{
vlmfa67ddc2004-06-03 03:38:44 +00002990 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002991 ;
2992 break;}
vlm4053ca52005-02-18 16:34:21 +00002993case 219:
2994#line 1694 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002995{
vlmfa67ddc2004-06-03 03:38:44 +00002996 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002997 ;
2998 break;}
vlm4053ca52005-02-18 16:34:21 +00002999case 220:
3000#line 1700 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003001{
vlmfa67ddc2004-06-03 03:38:44 +00003002 yyval.a_constr = asn1p_constraint_new(yylineno);
3003 checkmem(yyval.a_constr);
3004 yyval.a_constr->type = ACT_EL_EXT;
vlm6a02a8a2004-09-08 00:28:11 +00003005 ;
3006 break;}
vlm4053ca52005-02-18 16:34:21 +00003007case 221:
3008#line 1705 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003009{
vlmfa67ddc2004-06-03 03:38:44 +00003010 yyval.a_constr = asn1p_constraint_new(yylineno);
3011 checkmem(yyval.a_constr);
3012 yyval.a_constr->type = ACT_EL_VALUE;
3013 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3014 yyval.a_constr->presence = yyvsp[0].a_pres;
vlm6a02a8a2004-09-08 00:28:11 +00003015 ;
3016 break;}
vlm4053ca52005-02-18 16:34:21 +00003017case 222:
3018#line 1718 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003019{ yyval.a_pres = ACPRES_DEFAULT; ;
3020 break;}
vlm4053ca52005-02-18 16:34:21 +00003021case 223:
3022#line 1719 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003023{ yyval.a_pres = yyvsp[0].a_pres; ;
3024 break;}
vlm4053ca52005-02-18 16:34:21 +00003025case 224:
3026#line 1723 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003027{
vlmfa67ddc2004-06-03 03:38:44 +00003028 yyval.a_pres = ACPRES_PRESENT;
vlm6a02a8a2004-09-08 00:28:11 +00003029 ;
3030 break;}
vlm4053ca52005-02-18 16:34:21 +00003031case 225:
3032#line 1726 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003033{
vlmfa67ddc2004-06-03 03:38:44 +00003034 yyval.a_pres = ACPRES_ABSENT;
vlm6a02a8a2004-09-08 00:28:11 +00003035 ;
3036 break;}
vlm4053ca52005-02-18 16:34:21 +00003037case 226:
3038#line 1729 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003039{
vlmfa67ddc2004-06-03 03:38:44 +00003040 yyval.a_pres = ACPRES_OPTIONAL;
vlm6a02a8a2004-09-08 00:28:11 +00003041 ;
3042 break;}
vlm0aa86902004-10-12 23:26:53 +00003043case 227:
vlm4053ca52005-02-18 16:34:21 +00003044#line 1735 "asn1p_y.y"
3045{
3046 yyval.a_constr = yyvsp[0].a_constr;
3047 ;
3048 break;}
3049case 228:
3050#line 1738 "asn1p_y.y"
3051{
3052 yyval.a_constr = yyvsp[0].a_constr;
3053 ;
3054 break;}
3055case 229:
3056#line 1747 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003057{
vlmfa67ddc2004-06-03 03:38:44 +00003058 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3059 asn1p_constraint_t *ct;
3060 int ret;
3061 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3062 checkmem(ret == 0);
3063 ct = asn1p_constraint_new(yylineno);
3064 checkmem(yyval.a_constr);
3065 ct->type = ACT_EL_VALUE;
3066 ct->value = asn1p_value_fromref(ref, 0);
3067 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003068 ;
3069 break;}
vlm4053ca52005-02-18 16:34:21 +00003070case 230:
3071#line 1762 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003072{
vlmfa67ddc2004-06-03 03:38:44 +00003073 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003074 ;
3075 break;}
vlm4053ca52005-02-18 16:34:21 +00003076case 231:
3077#line 1768 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003078{
vlmfa67ddc2004-06-03 03:38:44 +00003079 yyval.a_constr = asn1p_constraint_new(yylineno);
3080 checkmem(yyval.a_constr);
3081 yyval.a_constr->type = ACT_EL_VALUE;
3082 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003083 ;
3084 break;}
vlm4053ca52005-02-18 16:34:21 +00003085case 232:
3086#line 1774 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003087{
vlmfa67ddc2004-06-03 03:38:44 +00003088 asn1p_constraint_t *ct;
3089 ct = asn1p_constraint_new(yylineno);
3090 checkmem(ct);
3091 ct->type = ACT_EL_VALUE;
3092 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3093 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00003094 ;
3095 break;}
vlm4053ca52005-02-18 16:34:21 +00003096case 233:
3097#line 1788 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003098{
vlmfa67ddc2004-06-03 03:38:44 +00003099 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3100 int ret;
3101 *p = '@';
3102 strcpy(p + 1, yyvsp[0].tv_str);
3103 yyval.a_ref = asn1p_ref_new(yylineno);
3104 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3105 checkmem(ret == 0);
3106 free(p);
3107 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003108 ;
3109 break;}
vlm4053ca52005-02-18 16:34:21 +00003110case 234:
3111#line 1799 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003112{
vlmfa67ddc2004-06-03 03:38:44 +00003113 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3114 int ret;
3115 p[0] = '@';
3116 p[1] = '.';
3117 strcpy(p + 2, yyvsp[0].tv_str);
3118 yyval.a_ref = asn1p_ref_new(yylineno);
3119 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3120 checkmem(ret == 0);
3121 free(p);
3122 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003123 ;
3124 break;}
vlm4053ca52005-02-18 16:34:21 +00003125case 235:
3126#line 1815 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003127{
vlmfa67ddc2004-06-03 03:38:44 +00003128 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003129 ;
3130 break;}
vlm4053ca52005-02-18 16:34:21 +00003131case 236:
3132#line 1818 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003133{
vlmfa67ddc2004-06-03 03:38:44 +00003134 int l1 = strlen(yyvsp[-2].tv_str);
3135 int l3 = strlen(yyvsp[0].tv_str);
3136 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3137 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3138 yyval.tv_str[l1] = '.';
3139 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3140 yyval.tv_str[l1 + 1 + l3] = '\0';
vlm6a02a8a2004-09-08 00:28:11 +00003141 ;
3142 break;}
vlm4053ca52005-02-18 16:34:21 +00003143case 237:
3144#line 1836 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003145{
vlmc94e28f2004-09-15 11:59:51 +00003146 yyval.a_marker.flags = EM_NOMARK;
3147 yyval.a_marker.default_value = 0;
vlm6a02a8a2004-09-08 00:28:11 +00003148 ;
3149 break;}
vlm4053ca52005-02-18 16:34:21 +00003150case 238:
3151#line 1840 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003152{ yyval.a_marker = yyvsp[0].a_marker; ;
vlma2374a02004-09-14 02:44:07 +00003153 break;}
vlm4053ca52005-02-18 16:34:21 +00003154case 239:
3155#line 1844 "asn1p_y.y"
vlma2374a02004-09-14 02:44:07 +00003156{
vlmc94e28f2004-09-15 11:59:51 +00003157 yyval.a_marker.flags = EM_OPTIONAL;
3158 yyval.a_marker.default_value = 0;
vlma2374a02004-09-14 02:44:07 +00003159 ;
3160 break;}
vlm4053ca52005-02-18 16:34:21 +00003161case 240:
3162#line 1848 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003163{
3164 yyval.a_marker.flags = EM_DEFAULT;
3165 yyval.a_marker.default_value = yyvsp[0].a_value;
3166 ;
3167 break;}
vlm4053ca52005-02-18 16:34:21 +00003168case 241:
3169#line 1871 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003170{
vlm39e5ed72004-09-05 10:40:41 +00003171 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003172 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003173 ;
3174 break;}
vlm4053ca52005-02-18 16:34:21 +00003175case 242:
3176#line 1875 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003177{
vlmfa67ddc2004-06-03 03:38:44 +00003178 yyval.a_expr = yyvsp[-1].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00003179 ;
3180 break;}
vlm4053ca52005-02-18 16:34:21 +00003181case 243:
3182#line 1881 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003183{
vlm39e5ed72004-09-05 10:40:41 +00003184 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003185 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003186 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3187 ;
3188 break;}
vlm4053ca52005-02-18 16:34:21 +00003189case 244:
3190#line 1886 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003191{
vlmfa67ddc2004-06-03 03:38:44 +00003192 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00003193 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3194 ;
3195 break;}
vlm4053ca52005-02-18 16:34:21 +00003196case 245:
3197#line 1893 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003198{
vlm39e5ed72004-09-05 10:40:41 +00003199 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003200 checkmem(yyval.a_expr);
3201 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3202 yyval.a_expr->meta_type = AMT_VALUE;
3203 yyval.a_expr->Identifier = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003204 ;
3205 break;}
vlm0aa86902004-10-12 23:26:53 +00003206case 246:
vlm4053ca52005-02-18 16:34:21 +00003207#line 1900 "asn1p_y.y"
3208{
3209 yyval.a_expr = asn1p_expr_new(yylineno);
3210 checkmem(yyval.a_expr);
3211 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3212 yyval.a_expr->meta_type = AMT_VALUE;
3213 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3214 yyval.a_expr->value = yyvsp[-1].a_value;
3215 ;
3216 break;}
3217case 247:
3218#line 1908 "asn1p_y.y"
3219{
3220 yyval.a_expr = asn1p_expr_new(yylineno);
3221 checkmem(yyval.a_expr);
3222 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3223 yyval.a_expr->meta_type = AMT_VALUE;
3224 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3225 yyval.a_expr->value = yyvsp[-1].a_value;
3226 ;
3227 break;}
3228case 248:
3229#line 1916 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003230{
vlm39e5ed72004-09-05 10:40:41 +00003231 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003232 checkmem(yyval.a_expr);
3233 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3234 yyval.a_expr->meta_type = AMT_VALUE;
3235 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00003236 ;
3237 break;}
vlm4053ca52005-02-18 16:34:21 +00003238case 249:
3239#line 1923 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003240{
vlm39e5ed72004-09-05 10:40:41 +00003241 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003242 checkmem(yyval.a_expr);
3243 yyval.a_expr->Identifier = strdup("...");
3244 checkmem(yyval.a_expr->Identifier);
3245 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3246 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00003247 ;
3248 break;}
vlm0aa86902004-10-12 23:26:53 +00003249case 250:
vlm4053ca52005-02-18 16:34:21 +00003250#line 1934 "asn1p_y.y"
3251{
3252 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3253 checkmem(yyval.a_value);
3254 ;
vlm6a02a8a2004-09-08 00:28:11 +00003255 break;}
vlm0aa86902004-10-12 23:26:53 +00003256case 251:
vlm4053ca52005-02-18 16:34:21 +00003257#line 1938 "asn1p_y.y"
3258{
3259 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3260 checkmem(yyval.a_value);
3261 ;
vlmc94e28f2004-09-15 11:59:51 +00003262 break;}
vlm0aa86902004-10-12 23:26:53 +00003263case 252:
vlm4053ca52005-02-18 16:34:21 +00003264#line 1969 "asn1p_y.y"
3265{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3266 break;}
3267case 253:
3268#line 1970 "asn1p_y.y"
3269{ yyval.a_tag = yyvsp[0].a_tag; ;
3270 break;}
3271case 254:
3272#line 1974 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003273{
vlm2728a8d2005-01-23 09:51:44 +00003274 yyval.a_tag = yyvsp[-1].a_tag;
3275 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
vlm6a02a8a2004-09-08 00:28:11 +00003276 ;
3277 break;}
vlm4053ca52005-02-18 16:34:21 +00003278case 255:
3279#line 1981 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003280{
vlm2728a8d2005-01-23 09:51:44 +00003281 yyval.a_tag = yyvsp[-2].a_tag;
3282 yyval.a_tag.tag_value = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00003283 ;
3284 break;}
vlm4053ca52005-02-18 16:34:21 +00003285case 256:
3286#line 1987 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003287{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
vlm6a02a8a2004-09-08 00:28:11 +00003288 break;}
vlm4053ca52005-02-18 16:34:21 +00003289case 257:
3290#line 1988 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003291{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
vlm151c0b22004-09-22 16:03:36 +00003292 break;}
vlm4053ca52005-02-18 16:34:21 +00003293case 258:
3294#line 1989 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003295{ yyval.a_tag.tag_class = TC_APPLICATION; ;
vlm0aa86902004-10-12 23:26:53 +00003296 break;}
vlm4053ca52005-02-18 16:34:21 +00003297case 259:
3298#line 1990 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003299{ yyval.a_tag.tag_class = TC_PRIVATE; ;
3300 break;}
vlm4053ca52005-02-18 16:34:21 +00003301case 260:
3302#line 1994 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003303{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3304 break;}
vlm4053ca52005-02-18 16:34:21 +00003305case 261:
3306#line 1995 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003307{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3308 break;}
vlm4053ca52005-02-18 16:34:21 +00003309case 262:
3310#line 1996 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003311{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3312 break;}
vlm2728a8d2005-01-23 09:51:44 +00003313case 263:
vlm4053ca52005-02-18 16:34:21 +00003314#line 2000 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003315{
3316 checkmem(yyvsp[0].tv_str);
3317 yyval.tv_str = yyvsp[0].tv_str;
3318 ;
3319 break;}
3320case 264:
vlm4053ca52005-02-18 16:34:21 +00003321#line 2004 "asn1p_y.y"
3322{
3323 checkmem(yyvsp[0].tv_str);
3324 yyval.tv_str = yyvsp[0].tv_str;
3325 ;
vlm0aa86902004-10-12 23:26:53 +00003326 break;}
vlm2728a8d2005-01-23 09:51:44 +00003327case 265:
vlm4053ca52005-02-18 16:34:21 +00003328#line 2012 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00003329{
vlm4053ca52005-02-18 16:34:21 +00003330 checkmem(yyvsp[0].tv_str);
vlm0aa86902004-10-12 23:26:53 +00003331 yyval.tv_str = yyvsp[0].tv_str;
3332 ;
3333 break;}
vlm2728a8d2005-01-23 09:51:44 +00003334case 266:
vlm4053ca52005-02-18 16:34:21 +00003335#line 2019 "asn1p_y.y"
3336{ yyval.tv_str = 0; ;
3337 break;}
3338case 267:
3339#line 2020 "asn1p_y.y"
3340{
3341 yyval.tv_str = yyvsp[0].tv_str;
3342 ;
3343 break;}
3344case 268:
3345#line 2025 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003346{
vlm39e5ed72004-09-05 10:40:41 +00003347 checkmem(yyvsp[0].tv_str);
3348 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003349 ;
3350 break;}
vlm6a02a8a2004-09-08 00:28:11 +00003351}
3352 /* the action file gets copied in in place of this dollarsign */
3353#line 543 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00003354
3355 yyvsp -= yylen;
3356 yyssp -= yylen;
vlm6a02a8a2004-09-08 00:28:11 +00003357#ifdef YYLSP_NEEDED
3358 yylsp -= yylen;
3359#endif
vlmfa67ddc2004-06-03 03:38:44 +00003360
vlm6a02a8a2004-09-08 00:28:11 +00003361#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00003362 if (yydebug)
3363 {
vlm6a02a8a2004-09-08 00:28:11 +00003364 short *ssp1 = yyss - 1;
3365 fprintf (stderr, "state stack now");
3366 while (ssp1 != yyssp)
3367 fprintf (stderr, " %d", *++ssp1);
3368 fprintf (stderr, "\n");
vlmfa67ddc2004-06-03 03:38:44 +00003369 }
3370#endif
3371
3372 *++yyvsp = yyval;
3373
vlm6a02a8a2004-09-08 00:28:11 +00003374#ifdef YYLSP_NEEDED
3375 yylsp++;
3376 if (yylen == 0)
3377 {
3378 yylsp->first_line = yylloc.first_line;
3379 yylsp->first_column = yylloc.first_column;
3380 yylsp->last_line = (yylsp-1)->last_line;
3381 yylsp->last_column = (yylsp-1)->last_column;
3382 yylsp->text = 0;
3383 }
3384 else
3385 {
3386 yylsp->last_line = (yylsp+yylen-1)->last_line;
3387 yylsp->last_column = (yylsp+yylen-1)->last_column;
3388 }
3389#endif
vlmfa67ddc2004-06-03 03:38:44 +00003390
vlm6a02a8a2004-09-08 00:28:11 +00003391 /* Now "shift" the result of the reduction.
3392 Determine what state that goes to,
3393 based on the state we popped back to
3394 and the rule number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00003395
3396 yyn = yyr1[yyn];
3397
vlm6a02a8a2004-09-08 00:28:11 +00003398 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3399 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00003400 yystate = yytable[yystate];
3401 else
vlm6a02a8a2004-09-08 00:28:11 +00003402 yystate = yydefgoto[yyn - YYNTBASE];
vlmfa67ddc2004-06-03 03:38:44 +00003403
3404 goto yynewstate;
3405
vlm6a02a8a2004-09-08 00:28:11 +00003406yyerrlab: /* here on detecting error */
vlmfa67ddc2004-06-03 03:38:44 +00003407
vlm6a02a8a2004-09-08 00:28:11 +00003408 if (! yyerrstatus)
3409 /* If not already recovering from an error, report this error. */
vlmfa67ddc2004-06-03 03:38:44 +00003410 {
3411 ++yynerrs;
vlm6a02a8a2004-09-08 00:28:11 +00003412
3413#ifdef YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00003414 yyn = yypact[yystate];
3415
vlm6a02a8a2004-09-08 00:28:11 +00003416 if (yyn > YYFLAG && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00003417 {
vlm6a02a8a2004-09-08 00:28:11 +00003418 int size = 0;
3419 char *msg;
3420 int x, count;
vlmfa67ddc2004-06-03 03:38:44 +00003421
vlm6a02a8a2004-09-08 00:28:11 +00003422 count = 0;
3423 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3424 for (x = (yyn < 0 ? -yyn : 0);
3425 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3426 if (yycheck[x + yyn] == x)
3427 size += strlen(yytname[x]) + 15, count++;
3428 msg = (char *) malloc(size + 15);
3429 if (msg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00003430 {
vlm6a02a8a2004-09-08 00:28:11 +00003431 strcpy(msg, "parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003432
vlm6a02a8a2004-09-08 00:28:11 +00003433 if (count < 5)
vlmfa67ddc2004-06-03 03:38:44 +00003434 {
vlm6a02a8a2004-09-08 00:28:11 +00003435 count = 0;
3436 for (x = (yyn < 0 ? -yyn : 0);
3437 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3438 if (yycheck[x + yyn] == x)
vlmfa67ddc2004-06-03 03:38:44 +00003439 {
vlm6a02a8a2004-09-08 00:28:11 +00003440 strcat(msg, count == 0 ? ", expecting `" : " or `");
3441 strcat(msg, yytname[x]);
3442 strcat(msg, "'");
3443 count++;
vlmfa67ddc2004-06-03 03:38:44 +00003444 }
3445 }
vlm6a02a8a2004-09-08 00:28:11 +00003446 yyerror(msg);
3447 free(msg);
vlmfa67ddc2004-06-03 03:38:44 +00003448 }
3449 else
vlm6a02a8a2004-09-08 00:28:11 +00003450 yyerror ("parse error; also virtual memory exceeded");
vlmfa67ddc2004-06-03 03:38:44 +00003451 }
3452 else
3453#endif /* YYERROR_VERBOSE */
vlm6a02a8a2004-09-08 00:28:11 +00003454 yyerror("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003455 }
vlm6a02a8a2004-09-08 00:28:11 +00003456
vlmfa67ddc2004-06-03 03:38:44 +00003457 goto yyerrlab1;
vlm6a02a8a2004-09-08 00:28:11 +00003458yyerrlab1: /* here on error raised explicitly by an action */
vlmfa67ddc2004-06-03 03:38:44 +00003459
3460 if (yyerrstatus == 3)
3461 {
vlm6a02a8a2004-09-08 00:28:11 +00003462 /* if just tried and failed to reuse lookahead token after an error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00003463
vlm6a02a8a2004-09-08 00:28:11 +00003464 /* return failure if at end of input */
vlmfa67ddc2004-06-03 03:38:44 +00003465 if (yychar == YYEOF)
vlm6a02a8a2004-09-08 00:28:11 +00003466 YYABORT;
vlmfa67ddc2004-06-03 03:38:44 +00003467
vlm6a02a8a2004-09-08 00:28:11 +00003468#if YYDEBUG != 0
3469 if (yydebug)
3470 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3471#endif
3472
vlmfa67ddc2004-06-03 03:38:44 +00003473 yychar = YYEMPTY;
3474 }
3475
vlm6a02a8a2004-09-08 00:28:11 +00003476 /* Else will try to reuse lookahead token
3477 after shifting the error token. */
vlmfa67ddc2004-06-03 03:38:44 +00003478
vlm6a02a8a2004-09-08 00:28:11 +00003479 yyerrstatus = 3; /* Each real token shifted decrements this */
vlmfa67ddc2004-06-03 03:38:44 +00003480
vlm6a02a8a2004-09-08 00:28:11 +00003481 goto yyerrhandle;
vlm80103492004-09-07 10:39:09 +00003482
vlm6a02a8a2004-09-08 00:28:11 +00003483yyerrdefault: /* current state does not do anything special for the error token. */
vlm80103492004-09-07 10:39:09 +00003484
vlm6a02a8a2004-09-08 00:28:11 +00003485#if 0
3486 /* This is wrong; only states that explicitly want error tokens
3487 should shift them. */
3488 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3489 if (yyn) goto yydefault;
vlm39e5ed72004-09-05 10:40:41 +00003490#endif
vlm6a02a8a2004-09-08 00:28:11 +00003491
3492yyerrpop: /* pop the current state because it cannot handle the error token */
3493
3494 if (yyssp == yyss) YYABORT;
3495 yyvsp--;
3496 yystate = *--yyssp;
3497#ifdef YYLSP_NEEDED
3498 yylsp--;
3499#endif
3500
3501#if YYDEBUG != 0
3502 if (yydebug)
3503 {
3504 short *ssp1 = yyss - 1;
3505 fprintf (stderr, "Error: state stack now");
3506 while (ssp1 != yyssp)
3507 fprintf (stderr, " %d", *++ssp1);
3508 fprintf (stderr, "\n");
vlm39e5ed72004-09-05 10:40:41 +00003509 }
vlm6a02a8a2004-09-08 00:28:11 +00003510#endif
3511
3512yyerrhandle:
3513
3514 yyn = yypact[yystate];
3515 if (yyn == YYFLAG)
3516 goto yyerrdefault;
3517
3518 yyn += YYTERROR;
3519 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3520 goto yyerrdefault;
3521
3522 yyn = yytable[yyn];
3523 if (yyn < 0)
3524 {
3525 if (yyn == YYFLAG)
3526 goto yyerrpop;
3527 yyn = -yyn;
3528 goto yyreduce;
3529 }
3530 else if (yyn == 0)
3531 goto yyerrpop;
vlmfa67ddc2004-06-03 03:38:44 +00003532
3533 if (yyn == YYFINAL)
3534 YYACCEPT;
3535
vlm6a02a8a2004-09-08 00:28:11 +00003536#if YYDEBUG != 0
3537 if (yydebug)
3538 fprintf(stderr, "Shifting error token, ");
3539#endif
vlmfa67ddc2004-06-03 03:38:44 +00003540
3541 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00003542#ifdef YYLSP_NEEDED
3543 *++yylsp = yylloc;
3544#endif
vlmfa67ddc2004-06-03 03:38:44 +00003545
3546 yystate = yyn;
3547 goto yynewstate;
3548
vlm6a02a8a2004-09-08 00:28:11 +00003549 yyacceptlab:
3550 /* YYACCEPT comes here. */
3551 if (yyfree_stacks)
3552 {
3553 free (yyss);
3554 free (yyvs);
3555#ifdef YYLSP_NEEDED
3556 free (yyls);
vlm044f7442004-09-04 04:49:21 +00003557#endif
vlm6a02a8a2004-09-08 00:28:11 +00003558 }
3559 return 0;
vlm80103492004-09-07 10:39:09 +00003560
vlm6a02a8a2004-09-08 00:28:11 +00003561 yyabortlab:
3562 /* YYABORT comes here. */
3563 if (yyfree_stacks)
3564 {
3565 free (yyss);
3566 free (yyvs);
3567#ifdef YYLSP_NEEDED
3568 free (yyls);
vlm80103492004-09-07 10:39:09 +00003569#endif
vlm6a02a8a2004-09-08 00:28:11 +00003570 }
3571 return 1;
vlmfa67ddc2004-06-03 03:38:44 +00003572}
vlm4053ca52005-02-18 16:34:21 +00003573#line 2031 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00003574
3575
3576
3577/*
3578 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3579 */
3580static asn1p_value_t *
3581_convert_bitstring2binary(char *str, int base) {
3582 asn1p_value_t *val;
3583 int slen;
3584 int memlen;
3585 int baselen;
3586 int bits;
3587 uint8_t *binary_vector;
3588 uint8_t *bv_ptr;
3589 uint8_t cur_val;
3590
3591 assert(str);
3592 assert(str[0] == '\'');
3593
3594 switch(base) {
3595 case 'B':
3596 baselen = 1;
3597 break;
3598 case 'H':
3599 baselen = 4;
3600 break;
3601 default:
3602 assert(base == 'B' || base == 'H');
3603 errno = EINVAL;
3604 return NULL;
3605 }
3606
3607 slen = strlen(str);
3608 assert(str[slen - 1] == base);
3609 assert(str[slen - 2] == '\'');
3610
3611 memlen = slen / (8 / baselen); /* Conservative estimate */
3612
3613 bv_ptr = binary_vector = malloc(memlen + 1);
3614 if(bv_ptr == NULL)
3615 /* ENOMEM */
3616 return NULL;
3617
3618 cur_val = 0;
3619 bits = 0;
3620 while(*(++str) != '\'') {
3621 switch(baselen) {
3622 case 1:
3623 switch(*str) {
3624 case '1':
3625 cur_val |= 1 << (7 - (bits % 8));
3626 case '0':
3627 break;
3628 default:
3629 assert(!"_y UNREACH1");
3630 case ' ': case '\r': case '\n':
3631 continue;
3632 }
3633 break;
3634 case 4:
3635 switch(*str) {
3636 case '0': case '1': case '2': case '3': case '4':
3637 case '5': case '6': case '7': case '8': case '9':
3638 cur_val |= (*str - '0') << (4 - (bits % 8));
3639 break;
3640 case 'A': case 'B': case 'C':
3641 case 'D': case 'E': case 'F':
3642 cur_val |= ((*str - 'A') + 10)
3643 << (4 - (bits % 8));
3644 break;
3645 default:
3646 assert(!"_y UNREACH2");
3647 case ' ': case '\r': case '\n':
3648 continue;
3649 }
3650 break;
3651 }
3652
3653 bits += baselen;
3654 if((bits % 8) == 0) {
3655 *bv_ptr++ = cur_val;
3656 cur_val = 0;
3657 }
3658 }
3659
3660 *bv_ptr = cur_val;
3661 assert((bv_ptr - binary_vector) <= memlen);
3662
3663 val = asn1p_value_frombits(binary_vector, bits, 0);
3664 if(val == NULL) {
3665 free(binary_vector);
3666 }
3667
3668 return val;
3669}
3670
3671extern char *asn1p_text;
3672
3673int
3674yyerror(const char *msg) {
3675 fprintf(stderr,
3676 "ASN.1 grammar parse error "
3677 "near line %d (token \"%s\"): %s\n",
vlm39e5ed72004-09-05 10:40:41 +00003678 yylineno, asn1p_text, msg);
vlmfa67ddc2004-06-03 03:38:44 +00003679 return -1;
3680}
3681
3682