blob: fe2d194b827f4b0411de163a77e0407304bc60e2 [file] [log] [blame]
vlmfa67ddc2004-06-03 03:38:44 +00001
vlm6f5eb0b2004-08-13 12:35:09 +00002/* A Bison parser, made from asn1p_y.y
3 by GNU Bison version 1.28 */
vlmfa67ddc2004-06-03 03:38:44 +00004
vlm6f5eb0b2004-08-13 12:35:09 +00005#define YYBISON 1 /* Identify Bison output. */
vlmfa67ddc2004-06-03 03:38:44 +00006
7#define yyparse asn1p_parse
vlm6f5eb0b2004-08-13 12:35:09 +00008#define yylex asn1p_lex
vlmfa67ddc2004-06-03 03:38:44 +00009#define yyerror asn1p_error
vlm6f5eb0b2004-08-13 12:35:09 +000010#define yylval asn1p_lval
11#define yychar asn1p_char
vlmfa67ddc2004-06-03 03:38:44 +000012#define yydebug asn1p_debug
13#define yynerrs asn1p_nerrs
vlm6f5eb0b2004-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
vlm9283dbe2004-08-18 04:59:12 +000023#define TOK_capitalreference 266
vlm6f5eb0b2004-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
vlm9283dbe2004-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
vlm6f5eb0b2004-08-13 12:35:09 +0000107#define TOK_EXCEPT 350
vlm9283dbe2004-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
vlmfa67ddc2004-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);
vlm9283dbe2004-08-18 04:59:12 +0000132void asn1p_lexer_hack_push_encoding_control(void);
vlmfa67ddc2004-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
vlm9283dbe2004-08-18 04:59:12 +0000165#line 58 "asn1p_y.y"
vlmfa67ddc2004-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;
vlm6f5eb0b2004-08-13 12:35:09 +0000197} YYSTYPE;
198#include <stdio.h>
199
200#ifndef __cplusplus
201#ifndef __STDC__
202#define const
203#endif
vlmfa67ddc2004-06-03 03:38:44 +0000204#endif
205
206
207
vlm5f0128b2004-08-20 13:25:29 +0000208#define YYFINAL 385
vlm6f5eb0b2004-08-13 12:35:09 +0000209#define YYFLAG -32768
vlm9283dbe2004-08-18 04:59:12 +0000210#define YYNTBASE 115
vlmfa67ddc2004-06-03 03:38:44 +0000211
vlm5f0128b2004-08-20 13:25:29 +0000212#define YYTRANSLATE(x) ((unsigned)(x) <= 355 ? yytranslate[x] : 212)
vlmfa67ddc2004-06-03 03:38:44 +0000213
vlm6f5eb0b2004-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,
vlm9283dbe2004-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,
vlm6f5eb0b2004-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,
vlm9283dbe2004-08-18 04:59:12 +0000224 2, 2, 2, 97, 2, 2, 2, 2, 2, 2,
vlm6f5eb0b2004-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,
vlm9283dbe2004-08-18 04:59:12 +0000227 2, 2, 104, 99, 105, 2, 2, 2, 2, 2,
vlm6f5eb0b2004-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,
vlm9283dbe2004-08-18 04:59:12 +0000249 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
250 98, 100, 101, 102, 103
vlm6f5eb0b2004-08-13 12:35:09 +0000251};
vlmfa67ddc2004-06-03 03:38:44 +0000252
vlm6f5eb0b2004-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,
vlm9283dbe2004-08-18 04:59:12 +0000257 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
258 79, 81, 82, 86, 88, 92, 95, 97, 100, 105,
259 107, 111, 113, 115, 119, 123, 126, 128, 132, 134,
260 136, 143, 145, 147, 148, 150, 155, 160, 164, 171,
261 173, 177, 179, 183, 187, 189, 193, 195, 197, 199,
262 203, 209, 210, 212, 214, 218, 221, 225, 230, 231,
263 233, 234, 241, 243, 246, 248, 250, 253, 255, 259,
vlm5f0128b2004-08-20 13:25:29 +0000264 261, 263, 267, 271, 273, 275, 277, 282, 284, 288,
265 290, 294, 298, 300, 304, 306, 310, 312, 314, 316,
266 318, 323, 324, 328, 330, 332, 334, 336, 338, 340,
267 344, 346, 349, 351, 353, 355, 357, 360, 363, 365,
268 367, 370, 373, 375, 377, 379, 381, 384, 386, 389,
vlm9283dbe2004-08-18 04:59:12 +0000269 391, 393, 395, 397, 399, 401, 403, 405, 407, 409,
vlm5f0128b2004-08-20 13:25:29 +0000270 411, 413, 415, 417, 422, 427, 432, 437, 442, 444,
271 449, 451, 453, 455, 457, 459, 460, 462, 464, 469,
272 473, 478, 480, 484, 490, 492, 496, 500, 504, 509,
273 513, 515, 519, 523, 527, 531, 533, 535, 537, 540,
274 543, 547, 549, 551, 553, 555, 557, 559, 561, 567,
275 569, 573, 575, 579, 580, 582, 584, 586, 588, 590,
276 592, 596, 601, 603, 607, 610, 614, 616, 620, 621,
277 623, 625, 628, 630, 632, 633, 637, 640, 644, 646,
278 650, 652, 657, 662, 664, 666, 668, 670, 671, 673,
279 675, 678, 681, 683, 685, 687, 689, 691
vlm6f5eb0b2004-08-13 12:35:09 +0000280};
vlmfa67ddc2004-06-03 03:38:44 +0000281
vlm9283dbe2004-08-18 04:59:12 +0000282static const short yyrhs[] = { 116,
vlm5f0128b2004-08-20 13:25:29 +0000283 0, 117, 0, 116, 117, 0, 208, 118, 34, 122,
vlm9283dbe2004-08-18 04:59:12 +0000284 3, 21, 125, 39, 0, 0, 119, 0, 104, 120,
285 105, 0, 104, 105, 0, 121, 0, 120, 121, 0,
vlm5f0128b2004-08-20 13:25:29 +0000286 210, 0, 210, 106, 9, 107, 0, 9, 0, 0,
vlm9283dbe2004-08-18 04:59:12 +0000287 123, 0, 124, 0, 123, 124, 0, 41, 84, 0,
288 52, 84, 0, 20, 84, 0, 43, 53, 0, 12,
289 57, 0, 0, 126, 0, 127, 0, 126, 127, 0,
290 129, 0, 134, 0, 140, 0, 164, 0, 137, 0,
291 0, 38, 12, 128, 0, 172, 0, 54, 130, 108,
292 0, 54, 46, 0, 131, 0, 130, 131, 0, 132,
vlm5f0128b2004-08-20 13:25:29 +0000293 46, 208, 118, 0, 133, 0, 132, 109, 133, 0,
294 208, 0, 210, 0, 42, 135, 108, 0, 42, 17,
vlm9283dbe2004-08-18 04:59:12 +0000295 108, 0, 42, 108, 0, 136, 0, 135, 109, 136,
vlm5f0128b2004-08-20 13:25:29 +0000296 0, 208, 0, 210, 0, 208, 138, 3, 104, 139,
297 105, 0, 159, 0, 169, 0, 0, 181, 0, 208,
298 3, 206, 87, 0, 208, 3, 206, 156, 0, 208,
299 3, 146, 0, 208, 104, 141, 105, 3, 156, 0,
300 142, 0, 141, 109, 142, 0, 208, 0, 208, 110,
301 210, 0, 169, 110, 210, 0, 144, 0, 143, 109,
302 144, 0, 158, 0, 210, 0, 155, 0, 145, 109,
vlm9283dbe2004-08-18 04:59:12 +0000303 155, 0, 28, 104, 148, 105, 150, 0, 0, 88,
vlm5f0128b2004-08-20 13:25:29 +0000304 0, 149, 0, 148, 109, 149, 0, 162, 198, 0,
305 162, 156, 147, 0, 162, 162, 198, 147, 0, 0,
vlm9283dbe2004-08-18 04:59:12 +0000306 151, 0, 0, 95, 82, 104, 152, 153, 105, 0,
vlm5f0128b2004-08-20 13:25:29 +0000307 154, 0, 153, 154, 0, 4, 0, 162, 0, 211,
308 156, 0, 157, 0, 158, 178, 198, 0, 173, 0,
309 102, 0, 102, 111, 167, 0, 102, 111, 205, 0,
310 171, 0, 172, 0, 174, 0, 208, 104, 143, 105,
311 0, 159, 0, 56, 68, 159, 0, 11, 0, 11,
312 112, 208, 0, 11, 112, 210, 0, 209, 0, 209,
313 112, 160, 0, 161, 0, 160, 112, 161, 0, 163,
314 0, 163, 0, 13, 0, 14, 0, 210, 138, 3,
315 165, 0, 0, 104, 166, 168, 0, 5, 0, 7,
316 0, 6, 0, 205, 0, 167, 0, 210, 0, 208,
317 112, 210, 0, 4, 0, 168, 4, 0, 24, 0,
318 63, 0, 76, 0, 170, 0, 67, 81, 0, 65,
319 51, 0, 77, 0, 44, 0, 36, 71, 0, 26,
320 81, 0, 91, 0, 47, 0, 58, 0, 40, 0,
321 22, 81, 0, 169, 0, 170, 202, 0, 23, 0,
322 48, 0, 49, 0, 50, 0, 59, 0, 64, 0,
323 74, 0, 83, 0, 85, 0, 90, 0, 92, 0,
324 93, 0, 94, 0, 66, 0, 78, 178, 68, 156,
325 0, 79, 178, 68, 156, 0, 27, 104, 145, 105,
326 0, 78, 104, 145, 105, 0, 79, 104, 145, 105,
327 0, 18, 0, 18, 35, 25, 210, 0, 99, 0,
328 100, 0, 97, 0, 98, 0, 96, 0, 0, 179,
329 0, 180, 0, 80, 106, 181, 107, 0, 106, 181,
330 107, 0, 180, 106, 181, 107, 0, 182, 0, 182,
331 109, 102, 0, 182, 109, 102, 109, 182, 0, 183,
332 0, 182, 175, 183, 0, 182, 176, 183, 0, 183,
333 177, 183, 0, 185, 106, 181, 107, 0, 106, 181,
334 107, 0, 186, 0, 186, 184, 186, 0, 61, 184,
335 186, 0, 186, 184, 60, 0, 61, 184, 60, 0,
336 192, 0, 187, 0, 101, 0, 101, 113, 0, 113,
337 101, 0, 113, 101, 113, 0, 80, 0, 46, 0,
338 205, 0, 210, 0, 6, 0, 45, 0, 86, 0,
339 95, 30, 104, 188, 105, 0, 189, 0, 188, 109,
340 189, 0, 102, 0, 210, 178, 190, 0, 0, 191,
341 0, 73, 0, 15, 0, 69, 0, 193, 0, 194,
342 0, 104, 208, 105, 0, 193, 104, 195, 105, 0,
343 196, 0, 195, 109, 196, 0, 114, 197, 0, 114,
344 112, 197, 0, 210, 0, 197, 112, 210, 0, 0,
345 199, 0, 69, 0, 33, 200, 0, 186, 0, 169,
346 0, 0, 104, 201, 168, 0, 104, 105, 0, 104,
347 203, 105, 0, 204, 0, 203, 109, 204, 0, 210,
348 0, 210, 106, 205, 107, 0, 210, 106, 167, 107,
349 0, 205, 0, 102, 0, 9, 0, 10, 0, 0,
350 207, 0, 103, 0, 103, 52, 0, 103, 41, 0,
351 11, 0, 12, 0, 12, 0, 8, 0, 210, 0,
352 210, 207, 0
vlm6f5eb0b2004-08-13 12:35:09 +0000353};
vlmfa67ddc2004-06-03 03:38:44 +0000354
355#endif
356
vlm6f5eb0b2004-08-13 12:35:09 +0000357#if YYDEBUG != 0
358static const short yyrline[] = { 0,
vlm5f0128b2004-08-20 13:25:29 +0000359 298, 304, 310, 326, 351, 353, 356, 360, 365, 372,
360 380, 385, 389, 398, 400, 408, 412, 420, 424, 427,
361 430, 434, 454, 456, 464, 468, 500, 504, 513, 520,
362 533, 540, 542, 554, 567, 574, 579, 585, 591, 600,
363 606, 612, 619, 627, 631, 634, 641, 647, 653, 660,
364 669, 679, 687, 695, 697, 709, 721, 728, 744, 754,
365 764, 774, 779, 786, 796, 802, 808, 812, 824, 830,
366 836, 846, 848, 851, 859, 865, 874, 879, 896, 898,
367 903, 907, 912, 917, 923, 927, 952, 959, 964, 974,
368 982, 991, 1000, 1011, 1015, 1021, 1029, 1053, 1060, 1074,
369 1083, 1093, 1103, 1111, 1132, 1141, 1150, 1151, 1153, 1160,
370 1172, 1182, 1184, 1189, 1193, 1197, 1201, 1204, 1209, 1221,
371 1237, 1248, 1262, 1264, 1265, 1266, 1267, 1268, 1269, 1270,
372 1271, 1272, 1273, 1274, 1280, 1282, 1283, 1286, 1293, 1305,
373 1307, 1311, 1315, 1316, 1317, 1318, 1319, 1323, 1324, 1325,
374 1326, 1330, 1331, 1335, 1344, 1354, 1361, 1367, 1373, 1379,
375 1395, 1395, 1396, 1396, 1397, 1399, 1401, 1406, 1410, 1419,
376 1423, 1428, 1432, 1438, 1448, 1452, 1455, 1458, 1463, 1472,
377 1480, 1486, 1493, 1501, 1509, 1518, 1521, 1526, 1528, 1529,
378 1530, 1533, 1537, 1542, 1546, 1557, 1562, 1567, 1574, 1580,
379 1584, 1589, 1595, 1607, 1609, 1612, 1616, 1619, 1624, 1628,
380 1636, 1651, 1657, 1664, 1677, 1689, 1704, 1708, 1725, 1727,
381 1730, 1734, 1740, 1743, 1745, 1745, 1765, 1770, 1775, 1781,
382 1787, 1795, 1803, 1811, 1818, 1828, 1833, 1863, 1865, 1868,
383 1873, 1877, 1883, 1888, 1895, 1902, 1909, 1914
vlm6f5eb0b2004-08-13 12:35:09 +0000384};
385#endif
386
387
388#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
389
390static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
391"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
vlm9283dbe2004-08-18 04:59:12 +0000392"TOK_number_negative","TOK_typereference","TOK_capitalreference","TOK_typefieldreference",
vlm6f5eb0b2004-08-13 12:35:09 +0000393"TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY",
394"TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN",
395"TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS",
396"TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED",
vlm9283dbe2004-08-18 04:59:12 +0000397"TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL","TOK_END","TOK_ENUMERATED",
398"TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE",
399"TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString","TOK_GraphicString","TOK_IA5String",
400"TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE",
401"TOK_INSTRUCTIONS","TOK_INTEGER","TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY",
402"TOK_NULL","TOK_NumericString","TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET",
403"TOK_OF","TOK_OPTIONAL","TOK_PATTERN","TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT",
404"TOK_PrintableString","TOK_PRIVATE","TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE",
405"TOK_SET","TOK_SIZE","TOK_STRING","TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString",
406"TOK_TRUE","TOK_TYPE_IDENTIFIER","TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString",
407"TOK_UTCTime","TOK_UTF8String","TOK_VideotexString","TOK_VisibleString","TOK_WITH",
408"TOK_EXCEPT","'^'","TOK_INTERSECTION","'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots",
409"TOK_tag","'{'","'}'","'('","')'","';'","','","':'","'!'","'.'","'<'","'@'",
410"ParsedGrammar","ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
vlm6f5eb0b2004-08-13 12:35:09 +0000411"ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags",
412"ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody",
vlm9283dbe2004-08-18 04:59:12 +0000413"ModuleSpecificationBody","ModuleSpecificationElement","@1","ImportsDefinition",
414"ImportsBundleSet","ImportsBundle","ImportsList","ImportsElement","ExportsDefinition",
415"ExportsBody","ExportsElement","ValueSetDefinition","DefinedTypeRef","optValueSetBody",
416"DataTypeReference","ParameterArgumentList","ParameterArgumentName","ActualParameterList",
417"ActualParameter","ConstructedDataTypeDefinition","ClassDeclaration","optUnique",
418"ClassFieldList","ClassField","optWithSyntax","WithSyntax","@2","WithSyntaxFormat",
419"WithSyntaxFormatToken","DataTypeMember","ConstrainedTypeDeclaration","ExtensionAndException",
vlm5f0128b2004-08-20 13:25:29 +0000420"UnconstrainedTypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList",
421"ComplexTypeReferenceElement","ClassFieldIdentifier","ClassFieldName","ValueDefinition",
422"InlineOrDefinedValue","@3","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
423"BasicType","BasicString","ConstructedTypeConstrained","ConstructedType","Union",
424"Intersection","Except","optConstraints","Constraints","SetOfConstraints","ElementSetSpecs",
425"ElementSetSpec","ConstraintSubtypeElement","ConstraintRangeSpec","ConstraintSpec",
426"ConstraintValue","WithComponents","WithComponentsList","WithComponentsElement",
427"optPresenceConstraint","PresenceConstraint","TableConstraint","SimpleTableConstraint",
428"ComponentRelationConstraint","AtNotationList","AtNotationElement","ComponentIdList",
429"optMarker","Marker","DefaultValue","@4","UniverationDefinition","UniverationList",
430"UniverationElement","SignedNumber","optTag","Tag","TypeRefName","ObjectClassReference",
431"Identifier","TaggedIdentifier", NULL
vlm6f5eb0b2004-08-13 12:35:09 +0000432};
433#endif
434
435static const short yyr1[] = { 0,
vlm9283dbe2004-08-18 04:59:12 +0000436 115, 116, 116, 117, 118, 118, 119, 119, 120, 120,
437 121, 121, 121, 122, 122, 123, 123, 124, 124, 124,
438 124, 124, 125, 125, 126, 126, 127, 127, 127, 127,
439 127, 128, 127, 127, 129, 129, 130, 130, 131, 132,
440 132, 133, 133, 134, 134, 134, 135, 135, 136, 136,
441 137, 138, 138, 139, 139, 140, 140, 140, 140, 141,
442 141, 142, 142, 142, 143, 143, 144, 144, 145, 145,
443 146, 147, 147, 148, 148, 149, 149, 149, 150, 150,
vlm5f0128b2004-08-20 13:25:29 +0000444 152, 151, 153, 153, 154, 154, 155, 155, 156, 156,
445 157, 157, 157, 158, 158, 158, 158, 158, 158, 159,
446 159, 159, 159, 159, 160, 160, 161, 162, 163, 163,
447 164, 166, 165, 165, 165, 165, 165, 165, 167, 167,
448 168, 168, 169, 169, 169, 169, 169, 169, 169, 169,
449 169, 169, 169, 169, 170, 170, 170, 171, 171, 172,
vlm9283dbe2004-08-18 04:59:12 +0000450 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
vlm5f0128b2004-08-20 13:25:29 +0000451 172, 172, 172, 173, 173, 174, 174, 174, 174, 174,
452 175, 175, 176, 176, 177, 178, 178, 179, 179, 180,
453 180, 181, 181, 181, 182, 182, 182, 182, 183, 183,
454 183, 183, 183, 183, 183, 183, 183, 184, 184, 184,
455 184, 185, 185, 186, 186, 186, 186, 186, 187, 188,
456 188, 189, 189, 190, 190, 191, 191, 191, 192, 192,
457 193, 194, 195, 195, 196, 196, 197, 197, 198, 198,
458 199, 199, 200, 200, 201, 200, 202, 202, 203, 203,
459 204, 204, 204, 204, 204, 205, 205, 206, 206, 207,
460 207, 207, 208, 208, 209, 210, 211, 211
vlm6f5eb0b2004-08-13 12:35:09 +0000461};
462
463static const short yyr2[] = { 0,
464 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
465 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
vlm9283dbe2004-08-18 04:59:12 +0000466 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
467 1, 0, 3, 1, 3, 2, 1, 2, 4, 1,
468 3, 1, 1, 3, 3, 2, 1, 3, 1, 1,
469 6, 1, 1, 0, 1, 4, 4, 3, 6, 1,
470 3, 1, 3, 3, 1, 3, 1, 1, 1, 3,
471 5, 0, 1, 1, 3, 2, 3, 4, 0, 1,
472 0, 6, 1, 2, 1, 1, 2, 1, 3, 1,
vlm5f0128b2004-08-20 13:25:29 +0000473 1, 3, 3, 1, 1, 1, 4, 1, 3, 1,
474 3, 3, 1, 3, 1, 3, 1, 1, 1, 1,
475 4, 0, 3, 1, 1, 1, 1, 1, 1, 3,
476 1, 2, 1, 1, 1, 1, 2, 2, 1, 1,
477 2, 2, 1, 1, 1, 1, 2, 1, 2, 1,
vlm9283dbe2004-08-18 04:59:12 +0000478 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
vlm5f0128b2004-08-20 13:25:29 +0000479 1, 1, 1, 4, 4, 4, 4, 4, 1, 4,
480 1, 1, 1, 1, 1, 0, 1, 1, 4, 3,
481 4, 1, 3, 5, 1, 3, 3, 3, 4, 3,
482 1, 3, 3, 3, 3, 1, 1, 1, 2, 2,
483 3, 1, 1, 1, 1, 1, 1, 1, 5, 1,
484 3, 1, 3, 0, 1, 1, 1, 1, 1, 1,
485 3, 4, 1, 3, 2, 3, 1, 3, 0, 1,
486 1, 2, 1, 1, 0, 3, 2, 3, 1, 3,
487 1, 4, 4, 1, 1, 1, 1, 0, 1, 1,
488 2, 2, 1, 1, 1, 1, 1, 2
vlm6f5eb0b2004-08-13 12:35:09 +0000489};
490
491static const short yydefact[] = { 0,
vlm5f0128b2004-08-20 13:25:29 +0000492 243, 244, 1, 2, 5, 3, 0, 0, 6, 246,
vlm6f5eb0b2004-08-13 12:35:09 +0000493 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
vlm9283dbe2004-08-18 04:59:12 +0000494 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
vlm5f0128b2004-08-20 13:25:29 +0000495 18, 21, 19, 0, 17, 12, 23, 140, 0, 0,
496 141, 142, 143, 0, 144, 145, 153, 146, 147, 148,
497 149, 150, 151, 152, 0, 24, 25, 27, 28, 31,
vlm9283dbe2004-08-18 04:59:12 +0000498 29, 30, 34, 0, 0, 32, 0, 46, 0, 47,
499 49, 50, 36, 0, 37, 0, 40, 42, 43, 4,
vlm5f0128b2004-08-20 13:25:29 +0000500 26, 238, 100, 245, 0, 123, 0, 0, 136, 130,
501 134, 135, 124, 0, 0, 125, 129, 133, 0, 0,
502 52, 53, 126, 103, 0, 33, 45, 44, 0, 35,
503 38, 0, 0, 0, 240, 58, 0, 239, 0, 137,
504 132, 131, 128, 127, 0, 60, 0, 62, 0, 0,
505 0, 48, 5, 41, 0, 242, 241, 100, 245, 159,
506 0, 0, 166, 166, 56, 57, 166, 98, 138, 126,
507 94, 95, 90, 96, 0, 101, 102, 0, 0, 0,
508 0, 54, 109, 110, 104, 105, 107, 114, 116, 115,
509 236, 237, 112, 111, 118, 117, 0, 119, 39, 0,
510 74, 219, 108, 0, 0, 0, 0, 0, 0, 0,
511 167, 168, 0, 0, 219, 0, 139, 0, 0, 61,
512 64, 63, 196, 197, 193, 0, 192, 198, 0, 0,
513 0, 0, 55, 172, 175, 0, 181, 187, 186, 209,
514 210, 194, 195, 0, 0, 0, 79, 0, 0, 221,
515 72, 219, 76, 220, 0, 91, 0, 69, 88, 247,
516 0, 99, 0, 0, 0, 0, 0, 0, 0, 89,
517 235, 227, 0, 229, 234, 231, 0, 0, 0, 65,
518 67, 68, 59, 188, 0, 0, 0, 0, 0, 51,
519 163, 164, 161, 162, 0, 0, 0, 165, 0, 0,
520 0, 0, 106, 121, 113, 120, 0, 71, 80, 75,
521 225, 224, 223, 222, 73, 77, 72, 160, 0, 156,
522 0, 248, 87, 0, 157, 170, 154, 0, 158, 155,
523 228, 0, 0, 97, 0, 189, 190, 185, 183, 0,
524 211, 180, 173, 176, 177, 178, 0, 184, 182, 0,
525 0, 213, 122, 0, 0, 78, 92, 93, 70, 169,
526 171, 230, 0, 0, 66, 191, 202, 0, 200, 166,
527 0, 179, 0, 215, 217, 212, 0, 81, 226, 233,
528 232, 199, 0, 204, 174, 216, 0, 214, 0, 201,
529 207, 208, 206, 203, 205, 218, 85, 0, 83, 86,
530 82, 84, 0, 0, 0
vlm6f5eb0b2004-08-13 12:35:09 +0000531};
532
vlm5f0128b2004-08-20 13:25:29 +0000533static const short yydefgoto[] = { 383,
vlm9283dbe2004-08-18 04:59:12 +0000534 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
535 56, 57, 106, 58, 74, 75, 76, 77, 59, 69,
vlm5f0128b2004-08-20 13:25:29 +0000536 70, 60, 100, 212, 61, 125, 126, 259, 260, 237,
537 116, 296, 180, 181, 288, 289, 369, 378, 379, 238,
538 146, 239, 147, 148, 165, 166, 182, 183, 62, 174,
539 225, 175, 285, 149, 150, 151, 152, 153, 154, 276,
540 277, 279, 190, 191, 192, 213, 214, 215, 266, 216,
541 217, 218, 348, 349, 374, 375, 219, 220, 221, 331,
542 332, 354, 233, 234, 294, 335, 197, 253, 254, 222,
543 117, 118, 155, 104, 223, 241
vlm6f5eb0b2004-08-13 12:35:09 +0000544};
545
vlm5f0128b2004-08-20 13:25:29 +0000546static const short yypact[] = { 62,
547-32768,-32768, 62,-32768, -36,-32768, 11, 56,-32768,-32768,
548-32768,-32768, 26,-32768, -13, 202,-32768,-32768, 87, 52,
549 66, 99, 108, 101, 116, 202,-32768, 81,-32768,-32768,
550-32768,-32768,-32768, 149,-32768,-32768, 375,-32768, 185, 10,
551-32768,-32768,-32768, 58,-32768,-32768,-32768,-32768,-32768,-32768,
552-32768,-32768,-32768,-32768, 163, 375,-32768,-32768,-32768,-32768,
553-32768,-32768,-32768, 140, 673,-32768, 96,-32768, 86,-32768,
554-32768,-32768,-32768, 20,-32768, -4,-32768,-32768,-32768,-32768,
555-32768, -11, 98,-32768, 134,-32768, 137, 156,-32768,-32768,
556-32768,-32768,-32768, 187, 139,-32768,-32768,-32768, 690, 269,
557-32768,-32768,-32768, 165, 272,-32768,-32768,-32768, 218,-32768,
558-32768, 62, 218, 179, 94,-32768, 536,-32768, 218,-32768,
559-32768,-32768,-32768,-32768, -65,-32768, 175, 176, 183, 199,
560 53,-32768, -36,-32768, 199,-32768,-32768, 70, 184, 255,
561 192, 229, 61, 65,-32768,-32768, -27,-32768,-32768, 194,
562-32768,-32768,-32768,-32768, 195,-32768,-32768, 301, 690, 299,
563 299, 215,-32768,-32768, 197,-32768,-32768,-32768,-32768,-32768,
564-32768,-32768,-32768,-32768,-32768,-32768, 203,-32768,-32768, 63,
565-32768, 459,-32768, 286, 21, 235, 210, 21, 215, 250,
566-32768, 214, 21, 256, 15, 42,-32768, 314, 613,-32768,
567-32768,-32768,-32768,-32768,-32768, -12,-32768,-32768, 297, 62,
568 215, 223,-32768, 142, 233, 225, -12,-32768,-32768, 230,
569-32768,-32768,-32768, 199, 329, 299, 240, 199, 226,-32768,
570 251, 15,-32768,-32768, 299, 231, 91,-32768,-32768, 241,
571 613,-32768, 215, 128, 236, 613, 215, 144, 613,-32768,
572-32768,-32768, 158,-32768,-32768, 239, 243, 244, 159,-32768,
573-32768,-32768,-32768, 238, 248, 77, 249, 252, 245,-32768,
574-32768,-32768,-32768,-32768, 253, 215, 215,-32768, 215, 215,
575 89, 254,-32768,-32768, 355,-32768, 283,-32768,-32768,-32768,
576-32768,-32768,-32768,-32768,-32768,-32768, 251,-32768, 247,-32768,
577 21,-32768,-32768, 259,-32768,-32768,-32768, 260,-32768,-32768,
578-32768, 46, 247,-32768, 314,-32768, 258,-32768,-32768, 28,
579-32768,-32768, 265,-32768,-32768,-32768, 262,-32768,-32768, -1,
580 160,-32768,-32768, 271, 329,-32768,-32768,-32768,-32768,-32768,
581-32768,-32768, 275, 277,-32768,-32768,-32768, 169,-32768, -27,
582 215,-32768, 299, 264,-32768,-32768, 254,-32768, 355,-32768,
583-32768,-32768, 28, 8, 182, 264, 299,-32768, 125,-32768,
584-32768,-32768,-32768,-32768,-32768,-32768,-32768, 12,-32768,-32768,
585-32768,-32768, 385, 389,-32768
vlm6f5eb0b2004-08-13 12:35:09 +0000586};
587
588static const short yypgoto[] = {-32768,
vlm5f0128b2004-08-20 13:25:29 +0000589-32768, 391, 263,-32768,-32768, 382,-32768,-32768, 374,-32768,
590-32768, 345,-32768,-32768,-32768, 328,-32768, 290,-32768,-32768,
591 300,-32768, 346,-32768,-32768,-32768, 257,-32768, 95, -67,
592-32768, 115,-32768, 186,-32768,-32768,-32768,-32768, 37, 117,
593 -40,-32768, -188, -50,-32768, 196, -179, -91,-32768,-32768,
594-32768, -219, 84, -56, -52,-32768, 35,-32768,-32768,-32768,
595-32768,-32768, -142,-32768,-32768, -165, 71, -121, 204,-32768,
596 -141,-32768,-32768, 64,-32768,-32768,-32768,-32768,-32768,-32768,
597 69, 75, -124,-32768,-32768,-32768,-32768,-32768, 118, -120,
598-32768, 191, 1,-32768, -7,-32768
vlm6f5eb0b2004-08-13 12:35:09 +0000599};
600
601
vlm5f0128b2004-08-20 13:25:29 +0000602#define YYLAST 781
vlm6f5eb0b2004-08-13 12:35:09 +0000603
604
605static const short yytable[] = { 15,
vlm5f0128b2004-08-20 13:25:29 +0000606 5, 194, 232, 5, 195, 15, 10, 102, 102, 261,
607 176, 103, 103, 101, 101, 377, 114, 10, 10, 11,
608 1, 2, 371, 245, 163, 164, 67, 10, 10, 65,
609 1, 2, 72, 10, 11, 10, 79, 64, 167, 158,
610 71, 112, 127, 159, 78, 269, 103, 229, 65, 10,
611 171, 172, 187, 10, 171, 172, 64, 168, 169, 170,
612 10, 171, 172, 1, 2, 10, 79, 7, 1, 2,
613 250, 63, 1, 2, 78, 255, 372, 304, 189, 337,
614 373, 308, 203, 230, 10, 171, 172, 293, 264, 16,
615 63, 115, 19, 343, 203, 28, 10, 171, 172, 128,
616 265, 72, 127, 73, 113, 79, 103, 297, 29, 71,
617 353, 157, 133, 78, 327, 12, 381, 68, 34, 156,
618 244, 204, 236, 178, 319, 248, 261, 110, 377, 347,
619 17, 177, 167, 204, 136, 242, 318, 163, 164, 329,
620 187, 231, 82, 251, 187, 137, 252, 251, 328, 30,
621 83, 84, 201, 202, 324, 325, 173, 326, 263, 128,
622 32, 85, 208, 86, 188, 87, 189, 227, 193, 37,
623 189, 228, 292, -243, 208, 88, 103, 240, 338, 89,
624 240, 119, 31, 90, 33, 240, 91, 36, 256, 380,
625 262, 255, 344, 108, 109, 300, 66, 92, 380, 301,
626 303, 80, 93, 107, 94, 307, 95, 364, 310, 119,
627 268, 163, 164, 20, 120, 96, 97, 121, 286, 124,
628 203, 21, 10, 171, 172, 10, 122, 298, 1, 2,
629 98, 203, 305, 10, 171, 172, 301, 123, 271, 272,
630 273, 274, 22, 99, 23, 83, 84, 85, 309, 86,
631 275, 87, 301, 24, 10, 171, 172, 1, 2, 204,
632 205, 88, 311, 314, 356, 89, 312, 315, 357, 90,
633 204, 129, 91, 362, 131, 206, 130, 363, 271, 272,
634 273, 274, 135, 92, 160, 161, 162, -244, 93, 184,
635 94, 178, 95, 240, 207, 185, 186, 196, 198, 177,
636 208, 96, 97, 199, 256, 178, 10, 262, 224, 209,
637 235, 208, 350, 177, 226, 243, 98, 246, 210, 247,
638 211, 10, 355, 249, 138, 139, 267, 270, 278, 291,
639 280, 140, 284, 282, 287, 85, 38, 86, 295, 87,
640 141, 299, 306, 115, 313, 355, 188, 193, 317, 88,
641 316, 322, 320, 89, 323, 350, 321, 90, 333, 376,
642 91, 41, 42, 43, 334, 340, 341, 330, 352, 142,
643 346, 92, 45, 351, 358, 367, 93, 46, 94, 47,
644 95, 360, 10, 361, 384, 1, 2, 48, 385, 96,
645 97, 257, 258, 6, 18, 179, 49, 38, 50, 35,
646 81, 111, 134, 51, 98, 52, 53, 54, 132, 345,
647 105, 336, 39, 290, 382, 200, 40, 339, 359, 283,
648 281, 365, 41, 42, 43, 368, 370, 366, 44, 342,
649 302, 0, 0, 45, 0, 0, 0, 0, 46, 0,
650 47, 0, 0, 0, 0, 0, 0, 0, 48, 0,
651 0, 0, 0, 0, 0, 0, 0, 49, 0, 50,
652 0, 0, 0, 0, 51, 0, 52, 53, 54, 138,
653 139, 163, 164, 0, 0, 0, 140, 0, 0, 0,
vlm9283dbe2004-08-18 04:59:12 +0000654 85, 38, 86, 0, 87, 141, 0, 0, 0, 0,
vlm5f0128b2004-08-20 13:25:29 +0000655 0, 229, 0, 0, 88, 0, 0, 0, 89, 0,
vlm9283dbe2004-08-18 04:59:12 +0000656 0, 0, 90, 0, 0, 91, 41, 42, 43, 0,
657 0, 0, 0, 0, 142, 0, 92, 45, 0, 0,
vlm5f0128b2004-08-20 13:25:29 +0000658 0, 93, 46, 94, 47, 95, 0, 230, 0, 0,
vlm9283dbe2004-08-18 04:59:12 +0000659 0, 0, 48, 0, 96, 97, 143, 144, 0, 0,
vlm5f0128b2004-08-20 13:25:29 +0000660 0, 49, 0, 50, 0, 0, 138, 139, 51, 98,
vlm9283dbe2004-08-18 04:59:12 +0000661 52, 53, 54, 140, 0, 0, 0, 85, 38, 86,
662 0, 87, 141, 0, 0, 0, 0, 0, 0, 0,
663 0, 88, 0, 0, 0, 89, 0, 0, 0, 90,
664 0, 0, 91, 41, 42, 43, 0, 0, 0, 0,
665 0, 142, 0, 92, 45, 0, 0, 0, 93, 46,
vlm5f0128b2004-08-20 13:25:29 +0000666 94, 47, 95, 0, 0, 0, 0, 0, 0, 48,
667 0, 96, 97, 143, 144, 0, 0, 0, 49, 0,
668 50, 0, 145, 138, 139, 51, 98, 52, 53, 54,
669 140, 0, 0, 0, 85, 38, 86, 0, 87, 141,
670 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
671 0, 0, 89, 0, 0, 0, 90, 0, 0, 91,
672 41, 42, 43, 0, 0, 0, 0, 0, 142, 0,
673 92, 45, 0, 0, 0, 93, 46, 94, 47, 95,
674 0, 0, 0, 83, 84, 0, 48, 0, 96, 97,
675 143, 144, 0, 0, 85, 49, 86, 50, 87, 0,
676 1, 2, 51, 98, 52, 53, 54, 0, 88, 0,
677 0, 85, 89, 86, 0, 87, 90, 0, 0, 91,
678 0, 0, 0, 0, 0, 88, 0, 0, 0, 89,
679 92, 0, 0, 90, 0, 93, 91, 94, 0, 95,
680 0, 0, 0, 0, 0, 0, 0, 92, 96, 97,
681 0, 0, 93, 0, 94, 0, 95, 0, 0, 0,
682 0, 0, 0, 98, 0, 96, 97, 0, 0, 0,
vlm9283dbe2004-08-18 04:59:12 +0000683 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
vlm5f0128b2004-08-20 13:25:29 +0000684 98
vlm6f5eb0b2004-08-13 12:35:09 +0000685};
686
687static const short yycheck[] = { 7,
vlm5f0128b2004-08-20 13:25:29 +0000688 0, 144, 182, 3, 147, 13, 8, 64, 65, 198,
689 131, 64, 65, 64, 65, 4, 28, 8, 8, 9,
690 11, 12, 15, 189, 13, 14, 17, 8, 8, 37,
691 11, 12, 40, 8, 9, 8, 44, 37, 130, 105,
692 40, 46, 99, 109, 44, 211, 99, 33, 56, 8,
693 9, 10, 80, 8, 9, 10, 56, 5, 6, 7,
694 8, 9, 10, 11, 12, 8, 74, 104, 11, 12,
695 195, 37, 11, 12, 74, 196, 69, 243, 106, 299,
696 73, 247, 6, 69, 8, 9, 10, 229, 101, 34,
697 56, 103, 106, 313, 6, 9, 8, 9, 10, 99,
698 113, 109, 159, 46, 109, 113, 159, 232, 57, 109,
699 112, 119, 112, 113, 280, 105, 105, 108, 3, 119,
700 188, 45, 102, 131, 266, 193, 315, 108, 4, 102,
701 105, 131, 224, 45, 41, 186, 60, 13, 14, 281,
702 80, 182, 3, 102, 80, 52, 105, 102, 60, 84,
703 11, 12, 160, 161, 276, 277, 104, 279, 199, 159,
704 53, 22, 86, 24, 104, 26, 106, 105, 104, 21,
705 106, 109, 229, 104, 86, 36, 229, 185, 299, 40,
706 188, 112, 84, 44, 84, 193, 47, 107, 196, 369,
707 198, 312, 313, 108, 109, 105, 12, 58, 378, 109,
708 241, 39, 63, 108, 65, 246, 67, 350, 249, 112,
709 210, 13, 14, 12, 81, 76, 77, 81, 226, 81,
710 6, 20, 8, 9, 10, 8, 71, 235, 11, 12,
711 91, 6, 105, 8, 9, 10, 109, 51, 97, 98,
712 99, 100, 41, 104, 43, 11, 12, 22, 105, 24,
713 109, 26, 109, 52, 8, 9, 10, 11, 12, 45,
714 46, 36, 105, 105, 105, 40, 109, 109, 109, 44,
715 45, 3, 47, 105, 3, 61, 112, 109, 97, 98,
716 99, 100, 104, 58, 110, 110, 104, 104, 63, 35,
717 65, 299, 67, 301, 80, 104, 68, 104, 104, 299,
718 86, 76, 77, 3, 312, 313, 8, 315, 112, 95,
719 25, 86, 320, 313, 112, 106, 91, 68, 104, 106,
720 106, 8, 330, 68, 11, 12, 30, 105, 96, 104,
721 106, 18, 4, 104, 95, 22, 23, 24, 88, 26,
722 27, 111, 107, 103, 106, 353, 104, 104, 101, 36,
723 113, 107, 104, 40, 102, 363, 105, 44, 4, 367,
724 47, 48, 49, 50, 82, 107, 107, 114, 107, 56,
725 113, 58, 59, 109, 104, 112, 63, 64, 65, 66,
726 67, 107, 8, 107, 0, 11, 12, 74, 0, 76,
727 77, 78, 79, 3, 13, 133, 83, 23, 85, 26,
728 56, 74, 113, 90, 91, 92, 93, 94, 109, 315,
729 65, 297, 38, 228, 378, 159, 42, 301, 335, 224,
730 217, 351, 48, 49, 50, 357, 363, 353, 54, 312,
731 240, -1, -1, 59, -1, -1, -1, -1, 64, -1,
732 66, -1, -1, -1, -1, -1, -1, -1, 74, -1,
733 -1, -1, -1, -1, -1, -1, -1, 83, -1, 85,
734 -1, -1, -1, -1, 90, -1, 92, 93, 94, 11,
735 12, 13, 14, -1, -1, -1, 18, -1, -1, -1,
vlm6f5eb0b2004-08-13 12:35:09 +0000736 22, 23, 24, -1, 26, 27, -1, -1, -1, -1,
vlm5f0128b2004-08-20 13:25:29 +0000737 -1, 33, -1, -1, 36, -1, -1, -1, 40, -1,
vlm9283dbe2004-08-18 04:59:12 +0000738 -1, -1, 44, -1, -1, 47, 48, 49, 50, -1,
739 -1, -1, -1, -1, 56, -1, 58, 59, -1, -1,
vlm5f0128b2004-08-20 13:25:29 +0000740 -1, 63, 64, 65, 66, 67, -1, 69, -1, -1,
vlm9283dbe2004-08-18 04:59:12 +0000741 -1, -1, 74, -1, 76, 77, 78, 79, -1, -1,
vlm5f0128b2004-08-20 13:25:29 +0000742 -1, 83, -1, 85, -1, -1, 11, 12, 90, 91,
vlm9283dbe2004-08-18 04:59:12 +0000743 92, 93, 94, 18, -1, -1, -1, 22, 23, 24,
744 -1, 26, 27, -1, -1, -1, -1, -1, -1, -1,
745 -1, 36, -1, -1, -1, 40, -1, -1, -1, 44,
746 -1, -1, 47, 48, 49, 50, -1, -1, -1, -1,
747 -1, 56, -1, 58, 59, -1, -1, -1, 63, 64,
vlm5f0128b2004-08-20 13:25:29 +0000748 65, 66, 67, -1, -1, -1, -1, -1, -1, 74,
749 -1, 76, 77, 78, 79, -1, -1, -1, 83, -1,
750 85, -1, 87, 11, 12, 90, 91, 92, 93, 94,
751 18, -1, -1, -1, 22, 23, 24, -1, 26, 27,
752 -1, -1, -1, -1, -1, -1, -1, -1, 36, -1,
753 -1, -1, 40, -1, -1, -1, 44, -1, -1, 47,
754 48, 49, 50, -1, -1, -1, -1, -1, 56, -1,
755 58, 59, -1, -1, -1, 63, 64, 65, 66, 67,
756 -1, -1, -1, 11, 12, -1, 74, -1, 76, 77,
757 78, 79, -1, -1, 22, 83, 24, 85, 26, -1,
758 11, 12, 90, 91, 92, 93, 94, -1, 36, -1,
759 -1, 22, 40, 24, -1, 26, 44, -1, -1, 47,
760 -1, -1, -1, -1, -1, 36, -1, -1, -1, 40,
761 58, -1, -1, 44, -1, 63, 47, 65, -1, 67,
762 -1, -1, -1, -1, -1, -1, -1, 58, 76, 77,
763 -1, -1, 63, -1, 65, -1, 67, -1, -1, -1,
764 -1, -1, -1, 91, -1, 76, 77, -1, -1, -1,
vlm9283dbe2004-08-18 04:59:12 +0000765 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
vlm5f0128b2004-08-20 13:25:29 +0000766 91
vlm6f5eb0b2004-08-13 12:35:09 +0000767};
768/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
769#line 3 "/usr/share/bison.simple"
770/* This file comes from bison-1.28. */
771
772/* Skeleton output parser for bison,
773 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
774
775 This program is free software; you can redistribute it and/or modify
776 it under the terms of the GNU General Public License as published by
777 the Free Software Foundation; either version 2, or (at your option)
778 any later version.
779
780 This program is distributed in the hope that it will be useful,
781 but WITHOUT ANY WARRANTY; without even the implied warranty of
782 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
783 GNU General Public License for more details.
784
785 You should have received a copy of the GNU General Public License
786 along with this program; if not, write to the Free Software
787 Foundation, Inc., 59 Temple Place - Suite 330,
788 Boston, MA 02111-1307, USA. */
789
790/* As a special exception, when this file is copied by Bison into a
791 Bison output file, you may use that output file without restriction.
792 This special exception was added by the Free Software Foundation
793 in version 1.24 of Bison. */
794
795/* This is the parser code that is written into each bison parser
796 when the %semantic_parser declaration is not specified in the grammar.
797 It was written by Richard Stallman by simplifying the hairy parser
798 used when %semantic_parser is specified. */
799
800#ifndef YYSTACK_USE_ALLOCA
801#ifdef alloca
802#define YYSTACK_USE_ALLOCA
803#else /* alloca not defined */
804#ifdef __GNUC__
805#define YYSTACK_USE_ALLOCA
806#define alloca __builtin_alloca
807#else /* not GNU C. */
808#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
809#define YYSTACK_USE_ALLOCA
810#include <alloca.h>
811#else /* not sparc */
812/* We think this test detects Watcom and Microsoft C. */
813/* This used to test MSDOS, but that is a bad idea
814 since that symbol is in the user namespace. */
815#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
816#if 0 /* No need for malloc.h, which pollutes the namespace;
817 instead, just don't use alloca. */
818#include <malloc.h>
819#endif
820#else /* not MSDOS, or __TURBOC__ */
821#if defined(_AIX)
822/* I don't know what this was needed for, but it pollutes the namespace.
823 So I turned it off. rms, 2 May 1997. */
824/* #include <malloc.h> */
825 #pragma alloca
826#define YYSTACK_USE_ALLOCA
827#else /* not MSDOS, or __TURBOC__, or _AIX */
828#if 0
829#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
830 and on HPUX 10. Eventually we can turn this on. */
831#define YYSTACK_USE_ALLOCA
832#define alloca __builtin_alloca
833#endif /* __hpux */
834#endif
835#endif /* not _AIX */
836#endif /* not MSDOS, or __TURBOC__ */
837#endif /* not sparc */
838#endif /* not GNU C */
839#endif /* alloca not defined */
840#endif /* YYSTACK_USE_ALLOCA not defined */
841
842#ifdef YYSTACK_USE_ALLOCA
843#define YYSTACK_ALLOC alloca
vlmfa67ddc2004-06-03 03:38:44 +0000844#else
vlm6f5eb0b2004-08-13 12:35:09 +0000845#define YYSTACK_ALLOC malloc
vlmfa67ddc2004-06-03 03:38:44 +0000846#endif
847
vlm6f5eb0b2004-08-13 12:35:09 +0000848/* Note: there must be only one dollar sign in this file.
849 It is replaced by the list of actions, each action
850 as one case of the switch. */
vlmfa67ddc2004-06-03 03:38:44 +0000851
852#define yyerrok (yyerrstatus = 0)
853#define yyclearin (yychar = YYEMPTY)
854#define YYEMPTY -2
855#define YYEOF 0
856#define YYACCEPT goto yyacceptlab
vlm6f5eb0b2004-08-13 12:35:09 +0000857#define YYABORT goto yyabortlab
vlmfa67ddc2004-06-03 03:38:44 +0000858#define YYERROR goto yyerrlab1
vlm6f5eb0b2004-08-13 12:35:09 +0000859/* Like YYERROR except do call yyerror.
860 This remains here temporarily to ease the
861 transition to the new meaning of YYERROR, for GCC.
vlmfa67ddc2004-06-03 03:38:44 +0000862 Once GCC version 2 has supplanted version 1, this can go. */
863#define YYFAIL goto yyerrlab
864#define YYRECOVERING() (!!yyerrstatus)
vlm6f5eb0b2004-08-13 12:35:09 +0000865#define YYBACKUP(token, value) \
vlmfa67ddc2004-06-03 03:38:44 +0000866do \
867 if (yychar == YYEMPTY && yylen == 1) \
vlm6f5eb0b2004-08-13 12:35:09 +0000868 { yychar = (token), yylval = (value); \
vlmfa67ddc2004-06-03 03:38:44 +0000869 yychar1 = YYTRANSLATE (yychar); \
870 YYPOPSTACK; \
871 goto yybackup; \
872 } \
873 else \
vlm6f5eb0b2004-08-13 12:35:09 +0000874 { yyerror ("syntax error: cannot back up"); YYERROR; } \
vlmfa67ddc2004-06-03 03:38:44 +0000875while (0)
876
877#define YYTERROR 1
878#define YYERRCODE 256
879
vlm6f5eb0b2004-08-13 12:35:09 +0000880#ifndef YYPURE
881#define YYLEX yylex()
vlmfa67ddc2004-06-03 03:38:44 +0000882#endif
883
vlm6f5eb0b2004-08-13 12:35:09 +0000884#ifdef YYPURE
885#ifdef YYLSP_NEEDED
886#ifdef YYLEX_PARAM
887#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
888#else
889#define YYLEX yylex(&yylval, &yylloc)
890#endif
891#else /* not YYLSP_NEEDED */
892#ifdef YYLEX_PARAM
893#define YYLEX yylex(&yylval, YYLEX_PARAM)
894#else
895#define YYLEX yylex(&yylval)
896#endif
897#endif /* not YYLSP_NEEDED */
898#endif
vlmfa67ddc2004-06-03 03:38:44 +0000899
vlm6f5eb0b2004-08-13 12:35:09 +0000900/* If nonreentrant, generate the variables here */
vlmfa67ddc2004-06-03 03:38:44 +0000901
vlm6f5eb0b2004-08-13 12:35:09 +0000902#ifndef YYPURE
vlmfa67ddc2004-06-03 03:38:44 +0000903
vlm6f5eb0b2004-08-13 12:35:09 +0000904int yychar; /* the lookahead symbol */
905YYSTYPE yylval; /* the semantic value of the */
906 /* lookahead symbol */
vlmfa67ddc2004-06-03 03:38:44 +0000907
vlm6f5eb0b2004-08-13 12:35:09 +0000908#ifdef YYLSP_NEEDED
909YYLTYPE yylloc; /* location data for the lookahead */
910 /* symbol */
911#endif
vlmfa67ddc2004-06-03 03:38:44 +0000912
vlm6f5eb0b2004-08-13 12:35:09 +0000913int yynerrs; /* number of parse errors so far */
914#endif /* not YYPURE */
915
916#if YYDEBUG != 0
917int yydebug; /* nonzero means print parse trace */
918/* Since this is uninitialized, it does not stop multiple parsers
919 from coexisting. */
920#endif
921
922/* YYINITDEPTH indicates the initial size of the parser's stacks */
923
vlmfa67ddc2004-06-03 03:38:44 +0000924#ifndef YYINITDEPTH
vlm6f5eb0b2004-08-13 12:35:09 +0000925#define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +0000926#endif
927
vlm6f5eb0b2004-08-13 12:35:09 +0000928/* YYMAXDEPTH is the maximum size the stacks can grow to
929 (effective only if the built-in stack extension method is used). */
vlmfa67ddc2004-06-03 03:38:44 +0000930
931#if YYMAXDEPTH == 0
vlm6f5eb0b2004-08-13 12:35:09 +0000932#undef YYMAXDEPTH
vlmfa67ddc2004-06-03 03:38:44 +0000933#endif
934
935#ifndef YYMAXDEPTH
vlm6f5eb0b2004-08-13 12:35:09 +0000936#define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +0000937#endif
938
vlm6f5eb0b2004-08-13 12:35:09 +0000939/* Define __yy_memcpy. Note that the size argument
940 should be passed with type unsigned int, because that is what the non-GCC
941 definitions require. With GCC, __builtin_memcpy takes an arg
942 of type size_t, but it can handle unsigned int. */
vlmfa67ddc2004-06-03 03:38:44 +0000943
vlm6f5eb0b2004-08-13 12:35:09 +0000944#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
945#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
946#else /* not GNU C or C++ */
947#ifndef __cplusplus
vlmfa67ddc2004-06-03 03:38:44 +0000948
vlm6f5eb0b2004-08-13 12:35:09 +0000949/* This is the most reliable way to avoid incompatibilities
950 in available built-in functions on various systems. */
vlm827ac182004-06-03 05:07:41 +0000951static void
vlm6f5eb0b2004-08-13 12:35:09 +0000952__yy_memcpy (to, from, count)
953 char *to;
954 char *from;
955 unsigned int count;
vlm827ac182004-06-03 05:07:41 +0000956{
vlm6f5eb0b2004-08-13 12:35:09 +0000957 register char *f = from;
958 register char *t = to;
959 register int i = count;
vlm827ac182004-06-03 05:07:41 +0000960
vlm6f5eb0b2004-08-13 12:35:09 +0000961 while (i-- > 0)
962 *t++ = *f++;
vlm827ac182004-06-03 05:07:41 +0000963}
vlm827ac182004-06-03 05:07:41 +0000964
vlm6f5eb0b2004-08-13 12:35:09 +0000965#else /* __cplusplus */
vlm827ac182004-06-03 05:07:41 +0000966
vlm6f5eb0b2004-08-13 12:35:09 +0000967/* This is the most reliable way to avoid incompatibilities
968 in available built-in functions on various systems. */
vlm827ac182004-06-03 05:07:41 +0000969static void
vlm6f5eb0b2004-08-13 12:35:09 +0000970__yy_memcpy (char *to, char *from, unsigned int count)
vlm827ac182004-06-03 05:07:41 +0000971{
vlm6f5eb0b2004-08-13 12:35:09 +0000972 register char *t = to;
973 register char *f = from;
974 register int i = count;
vlm827ac182004-06-03 05:07:41 +0000975
vlm6f5eb0b2004-08-13 12:35:09 +0000976 while (i-- > 0)
977 *t++ = *f++;
vlmfa67ddc2004-06-03 03:38:44 +0000978}
979
vlm6f5eb0b2004-08-13 12:35:09 +0000980#endif
981#endif
vlmfa67ddc2004-06-03 03:38:44 +0000982
vlm6f5eb0b2004-08-13 12:35:09 +0000983#line 217 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +0000984
985/* The user can define YYPARSE_PARAM as the name of an argument to be passed
986 into yyparse. The argument should have type void *.
987 It should actually point to an object.
988 Grammar actions can access the variable by casting it
989 to the proper pointer type. */
990
991#ifdef YYPARSE_PARAM
vlm6f5eb0b2004-08-13 12:35:09 +0000992#ifdef __cplusplus
993#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
994#define YYPARSE_PARAM_DECL
995#else /* not __cplusplus */
996#define YYPARSE_PARAM_ARG YYPARSE_PARAM
997#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
998#endif /* not __cplusplus */
999#else /* not YYPARSE_PARAM */
1000#define YYPARSE_PARAM_ARG
1001#define YYPARSE_PARAM_DECL
1002#endif /* not YYPARSE_PARAM */
vlmfa67ddc2004-06-03 03:38:44 +00001003
1004/* Prevent warning if -Wstrict-prototypes. */
1005#ifdef __GNUC__
vlm6f5eb0b2004-08-13 12:35:09 +00001006#ifdef YYPARSE_PARAM
vlmfa67ddc2004-06-03 03:38:44 +00001007int yyparse (void *);
vlm6f5eb0b2004-08-13 12:35:09 +00001008#else
vlmfa67ddc2004-06-03 03:38:44 +00001009int yyparse (void);
vlm6f5eb0b2004-08-13 12:35:09 +00001010#endif
vlmfa67ddc2004-06-03 03:38:44 +00001011#endif
vlm827ac182004-06-03 05:07:41 +00001012
vlmfa67ddc2004-06-03 03:38:44 +00001013int
vlm6f5eb0b2004-08-13 12:35:09 +00001014yyparse(YYPARSE_PARAM_ARG)
vlmfa67ddc2004-06-03 03:38:44 +00001015 YYPARSE_PARAM_DECL
1016{
1017 register int yystate;
1018 register int yyn;
1019 register short *yyssp;
1020 register YYSTYPE *yyvsp;
vlm6f5eb0b2004-08-13 12:35:09 +00001021 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1022 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
vlmfa67ddc2004-06-03 03:38:44 +00001023
vlm6f5eb0b2004-08-13 12:35:09 +00001024 short yyssa[YYINITDEPTH]; /* the state stack */
1025 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
vlmfa67ddc2004-06-03 03:38:44 +00001026
vlm6f5eb0b2004-08-13 12:35:09 +00001027 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1028 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
vlmfa67ddc2004-06-03 03:38:44 +00001029
vlm6f5eb0b2004-08-13 12:35:09 +00001030#ifdef YYLSP_NEEDED
1031 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1032 YYLTYPE *yyls = yylsa;
1033 YYLTYPE *yylsp;
1034
1035#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1036#else
vlmfa67ddc2004-06-03 03:38:44 +00001037#define YYPOPSTACK (yyvsp--, yyssp--)
vlm6f5eb0b2004-08-13 12:35:09 +00001038#endif
vlmfa67ddc2004-06-03 03:38:44 +00001039
vlm6f5eb0b2004-08-13 12:35:09 +00001040 int yystacksize = YYINITDEPTH;
1041 int yyfree_stacks = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001042
vlm6f5eb0b2004-08-13 12:35:09 +00001043#ifdef YYPURE
1044 int yychar;
1045 YYSTYPE yylval;
1046 int yynerrs;
1047#ifdef YYLSP_NEEDED
1048 YYLTYPE yylloc;
1049#endif
1050#endif
vlmfa67ddc2004-06-03 03:38:44 +00001051
vlm6f5eb0b2004-08-13 12:35:09 +00001052 YYSTYPE yyval; /* the variable used to return */
1053 /* semantic values from the action */
1054 /* routines */
vlmfa67ddc2004-06-03 03:38:44 +00001055
1056 int yylen;
1057
vlm6f5eb0b2004-08-13 12:35:09 +00001058#if YYDEBUG != 0
1059 if (yydebug)
1060 fprintf(stderr, "Starting parse\n");
1061#endif
vlmfa67ddc2004-06-03 03:38:44 +00001062
1063 yystate = 0;
1064 yyerrstatus = 0;
1065 yynerrs = 0;
1066 yychar = YYEMPTY; /* Cause a token to be read. */
1067
1068 /* Initialize stack pointers.
1069 Waste one element of value and location stack
1070 so that they stay on the same level as the state stack.
1071 The wasted elements are never initialized. */
1072
vlm6f5eb0b2004-08-13 12:35:09 +00001073 yyssp = yyss - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001074 yyvsp = yyvs;
vlm6f5eb0b2004-08-13 12:35:09 +00001075#ifdef YYLSP_NEEDED
1076 yylsp = yyls;
1077#endif
vlmfa67ddc2004-06-03 03:38:44 +00001078
vlm6f5eb0b2004-08-13 12:35:09 +00001079/* Push a new state, which is found in yystate . */
1080/* In all cases, when you get here, the value and location stacks
1081 have just been pushed. so pushing a state here evens the stacks. */
1082yynewstate:
vlmfa67ddc2004-06-03 03:38:44 +00001083
vlm6f5eb0b2004-08-13 12:35:09 +00001084 *++yyssp = yystate;
vlmfa67ddc2004-06-03 03:38:44 +00001085
1086 if (yyssp >= yyss + yystacksize - 1)
1087 {
vlm6f5eb0b2004-08-13 12:35:09 +00001088 /* Give user a chance to reallocate the stack */
1089 /* Use copies of these so that the &'s don't force the real ones into memory. */
1090 YYSTYPE *yyvs1 = yyvs;
1091 short *yyss1 = yyss;
1092#ifdef YYLSP_NEEDED
1093 YYLTYPE *yyls1 = yyls;
1094#endif
1095
vlmfa67ddc2004-06-03 03:38:44 +00001096 /* Get the current used size of the three stacks, in elements. */
vlm6f5eb0b2004-08-13 12:35:09 +00001097 int size = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001098
1099#ifdef yyoverflow
vlm6f5eb0b2004-08-13 12:35:09 +00001100 /* Each stack pointer address is followed by the size of
1101 the data in use in that stack, in bytes. */
1102#ifdef YYLSP_NEEDED
1103 /* This used to be a conditional around just the two extra args,
1104 but that might be undefined if yyoverflow is a macro. */
1105 yyoverflow("parser stack overflow",
1106 &yyss1, size * sizeof (*yyssp),
1107 &yyvs1, size * sizeof (*yyvsp),
1108 &yyls1, size * sizeof (*yylsp),
1109 &yystacksize);
1110#else
1111 yyoverflow("parser stack overflow",
1112 &yyss1, size * sizeof (*yyssp),
1113 &yyvs1, size * sizeof (*yyvsp),
1114 &yystacksize);
1115#endif
vlmfa67ddc2004-06-03 03:38:44 +00001116
vlm6f5eb0b2004-08-13 12:35:09 +00001117 yyss = yyss1; yyvs = yyvs1;
1118#ifdef YYLSP_NEEDED
1119 yyls = yyls1;
1120#endif
vlmfa67ddc2004-06-03 03:38:44 +00001121#else /* no yyoverflow */
1122 /* Extend the stack our own way. */
1123 if (yystacksize >= YYMAXDEPTH)
vlm6f5eb0b2004-08-13 12:35:09 +00001124 {
1125 yyerror("parser stack overflow");
1126 if (yyfree_stacks)
1127 {
1128 free (yyss);
1129 free (yyvs);
1130#ifdef YYLSP_NEEDED
1131 free (yyls);
1132#endif
1133 }
1134 return 2;
1135 }
vlmfa67ddc2004-06-03 03:38:44 +00001136 yystacksize *= 2;
1137 if (yystacksize > YYMAXDEPTH)
1138 yystacksize = YYMAXDEPTH;
vlm6f5eb0b2004-08-13 12:35:09 +00001139#ifndef YYSTACK_USE_ALLOCA
1140 yyfree_stacks = 1;
1141#endif
1142 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1143 __yy_memcpy ((char *)yyss, (char *)yyss1,
1144 size * (unsigned int) sizeof (*yyssp));
1145 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1146 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1147 size * (unsigned int) sizeof (*yyvsp));
1148#ifdef YYLSP_NEEDED
1149 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1150 __yy_memcpy ((char *)yyls, (char *)yyls1,
1151 size * (unsigned int) sizeof (*yylsp));
1152#endif
vlmfa67ddc2004-06-03 03:38:44 +00001153#endif /* no yyoverflow */
1154
vlm6f5eb0b2004-08-13 12:35:09 +00001155 yyssp = yyss + size - 1;
1156 yyvsp = yyvs + size - 1;
1157#ifdef YYLSP_NEEDED
1158 yylsp = yyls + size - 1;
1159#endif
vlmfa67ddc2004-06-03 03:38:44 +00001160
vlm6f5eb0b2004-08-13 12:35:09 +00001161#if YYDEBUG != 0
1162 if (yydebug)
1163 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1164#endif
vlmfa67ddc2004-06-03 03:38:44 +00001165
1166 if (yyssp >= yyss + yystacksize - 1)
1167 YYABORT;
1168 }
1169
vlm6f5eb0b2004-08-13 12:35:09 +00001170#if YYDEBUG != 0
1171 if (yydebug)
1172 fprintf(stderr, "Entering state %d\n", yystate);
1173#endif
vlmfa67ddc2004-06-03 03:38:44 +00001174
1175 goto yybackup;
vlm6f5eb0b2004-08-13 12:35:09 +00001176 yybackup:
vlmfa67ddc2004-06-03 03:38:44 +00001177
1178/* Do appropriate processing given the current state. */
1179/* Read a lookahead token if we need one and don't already have one. */
1180/* yyresume: */
1181
1182 /* First try to decide what to do without reference to lookahead token. */
1183
1184 yyn = yypact[yystate];
vlm6f5eb0b2004-08-13 12:35:09 +00001185 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001186 goto yydefault;
1187
1188 /* Not known => get a lookahead token if don't already have one. */
1189
1190 /* yychar is either YYEMPTY or YYEOF
1191 or a valid token in external form. */
1192
1193 if (yychar == YYEMPTY)
1194 {
vlm6f5eb0b2004-08-13 12:35:09 +00001195#if YYDEBUG != 0
1196 if (yydebug)
1197 fprintf(stderr, "Reading a token: ");
1198#endif
vlmfa67ddc2004-06-03 03:38:44 +00001199 yychar = YYLEX;
1200 }
1201
vlm6f5eb0b2004-08-13 12:35:09 +00001202 /* Convert token to internal form (in yychar1) for indexing tables with */
vlmfa67ddc2004-06-03 03:38:44 +00001203
vlm6f5eb0b2004-08-13 12:35:09 +00001204 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001205 {
1206 yychar1 = 0;
vlm6f5eb0b2004-08-13 12:35:09 +00001207 yychar = YYEOF; /* Don't call YYLEX any more */
vlmfa67ddc2004-06-03 03:38:44 +00001208
vlm6f5eb0b2004-08-13 12:35:09 +00001209#if YYDEBUG != 0
1210 if (yydebug)
1211 fprintf(stderr, "Now at end of input.\n");
1212#endif
vlmfa67ddc2004-06-03 03:38:44 +00001213 }
1214 else
1215 {
vlm6f5eb0b2004-08-13 12:35:09 +00001216 yychar1 = YYTRANSLATE(yychar);
vlmfa67ddc2004-06-03 03:38:44 +00001217
vlm6f5eb0b2004-08-13 12:35:09 +00001218#if YYDEBUG != 0
1219 if (yydebug)
1220 {
1221 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1222 /* Give the individual parser a way to print the precise meaning
1223 of a token, for further debugging info. */
1224#ifdef YYPRINT
1225 YYPRINT (stderr, yychar, yylval);
1226#endif
1227 fprintf (stderr, ")\n");
1228 }
1229#endif
vlmfa67ddc2004-06-03 03:38:44 +00001230 }
1231
1232 yyn += yychar1;
vlm6f5eb0b2004-08-13 12:35:09 +00001233 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001234 goto yydefault;
vlm6f5eb0b2004-08-13 12:35:09 +00001235
vlmfa67ddc2004-06-03 03:38:44 +00001236 yyn = yytable[yyn];
vlm6f5eb0b2004-08-13 12:35:09 +00001237
1238 /* yyn is what to do for this token type in this state.
1239 Negative => reduce, -yyn is rule number.
1240 Positive => shift, yyn is new state.
1241 New state is final state => don't bother to shift,
1242 just return success.
1243 0, or most negative number => error. */
1244
1245 if (yyn < 0)
vlmfa67ddc2004-06-03 03:38:44 +00001246 {
vlm6f5eb0b2004-08-13 12:35:09 +00001247 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001248 goto yyerrlab;
1249 yyn = -yyn;
1250 goto yyreduce;
1251 }
vlm6f5eb0b2004-08-13 12:35:09 +00001252 else if (yyn == 0)
1253 goto yyerrlab;
vlmfa67ddc2004-06-03 03:38:44 +00001254
1255 if (yyn == YYFINAL)
1256 YYACCEPT;
1257
1258 /* Shift the lookahead token. */
vlm6f5eb0b2004-08-13 12:35:09 +00001259
1260#if YYDEBUG != 0
1261 if (yydebug)
1262 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1263#endif
vlmfa67ddc2004-06-03 03:38:44 +00001264
1265 /* Discard the token being shifted unless it is eof. */
1266 if (yychar != YYEOF)
1267 yychar = YYEMPTY;
1268
1269 *++yyvsp = yylval;
vlm6f5eb0b2004-08-13 12:35:09 +00001270#ifdef YYLSP_NEEDED
1271 *++yylsp = yylloc;
1272#endif
vlmfa67ddc2004-06-03 03:38:44 +00001273
vlm6f5eb0b2004-08-13 12:35:09 +00001274 /* count tokens shifted since error; after three, turn off error status. */
1275 if (yyerrstatus) yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001276
1277 yystate = yyn;
1278 goto yynewstate;
1279
vlm6f5eb0b2004-08-13 12:35:09 +00001280/* Do the default action for the current state. */
vlm827ac182004-06-03 05:07:41 +00001281yydefault:
vlm6f5eb0b2004-08-13 12:35:09 +00001282
vlmfa67ddc2004-06-03 03:38:44 +00001283 yyn = yydefact[yystate];
1284 if (yyn == 0)
1285 goto yyerrlab;
1286
vlm6f5eb0b2004-08-13 12:35:09 +00001287/* Do a reduction. yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001288yyreduce:
1289 yylen = yyr2[yyn];
vlm6f5eb0b2004-08-13 12:35:09 +00001290 if (yylen > 0)
1291 yyval = yyvsp[1-yylen]; /* implement default value of the action */
vlmfa67ddc2004-06-03 03:38:44 +00001292
vlm6f5eb0b2004-08-13 12:35:09 +00001293#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00001294 if (yydebug)
1295 {
vlm6f5eb0b2004-08-13 12:35:09 +00001296 int i;
vlmfa67ddc2004-06-03 03:38:44 +00001297
vlm6f5eb0b2004-08-13 12:35:09 +00001298 fprintf (stderr, "Reducing via rule %d (line %d), ",
1299 yyn, yyrline[yyn]);
vlmfa67ddc2004-06-03 03:38:44 +00001300
1301 /* Print the symbols being reduced, and their result. */
vlm6f5eb0b2004-08-13 12:35:09 +00001302 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1303 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1304 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
vlmfa67ddc2004-06-03 03:38:44 +00001305 }
1306#endif
vlm827ac182004-06-03 05:07:41 +00001307
vlm6f5eb0b2004-08-13 12:35:09 +00001308
1309 switch (yyn) {
1310
1311case 1:
vlm5f0128b2004-08-20 13:25:29 +00001312#line 299 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001313{
1314 *(void **)param = yyvsp[0].a_grammar;
1315 ;
1316 break;}
1317case 2:
vlm5f0128b2004-08-20 13:25:29 +00001318#line 305 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001319{
vlmfa67ddc2004-06-03 03:38:44 +00001320 yyval.a_grammar = asn1p_new();
1321 checkmem(yyval.a_grammar);
1322 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6f5eb0b2004-08-13 12:35:09 +00001323 ;
1324 break;}
1325case 3:
vlm5f0128b2004-08-20 13:25:29 +00001326#line 310 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001327{
vlmfa67ddc2004-06-03 03:38:44 +00001328 yyval.a_grammar = yyvsp[-1].a_grammar;
1329 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6f5eb0b2004-08-13 12:35:09 +00001330 ;
1331 break;}
1332case 4:
vlm5f0128b2004-08-20 13:25:29 +00001333#line 331 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001334{
vlmfa67ddc2004-06-03 03:38:44 +00001335
1336 if(yyvsp[-1].a_module) {
1337 yyval.a_module = yyvsp[-1].a_module;
1338 } else {
1339 /* There's a chance that a module is just plain empty */
1340 yyval.a_module = asn1p_module_new();
1341 }
1342 checkmem(yyval.a_module);
1343
1344 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1345 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1346 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
vlm6f5eb0b2004-08-13 12:35:09 +00001347 ;
1348 break;}
1349case 5:
vlm5f0128b2004-08-20 13:25:29 +00001350#line 352 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001351{ yyval.a_oid = 0; ;
1352 break;}
1353case 6:
vlm5f0128b2004-08-20 13:25:29 +00001354#line 353 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001355{ yyval.a_oid = yyvsp[0].a_oid; ;
1356 break;}
1357case 7:
vlm5f0128b2004-08-20 13:25:29 +00001358#line 357 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001359{
vlmfa67ddc2004-06-03 03:38:44 +00001360 yyval.a_oid = yyvsp[-1].a_oid;
vlm6f5eb0b2004-08-13 12:35:09 +00001361 ;
1362 break;}
1363case 8:
vlm5f0128b2004-08-20 13:25:29 +00001364#line 360 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001365{
vlmfa67ddc2004-06-03 03:38:44 +00001366 yyval.a_oid = 0;
vlm6f5eb0b2004-08-13 12:35:09 +00001367 ;
1368 break;}
1369case 9:
vlm5f0128b2004-08-20 13:25:29 +00001370#line 366 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001371{
vlmfa67ddc2004-06-03 03:38:44 +00001372 yyval.a_oid = asn1p_oid_new();
1373 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1374 if(yyvsp[0].a_oid_arc.name)
1375 free(yyvsp[0].a_oid_arc.name);
vlm6f5eb0b2004-08-13 12:35:09 +00001376 ;
1377 break;}
1378case 10:
vlm5f0128b2004-08-20 13:25:29 +00001379#line 372 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001380{
vlmfa67ddc2004-06-03 03:38:44 +00001381 yyval.a_oid = yyvsp[-1].a_oid;
1382 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1383 if(yyvsp[0].a_oid_arc.name)
1384 free(yyvsp[0].a_oid_arc.name);
vlm6f5eb0b2004-08-13 12:35:09 +00001385 ;
1386 break;}
1387case 11:
vlm5f0128b2004-08-20 13:25:29 +00001388#line 381 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001389{ /* iso */
vlmfa67ddc2004-06-03 03:38:44 +00001390 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1391 yyval.a_oid_arc.number = -1;
vlm6f5eb0b2004-08-13 12:35:09 +00001392 ;
1393 break;}
1394case 12:
vlm5f0128b2004-08-20 13:25:29 +00001395#line 385 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001396{ /* iso(1) */
vlmfa67ddc2004-06-03 03:38:44 +00001397 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1398 yyval.a_oid_arc.number = yyvsp[-1].a_int;
vlm6f5eb0b2004-08-13 12:35:09 +00001399 ;
1400 break;}
1401case 13:
vlm5f0128b2004-08-20 13:25:29 +00001402#line 389 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001403{ /* 1 */
vlmfa67ddc2004-06-03 03:38:44 +00001404 yyval.a_oid_arc.name = 0;
1405 yyval.a_oid_arc.number = yyvsp[0].a_int;
vlm6f5eb0b2004-08-13 12:35:09 +00001406 ;
1407 break;}
1408case 14:
vlm5f0128b2004-08-20 13:25:29 +00001409#line 399 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001410{ yyval.a_module_flags = MSF_NOFLAGS; ;
1411 break;}
1412case 15:
vlm5f0128b2004-08-20 13:25:29 +00001413#line 400 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001414{
vlmfa67ddc2004-06-03 03:38:44 +00001415 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6f5eb0b2004-08-13 12:35:09 +00001416 ;
1417 break;}
1418case 16:
vlm5f0128b2004-08-20 13:25:29 +00001419#line 409 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001420{
vlmfa67ddc2004-06-03 03:38:44 +00001421 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6f5eb0b2004-08-13 12:35:09 +00001422 ;
1423 break;}
1424case 17:
vlm5f0128b2004-08-20 13:25:29 +00001425#line 412 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001426{
vlmfa67ddc2004-06-03 03:38:44 +00001427 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
vlm6f5eb0b2004-08-13 12:35:09 +00001428 ;
1429 break;}
1430case 18:
vlm5f0128b2004-08-20 13:25:29 +00001431#line 421 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001432{
vlmfa67ddc2004-06-03 03:38:44 +00001433 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
vlm6f5eb0b2004-08-13 12:35:09 +00001434 ;
1435 break;}
1436case 19:
vlm5f0128b2004-08-20 13:25:29 +00001437#line 424 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001438{
vlmfa67ddc2004-06-03 03:38:44 +00001439 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
vlm6f5eb0b2004-08-13 12:35:09 +00001440 ;
1441 break;}
1442case 20:
vlm5f0128b2004-08-20 13:25:29 +00001443#line 427 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001444{
vlmfa67ddc2004-06-03 03:38:44 +00001445 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
vlm6f5eb0b2004-08-13 12:35:09 +00001446 ;
1447 break;}
1448case 21:
vlm5f0128b2004-08-20 13:25:29 +00001449#line 430 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001450{
vlmfa67ddc2004-06-03 03:38:44 +00001451 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
vlm6f5eb0b2004-08-13 12:35:09 +00001452 ;
1453 break;}
1454case 22:
vlm5f0128b2004-08-20 13:25:29 +00001455#line 434 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001456{
vlm9283dbe2004-08-18 04:59:12 +00001457 /* X.680Amd1 specifies TAG and XER */
1458 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1459 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1460 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1461 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1462 } else {
1463 fprintf(stderr,
1464 "WARNING: %s INSTRUCTIONS at line %d: "
1465 "Unrecognized encoding reference\n",
1466 yyvsp[-1].tv_str, yylineno);
1467 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1468 }
1469 free(yyvsp[-1].tv_str);
vlm6f5eb0b2004-08-13 12:35:09 +00001470 ;
1471 break;}
vlm9283dbe2004-08-18 04:59:12 +00001472case 23:
vlm5f0128b2004-08-20 13:25:29 +00001473#line 455 "asn1p_y.y"
vlm9283dbe2004-08-18 04:59:12 +00001474{ yyval.a_module = 0; ;
1475 break;}
vlm6f5eb0b2004-08-13 12:35:09 +00001476case 24:
vlm5f0128b2004-08-20 13:25:29 +00001477#line 456 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001478{
vlmfa67ddc2004-06-03 03:38:44 +00001479 yyval.a_module = yyvsp[0].a_module;
vlm6f5eb0b2004-08-13 12:35:09 +00001480 ;
1481 break;}
1482case 25:
vlm5f0128b2004-08-20 13:25:29 +00001483#line 465 "asn1p_y.y"
vlm9283dbe2004-08-18 04:59:12 +00001484{
1485 yyval.a_module = yyvsp[0].a_module;
1486 ;
1487 break;}
1488case 26:
vlm5f0128b2004-08-20 13:25:29 +00001489#line 468 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001490{
vlmfa67ddc2004-06-03 03:38:44 +00001491 yyval.a_module = yyvsp[-1].a_module;
1492
vlm9283dbe2004-08-18 04:59:12 +00001493 /* Behave well when one of them is skipped. */
1494 if(!(yyvsp[-1].a_module)) {
1495 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1496 break;
1497 }
1498
vlmfa67ddc2004-06-03 03:38:44 +00001499#ifdef MY_IMPORT
1500#error MY_IMPORT DEFINED ELSEWHERE!
1501#endif
1502#define MY_IMPORT(foo,field) do { \
vlm97ed7152004-08-13 12:31:09 +00001503 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
vlmfa67ddc2004-06-03 03:38:44 +00001504 TQ_ADD(&(yyval.a_module->foo), \
1505 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1506 field); \
vlm97ed7152004-08-13 12:31:09 +00001507 } \
1508 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1509 } while(0)
vlmfa67ddc2004-06-03 03:38:44 +00001510
1511 MY_IMPORT(imports, xp_next);
1512 MY_IMPORT(exports, xp_next);
1513 MY_IMPORT(members, next);
1514#undef MY_IMPORT
1515
vlm6f5eb0b2004-08-13 12:35:09 +00001516 ;
1517 break;}
vlm9283dbe2004-08-18 04:59:12 +00001518case 27:
vlm5f0128b2004-08-20 13:25:29 +00001519#line 501 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001520{
vlmfa67ddc2004-06-03 03:38:44 +00001521 yyval.a_module = yyvsp[0].a_module;
vlm6f5eb0b2004-08-13 12:35:09 +00001522 ;
1523 break;}
vlm9283dbe2004-08-18 04:59:12 +00001524case 28:
vlm5f0128b2004-08-20 13:25:29 +00001525#line 504 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001526{
vlmfa67ddc2004-06-03 03:38:44 +00001527 yyval.a_module = asn1p_module_new();
1528 checkmem(yyval.a_module);
1529 if(yyvsp[0].a_xports) {
1530 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1531 } else {
1532 /* "EXPORTS ALL;" ? */
1533 }
vlm6f5eb0b2004-08-13 12:35:09 +00001534 ;
1535 break;}
vlm6f5eb0b2004-08-13 12:35:09 +00001536case 29:
vlm5f0128b2004-08-20 13:25:29 +00001537#line 513 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001538{
vlmfa67ddc2004-06-03 03:38:44 +00001539 yyval.a_module = asn1p_module_new();
1540 checkmem(yyval.a_module);
1541 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1542 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1543 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6f5eb0b2004-08-13 12:35:09 +00001544 ;
1545 break;}
vlm9283dbe2004-08-18 04:59:12 +00001546case 30:
vlm5f0128b2004-08-20 13:25:29 +00001547#line 520 "asn1p_y.y"
vlm9283dbe2004-08-18 04:59:12 +00001548{
1549 yyval.a_module = asn1p_module_new();
1550 checkmem(yyval.a_module);
1551 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1552 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1553 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1554 ;
1555 break;}
vlm6f5eb0b2004-08-13 12:35:09 +00001556case 31:
vlm5f0128b2004-08-20 13:25:29 +00001557#line 533 "asn1p_y.y"
vlm9283dbe2004-08-18 04:59:12 +00001558{
1559 yyval.a_module = asn1p_module_new();
1560 checkmem(yyval.a_module);
1561 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1562 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1563 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1564 ;
1565 break;}
1566case 32:
vlm5f0128b2004-08-20 13:25:29 +00001567#line 541 "asn1p_y.y"
vlm9283dbe2004-08-18 04:59:12 +00001568{ asn1p_lexer_hack_push_encoding_control(); ;
1569 break;}
1570case 33:
vlm5f0128b2004-08-20 13:25:29 +00001571#line 542 "asn1p_y.y"
vlm9283dbe2004-08-18 04:59:12 +00001572{
1573 fprintf(stderr,
1574 "WARNING: ENCODING-CONTROL %s "
1575 "specification at line %d ignored\n",
1576 yyvsp[-1].tv_str, yylineno);
1577 free(yyvsp[-1].tv_str);
1578 yyval.a_module = 0;
1579 ;
1580 break;}
1581case 34:
vlm5f0128b2004-08-20 13:25:29 +00001582#line 554 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001583{
vlmfa67ddc2004-06-03 03:38:44 +00001584 return yyerror(
1585 "Attempt to redefine a standard basic type, "
1586 "use -ftypesXY to switch back "
1587 "to older version of ASN.1 standard");
vlm6f5eb0b2004-08-13 12:35:09 +00001588 ;
1589 break;}
vlm9283dbe2004-08-18 04:59:12 +00001590case 35:
vlm5f0128b2004-08-20 13:25:29 +00001591#line 568 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001592{
vlmfa67ddc2004-06-03 03:38:44 +00001593 yyval.a_module = yyvsp[-1].a_module;
vlm6f5eb0b2004-08-13 12:35:09 +00001594 ;
1595 break;}
vlm9283dbe2004-08-18 04:59:12 +00001596case 36:
vlm5f0128b2004-08-20 13:25:29 +00001597#line 574 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001598{
vlmfa67ddc2004-06-03 03:38:44 +00001599 return yyerror("Empty IMPORTS list");
vlm6f5eb0b2004-08-13 12:35:09 +00001600 ;
1601 break;}
vlm9283dbe2004-08-18 04:59:12 +00001602case 37:
vlm5f0128b2004-08-20 13:25:29 +00001603#line 580 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001604{
vlmfa67ddc2004-06-03 03:38:44 +00001605 yyval.a_module = asn1p_module_new();
1606 checkmem(yyval.a_module);
1607 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6f5eb0b2004-08-13 12:35:09 +00001608 ;
1609 break;}
vlm9283dbe2004-08-18 04:59:12 +00001610case 38:
vlm5f0128b2004-08-20 13:25:29 +00001611#line 585 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001612{
vlmfa67ddc2004-06-03 03:38:44 +00001613 yyval.a_module = yyvsp[-1].a_module;
1614 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6f5eb0b2004-08-13 12:35:09 +00001615 ;
1616 break;}
vlm9283dbe2004-08-18 04:59:12 +00001617case 39:
vlm5f0128b2004-08-20 13:25:29 +00001618#line 592 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001619{
vlmfa67ddc2004-06-03 03:38:44 +00001620 yyval.a_xports = yyvsp[-3].a_xports;
1621 yyval.a_xports->from = yyvsp[-1].tv_str;
1622 yyval.a_xports->from_oid = yyvsp[0].a_oid;
1623 checkmem(yyval.a_xports);
vlm6f5eb0b2004-08-13 12:35:09 +00001624 ;
1625 break;}
vlm9283dbe2004-08-18 04:59:12 +00001626case 40:
vlm5f0128b2004-08-20 13:25:29 +00001627#line 601 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001628{
vlmfa67ddc2004-06-03 03:38:44 +00001629 yyval.a_xports = asn1p_xports_new();
1630 checkmem(yyval.a_xports);
1631 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6f5eb0b2004-08-13 12:35:09 +00001632 ;
1633 break;}
vlm9283dbe2004-08-18 04:59:12 +00001634case 41:
vlm5f0128b2004-08-20 13:25:29 +00001635#line 606 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001636{
vlmfa67ddc2004-06-03 03:38:44 +00001637 yyval.a_xports = yyvsp[-2].a_xports;
1638 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6f5eb0b2004-08-13 12:35:09 +00001639 ;
1640 break;}
vlm9283dbe2004-08-18 04:59:12 +00001641case 42:
vlm5f0128b2004-08-20 13:25:29 +00001642#line 613 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001643{
vlmfa67ddc2004-06-03 03:38:44 +00001644 yyval.a_expr = asn1p_expr_new(yylineno);
1645 checkmem(yyval.a_expr);
1646 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1647 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm6f5eb0b2004-08-13 12:35:09 +00001648 ;
1649 break;}
vlm9283dbe2004-08-18 04:59:12 +00001650case 43:
vlm5f0128b2004-08-20 13:25:29 +00001651#line 619 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001652{
vlmfa67ddc2004-06-03 03:38:44 +00001653 yyval.a_expr = asn1p_expr_new(yylineno);
1654 checkmem(yyval.a_expr);
1655 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1656 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm6f5eb0b2004-08-13 12:35:09 +00001657 ;
1658 break;}
vlm9283dbe2004-08-18 04:59:12 +00001659case 44:
vlm5f0128b2004-08-20 13:25:29 +00001660#line 628 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001661{
vlmfa67ddc2004-06-03 03:38:44 +00001662 yyval.a_xports = yyvsp[-1].a_xports;
vlm6f5eb0b2004-08-13 12:35:09 +00001663 ;
1664 break;}
vlm9283dbe2004-08-18 04:59:12 +00001665case 45:
vlm5f0128b2004-08-20 13:25:29 +00001666#line 631 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001667{
vlmfa67ddc2004-06-03 03:38:44 +00001668 yyval.a_xports = 0;
vlm6f5eb0b2004-08-13 12:35:09 +00001669 ;
1670 break;}
vlm9283dbe2004-08-18 04:59:12 +00001671case 46:
vlm5f0128b2004-08-20 13:25:29 +00001672#line 634 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001673{
vlmfa67ddc2004-06-03 03:38:44 +00001674 /* Empty EXPORTS clause effectively prohibits export. */
1675 yyval.a_xports = asn1p_xports_new();
1676 checkmem(yyval.a_xports);
vlm6f5eb0b2004-08-13 12:35:09 +00001677 ;
1678 break;}
vlm9283dbe2004-08-18 04:59:12 +00001679case 47:
vlm5f0128b2004-08-20 13:25:29 +00001680#line 642 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001681{
vlmfa67ddc2004-06-03 03:38:44 +00001682 yyval.a_xports = asn1p_xports_new();
1683 assert(yyval.a_xports);
1684 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6f5eb0b2004-08-13 12:35:09 +00001685 ;
1686 break;}
vlm9283dbe2004-08-18 04:59:12 +00001687case 48:
vlm5f0128b2004-08-20 13:25:29 +00001688#line 647 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001689{
vlmfa67ddc2004-06-03 03:38:44 +00001690 yyval.a_xports = yyvsp[-2].a_xports;
1691 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6f5eb0b2004-08-13 12:35:09 +00001692 ;
1693 break;}
vlm9283dbe2004-08-18 04:59:12 +00001694case 49:
vlm5f0128b2004-08-20 13:25:29 +00001695#line 654 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001696{
vlmfa67ddc2004-06-03 03:38:44 +00001697 yyval.a_expr = asn1p_expr_new(yylineno);
1698 checkmem(yyval.a_expr);
1699 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1700 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
vlm6f5eb0b2004-08-13 12:35:09 +00001701 ;
1702 break;}
vlm9283dbe2004-08-18 04:59:12 +00001703case 50:
vlm5f0128b2004-08-20 13:25:29 +00001704#line 660 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001705{
vlmfa67ddc2004-06-03 03:38:44 +00001706 yyval.a_expr = asn1p_expr_new(yylineno);
1707 checkmem(yyval.a_expr);
1708 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1709 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
vlm6f5eb0b2004-08-13 12:35:09 +00001710 ;
1711 break;}
vlm9283dbe2004-08-18 04:59:12 +00001712case 51:
vlm5f0128b2004-08-20 13:25:29 +00001713#line 670 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001714{
vlmfa67ddc2004-06-03 03:38:44 +00001715 yyval.a_expr = yyvsp[-4].a_expr;
1716 assert(yyval.a_expr->Identifier == 0);
1717 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1718 yyval.a_expr->meta_type = AMT_VALUESET;
1719 // take care of optValueSetBody
vlm6f5eb0b2004-08-13 12:35:09 +00001720 ;
1721 break;}
vlm9283dbe2004-08-18 04:59:12 +00001722case 52:
vlm5f0128b2004-08-20 13:25:29 +00001723#line 680 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001724{
vlmfa67ddc2004-06-03 03:38:44 +00001725 yyval.a_expr = asn1p_expr_new(yylineno);
1726 checkmem(yyval.a_expr);
1727 yyval.a_expr->reference = yyvsp[0].a_ref;
1728 yyval.a_expr->expr_type = A1TC_REFERENCE;
1729 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6f5eb0b2004-08-13 12:35:09 +00001730 ;
1731 break;}
vlm9283dbe2004-08-18 04:59:12 +00001732case 53:
vlm5f0128b2004-08-20 13:25:29 +00001733#line 687 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001734{
vlmfa67ddc2004-06-03 03:38:44 +00001735 yyval.a_expr = asn1p_expr_new(yylineno);
1736 checkmem(yyval.a_expr);
1737 yyval.a_expr->expr_type = yyvsp[0].a_type;
1738 yyval.a_expr->meta_type = AMT_TYPE;
vlm6f5eb0b2004-08-13 12:35:09 +00001739 ;
1740 break;}
vlm9283dbe2004-08-18 04:59:12 +00001741case 54:
vlm5f0128b2004-08-20 13:25:29 +00001742#line 696 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001743{ ;
1744 break;}
vlm9283dbe2004-08-18 04:59:12 +00001745case 55:
vlm5f0128b2004-08-20 13:25:29 +00001746#line 697 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001747{
1748 ;
1749 break;}
vlm9283dbe2004-08-18 04:59:12 +00001750case 56:
vlm5f0128b2004-08-20 13:25:29 +00001751#line 713 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001752{
vlmfa67ddc2004-06-03 03:38:44 +00001753 yyval.a_expr = asn1p_expr_new(yylineno);
1754 checkmem(yyval.a_expr);
1755 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1756 yyval.a_expr->tag = yyvsp[-1].a_tag;
1757 yyval.a_expr->expr_type = A1TC_TYPEID;
1758 yyval.a_expr->meta_type = AMT_TYPE;
vlm6f5eb0b2004-08-13 12:35:09 +00001759 ;
1760 break;}
vlm9283dbe2004-08-18 04:59:12 +00001761case 57:
vlm5f0128b2004-08-20 13:25:29 +00001762#line 721 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001763{
vlmfa67ddc2004-06-03 03:38:44 +00001764 yyval.a_expr = yyvsp[0].a_expr;
1765 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1766 yyval.a_expr->tag = yyvsp[-1].a_tag;
1767 assert(yyval.a_expr->expr_type);
1768 assert(yyval.a_expr->meta_type);
vlm6f5eb0b2004-08-13 12:35:09 +00001769 ;
1770 break;}
vlm9283dbe2004-08-18 04:59:12 +00001771case 58:
vlm5f0128b2004-08-20 13:25:29 +00001772#line 728 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001773{
vlmfa67ddc2004-06-03 03:38:44 +00001774 yyval.a_expr = yyvsp[0].a_expr;
1775 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1776 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1777 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm6f5eb0b2004-08-13 12:35:09 +00001778 ;
1779 break;}
vlm9283dbe2004-08-18 04:59:12 +00001780case 59:
vlm5f0128b2004-08-20 13:25:29 +00001781#line 745 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001782{
vlmfa67ddc2004-06-03 03:38:44 +00001783 yyval.a_expr = yyvsp[0].a_expr;
1784 assert(yyval.a_expr->Identifier == 0);
1785 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1786 yyval.a_expr->params = yyvsp[-3].a_plist;
1787 yyval.a_expr->meta_type = AMT_PARAMTYPE;
vlm6f5eb0b2004-08-13 12:35:09 +00001788 ;
1789 break;}
vlm9283dbe2004-08-18 04:59:12 +00001790case 60:
vlm5f0128b2004-08-20 13:25:29 +00001791#line 755 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001792{
vlmfa67ddc2004-06-03 03:38:44 +00001793 int ret;
1794 yyval.a_plist = asn1p_paramlist_new(yylineno);
1795 checkmem(yyval.a_plist);
1796 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1797 checkmem(ret == 0);
1798 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1799 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6f5eb0b2004-08-13 12:35:09 +00001800 ;
1801 break;}
vlm9283dbe2004-08-18 04:59:12 +00001802case 61:
vlm5f0128b2004-08-20 13:25:29 +00001803#line 764 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001804{
vlmfa67ddc2004-06-03 03:38:44 +00001805 int ret;
1806 yyval.a_plist = yyvsp[-2].a_plist;
1807 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1808 checkmem(ret == 0);
1809 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1810 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6f5eb0b2004-08-13 12:35:09 +00001811 ;
1812 break;}
vlm9283dbe2004-08-18 04:59:12 +00001813case 62:
vlm5f0128b2004-08-20 13:25:29 +00001814#line 775 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001815{
vlmfa67ddc2004-06-03 03:38:44 +00001816 yyval.a_parg.governor = NULL;
1817 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6f5eb0b2004-08-13 12:35:09 +00001818 ;
1819 break;}
vlm9283dbe2004-08-18 04:59:12 +00001820case 63:
vlm5f0128b2004-08-20 13:25:29 +00001821#line 779 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001822{
vlmfa67ddc2004-06-03 03:38:44 +00001823 int ret;
1824 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1825 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1826 checkmem(ret == 0);
1827 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6f5eb0b2004-08-13 12:35:09 +00001828 ;
1829 break;}
vlm9283dbe2004-08-18 04:59:12 +00001830case 64:
vlm5f0128b2004-08-20 13:25:29 +00001831#line 786 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001832{
vlmfa67ddc2004-06-03 03:38:44 +00001833 int ret;
1834 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1835 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1836 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1837 checkmem(ret == 0);
1838 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6f5eb0b2004-08-13 12:35:09 +00001839 ;
1840 break;}
vlm9283dbe2004-08-18 04:59:12 +00001841case 65:
vlm5f0128b2004-08-20 13:25:29 +00001842#line 797 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001843{
vlmfa67ddc2004-06-03 03:38:44 +00001844 yyval.a_expr = asn1p_expr_new(yylineno);
1845 checkmem(yyval.a_expr);
1846 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm6f5eb0b2004-08-13 12:35:09 +00001847 ;
1848 break;}
vlm9283dbe2004-08-18 04:59:12 +00001849case 66:
vlm5f0128b2004-08-20 13:25:29 +00001850#line 802 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001851{
vlmfa67ddc2004-06-03 03:38:44 +00001852 yyval.a_expr = yyvsp[-2].a_expr;
1853 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm6f5eb0b2004-08-13 12:35:09 +00001854 ;
1855 break;}
vlm9283dbe2004-08-18 04:59:12 +00001856case 67:
vlm5f0128b2004-08-20 13:25:29 +00001857#line 809 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001858{
vlmfa67ddc2004-06-03 03:38:44 +00001859 yyval.a_expr = yyvsp[0].a_expr;
vlm6f5eb0b2004-08-13 12:35:09 +00001860 ;
1861 break;}
vlm9283dbe2004-08-18 04:59:12 +00001862case 68:
vlm5f0128b2004-08-20 13:25:29 +00001863#line 812 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001864{
vlmfa67ddc2004-06-03 03:38:44 +00001865 yyval.a_expr = asn1p_expr_new(yylineno);
1866 checkmem(yyval.a_expr);
1867 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1868 yyval.a_expr->expr_type = A1TC_REFERENCE;
1869 yyval.a_expr->meta_type = AMT_VALUE;
vlm6f5eb0b2004-08-13 12:35:09 +00001870 ;
1871 break;}
vlm9283dbe2004-08-18 04:59:12 +00001872case 69:
vlm5f0128b2004-08-20 13:25:29 +00001873#line 825 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001874{
vlmfa67ddc2004-06-03 03:38:44 +00001875 yyval.a_expr = asn1p_expr_new(yylineno);
1876 checkmem(yyval.a_expr);
1877 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm6f5eb0b2004-08-13 12:35:09 +00001878 ;
1879 break;}
vlm9283dbe2004-08-18 04:59:12 +00001880case 70:
vlm5f0128b2004-08-20 13:25:29 +00001881#line 830 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001882{
vlmfa67ddc2004-06-03 03:38:44 +00001883 yyval.a_expr = yyvsp[-2].a_expr;
1884 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm6f5eb0b2004-08-13 12:35:09 +00001885 ;
1886 break;}
vlm9283dbe2004-08-18 04:59:12 +00001887case 71:
vlm5f0128b2004-08-20 13:25:29 +00001888#line 837 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001889{
vlmfa67ddc2004-06-03 03:38:44 +00001890 yyval.a_expr = yyvsp[-2].a_expr;
1891 checkmem(yyval.a_expr);
1892 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
1893 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1894 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm6f5eb0b2004-08-13 12:35:09 +00001895 ;
1896 break;}
vlm9283dbe2004-08-18 04:59:12 +00001897case 72:
vlm5f0128b2004-08-20 13:25:29 +00001898#line 847 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001899{ yyval.a_int = 0; ;
1900 break;}
vlm9283dbe2004-08-18 04:59:12 +00001901case 73:
vlm5f0128b2004-08-20 13:25:29 +00001902#line 848 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001903{ yyval.a_int = 1; ;
1904 break;}
vlm9283dbe2004-08-18 04:59:12 +00001905case 74:
vlm5f0128b2004-08-20 13:25:29 +00001906#line 852 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001907{
vlmfa67ddc2004-06-03 03:38:44 +00001908 yyval.a_expr = asn1p_expr_new(yylineno);
1909 checkmem(yyval.a_expr);
1910 yyval.a_expr->expr_type = A1TC_CLASSDEF;
1911 yyval.a_expr->meta_type = AMT_OBJECT;
1912 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm6f5eb0b2004-08-13 12:35:09 +00001913 ;
1914 break;}
vlm9283dbe2004-08-18 04:59:12 +00001915case 75:
vlm5f0128b2004-08-20 13:25:29 +00001916#line 859 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001917{
vlmfa67ddc2004-06-03 03:38:44 +00001918 yyval.a_expr = yyvsp[-2].a_expr;
1919 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm6f5eb0b2004-08-13 12:35:09 +00001920 ;
1921 break;}
vlm9283dbe2004-08-18 04:59:12 +00001922case 76:
vlm5f0128b2004-08-20 13:25:29 +00001923#line 866 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001924{
vlmfa67ddc2004-06-03 03:38:44 +00001925 yyval.a_expr = asn1p_expr_new(yylineno);
1926 checkmem(yyval.a_expr);
1927 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
1928 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
1929 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
1930 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6f5eb0b2004-08-13 12:35:09 +00001931 ;
1932 break;}
vlm9283dbe2004-08-18 04:59:12 +00001933case 77:
vlm5f0128b2004-08-20 13:25:29 +00001934#line 874 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001935{
vlmfa67ddc2004-06-03 03:38:44 +00001936 yyval.a_expr = yyvsp[-1].a_expr;
1937 yyval.a_expr->Identifier = yyvsp[-2].a_refcomp.name;
1938 yyval.a_expr->unique = yyvsp[0].a_int;
vlm6f5eb0b2004-08-13 12:35:09 +00001939 ;
1940 break;}
vlm9283dbe2004-08-18 04:59:12 +00001941case 78:
vlm5f0128b2004-08-20 13:25:29 +00001942#line 879 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001943{
vlmfa67ddc2004-06-03 03:38:44 +00001944 int ret;
1945 yyval.a_expr = asn1p_expr_new(yylineno);
1946 checkmem(yyval.a_expr);
1947 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
1948 yyval.a_expr->reference = asn1p_ref_new(yylineno);
1949 checkmem(yyval.a_expr->reference);
1950 ret = asn1p_ref_add_component(yyval.a_expr->reference,
1951 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
1952 checkmem(ret == 0);
1953 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
1954 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
1955 yyval.a_expr->marker = yyvsp[-1].a_marker;
1956 yyval.a_expr->unique = yyvsp[0].a_int;
vlm6f5eb0b2004-08-13 12:35:09 +00001957 ;
1958 break;}
vlm9283dbe2004-08-18 04:59:12 +00001959case 79:
vlm5f0128b2004-08-20 13:25:29 +00001960#line 897 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001961{ yyval.a_wsynt = 0; ;
1962 break;}
vlm9283dbe2004-08-18 04:59:12 +00001963case 80:
vlm5f0128b2004-08-20 13:25:29 +00001964#line 898 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001965{
vlmfa67ddc2004-06-03 03:38:44 +00001966 yyval.a_wsynt = yyvsp[0].a_wsynt;
vlm6f5eb0b2004-08-13 12:35:09 +00001967 ;
1968 break;}
vlm9283dbe2004-08-18 04:59:12 +00001969case 81:
vlm5f0128b2004-08-20 13:25:29 +00001970#line 905 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001971{ asn1p_lexer_hack_enable_with_syntax(); ;
1972 break;}
vlm9283dbe2004-08-18 04:59:12 +00001973case 82:
vlm5f0128b2004-08-20 13:25:29 +00001974#line 907 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001975{
vlmfa67ddc2004-06-03 03:38:44 +00001976 yyval.a_wsynt = yyvsp[-1].a_wsynt;
vlm6f5eb0b2004-08-13 12:35:09 +00001977 ;
1978 break;}
vlm9283dbe2004-08-18 04:59:12 +00001979case 83:
vlm5f0128b2004-08-20 13:25:29 +00001980#line 913 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001981{
vlmfa67ddc2004-06-03 03:38:44 +00001982 yyval.a_wsynt = asn1p_wsyntx_new();
1983 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6f5eb0b2004-08-13 12:35:09 +00001984 ;
1985 break;}
vlm9283dbe2004-08-18 04:59:12 +00001986case 84:
vlm5f0128b2004-08-20 13:25:29 +00001987#line 917 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001988{
vlmfa67ddc2004-06-03 03:38:44 +00001989 yyval.a_wsynt = yyvsp[-1].a_wsynt;
1990 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6f5eb0b2004-08-13 12:35:09 +00001991 ;
1992 break;}
vlm9283dbe2004-08-18 04:59:12 +00001993case 85:
vlm5f0128b2004-08-20 13:25:29 +00001994#line 924 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00001995{
vlmfa67ddc2004-06-03 03:38:44 +00001996 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
vlm6f5eb0b2004-08-13 12:35:09 +00001997 ;
1998 break;}
vlm9283dbe2004-08-18 04:59:12 +00001999case 86:
vlm5f0128b2004-08-20 13:25:29 +00002000#line 927 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002001{
vlmfa67ddc2004-06-03 03:38:44 +00002002 asn1p_ref_t *ref;
2003 int ret;
2004 ref = asn1p_ref_new(yylineno);
2005 checkmem(ref);
2006 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2007 checkmem(ret == 0);
2008 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
vlm6f5eb0b2004-08-13 12:35:09 +00002009 ;
2010 break;}
vlm9283dbe2004-08-18 04:59:12 +00002011case 87:
vlm5f0128b2004-08-20 13:25:29 +00002012#line 953 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002013{
vlmfa67ddc2004-06-03 03:38:44 +00002014 yyval.a_expr = yyvsp[0].a_expr;
2015 assert(yyval.a_expr->Identifier == 0);
2016 yyval.a_expr->Identifier = yyvsp[-1].tv_nametag.name;
2017 yyval.a_expr->tag = yyvsp[-1].tv_nametag.tag;
vlm6f5eb0b2004-08-13 12:35:09 +00002018 ;
2019 break;}
vlm9283dbe2004-08-18 04:59:12 +00002020case 88:
vlm5f0128b2004-08-20 13:25:29 +00002021#line 959 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002022{
vlmfa67ddc2004-06-03 03:38:44 +00002023 yyval.a_expr = yyvsp[0].a_expr;
vlm6f5eb0b2004-08-13 12:35:09 +00002024 ;
2025 break;}
vlm9283dbe2004-08-18 04:59:12 +00002026case 89:
vlm5f0128b2004-08-20 13:25:29 +00002027#line 965 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002028{
vlmfa67ddc2004-06-03 03:38:44 +00002029 yyval.a_expr = yyvsp[-2].a_expr;
vlm5f0128b2004-08-20 13:25:29 +00002030 if(yyval.a_expr->constraints) {
2031 assert(!yyvsp[-1].a_constr);
2032 } else {
2033 yyval.a_expr->constraints = yyvsp[-1].a_constr;
2034 }
vlmfa67ddc2004-06-03 03:38:44 +00002035 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6f5eb0b2004-08-13 12:35:09 +00002036 ;
2037 break;}
vlm6f5eb0b2004-08-13 12:35:09 +00002038case 90:
vlm5f0128b2004-08-20 13:25:29 +00002039#line 974 "asn1p_y.y"
vlm9283dbe2004-08-18 04:59:12 +00002040{
vlm5f0128b2004-08-20 13:25:29 +00002041 /* This type includes constraints on its own */
2042 yyval.a_expr = yyvsp[0].a_expr;
vlm9283dbe2004-08-18 04:59:12 +00002043 checkmem(yyval.a_expr);
vlm5f0128b2004-08-20 13:25:29 +00002044 assert(yyval.a_expr->meta_type);
vlm9283dbe2004-08-18 04:59:12 +00002045 ;
2046 break;}
2047case 91:
vlm5f0128b2004-08-20 13:25:29 +00002048#line 983 "asn1p_y.y"
vlm9283dbe2004-08-18 04:59:12 +00002049{
2050 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2051 checkmem(yyval.a_expr);
2052 yyval.a_expr->Identifier = strdup("...");
2053 checkmem(yyval.a_expr->Identifier);
vlm9283dbe2004-08-18 04:59:12 +00002054 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2055 yyval.a_expr->meta_type = AMT_TYPE;
2056 ;
2057 break;}
2058case 92:
vlm5f0128b2004-08-20 13:25:29 +00002059#line 991 "asn1p_y.y"
vlm9283dbe2004-08-18 04:59:12 +00002060{
2061 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2062 checkmem(yyval.a_expr);
2063 yyval.a_expr->Identifier = strdup("...");
vlm9283dbe2004-08-18 04:59:12 +00002064 checkmem(yyval.a_expr->Identifier);
vlm5f0128b2004-08-20 13:25:29 +00002065 yyval.a_expr->value = yyvsp[0].a_value;
vlm9283dbe2004-08-18 04:59:12 +00002066 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2067 yyval.a_expr->meta_type = AMT_TYPE;
2068 ;
2069 break;}
2070case 93:
2071#line 1000 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002072{
vlm5f0128b2004-08-20 13:25:29 +00002073 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2074 checkmem(yyval.a_expr);
2075 yyval.a_expr->Identifier = strdup("...");
2076 yyval.a_expr->value = yyvsp[0].a_value;
2077 checkmem(yyval.a_expr->Identifier);
2078 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2079 yyval.a_expr->meta_type = AMT_TYPE;
vlm6f5eb0b2004-08-13 12:35:09 +00002080 ;
2081 break;}
vlm9283dbe2004-08-18 04:59:12 +00002082case 94:
vlm5f0128b2004-08-20 13:25:29 +00002083#line 1012 "asn1p_y.y"
2084{
2085 yyval.a_expr = yyvsp[0].a_expr;
2086 ;
2087 break;}
2088case 95:
2089#line 1015 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002090{
vlmfa67ddc2004-06-03 03:38:44 +00002091 yyval.a_expr = asn1p_expr_new(yylineno);
2092 checkmem(yyval.a_expr);
2093 yyval.a_expr->expr_type = yyvsp[0].a_type;
2094 yyval.a_expr->meta_type = AMT_TYPE;
vlm6f5eb0b2004-08-13 12:35:09 +00002095 ;
2096 break;}
vlm5f0128b2004-08-20 13:25:29 +00002097case 96:
2098#line 1021 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002099{
vlmfa67ddc2004-06-03 03:38:44 +00002100 yyval.a_expr = yyvsp[0].a_expr;
2101 checkmem(yyval.a_expr);
2102 assert(yyval.a_expr->meta_type);
vlm6f5eb0b2004-08-13 12:35:09 +00002103 ;
2104 break;}
vlm5f0128b2004-08-20 13:25:29 +00002105case 97:
2106#line 1029 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002107{
vlmfa67ddc2004-06-03 03:38:44 +00002108 int ret;
2109 yyval.a_expr = yyvsp[-1].a_expr;
2110 assert(yyval.a_expr->expr_type == 0);
2111 assert(yyval.a_expr->meta_type == 0);
2112 assert(yyval.a_expr->reference == 0);
2113 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2114 checkmem(yyval.a_expr->reference);
2115 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2116 checkmem(ret == 0);
2117 free(yyvsp[-3].tv_str);
2118 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2119 yyval.a_expr->meta_type = AMT_TYPE;
vlm6f5eb0b2004-08-13 12:35:09 +00002120 ;
2121 break;}
vlm5f0128b2004-08-20 13:25:29 +00002122case 98:
2123#line 1053 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002124{
vlmfa67ddc2004-06-03 03:38:44 +00002125 yyval.a_expr = asn1p_expr_new(yylineno);
2126 checkmem(yyval.a_expr);
2127 yyval.a_expr->reference = yyvsp[0].a_ref;
2128 yyval.a_expr->expr_type = A1TC_REFERENCE;
2129 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6f5eb0b2004-08-13 12:35:09 +00002130 ;
2131 break;}
vlm5f0128b2004-08-20 13:25:29 +00002132case 99:
2133#line 1060 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002134{
vlmfa67ddc2004-06-03 03:38:44 +00002135 yyval.a_expr = asn1p_expr_new(yylineno);
2136 checkmem(yyval.a_expr);
2137 yyval.a_expr->reference = yyvsp[0].a_ref;
2138 yyval.a_expr->expr_type = A1TC_INSTANCE;
2139 yyval.a_expr->meta_type = AMT_TYPE;
vlm6f5eb0b2004-08-13 12:35:09 +00002140 ;
2141 break;}
vlm5f0128b2004-08-20 13:25:29 +00002142case 100:
2143#line 1075 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002144{
vlmfa67ddc2004-06-03 03:38:44 +00002145 int ret;
2146 yyval.a_ref = asn1p_ref_new(yylineno);
2147 checkmem(yyval.a_ref);
2148 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2149 checkmem(ret == 0);
2150 free(yyvsp[0].tv_str);
vlm6f5eb0b2004-08-13 12:35:09 +00002151 ;
2152 break;}
vlm5f0128b2004-08-20 13:25:29 +00002153case 101:
2154#line 1083 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002155{
vlmfa67ddc2004-06-03 03:38:44 +00002156 int ret;
2157 yyval.a_ref = asn1p_ref_new(yylineno);
2158 checkmem(yyval.a_ref);
2159 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2160 checkmem(ret == 0);
2161 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2162 checkmem(ret == 0);
2163 free(yyvsp[-2].tv_str);
vlm6f5eb0b2004-08-13 12:35:09 +00002164 ;
2165 break;}
vlm5f0128b2004-08-20 13:25:29 +00002166case 102:
2167#line 1093 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002168{
vlmfa67ddc2004-06-03 03:38:44 +00002169 int ret;
2170 yyval.a_ref = asn1p_ref_new(yylineno);
2171 checkmem(yyval.a_ref);
2172 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2173 checkmem(ret == 0);
2174 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2175 checkmem(ret == 0);
2176 free(yyvsp[-2].tv_str);
vlm6f5eb0b2004-08-13 12:35:09 +00002177 ;
2178 break;}
vlm5f0128b2004-08-20 13:25:29 +00002179case 103:
2180#line 1103 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002181{
vlmfa67ddc2004-06-03 03:38:44 +00002182 int ret;
2183 yyval.a_ref = asn1p_ref_new(yylineno);
2184 checkmem(yyval.a_ref);
2185 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2186 free(yyvsp[0].tv_str);
2187 checkmem(ret == 0);
vlm6f5eb0b2004-08-13 12:35:09 +00002188 ;
2189 break;}
vlm5f0128b2004-08-20 13:25:29 +00002190case 104:
2191#line 1111 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002192{
vlmfa67ddc2004-06-03 03:38:44 +00002193 int ret;
2194 yyval.a_ref = yyvsp[0].a_ref;
2195 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2196 free(yyvsp[-2].tv_str);
2197 checkmem(ret == 0);
2198 /*
2199 * Move the last element infront.
2200 */
2201 {
2202 struct asn1p_ref_component_s tmp_comp;
2203 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2204 memmove(&yyval.a_ref->components[1],
2205 &yyval.a_ref->components[0],
2206 sizeof(yyval.a_ref->components[0])
2207 * (yyval.a_ref->comp_count - 1));
2208 yyval.a_ref->components[0] = tmp_comp;
2209 }
vlm6f5eb0b2004-08-13 12:35:09 +00002210 ;
2211 break;}
vlm5f0128b2004-08-20 13:25:29 +00002212case 105:
2213#line 1133 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002214{
vlmfa67ddc2004-06-03 03:38:44 +00002215 int ret;
2216 yyval.a_ref = asn1p_ref_new(yylineno);
2217 checkmem(yyval.a_ref);
2218 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2219 free(yyvsp[0].a_refcomp.name);
2220 checkmem(ret == 0);
vlm6f5eb0b2004-08-13 12:35:09 +00002221 ;
2222 break;}
vlm5f0128b2004-08-20 13:25:29 +00002223case 106:
2224#line 1141 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002225{
vlmfa67ddc2004-06-03 03:38:44 +00002226 int ret;
2227 yyval.a_ref = yyvsp[-2].a_ref;
2228 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2229 free(yyvsp[0].a_refcomp.name);
2230 checkmem(ret == 0);
vlm6f5eb0b2004-08-13 12:35:09 +00002231 ;
2232 break;}
vlm5f0128b2004-08-20 13:25:29 +00002233case 109:
2234#line 1155 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002235{
vlmfa67ddc2004-06-03 03:38:44 +00002236 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2237 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6f5eb0b2004-08-13 12:35:09 +00002238 ;
2239 break;}
vlm5f0128b2004-08-20 13:25:29 +00002240case 110:
2241#line 1160 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002242{
vlmfa67ddc2004-06-03 03:38:44 +00002243 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2244 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6f5eb0b2004-08-13 12:35:09 +00002245 ;
2246 break;}
vlm5f0128b2004-08-20 13:25:29 +00002247case 111:
2248#line 1173 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002249{
vlmfa67ddc2004-06-03 03:38:44 +00002250 yyval.a_expr = yyvsp[-2].a_expr;
2251 assert(yyval.a_expr->Identifier == NULL);
2252 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2253 yyval.a_expr->meta_type = AMT_VALUE;
2254 yyval.a_expr->value = yyvsp[0].a_value;
vlm6f5eb0b2004-08-13 12:35:09 +00002255 ;
2256 break;}
vlm5f0128b2004-08-20 13:25:29 +00002257case 112:
2258#line 1183 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002259{ asn1p_lexer_hack_push_opaque_state(); ;
2260 break;}
vlm5f0128b2004-08-20 13:25:29 +00002261case 113:
2262#line 1184 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002263{
vlmfa67ddc2004-06-03 03:38:44 +00002264 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2265 checkmem(yyval.a_value);
2266 yyval.a_value->type = ATV_UNPARSED;
vlm6f5eb0b2004-08-13 12:35:09 +00002267 ;
2268 break;}
vlm5f0128b2004-08-20 13:25:29 +00002269case 114:
2270#line 1189 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002271{
vlmfa67ddc2004-06-03 03:38:44 +00002272 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2273 checkmem(yyval.a_value);
vlm6f5eb0b2004-08-13 12:35:09 +00002274 ;
2275 break;}
vlm5f0128b2004-08-20 13:25:29 +00002276case 115:
2277#line 1193 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002278{
vlmfa67ddc2004-06-03 03:38:44 +00002279 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2280 checkmem(yyval.a_value);
vlm6f5eb0b2004-08-13 12:35:09 +00002281 ;
2282 break;}
vlm5f0128b2004-08-20 13:25:29 +00002283case 116:
2284#line 1197 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002285{
vlmfa67ddc2004-06-03 03:38:44 +00002286 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2287 checkmem(yyval.a_value);
vlm6f5eb0b2004-08-13 12:35:09 +00002288 ;
2289 break;}
vlm9283dbe2004-08-18 04:59:12 +00002290case 117:
vlm5f0128b2004-08-20 13:25:29 +00002291#line 1201 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002292{
vlmfa67ddc2004-06-03 03:38:44 +00002293 yyval.a_value = yyvsp[0].a_value;
vlm6f5eb0b2004-08-13 12:35:09 +00002294 ;
2295 break;}
vlm9283dbe2004-08-18 04:59:12 +00002296case 118:
vlm5f0128b2004-08-20 13:25:29 +00002297#line 1204 "asn1p_y.y"
2298{
2299 yyval.a_value = yyvsp[0].a_value;
2300 ;
2301 break;}
2302case 119:
2303#line 1210 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002304{
vlmfa67ddc2004-06-03 03:38:44 +00002305 asn1p_ref_t *ref;
2306 int ret;
2307 ref = asn1p_ref_new(yylineno);
2308 checkmem(ref);
2309 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2310 checkmem(ret == 0);
2311 yyval.a_value = asn1p_value_fromref(ref, 0);
2312 checkmem(yyval.a_value);
2313 free(yyvsp[0].tv_str);
vlm6f5eb0b2004-08-13 12:35:09 +00002314 ;
2315 break;}
vlm5f0128b2004-08-20 13:25:29 +00002316case 120:
2317#line 1221 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002318{
vlmfa67ddc2004-06-03 03:38:44 +00002319 asn1p_ref_t *ref;
2320 int ret;
2321 ref = asn1p_ref_new(yylineno);
2322 checkmem(ref);
2323 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2324 checkmem(ret == 0);
2325 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2326 checkmem(ret == 0);
2327 yyval.a_value = asn1p_value_fromref(ref, 0);
2328 checkmem(yyval.a_value);
2329 free(yyvsp[-2].tv_str);
2330 free(yyvsp[0].tv_str);
vlm6f5eb0b2004-08-13 12:35:09 +00002331 ;
2332 break;}
vlm5f0128b2004-08-20 13:25:29 +00002333case 121:
2334#line 1238 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002335{
vlmfa67ddc2004-06-03 03:38:44 +00002336 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
2337 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2338 checkmem(yyval.tv_opaque.buf);
2339 yyval.tv_opaque.buf[0] = '{';
2340 yyval.tv_opaque.buf[1] = ' ';
2341 memcpy(yyval.tv_opaque.buf + 2, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2342 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2343 free(yyvsp[0].tv_opaque.buf);
vlm6f5eb0b2004-08-13 12:35:09 +00002344 ;
2345 break;}
vlm5f0128b2004-08-20 13:25:29 +00002346case 122:
2347#line 1248 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002348{
vlmfa67ddc2004-06-03 03:38:44 +00002349 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2350 char *p = malloc(newsize + 1);
2351 checkmem(p);
2352 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2353 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2354 p[newsize] = '\0';
2355 free(yyvsp[-1].tv_opaque.buf);
2356 free(yyvsp[0].tv_opaque.buf);
2357 yyval.tv_opaque.buf = p;
2358 yyval.tv_opaque.len = newsize;
vlm6f5eb0b2004-08-13 12:35:09 +00002359 ;
2360 break;}
vlm5f0128b2004-08-20 13:25:29 +00002361case 123:
2362#line 1263 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002363{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2364 break;}
vlm5f0128b2004-08-20 13:25:29 +00002365case 124:
2366#line 1264 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002367{ yyval.a_type = ASN_BASIC_NULL; ;
2368 break;}
vlm5f0128b2004-08-20 13:25:29 +00002369case 125:
2370#line 1265 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002371{ yyval.a_type = ASN_BASIC_REAL; ;
2372 break;}
vlm5f0128b2004-08-20 13:25:29 +00002373case 126:
2374#line 1266 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002375{ yyval.a_type = yyvsp[0].a_type; ;
2376 break;}
vlm5f0128b2004-08-20 13:25:29 +00002377case 127:
2378#line 1267 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002379{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
2380 break;}
vlm5f0128b2004-08-20 13:25:29 +00002381case 128:
2382#line 1268 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002383{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
2384 break;}
vlm5f0128b2004-08-20 13:25:29 +00002385case 129:
2386#line 1269 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002387{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
2388 break;}
vlm5f0128b2004-08-20 13:25:29 +00002389case 130:
2390#line 1270 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002391{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
2392 break;}
vlm5f0128b2004-08-20 13:25:29 +00002393case 131:
2394#line 1271 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002395{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
2396 break;}
vlm5f0128b2004-08-20 13:25:29 +00002397case 132:
2398#line 1272 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002399{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
2400 break;}
vlm5f0128b2004-08-20 13:25:29 +00002401case 133:
2402#line 1273 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002403{ yyval.a_type = ASN_BASIC_UTCTime; ;
2404 break;}
vlm5f0128b2004-08-20 13:25:29 +00002405case 134:
2406#line 1274 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002407{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2408 break;}
vlm5f0128b2004-08-20 13:25:29 +00002409case 135:
2410#line 1281 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002411{ yyval.a_type = ASN_BASIC_INTEGER; ;
2412 break;}
vlm5f0128b2004-08-20 13:25:29 +00002413case 136:
2414#line 1282 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002415{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2416 break;}
vlm5f0128b2004-08-20 13:25:29 +00002417case 137:
2418#line 1283 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002419{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2420 break;}
vlm5f0128b2004-08-20 13:25:29 +00002421case 138:
2422#line 1287 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002423{
vlmfa67ddc2004-06-03 03:38:44 +00002424 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2425 checkmem(yyval.a_expr);
2426 yyval.a_expr->expr_type = yyvsp[0].a_type;
2427 yyval.a_expr->meta_type = AMT_TYPE;
vlm6f5eb0b2004-08-13 12:35:09 +00002428 ;
2429 break;}
vlm5f0128b2004-08-20 13:25:29 +00002430case 139:
2431#line 1293 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002432{
vlmfa67ddc2004-06-03 03:38:44 +00002433 if(yyvsp[0].a_expr) {
2434 yyval.a_expr = yyvsp[0].a_expr;
2435 } else {
2436 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2437 checkmem(yyval.a_expr);
2438 }
2439 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2440 yyval.a_expr->meta_type = AMT_TYPE;
vlm6f5eb0b2004-08-13 12:35:09 +00002441 ;
2442 break;}
vlm5f0128b2004-08-20 13:25:29 +00002443case 140:
2444#line 1306 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002445{ yyval.a_type = ASN_STRING_BMPString; ;
2446 break;}
vlm5f0128b2004-08-20 13:25:29 +00002447case 141:
2448#line 1307 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002449{
vlmfa67ddc2004-06-03 03:38:44 +00002450 yyval.a_type = ASN_STRING_GeneralString;
2451 return yyerror("GeneralString is not supported");
vlm6f5eb0b2004-08-13 12:35:09 +00002452 ;
2453 break;}
vlm5f0128b2004-08-20 13:25:29 +00002454case 142:
2455#line 1311 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002456{
vlmfa67ddc2004-06-03 03:38:44 +00002457 yyval.a_type = ASN_STRING_GraphicString;
2458 return yyerror("GraphicString is not supported");
vlm6f5eb0b2004-08-13 12:35:09 +00002459 ;
2460 break;}
vlm5f0128b2004-08-20 13:25:29 +00002461case 143:
2462#line 1315 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002463{ yyval.a_type = ASN_STRING_IA5String; ;
2464 break;}
vlm5f0128b2004-08-20 13:25:29 +00002465case 144:
2466#line 1316 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002467{ yyval.a_type = ASN_STRING_ISO646String; ;
2468 break;}
vlm5f0128b2004-08-20 13:25:29 +00002469case 145:
2470#line 1317 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002471{ yyval.a_type = ASN_STRING_NumericString; ;
2472 break;}
vlm5f0128b2004-08-20 13:25:29 +00002473case 146:
2474#line 1318 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002475{ yyval.a_type = ASN_STRING_PrintableString; ;
2476 break;}
vlm5f0128b2004-08-20 13:25:29 +00002477case 147:
2478#line 1319 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002479{
vlmfa67ddc2004-06-03 03:38:44 +00002480 yyval.a_type = ASN_STRING_T61String;
2481 return yyerror("T61String not implemented yet");
vlm6f5eb0b2004-08-13 12:35:09 +00002482 ;
2483 break;}
vlm5f0128b2004-08-20 13:25:29 +00002484case 148:
2485#line 1323 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002486{ yyval.a_type = ASN_STRING_TeletexString; ;
2487 break;}
vlm5f0128b2004-08-20 13:25:29 +00002488case 149:
2489#line 1324 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002490{ yyval.a_type = ASN_STRING_UniversalString; ;
2491 break;}
vlm5f0128b2004-08-20 13:25:29 +00002492case 150:
2493#line 1325 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002494{ yyval.a_type = ASN_STRING_UTF8String; ;
2495 break;}
vlm5f0128b2004-08-20 13:25:29 +00002496case 151:
2497#line 1326 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002498{
vlmfa67ddc2004-06-03 03:38:44 +00002499 yyval.a_type = ASN_STRING_VideotexString;
2500 return yyerror("VideotexString is no longer supported");
vlm6f5eb0b2004-08-13 12:35:09 +00002501 ;
2502 break;}
vlm5f0128b2004-08-20 13:25:29 +00002503case 152:
2504#line 1330 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002505{ yyval.a_type = ASN_STRING_VisibleString; ;
2506 break;}
vlm5f0128b2004-08-20 13:25:29 +00002507case 153:
2508#line 1331 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002509{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2510 break;}
vlm9283dbe2004-08-18 04:59:12 +00002511case 154:
vlm5f0128b2004-08-20 13:25:29 +00002512#line 1336 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002513{
vlmfa67ddc2004-06-03 03:38:44 +00002514 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2515 checkmem(yyval.a_expr);
2516 yyval.a_expr->constraints = yyvsp[-2].a_constr;
2517 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2518 yyval.a_expr->meta_type = AMT_TYPE;
2519 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm6f5eb0b2004-08-13 12:35:09 +00002520 ;
2521 break;}
vlm5f0128b2004-08-20 13:25:29 +00002522case 155:
2523#line 1344 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002524{
vlmfa67ddc2004-06-03 03:38:44 +00002525 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2526 checkmem(yyval.a_expr);
2527 yyval.a_expr->constraints = yyvsp[-2].a_constr;
2528 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2529 yyval.a_expr->meta_type = AMT_TYPE;
2530 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm6f5eb0b2004-08-13 12:35:09 +00002531 ;
2532 break;}
vlm5f0128b2004-08-20 13:25:29 +00002533case 156:
2534#line 1355 "asn1p_y.y"
2535{
2536 yyval.a_expr = yyvsp[-1].a_expr;
2537 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2538 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2539 yyval.a_expr->meta_type = AMT_TYPE;
2540 ;
2541 break;}
2542case 157:
2543#line 1361 "asn1p_y.y"
2544{
2545 yyval.a_expr = yyvsp[-1].a_expr;
2546 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2547 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2548 yyval.a_expr->meta_type = AMT_TYPE;
2549 ;
2550 break;}
vlm9283dbe2004-08-18 04:59:12 +00002551case 158:
vlm5f0128b2004-08-20 13:25:29 +00002552#line 1367 "asn1p_y.y"
2553{
2554 yyval.a_expr = yyvsp[-1].a_expr;
2555 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2556 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2557 yyval.a_expr->meta_type = AMT_TYPE;
2558 ;
2559 break;}
2560case 159:
2561#line 1373 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002562{
vlmfa67ddc2004-06-03 03:38:44 +00002563 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2564 checkmem(yyval.a_expr);
2565 yyval.a_expr->expr_type = ASN_CONSTR_ANY;
2566 yyval.a_expr->meta_type = AMT_TYPE;
vlm6f5eb0b2004-08-13 12:35:09 +00002567 ;
2568 break;}
vlm5f0128b2004-08-20 13:25:29 +00002569case 160:
2570#line 1379 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002571{
vlmfa67ddc2004-06-03 03:38:44 +00002572 int ret;
2573 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
2574 checkmem(yyval.a_expr);
2575 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2576 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2577 yyvsp[0].tv_str, RLT_lowercase);
2578 checkmem(ret == 0);
2579 yyval.a_expr->expr_type = ASN_CONSTR_ANY;
2580 yyval.a_expr->meta_type = AMT_TYPE;
vlm6f5eb0b2004-08-13 12:35:09 +00002581 ;
2582 break;}
vlm5f0128b2004-08-20 13:25:29 +00002583case 166:
2584#line 1400 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002585{ yyval.a_constr = 0; ;
2586 break;}
vlm5f0128b2004-08-20 13:25:29 +00002587case 167:
2588#line 1401 "asn1p_y.y"
2589{
2590 yyval.a_constr = yyvsp[0].a_constr;
2591 ;
2592 break;}
2593case 168:
2594#line 1407 "asn1p_y.y"
vlm9283dbe2004-08-18 04:59:12 +00002595{
2596 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
2597 ;
vlm6f5eb0b2004-08-13 12:35:09 +00002598 break;}
vlm5f0128b2004-08-20 13:25:29 +00002599case 169:
2600#line 1410 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002601{
vlmfa67ddc2004-06-03 03:38:44 +00002602 /*
2603 * This is a special case, for compatibility purposes.
vlm9283dbe2004-08-18 04:59:12 +00002604 * It goes without parentheses.
vlmfa67ddc2004-06-03 03:38:44 +00002605 */
vlm5f0128b2004-08-20 13:25:29 +00002606 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
vlm6f5eb0b2004-08-13 12:35:09 +00002607 ;
2608 break;}
vlm5f0128b2004-08-20 13:25:29 +00002609case 170:
2610#line 1420 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002611{
vlmfa67ddc2004-06-03 03:38:44 +00002612 yyval.a_constr = yyvsp[-1].a_constr;
vlm6f5eb0b2004-08-13 12:35:09 +00002613 ;
2614 break;}
vlm5f0128b2004-08-20 13:25:29 +00002615case 171:
2616#line 1423 "asn1p_y.y"
vlm9283dbe2004-08-18 04:59:12 +00002617{
2618 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
2619 ;
2620 break;}
vlm5f0128b2004-08-20 13:25:29 +00002621case 172:
2622#line 1429 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002623{
vlmfa67ddc2004-06-03 03:38:44 +00002624 yyval.a_constr = yyvsp[0].a_constr;
vlm6f5eb0b2004-08-13 12:35:09 +00002625 ;
2626 break;}
vlm5f0128b2004-08-20 13:25:29 +00002627case 173:
2628#line 1432 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002629{
vlmfa67ddc2004-06-03 03:38:44 +00002630 asn1p_constraint_t *ct;
2631 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002632 ct->type = ACT_EL_EXT;
2633 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6f5eb0b2004-08-13 12:35:09 +00002634 ;
2635 break;}
vlm5f0128b2004-08-20 13:25:29 +00002636case 174:
2637#line 1438 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002638{
vlmfa67ddc2004-06-03 03:38:44 +00002639 asn1p_constraint_t *ct;
2640 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002641 ct->type = ACT_EL_EXT;
2642 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
vlm6f5eb0b2004-08-13 12:35:09 +00002643 ct = yyval.a_constr;
2644 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
2645 ;
2646 break;}
vlm5f0128b2004-08-20 13:25:29 +00002647case 175:
2648#line 1449 "asn1p_y.y"
vlm9283dbe2004-08-18 04:59:12 +00002649{
2650 yyval.a_constr = yyvsp[0].a_constr;
2651 ;
vlm6f5eb0b2004-08-13 12:35:09 +00002652 break;}
vlm5f0128b2004-08-20 13:25:29 +00002653case 176:
2654#line 1452 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002655{
vlmfa67ddc2004-06-03 03:38:44 +00002656 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6f5eb0b2004-08-13 12:35:09 +00002657 ;
2658 break;}
vlm5f0128b2004-08-20 13:25:29 +00002659case 177:
2660#line 1455 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002661{
vlmfa67ddc2004-06-03 03:38:44 +00002662 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6f5eb0b2004-08-13 12:35:09 +00002663 ;
2664 break;}
vlm5f0128b2004-08-20 13:25:29 +00002665case 178:
2666#line 1458 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002667{
vlmfa67ddc2004-06-03 03:38:44 +00002668 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6f5eb0b2004-08-13 12:35:09 +00002669 ;
2670 break;}
vlm5f0128b2004-08-20 13:25:29 +00002671case 179:
2672#line 1464 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002673{
vlmfa67ddc2004-06-03 03:38:44 +00002674 int ret;
2675 yyval.a_constr = asn1p_constraint_new(yylineno);
2676 checkmem(yyval.a_constr);
2677 yyval.a_constr->type = yyvsp[-3].a_ctype;
2678 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2679 checkmem(ret == 0);
vlm6f5eb0b2004-08-13 12:35:09 +00002680 ;
2681 break;}
vlm5f0128b2004-08-20 13:25:29 +00002682case 180:
2683#line 1472 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002684{
vlm9283dbe2004-08-18 04:59:12 +00002685 int ret;
2686 yyval.a_constr = asn1p_constraint_new(yylineno);
2687 checkmem(yyval.a_constr);
2688 yyval.a_constr->type = ACT_CA_SET;
2689 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2690 checkmem(ret == 0);
2691 ;
2692 break;}
vlm5f0128b2004-08-20 13:25:29 +00002693case 181:
2694#line 1480 "asn1p_y.y"
vlm9283dbe2004-08-18 04:59:12 +00002695{
2696 yyval.a_constr = asn1p_constraint_new(yylineno);
2697 checkmem(yyval.a_constr);
2698 yyval.a_constr->type = ACT_EL_VALUE;
2699 yyval.a_constr->value = yyvsp[0].a_value;
2700 ;
2701 break;}
vlm9283dbe2004-08-18 04:59:12 +00002702case 182:
vlm5f0128b2004-08-20 13:25:29 +00002703#line 1486 "asn1p_y.y"
vlm9283dbe2004-08-18 04:59:12 +00002704{
2705 yyval.a_constr = asn1p_constraint_new(yylineno);
2706 checkmem(yyval.a_constr);
2707 yyval.a_constr->type = yyvsp[-1].a_ctype;
2708 yyval.a_constr->range_start = yyvsp[-2].a_value;
vlm5f0128b2004-08-20 13:25:29 +00002709 yyval.a_constr->range_stop = yyvsp[0].a_value;
vlm9283dbe2004-08-18 04:59:12 +00002710 ;
2711 break;}
2712case 183:
vlm5f0128b2004-08-20 13:25:29 +00002713#line 1493 "asn1p_y.y"
vlm9283dbe2004-08-18 04:59:12 +00002714{
2715 yyval.a_constr = asn1p_constraint_new(yylineno);
2716 checkmem(yyval.a_constr);
2717 yyval.a_constr->type = yyvsp[-1].a_ctype;
2718 yyval.a_constr->range_start = asn1p_value_fromint(-123);
vlm5f0128b2004-08-20 13:25:29 +00002719 yyval.a_constr->range_stop = yyvsp[0].a_value;
vlm9283dbe2004-08-18 04:59:12 +00002720 yyval.a_constr->range_start->type = ATV_MIN;
vlm6f5eb0b2004-08-13 12:35:09 +00002721 ;
2722 break;}
2723case 184:
vlm9283dbe2004-08-18 04:59:12 +00002724#line 1501 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002725{
vlm5f0128b2004-08-20 13:25:29 +00002726 yyval.a_constr = asn1p_constraint_new(yylineno);
2727 checkmem(yyval.a_constr);
2728 yyval.a_constr->type = yyvsp[-1].a_ctype;
2729 yyval.a_constr->range_start = yyvsp[-2].a_value;
2730 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2731 yyval.a_constr->range_stop->type = ATV_MAX;
vlm6f5eb0b2004-08-13 12:35:09 +00002732 ;
2733 break;}
2734case 185:
vlm5f0128b2004-08-20 13:25:29 +00002735#line 1509 "asn1p_y.y"
2736{
2737 yyval.a_constr = asn1p_constraint_new(yylineno);
2738 checkmem(yyval.a_constr);
2739 yyval.a_constr->type = yyvsp[-1].a_ctype;
2740 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2741 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2742 yyval.a_constr->range_start->type = ATV_MIN;
2743 yyval.a_constr->range_stop->type = ATV_MAX;
2744 ;
2745 break;}
2746case 186:
2747#line 1518 "asn1p_y.y"
vlm9283dbe2004-08-18 04:59:12 +00002748{
2749 yyval.a_constr = yyvsp[0].a_constr;
2750 ;
vlm6f5eb0b2004-08-13 12:35:09 +00002751 break;}
vlm6f5eb0b2004-08-13 12:35:09 +00002752case 187:
vlm5f0128b2004-08-20 13:25:29 +00002753#line 1521 "asn1p_y.y"
2754{
2755 yyval.a_constr = yyvsp[0].a_constr;
2756 ;
vlm6f5eb0b2004-08-13 12:35:09 +00002757 break;}
2758case 188:
vlm5f0128b2004-08-20 13:25:29 +00002759#line 1527 "asn1p_y.y"
2760{ yyval.a_ctype = ACT_EL_RANGE; ;
vlm6f5eb0b2004-08-13 12:35:09 +00002761 break;}
2762case 189:
vlm5f0128b2004-08-20 13:25:29 +00002763#line 1528 "asn1p_y.y"
2764{ yyval.a_ctype = ACT_EL_RLRANGE; ;
vlm9283dbe2004-08-18 04:59:12 +00002765 break;}
2766case 190:
vlm5f0128b2004-08-20 13:25:29 +00002767#line 1529 "asn1p_y.y"
2768{ yyval.a_ctype = ACT_EL_LLRANGE; ;
2769 break;}
2770case 191:
2771#line 1530 "asn1p_y.y"
2772{ yyval.a_ctype = ACT_EL_ULRANGE; ;
2773 break;}
2774case 192:
2775#line 1534 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002776{
vlmfa67ddc2004-06-03 03:38:44 +00002777 yyval.a_ctype = ACT_CT_SIZE;
vlm6f5eb0b2004-08-13 12:35:09 +00002778 ;
2779 break;}
vlm5f0128b2004-08-20 13:25:29 +00002780case 193:
2781#line 1537 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002782{
vlmfa67ddc2004-06-03 03:38:44 +00002783 yyval.a_ctype = ACT_CT_FROM;
vlm6f5eb0b2004-08-13 12:35:09 +00002784 ;
2785 break;}
vlm5f0128b2004-08-20 13:25:29 +00002786case 194:
2787#line 1543 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002788{
vlmfa67ddc2004-06-03 03:38:44 +00002789 yyval.a_value = yyvsp[0].a_value;
vlm6f5eb0b2004-08-13 12:35:09 +00002790 ;
2791 break;}
vlm5f0128b2004-08-20 13:25:29 +00002792case 195:
2793#line 1546 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002794{
vlmfa67ddc2004-06-03 03:38:44 +00002795 asn1p_ref_t *ref;
2796 int ret;
2797 ref = asn1p_ref_new(yylineno);
2798 checkmem(ref);
2799 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2800 checkmem(ret == 0);
2801 yyval.a_value = asn1p_value_fromref(ref, 0);
2802 checkmem(yyval.a_value);
2803 free(yyvsp[0].tv_str);
vlm6f5eb0b2004-08-13 12:35:09 +00002804 ;
2805 break;}
vlm5f0128b2004-08-20 13:25:29 +00002806case 196:
2807#line 1557 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002808{
vlmfa67ddc2004-06-03 03:38:44 +00002809 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2810 checkmem(yyval.a_value);
vlm6f5eb0b2004-08-13 12:35:09 +00002811 ;
2812 break;}
vlm5f0128b2004-08-20 13:25:29 +00002813case 197:
2814#line 1562 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002815{
vlmfa67ddc2004-06-03 03:38:44 +00002816 yyval.a_value = asn1p_value_fromint(0);
2817 checkmem(yyval.a_value);
2818 yyval.a_value->type = ATV_FALSE;
vlm6f5eb0b2004-08-13 12:35:09 +00002819 ;
2820 break;}
vlm5f0128b2004-08-20 13:25:29 +00002821case 198:
2822#line 1567 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002823{
vlmfa67ddc2004-06-03 03:38:44 +00002824 yyval.a_value = asn1p_value_fromint(1);
2825 checkmem(yyval.a_value);
2826 yyval.a_value->type = ATV_TRUE;
vlm6f5eb0b2004-08-13 12:35:09 +00002827 ;
2828 break;}
vlm5f0128b2004-08-20 13:25:29 +00002829case 199:
2830#line 1575 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002831{
vlmfa67ddc2004-06-03 03:38:44 +00002832 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
vlm6f5eb0b2004-08-13 12:35:09 +00002833 ;
2834 break;}
vlm5f0128b2004-08-20 13:25:29 +00002835case 200:
2836#line 1581 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002837{
vlmfa67ddc2004-06-03 03:38:44 +00002838 yyval.a_constr = yyvsp[0].a_constr;
vlm6f5eb0b2004-08-13 12:35:09 +00002839 ;
2840 break;}
vlm5f0128b2004-08-20 13:25:29 +00002841case 201:
2842#line 1584 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002843{
vlmfa67ddc2004-06-03 03:38:44 +00002844 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6f5eb0b2004-08-13 12:35:09 +00002845 ;
2846 break;}
vlm5f0128b2004-08-20 13:25:29 +00002847case 202:
2848#line 1590 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002849{
vlmfa67ddc2004-06-03 03:38:44 +00002850 yyval.a_constr = asn1p_constraint_new(yylineno);
2851 checkmem(yyval.a_constr);
2852 yyval.a_constr->type = ACT_EL_EXT;
vlm6f5eb0b2004-08-13 12:35:09 +00002853 ;
2854 break;}
vlm5f0128b2004-08-20 13:25:29 +00002855case 203:
2856#line 1595 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002857{
vlmfa67ddc2004-06-03 03:38:44 +00002858 yyval.a_constr = asn1p_constraint_new(yylineno);
2859 checkmem(yyval.a_constr);
2860 yyval.a_constr->type = ACT_EL_VALUE;
2861 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
2862 yyval.a_constr->presence = yyvsp[0].a_pres;
vlm6f5eb0b2004-08-13 12:35:09 +00002863 ;
2864 break;}
vlm5f0128b2004-08-20 13:25:29 +00002865case 204:
2866#line 1608 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002867{ yyval.a_pres = ACPRES_DEFAULT; ;
2868 break;}
vlm5f0128b2004-08-20 13:25:29 +00002869case 205:
2870#line 1609 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002871{ yyval.a_pres = yyvsp[0].a_pres; ;
2872 break;}
vlm5f0128b2004-08-20 13:25:29 +00002873case 206:
2874#line 1613 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002875{
vlmfa67ddc2004-06-03 03:38:44 +00002876 yyval.a_pres = ACPRES_PRESENT;
vlm6f5eb0b2004-08-13 12:35:09 +00002877 ;
2878 break;}
vlm5f0128b2004-08-20 13:25:29 +00002879case 207:
2880#line 1616 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002881{
vlmfa67ddc2004-06-03 03:38:44 +00002882 yyval.a_pres = ACPRES_ABSENT;
vlm6f5eb0b2004-08-13 12:35:09 +00002883 ;
2884 break;}
vlm5f0128b2004-08-20 13:25:29 +00002885case 208:
2886#line 1619 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002887{
vlmfa67ddc2004-06-03 03:38:44 +00002888 yyval.a_pres = ACPRES_OPTIONAL;
vlm6f5eb0b2004-08-13 12:35:09 +00002889 ;
2890 break;}
vlm6f5eb0b2004-08-13 12:35:09 +00002891case 209:
vlm5f0128b2004-08-20 13:25:29 +00002892#line 1625 "asn1p_y.y"
2893{
2894 yyval.a_constr = yyvsp[0].a_constr;
2895 ;
2896 break;}
2897case 210:
2898#line 1628 "asn1p_y.y"
2899{
2900 yyval.a_constr = yyvsp[0].a_constr;
2901 ;
2902 break;}
2903case 211:
2904#line 1637 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002905{
vlmfa67ddc2004-06-03 03:38:44 +00002906 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
2907 asn1p_constraint_t *ct;
2908 int ret;
2909 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
2910 checkmem(ret == 0);
2911 ct = asn1p_constraint_new(yylineno);
2912 checkmem(yyval.a_constr);
2913 ct->type = ACT_EL_VALUE;
2914 ct->value = asn1p_value_fromref(ref, 0);
2915 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
vlm6f5eb0b2004-08-13 12:35:09 +00002916 ;
2917 break;}
vlm5f0128b2004-08-20 13:25:29 +00002918case 212:
2919#line 1652 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002920{
vlmfa67ddc2004-06-03 03:38:44 +00002921 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6f5eb0b2004-08-13 12:35:09 +00002922 ;
2923 break;}
vlm5f0128b2004-08-20 13:25:29 +00002924case 213:
2925#line 1658 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002926{
vlmfa67ddc2004-06-03 03:38:44 +00002927 yyval.a_constr = asn1p_constraint_new(yylineno);
2928 checkmem(yyval.a_constr);
2929 yyval.a_constr->type = ACT_EL_VALUE;
2930 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
vlm6f5eb0b2004-08-13 12:35:09 +00002931 ;
2932 break;}
vlm5f0128b2004-08-20 13:25:29 +00002933case 214:
2934#line 1664 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002935{
vlmfa67ddc2004-06-03 03:38:44 +00002936 asn1p_constraint_t *ct;
2937 ct = asn1p_constraint_new(yylineno);
2938 checkmem(ct);
2939 ct->type = ACT_EL_VALUE;
2940 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
2941 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6f5eb0b2004-08-13 12:35:09 +00002942 ;
2943 break;}
vlm5f0128b2004-08-20 13:25:29 +00002944case 215:
2945#line 1678 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002946{
vlmfa67ddc2004-06-03 03:38:44 +00002947 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
2948 int ret;
2949 *p = '@';
2950 strcpy(p + 1, yyvsp[0].tv_str);
2951 yyval.a_ref = asn1p_ref_new(yylineno);
2952 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
2953 checkmem(ret == 0);
2954 free(p);
2955 free(yyvsp[0].tv_str);
vlm6f5eb0b2004-08-13 12:35:09 +00002956 ;
2957 break;}
vlm5f0128b2004-08-20 13:25:29 +00002958case 216:
2959#line 1689 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002960{
vlmfa67ddc2004-06-03 03:38:44 +00002961 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
2962 int ret;
2963 p[0] = '@';
2964 p[1] = '.';
2965 strcpy(p + 2, yyvsp[0].tv_str);
2966 yyval.a_ref = asn1p_ref_new(yylineno);
2967 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
2968 checkmem(ret == 0);
2969 free(p);
2970 free(yyvsp[0].tv_str);
vlm6f5eb0b2004-08-13 12:35:09 +00002971 ;
2972 break;}
vlm5f0128b2004-08-20 13:25:29 +00002973case 217:
2974#line 1705 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002975{
vlmfa67ddc2004-06-03 03:38:44 +00002976 yyval.tv_str = yyvsp[0].tv_str;
vlm6f5eb0b2004-08-13 12:35:09 +00002977 ;
2978 break;}
vlm5f0128b2004-08-20 13:25:29 +00002979case 218:
2980#line 1708 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002981{
vlmfa67ddc2004-06-03 03:38:44 +00002982 int l1 = strlen(yyvsp[-2].tv_str);
2983 int l3 = strlen(yyvsp[0].tv_str);
2984 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
2985 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
2986 yyval.tv_str[l1] = '.';
2987 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
2988 yyval.tv_str[l1 + 1 + l3] = '\0';
vlm6f5eb0b2004-08-13 12:35:09 +00002989 ;
2990 break;}
vlm5f0128b2004-08-20 13:25:29 +00002991case 219:
2992#line 1726 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002993{ yyval.a_marker = EM_NOMARK; ;
2994 break;}
vlm5f0128b2004-08-20 13:25:29 +00002995case 220:
2996#line 1727 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00002997{ yyval.a_marker = yyvsp[0].a_marker; ;
2998 break;}
vlm5f0128b2004-08-20 13:25:29 +00002999case 221:
3000#line 1731 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003001{
vlmfa67ddc2004-06-03 03:38:44 +00003002 yyval.a_marker = EM_OPTIONAL;
vlm6f5eb0b2004-08-13 12:35:09 +00003003 ;
3004 break;}
vlm5f0128b2004-08-20 13:25:29 +00003005case 222:
3006#line 1734 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003007{
vlmfa67ddc2004-06-03 03:38:44 +00003008 yyval.a_marker = EM_DEFAULT;
3009 /* FIXME: store DefaultValue somewhere */
vlm6f5eb0b2004-08-13 12:35:09 +00003010 ;
3011 break;}
vlm6f5eb0b2004-08-13 12:35:09 +00003012case 223:
vlm5f0128b2004-08-20 13:25:29 +00003013#line 1741 "asn1p_y.y"
3014{
3015 ;
vlm6f5eb0b2004-08-13 12:35:09 +00003016 break;}
vlm9283dbe2004-08-18 04:59:12 +00003017case 224:
vlm5f0128b2004-08-20 13:25:29 +00003018#line 1743 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003019{
3020 ;
3021 break;}
vlm9283dbe2004-08-18 04:59:12 +00003022case 225:
vlm5f0128b2004-08-20 13:25:29 +00003023#line 1745 "asn1p_y.y"
3024{ asn1p_lexer_hack_push_opaque_state(); ;
3025 break;}
3026case 226:
3027#line 1745 "asn1p_y.y"
3028{
3029 ;
3030 break;}
3031case 227:
3032#line 1766 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003033{
vlmfa67ddc2004-06-03 03:38:44 +00003034 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3035 checkmem(yyval.a_expr);
vlm6f5eb0b2004-08-13 12:35:09 +00003036 ;
3037 break;}
vlm5f0128b2004-08-20 13:25:29 +00003038case 228:
3039#line 1770 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003040{
vlmfa67ddc2004-06-03 03:38:44 +00003041 yyval.a_expr = yyvsp[-1].a_expr;
vlm6f5eb0b2004-08-13 12:35:09 +00003042 ;
3043 break;}
vlm5f0128b2004-08-20 13:25:29 +00003044case 229:
3045#line 1776 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003046{
vlmfa67ddc2004-06-03 03:38:44 +00003047 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3048 checkmem(yyval.a_expr);
3049 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm6f5eb0b2004-08-13 12:35:09 +00003050 ;
3051 break;}
vlm5f0128b2004-08-20 13:25:29 +00003052case 230:
3053#line 1781 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003054{
vlmfa67ddc2004-06-03 03:38:44 +00003055 yyval.a_expr = yyvsp[-2].a_expr;
3056 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm6f5eb0b2004-08-13 12:35:09 +00003057 ;
3058 break;}
vlm5f0128b2004-08-20 13:25:29 +00003059case 231:
3060#line 1788 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003061{
vlmfa67ddc2004-06-03 03:38:44 +00003062 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3063 checkmem(yyval.a_expr);
3064 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3065 yyval.a_expr->meta_type = AMT_VALUE;
3066 yyval.a_expr->Identifier = yyvsp[0].tv_str;
vlm6f5eb0b2004-08-13 12:35:09 +00003067 ;
3068 break;}
vlm6f5eb0b2004-08-13 12:35:09 +00003069case 232:
vlm5f0128b2004-08-20 13:25:29 +00003070#line 1795 "asn1p_y.y"
3071{
3072 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3073 checkmem(yyval.a_expr);
3074 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3075 yyval.a_expr->meta_type = AMT_VALUE;
3076 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3077 yyval.a_expr->value = yyvsp[-1].a_value;
3078 ;
3079 break;}
3080case 233:
3081#line 1803 "asn1p_y.y"
3082{
3083 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3084 checkmem(yyval.a_expr);
3085 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3086 yyval.a_expr->meta_type = AMT_VALUE;
3087 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3088 yyval.a_expr->value = yyvsp[-1].a_value;
3089 ;
3090 break;}
3091case 234:
3092#line 1811 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003093{
vlmfa67ddc2004-06-03 03:38:44 +00003094 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3095 checkmem(yyval.a_expr);
3096 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3097 yyval.a_expr->meta_type = AMT_VALUE;
3098 yyval.a_expr->value = yyvsp[0].a_value;
vlm6f5eb0b2004-08-13 12:35:09 +00003099 ;
3100 break;}
vlm5f0128b2004-08-20 13:25:29 +00003101case 235:
3102#line 1818 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003103{
vlmfa67ddc2004-06-03 03:38:44 +00003104 yyval.a_expr = asn1p_expr_new(asn1p_lineno);
3105 checkmem(yyval.a_expr);
3106 yyval.a_expr->Identifier = strdup("...");
3107 checkmem(yyval.a_expr->Identifier);
3108 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3109 yyval.a_expr->meta_type = AMT_VALUE;
vlm6f5eb0b2004-08-13 12:35:09 +00003110 ;
3111 break;}
vlm6f5eb0b2004-08-13 12:35:09 +00003112case 236:
vlm5f0128b2004-08-20 13:25:29 +00003113#line 1829 "asn1p_y.y"
3114{
3115 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3116 checkmem(yyval.a_value);
3117 ;
vlm6f5eb0b2004-08-13 12:35:09 +00003118 break;}
vlm9283dbe2004-08-18 04:59:12 +00003119case 237:
vlm5f0128b2004-08-20 13:25:29 +00003120#line 1833 "asn1p_y.y"
3121{
3122 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3123 checkmem(yyval.a_value);
3124 ;
vlm6f5eb0b2004-08-13 12:35:09 +00003125 break;}
vlm9283dbe2004-08-18 04:59:12 +00003126case 238:
vlm5f0128b2004-08-20 13:25:29 +00003127#line 1864 "asn1p_y.y"
3128{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3129 break;}
3130case 239:
3131#line 1865 "asn1p_y.y"
3132{ yyval.a_tag = yyvsp[0].a_tag; ;
3133 break;}
3134case 240:
3135#line 1869 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003136{
vlmfa67ddc2004-06-03 03:38:44 +00003137 yyval.a_tag = yyvsp[0].a_tag;
3138 yyval.a_tag.tag_mode = TM_DEFAULT;
vlm6f5eb0b2004-08-13 12:35:09 +00003139 ;
3140 break;}
vlm5f0128b2004-08-20 13:25:29 +00003141case 241:
3142#line 1873 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003143{
vlmfa67ddc2004-06-03 03:38:44 +00003144 yyval.a_tag = yyvsp[-1].a_tag;
3145 yyval.a_tag.tag_mode = TM_IMPLICIT;
vlm6f5eb0b2004-08-13 12:35:09 +00003146 ;
3147 break;}
vlm5f0128b2004-08-20 13:25:29 +00003148case 242:
3149#line 1877 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003150{
vlmfa67ddc2004-06-03 03:38:44 +00003151 yyval.a_tag = yyvsp[-1].a_tag;
3152 yyval.a_tag.tag_mode = TM_EXPLICIT;
vlm6f5eb0b2004-08-13 12:35:09 +00003153 ;
3154 break;}
vlm6f5eb0b2004-08-13 12:35:09 +00003155case 243:
vlm5f0128b2004-08-20 13:25:29 +00003156#line 1884 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003157{
vlmfa67ddc2004-06-03 03:38:44 +00003158 checkmem(yyvsp[0].tv_str);
3159 yyval.tv_str = yyvsp[0].tv_str;
vlm6f5eb0b2004-08-13 12:35:09 +00003160 ;
3161 break;}
3162case 244:
vlm5f0128b2004-08-20 13:25:29 +00003163#line 1888 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003164{
vlmfa67ddc2004-06-03 03:38:44 +00003165 checkmem(yyvsp[0].tv_str);
3166 yyval.tv_str = yyvsp[0].tv_str;
vlm6f5eb0b2004-08-13 12:35:09 +00003167 ;
3168 break;}
3169case 245:
vlm5f0128b2004-08-20 13:25:29 +00003170#line 1896 "asn1p_y.y"
3171{
3172 checkmem(yyvsp[0].tv_str);
3173 yyval.tv_str = yyvsp[0].tv_str;
3174 ;
3175 break;}
3176case 246:
3177#line 1903 "asn1p_y.y"
3178{
3179 checkmem(yyvsp[0].tv_str);
3180 yyval.tv_str = yyvsp[0].tv_str;
3181 ;
3182 break;}
3183case 247:
3184#line 1910 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003185{
vlmfa67ddc2004-06-03 03:38:44 +00003186 memset(&yyval.tv_nametag, 0, sizeof(yyval.tv_nametag));
3187 yyval.tv_nametag.name = yyvsp[0].tv_str;
vlm6f5eb0b2004-08-13 12:35:09 +00003188 ;
3189 break;}
vlm5f0128b2004-08-20 13:25:29 +00003190case 248:
3191#line 1914 "asn1p_y.y"
vlm6f5eb0b2004-08-13 12:35:09 +00003192{
vlmfa67ddc2004-06-03 03:38:44 +00003193 yyval.tv_nametag.name = yyvsp[-1].tv_str;
3194 yyval.tv_nametag.tag = yyvsp[0].a_tag;
vlm6f5eb0b2004-08-13 12:35:09 +00003195 ;
3196 break;}
3197}
3198 /* the action file gets copied in in place of this dollarsign */
3199#line 543 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00003200
3201 yyvsp -= yylen;
3202 yyssp -= yylen;
vlm6f5eb0b2004-08-13 12:35:09 +00003203#ifdef YYLSP_NEEDED
3204 yylsp -= yylen;
3205#endif
vlmfa67ddc2004-06-03 03:38:44 +00003206
vlm6f5eb0b2004-08-13 12:35:09 +00003207#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00003208 if (yydebug)
3209 {
vlm6f5eb0b2004-08-13 12:35:09 +00003210 short *ssp1 = yyss - 1;
3211 fprintf (stderr, "state stack now");
3212 while (ssp1 != yyssp)
3213 fprintf (stderr, " %d", *++ssp1);
3214 fprintf (stderr, "\n");
vlmfa67ddc2004-06-03 03:38:44 +00003215 }
3216#endif
3217
3218 *++yyvsp = yyval;
3219
vlm6f5eb0b2004-08-13 12:35:09 +00003220#ifdef YYLSP_NEEDED
3221 yylsp++;
3222 if (yylen == 0)
3223 {
3224 yylsp->first_line = yylloc.first_line;
3225 yylsp->first_column = yylloc.first_column;
3226 yylsp->last_line = (yylsp-1)->last_line;
3227 yylsp->last_column = (yylsp-1)->last_column;
3228 yylsp->text = 0;
3229 }
3230 else
3231 {
3232 yylsp->last_line = (yylsp+yylen-1)->last_line;
3233 yylsp->last_column = (yylsp+yylen-1)->last_column;
3234 }
3235#endif
vlmfa67ddc2004-06-03 03:38:44 +00003236
vlm6f5eb0b2004-08-13 12:35:09 +00003237 /* Now "shift" the result of the reduction.
3238 Determine what state that goes to,
3239 based on the state we popped back to
3240 and the rule number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00003241
3242 yyn = yyr1[yyn];
3243
vlm6f5eb0b2004-08-13 12:35:09 +00003244 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3245 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00003246 yystate = yytable[yystate];
3247 else
vlm6f5eb0b2004-08-13 12:35:09 +00003248 yystate = yydefgoto[yyn - YYNTBASE];
vlmfa67ddc2004-06-03 03:38:44 +00003249
3250 goto yynewstate;
3251
vlm6f5eb0b2004-08-13 12:35:09 +00003252yyerrlab: /* here on detecting error */
vlmfa67ddc2004-06-03 03:38:44 +00003253
vlm6f5eb0b2004-08-13 12:35:09 +00003254 if (! yyerrstatus)
3255 /* If not already recovering from an error, report this error. */
vlmfa67ddc2004-06-03 03:38:44 +00003256 {
3257 ++yynerrs;
vlm6f5eb0b2004-08-13 12:35:09 +00003258
3259#ifdef YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00003260 yyn = yypact[yystate];
3261
vlm6f5eb0b2004-08-13 12:35:09 +00003262 if (yyn > YYFLAG && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00003263 {
vlm6f5eb0b2004-08-13 12:35:09 +00003264 int size = 0;
3265 char *msg;
3266 int x, count;
vlmfa67ddc2004-06-03 03:38:44 +00003267
vlm6f5eb0b2004-08-13 12:35:09 +00003268 count = 0;
3269 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3270 for (x = (yyn < 0 ? -yyn : 0);
3271 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3272 if (yycheck[x + yyn] == x)
3273 size += strlen(yytname[x]) + 15, count++;
3274 msg = (char *) malloc(size + 15);
3275 if (msg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00003276 {
vlm6f5eb0b2004-08-13 12:35:09 +00003277 strcpy(msg, "parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003278
vlm6f5eb0b2004-08-13 12:35:09 +00003279 if (count < 5)
vlmfa67ddc2004-06-03 03:38:44 +00003280 {
vlm6f5eb0b2004-08-13 12:35:09 +00003281 count = 0;
3282 for (x = (yyn < 0 ? -yyn : 0);
3283 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3284 if (yycheck[x + yyn] == x)
vlmfa67ddc2004-06-03 03:38:44 +00003285 {
vlm6f5eb0b2004-08-13 12:35:09 +00003286 strcat(msg, count == 0 ? ", expecting `" : " or `");
3287 strcat(msg, yytname[x]);
3288 strcat(msg, "'");
3289 count++;
vlmfa67ddc2004-06-03 03:38:44 +00003290 }
3291 }
vlm6f5eb0b2004-08-13 12:35:09 +00003292 yyerror(msg);
3293 free(msg);
vlmfa67ddc2004-06-03 03:38:44 +00003294 }
3295 else
vlm6f5eb0b2004-08-13 12:35:09 +00003296 yyerror ("parse error; also virtual memory exceeded");
vlmfa67ddc2004-06-03 03:38:44 +00003297 }
3298 else
3299#endif /* YYERROR_VERBOSE */
vlm6f5eb0b2004-08-13 12:35:09 +00003300 yyerror("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003301 }
vlm6f5eb0b2004-08-13 12:35:09 +00003302
vlmfa67ddc2004-06-03 03:38:44 +00003303 goto yyerrlab1;
vlm6f5eb0b2004-08-13 12:35:09 +00003304yyerrlab1: /* here on error raised explicitly by an action */
vlmfa67ddc2004-06-03 03:38:44 +00003305
3306 if (yyerrstatus == 3)
3307 {
vlm6f5eb0b2004-08-13 12:35:09 +00003308 /* if just tried and failed to reuse lookahead token after an error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00003309
vlm6f5eb0b2004-08-13 12:35:09 +00003310 /* return failure if at end of input */
vlmfa67ddc2004-06-03 03:38:44 +00003311 if (yychar == YYEOF)
vlm6f5eb0b2004-08-13 12:35:09 +00003312 YYABORT;
vlmfa67ddc2004-06-03 03:38:44 +00003313
vlm6f5eb0b2004-08-13 12:35:09 +00003314#if YYDEBUG != 0
3315 if (yydebug)
3316 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3317#endif
3318
vlmfa67ddc2004-06-03 03:38:44 +00003319 yychar = YYEMPTY;
3320 }
3321
vlm6f5eb0b2004-08-13 12:35:09 +00003322 /* Else will try to reuse lookahead token
3323 after shifting the error token. */
vlmfa67ddc2004-06-03 03:38:44 +00003324
vlm6f5eb0b2004-08-13 12:35:09 +00003325 yyerrstatus = 3; /* Each real token shifted decrements this */
vlmfa67ddc2004-06-03 03:38:44 +00003326
vlm6f5eb0b2004-08-13 12:35:09 +00003327 goto yyerrhandle;
vlm827ac182004-06-03 05:07:41 +00003328
vlm6f5eb0b2004-08-13 12:35:09 +00003329yyerrdefault: /* current state does not do anything special for the error token. */
vlm827ac182004-06-03 05:07:41 +00003330
vlm6f5eb0b2004-08-13 12:35:09 +00003331#if 0
3332 /* This is wrong; only states that explicitly want error tokens
3333 should shift them. */
3334 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3335 if (yyn) goto yydefault;
vlmfa67ddc2004-06-03 03:38:44 +00003336#endif
vlm6f5eb0b2004-08-13 12:35:09 +00003337
3338yyerrpop: /* pop the current state because it cannot handle the error token */
3339
3340 if (yyssp == yyss) YYABORT;
3341 yyvsp--;
3342 yystate = *--yyssp;
3343#ifdef YYLSP_NEEDED
3344 yylsp--;
3345#endif
3346
3347#if YYDEBUG != 0
3348 if (yydebug)
3349 {
3350 short *ssp1 = yyss - 1;
3351 fprintf (stderr, "Error: state stack now");
3352 while (ssp1 != yyssp)
3353 fprintf (stderr, " %d", *++ssp1);
3354 fprintf (stderr, "\n");
vlmfa67ddc2004-06-03 03:38:44 +00003355 }
vlm6f5eb0b2004-08-13 12:35:09 +00003356#endif
3357
3358yyerrhandle:
3359
3360 yyn = yypact[yystate];
3361 if (yyn == YYFLAG)
3362 goto yyerrdefault;
3363
3364 yyn += YYTERROR;
3365 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3366 goto yyerrdefault;
3367
3368 yyn = yytable[yyn];
3369 if (yyn < 0)
3370 {
3371 if (yyn == YYFLAG)
3372 goto yyerrpop;
3373 yyn = -yyn;
3374 goto yyreduce;
3375 }
3376 else if (yyn == 0)
3377 goto yyerrpop;
vlmfa67ddc2004-06-03 03:38:44 +00003378
3379 if (yyn == YYFINAL)
3380 YYACCEPT;
3381
vlm6f5eb0b2004-08-13 12:35:09 +00003382#if YYDEBUG != 0
3383 if (yydebug)
3384 fprintf(stderr, "Shifting error token, ");
3385#endif
vlmfa67ddc2004-06-03 03:38:44 +00003386
3387 *++yyvsp = yylval;
vlm6f5eb0b2004-08-13 12:35:09 +00003388#ifdef YYLSP_NEEDED
3389 *++yylsp = yylloc;
3390#endif
vlmfa67ddc2004-06-03 03:38:44 +00003391
3392 yystate = yyn;
3393 goto yynewstate;
3394
vlm6f5eb0b2004-08-13 12:35:09 +00003395 yyacceptlab:
3396 /* YYACCEPT comes here. */
3397 if (yyfree_stacks)
3398 {
3399 free (yyss);
3400 free (yyvs);
3401#ifdef YYLSP_NEEDED
3402 free (yyls);
vlmfa67ddc2004-06-03 03:38:44 +00003403#endif
vlm6f5eb0b2004-08-13 12:35:09 +00003404 }
3405 return 0;
vlm827ac182004-06-03 05:07:41 +00003406
vlm6f5eb0b2004-08-13 12:35:09 +00003407 yyabortlab:
3408 /* YYABORT comes here. */
3409 if (yyfree_stacks)
3410 {
3411 free (yyss);
3412 free (yyvs);
3413#ifdef YYLSP_NEEDED
3414 free (yyls);
vlm827ac182004-06-03 05:07:41 +00003415#endif
vlm6f5eb0b2004-08-13 12:35:09 +00003416 }
3417 return 1;
vlmfa67ddc2004-06-03 03:38:44 +00003418}
vlm5f0128b2004-08-20 13:25:29 +00003419#line 1921 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00003420
3421
3422
3423/*
3424 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3425 */
3426static asn1p_value_t *
3427_convert_bitstring2binary(char *str, int base) {
3428 asn1p_value_t *val;
3429 int slen;
3430 int memlen;
3431 int baselen;
3432 int bits;
3433 uint8_t *binary_vector;
3434 uint8_t *bv_ptr;
3435 uint8_t cur_val;
3436
3437 assert(str);
3438 assert(str[0] == '\'');
3439
3440 switch(base) {
3441 case 'B':
3442 baselen = 1;
3443 break;
3444 case 'H':
3445 baselen = 4;
3446 break;
3447 default:
3448 assert(base == 'B' || base == 'H');
3449 errno = EINVAL;
3450 return NULL;
3451 }
3452
3453 slen = strlen(str);
3454 assert(str[slen - 1] == base);
3455 assert(str[slen - 2] == '\'');
3456
3457 memlen = slen / (8 / baselen); /* Conservative estimate */
3458
3459 bv_ptr = binary_vector = malloc(memlen + 1);
3460 if(bv_ptr == NULL)
3461 /* ENOMEM */
3462 return NULL;
3463
3464 cur_val = 0;
3465 bits = 0;
3466 while(*(++str) != '\'') {
3467 switch(baselen) {
3468 case 1:
3469 switch(*str) {
3470 case '1':
3471 cur_val |= 1 << (7 - (bits % 8));
3472 case '0':
3473 break;
3474 default:
3475 assert(!"_y UNREACH1");
3476 case ' ': case '\r': case '\n':
3477 continue;
3478 }
3479 break;
3480 case 4:
3481 switch(*str) {
3482 case '0': case '1': case '2': case '3': case '4':
3483 case '5': case '6': case '7': case '8': case '9':
3484 cur_val |= (*str - '0') << (4 - (bits % 8));
3485 break;
3486 case 'A': case 'B': case 'C':
3487 case 'D': case 'E': case 'F':
3488 cur_val |= ((*str - 'A') + 10)
3489 << (4 - (bits % 8));
3490 break;
3491 default:
3492 assert(!"_y UNREACH2");
3493 case ' ': case '\r': case '\n':
3494 continue;
3495 }
3496 break;
3497 }
3498
3499 bits += baselen;
3500 if((bits % 8) == 0) {
3501 *bv_ptr++ = cur_val;
3502 cur_val = 0;
3503 }
3504 }
3505
3506 *bv_ptr = cur_val;
3507 assert((bv_ptr - binary_vector) <= memlen);
3508
3509 val = asn1p_value_frombits(binary_vector, bits, 0);
3510 if(val == NULL) {
3511 free(binary_vector);
3512 }
3513
3514 return val;
3515}
3516
3517extern char *asn1p_text;
3518
3519int
3520yyerror(const char *msg) {
3521 fprintf(stderr,
3522 "ASN.1 grammar parse error "
3523 "near line %d (token \"%s\"): %s\n",
3524 asn1p_lineno, asn1p_text, msg);
3525 return -1;
3526}
3527
3528