blob: e8cdfb243e79fca541aace0f1e488f13bf570911 [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 Walkin070a52d2004-08-22 03:19:54 +0000208#define YYFINAL 391
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 Walkind2ea1de2004-08-20 13:25:29 +0000212#define YYTRANSLATE(x) ((unsigned)(x) <= 355 ? yytranslate[x] : 212)
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,
Lev Walkin070a52d2004-08-22 03:19:54 +0000262 203, 207, 211, 213, 215, 219, 222, 224, 230, 231,
263 233, 235, 239, 242, 247, 252, 253, 255, 256, 263,
264 265, 268, 270, 272, 274, 278, 282, 285, 287, 289,
265 294, 299, 304, 309, 314, 316, 321, 326, 328, 332,
266 334, 338, 342, 344, 348, 350, 354, 356, 358, 360,
267 362, 367, 368, 372, 374, 376, 378, 380, 382, 384,
268 388, 390, 393, 395, 397, 399, 401, 404, 407, 409,
269 411, 414, 417, 419, 421, 423, 425, 428, 430, 433,
270 435, 437, 439, 441, 443, 445, 447, 449, 451, 453,
271 455, 457, 459, 461, 463, 465, 467, 469, 471, 472,
272 474, 476, 481, 485, 490, 492, 496, 502, 504, 508,
273 512, 516, 521, 525, 527, 531, 535, 539, 543, 545,
274 547, 549, 552, 555, 559, 561, 563, 565, 567, 569,
275 571, 573, 579, 581, 585, 587, 591, 592, 594, 596,
276 598, 600, 602, 604, 608, 613, 615, 619, 622, 626,
277 628, 632, 633, 635, 637, 640, 642, 644, 645, 649,
278 652, 656, 658, 662, 664, 669, 674, 676, 678, 680,
279 682, 683, 685, 687, 690, 693, 695, 697, 699, 701,
280 703
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000281};
Lev Walkinf15320b2004-06-03 03:38:44 +0000282
Lev Walkinf59d0752004-08-18 04:59:12 +0000283static const short yyrhs[] = { 116,
Lev Walkind2ea1de2004-08-20 13:25:29 +0000284 0, 117, 0, 116, 117, 0, 208, 118, 34, 122,
Lev Walkinf59d0752004-08-18 04:59:12 +0000285 3, 21, 125, 39, 0, 0, 119, 0, 104, 120,
286 105, 0, 104, 105, 0, 121, 0, 120, 121, 0,
Lev Walkind2ea1de2004-08-20 13:25:29 +0000287 210, 0, 210, 106, 9, 107, 0, 9, 0, 0,
Lev Walkinf59d0752004-08-18 04:59:12 +0000288 123, 0, 124, 0, 123, 124, 0, 41, 84, 0,
289 52, 84, 0, 20, 84, 0, 43, 53, 0, 12,
290 57, 0, 0, 126, 0, 127, 0, 126, 127, 0,
Lev Walkin070a52d2004-08-22 03:19:54 +0000291 129, 0, 134, 0, 140, 0, 166, 0, 137, 0,
292 0, 38, 12, 128, 0, 174, 0, 54, 130, 108,
Lev Walkinf59d0752004-08-18 04:59:12 +0000293 0, 54, 46, 0, 131, 0, 130, 131, 0, 132,
Lev Walkind2ea1de2004-08-20 13:25:29 +0000294 46, 208, 118, 0, 133, 0, 132, 109, 133, 0,
295 208, 0, 210, 0, 42, 135, 108, 0, 42, 17,
Lev Walkinf59d0752004-08-18 04:59:12 +0000296 108, 0, 42, 108, 0, 136, 0, 135, 109, 136,
Lev Walkind2ea1de2004-08-20 13:25:29 +0000297 0, 208, 0, 210, 0, 208, 138, 3, 104, 139,
Lev Walkin070a52d2004-08-22 03:19:54 +0000298 105, 0, 161, 0, 171, 0, 0, 181, 0, 208,
299 3, 206, 87, 0, 208, 3, 206, 159, 0, 208,
300 3, 149, 0, 208, 104, 141, 105, 3, 159, 0,
Lev Walkind2ea1de2004-08-20 13:25:29 +0000301 142, 0, 141, 109, 142, 0, 208, 0, 208, 110,
Lev Walkin070a52d2004-08-22 03:19:54 +0000302 210, 0, 171, 110, 210, 0, 144, 0, 143, 109,
303 144, 0, 159, 0, 210, 0, 146, 0, 145, 109,
304 146, 0, 211, 159, 198, 0, 30, 68, 159, 0,
305 158, 0, 148, 0, 147, 109, 148, 0, 211, 159,
306 0, 158, 0, 28, 104, 151, 105, 153, 0, 0,
307 88, 0, 152, 0, 151, 109, 152, 0, 164, 198,
308 0, 164, 159, 198, 150, 0, 164, 164, 198, 150,
309 0, 0, 154, 0, 0, 95, 82, 104, 155, 156,
310 105, 0, 157, 0, 156, 157, 0, 4, 0, 164,
311 0, 102, 0, 102, 111, 169, 0, 102, 111, 205,
312 0, 160, 178, 0, 173, 0, 174, 0, 27, 104,
313 147, 105, 0, 78, 104, 145, 105, 0, 79, 104,
314 145, 105, 0, 78, 178, 68, 160, 0, 79, 178,
315 68, 160, 0, 18, 0, 18, 35, 25, 210, 0,
316 208, 104, 143, 105, 0, 161, 0, 56, 68, 161,
317 0, 11, 0, 11, 112, 208, 0, 11, 112, 210,
318 0, 209, 0, 209, 112, 162, 0, 163, 0, 162,
319 112, 163, 0, 165, 0, 165, 0, 13, 0, 14,
320 0, 210, 138, 3, 167, 0, 0, 104, 168, 170,
321 0, 5, 0, 7, 0, 6, 0, 205, 0, 169,
322 0, 210, 0, 208, 112, 210, 0, 4, 0, 170,
323 4, 0, 24, 0, 63, 0, 76, 0, 172, 0,
324 67, 81, 0, 65, 51, 0, 77, 0, 44, 0,
325 36, 71, 0, 26, 81, 0, 91, 0, 47, 0,
326 58, 0, 40, 0, 22, 81, 0, 171, 0, 172,
327 202, 0, 23, 0, 48, 0, 49, 0, 50, 0,
328 59, 0, 64, 0, 74, 0, 83, 0, 85, 0,
329 90, 0, 92, 0, 93, 0, 94, 0, 66, 0,
330 99, 0, 100, 0, 97, 0, 98, 0, 96, 0,
331 0, 179, 0, 180, 0, 80, 106, 181, 107, 0,
332 106, 181, 107, 0, 180, 106, 181, 107, 0, 182,
333 0, 182, 109, 102, 0, 182, 109, 102, 109, 182,
334 0, 183, 0, 182, 175, 183, 0, 182, 176, 183,
335 0, 183, 177, 183, 0, 185, 106, 181, 107, 0,
336 106, 181, 107, 0, 186, 0, 186, 184, 186, 0,
337 61, 184, 186, 0, 186, 184, 60, 0, 61, 184,
338 60, 0, 192, 0, 187, 0, 101, 0, 101, 113,
339 0, 113, 101, 0, 113, 101, 113, 0, 80, 0,
340 46, 0, 205, 0, 210, 0, 6, 0, 45, 0,
341 86, 0, 95, 30, 104, 188, 105, 0, 189, 0,
342 188, 109, 189, 0, 102, 0, 210, 178, 190, 0,
343 0, 191, 0, 73, 0, 15, 0, 69, 0, 193,
344 0, 194, 0, 104, 208, 105, 0, 193, 104, 195,
345 105, 0, 196, 0, 195, 109, 196, 0, 114, 197,
346 0, 114, 112, 197, 0, 210, 0, 197, 112, 210,
347 0, 0, 199, 0, 69, 0, 33, 200, 0, 186,
348 0, 171, 0, 0, 104, 201, 170, 0, 104, 105,
349 0, 104, 203, 105, 0, 204, 0, 203, 109, 204,
350 0, 210, 0, 210, 106, 205, 107, 0, 210, 106,
351 169, 107, 0, 205, 0, 102, 0, 9, 0, 10,
352 0, 0, 207, 0, 103, 0, 103, 52, 0, 103,
353 41, 0, 11, 0, 12, 0, 12, 0, 8, 0,
354 210, 0, 210, 207, 0
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000355};
Lev Walkinf15320b2004-06-03 03:38:44 +0000356
357#endif
358
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000359#if YYDEBUG != 0
360static const short yyrline[] = { 0,
Lev Walkind2ea1de2004-08-20 13:25:29 +0000361 298, 304, 310, 326, 351, 353, 356, 360, 365, 372,
362 380, 385, 389, 398, 400, 408, 412, 420, 424, 427,
363 430, 434, 454, 456, 464, 468, 500, 504, 513, 520,
364 533, 540, 542, 554, 567, 574, 579, 585, 591, 600,
365 606, 612, 619, 627, 631, 634, 641, 647, 653, 660,
Lev Walkin070a52d2004-08-22 03:19:54 +0000366 669, 679, 687, 695, 697, 709, 721, 728, 744, 753,
367 763, 773, 778, 785, 795, 801, 807, 811, 823, 829,
368 835, 843, 850, 855, 861, 867, 874, 879, 889, 891,
369 894, 902, 908, 917, 923, 940, 942, 947, 951, 956,
370 961, 967, 971, 982, 991, 1000, 1011, 1032, 1036, 1042,
371 1048, 1054, 1060, 1068, 1076, 1082, 1097, 1121, 1128, 1142,
372 1151, 1161, 1171, 1179, 1200, 1209, 1218, 1219, 1221, 1228,
373 1240, 1250, 1252, 1257, 1261, 1265, 1269, 1272, 1277, 1289,
374 1305, 1316, 1330, 1332, 1333, 1334, 1335, 1336, 1337, 1338,
375 1339, 1340, 1341, 1342, 1348, 1350, 1351, 1354, 1361, 1373,
376 1375, 1379, 1383, 1384, 1385, 1386, 1387, 1391, 1392, 1393,
377 1394, 1398, 1399, 1406, 1406, 1407, 1407, 1408, 1410, 1412,
378 1417, 1421, 1430, 1434, 1439, 1443, 1449, 1459, 1463, 1466,
379 1469, 1474, 1483, 1491, 1497, 1504, 1512, 1520, 1529, 1532,
380 1537, 1539, 1540, 1541, 1544, 1548, 1553, 1557, 1568, 1573,
381 1578, 1585, 1591, 1595, 1600, 1606, 1618, 1620, 1623, 1627,
382 1630, 1635, 1639, 1647, 1662, 1668, 1675, 1688, 1700, 1715,
383 1719, 1736, 1738, 1741, 1745, 1751, 1754, 1756, 1756, 1776,
384 1781, 1786, 1792, 1798, 1806, 1814, 1822, 1829, 1839, 1844,
385 1874, 1876, 1879, 1884, 1888, 1894, 1899, 1906, 1913, 1920,
386 1925
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000387};
388#endif
389
390
391#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
392
393static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
394"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
Lev Walkinf59d0752004-08-18 04:59:12 +0000395"TOK_number_negative","TOK_typereference","TOK_capitalreference","TOK_typefieldreference",
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000396"TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY",
397"TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN",
398"TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS",
399"TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED",
Lev Walkinf59d0752004-08-18 04:59:12 +0000400"TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL","TOK_END","TOK_ENUMERATED",
401"TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE",
402"TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString","TOK_GraphicString","TOK_IA5String",
403"TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE",
404"TOK_INSTRUCTIONS","TOK_INTEGER","TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY",
405"TOK_NULL","TOK_NumericString","TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET",
406"TOK_OF","TOK_OPTIONAL","TOK_PATTERN","TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT",
407"TOK_PrintableString","TOK_PRIVATE","TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE",
408"TOK_SET","TOK_SIZE","TOK_STRING","TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString",
409"TOK_TRUE","TOK_TYPE_IDENTIFIER","TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString",
410"TOK_UTCTime","TOK_UTF8String","TOK_VideotexString","TOK_VisibleString","TOK_WITH",
411"TOK_EXCEPT","'^'","TOK_INTERSECTION","'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots",
412"TOK_tag","'{'","'}'","'('","')'","';'","','","':'","'!'","'.'","'<'","'@'",
413"ParsedGrammar","ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000414"ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags",
415"ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody",
Lev Walkinf59d0752004-08-18 04:59:12 +0000416"ModuleSpecificationBody","ModuleSpecificationElement","@1","ImportsDefinition",
417"ImportsBundleSet","ImportsBundle","ImportsList","ImportsElement","ExportsDefinition",
418"ExportsBody","ExportsElement","ValueSetDefinition","DefinedTypeRef","optValueSetBody",
419"DataTypeReference","ParameterArgumentList","ParameterArgumentName","ActualParameterList",
Lev Walkin070a52d2004-08-22 03:19:54 +0000420"ActualParameter","ComponentTypeLists","ComponentType","AlternativeTypeLists",
421"AlternativeType","ClassDeclaration","optUnique","ClassFieldList","ClassField",
422"optWithSyntax","WithSyntax","@2","WithSyntaxFormat","WithSyntaxFormatToken",
423"ExtensionAndException","Type","TypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList",
Lev Walkind2ea1de2004-08-20 13:25:29 +0000424"ComplexTypeReferenceElement","ClassFieldIdentifier","ClassFieldName","ValueDefinition",
425"InlineOrDefinedValue","@3","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
Lev Walkin070a52d2004-08-22 03:19:54 +0000426"BasicType","BasicString","Union","Intersection","Except","optConstraints","Constraints",
427"SetOfConstraints","ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement",
428"ConstraintRangeSpec","ConstraintSpec","ConstraintValue","WithComponents","WithComponentsList",
429"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
430"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
431"ComponentIdList","optMarker","Marker","DefaultValue","@4","UniverationDefinition",
432"UniverationList","UniverationElement","SignedNumber","optTag","Tag","TypeRefName",
433"ObjectClassReference","Identifier","TaggedIdentifier", NULL
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000434};
435#endif
436
437static const short yyr1[] = { 0,
Lev Walkinf59d0752004-08-18 04:59:12 +0000438 115, 116, 116, 117, 118, 118, 119, 119, 120, 120,
439 121, 121, 121, 122, 122, 123, 123, 124, 124, 124,
440 124, 124, 125, 125, 126, 126, 127, 127, 127, 127,
441 127, 128, 127, 127, 129, 129, 130, 130, 131, 132,
442 132, 133, 133, 134, 134, 134, 135, 135, 136, 136,
443 137, 138, 138, 139, 139, 140, 140, 140, 140, 141,
444 141, 142, 142, 142, 143, 143, 144, 144, 145, 145,
Lev Walkin070a52d2004-08-22 03:19:54 +0000445 146, 146, 146, 147, 147, 148, 148, 149, 150, 150,
446 151, 151, 152, 152, 152, 153, 153, 155, 154, 156,
447 156, 157, 157, 158, 158, 158, 159, 160, 160, 160,
448 160, 160, 160, 160, 160, 160, 160, 160, 160, 161,
449 161, 161, 161, 161, 162, 162, 163, 164, 165, 165,
450 166, 168, 167, 167, 167, 167, 167, 167, 169, 169,
451 170, 170, 171, 171, 171, 171, 171, 171, 171, 171,
452 171, 171, 171, 171, 172, 172, 172, 173, 173, 174,
453 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
454 174, 174, 174, 175, 175, 176, 176, 177, 178, 178,
455 179, 179, 180, 180, 181, 181, 181, 182, 182, 182,
456 182, 183, 183, 183, 183, 183, 183, 183, 183, 183,
457 184, 184, 184, 184, 185, 185, 186, 186, 186, 186,
458 186, 187, 188, 188, 189, 189, 190, 190, 191, 191,
459 191, 192, 192, 193, 194, 195, 195, 196, 196, 197,
460 197, 198, 198, 199, 199, 200, 200, 201, 200, 202,
461 202, 203, 203, 204, 204, 204, 204, 204, 205, 205,
462 206, 206, 207, 207, 207, 208, 208, 209, 210, 211,
463 211
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000464};
465
466static const short yyr2[] = { 0,
467 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
468 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
Lev Walkinf59d0752004-08-18 04:59:12 +0000469 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
470 1, 0, 3, 1, 3, 2, 1, 2, 4, 1,
471 3, 1, 1, 3, 3, 2, 1, 3, 1, 1,
472 6, 1, 1, 0, 1, 4, 4, 3, 6, 1,
473 3, 1, 3, 3, 1, 3, 1, 1, 1, 3,
Lev Walkin070a52d2004-08-22 03:19:54 +0000474 3, 3, 1, 1, 3, 2, 1, 5, 0, 1,
475 1, 3, 2, 4, 4, 0, 1, 0, 6, 1,
476 2, 1, 1, 1, 3, 3, 2, 1, 1, 4,
477 4, 4, 4, 4, 1, 4, 4, 1, 3, 1,
Lev Walkind2ea1de2004-08-20 13:25:29 +0000478 3, 3, 1, 3, 1, 3, 1, 1, 1, 1,
479 4, 0, 3, 1, 1, 1, 1, 1, 1, 3,
480 1, 2, 1, 1, 1, 1, 2, 2, 1, 1,
481 2, 2, 1, 1, 1, 1, 2, 1, 2, 1,
Lev Walkinf59d0752004-08-18 04:59:12 +0000482 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin070a52d2004-08-22 03:19:54 +0000483 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
484 1, 4, 3, 4, 1, 3, 5, 1, 3, 3,
485 3, 4, 3, 1, 3, 3, 3, 3, 1, 1,
486 1, 2, 2, 3, 1, 1, 1, 1, 1, 1,
487 1, 5, 1, 3, 1, 3, 0, 1, 1, 1,
488 1, 1, 1, 3, 4, 1, 3, 2, 3, 1,
489 3, 0, 1, 1, 2, 1, 1, 0, 3, 2,
490 3, 1, 3, 1, 4, 4, 1, 1, 1, 1,
491 0, 1, 1, 2, 2, 1, 1, 1, 1, 1,
492 2
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000493};
494
495static const short yydefact[] = { 0,
Lev Walkin070a52d2004-08-22 03:19:54 +0000496 246, 247, 1, 2, 5, 3, 0, 0, 6, 249,
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000497 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
Lev Walkinf59d0752004-08-18 04:59:12 +0000498 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
Lev Walkin070a52d2004-08-22 03:19:54 +0000499 18, 21, 19, 0, 17, 12, 23, 150, 0, 0,
500 151, 152, 153, 0, 154, 155, 163, 156, 157, 158,
501 159, 160, 161, 162, 0, 24, 25, 27, 28, 31,
Lev Walkinf59d0752004-08-18 04:59:12 +0000502 29, 30, 34, 0, 0, 32, 0, 46, 0, 47,
503 49, 50, 36, 0, 37, 0, 40, 42, 43, 4,
Lev Walkin070a52d2004-08-22 03:19:54 +0000504 26, 241, 110, 248, 0, 133, 0, 0, 146, 140,
505 144, 145, 134, 0, 0, 135, 139, 143, 0, 0,
506 52, 53, 136, 113, 0, 33, 45, 44, 0, 35,
507 38, 0, 0, 0, 243, 58, 0, 242, 0, 147,
508 142, 141, 138, 137, 0, 60, 0, 62, 0, 0,
509 0, 48, 5, 41, 0, 245, 244, 110, 248, 105,
510 0, 0, 169, 169, 56, 57, 169, 108, 148, 136,
511 98, 99, 0, 111, 112, 0, 0, 0, 0, 54,
512 119, 120, 114, 115, 117, 124, 126, 125, 239, 240,
513 122, 121, 128, 127, 0, 129, 39, 0, 81, 222,
514 118, 0, 0, 0, 0, 0, 0, 0, 170, 171,
515 0, 0, 97, 0, 149, 0, 0, 61, 64, 63,
516 199, 200, 196, 0, 195, 201, 0, 0, 0, 0,
517 55, 175, 178, 0, 184, 190, 189, 212, 213, 197,
518 198, 0, 0, 0, 86, 0, 0, 224, 222, 222,
519 83, 223, 0, 94, 0, 74, 77, 250, 0, 109,
520 0, 0, 0, 69, 73, 0, 0, 0, 0, 0,
521 0, 238, 230, 0, 232, 237, 234, 0, 65, 67,
522 68, 59, 191, 0, 0, 0, 0, 0, 51, 166,
523 167, 164, 165, 0, 0, 0, 168, 0, 0, 0,
524 0, 116, 131, 123, 130, 0, 78, 87, 82, 228,
525 227, 226, 225, 79, 79, 106, 0, 100, 0, 251,
526 76, 0, 0, 101, 0, 222, 173, 103, 0, 102,
527 104, 231, 0, 0, 107, 0, 192, 193, 188, 186,
528 0, 214, 183, 176, 179, 180, 181, 0, 187, 185,
529 0, 0, 216, 132, 0, 0, 80, 84, 85, 95,
530 96, 75, 172, 72, 70, 71, 174, 233, 0, 0,
531 66, 194, 205, 0, 203, 169, 0, 182, 0, 218,
532 220, 215, 0, 88, 229, 236, 235, 202, 0, 207,
533 177, 219, 0, 217, 0, 204, 210, 211, 209, 206,
534 208, 221, 92, 0, 90, 93, 89, 91, 0, 0,
535 0
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000536};
537
Lev Walkin070a52d2004-08-22 03:19:54 +0000538static const short yydefgoto[] = { 389,
Lev Walkinf59d0752004-08-18 04:59:12 +0000539 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
540 56, 57, 106, 58, 74, 75, 76, 77, 59, 69,
Lev Walkin070a52d2004-08-22 03:19:54 +0000541 70, 60, 100, 210, 61, 125, 126, 258, 259, 243,
542 244, 235, 236, 116, 338, 178, 179, 287, 288, 375,
543 384, 385, 245, 260, 147, 148, 163, 164, 180, 181,
544 62, 172, 223, 173, 284, 149, 150, 151, 152, 275,
545 276, 278, 188, 189, 190, 211, 212, 213, 265, 214,
546 215, 216, 354, 355, 380, 381, 217, 218, 219, 332,
547 333, 360, 231, 232, 293, 336, 195, 254, 255, 220,
548 117, 118, 153, 104, 221, 246
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000549};
550
Lev Walkin070a52d2004-08-22 03:19:54 +0000551static const short yypact[] = { 174,
552-32768,-32768, 174,-32768, -76,-32768, 35, 104,-32768,-32768,
553-32768,-32768, 45,-32768, -49, 182,-32768,-32768, 70, 86,
554 62, 71, 119, 112, 196, 182,-32768, 115,-32768,-32768,
555-32768,-32768,-32768, 188,-32768,-32768, 431,-32768, 207, 23,
556-32768,-32768,-32768, 159,-32768,-32768,-32768,-32768,-32768,-32768,
557-32768,-32768,-32768,-32768, 185, 431,-32768,-32768,-32768,-32768,
558-32768,-32768,-32768, 192, 209,-32768, 129,-32768, 103,-32768,
559-32768,-32768,-32768, 40,-32768, -5,-32768,-32768,-32768,-32768,
560-32768, -6, 134,-32768, 146,-32768, 179, 194,-32768,-32768,
561-32768,-32768,-32768, 220, 201,-32768,-32768,-32768, 729, 272,
562-32768,-32768,-32768, 172, 286,-32768,-32768,-32768, 232,-32768,
563-32768, 174, 232, 187, 37,-32768, 592,-32768, 232,-32768,
564-32768,-32768,-32768,-32768, 32,-32768, 183, 184, 191, 216,
565 54,-32768, -76,-32768, 216,-32768,-32768, -31, 193, 270,
566 206, 240, 77, 102,-32768,-32768, 50,-32768,-32768, 208,
567-32768,-32768, 217,-32768,-32768, 308, 729, 305, 305, 74,
568-32768,-32768, 214,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
569-32768,-32768,-32768,-32768, 215,-32768,-32768, 57,-32768, 515,
570-32768, 295, 21, 276, 222, 42, 74, 261,-32768, 224,
571 42, 264,-32768, 11,-32768, 370, 669,-32768,-32768,-32768,
572-32768,-32768,-32768, -15,-32768,-32768, 304, 174, 74, 231,
573-32768, 164, 241, 233, -15,-32768,-32768, 234,-32768,-32768,
574-32768, 216, 336, 305, 246, 216, 309,-32768, 5, 5,
575-32768,-32768, 305, 235, 83,-32768,-32768, 239, 669,-32768,
576 74, 275, 92,-32768,-32768, 669, 237, 669, 74, 133,
577 669,-32768,-32768, 142,-32768,-32768, 242, 143,-32768,-32768,
578-32768,-32768, 238, 249, 82, 243, 250, 251,-32768,-32768,
579-32768,-32768,-32768, 255, 74, 74,-32768, 74, 74, 155,
580 245,-32768,-32768, 356,-32768, 279,-32768,-32768,-32768,-32768,
581-32768,-32768,-32768, 277, 277,-32768, 269,-32768, 21,-32768,
582-32768, 256, 669,-32768, 42, 5,-32768,-32768, 257,-32768,
583-32768,-32768, 15, 269,-32768, 370,-32768, 258,-32768,-32768,
584 24,-32768,-32768, 259,-32768,-32768,-32768, 262,-32768,-32768,
585 10, 149,-32768,-32768, 266, 336,-32768,-32768,-32768,-32768,
586-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 268, 273,
587-32768,-32768,-32768, 161,-32768, 50, 74,-32768, 305, 265,
588-32768,-32768, 245,-32768, 356,-32768,-32768,-32768, 24, 80,
589 204, 265, 305,-32768, 96,-32768,-32768,-32768,-32768,-32768,
590-32768,-32768,-32768, 13,-32768,-32768,-32768,-32768, 373, 379,
591-32768
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000592};
593
594static const short yypgoto[] = {-32768,
Lev Walkin070a52d2004-08-22 03:19:54 +0000595-32768, 380, 254,-32768,-32768, 371,-32768,-32768, 363,-32768,
596-32768, 334,-32768,-32768,-32768, 317,-32768, 285,-32768,-32768,
597 290,-32768, 337,-32768,-32768,-32768, 244,-32768, 87, 213,
598 100,-32768, 108,-32768, 113,-32768, 186,-32768,-32768,-32768,
599-32768, 25, -174, -110, -152, -50,-32768, 189, -177, -94,
600-32768,-32768,-32768, -220, 79, -54, -52,-32768, 19,-32768,
601-32768,-32768, -143,-32768,-32768, -102, 59, 47, 210,-32768,
602 -172,-32768,-32768, 52,-32768,-32768,-32768,-32768,-32768,-32768,
603 60, 63, -161,-32768,-32768,-32768,-32768,-32768, 111, -123,
604-32768, 200, 2,-32768, -7, -167
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000605};
606
607
Lev Walkin070a52d2004-08-22 03:19:54 +0000608#define YYLAST 820
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000609
610
611static const short yytable[] = { 15,
Lev Walkin070a52d2004-08-22 03:19:54 +0000612 192, 5, 230, 193, 5, 15, 146, 174, 237, 102,
613 102, 103, 103, 101, 101, 239, 383, 10, 10, 169,
614 170, 114, 10, 169, 170, 161, 162, 7, 10, 65,
615 10, 10, 72, 1, 2, 165, 79, 227, 64, 67,
616 112, 71, 10, 11, 127, 78, 103, 10, 65, 10,
617 1, 2, 10, 11, 292, 63, 19, 64, 166, 167,
618 168, 10, 169, 170, 1, 2, 79, 294, 295, 229,
619 256, 242, -246, 228, 63, 78, 340, 136, 28, 201,
620 119, 10, 169, 170, 247, 263, 262, 201, 137, 10,
621 169, 170, 320, 349, 377, 308, 115, 264, 311, 383,
622 128, 72, 127, 113, 103, 79, 268, 330, 161, 162,
623 71, 155, 252, 133, 78, 253, 252, 387, 202, 203,
624 154, 359, 234, 176, 237, 353, 202, 165, 301, 185,
625 68, 239, 175, 240, 204, 306, 156, 16, 302, 12,
626 157, 319, 29, 234, 346, 30, 309, 110, 378, 17,
627 199, 200, 379, 205, 31, 187, 185, 171, 128, 206,
628 201, 225, 10, 169, 170, 226, 10, 206, 207, 1,
629 2, 32, 291, 341, 103, 238, 328, 208, 238, 209,
630 186, 185, 187, 238, 1, 2, 257, 298, 261, 256,
631 350, 299, 344, 20, 82, 33, 304, 386, 34, 202,
632 305, 21, 83, 84, 73, 191, 386, 187, 37, 267,
633 108, 109, 370, 85, 329, 86, 285, 87, 66, 83,
634 84, 36, 22, 80, 23, 296, 120, 88, 161, 162,
635 85, 89, 86, 24, 87, 90, 107, 310, 91, 10,
636 206, 305, 1, 2, 88, 119, 312, 315, 89, 92,
637 313, 316, 90, 362, 93, 91, 94, 363, 95, 121,
638 270, 271, 272, 273, 122, 368, 92, 96, 97, 369,
639 123, 93, 274, 94, 129, 95, 10, 169, 170, 1,
640 2, 124, 98, 130, 96, 97, 83, 84, 131, 176,
641 135, 238, 158, 159, 160, 99, -247, 238, 175, 98,
642 270, 271, 272, 273, 182, 257, 176, 184, 261, 183,
643 197, 194, 10, 356, 201, 175, 10, 169, 170, 233,
644 196, 325, 326, 361, 327, 222, 224, 241, 248, 249,
645 85, 251, 86, 266, 87, 269, 277, 281, 279, 283,
646 286, 115, 303, 307, 88, 297, 321, 314, 89, 318,
647 317, 361, 90, 202, 322, 91, 324, 323, 331, 334,
648 335, 356, 343, 347, 337, 382, 92, 357, 358, 364,
649 352, 93, 390, 94, 366, 95, 373, 10, 391, 367,
650 138, 139, 6, 18, 96, 97, 177, 140, 35, 81,
651 111, 85, 38, 86, 206, 87, 141, 134, 132, 98,
652 198, 105, 351, 250, 345, 88, 342, 339, 388, 89,
653 282, 289, 290, 90, 365, 371, 91, 41, 42, 43,
654 376, 372, 374, 348, 280, 142, 0, 92, 45, 0,
655 0, 0, 93, 46, 94, 47, 95, 300, 10, 0,
656 0, 1, 2, 48, 0, 96, 97, 143, 144, 0,
657 0, 0, 49, 38, 50, 0, 0, 0, 0, 51,
658 98, 52, 53, 54, 0, 0, 0, 0, 39, 0,
659 0, 0, 40, 0, 0, 0, 0, 0, 41, 42,
660 43, 0, 0, 0, 44, 0, 0, 0, 0, 45,
661 0, 0, 0, 0, 46, 0, 47, 0, 0, 0,
662 0, 0, 0, 0, 48, 0, 0, 0, 0, 0,
663 0, 0, 0, 49, 0, 50, 0, 0, 0, 0,
664 51, 0, 52, 53, 54, 138, 139, 161, 162, 0,
665 0, 0, 140, 0, 0, 0, 85, 38, 86, 0,
666 87, 141, 0, 0, 0, 0, 0, 227, 0, 0,
667 88, 0, 0, 0, 89, 0, 0, 0, 90, 0,
668 0, 91, 41, 42, 43, 0, 0, 0, 0, 0,
669 142, 0, 92, 45, 0, 0, 0, 93, 46, 94,
670 47, 95, 0, 228, 0, 0, 0, 0, 48, 0,
671 96, 97, 143, 144, 0, 0, 0, 49, 0, 50,
672 0, 0, 138, 139, 51, 98, 52, 53, 54, 140,
673 0, 0, 0, 85, 38, 86, 0, 87, 141, 0,
674 0, 0, 0, 0, 0, 0, 0, 88, 0, 0,
675 0, 89, 0, 0, 0, 90, 0, 0, 91, 41,
676 42, 43, 0, 0, 0, 0, 0, 142, 0, 92,
677 45, 0, 0, 0, 93, 46, 94, 47, 95, 0,
678 0, 0, 0, 0, 0, 48, 0, 96, 97, 143,
679 144, 0, 0, 0, 49, 0, 50, 0, 145, 138,
680 139, 51, 98, 52, 53, 54, 140, 0, 0, 0,
Lev Walkinf59d0752004-08-18 04:59:12 +0000681 85, 38, 86, 0, 87, 141, 0, 0, 0, 0,
Lev Walkin070a52d2004-08-22 03:19:54 +0000682 0, 0, 0, 0, 88, 0, 0, 0, 89, 0,
Lev Walkinf59d0752004-08-18 04:59:12 +0000683 0, 0, 90, 0, 0, 91, 41, 42, 43, 0,
684 0, 0, 0, 0, 142, 0, 92, 45, 0, 0,
Lev Walkin070a52d2004-08-22 03:19:54 +0000685 0, 93, 46, 94, 47, 95, 0, 0, 0, 1,
686 2, 0, 48, 0, 96, 97, 143, 144, 0, 0,
687 85, 49, 86, 50, 87, 0, 0, 0, 51, 98,
688 52, 53, 54, 0, 88, 0, 0, 0, 89, 0,
689 0, 0, 90, 0, 0, 91, 0, 0, 0, 0,
690 0, 0, 0, 0, 0, 0, 92, 0, 0, 0,
691 0, 93, 0, 94, 0, 95, 0, 0, 0, 0,
692 0, 0, 0, 0, 96, 97, 0, 0, 0, 0,
693 0, 0, 0, 0, 0, 0, 0, 0, 0, 98
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000694};
695
696static const short yycheck[] = { 7,
Lev Walkin070a52d2004-08-22 03:19:54 +0000697 144, 0, 180, 147, 3, 13, 117, 131, 183, 64,
698 65, 64, 65, 64, 65, 183, 4, 8, 8, 9,
699 10, 28, 8, 9, 10, 13, 14, 104, 8, 37,
700 8, 8, 40, 11, 12, 130, 44, 33, 37, 17,
701 46, 40, 8, 9, 99, 44, 99, 8, 56, 8,
702 11, 12, 8, 9, 227, 37, 106, 56, 5, 6,
703 7, 8, 9, 10, 11, 12, 74, 229, 230, 180,
704 194, 30, 104, 69, 56, 74, 297, 41, 9, 6,
705 112, 8, 9, 10, 187, 101, 197, 6, 52, 8,
706 9, 10, 265, 314, 15, 248, 103, 113, 251, 4,
707 99, 109, 157, 109, 157, 113, 209, 280, 13, 14,
708 109, 119, 102, 112, 113, 105, 102, 105, 45, 46,
709 119, 112, 102, 131, 299, 102, 45, 222, 239, 80,
710 108, 299, 131, 184, 61, 246, 105, 34, 241, 105,
711 109, 60, 57, 102, 306, 84, 249, 108, 69, 105,
712 158, 159, 73, 80, 84, 106, 80, 104, 157, 86,
713 6, 105, 8, 9, 10, 109, 8, 86, 95, 11,
714 12, 53, 227, 297, 227, 183, 279, 104, 186, 106,
715 104, 80, 106, 191, 11, 12, 194, 105, 196, 313,
716 314, 109, 303, 12, 3, 84, 105, 375, 3, 45,
717 109, 20, 11, 12, 46, 104, 384, 106, 21, 208,
718 108, 109, 356, 22, 60, 24, 224, 26, 12, 11,
719 12, 107, 41, 39, 43, 233, 81, 36, 13, 14,
720 22, 40, 24, 52, 26, 44, 108, 105, 47, 8,
721 86, 109, 11, 12, 36, 112, 105, 105, 40, 58,
722 109, 109, 44, 105, 63, 47, 65, 109, 67, 81,
723 97, 98, 99, 100, 71, 105, 58, 76, 77, 109,
724 51, 63, 109, 65, 3, 67, 8, 9, 10, 11,
725 12, 81, 91, 112, 76, 77, 11, 12, 3, 297,
726 104, 299, 110, 110, 104, 104, 104, 305, 297, 91,
727 97, 98, 99, 100, 35, 313, 314, 68, 316, 104,
728 3, 104, 8, 321, 6, 314, 8, 9, 10, 25,
729 104, 275, 276, 331, 278, 112, 112, 106, 68, 106,
730 22, 68, 24, 30, 26, 105, 96, 104, 106, 4,
731 95, 103, 68, 107, 36, 111, 104, 106, 40, 101,
732 113, 359, 44, 45, 105, 47, 102, 107, 114, 4,
733 82, 369, 107, 107, 88, 373, 58, 109, 107, 104,
734 113, 63, 0, 65, 107, 67, 112, 8, 0, 107,
735 11, 12, 3, 13, 76, 77, 133, 18, 26, 56,
736 74, 22, 23, 24, 86, 26, 27, 113, 109, 91,
737 157, 65, 316, 191, 305, 36, 299, 295, 384, 40,
738 222, 226, 104, 44, 336, 357, 47, 48, 49, 50,
739 369, 359, 363, 313, 215, 56, -1, 58, 59, -1,
740 -1, -1, 63, 64, 65, 66, 67, 238, 8, -1,
741 -1, 11, 12, 74, -1, 76, 77, 78, 79, -1,
742 -1, -1, 83, 23, 85, -1, -1, -1, -1, 90,
743 91, 92, 93, 94, -1, -1, -1, -1, 38, -1,
744 -1, -1, 42, -1, -1, -1, -1, -1, 48, 49,
745 50, -1, -1, -1, 54, -1, -1, -1, -1, 59,
746 -1, -1, -1, -1, 64, -1, 66, -1, -1, -1,
747 -1, -1, -1, -1, 74, -1, -1, -1, -1, -1,
748 -1, -1, -1, 83, -1, 85, -1, -1, -1, -1,
749 90, -1, 92, 93, 94, 11, 12, 13, 14, -1,
750 -1, -1, 18, -1, -1, -1, 22, 23, 24, -1,
751 26, 27, -1, -1, -1, -1, -1, 33, -1, -1,
752 36, -1, -1, -1, 40, -1, -1, -1, 44, -1,
753 -1, 47, 48, 49, 50, -1, -1, -1, -1, -1,
754 56, -1, 58, 59, -1, -1, -1, 63, 64, 65,
755 66, 67, -1, 69, -1, -1, -1, -1, 74, -1,
756 76, 77, 78, 79, -1, -1, -1, 83, -1, 85,
757 -1, -1, 11, 12, 90, 91, 92, 93, 94, 18,
758 -1, -1, -1, 22, 23, 24, -1, 26, 27, -1,
759 -1, -1, -1, -1, -1, -1, -1, 36, -1, -1,
760 -1, 40, -1, -1, -1, 44, -1, -1, 47, 48,
761 49, 50, -1, -1, -1, -1, -1, 56, -1, 58,
762 59, -1, -1, -1, 63, 64, 65, 66, 67, -1,
763 -1, -1, -1, -1, -1, 74, -1, 76, 77, 78,
764 79, -1, -1, -1, 83, -1, 85, -1, 87, 11,
765 12, 90, 91, 92, 93, 94, 18, -1, -1, -1,
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000766 22, 23, 24, -1, 26, 27, -1, -1, -1, -1,
Lev Walkin070a52d2004-08-22 03:19:54 +0000767 -1, -1, -1, -1, 36, -1, -1, -1, 40, -1,
Lev Walkinf59d0752004-08-18 04:59:12 +0000768 -1, -1, 44, -1, -1, 47, 48, 49, 50, -1,
769 -1, -1, -1, -1, 56, -1, 58, 59, -1, -1,
Lev Walkin070a52d2004-08-22 03:19:54 +0000770 -1, 63, 64, 65, 66, 67, -1, -1, -1, 11,
771 12, -1, 74, -1, 76, 77, 78, 79, -1, -1,
772 22, 83, 24, 85, 26, -1, -1, -1, 90, 91,
773 92, 93, 94, -1, 36, -1, -1, -1, 40, -1,
774 -1, -1, 44, -1, -1, 47, -1, -1, -1, -1,
775 -1, -1, -1, -1, -1, -1, 58, -1, -1, -1,
776 -1, 63, -1, 65, -1, 67, -1, -1, -1, -1,
777 -1, -1, -1, -1, 76, 77, -1, -1, -1, -1,
778 -1, -1, -1, -1, -1, -1, -1, -1, -1, 91
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000779};
780/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
781#line 3 "/usr/share/bison.simple"
782/* This file comes from bison-1.28. */
783
784/* Skeleton output parser for bison,
785 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
786
787 This program is free software; you can redistribute it and/or modify
788 it under the terms of the GNU General Public License as published by
789 the Free Software Foundation; either version 2, or (at your option)
790 any later version.
791
792 This program is distributed in the hope that it will be useful,
793 but WITHOUT ANY WARRANTY; without even the implied warranty of
794 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
795 GNU General Public License for more details.
796
797 You should have received a copy of the GNU General Public License
798 along with this program; if not, write to the Free Software
799 Foundation, Inc., 59 Temple Place - Suite 330,
800 Boston, MA 02111-1307, USA. */
801
802/* As a special exception, when this file is copied by Bison into a
803 Bison output file, you may use that output file without restriction.
804 This special exception was added by the Free Software Foundation
805 in version 1.24 of Bison. */
806
807/* This is the parser code that is written into each bison parser
808 when the %semantic_parser declaration is not specified in the grammar.
809 It was written by Richard Stallman by simplifying the hairy parser
810 used when %semantic_parser is specified. */
811
812#ifndef YYSTACK_USE_ALLOCA
813#ifdef alloca
814#define YYSTACK_USE_ALLOCA
815#else /* alloca not defined */
816#ifdef __GNUC__
817#define YYSTACK_USE_ALLOCA
818#define alloca __builtin_alloca
819#else /* not GNU C. */
820#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
821#define YYSTACK_USE_ALLOCA
822#include <alloca.h>
823#else /* not sparc */
824/* We think this test detects Watcom and Microsoft C. */
825/* This used to test MSDOS, but that is a bad idea
826 since that symbol is in the user namespace. */
827#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
828#if 0 /* No need for malloc.h, which pollutes the namespace;
829 instead, just don't use alloca. */
830#include <malloc.h>
831#endif
832#else /* not MSDOS, or __TURBOC__ */
833#if defined(_AIX)
834/* I don't know what this was needed for, but it pollutes the namespace.
835 So I turned it off. rms, 2 May 1997. */
836/* #include <malloc.h> */
837 #pragma alloca
838#define YYSTACK_USE_ALLOCA
839#else /* not MSDOS, or __TURBOC__, or _AIX */
840#if 0
841#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
842 and on HPUX 10. Eventually we can turn this on. */
843#define YYSTACK_USE_ALLOCA
844#define alloca __builtin_alloca
845#endif /* __hpux */
846#endif
847#endif /* not _AIX */
848#endif /* not MSDOS, or __TURBOC__ */
849#endif /* not sparc */
850#endif /* not GNU C */
851#endif /* alloca not defined */
852#endif /* YYSTACK_USE_ALLOCA not defined */
853
854#ifdef YYSTACK_USE_ALLOCA
855#define YYSTACK_ALLOC alloca
Lev Walkinf15320b2004-06-03 03:38:44 +0000856#else
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000857#define YYSTACK_ALLOC malloc
Lev Walkinf15320b2004-06-03 03:38:44 +0000858#endif
859
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000860/* Note: there must be only one dollar sign in this file.
861 It is replaced by the list of actions, each action
862 as one case of the switch. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000863
864#define yyerrok (yyerrstatus = 0)
865#define yyclearin (yychar = YYEMPTY)
866#define YYEMPTY -2
867#define YYEOF 0
868#define YYACCEPT goto yyacceptlab
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000869#define YYABORT goto yyabortlab
Lev Walkinf15320b2004-06-03 03:38:44 +0000870#define YYERROR goto yyerrlab1
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000871/* Like YYERROR except do call yyerror.
872 This remains here temporarily to ease the
873 transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +0000874 Once GCC version 2 has supplanted version 1, this can go. */
875#define YYFAIL goto yyerrlab
876#define YYRECOVERING() (!!yyerrstatus)
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000877#define YYBACKUP(token, value) \
Lev Walkinf15320b2004-06-03 03:38:44 +0000878do \
879 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000880 { yychar = (token), yylval = (value); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000881 yychar1 = YYTRANSLATE (yychar); \
882 YYPOPSTACK; \
883 goto yybackup; \
884 } \
885 else \
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000886 { yyerror ("syntax error: cannot back up"); YYERROR; } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000887while (0)
888
889#define YYTERROR 1
890#define YYERRCODE 256
891
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000892#ifndef YYPURE
893#define YYLEX yylex()
Lev Walkinf15320b2004-06-03 03:38:44 +0000894#endif
895
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000896#ifdef YYPURE
897#ifdef YYLSP_NEEDED
898#ifdef YYLEX_PARAM
899#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
900#else
901#define YYLEX yylex(&yylval, &yylloc)
902#endif
903#else /* not YYLSP_NEEDED */
904#ifdef YYLEX_PARAM
905#define YYLEX yylex(&yylval, YYLEX_PARAM)
906#else
907#define YYLEX yylex(&yylval)
908#endif
909#endif /* not YYLSP_NEEDED */
910#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000911
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000912/* If nonreentrant, generate the variables here */
Lev Walkinf15320b2004-06-03 03:38:44 +0000913
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000914#ifndef YYPURE
Lev Walkinf15320b2004-06-03 03:38:44 +0000915
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000916int yychar; /* the lookahead symbol */
917YYSTYPE yylval; /* the semantic value of the */
918 /* lookahead symbol */
Lev Walkinf15320b2004-06-03 03:38:44 +0000919
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000920#ifdef YYLSP_NEEDED
921YYLTYPE yylloc; /* location data for the lookahead */
922 /* symbol */
923#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000924
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000925int yynerrs; /* number of parse errors so far */
926#endif /* not YYPURE */
927
928#if YYDEBUG != 0
929int yydebug; /* nonzero means print parse trace */
930/* Since this is uninitialized, it does not stop multiple parsers
931 from coexisting. */
932#endif
933
934/* YYINITDEPTH indicates the initial size of the parser's stacks */
935
Lev Walkinf15320b2004-06-03 03:38:44 +0000936#ifndef YYINITDEPTH
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000937#define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +0000938#endif
939
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000940/* YYMAXDEPTH is the maximum size the stacks can grow to
941 (effective only if the built-in stack extension method is used). */
Lev Walkinf15320b2004-06-03 03:38:44 +0000942
943#if YYMAXDEPTH == 0
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000944#undef YYMAXDEPTH
Lev Walkinf15320b2004-06-03 03:38:44 +0000945#endif
946
947#ifndef YYMAXDEPTH
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000948#define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +0000949#endif
950
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000951/* Define __yy_memcpy. Note that the size argument
952 should be passed with type unsigned int, because that is what the non-GCC
953 definitions require. With GCC, __builtin_memcpy takes an arg
954 of type size_t, but it can handle unsigned int. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000955
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000956#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
957#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
958#else /* not GNU C or C++ */
959#ifndef __cplusplus
Lev Walkinf15320b2004-06-03 03:38:44 +0000960
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000961/* This is the most reliable way to avoid incompatibilities
962 in available built-in functions on various systems. */
Lev Walkinc3b72e92004-06-03 05:07:41 +0000963static void
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000964__yy_memcpy (to, from, count)
965 char *to;
966 char *from;
967 unsigned int count;
Lev Walkinc3b72e92004-06-03 05:07:41 +0000968{
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000969 register char *f = from;
970 register char *t = to;
971 register int i = count;
Lev Walkinc3b72e92004-06-03 05:07:41 +0000972
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000973 while (i-- > 0)
974 *t++ = *f++;
Lev Walkinc3b72e92004-06-03 05:07:41 +0000975}
Lev Walkinc3b72e92004-06-03 05:07:41 +0000976
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000977#else /* __cplusplus */
Lev Walkinc3b72e92004-06-03 05:07:41 +0000978
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000979/* This is the most reliable way to avoid incompatibilities
980 in available built-in functions on various systems. */
Lev Walkinc3b72e92004-06-03 05:07:41 +0000981static void
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000982__yy_memcpy (char *to, char *from, unsigned int count)
Lev Walkinc3b72e92004-06-03 05:07:41 +0000983{
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000984 register char *t = to;
985 register char *f = from;
986 register int i = count;
Lev Walkinc3b72e92004-06-03 05:07:41 +0000987
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000988 while (i-- > 0)
989 *t++ = *f++;
Lev Walkinf15320b2004-06-03 03:38:44 +0000990}
991
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000992#endif
993#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000994
Lev Walkinb4fcdd22004-08-13 12:35:09 +0000995#line 217 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +0000996
997/* The user can define YYPARSE_PARAM as the name of an argument to be passed
998 into yyparse. The argument should have type void *.
999 It should actually point to an object.
1000 Grammar actions can access the variable by casting it
1001 to the proper pointer type. */
1002
1003#ifdef YYPARSE_PARAM
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001004#ifdef __cplusplus
1005#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1006#define YYPARSE_PARAM_DECL
1007#else /* not __cplusplus */
1008#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1009#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1010#endif /* not __cplusplus */
1011#else /* not YYPARSE_PARAM */
1012#define YYPARSE_PARAM_ARG
1013#define YYPARSE_PARAM_DECL
1014#endif /* not YYPARSE_PARAM */
Lev Walkinf15320b2004-06-03 03:38:44 +00001015
1016/* Prevent warning if -Wstrict-prototypes. */
1017#ifdef __GNUC__
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001018#ifdef YYPARSE_PARAM
Lev Walkinf15320b2004-06-03 03:38:44 +00001019int yyparse (void *);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001020#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001021int yyparse (void);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001022#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001023#endif
Lev Walkinc3b72e92004-06-03 05:07:41 +00001024
Lev Walkinf15320b2004-06-03 03:38:44 +00001025int
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001026yyparse(YYPARSE_PARAM_ARG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001027 YYPARSE_PARAM_DECL
1028{
1029 register int yystate;
1030 register int yyn;
1031 register short *yyssp;
1032 register YYSTYPE *yyvsp;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001033 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1034 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
Lev Walkinf15320b2004-06-03 03:38:44 +00001035
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001036 short yyssa[YYINITDEPTH]; /* the state stack */
1037 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
Lev Walkinf15320b2004-06-03 03:38:44 +00001038
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001039 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1040 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
Lev Walkinf15320b2004-06-03 03:38:44 +00001041
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001042#ifdef YYLSP_NEEDED
1043 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1044 YYLTYPE *yyls = yylsa;
1045 YYLTYPE *yylsp;
1046
1047#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1048#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001049#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001050#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001051
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001052 int yystacksize = YYINITDEPTH;
1053 int yyfree_stacks = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001054
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001055#ifdef YYPURE
1056 int yychar;
1057 YYSTYPE yylval;
1058 int yynerrs;
1059#ifdef YYLSP_NEEDED
1060 YYLTYPE yylloc;
1061#endif
1062#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001063
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001064 YYSTYPE yyval; /* the variable used to return */
1065 /* semantic values from the action */
1066 /* routines */
Lev Walkinf15320b2004-06-03 03:38:44 +00001067
1068 int yylen;
1069
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001070#if YYDEBUG != 0
1071 if (yydebug)
1072 fprintf(stderr, "Starting parse\n");
1073#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001074
1075 yystate = 0;
1076 yyerrstatus = 0;
1077 yynerrs = 0;
1078 yychar = YYEMPTY; /* Cause a token to be read. */
1079
1080 /* Initialize stack pointers.
1081 Waste one element of value and location stack
1082 so that they stay on the same level as the state stack.
1083 The wasted elements are never initialized. */
1084
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001085 yyssp = yyss - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001086 yyvsp = yyvs;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001087#ifdef YYLSP_NEEDED
1088 yylsp = yyls;
1089#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001090
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001091/* Push a new state, which is found in yystate . */
1092/* In all cases, when you get here, the value and location stacks
1093 have just been pushed. so pushing a state here evens the stacks. */
1094yynewstate:
Lev Walkinf15320b2004-06-03 03:38:44 +00001095
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001096 *++yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001097
1098 if (yyssp >= yyss + yystacksize - 1)
1099 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001100 /* Give user a chance to reallocate the stack */
1101 /* Use copies of these so that the &'s don't force the real ones into memory. */
1102 YYSTYPE *yyvs1 = yyvs;
1103 short *yyss1 = yyss;
1104#ifdef YYLSP_NEEDED
1105 YYLTYPE *yyls1 = yyls;
1106#endif
1107
Lev Walkinf15320b2004-06-03 03:38:44 +00001108 /* Get the current used size of the three stacks, in elements. */
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001109 int size = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001110
1111#ifdef yyoverflow
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001112 /* Each stack pointer address is followed by the size of
1113 the data in use in that stack, in bytes. */
1114#ifdef YYLSP_NEEDED
1115 /* This used to be a conditional around just the two extra args,
1116 but that might be undefined if yyoverflow is a macro. */
1117 yyoverflow("parser stack overflow",
1118 &yyss1, size * sizeof (*yyssp),
1119 &yyvs1, size * sizeof (*yyvsp),
1120 &yyls1, size * sizeof (*yylsp),
1121 &yystacksize);
1122#else
1123 yyoverflow("parser stack overflow",
1124 &yyss1, size * sizeof (*yyssp),
1125 &yyvs1, size * sizeof (*yyvsp),
1126 &yystacksize);
1127#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001128
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001129 yyss = yyss1; yyvs = yyvs1;
1130#ifdef YYLSP_NEEDED
1131 yyls = yyls1;
1132#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001133#else /* no yyoverflow */
1134 /* Extend the stack our own way. */
1135 if (yystacksize >= YYMAXDEPTH)
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001136 {
1137 yyerror("parser stack overflow");
1138 if (yyfree_stacks)
1139 {
1140 free (yyss);
1141 free (yyvs);
1142#ifdef YYLSP_NEEDED
1143 free (yyls);
1144#endif
1145 }
1146 return 2;
1147 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001148 yystacksize *= 2;
1149 if (yystacksize > YYMAXDEPTH)
1150 yystacksize = YYMAXDEPTH;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001151#ifndef YYSTACK_USE_ALLOCA
1152 yyfree_stacks = 1;
1153#endif
1154 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1155 __yy_memcpy ((char *)yyss, (char *)yyss1,
1156 size * (unsigned int) sizeof (*yyssp));
1157 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1158 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1159 size * (unsigned int) sizeof (*yyvsp));
1160#ifdef YYLSP_NEEDED
1161 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1162 __yy_memcpy ((char *)yyls, (char *)yyls1,
1163 size * (unsigned int) sizeof (*yylsp));
1164#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001165#endif /* no yyoverflow */
1166
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001167 yyssp = yyss + size - 1;
1168 yyvsp = yyvs + size - 1;
1169#ifdef YYLSP_NEEDED
1170 yylsp = yyls + size - 1;
1171#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001172
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001173#if YYDEBUG != 0
1174 if (yydebug)
1175 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1176#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001177
1178 if (yyssp >= yyss + yystacksize - 1)
1179 YYABORT;
1180 }
1181
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001182#if YYDEBUG != 0
1183 if (yydebug)
1184 fprintf(stderr, "Entering state %d\n", yystate);
1185#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001186
1187 goto yybackup;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001188 yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001189
1190/* Do appropriate processing given the current state. */
1191/* Read a lookahead token if we need one and don't already have one. */
1192/* yyresume: */
1193
1194 /* First try to decide what to do without reference to lookahead token. */
1195
1196 yyn = yypact[yystate];
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001197 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001198 goto yydefault;
1199
1200 /* Not known => get a lookahead token if don't already have one. */
1201
1202 /* yychar is either YYEMPTY or YYEOF
1203 or a valid token in external form. */
1204
1205 if (yychar == YYEMPTY)
1206 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001207#if YYDEBUG != 0
1208 if (yydebug)
1209 fprintf(stderr, "Reading a token: ");
1210#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001211 yychar = YYLEX;
1212 }
1213
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001214 /* Convert token to internal form (in yychar1) for indexing tables with */
Lev Walkinf15320b2004-06-03 03:38:44 +00001215
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001216 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001217 {
1218 yychar1 = 0;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001219 yychar = YYEOF; /* Don't call YYLEX any more */
Lev Walkinf15320b2004-06-03 03:38:44 +00001220
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001221#if YYDEBUG != 0
1222 if (yydebug)
1223 fprintf(stderr, "Now at end of input.\n");
1224#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001225 }
1226 else
1227 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001228 yychar1 = YYTRANSLATE(yychar);
Lev Walkinf15320b2004-06-03 03:38:44 +00001229
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001230#if YYDEBUG != 0
1231 if (yydebug)
1232 {
1233 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1234 /* Give the individual parser a way to print the precise meaning
1235 of a token, for further debugging info. */
1236#ifdef YYPRINT
1237 YYPRINT (stderr, yychar, yylval);
1238#endif
1239 fprintf (stderr, ")\n");
1240 }
1241#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001242 }
1243
1244 yyn += yychar1;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001245 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001246 goto yydefault;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001247
Lev Walkinf15320b2004-06-03 03:38:44 +00001248 yyn = yytable[yyn];
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001249
1250 /* yyn is what to do for this token type in this state.
1251 Negative => reduce, -yyn is rule number.
1252 Positive => shift, yyn is new state.
1253 New state is final state => don't bother to shift,
1254 just return success.
1255 0, or most negative number => error. */
1256
1257 if (yyn < 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001258 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001259 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001260 goto yyerrlab;
1261 yyn = -yyn;
1262 goto yyreduce;
1263 }
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001264 else if (yyn == 0)
1265 goto yyerrlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001266
1267 if (yyn == YYFINAL)
1268 YYACCEPT;
1269
1270 /* Shift the lookahead token. */
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001271
1272#if YYDEBUG != 0
1273 if (yydebug)
1274 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1275#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001276
1277 /* Discard the token being shifted unless it is eof. */
1278 if (yychar != YYEOF)
1279 yychar = YYEMPTY;
1280
1281 *++yyvsp = yylval;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001282#ifdef YYLSP_NEEDED
1283 *++yylsp = yylloc;
1284#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001285
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001286 /* count tokens shifted since error; after three, turn off error status. */
1287 if (yyerrstatus) yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001288
1289 yystate = yyn;
1290 goto yynewstate;
1291
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001292/* Do the default action for the current state. */
Lev Walkinc3b72e92004-06-03 05:07:41 +00001293yydefault:
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001294
Lev Walkinf15320b2004-06-03 03:38:44 +00001295 yyn = yydefact[yystate];
1296 if (yyn == 0)
1297 goto yyerrlab;
1298
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001299/* Do a reduction. yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001300yyreduce:
1301 yylen = yyr2[yyn];
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001302 if (yylen > 0)
1303 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Lev Walkinf15320b2004-06-03 03:38:44 +00001304
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001305#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00001306 if (yydebug)
1307 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001308 int i;
Lev Walkinf15320b2004-06-03 03:38:44 +00001309
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001310 fprintf (stderr, "Reducing via rule %d (line %d), ",
1311 yyn, yyrline[yyn]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001312
1313 /* Print the symbols being reduced, and their result. */
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001314 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1315 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1316 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001317 }
1318#endif
Lev Walkinc3b72e92004-06-03 05:07:41 +00001319
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001320
1321 switch (yyn) {
1322
1323case 1:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001324#line 299 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001325{
1326 *(void **)param = yyvsp[0].a_grammar;
1327 ;
1328 break;}
1329case 2:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001330#line 305 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001331{
Lev Walkinf15320b2004-06-03 03:38:44 +00001332 yyval.a_grammar = asn1p_new();
1333 checkmem(yyval.a_grammar);
1334 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001335 ;
1336 break;}
1337case 3:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001338#line 310 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001339{
Lev Walkinf15320b2004-06-03 03:38:44 +00001340 yyval.a_grammar = yyvsp[-1].a_grammar;
1341 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001342 ;
1343 break;}
1344case 4:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001345#line 331 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001346{
Lev Walkinf15320b2004-06-03 03:38:44 +00001347
1348 if(yyvsp[-1].a_module) {
1349 yyval.a_module = yyvsp[-1].a_module;
1350 } else {
1351 /* There's a chance that a module is just plain empty */
1352 yyval.a_module = asn1p_module_new();
1353 }
1354 checkmem(yyval.a_module);
1355
1356 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1357 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1358 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001359 ;
1360 break;}
1361case 5:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001362#line 352 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001363{ yyval.a_oid = 0; ;
1364 break;}
1365case 6:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001366#line 353 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001367{ yyval.a_oid = yyvsp[0].a_oid; ;
1368 break;}
1369case 7:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001370#line 357 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001371{
Lev Walkinf15320b2004-06-03 03:38:44 +00001372 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001373 ;
1374 break;}
1375case 8:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001376#line 360 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001377{
Lev Walkinf15320b2004-06-03 03:38:44 +00001378 yyval.a_oid = 0;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001379 ;
1380 break;}
1381case 9:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001382#line 366 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001383{
Lev Walkinf15320b2004-06-03 03:38:44 +00001384 yyval.a_oid = asn1p_oid_new();
1385 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1386 if(yyvsp[0].a_oid_arc.name)
1387 free(yyvsp[0].a_oid_arc.name);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001388 ;
1389 break;}
1390case 10:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001391#line 372 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001392{
Lev Walkinf15320b2004-06-03 03:38:44 +00001393 yyval.a_oid = yyvsp[-1].a_oid;
1394 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1395 if(yyvsp[0].a_oid_arc.name)
1396 free(yyvsp[0].a_oid_arc.name);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001397 ;
1398 break;}
1399case 11:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001400#line 381 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001401{ /* iso */
Lev Walkinf15320b2004-06-03 03:38:44 +00001402 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1403 yyval.a_oid_arc.number = -1;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001404 ;
1405 break;}
1406case 12:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001407#line 385 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001408{ /* iso(1) */
Lev Walkinf15320b2004-06-03 03:38:44 +00001409 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1410 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001411 ;
1412 break;}
1413case 13:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001414#line 389 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001415{ /* 1 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001416 yyval.a_oid_arc.name = 0;
1417 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001418 ;
1419 break;}
1420case 14:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001421#line 399 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001422{ yyval.a_module_flags = MSF_NOFLAGS; ;
1423 break;}
1424case 15:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001425#line 400 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001426{
Lev Walkinf15320b2004-06-03 03:38:44 +00001427 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001428 ;
1429 break;}
1430case 16:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001431#line 409 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001432{
Lev Walkinf15320b2004-06-03 03:38:44 +00001433 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001434 ;
1435 break;}
1436case 17:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001437#line 412 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001438{
Lev Walkinf15320b2004-06-03 03:38:44 +00001439 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001440 ;
1441 break;}
1442case 18:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001443#line 421 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001444{
Lev Walkinf15320b2004-06-03 03:38:44 +00001445 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001446 ;
1447 break;}
1448case 19:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001449#line 424 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001450{
Lev Walkinf15320b2004-06-03 03:38:44 +00001451 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001452 ;
1453 break;}
1454case 20:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001455#line 427 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001456{
Lev Walkinf15320b2004-06-03 03:38:44 +00001457 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001458 ;
1459 break;}
1460case 21:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001461#line 430 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001462{
Lev Walkinf15320b2004-06-03 03:38:44 +00001463 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001464 ;
1465 break;}
1466case 22:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001467#line 434 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001468{
Lev Walkinf59d0752004-08-18 04:59:12 +00001469 /* X.680Amd1 specifies TAG and XER */
1470 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1471 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1472 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1473 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1474 } else {
1475 fprintf(stderr,
1476 "WARNING: %s INSTRUCTIONS at line %d: "
1477 "Unrecognized encoding reference\n",
1478 yyvsp[-1].tv_str, yylineno);
1479 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1480 }
1481 free(yyvsp[-1].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001482 ;
1483 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001484case 23:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001485#line 455 "asn1p_y.y"
Lev Walkinf59d0752004-08-18 04:59:12 +00001486{ yyval.a_module = 0; ;
1487 break;}
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001488case 24:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001489#line 456 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001490{
Lev Walkinf15320b2004-06-03 03:38:44 +00001491 yyval.a_module = yyvsp[0].a_module;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001492 ;
1493 break;}
1494case 25:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001495#line 465 "asn1p_y.y"
Lev Walkinf59d0752004-08-18 04:59:12 +00001496{
1497 yyval.a_module = yyvsp[0].a_module;
1498 ;
1499 break;}
1500case 26:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001501#line 468 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001502{
Lev Walkinf15320b2004-06-03 03:38:44 +00001503 yyval.a_module = yyvsp[-1].a_module;
1504
Lev Walkinf59d0752004-08-18 04:59:12 +00001505 /* Behave well when one of them is skipped. */
1506 if(!(yyvsp[-1].a_module)) {
1507 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1508 break;
1509 }
1510
Lev Walkinf15320b2004-06-03 03:38:44 +00001511#ifdef MY_IMPORT
1512#error MY_IMPORT DEFINED ELSEWHERE!
1513#endif
1514#define MY_IMPORT(foo,field) do { \
Lev Walkinbc55d232004-08-13 12:31:09 +00001515 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
Lev Walkinf15320b2004-06-03 03:38:44 +00001516 TQ_ADD(&(yyval.a_module->foo), \
1517 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1518 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001519 } \
1520 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1521 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001522
1523 MY_IMPORT(imports, xp_next);
1524 MY_IMPORT(exports, xp_next);
1525 MY_IMPORT(members, next);
1526#undef MY_IMPORT
1527
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001528 ;
1529 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001530case 27:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001531#line 501 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001532{
Lev Walkinf15320b2004-06-03 03:38:44 +00001533 yyval.a_module = yyvsp[0].a_module;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001534 ;
1535 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001536case 28:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001537#line 504 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001538{
Lev Walkinf15320b2004-06-03 03:38:44 +00001539 yyval.a_module = asn1p_module_new();
1540 checkmem(yyval.a_module);
1541 if(yyvsp[0].a_xports) {
1542 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1543 } else {
1544 /* "EXPORTS ALL;" ? */
1545 }
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001546 ;
1547 break;}
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001548case 29:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001549#line 513 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001550{
Lev Walkinf15320b2004-06-03 03:38:44 +00001551 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);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001556 ;
1557 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001558case 30:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001559#line 520 "asn1p_y.y"
Lev Walkinf59d0752004-08-18 04:59:12 +00001560{
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;}
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001568case 31:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001569#line 533 "asn1p_y.y"
Lev Walkinf59d0752004-08-18 04:59:12 +00001570{
1571 yyval.a_module = asn1p_module_new();
1572 checkmem(yyval.a_module);
1573 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1574 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1575 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1576 ;
1577 break;}
1578case 32:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001579#line 541 "asn1p_y.y"
Lev Walkinf59d0752004-08-18 04:59:12 +00001580{ asn1p_lexer_hack_push_encoding_control(); ;
1581 break;}
1582case 33:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001583#line 542 "asn1p_y.y"
Lev Walkinf59d0752004-08-18 04:59:12 +00001584{
1585 fprintf(stderr,
1586 "WARNING: ENCODING-CONTROL %s "
1587 "specification at line %d ignored\n",
1588 yyvsp[-1].tv_str, yylineno);
1589 free(yyvsp[-1].tv_str);
1590 yyval.a_module = 0;
1591 ;
1592 break;}
1593case 34:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001594#line 554 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001595{
Lev Walkinf15320b2004-06-03 03:38:44 +00001596 return yyerror(
1597 "Attempt to redefine a standard basic type, "
1598 "use -ftypesXY to switch back "
1599 "to older version of ASN.1 standard");
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001600 ;
1601 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001602case 35:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001603#line 568 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001604{
Lev Walkinf15320b2004-06-03 03:38:44 +00001605 yyval.a_module = yyvsp[-1].a_module;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001606 ;
1607 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001608case 36:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001609#line 574 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001610{
Lev Walkinf15320b2004-06-03 03:38:44 +00001611 return yyerror("Empty IMPORTS list");
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001612 ;
1613 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001614case 37:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001615#line 580 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001616{
Lev Walkinf15320b2004-06-03 03:38:44 +00001617 yyval.a_module = asn1p_module_new();
1618 checkmem(yyval.a_module);
1619 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001620 ;
1621 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001622case 38:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001623#line 585 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001624{
Lev Walkinf15320b2004-06-03 03:38:44 +00001625 yyval.a_module = yyvsp[-1].a_module;
1626 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001627 ;
1628 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001629case 39:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001630#line 592 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001631{
Lev Walkinf15320b2004-06-03 03:38:44 +00001632 yyval.a_xports = yyvsp[-3].a_xports;
1633 yyval.a_xports->from = yyvsp[-1].tv_str;
1634 yyval.a_xports->from_oid = yyvsp[0].a_oid;
1635 checkmem(yyval.a_xports);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001636 ;
1637 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001638case 40:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001639#line 601 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001640{
Lev Walkinf15320b2004-06-03 03:38:44 +00001641 yyval.a_xports = asn1p_xports_new();
1642 checkmem(yyval.a_xports);
1643 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001644 ;
1645 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001646case 41:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001647#line 606 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001648{
Lev Walkinf15320b2004-06-03 03:38:44 +00001649 yyval.a_xports = yyvsp[-2].a_xports;
1650 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001651 ;
1652 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001653case 42:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001654#line 613 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001655{
Lev Walkinf15320b2004-06-03 03:38:44 +00001656 yyval.a_expr = asn1p_expr_new(yylineno);
1657 checkmem(yyval.a_expr);
1658 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1659 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001660 ;
1661 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001662case 43:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001663#line 619 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001664{
Lev Walkinf15320b2004-06-03 03:38:44 +00001665 yyval.a_expr = asn1p_expr_new(yylineno);
1666 checkmem(yyval.a_expr);
1667 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1668 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001669 ;
1670 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001671case 44:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001672#line 628 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001673{
Lev Walkinf15320b2004-06-03 03:38:44 +00001674 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001675 ;
1676 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001677case 45:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001678#line 631 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001679{
Lev Walkinf15320b2004-06-03 03:38:44 +00001680 yyval.a_xports = 0;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001681 ;
1682 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001683case 46:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001684#line 634 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001685{
Lev Walkinf15320b2004-06-03 03:38:44 +00001686 /* Empty EXPORTS clause effectively prohibits export. */
1687 yyval.a_xports = asn1p_xports_new();
1688 checkmem(yyval.a_xports);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001689 ;
1690 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001691case 47:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001692#line 642 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001693{
Lev Walkinf15320b2004-06-03 03:38:44 +00001694 yyval.a_xports = asn1p_xports_new();
1695 assert(yyval.a_xports);
1696 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001697 ;
1698 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001699case 48:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001700#line 647 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001701{
Lev Walkinf15320b2004-06-03 03:38:44 +00001702 yyval.a_xports = yyvsp[-2].a_xports;
1703 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001704 ;
1705 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001706case 49:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001707#line 654 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001708{
Lev Walkinf15320b2004-06-03 03:38:44 +00001709 yyval.a_expr = asn1p_expr_new(yylineno);
1710 checkmem(yyval.a_expr);
1711 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1712 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001713 ;
1714 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001715case 50:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001716#line 660 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001717{
Lev Walkinf15320b2004-06-03 03:38:44 +00001718 yyval.a_expr = asn1p_expr_new(yylineno);
1719 checkmem(yyval.a_expr);
1720 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1721 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001722 ;
1723 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001724case 51:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001725#line 670 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001726{
Lev Walkinf15320b2004-06-03 03:38:44 +00001727 yyval.a_expr = yyvsp[-4].a_expr;
1728 assert(yyval.a_expr->Identifier == 0);
1729 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1730 yyval.a_expr->meta_type = AMT_VALUESET;
1731 // take care of optValueSetBody
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001732 ;
1733 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001734case 52:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001735#line 680 "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->reference = yyvsp[0].a_ref;
1740 yyval.a_expr->expr_type = A1TC_REFERENCE;
1741 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001742 ;
1743 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001744case 53:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001745#line 687 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001746{
Lev Walkinf15320b2004-06-03 03:38:44 +00001747 yyval.a_expr = asn1p_expr_new(yylineno);
1748 checkmem(yyval.a_expr);
1749 yyval.a_expr->expr_type = yyvsp[0].a_type;
1750 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001751 ;
1752 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001753case 54:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001754#line 696 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001755{ ;
1756 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001757case 55:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001758#line 697 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001759{
1760 ;
1761 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001762case 56:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001763#line 713 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001764{
Lev Walkinf15320b2004-06-03 03:38:44 +00001765 yyval.a_expr = asn1p_expr_new(yylineno);
1766 checkmem(yyval.a_expr);
1767 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1768 yyval.a_expr->tag = yyvsp[-1].a_tag;
1769 yyval.a_expr->expr_type = A1TC_TYPEID;
1770 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001771 ;
1772 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001773case 57:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001774#line 721 "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[-3].tv_str;
1778 yyval.a_expr->tag = yyvsp[-1].a_tag;
1779 assert(yyval.a_expr->expr_type);
1780 assert(yyval.a_expr->meta_type);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001781 ;
1782 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001783case 58:
Lev Walkind2ea1de2004-08-20 13:25:29 +00001784#line 728 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001785{
Lev Walkinf15320b2004-06-03 03:38:44 +00001786 yyval.a_expr = yyvsp[0].a_expr;
1787 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1788 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1789 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001790 ;
1791 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001792case 59:
Lev Walkin070a52d2004-08-22 03:19:54 +00001793#line 744 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001794{
Lev Walkinf15320b2004-06-03 03:38:44 +00001795 yyval.a_expr = yyvsp[0].a_expr;
1796 assert(yyval.a_expr->Identifier == 0);
1797 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1798 yyval.a_expr->params = yyvsp[-3].a_plist;
1799 yyval.a_expr->meta_type = AMT_PARAMTYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001800 ;
1801 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001802case 60:
Lev Walkin070a52d2004-08-22 03:19:54 +00001803#line 754 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001804{
Lev Walkinf15320b2004-06-03 03:38:44 +00001805 int ret;
1806 yyval.a_plist = asn1p_paramlist_new(yylineno);
1807 checkmem(yyval.a_plist);
1808 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1809 checkmem(ret == 0);
1810 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1811 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001812 ;
1813 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001814case 61:
Lev Walkin070a52d2004-08-22 03:19:54 +00001815#line 763 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001816{
Lev Walkinf15320b2004-06-03 03:38:44 +00001817 int ret;
1818 yyval.a_plist = yyvsp[-2].a_plist;
1819 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1820 checkmem(ret == 0);
1821 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1822 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001823 ;
1824 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001825case 62:
Lev Walkin070a52d2004-08-22 03:19:54 +00001826#line 774 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001827{
Lev Walkinf15320b2004-06-03 03:38:44 +00001828 yyval.a_parg.governor = NULL;
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 63:
Lev Walkin070a52d2004-08-22 03:19:54 +00001833#line 778 "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, yyvsp[-2].tv_str, 0);
1838 checkmem(ret == 0);
1839 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001840 ;
1841 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001842case 64:
Lev Walkin070a52d2004-08-22 03:19:54 +00001843#line 785 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001844{
Lev Walkinf15320b2004-06-03 03:38:44 +00001845 int ret;
1846 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1847 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1848 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1849 checkmem(ret == 0);
1850 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001851 ;
1852 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001853case 65:
Lev Walkin070a52d2004-08-22 03:19:54 +00001854#line 796 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001855{
Lev Walkinf15320b2004-06-03 03:38:44 +00001856 yyval.a_expr = asn1p_expr_new(yylineno);
1857 checkmem(yyval.a_expr);
1858 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001859 ;
1860 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001861case 66:
Lev Walkin070a52d2004-08-22 03:19:54 +00001862#line 801 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001863{
Lev Walkinf15320b2004-06-03 03:38:44 +00001864 yyval.a_expr = yyvsp[-2].a_expr;
1865 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001866 ;
1867 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001868case 67:
Lev Walkin070a52d2004-08-22 03:19:54 +00001869#line 808 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001870{
Lev Walkinf15320b2004-06-03 03:38:44 +00001871 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001872 ;
1873 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001874case 68:
Lev Walkin070a52d2004-08-22 03:19:54 +00001875#line 811 "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 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1880 yyval.a_expr->expr_type = A1TC_REFERENCE;
1881 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001882 ;
1883 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001884case 69:
Lev Walkin070a52d2004-08-22 03:19:54 +00001885#line 824 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001886{
Lev Walkinf15320b2004-06-03 03:38:44 +00001887 yyval.a_expr = asn1p_expr_new(yylineno);
1888 checkmem(yyval.a_expr);
1889 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001890 ;
1891 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001892case 70:
Lev Walkin070a52d2004-08-22 03:19:54 +00001893#line 829 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001894{
Lev Walkinf15320b2004-06-03 03:38:44 +00001895 yyval.a_expr = yyvsp[-2].a_expr;
1896 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001897 ;
1898 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00001899case 71:
Lev Walkin070a52d2004-08-22 03:19:54 +00001900#line 836 "asn1p_y.y"
1901{
1902 yyval.a_expr = yyvsp[-1].a_expr;
1903 assert(yyval.a_expr->Identifier == 0);
1904 yyval.a_expr->Identifier = yyvsp[-2].tv_nametag.name;
1905 yyval.a_expr->tag = yyvsp[-2].tv_nametag.tag;
1906 yyval.a_expr->marker = yyvsp[0].a_marker;
1907 ;
1908 break;}
1909case 72:
1910#line 843 "asn1p_y.y"
1911{
1912 yyval.a_expr = asn1p_expr_new(yylineno);
1913 checkmem(yyval.a_expr);
1914 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1915 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
1916 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
1917 ;
1918 break;}
1919case 73:
1920#line 850 "asn1p_y.y"
1921{
1922 yyval.a_expr = yyvsp[0].a_expr;
1923 ;
1924 break;}
1925case 74:
1926#line 856 "asn1p_y.y"
1927{
1928 yyval.a_expr = asn1p_expr_new(yylineno);
1929 checkmem(yyval.a_expr);
1930 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
1931 ;
1932 break;}
1933case 75:
1934#line 861 "asn1p_y.y"
1935{
1936 yyval.a_expr = yyvsp[-2].a_expr;
1937 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
1938 ;
1939 break;}
1940case 76:
1941#line 868 "asn1p_y.y"
1942{
1943 yyval.a_expr = yyvsp[0].a_expr;
1944 assert(yyval.a_expr->Identifier == 0);
1945 yyval.a_expr->Identifier = yyvsp[-1].tv_nametag.name;
1946 yyval.a_expr->tag = yyvsp[-1].tv_nametag.tag;
1947 ;
1948 break;}
1949case 77:
1950#line 874 "asn1p_y.y"
1951{
1952 yyval.a_expr = yyvsp[0].a_expr;
1953 ;
1954 break;}
1955case 78:
1956#line 880 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001957{
Lev Walkinf15320b2004-06-03 03:38:44 +00001958 yyval.a_expr = yyvsp[-2].a_expr;
1959 checkmem(yyval.a_expr);
1960 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
1961 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1962 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001963 ;
1964 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00001965case 79:
1966#line 890 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001967{ yyval.a_int = 0; ;
1968 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00001969case 80:
1970#line 891 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001971{ yyval.a_int = 1; ;
1972 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00001973case 81:
1974#line 895 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001975{
Lev Walkinf15320b2004-06-03 03:38:44 +00001976 yyval.a_expr = asn1p_expr_new(yylineno);
1977 checkmem(yyval.a_expr);
1978 yyval.a_expr->expr_type = A1TC_CLASSDEF;
1979 yyval.a_expr->meta_type = AMT_OBJECT;
1980 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001981 ;
1982 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00001983case 82:
1984#line 902 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001985{
Lev Walkinf15320b2004-06-03 03:38:44 +00001986 yyval.a_expr = yyvsp[-2].a_expr;
1987 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001988 ;
1989 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00001990case 83:
1991#line 909 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001992{
Lev Walkinf15320b2004-06-03 03:38:44 +00001993 yyval.a_expr = asn1p_expr_new(yylineno);
1994 checkmem(yyval.a_expr);
1995 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
1996 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
1997 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
1998 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00001999 ;
2000 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002001case 84:
2002#line 917 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002003{
Lev Walkin070a52d2004-08-22 03:19:54 +00002004 yyval.a_expr = yyvsp[-2].a_expr;
2005 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2006 yyval.a_expr->marker = yyvsp[-1].a_marker;
Lev Walkinf15320b2004-06-03 03:38:44 +00002007 yyval.a_expr->unique = yyvsp[0].a_int;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002008 ;
2009 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002010case 85:
2011#line 923 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002012{
Lev Walkinf15320b2004-06-03 03:38:44 +00002013 int ret;
2014 yyval.a_expr = asn1p_expr_new(yylineno);
2015 checkmem(yyval.a_expr);
2016 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2017 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2018 checkmem(yyval.a_expr->reference);
2019 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2020 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2021 checkmem(ret == 0);
2022 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2023 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2024 yyval.a_expr->marker = yyvsp[-1].a_marker;
2025 yyval.a_expr->unique = yyvsp[0].a_int;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002026 ;
2027 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002028case 86:
2029#line 941 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002030{ yyval.a_wsynt = 0; ;
2031 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002032case 87:
2033#line 942 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002034{
Lev Walkinf15320b2004-06-03 03:38:44 +00002035 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002036 ;
2037 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002038case 88:
2039#line 949 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002040{ asn1p_lexer_hack_enable_with_syntax(); ;
2041 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002042case 89:
2043#line 951 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002044{
Lev Walkinf15320b2004-06-03 03:38:44 +00002045 yyval.a_wsynt = yyvsp[-1].a_wsynt;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002046 ;
2047 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002048case 90:
2049#line 957 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002050{
Lev Walkinf15320b2004-06-03 03:38:44 +00002051 yyval.a_wsynt = asn1p_wsyntx_new();
2052 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002053 ;
2054 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002055case 91:
2056#line 961 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002057{
Lev Walkinf15320b2004-06-03 03:38:44 +00002058 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2059 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002060 ;
2061 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002062case 92:
2063#line 968 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002064{
Lev Walkinf15320b2004-06-03 03:38:44 +00002065 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 +00002066 ;
2067 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002068case 93:
2069#line 971 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002070{
Lev Walkinf15320b2004-06-03 03:38:44 +00002071 asn1p_ref_t *ref;
2072 int ret;
2073 ref = asn1p_ref_new(yylineno);
2074 checkmem(ref);
2075 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2076 checkmem(ret == 0);
2077 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002078 ;
2079 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002080case 94:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002081#line 983 "asn1p_y.y"
Lev Walkinf59d0752004-08-18 04:59:12 +00002082{
2083 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2084 checkmem(yyval.a_expr);
2085 yyval.a_expr->Identifier = strdup("...");
2086 checkmem(yyval.a_expr->Identifier);
Lev Walkinf59d0752004-08-18 04:59:12 +00002087 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2088 yyval.a_expr->meta_type = AMT_TYPE;
2089 ;
2090 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002091case 95:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002092#line 991 "asn1p_y.y"
Lev Walkinf59d0752004-08-18 04:59:12 +00002093{
2094 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2095 checkmem(yyval.a_expr);
2096 yyval.a_expr->Identifier = strdup("...");
Lev Walkinf59d0752004-08-18 04:59:12 +00002097 checkmem(yyval.a_expr->Identifier);
Lev Walkind2ea1de2004-08-20 13:25:29 +00002098 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkinf59d0752004-08-18 04:59:12 +00002099 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2100 yyval.a_expr->meta_type = AMT_TYPE;
2101 ;
2102 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002103case 96:
Lev Walkinf59d0752004-08-18 04:59:12 +00002104#line 1000 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002105{
Lev Walkind2ea1de2004-08-20 13:25:29 +00002106 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2107 checkmem(yyval.a_expr);
2108 yyval.a_expr->Identifier = strdup("...");
2109 yyval.a_expr->value = yyvsp[0].a_value;
2110 checkmem(yyval.a_expr->Identifier);
2111 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2112 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002113 ;
2114 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002115case 97:
Lev Walkind2ea1de2004-08-20 13:25:29 +00002116#line 1012 "asn1p_y.y"
2117{
Lev Walkin070a52d2004-08-22 03:19:54 +00002118 yyval.a_expr = yyvsp[-1].a_expr;
2119 /*
2120 * Outer constraint for SEQUENCE OF and SET OF applies
2121 * to the inner type.
2122 */
2123 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2124 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2125 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2126 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2127 } else {
2128 if(yyval.a_expr->constraints) {
2129 assert(!yyvsp[0].a_constr);
2130 } else {
2131 yyval.a_expr->constraints = yyvsp[0].a_constr;
2132 }
2133 }
2134 ;
2135 break;}
2136case 98:
2137#line 1033 "asn1p_y.y"
2138{
Lev Walkind2ea1de2004-08-20 13:25:29 +00002139 yyval.a_expr = yyvsp[0].a_expr;
2140 ;
2141 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002142case 99:
2143#line 1036 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002144{
Lev Walkinf15320b2004-06-03 03:38:44 +00002145 yyval.a_expr = asn1p_expr_new(yylineno);
2146 checkmem(yyval.a_expr);
2147 yyval.a_expr->expr_type = yyvsp[0].a_type;
2148 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002149 ;
2150 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002151case 100:
2152#line 1042 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002153{
Lev Walkin070a52d2004-08-22 03:19:54 +00002154 yyval.a_expr = yyvsp[-1].a_expr;
2155 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2156 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2157 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002158 ;
2159 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002160case 101:
2161#line 1048 "asn1p_y.y"
2162{
2163 yyval.a_expr = yyvsp[-1].a_expr;
2164 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2165 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2166 yyval.a_expr->meta_type = AMT_TYPE;
2167 ;
2168 break;}
2169case 102:
2170#line 1054 "asn1p_y.y"
2171{
2172 yyval.a_expr = yyvsp[-1].a_expr;
2173 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2174 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2175 yyval.a_expr->meta_type = AMT_TYPE;
2176 ;
2177 break;}
2178case 103:
2179#line 1060 "asn1p_y.y"
2180{
2181 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2182 checkmem(yyval.a_expr);
2183 yyval.a_expr->constraints = yyvsp[-2].a_constr;
2184 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2185 yyval.a_expr->meta_type = AMT_TYPE;
2186 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
2187 ;
2188 break;}
2189case 104:
2190#line 1068 "asn1p_y.y"
2191{
2192 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2193 checkmem(yyval.a_expr);
2194 yyval.a_expr->constraints = yyvsp[-2].a_constr;
2195 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2196 yyval.a_expr->meta_type = AMT_TYPE;
2197 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
2198 ;
2199 break;}
2200case 105:
2201#line 1076 "asn1p_y.y"
2202{
2203 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2204 checkmem(yyval.a_expr);
2205 yyval.a_expr->expr_type = ASN_CONSTR_ANY;
2206 yyval.a_expr->meta_type = AMT_TYPE;
2207 ;
2208 break;}
2209case 106:
2210#line 1082 "asn1p_y.y"
2211{
2212 int ret;
2213 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2214 checkmem(yyval.a_expr);
2215 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2216 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2217 yyvsp[0].tv_str, RLT_lowercase);
2218 checkmem(ret == 0);
2219 yyval.a_expr->expr_type = ASN_CONSTR_ANY;
2220 yyval.a_expr->meta_type = AMT_TYPE;
2221 ;
2222 break;}
2223case 107:
2224#line 1097 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002225{
Lev Walkinf15320b2004-06-03 03:38:44 +00002226 int ret;
2227 yyval.a_expr = yyvsp[-1].a_expr;
2228 assert(yyval.a_expr->expr_type == 0);
2229 assert(yyval.a_expr->meta_type == 0);
2230 assert(yyval.a_expr->reference == 0);
2231 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2232 checkmem(yyval.a_expr->reference);
2233 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2234 checkmem(ret == 0);
2235 free(yyvsp[-3].tv_str);
2236 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2237 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002238 ;
2239 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002240case 108:
2241#line 1121 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002242{
Lev Walkinf15320b2004-06-03 03:38:44 +00002243 yyval.a_expr = asn1p_expr_new(yylineno);
2244 checkmem(yyval.a_expr);
2245 yyval.a_expr->reference = yyvsp[0].a_ref;
2246 yyval.a_expr->expr_type = A1TC_REFERENCE;
2247 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002248 ;
2249 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002250case 109:
2251#line 1128 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002252{
Lev Walkinf15320b2004-06-03 03:38:44 +00002253 yyval.a_expr = asn1p_expr_new(yylineno);
2254 checkmem(yyval.a_expr);
2255 yyval.a_expr->reference = yyvsp[0].a_ref;
2256 yyval.a_expr->expr_type = A1TC_INSTANCE;
2257 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002258 ;
2259 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002260case 110:
2261#line 1143 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002262{
Lev Walkinf15320b2004-06-03 03:38:44 +00002263 int ret;
2264 yyval.a_ref = asn1p_ref_new(yylineno);
2265 checkmem(yyval.a_ref);
2266 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2267 checkmem(ret == 0);
2268 free(yyvsp[0].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002269 ;
2270 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002271case 111:
2272#line 1151 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002273{
Lev Walkinf15320b2004-06-03 03:38:44 +00002274 int ret;
2275 yyval.a_ref = asn1p_ref_new(yylineno);
2276 checkmem(yyval.a_ref);
2277 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2278 checkmem(ret == 0);
2279 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2280 checkmem(ret == 0);
2281 free(yyvsp[-2].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002282 ;
2283 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002284case 112:
2285#line 1161 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002286{
Lev Walkinf15320b2004-06-03 03:38:44 +00002287 int ret;
2288 yyval.a_ref = asn1p_ref_new(yylineno);
2289 checkmem(yyval.a_ref);
2290 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2291 checkmem(ret == 0);
2292 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2293 checkmem(ret == 0);
2294 free(yyvsp[-2].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002295 ;
2296 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002297case 113:
2298#line 1171 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002299{
Lev Walkinf15320b2004-06-03 03:38:44 +00002300 int ret;
2301 yyval.a_ref = asn1p_ref_new(yylineno);
2302 checkmem(yyval.a_ref);
2303 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2304 free(yyvsp[0].tv_str);
2305 checkmem(ret == 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002306 ;
2307 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002308case 114:
2309#line 1179 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002310{
Lev Walkinf15320b2004-06-03 03:38:44 +00002311 int ret;
2312 yyval.a_ref = yyvsp[0].a_ref;
2313 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2314 free(yyvsp[-2].tv_str);
2315 checkmem(ret == 0);
2316 /*
2317 * Move the last element infront.
2318 */
2319 {
2320 struct asn1p_ref_component_s tmp_comp;
2321 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2322 memmove(&yyval.a_ref->components[1],
2323 &yyval.a_ref->components[0],
2324 sizeof(yyval.a_ref->components[0])
2325 * (yyval.a_ref->comp_count - 1));
2326 yyval.a_ref->components[0] = tmp_comp;
2327 }
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002328 ;
2329 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002330case 115:
2331#line 1201 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002332{
Lev Walkinf15320b2004-06-03 03:38:44 +00002333 int ret;
2334 yyval.a_ref = asn1p_ref_new(yylineno);
2335 checkmem(yyval.a_ref);
2336 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2337 free(yyvsp[0].a_refcomp.name);
2338 checkmem(ret == 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002339 ;
2340 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002341case 116:
2342#line 1209 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002343{
Lev Walkinf15320b2004-06-03 03:38:44 +00002344 int ret;
2345 yyval.a_ref = yyvsp[-2].a_ref;
2346 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2347 free(yyvsp[0].a_refcomp.name);
2348 checkmem(ret == 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002349 ;
2350 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002351case 119:
2352#line 1223 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002353{
Lev Walkinf15320b2004-06-03 03:38:44 +00002354 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2355 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002356 ;
2357 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002358case 120:
2359#line 1228 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002360{
Lev Walkinf15320b2004-06-03 03:38:44 +00002361 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2362 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002363 ;
2364 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002365case 121:
2366#line 1241 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002367{
Lev Walkinf15320b2004-06-03 03:38:44 +00002368 yyval.a_expr = yyvsp[-2].a_expr;
2369 assert(yyval.a_expr->Identifier == NULL);
2370 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2371 yyval.a_expr->meta_type = AMT_VALUE;
2372 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002373 ;
2374 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002375case 122:
2376#line 1251 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002377{ asn1p_lexer_hack_push_opaque_state(); ;
2378 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002379case 123:
2380#line 1252 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002381{
Lev Walkinf15320b2004-06-03 03:38:44 +00002382 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2383 checkmem(yyval.a_value);
2384 yyval.a_value->type = ATV_UNPARSED;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002385 ;
2386 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002387case 124:
2388#line 1257 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002389{
Lev Walkinf15320b2004-06-03 03:38:44 +00002390 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2391 checkmem(yyval.a_value);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002392 ;
2393 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002394case 125:
2395#line 1261 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002396{
Lev Walkinf15320b2004-06-03 03:38:44 +00002397 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2398 checkmem(yyval.a_value);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002399 ;
2400 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002401case 126:
2402#line 1265 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002403{
Lev Walkinf15320b2004-06-03 03:38:44 +00002404 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2405 checkmem(yyval.a_value);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002406 ;
2407 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002408case 127:
2409#line 1269 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002410{
Lev Walkinf15320b2004-06-03 03:38:44 +00002411 yyval.a_value = yyvsp[0].a_value;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002412 ;
2413 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002414case 128:
2415#line 1272 "asn1p_y.y"
Lev Walkind2ea1de2004-08-20 13:25:29 +00002416{
2417 yyval.a_value = yyvsp[0].a_value;
2418 ;
2419 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002420case 129:
2421#line 1278 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002422{
Lev Walkinf15320b2004-06-03 03:38:44 +00002423 asn1p_ref_t *ref;
2424 int ret;
2425 ref = asn1p_ref_new(yylineno);
2426 checkmem(ref);
2427 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2428 checkmem(ret == 0);
2429 yyval.a_value = asn1p_value_fromref(ref, 0);
2430 checkmem(yyval.a_value);
2431 free(yyvsp[0].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002432 ;
2433 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002434case 130:
2435#line 1289 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002436{
Lev Walkinf15320b2004-06-03 03:38:44 +00002437 asn1p_ref_t *ref;
2438 int ret;
2439 ref = asn1p_ref_new(yylineno);
2440 checkmem(ref);
2441 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2442 checkmem(ret == 0);
2443 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2444 checkmem(ret == 0);
2445 yyval.a_value = asn1p_value_fromref(ref, 0);
2446 checkmem(yyval.a_value);
2447 free(yyvsp[-2].tv_str);
2448 free(yyvsp[0].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002449 ;
2450 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002451case 131:
2452#line 1306 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002453{
Lev Walkinf15320b2004-06-03 03:38:44 +00002454 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
2455 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2456 checkmem(yyval.tv_opaque.buf);
2457 yyval.tv_opaque.buf[0] = '{';
2458 yyval.tv_opaque.buf[1] = ' ';
2459 memcpy(yyval.tv_opaque.buf + 2, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2460 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2461 free(yyvsp[0].tv_opaque.buf);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002462 ;
2463 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002464case 132:
2465#line 1316 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002466{
Lev Walkinf15320b2004-06-03 03:38:44 +00002467 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2468 char *p = malloc(newsize + 1);
2469 checkmem(p);
2470 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2471 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2472 p[newsize] = '\0';
2473 free(yyvsp[-1].tv_opaque.buf);
2474 free(yyvsp[0].tv_opaque.buf);
2475 yyval.tv_opaque.buf = p;
2476 yyval.tv_opaque.len = newsize;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002477 ;
2478 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002479case 133:
2480#line 1331 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002481{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2482 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002483case 134:
2484#line 1332 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002485{ yyval.a_type = ASN_BASIC_NULL; ;
2486 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002487case 135:
2488#line 1333 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002489{ yyval.a_type = ASN_BASIC_REAL; ;
2490 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002491case 136:
2492#line 1334 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002493{ yyval.a_type = yyvsp[0].a_type; ;
2494 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002495case 137:
2496#line 1335 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002497{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
2498 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002499case 138:
2500#line 1336 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002501{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
2502 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002503case 139:
2504#line 1337 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002505{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
2506 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002507case 140:
2508#line 1338 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002509{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
2510 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002511case 141:
2512#line 1339 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002513{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
2514 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002515case 142:
2516#line 1340 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002517{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
2518 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002519case 143:
2520#line 1341 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002521{ yyval.a_type = ASN_BASIC_UTCTime; ;
2522 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002523case 144:
2524#line 1342 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002525{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2526 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002527case 145:
2528#line 1349 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002529{ yyval.a_type = ASN_BASIC_INTEGER; ;
2530 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002531case 146:
2532#line 1350 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002533{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2534 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002535case 147:
2536#line 1351 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002537{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2538 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002539case 148:
2540#line 1355 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002541{
Lev Walkinf15320b2004-06-03 03:38:44 +00002542 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2543 checkmem(yyval.a_expr);
2544 yyval.a_expr->expr_type = yyvsp[0].a_type;
2545 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002546 ;
2547 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002548case 149:
2549#line 1361 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002550{
Lev Walkinf15320b2004-06-03 03:38:44 +00002551 if(yyvsp[0].a_expr) {
2552 yyval.a_expr = yyvsp[0].a_expr;
2553 } else {
2554 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2555 checkmem(yyval.a_expr);
2556 }
2557 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2558 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002559 ;
2560 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002561case 150:
2562#line 1374 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002563{ yyval.a_type = ASN_STRING_BMPString; ;
2564 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002565case 151:
2566#line 1375 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002567{
Lev Walkinf15320b2004-06-03 03:38:44 +00002568 yyval.a_type = ASN_STRING_GeneralString;
2569 return yyerror("GeneralString is not supported");
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002570 ;
2571 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002572case 152:
2573#line 1379 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002574{
Lev Walkinf15320b2004-06-03 03:38:44 +00002575 yyval.a_type = ASN_STRING_GraphicString;
2576 return yyerror("GraphicString is not supported");
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002577 ;
2578 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002579case 153:
2580#line 1383 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002581{ yyval.a_type = ASN_STRING_IA5String; ;
2582 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002583case 154:
2584#line 1384 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002585{ yyval.a_type = ASN_STRING_ISO646String; ;
2586 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002587case 155:
2588#line 1385 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002589{ yyval.a_type = ASN_STRING_NumericString; ;
2590 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002591case 156:
2592#line 1386 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002593{ yyval.a_type = ASN_STRING_PrintableString; ;
2594 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002595case 157:
2596#line 1387 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002597{
Lev Walkinf15320b2004-06-03 03:38:44 +00002598 yyval.a_type = ASN_STRING_T61String;
2599 return yyerror("T61String not implemented yet");
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002600 ;
2601 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002602case 158:
2603#line 1391 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002604{ yyval.a_type = ASN_STRING_TeletexString; ;
2605 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002606case 159:
2607#line 1392 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002608{ yyval.a_type = ASN_STRING_UniversalString; ;
2609 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002610case 160:
2611#line 1393 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002612{ yyval.a_type = ASN_STRING_UTF8String; ;
2613 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002614case 161:
2615#line 1394 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002616{
Lev Walkinf15320b2004-06-03 03:38:44 +00002617 yyval.a_type = ASN_STRING_VideotexString;
2618 return yyerror("VideotexString is no longer supported");
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002619 ;
2620 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002621case 162:
2622#line 1398 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002623{ yyval.a_type = ASN_STRING_VisibleString; ;
2624 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002625case 163:
2626#line 1399 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002627{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2628 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002629case 169:
2630#line 1411 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002631{ yyval.a_constr = 0; ;
2632 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002633case 170:
2634#line 1412 "asn1p_y.y"
Lev Walkind2ea1de2004-08-20 13:25:29 +00002635{
2636 yyval.a_constr = yyvsp[0].a_constr;
2637 ;
2638 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002639case 171:
2640#line 1418 "asn1p_y.y"
Lev Walkinf59d0752004-08-18 04:59:12 +00002641{
2642 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
2643 ;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002644 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002645case 172:
2646#line 1421 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002647{
Lev Walkinf15320b2004-06-03 03:38:44 +00002648 /*
2649 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00002650 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00002651 */
Lev Walkind2ea1de2004-08-20 13:25:29 +00002652 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002653 ;
2654 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002655case 173:
2656#line 1431 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002657{
Lev Walkinf15320b2004-06-03 03:38:44 +00002658 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002659 ;
2660 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002661case 174:
2662#line 1434 "asn1p_y.y"
Lev Walkinf59d0752004-08-18 04:59:12 +00002663{
2664 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
2665 ;
2666 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002667case 175:
2668#line 1440 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002669{
Lev Walkinf15320b2004-06-03 03:38:44 +00002670 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002671 ;
2672 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002673case 176:
2674#line 1443 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002675{
Lev Walkinf15320b2004-06-03 03:38:44 +00002676 asn1p_constraint_t *ct;
2677 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002678 ct->type = ACT_EL_EXT;
2679 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002680 ;
2681 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002682case 177:
2683#line 1449 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002684{
Lev Walkinf15320b2004-06-03 03:38:44 +00002685 asn1p_constraint_t *ct;
2686 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002687 ct->type = ACT_EL_EXT;
2688 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002689 ct = yyval.a_constr;
2690 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
2691 ;
2692 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002693case 178:
2694#line 1460 "asn1p_y.y"
Lev Walkinf59d0752004-08-18 04:59:12 +00002695{
2696 yyval.a_constr = yyvsp[0].a_constr;
2697 ;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002698 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002699case 179:
2700#line 1463 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002701{
Lev Walkinf15320b2004-06-03 03:38:44 +00002702 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002703 ;
2704 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002705case 180:
2706#line 1466 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002707{
Lev Walkinf15320b2004-06-03 03:38:44 +00002708 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002709 ;
2710 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002711case 181:
2712#line 1469 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002713{
Lev Walkinf15320b2004-06-03 03:38:44 +00002714 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002715 ;
2716 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002717case 182:
2718#line 1475 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002719{
Lev Walkinf15320b2004-06-03 03:38:44 +00002720 int ret;
2721 yyval.a_constr = asn1p_constraint_new(yylineno);
2722 checkmem(yyval.a_constr);
2723 yyval.a_constr->type = yyvsp[-3].a_ctype;
2724 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2725 checkmem(ret == 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002726 ;
2727 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002728case 183:
2729#line 1483 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002730{
Lev Walkinf59d0752004-08-18 04:59:12 +00002731 int ret;
2732 yyval.a_constr = asn1p_constraint_new(yylineno);
2733 checkmem(yyval.a_constr);
2734 yyval.a_constr->type = ACT_CA_SET;
2735 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2736 checkmem(ret == 0);
2737 ;
2738 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002739case 184:
2740#line 1491 "asn1p_y.y"
Lev Walkinf59d0752004-08-18 04:59:12 +00002741{
2742 yyval.a_constr = asn1p_constraint_new(yylineno);
2743 checkmem(yyval.a_constr);
2744 yyval.a_constr->type = ACT_EL_VALUE;
2745 yyval.a_constr->value = yyvsp[0].a_value;
2746 ;
2747 break;}
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002748case 185:
Lev Walkin070a52d2004-08-22 03:19:54 +00002749#line 1497 "asn1p_y.y"
Lev Walkind2ea1de2004-08-20 13:25:29 +00002750{
2751 yyval.a_constr = asn1p_constraint_new(yylineno);
2752 checkmem(yyval.a_constr);
2753 yyval.a_constr->type = yyvsp[-1].a_ctype;
Lev Walkin070a52d2004-08-22 03:19:54 +00002754 yyval.a_constr->range_start = yyvsp[-2].a_value;
2755 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkind2ea1de2004-08-20 13:25:29 +00002756 ;
2757 break;}
2758case 186:
Lev Walkin070a52d2004-08-22 03:19:54 +00002759#line 1504 "asn1p_y.y"
Lev Walkinf59d0752004-08-18 04:59:12 +00002760{
Lev Walkin070a52d2004-08-22 03:19:54 +00002761 yyval.a_constr = asn1p_constraint_new(yylineno);
2762 checkmem(yyval.a_constr);
2763 yyval.a_constr->type = yyvsp[-1].a_ctype;
2764 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2765 yyval.a_constr->range_stop = yyvsp[0].a_value;
2766 yyval.a_constr->range_start->type = ATV_MIN;
Lev Walkinf59d0752004-08-18 04:59:12 +00002767 ;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002768 break;}
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002769case 187:
Lev Walkin070a52d2004-08-22 03:19:54 +00002770#line 1512 "asn1p_y.y"
2771{
2772 yyval.a_constr = asn1p_constraint_new(yylineno);
2773 checkmem(yyval.a_constr);
2774 yyval.a_constr->type = yyvsp[-1].a_ctype;
2775 yyval.a_constr->range_start = yyvsp[-2].a_value;
2776 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2777 yyval.a_constr->range_stop->type = ATV_MAX;
2778 ;
2779 break;}
2780case 188:
2781#line 1520 "asn1p_y.y"
2782{
2783 yyval.a_constr = asn1p_constraint_new(yylineno);
2784 checkmem(yyval.a_constr);
2785 yyval.a_constr->type = yyvsp[-1].a_ctype;
2786 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2787 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2788 yyval.a_constr->range_start->type = ATV_MIN;
2789 yyval.a_constr->range_stop->type = ATV_MAX;
2790 ;
2791 break;}
2792case 189:
2793#line 1529 "asn1p_y.y"
Lev Walkind2ea1de2004-08-20 13:25:29 +00002794{
2795 yyval.a_constr = yyvsp[0].a_constr;
2796 ;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002797 break;}
Lev Walkinf59d0752004-08-18 04:59:12 +00002798case 190:
Lev Walkin070a52d2004-08-22 03:19:54 +00002799#line 1532 "asn1p_y.y"
2800{
2801 yyval.a_constr = yyvsp[0].a_constr;
2802 ;
Lev Walkind2ea1de2004-08-20 13:25:29 +00002803 break;}
2804case 191:
Lev Walkin070a52d2004-08-22 03:19:54 +00002805#line 1538 "asn1p_y.y"
2806{ yyval.a_ctype = ACT_EL_RANGE; ;
Lev Walkind2ea1de2004-08-20 13:25:29 +00002807 break;}
2808case 192:
Lev Walkin070a52d2004-08-22 03:19:54 +00002809#line 1539 "asn1p_y.y"
2810{ yyval.a_ctype = ACT_EL_RLRANGE; ;
2811 break;}
2812case 193:
2813#line 1540 "asn1p_y.y"
2814{ yyval.a_ctype = ACT_EL_LLRANGE; ;
2815 break;}
2816case 194:
2817#line 1541 "asn1p_y.y"
2818{ yyval.a_ctype = ACT_EL_ULRANGE; ;
2819 break;}
2820case 195:
2821#line 1545 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002822{
Lev Walkinf15320b2004-06-03 03:38:44 +00002823 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002824 ;
2825 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002826case 196:
2827#line 1548 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002828{
Lev Walkinf15320b2004-06-03 03:38:44 +00002829 yyval.a_ctype = ACT_CT_FROM;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002830 ;
2831 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002832case 197:
2833#line 1554 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002834{
Lev Walkinf15320b2004-06-03 03:38:44 +00002835 yyval.a_value = yyvsp[0].a_value;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002836 ;
2837 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002838case 198:
2839#line 1557 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002840{
Lev Walkinf15320b2004-06-03 03:38:44 +00002841 asn1p_ref_t *ref;
2842 int ret;
2843 ref = asn1p_ref_new(yylineno);
2844 checkmem(ref);
2845 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2846 checkmem(ret == 0);
2847 yyval.a_value = asn1p_value_fromref(ref, 0);
2848 checkmem(yyval.a_value);
2849 free(yyvsp[0].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002850 ;
2851 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002852case 199:
2853#line 1568 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002854{
Lev Walkinf15320b2004-06-03 03:38:44 +00002855 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2856 checkmem(yyval.a_value);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002857 ;
2858 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002859case 200:
2860#line 1573 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002861{
Lev Walkinf15320b2004-06-03 03:38:44 +00002862 yyval.a_value = asn1p_value_fromint(0);
2863 checkmem(yyval.a_value);
2864 yyval.a_value->type = ATV_FALSE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002865 ;
2866 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002867case 201:
2868#line 1578 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002869{
Lev Walkinf15320b2004-06-03 03:38:44 +00002870 yyval.a_value = asn1p_value_fromint(1);
2871 checkmem(yyval.a_value);
2872 yyval.a_value->type = ATV_TRUE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002873 ;
2874 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002875case 202:
2876#line 1586 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002877{
Lev Walkinf15320b2004-06-03 03:38:44 +00002878 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002879 ;
2880 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002881case 203:
2882#line 1592 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002883{
Lev Walkinf15320b2004-06-03 03:38:44 +00002884 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002885 ;
2886 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002887case 204:
2888#line 1595 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002889{
Lev Walkinf15320b2004-06-03 03:38:44 +00002890 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002891 ;
2892 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002893case 205:
2894#line 1601 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002895{
Lev Walkinf15320b2004-06-03 03:38:44 +00002896 yyval.a_constr = asn1p_constraint_new(yylineno);
2897 checkmem(yyval.a_constr);
2898 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002899 ;
2900 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002901case 206:
2902#line 1606 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002903{
Lev Walkinf15320b2004-06-03 03:38:44 +00002904 yyval.a_constr = asn1p_constraint_new(yylineno);
2905 checkmem(yyval.a_constr);
2906 yyval.a_constr->type = ACT_EL_VALUE;
2907 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
2908 yyval.a_constr->presence = yyvsp[0].a_pres;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002909 ;
2910 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002911case 207:
2912#line 1619 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002913{ yyval.a_pres = ACPRES_DEFAULT; ;
2914 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002915case 208:
2916#line 1620 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002917{ yyval.a_pres = yyvsp[0].a_pres; ;
2918 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002919case 209:
2920#line 1624 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002921{
Lev Walkinf15320b2004-06-03 03:38:44 +00002922 yyval.a_pres = ACPRES_PRESENT;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002923 ;
2924 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002925case 210:
2926#line 1627 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002927{
Lev Walkinf15320b2004-06-03 03:38:44 +00002928 yyval.a_pres = ACPRES_ABSENT;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002929 ;
2930 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002931case 211:
2932#line 1630 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002933{
Lev Walkinf15320b2004-06-03 03:38:44 +00002934 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002935 ;
2936 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002937case 212:
2938#line 1636 "asn1p_y.y"
Lev Walkind2ea1de2004-08-20 13:25:29 +00002939{
2940 yyval.a_constr = yyvsp[0].a_constr;
2941 ;
2942 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002943case 213:
2944#line 1639 "asn1p_y.y"
Lev Walkind2ea1de2004-08-20 13:25:29 +00002945{
2946 yyval.a_constr = yyvsp[0].a_constr;
2947 ;
2948 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002949case 214:
2950#line 1648 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002951{
Lev Walkinf15320b2004-06-03 03:38:44 +00002952 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
2953 asn1p_constraint_t *ct;
2954 int ret;
2955 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
2956 checkmem(ret == 0);
2957 ct = asn1p_constraint_new(yylineno);
2958 checkmem(yyval.a_constr);
2959 ct->type = ACT_EL_VALUE;
2960 ct->value = asn1p_value_fromref(ref, 0);
2961 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002962 ;
2963 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002964case 215:
2965#line 1663 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002966{
Lev Walkinf15320b2004-06-03 03:38:44 +00002967 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002968 ;
2969 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002970case 216:
2971#line 1669 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002972{
Lev Walkinf15320b2004-06-03 03:38:44 +00002973 yyval.a_constr = asn1p_constraint_new(yylineno);
2974 checkmem(yyval.a_constr);
2975 yyval.a_constr->type = ACT_EL_VALUE;
2976 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002977 ;
2978 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002979case 217:
2980#line 1675 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002981{
Lev Walkinf15320b2004-06-03 03:38:44 +00002982 asn1p_constraint_t *ct;
2983 ct = asn1p_constraint_new(yylineno);
2984 checkmem(ct);
2985 ct->type = ACT_EL_VALUE;
2986 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
2987 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002988 ;
2989 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00002990case 218:
2991#line 1689 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002992{
Lev Walkinf15320b2004-06-03 03:38:44 +00002993 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
2994 int ret;
2995 *p = '@';
2996 strcpy(p + 1, yyvsp[0].tv_str);
2997 yyval.a_ref = asn1p_ref_new(yylineno);
2998 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
2999 checkmem(ret == 0);
3000 free(p);
3001 free(yyvsp[0].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003002 ;
3003 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003004case 219:
3005#line 1700 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003006{
Lev Walkinf15320b2004-06-03 03:38:44 +00003007 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3008 int ret;
3009 p[0] = '@';
3010 p[1] = '.';
3011 strcpy(p + 2, yyvsp[0].tv_str);
3012 yyval.a_ref = asn1p_ref_new(yylineno);
3013 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3014 checkmem(ret == 0);
3015 free(p);
3016 free(yyvsp[0].tv_str);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003017 ;
3018 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003019case 220:
3020#line 1716 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003021{
Lev Walkinf15320b2004-06-03 03:38:44 +00003022 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003023 ;
3024 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003025case 221:
3026#line 1719 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003027{
Lev Walkinf15320b2004-06-03 03:38:44 +00003028 int l1 = strlen(yyvsp[-2].tv_str);
3029 int l3 = strlen(yyvsp[0].tv_str);
3030 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3031 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3032 yyval.tv_str[l1] = '.';
3033 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3034 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003035 ;
3036 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003037case 222:
3038#line 1737 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003039{ yyval.a_marker = EM_NOMARK; ;
3040 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003041case 223:
3042#line 1738 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003043{ yyval.a_marker = yyvsp[0].a_marker; ;
3044 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003045case 224:
3046#line 1742 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003047{
Lev Walkinf15320b2004-06-03 03:38:44 +00003048 yyval.a_marker = EM_OPTIONAL;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003049 ;
3050 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003051case 225:
3052#line 1745 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003053{
Lev Walkinf15320b2004-06-03 03:38:44 +00003054 yyval.a_marker = EM_DEFAULT;
3055 /* FIXME: store DefaultValue somewhere */
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003056 ;
3057 break;}
Lev Walkind2ea1de2004-08-20 13:25:29 +00003058case 226:
Lev Walkin070a52d2004-08-22 03:19:54 +00003059#line 1752 "asn1p_y.y"
Lev Walkind2ea1de2004-08-20 13:25:29 +00003060{
3061 ;
3062 break;}
3063case 227:
Lev Walkin070a52d2004-08-22 03:19:54 +00003064#line 1754 "asn1p_y.y"
3065{
3066 ;
3067 break;}
3068case 228:
3069#line 1756 "asn1p_y.y"
3070{ asn1p_lexer_hack_push_opaque_state(); ;
3071 break;}
3072case 229:
3073#line 1756 "asn1p_y.y"
3074{
3075 ;
3076 break;}
3077case 230:
3078#line 1777 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003079{
Lev Walkinf15320b2004-06-03 03:38:44 +00003080 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3081 checkmem(yyval.a_expr);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003082 ;
3083 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003084case 231:
3085#line 1781 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003086{
Lev Walkinf15320b2004-06-03 03:38:44 +00003087 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003088 ;
3089 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003090case 232:
3091#line 1787 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003092{
Lev Walkinf15320b2004-06-03 03:38:44 +00003093 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3094 checkmem(yyval.a_expr);
3095 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003096 ;
3097 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003098case 233:
3099#line 1792 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003100{
Lev Walkinf15320b2004-06-03 03:38:44 +00003101 yyval.a_expr = yyvsp[-2].a_expr;
3102 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003103 ;
3104 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003105case 234:
3106#line 1799 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003107{
Lev Walkinf15320b2004-06-03 03:38:44 +00003108 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3109 checkmem(yyval.a_expr);
3110 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3111 yyval.a_expr->meta_type = AMT_VALUE;
3112 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003113 ;
3114 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003115case 235:
3116#line 1806 "asn1p_y.y"
Lev Walkind2ea1de2004-08-20 13:25:29 +00003117{
3118 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3119 checkmem(yyval.a_expr);
3120 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3121 yyval.a_expr->meta_type = AMT_VALUE;
3122 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3123 yyval.a_expr->value = yyvsp[-1].a_value;
3124 ;
3125 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003126case 236:
3127#line 1814 "asn1p_y.y"
Lev Walkind2ea1de2004-08-20 13:25:29 +00003128{
3129 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3130 checkmem(yyval.a_expr);
3131 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3132 yyval.a_expr->meta_type = AMT_VALUE;
3133 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3134 yyval.a_expr->value = yyvsp[-1].a_value;
3135 ;
3136 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003137case 237:
3138#line 1822 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003139{
Lev Walkinf15320b2004-06-03 03:38:44 +00003140 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3141 checkmem(yyval.a_expr);
3142 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3143 yyval.a_expr->meta_type = AMT_VALUE;
3144 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003145 ;
3146 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003147case 238:
3148#line 1829 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003149{
Lev Walkinf15320b2004-06-03 03:38:44 +00003150 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3151 checkmem(yyval.a_expr);
3152 yyval.a_expr->Identifier = strdup("...");
3153 checkmem(yyval.a_expr->Identifier);
3154 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3155 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003156 ;
3157 break;}
Lev Walkind2ea1de2004-08-20 13:25:29 +00003158case 239:
Lev Walkin070a52d2004-08-22 03:19:54 +00003159#line 1840 "asn1p_y.y"
3160{
3161 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3162 checkmem(yyval.a_value);
3163 ;
Lev Walkind2ea1de2004-08-20 13:25:29 +00003164 break;}
3165case 240:
Lev Walkin070a52d2004-08-22 03:19:54 +00003166#line 1844 "asn1p_y.y"
3167{
3168 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3169 checkmem(yyval.a_value);
3170 ;
3171 break;}
3172case 241:
3173#line 1875 "asn1p_y.y"
3174{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3175 break;}
3176case 242:
3177#line 1876 "asn1p_y.y"
3178{ yyval.a_tag = yyvsp[0].a_tag; ;
3179 break;}
3180case 243:
3181#line 1880 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003182{
Lev Walkinf15320b2004-06-03 03:38:44 +00003183 yyval.a_tag = yyvsp[0].a_tag;
3184 yyval.a_tag.tag_mode = TM_DEFAULT;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003185 ;
3186 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003187case 244:
3188#line 1884 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003189{
Lev Walkinf15320b2004-06-03 03:38:44 +00003190 yyval.a_tag = yyvsp[-1].a_tag;
3191 yyval.a_tag.tag_mode = TM_IMPLICIT;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003192 ;
3193 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003194case 245:
3195#line 1888 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003196{
Lev Walkinf15320b2004-06-03 03:38:44 +00003197 yyval.a_tag = yyvsp[-1].a_tag;
3198 yyval.a_tag.tag_mode = TM_EXPLICIT;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003199 ;
3200 break;}
Lev Walkind2ea1de2004-08-20 13:25:29 +00003201case 246:
Lev Walkin070a52d2004-08-22 03:19:54 +00003202#line 1895 "asn1p_y.y"
Lev Walkind2ea1de2004-08-20 13:25:29 +00003203{
3204 checkmem(yyvsp[0].tv_str);
3205 yyval.tv_str = yyvsp[0].tv_str;
3206 ;
3207 break;}
3208case 247:
Lev Walkin070a52d2004-08-22 03:19:54 +00003209#line 1899 "asn1p_y.y"
3210{
3211 checkmem(yyvsp[0].tv_str);
3212 yyval.tv_str = yyvsp[0].tv_str;
3213 ;
3214 break;}
3215case 248:
3216#line 1907 "asn1p_y.y"
3217{
3218 checkmem(yyvsp[0].tv_str);
3219 yyval.tv_str = yyvsp[0].tv_str;
3220 ;
3221 break;}
3222case 249:
3223#line 1914 "asn1p_y.y"
3224{
3225 checkmem(yyvsp[0].tv_str);
3226 yyval.tv_str = yyvsp[0].tv_str;
3227 ;
3228 break;}
3229case 250:
3230#line 1921 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003231{
Lev Walkinf15320b2004-06-03 03:38:44 +00003232 memset(&yyval.tv_nametag, 0, sizeof(yyval.tv_nametag));
3233 yyval.tv_nametag.name = yyvsp[0].tv_str;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003234 ;
3235 break;}
Lev Walkin070a52d2004-08-22 03:19:54 +00003236case 251:
3237#line 1925 "asn1p_y.y"
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003238{
Lev Walkinf15320b2004-06-03 03:38:44 +00003239 yyval.tv_nametag.name = yyvsp[-1].tv_str;
3240 yyval.tv_nametag.tag = yyvsp[0].a_tag;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003241 ;
3242 break;}
3243}
3244 /* the action file gets copied in in place of this dollarsign */
3245#line 543 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00003246
3247 yyvsp -= yylen;
3248 yyssp -= yylen;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003249#ifdef YYLSP_NEEDED
3250 yylsp -= yylen;
3251#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003252
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003253#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00003254 if (yydebug)
3255 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003256 short *ssp1 = yyss - 1;
3257 fprintf (stderr, "state stack now");
3258 while (ssp1 != yyssp)
3259 fprintf (stderr, " %d", *++ssp1);
3260 fprintf (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003261 }
3262#endif
3263
3264 *++yyvsp = yyval;
3265
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003266#ifdef YYLSP_NEEDED
3267 yylsp++;
3268 if (yylen == 0)
3269 {
3270 yylsp->first_line = yylloc.first_line;
3271 yylsp->first_column = yylloc.first_column;
3272 yylsp->last_line = (yylsp-1)->last_line;
3273 yylsp->last_column = (yylsp-1)->last_column;
3274 yylsp->text = 0;
3275 }
3276 else
3277 {
3278 yylsp->last_line = (yylsp+yylen-1)->last_line;
3279 yylsp->last_column = (yylsp+yylen-1)->last_column;
3280 }
3281#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003282
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003283 /* Now "shift" the result of the reduction.
3284 Determine what state that goes to,
3285 based on the state we popped back to
3286 and the rule number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003287
3288 yyn = yyr1[yyn];
3289
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003290 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3291 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003292 yystate = yytable[yystate];
3293 else
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003294 yystate = yydefgoto[yyn - YYNTBASE];
Lev Walkinf15320b2004-06-03 03:38:44 +00003295
3296 goto yynewstate;
3297
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003298yyerrlab: /* here on detecting error */
Lev Walkinf15320b2004-06-03 03:38:44 +00003299
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003300 if (! yyerrstatus)
3301 /* If not already recovering from an error, report this error. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003302 {
3303 ++yynerrs;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003304
3305#ifdef YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003306 yyn = yypact[yystate];
3307
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003308 if (yyn > YYFLAG && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003309 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003310 int size = 0;
3311 char *msg;
3312 int x, count;
Lev Walkinf15320b2004-06-03 03:38:44 +00003313
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003314 count = 0;
3315 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3316 for (x = (yyn < 0 ? -yyn : 0);
3317 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3318 if (yycheck[x + yyn] == x)
3319 size += strlen(yytname[x]) + 15, count++;
3320 msg = (char *) malloc(size + 15);
3321 if (msg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003322 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003323 strcpy(msg, "parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003324
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003325 if (count < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003326 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003327 count = 0;
3328 for (x = (yyn < 0 ? -yyn : 0);
3329 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3330 if (yycheck[x + yyn] == x)
Lev Walkinf15320b2004-06-03 03:38:44 +00003331 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003332 strcat(msg, count == 0 ? ", expecting `" : " or `");
3333 strcat(msg, yytname[x]);
3334 strcat(msg, "'");
3335 count++;
Lev Walkinf15320b2004-06-03 03:38:44 +00003336 }
3337 }
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003338 yyerror(msg);
3339 free(msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003340 }
3341 else
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003342 yyerror ("parse error; also virtual memory exceeded");
Lev Walkinf15320b2004-06-03 03:38:44 +00003343 }
3344 else
3345#endif /* YYERROR_VERBOSE */
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003346 yyerror("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003347 }
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003348
Lev Walkinf15320b2004-06-03 03:38:44 +00003349 goto yyerrlab1;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003350yyerrlab1: /* here on error raised explicitly by an action */
Lev Walkinf15320b2004-06-03 03:38:44 +00003351
3352 if (yyerrstatus == 3)
3353 {
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003354 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003355
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003356 /* return failure if at end of input */
Lev Walkinf15320b2004-06-03 03:38:44 +00003357 if (yychar == YYEOF)
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003358 YYABORT;
Lev Walkinf15320b2004-06-03 03:38:44 +00003359
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003360#if YYDEBUG != 0
3361 if (yydebug)
3362 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3363#endif
3364
Lev Walkinf15320b2004-06-03 03:38:44 +00003365 yychar = YYEMPTY;
3366 }
3367
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003368 /* Else will try to reuse lookahead token
3369 after shifting the error token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003370
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003371 yyerrstatus = 3; /* Each real token shifted decrements this */
Lev Walkinf15320b2004-06-03 03:38:44 +00003372
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003373 goto yyerrhandle;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003374
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003375yyerrdefault: /* current state does not do anything special for the error token. */
Lev Walkinc3b72e92004-06-03 05:07:41 +00003376
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003377#if 0
3378 /* This is wrong; only states that explicitly want error tokens
3379 should shift them. */
3380 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3381 if (yyn) goto yydefault;
Lev Walkinf15320b2004-06-03 03:38:44 +00003382#endif
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003383
3384yyerrpop: /* pop the current state because it cannot handle the error token */
3385
3386 if (yyssp == yyss) YYABORT;
3387 yyvsp--;
3388 yystate = *--yyssp;
3389#ifdef YYLSP_NEEDED
3390 yylsp--;
3391#endif
3392
3393#if YYDEBUG != 0
3394 if (yydebug)
3395 {
3396 short *ssp1 = yyss - 1;
3397 fprintf (stderr, "Error: state stack now");
3398 while (ssp1 != yyssp)
3399 fprintf (stderr, " %d", *++ssp1);
3400 fprintf (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003401 }
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003402#endif
3403
3404yyerrhandle:
3405
3406 yyn = yypact[yystate];
3407 if (yyn == YYFLAG)
3408 goto yyerrdefault;
3409
3410 yyn += YYTERROR;
3411 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3412 goto yyerrdefault;
3413
3414 yyn = yytable[yyn];
3415 if (yyn < 0)
3416 {
3417 if (yyn == YYFLAG)
3418 goto yyerrpop;
3419 yyn = -yyn;
3420 goto yyreduce;
3421 }
3422 else if (yyn == 0)
3423 goto yyerrpop;
Lev Walkinf15320b2004-06-03 03:38:44 +00003424
3425 if (yyn == YYFINAL)
3426 YYACCEPT;
3427
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003428#if YYDEBUG != 0
3429 if (yydebug)
3430 fprintf(stderr, "Shifting error token, ");
3431#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003432
3433 *++yyvsp = yylval;
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003434#ifdef YYLSP_NEEDED
3435 *++yylsp = yylloc;
3436#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003437
3438 yystate = yyn;
3439 goto yynewstate;
3440
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003441 yyacceptlab:
3442 /* YYACCEPT comes here. */
3443 if (yyfree_stacks)
3444 {
3445 free (yyss);
3446 free (yyvs);
3447#ifdef YYLSP_NEEDED
3448 free (yyls);
Lev Walkinf15320b2004-06-03 03:38:44 +00003449#endif
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003450 }
3451 return 0;
Lev Walkinc3b72e92004-06-03 05:07:41 +00003452
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003453 yyabortlab:
3454 /* YYABORT comes here. */
3455 if (yyfree_stacks)
3456 {
3457 free (yyss);
3458 free (yyvs);
3459#ifdef YYLSP_NEEDED
3460 free (yyls);
Lev Walkinc3b72e92004-06-03 05:07:41 +00003461#endif
Lev Walkinb4fcdd22004-08-13 12:35:09 +00003462 }
3463 return 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003464}
Lev Walkin070a52d2004-08-22 03:19:54 +00003465#line 1932 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00003466
3467
3468
3469/*
3470 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3471 */
3472static asn1p_value_t *
3473_convert_bitstring2binary(char *str, int base) {
3474 asn1p_value_t *val;
3475 int slen;
3476 int memlen;
3477 int baselen;
3478 int bits;
3479 uint8_t *binary_vector;
3480 uint8_t *bv_ptr;
3481 uint8_t cur_val;
3482
3483 assert(str);
3484 assert(str[0] == '\'');
3485
3486 switch(base) {
3487 case 'B':
3488 baselen = 1;
3489 break;
3490 case 'H':
3491 baselen = 4;
3492 break;
3493 default:
3494 assert(base == 'B' || base == 'H');
3495 errno = EINVAL;
3496 return NULL;
3497 }
3498
3499 slen = strlen(str);
3500 assert(str[slen - 1] == base);
3501 assert(str[slen - 2] == '\'');
3502
3503 memlen = slen / (8 / baselen); /* Conservative estimate */
3504
3505 bv_ptr = binary_vector = malloc(memlen + 1);
3506 if(bv_ptr == NULL)
3507 /* ENOMEM */
3508 return NULL;
3509
3510 cur_val = 0;
3511 bits = 0;
3512 while(*(++str) != '\'') {
3513 switch(baselen) {
3514 case 1:
3515 switch(*str) {
3516 case '1':
3517 cur_val |= 1 << (7 - (bits % 8));
3518 case '0':
3519 break;
3520 default:
3521 assert(!"_y UNREACH1");
3522 case ' ': case '\r': case '\n':
3523 continue;
3524 }
3525 break;
3526 case 4:
3527 switch(*str) {
3528 case '0': case '1': case '2': case '3': case '4':
3529 case '5': case '6': case '7': case '8': case '9':
3530 cur_val |= (*str - '0') << (4 - (bits % 8));
3531 break;
3532 case 'A': case 'B': case 'C':
3533 case 'D': case 'E': case 'F':
3534 cur_val |= ((*str - 'A') + 10)
3535 << (4 - (bits % 8));
3536 break;
3537 default:
3538 assert(!"_y UNREACH2");
3539 case ' ': case '\r': case '\n':
3540 continue;
3541 }
3542 break;
3543 }
3544
3545 bits += baselen;
3546 if((bits % 8) == 0) {
3547 *bv_ptr++ = cur_val;
3548 cur_val = 0;
3549 }
3550 }
3551
3552 *bv_ptr = cur_val;
3553 assert((bv_ptr - binary_vector) <= memlen);
3554
3555 val = asn1p_value_frombits(binary_vector, bits, 0);
3556 if(val == NULL) {
3557 free(binary_vector);
3558 }
3559
3560 return val;
3561}
3562
3563extern char *asn1p_text;
3564
3565int
3566yyerror(const char *msg) {
3567 fprintf(stderr,
3568 "ASN.1 grammar parse error "
3569 "near line %d (token \"%s\"): %s\n",
3570 asn1p_lineno, asn1p_text, msg);
3571 return -1;
3572}
3573
3574