blob: 6aa198347f2853ac066a9fcda66af9643143aca5 [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
vlma6a12e32005-03-20 12:58:00 +0000207#define YYFINAL 418
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
vlma6a12e32005-03-20 12:58:00 +0000211#define YYTRANSLATE(x) ((unsigned)(x) <= 354 ? yytranslate[x] : 218)
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,
vlm5e2c4b92005-03-20 11:12:40 +0000264 292, 294, 296, 298, 302, 306, 310, 312, 317, 322,
265 327, 334, 341, 343, 348, 353, 355, 359, 361, 365,
266 369, 373, 375, 379, 381, 385, 387, 389, 391, 393,
267 398, 402, 403, 407, 409, 411, 413, 415, 417, 419,
268 421, 423, 425, 429, 431, 434, 436, 438, 440, 442,
269 445, 448, 450, 452, 455, 458, 460, 462, 464, 466,
vlm4053ca52005-02-18 16:34:21 +0000270 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,
vlma6a12e32005-03-20 12:58:00 +0000273 539, 545, 547, 551, 555, 559, 564, 568, 570, 572,
274 576, 580, 584, 588, 590, 592, 594, 597, 600, 604,
275 606, 608, 610, 612, 614, 616, 618, 620, 626, 628,
276 632, 634, 638, 639, 641, 643, 645, 647, 649, 651,
277 655, 660, 662, 666, 669, 673, 675, 679, 680, 682,
278 684, 687, 690, 694, 696, 700, 702, 707, 712, 714,
279 716, 718, 720, 721, 723, 726, 731, 732, 734, 736,
280 738, 739, 741, 743, 745, 747, 749, 750, 752
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,
vlma6a12e32005-03-20 12:58:00 +0000284 0, 118, 0, 117, 118, 0, 214, 119, 34, 123,
vlm2728a8d2005-01-23 09:51:44 +0000285 3, 21, 126, 39, 0, 0, 120, 0, 103, 121,
286 104, 0, 103, 104, 0, 122, 0, 121, 122, 0,
vlma6a12e32005-03-20 12:58:00 +0000287 217, 0, 217, 105, 9, 106, 0, 9, 0, 0,
vlm2728a8d2005-01-23 09:51:44 +0000288 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,
vlma6a12e32005-03-20 12:58:00 +0000294 46, 214, 119, 0, 134, 0, 133, 108, 134, 0,
295 214, 0, 214, 103, 104, 0, 217, 0, 42, 136,
vlm2728a8d2005-01-23 09:51:44 +0000296 107, 0, 42, 17, 107, 0, 42, 107, 0, 137,
vlma6a12e32005-03-20 12:58:00 +0000297 0, 136, 108, 137, 0, 214, 0, 214, 103, 104,
298 0, 217, 0, 214, 139, 3, 103, 140, 104, 0,
vlm2728a8d2005-01-23 09:51:44 +0000299 165, 0, 175, 0, 0, 141, 0, 142, 0, 141,
vlma6a12e32005-03-20 12:58:00 +0000300 108, 142, 0, 102, 0, 186, 0, 214, 3, 209,
301 87, 0, 214, 3, 163, 0, 214, 3, 153, 0,
302 214, 103, 144, 104, 3, 163, 0, 145, 0, 144,
303 108, 145, 0, 214, 0, 214, 109, 217, 0, 214,
304 109, 214, 0, 175, 109, 217, 0, 147, 0, 146,
305 108, 147, 0, 163, 0, 217, 0, 0, 149, 0,
306 150, 0, 149, 108, 150, 0, 217, 163, 203, 0,
vlm4053ca52005-02-18 16:34:21 +0000307 30, 68, 163, 0, 162, 0, 152, 0, 151, 108,
vlma6a12e32005-03-20 12:58:00 +0000308 152, 0, 217, 163, 0, 162, 0, 28, 103, 155,
vlm4053ca52005-02-18 16:34:21 +0000309 104, 157, 0, 0, 88, 0, 156, 0, 155, 108,
vlma6a12e32005-03-20 12:58:00 +0000310 156, 0, 168, 203, 0, 168, 163, 154, 203, 0,
311 168, 168, 154, 203, 0, 0, 158, 0, 0, 95,
vlm4053ca52005-02-18 16:34:21 +0000312 82, 103, 159, 160, 104, 0, 161, 0, 160, 161,
313 0, 4, 0, 168, 0, 102, 0, 102, 110, 173,
vlma6a12e32005-03-20 12:58:00 +0000314 0, 102, 110, 208, 0, 209, 164, 182, 0, 177,
vlm5e2c4b92005-03-20 11:12:40 +0000315 0, 27, 103, 151, 104, 0, 78, 103, 148, 104,
vlma6a12e32005-03-20 12:58:00 +0000316 0, 79, 103, 148, 104, 0, 78, 182, 68, 216,
317 209, 164, 0, 79, 182, 68, 216, 209, 164, 0,
318 18, 0, 18, 35, 25, 217, 0, 214, 103, 146,
vlm5e2c4b92005-03-20 11:12:40 +0000319 104, 0, 165, 0, 56, 68, 165, 0, 11, 0,
vlma6a12e32005-03-20 12:58:00 +0000320 11, 111, 214, 0, 215, 111, 214, 0, 11, 111,
321 217, 0, 215, 0, 215, 111, 166, 0, 167, 0,
vlm5e2c4b92005-03-20 11:12:40 +0000322 166, 111, 167, 0, 169, 0, 169, 0, 13, 0,
vlma6a12e32005-03-20 12:58:00 +0000323 14, 0, 217, 139, 3, 171, 0, 217, 109, 171,
vlm5e2c4b92005-03-20 11:12:40 +0000324 0, 0, 103, 172, 174, 0, 63, 0, 45, 0,
vlma6a12e32005-03-20 12:58:00 +0000325 86, 0, 5, 0, 7, 0, 6, 0, 208, 0,
326 173, 0, 217, 0, 214, 111, 217, 0, 4, 0,
vlm5e2c4b92005-03-20 11:12:40 +0000327 174, 4, 0, 24, 0, 63, 0, 76, 0, 176,
328 0, 67, 81, 0, 65, 51, 0, 77, 0, 44,
329 0, 36, 71, 0, 26, 81, 0, 91, 0, 47,
330 0, 178, 0, 58, 0, 40, 0, 22, 81, 0,
vlma6a12e32005-03-20 12:58:00 +0000331 175, 0, 176, 205, 0, 23, 0, 48, 0, 49,
vlm4053ca52005-02-18 16:34:21 +0000332 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,
vlma6a12e32005-03-20 12:58:00 +0000340 185, 106, 0, 105, 185, 106, 0, 190, 0, 191,
341 0, 190, 188, 190, 0, 61, 188, 190, 0, 190,
342 188, 60, 0, 61, 188, 60, 0, 197, 0, 192,
343 0, 101, 0, 101, 112, 0, 112, 101, 0, 112,
344 101, 112, 0, 80, 0, 46, 0, 45, 0, 86,
345 0, 208, 0, 6, 0, 217, 0, 214, 0, 95,
346 30, 103, 193, 104, 0, 194, 0, 193, 108, 194,
347 0, 102, 0, 217, 182, 195, 0, 0, 196, 0,
348 73, 0, 15, 0, 69, 0, 198, 0, 199, 0,
349 103, 214, 104, 0, 198, 103, 200, 104, 0, 201,
350 0, 200, 108, 201, 0, 113, 202, 0, 113, 111,
351 202, 0, 217, 0, 202, 111, 217, 0, 0, 204,
352 0, 69, 0, 33, 171, 0, 103, 104, 0, 103,
353 206, 104, 0, 207, 0, 206, 108, 207, 0, 217,
354 0, 217, 105, 208, 106, 0, 217, 105, 173, 106,
355 0, 208, 0, 102, 0, 9, 0, 10, 0, 0,
356 210, 0, 211, 213, 0, 114, 212, 9, 115, 0,
357 0, 89, 0, 19, 0, 75, 0, 0, 52, 0,
358 41, 0, 11, 0, 12, 0, 12, 0, 0, 217,
359 0, 8, 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,
vlma6a12e32005-03-20 12:58:00 +0000366 302, 308, 314, 330, 355, 357, 360, 364, 369, 376,
367 384, 389, 393, 402, 404, 412, 416, 424, 428, 431,
368 434, 438, 458, 460, 468, 472, 504, 508, 517, 524,
369 537, 544, 546, 558, 571, 578, 583, 589, 595, 604,
370 610, 616, 623, 629, 637, 641, 644, 651, 657, 663,
371 670, 676, 685, 695, 703, 711, 713, 723, 726, 730,
372 733, 745, 757, 763, 779, 788, 798, 808, 813, 820,
373 827, 837, 843, 849, 853, 876, 878, 880, 886, 892,
374 899, 906, 911, 917, 923, 929, 934, 944, 946, 949,
375 957, 963, 972, 978, 995, 997, 1002, 1006, 1011, 1016,
376 1022, 1026, 1037, 1046, 1055, 1066, 1088, 1092, 1098, 1104,
377 1110, 1120, 1130, 1136, 1150, 1174, 1181, 1195, 1204, 1214,
378 1224, 1234, 1242, 1263, 1272, 1281, 1282, 1284, 1291, 1303,
379 1313, 1321, 1321, 1326, 1331, 1336, 1341, 1345, 1349, 1353,
380 1356, 1361, 1373, 1389, 1400, 1414, 1416, 1417, 1418, 1419,
381 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1433, 1435,
382 1436, 1439, 1446, 1458, 1460, 1464, 1468, 1469, 1470, 1471,
383 1472, 1476, 1477, 1478, 1479, 1483, 1484, 1491, 1491, 1492,
384 1492, 1493, 1495, 1497, 1502, 1506, 1515, 1519, 1524, 1528,
385 1534, 1544, 1548, 1551, 1554, 1559, 1568, 1576, 1582, 1588,
386 1595, 1603, 1611, 1620, 1623, 1628, 1630, 1631, 1632, 1635,
387 1639, 1644, 1650, 1655, 1658, 1662, 1675, 1689, 1695, 1699,
388 1704, 1710, 1722, 1724, 1727, 1731, 1734, 1739, 1743, 1751,
389 1766, 1772, 1779, 1792, 1804, 1819, 1823, 1840, 1845, 1848,
390 1853, 1875, 1880, 1885, 1891, 1897, 1905, 1913, 1921, 1928,
391 1938, 1943, 1973, 1975, 1978, 1985, 1991, 1993, 1994, 1995,
392 1998, 2000, 2001, 2004, 2009, 2016, 2023, 2025, 2029
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",
vlma6a12e32005-03-20 12:58:00 +0000435"ConstraintRangeSpec","ConstraintSpec","SingleValue","ContainedSubtype","WithComponents",
436"WithComponentsList","WithComponentsElement","optPresenceConstraint","PresenceConstraint",
437"TableConstraint","SimpleTableConstraint","ComponentRelationConstraint","AtNotationList",
438"AtNotationElement","ComponentIdList","optMarker","Marker","UniverationDefinition",
439"UniverationList","UniverationElement","SignedNumber","optTag","Tag","TagTypeValue",
440"TagClass","TagPlicit","TypeRefName","ObjectClassReference","optIdentifier",
441"Identifier", NULL
vlm6a02a8a2004-09-08 00:28:11 +0000442};
443#endif
444
445static const short yyr1[] = { 0,
vlm2728a8d2005-01-23 09:51:44 +0000446 116, 117, 117, 118, 119, 119, 120, 120, 121, 121,
447 122, 122, 122, 123, 123, 124, 124, 125, 125, 125,
448 125, 125, 126, 126, 127, 127, 128, 128, 128, 128,
449 128, 129, 128, 128, 130, 130, 131, 131, 132, 133,
450 133, 134, 134, 134, 135, 135, 135, 136, 136, 137,
451 137, 137, 138, 139, 139, 140, 140, 141, 141, 142,
452 142, 143, 143, 143, 143, 144, 144, 145, 145, 145,
vlm4053ca52005-02-18 16:34:21 +0000453 145, 146, 146, 147, 147, 148, 148, 149, 149, 150,
454 150, 150, 151, 151, 152, 152, 153, 154, 154, 155,
455 155, 156, 156, 156, 157, 157, 159, 158, 160, 160,
456 161, 161, 162, 162, 162, 163, 164, 164, 164, 164,
vlm5e2c4b92005-03-20 11:12:40 +0000457 164, 164, 164, 164, 164, 164, 164, 165, 165, 165,
458 165, 165, 165, 166, 166, 167, 168, 169, 169, 170,
459 171, 172, 171, 171, 171, 171, 171, 171, 171, 171,
460 171, 173, 173, 174, 174, 175, 175, 175, 175, 175,
vlm4053ca52005-02-18 16:34:21 +0000461 175, 175, 175, 175, 175, 175, 175, 175, 176, 176,
462 176, 177, 177, 178, 178, 178, 178, 178, 178, 178,
463 178, 178, 178, 178, 178, 178, 178, 179, 179, 180,
464 180, 181, 182, 182, 183, 183, 184, 184, 185, 185,
465 185, 186, 186, 186, 186, 187, 187, 187, 187, 187,
vlma6a12e32005-03-20 12:58:00 +0000466 187, 187, 187, 187, 187, 188, 188, 188, 188, 189,
467 189, 190, 190, 190, 190, 190, 191, 192, 193, 193,
468 194, 194, 195, 195, 196, 196, 196, 197, 197, 198,
469 199, 200, 200, 201, 201, 202, 202, 203, 203, 204,
470 204, 205, 205, 206, 206, 207, 207, 207, 207, 207,
471 208, 208, 209, 209, 210, 211, 212, 212, 212, 212,
472 213, 213, 213, 214, 214, 215, 216, 216, 217
vlm6a02a8a2004-09-08 00:28:11 +0000473};
474
475static const short yyr2[] = { 0,
476 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
477 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
478 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
479 1, 0, 3, 1, 3, 2, 1, 2, 4, 1,
vlm0aa86902004-10-12 23:26:53 +0000480 3, 1, 3, 1, 3, 3, 2, 1, 3, 1,
481 3, 1, 6, 1, 1, 0, 1, 1, 3, 1,
482 1, 4, 3, 3, 6, 1, 3, 1, 3, 3,
vlm4053ca52005-02-18 16:34:21 +0000483 3, 1, 3, 1, 1, 0, 1, 1, 3, 3,
484 3, 1, 1, 3, 2, 1, 5, 0, 1, 1,
485 3, 2, 4, 4, 0, 1, 0, 6, 1, 2,
vlm5e2c4b92005-03-20 11:12:40 +0000486 1, 1, 1, 3, 3, 3, 1, 4, 4, 4,
487 6, 6, 1, 4, 4, 1, 3, 1, 3, 3,
488 3, 1, 3, 1, 3, 1, 1, 1, 1, 4,
489 3, 0, 3, 1, 1, 1, 1, 1, 1, 1,
490 1, 1, 3, 1, 2, 1, 1, 1, 1, 2,
491 2, 1, 1, 2, 2, 1, 1, 1, 1, 1,
vlm4053ca52005-02-18 16:34:21 +0000492 2, 1, 2, 1, 1, 1, 1, 1, 1, 1,
vlm6a02a8a2004-09-08 00:28:11 +0000493 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
vlm4053ca52005-02-18 16:34:21 +0000494 1, 1, 0, 1, 1, 4, 3, 4, 1, 3,
vlma6a12e32005-03-20 12:58:00 +0000495 5, 1, 3, 3, 3, 4, 3, 1, 1, 3,
496 3, 3, 3, 1, 1, 1, 2, 2, 3, 1,
497 1, 1, 1, 1, 1, 1, 1, 5, 1, 3,
498 1, 3, 0, 1, 1, 1, 1, 1, 1, 3,
499 4, 1, 3, 2, 3, 1, 3, 0, 1, 1,
500 2, 2, 3, 1, 3, 1, 4, 4, 1, 1,
501 1, 1, 0, 1, 2, 4, 0, 1, 1, 1,
502 0, 1, 1, 1, 1, 1, 0, 1, 1
vlm6a02a8a2004-09-08 00:28:11 +0000503};
504
505static const short yydefact[] = { 0,
vlma6a12e32005-03-20 12:58:00 +0000506 264, 265, 1, 2, 5, 3, 0, 0, 6, 269,
vlm6a02a8a2004-09-08 00:28:11 +0000507 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
508 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
vlm4053ca52005-02-18 16:34:21 +0000509 18, 21, 19, 0, 17, 12, 23, 164, 0, 0,
510 165, 166, 167, 0, 168, 169, 177, 170, 171, 172,
511 173, 174, 175, 176, 0, 24, 25, 27, 28, 31,
vlm0aa86902004-10-12 23:26:53 +0000512 29, 30, 34, 0, 0, 32, 0, 47, 0, 48,
513 50, 52, 36, 0, 37, 0, 40, 42, 44, 4,
vlma6a12e32005-03-20 12:58:00 +0000514 26, 253, 118, 266, 0, 146, 0, 0, 160, 153,
vlm5e2c4b92005-03-20 11:12:40 +0000515 157, 159, 147, 0, 0, 148, 152, 156, 0, 0,
516 54, 55, 149, 158, 122, 0, 33, 46, 45, 0,
vlma6a12e32005-03-20 12:58:00 +0000517 0, 35, 38, 0, 0, 0, 0, 257, 64, 63,
518 0, 254, 261, 0, 161, 155, 154, 151, 150, 0,
vlm5e2c4b92005-03-20 11:12:40 +0000519 66, 0, 68, 0, 0, 0, 49, 51, 5, 41,
vlma6a12e32005-03-20 12:58:00 +0000520 43, 0, 259, 260, 258, 0, 118, 266, 113, 0,
vlm5e2c4b92005-03-20 11:12:40 +0000521 0, 183, 183, 62, 183, 116, 162, 149, 107, 0,
vlma6a12e32005-03-20 12:58:00 +0000522 263, 262, 255, 119, 121, 0, 0, 0, 0, 56,
523 128, 129, 123, 124, 126, 120, 137, 139, 138, 251,
524 252, 135, 134, 136, 132, 130, 141, 140, 0, 142,
525 39, 0, 90, 253, 127, 0, 0, 0, 0, 0,
vlm4053ca52005-02-18 16:34:21 +0000526 76, 0, 0, 184, 185, 76, 0, 106, 0, 163,
vlma6a12e32005-03-20 12:58:00 +0000527 253, 253, 67, 71, 70, 69, 215, 212, 211, 0,
528 210, 213, 0, 60, 0, 0, 0, 57, 58, 61,
529 192, 0, 198, 199, 205, 204, 228, 229, 214, 217,
530 216, 0, 0, 0, 0, 95, 0, 0, 240, 88,
531 88, 92, 239, 0, 256, 0, 103, 0, 83, 86,
532 253, 117, 0, 0, 0, 77, 78, 82, 253, 0,
533 189, 267, 0, 0, 267, 250, 242, 0, 244, 249,
534 246, 0, 72, 74, 75, 65, 206, 0, 0, 0,
535 0, 0, 53, 0, 180, 181, 178, 179, 0, 0,
536 182, 0, 0, 0, 0, 125, 144, 133, 143, 131,
537 0, 87, 96, 91, 241, 89, 238, 238, 114, 0,
538 108, 0, 85, 0, 253, 109, 0, 238, 187, 0,
539 253, 268, 0, 110, 253, 243, 0, 0, 115, 253,
540 207, 208, 203, 201, 0, 230, 197, 59, 193, 194,
541 195, 0, 202, 200, 0, 0, 232, 145, 0, 93,
542 94, 104, 105, 142, 84, 186, 81, 79, 80, 190,
543 0, 188, 0, 245, 0, 0, 73, 209, 221, 0,
544 219, 183, 196, 0, 234, 236, 231, 0, 97, 0,
545 111, 112, 248, 247, 218, 0, 223, 235, 0, 233,
546 0, 191, 220, 226, 227, 225, 222, 224, 237, 101,
547 0, 99, 102, 98, 100, 0, 0, 0
vlm6a02a8a2004-09-08 00:28:11 +0000548};
549
vlma6a12e32005-03-20 12:58:00 +0000550static const short yydefgoto[] = { 416,
vlm6a02a8a2004-09-08 00:28:11 +0000551 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
vlm5e2c4b92005-03-20 11:12:40 +0000552 56, 57, 107, 58, 74, 75, 76, 77, 59, 69,
vlma6a12e32005-03-20 12:58:00 +0000553 70, 60, 100, 227, 228, 229, 61, 130, 131, 282,
554 283, 265, 266, 267, 258, 259, 119, 317, 192, 193,
555 312, 313, 401, 411, 412, 268, 284, 155, 156, 173,
556 174, 194, 195, 62, 186, 243, 187, 308, 157, 103,
557 159, 104, 299, 300, 302, 203, 204, 205, 270, 271,
558 231, 289, 232, 233, 234, 235, 380, 381, 407, 408,
559 236, 237, 238, 356, 357, 385, 252, 253, 210, 278,
560 279, 239, 254, 122, 123, 146, 163, 240, 105, 331,
561 241
vlm6a02a8a2004-09-08 00:28:11 +0000562};
563
vlma6a12e32005-03-20 12:58:00 +0000564static const short yypact[] = { 228,
565-32768,-32768, 228,-32768, -71,-32768, 38, 59,-32768,-32768,
566-32768,-32768, 49,-32768, -3, 58,-32768,-32768, 74, 54,
567 60, 67, 112, 84, 136, 58,-32768, 82,-32768,-32768,
568-32768,-32768,-32768, 152,-32768,-32768, 419,-32768, 178, 33,
569-32768,-32768,-32768, 61,-32768,-32768,-32768,-32768,-32768,-32768,
570-32768,-32768,-32768,-32768, 181, 419,-32768,-32768,-32768,-32768,
571-32768,-32768,-32768, 332, 648,-32768, 121,-32768, 144,-32768,
572 132,-32768,-32768, 17,-32768, -22,-32768, 143,-32768,-32768,
573-32768, -17, 137,-32768, 183,-32768, 194, 186,-32768,-32768,
574-32768,-32768,-32768, 208, 203,-32768,-32768,-32768, 723, 275,
575-32768,-32768,-32768,-32768, 179, 288,-32768,-32768,-32768, 184,
576 190,-32768,-32768, 228, 184, 191, 193, 20,-32768,-32768,
577 496,-32768, 86, 184,-32768,-32768,-32768,-32768,-32768, 79,
578-32768, 188, 195, 200, 258, 355,-32768,-32768, -71,-32768,
579-32768, 260,-32768,-32768,-32768, 284, 53, 202, 263, 205,
580 238, -15, -14,-32768, 55,-32768,-32768, 206,-32768, 207,
581-32768,-32768,-32768,-32768,-32768, 308, 723, 304, 184, 197,
582-32768,-32768, 210,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
583-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 211, 209,
584-32768, 93,-32768, 29,-32768, 199, 292, 11, 269, 214,
585 10, 221, 255,-32768, 220, 10, 259,-32768, 46,-32768,
586 6, 215,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 62,
587-32768,-32768, 298,-32768, 228, 221, 230, 224,-32768, 189,
588 240, 232, 62,-32768,-32768,-32768, 236,-32768,-32768,-32768,
589-32768, 260, 336, 304, 355, 246, 260, 355,-32768, 254,
590 254,-32768,-32768, 573,-32768, 304, 235, 108,-32768,-32768,
591 215,-32768, 221, 278, 243, 241,-32768,-32768, 215, 244,
592 72, 304, 221, 248, 304,-32768,-32768, 109,-32768,-32768,
593 252, 110,-32768,-32768,-32768,-32768, 247, 270, 71, 250,
594 266, 267,-32768, 197,-32768,-32768,-32768,-32768, 221, 221,
595-32768, 221, 221, 176, 261,-32768,-32768, 371,-32768,-32768,
596 296,-32768,-32768,-32768,-32768,-32768, 15, 15,-32768, 167,
597-32768, 11,-32768, 277, 215,-32768, 10, 15,-32768, 282,
598 215,-32768, 279,-32768, 215,-32768, 13, 167,-32768, 6,
599-32768, 274,-32768,-32768, 52,-32768,-32768,-32768,-32768,-32768,
600-32768, 281,-32768,-32768, 12, 115,-32768,-32768, 285,-32768,
601-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 286,
602 573,-32768, 573,-32768, 287, 295,-32768,-32768,-32768, 118,
603-32768, 55,-32768, 304, 294,-32768,-32768, 261,-32768, 221,
604-32768,-32768,-32768,-32768,-32768, 52, 23, 294, 304,-32768,
605 145, 189,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
606 22,-32768,-32768,-32768,-32768, 403, 407,-32768
vlm6a02a8a2004-09-08 00:28:11 +0000607};
608
609static const short yypgoto[] = {-32768,
vlma6a12e32005-03-20 12:58:00 +0000610-32768, 408, 271,-32768,-32768, 399,-32768,-32768, 387,-32768,
611-32768, 358,-32768,-32768,-32768, 342,-32768, 305,-32768,-32768,
612 309,-32768, 356,-32768,-32768, 134,-32768,-32768, 262,-32768,
613 92, 227,-32768, 107,-32768, 114,-32768, 187,-32768, 192,
614-32768,-32768,-32768,-32768, 26, -188, -80, -312, -52,-32768,
615 198, -186, -120,-32768, -1,-32768, -244,-32768, -48, -118,
616-32768, 69,-32768,-32768,-32768, -148,-32768,-32768, -199, -166,
617 -39, 212,-32768, -204,-32768,-32768,-32768, 47,-32768,-32768,
618-32768,-32768,-32768,-32768, 56, 63, -265,-32768,-32768,-32768,
619 111, -127, -81,-32768,-32768,-32768,-32768, 31,-32768, 171,
620 -7
vlm6a02a8a2004-09-08 00:28:11 +0000621};
622
623
vlma6a12e32005-03-20 12:58:00 +0000624#define YYLAST 817
vlm6a02a8a2004-09-08 00:28:11 +0000625
626
627static const short yytable[] = { 15,
vlma6a12e32005-03-20 12:58:00 +0000628 121, 120, 158, 230, 207, 15, 208, 251, 188, 260,
629 117, 101, 101, 10, 175, 102, 102, 10, 10, 10,
630 10, 180, 181, 114, 10, 410, 292, 1, 2, 65,
631 5, 7, 72, 5, 171, 172, 79, 404, 143, 264,
632 10, 171, 172, 1, 2, 10, 11, 248, 65, 67,
633 132, 360, 361, 10, 180, 181, 10, 11, 391, 10,
634 392, 248, 369, 324, 200, 200, 79, 64, 10, 20,
635 71, 1, 2, 333, 78, 362, 217, 21, 10, 180,
636 181, 280, 28, 249, 344, 115, 64, 201, 206, 202,
637 202, 405, 16, 375, 144, 406, 118, 249, 22, 354,
638 23, 19, 72, 352, 78, 63, 73, 79, 145, 24,
639 29, 257, 257, 250, 276, 218, 165, 188, 132, 118,
640 188, 175, 384, 112, 63, 414, 161, 230, 190, 133,
641 343, 286, -238, 260, 200, 158, -238, 162, 34, 68,
642 71, 12, 118, 30, 139, 78, 262, 276, 410, 277,
643 31, 160, 17, 379, 164, -264, 222, 171, 172, 202,
644 214, 216, 287, 124, 32, 176, 189, 33, 295, 296,
645 297, 298, 37, 288, 10, 180, 181, 1, 2, 330,
646 323, 217, 166, 10, 180, 181, 167, 36, 328, 66,
647 261, 10, 363, 269, 1, 2, 246, 133, 269, 215,
648 247, 281, 217, 285, 10, 180, 181, 1, 2, 280,
649 376, 321, 336, 339, 413, 322, 337, 340, 387, 80,
650 218, 395, 388, 402, 413, 396, 217, 108, 10, 180,
651 181, 1, 2, 397, 111, 353, 309, 190, 1, 2,
652 190, 218, 219, 310, 367, 116, 315, 124, 319, 371,
653 109, 110, 158, 373, 158, 291, 127, 220, 128, 349,
654 350, 222, 351, 125, 332, 218, 219, 332, 1, 2,
655 171, 172, 171, 172, 126, 189, 221, 134, 189, 83,
656 84, 220, 222, 129, 160, 295, 296, 297, 298, 135,
657 136, 223, 196, 138, 141, 142, 168, 197, 224, 225,
658 221, 226, 170, 169, -265, 199, 222, 198, 209, 211,
659 212, 10, 364, 255, 261, 223, 256, 245, 263, 269,
660 242, 244, 272, 225, 273, 226, 275, 290, 118, 281,
661 364, 294, 285, 293, 82, 301, 303, 382, 305, 307,
662 311, 316, 83, 84, 320, 325, 326, 386, 327, 329,
663 189, 334, 345, 85, 38, 86, 338, 87, 341, 177,
664 178, 179, 10, 180, 181, 1, 2, 88, 189, 346,
665 342, 89, 347, 355, 358, 90, 386, 359, 91, 41,
666 42, 43, 366, 370, 372, 378, 383, 389, 382, 92,
667 45, 409, 393, 390, 93, 46, 94, 47, 95, 182,
668 394, 160, 417, 160, 399, 48, 418, 96, 97, 191,
669 6, 18, 35, 81, 49, 113, 50, 183, 137, 140,
670 106, 51, 98, 52, 53, 54, 10, 348, 213, 1,
671 2, 377, 274, 368, 99, 365, 415, 318, 314, 306,
672 184, 38, 403, 400, 304, 335, 398, 374, 0, 0,
673 0, 0, 0, 0, 0, 0, 39, 185, 0, 0,
674 40, 0, 0, 0, 0, 0, 41, 42, 43, 0,
675 0, 0, 44, 0, 0, 0, 0, 45, 0, 0,
676 0, 0, 46, 0, 47, 0, 0, 0, 0, 0,
677 0, 0, 48, 0, 0, 0, 0, 0, 0, 0,
678 0, 49, 0, 50, 0, 0, 147, 148, 51, 0,
679 52, 53, 54, 149, 0, 0, 0, 85, 38, 86,
680 0, 87, 150, 0, 0, 0, 0, 0, 0, 0,
vlm5e2c4b92005-03-20 11:12:40 +0000681 0, 88, 0, 0, 0, 89, 0, 0, 0, 90,
682 0, 0, 91, 41, 42, 43, 0, 0, 0, 0,
vlma6a12e32005-03-20 12:58:00 +0000683 0, 151, 0, 92, 45, 0, 0, 0, 93, 46,
vlm5e2c4b92005-03-20 11:12:40 +0000684 94, 47, 95, 0, 0, 0, 0, 0, 0, 48,
vlma6a12e32005-03-20 12:58:00 +0000685 0, 96, 97, 152, 153, 0, 0, 0, 49, 0,
686 50, 0, 154, 147, 148, 51, 98, 52, 53, 54,
687 149, 0, 0, 0, 85, 38, 86, 0, 87, 150,
688 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
689 0, 0, 89, 0, 0, 0, 90, 0, 0, 91,
690 41, 42, 43, 0, 0, 0, 0, 0, 151, 0,
691 92, 45, 0, 0, 0, 93, 46, 94, 47, 95,
692 0, 0, 0, 0, 0, 0, 48, 0, 96, 97,
693 152, 153, 0, 0, 0, 49, 0, 50, 83, 84,
694 0, 0, 51, 98, 52, 53, 54, 0, 0, 85,
695 38, 86, 0, 87, 0, 0, 0, 0, 0, 0,
696 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
697 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
698 0, 0, 0, 0, 0, 92, 45, 0, 0, 0,
699 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
700 0, 48, 0, 96, 97, 0, 0, 0, 0, 0,
701 49, 0, 50, 1, 2, 0, 0, 51, 98, 52,
702 53, 54, 0, 0, 85, 38, 86, 0, 87, 0,
703 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
704 0, 0, 89, 0, 0, 0, 90, 0, 0, 91,
705 41, 42, 43, 0, 0, 0, 0, 0, 0, 0,
706 92, 45, 0, 0, 0, 93, 46, 94, 47, 95,
707 0, 0, 0, 0, 0, 0, 48, 0, 96, 97,
708 0, 0, 0, 0, 0, 49, 0, 50, 0, 0,
709 0, 0, 51, 98, 52, 53, 54
vlm6a02a8a2004-09-08 00:28:11 +0000710};
711
712static const short yycheck[] = { 7,
vlma6a12e32005-03-20 12:58:00 +0000713 82, 82, 121, 170, 153, 13, 155, 194, 136, 198,
714 28, 64, 65, 8, 135, 64, 65, 8, 8, 8,
715 8, 9, 10, 46, 8, 4, 226, 11, 12, 37,
716 0, 103, 40, 3, 13, 14, 44, 15, 19, 30,
717 8, 13, 14, 11, 12, 8, 9, 33, 56, 17,
718 99, 317, 318, 8, 9, 10, 8, 9, 371, 8,
719 373, 33, 328, 263, 80, 80, 74, 37, 8, 12,
720 40, 11, 12, 273, 44, 320, 6, 20, 8, 9,
721 10, 209, 9, 69, 289, 108, 56, 103, 103, 105,
722 105, 69, 34, 338, 75, 73, 114, 69, 41, 304,
723 43, 105, 110, 303, 74, 37, 46, 115, 89, 52,
724 57, 102, 102, 194, 102, 45, 124, 245, 167, 114,
725 248, 242, 111, 107, 56, 104, 41, 294, 136, 99,
726 60, 212, 104, 322, 80, 254, 108, 52, 3, 107,
727 110, 104, 114, 84, 114, 115, 199, 102, 4, 104,
728 84, 121, 104, 102, 124, 103, 86, 13, 14, 105,
729 168, 169, 101, 111, 53, 135, 136, 84, 97, 98,
730 99, 100, 21, 112, 8, 9, 10, 11, 12, 108,
731 261, 6, 104, 8, 9, 10, 108, 106, 269, 12,
732 198, 8, 320, 201, 11, 12, 104, 167, 206, 169,
733 108, 209, 6, 211, 8, 9, 10, 11, 12, 337,
734 338, 104, 104, 104, 401, 108, 108, 108, 104, 39,
735 45, 104, 108, 390, 411, 108, 6, 107, 8, 9,
736 10, 11, 12, 382, 103, 60, 244, 245, 11, 12,
737 248, 45, 46, 245, 325, 103, 248, 111, 256, 331,
738 107, 108, 371, 335, 373, 225, 71, 61, 51, 299,
739 300, 86, 302, 81, 272, 45, 46, 275, 11, 12,
740 13, 14, 13, 14, 81, 245, 80, 3, 248, 11,
741 12, 61, 86, 81, 254, 97, 98, 99, 100, 111,
742 3, 95, 9, 104, 104, 103, 109, 35, 102, 103,
743 80, 105, 103, 109, 103, 68, 86, 103, 103, 103,
744 3, 8, 320, 115, 322, 95, 25, 109, 105, 327,
745 111, 111, 68, 103, 105, 105, 68, 30, 114, 337,
746 338, 108, 340, 104, 3, 96, 105, 345, 103, 4,
747 95, 88, 11, 12, 110, 68, 104, 355, 108, 106,
748 320, 104, 103, 22, 23, 24, 105, 26, 112, 5,
749 6, 7, 8, 9, 10, 11, 12, 36, 338, 104,
750 101, 40, 106, 113, 4, 44, 384, 82, 47, 48,
751 49, 50, 106, 102, 106, 112, 106, 103, 396, 58,
752 59, 399, 106, 108, 63, 64, 65, 66, 67, 45,
753 106, 371, 0, 373, 111, 74, 0, 76, 77, 139,
754 3, 13, 26, 56, 83, 74, 85, 63, 110, 115,
755 65, 90, 91, 92, 93, 94, 8, 294, 167, 11,
756 12, 340, 206, 327, 103, 322, 411, 251, 247, 242,
757 86, 23, 396, 388, 233, 275, 384, 337, -1, -1,
758 -1, -1, -1, -1, -1, -1, 38, 103, -1, -1,
759 42, -1, -1, -1, -1, -1, 48, 49, 50, -1,
760 -1, -1, 54, -1, -1, -1, -1, 59, -1, -1,
761 -1, -1, 64, -1, 66, -1, -1, -1, -1, -1,
762 -1, -1, 74, -1, -1, -1, -1, -1, -1, -1,
763 -1, 83, -1, 85, -1, -1, 11, 12, 90, -1,
764 92, 93, 94, 18, -1, -1, -1, 22, 23, 24,
765 -1, 26, 27, -1, -1, -1, -1, -1, -1, -1,
vlm5e2c4b92005-03-20 11:12:40 +0000766 -1, 36, -1, -1, -1, 40, -1, -1, -1, 44,
767 -1, -1, 47, 48, 49, 50, -1, -1, -1, -1,
vlma6a12e32005-03-20 12:58:00 +0000768 -1, 56, -1, 58, 59, -1, -1, -1, 63, 64,
vlm5e2c4b92005-03-20 11:12:40 +0000769 65, 66, 67, -1, -1, -1, -1, -1, -1, 74,
vlma6a12e32005-03-20 12:58:00 +0000770 -1, 76, 77, 78, 79, -1, -1, -1, 83, -1,
771 85, -1, 87, 11, 12, 90, 91, 92, 93, 94,
772 18, -1, -1, -1, 22, 23, 24, -1, 26, 27,
773 -1, -1, -1, -1, -1, -1, -1, -1, 36, -1,
774 -1, -1, 40, -1, -1, -1, 44, -1, -1, 47,
775 48, 49, 50, -1, -1, -1, -1, -1, 56, -1,
776 58, 59, -1, -1, -1, 63, 64, 65, 66, 67,
777 -1, -1, -1, -1, -1, -1, 74, -1, 76, 77,
778 78, 79, -1, -1, -1, 83, -1, 85, 11, 12,
779 -1, -1, 90, 91, 92, 93, 94, -1, -1, 22,
780 23, 24, -1, 26, -1, -1, -1, -1, -1, -1,
781 -1, -1, -1, 36, -1, -1, -1, 40, -1, -1,
782 -1, 44, -1, -1, 47, 48, 49, 50, -1, -1,
783 -1, -1, -1, -1, -1, 58, 59, -1, -1, -1,
784 63, 64, 65, 66, 67, -1, -1, -1, -1, -1,
785 -1, 74, -1, 76, 77, -1, -1, -1, -1, -1,
786 83, -1, 85, 11, 12, -1, -1, 90, 91, 92,
787 93, 94, -1, -1, 22, 23, 24, -1, 26, -1,
788 -1, -1, -1, -1, -1, -1, -1, -1, 36, -1,
789 -1, -1, 40, -1, -1, -1, 44, -1, -1, 47,
790 48, 49, 50, -1, -1, -1, -1, -1, -1, -1,
791 58, 59, -1, -1, -1, 63, 64, 65, 66, 67,
792 -1, -1, -1, -1, -1, -1, 74, -1, 76, 77,
793 -1, -1, -1, -1, -1, 83, -1, 85, -1, -1,
794 -1, -1, 90, 91, 92, 93, 94
vlm6a02a8a2004-09-08 00:28:11 +0000795};
796/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
797#line 3 "/usr/share/bison.simple"
798/* This file comes from bison-1.28. */
799
800/* Skeleton output parser for bison,
801 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
802
803 This program is free software; you can redistribute it and/or modify
804 it under the terms of the GNU General Public License as published by
805 the Free Software Foundation; either version 2, or (at your option)
806 any later version.
807
808 This program is distributed in the hope that it will be useful,
809 but WITHOUT ANY WARRANTY; without even the implied warranty of
810 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
811 GNU General Public License for more details.
812
813 You should have received a copy of the GNU General Public License
814 along with this program; if not, write to the Free Software
815 Foundation, Inc., 59 Temple Place - Suite 330,
816 Boston, MA 02111-1307, USA. */
817
818/* As a special exception, when this file is copied by Bison into a
819 Bison output file, you may use that output file without restriction.
820 This special exception was added by the Free Software Foundation
821 in version 1.24 of Bison. */
822
823/* This is the parser code that is written into each bison parser
824 when the %semantic_parser declaration is not specified in the grammar.
825 It was written by Richard Stallman by simplifying the hairy parser
826 used when %semantic_parser is specified. */
827
828#ifndef YYSTACK_USE_ALLOCA
829#ifdef alloca
830#define YYSTACK_USE_ALLOCA
831#else /* alloca not defined */
832#ifdef __GNUC__
833#define YYSTACK_USE_ALLOCA
834#define alloca __builtin_alloca
835#else /* not GNU C. */
836#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
837#define YYSTACK_USE_ALLOCA
838#include <alloca.h>
839#else /* not sparc */
840/* We think this test detects Watcom and Microsoft C. */
841/* This used to test MSDOS, but that is a bad idea
842 since that symbol is in the user namespace. */
843#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
844#if 0 /* No need for malloc.h, which pollutes the namespace;
845 instead, just don't use alloca. */
846#include <malloc.h>
847#endif
848#else /* not MSDOS, or __TURBOC__ */
849#if defined(_AIX)
850/* I don't know what this was needed for, but it pollutes the namespace.
851 So I turned it off. rms, 2 May 1997. */
852/* #include <malloc.h> */
853 #pragma alloca
854#define YYSTACK_USE_ALLOCA
855#else /* not MSDOS, or __TURBOC__, or _AIX */
856#if 0
857#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
858 and on HPUX 10. Eventually we can turn this on. */
859#define YYSTACK_USE_ALLOCA
860#define alloca __builtin_alloca
861#endif /* __hpux */
862#endif
863#endif /* not _AIX */
864#endif /* not MSDOS, or __TURBOC__ */
865#endif /* not sparc */
866#endif /* not GNU C */
867#endif /* alloca not defined */
868#endif /* YYSTACK_USE_ALLOCA not defined */
869
870#ifdef YYSTACK_USE_ALLOCA
871#define YYSTACK_ALLOC alloca
vlmfa67ddc2004-06-03 03:38:44 +0000872#else
vlm6a02a8a2004-09-08 00:28:11 +0000873#define YYSTACK_ALLOC malloc
vlmfa67ddc2004-06-03 03:38:44 +0000874#endif
875
vlm6a02a8a2004-09-08 00:28:11 +0000876/* Note: there must be only one dollar sign in this file.
877 It is replaced by the list of actions, each action
878 as one case of the switch. */
vlmfa67ddc2004-06-03 03:38:44 +0000879
880#define yyerrok (yyerrstatus = 0)
881#define yyclearin (yychar = YYEMPTY)
882#define YYEMPTY -2
883#define YYEOF 0
884#define YYACCEPT goto yyacceptlab
vlm6a02a8a2004-09-08 00:28:11 +0000885#define YYABORT goto yyabortlab
vlmfa67ddc2004-06-03 03:38:44 +0000886#define YYERROR goto yyerrlab1
vlm6a02a8a2004-09-08 00:28:11 +0000887/* Like YYERROR except do call yyerror.
888 This remains here temporarily to ease the
889 transition to the new meaning of YYERROR, for GCC.
vlmfa67ddc2004-06-03 03:38:44 +0000890 Once GCC version 2 has supplanted version 1, this can go. */
891#define YYFAIL goto yyerrlab
892#define YYRECOVERING() (!!yyerrstatus)
vlm6a02a8a2004-09-08 00:28:11 +0000893#define YYBACKUP(token, value) \
vlmfa67ddc2004-06-03 03:38:44 +0000894do \
895 if (yychar == YYEMPTY && yylen == 1) \
vlm6a02a8a2004-09-08 00:28:11 +0000896 { yychar = (token), yylval = (value); \
vlmfa67ddc2004-06-03 03:38:44 +0000897 yychar1 = YYTRANSLATE (yychar); \
898 YYPOPSTACK; \
899 goto yybackup; \
900 } \
901 else \
vlm6a02a8a2004-09-08 00:28:11 +0000902 { yyerror ("syntax error: cannot back up"); YYERROR; } \
vlmfa67ddc2004-06-03 03:38:44 +0000903while (0)
904
905#define YYTERROR 1
906#define YYERRCODE 256
907
vlm6a02a8a2004-09-08 00:28:11 +0000908#ifndef YYPURE
909#define YYLEX yylex()
vlmfa67ddc2004-06-03 03:38:44 +0000910#endif
911
vlm6a02a8a2004-09-08 00:28:11 +0000912#ifdef YYPURE
913#ifdef YYLSP_NEEDED
914#ifdef YYLEX_PARAM
915#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
916#else
917#define YYLEX yylex(&yylval, &yylloc)
918#endif
919#else /* not YYLSP_NEEDED */
920#ifdef YYLEX_PARAM
921#define YYLEX yylex(&yylval, YYLEX_PARAM)
922#else
923#define YYLEX yylex(&yylval)
924#endif
925#endif /* not YYLSP_NEEDED */
926#endif
vlmfa67ddc2004-06-03 03:38:44 +0000927
vlm6a02a8a2004-09-08 00:28:11 +0000928/* If nonreentrant, generate the variables here */
vlmfa67ddc2004-06-03 03:38:44 +0000929
vlm6a02a8a2004-09-08 00:28:11 +0000930#ifndef YYPURE
vlmfa67ddc2004-06-03 03:38:44 +0000931
vlm6a02a8a2004-09-08 00:28:11 +0000932int yychar; /* the lookahead symbol */
933YYSTYPE yylval; /* the semantic value of the */
934 /* lookahead symbol */
vlmfa67ddc2004-06-03 03:38:44 +0000935
vlm6a02a8a2004-09-08 00:28:11 +0000936#ifdef YYLSP_NEEDED
937YYLTYPE yylloc; /* location data for the lookahead */
938 /* symbol */
939#endif
vlmfa67ddc2004-06-03 03:38:44 +0000940
vlm6a02a8a2004-09-08 00:28:11 +0000941int yynerrs; /* number of parse errors so far */
942#endif /* not YYPURE */
943
944#if YYDEBUG != 0
945int yydebug; /* nonzero means print parse trace */
946/* Since this is uninitialized, it does not stop multiple parsers
947 from coexisting. */
948#endif
949
950/* YYINITDEPTH indicates the initial size of the parser's stacks */
951
vlmfa67ddc2004-06-03 03:38:44 +0000952#ifndef YYINITDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000953#define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +0000954#endif
955
vlm6a02a8a2004-09-08 00:28:11 +0000956/* YYMAXDEPTH is the maximum size the stacks can grow to
957 (effective only if the built-in stack extension method is used). */
vlmfa67ddc2004-06-03 03:38:44 +0000958
959#if YYMAXDEPTH == 0
vlm6a02a8a2004-09-08 00:28:11 +0000960#undef YYMAXDEPTH
vlmfa67ddc2004-06-03 03:38:44 +0000961#endif
962
963#ifndef YYMAXDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000964#define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +0000965#endif
966
vlm6a02a8a2004-09-08 00:28:11 +0000967/* Define __yy_memcpy. Note that the size argument
968 should be passed with type unsigned int, because that is what the non-GCC
969 definitions require. With GCC, __builtin_memcpy takes an arg
970 of type size_t, but it can handle unsigned int. */
vlmfa67ddc2004-06-03 03:38:44 +0000971
vlm6a02a8a2004-09-08 00:28:11 +0000972#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
973#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
974#else /* not GNU C or C++ */
975#ifndef __cplusplus
vlmfa67ddc2004-06-03 03:38:44 +0000976
vlm6a02a8a2004-09-08 00:28:11 +0000977/* This is the most reliable way to avoid incompatibilities
978 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +0000979static void
vlm6a02a8a2004-09-08 00:28:11 +0000980__yy_memcpy (to, from, count)
981 char *to;
982 char *from;
983 unsigned int count;
vlm80103492004-09-07 10:39:09 +0000984{
vlm6a02a8a2004-09-08 00:28:11 +0000985 register char *f = from;
986 register char *t = to;
987 register int i = count;
vlm80103492004-09-07 10:39:09 +0000988
vlm6a02a8a2004-09-08 00:28:11 +0000989 while (i-- > 0)
990 *t++ = *f++;
vlm80103492004-09-07 10:39:09 +0000991}
vlm80103492004-09-07 10:39:09 +0000992
vlm6a02a8a2004-09-08 00:28:11 +0000993#else /* __cplusplus */
vlm80103492004-09-07 10:39:09 +0000994
vlm6a02a8a2004-09-08 00:28:11 +0000995/* This is the most reliable way to avoid incompatibilities
996 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +0000997static void
vlm6a02a8a2004-09-08 00:28:11 +0000998__yy_memcpy (char *to, char *from, unsigned int count)
vlm80103492004-09-07 10:39:09 +0000999{
vlm6a02a8a2004-09-08 00:28:11 +00001000 register char *t = to;
1001 register char *f = from;
1002 register int i = count;
vlm80103492004-09-07 10:39:09 +00001003
vlm6a02a8a2004-09-08 00:28:11 +00001004 while (i-- > 0)
1005 *t++ = *f++;
vlm044f7442004-09-04 04:49:21 +00001006}
vlm044f7442004-09-04 04:49:21 +00001007
vlm6a02a8a2004-09-08 00:28:11 +00001008#endif
1009#endif
vlmfa67ddc2004-06-03 03:38:44 +00001010
vlm6a02a8a2004-09-08 00:28:11 +00001011#line 217 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00001012
1013/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1014 into yyparse. The argument should have type void *.
1015 It should actually point to an object.
1016 Grammar actions can access the variable by casting it
1017 to the proper pointer type. */
1018
1019#ifdef YYPARSE_PARAM
vlm6a02a8a2004-09-08 00:28:11 +00001020#ifdef __cplusplus
1021#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1022#define YYPARSE_PARAM_DECL
1023#else /* not __cplusplus */
1024#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1025#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1026#endif /* not __cplusplus */
1027#else /* not YYPARSE_PARAM */
1028#define YYPARSE_PARAM_ARG
1029#define YYPARSE_PARAM_DECL
1030#endif /* not YYPARSE_PARAM */
vlmfa67ddc2004-06-03 03:38:44 +00001031
1032/* Prevent warning if -Wstrict-prototypes. */
1033#ifdef __GNUC__
vlm6a02a8a2004-09-08 00:28:11 +00001034#ifdef YYPARSE_PARAM
vlmfa67ddc2004-06-03 03:38:44 +00001035int yyparse (void *);
vlm6a02a8a2004-09-08 00:28:11 +00001036#else
vlmfa67ddc2004-06-03 03:38:44 +00001037int yyparse (void);
vlm6a02a8a2004-09-08 00:28:11 +00001038#endif
vlm39e5ed72004-09-05 10:40:41 +00001039#endif
vlm80103492004-09-07 10:39:09 +00001040
vlmfa67ddc2004-06-03 03:38:44 +00001041int
vlm6a02a8a2004-09-08 00:28:11 +00001042yyparse(YYPARSE_PARAM_ARG)
vlmfa67ddc2004-06-03 03:38:44 +00001043 YYPARSE_PARAM_DECL
1044{
1045 register int yystate;
1046 register int yyn;
1047 register short *yyssp;
1048 register YYSTYPE *yyvsp;
vlm6a02a8a2004-09-08 00:28:11 +00001049 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1050 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
vlmfa67ddc2004-06-03 03:38:44 +00001051
vlm6a02a8a2004-09-08 00:28:11 +00001052 short yyssa[YYINITDEPTH]; /* the state stack */
1053 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
vlmfa67ddc2004-06-03 03:38:44 +00001054
vlm6a02a8a2004-09-08 00:28:11 +00001055 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1056 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
vlmfa67ddc2004-06-03 03:38:44 +00001057
vlm6a02a8a2004-09-08 00:28:11 +00001058#ifdef YYLSP_NEEDED
1059 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1060 YYLTYPE *yyls = yylsa;
1061 YYLTYPE *yylsp;
1062
1063#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1064#else
vlmfa67ddc2004-06-03 03:38:44 +00001065#define YYPOPSTACK (yyvsp--, yyssp--)
vlm6a02a8a2004-09-08 00:28:11 +00001066#endif
vlmfa67ddc2004-06-03 03:38:44 +00001067
vlm6a02a8a2004-09-08 00:28:11 +00001068 int yystacksize = YYINITDEPTH;
1069 int yyfree_stacks = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001070
vlm6a02a8a2004-09-08 00:28:11 +00001071#ifdef YYPURE
1072 int yychar;
1073 YYSTYPE yylval;
1074 int yynerrs;
1075#ifdef YYLSP_NEEDED
1076 YYLTYPE yylloc;
1077#endif
1078#endif
vlmfa67ddc2004-06-03 03:38:44 +00001079
vlm6a02a8a2004-09-08 00:28:11 +00001080 YYSTYPE yyval; /* the variable used to return */
1081 /* semantic values from the action */
1082 /* routines */
vlmfa67ddc2004-06-03 03:38:44 +00001083
1084 int yylen;
1085
vlm6a02a8a2004-09-08 00:28:11 +00001086#if YYDEBUG != 0
1087 if (yydebug)
1088 fprintf(stderr, "Starting parse\n");
1089#endif
vlmfa67ddc2004-06-03 03:38:44 +00001090
1091 yystate = 0;
1092 yyerrstatus = 0;
1093 yynerrs = 0;
1094 yychar = YYEMPTY; /* Cause a token to be read. */
1095
1096 /* Initialize stack pointers.
1097 Waste one element of value and location stack
1098 so that they stay on the same level as the state stack.
1099 The wasted elements are never initialized. */
1100
vlm6a02a8a2004-09-08 00:28:11 +00001101 yyssp = yyss - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001102 yyvsp = yyvs;
vlm6a02a8a2004-09-08 00:28:11 +00001103#ifdef YYLSP_NEEDED
1104 yylsp = yyls;
1105#endif
vlmfa67ddc2004-06-03 03:38:44 +00001106
vlm6a02a8a2004-09-08 00:28:11 +00001107/* Push a new state, which is found in yystate . */
1108/* In all cases, when you get here, the value and location stacks
1109 have just been pushed. so pushing a state here evens the stacks. */
1110yynewstate:
vlmfa67ddc2004-06-03 03:38:44 +00001111
vlm6a02a8a2004-09-08 00:28:11 +00001112 *++yyssp = yystate;
vlmfa67ddc2004-06-03 03:38:44 +00001113
1114 if (yyssp >= yyss + yystacksize - 1)
1115 {
vlm6a02a8a2004-09-08 00:28:11 +00001116 /* Give user a chance to reallocate the stack */
1117 /* Use copies of these so that the &'s don't force the real ones into memory. */
1118 YYSTYPE *yyvs1 = yyvs;
1119 short *yyss1 = yyss;
1120#ifdef YYLSP_NEEDED
1121 YYLTYPE *yyls1 = yyls;
1122#endif
1123
vlmfa67ddc2004-06-03 03:38:44 +00001124 /* Get the current used size of the three stacks, in elements. */
vlm6a02a8a2004-09-08 00:28:11 +00001125 int size = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001126
1127#ifdef yyoverflow
vlm6a02a8a2004-09-08 00:28:11 +00001128 /* Each stack pointer address is followed by the size of
1129 the data in use in that stack, in bytes. */
1130#ifdef YYLSP_NEEDED
1131 /* This used to be a conditional around just the two extra args,
1132 but that might be undefined if yyoverflow is a macro. */
1133 yyoverflow("parser stack overflow",
1134 &yyss1, size * sizeof (*yyssp),
1135 &yyvs1, size * sizeof (*yyvsp),
1136 &yyls1, size * sizeof (*yylsp),
1137 &yystacksize);
1138#else
1139 yyoverflow("parser stack overflow",
1140 &yyss1, size * sizeof (*yyssp),
1141 &yyvs1, size * sizeof (*yyvsp),
1142 &yystacksize);
1143#endif
vlmfa67ddc2004-06-03 03:38:44 +00001144
vlm6a02a8a2004-09-08 00:28:11 +00001145 yyss = yyss1; yyvs = yyvs1;
1146#ifdef YYLSP_NEEDED
1147 yyls = yyls1;
1148#endif
vlmfa67ddc2004-06-03 03:38:44 +00001149#else /* no yyoverflow */
1150 /* Extend the stack our own way. */
1151 if (yystacksize >= YYMAXDEPTH)
vlm6a02a8a2004-09-08 00:28:11 +00001152 {
1153 yyerror("parser stack overflow");
1154 if (yyfree_stacks)
1155 {
1156 free (yyss);
1157 free (yyvs);
1158#ifdef YYLSP_NEEDED
1159 free (yyls);
1160#endif
1161 }
1162 return 2;
1163 }
vlmfa67ddc2004-06-03 03:38:44 +00001164 yystacksize *= 2;
1165 if (yystacksize > YYMAXDEPTH)
1166 yystacksize = YYMAXDEPTH;
vlm6a02a8a2004-09-08 00:28:11 +00001167#ifndef YYSTACK_USE_ALLOCA
1168 yyfree_stacks = 1;
1169#endif
1170 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1171 __yy_memcpy ((char *)yyss, (char *)yyss1,
1172 size * (unsigned int) sizeof (*yyssp));
1173 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1174 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1175 size * (unsigned int) sizeof (*yyvsp));
1176#ifdef YYLSP_NEEDED
1177 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1178 __yy_memcpy ((char *)yyls, (char *)yyls1,
1179 size * (unsigned int) sizeof (*yylsp));
1180#endif
vlmfa67ddc2004-06-03 03:38:44 +00001181#endif /* no yyoverflow */
1182
vlm6a02a8a2004-09-08 00:28:11 +00001183 yyssp = yyss + size - 1;
1184 yyvsp = yyvs + size - 1;
1185#ifdef YYLSP_NEEDED
1186 yylsp = yyls + size - 1;
1187#endif
vlmfa67ddc2004-06-03 03:38:44 +00001188
vlm6a02a8a2004-09-08 00:28:11 +00001189#if YYDEBUG != 0
1190 if (yydebug)
1191 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1192#endif
vlmfa67ddc2004-06-03 03:38:44 +00001193
1194 if (yyssp >= yyss + yystacksize - 1)
1195 YYABORT;
1196 }
1197
vlm6a02a8a2004-09-08 00:28:11 +00001198#if YYDEBUG != 0
1199 if (yydebug)
1200 fprintf(stderr, "Entering state %d\n", yystate);
1201#endif
vlmfa67ddc2004-06-03 03:38:44 +00001202
1203 goto yybackup;
vlm6a02a8a2004-09-08 00:28:11 +00001204 yybackup:
vlmfa67ddc2004-06-03 03:38:44 +00001205
1206/* Do appropriate processing given the current state. */
1207/* Read a lookahead token if we need one and don't already have one. */
1208/* yyresume: */
1209
1210 /* First try to decide what to do without reference to lookahead token. */
1211
1212 yyn = yypact[yystate];
vlm6a02a8a2004-09-08 00:28:11 +00001213 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001214 goto yydefault;
1215
1216 /* Not known => get a lookahead token if don't already have one. */
1217
1218 /* yychar is either YYEMPTY or YYEOF
1219 or a valid token in external form. */
1220
1221 if (yychar == YYEMPTY)
1222 {
vlm6a02a8a2004-09-08 00:28:11 +00001223#if YYDEBUG != 0
1224 if (yydebug)
1225 fprintf(stderr, "Reading a token: ");
1226#endif
vlmfa67ddc2004-06-03 03:38:44 +00001227 yychar = YYLEX;
1228 }
1229
vlm6a02a8a2004-09-08 00:28:11 +00001230 /* Convert token to internal form (in yychar1) for indexing tables with */
vlmfa67ddc2004-06-03 03:38:44 +00001231
vlm6a02a8a2004-09-08 00:28:11 +00001232 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001233 {
1234 yychar1 = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001235 yychar = YYEOF; /* Don't call YYLEX any more */
vlmfa67ddc2004-06-03 03:38:44 +00001236
vlm6a02a8a2004-09-08 00:28:11 +00001237#if YYDEBUG != 0
1238 if (yydebug)
1239 fprintf(stderr, "Now at end of input.\n");
1240#endif
vlmfa67ddc2004-06-03 03:38:44 +00001241 }
1242 else
1243 {
vlm6a02a8a2004-09-08 00:28:11 +00001244 yychar1 = YYTRANSLATE(yychar);
vlmfa67ddc2004-06-03 03:38:44 +00001245
vlm6a02a8a2004-09-08 00:28:11 +00001246#if YYDEBUG != 0
1247 if (yydebug)
1248 {
1249 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1250 /* Give the individual parser a way to print the precise meaning
1251 of a token, for further debugging info. */
1252#ifdef YYPRINT
1253 YYPRINT (stderr, yychar, yylval);
1254#endif
1255 fprintf (stderr, ")\n");
1256 }
1257#endif
vlmfa67ddc2004-06-03 03:38:44 +00001258 }
1259
1260 yyn += yychar1;
vlm6a02a8a2004-09-08 00:28:11 +00001261 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001262 goto yydefault;
vlm6a02a8a2004-09-08 00:28:11 +00001263
vlmfa67ddc2004-06-03 03:38:44 +00001264 yyn = yytable[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001265
1266 /* yyn is what to do for this token type in this state.
1267 Negative => reduce, -yyn is rule number.
1268 Positive => shift, yyn is new state.
1269 New state is final state => don't bother to shift,
1270 just return success.
1271 0, or most negative number => error. */
1272
1273 if (yyn < 0)
vlmfa67ddc2004-06-03 03:38:44 +00001274 {
vlm6a02a8a2004-09-08 00:28:11 +00001275 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001276 goto yyerrlab;
1277 yyn = -yyn;
1278 goto yyreduce;
1279 }
vlm6a02a8a2004-09-08 00:28:11 +00001280 else if (yyn == 0)
1281 goto yyerrlab;
vlmfa67ddc2004-06-03 03:38:44 +00001282
1283 if (yyn == YYFINAL)
1284 YYACCEPT;
1285
1286 /* Shift the lookahead token. */
vlm6a02a8a2004-09-08 00:28:11 +00001287
1288#if YYDEBUG != 0
1289 if (yydebug)
1290 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1291#endif
vlmfa67ddc2004-06-03 03:38:44 +00001292
1293 /* Discard the token being shifted unless it is eof. */
1294 if (yychar != YYEOF)
1295 yychar = YYEMPTY;
1296
1297 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00001298#ifdef YYLSP_NEEDED
1299 *++yylsp = yylloc;
1300#endif
vlmfa67ddc2004-06-03 03:38:44 +00001301
vlm6a02a8a2004-09-08 00:28:11 +00001302 /* count tokens shifted since error; after three, turn off error status. */
1303 if (yyerrstatus) yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001304
1305 yystate = yyn;
1306 goto yynewstate;
1307
vlm6a02a8a2004-09-08 00:28:11 +00001308/* Do the default action for the current state. */
vlm80103492004-09-07 10:39:09 +00001309yydefault:
vlm6a02a8a2004-09-08 00:28:11 +00001310
vlmfa67ddc2004-06-03 03:38:44 +00001311 yyn = yydefact[yystate];
1312 if (yyn == 0)
1313 goto yyerrlab;
1314
vlm6a02a8a2004-09-08 00:28:11 +00001315/* Do a reduction. yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001316yyreduce:
1317 yylen = yyr2[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001318 if (yylen > 0)
1319 yyval = yyvsp[1-yylen]; /* implement default value of the action */
vlmfa67ddc2004-06-03 03:38:44 +00001320
vlm6a02a8a2004-09-08 00:28:11 +00001321#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00001322 if (yydebug)
1323 {
vlm6a02a8a2004-09-08 00:28:11 +00001324 int i;
vlmfa67ddc2004-06-03 03:38:44 +00001325
vlm6a02a8a2004-09-08 00:28:11 +00001326 fprintf (stderr, "Reducing via rule %d (line %d), ",
1327 yyn, yyrline[yyn]);
vlmfa67ddc2004-06-03 03:38:44 +00001328
1329 /* Print the symbols being reduced, and their result. */
vlm6a02a8a2004-09-08 00:28:11 +00001330 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1331 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1332 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
vlmfa67ddc2004-06-03 03:38:44 +00001333 }
1334#endif
vlm80103492004-09-07 10:39:09 +00001335
vlm6a02a8a2004-09-08 00:28:11 +00001336
1337 switch (yyn) {
1338
1339case 1:
vlma6a12e32005-03-20 12:58:00 +00001340#line 303 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001341{
1342 *(void **)param = yyvsp[0].a_grammar;
1343 ;
1344 break;}
1345case 2:
vlma6a12e32005-03-20 12:58:00 +00001346#line 309 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001347{
vlmfa67ddc2004-06-03 03:38:44 +00001348 yyval.a_grammar = asn1p_new();
1349 checkmem(yyval.a_grammar);
1350 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001351 ;
1352 break;}
1353case 3:
vlma6a12e32005-03-20 12:58:00 +00001354#line 314 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001355{
vlmfa67ddc2004-06-03 03:38:44 +00001356 yyval.a_grammar = yyvsp[-1].a_grammar;
1357 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001358 ;
1359 break;}
1360case 4:
vlma6a12e32005-03-20 12:58:00 +00001361#line 335 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001362{
vlmfa67ddc2004-06-03 03:38:44 +00001363
1364 if(yyvsp[-1].a_module) {
1365 yyval.a_module = yyvsp[-1].a_module;
1366 } else {
1367 /* There's a chance that a module is just plain empty */
1368 yyval.a_module = asn1p_module_new();
1369 }
1370 checkmem(yyval.a_module);
1371
1372 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1373 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1374 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001375 ;
1376 break;}
1377case 5:
vlma6a12e32005-03-20 12:58:00 +00001378#line 356 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001379{ yyval.a_oid = 0; ;
1380 break;}
1381case 6:
vlma6a12e32005-03-20 12:58:00 +00001382#line 357 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001383{ yyval.a_oid = yyvsp[0].a_oid; ;
1384 break;}
1385case 7:
vlma6a12e32005-03-20 12:58:00 +00001386#line 361 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001387{
vlmfa67ddc2004-06-03 03:38:44 +00001388 yyval.a_oid = yyvsp[-1].a_oid;
vlm6a02a8a2004-09-08 00:28:11 +00001389 ;
1390 break;}
1391case 8:
vlma6a12e32005-03-20 12:58:00 +00001392#line 364 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001393{
vlmfa67ddc2004-06-03 03:38:44 +00001394 yyval.a_oid = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001395 ;
1396 break;}
1397case 9:
vlma6a12e32005-03-20 12:58:00 +00001398#line 370 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001399{
vlmfa67ddc2004-06-03 03:38:44 +00001400 yyval.a_oid = asn1p_oid_new();
1401 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1402 if(yyvsp[0].a_oid_arc.name)
1403 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001404 ;
1405 break;}
1406case 10:
vlma6a12e32005-03-20 12:58:00 +00001407#line 376 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001408{
vlmfa67ddc2004-06-03 03:38:44 +00001409 yyval.a_oid = yyvsp[-1].a_oid;
1410 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1411 if(yyvsp[0].a_oid_arc.name)
1412 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001413 ;
1414 break;}
1415case 11:
vlma6a12e32005-03-20 12:58:00 +00001416#line 385 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001417{ /* iso */
vlmfa67ddc2004-06-03 03:38:44 +00001418 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1419 yyval.a_oid_arc.number = -1;
vlm6a02a8a2004-09-08 00:28:11 +00001420 ;
1421 break;}
1422case 12:
vlma6a12e32005-03-20 12:58:00 +00001423#line 389 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001424{ /* iso(1) */
vlmfa67ddc2004-06-03 03:38:44 +00001425 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1426 yyval.a_oid_arc.number = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001427 ;
1428 break;}
1429case 13:
vlma6a12e32005-03-20 12:58:00 +00001430#line 393 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001431{ /* 1 */
vlmfa67ddc2004-06-03 03:38:44 +00001432 yyval.a_oid_arc.name = 0;
1433 yyval.a_oid_arc.number = yyvsp[0].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001434 ;
1435 break;}
1436case 14:
vlma6a12e32005-03-20 12:58:00 +00001437#line 403 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001438{ yyval.a_module_flags = MSF_NOFLAGS; ;
1439 break;}
1440case 15:
vlma6a12e32005-03-20 12:58:00 +00001441#line 404 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001442{
vlmfa67ddc2004-06-03 03:38:44 +00001443 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001444 ;
1445 break;}
1446case 16:
vlma6a12e32005-03-20 12:58:00 +00001447#line 413 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001448{
vlmfa67ddc2004-06-03 03:38:44 +00001449 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001450 ;
1451 break;}
1452case 17:
vlma6a12e32005-03-20 12:58:00 +00001453#line 416 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001454{
vlmfa67ddc2004-06-03 03:38:44 +00001455 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001456 ;
1457 break;}
1458case 18:
vlma6a12e32005-03-20 12:58:00 +00001459#line 425 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001460{
vlmfa67ddc2004-06-03 03:38:44 +00001461 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001462 ;
1463 break;}
1464case 19:
vlma6a12e32005-03-20 12:58:00 +00001465#line 428 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001466{
vlmfa67ddc2004-06-03 03:38:44 +00001467 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001468 ;
1469 break;}
1470case 20:
vlma6a12e32005-03-20 12:58:00 +00001471#line 431 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001472{
vlmfa67ddc2004-06-03 03:38:44 +00001473 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001474 ;
1475 break;}
1476case 21:
vlma6a12e32005-03-20 12:58:00 +00001477#line 434 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001478{
vlmfa67ddc2004-06-03 03:38:44 +00001479 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
vlm6a02a8a2004-09-08 00:28:11 +00001480 ;
1481 break;}
1482case 22:
vlma6a12e32005-03-20 12:58:00 +00001483#line 438 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001484{
vlm9283dbe2004-08-18 04:59:12 +00001485 /* X.680Amd1 specifies TAG and XER */
1486 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1487 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1488 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1489 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1490 } else {
1491 fprintf(stderr,
1492 "WARNING: %s INSTRUCTIONS at line %d: "
1493 "Unrecognized encoding reference\n",
1494 yyvsp[-1].tv_str, yylineno);
1495 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1496 }
1497 free(yyvsp[-1].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00001498 ;
1499 break;}
1500case 23:
vlma6a12e32005-03-20 12:58:00 +00001501#line 459 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001502{ yyval.a_module = 0; ;
1503 break;}
1504case 24:
vlma6a12e32005-03-20 12:58:00 +00001505#line 460 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001506{
vlmfa67ddc2004-06-03 03:38:44 +00001507 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001508 ;
1509 break;}
1510case 25:
vlma6a12e32005-03-20 12:58:00 +00001511#line 469 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001512{
vlm9283dbe2004-08-18 04:59:12 +00001513 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001514 ;
1515 break;}
1516case 26:
vlma6a12e32005-03-20 12:58:00 +00001517#line 472 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001518{
vlmfa67ddc2004-06-03 03:38:44 +00001519 yyval.a_module = yyvsp[-1].a_module;
1520
vlm9283dbe2004-08-18 04:59:12 +00001521 /* Behave well when one of them is skipped. */
1522 if(!(yyvsp[-1].a_module)) {
1523 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1524 break;
1525 }
1526
vlmfa67ddc2004-06-03 03:38:44 +00001527#ifdef MY_IMPORT
1528#error MY_IMPORT DEFINED ELSEWHERE!
1529#endif
1530#define MY_IMPORT(foo,field) do { \
vlm97ed7152004-08-13 12:31:09 +00001531 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
vlmfa67ddc2004-06-03 03:38:44 +00001532 TQ_ADD(&(yyval.a_module->foo), \
1533 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1534 field); \
vlm97ed7152004-08-13 12:31:09 +00001535 } \
1536 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1537 } while(0)
vlmfa67ddc2004-06-03 03:38:44 +00001538
1539 MY_IMPORT(imports, xp_next);
1540 MY_IMPORT(exports, xp_next);
1541 MY_IMPORT(members, next);
1542#undef MY_IMPORT
1543
vlm6a02a8a2004-09-08 00:28:11 +00001544 ;
1545 break;}
1546case 27:
vlma6a12e32005-03-20 12:58:00 +00001547#line 505 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001548{
vlmfa67ddc2004-06-03 03:38:44 +00001549 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001550 ;
1551 break;}
1552case 28:
vlma6a12e32005-03-20 12:58:00 +00001553#line 508 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001554{
vlmfa67ddc2004-06-03 03:38:44 +00001555 yyval.a_module = asn1p_module_new();
1556 checkmem(yyval.a_module);
1557 if(yyvsp[0].a_xports) {
1558 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1559 } else {
1560 /* "EXPORTS ALL;" ? */
1561 }
vlm6a02a8a2004-09-08 00:28:11 +00001562 ;
1563 break;}
1564case 29:
vlma6a12e32005-03-20 12:58:00 +00001565#line 517 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001566{
vlmfa67ddc2004-06-03 03:38:44 +00001567 yyval.a_module = asn1p_module_new();
1568 checkmem(yyval.a_module);
1569 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1570 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1571 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001572 ;
1573 break;}
1574case 30:
vlma6a12e32005-03-20 12:58:00 +00001575#line 524 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001576{
vlm9283dbe2004-08-18 04:59:12 +00001577 yyval.a_module = asn1p_module_new();
1578 checkmem(yyval.a_module);
1579 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1580 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1581 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001582 ;
1583 break;}
1584case 31:
vlma6a12e32005-03-20 12:58:00 +00001585#line 537 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001586{
vlm9283dbe2004-08-18 04:59:12 +00001587 yyval.a_module = asn1p_module_new();
1588 checkmem(yyval.a_module);
1589 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1590 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1591 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001592 ;
1593 break;}
1594case 32:
vlma6a12e32005-03-20 12:58:00 +00001595#line 545 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001596{ asn1p_lexer_hack_push_encoding_control(); ;
1597 break;}
1598case 33:
vlma6a12e32005-03-20 12:58:00 +00001599#line 546 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001600{
vlm9283dbe2004-08-18 04:59:12 +00001601 fprintf(stderr,
1602 "WARNING: ENCODING-CONTROL %s "
1603 "specification at line %d ignored\n",
1604 yyvsp[-1].tv_str, yylineno);
1605 free(yyvsp[-1].tv_str);
1606 yyval.a_module = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001607 ;
1608 break;}
1609case 34:
vlma6a12e32005-03-20 12:58:00 +00001610#line 558 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001611{
vlmfa67ddc2004-06-03 03:38:44 +00001612 return yyerror(
1613 "Attempt to redefine a standard basic type, "
1614 "use -ftypesXY to switch back "
1615 "to older version of ASN.1 standard");
vlm6a02a8a2004-09-08 00:28:11 +00001616 ;
1617 break;}
1618case 35:
vlma6a12e32005-03-20 12:58:00 +00001619#line 572 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001620{
vlmfa67ddc2004-06-03 03:38:44 +00001621 yyval.a_module = yyvsp[-1].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001622 ;
1623 break;}
1624case 36:
vlma6a12e32005-03-20 12:58:00 +00001625#line 578 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001626{
vlmfa67ddc2004-06-03 03:38:44 +00001627 return yyerror("Empty IMPORTS list");
vlm6a02a8a2004-09-08 00:28:11 +00001628 ;
1629 break;}
1630case 37:
vlma6a12e32005-03-20 12:58:00 +00001631#line 584 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001632{
vlmfa67ddc2004-06-03 03:38:44 +00001633 yyval.a_module = asn1p_module_new();
1634 checkmem(yyval.a_module);
1635 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001636 ;
1637 break;}
1638case 38:
vlma6a12e32005-03-20 12:58:00 +00001639#line 589 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001640{
vlmfa67ddc2004-06-03 03:38:44 +00001641 yyval.a_module = yyvsp[-1].a_module;
1642 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001643 ;
1644 break;}
1645case 39:
vlma6a12e32005-03-20 12:58:00 +00001646#line 596 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001647{
vlmfa67ddc2004-06-03 03:38:44 +00001648 yyval.a_xports = yyvsp[-3].a_xports;
1649 yyval.a_xports->from = yyvsp[-1].tv_str;
1650 yyval.a_xports->from_oid = yyvsp[0].a_oid;
1651 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001652 ;
1653 break;}
1654case 40:
vlma6a12e32005-03-20 12:58:00 +00001655#line 605 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001656{
vlmfa67ddc2004-06-03 03:38:44 +00001657 yyval.a_xports = asn1p_xports_new();
1658 checkmem(yyval.a_xports);
1659 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001660 ;
1661 break;}
1662case 41:
vlma6a12e32005-03-20 12:58:00 +00001663#line 610 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001664{
vlmfa67ddc2004-06-03 03:38:44 +00001665 yyval.a_xports = yyvsp[-2].a_xports;
1666 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001667 ;
1668 break;}
1669case 42:
vlma6a12e32005-03-20 12:58:00 +00001670#line 617 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001671{
vlmfa67ddc2004-06-03 03:38:44 +00001672 yyval.a_expr = asn1p_expr_new(yylineno);
1673 checkmem(yyval.a_expr);
1674 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1675 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm6a02a8a2004-09-08 00:28:11 +00001676 ;
1677 break;}
1678case 43:
vlma6a12e32005-03-20 12:58:00 +00001679#line 623 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001680{ /* Completely equivalent to above */
1681 yyval.a_expr = asn1p_expr_new(yylineno);
1682 checkmem(yyval.a_expr);
1683 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1684 yyval.a_expr->expr_type = A1TC_REFERENCE;
1685 ;
1686 break;}
1687case 44:
vlma6a12e32005-03-20 12:58:00 +00001688#line 629 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001689{
vlmfa67ddc2004-06-03 03:38:44 +00001690 yyval.a_expr = asn1p_expr_new(yylineno);
1691 checkmem(yyval.a_expr);
1692 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1693 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm6a02a8a2004-09-08 00:28:11 +00001694 ;
1695 break;}
vlm0aa86902004-10-12 23:26:53 +00001696case 45:
vlma6a12e32005-03-20 12:58:00 +00001697#line 638 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001698{
vlmfa67ddc2004-06-03 03:38:44 +00001699 yyval.a_xports = yyvsp[-1].a_xports;
vlm6a02a8a2004-09-08 00:28:11 +00001700 ;
1701 break;}
vlm0aa86902004-10-12 23:26:53 +00001702case 46:
vlma6a12e32005-03-20 12:58:00 +00001703#line 641 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001704{
vlmfa67ddc2004-06-03 03:38:44 +00001705 yyval.a_xports = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001706 ;
1707 break;}
vlm0aa86902004-10-12 23:26:53 +00001708case 47:
vlma6a12e32005-03-20 12:58:00 +00001709#line 644 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001710{
vlmfa67ddc2004-06-03 03:38:44 +00001711 /* Empty EXPORTS clause effectively prohibits export. */
1712 yyval.a_xports = asn1p_xports_new();
1713 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001714 ;
1715 break;}
vlm0aa86902004-10-12 23:26:53 +00001716case 48:
vlma6a12e32005-03-20 12:58:00 +00001717#line 652 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001718{
vlmfa67ddc2004-06-03 03:38:44 +00001719 yyval.a_xports = asn1p_xports_new();
1720 assert(yyval.a_xports);
1721 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001722 ;
1723 break;}
vlm0aa86902004-10-12 23:26:53 +00001724case 49:
vlma6a12e32005-03-20 12:58:00 +00001725#line 657 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001726{
vlmfa67ddc2004-06-03 03:38:44 +00001727 yyval.a_xports = yyvsp[-2].a_xports;
1728 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001729 ;
1730 break;}
vlm6a02a8a2004-09-08 00:28:11 +00001731case 50:
vlma6a12e32005-03-20 12:58:00 +00001732#line 664 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001733{
vlmfa67ddc2004-06-03 03:38:44 +00001734 yyval.a_expr = asn1p_expr_new(yylineno);
1735 checkmem(yyval.a_expr);
1736 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1737 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
vlm6a02a8a2004-09-08 00:28:11 +00001738 ;
1739 break;}
1740case 51:
vlma6a12e32005-03-20 12:58:00 +00001741#line 670 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001742{
1743 yyval.a_expr = asn1p_expr_new(yylineno);
1744 checkmem(yyval.a_expr);
1745 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1746 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1747 ;
1748 break;}
1749case 52:
vlma6a12e32005-03-20 12:58:00 +00001750#line 676 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001751{
1752 yyval.a_expr = asn1p_expr_new(yylineno);
1753 checkmem(yyval.a_expr);
1754 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1755 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1756 ;
1757 break;}
1758case 53:
vlma6a12e32005-03-20 12:58:00 +00001759#line 686 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001760{
vlmfa67ddc2004-06-03 03:38:44 +00001761 yyval.a_expr = yyvsp[-4].a_expr;
1762 assert(yyval.a_expr->Identifier == 0);
1763 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1764 yyval.a_expr->meta_type = AMT_VALUESET;
1765 // take care of optValueSetBody
vlm6a02a8a2004-09-08 00:28:11 +00001766 ;
1767 break;}
vlm0aa86902004-10-12 23:26:53 +00001768case 54:
vlma6a12e32005-03-20 12:58:00 +00001769#line 696 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001770{
vlmfa67ddc2004-06-03 03:38:44 +00001771 yyval.a_expr = asn1p_expr_new(yylineno);
1772 checkmem(yyval.a_expr);
1773 yyval.a_expr->reference = yyvsp[0].a_ref;
1774 yyval.a_expr->expr_type = A1TC_REFERENCE;
1775 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00001776 ;
1777 break;}
vlm0aa86902004-10-12 23:26:53 +00001778case 55:
vlma6a12e32005-03-20 12:58:00 +00001779#line 703 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001780{
vlmfa67ddc2004-06-03 03:38:44 +00001781 yyval.a_expr = asn1p_expr_new(yylineno);
1782 checkmem(yyval.a_expr);
1783 yyval.a_expr->expr_type = yyvsp[0].a_type;
1784 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001785 ;
1786 break;}
vlm6a02a8a2004-09-08 00:28:11 +00001787case 56:
vlma6a12e32005-03-20 12:58:00 +00001788#line 712 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001789{ ;
vlm6a02a8a2004-09-08 00:28:11 +00001790 break;}
1791case 57:
vlma6a12e32005-03-20 12:58:00 +00001792#line 713 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001793{
1794 ;
1795 break;}
1796case 58:
vlma6a12e32005-03-20 12:58:00 +00001797#line 724 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001798{
1799 ;
1800 break;}
1801case 59:
vlma6a12e32005-03-20 12:58:00 +00001802#line 726 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001803{
1804 ;
1805 break;}
1806case 60:
vlma6a12e32005-03-20 12:58:00 +00001807#line 731 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001808{
1809 ;
1810 break;}
1811case 61:
vlma6a12e32005-03-20 12:58:00 +00001812#line 733 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001813{
1814 ;
1815 break;}
1816case 62:
vlma6a12e32005-03-20 12:58:00 +00001817#line 749 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001818{
vlmfa67ddc2004-06-03 03:38:44 +00001819 yyval.a_expr = asn1p_expr_new(yylineno);
1820 checkmem(yyval.a_expr);
1821 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1822 yyval.a_expr->tag = yyvsp[-1].a_tag;
1823 yyval.a_expr->expr_type = A1TC_TYPEID;
1824 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001825 ;
1826 break;}
vlm0aa86902004-10-12 23:26:53 +00001827case 63:
vlma6a12e32005-03-20 12:58:00 +00001828#line 757 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001829{
vlmfa67ddc2004-06-03 03:38:44 +00001830 yyval.a_expr = yyvsp[0].a_expr;
vlmfce48a42004-09-14 02:36:39 +00001831 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00001832 assert(yyval.a_expr->expr_type);
1833 assert(yyval.a_expr->meta_type);
vlm6a02a8a2004-09-08 00:28:11 +00001834 ;
1835 break;}
vlm0aa86902004-10-12 23:26:53 +00001836case 64:
vlma6a12e32005-03-20 12:58:00 +00001837#line 763 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001838{
vlmfa67ddc2004-06-03 03:38:44 +00001839 yyval.a_expr = yyvsp[0].a_expr;
1840 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1841 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1842 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm6a02a8a2004-09-08 00:28:11 +00001843 ;
1844 break;}
vlm0aa86902004-10-12 23:26:53 +00001845case 65:
vlma6a12e32005-03-20 12:58:00 +00001846#line 779 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001847{
vlmfa67ddc2004-06-03 03:38:44 +00001848 yyval.a_expr = yyvsp[0].a_expr;
1849 assert(yyval.a_expr->Identifier == 0);
1850 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1851 yyval.a_expr->params = yyvsp[-3].a_plist;
1852 yyval.a_expr->meta_type = AMT_PARAMTYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001853 ;
1854 break;}
vlm0aa86902004-10-12 23:26:53 +00001855case 66:
vlma6a12e32005-03-20 12:58:00 +00001856#line 789 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001857{
vlmfa67ddc2004-06-03 03:38:44 +00001858 int ret;
1859 yyval.a_plist = asn1p_paramlist_new(yylineno);
1860 checkmem(yyval.a_plist);
1861 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1862 checkmem(ret == 0);
1863 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1864 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001865 ;
1866 break;}
vlm0aa86902004-10-12 23:26:53 +00001867case 67:
vlma6a12e32005-03-20 12:58:00 +00001868#line 798 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001869{
vlmfa67ddc2004-06-03 03:38:44 +00001870 int ret;
1871 yyval.a_plist = yyvsp[-2].a_plist;
1872 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1873 checkmem(ret == 0);
1874 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1875 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001876 ;
1877 break;}
vlm0aa86902004-10-12 23:26:53 +00001878case 68:
vlma6a12e32005-03-20 12:58:00 +00001879#line 809 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001880{
vlmfa67ddc2004-06-03 03:38:44 +00001881 yyval.a_parg.governor = NULL;
1882 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001883 ;
1884 break;}
vlm0aa86902004-10-12 23:26:53 +00001885case 69:
vlma6a12e32005-03-20 12:58:00 +00001886#line 813 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001887{
vlmfa67ddc2004-06-03 03:38:44 +00001888 int ret;
1889 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1890 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1891 checkmem(ret == 0);
1892 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001893 ;
1894 break;}
vlm0aa86902004-10-12 23:26:53 +00001895case 70:
vlma6a12e32005-03-20 12:58:00 +00001896#line 820 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001897{
vlmfa67ddc2004-06-03 03:38:44 +00001898 int ret;
1899 yyval.a_parg.governor = asn1p_ref_new(yylineno);
vlm4053ca52005-02-18 16:34:21 +00001900 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1901 checkmem(ret == 0);
1902 yyval.a_parg.argument = yyvsp[0].tv_str;
1903 ;
1904 break;}
1905case 71:
vlma6a12e32005-03-20 12:58:00 +00001906#line 827 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00001907{
1908 int ret;
1909 yyval.a_parg.governor = asn1p_ref_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00001910 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1911 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1912 checkmem(ret == 0);
1913 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001914 ;
1915 break;}
vlm4053ca52005-02-18 16:34:21 +00001916case 72:
vlma6a12e32005-03-20 12:58:00 +00001917#line 838 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001918{
vlmfa67ddc2004-06-03 03:38:44 +00001919 yyval.a_expr = asn1p_expr_new(yylineno);
1920 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001921 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1922 ;
1923 break;}
vlm4053ca52005-02-18 16:34:21 +00001924case 73:
vlma6a12e32005-03-20 12:58:00 +00001925#line 843 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001926{
vlmfa67ddc2004-06-03 03:38:44 +00001927 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001928 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1929 ;
1930 break;}
vlm4053ca52005-02-18 16:34:21 +00001931case 74:
vlma6a12e32005-03-20 12:58:00 +00001932#line 850 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001933{
vlmfa67ddc2004-06-03 03:38:44 +00001934 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001935 ;
1936 break;}
vlm4053ca52005-02-18 16:34:21 +00001937case 75:
vlma6a12e32005-03-20 12:58:00 +00001938#line 853 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001939{
vlmfa67ddc2004-06-03 03:38:44 +00001940 yyval.a_expr = asn1p_expr_new(yylineno);
1941 checkmem(yyval.a_expr);
1942 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1943 yyval.a_expr->expr_type = A1TC_REFERENCE;
1944 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00001945 ;
1946 break;}
vlm4053ca52005-02-18 16:34:21 +00001947case 76:
vlma6a12e32005-03-20 12:58:00 +00001948#line 877 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001949{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1950 break;}
vlm4053ca52005-02-18 16:34:21 +00001951case 77:
vlma6a12e32005-03-20 12:58:00 +00001952#line 878 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001953{ yyval.a_expr = yyvsp[0].a_expr; ;
1954 break;}
vlm4053ca52005-02-18 16:34:21 +00001955case 78:
vlma6a12e32005-03-20 12:58:00 +00001956#line 881 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001957{
vlmfa67ddc2004-06-03 03:38:44 +00001958 yyval.a_expr = asn1p_expr_new(yylineno);
1959 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001960 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1961 ;
1962 break;}
vlm4053ca52005-02-18 16:34:21 +00001963case 79:
vlma6a12e32005-03-20 12:58:00 +00001964#line 886 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001965{
vlmfa67ddc2004-06-03 03:38:44 +00001966 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001967 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1968 ;
1969 break;}
vlm4053ca52005-02-18 16:34:21 +00001970case 80:
vlma6a12e32005-03-20 12:58:00 +00001971#line 893 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001972{
vlmec8f6812004-08-22 03:19:54 +00001973 yyval.a_expr = yyvsp[-1].a_expr;
1974 assert(yyval.a_expr->Identifier == 0);
vlmfce48a42004-09-14 02:36:39 +00001975 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmec8f6812004-08-22 03:19:54 +00001976 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00001977 ;
1978 break;}
vlm4053ca52005-02-18 16:34:21 +00001979case 81:
vlma6a12e32005-03-20 12:58:00 +00001980#line 899 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001981{
vlmec8f6812004-08-22 03:19:54 +00001982 yyval.a_expr = asn1p_expr_new(yylineno);
1983 checkmem(yyval.a_expr);
1984 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1985 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
vlm6a02a8a2004-09-08 00:28:11 +00001986 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1987 ;
1988 break;}
vlm4053ca52005-02-18 16:34:21 +00001989case 82:
vlma6a12e32005-03-20 12:58:00 +00001990#line 906 "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 83:
vlma6a12e32005-03-20 12:58:00 +00001996#line 912 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001997{
vlmec8f6812004-08-22 03:19:54 +00001998 yyval.a_expr = asn1p_expr_new(yylineno);
1999 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00002000 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2001 ;
2002 break;}
vlm4053ca52005-02-18 16:34:21 +00002003case 84:
vlma6a12e32005-03-20 12:58:00 +00002004#line 917 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002005{
vlmec8f6812004-08-22 03:19:54 +00002006 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002007 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2008 ;
2009 break;}
vlm4053ca52005-02-18 16:34:21 +00002010case 85:
vlma6a12e32005-03-20 12:58:00 +00002011#line 924 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002012{
vlmec8f6812004-08-22 03:19:54 +00002013 yyval.a_expr = yyvsp[0].a_expr;
2014 assert(yyval.a_expr->Identifier == 0);
vlmfce48a42004-09-14 02:36:39 +00002015 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002016 ;
2017 break;}
vlm4053ca52005-02-18 16:34:21 +00002018case 86:
vlma6a12e32005-03-20 12:58:00 +00002019#line 929 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002020{
vlmec8f6812004-08-22 03:19:54 +00002021 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002022 ;
2023 break;}
vlm4053ca52005-02-18 16:34:21 +00002024case 87:
vlma6a12e32005-03-20 12:58:00 +00002025#line 935 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002026{
vlmfa67ddc2004-06-03 03:38:44 +00002027 yyval.a_expr = yyvsp[-2].a_expr;
2028 checkmem(yyval.a_expr);
2029 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2030 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2031 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm6a02a8a2004-09-08 00:28:11 +00002032 ;
2033 break;}
vlm4053ca52005-02-18 16:34:21 +00002034case 88:
vlma6a12e32005-03-20 12:58:00 +00002035#line 945 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002036{ yyval.a_int = 0; ;
2037 break;}
vlm4053ca52005-02-18 16:34:21 +00002038case 89:
vlma6a12e32005-03-20 12:58:00 +00002039#line 946 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002040{ yyval.a_int = 1; ;
2041 break;}
vlm4053ca52005-02-18 16:34:21 +00002042case 90:
vlma6a12e32005-03-20 12:58:00 +00002043#line 950 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002044{
vlmfa67ddc2004-06-03 03:38:44 +00002045 yyval.a_expr = asn1p_expr_new(yylineno);
2046 checkmem(yyval.a_expr);
2047 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2048 yyval.a_expr->meta_type = AMT_OBJECT;
vlm6a02a8a2004-09-08 00:28:11 +00002049 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2050 ;
2051 break;}
vlm4053ca52005-02-18 16:34:21 +00002052case 91:
vlma6a12e32005-03-20 12:58:00 +00002053#line 957 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002054{
vlmfa67ddc2004-06-03 03:38:44 +00002055 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002056 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2057 ;
2058 break;}
vlm4053ca52005-02-18 16:34:21 +00002059case 92:
vlma6a12e32005-03-20 12:58:00 +00002060#line 964 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002061{
vlmfa67ddc2004-06-03 03:38:44 +00002062 yyval.a_expr = asn1p_expr_new(yylineno);
2063 checkmem(yyval.a_expr);
2064 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2065 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2066 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2067 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00002068 ;
2069 break;}
vlm4053ca52005-02-18 16:34:21 +00002070case 93:
vlma6a12e32005-03-20 12:58:00 +00002071#line 972 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002072{
vlmec8f6812004-08-22 03:19:54 +00002073 yyval.a_expr = yyvsp[-2].a_expr;
2074 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
vlmbde35d42004-11-24 17:43:29 +00002075 yyval.a_expr->marker = yyvsp[0].a_marker;
2076 yyval.a_expr->unique = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00002077 ;
2078 break;}
vlm4053ca52005-02-18 16:34:21 +00002079case 94:
vlma6a12e32005-03-20 12:58:00 +00002080#line 978 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002081{
vlmfa67ddc2004-06-03 03:38:44 +00002082 int ret;
2083 yyval.a_expr = asn1p_expr_new(yylineno);
2084 checkmem(yyval.a_expr);
2085 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2086 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2087 checkmem(yyval.a_expr->reference);
2088 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2089 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2090 checkmem(ret == 0);
2091 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2092 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
vlmbde35d42004-11-24 17:43:29 +00002093 yyval.a_expr->marker = yyvsp[0].a_marker;
2094 yyval.a_expr->unique = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00002095 ;
2096 break;}
vlm4053ca52005-02-18 16:34:21 +00002097case 95:
vlma6a12e32005-03-20 12:58:00 +00002098#line 996 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002099{ yyval.a_wsynt = 0; ;
2100 break;}
vlm4053ca52005-02-18 16:34:21 +00002101case 96:
vlma6a12e32005-03-20 12:58:00 +00002102#line 997 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002103{
vlmfa67ddc2004-06-03 03:38:44 +00002104 yyval.a_wsynt = yyvsp[0].a_wsynt;
vlm6a02a8a2004-09-08 00:28:11 +00002105 ;
2106 break;}
vlm4053ca52005-02-18 16:34:21 +00002107case 97:
vlma6a12e32005-03-20 12:58:00 +00002108#line 1004 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002109{ asn1p_lexer_hack_enable_with_syntax(); ;
2110 break;}
vlm4053ca52005-02-18 16:34:21 +00002111case 98:
vlma6a12e32005-03-20 12:58:00 +00002112#line 1006 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002113{
vlmfa67ddc2004-06-03 03:38:44 +00002114 yyval.a_wsynt = yyvsp[-1].a_wsynt;
vlm6a02a8a2004-09-08 00:28:11 +00002115 ;
2116 break;}
vlm4053ca52005-02-18 16:34:21 +00002117case 99:
vlma6a12e32005-03-20 12:58:00 +00002118#line 1012 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002119{
vlmfa67ddc2004-06-03 03:38:44 +00002120 yyval.a_wsynt = asn1p_wsyntx_new();
2121 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002122 ;
2123 break;}
vlm4053ca52005-02-18 16:34:21 +00002124case 100:
vlma6a12e32005-03-20 12:58:00 +00002125#line 1016 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002126{
vlmfa67ddc2004-06-03 03:38:44 +00002127 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2128 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002129 ;
2130 break;}
vlm4053ca52005-02-18 16:34:21 +00002131case 101:
vlma6a12e32005-03-20 12:58:00 +00002132#line 1023 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002133{
vlmfa67ddc2004-06-03 03:38:44 +00002134 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002135 ;
2136 break;}
vlm4053ca52005-02-18 16:34:21 +00002137case 102:
vlma6a12e32005-03-20 12:58:00 +00002138#line 1026 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002139{
vlmfa67ddc2004-06-03 03:38:44 +00002140 asn1p_ref_t *ref;
2141 int ret;
2142 ref = asn1p_ref_new(yylineno);
2143 checkmem(ref);
2144 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2145 checkmem(ret == 0);
2146 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002147 ;
2148 break;}
vlm0aa86902004-10-12 23:26:53 +00002149case 103:
vlma6a12e32005-03-20 12:58:00 +00002150#line 1038 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00002151{
2152 yyval.a_expr = asn1p_expr_new(yylineno);
2153 checkmem(yyval.a_expr);
2154 yyval.a_expr->Identifier = strdup("...");
2155 checkmem(yyval.a_expr->Identifier);
vlm0aa86902004-10-12 23:26:53 +00002156 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2157 yyval.a_expr->meta_type = AMT_TYPE;
2158 ;
2159 break;}
2160case 104:
vlma6a12e32005-03-20 12:58:00 +00002161#line 1046 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00002162{
2163 yyval.a_expr = asn1p_expr_new(yylineno);
2164 checkmem(yyval.a_expr);
2165 yyval.a_expr->Identifier = strdup("...");
2166 checkmem(yyval.a_expr->Identifier);
2167 yyval.a_expr->value = yyvsp[0].a_value;
2168 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2169 yyval.a_expr->meta_type = AMT_TYPE;
2170 ;
2171 break;}
2172case 105:
vlma6a12e32005-03-20 12:58:00 +00002173#line 1055 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00002174{
2175 yyval.a_expr = asn1p_expr_new(yylineno);
2176 checkmem(yyval.a_expr);
2177 yyval.a_expr->Identifier = strdup("...");
vlm5f0128b2004-08-20 13:25:29 +00002178 yyval.a_expr->value = yyvsp[0].a_value;
2179 checkmem(yyval.a_expr->Identifier);
2180 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2181 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002182 ;
2183 break;}
vlm4053ca52005-02-18 16:34:21 +00002184case 106:
vlma6a12e32005-03-20 12:58:00 +00002185#line 1067 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002186{
vlmec8f6812004-08-22 03:19:54 +00002187 yyval.a_expr = yyvsp[-1].a_expr;
vlmfce48a42004-09-14 02:36:39 +00002188 yyval.a_expr->tag = yyvsp[-2].a_tag;
vlmec8f6812004-08-22 03:19:54 +00002189 /*
2190 * Outer constraint for SEQUENCE OF and SET OF applies
2191 * to the inner type.
2192 */
2193 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2194 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2195 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2196 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2197 } else {
2198 if(yyval.a_expr->constraints) {
vlmfce48a42004-09-14 02:36:39 +00002199 assert(!yyvsp[-1].a_expr);
vlmec8f6812004-08-22 03:19:54 +00002200 } else {
2201 yyval.a_expr->constraints = yyvsp[0].a_constr;
2202 }
2203 }
vlm6a02a8a2004-09-08 00:28:11 +00002204 ;
2205 break;}
vlm4053ca52005-02-18 16:34:21 +00002206case 107:
vlma6a12e32005-03-20 12:58:00 +00002207#line 1089 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002208{
vlm5f0128b2004-08-20 13:25:29 +00002209 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002210 ;
2211 break;}
vlm4053ca52005-02-18 16:34:21 +00002212case 108:
vlma6a12e32005-03-20 12:58:00 +00002213#line 1092 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002214{
vlm5e2c4b92005-03-20 11:12:40 +00002215 yyval.a_expr = yyvsp[-1].a_expr;
2216 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2217 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
vlmfa67ddc2004-06-03 03:38:44 +00002218 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002219 ;
2220 break;}
vlm4053ca52005-02-18 16:34:21 +00002221case 109:
vlma6a12e32005-03-20 12:58:00 +00002222#line 1098 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002223{
vlmec8f6812004-08-22 03:19:54 +00002224 yyval.a_expr = yyvsp[-1].a_expr;
2225 assert(yyval.a_expr->expr_type == A1TC_INVALID);
vlm5e2c4b92005-03-20 11:12:40 +00002226 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
vlmec8f6812004-08-22 03:19:54 +00002227 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002228 ;
2229 break;}
vlm4053ca52005-02-18 16:34:21 +00002230case 110:
vlma6a12e32005-03-20 12:58:00 +00002231#line 1104 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002232{
vlmec8f6812004-08-22 03:19:54 +00002233 yyval.a_expr = yyvsp[-1].a_expr;
2234 assert(yyval.a_expr->expr_type == A1TC_INVALID);
vlm5e2c4b92005-03-20 11:12:40 +00002235 yyval.a_expr->expr_type = ASN_CONSTR_SET;
vlmec8f6812004-08-22 03:19:54 +00002236 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002237 ;
2238 break;}
vlm4053ca52005-02-18 16:34:21 +00002239case 111:
vlma6a12e32005-03-20 12:58:00 +00002240#line 1110 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002241{
vlm39e5ed72004-09-05 10:40:41 +00002242 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002243 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002244 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002245 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2246 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002247 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002248 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002249 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2250 ;
2251 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002252case 112:
vlma6a12e32005-03-20 12:58:00 +00002253#line 1120 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002254{
vlm39e5ed72004-09-05 10:40:41 +00002255 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002256 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002257 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002258 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2259 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002260 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002261 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002262 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2263 ;
2264 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002265case 113:
vlma6a12e32005-03-20 12:58:00 +00002266#line 1130 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002267{
vlm39e5ed72004-09-05 10:40:41 +00002268 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002269 checkmem(yyval.a_expr);
vlm044f7442004-09-04 04:49:21 +00002270 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002271 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002272 ;
2273 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002274case 114:
vlma6a12e32005-03-20 12:58:00 +00002275#line 1136 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002276{
vlmec8f6812004-08-22 03:19:54 +00002277 int ret;
vlm39e5ed72004-09-05 10:40:41 +00002278 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002279 checkmem(yyval.a_expr);
2280 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2281 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2282 yyvsp[0].tv_str, RLT_lowercase);
2283 checkmem(ret == 0);
vlm044f7442004-09-04 04:49:21 +00002284 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002285 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002286 ;
2287 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002288case 115:
vlma6a12e32005-03-20 12:58:00 +00002289#line 1150 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002290{
vlmfa67ddc2004-06-03 03:38:44 +00002291 int ret;
2292 yyval.a_expr = yyvsp[-1].a_expr;
2293 assert(yyval.a_expr->expr_type == 0);
2294 assert(yyval.a_expr->meta_type == 0);
2295 assert(yyval.a_expr->reference == 0);
2296 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2297 checkmem(yyval.a_expr->reference);
2298 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2299 checkmem(ret == 0);
2300 free(yyvsp[-3].tv_str);
2301 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2302 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002303 ;
2304 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002305case 116:
vlma6a12e32005-03-20 12:58:00 +00002306#line 1174 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002307{
vlmfa67ddc2004-06-03 03:38:44 +00002308 yyval.a_expr = asn1p_expr_new(yylineno);
2309 checkmem(yyval.a_expr);
2310 yyval.a_expr->reference = yyvsp[0].a_ref;
2311 yyval.a_expr->expr_type = A1TC_REFERENCE;
2312 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00002313 ;
2314 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002315case 117:
vlma6a12e32005-03-20 12:58:00 +00002316#line 1181 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002317{
vlmfa67ddc2004-06-03 03:38:44 +00002318 yyval.a_expr = asn1p_expr_new(yylineno);
2319 checkmem(yyval.a_expr);
2320 yyval.a_expr->reference = yyvsp[0].a_ref;
2321 yyval.a_expr->expr_type = A1TC_INSTANCE;
2322 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002323 ;
2324 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002325case 118:
vlma6a12e32005-03-20 12:58:00 +00002326#line 1196 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002327{
vlmfa67ddc2004-06-03 03:38:44 +00002328 int ret;
2329 yyval.a_ref = asn1p_ref_new(yylineno);
2330 checkmem(yyval.a_ref);
2331 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2332 checkmem(ret == 0);
2333 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002334 ;
2335 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002336case 119:
vlma6a12e32005-03-20 12:58:00 +00002337#line 1204 "asn1p_y.y"
vlm5e2c4b92005-03-20 11:12:40 +00002338{
2339 int ret;
2340 yyval.a_ref = asn1p_ref_new(yylineno);
2341 checkmem(yyval.a_ref);
2342 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2343 checkmem(ret == 0);
2344 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2345 checkmem(ret == 0);
2346 free(yyvsp[-2].tv_str);
2347 ;
2348 break;}
vlm0aa86902004-10-12 23:26:53 +00002349case 120:
vlma6a12e32005-03-20 12:58:00 +00002350#line 1214 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002351{
vlmfa67ddc2004-06-03 03:38:44 +00002352 int ret;
2353 yyval.a_ref = asn1p_ref_new(yylineno);
2354 checkmem(yyval.a_ref);
2355 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2356 checkmem(ret == 0);
vlmc94e28f2004-09-15 11:59:51 +00002357 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
vlmfa67ddc2004-06-03 03:38:44 +00002358 checkmem(ret == 0);
2359 free(yyvsp[-2].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002360 ;
2361 break;}
vlm0aa86902004-10-12 23:26:53 +00002362case 121:
vlma6a12e32005-03-20 12:58:00 +00002363#line 1224 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002364{
vlmfa67ddc2004-06-03 03:38:44 +00002365 int ret;
2366 yyval.a_ref = asn1p_ref_new(yylineno);
2367 checkmem(yyval.a_ref);
vlmc94e28f2004-09-15 11:59:51 +00002368 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2369 checkmem(ret == 0);
2370 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2371 checkmem(ret == 0);
2372 free(yyvsp[-2].tv_str);
2373 ;
2374 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002375case 122:
vlma6a12e32005-03-20 12:58:00 +00002376#line 1234 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002377{
2378 int ret;
2379 yyval.a_ref = asn1p_ref_new(yylineno);
2380 checkmem(yyval.a_ref);
vlmfa67ddc2004-06-03 03:38:44 +00002381 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2382 free(yyvsp[0].tv_str);
2383 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002384 ;
2385 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002386case 123:
vlma6a12e32005-03-20 12:58:00 +00002387#line 1242 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002388{
vlmfa67ddc2004-06-03 03:38:44 +00002389 int ret;
2390 yyval.a_ref = yyvsp[0].a_ref;
2391 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2392 free(yyvsp[-2].tv_str);
2393 checkmem(ret == 0);
2394 /*
2395 * Move the last element infront.
2396 */
2397 {
2398 struct asn1p_ref_component_s tmp_comp;
2399 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2400 memmove(&yyval.a_ref->components[1],
2401 &yyval.a_ref->components[0],
2402 sizeof(yyval.a_ref->components[0])
2403 * (yyval.a_ref->comp_count - 1));
2404 yyval.a_ref->components[0] = tmp_comp;
2405 }
vlm6a02a8a2004-09-08 00:28:11 +00002406 ;
2407 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002408case 124:
vlma6a12e32005-03-20 12:58:00 +00002409#line 1264 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002410{
vlmfa67ddc2004-06-03 03:38:44 +00002411 int ret;
2412 yyval.a_ref = asn1p_ref_new(yylineno);
2413 checkmem(yyval.a_ref);
2414 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2415 free(yyvsp[0].a_refcomp.name);
2416 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002417 ;
2418 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002419case 125:
vlma6a12e32005-03-20 12:58:00 +00002420#line 1272 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002421{
vlmfa67ddc2004-06-03 03:38:44 +00002422 int ret;
2423 yyval.a_ref = yyvsp[-2].a_ref;
2424 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2425 free(yyvsp[0].a_refcomp.name);
2426 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002427 ;
2428 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002429case 128:
vlma6a12e32005-03-20 12:58:00 +00002430#line 1286 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002431{
vlmfa67ddc2004-06-03 03:38:44 +00002432 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2433 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002434 ;
2435 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002436case 129:
vlma6a12e32005-03-20 12:58:00 +00002437#line 1291 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002438{
vlmfa67ddc2004-06-03 03:38:44 +00002439 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2440 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002441 ;
2442 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002443case 130:
vlma6a12e32005-03-20 12:58:00 +00002444#line 1304 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002445{
vlmfa67ddc2004-06-03 03:38:44 +00002446 yyval.a_expr = yyvsp[-2].a_expr;
2447 assert(yyval.a_expr->Identifier == NULL);
2448 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2449 yyval.a_expr->meta_type = AMT_VALUE;
2450 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002451 ;
2452 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002453case 131:
vlma6a12e32005-03-20 12:58:00 +00002454#line 1314 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002455{
2456 yyval.a_value = asn1p_value_fromint(0);
2457 checkmem(yyval.a_value);
2458 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2459 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2460 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2461 ;
2462 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002463case 132:
vlma6a12e32005-03-20 12:58:00 +00002464#line 1321 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002465{ asn1p_lexer_hack_push_opaque_state(); ;
2466 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002467case 133:
vlma6a12e32005-03-20 12:58:00 +00002468#line 1321 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002469{
vlmfa67ddc2004-06-03 03:38:44 +00002470 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2471 checkmem(yyval.a_value);
2472 yyval.a_value->type = ATV_UNPARSED;
vlm6a02a8a2004-09-08 00:28:11 +00002473 ;
2474 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002475case 134:
vlma6a12e32005-03-20 12:58:00 +00002476#line 1326 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002477{
2478 yyval.a_value = asn1p_value_fromint(0);
2479 checkmem(yyval.a_value);
2480 yyval.a_value->type = ATV_NULL;
2481 ;
2482 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002483case 135:
vlma6a12e32005-03-20 12:58:00 +00002484#line 1331 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002485{
2486 yyval.a_value = asn1p_value_fromint(0);
2487 checkmem(yyval.a_value);
2488 yyval.a_value->type = ATV_FALSE;
2489 ;
2490 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002491case 136:
vlma6a12e32005-03-20 12:58:00 +00002492#line 1336 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002493{
2494 yyval.a_value = asn1p_value_fromint(0);
2495 checkmem(yyval.a_value);
2496 yyval.a_value->type = ATV_TRUE;
2497 ;
2498 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002499case 137:
vlma6a12e32005-03-20 12:58:00 +00002500#line 1341 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002501{
vlmfa67ddc2004-06-03 03:38:44 +00002502 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2503 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002504 ;
2505 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002506case 138:
vlma6a12e32005-03-20 12:58:00 +00002507#line 1345 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002508{
vlmfa67ddc2004-06-03 03:38:44 +00002509 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2510 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002511 ;
2512 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002513case 139:
vlma6a12e32005-03-20 12:58:00 +00002514#line 1349 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002515{
vlmfa67ddc2004-06-03 03:38:44 +00002516 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2517 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002518 ;
2519 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002520case 140:
vlma6a12e32005-03-20 12:58:00 +00002521#line 1353 "asn1p_y.y"
vlm5e2c4b92005-03-20 11:12:40 +00002522{
2523 yyval.a_value = yyvsp[0].a_value;
2524 ;
2525 break;}
vlm0aa86902004-10-12 23:26:53 +00002526case 141:
vlma6a12e32005-03-20 12:58:00 +00002527#line 1356 "asn1p_y.y"
vlm151c0b22004-09-22 16:03:36 +00002528{
2529 yyval.a_value = yyvsp[0].a_value;
2530 ;
2531 break;}
vlm0aa86902004-10-12 23:26:53 +00002532case 142:
vlma6a12e32005-03-20 12:58:00 +00002533#line 1362 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00002534{
vlmfa67ddc2004-06-03 03:38:44 +00002535 asn1p_ref_t *ref;
2536 int ret;
2537 ref = asn1p_ref_new(yylineno);
2538 checkmem(ref);
2539 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2540 checkmem(ret == 0);
2541 yyval.a_value = asn1p_value_fromref(ref, 0);
2542 checkmem(yyval.a_value);
2543 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002544 ;
2545 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002546case 143:
vlma6a12e32005-03-20 12:58:00 +00002547#line 1373 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002548{
vlmfa67ddc2004-06-03 03:38:44 +00002549 asn1p_ref_t *ref;
2550 int ret;
2551 ref = asn1p_ref_new(yylineno);
2552 checkmem(ref);
2553 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2554 checkmem(ret == 0);
2555 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2556 checkmem(ret == 0);
2557 yyval.a_value = asn1p_value_fromref(ref, 0);
2558 checkmem(yyval.a_value);
2559 free(yyvsp[-2].tv_str);
2560 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002561 ;
2562 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002563case 144:
vlma6a12e32005-03-20 12:58:00 +00002564#line 1390 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002565{
vlmfa67ddc2004-06-03 03:38:44 +00002566 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
2567 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2568 checkmem(yyval.tv_opaque.buf);
2569 yyval.tv_opaque.buf[0] = '{';
2570 yyval.tv_opaque.buf[1] = ' ';
2571 memcpy(yyval.tv_opaque.buf + 2, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2572 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2573 free(yyvsp[0].tv_opaque.buf);
vlm6a02a8a2004-09-08 00:28:11 +00002574 ;
2575 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002576case 145:
vlma6a12e32005-03-20 12:58:00 +00002577#line 1400 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002578{
vlmfa67ddc2004-06-03 03:38:44 +00002579 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2580 char *p = malloc(newsize + 1);
2581 checkmem(p);
2582 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2583 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2584 p[newsize] = '\0';
2585 free(yyvsp[-1].tv_opaque.buf);
2586 free(yyvsp[0].tv_opaque.buf);
2587 yyval.tv_opaque.buf = p;
2588 yyval.tv_opaque.len = newsize;
vlm6a02a8a2004-09-08 00:28:11 +00002589 ;
2590 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002591case 146:
vlma6a12e32005-03-20 12:58:00 +00002592#line 1415 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002593{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2594 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002595case 147:
vlma6a12e32005-03-20 12:58:00 +00002596#line 1416 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002597{ yyval.a_type = ASN_BASIC_NULL; ;
2598 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002599case 148:
vlma6a12e32005-03-20 12:58:00 +00002600#line 1417 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002601{ yyval.a_type = ASN_BASIC_REAL; ;
2602 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002603case 149:
vlma6a12e32005-03-20 12:58:00 +00002604#line 1418 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002605{ yyval.a_type = yyvsp[0].a_type; ;
2606 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002607case 150:
vlma6a12e32005-03-20 12:58:00 +00002608#line 1419 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002609{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
2610 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002611case 151:
vlma6a12e32005-03-20 12:58:00 +00002612#line 1420 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002613{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
2614 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002615case 152:
vlma6a12e32005-03-20 12:58:00 +00002616#line 1421 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002617{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
2618 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002619case 153:
vlma6a12e32005-03-20 12:58:00 +00002620#line 1422 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002621{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
2622 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002623case 154:
vlma6a12e32005-03-20 12:58:00 +00002624#line 1423 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002625{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
2626 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002627case 155:
vlma6a12e32005-03-20 12:58:00 +00002628#line 1424 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002629{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
2630 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002631case 156:
vlma6a12e32005-03-20 12:58:00 +00002632#line 1425 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002633{ yyval.a_type = ASN_BASIC_UTCTime; ;
2634 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002635case 157:
vlma6a12e32005-03-20 12:58:00 +00002636#line 1426 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002637{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2638 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002639case 158:
vlma6a12e32005-03-20 12:58:00 +00002640#line 1427 "asn1p_y.y"
vlm5e2c4b92005-03-20 11:12:40 +00002641{ yyval.a_type = yyvsp[0].a_type; ;
2642 break;}
vlm4053ca52005-02-18 16:34:21 +00002643case 159:
vlma6a12e32005-03-20 12:58:00 +00002644#line 1434 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002645{ yyval.a_type = ASN_BASIC_INTEGER; ;
2646 break;}
vlm4053ca52005-02-18 16:34:21 +00002647case 160:
vlma6a12e32005-03-20 12:58:00 +00002648#line 1435 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002649{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2650 break;}
vlm4053ca52005-02-18 16:34:21 +00002651case 161:
vlma6a12e32005-03-20 12:58:00 +00002652#line 1436 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002653{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2654 break;}
vlm4053ca52005-02-18 16:34:21 +00002655case 162:
vlma6a12e32005-03-20 12:58:00 +00002656#line 1440 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002657{
vlm39e5ed72004-09-05 10:40:41 +00002658 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002659 checkmem(yyval.a_expr);
2660 yyval.a_expr->expr_type = yyvsp[0].a_type;
2661 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002662 ;
2663 break;}
vlm4053ca52005-02-18 16:34:21 +00002664case 163:
vlma6a12e32005-03-20 12:58:00 +00002665#line 1446 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002666{
vlmfa67ddc2004-06-03 03:38:44 +00002667 if(yyvsp[0].a_expr) {
2668 yyval.a_expr = yyvsp[0].a_expr;
2669 } else {
vlm39e5ed72004-09-05 10:40:41 +00002670 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002671 checkmem(yyval.a_expr);
2672 }
2673 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2674 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002675 ;
2676 break;}
vlm4053ca52005-02-18 16:34:21 +00002677case 164:
vlma6a12e32005-03-20 12:58:00 +00002678#line 1459 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002679{ yyval.a_type = ASN_STRING_BMPString; ;
2680 break;}
vlm4053ca52005-02-18 16:34:21 +00002681case 165:
vlma6a12e32005-03-20 12:58:00 +00002682#line 1460 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002683{
vlmfa67ddc2004-06-03 03:38:44 +00002684 yyval.a_type = ASN_STRING_GeneralString;
vlmc94e28f2004-09-15 11:59:51 +00002685 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002686 ;
2687 break;}
vlm4053ca52005-02-18 16:34:21 +00002688case 166:
vlma6a12e32005-03-20 12:58:00 +00002689#line 1464 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002690{
vlmc94e28f2004-09-15 11:59:51 +00002691 yyval.a_type = ASN_STRING_GraphicString;
2692 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002693 ;
2694 break;}
vlm4053ca52005-02-18 16:34:21 +00002695case 167:
vlma6a12e32005-03-20 12:58:00 +00002696#line 1468 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002697{ yyval.a_type = ASN_STRING_IA5String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002698 break;}
vlm4053ca52005-02-18 16:34:21 +00002699case 168:
vlma6a12e32005-03-20 12:58:00 +00002700#line 1469 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002701{ yyval.a_type = ASN_STRING_ISO646String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002702 break;}
vlm4053ca52005-02-18 16:34:21 +00002703case 169:
vlma6a12e32005-03-20 12:58:00 +00002704#line 1470 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002705{ yyval.a_type = ASN_STRING_NumericString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002706 break;}
vlm4053ca52005-02-18 16:34:21 +00002707case 170:
vlma6a12e32005-03-20 12:58:00 +00002708#line 1471 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002709{ yyval.a_type = ASN_STRING_PrintableString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002710 break;}
vlm4053ca52005-02-18 16:34:21 +00002711case 171:
vlma6a12e32005-03-20 12:58:00 +00002712#line 1472 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002713{
2714 yyval.a_type = ASN_STRING_T61String;
2715 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2716 ;
vlm6a02a8a2004-09-08 00:28:11 +00002717 break;}
vlm4053ca52005-02-18 16:34:21 +00002718case 172:
vlma6a12e32005-03-20 12:58:00 +00002719#line 1476 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002720{ yyval.a_type = ASN_STRING_TeletexString; ;
2721 break;}
vlm4053ca52005-02-18 16:34:21 +00002722case 173:
vlma6a12e32005-03-20 12:58:00 +00002723#line 1477 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002724{ yyval.a_type = ASN_STRING_UniversalString; ;
2725 break;}
vlm4053ca52005-02-18 16:34:21 +00002726case 174:
vlma6a12e32005-03-20 12:58:00 +00002727#line 1478 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002728{ yyval.a_type = ASN_STRING_UTF8String; ;
2729 break;}
vlm4053ca52005-02-18 16:34:21 +00002730case 175:
vlma6a12e32005-03-20 12:58:00 +00002731#line 1479 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002732{
2733 yyval.a_type = ASN_STRING_VideotexString;
2734 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2735 ;
2736 break;}
vlm4053ca52005-02-18 16:34:21 +00002737case 176:
vlma6a12e32005-03-20 12:58:00 +00002738#line 1483 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002739{ yyval.a_type = ASN_STRING_VisibleString; ;
2740 break;}
vlm4053ca52005-02-18 16:34:21 +00002741case 177:
vlma6a12e32005-03-20 12:58:00 +00002742#line 1484 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002743{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2744 break;}
vlm4053ca52005-02-18 16:34:21 +00002745case 183:
vlma6a12e32005-03-20 12:58:00 +00002746#line 1496 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002747{ yyval.a_constr = 0; ;
2748 break;}
vlm4053ca52005-02-18 16:34:21 +00002749case 184:
vlma6a12e32005-03-20 12:58:00 +00002750#line 1497 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002751{
vlm39e5ed72004-09-05 10:40:41 +00002752 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002753 ;
2754 break;}
vlm4053ca52005-02-18 16:34:21 +00002755case 185:
vlma6a12e32005-03-20 12:58:00 +00002756#line 1503 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002757{
vlm39e5ed72004-09-05 10:40:41 +00002758 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002759 ;
2760 break;}
vlm4053ca52005-02-18 16:34:21 +00002761case 186:
vlma6a12e32005-03-20 12:58:00 +00002762#line 1506 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002763{
vlmfa67ddc2004-06-03 03:38:44 +00002764 /*
2765 * This is a special case, for compatibility purposes.
vlm9283dbe2004-08-18 04:59:12 +00002766 * It goes without parentheses.
vlmfa67ddc2004-06-03 03:38:44 +00002767 */
vlm5f0128b2004-08-20 13:25:29 +00002768 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002769 ;
2770 break;}
vlm4053ca52005-02-18 16:34:21 +00002771case 187:
vlma6a12e32005-03-20 12:58:00 +00002772#line 1516 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002773{
vlmfa67ddc2004-06-03 03:38:44 +00002774 yyval.a_constr = yyvsp[-1].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002775 ;
2776 break;}
vlm4053ca52005-02-18 16:34:21 +00002777case 188:
vlma6a12e32005-03-20 12:58:00 +00002778#line 1519 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002779{
vlm9283dbe2004-08-18 04:59:12 +00002780 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002781 ;
2782 break;}
vlm4053ca52005-02-18 16:34:21 +00002783case 189:
vlma6a12e32005-03-20 12:58:00 +00002784#line 1525 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002785{
vlmfa67ddc2004-06-03 03:38:44 +00002786 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002787 ;
2788 break;}
vlm4053ca52005-02-18 16:34:21 +00002789case 190:
vlma6a12e32005-03-20 12:58:00 +00002790#line 1528 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002791{
vlmfa67ddc2004-06-03 03:38:44 +00002792 asn1p_constraint_t *ct;
2793 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002794 ct->type = ACT_EL_EXT;
2795 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00002796 ;
2797 break;}
vlm4053ca52005-02-18 16:34:21 +00002798case 191:
vlma6a12e32005-03-20 12:58:00 +00002799#line 1534 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002800{
vlmfa67ddc2004-06-03 03:38:44 +00002801 asn1p_constraint_t *ct;
2802 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002803 ct->type = ACT_EL_EXT;
2804 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
vlm6f5eb0b2004-08-13 12:35:09 +00002805 ct = yyval.a_constr;
2806 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002807 ;
2808 break;}
vlm4053ca52005-02-18 16:34:21 +00002809case 192:
vlma6a12e32005-03-20 12:58:00 +00002810#line 1545 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002811{
vlm9283dbe2004-08-18 04:59:12 +00002812 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002813 ;
2814 break;}
vlm4053ca52005-02-18 16:34:21 +00002815case 193:
vlma6a12e32005-03-20 12:58:00 +00002816#line 1548 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002817{
vlmfa67ddc2004-06-03 03:38:44 +00002818 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002819 ;
2820 break;}
vlm4053ca52005-02-18 16:34:21 +00002821case 194:
vlma6a12e32005-03-20 12:58:00 +00002822#line 1551 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002823{
vlmfa67ddc2004-06-03 03:38:44 +00002824 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002825 ;
2826 break;}
vlm4053ca52005-02-18 16:34:21 +00002827case 195:
vlma6a12e32005-03-20 12:58:00 +00002828#line 1554 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002829{
vlmfa67ddc2004-06-03 03:38:44 +00002830 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002831 ;
2832 break;}
vlm4053ca52005-02-18 16:34:21 +00002833case 196:
vlma6a12e32005-03-20 12:58:00 +00002834#line 1560 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002835{
vlmfa67ddc2004-06-03 03:38:44 +00002836 int ret;
2837 yyval.a_constr = asn1p_constraint_new(yylineno);
2838 checkmem(yyval.a_constr);
2839 yyval.a_constr->type = yyvsp[-3].a_ctype;
2840 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2841 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002842 ;
2843 break;}
vlm4053ca52005-02-18 16:34:21 +00002844case 197:
vlma6a12e32005-03-20 12:58:00 +00002845#line 1568 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002846{
vlm9283dbe2004-08-18 04:59:12 +00002847 int ret;
2848 yyval.a_constr = asn1p_constraint_new(yylineno);
2849 checkmem(yyval.a_constr);
2850 yyval.a_constr->type = ACT_CA_SET;
2851 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2852 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002853 ;
2854 break;}
vlm4053ca52005-02-18 16:34:21 +00002855case 198:
vlma6a12e32005-03-20 12:58:00 +00002856#line 1576 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002857{
vlm9283dbe2004-08-18 04:59:12 +00002858 yyval.a_constr = asn1p_constraint_new(yylineno);
2859 checkmem(yyval.a_constr);
2860 yyval.a_constr->type = ACT_EL_VALUE;
2861 yyval.a_constr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002862 ;
2863 break;}
vlm4053ca52005-02-18 16:34:21 +00002864case 199:
vlma6a12e32005-03-20 12:58:00 +00002865#line 1582 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002866{
vlm0aa86902004-10-12 23:26:53 +00002867 yyval.a_constr = asn1p_constraint_new(yylineno);
2868 checkmem(yyval.a_constr);
vlma6a12e32005-03-20 12:58:00 +00002869 yyval.a_constr->type = ACT_EL_TYPE;
2870 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
vlmc94e28f2004-09-15 11:59:51 +00002871 ;
2872 break;}
vlm0aa86902004-10-12 23:26:53 +00002873case 200:
vlm5e2c4b92005-03-20 11:12:40 +00002874#line 1588 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00002875{
2876 yyval.a_constr = asn1p_constraint_new(yylineno);
2877 checkmem(yyval.a_constr);
2878 yyval.a_constr->type = yyvsp[-1].a_ctype;
vlma6a12e32005-03-20 12:58:00 +00002879 yyval.a_constr->range_start = yyvsp[-2].a_value;
2880 yyval.a_constr->range_stop = yyvsp[0].a_value;
2881 ;
2882 break;}
2883case 201:
2884#line 1595 "asn1p_y.y"
2885{
2886 yyval.a_constr = asn1p_constraint_new(yylineno);
2887 checkmem(yyval.a_constr);
2888 yyval.a_constr->type = yyvsp[-1].a_ctype;
vlm4053ca52005-02-18 16:34:21 +00002889 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2890 yyval.a_constr->range_stop = yyvsp[0].a_value;
2891 yyval.a_constr->range_start->type = ATV_MIN;
2892 ;
2893 break;}
vlma6a12e32005-03-20 12:58:00 +00002894case 202:
2895#line 1603 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00002896{
2897 yyval.a_constr = asn1p_constraint_new(yylineno);
2898 checkmem(yyval.a_constr);
2899 yyval.a_constr->type = yyvsp[-1].a_ctype;
2900 yyval.a_constr->range_start = yyvsp[-2].a_value;
2901 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2902 yyval.a_constr->range_stop->type = ATV_MAX;
2903 ;
2904 break;}
vlma6a12e32005-03-20 12:58:00 +00002905case 203:
2906#line 1611 "asn1p_y.y"
vlm151c0b22004-09-22 16:03:36 +00002907{
vlm4053ca52005-02-18 16:34:21 +00002908 yyval.a_constr = asn1p_constraint_new(yylineno);
2909 checkmem(yyval.a_constr);
2910 yyval.a_constr->type = yyvsp[-1].a_ctype;
2911 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2912 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2913 yyval.a_constr->range_start->type = ATV_MIN;
2914 yyval.a_constr->range_stop->type = ATV_MAX;
vlm151c0b22004-09-22 16:03:36 +00002915 ;
2916 break;}
vlmc94e28f2004-09-15 11:59:51 +00002917case 204:
vlma6a12e32005-03-20 12:58:00 +00002918#line 1620 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00002919{
2920 yyval.a_constr = yyvsp[0].a_constr;
2921 ;
vlm0aa86902004-10-12 23:26:53 +00002922 break;}
2923case 205:
vlma6a12e32005-03-20 12:58:00 +00002924#line 1623 "asn1p_y.y"
2925{
2926 yyval.a_constr = yyvsp[0].a_constr;
2927 ;
vlm0aa86902004-10-12 23:26:53 +00002928 break;}
2929case 206:
vlma6a12e32005-03-20 12:58:00 +00002930#line 1629 "asn1p_y.y"
2931{ yyval.a_ctype = ACT_EL_RANGE; ;
vlm0aa86902004-10-12 23:26:53 +00002932 break;}
2933case 207:
vlma6a12e32005-03-20 12:58:00 +00002934#line 1630 "asn1p_y.y"
2935{ yyval.a_ctype = ACT_EL_RLRANGE; ;
vlm0aa86902004-10-12 23:26:53 +00002936 break;}
2937case 208:
vlma6a12e32005-03-20 12:58:00 +00002938#line 1631 "asn1p_y.y"
2939{ yyval.a_ctype = ACT_EL_LLRANGE; ;
vlm4053ca52005-02-18 16:34:21 +00002940 break;}
2941case 209:
vlma6a12e32005-03-20 12:58:00 +00002942#line 1632 "asn1p_y.y"
2943{ yyval.a_ctype = ACT_EL_ULRANGE; ;
2944 break;}
2945case 210:
2946#line 1636 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002947{
vlm39e5ed72004-09-05 10:40:41 +00002948 yyval.a_ctype = ACT_CT_SIZE;
vlm6a02a8a2004-09-08 00:28:11 +00002949 ;
2950 break;}
vlma6a12e32005-03-20 12:58:00 +00002951case 211:
2952#line 1639 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002953{
vlm39e5ed72004-09-05 10:40:41 +00002954 yyval.a_ctype = ACT_CT_FROM;
vlm6a02a8a2004-09-08 00:28:11 +00002955 ;
2956 break;}
vlma6a12e32005-03-20 12:58:00 +00002957case 212:
2958#line 1645 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00002959{
2960 yyval.a_value = asn1p_value_fromint(0);
2961 checkmem(yyval.a_value);
2962 yyval.a_value->type = ATV_FALSE;
2963 ;
2964 break;}
vlma6a12e32005-03-20 12:58:00 +00002965case 213:
2966#line 1650 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00002967{
2968 yyval.a_value = asn1p_value_fromint(1);
2969 checkmem(yyval.a_value);
2970 yyval.a_value->type = ATV_TRUE;
2971 ;
2972 break;}
vlma6a12e32005-03-20 12:58:00 +00002973case 214:
2974#line 1655 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002975{
vlmfa67ddc2004-06-03 03:38:44 +00002976 yyval.a_value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002977 ;
2978 break;}
vlma6a12e32005-03-20 12:58:00 +00002979case 215:
2980#line 1658 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00002981{
2982 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2983 checkmem(yyval.a_value);
2984 ;
2985 break;}
vlma6a12e32005-03-20 12:58:00 +00002986case 216:
2987#line 1662 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002988{
vlmfa67ddc2004-06-03 03:38:44 +00002989 asn1p_ref_t *ref;
2990 int ret;
2991 ref = asn1p_ref_new(yylineno);
2992 checkmem(ref);
2993 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2994 checkmem(ret == 0);
2995 yyval.a_value = asn1p_value_fromref(ref, 0);
2996 checkmem(yyval.a_value);
2997 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002998 ;
2999 break;}
vlma6a12e32005-03-20 12:58:00 +00003000case 217:
3001#line 1676 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003002{
vlm4053ca52005-02-18 16:34:21 +00003003 asn1p_ref_t *ref;
3004 int ret;
3005 ref = asn1p_ref_new(yylineno);
3006 checkmem(ref);
3007 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3008 checkmem(ret == 0);
3009 yyval.a_value = asn1p_value_fromref(ref, 0);
vlmfa67ddc2004-06-03 03:38:44 +00003010 checkmem(yyval.a_value);
vlm4053ca52005-02-18 16:34:21 +00003011 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003012 ;
3013 break;}
vlma6a12e32005-03-20 12:58:00 +00003014case 218:
3015#line 1690 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003016{
vlmfa67ddc2004-06-03 03:38:44 +00003017 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003018 ;
3019 break;}
vlma6a12e32005-03-20 12:58:00 +00003020case 219:
3021#line 1696 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003022{
vlmfa67ddc2004-06-03 03:38:44 +00003023 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00003024 ;
3025 break;}
vlma6a12e32005-03-20 12:58:00 +00003026case 220:
3027#line 1699 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003028{
vlmfa67ddc2004-06-03 03:38:44 +00003029 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003030 ;
3031 break;}
vlma6a12e32005-03-20 12:58:00 +00003032case 221:
3033#line 1705 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003034{
vlmfa67ddc2004-06-03 03:38:44 +00003035 yyval.a_constr = asn1p_constraint_new(yylineno);
3036 checkmem(yyval.a_constr);
3037 yyval.a_constr->type = ACT_EL_EXT;
vlm6a02a8a2004-09-08 00:28:11 +00003038 ;
3039 break;}
vlma6a12e32005-03-20 12:58:00 +00003040case 222:
3041#line 1710 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003042{
vlmfa67ddc2004-06-03 03:38:44 +00003043 yyval.a_constr = asn1p_constraint_new(yylineno);
3044 checkmem(yyval.a_constr);
3045 yyval.a_constr->type = ACT_EL_VALUE;
3046 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3047 yyval.a_constr->presence = yyvsp[0].a_pres;
vlm6a02a8a2004-09-08 00:28:11 +00003048 ;
3049 break;}
vlma6a12e32005-03-20 12:58:00 +00003050case 223:
3051#line 1723 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003052{ yyval.a_pres = ACPRES_DEFAULT; ;
3053 break;}
vlma6a12e32005-03-20 12:58:00 +00003054case 224:
3055#line 1724 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003056{ yyval.a_pres = yyvsp[0].a_pres; ;
3057 break;}
vlma6a12e32005-03-20 12:58:00 +00003058case 225:
3059#line 1728 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003060{
vlmfa67ddc2004-06-03 03:38:44 +00003061 yyval.a_pres = ACPRES_PRESENT;
vlm6a02a8a2004-09-08 00:28:11 +00003062 ;
3063 break;}
vlma6a12e32005-03-20 12:58:00 +00003064case 226:
3065#line 1731 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003066{
vlmfa67ddc2004-06-03 03:38:44 +00003067 yyval.a_pres = ACPRES_ABSENT;
vlm6a02a8a2004-09-08 00:28:11 +00003068 ;
3069 break;}
vlma6a12e32005-03-20 12:58:00 +00003070case 227:
3071#line 1734 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003072{
vlmfa67ddc2004-06-03 03:38:44 +00003073 yyval.a_pres = ACPRES_OPTIONAL;
vlm6a02a8a2004-09-08 00:28:11 +00003074 ;
3075 break;}
vlm4053ca52005-02-18 16:34:21 +00003076case 228:
vlma6a12e32005-03-20 12:58:00 +00003077#line 1740 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003078{
3079 yyval.a_constr = yyvsp[0].a_constr;
3080 ;
3081 break;}
3082case 229:
vlma6a12e32005-03-20 12:58:00 +00003083#line 1743 "asn1p_y.y"
3084{
3085 yyval.a_constr = yyvsp[0].a_constr;
3086 ;
3087 break;}
3088case 230:
3089#line 1752 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003090{
vlmfa67ddc2004-06-03 03:38:44 +00003091 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3092 asn1p_constraint_t *ct;
3093 int ret;
3094 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3095 checkmem(ret == 0);
3096 ct = asn1p_constraint_new(yylineno);
3097 checkmem(yyval.a_constr);
3098 ct->type = ACT_EL_VALUE;
3099 ct->value = asn1p_value_fromref(ref, 0);
3100 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003101 ;
3102 break;}
vlma6a12e32005-03-20 12:58:00 +00003103case 231:
3104#line 1767 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003105{
vlmfa67ddc2004-06-03 03:38:44 +00003106 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003107 ;
3108 break;}
vlma6a12e32005-03-20 12:58:00 +00003109case 232:
3110#line 1773 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003111{
vlmfa67ddc2004-06-03 03:38:44 +00003112 yyval.a_constr = asn1p_constraint_new(yylineno);
3113 checkmem(yyval.a_constr);
3114 yyval.a_constr->type = ACT_EL_VALUE;
3115 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003116 ;
3117 break;}
vlma6a12e32005-03-20 12:58:00 +00003118case 233:
3119#line 1779 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003120{
vlmfa67ddc2004-06-03 03:38:44 +00003121 asn1p_constraint_t *ct;
3122 ct = asn1p_constraint_new(yylineno);
3123 checkmem(ct);
3124 ct->type = ACT_EL_VALUE;
3125 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3126 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00003127 ;
3128 break;}
vlma6a12e32005-03-20 12:58:00 +00003129case 234:
3130#line 1793 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003131{
vlmfa67ddc2004-06-03 03:38:44 +00003132 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3133 int ret;
3134 *p = '@';
3135 strcpy(p + 1, yyvsp[0].tv_str);
3136 yyval.a_ref = asn1p_ref_new(yylineno);
3137 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3138 checkmem(ret == 0);
3139 free(p);
3140 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003141 ;
3142 break;}
vlma6a12e32005-03-20 12:58:00 +00003143case 235:
3144#line 1804 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003145{
vlmfa67ddc2004-06-03 03:38:44 +00003146 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3147 int ret;
3148 p[0] = '@';
3149 p[1] = '.';
3150 strcpy(p + 2, yyvsp[0].tv_str);
3151 yyval.a_ref = asn1p_ref_new(yylineno);
3152 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3153 checkmem(ret == 0);
3154 free(p);
3155 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003156 ;
3157 break;}
vlma6a12e32005-03-20 12:58:00 +00003158case 236:
3159#line 1820 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003160{
vlmfa67ddc2004-06-03 03:38:44 +00003161 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003162 ;
3163 break;}
vlma6a12e32005-03-20 12:58:00 +00003164case 237:
3165#line 1823 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003166{
vlmfa67ddc2004-06-03 03:38:44 +00003167 int l1 = strlen(yyvsp[-2].tv_str);
3168 int l3 = strlen(yyvsp[0].tv_str);
3169 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3170 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3171 yyval.tv_str[l1] = '.';
3172 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3173 yyval.tv_str[l1 + 1 + l3] = '\0';
vlm6a02a8a2004-09-08 00:28:11 +00003174 ;
3175 break;}
vlma6a12e32005-03-20 12:58:00 +00003176case 238:
3177#line 1841 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003178{
vlmc94e28f2004-09-15 11:59:51 +00003179 yyval.a_marker.flags = EM_NOMARK;
3180 yyval.a_marker.default_value = 0;
vlm6a02a8a2004-09-08 00:28:11 +00003181 ;
3182 break;}
vlma6a12e32005-03-20 12:58:00 +00003183case 239:
3184#line 1845 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003185{ yyval.a_marker = yyvsp[0].a_marker; ;
vlma2374a02004-09-14 02:44:07 +00003186 break;}
vlma6a12e32005-03-20 12:58:00 +00003187case 240:
3188#line 1849 "asn1p_y.y"
vlma2374a02004-09-14 02:44:07 +00003189{
vlmc94e28f2004-09-15 11:59:51 +00003190 yyval.a_marker.flags = EM_OPTIONAL;
3191 yyval.a_marker.default_value = 0;
vlma2374a02004-09-14 02:44:07 +00003192 ;
3193 break;}
vlma6a12e32005-03-20 12:58:00 +00003194case 241:
3195#line 1853 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003196{
3197 yyval.a_marker.flags = EM_DEFAULT;
3198 yyval.a_marker.default_value = yyvsp[0].a_value;
3199 ;
3200 break;}
vlma6a12e32005-03-20 12:58:00 +00003201case 242:
3202#line 1876 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003203{
vlm39e5ed72004-09-05 10:40:41 +00003204 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003205 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003206 ;
3207 break;}
vlma6a12e32005-03-20 12:58:00 +00003208case 243:
3209#line 1880 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003210{
vlmfa67ddc2004-06-03 03:38:44 +00003211 yyval.a_expr = yyvsp[-1].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00003212 ;
3213 break;}
vlma6a12e32005-03-20 12:58:00 +00003214case 244:
3215#line 1886 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003216{
vlm39e5ed72004-09-05 10:40:41 +00003217 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003218 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003219 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3220 ;
3221 break;}
vlma6a12e32005-03-20 12:58:00 +00003222case 245:
3223#line 1891 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003224{
vlmfa67ddc2004-06-03 03:38:44 +00003225 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00003226 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3227 ;
3228 break;}
vlma6a12e32005-03-20 12:58:00 +00003229case 246:
3230#line 1898 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003231{
vlm39e5ed72004-09-05 10:40:41 +00003232 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003233 checkmem(yyval.a_expr);
3234 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3235 yyval.a_expr->meta_type = AMT_VALUE;
3236 yyval.a_expr->Identifier = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003237 ;
3238 break;}
vlm4053ca52005-02-18 16:34:21 +00003239case 247:
vlma6a12e32005-03-20 12:58:00 +00003240#line 1905 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003241{
3242 yyval.a_expr = asn1p_expr_new(yylineno);
3243 checkmem(yyval.a_expr);
3244 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3245 yyval.a_expr->meta_type = AMT_VALUE;
3246 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3247 yyval.a_expr->value = yyvsp[-1].a_value;
3248 ;
3249 break;}
3250case 248:
vlma6a12e32005-03-20 12:58:00 +00003251#line 1913 "asn1p_y.y"
3252{
3253 yyval.a_expr = asn1p_expr_new(yylineno);
3254 checkmem(yyval.a_expr);
3255 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3256 yyval.a_expr->meta_type = AMT_VALUE;
3257 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3258 yyval.a_expr->value = yyvsp[-1].a_value;
3259 ;
3260 break;}
3261case 249:
3262#line 1921 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003263{
vlm39e5ed72004-09-05 10:40:41 +00003264 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003265 checkmem(yyval.a_expr);
3266 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3267 yyval.a_expr->meta_type = AMT_VALUE;
3268 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00003269 ;
3270 break;}
vlma6a12e32005-03-20 12:58:00 +00003271case 250:
3272#line 1928 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003273{
vlm39e5ed72004-09-05 10:40:41 +00003274 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003275 checkmem(yyval.a_expr);
3276 yyval.a_expr->Identifier = strdup("...");
3277 checkmem(yyval.a_expr->Identifier);
3278 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3279 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00003280 ;
3281 break;}
vlm0aa86902004-10-12 23:26:53 +00003282case 251:
vlma6a12e32005-03-20 12:58:00 +00003283#line 1939 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003284{
3285 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3286 checkmem(yyval.a_value);
3287 ;
vlmc94e28f2004-09-15 11:59:51 +00003288 break;}
vlm0aa86902004-10-12 23:26:53 +00003289case 252:
vlma6a12e32005-03-20 12:58:00 +00003290#line 1943 "asn1p_y.y"
3291{
3292 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3293 checkmem(yyval.a_value);
3294 ;
vlm4053ca52005-02-18 16:34:21 +00003295 break;}
3296case 253:
vlma6a12e32005-03-20 12:58:00 +00003297#line 1974 "asn1p_y.y"
3298{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
vlm4053ca52005-02-18 16:34:21 +00003299 break;}
3300case 254:
vlma6a12e32005-03-20 12:58:00 +00003301#line 1975 "asn1p_y.y"
3302{ yyval.a_tag = yyvsp[0].a_tag; ;
3303 break;}
3304case 255:
3305#line 1979 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003306{
vlm2728a8d2005-01-23 09:51:44 +00003307 yyval.a_tag = yyvsp[-1].a_tag;
3308 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
vlm6a02a8a2004-09-08 00:28:11 +00003309 ;
3310 break;}
vlma6a12e32005-03-20 12:58:00 +00003311case 256:
3312#line 1986 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003313{
vlm2728a8d2005-01-23 09:51:44 +00003314 yyval.a_tag = yyvsp[-2].a_tag;
3315 yyval.a_tag.tag_value = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00003316 ;
3317 break;}
vlma6a12e32005-03-20 12:58:00 +00003318case 257:
3319#line 1992 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003320{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
vlm6a02a8a2004-09-08 00:28:11 +00003321 break;}
vlma6a12e32005-03-20 12:58:00 +00003322case 258:
3323#line 1993 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003324{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
vlm151c0b22004-09-22 16:03:36 +00003325 break;}
vlma6a12e32005-03-20 12:58:00 +00003326case 259:
3327#line 1994 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003328{ yyval.a_tag.tag_class = TC_APPLICATION; ;
vlm0aa86902004-10-12 23:26:53 +00003329 break;}
vlma6a12e32005-03-20 12:58:00 +00003330case 260:
3331#line 1995 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003332{ yyval.a_tag.tag_class = TC_PRIVATE; ;
3333 break;}
vlma6a12e32005-03-20 12:58:00 +00003334case 261:
3335#line 1999 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003336{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3337 break;}
vlma6a12e32005-03-20 12:58:00 +00003338case 262:
3339#line 2000 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003340{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3341 break;}
vlma6a12e32005-03-20 12:58:00 +00003342case 263:
3343#line 2001 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003344{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3345 break;}
vlm2728a8d2005-01-23 09:51:44 +00003346case 264:
vlma6a12e32005-03-20 12:58:00 +00003347#line 2005 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003348{
3349 checkmem(yyvsp[0].tv_str);
3350 yyval.tv_str = yyvsp[0].tv_str;
3351 ;
vlm0aa86902004-10-12 23:26:53 +00003352 break;}
vlm2728a8d2005-01-23 09:51:44 +00003353case 265:
vlma6a12e32005-03-20 12:58:00 +00003354#line 2009 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00003355{
vlm4053ca52005-02-18 16:34:21 +00003356 checkmem(yyvsp[0].tv_str);
vlm0aa86902004-10-12 23:26:53 +00003357 yyval.tv_str = yyvsp[0].tv_str;
3358 ;
3359 break;}
vlm2728a8d2005-01-23 09:51:44 +00003360case 266:
vlma6a12e32005-03-20 12:58:00 +00003361#line 2017 "asn1p_y.y"
3362{
3363 checkmem(yyvsp[0].tv_str);
3364 yyval.tv_str = yyvsp[0].tv_str;
3365 ;
vlm4053ca52005-02-18 16:34:21 +00003366 break;}
3367case 267:
vlma6a12e32005-03-20 12:58:00 +00003368#line 2024 "asn1p_y.y"
3369{ yyval.tv_str = 0; ;
3370 break;}
3371case 268:
3372#line 2025 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003373{
3374 yyval.tv_str = yyvsp[0].tv_str;
3375 ;
3376 break;}
vlma6a12e32005-03-20 12:58:00 +00003377case 269:
3378#line 2030 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003379{
vlm39e5ed72004-09-05 10:40:41 +00003380 checkmem(yyvsp[0].tv_str);
3381 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003382 ;
3383 break;}
vlm6a02a8a2004-09-08 00:28:11 +00003384}
3385 /* the action file gets copied in in place of this dollarsign */
3386#line 543 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00003387
3388 yyvsp -= yylen;
3389 yyssp -= yylen;
vlm6a02a8a2004-09-08 00:28:11 +00003390#ifdef YYLSP_NEEDED
3391 yylsp -= yylen;
3392#endif
vlmfa67ddc2004-06-03 03:38:44 +00003393
vlm6a02a8a2004-09-08 00:28:11 +00003394#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00003395 if (yydebug)
3396 {
vlm6a02a8a2004-09-08 00:28:11 +00003397 short *ssp1 = yyss - 1;
3398 fprintf (stderr, "state stack now");
3399 while (ssp1 != yyssp)
3400 fprintf (stderr, " %d", *++ssp1);
3401 fprintf (stderr, "\n");
vlmfa67ddc2004-06-03 03:38:44 +00003402 }
3403#endif
3404
3405 *++yyvsp = yyval;
3406
vlm6a02a8a2004-09-08 00:28:11 +00003407#ifdef YYLSP_NEEDED
3408 yylsp++;
3409 if (yylen == 0)
3410 {
3411 yylsp->first_line = yylloc.first_line;
3412 yylsp->first_column = yylloc.first_column;
3413 yylsp->last_line = (yylsp-1)->last_line;
3414 yylsp->last_column = (yylsp-1)->last_column;
3415 yylsp->text = 0;
3416 }
3417 else
3418 {
3419 yylsp->last_line = (yylsp+yylen-1)->last_line;
3420 yylsp->last_column = (yylsp+yylen-1)->last_column;
3421 }
3422#endif
vlmfa67ddc2004-06-03 03:38:44 +00003423
vlm6a02a8a2004-09-08 00:28:11 +00003424 /* Now "shift" the result of the reduction.
3425 Determine what state that goes to,
3426 based on the state we popped back to
3427 and the rule number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00003428
3429 yyn = yyr1[yyn];
3430
vlm6a02a8a2004-09-08 00:28:11 +00003431 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3432 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00003433 yystate = yytable[yystate];
3434 else
vlm6a02a8a2004-09-08 00:28:11 +00003435 yystate = yydefgoto[yyn - YYNTBASE];
vlmfa67ddc2004-06-03 03:38:44 +00003436
3437 goto yynewstate;
3438
vlm6a02a8a2004-09-08 00:28:11 +00003439yyerrlab: /* here on detecting error */
vlmfa67ddc2004-06-03 03:38:44 +00003440
vlm6a02a8a2004-09-08 00:28:11 +00003441 if (! yyerrstatus)
3442 /* If not already recovering from an error, report this error. */
vlmfa67ddc2004-06-03 03:38:44 +00003443 {
3444 ++yynerrs;
vlm6a02a8a2004-09-08 00:28:11 +00003445
3446#ifdef YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00003447 yyn = yypact[yystate];
3448
vlm6a02a8a2004-09-08 00:28:11 +00003449 if (yyn > YYFLAG && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00003450 {
vlm6a02a8a2004-09-08 00:28:11 +00003451 int size = 0;
3452 char *msg;
3453 int x, count;
vlmfa67ddc2004-06-03 03:38:44 +00003454
vlm6a02a8a2004-09-08 00:28:11 +00003455 count = 0;
3456 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3457 for (x = (yyn < 0 ? -yyn : 0);
3458 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3459 if (yycheck[x + yyn] == x)
3460 size += strlen(yytname[x]) + 15, count++;
3461 msg = (char *) malloc(size + 15);
3462 if (msg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00003463 {
vlm6a02a8a2004-09-08 00:28:11 +00003464 strcpy(msg, "parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003465
vlm6a02a8a2004-09-08 00:28:11 +00003466 if (count < 5)
vlmfa67ddc2004-06-03 03:38:44 +00003467 {
vlm6a02a8a2004-09-08 00:28:11 +00003468 count = 0;
3469 for (x = (yyn < 0 ? -yyn : 0);
3470 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3471 if (yycheck[x + yyn] == x)
vlmfa67ddc2004-06-03 03:38:44 +00003472 {
vlm6a02a8a2004-09-08 00:28:11 +00003473 strcat(msg, count == 0 ? ", expecting `" : " or `");
3474 strcat(msg, yytname[x]);
3475 strcat(msg, "'");
3476 count++;
vlmfa67ddc2004-06-03 03:38:44 +00003477 }
3478 }
vlm6a02a8a2004-09-08 00:28:11 +00003479 yyerror(msg);
3480 free(msg);
vlmfa67ddc2004-06-03 03:38:44 +00003481 }
3482 else
vlm6a02a8a2004-09-08 00:28:11 +00003483 yyerror ("parse error; also virtual memory exceeded");
vlmfa67ddc2004-06-03 03:38:44 +00003484 }
3485 else
3486#endif /* YYERROR_VERBOSE */
vlm6a02a8a2004-09-08 00:28:11 +00003487 yyerror("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003488 }
vlm6a02a8a2004-09-08 00:28:11 +00003489
vlmfa67ddc2004-06-03 03:38:44 +00003490 goto yyerrlab1;
vlm6a02a8a2004-09-08 00:28:11 +00003491yyerrlab1: /* here on error raised explicitly by an action */
vlmfa67ddc2004-06-03 03:38:44 +00003492
3493 if (yyerrstatus == 3)
3494 {
vlm6a02a8a2004-09-08 00:28:11 +00003495 /* if just tried and failed to reuse lookahead token after an error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00003496
vlm6a02a8a2004-09-08 00:28:11 +00003497 /* return failure if at end of input */
vlmfa67ddc2004-06-03 03:38:44 +00003498 if (yychar == YYEOF)
vlm6a02a8a2004-09-08 00:28:11 +00003499 YYABORT;
vlmfa67ddc2004-06-03 03:38:44 +00003500
vlm6a02a8a2004-09-08 00:28:11 +00003501#if YYDEBUG != 0
3502 if (yydebug)
3503 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3504#endif
3505
vlmfa67ddc2004-06-03 03:38:44 +00003506 yychar = YYEMPTY;
3507 }
3508
vlm6a02a8a2004-09-08 00:28:11 +00003509 /* Else will try to reuse lookahead token
3510 after shifting the error token. */
vlmfa67ddc2004-06-03 03:38:44 +00003511
vlm6a02a8a2004-09-08 00:28:11 +00003512 yyerrstatus = 3; /* Each real token shifted decrements this */
vlmfa67ddc2004-06-03 03:38:44 +00003513
vlm6a02a8a2004-09-08 00:28:11 +00003514 goto yyerrhandle;
vlm80103492004-09-07 10:39:09 +00003515
vlm6a02a8a2004-09-08 00:28:11 +00003516yyerrdefault: /* current state does not do anything special for the error token. */
vlm80103492004-09-07 10:39:09 +00003517
vlm6a02a8a2004-09-08 00:28:11 +00003518#if 0
3519 /* This is wrong; only states that explicitly want error tokens
3520 should shift them. */
3521 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3522 if (yyn) goto yydefault;
vlm39e5ed72004-09-05 10:40:41 +00003523#endif
vlm6a02a8a2004-09-08 00:28:11 +00003524
3525yyerrpop: /* pop the current state because it cannot handle the error token */
3526
3527 if (yyssp == yyss) YYABORT;
3528 yyvsp--;
3529 yystate = *--yyssp;
3530#ifdef YYLSP_NEEDED
3531 yylsp--;
3532#endif
3533
3534#if YYDEBUG != 0
3535 if (yydebug)
3536 {
3537 short *ssp1 = yyss - 1;
3538 fprintf (stderr, "Error: state stack now");
3539 while (ssp1 != yyssp)
3540 fprintf (stderr, " %d", *++ssp1);
3541 fprintf (stderr, "\n");
vlm39e5ed72004-09-05 10:40:41 +00003542 }
vlm6a02a8a2004-09-08 00:28:11 +00003543#endif
3544
3545yyerrhandle:
3546
3547 yyn = yypact[yystate];
3548 if (yyn == YYFLAG)
3549 goto yyerrdefault;
3550
3551 yyn += YYTERROR;
3552 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3553 goto yyerrdefault;
3554
3555 yyn = yytable[yyn];
3556 if (yyn < 0)
3557 {
3558 if (yyn == YYFLAG)
3559 goto yyerrpop;
3560 yyn = -yyn;
3561 goto yyreduce;
3562 }
3563 else if (yyn == 0)
3564 goto yyerrpop;
vlmfa67ddc2004-06-03 03:38:44 +00003565
3566 if (yyn == YYFINAL)
3567 YYACCEPT;
3568
vlm6a02a8a2004-09-08 00:28:11 +00003569#if YYDEBUG != 0
3570 if (yydebug)
3571 fprintf(stderr, "Shifting error token, ");
3572#endif
vlmfa67ddc2004-06-03 03:38:44 +00003573
3574 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00003575#ifdef YYLSP_NEEDED
3576 *++yylsp = yylloc;
3577#endif
vlmfa67ddc2004-06-03 03:38:44 +00003578
3579 yystate = yyn;
3580 goto yynewstate;
3581
vlm6a02a8a2004-09-08 00:28:11 +00003582 yyacceptlab:
3583 /* YYACCEPT comes here. */
3584 if (yyfree_stacks)
3585 {
3586 free (yyss);
3587 free (yyvs);
3588#ifdef YYLSP_NEEDED
3589 free (yyls);
vlm044f7442004-09-04 04:49:21 +00003590#endif
vlm6a02a8a2004-09-08 00:28:11 +00003591 }
3592 return 0;
vlm80103492004-09-07 10:39:09 +00003593
vlm6a02a8a2004-09-08 00:28:11 +00003594 yyabortlab:
3595 /* YYABORT comes here. */
3596 if (yyfree_stacks)
3597 {
3598 free (yyss);
3599 free (yyvs);
3600#ifdef YYLSP_NEEDED
3601 free (yyls);
vlm80103492004-09-07 10:39:09 +00003602#endif
vlm6a02a8a2004-09-08 00:28:11 +00003603 }
3604 return 1;
vlmfa67ddc2004-06-03 03:38:44 +00003605}
vlma6a12e32005-03-20 12:58:00 +00003606#line 2036 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00003607
3608
3609
3610/*
3611 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3612 */
3613static asn1p_value_t *
3614_convert_bitstring2binary(char *str, int base) {
3615 asn1p_value_t *val;
3616 int slen;
3617 int memlen;
3618 int baselen;
3619 int bits;
3620 uint8_t *binary_vector;
3621 uint8_t *bv_ptr;
3622 uint8_t cur_val;
3623
3624 assert(str);
3625 assert(str[0] == '\'');
3626
3627 switch(base) {
3628 case 'B':
3629 baselen = 1;
3630 break;
3631 case 'H':
3632 baselen = 4;
3633 break;
3634 default:
3635 assert(base == 'B' || base == 'H');
3636 errno = EINVAL;
3637 return NULL;
3638 }
3639
3640 slen = strlen(str);
3641 assert(str[slen - 1] == base);
3642 assert(str[slen - 2] == '\'');
3643
3644 memlen = slen / (8 / baselen); /* Conservative estimate */
3645
3646 bv_ptr = binary_vector = malloc(memlen + 1);
3647 if(bv_ptr == NULL)
3648 /* ENOMEM */
3649 return NULL;
3650
3651 cur_val = 0;
3652 bits = 0;
3653 while(*(++str) != '\'') {
3654 switch(baselen) {
3655 case 1:
3656 switch(*str) {
3657 case '1':
3658 cur_val |= 1 << (7 - (bits % 8));
3659 case '0':
3660 break;
3661 default:
3662 assert(!"_y UNREACH1");
3663 case ' ': case '\r': case '\n':
3664 continue;
3665 }
3666 break;
3667 case 4:
3668 switch(*str) {
3669 case '0': case '1': case '2': case '3': case '4':
3670 case '5': case '6': case '7': case '8': case '9':
3671 cur_val |= (*str - '0') << (4 - (bits % 8));
3672 break;
3673 case 'A': case 'B': case 'C':
3674 case 'D': case 'E': case 'F':
3675 cur_val |= ((*str - 'A') + 10)
3676 << (4 - (bits % 8));
3677 break;
3678 default:
3679 assert(!"_y UNREACH2");
3680 case ' ': case '\r': case '\n':
3681 continue;
3682 }
3683 break;
3684 }
3685
3686 bits += baselen;
3687 if((bits % 8) == 0) {
3688 *bv_ptr++ = cur_val;
3689 cur_val = 0;
3690 }
3691 }
3692
3693 *bv_ptr = cur_val;
3694 assert((bv_ptr - binary_vector) <= memlen);
3695
3696 val = asn1p_value_frombits(binary_vector, bits, 0);
3697 if(val == NULL) {
3698 free(binary_vector);
3699 }
3700
3701 return val;
3702}
3703
3704extern char *asn1p_text;
3705
3706int
3707yyerror(const char *msg) {
3708 fprintf(stderr,
3709 "ASN.1 grammar parse error "
3710 "near line %d (token \"%s\"): %s\n",
vlm39e5ed72004-09-05 10:40:41 +00003711 yylineno, asn1p_text, msg);
vlmfa67ddc2004-06-03 03:38:44 +00003712 return -1;
3713}
3714
3715