blob: 9aa7e749b00b41f27c072bd19ca2c6719100071d [file] [log] [blame]
Lev Walkinf15320b2004-06-03 03:38:44 +00001
Lev Walkinb4fcdd22004-08-13 12:35:09 +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 Walkinb4fcdd22004-08-13 12:35:09 +00005#define YYBISON 1 /* Identify Bison output. */
Lev Walkinf15320b2004-06-03 03:38:44 +00006
7#define yyparse asn1p_parse
Lev Walkinb4fcdd22004-08-13 12:35:09 +00008#define yylex asn1p_lex
Lev Walkinf15320b2004-06-03 03:38:44 +00009#define yyerror asn1p_error
Lev Walkinb4fcdd22004-08-13 12:35:09 +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 Walkinb4fcdd22004-08-13 12:35:09 +000014#define TOK_PPEQ 257
15#define TOK_opaque 258
16#define TOK_bstring 259
17#define TOK_cstring 260
18#define TOK_hstring 261
19#define TOK_identifier 262
20#define TOK_number 263
21#define TOK_number_negative 264
22#define TOK_typereference 265
Lev Walkinf59d0752004-08-18 04:59:12 +000023#define TOK_capitalreference 266
Lev Walkinb4fcdd22004-08-13 12:35:09 +000024#define TOK_typefieldreference 267
25#define TOK_valuefieldreference 268
26#define TOK_ABSENT 269
27#define TOK_ABSTRACT_SYNTAX 270
28#define TOK_ALL 271
29#define TOK_ANY 272
30#define TOK_APPLICATION 273
31#define TOK_AUTOMATIC 274
32#define TOK_BEGIN 275
33#define TOK_BIT 276
34#define TOK_BMPString 277
35#define TOK_BOOLEAN 278
36#define TOK_BY 279
37#define TOK_CHARACTER 280
38#define TOK_CHOICE 281
39#define TOK_CLASS 282
40#define TOK_COMPONENT 283
41#define TOK_COMPONENTS 284
42#define TOK_CONSTRAINED 285
43#define TOK_CONTAINING 286
44#define TOK_DEFAULT 287
45#define TOK_DEFINITIONS 288
46#define TOK_DEFINED 289
47#define TOK_EMBEDDED 290
48#define TOK_ENCODED 291
Lev Walkinf59d0752004-08-18 04:59:12 +000049#define TOK_ENCODING_CONTROL 292
50#define TOK_END 293
51#define TOK_ENUMERATED 294
52#define TOK_EXPLICIT 295
53#define TOK_EXPORTS 296
54#define TOK_EXTENSIBILITY 297
55#define TOK_EXTERNAL 298
56#define TOK_FALSE 299
57#define TOK_FROM 300
58#define TOK_GeneralizedTime 301
59#define TOK_GeneralString 302
60#define TOK_GraphicString 303
61#define TOK_IA5String 304
62#define TOK_IDENTIFIER 305
63#define TOK_IMPLICIT 306
64#define TOK_IMPLIED 307
65#define TOK_IMPORTS 308
66#define TOK_INCLUDES 309
67#define TOK_INSTANCE 310
68#define TOK_INSTRUCTIONS 311
69#define TOK_INTEGER 312
70#define TOK_ISO646String 313
71#define TOK_MAX 314
72#define TOK_MIN 315
73#define TOK_MINUS_INFINITY 316
74#define TOK_NULL 317
75#define TOK_NumericString 318
76#define TOK_OBJECT 319
77#define TOK_ObjectDescriptor 320
78#define TOK_OCTET 321
79#define TOK_OF 322
80#define TOK_OPTIONAL 323
81#define TOK_PATTERN 324
82#define TOK_PDV 325
83#define TOK_PLUS_INFINITY 326
84#define TOK_PRESENT 327
85#define TOK_PrintableString 328
86#define TOK_PRIVATE 329
87#define TOK_REAL 330
88#define TOK_RELATIVE_OID 331
89#define TOK_SEQUENCE 332
90#define TOK_SET 333
91#define TOK_SIZE 334
92#define TOK_STRING 335
93#define TOK_SYNTAX 336
94#define TOK_T61String 337
95#define TOK_TAGS 338
96#define TOK_TeletexString 339
97#define TOK_TRUE 340
98#define TOK_TYPE_IDENTIFIER 341
99#define TOK_UNIQUE 342
100#define TOK_UNIVERSAL 343
101#define TOK_UniversalString 344
102#define TOK_UTCTime 345
103#define TOK_UTF8String 346
104#define TOK_VideotexString 347
105#define TOK_VisibleString 348
106#define TOK_WITH 349
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000107#define TOK_EXCEPT 350
Lev Walkinf59d0752004-08-18 04:59:12 +0000108#define TOK_INTERSECTION 351
109#define TOK_UNION 352
110#define TOK_TwoDots 353
111#define TOK_ThreeDots 354
112#define TOK_tag 355
Lev Walkinf15320b2004-06-03 03:38:44 +0000113
114#line 1 "asn1p_y.y"
115
116
117#include <stdlib.h>
118#include <stdio.h>
119#include <string.h>
120#include <errno.h>
121#include <assert.h>
122
123#include "asn1parser.h"
124
125#define YYPARSE_PARAM param
126#define YYERROR_VERBOSE
127
128int yylex(void);
129int yyerror(const char *msg);
130void asn1p_lexer_hack_push_opaque_state(void);
131void asn1p_lexer_hack_enable_with_syntax(void);
Lev Walkinf59d0752004-08-18 04:59:12 +0000132void asn1p_lexer_hack_push_encoding_control(void);
Lev Walkinf15320b2004-06-03 03:38:44 +0000133#define yylineno asn1p_lineno
134extern int asn1p_lineno;
135
136
137static asn1p_value_t *
138 _convert_bitstring2binary(char *str, int base);
139
140#define checkmem(ptr) do { \
141 if(!(ptr)) \
142 return yyerror("Memory failure"); \
143 } while(0)
144
145#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
146 if(arg1->type != constr_type) { \
147 int __ret; \
148 root = asn1p_constraint_new(yylineno); \
149 checkmem(root); \
150 root->type = constr_type; \
151 __ret = asn1p_constraint_insert(root, \
152 arg1); \
153 checkmem(__ret == 0); \
154 } else { \
155 root = arg1; \
156 } \
157 if(arg2) { \
158 int __ret \
159 = asn1p_constraint_insert(root, arg2); \
160 checkmem(__ret == 0); \
161 } \
162 } while(0)
163
164
Lev Walkinf59d0752004-08-18 04:59:12 +0000165#line 58 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +0000166typedef union {
167 asn1p_t *a_grammar;
168 asn1p_module_flags_e a_module_flags;
169 asn1p_module_t *a_module;
170 asn1p_expr_type_e a_type; /* ASN.1 Type */
171 asn1p_expr_t *a_expr; /* Constructed collection */
172 asn1p_constraint_t *a_constr; /* Constraint */
173 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
174 asn1p_xports_t *a_xports; /* IMports/EXports */
175 asn1p_oid_t *a_oid; /* Object Identifier */
176 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
177 struct asn1p_type_tag_s a_tag; /* A tag */
178 asn1p_ref_t *a_ref; /* Reference to custom type */
179 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
180 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
181 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
182 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
183 struct asn1p_param_s a_parg; /* A parameter argument */
184 asn1p_paramlist_t *a_plist; /* A pargs list */
185 enum asn1p_expr_marker_e a_marker; /* OPTIONAL/DEFAULT */
186 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
187 asn1_integer_t a_int;
188 char *tv_str;
189 struct {
190 char *buf;
191 int len;
192 } tv_opaque;
193 struct {
194 char *name;
195 struct asn1p_type_tag_s tag;
196 } tv_nametag;
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000197} YYSTYPE;
198#include <stdio.h>
199
200#ifndef __cplusplus
201#ifndef __STDC__
202#define const
203#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000204#endif
205
206
207
Lev Walkinf59d0752004-08-18 04:59:12 +0000208#define YYFINAL 381
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000209#define YYFLAG -32768
Lev Walkinf59d0752004-08-18 04:59:12 +0000210#define YYNTBASE 115
Lev Walkinf15320b2004-06-03 03:38:44 +0000211
Lev Walkinf59d0752004-08-18 04:59:12 +0000212#define YYTRANSLATE(x) ((unsigned)(x) <= 355 ? yytranslate[x] : 210)
Lev Walkinf15320b2004-06-03 03:38:44 +0000213
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000214static const char yytranslate[] = { 0,
215 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
216 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
217 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinf59d0752004-08-18 04:59:12 +0000218 2, 2, 111, 2, 2, 2, 2, 2, 2, 106,
219 107, 2, 2, 109, 2, 112, 2, 2, 2, 2,
220 2, 2, 2, 2, 2, 2, 2, 110, 108, 113,
221 2, 2, 2, 114, 2, 2, 2, 2, 2, 2,
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000222 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
223 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinf59d0752004-08-18 04:59:12 +0000224 2, 2, 2, 97, 2, 2, 2, 2, 2, 2,
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000225 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
226 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinf59d0752004-08-18 04:59:12 +0000227 2, 2, 104, 99, 105, 2, 2, 2, 2, 2,
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000228 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
229 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
230 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
231 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
232 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
233 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
234 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
235 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
236 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
237 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
238 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
239 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
240 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
241 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
242 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
243 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
244 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
245 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
246 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
247 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
248 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
Lev Walkinf59d0752004-08-18 04:59:12 +0000249 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
250 98, 100, 101, 102, 103
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000251};
Lev Walkinf15320b2004-06-03 03:38:44 +0000252
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000253#if YYDEBUG != 0
254static const short yyprhs[] = { 0,
255 0, 2, 4, 7, 16, 17, 19, 23, 26, 28,
256 31, 33, 38, 40, 41, 43, 45, 48, 51, 54,
Lev Walkinf59d0752004-08-18 04:59:12 +0000257 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
258 79, 81, 82, 86, 88, 92, 95, 97, 100, 105,
259 107, 111, 113, 115, 119, 123, 126, 128, 132, 134,
260 136, 143, 145, 147, 148, 150, 155, 160, 164, 171,
261 173, 177, 179, 183, 187, 189, 193, 195, 197, 199,
262 203, 209, 210, 212, 214, 218, 221, 225, 230, 231,
263 233, 234, 241, 243, 246, 248, 250, 253, 255, 259,
264 261, 265, 269, 271, 273, 275, 280, 282, 286, 288,
265 292, 296, 298, 302, 304, 308, 310, 312, 314, 316,
266 321, 322, 326, 328, 330, 332, 334, 336, 338, 342,
267 344, 347, 349, 351, 353, 355, 358, 361, 363, 365,
268 368, 371, 373, 375, 377, 379, 382, 384, 387, 389,
269 391, 393, 395, 397, 399, 401, 403, 405, 407, 409,
270 411, 413, 415, 420, 425, 430, 435, 440, 442, 447,
271 449, 451, 453, 455, 457, 458, 460, 465, 469, 474,
272 476, 480, 486, 488, 492, 496, 500, 505, 509, 511,
273 515, 519, 523, 527, 529, 531, 533, 536, 539, 543,
274 545, 547, 549, 551, 553, 555, 557, 563, 565, 569,
275 571, 575, 576, 578, 580, 582, 584, 586, 588, 592,
276 597, 599, 603, 606, 610, 612, 616, 617, 619, 621,
277 624, 626, 628, 629, 633, 636, 640, 642, 646, 648,
278 653, 658, 660, 662, 664, 666, 667, 669, 671, 674,
279 677, 679, 681, 683, 685, 687
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000280};
Lev Walkinf15320b2004-06-03 03:38:44 +0000281
Lev Walkinf59d0752004-08-18 04:59:12 +0000282static const short yyrhs[] = { 116,
283 0, 117, 0, 116, 117, 0, 206, 118, 34, 122,
284 3, 21, 125, 39, 0, 0, 119, 0, 104, 120,
285 105, 0, 104, 105, 0, 121, 0, 120, 121, 0,
286 208, 0, 208, 106, 9, 107, 0, 9, 0, 0,
287 123, 0, 124, 0, 123, 124, 0, 41, 84, 0,
288 52, 84, 0, 20, 84, 0, 43, 53, 0, 12,
289 57, 0, 0, 126, 0, 127, 0, 126, 127, 0,
290 129, 0, 134, 0, 140, 0, 164, 0, 137, 0,
291 0, 38, 12, 128, 0, 172, 0, 54, 130, 108,
292 0, 54, 46, 0, 131, 0, 130, 131, 0, 132,
293 46, 206, 118, 0, 133, 0, 132, 109, 133, 0,
294 206, 0, 208, 0, 42, 135, 108, 0, 42, 17,
295 108, 0, 42, 108, 0, 136, 0, 135, 109, 136,
296 0, 206, 0, 208, 0, 206, 138, 3, 104, 139,
297 105, 0, 159, 0, 169, 0, 0, 179, 0, 206,
298 3, 204, 87, 0, 206, 3, 204, 156, 0, 206,
299 3, 146, 0, 206, 104, 141, 105, 3, 156, 0,
300 142, 0, 141, 109, 142, 0, 206, 0, 206, 110,
301 208, 0, 169, 110, 208, 0, 144, 0, 143, 109,
302 144, 0, 158, 0, 208, 0, 155, 0, 145, 109,
303 155, 0, 28, 104, 148, 105, 150, 0, 0, 88,
304 0, 149, 0, 148, 109, 149, 0, 162, 196, 0,
305 162, 156, 147, 0, 162, 162, 196, 147, 0, 0,
306 151, 0, 0, 95, 82, 104, 152, 153, 105, 0,
307 154, 0, 153, 154, 0, 4, 0, 162, 0, 209,
308 156, 0, 157, 0, 158, 177, 196, 0, 102, 0,
309 102, 111, 167, 0, 102, 111, 203, 0, 171, 0,
310 172, 0, 173, 0, 206, 104, 143, 105, 0, 159,
311 0, 56, 68, 159, 0, 11, 0, 11, 112, 206,
312 0, 11, 112, 208, 0, 207, 0, 207, 112, 160,
313 0, 161, 0, 160, 112, 161, 0, 163, 0, 163,
314 0, 13, 0, 14, 0, 208, 138, 3, 165, 0,
315 0, 104, 166, 168, 0, 5, 0, 7, 0, 6,
316 0, 203, 0, 167, 0, 208, 0, 206, 112, 208,
317 0, 4, 0, 168, 4, 0, 24, 0, 63, 0,
318 76, 0, 170, 0, 67, 81, 0, 65, 51, 0,
319 77, 0, 44, 0, 36, 71, 0, 26, 81, 0,
320 91, 0, 47, 0, 58, 0, 40, 0, 22, 81,
321 0, 169, 0, 170, 200, 0, 23, 0, 48, 0,
322 49, 0, 50, 0, 59, 0, 64, 0, 74, 0,
323 83, 0, 85, 0, 90, 0, 92, 0, 93, 0,
324 94, 0, 66, 0, 27, 104, 145, 105, 0, 78,
325 104, 145, 105, 0, 79, 104, 145, 105, 0, 78,
326 177, 68, 158, 0, 79, 177, 68, 158, 0, 18,
327 0, 18, 35, 25, 208, 0, 99, 0, 100, 0,
328 97, 0, 98, 0, 96, 0, 0, 178, 0, 80,
329 106, 179, 107, 0, 106, 179, 107, 0, 178, 106,
330 179, 107, 0, 180, 0, 180, 109, 102, 0, 180,
331 109, 102, 109, 180, 0, 181, 0, 180, 174, 181,
332 0, 180, 175, 181, 0, 181, 176, 181, 0, 183,
333 106, 179, 107, 0, 106, 179, 107, 0, 184, 0,
334 184, 182, 184, 0, 61, 182, 184, 0, 184, 182,
335 60, 0, 61, 182, 60, 0, 190, 0, 185, 0,
336 101, 0, 101, 113, 0, 113, 101, 0, 113, 101,
337 113, 0, 80, 0, 46, 0, 203, 0, 208, 0,
338 6, 0, 45, 0, 86, 0, 95, 30, 104, 186,
339 105, 0, 187, 0, 186, 109, 187, 0, 102, 0,
340 208, 177, 188, 0, 0, 189, 0, 73, 0, 15,
341 0, 69, 0, 191, 0, 192, 0, 104, 206, 105,
342 0, 191, 104, 193, 105, 0, 194, 0, 193, 109,
343 194, 0, 114, 195, 0, 114, 112, 195, 0, 208,
344 0, 195, 112, 208, 0, 0, 197, 0, 69, 0,
345 33, 198, 0, 184, 0, 169, 0, 0, 104, 199,
346 168, 0, 104, 105, 0, 104, 201, 105, 0, 202,
347 0, 201, 109, 202, 0, 208, 0, 208, 106, 203,
348 107, 0, 208, 106, 167, 107, 0, 203, 0, 102,
349 0, 9, 0, 10, 0, 0, 205, 0, 103, 0,
350 103, 52, 0, 103, 41, 0, 11, 0, 12, 0,
351 12, 0, 8, 0, 208, 0, 208, 205, 0
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000352};
Lev Walkinf15320b2004-06-03 03:38:44 +0000353
354#endif
355
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000356#if YYDEBUG != 0
357static const short yyrline[] = { 0,
Lev Walkinf59d0752004-08-18 04:59:12 +0000358 296, 302, 308, 324, 349, 351, 354, 358, 363, 370,
359 378, 383, 387, 396, 398, 406, 410, 418, 422, 425,
360 428, 432, 452, 454, 462, 466, 498, 502, 511, 518,
361 531, 538, 540, 552, 565, 572, 577, 583, 589, 598,
362 604, 610, 617, 625, 629, 632, 639, 645, 651, 658,
363 667, 677, 685, 693, 695, 707, 719, 726, 742, 752,
364 762, 772, 777, 784, 794, 800, 806, 810, 822, 828,
365 834, 844, 846, 849, 857, 863, 872, 877, 894, 896,
366 901, 905, 910, 915, 921, 925, 950, 957, 962, 970,
367 979, 988, 999, 1003, 1009, 1017, 1041, 1048, 1062, 1071,
368 1081, 1091, 1099, 1120, 1129, 1138, 1139, 1141, 1148, 1160,
369 1170, 1172, 1177, 1181, 1185, 1189, 1192, 1197, 1209, 1225,
370 1236, 1250, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259,
371 1260, 1261, 1262, 1268, 1270, 1271, 1274, 1281, 1293, 1295,
372 1299, 1303, 1304, 1305, 1306, 1307, 1311, 1312, 1313, 1314,
373 1318, 1319, 1322, 1329, 1335, 1341, 1349, 1357, 1363, 1379,
374 1379, 1380, 1380, 1381, 1383, 1385, 1388, 1402, 1406, 1411,
375 1415, 1421, 1431, 1435, 1438, 1441, 1446, 1455, 1463, 1469,
376 1476, 1484, 1492, 1501, 1504, 1509, 1511, 1512, 1513, 1516,
377 1520, 1525, 1529, 1540, 1545, 1550, 1557, 1563, 1567, 1572,
378 1578, 1590, 1592, 1595, 1599, 1602, 1607, 1611, 1619, 1634,
379 1640, 1647, 1660, 1672, 1687, 1691, 1708, 1710, 1713, 1717,
380 1723, 1726, 1728, 1728, 1748, 1753, 1758, 1764, 1770, 1778,
381 1786, 1794, 1801, 1811, 1816, 1846, 1848, 1851, 1856, 1860,
382 1866, 1871, 1878, 1885, 1892, 1897
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000383};
384#endif
385
386
387#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
388
389static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
390"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
Lev Walkinf59d0752004-08-18 04:59:12 +0000391"TOK_number_negative","TOK_typereference","TOK_capitalreference","TOK_typefieldreference",
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000392"TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY",
393"TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN",
394"TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS",
395"TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED",
Lev Walkinf59d0752004-08-18 04:59:12 +0000396"TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL","TOK_END","TOK_ENUMERATED",
397"TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE",
398"TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString","TOK_GraphicString","TOK_IA5String",
399"TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE",
400"TOK_INSTRUCTIONS","TOK_INTEGER","TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY",
401"TOK_NULL","TOK_NumericString","TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET",
402"TOK_OF","TOK_OPTIONAL","TOK_PATTERN","TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT",
403"TOK_PrintableString","TOK_PRIVATE","TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE",
404"TOK_SET","TOK_SIZE","TOK_STRING","TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString",
405"TOK_TRUE","TOK_TYPE_IDENTIFIER","TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString",
406"TOK_UTCTime","TOK_UTF8String","TOK_VideotexString","TOK_VisibleString","TOK_WITH",
407"TOK_EXCEPT","'^'","TOK_INTERSECTION","'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots",
408"TOK_tag","'{'","'}'","'('","')'","';'","','","':'","'!'","'.'","'<'","'@'",
409"ParsedGrammar","ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000410"ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags",
411"ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody",
Lev Walkinf59d0752004-08-18 04:59:12 +0000412"ModuleSpecificationBody","ModuleSpecificationElement","@1","ImportsDefinition",
413"ImportsBundleSet","ImportsBundle","ImportsList","ImportsElement","ExportsDefinition",
414"ExportsBody","ExportsElement","ValueSetDefinition","DefinedTypeRef","optValueSetBody",
415"DataTypeReference","ParameterArgumentList","ParameterArgumentName","ActualParameterList",
416"ActualParameter","ConstructedDataTypeDefinition","ClassDeclaration","optUnique",
417"ClassFieldList","ClassField","optWithSyntax","WithSyntax","@2","WithSyntaxFormat",
418"WithSyntaxFormatToken","DataTypeMember","ConstrainedTypeDeclaration","ExtensionAndException",
419"TypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement",
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000420"ClassFieldIdentifier","ClassFieldName","ValueDefinition","InlineOrDefinedValue",
Lev Walkinf59d0752004-08-18 04:59:12 +0000421"@3","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
422"BasicType","BasicString","ConstructedType","Union","Intersection","Except",
423"optConstraints","SetOfConstraints","ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement",
424"ConstraintRangeSpec","ConstraintSpec","ConstraintValue","WithComponents","WithComponentsList",
425"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
426"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
427"ComponentIdList","optMarker","Marker","DefaultValue","@4","UniverationDefinition",
428"UniverationList","UniverationElement","SignedNumber","optTag","Tag","TypeRefName",
429"ObjectClassReference","Identifier","TaggedIdentifier", NULL
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000430};
431#endif
432
433static const short yyr1[] = { 0,
Lev Walkinf59d0752004-08-18 04:59:12 +0000434 115, 116, 116, 117, 118, 118, 119, 119, 120, 120,
435 121, 121, 121, 122, 122, 123, 123, 124, 124, 124,
436 124, 124, 125, 125, 126, 126, 127, 127, 127, 127,
437 127, 128, 127, 127, 129, 129, 130, 130, 131, 132,
438 132, 133, 133, 134, 134, 134, 135, 135, 136, 136,
439 137, 138, 138, 139, 139, 140, 140, 140, 140, 141,
440 141, 142, 142, 142, 143, 143, 144, 144, 145, 145,
441 146, 147, 147, 148, 148, 149, 149, 149, 150, 150,
442 152, 151, 153, 153, 154, 154, 155, 155, 156, 157,
443 157, 157, 158, 158, 158, 158, 158, 158, 159, 159,
444 159, 159, 159, 160, 160, 161, 162, 163, 163, 164,
445 166, 165, 165, 165, 165, 165, 165, 167, 167, 168,
446 168, 169, 169, 169, 169, 169, 169, 169, 169, 169,
447 169, 169, 169, 170, 170, 170, 171, 171, 172, 172,
448 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
449 172, 172, 173, 173, 173, 173, 173, 173, 173, 174,
450 174, 175, 175, 176, 177, 177, 177, 178, 178, 179,
451 179, 179, 180, 180, 180, 180, 181, 181, 181, 181,
452 181, 181, 181, 181, 181, 182, 182, 182, 182, 183,
453 183, 184, 184, 184, 184, 184, 185, 186, 186, 187,
454 187, 188, 188, 189, 189, 189, 190, 190, 191, 192,
455 193, 193, 194, 194, 195, 195, 196, 196, 197, 197,
456 198, 198, 199, 198, 200, 200, 201, 201, 202, 202,
457 202, 202, 202, 203, 203, 204, 204, 205, 205, 205,
458 206, 206, 207, 208, 209, 209
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000459};
460
461static const short yyr2[] = { 0,
462 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
463 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
Lev Walkinf59d0752004-08-18 04:59:12 +0000464 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
465 1, 0, 3, 1, 3, 2, 1, 2, 4, 1,
466 3, 1, 1, 3, 3, 2, 1, 3, 1, 1,
467 6, 1, 1, 0, 1, 4, 4, 3, 6, 1,
468 3, 1, 3, 3, 1, 3, 1, 1, 1, 3,
469 5, 0, 1, 1, 3, 2, 3, 4, 0, 1,
470 0, 6, 1, 2, 1, 1, 2, 1, 3, 1,
471 3, 3, 1, 1, 1, 4, 1, 3, 1, 3,
472 3, 1, 3, 1, 3, 1, 1, 1, 1, 4,
473 0, 3, 1, 1, 1, 1, 1, 1, 3, 1,
474 2, 1, 1, 1, 1, 2, 2, 1, 1, 2,
475 2, 1, 1, 1, 1, 2, 1, 2, 1, 1,
476 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
477 1, 1, 4, 4, 4, 4, 4, 1, 4, 1,
478 1, 1, 1, 1, 0, 1, 4, 3, 4, 1,
479 3, 5, 1, 3, 3, 3, 4, 3, 1, 3,
480 3, 3, 3, 1, 1, 1, 2, 2, 3, 1,
481 1, 1, 1, 1, 1, 1, 5, 1, 3, 1,
482 3, 0, 1, 1, 1, 1, 1, 1, 3, 4,
483 1, 3, 2, 3, 1, 3, 0, 1, 1, 2,
484 1, 1, 0, 3, 2, 3, 1, 3, 1, 4,
485 4, 1, 1, 1, 1, 0, 1, 1, 2, 2,
486 1, 1, 1, 1, 1, 2
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000487};
488
489static const short yydefact[] = { 0,
Lev Walkinf59d0752004-08-18 04:59:12 +0000490 241, 242, 1, 2, 5, 3, 0, 0, 6, 244,
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000491 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
Lev Walkinf59d0752004-08-18 04:59:12 +0000492 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
493 18, 21, 19, 0, 17, 12, 23, 139, 0, 0,
494 140, 141, 142, 0, 143, 144, 152, 145, 146, 147,
495 148, 149, 150, 151, 0, 24, 25, 27, 28, 31,
496 29, 30, 34, 0, 0, 32, 0, 46, 0, 47,
497 49, 50, 36, 0, 37, 0, 40, 42, 43, 4,
498 26, 236, 99, 243, 0, 122, 0, 0, 135, 129,
499 133, 134, 123, 0, 0, 124, 128, 132, 0, 0,
500 52, 53, 125, 102, 0, 33, 45, 44, 0, 35,
501 38, 0, 0, 0, 238, 58, 0, 237, 0, 136,
502 131, 130, 127, 126, 0, 60, 0, 62, 0, 0,
503 0, 48, 5, 41, 0, 240, 239, 99, 243, 158,
504 0, 0, 165, 165, 56, 57, 165, 97, 137, 125,
505 93, 94, 95, 0, 100, 101, 0, 0, 0, 0,
506 54, 108, 109, 103, 104, 106, 113, 115, 114, 234,
507 235, 111, 110, 117, 116, 0, 118, 39, 0, 74,
508 217, 107, 0, 0, 0, 0, 0, 0, 0, 166,
509 0, 0, 217, 0, 138, 0, 0, 61, 64, 63,
510 194, 195, 191, 0, 190, 196, 0, 0, 0, 0,
511 55, 170, 173, 0, 179, 185, 184, 207, 208, 192,
512 193, 0, 0, 0, 79, 0, 0, 219, 72, 217,
513 76, 218, 0, 90, 0, 69, 88, 245, 0, 98,
514 0, 0, 0, 0, 0, 0, 0, 89, 233, 225,
515 0, 227, 232, 229, 0, 65, 67, 68, 59, 186,
516 0, 0, 0, 0, 0, 51, 162, 163, 160, 161,
517 0, 0, 0, 164, 0, 0, 0, 0, 105, 120,
518 112, 119, 0, 71, 80, 75, 223, 222, 221, 220,
519 73, 77, 72, 159, 0, 153, 0, 246, 87, 0,
520 154, 168, 156, 0, 155, 157, 226, 0, 0, 96,
521 0, 187, 188, 183, 181, 0, 209, 178, 171, 174,
522 175, 176, 0, 182, 180, 0, 0, 211, 121, 0,
523 0, 78, 91, 92, 70, 167, 169, 228, 0, 0,
524 66, 189, 200, 0, 198, 165, 0, 177, 0, 213,
525 215, 210, 0, 81, 224, 231, 230, 197, 0, 202,
526 172, 214, 0, 212, 0, 199, 205, 206, 204, 201,
527 203, 216, 85, 0, 83, 86, 82, 84, 0, 0,
528 0
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000529};
530
Lev Walkinf59d0752004-08-18 04:59:12 +0000531static const short yydefgoto[] = { 379,
532 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
533 56, 57, 106, 58, 74, 75, 76, 77, 59, 69,
534 70, 60, 100, 210, 61, 125, 126, 255, 256, 235,
535 116, 292, 179, 180, 284, 285, 365, 374, 375, 236,
536 146, 237, 147, 148, 164, 165, 181, 182, 62, 173,
537 223, 174, 281, 149, 150, 151, 152, 153, 272, 273,
538 275, 189, 190, 211, 212, 213, 262, 214, 215, 216,
539 344, 345, 370, 371, 217, 218, 219, 327, 328, 350,
540 231, 232, 290, 331, 195, 251, 252, 220, 117, 118,
541 154, 104, 221, 239
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000542};
543
Lev Walkinf59d0752004-08-18 04:59:12 +0000544static const short yypact[] = { 41,
545-32768,-32768, 41,-32768, -62,-32768, 10, 54,-32768,-32768,
546-32768,-32768, 20,-32768, -20, 44,-32768,-32768, 95, 78,
547 72, 83, 45, 112, 187, 44,-32768, 94,-32768,-32768,
548-32768,-32768,-32768, 189,-32768,-32768, 398,-32768, 223, 23,
549-32768,-32768,-32768, 57,-32768,-32768,-32768,-32768,-32768,-32768,
550-32768,-32768,-32768,-32768, 201, 398,-32768,-32768,-32768,-32768,
551-32768,-32768,-32768, 194, 696,-32768, 140,-32768, 53,-32768,
552-32768,-32768,-32768, 47,-32768, -25,-32768,-32768,-32768,-32768,
553-32768, -8, 138,-32768, 173,-32768, 185, 196,-32768,-32768,
554-32768,-32768,-32768, 209, 188,-32768,-32768,-32768, 713, 265,
555-32768,-32768,-32768, 160, 271,-32768,-32768,-32768, 157,-32768,
556-32768, 41, 157, 174, 108,-32768, 559,-32768, 157,-32768,
557-32768,-32768,-32768,-32768, 90,-32768, 169, 171, 176, 137,
558 71,-32768, -62,-32768, 137,-32768,-32768, 59, 178, 248,
559 180, 218, 42, 60,-32768,-32768, -33,-32768,-32768, 183,
560-32768,-32768,-32768, 190,-32768,-32768, 289, 713, 287, 287,
561 133,-32768,-32768, 193,-32768,-32768,-32768,-32768,-32768,-32768,
562-32768,-32768,-32768,-32768,-32768, 203,-32768,-32768, 93,-32768,
563 482,-32768, 272, 9, 170, 200, 9, 133, 231, 202,
564 9, 232, 30, 52,-32768, 337, 636,-32768,-32768,-32768,
565-32768,-32768,-32768, -69,-32768,-32768, 283, 41, 133, 211,
566-32768, 124, 221, 212, -69,-32768,-32768, 216,-32768,-32768,
567-32768, 137, 317, 287, 227, 137, 267,-32768, 235, 30,
568-32768,-32768, 287, 213, 98,-32768,-32768, 224, 636,-32768,
569 133, 103, 219, 636, 133, 106, 636,-32768,-32768,-32768,
570 120,-32768,-32768, 222, 122,-32768,-32768,-32768,-32768, 220,
571 228, 84, 233, 226, 229,-32768,-32768,-32768,-32768,-32768,
572 236, 133, 133,-32768, 133, 133, 128, 225,-32768,-32768,
573 331,-32768, 258,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
574-32768,-32768, 235,-32768, 234,-32768, 9,-32768,-32768, 239,
575-32768,-32768,-32768, 240,-32768,-32768,-32768, 14, 234,-32768,
576 337,-32768, 237,-32768,-32768, 19,-32768,-32768, 242,-32768,
577-32768,-32768, 247,-32768,-32768, 7, 127,-32768,-32768, 253,
578 317,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 255, 259,
579-32768,-32768,-32768, 142,-32768, -33, 133,-32768, 287, 256,
580-32768,-32768, 225,-32768, 331,-32768,-32768,-32768, 19, 28,
581 165, 256, 287,-32768, 179,-32768,-32768,-32768,-32768,-32768,
582-32768,-32768,-32768, 12,-32768,-32768,-32768,-32768, 341, 365,
583-32768
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000584};
585
586static const short yypgoto[] = {-32768,
Lev Walkinf59d0752004-08-18 04:59:12 +0000587-32768, 364, 241,-32768,-32768, 356,-32768,-32768, 344,-32768,
588-32768, 316,-32768,-32768,-32768, 301,-32768, 263,-32768,-32768,
589 269,-32768, 314,-32768,-32768,-32768, 230,-32768, 69, 62,
590-32768, 96,-32768, 156,-32768,-32768,-32768,-32768, 16, 86,
591 -131,-32768, -193, -55,-32768, 172, -174, -94,-32768,-32768,
592-32768, -162, 61, -53, -51,-32768, 89,-32768,-32768,-32768,
593-32768, -142,-32768, -118, 50, -17, 184,-32768, -188,-32768,
594-32768, 32,-32768,-32768,-32768,-32768,-32768,-32768, 55, 49,
595 -121,-32768,-32768,-32768,-32768,-32768, 97, -123,-32768, 181,
596 1,-32768, -7,-32768
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000597};
598
599
Lev Walkinf59d0752004-08-18 04:59:12 +0000600#define YYLAST 804
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000601
602
603static const short yytable[] = { 15,
Lev Walkinf59d0752004-08-18 04:59:12 +0000604 5, 192, 257, 5, 193, 15, 230, 175, 101, 101,
605 102, 102, 103, 103, 10, 373, 10, 10, 11, 114,
606 112, 10, 170, 171, 162, 163, 10, 10, 11, 65,
607 10, 260, 72, 1, 2, 166, 79, 64, 289, 67,
608 71, 7, 367, 261, 78, 127, 186, 103, 65, 229,
609 303, 1, 2, 306, 10, 20, 64, 1, 2, 10,
610 170, 171, 227, 21, 10, 259, 79, 1, 2, 243,
611 253, 248, 188, 315, 78, 167, 168, 169, 10, 170,
612 171, 1, 2, 113, 22, 19, 23, 16, 325, 201,
613 265, 10, 170, 171, 115, 24, 368, 32, 228, 128,
614 369, 72, 73, 28, 127, 79, 103, 299, 293, 71,
615 234, 156, 133, 78, 12, 249, 377, 257, 349, 155,
616 343, 186, 300, 177, 17, 63, 304, 166, 202, 240,
617 68, 176, 333, 201, 29, 10, 170, 171, 201, 186,
618 10, 170, 171, 314, 63, 187, 339, 188, 136, 162,
619 163, 199, 200, 249, 110, 30, 250, 323, 128, 137,
620 108, 109, -241, 191, 10, 188, 31, 1, 2, 206,
621 119, 334, 202, 288, 172, 103, 238, 202, 203, 238,
622 83, 84, 373, 238, 253, 340, 254, 324, 258, 34,
623 376, 162, 163, 204, 157, 33, 82, 225, 158, 376,
624 36, 226, 296, 360, 83, 84, 297, 301, 264, 37,
625 305, 297, 205, 206, 297, 85, 282, 86, 206, 87,
626 267, 268, 269, 270, 307, 294, 310, 207, 308, 88,
627 311, 352, 271, 89, 66, 353, 208, 90, 209, 80,
628 91, 10, 170, 171, 1, 2, 358, 107, 242, 119,
629 359, 92, 246, 120, 320, 321, 93, 322, 94, 123,
630 95, 267, 268, 269, 270, 121, 122, 129, 124, 96,
631 97, 130, 201, 131, 10, 170, 171, 135, 159, 161,
632 160, -242, 183, 184, 98, 185, 194, 177, 85, 238,
633 86, 197, 87, 196, 10, 176, 233, 99, 244, 247,
634 254, 177, 88, 258, 222, 241, 89, 245, 346, 176,
635 90, 202, 263, 91, 224, 266, 274, 276, 351, 278,
636 280, 283, 291, 295, 92, 302, 115, 309, 313, 93,
637 317, 94, 312, 95, 329, 318, 316, 319, 326, 330,
638 380, 351, 96, 97, 10, 336, 337, 138, 139, 342,
639 347, 346, 206, 348, 140, 372, 354, 98, 85, 38,
640 86, 356, 87, 141, 381, 357, 6, 363, 18, 35,
641 287, 81, 88, 178, 111, 134, 89, 132, 105, 341,
642 90, 286, 335, 91, 41, 42, 43, 198, 332, 378,
643 366, 355, 142, 279, 92, 45, 361, 362, 277, 93,
644 46, 94, 47, 95, 338, 10, 0, 364, 1, 2,
645 48, 0, 96, 97, 143, 144, 0, 0, 298, 49,
646 38, 50, 0, 0, 0, 0, 51, 98, 52, 53,
647 54, 0, 0, 0, 0, 39, 0, 0, 0, 40,
648 0, 0, 0, 0, 0, 41, 42, 43, 0, 0,
649 0, 44, 0, 0, 0, 0, 45, 0, 0, 0,
650 0, 46, 0, 47, 0, 0, 0, 0, 0, 0,
651 0, 48, 0, 0, 0, 0, 0, 0, 0, 0,
652 49, 0, 50, 0, 0, 0, 0, 51, 0, 52,
653 53, 54, 138, 139, 162, 163, 0, 0, 0, 140,
654 0, 0, 0, 85, 38, 86, 0, 87, 141, 0,
655 0, 0, 0, 0, 227, 0, 0, 88, 0, 0,
656 0, 89, 0, 0, 0, 90, 0, 0, 91, 41,
657 42, 43, 0, 0, 0, 0, 0, 142, 0, 92,
658 45, 0, 0, 0, 93, 46, 94, 47, 95, 0,
659 228, 0, 0, 0, 0, 48, 0, 96, 97, 143,
660 144, 0, 0, 0, 49, 0, 50, 0, 0, 138,
661 139, 51, 98, 52, 53, 54, 140, 0, 0, 0,
662 85, 38, 86, 0, 87, 141, 0, 0, 0, 0,
663 0, 0, 0, 0, 88, 0, 0, 0, 89, 0,
664 0, 0, 90, 0, 0, 91, 41, 42, 43, 0,
665 0, 0, 0, 0, 142, 0, 92, 45, 0, 0,
666 0, 93, 46, 94, 47, 95, 0, 0, 0, 0,
667 0, 0, 48, 0, 96, 97, 143, 144, 0, 0,
668 0, 49, 0, 50, 0, 145, 138, 139, 51, 98,
669 52, 53, 54, 140, 0, 0, 0, 85, 38, 86,
670 0, 87, 141, 0, 0, 0, 0, 0, 0, 0,
671 0, 88, 0, 0, 0, 89, 0, 0, 0, 90,
672 0, 0, 91, 41, 42, 43, 0, 0, 0, 0,
673 0, 142, 0, 92, 45, 0, 0, 0, 93, 46,
674 94, 47, 95, 0, 0, 0, 83, 84, 0, 48,
675 0, 96, 97, 143, 144, 0, 0, 85, 49, 86,
676 50, 87, 0, 1, 2, 51, 98, 52, 53, 54,
677 0, 88, 0, 0, 85, 89, 86, 0, 87, 90,
678 0, 0, 91, 0, 0, 0, 0, 0, 88, 0,
679 0, 0, 89, 92, 0, 0, 90, 0, 93, 91,
680 94, 0, 95, 0, 0, 0, 0, 0, 0, 0,
681 92, 96, 97, 0, 0, 93, 0, 94, 0, 95,
682 0, 0, 0, 0, 0, 0, 98, 0, 96, 97,
683 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
684 0, 0, 0, 98
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000685};
686
687static const short yycheck[] = { 7,
Lev Walkinf59d0752004-08-18 04:59:12 +0000688 0, 144, 196, 3, 147, 13, 181, 131, 64, 65,
689 64, 65, 64, 65, 8, 4, 8, 8, 9, 28,
690 46, 8, 9, 10, 13, 14, 8, 8, 9, 37,
691 8, 101, 40, 11, 12, 130, 44, 37, 227, 17,
692 40, 104, 15, 113, 44, 99, 80, 99, 56, 181,
693 244, 11, 12, 247, 8, 12, 56, 11, 12, 8,
694 9, 10, 33, 20, 8, 197, 74, 11, 12, 188,
695 194, 193, 106, 262, 74, 5, 6, 7, 8, 9,
696 10, 11, 12, 109, 41, 106, 43, 34, 277, 6,
697 209, 8, 9, 10, 103, 52, 69, 53, 69, 99,
698 73, 109, 46, 9, 158, 113, 158, 239, 230, 109,
699 102, 119, 112, 113, 105, 102, 105, 311, 112, 119,
700 102, 80, 241, 131, 105, 37, 245, 222, 45, 185,
701 108, 131, 295, 6, 57, 8, 9, 10, 6, 80,
702 8, 9, 10, 60, 56, 104, 309, 106, 41, 13,
703 14, 159, 160, 102, 108, 84, 105, 276, 158, 52,
704 108, 109, 104, 104, 8, 106, 84, 11, 12, 86,
705 112, 295, 45, 227, 104, 227, 184, 45, 46, 187,
706 11, 12, 4, 191, 308, 309, 194, 60, 196, 3,
707 365, 13, 14, 61, 105, 84, 3, 105, 109, 374,
708 107, 109, 105, 346, 11, 12, 109, 105, 208, 21,
709 105, 109, 80, 86, 109, 22, 224, 24, 86, 26,
710 97, 98, 99, 100, 105, 233, 105, 95, 109, 36,
711 109, 105, 109, 40, 12, 109, 104, 44, 106, 39,
712 47, 8, 9, 10, 11, 12, 105, 108, 187, 112,
713 109, 58, 191, 81, 272, 273, 63, 275, 65, 51,
714 67, 97, 98, 99, 100, 81, 71, 3, 81, 76,
715 77, 112, 6, 3, 8, 9, 10, 104, 110, 104,
716 110, 104, 35, 104, 91, 68, 104, 295, 22, 297,
717 24, 3, 26, 104, 8, 295, 25, 104, 68, 68,
718 308, 309, 36, 311, 112, 106, 40, 106, 316, 309,
719 44, 45, 30, 47, 112, 105, 96, 106, 326, 104,
720 4, 95, 88, 111, 58, 107, 103, 106, 101, 63,
721 105, 65, 113, 67, 4, 107, 104, 102, 114, 82,
722 0, 349, 76, 77, 8, 107, 107, 11, 12, 113,
723 109, 359, 86, 107, 18, 363, 104, 91, 22, 23,
724 24, 107, 26, 27, 0, 107, 3, 112, 13, 26,
725 104, 56, 36, 133, 74, 113, 40, 109, 65, 311,
726 44, 226, 297, 47, 48, 49, 50, 158, 293, 374,
727 359, 331, 56, 222, 58, 59, 347, 349, 215, 63,
728 64, 65, 66, 67, 308, 8, -1, 353, 11, 12,
729 74, -1, 76, 77, 78, 79, -1, -1, 238, 83,
730 23, 85, -1, -1, -1, -1, 90, 91, 92, 93,
731 94, -1, -1, -1, -1, 38, -1, -1, -1, 42,
732 -1, -1, -1, -1, -1, 48, 49, 50, -1, -1,
733 -1, 54, -1, -1, -1, -1, 59, -1, -1, -1,
734 -1, 64, -1, 66, -1, -1, -1, -1, -1, -1,
735 -1, 74, -1, -1, -1, -1, -1, -1, -1, -1,
736 83, -1, 85, -1, -1, -1, -1, 90, -1, 92,
737 93, 94, 11, 12, 13, 14, -1, -1, -1, 18,
738 -1, -1, -1, 22, 23, 24, -1, 26, 27, -1,
739 -1, -1, -1, -1, 33, -1, -1, 36, -1, -1,
740 -1, 40, -1, -1, -1, 44, -1, -1, 47, 48,
741 49, 50, -1, -1, -1, -1, -1, 56, -1, 58,
742 59, -1, -1, -1, 63, 64, 65, 66, 67, -1,
743 69, -1, -1, -1, -1, 74, -1, 76, 77, 78,
744 79, -1, -1, -1, 83, -1, 85, -1, -1, 11,
745 12, 90, 91, 92, 93, 94, 18, -1, -1, -1,
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000746 22, 23, 24, -1, 26, 27, -1, -1, -1, -1,
Lev Walkinf59d0752004-08-18 04:59:12 +0000747 -1, -1, -1, -1, 36, -1, -1, -1, 40, -1,
748 -1, -1, 44, -1, -1, 47, 48, 49, 50, -1,
749 -1, -1, -1, -1, 56, -1, 58, 59, -1, -1,
750 -1, 63, 64, 65, 66, 67, -1, -1, -1, -1,
751 -1, -1, 74, -1, 76, 77, 78, 79, -1, -1,
752 -1, 83, -1, 85, -1, 87, 11, 12, 90, 91,
753 92, 93, 94, 18, -1, -1, -1, 22, 23, 24,
754 -1, 26, 27, -1, -1, -1, -1, -1, -1, -1,
755 -1, 36, -1, -1, -1, 40, -1, -1, -1, 44,
756 -1, -1, 47, 48, 49, 50, -1, -1, -1, -1,
757 -1, 56, -1, 58, 59, -1, -1, -1, 63, 64,
758 65, 66, 67, -1, -1, -1, 11, 12, -1, 74,
759 -1, 76, 77, 78, 79, -1, -1, 22, 83, 24,
760 85, 26, -1, 11, 12, 90, 91, 92, 93, 94,
761 -1, 36, -1, -1, 22, 40, 24, -1, 26, 44,
762 -1, -1, 47, -1, -1, -1, -1, -1, 36, -1,
763 -1, -1, 40, 58, -1, -1, 44, -1, 63, 47,
764 65, -1, 67, -1, -1, -1, -1, -1, -1, -1,
765 58, 76, 77, -1, -1, 63, -1, 65, -1, 67,
766 -1, -1, -1, -1, -1, -1, 91, -1, 76, 77,
767 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
768 -1, -1, -1, 91
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000769};
770/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
771#line 3 "/usr/share/bison.simple"
772/* This file comes from bison-1.28. */
773
774/* Skeleton output parser for bison,
775 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
776
777 This program is free software; you can redistribute it and/or modify
778 it under the terms of the GNU General Public License as published by
779 the Free Software Foundation; either version 2, or (at your option)
780 any later version.
781
782 This program is distributed in the hope that it will be useful,
783 but WITHOUT ANY WARRANTY; without even the implied warranty of
784 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
785 GNU General Public License for more details.
786
787 You should have received a copy of the GNU General Public License
788 along with this program; if not, write to the Free Software
789 Foundation, Inc., 59 Temple Place - Suite 330,
790 Boston, MA 02111-1307, USA. */
791
792/* As a special exception, when this file is copied by Bison into a
793 Bison output file, you may use that output file without restriction.
794 This special exception was added by the Free Software Foundation
795 in version 1.24 of Bison. */
796
797/* This is the parser code that is written into each bison parser
798 when the %semantic_parser declaration is not specified in the grammar.
799 It was written by Richard Stallman by simplifying the hairy parser
800 used when %semantic_parser is specified. */
801
802#ifndef YYSTACK_USE_ALLOCA
803#ifdef alloca
804#define YYSTACK_USE_ALLOCA
805#else /* alloca not defined */
806#ifdef __GNUC__
807#define YYSTACK_USE_ALLOCA
808#define alloca __builtin_alloca
809#else /* not GNU C. */
810#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
811#define YYSTACK_USE_ALLOCA
812#include <alloca.h>
813#else /* not sparc */
814/* We think this test detects Watcom and Microsoft C. */
815/* This used to test MSDOS, but that is a bad idea
816 since that symbol is in the user namespace. */
817#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
818#if 0 /* No need for malloc.h, which pollutes the namespace;
819 instead, just don't use alloca. */
820#include <malloc.h>
821#endif
822#else /* not MSDOS, or __TURBOC__ */
823#if defined(_AIX)
824/* I don't know what this was needed for, but it pollutes the namespace.
825 So I turned it off. rms, 2 May 1997. */
826/* #include <malloc.h> */
827 #pragma alloca
828#define YYSTACK_USE_ALLOCA
829#else /* not MSDOS, or __TURBOC__, or _AIX */
830#if 0
831#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
832 and on HPUX 10. Eventually we can turn this on. */
833#define YYSTACK_USE_ALLOCA
834#define alloca __builtin_alloca
835#endif /* __hpux */
836#endif
837#endif /* not _AIX */
838#endif /* not MSDOS, or __TURBOC__ */
839#endif /* not sparc */
840#endif /* not GNU C */
841#endif /* alloca not defined */
842#endif /* YYSTACK_USE_ALLOCA not defined */
843
844#ifdef YYSTACK_USE_ALLOCA
845#define YYSTACK_ALLOC alloca
Lev Walkinf15320b2004-06-03 03:38:44 +0000846#else
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000847#define YYSTACK_ALLOC malloc
Lev Walkinf15320b2004-06-03 03:38:44 +0000848#endif
849
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000850/* Note: there must be only one dollar sign in this file.
851 It is replaced by the list of actions, each action
852 as one case of the switch. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000853
854#define yyerrok (yyerrstatus = 0)
855#define yyclearin (yychar = YYEMPTY)
856#define YYEMPTY -2
857#define YYEOF 0
858#define YYACCEPT goto yyacceptlab
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000859#define YYABORT goto yyabortlab
Lev Walkinf15320b2004-06-03 03:38:44 +0000860#define YYERROR goto yyerrlab1
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000861/* Like YYERROR except do call yyerror.
862 This remains here temporarily to ease the
863 transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +0000864 Once GCC version 2 has supplanted version 1, this can go. */
865#define YYFAIL goto yyerrlab
866#define YYRECOVERING() (!!yyerrstatus)
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000867#define YYBACKUP(token, value) \
Lev Walkinf15320b2004-06-03 03:38:44 +0000868do \
869 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000870 { yychar = (token), yylval = (value); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000871 yychar1 = YYTRANSLATE (yychar); \
872 YYPOPSTACK; \
873 goto yybackup; \
874 } \
875 else \
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000876 { yyerror ("syntax error: cannot back up"); YYERROR; } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000877while (0)
878
879#define YYTERROR 1
880#define YYERRCODE 256
881
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000882#ifndef YYPURE
883#define YYLEX yylex()
Lev Walkinf15320b2004-06-03 03:38:44 +0000884#endif
885
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000886#ifdef YYPURE
887#ifdef YYLSP_NEEDED
888#ifdef YYLEX_PARAM
889#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
890#else
891#define YYLEX yylex(&yylval, &yylloc)
892#endif
893#else /* not YYLSP_NEEDED */
894#ifdef YYLEX_PARAM
895#define YYLEX yylex(&yylval, YYLEX_PARAM)
896#else
897#define YYLEX yylex(&yylval)
898#endif
899#endif /* not YYLSP_NEEDED */
900#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000901
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000902/* If nonreentrant, generate the variables here */
Lev Walkinf15320b2004-06-03 03:38:44 +0000903
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000904#ifndef YYPURE
Lev Walkinf15320b2004-06-03 03:38:44 +0000905
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000906int yychar; /* the lookahead symbol */
907YYSTYPE yylval; /* the semantic value of the */
908 /* lookahead symbol */
Lev Walkinf15320b2004-06-03 03:38:44 +0000909
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000910#ifdef YYLSP_NEEDED
911YYLTYPE yylloc; /* location data for the lookahead */
912 /* symbol */
913#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000914
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000915int yynerrs; /* number of parse errors so far */
916#endif /* not YYPURE */
917
918#if YYDEBUG != 0
919int yydebug; /* nonzero means print parse trace */
920/* Since this is uninitialized, it does not stop multiple parsers
921 from coexisting. */
922#endif
923
924/* YYINITDEPTH indicates the initial size of the parser's stacks */
925
Lev Walkinf15320b2004-06-03 03:38:44 +0000926#ifndef YYINITDEPTH
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000927#define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +0000928#endif
929
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000930/* YYMAXDEPTH is the maximum size the stacks can grow to
931 (effective only if the built-in stack extension method is used). */
Lev Walkinf15320b2004-06-03 03:38:44 +0000932
933#if YYMAXDEPTH == 0
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000934#undef YYMAXDEPTH
Lev Walkinf15320b2004-06-03 03:38:44 +0000935#endif
936
937#ifndef YYMAXDEPTH
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000938#define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +0000939#endif
940
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000941/* Define __yy_memcpy. Note that the size argument
942 should be passed with type unsigned int, because that is what the non-GCC
943 definitions require. With GCC, __builtin_memcpy takes an arg
944 of type size_t, but it can handle unsigned int. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000945
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000946#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
947#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
948#else /* not GNU C or C++ */
949#ifndef __cplusplus
Lev Walkinf15320b2004-06-03 03:38:44 +0000950
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000951/* This is the most reliable way to avoid incompatibilities
952 in available built-in functions on various systems. */
Lev Walkinc3b72e92004-06-03 05:07:41 +0000953static void
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000954__yy_memcpy (to, from, count)
955 char *to;
956 char *from;
957 unsigned int count;
Lev Walkinc3b72e92004-06-03 05:07:41 +0000958{
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000959 register char *f = from;
960 register char *t = to;
961 register int i = count;
Lev Walkinc3b72e92004-06-03 05:07:41 +0000962
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000963 while (i-- > 0)
964 *t++ = *f++;
Lev Walkinc3b72e92004-06-03 05:07:41 +0000965}
Lev Walkinc3b72e92004-06-03 05:07:41 +0000966
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000967#else /* __cplusplus */
Lev Walkinc3b72e92004-06-03 05:07:41 +0000968
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000969/* This is the most reliable way to avoid incompatibilities
970 in available built-in functions on various systems. */
Lev Walkinc3b72e92004-06-03 05:07:41 +0000971static void
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000972__yy_memcpy (char *to, char *from, unsigned int count)
Lev Walkinc3b72e92004-06-03 05:07:41 +0000973{
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000974 register char *t = to;
975 register char *f = from;
976 register int i = count;
Lev Walkinc3b72e92004-06-03 05:07:41 +0000977
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000978 while (i-- > 0)
979 *t++ = *f++;
Lev Walkinf15320b2004-06-03 03:38:44 +0000980}
981
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000982#endif
983#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000984
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000985#line 217 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +0000986
987/* The user can define YYPARSE_PARAM as the name of an argument to be passed
988 into yyparse. The argument should have type void *.
989 It should actually point to an object.
990 Grammar actions can access the variable by casting it
991 to the proper pointer type. */
992
993#ifdef YYPARSE_PARAM
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000994#ifdef __cplusplus
995#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
996#define YYPARSE_PARAM_DECL
997#else /* not __cplusplus */
998#define YYPARSE_PARAM_ARG YYPARSE_PARAM
999#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1000#endif /* not __cplusplus */
1001#else /* not YYPARSE_PARAM */
1002#define YYPARSE_PARAM_ARG
1003#define YYPARSE_PARAM_DECL
1004#endif /* not YYPARSE_PARAM */
Lev Walkinf15320b2004-06-03 03:38:44 +00001005
1006/* Prevent warning if -Wstrict-prototypes. */
1007#ifdef __GNUC__
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001008#ifdef YYPARSE_PARAM
Lev Walkinf15320b2004-06-03 03:38:44 +00001009int yyparse (void *);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001010#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001011int yyparse (void);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001012#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001013#endif
Lev Walkinc3b72e92004-06-03 05:07:41 +00001014
Lev Walkinf15320b2004-06-03 03:38:44 +00001015int
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001016yyparse(YYPARSE_PARAM_ARG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001017 YYPARSE_PARAM_DECL
1018{
1019 register int yystate;
1020 register int yyn;
1021 register short *yyssp;
1022 register YYSTYPE *yyvsp;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001023 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1024 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
Lev Walkinf15320b2004-06-03 03:38:44 +00001025
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001026 short yyssa[YYINITDEPTH]; /* the state stack */
1027 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
Lev Walkinf15320b2004-06-03 03:38:44 +00001028
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001029 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1030 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
Lev Walkinf15320b2004-06-03 03:38:44 +00001031
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001032#ifdef YYLSP_NEEDED
1033 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1034 YYLTYPE *yyls = yylsa;
1035 YYLTYPE *yylsp;
1036
1037#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1038#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001039#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001040#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001041
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001042 int yystacksize = YYINITDEPTH;
1043 int yyfree_stacks = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001044
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001045#ifdef YYPURE
1046 int yychar;
1047 YYSTYPE yylval;
1048 int yynerrs;
1049#ifdef YYLSP_NEEDED
1050 YYLTYPE yylloc;
1051#endif
1052#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001053
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001054 YYSTYPE yyval; /* the variable used to return */
1055 /* semantic values from the action */
1056 /* routines */
Lev Walkinf15320b2004-06-03 03:38:44 +00001057
1058 int yylen;
1059
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001060#if YYDEBUG != 0
1061 if (yydebug)
1062 fprintf(stderr, "Starting parse\n");
1063#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001064
1065 yystate = 0;
1066 yyerrstatus = 0;
1067 yynerrs = 0;
1068 yychar = YYEMPTY; /* Cause a token to be read. */
1069
1070 /* Initialize stack pointers.
1071 Waste one element of value and location stack
1072 so that they stay on the same level as the state stack.
1073 The wasted elements are never initialized. */
1074
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001075 yyssp = yyss - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001076 yyvsp = yyvs;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001077#ifdef YYLSP_NEEDED
1078 yylsp = yyls;
1079#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001080
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001081/* Push a new state, which is found in yystate . */
1082/* In all cases, when you get here, the value and location stacks
1083 have just been pushed. so pushing a state here evens the stacks. */
1084yynewstate:
Lev Walkinf15320b2004-06-03 03:38:44 +00001085
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001086 *++yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001087
1088 if (yyssp >= yyss + yystacksize - 1)
1089 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001090 /* Give user a chance to reallocate the stack */
1091 /* Use copies of these so that the &'s don't force the real ones into memory. */
1092 YYSTYPE *yyvs1 = yyvs;
1093 short *yyss1 = yyss;
1094#ifdef YYLSP_NEEDED
1095 YYLTYPE *yyls1 = yyls;
1096#endif
1097
Lev Walkinf15320b2004-06-03 03:38:44 +00001098 /* Get the current used size of the three stacks, in elements. */
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001099 int size = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001100
1101#ifdef yyoverflow
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001102 /* Each stack pointer address is followed by the size of
1103 the data in use in that stack, in bytes. */
1104#ifdef YYLSP_NEEDED
1105 /* This used to be a conditional around just the two extra args,
1106 but that might be undefined if yyoverflow is a macro. */
1107 yyoverflow("parser stack overflow",
1108 &yyss1, size * sizeof (*yyssp),
1109 &yyvs1, size * sizeof (*yyvsp),
1110 &yyls1, size * sizeof (*yylsp),
1111 &yystacksize);
1112#else
1113 yyoverflow("parser stack overflow",
1114 &yyss1, size * sizeof (*yyssp),
1115 &yyvs1, size * sizeof (*yyvsp),
1116 &yystacksize);
1117#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001118
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001119 yyss = yyss1; yyvs = yyvs1;
1120#ifdef YYLSP_NEEDED
1121 yyls = yyls1;
1122#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001123#else /* no yyoverflow */
1124 /* Extend the stack our own way. */
1125 if (yystacksize >= YYMAXDEPTH)
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001126 {
1127 yyerror("parser stack overflow");
1128 if (yyfree_stacks)
1129 {
1130 free (yyss);
1131 free (yyvs);
1132#ifdef YYLSP_NEEDED
1133 free (yyls);
1134#endif
1135 }
1136 return 2;
1137 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001138 yystacksize *= 2;
1139 if (yystacksize > YYMAXDEPTH)
1140 yystacksize = YYMAXDEPTH;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001141#ifndef YYSTACK_USE_ALLOCA
1142 yyfree_stacks = 1;
1143#endif
1144 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1145 __yy_memcpy ((char *)yyss, (char *)yyss1,
1146 size * (unsigned int) sizeof (*yyssp));
1147 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1148 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1149 size * (unsigned int) sizeof (*yyvsp));
1150#ifdef YYLSP_NEEDED
1151 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1152 __yy_memcpy ((char *)yyls, (char *)yyls1,
1153 size * (unsigned int) sizeof (*yylsp));
1154#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001155#endif /* no yyoverflow */
1156
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001157 yyssp = yyss + size - 1;
1158 yyvsp = yyvs + size - 1;
1159#ifdef YYLSP_NEEDED
1160 yylsp = yyls + size - 1;
1161#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001162
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001163#if YYDEBUG != 0
1164 if (yydebug)
1165 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1166#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001167
1168 if (yyssp >= yyss + yystacksize - 1)
1169 YYABORT;
1170 }
1171
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001172#if YYDEBUG != 0
1173 if (yydebug)
1174 fprintf(stderr, "Entering state %d\n", yystate);
1175#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001176
1177 goto yybackup;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001178 yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001179
1180/* Do appropriate processing given the current state. */
1181/* Read a lookahead token if we need one and don't already have one. */
1182/* yyresume: */
1183
1184 /* First try to decide what to do without reference to lookahead token. */
1185
1186 yyn = yypact[yystate];
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001187 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001188 goto yydefault;
1189
1190 /* Not known => get a lookahead token if don't already have one. */
1191
1192 /* yychar is either YYEMPTY or YYEOF
1193 or a valid token in external form. */
1194
1195 if (yychar == YYEMPTY)
1196 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001197#if YYDEBUG != 0
1198 if (yydebug)
1199 fprintf(stderr, "Reading a token: ");
1200#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001201 yychar = YYLEX;
1202 }
1203
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001204 /* Convert token to internal form (in yychar1) for indexing tables with */
Lev Walkinf15320b2004-06-03 03:38:44 +00001205
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001206 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001207 {
1208 yychar1 = 0;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001209 yychar = YYEOF; /* Don't call YYLEX any more */
Lev Walkinf15320b2004-06-03 03:38:44 +00001210
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001211#if YYDEBUG != 0
1212 if (yydebug)
1213 fprintf(stderr, "Now at end of input.\n");
1214#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001215 }
1216 else
1217 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001218 yychar1 = YYTRANSLATE(yychar);
Lev Walkinf15320b2004-06-03 03:38:44 +00001219
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001220#if YYDEBUG != 0
1221 if (yydebug)
1222 {
1223 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1224 /* Give the individual parser a way to print the precise meaning
1225 of a token, for further debugging info. */
1226#ifdef YYPRINT
1227 YYPRINT (stderr, yychar, yylval);
1228#endif
1229 fprintf (stderr, ")\n");
1230 }
1231#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001232 }
1233
1234 yyn += yychar1;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001235 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001236 goto yydefault;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001237
Lev Walkinf15320b2004-06-03 03:38:44 +00001238 yyn = yytable[yyn];
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001239
1240 /* yyn is what to do for this token type in this state.
1241 Negative => reduce, -yyn is rule number.
1242 Positive => shift, yyn is new state.
1243 New state is final state => don't bother to shift,
1244 just return success.
1245 0, or most negative number => error. */
1246
1247 if (yyn < 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001248 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001249 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001250 goto yyerrlab;
1251 yyn = -yyn;
1252 goto yyreduce;
1253 }
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001254 else if (yyn == 0)
1255 goto yyerrlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001256
1257 if (yyn == YYFINAL)
1258 YYACCEPT;
1259
1260 /* Shift the lookahead token. */
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001261
1262#if YYDEBUG != 0
1263 if (yydebug)
1264 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1265#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001266
1267 /* Discard the token being shifted unless it is eof. */
1268 if (yychar != YYEOF)
1269 yychar = YYEMPTY;
1270
1271 *++yyvsp = yylval;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001272#ifdef YYLSP_NEEDED
1273 *++yylsp = yylloc;
1274#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001275
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001276 /* count tokens shifted since error; after three, turn off error status. */
1277 if (yyerrstatus) yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001278
1279 yystate = yyn;
1280 goto yynewstate;
1281
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001282/* Do the default action for the current state. */
Lev Walkinc3b72e92004-06-03 05:07:41 +00001283yydefault:
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001284
Lev Walkinf15320b2004-06-03 03:38:44 +00001285 yyn = yydefact[yystate];
1286 if (yyn == 0)
1287 goto yyerrlab;
1288
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001289/* Do a reduction. yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001290yyreduce:
1291 yylen = yyr2[yyn];
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001292 if (yylen > 0)
1293 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Lev Walkinf15320b2004-06-03 03:38:44 +00001294
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001295#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00001296 if (yydebug)
1297 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001298 int i;
Lev Walkinf15320b2004-06-03 03:38:44 +00001299
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001300 fprintf (stderr, "Reducing via rule %d (line %d), ",
1301 yyn, yyrline[yyn]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001302
1303 /* Print the symbols being reduced, and their result. */
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001304 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1305 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1306 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001307 }
1308#endif
Lev Walkinc3b72e92004-06-03 05:07:41 +00001309
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001310
1311 switch (yyn) {
1312
1313case 1:
Lev Walkinf59d0752004-08-18 04:59:12 +00001314#line 297 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001315{
1316 *(void **)param = yyvsp[0].a_grammar;
1317 ;
1318 break;}
1319case 2:
Lev Walkinf59d0752004-08-18 04:59:12 +00001320#line 303 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001321{
Lev Walkinf15320b2004-06-03 03:38:44 +00001322 yyval.a_grammar = asn1p_new();
1323 checkmem(yyval.a_grammar);
1324 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001325 ;
1326 break;}
1327case 3:
Lev Walkinf59d0752004-08-18 04:59:12 +00001328#line 308 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001329{
Lev Walkinf15320b2004-06-03 03:38:44 +00001330 yyval.a_grammar = yyvsp[-1].a_grammar;
1331 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001332 ;
1333 break;}
1334case 4:
Lev Walkinf59d0752004-08-18 04:59:12 +00001335#line 329 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001336{
Lev Walkinf15320b2004-06-03 03:38:44 +00001337
1338 if(yyvsp[-1].a_module) {
1339 yyval.a_module = yyvsp[-1].a_module;
1340 } else {
1341 /* There's a chance that a module is just plain empty */
1342 yyval.a_module = asn1p_module_new();
1343 }
1344 checkmem(yyval.a_module);
1345
1346 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1347 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1348 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001349 ;
1350 break;}
1351case 5:
Lev Walkinf59d0752004-08-18 04:59:12 +00001352#line 350 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001353{ yyval.a_oid = 0; ;
1354 break;}
1355case 6:
Lev Walkinf59d0752004-08-18 04:59:12 +00001356#line 351 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001357{ yyval.a_oid = yyvsp[0].a_oid; ;
1358 break;}
1359case 7:
Lev Walkinf59d0752004-08-18 04:59:12 +00001360#line 355 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001361{
Lev Walkinf15320b2004-06-03 03:38:44 +00001362 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001363 ;
1364 break;}
1365case 8:
Lev Walkinf59d0752004-08-18 04:59:12 +00001366#line 358 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001367{
Lev Walkinf15320b2004-06-03 03:38:44 +00001368 yyval.a_oid = 0;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001369 ;
1370 break;}
1371case 9:
Lev Walkinf59d0752004-08-18 04:59:12 +00001372#line 364 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001373{
Lev Walkinf15320b2004-06-03 03:38:44 +00001374 yyval.a_oid = asn1p_oid_new();
1375 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1376 if(yyvsp[0].a_oid_arc.name)
1377 free(yyvsp[0].a_oid_arc.name);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001378 ;
1379 break;}
1380case 10:
Lev Walkinf59d0752004-08-18 04:59:12 +00001381#line 370 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001382{
Lev Walkinf15320b2004-06-03 03:38:44 +00001383 yyval.a_oid = yyvsp[-1].a_oid;
1384 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1385 if(yyvsp[0].a_oid_arc.name)
1386 free(yyvsp[0].a_oid_arc.name);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001387 ;
1388 break;}
1389case 11:
Lev Walkinf59d0752004-08-18 04:59:12 +00001390#line 379 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001391{ /* iso */
Lev Walkinf15320b2004-06-03 03:38:44 +00001392 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1393 yyval.a_oid_arc.number = -1;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001394 ;
1395 break;}
1396case 12:
Lev Walkinf59d0752004-08-18 04:59:12 +00001397#line 383 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001398{ /* iso(1) */
Lev Walkinf15320b2004-06-03 03:38:44 +00001399 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1400 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001401 ;
1402 break;}
1403case 13:
Lev Walkinf59d0752004-08-18 04:59:12 +00001404#line 387 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001405{ /* 1 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001406 yyval.a_oid_arc.name = 0;
1407 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001408 ;
1409 break;}
1410case 14:
Lev Walkinf59d0752004-08-18 04:59:12 +00001411#line 397 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001412{ yyval.a_module_flags = MSF_NOFLAGS; ;
1413 break;}
1414case 15:
Lev Walkinf59d0752004-08-18 04:59:12 +00001415#line 398 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001416{
Lev Walkinf15320b2004-06-03 03:38:44 +00001417 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001418 ;
1419 break;}
1420case 16:
Lev Walkinf59d0752004-08-18 04:59:12 +00001421#line 407 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001422{
Lev Walkinf15320b2004-06-03 03:38:44 +00001423 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001424 ;
1425 break;}
1426case 17:
Lev Walkinf59d0752004-08-18 04:59:12 +00001427#line 410 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001428{
Lev Walkinf15320b2004-06-03 03:38:44 +00001429 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001430 ;
1431 break;}
1432case 18:
Lev Walkinf59d0752004-08-18 04:59:12 +00001433#line 419 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001434{
Lev Walkinf15320b2004-06-03 03:38:44 +00001435 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001436 ;
1437 break;}
1438case 19:
Lev Walkinf59d0752004-08-18 04:59:12 +00001439#line 422 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001440{
Lev Walkinf15320b2004-06-03 03:38:44 +00001441 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001442 ;
1443 break;}
1444case 20:
Lev Walkinf59d0752004-08-18 04:59:12 +00001445#line 425 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001446{
Lev Walkinf15320b2004-06-03 03:38:44 +00001447 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001448 ;
1449 break;}
1450case 21:
Lev Walkinf59d0752004-08-18 04:59:12 +00001451#line 428 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001452{
Lev Walkinf15320b2004-06-03 03:38:44 +00001453 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001454 ;
1455 break;}
1456case 22:
Lev Walkinf59d0752004-08-18 04:59:12 +00001457#line 432 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001458{
Lev Walkinf59d0752004-08-18 04:59:12 +00001459 /* X.680Amd1 specifies TAG and XER */
1460 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1461 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1462 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1463 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1464 } else {
1465 fprintf(stderr,
1466 "WARNING: %s INSTRUCTIONS at line %d: "
1467 "Unrecognized encoding reference\n",
1468 yyvsp[-1].tv_str, yylineno);
1469 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1470 }
1471 free(yyvsp[-1].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001472 ;
1473 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001474case 23:
1475#line 453 "asn1p_y.y"
1476{ yyval.a_module = 0; ;
1477 break;}
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001478case 24:
Lev Walkinf59d0752004-08-18 04:59:12 +00001479#line 454 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001480{
Lev Walkinf15320b2004-06-03 03:38:44 +00001481 yyval.a_module = yyvsp[0].a_module;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001482 ;
1483 break;}
1484case 25:
Lev Walkinf59d0752004-08-18 04:59:12 +00001485#line 463 "asn1p_y.y"
1486{
1487 yyval.a_module = yyvsp[0].a_module;
1488 ;
1489 break;}
1490case 26:
1491#line 466 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001492{
Lev Walkinf15320b2004-06-03 03:38:44 +00001493 yyval.a_module = yyvsp[-1].a_module;
1494
Lev Walkinf59d0752004-08-18 04:59:12 +00001495 /* Behave well when one of them is skipped. */
1496 if(!(yyvsp[-1].a_module)) {
1497 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1498 break;
1499 }
1500
Lev Walkinf15320b2004-06-03 03:38:44 +00001501#ifdef MY_IMPORT
1502#error MY_IMPORT DEFINED ELSEWHERE!
1503#endif
1504#define MY_IMPORT(foo,field) do { \
Lev Walkinbc55d232004-08-13 12:31:09 +00001505 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
Lev Walkinf15320b2004-06-03 03:38:44 +00001506 TQ_ADD(&(yyval.a_module->foo), \
1507 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1508 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001509 } \
1510 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1511 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001512
1513 MY_IMPORT(imports, xp_next);
1514 MY_IMPORT(exports, xp_next);
1515 MY_IMPORT(members, next);
1516#undef MY_IMPORT
1517
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001518 ;
1519 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001520case 27:
1521#line 499 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001522{
Lev Walkinf15320b2004-06-03 03:38:44 +00001523 yyval.a_module = yyvsp[0].a_module;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001524 ;
1525 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001526case 28:
1527#line 502 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001528{
Lev Walkinf15320b2004-06-03 03:38:44 +00001529 yyval.a_module = asn1p_module_new();
1530 checkmem(yyval.a_module);
1531 if(yyvsp[0].a_xports) {
1532 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1533 } else {
1534 /* "EXPORTS ALL;" ? */
1535 }
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001536 ;
1537 break;}
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001538case 29:
Lev Walkinbc55d232004-08-13 12:31:09 +00001539#line 511 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001540{
Lev Walkinf15320b2004-06-03 03:38:44 +00001541 yyval.a_module = asn1p_module_new();
1542 checkmem(yyval.a_module);
1543 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1544 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1545 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001546 ;
1547 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001548case 30:
1549#line 518 "asn1p_y.y"
1550{
1551 yyval.a_module = asn1p_module_new();
1552 checkmem(yyval.a_module);
1553 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1554 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1555 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1556 ;
1557 break;}
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001558case 31:
Lev Walkinf59d0752004-08-18 04:59:12 +00001559#line 531 "asn1p_y.y"
1560{
1561 yyval.a_module = asn1p_module_new();
1562 checkmem(yyval.a_module);
1563 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1564 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1565 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1566 ;
1567 break;}
1568case 32:
1569#line 539 "asn1p_y.y"
1570{ asn1p_lexer_hack_push_encoding_control(); ;
1571 break;}
1572case 33:
1573#line 540 "asn1p_y.y"
1574{
1575 fprintf(stderr,
1576 "WARNING: ENCODING-CONTROL %s "
1577 "specification at line %d ignored\n",
1578 yyvsp[-1].tv_str, yylineno);
1579 free(yyvsp[-1].tv_str);
1580 yyval.a_module = 0;
1581 ;
1582 break;}
1583case 34:
1584#line 552 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001585{
Lev Walkinf15320b2004-06-03 03:38:44 +00001586 return yyerror(
1587 "Attempt to redefine a standard basic type, "
1588 "use -ftypesXY to switch back "
1589 "to older version of ASN.1 standard");
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001590 ;
1591 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001592case 35:
1593#line 566 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001594{
Lev Walkinf15320b2004-06-03 03:38:44 +00001595 yyval.a_module = yyvsp[-1].a_module;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001596 ;
1597 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001598case 36:
1599#line 572 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001600{
Lev Walkinf15320b2004-06-03 03:38:44 +00001601 return yyerror("Empty IMPORTS list");
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001602 ;
1603 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001604case 37:
1605#line 578 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001606{
Lev Walkinf15320b2004-06-03 03:38:44 +00001607 yyval.a_module = asn1p_module_new();
1608 checkmem(yyval.a_module);
1609 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001610 ;
1611 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001612case 38:
1613#line 583 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001614{
Lev Walkinf15320b2004-06-03 03:38:44 +00001615 yyval.a_module = yyvsp[-1].a_module;
1616 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001617 ;
1618 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001619case 39:
1620#line 590 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001621{
Lev Walkinf15320b2004-06-03 03:38:44 +00001622 yyval.a_xports = yyvsp[-3].a_xports;
1623 yyval.a_xports->from = yyvsp[-1].tv_str;
1624 yyval.a_xports->from_oid = yyvsp[0].a_oid;
1625 checkmem(yyval.a_xports);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001626 ;
1627 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001628case 40:
1629#line 599 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001630{
Lev Walkinf15320b2004-06-03 03:38:44 +00001631 yyval.a_xports = asn1p_xports_new();
1632 checkmem(yyval.a_xports);
1633 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001634 ;
1635 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001636case 41:
1637#line 604 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001638{
Lev Walkinf15320b2004-06-03 03:38:44 +00001639 yyval.a_xports = yyvsp[-2].a_xports;
1640 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001641 ;
1642 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001643case 42:
1644#line 611 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001645{
Lev Walkinf15320b2004-06-03 03:38:44 +00001646 yyval.a_expr = asn1p_expr_new(yylineno);
1647 checkmem(yyval.a_expr);
1648 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1649 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001650 ;
1651 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001652case 43:
1653#line 617 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001654{
Lev Walkinf15320b2004-06-03 03:38:44 +00001655 yyval.a_expr = asn1p_expr_new(yylineno);
1656 checkmem(yyval.a_expr);
1657 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1658 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001659 ;
1660 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001661case 44:
1662#line 626 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001663{
Lev Walkinf15320b2004-06-03 03:38:44 +00001664 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001665 ;
1666 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001667case 45:
1668#line 629 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001669{
Lev Walkinf15320b2004-06-03 03:38:44 +00001670 yyval.a_xports = 0;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001671 ;
1672 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001673case 46:
1674#line 632 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001675{
Lev Walkinf15320b2004-06-03 03:38:44 +00001676 /* Empty EXPORTS clause effectively prohibits export. */
1677 yyval.a_xports = asn1p_xports_new();
1678 checkmem(yyval.a_xports);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001679 ;
1680 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001681case 47:
1682#line 640 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001683{
Lev Walkinf15320b2004-06-03 03:38:44 +00001684 yyval.a_xports = asn1p_xports_new();
1685 assert(yyval.a_xports);
1686 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001687 ;
1688 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001689case 48:
1690#line 645 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001691{
Lev Walkinf15320b2004-06-03 03:38:44 +00001692 yyval.a_xports = yyvsp[-2].a_xports;
1693 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001694 ;
1695 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001696case 49:
1697#line 652 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001698{
Lev Walkinf15320b2004-06-03 03:38:44 +00001699 yyval.a_expr = asn1p_expr_new(yylineno);
1700 checkmem(yyval.a_expr);
1701 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1702 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001703 ;
1704 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001705case 50:
1706#line 658 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001707{
Lev Walkinf15320b2004-06-03 03:38:44 +00001708 yyval.a_expr = asn1p_expr_new(yylineno);
1709 checkmem(yyval.a_expr);
1710 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1711 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001712 ;
1713 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001714case 51:
1715#line 668 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001716{
Lev Walkinf15320b2004-06-03 03:38:44 +00001717 yyval.a_expr = yyvsp[-4].a_expr;
1718 assert(yyval.a_expr->Identifier == 0);
1719 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1720 yyval.a_expr->meta_type = AMT_VALUESET;
1721 // take care of optValueSetBody
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001722 ;
1723 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001724case 52:
1725#line 678 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001726{
Lev Walkinf15320b2004-06-03 03:38:44 +00001727 yyval.a_expr = asn1p_expr_new(yylineno);
1728 checkmem(yyval.a_expr);
1729 yyval.a_expr->reference = yyvsp[0].a_ref;
1730 yyval.a_expr->expr_type = A1TC_REFERENCE;
1731 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001732 ;
1733 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001734case 53:
1735#line 685 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001736{
Lev Walkinf15320b2004-06-03 03:38:44 +00001737 yyval.a_expr = asn1p_expr_new(yylineno);
1738 checkmem(yyval.a_expr);
1739 yyval.a_expr->expr_type = yyvsp[0].a_type;
1740 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001741 ;
1742 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001743case 54:
1744#line 694 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001745{ ;
1746 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001747case 55:
1748#line 695 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001749{
1750 ;
1751 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001752case 56:
1753#line 711 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001754{
Lev Walkinf15320b2004-06-03 03:38:44 +00001755 yyval.a_expr = asn1p_expr_new(yylineno);
1756 checkmem(yyval.a_expr);
1757 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1758 yyval.a_expr->tag = yyvsp[-1].a_tag;
1759 yyval.a_expr->expr_type = A1TC_TYPEID;
1760 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001761 ;
1762 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001763case 57:
1764#line 719 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001765{
Lev Walkinf15320b2004-06-03 03:38:44 +00001766 yyval.a_expr = yyvsp[0].a_expr;
1767 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1768 yyval.a_expr->tag = yyvsp[-1].a_tag;
1769 assert(yyval.a_expr->expr_type);
1770 assert(yyval.a_expr->meta_type);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001771 ;
1772 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001773case 58:
1774#line 726 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001775{
Lev Walkinf15320b2004-06-03 03:38:44 +00001776 yyval.a_expr = yyvsp[0].a_expr;
1777 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1778 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1779 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001780 ;
1781 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001782case 59:
1783#line 743 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001784{
Lev Walkinf15320b2004-06-03 03:38:44 +00001785 yyval.a_expr = yyvsp[0].a_expr;
1786 assert(yyval.a_expr->Identifier == 0);
1787 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1788 yyval.a_expr->params = yyvsp[-3].a_plist;
1789 yyval.a_expr->meta_type = AMT_PARAMTYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001790 ;
1791 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001792case 60:
1793#line 753 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001794{
Lev Walkinf15320b2004-06-03 03:38:44 +00001795 int ret;
1796 yyval.a_plist = asn1p_paramlist_new(yylineno);
1797 checkmem(yyval.a_plist);
1798 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1799 checkmem(ret == 0);
1800 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1801 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001802 ;
1803 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001804case 61:
1805#line 762 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001806{
Lev Walkinf15320b2004-06-03 03:38:44 +00001807 int ret;
1808 yyval.a_plist = yyvsp[-2].a_plist;
1809 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1810 checkmem(ret == 0);
1811 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1812 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001813 ;
1814 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001815case 62:
1816#line 773 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001817{
Lev Walkinf15320b2004-06-03 03:38:44 +00001818 yyval.a_parg.governor = NULL;
1819 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001820 ;
1821 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001822case 63:
1823#line 777 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001824{
Lev Walkinf15320b2004-06-03 03:38:44 +00001825 int ret;
1826 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1827 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1828 checkmem(ret == 0);
1829 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001830 ;
1831 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001832case 64:
1833#line 784 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001834{
Lev Walkinf15320b2004-06-03 03:38:44 +00001835 int ret;
1836 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1837 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1838 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1839 checkmem(ret == 0);
1840 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001841 ;
1842 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001843case 65:
1844#line 795 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001845{
Lev Walkinf15320b2004-06-03 03:38:44 +00001846 yyval.a_expr = asn1p_expr_new(yylineno);
1847 checkmem(yyval.a_expr);
1848 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001849 ;
1850 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001851case 66:
1852#line 800 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001853{
Lev Walkinf15320b2004-06-03 03:38:44 +00001854 yyval.a_expr = yyvsp[-2].a_expr;
1855 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001856 ;
1857 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001858case 67:
1859#line 807 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001860{
Lev Walkinf15320b2004-06-03 03:38:44 +00001861 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001862 ;
1863 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001864case 68:
1865#line 810 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001866{
Lev Walkinf15320b2004-06-03 03:38:44 +00001867 yyval.a_expr = asn1p_expr_new(yylineno);
1868 checkmem(yyval.a_expr);
1869 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1870 yyval.a_expr->expr_type = A1TC_REFERENCE;
1871 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001872 ;
1873 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001874case 69:
1875#line 823 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001876{
Lev Walkinf15320b2004-06-03 03:38:44 +00001877 yyval.a_expr = asn1p_expr_new(yylineno);
1878 checkmem(yyval.a_expr);
1879 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001880 ;
1881 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001882case 70:
1883#line 828 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001884{
Lev Walkinf15320b2004-06-03 03:38:44 +00001885 yyval.a_expr = yyvsp[-2].a_expr;
1886 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001887 ;
1888 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001889case 71:
1890#line 835 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001891{
Lev Walkinf15320b2004-06-03 03:38:44 +00001892 yyval.a_expr = yyvsp[-2].a_expr;
1893 checkmem(yyval.a_expr);
1894 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
1895 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1896 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001897 ;
1898 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001899case 72:
1900#line 845 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001901{ yyval.a_int = 0; ;
1902 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001903case 73:
1904#line 846 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001905{ yyval.a_int = 1; ;
1906 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001907case 74:
1908#line 850 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001909{
Lev Walkinf15320b2004-06-03 03:38:44 +00001910 yyval.a_expr = asn1p_expr_new(yylineno);
1911 checkmem(yyval.a_expr);
1912 yyval.a_expr->expr_type = A1TC_CLASSDEF;
1913 yyval.a_expr->meta_type = AMT_OBJECT;
1914 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001915 ;
1916 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001917case 75:
1918#line 857 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001919{
Lev Walkinf15320b2004-06-03 03:38:44 +00001920 yyval.a_expr = yyvsp[-2].a_expr;
1921 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001922 ;
1923 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001924case 76:
1925#line 864 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001926{
Lev Walkinf15320b2004-06-03 03:38:44 +00001927 yyval.a_expr = asn1p_expr_new(yylineno);
1928 checkmem(yyval.a_expr);
1929 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
1930 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
1931 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
1932 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001933 ;
1934 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001935case 77:
1936#line 872 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001937{
Lev Walkinf15320b2004-06-03 03:38:44 +00001938 yyval.a_expr = yyvsp[-1].a_expr;
1939 yyval.a_expr->Identifier = yyvsp[-2].a_refcomp.name;
1940 yyval.a_expr->unique = yyvsp[0].a_int;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001941 ;
1942 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001943case 78:
1944#line 877 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001945{
Lev Walkinf15320b2004-06-03 03:38:44 +00001946 int ret;
1947 yyval.a_expr = asn1p_expr_new(yylineno);
1948 checkmem(yyval.a_expr);
1949 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
1950 yyval.a_expr->reference = asn1p_ref_new(yylineno);
1951 checkmem(yyval.a_expr->reference);
1952 ret = asn1p_ref_add_component(yyval.a_expr->reference,
1953 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
1954 checkmem(ret == 0);
1955 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
1956 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
1957 yyval.a_expr->marker = yyvsp[-1].a_marker;
1958 yyval.a_expr->unique = yyvsp[0].a_int;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001959 ;
1960 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001961case 79:
1962#line 895 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001963{ yyval.a_wsynt = 0; ;
1964 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001965case 80:
1966#line 896 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001967{
Lev Walkinf15320b2004-06-03 03:38:44 +00001968 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001969 ;
1970 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001971case 81:
1972#line 903 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001973{ asn1p_lexer_hack_enable_with_syntax(); ;
1974 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001975case 82:
1976#line 905 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001977{
Lev Walkinf15320b2004-06-03 03:38:44 +00001978 yyval.a_wsynt = yyvsp[-1].a_wsynt;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001979 ;
1980 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001981case 83:
1982#line 911 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001983{
Lev Walkinf15320b2004-06-03 03:38:44 +00001984 yyval.a_wsynt = asn1p_wsyntx_new();
1985 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001986 ;
1987 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001988case 84:
1989#line 915 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001990{
Lev Walkinf15320b2004-06-03 03:38:44 +00001991 yyval.a_wsynt = yyvsp[-1].a_wsynt;
1992 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001993 ;
1994 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001995case 85:
1996#line 922 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001997{
Lev Walkinf15320b2004-06-03 03:38:44 +00001998 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001999 ;
2000 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002001case 86:
2002#line 925 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002003{
Lev Walkinf15320b2004-06-03 03:38:44 +00002004 asn1p_ref_t *ref;
2005 int ret;
2006 ref = asn1p_ref_new(yylineno);
2007 checkmem(ref);
2008 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2009 checkmem(ret == 0);
2010 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002011 ;
2012 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002013case 87:
2014#line 951 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002015{
Lev Walkinf15320b2004-06-03 03:38:44 +00002016 yyval.a_expr = yyvsp[0].a_expr;
2017 assert(yyval.a_expr->Identifier == 0);
2018 yyval.a_expr->Identifier = yyvsp[-1].tv_nametag.name;
2019 yyval.a_expr->tag = yyvsp[-1].tv_nametag.tag;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002020 ;
2021 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002022case 88:
2023#line 957 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002024{
Lev Walkinf15320b2004-06-03 03:38:44 +00002025 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002026 ;
2027 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002028case 89:
2029#line 963 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002030{
Lev Walkinf15320b2004-06-03 03:38:44 +00002031 yyval.a_expr = yyvsp[-2].a_expr;
2032 yyval.a_expr->constraints = yyvsp[-1].a_constr;
2033 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002034 ;
2035 break;}
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002036case 90:
Lev Walkinf59d0752004-08-18 04:59:12 +00002037#line 971 "asn1p_y.y"
2038{
2039 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2040 checkmem(yyval.a_expr);
2041 yyval.a_expr->Identifier = strdup("...");
2042 checkmem(yyval.a_expr->Identifier);
2043 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2044 yyval.a_expr->meta_type = AMT_TYPE;
2045 ;
2046 break;}
2047case 91:
2048#line 979 "asn1p_y.y"
2049{
2050 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2051 checkmem(yyval.a_expr);
2052 yyval.a_expr->Identifier = strdup("...");
2053 checkmem(yyval.a_expr->Identifier);
2054 yyval.a_expr->value = yyvsp[0].a_value;
2055 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2056 yyval.a_expr->meta_type = AMT_TYPE;
2057 ;
2058 break;}
2059case 92:
2060#line 988 "asn1p_y.y"
2061{
2062 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2063 checkmem(yyval.a_expr);
2064 yyval.a_expr->Identifier = strdup("...");
2065 yyval.a_expr->value = yyvsp[0].a_value;
2066 checkmem(yyval.a_expr->Identifier);
2067 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2068 yyval.a_expr->meta_type = AMT_TYPE;
2069 ;
2070 break;}
2071case 93:
2072#line 1000 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002073{
Lev Walkinf15320b2004-06-03 03:38:44 +00002074 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002075 ;
2076 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002077case 94:
2078#line 1003 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002079{
Lev Walkinf15320b2004-06-03 03:38:44 +00002080 yyval.a_expr = asn1p_expr_new(yylineno);
2081 checkmem(yyval.a_expr);
2082 yyval.a_expr->expr_type = yyvsp[0].a_type;
2083 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002084 ;
2085 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002086case 95:
2087#line 1009 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002088{
Lev Walkinf15320b2004-06-03 03:38:44 +00002089 yyval.a_expr = yyvsp[0].a_expr;
2090 checkmem(yyval.a_expr);
2091 assert(yyval.a_expr->meta_type);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002092 ;
2093 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002094case 96:
2095#line 1017 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002096{
Lev Walkinf15320b2004-06-03 03:38:44 +00002097 int ret;
2098 yyval.a_expr = yyvsp[-1].a_expr;
2099 assert(yyval.a_expr->expr_type == 0);
2100 assert(yyval.a_expr->meta_type == 0);
2101 assert(yyval.a_expr->reference == 0);
2102 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2103 checkmem(yyval.a_expr->reference);
2104 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2105 checkmem(ret == 0);
2106 free(yyvsp[-3].tv_str);
2107 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2108 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002109 ;
2110 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002111case 97:
2112#line 1041 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002113{
Lev Walkinf15320b2004-06-03 03:38:44 +00002114 yyval.a_expr = asn1p_expr_new(yylineno);
2115 checkmem(yyval.a_expr);
2116 yyval.a_expr->reference = yyvsp[0].a_ref;
2117 yyval.a_expr->expr_type = A1TC_REFERENCE;
2118 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002119 ;
2120 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002121case 98:
2122#line 1048 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002123{
Lev Walkinf15320b2004-06-03 03:38:44 +00002124 yyval.a_expr = asn1p_expr_new(yylineno);
2125 checkmem(yyval.a_expr);
2126 yyval.a_expr->reference = yyvsp[0].a_ref;
2127 yyval.a_expr->expr_type = A1TC_INSTANCE;
2128 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002129 ;
2130 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002131case 99:
2132#line 1063 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002133{
Lev Walkinf15320b2004-06-03 03:38:44 +00002134 int ret;
2135 yyval.a_ref = asn1p_ref_new(yylineno);
2136 checkmem(yyval.a_ref);
2137 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2138 checkmem(ret == 0);
2139 free(yyvsp[0].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002140 ;
2141 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002142case 100:
2143#line 1071 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002144{
Lev Walkinf15320b2004-06-03 03:38:44 +00002145 int ret;
2146 yyval.a_ref = asn1p_ref_new(yylineno);
2147 checkmem(yyval.a_ref);
2148 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2149 checkmem(ret == 0);
2150 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2151 checkmem(ret == 0);
2152 free(yyvsp[-2].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002153 ;
2154 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002155case 101:
2156#line 1081 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002157{
Lev Walkinf15320b2004-06-03 03:38:44 +00002158 int ret;
2159 yyval.a_ref = asn1p_ref_new(yylineno);
2160 checkmem(yyval.a_ref);
2161 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2162 checkmem(ret == 0);
2163 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2164 checkmem(ret == 0);
2165 free(yyvsp[-2].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002166 ;
2167 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002168case 102:
2169#line 1091 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002170{
Lev Walkinf15320b2004-06-03 03:38:44 +00002171 int ret;
2172 yyval.a_ref = asn1p_ref_new(yylineno);
2173 checkmem(yyval.a_ref);
2174 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2175 free(yyvsp[0].tv_str);
2176 checkmem(ret == 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002177 ;
2178 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002179case 103:
2180#line 1099 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002181{
Lev Walkinf15320b2004-06-03 03:38:44 +00002182 int ret;
2183 yyval.a_ref = yyvsp[0].a_ref;
2184 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2185 free(yyvsp[-2].tv_str);
2186 checkmem(ret == 0);
2187 /*
2188 * Move the last element infront.
2189 */
2190 {
2191 struct asn1p_ref_component_s tmp_comp;
2192 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2193 memmove(&yyval.a_ref->components[1],
2194 &yyval.a_ref->components[0],
2195 sizeof(yyval.a_ref->components[0])
2196 * (yyval.a_ref->comp_count - 1));
2197 yyval.a_ref->components[0] = tmp_comp;
2198 }
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002199 ;
2200 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002201case 104:
2202#line 1121 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002203{
Lev Walkinf15320b2004-06-03 03:38:44 +00002204 int ret;
2205 yyval.a_ref = asn1p_ref_new(yylineno);
2206 checkmem(yyval.a_ref);
2207 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2208 free(yyvsp[0].a_refcomp.name);
2209 checkmem(ret == 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002210 ;
2211 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002212case 105:
2213#line 1129 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002214{
Lev Walkinf15320b2004-06-03 03:38:44 +00002215 int ret;
2216 yyval.a_ref = yyvsp[-2].a_ref;
2217 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2218 free(yyvsp[0].a_refcomp.name);
2219 checkmem(ret == 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002220 ;
2221 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002222case 108:
2223#line 1143 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002224{
Lev Walkinf15320b2004-06-03 03:38:44 +00002225 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2226 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002227 ;
2228 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002229case 109:
2230#line 1148 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002231{
Lev Walkinf15320b2004-06-03 03:38:44 +00002232 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2233 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002234 ;
2235 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002236case 110:
2237#line 1161 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002238{
Lev Walkinf15320b2004-06-03 03:38:44 +00002239 yyval.a_expr = yyvsp[-2].a_expr;
2240 assert(yyval.a_expr->Identifier == NULL);
2241 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2242 yyval.a_expr->meta_type = AMT_VALUE;
2243 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002244 ;
2245 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002246case 111:
2247#line 1171 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002248{ asn1p_lexer_hack_push_opaque_state(); ;
2249 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002250case 112:
2251#line 1172 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002252{
Lev Walkinf15320b2004-06-03 03:38:44 +00002253 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2254 checkmem(yyval.a_value);
2255 yyval.a_value->type = ATV_UNPARSED;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002256 ;
2257 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002258case 113:
2259#line 1177 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002260{
Lev Walkinf15320b2004-06-03 03:38:44 +00002261 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2262 checkmem(yyval.a_value);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002263 ;
2264 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002265case 114:
2266#line 1181 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002267{
Lev Walkinf15320b2004-06-03 03:38:44 +00002268 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2269 checkmem(yyval.a_value);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002270 ;
2271 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002272case 115:
2273#line 1185 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002274{
Lev Walkinf15320b2004-06-03 03:38:44 +00002275 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2276 checkmem(yyval.a_value);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002277 ;
2278 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002279case 116:
2280#line 1189 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002281{
Lev Walkinf15320b2004-06-03 03:38:44 +00002282 yyval.a_value = yyvsp[0].a_value;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002283 ;
2284 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002285case 117:
2286#line 1192 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002287{
Lev Walkinf15320b2004-06-03 03:38:44 +00002288 yyval.a_value = yyvsp[0].a_value;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002289 ;
2290 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002291case 118:
2292#line 1198 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002293{
Lev Walkinf15320b2004-06-03 03:38:44 +00002294 asn1p_ref_t *ref;
2295 int ret;
2296 ref = asn1p_ref_new(yylineno);
2297 checkmem(ref);
2298 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2299 checkmem(ret == 0);
2300 yyval.a_value = asn1p_value_fromref(ref, 0);
2301 checkmem(yyval.a_value);
2302 free(yyvsp[0].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002303 ;
2304 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002305case 119:
2306#line 1209 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002307{
Lev Walkinf15320b2004-06-03 03:38:44 +00002308 asn1p_ref_t *ref;
2309 int ret;
2310 ref = asn1p_ref_new(yylineno);
2311 checkmem(ref);
2312 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2313 checkmem(ret == 0);
2314 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2315 checkmem(ret == 0);
2316 yyval.a_value = asn1p_value_fromref(ref, 0);
2317 checkmem(yyval.a_value);
2318 free(yyvsp[-2].tv_str);
2319 free(yyvsp[0].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002320 ;
2321 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002322case 120:
2323#line 1226 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002324{
Lev Walkinf15320b2004-06-03 03:38:44 +00002325 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
2326 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2327 checkmem(yyval.tv_opaque.buf);
2328 yyval.tv_opaque.buf[0] = '{';
2329 yyval.tv_opaque.buf[1] = ' ';
2330 memcpy(yyval.tv_opaque.buf + 2, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2331 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2332 free(yyvsp[0].tv_opaque.buf);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002333 ;
2334 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002335case 121:
2336#line 1236 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002337{
Lev Walkinf15320b2004-06-03 03:38:44 +00002338 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2339 char *p = malloc(newsize + 1);
2340 checkmem(p);
2341 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2342 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2343 p[newsize] = '\0';
2344 free(yyvsp[-1].tv_opaque.buf);
2345 free(yyvsp[0].tv_opaque.buf);
2346 yyval.tv_opaque.buf = p;
2347 yyval.tv_opaque.len = newsize;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002348 ;
2349 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002350case 122:
2351#line 1251 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002352{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2353 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002354case 123:
2355#line 1252 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002356{ yyval.a_type = ASN_BASIC_NULL; ;
2357 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002358case 124:
2359#line 1253 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002360{ yyval.a_type = ASN_BASIC_REAL; ;
2361 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002362case 125:
2363#line 1254 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002364{ yyval.a_type = yyvsp[0].a_type; ;
2365 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002366case 126:
2367#line 1255 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002368{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
2369 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002370case 127:
2371#line 1256 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002372{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
2373 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002374case 128:
2375#line 1257 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002376{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
2377 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002378case 129:
2379#line 1258 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002380{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
2381 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002382case 130:
2383#line 1259 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002384{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
2385 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002386case 131:
2387#line 1260 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002388{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
2389 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002390case 132:
2391#line 1261 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002392{ yyval.a_type = ASN_BASIC_UTCTime; ;
2393 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002394case 133:
2395#line 1262 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002396{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2397 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002398case 134:
2399#line 1269 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002400{ yyval.a_type = ASN_BASIC_INTEGER; ;
2401 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002402case 135:
2403#line 1270 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002404{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2405 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002406case 136:
2407#line 1271 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002408{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2409 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002410case 137:
2411#line 1275 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002412{
Lev Walkinf15320b2004-06-03 03:38:44 +00002413 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2414 checkmem(yyval.a_expr);
2415 yyval.a_expr->expr_type = yyvsp[0].a_type;
2416 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002417 ;
2418 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002419case 138:
2420#line 1281 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002421{
Lev Walkinf15320b2004-06-03 03:38:44 +00002422 if(yyvsp[0].a_expr) {
2423 yyval.a_expr = yyvsp[0].a_expr;
2424 } else {
2425 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2426 checkmem(yyval.a_expr);
2427 }
2428 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2429 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002430 ;
2431 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002432case 139:
2433#line 1294 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002434{ yyval.a_type = ASN_STRING_BMPString; ;
2435 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002436case 140:
2437#line 1295 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002438{
Lev Walkinf15320b2004-06-03 03:38:44 +00002439 yyval.a_type = ASN_STRING_GeneralString;
2440 return yyerror("GeneralString is not supported");
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002441 ;
2442 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002443case 141:
2444#line 1299 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002445{
Lev Walkinf15320b2004-06-03 03:38:44 +00002446 yyval.a_type = ASN_STRING_GraphicString;
2447 return yyerror("GraphicString is not supported");
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002448 ;
2449 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002450case 142:
2451#line 1303 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002452{ yyval.a_type = ASN_STRING_IA5String; ;
2453 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002454case 143:
2455#line 1304 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002456{ yyval.a_type = ASN_STRING_ISO646String; ;
2457 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002458case 144:
2459#line 1305 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002460{ yyval.a_type = ASN_STRING_NumericString; ;
2461 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002462case 145:
2463#line 1306 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002464{ yyval.a_type = ASN_STRING_PrintableString; ;
2465 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002466case 146:
2467#line 1307 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002468{
Lev Walkinf15320b2004-06-03 03:38:44 +00002469 yyval.a_type = ASN_STRING_T61String;
2470 return yyerror("T61String not implemented yet");
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002471 ;
2472 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002473case 147:
2474#line 1311 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002475{ yyval.a_type = ASN_STRING_TeletexString; ;
2476 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002477case 148:
2478#line 1312 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002479{ yyval.a_type = ASN_STRING_UniversalString; ;
2480 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002481case 149:
2482#line 1313 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002483{ yyval.a_type = ASN_STRING_UTF8String; ;
2484 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002485case 150:
2486#line 1314 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002487{
Lev Walkinf15320b2004-06-03 03:38:44 +00002488 yyval.a_type = ASN_STRING_VideotexString;
2489 return yyerror("VideotexString is no longer supported");
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002490 ;
2491 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002492case 151:
2493#line 1318 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002494{ yyval.a_type = ASN_STRING_VisibleString; ;
2495 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002496case 152:
2497#line 1319 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002498{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2499 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002500case 153:
2501#line 1323 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002502{
Lev Walkinf15320b2004-06-03 03:38:44 +00002503 yyval.a_expr = yyvsp[-1].a_expr;
2504 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2505 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2506 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002507 ;
2508 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002509case 154:
2510#line 1329 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002511{
Lev Walkinf15320b2004-06-03 03:38:44 +00002512 yyval.a_expr = yyvsp[-1].a_expr;
2513 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2514 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2515 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002516 ;
2517 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002518case 155:
2519#line 1335 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002520{
Lev Walkinf15320b2004-06-03 03:38:44 +00002521 yyval.a_expr = yyvsp[-1].a_expr;
2522 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2523 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2524 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002525 ;
2526 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002527case 156:
2528#line 1341 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002529{
Lev Walkinf15320b2004-06-03 03:38:44 +00002530 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2531 checkmem(yyval.a_expr);
2532 yyval.a_expr->constraints = yyvsp[-2].a_constr;
2533 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2534 yyval.a_expr->meta_type = AMT_TYPE;
2535 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002536 ;
2537 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002538case 157:
2539#line 1349 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002540{
Lev Walkinf15320b2004-06-03 03:38:44 +00002541 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2542 checkmem(yyval.a_expr);
2543 yyval.a_expr->constraints = yyvsp[-2].a_constr;
2544 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2545 yyval.a_expr->meta_type = AMT_TYPE;
2546 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002547 ;
2548 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002549case 158:
2550#line 1357 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002551{
Lev Walkinf15320b2004-06-03 03:38:44 +00002552 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2553 checkmem(yyval.a_expr);
2554 yyval.a_expr->expr_type = ASN_CONSTR_ANY;
2555 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002556 ;
2557 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002558case 159:
2559#line 1363 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002560{
Lev Walkinf15320b2004-06-03 03:38:44 +00002561 int ret;
2562 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2563 checkmem(yyval.a_expr);
2564 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2565 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2566 yyvsp[0].tv_str, RLT_lowercase);
2567 checkmem(ret == 0);
2568 yyval.a_expr->expr_type = ASN_CONSTR_ANY;
2569 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002570 ;
2571 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002572case 165:
2573#line 1384 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002574{ yyval.a_constr = 0; ;
2575 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002576case 166:
2577#line 1385 "asn1p_y.y"
2578{
2579 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
2580 ;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002581 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002582case 167:
2583#line 1388 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002584{
Lev Walkinf15320b2004-06-03 03:38:44 +00002585 /*
2586 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00002587 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00002588 */
2589 int ret;
2590 yyval.a_constr = asn1p_constraint_new(yylineno);
2591 checkmem(yyval.a_constr);
2592 yyval.a_constr->type = ACT_CT_SIZE;
2593 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2594 checkmem(ret == 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002595 ;
2596 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002597case 168:
2598#line 1403 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002599{
Lev Walkinf15320b2004-06-03 03:38:44 +00002600 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002601 ;
2602 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002603case 169:
2604#line 1406 "asn1p_y.y"
2605{
2606 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
2607 ;
2608 break;}
2609case 170:
2610#line 1412 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002611{
Lev Walkinf15320b2004-06-03 03:38:44 +00002612 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002613 ;
2614 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002615case 171:
2616#line 1415 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002617{
Lev Walkinf15320b2004-06-03 03:38:44 +00002618 asn1p_constraint_t *ct;
2619 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002620 ct->type = ACT_EL_EXT;
2621 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002622 ;
2623 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002624case 172:
2625#line 1421 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002626{
Lev Walkinf15320b2004-06-03 03:38:44 +00002627 asn1p_constraint_t *ct;
2628 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002629 ct->type = ACT_EL_EXT;
2630 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002631 ct = yyval.a_constr;
2632 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
2633 ;
2634 break;}
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002635case 173:
Lev Walkinf59d0752004-08-18 04:59:12 +00002636#line 1432 "asn1p_y.y"
2637{
2638 yyval.a_constr = yyvsp[0].a_constr;
2639 ;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002640 break;}
2641case 174:
Lev Walkinf59d0752004-08-18 04:59:12 +00002642#line 1435 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002643{
Lev Walkinf15320b2004-06-03 03:38:44 +00002644 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002645 ;
2646 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002647case 175:
2648#line 1438 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002649{
Lev Walkinf15320b2004-06-03 03:38:44 +00002650 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002651 ;
2652 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002653case 176:
2654#line 1441 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002655{
Lev Walkinf15320b2004-06-03 03:38:44 +00002656 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002657 ;
2658 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002659case 177:
2660#line 1447 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002661{
Lev Walkinf15320b2004-06-03 03:38:44 +00002662 int ret;
2663 yyval.a_constr = asn1p_constraint_new(yylineno);
2664 checkmem(yyval.a_constr);
2665 yyval.a_constr->type = yyvsp[-3].a_ctype;
2666 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2667 checkmem(ret == 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002668 ;
2669 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002670case 178:
2671#line 1455 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002672{
Lev Walkinf59d0752004-08-18 04:59:12 +00002673 int ret;
2674 yyval.a_constr = asn1p_constraint_new(yylineno);
2675 checkmem(yyval.a_constr);
2676 yyval.a_constr->type = ACT_CA_SET;
2677 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2678 checkmem(ret == 0);
2679 ;
2680 break;}
2681case 179:
2682#line 1463 "asn1p_y.y"
2683{
2684 yyval.a_constr = asn1p_constraint_new(yylineno);
2685 checkmem(yyval.a_constr);
2686 yyval.a_constr->type = ACT_EL_VALUE;
2687 yyval.a_constr->value = yyvsp[0].a_value;
2688 ;
2689 break;}
2690case 180:
2691#line 1469 "asn1p_y.y"
2692{
2693 yyval.a_constr = asn1p_constraint_new(yylineno);
2694 checkmem(yyval.a_constr);
2695 yyval.a_constr->type = yyvsp[-1].a_ctype;
2696 yyval.a_constr->range_start = yyvsp[-2].a_value;
2697 yyval.a_constr->range_stop = yyvsp[0].a_value;
2698 ;
2699 break;}
2700case 181:
2701#line 1476 "asn1p_y.y"
2702{
2703 yyval.a_constr = asn1p_constraint_new(yylineno);
2704 checkmem(yyval.a_constr);
2705 yyval.a_constr->type = yyvsp[-1].a_ctype;
2706 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2707 yyval.a_constr->range_stop = yyvsp[0].a_value;
2708 yyval.a_constr->range_start->type = ATV_MIN;
2709 ;
2710 break;}
2711case 182:
2712#line 1484 "asn1p_y.y"
2713{
2714 yyval.a_constr = asn1p_constraint_new(yylineno);
2715 checkmem(yyval.a_constr);
2716 yyval.a_constr->type = yyvsp[-1].a_ctype;
2717 yyval.a_constr->range_start = yyvsp[-2].a_value;
2718 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2719 yyval.a_constr->range_stop->type = ATV_MAX;
2720 ;
2721 break;}
2722case 183:
2723#line 1492 "asn1p_y.y"
2724{
2725 yyval.a_constr = asn1p_constraint_new(yylineno);
2726 checkmem(yyval.a_constr);
2727 yyval.a_constr->type = yyvsp[-1].a_ctype;
2728 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2729 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2730 yyval.a_constr->range_start->type = ATV_MIN;
2731 yyval.a_constr->range_stop->type = ATV_MAX;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002732 ;
2733 break;}
2734case 184:
Lev Walkinf59d0752004-08-18 04:59:12 +00002735#line 1501 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002736{
Lev Walkinf15320b2004-06-03 03:38:44 +00002737 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002738 ;
2739 break;}
2740case 185:
Lev Walkinf59d0752004-08-18 04:59:12 +00002741#line 1504 "asn1p_y.y"
2742{
2743 yyval.a_constr = yyvsp[0].a_constr;
2744 ;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002745 break;}
2746case 186:
Lev Walkinf59d0752004-08-18 04:59:12 +00002747#line 1510 "asn1p_y.y"
2748{ yyval.a_ctype = ACT_EL_RANGE; ;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002749 break;}
2750case 187:
Lev Walkinf59d0752004-08-18 04:59:12 +00002751#line 1511 "asn1p_y.y"
2752{ yyval.a_ctype = ACT_EL_RLRANGE; ;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002753 break;}
2754case 188:
Lev Walkinf59d0752004-08-18 04:59:12 +00002755#line 1512 "asn1p_y.y"
2756{ yyval.a_ctype = ACT_EL_LLRANGE; ;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002757 break;}
2758case 189:
Lev Walkinf59d0752004-08-18 04:59:12 +00002759#line 1513 "asn1p_y.y"
2760{ yyval.a_ctype = ACT_EL_ULRANGE; ;
2761 break;}
2762case 190:
2763#line 1517 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002764{
Lev Walkinf15320b2004-06-03 03:38:44 +00002765 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002766 ;
2767 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002768case 191:
2769#line 1520 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002770{
Lev Walkinf15320b2004-06-03 03:38:44 +00002771 yyval.a_ctype = ACT_CT_FROM;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002772 ;
2773 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002774case 192:
2775#line 1526 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002776{
Lev Walkinf15320b2004-06-03 03:38:44 +00002777 yyval.a_value = yyvsp[0].a_value;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002778 ;
2779 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002780case 193:
2781#line 1529 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002782{
Lev Walkinf15320b2004-06-03 03:38:44 +00002783 asn1p_ref_t *ref;
2784 int ret;
2785 ref = asn1p_ref_new(yylineno);
2786 checkmem(ref);
2787 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2788 checkmem(ret == 0);
2789 yyval.a_value = asn1p_value_fromref(ref, 0);
2790 checkmem(yyval.a_value);
2791 free(yyvsp[0].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002792 ;
2793 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002794case 194:
2795#line 1540 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002796{
Lev Walkinf15320b2004-06-03 03:38:44 +00002797 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2798 checkmem(yyval.a_value);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002799 ;
2800 break;}
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002801case 195:
Lev Walkinf59d0752004-08-18 04:59:12 +00002802#line 1545 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002803{
Lev Walkinf15320b2004-06-03 03:38:44 +00002804 yyval.a_value = asn1p_value_fromint(0);
2805 checkmem(yyval.a_value);
2806 yyval.a_value->type = ATV_FALSE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002807 ;
2808 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002809case 196:
2810#line 1550 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002811{
Lev Walkinf15320b2004-06-03 03:38:44 +00002812 yyval.a_value = asn1p_value_fromint(1);
2813 checkmem(yyval.a_value);
2814 yyval.a_value->type = ATV_TRUE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002815 ;
2816 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002817case 197:
2818#line 1558 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002819{
Lev Walkinf15320b2004-06-03 03:38:44 +00002820 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002821 ;
2822 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002823case 198:
2824#line 1564 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002825{
Lev Walkinf15320b2004-06-03 03:38:44 +00002826 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002827 ;
2828 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002829case 199:
2830#line 1567 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002831{
Lev Walkinf15320b2004-06-03 03:38:44 +00002832 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002833 ;
2834 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002835case 200:
2836#line 1573 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002837{
Lev Walkinf15320b2004-06-03 03:38:44 +00002838 yyval.a_constr = asn1p_constraint_new(yylineno);
2839 checkmem(yyval.a_constr);
2840 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002841 ;
2842 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002843case 201:
2844#line 1578 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002845{
Lev Walkinf15320b2004-06-03 03:38:44 +00002846 yyval.a_constr = asn1p_constraint_new(yylineno);
2847 checkmem(yyval.a_constr);
2848 yyval.a_constr->type = ACT_EL_VALUE;
2849 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
2850 yyval.a_constr->presence = yyvsp[0].a_pres;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002851 ;
2852 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002853case 202:
2854#line 1591 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002855{ yyval.a_pres = ACPRES_DEFAULT; ;
2856 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002857case 203:
2858#line 1592 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002859{ yyval.a_pres = yyvsp[0].a_pres; ;
2860 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002861case 204:
2862#line 1596 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002863{
Lev Walkinf15320b2004-06-03 03:38:44 +00002864 yyval.a_pres = ACPRES_PRESENT;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002865 ;
2866 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002867case 205:
2868#line 1599 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002869{
Lev Walkinf15320b2004-06-03 03:38:44 +00002870 yyval.a_pres = ACPRES_ABSENT;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002871 ;
2872 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002873case 206:
2874#line 1602 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002875{
Lev Walkinf15320b2004-06-03 03:38:44 +00002876 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002877 ;
2878 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002879case 207:
2880#line 1608 "asn1p_y.y"
2881{
2882 yyval.a_constr = yyvsp[0].a_constr;
2883 ;
2884 break;}
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002885case 208:
Lev Walkinf59d0752004-08-18 04:59:12 +00002886#line 1611 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002887{
Lev Walkinf15320b2004-06-03 03:38:44 +00002888 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002889 ;
2890 break;}
2891case 209:
Lev Walkinf59d0752004-08-18 04:59:12 +00002892#line 1620 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002893{
Lev Walkinf15320b2004-06-03 03:38:44 +00002894 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
2895 asn1p_constraint_t *ct;
2896 int ret;
2897 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
2898 checkmem(ret == 0);
2899 ct = asn1p_constraint_new(yylineno);
2900 checkmem(yyval.a_constr);
2901 ct->type = ACT_EL_VALUE;
2902 ct->value = asn1p_value_fromref(ref, 0);
2903 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002904 ;
2905 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002906case 210:
2907#line 1635 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002908{
Lev Walkinf15320b2004-06-03 03:38:44 +00002909 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002910 ;
2911 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002912case 211:
2913#line 1641 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002914{
Lev Walkinf15320b2004-06-03 03:38:44 +00002915 yyval.a_constr = asn1p_constraint_new(yylineno);
2916 checkmem(yyval.a_constr);
2917 yyval.a_constr->type = ACT_EL_VALUE;
2918 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002919 ;
2920 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002921case 212:
2922#line 1647 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002923{
Lev Walkinf15320b2004-06-03 03:38:44 +00002924 asn1p_constraint_t *ct;
2925 ct = asn1p_constraint_new(yylineno);
2926 checkmem(ct);
2927 ct->type = ACT_EL_VALUE;
2928 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
2929 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002930 ;
2931 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002932case 213:
2933#line 1661 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002934{
Lev Walkinf15320b2004-06-03 03:38:44 +00002935 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
2936 int ret;
2937 *p = '@';
2938 strcpy(p + 1, yyvsp[0].tv_str);
2939 yyval.a_ref = asn1p_ref_new(yylineno);
2940 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
2941 checkmem(ret == 0);
2942 free(p);
2943 free(yyvsp[0].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002944 ;
2945 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002946case 214:
2947#line 1672 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002948{
Lev Walkinf15320b2004-06-03 03:38:44 +00002949 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
2950 int ret;
2951 p[0] = '@';
2952 p[1] = '.';
2953 strcpy(p + 2, yyvsp[0].tv_str);
2954 yyval.a_ref = asn1p_ref_new(yylineno);
2955 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
2956 checkmem(ret == 0);
2957 free(p);
2958 free(yyvsp[0].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002959 ;
2960 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002961case 215:
2962#line 1688 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002963{
Lev Walkinf15320b2004-06-03 03:38:44 +00002964 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002965 ;
2966 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002967case 216:
2968#line 1691 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002969{
Lev Walkinf15320b2004-06-03 03:38:44 +00002970 int l1 = strlen(yyvsp[-2].tv_str);
2971 int l3 = strlen(yyvsp[0].tv_str);
2972 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
2973 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
2974 yyval.tv_str[l1] = '.';
2975 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
2976 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002977 ;
2978 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002979case 217:
2980#line 1709 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002981{ yyval.a_marker = EM_NOMARK; ;
2982 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002983case 218:
2984#line 1710 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002985{ yyval.a_marker = yyvsp[0].a_marker; ;
2986 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002987case 219:
2988#line 1714 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002989{
Lev Walkinf15320b2004-06-03 03:38:44 +00002990 yyval.a_marker = EM_OPTIONAL;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002991 ;
2992 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002993case 220:
2994#line 1717 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002995{
Lev Walkinf15320b2004-06-03 03:38:44 +00002996 yyval.a_marker = EM_DEFAULT;
2997 /* FIXME: store DefaultValue somewhere */
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002998 ;
2999 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00003000case 221:
3001#line 1724 "asn1p_y.y"
3002{
3003 ;
3004 break;}
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003005case 222:
Lev Walkinf59d0752004-08-18 04:59:12 +00003006#line 1726 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003007{
3008 ;
3009 break;}
3010case 223:
Lev Walkinf59d0752004-08-18 04:59:12 +00003011#line 1728 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003012{ asn1p_lexer_hack_push_opaque_state(); ;
3013 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00003014case 224:
3015#line 1728 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003016{
3017 ;
3018 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00003019case 225:
3020#line 1749 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003021{
Lev Walkinf15320b2004-06-03 03:38:44 +00003022 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3023 checkmem(yyval.a_expr);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003024 ;
3025 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00003026case 226:
3027#line 1753 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003028{
Lev Walkinf15320b2004-06-03 03:38:44 +00003029 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003030 ;
3031 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00003032case 227:
3033#line 1759 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003034{
Lev Walkinf15320b2004-06-03 03:38:44 +00003035 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3036 checkmem(yyval.a_expr);
3037 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003038 ;
3039 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00003040case 228:
3041#line 1764 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003042{
Lev Walkinf15320b2004-06-03 03:38:44 +00003043 yyval.a_expr = yyvsp[-2].a_expr;
3044 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003045 ;
3046 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00003047case 229:
3048#line 1771 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003049{
Lev Walkinf15320b2004-06-03 03:38:44 +00003050 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3051 checkmem(yyval.a_expr);
3052 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3053 yyval.a_expr->meta_type = AMT_VALUE;
3054 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003055 ;
3056 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00003057case 230:
3058#line 1778 "asn1p_y.y"
3059{
3060 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3061 checkmem(yyval.a_expr);
3062 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3063 yyval.a_expr->meta_type = AMT_VALUE;
3064 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3065 yyval.a_expr->value = yyvsp[-1].a_value;
3066 ;
3067 break;}
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003068case 231:
Lev Walkinf59d0752004-08-18 04:59:12 +00003069#line 1786 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003070{
Lev Walkinf15320b2004-06-03 03:38:44 +00003071 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3072 checkmem(yyval.a_expr);
3073 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3074 yyval.a_expr->meta_type = AMT_VALUE;
3075 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3076 yyval.a_expr->value = yyvsp[-1].a_value;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003077 ;
3078 break;}
3079case 232:
Lev Walkinf59d0752004-08-18 04:59:12 +00003080#line 1794 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003081{
Lev Walkinf15320b2004-06-03 03:38:44 +00003082 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3083 checkmem(yyval.a_expr);
3084 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3085 yyval.a_expr->meta_type = AMT_VALUE;
3086 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003087 ;
3088 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00003089case 233:
3090#line 1801 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003091{
Lev Walkinf15320b2004-06-03 03:38:44 +00003092 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3093 checkmem(yyval.a_expr);
3094 yyval.a_expr->Identifier = strdup("...");
3095 checkmem(yyval.a_expr->Identifier);
3096 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3097 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003098 ;
3099 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00003100case 234:
3101#line 1812 "asn1p_y.y"
3102{
3103 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3104 checkmem(yyval.a_value);
3105 ;
3106 break;}
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003107case 235:
Lev Walkinf59d0752004-08-18 04:59:12 +00003108#line 1816 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003109{
Lev Walkinf15320b2004-06-03 03:38:44 +00003110 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3111 checkmem(yyval.a_value);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003112 ;
3113 break;}
3114case 236:
Lev Walkinf59d0752004-08-18 04:59:12 +00003115#line 1847 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003116{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3117 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00003118case 237:
3119#line 1848 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003120{ yyval.a_tag = yyvsp[0].a_tag; ;
3121 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00003122case 238:
3123#line 1852 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003124{
Lev Walkinf15320b2004-06-03 03:38:44 +00003125 yyval.a_tag = yyvsp[0].a_tag;
3126 yyval.a_tag.tag_mode = TM_DEFAULT;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003127 ;
3128 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00003129case 239:
3130#line 1856 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003131{
Lev Walkinf15320b2004-06-03 03:38:44 +00003132 yyval.a_tag = yyvsp[-1].a_tag;
3133 yyval.a_tag.tag_mode = TM_IMPLICIT;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003134 ;
3135 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00003136case 240:
3137#line 1860 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003138{
Lev Walkinf15320b2004-06-03 03:38:44 +00003139 yyval.a_tag = yyvsp[-1].a_tag;
3140 yyval.a_tag.tag_mode = TM_EXPLICIT;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003141 ;
3142 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00003143case 241:
3144#line 1867 "asn1p_y.y"
3145{
3146 checkmem(yyvsp[0].tv_str);
3147 yyval.tv_str = yyvsp[0].tv_str;
3148 ;
3149 break;}
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003150case 242:
Lev Walkinf59d0752004-08-18 04:59:12 +00003151#line 1871 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003152{
Lev Walkinf15320b2004-06-03 03:38:44 +00003153 checkmem(yyvsp[0].tv_str);
3154 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003155 ;
3156 break;}
3157case 243:
Lev Walkinf59d0752004-08-18 04:59:12 +00003158#line 1879 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003159{
Lev Walkinf15320b2004-06-03 03:38:44 +00003160 checkmem(yyvsp[0].tv_str);
3161 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003162 ;
3163 break;}
3164case 244:
Lev Walkinf59d0752004-08-18 04:59:12 +00003165#line 1886 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003166{
Lev Walkinf15320b2004-06-03 03:38:44 +00003167 checkmem(yyvsp[0].tv_str);
3168 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003169 ;
3170 break;}
3171case 245:
Lev Walkinf59d0752004-08-18 04:59:12 +00003172#line 1893 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003173{
Lev Walkinf15320b2004-06-03 03:38:44 +00003174 memset(&yyval.tv_nametag, 0, sizeof(yyval.tv_nametag));
3175 yyval.tv_nametag.name = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003176 ;
3177 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00003178case 246:
3179#line 1897 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003180{
Lev Walkinf15320b2004-06-03 03:38:44 +00003181 yyval.tv_nametag.name = yyvsp[-1].tv_str;
3182 yyval.tv_nametag.tag = yyvsp[0].a_tag;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003183 ;
3184 break;}
3185}
3186 /* the action file gets copied in in place of this dollarsign */
3187#line 543 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00003188
3189 yyvsp -= yylen;
3190 yyssp -= yylen;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003191#ifdef YYLSP_NEEDED
3192 yylsp -= yylen;
3193#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003194
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003195#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00003196 if (yydebug)
3197 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003198 short *ssp1 = yyss - 1;
3199 fprintf (stderr, "state stack now");
3200 while (ssp1 != yyssp)
3201 fprintf (stderr, " %d", *++ssp1);
3202 fprintf (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003203 }
3204#endif
3205
3206 *++yyvsp = yyval;
3207
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003208#ifdef YYLSP_NEEDED
3209 yylsp++;
3210 if (yylen == 0)
3211 {
3212 yylsp->first_line = yylloc.first_line;
3213 yylsp->first_column = yylloc.first_column;
3214 yylsp->last_line = (yylsp-1)->last_line;
3215 yylsp->last_column = (yylsp-1)->last_column;
3216 yylsp->text = 0;
3217 }
3218 else
3219 {
3220 yylsp->last_line = (yylsp+yylen-1)->last_line;
3221 yylsp->last_column = (yylsp+yylen-1)->last_column;
3222 }
3223#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003224
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003225 /* Now "shift" the result of the reduction.
3226 Determine what state that goes to,
3227 based on the state we popped back to
3228 and the rule number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003229
3230 yyn = yyr1[yyn];
3231
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003232 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3233 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003234 yystate = yytable[yystate];
3235 else
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003236 yystate = yydefgoto[yyn - YYNTBASE];
Lev Walkinf15320b2004-06-03 03:38:44 +00003237
3238 goto yynewstate;
3239
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003240yyerrlab: /* here on detecting error */
Lev Walkinf15320b2004-06-03 03:38:44 +00003241
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003242 if (! yyerrstatus)
3243 /* If not already recovering from an error, report this error. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003244 {
3245 ++yynerrs;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003246
3247#ifdef YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003248 yyn = yypact[yystate];
3249
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003250 if (yyn > YYFLAG && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003251 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003252 int size = 0;
3253 char *msg;
3254 int x, count;
Lev Walkinf15320b2004-06-03 03:38:44 +00003255
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003256 count = 0;
3257 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3258 for (x = (yyn < 0 ? -yyn : 0);
3259 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3260 if (yycheck[x + yyn] == x)
3261 size += strlen(yytname[x]) + 15, count++;
3262 msg = (char *) malloc(size + 15);
3263 if (msg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003264 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003265 strcpy(msg, "parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003266
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003267 if (count < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003268 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003269 count = 0;
3270 for (x = (yyn < 0 ? -yyn : 0);
3271 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3272 if (yycheck[x + yyn] == x)
Lev Walkinf15320b2004-06-03 03:38:44 +00003273 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003274 strcat(msg, count == 0 ? ", expecting `" : " or `");
3275 strcat(msg, yytname[x]);
3276 strcat(msg, "'");
3277 count++;
Lev Walkinf15320b2004-06-03 03:38:44 +00003278 }
3279 }
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003280 yyerror(msg);
3281 free(msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003282 }
3283 else
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003284 yyerror ("parse error; also virtual memory exceeded");
Lev Walkinf15320b2004-06-03 03:38:44 +00003285 }
3286 else
3287#endif /* YYERROR_VERBOSE */
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003288 yyerror("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003289 }
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003290
Lev Walkinf15320b2004-06-03 03:38:44 +00003291 goto yyerrlab1;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003292yyerrlab1: /* here on error raised explicitly by an action */
Lev Walkinf15320b2004-06-03 03:38:44 +00003293
3294 if (yyerrstatus == 3)
3295 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003296 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003297
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003298 /* return failure if at end of input */
Lev Walkinf15320b2004-06-03 03:38:44 +00003299 if (yychar == YYEOF)
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003300 YYABORT;
Lev Walkinf15320b2004-06-03 03:38:44 +00003301
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003302#if YYDEBUG != 0
3303 if (yydebug)
3304 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3305#endif
3306
Lev Walkinf15320b2004-06-03 03:38:44 +00003307 yychar = YYEMPTY;
3308 }
3309
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003310 /* Else will try to reuse lookahead token
3311 after shifting the error token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003312
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003313 yyerrstatus = 3; /* Each real token shifted decrements this */
Lev Walkinf15320b2004-06-03 03:38:44 +00003314
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003315 goto yyerrhandle;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003316
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003317yyerrdefault: /* current state does not do anything special for the error token. */
Lev Walkinc3b72e92004-06-03 05:07:41 +00003318
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003319#if 0
3320 /* This is wrong; only states that explicitly want error tokens
3321 should shift them. */
3322 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3323 if (yyn) goto yydefault;
Lev Walkinf15320b2004-06-03 03:38:44 +00003324#endif
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003325
3326yyerrpop: /* pop the current state because it cannot handle the error token */
3327
3328 if (yyssp == yyss) YYABORT;
3329 yyvsp--;
3330 yystate = *--yyssp;
3331#ifdef YYLSP_NEEDED
3332 yylsp--;
3333#endif
3334
3335#if YYDEBUG != 0
3336 if (yydebug)
3337 {
3338 short *ssp1 = yyss - 1;
3339 fprintf (stderr, "Error: state stack now");
3340 while (ssp1 != yyssp)
3341 fprintf (stderr, " %d", *++ssp1);
3342 fprintf (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003343 }
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003344#endif
3345
3346yyerrhandle:
3347
3348 yyn = yypact[yystate];
3349 if (yyn == YYFLAG)
3350 goto yyerrdefault;
3351
3352 yyn += YYTERROR;
3353 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3354 goto yyerrdefault;
3355
3356 yyn = yytable[yyn];
3357 if (yyn < 0)
3358 {
3359 if (yyn == YYFLAG)
3360 goto yyerrpop;
3361 yyn = -yyn;
3362 goto yyreduce;
3363 }
3364 else if (yyn == 0)
3365 goto yyerrpop;
Lev Walkinf15320b2004-06-03 03:38:44 +00003366
3367 if (yyn == YYFINAL)
3368 YYACCEPT;
3369
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003370#if YYDEBUG != 0
3371 if (yydebug)
3372 fprintf(stderr, "Shifting error token, ");
3373#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003374
3375 *++yyvsp = yylval;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003376#ifdef YYLSP_NEEDED
3377 *++yylsp = yylloc;
3378#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003379
3380 yystate = yyn;
3381 goto yynewstate;
3382
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003383 yyacceptlab:
3384 /* YYACCEPT comes here. */
3385 if (yyfree_stacks)
3386 {
3387 free (yyss);
3388 free (yyvs);
3389#ifdef YYLSP_NEEDED
3390 free (yyls);
Lev Walkinf15320b2004-06-03 03:38:44 +00003391#endif
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003392 }
3393 return 0;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003394
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003395 yyabortlab:
3396 /* YYABORT comes here. */
3397 if (yyfree_stacks)
3398 {
3399 free (yyss);
3400 free (yyvs);
3401#ifdef YYLSP_NEEDED
3402 free (yyls);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003403#endif
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003404 }
3405 return 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003406}
Lev Walkinf59d0752004-08-18 04:59:12 +00003407#line 1904 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00003408
3409
3410
3411/*
3412 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3413 */
3414static asn1p_value_t *
3415_convert_bitstring2binary(char *str, int base) {
3416 asn1p_value_t *val;
3417 int slen;
3418 int memlen;
3419 int baselen;
3420 int bits;
3421 uint8_t *binary_vector;
3422 uint8_t *bv_ptr;
3423 uint8_t cur_val;
3424
3425 assert(str);
3426 assert(str[0] == '\'');
3427
3428 switch(base) {
3429 case 'B':
3430 baselen = 1;
3431 break;
3432 case 'H':
3433 baselen = 4;
3434 break;
3435 default:
3436 assert(base == 'B' || base == 'H');
3437 errno = EINVAL;
3438 return NULL;
3439 }
3440
3441 slen = strlen(str);
3442 assert(str[slen - 1] == base);
3443 assert(str[slen - 2] == '\'');
3444
3445 memlen = slen / (8 / baselen); /* Conservative estimate */
3446
3447 bv_ptr = binary_vector = malloc(memlen + 1);
3448 if(bv_ptr == NULL)
3449 /* ENOMEM */
3450 return NULL;
3451
3452 cur_val = 0;
3453 bits = 0;
3454 while(*(++str) != '\'') {
3455 switch(baselen) {
3456 case 1:
3457 switch(*str) {
3458 case '1':
3459 cur_val |= 1 << (7 - (bits % 8));
3460 case '0':
3461 break;
3462 default:
3463 assert(!"_y UNREACH1");
3464 case ' ': case '\r': case '\n':
3465 continue;
3466 }
3467 break;
3468 case 4:
3469 switch(*str) {
3470 case '0': case '1': case '2': case '3': case '4':
3471 case '5': case '6': case '7': case '8': case '9':
3472 cur_val |= (*str - '0') << (4 - (bits % 8));
3473 break;
3474 case 'A': case 'B': case 'C':
3475 case 'D': case 'E': case 'F':
3476 cur_val |= ((*str - 'A') + 10)
3477 << (4 - (bits % 8));
3478 break;
3479 default:
3480 assert(!"_y UNREACH2");
3481 case ' ': case '\r': case '\n':
3482 continue;
3483 }
3484 break;
3485 }
3486
3487 bits += baselen;
3488 if((bits % 8) == 0) {
3489 *bv_ptr++ = cur_val;
3490 cur_val = 0;
3491 }
3492 }
3493
3494 *bv_ptr = cur_val;
3495 assert((bv_ptr - binary_vector) <= memlen);
3496
3497 val = asn1p_value_frombits(binary_vector, bits, 0);
3498 if(val == NULL) {
3499 free(binary_vector);
3500 }
3501
3502 return val;
3503}
3504
3505extern char *asn1p_text;
3506
3507int
3508yyerror(const char *msg) {
3509 fprintf(stderr,
3510 "ASN.1 grammar parse error "
3511 "near line %d (token \"%s\"): %s\n",
3512 asn1p_lineno, asn1p_text, msg);
3513 return -1;
3514}
3515
3516