blob: 5b3c4ad745193f90f23a747c435b4c7dd9fb2434 [file] [log] [blame]
Lev Walkinf15320b2004-06-03 03:38:44 +00001
Lev Walkin1004aa92004-09-08 00:28:11 +00002/* A Bison parser, made from asn1p_y.y
3 by GNU Bison version 1.28 */
Lev Walkinf15320b2004-06-03 03:38:44 +00004
Lev Walkin1004aa92004-09-08 00:28:11 +00005#define YYBISON 1 /* Identify Bison output. */
Lev Walkinf15320b2004-06-03 03:38:44 +00006
7#define yyparse asn1p_parse
Lev Walkin1004aa92004-09-08 00:28:11 +00008#define yylex asn1p_lex
Lev Walkinf15320b2004-06-03 03:38:44 +00009#define yyerror asn1p_error
Lev Walkin1004aa92004-09-08 00:28:11 +000010#define yylval asn1p_lval
11#define yychar asn1p_char
Lev Walkinf15320b2004-06-03 03:38:44 +000012#define yydebug asn1p_debug
13#define yynerrs asn1p_nerrs
Lev Walkin1004aa92004-09-08 00:28:11 +000014#define TOK_PPEQ 257
15#define TOK_opaque 258
16#define TOK_bstring 259
17#define TOK_cstring 260
18#define TOK_hstring 261
19#define TOK_identifier 262
20#define TOK_number 263
Lev Walkind9574ae2005-03-24 16:22:35 +000021#define TOK_tuple 264
22#define TOK_quadruple 265
23#define TOK_number_negative 266
24#define TOK_typereference 267
25#define TOK_capitalreference 268
26#define TOK_typefieldreference 269
27#define TOK_valuefieldreference 270
28#define TOK_ABSENT 271
29#define TOK_ABSTRACT_SYNTAX 272
30#define TOK_ALL 273
31#define TOK_ANY 274
32#define TOK_APPLICATION 275
33#define TOK_AUTOMATIC 276
34#define TOK_BEGIN 277
35#define TOK_BIT 278
36#define TOK_BMPString 279
37#define TOK_BOOLEAN 280
38#define TOK_BY 281
39#define TOK_CHARACTER 282
40#define TOK_CHOICE 283
41#define TOK_CLASS 284
42#define TOK_COMPONENT 285
43#define TOK_COMPONENTS 286
44#define TOK_CONSTRAINED 287
45#define TOK_CONTAINING 288
46#define TOK_DEFAULT 289
47#define TOK_DEFINITIONS 290
48#define TOK_DEFINED 291
49#define TOK_EMBEDDED 292
50#define TOK_ENCODED 293
51#define TOK_ENCODING_CONTROL 294
52#define TOK_END 295
53#define TOK_ENUMERATED 296
54#define TOK_EXPLICIT 297
55#define TOK_EXPORTS 298
56#define TOK_EXTENSIBILITY 299
57#define TOK_EXTERNAL 300
58#define TOK_FALSE 301
59#define TOK_FROM 302
60#define TOK_GeneralizedTime 303
61#define TOK_GeneralString 304
62#define TOK_GraphicString 305
63#define TOK_IA5String 306
64#define TOK_IDENTIFIER 307
65#define TOK_IMPLICIT 308
66#define TOK_IMPLIED 309
67#define TOK_IMPORTS 310
68#define TOK_INCLUDES 311
69#define TOK_INSTANCE 312
70#define TOK_INSTRUCTIONS 313
71#define TOK_INTEGER 314
72#define TOK_ISO646String 315
73#define TOK_MAX 316
74#define TOK_MIN 317
75#define TOK_MINUS_INFINITY 318
76#define TOK_NULL 319
77#define TOK_NumericString 320
78#define TOK_OBJECT 321
79#define TOK_ObjectDescriptor 322
80#define TOK_OCTET 323
81#define TOK_OF 324
82#define TOK_OPTIONAL 325
83#define TOK_PATTERN 326
84#define TOK_PDV 327
85#define TOK_PLUS_INFINITY 328
86#define TOK_PRESENT 329
87#define TOK_PrintableString 330
88#define TOK_PRIVATE 331
89#define TOK_REAL 332
90#define TOK_RELATIVE_OID 333
91#define TOK_SEQUENCE 334
92#define TOK_SET 335
93#define TOK_SIZE 336
94#define TOK_STRING 337
95#define TOK_SYNTAX 338
96#define TOK_T61String 339
97#define TOK_TAGS 340
98#define TOK_TeletexString 341
99#define TOK_TRUE 342
100#define TOK_TYPE_IDENTIFIER 343
101#define TOK_UNIQUE 344
102#define TOK_UNIVERSAL 345
103#define TOK_UniversalString 346
104#define TOK_UTCTime 347
105#define TOK_UTF8String 348
106#define TOK_VideotexString 349
107#define TOK_VisibleString 350
108#define TOK_WITH 351
109#define TOK_EXCEPT 352
110#define TOK_INTERSECTION 353
111#define TOK_UNION 354
112#define TOK_TwoDots 355
113#define TOK_ThreeDots 356
Lev Walkinf15320b2004-06-03 03:38:44 +0000114
115#line 1 "asn1p_y.y"
116
117
118#include <stdlib.h>
119#include <stdio.h>
120#include <string.h>
121#include <errno.h>
122#include <assert.h>
123
124#include "asn1parser.h"
125
126#define YYPARSE_PARAM param
127#define YYERROR_VERBOSE
128
129int yylex(void);
130int yyerror(const char *msg);
131void asn1p_lexer_hack_push_opaque_state(void);
132void asn1p_lexer_hack_enable_with_syntax(void);
Lev Walkinf59d0752004-08-18 04:59:12 +0000133void asn1p_lexer_hack_push_encoding_control(void);
Lev Walkinf15320b2004-06-03 03:38:44 +0000134#define yylineno asn1p_lineno
135extern int asn1p_lineno;
136
137
138static asn1p_value_t *
139 _convert_bitstring2binary(char *str, int base);
140
Lev Walkin1004aa92004-09-08 00:28:11 +0000141#define checkmem(ptr) do { \
142 if(!(ptr)) \
143 return yyerror("Memory failure"); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000144 } while(0)
145
146#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
147 if(arg1->type != constr_type) { \
148 int __ret; \
149 root = asn1p_constraint_new(yylineno); \
150 checkmem(root); \
151 root->type = constr_type; \
152 __ret = asn1p_constraint_insert(root, \
153 arg1); \
154 checkmem(__ret == 0); \
155 } else { \
156 root = arg1; \
157 } \
158 if(arg2) { \
159 int __ret \
160 = asn1p_constraint_insert(root, arg2); \
161 checkmem(__ret == 0); \
162 } \
163 } while(0)
164
165
Lev Walkinf59d0752004-08-18 04:59:12 +0000166#line 58 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +0000167typedef union {
168 asn1p_t *a_grammar;
169 asn1p_module_flags_e a_module_flags;
170 asn1p_module_t *a_module;
171 asn1p_expr_type_e a_type; /* ASN.1 Type */
172 asn1p_expr_t *a_expr; /* Constructed collection */
173 asn1p_constraint_t *a_constr; /* Constraint */
174 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
175 asn1p_xports_t *a_xports; /* IMports/EXports */
176 asn1p_oid_t *a_oid; /* Object Identifier */
177 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
178 struct asn1p_type_tag_s a_tag; /* A tag */
179 asn1p_ref_t *a_ref; /* Reference to custom type */
180 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
181 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
182 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
183 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
184 struct asn1p_param_s a_parg; /* A parameter argument */
185 asn1p_paramlist_t *a_plist; /* A pargs list */
Lev Walkin9c974182004-09-15 11:59:51 +0000186 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
Lev Walkinf15320b2004-06-03 03:38:44 +0000187 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
Lev Walkind21c5052004-09-29 13:18:09 +0000188 asn1c_integer_t a_int;
Lev Walkinf15320b2004-06-03 03:38:44 +0000189 char *tv_str;
190 struct {
191 char *buf;
192 int len;
193 } tv_opaque;
194 struct {
195 char *name;
196 struct asn1p_type_tag_s tag;
197 } tv_nametag;
Lev Walkin1004aa92004-09-08 00:28:11 +0000198} YYSTYPE;
199#include <stdio.h>
200
201#ifndef __cplusplus
202#ifndef __STDC__
203#define const
204#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000205#endif
206
207
208
Lev Walkin8ea99482005-03-31 21:48:13 +0000209#define YYFINAL 425
Lev Walkin1004aa92004-09-08 00:28:11 +0000210#define YYFLAG -32768
Lev Walkind9574ae2005-03-24 16:22:35 +0000211#define YYNTBASE 118
Lev Walkinf15320b2004-06-03 03:38:44 +0000212
Lev Walkin8ea99482005-03-31 21:48:13 +0000213#define YYTRANSLATE(x) ((unsigned)(x) <= 356 ? yytranslate[x] : 220)
Lev Walkinf15320b2004-06-03 03:38:44 +0000214
Lev Walkin1004aa92004-09-08 00:28:11 +0000215static const char yytranslate[] = { 0,
216 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
217 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
218 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkind9574ae2005-03-24 16:22:35 +0000219 2, 2, 112, 2, 2, 2, 2, 2, 2, 107,
220 108, 2, 2, 110, 2, 113, 2, 2, 2, 2,
221 2, 2, 2, 2, 2, 2, 2, 111, 109, 114,
222 2, 2, 2, 115, 2, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000223 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
224 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkind9574ae2005-03-24 16:22:35 +0000225 116, 2, 117, 99, 2, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000226 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
227 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkind9574ae2005-03-24 16:22:35 +0000228 2, 2, 105, 101, 106, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000229 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
230 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
231 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
232 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
233 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
234 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
235 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
236 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
237 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
238 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
239 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
240 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
241 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
242 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
243 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
244 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
245 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
246 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
247 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
248 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
249 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
250 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
Lev Walkind9574ae2005-03-24 16:22:35 +0000251 97, 98, 100, 102, 103, 104
Lev Walkin1004aa92004-09-08 00:28:11 +0000252};
Lev Walkinf15320b2004-06-03 03:38:44 +0000253
Lev Walkin1004aa92004-09-08 00:28:11 +0000254#if YYDEBUG != 0
255static const short yyprhs[] = { 0,
256 0, 2, 4, 7, 16, 17, 19, 23, 26, 28,
257 31, 33, 38, 40, 41, 43, 45, 48, 51, 54,
258 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
259 79, 81, 82, 86, 88, 92, 95, 97, 100, 105,
Lev Walkin144db9b2004-10-12 23:26:53 +0000260 107, 111, 113, 117, 119, 123, 127, 130, 132, 136,
Lev Walkin8ea99482005-03-31 21:48:13 +0000261 138, 142, 144, 145, 152, 154, 156, 161, 165, 169,
262 176, 178, 182, 184, 188, 192, 196, 198, 202, 204,
263 206, 207, 209, 211, 215, 219, 223, 225, 227, 231,
264 234, 236, 242, 243, 245, 247, 251, 254, 259, 264,
265 265, 267, 268, 275, 277, 280, 282, 284, 286, 290,
266 294, 298, 300, 305, 310, 315, 322, 329, 331, 336,
267 341, 343, 347, 349, 353, 357, 361, 363, 367, 369,
268 373, 375, 377, 379, 381, 386, 390, 391, 395, 397,
269 399, 401, 403, 405, 407, 409, 411, 413, 417, 419,
270 421, 423, 425, 428, 430, 432, 434, 436, 439, 442,
271 444, 446, 449, 452, 454, 456, 458, 460, 462, 465,
272 467, 470, 472, 474, 476, 478, 480, 482, 484, 486,
273 488, 490, 492, 494, 496, 498, 500, 502, 504, 506,
274 508, 509, 511, 513, 518, 522, 527, 529, 533, 539,
275 541, 545, 549, 553, 557, 562, 566, 568, 570, 574,
276 578, 582, 586, 588, 590, 591, 597, 599, 602, 605,
277 609, 611, 613, 615, 617, 619, 621, 623, 625, 629,
278 635, 637, 641, 643, 647, 648, 650, 652, 654, 656,
279 658, 660, 664, 669, 671, 675, 678, 682, 684, 688,
280 689, 691, 693, 696, 699, 703, 705, 709, 711, 716,
281 721, 723, 725, 727, 729, 730, 732, 735, 740, 741,
282 743, 745, 747, 748, 750, 752, 754, 756, 758, 759,
283 761
Lev Walkin1004aa92004-09-08 00:28:11 +0000284};
Lev Walkinf15320b2004-06-03 03:38:44 +0000285
Lev Walkind9574ae2005-03-24 16:22:35 +0000286static const short yyrhs[] = { 119,
Lev Walkin8ea99482005-03-31 21:48:13 +0000287 0, 120, 0, 119, 120, 0, 216, 121, 36, 125,
Lev Walkind9574ae2005-03-24 16:22:35 +0000288 3, 23, 128, 41, 0, 0, 122, 0, 105, 123,
289 106, 0, 105, 106, 0, 124, 0, 123, 124, 0,
Lev Walkin8ea99482005-03-31 21:48:13 +0000290 219, 0, 219, 107, 9, 108, 0, 9, 0, 0,
Lev Walkind9574ae2005-03-24 16:22:35 +0000291 126, 0, 127, 0, 126, 127, 0, 43, 86, 0,
292 54, 86, 0, 22, 86, 0, 45, 55, 0, 14,
293 59, 0, 0, 129, 0, 130, 0, 129, 130, 0,
Lev Walkin8ea99482005-03-31 21:48:13 +0000294 132, 0, 137, 0, 143, 0, 170, 0, 140, 0,
295 0, 40, 14, 131, 0, 179, 0, 56, 133, 109,
Lev Walkind9574ae2005-03-24 16:22:35 +0000296 0, 56, 48, 0, 134, 0, 133, 134, 0, 135,
Lev Walkin8ea99482005-03-31 21:48:13 +0000297 48, 216, 121, 0, 136, 0, 135, 110, 136, 0,
298 216, 0, 216, 105, 106, 0, 219, 0, 44, 138,
Lev Walkind9574ae2005-03-24 16:22:35 +0000299 109, 0, 44, 19, 109, 0, 44, 109, 0, 139,
Lev Walkin8ea99482005-03-31 21:48:13 +0000300 0, 138, 110, 139, 0, 216, 0, 216, 105, 106,
301 0, 219, 0, 0, 216, 142, 3, 105, 141, 175,
302 0, 165, 0, 176, 0, 216, 3, 211, 89, 0,
303 216, 3, 163, 0, 216, 3, 153, 0, 216, 105,
304 144, 106, 3, 163, 0, 145, 0, 144, 110, 145,
305 0, 216, 0, 216, 111, 219, 0, 216, 111, 216,
306 0, 176, 111, 219, 0, 147, 0, 146, 110, 147,
307 0, 163, 0, 219, 0, 0, 149, 0, 150, 0,
308 149, 110, 150, 0, 219, 163, 205, 0, 32, 70,
309 163, 0, 162, 0, 152, 0, 151, 110, 152, 0,
310 219, 163, 0, 162, 0, 30, 105, 155, 106, 157,
311 0, 0, 90, 0, 156, 0, 155, 110, 156, 0,
312 168, 205, 0, 168, 163, 154, 205, 0, 168, 168,
313 154, 205, 0, 0, 158, 0, 0, 97, 84, 105,
314 159, 160, 106, 0, 161, 0, 160, 161, 0, 4,
315 0, 168, 0, 104, 0, 104, 112, 173, 0, 104,
316 112, 210, 0, 211, 164, 183, 0, 178, 0, 29,
317 105, 151, 106, 0, 80, 105, 148, 106, 0, 81,
318 105, 148, 106, 0, 80, 183, 70, 218, 211, 164,
319 0, 81, 183, 70, 218, 211, 164, 0, 20, 0,
320 20, 37, 27, 219, 0, 216, 105, 146, 106, 0,
321 165, 0, 58, 70, 165, 0, 13, 0, 13, 113,
322 216, 0, 217, 113, 216, 0, 13, 113, 219, 0,
323 217, 0, 217, 113, 166, 0, 167, 0, 166, 113,
324 167, 0, 169, 0, 169, 0, 15, 0, 16, 0,
325 219, 142, 3, 171, 0, 219, 111, 171, 0, 0,
326 105, 172, 175, 0, 65, 0, 47, 0, 88, 0,
327 5, 0, 7, 0, 174, 0, 210, 0, 173, 0,
328 219, 0, 216, 113, 219, 0, 6, 0, 10, 0,
329 11, 0, 4, 0, 175, 4, 0, 26, 0, 65,
330 0, 78, 0, 177, 0, 69, 83, 0, 67, 53,
331 0, 79, 0, 46, 0, 38, 73, 0, 28, 83,
332 0, 93, 0, 49, 0, 179, 0, 60, 0, 42,
333 0, 24, 83, 0, 176, 0, 177, 207, 0, 25,
334 0, 50, 0, 51, 0, 52, 0, 61, 0, 66,
335 0, 76, 0, 85, 0, 87, 0, 92, 0, 94,
336 0, 95, 0, 96, 0, 68, 0, 101, 0, 102,
337 0, 99, 0, 100, 0, 98, 0, 0, 184, 0,
338 185, 0, 82, 107, 186, 108, 0, 107, 186, 108,
339 0, 185, 107, 186, 108, 0, 187, 0, 187, 110,
340 104, 0, 187, 110, 104, 110, 187, 0, 188, 0,
341 19, 98, 188, 0, 187, 180, 188, 0, 187, 181,
342 188, 0, 188, 182, 188, 0, 191, 107, 186, 108,
343 0, 107, 186, 108, 0, 192, 0, 193, 0, 192,
344 190, 192, 0, 63, 190, 192, 0, 192, 190, 62,
345 0, 63, 190, 62, 0, 199, 0, 194, 0, 0,
346 33, 27, 105, 189, 175, 0, 103, 0, 103, 114,
347 0, 114, 103, 0, 114, 103, 114, 0, 82, 0,
348 48, 0, 47, 0, 88, 0, 210, 0, 174, 0,
349 219, 0, 216, 0, 97, 31, 185, 0, 97, 32,
350 105, 195, 106, 0, 196, 0, 195, 110, 196, 0,
351 104, 0, 219, 183, 197, 0, 0, 198, 0, 75,
352 0, 17, 0, 71, 0, 200, 0, 201, 0, 105,
353 216, 106, 0, 200, 105, 202, 106, 0, 203, 0,
354 202, 110, 203, 0, 115, 204, 0, 115, 113, 204,
355 0, 219, 0, 204, 113, 219, 0, 0, 206, 0,
356 71, 0, 35, 171, 0, 105, 106, 0, 105, 208,
357 106, 0, 209, 0, 208, 110, 209, 0, 219, 0,
358 219, 107, 210, 108, 0, 219, 107, 173, 108, 0,
359 210, 0, 104, 0, 9, 0, 12, 0, 0, 212,
360 0, 213, 215, 0, 116, 214, 9, 117, 0, 0,
361 91, 0, 21, 0, 77, 0, 0, 54, 0, 43,
362 0, 13, 0, 14, 0, 14, 0, 0, 219, 0,
363 8, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000364};
Lev Walkinf15320b2004-06-03 03:38:44 +0000365
366#endif
367
Lev Walkin1004aa92004-09-08 00:28:11 +0000368#if YYDEBUG != 0
369static const short yyrline[] = { 0,
Lev Walkin8ea99482005-03-31 21:48:13 +0000370 302, 308, 314, 330, 355, 357, 360, 364, 369, 376,
371 384, 389, 393, 402, 404, 412, 416, 424, 428, 431,
372 434, 438, 458, 460, 468, 472, 504, 508, 517, 524,
373 537, 544, 546, 558, 571, 578, 583, 589, 595, 604,
374 610, 616, 623, 629, 637, 641, 644, 651, 657, 663,
375 670, 676, 685, 687, 696, 704, 718, 730, 736, 752,
376 761, 771, 781, 786, 793, 800, 810, 816, 822, 826,
377 849, 851, 853, 859, 865, 872, 879, 884, 890, 896,
378 902, 907, 917, 919, 922, 930, 936, 945, 951, 968,
379 970, 975, 979, 984, 989, 995, 999, 1010, 1019, 1028,
380 1039, 1061, 1065, 1071, 1077, 1083, 1093, 1103, 1109, 1123,
381 1147, 1154, 1168, 1177, 1187, 1197, 1207, 1215, 1236, 1245,
382 1254, 1255, 1257, 1264, 1276, 1286, 1294, 1294, 1299, 1304,
383 1309, 1314, 1318, 1322, 1325, 1328, 1333, 1345, 1362, 1367,
384 1372, 1405, 1415, 1429, 1431, 1432, 1433, 1434, 1435, 1436,
385 1437, 1438, 1439, 1440, 1441, 1442, 1448, 1450, 1451, 1454,
386 1461, 1473, 1475, 1479, 1483, 1484, 1485, 1486, 1487, 1491,
387 1492, 1493, 1494, 1498, 1499, 1506, 1506, 1507, 1507, 1508,
388 1510, 1512, 1517, 1521, 1530, 1534, 1539, 1543, 1549, 1559,
389 1563, 1566, 1569, 1572, 1577, 1586, 1594, 1600, 1606, 1613,
390 1621, 1629, 1638, 1641, 1644, 1645, 1655, 1657, 1658, 1659,
391 1662, 1666, 1671, 1677, 1682, 1685, 1688, 1701, 1715, 1719,
392 1724, 1728, 1733, 1740, 1753, 1755, 1758, 1762, 1765, 1770,
393 1774, 1782, 1797, 1803, 1810, 1823, 1835, 1850, 1854, 1871,
394 1876, 1879, 1884, 1906, 1911, 1916, 1922, 1928, 1936, 1944,
395 1952, 1959, 1969, 1974, 2004, 2006, 2009, 2016, 2022, 2024,
396 2025, 2026, 2029, 2031, 2032, 2035, 2040, 2047, 2054, 2056,
Lev Walkin8f294e02005-06-06 08:28:58 +0000397 2061
Lev Walkin1004aa92004-09-08 00:28:11 +0000398};
399#endif
400
401
402#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
403
404static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
405"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
Lev Walkind9574ae2005-03-24 16:22:35 +0000406"TOK_tuple","TOK_quadruple","TOK_number_negative","TOK_typereference","TOK_capitalreference",
407"TOK_typefieldreference","TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX",
408"TOK_ALL","TOK_ANY","TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT",
409"TOK_BMPString","TOK_BOOLEAN","TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS",
410"TOK_COMPONENT","TOK_COMPONENTS","TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT",
411"TOK_DEFINITIONS","TOK_DEFINED","TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL",
412"TOK_END","TOK_ENUMERATED","TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY",
413"TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString",
414"TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED",
415"TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INSTRUCTIONS","TOK_INTEGER",
416"TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL","TOK_NumericString",
417"TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET","TOK_OF","TOK_OPTIONAL","TOK_PATTERN",
418"TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString","TOK_PRIVATE",
419"TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE","TOK_STRING",
420"TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE","TOK_TYPE_IDENTIFIER",
421"TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime","TOK_UTF8String",
422"TOK_VideotexString","TOK_VisibleString","TOK_WITH","TOK_EXCEPT","'^'","TOK_INTERSECTION",
423"'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots","'{'","'}'","'('","')'","';'",
424"','","':'","'!'","'.'","'<'","'@'","'['","']'","ParsedGrammar","ModuleList",
425"ModuleSpecification","optObjectIdentifier","ObjectIdentifier","ObjectIdentifierBody",
426"ObjectIdentifierElement","optModuleSpecificationFlags","ModuleSpecificationFlags",
427"ModuleSpecificationFlag","optModuleSpecificationBody","ModuleSpecificationBody",
428"ModuleSpecificationElement","@1","ImportsDefinition","ImportsBundleSet","ImportsBundle",
429"ImportsList","ImportsElement","ExportsDefinition","ExportsBody","ExportsElement",
Lev Walkin8ea99482005-03-31 21:48:13 +0000430"ValueSetDefinition","@2","DefinedTypeRef","DataTypeReference","ParameterArgumentList",
431"ParameterArgumentName","ActualParameterList","ActualParameter","optComponentTypeLists",
432"ComponentTypeLists","ComponentType","AlternativeTypeLists","AlternativeType",
433"ClassDeclaration","optUnique","ClassFieldList","ClassField","optWithSyntax",
434"WithSyntax","@3","WithSyntaxFormat","WithSyntaxFormatToken","ExtensionAndException",
435"Type","TypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList",
Lev Walkin144db9b2004-10-12 23:26:53 +0000436"ComplexTypeReferenceElement","ClassFieldIdentifier","ClassFieldName","ValueDefinition",
Lev Walkin8ea99482005-03-31 21:48:13 +0000437"Value","@4","DefinedValue","RestrictedCharacterStringValue","Opaque","BasicTypeId",
Lev Walkin1e448d32005-03-24 14:26:38 +0000438"BasicTypeId_UniverationCompatible","BasicType","BasicString","Union","Intersection",
439"Except","optConstraints","Constraints","SetOfConstraints","ElementSetSpecs",
Lev Walkin8ea99482005-03-31 21:48:13 +0000440"ElementSetSpec","ConstraintSubtypeElement","@5","ConstraintRangeSpec","ConstraintSpec",
Lev Walkine596bf02005-03-28 15:01:27 +0000441"SingleValue","ContainedSubtype","InnerTypeConstraint","WithComponentsList",
442"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
443"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
444"ComponentIdList","optMarker","Marker","UniverationDefinition","UniverationList",
445"UniverationElement","SignedNumber","optTag","Tag","TagTypeValue","TagClass",
446"TagPlicit","TypeRefName","ObjectClassReference","optIdentifier","Identifier", NULL
Lev Walkin1004aa92004-09-08 00:28:11 +0000447};
448#endif
449
450static const short yyr1[] = { 0,
Lev Walkind9574ae2005-03-24 16:22:35 +0000451 118, 119, 119, 120, 121, 121, 122, 122, 123, 123,
452 124, 124, 124, 125, 125, 126, 126, 127, 127, 127,
453 127, 127, 128, 128, 129, 129, 130, 130, 130, 130,
454 130, 131, 130, 130, 132, 132, 133, 133, 134, 135,
455 135, 136, 136, 136, 137, 137, 137, 138, 138, 139,
Lev Walkin8ea99482005-03-31 21:48:13 +0000456 139, 139, 141, 140, 142, 142, 143, 143, 143, 143,
457 144, 144, 145, 145, 145, 145, 146, 146, 147, 147,
458 148, 148, 149, 149, 150, 150, 150, 151, 151, 152,
459 152, 153, 154, 154, 155, 155, 156, 156, 156, 157,
460 157, 159, 158, 160, 160, 161, 161, 162, 162, 162,
461 163, 164, 164, 164, 164, 164, 164, 164, 164, 164,
462 164, 164, 165, 165, 165, 165, 165, 165, 166, 166,
463 167, 168, 169, 169, 170, 171, 172, 171, 171, 171,
464 171, 171, 171, 171, 171, 171, 173, 173, 174, 174,
465 174, 175, 175, 176, 176, 176, 176, 176, 176, 176,
466 176, 176, 176, 176, 176, 176, 177, 177, 177, 178,
467 178, 179, 179, 179, 179, 179, 179, 179, 179, 179,
468 179, 179, 179, 179, 179, 180, 180, 181, 181, 182,
469 183, 183, 184, 184, 185, 185, 186, 186, 186, 187,
470 187, 187, 187, 187, 188, 188, 188, 188, 188, 188,
471 188, 188, 188, 188, 189, 188, 190, 190, 190, 190,
472 191, 191, 192, 192, 192, 192, 192, 193, 194, 194,
473 195, 195, 196, 196, 197, 197, 198, 198, 198, 199,
474 199, 200, 201, 202, 202, 203, 203, 204, 204, 205,
475 205, 206, 206, 207, 207, 208, 208, 209, 209, 209,
476 209, 209, 210, 210, 211, 211, 212, 213, 214, 214,
477 214, 214, 215, 215, 215, 216, 216, 217, 218, 218,
478 219
Lev Walkin1004aa92004-09-08 00:28:11 +0000479};
480
481static const short yyr2[] = { 0,
482 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
483 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
484 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
485 1, 0, 3, 1, 3, 2, 1, 2, 4, 1,
Lev Walkin144db9b2004-10-12 23:26:53 +0000486 3, 1, 3, 1, 3, 3, 2, 1, 3, 1,
Lev Walkin8ea99482005-03-31 21:48:13 +0000487 3, 1, 0, 6, 1, 1, 4, 3, 3, 6,
488 1, 3, 1, 3, 3, 3, 1, 3, 1, 1,
489 0, 1, 1, 3, 3, 3, 1, 1, 3, 2,
490 1, 5, 0, 1, 1, 3, 2, 4, 4, 0,
491 1, 0, 6, 1, 2, 1, 1, 1, 3, 3,
492 3, 1, 4, 4, 4, 6, 6, 1, 4, 4,
493 1, 3, 1, 3, 3, 3, 1, 3, 1, 3,
494 1, 1, 1, 1, 4, 3, 0, 3, 1, 1,
495 1, 1, 1, 1, 1, 1, 1, 3, 1, 1,
496 1, 1, 2, 1, 1, 1, 1, 2, 2, 1,
497 1, 2, 2, 1, 1, 1, 1, 1, 2, 1,
498 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin1004aa92004-09-08 00:28:11 +0000499 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin8ea99482005-03-31 21:48:13 +0000500 0, 1, 1, 4, 3, 4, 1, 3, 5, 1,
501 3, 3, 3, 3, 4, 3, 1, 1, 3, 3,
502 3, 3, 1, 1, 0, 5, 1, 2, 2, 3,
503 1, 1, 1, 1, 1, 1, 1, 1, 3, 5,
504 1, 3, 1, 3, 0, 1, 1, 1, 1, 1,
505 1, 3, 4, 1, 3, 2, 3, 1, 3, 0,
506 1, 1, 2, 2, 3, 1, 3, 1, 4, 4,
507 1, 1, 1, 1, 0, 1, 2, 4, 0, 1,
508 1, 1, 0, 1, 1, 1, 1, 1, 0, 1,
509 1
Lev Walkin1004aa92004-09-08 00:28:11 +0000510};
511
512static const short yydefact[] = { 0,
Lev Walkin8ea99482005-03-31 21:48:13 +0000513 266, 267, 1, 2, 5, 3, 0, 0, 6, 271,
Lev Walkin1004aa92004-09-08 00:28:11 +0000514 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
515 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
Lev Walkin8ea99482005-03-31 21:48:13 +0000516 18, 21, 19, 0, 17, 12, 23, 162, 0, 0,
517 163, 164, 165, 0, 166, 167, 175, 168, 169, 170,
518 171, 172, 173, 174, 0, 24, 25, 27, 28, 31,
Lev Walkin144db9b2004-10-12 23:26:53 +0000519 29, 30, 34, 0, 0, 32, 0, 47, 0, 48,
520 50, 52, 36, 0, 37, 0, 40, 42, 44, 4,
Lev Walkin8ea99482005-03-31 21:48:13 +0000521 26, 255, 113, 268, 0, 144, 0, 0, 158, 151,
522 155, 157, 145, 0, 0, 146, 150, 154, 0, 0,
523 55, 56, 147, 156, 117, 0, 33, 46, 45, 0,
524 0, 35, 38, 0, 0, 0, 0, 259, 59, 58,
525 0, 256, 263, 0, 159, 153, 152, 149, 148, 0,
526 61, 0, 63, 0, 0, 0, 49, 51, 5, 41,
527 43, 0, 261, 262, 260, 0, 113, 268, 108, 0,
528 0, 181, 181, 57, 181, 111, 160, 147, 102, 0,
529 265, 264, 257, 114, 116, 0, 0, 0, 0, 53,
530 123, 124, 118, 119, 121, 115, 132, 139, 133, 253,
531 140, 141, 254, 130, 129, 131, 127, 125, 136, 134,
532 135, 0, 137, 39, 0, 85, 255, 122, 0, 0,
533 0, 0, 0, 71, 0, 0, 182, 183, 71, 0,
534 101, 0, 161, 255, 255, 62, 66, 65, 64, 0,
535 0, 0, 0, 0, 90, 0, 0, 242, 83, 83,
536 87, 241, 0, 258, 0, 98, 0, 78, 81, 255,
537 112, 0, 0, 0, 72, 73, 77, 255, 0, 0,
538 213, 212, 0, 211, 214, 0, 0, 0, 216, 0,
539 187, 190, 0, 197, 198, 204, 203, 230, 231, 215,
540 218, 217, 269, 0, 0, 269, 252, 244, 0, 246,
541 251, 248, 0, 67, 69, 70, 60, 142, 54, 120,
542 128, 138, 126, 0, 82, 91, 86, 243, 84, 240,
543 240, 109, 0, 103, 0, 80, 0, 255, 104, 0,
544 240, 0, 0, 207, 0, 0, 0, 0, 0, 0,
545 185, 178, 179, 176, 177, 0, 0, 0, 180, 0,
546 0, 0, 0, 255, 270, 0, 105, 255, 245, 0,
547 0, 110, 255, 143, 0, 88, 89, 99, 100, 137,
548 79, 184, 76, 74, 75, 191, 205, 208, 209, 202,
549 200, 219, 0, 232, 196, 188, 192, 193, 194, 0,
550 201, 199, 0, 0, 234, 0, 186, 0, 247, 0,
551 0, 68, 92, 0, 210, 223, 0, 221, 181, 0,
552 195, 0, 236, 238, 233, 0, 106, 107, 250, 249,
553 0, 206, 220, 0, 225, 189, 237, 0, 235, 96,
554 0, 94, 97, 222, 228, 229, 227, 224, 226, 239,
555 93, 95, 0, 0, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000556};
557
Lev Walkin8ea99482005-03-31 21:48:13 +0000558static const short yydefgoto[] = { 423,
Lev Walkin1004aa92004-09-08 00:28:11 +0000559 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
Lev Walkinc7d939d2005-03-20 11:12:40 +0000560 56, 57, 107, 58, 74, 75, 76, 77, 59, 69,
Lev Walkin8ea99482005-03-31 21:48:13 +0000561 70, 60, 220, 100, 61, 130, 131, 283, 284, 244,
562 245, 246, 237, 238, 119, 300, 195, 196, 295, 296,
563 401, 411, 412, 247, 285, 155, 156, 173, 174, 197,
564 198, 62, 188, 222, 189, 259, 289, 157, 103, 159,
565 104, 327, 328, 330, 206, 207, 208, 260, 261, 262,
566 384, 316, 263, 264, 265, 266, 387, 388, 418, 419,
567 267, 268, 269, 374, 375, 393, 231, 232, 213, 279,
568 280, 270, 233, 122, 123, 146, 163, 271, 105, 334,
569 272
Lev Walkin1004aa92004-09-08 00:28:11 +0000570};
571
Lev Walkin8ea99482005-03-31 21:48:13 +0000572static const short yypact[] = { 228,
573-32768,-32768, 228,-32768, -83,-32768, 30, 43,-32768,-32768,
574-32768,-32768, 36,-32768, -14, 181,-32768,-32768, 132, 85,
575 68, 73, 109, 95, 193, 181,-32768, 93,-32768,-32768,
576-32768,-32768,-32768, 189,-32768,-32768, 429,-32768, 209, 21,
577-32768,-32768,-32768, 144,-32768,-32768,-32768,-32768,-32768,-32768,
578-32768,-32768,-32768,-32768, 184, 429,-32768,-32768,-32768,-32768,
579-32768,-32768,-32768, 354, 658,-32768, 118,-32768, 190,-32768,
580 134,-32768,-32768, 18,-32768, -27,-32768, 156,-32768,-32768,
581-32768, -12, 150,-32768, 182,-32768, 204, 195,-32768,-32768,
582-32768,-32768,-32768, 236, 212,-32768,-32768,-32768, 733, 299,
583-32768,-32768,-32768,-32768, 205, 316,-32768,-32768,-32768, 185,
584 216,-32768,-32768, 228, 185, 217, 219, 25,-32768,-32768,
585 506,-32768, 117, 185,-32768,-32768,-32768,-32768,-32768, -55,
586-32768, 210, 214, 223, 266, 63,-32768,-32768, -83,-32768,
587-32768, 268,-32768,-32768,-32768, 321, 34, 226, 295, 232,
588 269, -18, -17,-32768, -2,-32768,-32768, 233,-32768, 235,
589-32768,-32768,-32768,-32768,-32768, 338, 733, 334, 185,-32768,
590-32768,-32768, 234,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
Lev Walkin1e448d32005-03-24 14:26:38 +0000591-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
Lev Walkin8ea99482005-03-31 21:48:13 +0000592-32768, 237, 242,-32768, 81,-32768, 27,-32768, 231, 322,
593 11, 240, 247, 49, 238, 285,-32768, 251, 49, 289,
594-32768, 44,-32768, 7, 244,-32768,-32768,-32768,-32768, 358,
595 268, 358, 334, 63, 267, 268, 63,-32768, 273, 273,
596-32768,-32768, 583,-32768, 334, 253, 98,-32768,-32768, 244,
597-32768, 238, 302, 270, 263,-32768,-32768, 244, 276, 348,
598-32768,-32768, 64,-32768,-32768, 275, 228, 238,-32768, 279,
599 130, 283, 277, 64,-32768,-32768,-32768, 272,-32768,-32768,
600-32768,-32768, 334, 238, 284, 334,-32768,-32768, 100,-32768,
601-32768, 286, 105,-32768,-32768,-32768,-32768,-32768, 379,-32768,
602 379,-32768,-32768, 305,-32768,-32768,-32768,-32768,-32768, -10,
603 -10,-32768, 296,-32768, 11,-32768, 287, 244,-32768, 49,
604 -10, 264, 293, 280, 288, 174, 292, 297, 301, 300,
605-32768,-32768,-32768,-32768,-32768, 306, 264, 264,-32768, 264,
606 238, 282, 294, 244,-32768, 303,-32768, 244,-32768, 51,
607 296,-32768, 7,-32768, 307,-32768,-32768,-32768,-32768,-32768,
608-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 304,-32768,
609-32768, 251, 28,-32768,-32768, 314,-32768,-32768,-32768, 308,
610-32768,-32768, 6, 112,-32768, 583,-32768, 583,-32768, 309,
611 317,-32768,-32768, 358,-32768,-32768, 154,-32768, -2, 238,
612-32768, 334, 313,-32768,-32768, 294,-32768,-32768,-32768,-32768,
613 159, 379,-32768, 28, 24, 215, 313, 334,-32768,-32768,
614 12,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
615-32768,-32768, 413, 427,-32768
Lev Walkin1004aa92004-09-08 00:28:11 +0000616};
617
618static const short yypgoto[] = {-32768,
Lev Walkin8ea99482005-03-31 21:48:13 +0000619-32768, 425, 290,-32768,-32768, 418,-32768,-32768, 408,-32768,
620-32768, 380,-32768,-32768,-32768, 361,-32768, 323,-32768,-32768,
621 330,-32768,-32768, 386,-32768,-32768, 278,-32768, 101, 243,
622-32768, 143,-32768, 151,-32768, 225,-32768, 239,-32768,-32768,
623-32768,-32768, 46, -184, -75, -284, -53,-32768, 241, -192,
624 -115,-32768, -89,-32768, -255, -58, -214, -41, -120,-32768,
625 45,-32768,-32768,-32768, -151,-32768, 141, -86, 70, -216,
626-32768, 197,-32768, -225,-32768,-32768,-32768, 59,-32768,-32768,
627-32768,-32768,-32768,-32768, 71, 72, -111,-32768,-32768,-32768,
628 126, -127, -79,-32768,-32768,-32768,-32768, 10,-32768, 192,
629 -7
Lev Walkin1004aa92004-09-08 00:28:11 +0000630};
631
632
Lev Walkin8ea99482005-03-31 21:48:13 +0000633#define YYLAST 829
Lev Walkin1004aa92004-09-08 00:28:11 +0000634
635
636static const short yytable[] = { 15,
Lev Walkin8ea99482005-03-31 21:48:13 +0000637 158, 210, 121, 211, 230, 15, 120, 291, 191, 5,
638 101, 101, 5, 10, 10, 410, 239, 117, 10, 175,
639 114, 7, 102, 102, 227, 10, 171, 172, 10, 65,
640 1, 2, 72, 1, 2, 10, 79, 10, 11, 67,
641 415, 171, 172, 10, 11, 143, 64, 348, 65, 71,
642 166, 10, 180, 78, 167, 183, 10, 132, 10, 180,
643 228, 227, 183, 203, 203, 64, 79, 177, 178, 179,
644 10, 180, 181, 182, 183, 1, 2, 190, 16, 203,
645 243, 63, 115, 78, 281, 380, 204, 209, 205, 205,
646 361, 397, 19, 398, 416, 356, 191, 228, 417, 191,
647 63, 144, 72, 118, 205, 175, 372, 79, 133, 184,
648 367, 368, 158, 369, 236, 145, 165, 421, 392, 71,
649 239, 229, 118, 139, 78, 132, 112, 185, 193, 68,
650 160, 386, -240, 164, 293, 12, -240, 298, -266, 287,
651 28, 17, 118, 29, 176, 192, 124, 277, 241, 278,
652 186, 10, 236, 30, 277, 307, 1, 2, 31, 161,
653 217, 219, 410, 32, 306, 190, 314, 187, 190, 402,
654 162, 320, 311, 171, 172, 349, 133, 315, 218, 178,
655 33, 10, 180, 181, 182, 183, 225, 336, 346, 347,
656 226, 73, 10, 240, 20, 34, 248, 1, 2, 355,
657 36, 248, 21, 304, 282, 339, 286, 305, 413, 340,
658 342, 37, 281, 381, 343, 292, 193, 395, 413, 193,
659 251, 396, 66, 22, 80, 23, 108, 302, 322, 323,
660 324, 325, 353, 192, 24, 360, 192, 405, 111, 326,
661 1, 2, 160, 178, 370, 10, 180, 181, 182, 183,
662 1, 2, 83, 84, 376, 158, 249, 158, 378, 403,
663 116, 255, 124, 404, 125, 335, 319, 127, 335, 178,
664 250, 10, 180, 181, 182, 183, 1, 2, 1, 2,
665 171, 172, 171, 172, 251, 252, 126, 178, 128, 10,
666 180, 181, 182, 183, 129, 350, 250, 240, 109, 110,
667 253, 134, 248, 10, 180, 317, 318, 183, 1, 2,
668 251, 252, 192, 322, 323, 324, 325, 135, 136, 254,
669 168, 138, 141, 142, 169, 255, 253, 170, 251, 199,
670 -267, 200, 282, 350, 256, 286, 201, 212, 202, 214,
671 215, 10, 257, 371, 258, 254, 221, 234, 235, 223,
672 192, 255, 224, 242, 273, 389, 82, 274, 276, 118,
673 256, 288, 299, 294, 303, 394, 83, 84, 257, 255,
674 258, 308, 310, 312, 313, 309, 333, 85, 38, 86,
675 329, 87, 344, 331, 394, 160, 321, 160, 345, 337,
676 359, 88, 341, 358, 352, 89, 389, 357, 205, 90,
677 420, 363, 91, 41, 42, 43, 364, 365, 373, 366,
678 377, 383, 424, 92, 45, 391, 399, 385, 93, 46,
679 94, 47, 95, 390, 400, 408, 425, 6, 194, 48,
680 18, 96, 97, 35, 113, 81, 10, 140, 49, 137,
681 50, 1, 2, 382, 216, 51, 98, 52, 53, 54,
682 106, 275, 354, 38, 301, 351, 422, 362, 99, 406,
683 332, 290, 414, 407, 297, 379, 409, 338, 39, 0,
684 0, 0, 40, 0, 0, 0, 0, 0, 41, 42,
685 43, 0, 0, 0, 44, 0, 0, 0, 0, 45,
686 0, 0, 0, 0, 46, 0, 47, 0, 0, 0,
687 0, 0, 0, 0, 48, 0, 0, 0, 0, 0,
688 0, 0, 0, 49, 0, 50, 0, 0, 147, 148,
689 51, 0, 52, 53, 54, 149, 0, 0, 0, 85,
690 38, 86, 0, 87, 150, 0, 0, 0, 0, 0,
Lev Walkind9574ae2005-03-24 16:22:35 +0000691 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
692 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
Lev Walkin8ea99482005-03-31 21:48:13 +0000693 0, 0, 0, 151, 0, 92, 45, 0, 0, 0,
Lev Walkind9574ae2005-03-24 16:22:35 +0000694 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
Lev Walkin8ea99482005-03-31 21:48:13 +0000695 0, 48, 0, 96, 97, 152, 153, 0, 0, 0,
696 49, 0, 50, 0, 154, 147, 148, 51, 98, 52,
697 53, 54, 149, 0, 0, 0, 85, 38, 86, 0,
698 87, 150, 0, 0, 0, 0, 0, 0, 0, 0,
699 88, 0, 0, 0, 89, 0, 0, 0, 90, 0,
700 0, 91, 41, 42, 43, 0, 0, 0, 0, 0,
701 151, 0, 92, 45, 0, 0, 0, 93, 46, 94,
702 47, 95, 0, 0, 0, 0, 0, 0, 48, 0,
703 96, 97, 152, 153, 0, 0, 0, 49, 0, 50,
704 83, 84, 0, 0, 51, 98, 52, 53, 54, 0,
705 0, 85, 38, 86, 0, 87, 0, 0, 0, 0,
706 0, 0, 0, 0, 0, 88, 0, 0, 0, 89,
707 0, 0, 0, 90, 0, 0, 91, 41, 42, 43,
708 0, 0, 0, 0, 0, 0, 0, 92, 45, 0,
709 0, 0, 93, 46, 94, 47, 95, 0, 0, 0,
710 0, 0, 0, 48, 0, 96, 97, 0, 0, 0,
711 0, 0, 49, 0, 50, 1, 2, 0, 0, 51,
712 98, 52, 53, 54, 0, 0, 85, 38, 86, 0,
713 87, 0, 0, 0, 0, 0, 0, 0, 0, 0,
714 88, 0, 0, 0, 89, 0, 0, 0, 90, 0,
715 0, 91, 41, 42, 43, 0, 0, 0, 0, 0,
716 0, 0, 92, 45, 0, 0, 0, 93, 46, 94,
717 47, 95, 0, 0, 0, 0, 0, 0, 48, 0,
718 96, 97, 0, 0, 0, 0, 0, 49, 0, 50,
719 0, 0, 0, 0, 51, 98, 52, 53, 54
Lev Walkin1004aa92004-09-08 00:28:11 +0000720};
721
722static const short yycheck[] = { 7,
Lev Walkin8ea99482005-03-31 21:48:13 +0000723 121, 153, 82, 155, 197, 13, 82, 222, 136, 0,
724 64, 65, 3, 8, 8, 4, 201, 30, 8, 135,
725 48, 105, 64, 65, 35, 8, 15, 16, 8, 37,
726 13, 14, 40, 13, 14, 8, 44, 8, 9, 19,
727 17, 15, 16, 8, 9, 21, 37, 303, 56, 40,
728 106, 8, 9, 44, 110, 12, 8, 99, 8, 9,
729 71, 35, 12, 82, 82, 56, 74, 5, 6, 7,
730 8, 9, 10, 11, 12, 13, 14, 136, 36, 82,
731 32, 37, 110, 74, 212, 341, 105, 105, 107, 107,
732 316, 376, 107, 378, 71, 312, 224, 71, 75, 227,
733 56, 77, 110, 116, 107, 221, 332, 115, 99, 47,
734 327, 328, 233, 330, 104, 91, 124, 106, 113, 110,
735 305, 197, 116, 114, 115, 167, 109, 65, 136, 109,
736 121, 104, 106, 124, 224, 106, 110, 227, 105, 215,
737 9, 106, 116, 59, 135, 136, 113, 104, 202, 106,
738 88, 8, 104, 86, 104, 242, 13, 14, 86, 43,
739 168, 169, 4, 55, 240, 224, 103, 105, 227, 384,
740 54, 258, 248, 15, 16, 303, 167, 114, 169, 6,
741 86, 8, 9, 10, 11, 12, 106, 274, 300, 301,
742 110, 48, 8, 201, 14, 3, 204, 13, 14, 311,
743 108, 209, 22, 106, 212, 106, 214, 110, 401, 110,
744 106, 23, 340, 341, 110, 223, 224, 106, 411, 227,
745 47, 110, 14, 43, 41, 45, 109, 235, 99, 100,
746 101, 102, 308, 224, 54, 62, 227, 389, 105, 110,
747 13, 14, 233, 6, 331, 8, 9, 10, 11, 12,
748 13, 14, 13, 14, 334, 376, 19, 378, 338, 106,
749 105, 88, 113, 110, 83, 273, 257, 73, 276, 6,
750 33, 8, 9, 10, 11, 12, 13, 14, 13, 14,
751 15, 16, 15, 16, 47, 48, 83, 6, 53, 8,
752 9, 10, 11, 12, 83, 303, 33, 305, 109, 110,
753 63, 3, 310, 8, 9, 31, 32, 12, 13, 14,
754 47, 48, 303, 99, 100, 101, 102, 113, 3, 82,
755 111, 106, 106, 105, 111, 88, 63, 105, 47, 9,
756 105, 37, 340, 341, 97, 343, 105, 105, 70, 105,
757 3, 8, 105, 62, 107, 82, 113, 117, 27, 113,
758 341, 88, 111, 107, 70, 363, 3, 107, 70, 116,
759 97, 4, 90, 97, 112, 373, 13, 14, 105, 88,
760 107, 70, 110, 98, 27, 106, 105, 24, 25, 26,
761 98, 28, 4, 107, 392, 376, 108, 378, 84, 106,
762 103, 38, 107, 114, 108, 42, 404, 105, 107, 46,
763 408, 105, 49, 50, 51, 52, 106, 108, 115, 104,
764 108, 105, 0, 60, 61, 108, 108, 114, 65, 66,
765 67, 68, 69, 110, 108, 113, 0, 3, 139, 76,
766 13, 78, 79, 26, 74, 56, 8, 115, 85, 110,
767 87, 13, 14, 343, 167, 92, 93, 94, 95, 96,
768 65, 209, 310, 25, 230, 305, 411, 317, 105, 390,
769 264, 221, 404, 392, 226, 340, 396, 276, 40, -1,
770 -1, -1, 44, -1, -1, -1, -1, -1, 50, 51,
771 52, -1, -1, -1, 56, -1, -1, -1, -1, 61,
772 -1, -1, -1, -1, 66, -1, 68, -1, -1, -1,
773 -1, -1, -1, -1, 76, -1, -1, -1, -1, -1,
774 -1, -1, -1, 85, -1, 87, -1, -1, 13, 14,
775 92, -1, 94, 95, 96, 20, -1, -1, -1, 24,
776 25, 26, -1, 28, 29, -1, -1, -1, -1, -1,
Lev Walkind9574ae2005-03-24 16:22:35 +0000777 -1, -1, -1, 38, -1, -1, -1, 42, -1, -1,
778 -1, 46, -1, -1, 49, 50, 51, 52, -1, -1,
Lev Walkin8ea99482005-03-31 21:48:13 +0000779 -1, -1, -1, 58, -1, 60, 61, -1, -1, -1,
Lev Walkind9574ae2005-03-24 16:22:35 +0000780 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
Lev Walkin8ea99482005-03-31 21:48:13 +0000781 -1, 76, -1, 78, 79, 80, 81, -1, -1, -1,
782 85, -1, 87, -1, 89, 13, 14, 92, 93, 94,
783 95, 96, 20, -1, -1, -1, 24, 25, 26, -1,
784 28, 29, -1, -1, -1, -1, -1, -1, -1, -1,
785 38, -1, -1, -1, 42, -1, -1, -1, 46, -1,
786 -1, 49, 50, 51, 52, -1, -1, -1, -1, -1,
787 58, -1, 60, 61, -1, -1, -1, 65, 66, 67,
788 68, 69, -1, -1, -1, -1, -1, -1, 76, -1,
789 78, 79, 80, 81, -1, -1, -1, 85, -1, 87,
790 13, 14, -1, -1, 92, 93, 94, 95, 96, -1,
791 -1, 24, 25, 26, -1, 28, -1, -1, -1, -1,
792 -1, -1, -1, -1, -1, 38, -1, -1, -1, 42,
793 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
794 -1, -1, -1, -1, -1, -1, -1, 60, 61, -1,
795 -1, -1, 65, 66, 67, 68, 69, -1, -1, -1,
796 -1, -1, -1, 76, -1, 78, 79, -1, -1, -1,
797 -1, -1, 85, -1, 87, 13, 14, -1, -1, 92,
798 93, 94, 95, 96, -1, -1, 24, 25, 26, -1,
799 28, -1, -1, -1, -1, -1, -1, -1, -1, -1,
800 38, -1, -1, -1, 42, -1, -1, -1, 46, -1,
801 -1, 49, 50, 51, 52, -1, -1, -1, -1, -1,
802 -1, -1, 60, 61, -1, -1, -1, 65, 66, 67,
803 68, 69, -1, -1, -1, -1, -1, -1, 76, -1,
804 78, 79, -1, -1, -1, -1, -1, 85, -1, 87,
805 -1, -1, -1, -1, 92, 93, 94, 95, 96
Lev Walkin1004aa92004-09-08 00:28:11 +0000806};
807/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
808#line 3 "/usr/share/bison.simple"
809/* This file comes from bison-1.28. */
810
811/* Skeleton output parser for bison,
812 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
813
814 This program is free software; you can redistribute it and/or modify
815 it under the terms of the GNU General Public License as published by
816 the Free Software Foundation; either version 2, or (at your option)
817 any later version.
818
819 This program is distributed in the hope that it will be useful,
820 but WITHOUT ANY WARRANTY; without even the implied warranty of
821 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
822 GNU General Public License for more details.
823
824 You should have received a copy of the GNU General Public License
825 along with this program; if not, write to the Free Software
826 Foundation, Inc., 59 Temple Place - Suite 330,
827 Boston, MA 02111-1307, USA. */
828
829/* As a special exception, when this file is copied by Bison into a
830 Bison output file, you may use that output file without restriction.
831 This special exception was added by the Free Software Foundation
832 in version 1.24 of Bison. */
833
834/* This is the parser code that is written into each bison parser
835 when the %semantic_parser declaration is not specified in the grammar.
836 It was written by Richard Stallman by simplifying the hairy parser
837 used when %semantic_parser is specified. */
838
839#ifndef YYSTACK_USE_ALLOCA
840#ifdef alloca
841#define YYSTACK_USE_ALLOCA
842#else /* alloca not defined */
843#ifdef __GNUC__
844#define YYSTACK_USE_ALLOCA
845#define alloca __builtin_alloca
846#else /* not GNU C. */
847#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
848#define YYSTACK_USE_ALLOCA
849#include <alloca.h>
850#else /* not sparc */
851/* We think this test detects Watcom and Microsoft C. */
852/* This used to test MSDOS, but that is a bad idea
853 since that symbol is in the user namespace. */
854#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
855#if 0 /* No need for malloc.h, which pollutes the namespace;
856 instead, just don't use alloca. */
857#include <malloc.h>
858#endif
859#else /* not MSDOS, or __TURBOC__ */
860#if defined(_AIX)
861/* I don't know what this was needed for, but it pollutes the namespace.
862 So I turned it off. rms, 2 May 1997. */
863/* #include <malloc.h> */
864 #pragma alloca
865#define YYSTACK_USE_ALLOCA
866#else /* not MSDOS, or __TURBOC__, or _AIX */
867#if 0
868#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
869 and on HPUX 10. Eventually we can turn this on. */
870#define YYSTACK_USE_ALLOCA
871#define alloca __builtin_alloca
872#endif /* __hpux */
873#endif
874#endif /* not _AIX */
875#endif /* not MSDOS, or __TURBOC__ */
876#endif /* not sparc */
877#endif /* not GNU C */
878#endif /* alloca not defined */
879#endif /* YYSTACK_USE_ALLOCA not defined */
880
881#ifdef YYSTACK_USE_ALLOCA
882#define YYSTACK_ALLOC alloca
Lev Walkinf15320b2004-06-03 03:38:44 +0000883#else
Lev Walkin1004aa92004-09-08 00:28:11 +0000884#define YYSTACK_ALLOC malloc
Lev Walkinf15320b2004-06-03 03:38:44 +0000885#endif
886
Lev Walkin1004aa92004-09-08 00:28:11 +0000887/* Note: there must be only one dollar sign in this file.
888 It is replaced by the list of actions, each action
889 as one case of the switch. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000890
891#define yyerrok (yyerrstatus = 0)
892#define yyclearin (yychar = YYEMPTY)
893#define YYEMPTY -2
894#define YYEOF 0
895#define YYACCEPT goto yyacceptlab
Lev Walkin1004aa92004-09-08 00:28:11 +0000896#define YYABORT goto yyabortlab
Lev Walkinf15320b2004-06-03 03:38:44 +0000897#define YYERROR goto yyerrlab1
Lev Walkin1004aa92004-09-08 00:28:11 +0000898/* Like YYERROR except do call yyerror.
899 This remains here temporarily to ease the
900 transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +0000901 Once GCC version 2 has supplanted version 1, this can go. */
902#define YYFAIL goto yyerrlab
903#define YYRECOVERING() (!!yyerrstatus)
Lev Walkin1004aa92004-09-08 00:28:11 +0000904#define YYBACKUP(token, value) \
Lev Walkinf15320b2004-06-03 03:38:44 +0000905do \
906 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin1004aa92004-09-08 00:28:11 +0000907 { yychar = (token), yylval = (value); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000908 yychar1 = YYTRANSLATE (yychar); \
909 YYPOPSTACK; \
910 goto yybackup; \
911 } \
912 else \
Lev Walkin1004aa92004-09-08 00:28:11 +0000913 { yyerror ("syntax error: cannot back up"); YYERROR; } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000914while (0)
915
916#define YYTERROR 1
917#define YYERRCODE 256
918
Lev Walkin1004aa92004-09-08 00:28:11 +0000919#ifndef YYPURE
920#define YYLEX yylex()
Lev Walkinf15320b2004-06-03 03:38:44 +0000921#endif
922
Lev Walkin1004aa92004-09-08 00:28:11 +0000923#ifdef YYPURE
924#ifdef YYLSP_NEEDED
925#ifdef YYLEX_PARAM
926#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
927#else
928#define YYLEX yylex(&yylval, &yylloc)
929#endif
930#else /* not YYLSP_NEEDED */
931#ifdef YYLEX_PARAM
932#define YYLEX yylex(&yylval, YYLEX_PARAM)
933#else
934#define YYLEX yylex(&yylval)
935#endif
936#endif /* not YYLSP_NEEDED */
937#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000938
Lev Walkin1004aa92004-09-08 00:28:11 +0000939/* If nonreentrant, generate the variables here */
Lev Walkinf15320b2004-06-03 03:38:44 +0000940
Lev Walkin1004aa92004-09-08 00:28:11 +0000941#ifndef YYPURE
Lev Walkinf15320b2004-06-03 03:38:44 +0000942
Lev Walkin1004aa92004-09-08 00:28:11 +0000943int yychar; /* the lookahead symbol */
944YYSTYPE yylval; /* the semantic value of the */
945 /* lookahead symbol */
Lev Walkinf15320b2004-06-03 03:38:44 +0000946
Lev Walkin1004aa92004-09-08 00:28:11 +0000947#ifdef YYLSP_NEEDED
948YYLTYPE yylloc; /* location data for the lookahead */
949 /* symbol */
950#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000951
Lev Walkin1004aa92004-09-08 00:28:11 +0000952int yynerrs; /* number of parse errors so far */
953#endif /* not YYPURE */
954
955#if YYDEBUG != 0
956int yydebug; /* nonzero means print parse trace */
957/* Since this is uninitialized, it does not stop multiple parsers
958 from coexisting. */
959#endif
960
961/* YYINITDEPTH indicates the initial size of the parser's stacks */
962
Lev Walkinf15320b2004-06-03 03:38:44 +0000963#ifndef YYINITDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000964#define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +0000965#endif
966
Lev Walkin1004aa92004-09-08 00:28:11 +0000967/* YYMAXDEPTH is the maximum size the stacks can grow to
968 (effective only if the built-in stack extension method is used). */
Lev Walkinf15320b2004-06-03 03:38:44 +0000969
970#if YYMAXDEPTH == 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000971#undef YYMAXDEPTH
Lev Walkinf15320b2004-06-03 03:38:44 +0000972#endif
973
974#ifndef YYMAXDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000975#define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +0000976#endif
977
Lev Walkin1004aa92004-09-08 00:28:11 +0000978/* Define __yy_memcpy. Note that the size argument
979 should be passed with type unsigned int, because that is what the non-GCC
980 definitions require. With GCC, __builtin_memcpy takes an arg
981 of type size_t, but it can handle unsigned int. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000982
Lev Walkin1004aa92004-09-08 00:28:11 +0000983#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
984#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
985#else /* not GNU C or C++ */
986#ifndef __cplusplus
Lev Walkinf15320b2004-06-03 03:38:44 +0000987
Lev Walkin1004aa92004-09-08 00:28:11 +0000988/* This is the most reliable way to avoid incompatibilities
989 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +0000990static void
Lev Walkin1004aa92004-09-08 00:28:11 +0000991__yy_memcpy (to, from, count)
992 char *to;
993 char *from;
994 unsigned int count;
Lev Walkin459ab022004-09-07 10:39:09 +0000995{
Lev Walkin1004aa92004-09-08 00:28:11 +0000996 register char *f = from;
997 register char *t = to;
998 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +0000999
Lev Walkin1004aa92004-09-08 00:28:11 +00001000 while (i-- > 0)
1001 *t++ = *f++;
Lev Walkin459ab022004-09-07 10:39:09 +00001002}
Lev Walkin459ab022004-09-07 10:39:09 +00001003
Lev Walkin1004aa92004-09-08 00:28:11 +00001004#else /* __cplusplus */
Lev Walkin459ab022004-09-07 10:39:09 +00001005
Lev Walkin1004aa92004-09-08 00:28:11 +00001006/* This is the most reliable way to avoid incompatibilities
1007 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +00001008static void
Lev Walkin1004aa92004-09-08 00:28:11 +00001009__yy_memcpy (char *to, char *from, unsigned int count)
Lev Walkin459ab022004-09-07 10:39:09 +00001010{
Lev Walkin1004aa92004-09-08 00:28:11 +00001011 register char *t = to;
1012 register char *f = from;
1013 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001014
Lev Walkin1004aa92004-09-08 00:28:11 +00001015 while (i-- > 0)
1016 *t++ = *f++;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001017}
Lev Walkin609ccbb2004-09-04 04:49:21 +00001018
Lev Walkin1004aa92004-09-08 00:28:11 +00001019#endif
1020#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001021
Lev Walkin1004aa92004-09-08 00:28:11 +00001022#line 217 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00001023
1024/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1025 into yyparse. The argument should have type void *.
1026 It should actually point to an object.
1027 Grammar actions can access the variable by casting it
1028 to the proper pointer type. */
1029
1030#ifdef YYPARSE_PARAM
Lev Walkin1004aa92004-09-08 00:28:11 +00001031#ifdef __cplusplus
1032#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1033#define YYPARSE_PARAM_DECL
1034#else /* not __cplusplus */
1035#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1036#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1037#endif /* not __cplusplus */
1038#else /* not YYPARSE_PARAM */
1039#define YYPARSE_PARAM_ARG
1040#define YYPARSE_PARAM_DECL
1041#endif /* not YYPARSE_PARAM */
Lev Walkinf15320b2004-06-03 03:38:44 +00001042
1043/* Prevent warning if -Wstrict-prototypes. */
1044#ifdef __GNUC__
Lev Walkin1004aa92004-09-08 00:28:11 +00001045#ifdef YYPARSE_PARAM
Lev Walkinf15320b2004-06-03 03:38:44 +00001046int yyparse (void *);
Lev Walkin1004aa92004-09-08 00:28:11 +00001047#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001048int yyparse (void);
Lev Walkin1004aa92004-09-08 00:28:11 +00001049#endif
Lev Walkinceb20e72004-09-05 10:40:41 +00001050#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001051
Lev Walkinf15320b2004-06-03 03:38:44 +00001052int
Lev Walkin1004aa92004-09-08 00:28:11 +00001053yyparse(YYPARSE_PARAM_ARG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001054 YYPARSE_PARAM_DECL
1055{
1056 register int yystate;
1057 register int yyn;
1058 register short *yyssp;
1059 register YYSTYPE *yyvsp;
Lev Walkin1004aa92004-09-08 00:28:11 +00001060 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1061 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
Lev Walkinf15320b2004-06-03 03:38:44 +00001062
Lev Walkin1004aa92004-09-08 00:28:11 +00001063 short yyssa[YYINITDEPTH]; /* the state stack */
1064 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
Lev Walkinf15320b2004-06-03 03:38:44 +00001065
Lev Walkin1004aa92004-09-08 00:28:11 +00001066 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1067 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
Lev Walkinf15320b2004-06-03 03:38:44 +00001068
Lev Walkin1004aa92004-09-08 00:28:11 +00001069#ifdef YYLSP_NEEDED
1070 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1071 YYLTYPE *yyls = yylsa;
1072 YYLTYPE *yylsp;
1073
1074#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1075#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001076#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkin1004aa92004-09-08 00:28:11 +00001077#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001078
Lev Walkin1004aa92004-09-08 00:28:11 +00001079 int yystacksize = YYINITDEPTH;
1080 int yyfree_stacks = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001081
Lev Walkin1004aa92004-09-08 00:28:11 +00001082#ifdef YYPURE
1083 int yychar;
1084 YYSTYPE yylval;
1085 int yynerrs;
1086#ifdef YYLSP_NEEDED
1087 YYLTYPE yylloc;
1088#endif
1089#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001090
Lev Walkin1004aa92004-09-08 00:28:11 +00001091 YYSTYPE yyval; /* the variable used to return */
1092 /* semantic values from the action */
1093 /* routines */
Lev Walkinf15320b2004-06-03 03:38:44 +00001094
1095 int yylen;
1096
Lev Walkin1004aa92004-09-08 00:28:11 +00001097#if YYDEBUG != 0
1098 if (yydebug)
1099 fprintf(stderr, "Starting parse\n");
1100#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001101
1102 yystate = 0;
1103 yyerrstatus = 0;
1104 yynerrs = 0;
1105 yychar = YYEMPTY; /* Cause a token to be read. */
1106
1107 /* Initialize stack pointers.
1108 Waste one element of value and location stack
1109 so that they stay on the same level as the state stack.
1110 The wasted elements are never initialized. */
1111
Lev Walkin1004aa92004-09-08 00:28:11 +00001112 yyssp = yyss - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001113 yyvsp = yyvs;
Lev Walkin1004aa92004-09-08 00:28:11 +00001114#ifdef YYLSP_NEEDED
1115 yylsp = yyls;
1116#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001117
Lev Walkin1004aa92004-09-08 00:28:11 +00001118/* Push a new state, which is found in yystate . */
1119/* In all cases, when you get here, the value and location stacks
1120 have just been pushed. so pushing a state here evens the stacks. */
1121yynewstate:
Lev Walkinf15320b2004-06-03 03:38:44 +00001122
Lev Walkin1004aa92004-09-08 00:28:11 +00001123 *++yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001124
1125 if (yyssp >= yyss + yystacksize - 1)
1126 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001127 /* Give user a chance to reallocate the stack */
1128 /* Use copies of these so that the &'s don't force the real ones into memory. */
1129 YYSTYPE *yyvs1 = yyvs;
1130 short *yyss1 = yyss;
1131#ifdef YYLSP_NEEDED
1132 YYLTYPE *yyls1 = yyls;
1133#endif
1134
Lev Walkinf15320b2004-06-03 03:38:44 +00001135 /* Get the current used size of the three stacks, in elements. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001136 int size = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001137
1138#ifdef yyoverflow
Lev Walkin1004aa92004-09-08 00:28:11 +00001139 /* Each stack pointer address is followed by the size of
1140 the data in use in that stack, in bytes. */
1141#ifdef YYLSP_NEEDED
1142 /* This used to be a conditional around just the two extra args,
1143 but that might be undefined if yyoverflow is a macro. */
1144 yyoverflow("parser stack overflow",
1145 &yyss1, size * sizeof (*yyssp),
1146 &yyvs1, size * sizeof (*yyvsp),
1147 &yyls1, size * sizeof (*yylsp),
1148 &yystacksize);
1149#else
1150 yyoverflow("parser stack overflow",
1151 &yyss1, size * sizeof (*yyssp),
1152 &yyvs1, size * sizeof (*yyvsp),
1153 &yystacksize);
1154#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001155
Lev Walkin1004aa92004-09-08 00:28:11 +00001156 yyss = yyss1; yyvs = yyvs1;
1157#ifdef YYLSP_NEEDED
1158 yyls = yyls1;
1159#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001160#else /* no yyoverflow */
1161 /* Extend the stack our own way. */
1162 if (yystacksize >= YYMAXDEPTH)
Lev Walkin1004aa92004-09-08 00:28:11 +00001163 {
1164 yyerror("parser stack overflow");
1165 if (yyfree_stacks)
1166 {
1167 free (yyss);
1168 free (yyvs);
1169#ifdef YYLSP_NEEDED
1170 free (yyls);
1171#endif
1172 }
1173 return 2;
1174 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001175 yystacksize *= 2;
1176 if (yystacksize > YYMAXDEPTH)
1177 yystacksize = YYMAXDEPTH;
Lev Walkin1004aa92004-09-08 00:28:11 +00001178#ifndef YYSTACK_USE_ALLOCA
1179 yyfree_stacks = 1;
1180#endif
1181 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1182 __yy_memcpy ((char *)yyss, (char *)yyss1,
1183 size * (unsigned int) sizeof (*yyssp));
1184 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1185 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1186 size * (unsigned int) sizeof (*yyvsp));
1187#ifdef YYLSP_NEEDED
1188 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1189 __yy_memcpy ((char *)yyls, (char *)yyls1,
1190 size * (unsigned int) sizeof (*yylsp));
1191#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001192#endif /* no yyoverflow */
1193
Lev Walkin1004aa92004-09-08 00:28:11 +00001194 yyssp = yyss + size - 1;
1195 yyvsp = yyvs + size - 1;
1196#ifdef YYLSP_NEEDED
1197 yylsp = yyls + size - 1;
1198#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001199
Lev Walkin1004aa92004-09-08 00:28:11 +00001200#if YYDEBUG != 0
1201 if (yydebug)
1202 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1203#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001204
1205 if (yyssp >= yyss + yystacksize - 1)
1206 YYABORT;
1207 }
1208
Lev Walkin1004aa92004-09-08 00:28:11 +00001209#if YYDEBUG != 0
1210 if (yydebug)
1211 fprintf(stderr, "Entering state %d\n", yystate);
1212#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001213
1214 goto yybackup;
Lev Walkin1004aa92004-09-08 00:28:11 +00001215 yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001216
1217/* Do appropriate processing given the current state. */
1218/* Read a lookahead token if we need one and don't already have one. */
1219/* yyresume: */
1220
1221 /* First try to decide what to do without reference to lookahead token. */
1222
1223 yyn = yypact[yystate];
Lev Walkin1004aa92004-09-08 00:28:11 +00001224 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001225 goto yydefault;
1226
1227 /* Not known => get a lookahead token if don't already have one. */
1228
1229 /* yychar is either YYEMPTY or YYEOF
1230 or a valid token in external form. */
1231
1232 if (yychar == YYEMPTY)
1233 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001234#if YYDEBUG != 0
1235 if (yydebug)
1236 fprintf(stderr, "Reading a token: ");
1237#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001238 yychar = YYLEX;
1239 }
1240
Lev Walkin1004aa92004-09-08 00:28:11 +00001241 /* Convert token to internal form (in yychar1) for indexing tables with */
Lev Walkinf15320b2004-06-03 03:38:44 +00001242
Lev Walkin1004aa92004-09-08 00:28:11 +00001243 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001244 {
1245 yychar1 = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001246 yychar = YYEOF; /* Don't call YYLEX any more */
Lev Walkinf15320b2004-06-03 03:38:44 +00001247
Lev Walkin1004aa92004-09-08 00:28:11 +00001248#if YYDEBUG != 0
1249 if (yydebug)
1250 fprintf(stderr, "Now at end of input.\n");
1251#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001252 }
1253 else
1254 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001255 yychar1 = YYTRANSLATE(yychar);
Lev Walkinf15320b2004-06-03 03:38:44 +00001256
Lev Walkin1004aa92004-09-08 00:28:11 +00001257#if YYDEBUG != 0
1258 if (yydebug)
1259 {
1260 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1261 /* Give the individual parser a way to print the precise meaning
1262 of a token, for further debugging info. */
1263#ifdef YYPRINT
1264 YYPRINT (stderr, yychar, yylval);
1265#endif
1266 fprintf (stderr, ")\n");
1267 }
1268#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001269 }
1270
1271 yyn += yychar1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001272 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001273 goto yydefault;
Lev Walkin1004aa92004-09-08 00:28:11 +00001274
Lev Walkinf15320b2004-06-03 03:38:44 +00001275 yyn = yytable[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001276
1277 /* yyn is what to do for this token type in this state.
1278 Negative => reduce, -yyn is rule number.
1279 Positive => shift, yyn is new state.
1280 New state is final state => don't bother to shift,
1281 just return success.
1282 0, or most negative number => error. */
1283
1284 if (yyn < 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001285 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001286 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001287 goto yyerrlab;
1288 yyn = -yyn;
1289 goto yyreduce;
1290 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001291 else if (yyn == 0)
1292 goto yyerrlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001293
1294 if (yyn == YYFINAL)
1295 YYACCEPT;
1296
1297 /* Shift the lookahead token. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001298
1299#if YYDEBUG != 0
1300 if (yydebug)
1301 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1302#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001303
1304 /* Discard the token being shifted unless it is eof. */
1305 if (yychar != YYEOF)
1306 yychar = YYEMPTY;
1307
1308 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00001309#ifdef YYLSP_NEEDED
1310 *++yylsp = yylloc;
1311#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001312
Lev Walkin1004aa92004-09-08 00:28:11 +00001313 /* count tokens shifted since error; after three, turn off error status. */
1314 if (yyerrstatus) yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001315
1316 yystate = yyn;
1317 goto yynewstate;
1318
Lev Walkin1004aa92004-09-08 00:28:11 +00001319/* Do the default action for the current state. */
Lev Walkin459ab022004-09-07 10:39:09 +00001320yydefault:
Lev Walkin1004aa92004-09-08 00:28:11 +00001321
Lev Walkinf15320b2004-06-03 03:38:44 +00001322 yyn = yydefact[yystate];
1323 if (yyn == 0)
1324 goto yyerrlab;
1325
Lev Walkin1004aa92004-09-08 00:28:11 +00001326/* Do a reduction. yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001327yyreduce:
1328 yylen = yyr2[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001329 if (yylen > 0)
1330 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Lev Walkinf15320b2004-06-03 03:38:44 +00001331
Lev Walkin1004aa92004-09-08 00:28:11 +00001332#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00001333 if (yydebug)
1334 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001335 int i;
Lev Walkinf15320b2004-06-03 03:38:44 +00001336
Lev Walkin1004aa92004-09-08 00:28:11 +00001337 fprintf (stderr, "Reducing via rule %d (line %d), ",
1338 yyn, yyrline[yyn]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001339
1340 /* Print the symbols being reduced, and their result. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001341 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1342 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1343 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001344 }
1345#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001346
Lev Walkin1004aa92004-09-08 00:28:11 +00001347
1348 switch (yyn) {
1349
1350case 1:
Lev Walkin8ea99482005-03-31 21:48:13 +00001351#line 303 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001352{
1353 *(void **)param = yyvsp[0].a_grammar;
1354 ;
1355 break;}
1356case 2:
Lev Walkin8ea99482005-03-31 21:48:13 +00001357#line 309 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001358{
Lev Walkinf15320b2004-06-03 03:38:44 +00001359 yyval.a_grammar = asn1p_new();
1360 checkmem(yyval.a_grammar);
1361 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001362 ;
1363 break;}
1364case 3:
Lev Walkin8ea99482005-03-31 21:48:13 +00001365#line 314 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001366{
Lev Walkinf15320b2004-06-03 03:38:44 +00001367 yyval.a_grammar = yyvsp[-1].a_grammar;
1368 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001369 ;
1370 break;}
1371case 4:
Lev Walkin8ea99482005-03-31 21:48:13 +00001372#line 335 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001373{
Lev Walkinf15320b2004-06-03 03:38:44 +00001374
1375 if(yyvsp[-1].a_module) {
1376 yyval.a_module = yyvsp[-1].a_module;
1377 } else {
1378 /* There's a chance that a module is just plain empty */
1379 yyval.a_module = asn1p_module_new();
1380 }
1381 checkmem(yyval.a_module);
1382
1383 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1384 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1385 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001386 ;
1387 break;}
1388case 5:
Lev Walkin8ea99482005-03-31 21:48:13 +00001389#line 356 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001390{ yyval.a_oid = 0; ;
1391 break;}
1392case 6:
Lev Walkin8ea99482005-03-31 21:48:13 +00001393#line 357 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001394{ yyval.a_oid = yyvsp[0].a_oid; ;
1395 break;}
1396case 7:
Lev Walkin8ea99482005-03-31 21:48:13 +00001397#line 361 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001398{
Lev Walkinf15320b2004-06-03 03:38:44 +00001399 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin1004aa92004-09-08 00:28:11 +00001400 ;
1401 break;}
1402case 8:
Lev Walkin8ea99482005-03-31 21:48:13 +00001403#line 364 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001404{
Lev Walkinf15320b2004-06-03 03:38:44 +00001405 yyval.a_oid = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001406 ;
1407 break;}
1408case 9:
Lev Walkin8ea99482005-03-31 21:48:13 +00001409#line 370 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001410{
Lev Walkinf15320b2004-06-03 03:38:44 +00001411 yyval.a_oid = asn1p_oid_new();
1412 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1413 if(yyvsp[0].a_oid_arc.name)
1414 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001415 ;
1416 break;}
1417case 10:
Lev Walkin8ea99482005-03-31 21:48:13 +00001418#line 376 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001419{
Lev Walkinf15320b2004-06-03 03:38:44 +00001420 yyval.a_oid = yyvsp[-1].a_oid;
1421 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1422 if(yyvsp[0].a_oid_arc.name)
1423 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001424 ;
1425 break;}
1426case 11:
Lev Walkin8ea99482005-03-31 21:48:13 +00001427#line 385 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001428{ /* iso */
Lev Walkinf15320b2004-06-03 03:38:44 +00001429 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1430 yyval.a_oid_arc.number = -1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001431 ;
1432 break;}
1433case 12:
Lev Walkin8ea99482005-03-31 21:48:13 +00001434#line 389 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001435{ /* iso(1) */
Lev Walkinf15320b2004-06-03 03:38:44 +00001436 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1437 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001438 ;
1439 break;}
1440case 13:
Lev Walkin8ea99482005-03-31 21:48:13 +00001441#line 393 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001442{ /* 1 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001443 yyval.a_oid_arc.name = 0;
1444 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001445 ;
1446 break;}
1447case 14:
Lev Walkin8ea99482005-03-31 21:48:13 +00001448#line 403 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001449{ yyval.a_module_flags = MSF_NOFLAGS; ;
1450 break;}
1451case 15:
Lev Walkin8ea99482005-03-31 21:48:13 +00001452#line 404 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001453{
Lev Walkinf15320b2004-06-03 03:38:44 +00001454 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001455 ;
1456 break;}
1457case 16:
Lev Walkin8ea99482005-03-31 21:48:13 +00001458#line 413 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001459{
Lev Walkinf15320b2004-06-03 03:38:44 +00001460 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001461 ;
1462 break;}
1463case 17:
Lev Walkin8ea99482005-03-31 21:48:13 +00001464#line 416 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001465{
Lev Walkinf15320b2004-06-03 03:38:44 +00001466 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001467 ;
1468 break;}
1469case 18:
Lev Walkin8ea99482005-03-31 21:48:13 +00001470#line 425 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001471{
Lev Walkinf15320b2004-06-03 03:38:44 +00001472 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001473 ;
1474 break;}
1475case 19:
Lev Walkin8ea99482005-03-31 21:48:13 +00001476#line 428 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001477{
Lev Walkinf15320b2004-06-03 03:38:44 +00001478 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001479 ;
1480 break;}
1481case 20:
Lev Walkin8ea99482005-03-31 21:48:13 +00001482#line 431 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001483{
Lev Walkinf15320b2004-06-03 03:38:44 +00001484 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001485 ;
1486 break;}
1487case 21:
Lev Walkin8ea99482005-03-31 21:48:13 +00001488#line 434 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001489{
Lev Walkinf15320b2004-06-03 03:38:44 +00001490 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin1004aa92004-09-08 00:28:11 +00001491 ;
1492 break;}
1493case 22:
Lev Walkin8ea99482005-03-31 21:48:13 +00001494#line 438 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001495{
Lev Walkinf59d0752004-08-18 04:59:12 +00001496 /* X.680Amd1 specifies TAG and XER */
1497 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1498 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1499 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1500 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1501 } else {
1502 fprintf(stderr,
1503 "WARNING: %s INSTRUCTIONS at line %d: "
1504 "Unrecognized encoding reference\n",
1505 yyvsp[-1].tv_str, yylineno);
1506 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1507 }
1508 free(yyvsp[-1].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00001509 ;
1510 break;}
1511case 23:
Lev Walkin8ea99482005-03-31 21:48:13 +00001512#line 459 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001513{ yyval.a_module = 0; ;
1514 break;}
1515case 24:
Lev Walkin8ea99482005-03-31 21:48:13 +00001516#line 460 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001517{
Lev Walkinf15320b2004-06-03 03:38:44 +00001518 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001519 ;
1520 break;}
1521case 25:
Lev Walkin8ea99482005-03-31 21:48:13 +00001522#line 469 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001523{
Lev Walkinf59d0752004-08-18 04:59:12 +00001524 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001525 ;
1526 break;}
1527case 26:
Lev Walkin8ea99482005-03-31 21:48:13 +00001528#line 472 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001529{
Lev Walkinf15320b2004-06-03 03:38:44 +00001530 yyval.a_module = yyvsp[-1].a_module;
1531
Lev Walkinf59d0752004-08-18 04:59:12 +00001532 /* Behave well when one of them is skipped. */
1533 if(!(yyvsp[-1].a_module)) {
1534 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1535 break;
1536 }
1537
Lev Walkinf15320b2004-06-03 03:38:44 +00001538#ifdef MY_IMPORT
1539#error MY_IMPORT DEFINED ELSEWHERE!
1540#endif
1541#define MY_IMPORT(foo,field) do { \
Lev Walkinbc55d232004-08-13 12:31:09 +00001542 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
Lev Walkinf15320b2004-06-03 03:38:44 +00001543 TQ_ADD(&(yyval.a_module->foo), \
1544 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1545 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001546 } \
1547 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1548 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001549
1550 MY_IMPORT(imports, xp_next);
1551 MY_IMPORT(exports, xp_next);
1552 MY_IMPORT(members, next);
1553#undef MY_IMPORT
1554
Lev Walkin1004aa92004-09-08 00:28:11 +00001555 ;
1556 break;}
1557case 27:
Lev Walkin8ea99482005-03-31 21:48:13 +00001558#line 505 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001559{
Lev Walkinf15320b2004-06-03 03:38:44 +00001560 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001561 ;
1562 break;}
1563case 28:
Lev Walkin8ea99482005-03-31 21:48:13 +00001564#line 508 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001565{
Lev Walkinf15320b2004-06-03 03:38:44 +00001566 yyval.a_module = asn1p_module_new();
1567 checkmem(yyval.a_module);
1568 if(yyvsp[0].a_xports) {
1569 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1570 } else {
1571 /* "EXPORTS ALL;" ? */
1572 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001573 ;
1574 break;}
1575case 29:
Lev Walkin8ea99482005-03-31 21:48:13 +00001576#line 517 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001577{
Lev Walkinf15320b2004-06-03 03:38:44 +00001578 yyval.a_module = asn1p_module_new();
1579 checkmem(yyval.a_module);
1580 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1581 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1582 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001583 ;
1584 break;}
1585case 30:
Lev Walkin8ea99482005-03-31 21:48:13 +00001586#line 524 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001587{
Lev Walkinf59d0752004-08-18 04:59:12 +00001588 yyval.a_module = asn1p_module_new();
1589 checkmem(yyval.a_module);
1590 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1591 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1592 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001593 ;
1594 break;}
1595case 31:
Lev Walkin8ea99482005-03-31 21:48:13 +00001596#line 537 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001597{
Lev Walkinf59d0752004-08-18 04:59:12 +00001598 yyval.a_module = asn1p_module_new();
1599 checkmem(yyval.a_module);
1600 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1601 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1602 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001603 ;
1604 break;}
1605case 32:
Lev Walkin8ea99482005-03-31 21:48:13 +00001606#line 545 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001607{ asn1p_lexer_hack_push_encoding_control(); ;
1608 break;}
1609case 33:
Lev Walkin8ea99482005-03-31 21:48:13 +00001610#line 546 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001611{
Lev Walkinf59d0752004-08-18 04:59:12 +00001612 fprintf(stderr,
1613 "WARNING: ENCODING-CONTROL %s "
1614 "specification at line %d ignored\n",
1615 yyvsp[-1].tv_str, yylineno);
1616 free(yyvsp[-1].tv_str);
1617 yyval.a_module = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001618 ;
1619 break;}
1620case 34:
Lev Walkin8ea99482005-03-31 21:48:13 +00001621#line 558 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001622{
Lev Walkinf15320b2004-06-03 03:38:44 +00001623 return yyerror(
1624 "Attempt to redefine a standard basic type, "
1625 "use -ftypesXY to switch back "
1626 "to older version of ASN.1 standard");
Lev Walkin1004aa92004-09-08 00:28:11 +00001627 ;
1628 break;}
1629case 35:
Lev Walkin8ea99482005-03-31 21:48:13 +00001630#line 572 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001631{
Lev Walkinf15320b2004-06-03 03:38:44 +00001632 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001633 ;
1634 break;}
1635case 36:
Lev Walkin8ea99482005-03-31 21:48:13 +00001636#line 578 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001637{
Lev Walkinf15320b2004-06-03 03:38:44 +00001638 return yyerror("Empty IMPORTS list");
Lev Walkin1004aa92004-09-08 00:28:11 +00001639 ;
1640 break;}
1641case 37:
Lev Walkin8ea99482005-03-31 21:48:13 +00001642#line 584 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001643{
Lev Walkinf15320b2004-06-03 03:38:44 +00001644 yyval.a_module = asn1p_module_new();
1645 checkmem(yyval.a_module);
1646 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001647 ;
1648 break;}
1649case 38:
Lev Walkin8ea99482005-03-31 21:48:13 +00001650#line 589 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001651{
Lev Walkinf15320b2004-06-03 03:38:44 +00001652 yyval.a_module = yyvsp[-1].a_module;
1653 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001654 ;
1655 break;}
1656case 39:
Lev Walkin8ea99482005-03-31 21:48:13 +00001657#line 596 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001658{
Lev Walkinf15320b2004-06-03 03:38:44 +00001659 yyval.a_xports = yyvsp[-3].a_xports;
1660 yyval.a_xports->from = yyvsp[-1].tv_str;
1661 yyval.a_xports->from_oid = yyvsp[0].a_oid;
1662 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001663 ;
1664 break;}
1665case 40:
Lev Walkin8ea99482005-03-31 21:48:13 +00001666#line 605 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001667{
Lev Walkinf15320b2004-06-03 03:38:44 +00001668 yyval.a_xports = asn1p_xports_new();
1669 checkmem(yyval.a_xports);
1670 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001671 ;
1672 break;}
1673case 41:
Lev Walkin8ea99482005-03-31 21:48:13 +00001674#line 610 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001675{
Lev Walkinf15320b2004-06-03 03:38:44 +00001676 yyval.a_xports = yyvsp[-2].a_xports;
1677 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001678 ;
1679 break;}
1680case 42:
Lev Walkin8ea99482005-03-31 21:48:13 +00001681#line 617 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001682{
Lev Walkinf15320b2004-06-03 03:38:44 +00001683 yyval.a_expr = asn1p_expr_new(yylineno);
1684 checkmem(yyval.a_expr);
1685 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1686 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001687 ;
1688 break;}
1689case 43:
Lev Walkin8ea99482005-03-31 21:48:13 +00001690#line 623 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001691{ /* Completely equivalent to above */
1692 yyval.a_expr = asn1p_expr_new(yylineno);
1693 checkmem(yyval.a_expr);
1694 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1695 yyval.a_expr->expr_type = A1TC_REFERENCE;
1696 ;
1697 break;}
1698case 44:
Lev Walkin8ea99482005-03-31 21:48:13 +00001699#line 629 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001700{
Lev Walkinf15320b2004-06-03 03:38:44 +00001701 yyval.a_expr = asn1p_expr_new(yylineno);
1702 checkmem(yyval.a_expr);
1703 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1704 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001705 ;
1706 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001707case 45:
Lev Walkin8ea99482005-03-31 21:48:13 +00001708#line 638 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001709{
Lev Walkinf15320b2004-06-03 03:38:44 +00001710 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin1004aa92004-09-08 00:28:11 +00001711 ;
1712 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001713case 46:
Lev Walkin8ea99482005-03-31 21:48:13 +00001714#line 641 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001715{
Lev Walkinf15320b2004-06-03 03:38:44 +00001716 yyval.a_xports = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001717 ;
1718 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001719case 47:
Lev Walkin8ea99482005-03-31 21:48:13 +00001720#line 644 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001721{
Lev Walkinf15320b2004-06-03 03:38:44 +00001722 /* Empty EXPORTS clause effectively prohibits export. */
1723 yyval.a_xports = asn1p_xports_new();
1724 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001725 ;
1726 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001727case 48:
Lev Walkin8ea99482005-03-31 21:48:13 +00001728#line 652 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001729{
Lev Walkinf15320b2004-06-03 03:38:44 +00001730 yyval.a_xports = asn1p_xports_new();
1731 assert(yyval.a_xports);
1732 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001733 ;
1734 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001735case 49:
Lev Walkin8ea99482005-03-31 21:48:13 +00001736#line 657 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001737{
Lev Walkinf15320b2004-06-03 03:38:44 +00001738 yyval.a_xports = yyvsp[-2].a_xports;
1739 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001740 ;
1741 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001742case 50:
Lev Walkin8ea99482005-03-31 21:48:13 +00001743#line 664 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001744{
Lev Walkinf15320b2004-06-03 03:38:44 +00001745 yyval.a_expr = asn1p_expr_new(yylineno);
1746 checkmem(yyval.a_expr);
1747 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1748 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin1004aa92004-09-08 00:28:11 +00001749 ;
1750 break;}
1751case 51:
Lev Walkin8ea99482005-03-31 21:48:13 +00001752#line 670 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001753{
1754 yyval.a_expr = asn1p_expr_new(yylineno);
1755 checkmem(yyval.a_expr);
1756 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1757 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1758 ;
1759 break;}
1760case 52:
Lev Walkin8ea99482005-03-31 21:48:13 +00001761#line 676 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001762{
1763 yyval.a_expr = asn1p_expr_new(yylineno);
1764 checkmem(yyval.a_expr);
1765 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1766 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1767 ;
1768 break;}
1769case 53:
Lev Walkin8ea99482005-03-31 21:48:13 +00001770#line 687 "asn1p_y.y"
1771{ asn1p_lexer_hack_push_opaque_state(); ;
1772 break;}
1773case 54:
1774#line 687 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001775{
Lev Walkinf15320b2004-06-03 03:38:44 +00001776 yyval.a_expr = yyvsp[-4].a_expr;
1777 assert(yyval.a_expr->Identifier == 0);
1778 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1779 yyval.a_expr->meta_type = AMT_VALUESET;
Lev Walkin8ea99482005-03-31 21:48:13 +00001780 // take care of ValueSet body
Lev Walkin1004aa92004-09-08 00:28:11 +00001781 ;
1782 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001783case 55:
1784#line 697 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001785{
Lev Walkinf15320b2004-06-03 03:38:44 +00001786 yyval.a_expr = asn1p_expr_new(yylineno);
1787 checkmem(yyval.a_expr);
1788 yyval.a_expr->reference = yyvsp[0].a_ref;
1789 yyval.a_expr->expr_type = A1TC_REFERENCE;
1790 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001791 ;
1792 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001793case 56:
1794#line 704 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001795{
Lev Walkinf15320b2004-06-03 03:38:44 +00001796 yyval.a_expr = asn1p_expr_new(yylineno);
1797 checkmem(yyval.a_expr);
1798 yyval.a_expr->expr_type = yyvsp[0].a_type;
1799 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001800 ;
1801 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001802case 57:
Lev Walkin8ea99482005-03-31 21:48:13 +00001803#line 722 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001804{
Lev Walkinf15320b2004-06-03 03:38:44 +00001805 yyval.a_expr = asn1p_expr_new(yylineno);
1806 checkmem(yyval.a_expr);
1807 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1808 yyval.a_expr->tag = yyvsp[-1].a_tag;
1809 yyval.a_expr->expr_type = A1TC_TYPEID;
1810 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001811 ;
1812 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001813case 58:
1814#line 730 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001815{
Lev Walkinf15320b2004-06-03 03:38:44 +00001816 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00001817 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00001818 assert(yyval.a_expr->expr_type);
1819 assert(yyval.a_expr->meta_type);
Lev Walkin1004aa92004-09-08 00:28:11 +00001820 ;
1821 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001822case 59:
1823#line 736 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001824{
Lev Walkinf15320b2004-06-03 03:38:44 +00001825 yyval.a_expr = yyvsp[0].a_expr;
1826 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1827 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1828 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin1004aa92004-09-08 00:28:11 +00001829 ;
1830 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001831case 60:
1832#line 752 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001833{
Lev Walkinf15320b2004-06-03 03:38:44 +00001834 yyval.a_expr = yyvsp[0].a_expr;
1835 assert(yyval.a_expr->Identifier == 0);
1836 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1837 yyval.a_expr->params = yyvsp[-3].a_plist;
1838 yyval.a_expr->meta_type = AMT_PARAMTYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001839 ;
1840 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001841case 61:
1842#line 762 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001843{
Lev Walkinf15320b2004-06-03 03:38:44 +00001844 int ret;
1845 yyval.a_plist = asn1p_paramlist_new(yylineno);
1846 checkmem(yyval.a_plist);
1847 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1848 checkmem(ret == 0);
1849 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1850 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001851 ;
1852 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001853case 62:
1854#line 771 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001855{
Lev Walkinf15320b2004-06-03 03:38:44 +00001856 int ret;
1857 yyval.a_plist = yyvsp[-2].a_plist;
1858 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1859 checkmem(ret == 0);
1860 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1861 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001862 ;
1863 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001864case 63:
1865#line 782 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001866{
Lev Walkinf15320b2004-06-03 03:38:44 +00001867 yyval.a_parg.governor = NULL;
1868 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001869 ;
1870 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001871case 64:
1872#line 786 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001873{
Lev Walkinf15320b2004-06-03 03:38:44 +00001874 int ret;
1875 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1876 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1877 checkmem(ret == 0);
1878 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001879 ;
1880 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001881case 65:
1882#line 793 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001883{
Lev Walkinf15320b2004-06-03 03:38:44 +00001884 int ret;
1885 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinc8092cb2005-02-18 16:34:21 +00001886 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1887 checkmem(ret == 0);
1888 yyval.a_parg.argument = yyvsp[0].tv_str;
1889 ;
1890 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001891case 66:
1892#line 800 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00001893{
1894 int ret;
1895 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00001896 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1897 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1898 checkmem(ret == 0);
1899 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001900 ;
1901 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001902case 67:
1903#line 811 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001904{
Lev Walkinf15320b2004-06-03 03:38:44 +00001905 yyval.a_expr = asn1p_expr_new(yylineno);
1906 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001907 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1908 ;
1909 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001910case 68:
1911#line 816 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001912{
Lev Walkinf15320b2004-06-03 03:38:44 +00001913 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001914 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1915 ;
1916 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001917case 69:
1918#line 823 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001919{
Lev Walkinf15320b2004-06-03 03:38:44 +00001920 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001921 ;
1922 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001923case 70:
1924#line 826 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001925{
Lev Walkinf15320b2004-06-03 03:38:44 +00001926 yyval.a_expr = asn1p_expr_new(yylineno);
1927 checkmem(yyval.a_expr);
1928 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1929 yyval.a_expr->expr_type = A1TC_REFERENCE;
1930 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001931 ;
1932 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001933case 71:
1934#line 850 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001935{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1936 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001937case 72:
1938#line 851 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001939{ yyval.a_expr = yyvsp[0].a_expr; ;
1940 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001941case 73:
1942#line 854 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001943{
Lev Walkinf15320b2004-06-03 03:38:44 +00001944 yyval.a_expr = asn1p_expr_new(yylineno);
1945 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001946 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1947 ;
1948 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001949case 74:
1950#line 859 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001951{
Lev Walkinf15320b2004-06-03 03:38:44 +00001952 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001953 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1954 ;
1955 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001956case 75:
1957#line 866 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001958{
Lev Walkin070a52d2004-08-22 03:19:54 +00001959 yyval.a_expr = yyvsp[-1].a_expr;
1960 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00001961 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkin070a52d2004-08-22 03:19:54 +00001962 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00001963 ;
1964 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001965case 76:
1966#line 872 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001967{
Lev Walkin070a52d2004-08-22 03:19:54 +00001968 yyval.a_expr = asn1p_expr_new(yylineno);
1969 checkmem(yyval.a_expr);
1970 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1971 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001972 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1973 ;
1974 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001975case 77:
1976#line 879 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001977{
Lev Walkin070a52d2004-08-22 03:19:54 +00001978 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001979 ;
1980 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001981case 78:
1982#line 885 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001983{
Lev Walkin070a52d2004-08-22 03:19:54 +00001984 yyval.a_expr = asn1p_expr_new(yylineno);
1985 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001986 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1987 ;
1988 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001989case 79:
1990#line 890 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001991{
Lev Walkin070a52d2004-08-22 03:19:54 +00001992 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001993 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1994 ;
1995 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001996case 80:
1997#line 897 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001998{
Lev Walkin070a52d2004-08-22 03:19:54 +00001999 yyval.a_expr = yyvsp[0].a_expr;
2000 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00002001 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002002 ;
2003 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002004case 81:
2005#line 902 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002006{
Lev Walkin070a52d2004-08-22 03:19:54 +00002007 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002008 ;
2009 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002010case 82:
2011#line 908 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002012{
Lev Walkinf15320b2004-06-03 03:38:44 +00002013 yyval.a_expr = yyvsp[-2].a_expr;
2014 checkmem(yyval.a_expr);
2015 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2016 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2017 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin1004aa92004-09-08 00:28:11 +00002018 ;
2019 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002020case 83:
2021#line 918 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002022{ yyval.a_int = 0; ;
2023 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002024case 84:
2025#line 919 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002026{ yyval.a_int = 1; ;
2027 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002028case 85:
2029#line 923 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002030{
Lev Walkinf15320b2004-06-03 03:38:44 +00002031 yyval.a_expr = asn1p_expr_new(yylineno);
2032 checkmem(yyval.a_expr);
2033 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2034 yyval.a_expr->meta_type = AMT_OBJECT;
Lev Walkin1004aa92004-09-08 00:28:11 +00002035 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2036 ;
2037 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002038case 86:
2039#line 930 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002040{
Lev Walkinf15320b2004-06-03 03:38:44 +00002041 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002042 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2043 ;
2044 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002045case 87:
2046#line 937 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002047{
Lev Walkinf15320b2004-06-03 03:38:44 +00002048 yyval.a_expr = asn1p_expr_new(yylineno);
2049 checkmem(yyval.a_expr);
2050 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2051 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2052 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2053 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002054 ;
2055 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002056case 88:
2057#line 945 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002058{
Lev Walkin070a52d2004-08-22 03:19:54 +00002059 yyval.a_expr = yyvsp[-2].a_expr;
2060 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002061 yyval.a_expr->marker = yyvsp[0].a_marker;
2062 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002063 ;
2064 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002065case 89:
2066#line 951 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002067{
Lev Walkinf15320b2004-06-03 03:38:44 +00002068 int ret;
2069 yyval.a_expr = asn1p_expr_new(yylineno);
2070 checkmem(yyval.a_expr);
2071 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2072 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2073 checkmem(yyval.a_expr->reference);
2074 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2075 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2076 checkmem(ret == 0);
2077 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2078 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002079 yyval.a_expr->marker = yyvsp[0].a_marker;
2080 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002081 ;
2082 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002083case 90:
2084#line 969 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002085{ yyval.a_wsynt = 0; ;
2086 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002087case 91:
2088#line 970 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002089{
Lev Walkinf15320b2004-06-03 03:38:44 +00002090 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002091 ;
2092 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002093case 92:
2094#line 977 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002095{ asn1p_lexer_hack_enable_with_syntax(); ;
2096 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002097case 93:
2098#line 979 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002099{
Lev Walkinf15320b2004-06-03 03:38:44 +00002100 yyval.a_wsynt = yyvsp[-1].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002101 ;
2102 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002103case 94:
2104#line 985 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002105{
Lev Walkinf15320b2004-06-03 03:38:44 +00002106 yyval.a_wsynt = asn1p_wsyntx_new();
2107 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002108 ;
2109 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002110case 95:
2111#line 989 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002112{
Lev Walkinf15320b2004-06-03 03:38:44 +00002113 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2114 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002115 ;
2116 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002117case 96:
2118#line 996 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002119{
Lev Walkinf15320b2004-06-03 03:38:44 +00002120 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002121 ;
2122 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002123case 97:
2124#line 999 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002125{
Lev Walkinf15320b2004-06-03 03:38:44 +00002126 asn1p_ref_t *ref;
2127 int ret;
2128 ref = asn1p_ref_new(yylineno);
2129 checkmem(ref);
2130 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2131 checkmem(ret == 0);
2132 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002133 ;
2134 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002135case 98:
2136#line 1011 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00002137{
2138 yyval.a_expr = asn1p_expr_new(yylineno);
2139 checkmem(yyval.a_expr);
2140 yyval.a_expr->Identifier = strdup("...");
2141 checkmem(yyval.a_expr->Identifier);
Lev Walkin144db9b2004-10-12 23:26:53 +00002142 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2143 yyval.a_expr->meta_type = AMT_TYPE;
2144 ;
2145 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002146case 99:
2147#line 1019 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002148{
2149 yyval.a_expr = asn1p_expr_new(yylineno);
2150 checkmem(yyval.a_expr);
2151 yyval.a_expr->Identifier = strdup("...");
2152 checkmem(yyval.a_expr->Identifier);
2153 yyval.a_expr->value = yyvsp[0].a_value;
2154 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2155 yyval.a_expr->meta_type = AMT_TYPE;
2156 ;
2157 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002158case 100:
2159#line 1028 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00002160{
2161 yyval.a_expr = asn1p_expr_new(yylineno);
2162 checkmem(yyval.a_expr);
2163 yyval.a_expr->Identifier = strdup("...");
Lev Walkind2ea1de2004-08-20 13:25:29 +00002164 yyval.a_expr->value = yyvsp[0].a_value;
2165 checkmem(yyval.a_expr->Identifier);
2166 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2167 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002168 ;
2169 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002170case 101:
2171#line 1040 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002172{
Lev Walkin070a52d2004-08-22 03:19:54 +00002173 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00002174 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002175 /*
2176 * Outer constraint for SEQUENCE OF and SET OF applies
2177 * to the inner type.
2178 */
2179 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2180 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2181 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2182 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2183 } else {
2184 if(yyval.a_expr->constraints) {
Lev Walkinaf120f72004-09-14 02:36:39 +00002185 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002186 } else {
2187 yyval.a_expr->constraints = yyvsp[0].a_constr;
2188 }
2189 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002190 ;
2191 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002192case 102:
2193#line 1062 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002194{
Lev Walkind2ea1de2004-08-20 13:25:29 +00002195 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002196 ;
2197 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002198case 103:
2199#line 1065 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002200{
Lev Walkinc7d939d2005-03-20 11:12:40 +00002201 yyval.a_expr = yyvsp[-1].a_expr;
2202 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2203 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
Lev Walkinf15320b2004-06-03 03:38:44 +00002204 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002205 ;
2206 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002207case 104:
2208#line 1071 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002209{
Lev Walkin070a52d2004-08-22 03:19:54 +00002210 yyval.a_expr = yyvsp[-1].a_expr;
2211 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002212 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
Lev Walkin070a52d2004-08-22 03:19:54 +00002213 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002214 ;
2215 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002216case 105:
2217#line 1077 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002218{
Lev Walkin070a52d2004-08-22 03:19:54 +00002219 yyval.a_expr = yyvsp[-1].a_expr;
2220 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002221 yyval.a_expr->expr_type = ASN_CONSTR_SET;
Lev Walkin070a52d2004-08-22 03:19:54 +00002222 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002223 ;
2224 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002225case 106:
2226#line 1083 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002227{
Lev Walkinceb20e72004-09-05 10:40:41 +00002228 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002229 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002230 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002231 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2232 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002233 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002234 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002235 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2236 ;
2237 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002238case 107:
2239#line 1093 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002240{
Lev Walkinceb20e72004-09-05 10:40:41 +00002241 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002242 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002243 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002244 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2245 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002246 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002247 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002248 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2249 ;
2250 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002251case 108:
2252#line 1103 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002253{
Lev Walkinceb20e72004-09-05 10:40:41 +00002254 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002255 checkmem(yyval.a_expr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002256 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002257 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002258 ;
2259 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002260case 109:
2261#line 1109 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002262{
Lev Walkin070a52d2004-08-22 03:19:54 +00002263 int ret;
Lev Walkinceb20e72004-09-05 10:40:41 +00002264 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002265 checkmem(yyval.a_expr);
2266 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2267 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2268 yyvsp[0].tv_str, RLT_lowercase);
2269 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002270 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002271 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002272 ;
2273 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002274case 110:
2275#line 1123 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002276{
Lev Walkinf15320b2004-06-03 03:38:44 +00002277 int ret;
2278 yyval.a_expr = yyvsp[-1].a_expr;
2279 assert(yyval.a_expr->expr_type == 0);
2280 assert(yyval.a_expr->meta_type == 0);
2281 assert(yyval.a_expr->reference == 0);
2282 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2283 checkmem(yyval.a_expr->reference);
2284 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2285 checkmem(ret == 0);
2286 free(yyvsp[-3].tv_str);
2287 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2288 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002289 ;
2290 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002291case 111:
2292#line 1147 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002293{
Lev Walkinf15320b2004-06-03 03:38:44 +00002294 yyval.a_expr = asn1p_expr_new(yylineno);
2295 checkmem(yyval.a_expr);
2296 yyval.a_expr->reference = yyvsp[0].a_ref;
2297 yyval.a_expr->expr_type = A1TC_REFERENCE;
2298 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00002299 ;
2300 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002301case 112:
2302#line 1154 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002303{
Lev Walkinf15320b2004-06-03 03:38:44 +00002304 yyval.a_expr = asn1p_expr_new(yylineno);
2305 checkmem(yyval.a_expr);
2306 yyval.a_expr->reference = yyvsp[0].a_ref;
2307 yyval.a_expr->expr_type = A1TC_INSTANCE;
2308 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002309 ;
2310 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002311case 113:
2312#line 1169 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002313{
Lev Walkinf15320b2004-06-03 03:38:44 +00002314 int ret;
2315 yyval.a_ref = asn1p_ref_new(yylineno);
2316 checkmem(yyval.a_ref);
2317 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2318 checkmem(ret == 0);
2319 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002320 ;
2321 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002322case 114:
2323#line 1177 "asn1p_y.y"
Lev Walkinc7d939d2005-03-20 11:12:40 +00002324{
2325 int ret;
2326 yyval.a_ref = asn1p_ref_new(yylineno);
2327 checkmem(yyval.a_ref);
2328 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2329 checkmem(ret == 0);
2330 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2331 checkmem(ret == 0);
2332 free(yyvsp[-2].tv_str);
2333 ;
2334 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002335case 115:
2336#line 1187 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002337{
Lev Walkinf15320b2004-06-03 03:38:44 +00002338 int ret;
2339 yyval.a_ref = asn1p_ref_new(yylineno);
2340 checkmem(yyval.a_ref);
2341 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2342 checkmem(ret == 0);
Lev Walkin9c974182004-09-15 11:59:51 +00002343 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00002344 checkmem(ret == 0);
2345 free(yyvsp[-2].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002346 ;
2347 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002348case 116:
2349#line 1197 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002350{
Lev Walkinf15320b2004-06-03 03:38:44 +00002351 int ret;
2352 yyval.a_ref = asn1p_ref_new(yylineno);
2353 checkmem(yyval.a_ref);
Lev Walkin9c974182004-09-15 11:59:51 +00002354 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2355 checkmem(ret == 0);
2356 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2357 checkmem(ret == 0);
2358 free(yyvsp[-2].tv_str);
2359 ;
2360 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002361case 117:
2362#line 1207 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002363{
2364 int ret;
2365 yyval.a_ref = asn1p_ref_new(yylineno);
2366 checkmem(yyval.a_ref);
Lev Walkinf15320b2004-06-03 03:38:44 +00002367 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2368 free(yyvsp[0].tv_str);
2369 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002370 ;
2371 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002372case 118:
2373#line 1215 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002374{
Lev Walkinf15320b2004-06-03 03:38:44 +00002375 int ret;
2376 yyval.a_ref = yyvsp[0].a_ref;
2377 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2378 free(yyvsp[-2].tv_str);
2379 checkmem(ret == 0);
2380 /*
2381 * Move the last element infront.
2382 */
2383 {
2384 struct asn1p_ref_component_s tmp_comp;
2385 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2386 memmove(&yyval.a_ref->components[1],
2387 &yyval.a_ref->components[0],
2388 sizeof(yyval.a_ref->components[0])
2389 * (yyval.a_ref->comp_count - 1));
2390 yyval.a_ref->components[0] = tmp_comp;
2391 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002392 ;
2393 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002394case 119:
2395#line 1237 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002396{
Lev Walkinf15320b2004-06-03 03:38:44 +00002397 int ret;
2398 yyval.a_ref = asn1p_ref_new(yylineno);
2399 checkmem(yyval.a_ref);
2400 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2401 free(yyvsp[0].a_refcomp.name);
2402 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002403 ;
2404 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002405case 120:
2406#line 1245 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002407{
Lev Walkinf15320b2004-06-03 03:38:44 +00002408 int ret;
2409 yyval.a_ref = yyvsp[-2].a_ref;
2410 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2411 free(yyvsp[0].a_refcomp.name);
2412 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002413 ;
2414 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002415case 123:
2416#line 1259 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002417{
Lev Walkinf15320b2004-06-03 03:38:44 +00002418 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2419 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002420 ;
2421 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002422case 124:
2423#line 1264 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002424{
Lev Walkinf15320b2004-06-03 03:38:44 +00002425 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2426 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002427 ;
2428 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002429case 125:
2430#line 1277 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002431{
Lev Walkinf15320b2004-06-03 03:38:44 +00002432 yyval.a_expr = yyvsp[-2].a_expr;
2433 assert(yyval.a_expr->Identifier == NULL);
2434 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2435 yyval.a_expr->meta_type = AMT_VALUE;
2436 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002437 ;
2438 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002439case 126:
2440#line 1287 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002441{
2442 yyval.a_value = asn1p_value_fromint(0);
2443 checkmem(yyval.a_value);
2444 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2445 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2446 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2447 ;
2448 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002449case 127:
2450#line 1294 "asn1p_y.y"
Lev Walkincbad2512005-03-24 16:27:02 +00002451{ asn1p_lexer_hack_push_opaque_state(); ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002452 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002453case 128:
2454#line 1294 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002455{
Lev Walkinf15320b2004-06-03 03:38:44 +00002456 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2457 checkmem(yyval.a_value);
2458 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin1004aa92004-09-08 00:28:11 +00002459 ;
2460 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002461case 129:
2462#line 1299 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002463{
2464 yyval.a_value = asn1p_value_fromint(0);
2465 checkmem(yyval.a_value);
2466 yyval.a_value->type = ATV_NULL;
2467 ;
2468 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002469case 130:
2470#line 1304 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002471{
2472 yyval.a_value = asn1p_value_fromint(0);
2473 checkmem(yyval.a_value);
2474 yyval.a_value->type = ATV_FALSE;
2475 ;
2476 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002477case 131:
2478#line 1309 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002479{
2480 yyval.a_value = asn1p_value_fromint(0);
2481 checkmem(yyval.a_value);
2482 yyval.a_value->type = ATV_TRUE;
2483 ;
2484 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002485case 132:
2486#line 1314 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002487{
Lev Walkinf15320b2004-06-03 03:38:44 +00002488 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2489 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002490 ;
2491 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002492case 133:
2493#line 1318 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002494{
Lev Walkinf15320b2004-06-03 03:38:44 +00002495 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2496 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002497 ;
2498 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002499case 134:
2500#line 1322 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002501{
Lev Walkin1e448d32005-03-24 14:26:38 +00002502 yyval.a_value = yyval.a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002503 ;
2504 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002505case 135:
2506#line 1325 "asn1p_y.y"
Lev Walkinc7d939d2005-03-20 11:12:40 +00002507{
2508 yyval.a_value = yyvsp[0].a_value;
2509 ;
2510 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002511case 136:
2512#line 1328 "asn1p_y.y"
Lev Walkin83cac2f2004-09-22 16:03:36 +00002513{
2514 yyval.a_value = yyvsp[0].a_value;
2515 ;
2516 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002517case 137:
2518#line 1334 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002519{
Lev Walkinf15320b2004-06-03 03:38:44 +00002520 asn1p_ref_t *ref;
2521 int ret;
2522 ref = asn1p_ref_new(yylineno);
2523 checkmem(ref);
2524 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2525 checkmem(ret == 0);
2526 yyval.a_value = asn1p_value_fromref(ref, 0);
2527 checkmem(yyval.a_value);
2528 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002529 ;
2530 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002531case 138:
2532#line 1345 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002533{
Lev Walkinf15320b2004-06-03 03:38:44 +00002534 asn1p_ref_t *ref;
2535 int ret;
2536 ref = asn1p_ref_new(yylineno);
2537 checkmem(ref);
2538 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2539 checkmem(ret == 0);
2540 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2541 checkmem(ret == 0);
2542 yyval.a_value = asn1p_value_fromref(ref, 0);
2543 checkmem(yyval.a_value);
2544 free(yyvsp[-2].tv_str);
2545 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002546 ;
2547 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002548case 139:
2549#line 1363 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002550{
2551 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2552 checkmem(yyval.a_value);
2553 ;
2554 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002555case 140:
2556#line 1367 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002557{
Lev Walkind9574ae2005-03-24 16:22:35 +00002558 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002559 checkmem(yyval.a_value);
2560 yyval.a_value->type = ATV_TUPLE;
2561 ;
2562 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002563case 141:
2564#line 1372 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002565{
Lev Walkind9574ae2005-03-24 16:22:35 +00002566 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002567 checkmem(yyval.a_value);
2568 yyval.a_value->type = ATV_QUADRUPLE;
2569 ;
2570 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002571case 142:
2572#line 1406 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002573{
Lev Walkin1893ddf2005-03-20 14:28:32 +00002574 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00002575 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2576 checkmem(yyval.tv_opaque.buf);
2577 yyval.tv_opaque.buf[0] = '{';
Lev Walkin1893ddf2005-03-20 14:28:32 +00002578 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00002579 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2580 free(yyvsp[0].tv_opaque.buf);
Lev Walkin1004aa92004-09-08 00:28:11 +00002581 ;
2582 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002583case 143:
2584#line 1415 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002585{
Lev Walkinf15320b2004-06-03 03:38:44 +00002586 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2587 char *p = malloc(newsize + 1);
2588 checkmem(p);
2589 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2590 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2591 p[newsize] = '\0';
2592 free(yyvsp[-1].tv_opaque.buf);
2593 free(yyvsp[0].tv_opaque.buf);
2594 yyval.tv_opaque.buf = p;
2595 yyval.tv_opaque.len = newsize;
Lev Walkin1004aa92004-09-08 00:28:11 +00002596 ;
2597 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002598case 144:
2599#line 1430 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002600{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2601 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002602case 145:
2603#line 1431 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002604{ yyval.a_type = ASN_BASIC_NULL; ;
2605 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002606case 146:
2607#line 1432 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002608{ yyval.a_type = ASN_BASIC_REAL; ;
2609 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002610case 147:
2611#line 1433 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002612{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002613 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002614case 148:
2615#line 1434 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002616{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002617 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002618case 149:
2619#line 1435 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002620{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002621 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002622case 150:
2623#line 1436 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002624{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002625 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002626case 151:
2627#line 1437 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002628{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002629 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002630case 152:
2631#line 1438 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002632{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002633 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002634case 153:
2635#line 1439 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002636{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
Lev Walkinc7d939d2005-03-20 11:12:40 +00002637 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002638case 154:
2639#line 1440 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002640{ yyval.a_type = ASN_BASIC_UTCTime; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002641 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002642case 155:
2643#line 1441 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002644{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002645 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002646case 156:
2647#line 1442 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002648{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002649 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002650case 157:
2651#line 1449 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002652{ yyval.a_type = ASN_BASIC_INTEGER; ;
2653 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002654case 158:
2655#line 1450 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002656{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2657 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002658case 159:
2659#line 1451 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002660{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2661 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002662case 160:
2663#line 1455 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002664{
Lev Walkinceb20e72004-09-05 10:40:41 +00002665 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002666 checkmem(yyval.a_expr);
2667 yyval.a_expr->expr_type = yyvsp[0].a_type;
2668 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002669 ;
2670 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002671case 161:
2672#line 1461 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002673{
Lev Walkinf15320b2004-06-03 03:38:44 +00002674 if(yyvsp[0].a_expr) {
2675 yyval.a_expr = yyvsp[0].a_expr;
2676 } else {
Lev Walkinceb20e72004-09-05 10:40:41 +00002677 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002678 checkmem(yyval.a_expr);
2679 }
2680 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2681 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002682 ;
2683 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002684case 162:
2685#line 1474 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002686{ yyval.a_type = ASN_STRING_BMPString; ;
2687 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002688case 163:
2689#line 1475 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002690{
Lev Walkinf15320b2004-06-03 03:38:44 +00002691 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00002692 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002693 ;
2694 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002695case 164:
2696#line 1479 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002697{
Lev Walkin9c974182004-09-15 11:59:51 +00002698 yyval.a_type = ASN_STRING_GraphicString;
2699 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002700 ;
2701 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002702case 165:
2703#line 1483 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002704{ yyval.a_type = ASN_STRING_IA5String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002705 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002706case 166:
2707#line 1484 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002708{ yyval.a_type = ASN_STRING_ISO646String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002709 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002710case 167:
2711#line 1485 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002712{ yyval.a_type = ASN_STRING_NumericString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002713 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002714case 168:
2715#line 1486 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002716{ yyval.a_type = ASN_STRING_PrintableString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002717 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002718case 169:
2719#line 1487 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002720{
2721 yyval.a_type = ASN_STRING_T61String;
2722 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2723 ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002724 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002725case 170:
2726#line 1491 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002727{ yyval.a_type = ASN_STRING_TeletexString; ;
2728 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002729case 171:
2730#line 1492 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002731{ yyval.a_type = ASN_STRING_UniversalString; ;
2732 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002733case 172:
2734#line 1493 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002735{ yyval.a_type = ASN_STRING_UTF8String; ;
2736 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002737case 173:
2738#line 1494 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002739{
2740 yyval.a_type = ASN_STRING_VideotexString;
2741 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2742 ;
2743 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002744case 174:
2745#line 1498 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002746{ yyval.a_type = ASN_STRING_VisibleString; ;
2747 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002748case 175:
2749#line 1499 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002750{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2751 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002752case 181:
2753#line 1511 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002754{ yyval.a_constr = 0; ;
2755 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002756case 182:
2757#line 1512 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002758{
Lev Walkinceb20e72004-09-05 10:40:41 +00002759 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002760 ;
2761 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002762case 183:
2763#line 1518 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002764{
Lev Walkinceb20e72004-09-05 10:40:41 +00002765 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002766 ;
2767 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002768case 184:
2769#line 1521 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002770{
Lev Walkinf15320b2004-06-03 03:38:44 +00002771 /*
2772 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00002773 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00002774 */
Lev Walkind2ea1de2004-08-20 13:25:29 +00002775 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002776 ;
2777 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002778case 185:
2779#line 1531 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002780{
Lev Walkinf15320b2004-06-03 03:38:44 +00002781 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002782 ;
2783 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002784case 186:
2785#line 1534 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002786{
Lev Walkinf59d0752004-08-18 04:59:12 +00002787 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002788 ;
2789 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002790case 187:
2791#line 1540 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002792{
Lev Walkinf15320b2004-06-03 03:38:44 +00002793 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002794 ;
2795 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002796case 188:
2797#line 1543 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002798{
Lev Walkinf15320b2004-06-03 03:38:44 +00002799 asn1p_constraint_t *ct;
2800 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002801 ct->type = ACT_EL_EXT;
2802 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00002803 ;
2804 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002805case 189:
2806#line 1549 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002807{
Lev Walkinf15320b2004-06-03 03:38:44 +00002808 asn1p_constraint_t *ct;
2809 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002810 ct->type = ACT_EL_EXT;
2811 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002812 ct = yyval.a_constr;
2813 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002814 ;
2815 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002816case 190:
2817#line 1560 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002818{
Lev Walkinf59d0752004-08-18 04:59:12 +00002819 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002820 ;
2821 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002822case 191:
2823#line 1563 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002824{
2825 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2826 ;
2827 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002828case 192:
2829#line 1566 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002830{
Lev Walkinf15320b2004-06-03 03:38:44 +00002831 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002832 ;
2833 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002834case 193:
2835#line 1569 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002836{
Lev Walkinf15320b2004-06-03 03:38:44 +00002837 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002838 ;
2839 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002840case 194:
2841#line 1572 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002842{
Lev Walkinf15320b2004-06-03 03:38:44 +00002843 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002844 ;
2845 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002846case 195:
2847#line 1578 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002848{
Lev Walkinf15320b2004-06-03 03:38:44 +00002849 int ret;
2850 yyval.a_constr = asn1p_constraint_new(yylineno);
2851 checkmem(yyval.a_constr);
2852 yyval.a_constr->type = yyvsp[-3].a_ctype;
2853 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2854 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002855 ;
2856 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002857case 196:
2858#line 1586 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002859{
Lev Walkinf59d0752004-08-18 04:59:12 +00002860 int ret;
2861 yyval.a_constr = asn1p_constraint_new(yylineno);
2862 checkmem(yyval.a_constr);
2863 yyval.a_constr->type = ACT_CA_SET;
2864 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2865 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002866 ;
2867 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002868case 197:
2869#line 1594 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002870{
Lev Walkinf59d0752004-08-18 04:59:12 +00002871 yyval.a_constr = asn1p_constraint_new(yylineno);
2872 checkmem(yyval.a_constr);
2873 yyval.a_constr->type = ACT_EL_VALUE;
2874 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002875 ;
2876 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002877case 198:
2878#line 1600 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002879{
Lev Walkin144db9b2004-10-12 23:26:53 +00002880 yyval.a_constr = asn1p_constraint_new(yylineno);
2881 checkmem(yyval.a_constr);
Lev Walkinff7dd142005-03-20 12:58:00 +00002882 yyval.a_constr->type = ACT_EL_TYPE;
2883 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin9c974182004-09-15 11:59:51 +00002884 ;
2885 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002886case 199:
2887#line 1606 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002888{
Lev Walkin1e448d32005-03-24 14:26:38 +00002889 yyval.a_constr = asn1p_constraint_new(yylineno);
2890 checkmem(yyval.a_constr);
2891 yyval.a_constr->type = yyvsp[-1].a_ctype;
2892 yyval.a_constr->range_start = yyvsp[-2].a_value;
2893 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkinc8092cb2005-02-18 16:34:21 +00002894 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002895 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002896case 200:
2897#line 1613 "asn1p_y.y"
2898{
2899 yyval.a_constr = asn1p_constraint_new(yylineno);
2900 checkmem(yyval.a_constr);
2901 yyval.a_constr->type = yyvsp[-1].a_ctype;
2902 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2903 yyval.a_constr->range_stop = yyvsp[0].a_value;
2904 yyval.a_constr->range_start->type = ATV_MIN;
2905 ;
2906 break;}
2907case 201:
2908#line 1621 "asn1p_y.y"
2909{
2910 yyval.a_constr = asn1p_constraint_new(yylineno);
2911 checkmem(yyval.a_constr);
2912 yyval.a_constr->type = yyvsp[-1].a_ctype;
2913 yyval.a_constr->range_start = yyvsp[-2].a_value;
2914 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2915 yyval.a_constr->range_stop->type = ATV_MAX;
2916 ;
2917 break;}
2918case 202:
2919#line 1629 "asn1p_y.y"
2920{
2921 yyval.a_constr = asn1p_constraint_new(yylineno);
2922 checkmem(yyval.a_constr);
2923 yyval.a_constr->type = yyvsp[-1].a_ctype;
2924 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2925 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2926 yyval.a_constr->range_start->type = ATV_MIN;
2927 yyval.a_constr->range_stop->type = ATV_MAX;
2928 ;
2929 break;}
2930case 203:
2931#line 1638 "asn1p_y.y"
2932{
2933 yyval.a_constr = yyvsp[0].a_constr;
2934 ;
2935 break;}
2936case 204:
2937#line 1641 "asn1p_y.y"
2938{
2939 yyval.a_constr = yyvsp[0].a_constr;
2940 ;
2941 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00002942case 205:
Lev Walkin8ea99482005-03-31 21:48:13 +00002943#line 1645 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00002944{ asn1p_lexer_hack_push_opaque_state(); ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002945 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002946case 206:
2947#line 1645 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00002948{
2949 yyval.a_constr = asn1p_constraint_new(yylineno);
2950 checkmem(yyval.a_constr);
2951 yyval.a_constr->type = ACT_CT_CTDBY;
2952 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2953 checkmem(yyval.a_constr->value);
2954 yyval.a_constr->value->type = ATV_UNPARSED;
2955 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00002956 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002957case 207:
2958#line 1656 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00002959{ yyval.a_ctype = ACT_EL_RANGE; ;
Lev Walkinc8092cb2005-02-18 16:34:21 +00002960 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002961case 208:
2962#line 1657 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00002963{ yyval.a_ctype = ACT_EL_RLRANGE; ;
Lev Walkinff7dd142005-03-20 12:58:00 +00002964 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002965case 209:
2966#line 1658 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00002967{ yyval.a_ctype = ACT_EL_LLRANGE; ;
2968 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002969case 210:
2970#line 1659 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00002971{ yyval.a_ctype = ACT_EL_ULRANGE; ;
2972 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002973case 211:
2974#line 1663 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002975{
Lev Walkinceb20e72004-09-05 10:40:41 +00002976 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002977 ;
2978 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002979case 212:
2980#line 1666 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002981{
Lev Walkinceb20e72004-09-05 10:40:41 +00002982 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin1004aa92004-09-08 00:28:11 +00002983 ;
2984 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002985case 213:
2986#line 1672 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002987{
2988 yyval.a_value = asn1p_value_fromint(0);
2989 checkmem(yyval.a_value);
2990 yyval.a_value->type = ATV_FALSE;
2991 ;
2992 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002993case 214:
2994#line 1677 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002995{
2996 yyval.a_value = asn1p_value_fromint(1);
2997 checkmem(yyval.a_value);
2998 yyval.a_value->type = ATV_TRUE;
2999 ;
3000 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003001case 215:
3002#line 1682 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003003{
Lev Walkinf15320b2004-06-03 03:38:44 +00003004 yyval.a_value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003005 ;
3006 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003007case 216:
3008#line 1685 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003009{
Lev Walkin1e448d32005-03-24 14:26:38 +00003010 yyval.a_value = yyvsp[0].a_value;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003011 ;
3012 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003013case 217:
3014#line 1688 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003015{
Lev Walkinf15320b2004-06-03 03:38:44 +00003016 asn1p_ref_t *ref;
3017 int ret;
3018 ref = asn1p_ref_new(yylineno);
3019 checkmem(ref);
3020 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3021 checkmem(ret == 0);
3022 yyval.a_value = asn1p_value_fromref(ref, 0);
3023 checkmem(yyval.a_value);
3024 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003025 ;
3026 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003027case 218:
3028#line 1702 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003029{
Lev Walkinc8092cb2005-02-18 16:34:21 +00003030 asn1p_ref_t *ref;
3031 int ret;
3032 ref = asn1p_ref_new(yylineno);
3033 checkmem(ref);
3034 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3035 checkmem(ret == 0);
3036 yyval.a_value = asn1p_value_fromref(ref, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003037 checkmem(yyval.a_value);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003038 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003039 ;
3040 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003041case 219:
3042#line 1716 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003043{
Lev Walkine596bf02005-03-28 15:01:27 +00003044 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003045 ;
3046 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003047case 220:
3048#line 1719 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003049{
Lev Walkine596bf02005-03-28 15:01:27 +00003050 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003051 ;
3052 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003053case 221:
3054#line 1725 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003055{
Lev Walkine596bf02005-03-28 15:01:27 +00003056 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003057 ;
3058 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003059case 222:
3060#line 1728 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003061{
3062 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3063 ;
3064 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003065case 223:
3066#line 1734 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003067{
Lev Walkinf15320b2004-06-03 03:38:44 +00003068 yyval.a_constr = asn1p_constraint_new(yylineno);
3069 checkmem(yyval.a_constr);
3070 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkine596bf02005-03-28 15:01:27 +00003071 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003072 ;
3073 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003074case 224:
3075#line 1740 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003076{
Lev Walkinf15320b2004-06-03 03:38:44 +00003077 yyval.a_constr = asn1p_constraint_new(yylineno);
3078 checkmem(yyval.a_constr);
3079 yyval.a_constr->type = ACT_EL_VALUE;
3080 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3081 yyval.a_constr->presence = yyvsp[0].a_pres;
Lev Walkine596bf02005-03-28 15:01:27 +00003082 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003083 ;
3084 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003085case 225:
3086#line 1754 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003087{ yyval.a_pres = ACPRES_DEFAULT; ;
3088 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003089case 226:
3090#line 1755 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003091{ yyval.a_pres = yyvsp[0].a_pres; ;
3092 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003093case 227:
3094#line 1759 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003095{
Lev Walkinf15320b2004-06-03 03:38:44 +00003096 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003097 ;
3098 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003099case 228:
3100#line 1762 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003101{
Lev Walkinf15320b2004-06-03 03:38:44 +00003102 yyval.a_pres = ACPRES_ABSENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003103 ;
3104 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003105case 229:
3106#line 1765 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003107{
Lev Walkinf15320b2004-06-03 03:38:44 +00003108 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkin1004aa92004-09-08 00:28:11 +00003109 ;
3110 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003111case 230:
3112#line 1771 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003113{
3114 yyval.a_constr = yyvsp[0].a_constr;
3115 ;
3116 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003117case 231:
3118#line 1774 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003119{
3120 yyval.a_constr = yyvsp[0].a_constr;
3121 ;
3122 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003123case 232:
3124#line 1783 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003125{
Lev Walkinf15320b2004-06-03 03:38:44 +00003126 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3127 asn1p_constraint_t *ct;
3128 int ret;
3129 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3130 checkmem(ret == 0);
3131 ct = asn1p_constraint_new(yylineno);
3132 checkmem(yyval.a_constr);
3133 ct->type = ACT_EL_VALUE;
3134 ct->value = asn1p_value_fromref(ref, 0);
3135 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003136 ;
3137 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003138case 233:
3139#line 1798 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003140{
Lev Walkinf15320b2004-06-03 03:38:44 +00003141 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003142 ;
3143 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003144case 234:
3145#line 1804 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003146{
Lev Walkinf15320b2004-06-03 03:38:44 +00003147 yyval.a_constr = asn1p_constraint_new(yylineno);
3148 checkmem(yyval.a_constr);
3149 yyval.a_constr->type = ACT_EL_VALUE;
3150 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003151 ;
3152 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003153case 235:
3154#line 1810 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003155{
Lev Walkinf15320b2004-06-03 03:38:44 +00003156 asn1p_constraint_t *ct;
3157 ct = asn1p_constraint_new(yylineno);
3158 checkmem(ct);
3159 ct->type = ACT_EL_VALUE;
3160 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3161 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00003162 ;
3163 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003164case 236:
3165#line 1824 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003166{
Lev Walkinf15320b2004-06-03 03:38:44 +00003167 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3168 int ret;
3169 *p = '@';
3170 strcpy(p + 1, yyvsp[0].tv_str);
3171 yyval.a_ref = asn1p_ref_new(yylineno);
3172 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3173 checkmem(ret == 0);
3174 free(p);
3175 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003176 ;
3177 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003178case 237:
3179#line 1835 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003180{
Lev Walkinf15320b2004-06-03 03:38:44 +00003181 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3182 int ret;
3183 p[0] = '@';
3184 p[1] = '.';
3185 strcpy(p + 2, yyvsp[0].tv_str);
3186 yyval.a_ref = asn1p_ref_new(yylineno);
3187 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3188 checkmem(ret == 0);
3189 free(p);
3190 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003191 ;
3192 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003193case 238:
3194#line 1851 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003195{
Lev Walkinf15320b2004-06-03 03:38:44 +00003196 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003197 ;
3198 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003199case 239:
3200#line 1854 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003201{
Lev Walkinf15320b2004-06-03 03:38:44 +00003202 int l1 = strlen(yyvsp[-2].tv_str);
3203 int l3 = strlen(yyvsp[0].tv_str);
3204 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3205 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3206 yyval.tv_str[l1] = '.';
3207 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3208 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin1004aa92004-09-08 00:28:11 +00003209 ;
3210 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003211case 240:
3212#line 1872 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003213{
Lev Walkin9c974182004-09-15 11:59:51 +00003214 yyval.a_marker.flags = EM_NOMARK;
3215 yyval.a_marker.default_value = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00003216 ;
3217 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003218case 241:
3219#line 1876 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003220{ yyval.a_marker = yyvsp[0].a_marker; ;
Lev Walkinec208e62004-09-14 02:44:07 +00003221 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003222case 242:
3223#line 1880 "asn1p_y.y"
Lev Walkinec208e62004-09-14 02:44:07 +00003224{
Lev Walkin9c974182004-09-15 11:59:51 +00003225 yyval.a_marker.flags = EM_OPTIONAL;
3226 yyval.a_marker.default_value = 0;
Lev Walkinec208e62004-09-14 02:44:07 +00003227 ;
3228 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003229case 243:
3230#line 1884 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003231{
3232 yyval.a_marker.flags = EM_DEFAULT;
3233 yyval.a_marker.default_value = yyvsp[0].a_value;
3234 ;
3235 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003236case 244:
3237#line 1907 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003238{
Lev Walkinceb20e72004-09-05 10:40:41 +00003239 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003240 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003241 ;
3242 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003243case 245:
3244#line 1911 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003245{
Lev Walkine596bf02005-03-28 15:01:27 +00003246 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003247 ;
3248 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003249case 246:
3250#line 1917 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003251{
Lev Walkine596bf02005-03-28 15:01:27 +00003252 yyval.a_expr = asn1p_expr_new(yylineno);
3253 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003254 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3255 ;
3256 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003257case 247:
3258#line 1922 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003259{
3260 yyval.a_expr = yyvsp[-2].a_expr;
3261 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3262 ;
3263 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003264case 248:
3265#line 1929 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003266{
Lev Walkinceb20e72004-09-05 10:40:41 +00003267 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003268 checkmem(yyval.a_expr);
3269 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3270 yyval.a_expr->meta_type = AMT_VALUE;
3271 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003272 ;
3273 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003274case 249:
3275#line 1936 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003276{
Lev Walkinceb20e72004-09-05 10:40:41 +00003277 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003278 checkmem(yyval.a_expr);
3279 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3280 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1893ddf2005-03-20 14:28:32 +00003281 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3282 yyval.a_expr->value = yyvsp[-1].a_value;
3283 ;
3284 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003285case 250:
3286#line 1944 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003287{
3288 yyval.a_expr = asn1p_expr_new(yylineno);
3289 checkmem(yyval.a_expr);
3290 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3291 yyval.a_expr->meta_type = AMT_VALUE;
3292 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3293 yyval.a_expr->value = yyvsp[-1].a_value;
3294 ;
3295 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003296case 251:
3297#line 1952 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003298{
3299 yyval.a_expr = asn1p_expr_new(yylineno);
3300 checkmem(yyval.a_expr);
3301 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3302 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkinf15320b2004-06-03 03:38:44 +00003303 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003304 ;
3305 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003306case 252:
3307#line 1959 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003308{
Lev Walkinceb20e72004-09-05 10:40:41 +00003309 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003310 checkmem(yyval.a_expr);
3311 yyval.a_expr->Identifier = strdup("...");
3312 checkmem(yyval.a_expr->Identifier);
3313 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3314 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003315 ;
3316 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003317case 253:
3318#line 1970 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003319{
3320 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3321 checkmem(yyval.a_value);
3322 ;
Lev Walkinff7dd142005-03-20 12:58:00 +00003323 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003324case 254:
3325#line 1974 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003326{
3327 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3328 checkmem(yyval.a_value);
3329 ;
Lev Walkin1893ddf2005-03-20 14:28:32 +00003330 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003331case 255:
3332#line 2005 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003333{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
Lev Walkin1893ddf2005-03-20 14:28:32 +00003334 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003335case 256:
3336#line 2006 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003337{ yyval.a_tag = yyvsp[0].a_tag; ;
3338 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003339case 257:
3340#line 2010 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003341{
Lev Walkinc603f102005-01-23 09:51:44 +00003342 yyval.a_tag = yyvsp[-1].a_tag;
3343 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin1004aa92004-09-08 00:28:11 +00003344 ;
3345 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003346case 258:
3347#line 2017 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003348{
Lev Walkinc603f102005-01-23 09:51:44 +00003349 yyval.a_tag = yyvsp[-2].a_tag;
3350 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00003351 ;
3352 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003353case 259:
3354#line 2023 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003355{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00003356 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003357case 260:
3358#line 2024 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003359{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
Lev Walkin83cac2f2004-09-22 16:03:36 +00003360 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003361case 261:
3362#line 2025 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003363{ yyval.a_tag.tag_class = TC_APPLICATION; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003364 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003365case 262:
3366#line 2026 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003367{ yyval.a_tag.tag_class = TC_PRIVATE; ;
3368 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003369case 263:
3370#line 2030 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003371{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3372 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003373case 264:
3374#line 2031 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003375{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003376 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003377case 265:
3378#line 2032 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003379{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003380 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003381case 266:
3382#line 2036 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00003383{
3384 checkmem(yyvsp[0].tv_str);
3385 yyval.tv_str = yyvsp[0].tv_str;
3386 ;
3387 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003388case 267:
3389#line 2040 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00003390{
3391 checkmem(yyvsp[0].tv_str);
3392 yyval.tv_str = yyvsp[0].tv_str;
3393 ;
3394 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003395case 268:
3396#line 2048 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003397{
3398 checkmem(yyvsp[0].tv_str);
3399 yyval.tv_str = yyvsp[0].tv_str;
3400 ;
Lev Walkin1e448d32005-03-24 14:26:38 +00003401 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003402case 269:
3403#line 2055 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003404{ yyval.tv_str = 0; ;
3405 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003406case 270:
3407#line 2056 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00003408{
3409 yyval.tv_str = yyvsp[0].tv_str;
3410 ;
3411 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003412case 271:
Lev Walkin8f294e02005-06-06 08:28:58 +00003413#line 2062 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003414{
Lev Walkinceb20e72004-09-05 10:40:41 +00003415 checkmem(yyvsp[0].tv_str);
3416 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003417 ;
3418 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00003419}
3420 /* the action file gets copied in in place of this dollarsign */
3421#line 543 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00003422
3423 yyvsp -= yylen;
3424 yyssp -= yylen;
Lev Walkin1004aa92004-09-08 00:28:11 +00003425#ifdef YYLSP_NEEDED
3426 yylsp -= yylen;
3427#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003428
Lev Walkin1004aa92004-09-08 00:28:11 +00003429#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00003430 if (yydebug)
3431 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003432 short *ssp1 = yyss - 1;
3433 fprintf (stderr, "state stack now");
3434 while (ssp1 != yyssp)
3435 fprintf (stderr, " %d", *++ssp1);
3436 fprintf (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003437 }
3438#endif
3439
3440 *++yyvsp = yyval;
3441
Lev Walkin1004aa92004-09-08 00:28:11 +00003442#ifdef YYLSP_NEEDED
3443 yylsp++;
3444 if (yylen == 0)
3445 {
3446 yylsp->first_line = yylloc.first_line;
3447 yylsp->first_column = yylloc.first_column;
3448 yylsp->last_line = (yylsp-1)->last_line;
3449 yylsp->last_column = (yylsp-1)->last_column;
3450 yylsp->text = 0;
3451 }
3452 else
3453 {
3454 yylsp->last_line = (yylsp+yylen-1)->last_line;
3455 yylsp->last_column = (yylsp+yylen-1)->last_column;
3456 }
3457#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003458
Lev Walkin1004aa92004-09-08 00:28:11 +00003459 /* Now "shift" the result of the reduction.
3460 Determine what state that goes to,
3461 based on the state we popped back to
3462 and the rule number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003463
3464 yyn = yyr1[yyn];
3465
Lev Walkin1004aa92004-09-08 00:28:11 +00003466 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3467 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003468 yystate = yytable[yystate];
3469 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003470 yystate = yydefgoto[yyn - YYNTBASE];
Lev Walkinf15320b2004-06-03 03:38:44 +00003471
3472 goto yynewstate;
3473
Lev Walkin1004aa92004-09-08 00:28:11 +00003474yyerrlab: /* here on detecting error */
Lev Walkinf15320b2004-06-03 03:38:44 +00003475
Lev Walkin1004aa92004-09-08 00:28:11 +00003476 if (! yyerrstatus)
3477 /* If not already recovering from an error, report this error. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003478 {
3479 ++yynerrs;
Lev Walkin1004aa92004-09-08 00:28:11 +00003480
3481#ifdef YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003482 yyn = yypact[yystate];
3483
Lev Walkin1004aa92004-09-08 00:28:11 +00003484 if (yyn > YYFLAG && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003485 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003486 int size = 0;
3487 char *msg;
3488 int x, count;
Lev Walkinf15320b2004-06-03 03:38:44 +00003489
Lev Walkin1004aa92004-09-08 00:28:11 +00003490 count = 0;
3491 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3492 for (x = (yyn < 0 ? -yyn : 0);
Lev Walkin8f294e02005-06-06 08:28:58 +00003493 x < (sizeof(yytname) / sizeof(char *)); x++)
Lev Walkin1004aa92004-09-08 00:28:11 +00003494 if (yycheck[x + yyn] == x)
3495 size += strlen(yytname[x]) + 15, count++;
3496 msg = (char *) malloc(size + 15);
3497 if (msg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003498 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003499 strcpy(msg, "parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003500
Lev Walkin1004aa92004-09-08 00:28:11 +00003501 if (count < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003502 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003503 count = 0;
3504 for (x = (yyn < 0 ? -yyn : 0);
Lev Walkin8f294e02005-06-06 08:28:58 +00003505 x < (sizeof(yytname) / sizeof(char *)); x++)
Lev Walkin1004aa92004-09-08 00:28:11 +00003506 if (yycheck[x + yyn] == x)
Lev Walkinf15320b2004-06-03 03:38:44 +00003507 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003508 strcat(msg, count == 0 ? ", expecting `" : " or `");
3509 strcat(msg, yytname[x]);
3510 strcat(msg, "'");
3511 count++;
Lev Walkinf15320b2004-06-03 03:38:44 +00003512 }
3513 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003514 yyerror(msg);
3515 free(msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003516 }
3517 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003518 yyerror ("parse error; also virtual memory exceeded");
Lev Walkinf15320b2004-06-03 03:38:44 +00003519 }
3520 else
3521#endif /* YYERROR_VERBOSE */
Lev Walkin1004aa92004-09-08 00:28:11 +00003522 yyerror("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003523 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003524
Lev Walkinf15320b2004-06-03 03:38:44 +00003525 goto yyerrlab1;
Lev Walkin1004aa92004-09-08 00:28:11 +00003526yyerrlab1: /* here on error raised explicitly by an action */
Lev Walkinf15320b2004-06-03 03:38:44 +00003527
3528 if (yyerrstatus == 3)
3529 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003530 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003531
Lev Walkin1004aa92004-09-08 00:28:11 +00003532 /* return failure if at end of input */
Lev Walkinf15320b2004-06-03 03:38:44 +00003533 if (yychar == YYEOF)
Lev Walkin1004aa92004-09-08 00:28:11 +00003534 YYABORT;
Lev Walkinf15320b2004-06-03 03:38:44 +00003535
Lev Walkin1004aa92004-09-08 00:28:11 +00003536#if YYDEBUG != 0
3537 if (yydebug)
3538 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3539#endif
3540
Lev Walkinf15320b2004-06-03 03:38:44 +00003541 yychar = YYEMPTY;
3542 }
3543
Lev Walkin1004aa92004-09-08 00:28:11 +00003544 /* Else will try to reuse lookahead token
3545 after shifting the error token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003546
Lev Walkin1004aa92004-09-08 00:28:11 +00003547 yyerrstatus = 3; /* Each real token shifted decrements this */
Lev Walkinf15320b2004-06-03 03:38:44 +00003548
Lev Walkin1004aa92004-09-08 00:28:11 +00003549 goto yyerrhandle;
Lev Walkin459ab022004-09-07 10:39:09 +00003550
Lev Walkin1004aa92004-09-08 00:28:11 +00003551yyerrdefault: /* current state does not do anything special for the error token. */
Lev Walkin459ab022004-09-07 10:39:09 +00003552
Lev Walkin1004aa92004-09-08 00:28:11 +00003553#if 0
3554 /* This is wrong; only states that explicitly want error tokens
3555 should shift them. */
3556 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3557 if (yyn) goto yydefault;
Lev Walkinceb20e72004-09-05 10:40:41 +00003558#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003559
3560yyerrpop: /* pop the current state because it cannot handle the error token */
3561
3562 if (yyssp == yyss) YYABORT;
3563 yyvsp--;
3564 yystate = *--yyssp;
3565#ifdef YYLSP_NEEDED
3566 yylsp--;
3567#endif
3568
3569#if YYDEBUG != 0
3570 if (yydebug)
3571 {
3572 short *ssp1 = yyss - 1;
3573 fprintf (stderr, "Error: state stack now");
3574 while (ssp1 != yyssp)
3575 fprintf (stderr, " %d", *++ssp1);
3576 fprintf (stderr, "\n");
Lev Walkinceb20e72004-09-05 10:40:41 +00003577 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003578#endif
3579
3580yyerrhandle:
3581
3582 yyn = yypact[yystate];
3583 if (yyn == YYFLAG)
3584 goto yyerrdefault;
3585
3586 yyn += YYTERROR;
3587 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3588 goto yyerrdefault;
3589
3590 yyn = yytable[yyn];
3591 if (yyn < 0)
3592 {
3593 if (yyn == YYFLAG)
3594 goto yyerrpop;
3595 yyn = -yyn;
3596 goto yyreduce;
3597 }
3598 else if (yyn == 0)
3599 goto yyerrpop;
Lev Walkinf15320b2004-06-03 03:38:44 +00003600
3601 if (yyn == YYFINAL)
3602 YYACCEPT;
3603
Lev Walkin1004aa92004-09-08 00:28:11 +00003604#if YYDEBUG != 0
3605 if (yydebug)
3606 fprintf(stderr, "Shifting error token, ");
3607#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003608
3609 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00003610#ifdef YYLSP_NEEDED
3611 *++yylsp = yylloc;
3612#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003613
3614 yystate = yyn;
3615 goto yynewstate;
3616
Lev Walkin1004aa92004-09-08 00:28:11 +00003617 yyacceptlab:
3618 /* YYACCEPT comes here. */
3619 if (yyfree_stacks)
3620 {
3621 free (yyss);
3622 free (yyvs);
3623#ifdef YYLSP_NEEDED
3624 free (yyls);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003625#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003626 }
3627 return 0;
Lev Walkin459ab022004-09-07 10:39:09 +00003628
Lev Walkin1004aa92004-09-08 00:28:11 +00003629 yyabortlab:
3630 /* YYABORT comes here. */
3631 if (yyfree_stacks)
3632 {
3633 free (yyss);
3634 free (yyvs);
3635#ifdef YYLSP_NEEDED
3636 free (yyls);
Lev Walkin459ab022004-09-07 10:39:09 +00003637#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003638 }
3639 return 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003640}
Lev Walkin8f294e02005-06-06 08:28:58 +00003641#line 2068 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00003642
3643
3644
3645/*
3646 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3647 */
3648static asn1p_value_t *
3649_convert_bitstring2binary(char *str, int base) {
3650 asn1p_value_t *val;
3651 int slen;
3652 int memlen;
3653 int baselen;
3654 int bits;
3655 uint8_t *binary_vector;
3656 uint8_t *bv_ptr;
3657 uint8_t cur_val;
3658
3659 assert(str);
3660 assert(str[0] == '\'');
3661
3662 switch(base) {
3663 case 'B':
3664 baselen = 1;
3665 break;
3666 case 'H':
3667 baselen = 4;
3668 break;
3669 default:
3670 assert(base == 'B' || base == 'H');
3671 errno = EINVAL;
3672 return NULL;
3673 }
3674
3675 slen = strlen(str);
3676 assert(str[slen - 1] == base);
3677 assert(str[slen - 2] == '\'');
3678
3679 memlen = slen / (8 / baselen); /* Conservative estimate */
3680
3681 bv_ptr = binary_vector = malloc(memlen + 1);
3682 if(bv_ptr == NULL)
3683 /* ENOMEM */
3684 return NULL;
3685
3686 cur_val = 0;
3687 bits = 0;
3688 while(*(++str) != '\'') {
3689 switch(baselen) {
3690 case 1:
3691 switch(*str) {
3692 case '1':
3693 cur_val |= 1 << (7 - (bits % 8));
3694 case '0':
3695 break;
3696 default:
3697 assert(!"_y UNREACH1");
3698 case ' ': case '\r': case '\n':
3699 continue;
3700 }
3701 break;
3702 case 4:
3703 switch(*str) {
3704 case '0': case '1': case '2': case '3': case '4':
3705 case '5': case '6': case '7': case '8': case '9':
3706 cur_val |= (*str - '0') << (4 - (bits % 8));
3707 break;
3708 case 'A': case 'B': case 'C':
3709 case 'D': case 'E': case 'F':
3710 cur_val |= ((*str - 'A') + 10)
3711 << (4 - (bits % 8));
3712 break;
3713 default:
3714 assert(!"_y UNREACH2");
3715 case ' ': case '\r': case '\n':
3716 continue;
3717 }
3718 break;
3719 }
3720
3721 bits += baselen;
3722 if((bits % 8) == 0) {
3723 *bv_ptr++ = cur_val;
3724 cur_val = 0;
3725 }
3726 }
3727
3728 *bv_ptr = cur_val;
3729 assert((bv_ptr - binary_vector) <= memlen);
3730
3731 val = asn1p_value_frombits(binary_vector, bits, 0);
3732 if(val == NULL) {
3733 free(binary_vector);
3734 }
3735
3736 return val;
3737}
3738
3739extern char *asn1p_text;
3740
3741int
3742yyerror(const char *msg) {
3743 fprintf(stderr,
3744 "ASN.1 grammar parse error "
3745 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00003746 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003747 return -1;
3748}
3749
3750