blob: 31598c8ef68184bcc0b83e5d60b13a32f94a208c [file] [log] [blame]
vlmfa67ddc2004-06-03 03:38:44 +00001
vlm0c6d3812006-03-21 03:40:38 +00002/* A Bison parser, made from asn1p_y.y
3 by GNU Bison version 1.28 */
vlmfa67ddc2004-06-03 03:38:44 +00004
vlm0c6d3812006-03-21 03:40:38 +00005#define YYBISON 1 /* Identify Bison output. */
vlmfa67ddc2004-06-03 03:38:44 +00006
7#define yyparse asn1p_parse
vlm0c6d3812006-03-21 03:40:38 +00008#define yylex asn1p_lex
vlmfa67ddc2004-06-03 03:38:44 +00009#define yyerror asn1p_error
vlm0c6d3812006-03-21 03:40:38 +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
vlm0c6d3812006-03-21 03:40:38 +000014#define TOK_PPEQ 257
15#define TOK_whitespace 258
16#define TOK_opaque 259
17#define TOK_bstring 260
18#define TOK_cstring 261
19#define TOK_hstring 262
20#define TOK_identifier 263
21#define TOK_number 264
22#define TOK_tuple 265
23#define TOK_quadruple 266
24#define TOK_number_negative 267
25#define TOK_typereference 268
26#define TOK_capitalreference 269
27#define TOK_typefieldreference 270
28#define TOK_valuefieldreference 271
29#define TOK_Literal 272
30#define TOK_ABSENT 273
31#define TOK_ABSTRACT_SYNTAX 274
32#define TOK_ALL 275
33#define TOK_ANY 276
34#define TOK_APPLICATION 277
35#define TOK_AUTOMATIC 278
36#define TOK_BEGIN 279
37#define TOK_BIT 280
38#define TOK_BMPString 281
39#define TOK_BOOLEAN 282
40#define TOK_BY 283
41#define TOK_CHARACTER 284
42#define TOK_CHOICE 285
43#define TOK_CLASS 286
44#define TOK_COMPONENT 287
45#define TOK_COMPONENTS 288
46#define TOK_CONSTRAINED 289
47#define TOK_CONTAINING 290
48#define TOK_DEFAULT 291
49#define TOK_DEFINITIONS 292
50#define TOK_DEFINED 293
51#define TOK_EMBEDDED 294
52#define TOK_ENCODED 295
53#define TOK_ENCODING_CONTROL 296
54#define TOK_END 297
55#define TOK_ENUMERATED 298
56#define TOK_EXPLICIT 299
57#define TOK_EXPORTS 300
58#define TOK_EXTENSIBILITY 301
59#define TOK_EXTERNAL 302
60#define TOK_FALSE 303
61#define TOK_FROM 304
62#define TOK_GeneralizedTime 305
63#define TOK_GeneralString 306
64#define TOK_GraphicString 307
65#define TOK_IA5String 308
66#define TOK_IDENTIFIER 309
67#define TOK_IMPLICIT 310
68#define TOK_IMPLIED 311
69#define TOK_IMPORTS 312
70#define TOK_INCLUDES 313
71#define TOK_INSTANCE 314
72#define TOK_INSTRUCTIONS 315
73#define TOK_INTEGER 316
74#define TOK_ISO646String 317
75#define TOK_MAX 318
76#define TOK_MIN 319
77#define TOK_MINUS_INFINITY 320
78#define TOK_NULL 321
79#define TOK_NumericString 322
80#define TOK_OBJECT 323
81#define TOK_ObjectDescriptor 324
82#define TOK_OCTET 325
83#define TOK_OF 326
84#define TOK_OPTIONAL 327
85#define TOK_PATTERN 328
86#define TOK_PDV 329
87#define TOK_PLUS_INFINITY 330
88#define TOK_PRESENT 331
89#define TOK_PrintableString 332
90#define TOK_PRIVATE 333
91#define TOK_REAL 334
92#define TOK_RELATIVE_OID 335
93#define TOK_SEQUENCE 336
94#define TOK_SET 337
95#define TOK_SIZE 338
96#define TOK_STRING 339
97#define TOK_SYNTAX 340
98#define TOK_T61String 341
99#define TOK_TAGS 342
100#define TOK_TeletexString 343
101#define TOK_TRUE 344
102#define TOK_TYPE_IDENTIFIER 345
103#define TOK_UNIQUE 346
104#define TOK_UNIVERSAL 347
105#define TOK_UniversalString 348
106#define TOK_UTCTime 349
107#define TOK_UTF8String 350
108#define TOK_VideotexString 351
109#define TOK_VisibleString 352
110#define TOK_WITH 353
111#define TOK_EXCEPT 354
112#define TOK_INTERSECTION 355
113#define TOK_UNION 356
114#define TOK_TwoDots 357
115#define TOK_ThreeDots 358
vlmfa67ddc2004-06-03 03:38:44 +0000116
117#line 1 "asn1p_y.y"
118
119
120#include <stdlib.h>
121#include <stdio.h>
122#include <string.h>
123#include <errno.h>
124#include <assert.h>
125
126#include "asn1parser.h"
127
128#define YYPARSE_PARAM param
vlm03630c52005-06-07 21:43:32 +0000129#define YYPARSE_PARAM_TYPE void **
vlmfa67ddc2004-06-03 03:38:44 +0000130#define YYERROR_VERBOSE
131
132int yylex(void);
133int yyerror(const char *msg);
vlm03630c52005-06-07 21:43:32 +0000134#ifdef YYBYACC
135int yyparse(void **param); /* byacc does not produce a prototype */
136#endif
vlmfa67ddc2004-06-03 03:38:44 +0000137void asn1p_lexer_hack_push_opaque_state(void);
138void asn1p_lexer_hack_enable_with_syntax(void);
vlm9283dbe2004-08-18 04:59:12 +0000139void asn1p_lexer_hack_push_encoding_control(void);
vlmfa67ddc2004-06-03 03:38:44 +0000140#define yylineno asn1p_lineno
141extern int asn1p_lineno;
142
vlm931aeed2005-08-12 10:09:10 +0000143/*
vlm177a5b62005-09-05 05:17:57 +0000144 * Process directives as <ASN1C:RepresentAsPointer>
vlm066dc102005-08-22 12:23:54 +0000145 */
146extern int asn1p_as_pointer;
vlm066dc102005-08-22 12:23:54 +0000147
148/*
vlm931aeed2005-08-12 10:09:10 +0000149 * This temporary variable is used to solve the shortcomings of 1-lookahead
150 * parser.
151 */
152static struct AssignedIdentifier *saved_aid;
vlmfa67ddc2004-06-03 03:38:44 +0000153
vlm5d89c3d2005-08-13 09:07:11 +0000154static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
155static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
vlmfa67ddc2004-06-03 03:38:44 +0000156
vlm931aeed2005-08-12 10:09:10 +0000157#define checkmem(ptr) do { \
158 if(!(ptr)) \
159 return yyerror("Memory failure"); \
vlmfa67ddc2004-06-03 03:38:44 +0000160 } while(0)
161
vlm931aeed2005-08-12 10:09:10 +0000162#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
163 if(arg1->type != constr_type) { \
164 int __ret; \
165 root = asn1p_constraint_new(yylineno); \
166 checkmem(root); \
167 root->type = constr_type; \
168 __ret = asn1p_constraint_insert(root, \
169 arg1); \
170 checkmem(__ret == 0); \
171 } else { \
172 root = arg1; \
173 } \
174 if(arg2) { \
175 int __ret \
176 = asn1p_constraint_insert(root, arg2); \
177 checkmem(__ret == 0); \
178 } \
vlmfa67ddc2004-06-03 03:38:44 +0000179 } while(0)
180
181
vlm177a5b62005-09-05 05:17:57 +0000182#line 72 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +0000183typedef union {
vlmfa67ddc2004-06-03 03:38:44 +0000184 asn1p_t *a_grammar;
185 asn1p_module_flags_e a_module_flags;
186 asn1p_module_t *a_module;
187 asn1p_expr_type_e a_type; /* ASN.1 Type */
188 asn1p_expr_t *a_expr; /* Constructed collection */
189 asn1p_constraint_t *a_constr; /* Constraint */
190 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
191 asn1p_xports_t *a_xports; /* IMports/EXports */
vlm931aeed2005-08-12 10:09:10 +0000192 struct AssignedIdentifier a_aid; /* Assigned Identifier */
vlmfa67ddc2004-06-03 03:38:44 +0000193 asn1p_oid_t *a_oid; /* Object Identifier */
194 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
195 struct asn1p_type_tag_s a_tag; /* A tag */
196 asn1p_ref_t *a_ref; /* Reference to custom type */
197 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
198 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
199 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
200 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
201 struct asn1p_param_s a_parg; /* A parameter argument */
202 asn1p_paramlist_t *a_plist; /* A pargs list */
vlmc94e28f2004-09-15 11:59:51 +0000203 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
vlmfa67ddc2004-06-03 03:38:44 +0000204 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
vlmec6acd42004-09-29 13:18:09 +0000205 asn1c_integer_t a_int;
vlmfa67ddc2004-06-03 03:38:44 +0000206 char *tv_str;
207 struct {
208 char *buf;
209 int len;
210 } tv_opaque;
211 struct {
212 char *name;
213 struct asn1p_type_tag_s tag;
214 } tv_nametag;
vlm6a02a8a2004-09-08 00:28:11 +0000215} YYSTYPE;
vlm0c6d3812006-03-21 03:40:38 +0000216#include <stdio.h>
217
218#ifndef __cplusplus
219#ifndef __STDC__
220#define const
221#endif
vlmfa67ddc2004-06-03 03:38:44 +0000222#endif
223
224
225
vlm0c6d3812006-03-21 03:40:38 +0000226#define YYFINAL 442
227#define YYFLAG -32768
228#define YYNTBASE 120
vlmfa67ddc2004-06-03 03:38:44 +0000229
vlm0c6d3812006-03-21 03:40:38 +0000230#define YYTRANSLATE(x) ((unsigned)(x) <= 358 ? yytranslate[x] : 226)
vlmfa67ddc2004-06-03 03:38:44 +0000231
vlm0c6d3812006-03-21 03:40:38 +0000232static const char yytranslate[] = { 0,
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, 116, 2, 2, 2, 2, 2, 2, 109,
237 110, 2, 2, 112, 2, 117, 2, 2, 2, 2,
238 2, 2, 2, 2, 2, 2, 2, 113, 111, 118,
239 2, 2, 2, 119, 2, 2, 2, 2, 2, 2,
240 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
241 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
242 114, 2, 115, 101, 2, 2, 2, 2, 2, 2,
243 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
244 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
245 2, 2, 107, 103, 108, 2, 2, 2, 2, 2,
246 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
247 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
248 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
249 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
250 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
251 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
252 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
253 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
254 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
255 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
256 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
257 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
258 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
259 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
260 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
261 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
262 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
263 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
264 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
265 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
266 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
267 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
268 97, 98, 99, 100, 102, 104, 105, 106
269};
vlmfa67ddc2004-06-03 03:38:44 +0000270
vlm0c6d3812006-03-21 03:40:38 +0000271#if YYDEBUG != 0
272static const short yyprhs[] = { 0,
273 0, 2, 4, 7, 16, 17, 19, 23, 26, 28,
274 31, 33, 38, 40, 41, 43, 45, 48, 51, 54,
275 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
276 79, 81, 82, 86, 88, 92, 95, 97, 100, 101,
277 103, 108, 110, 114, 116, 120, 122, 126, 130, 133,
278 135, 139, 141, 145, 147, 148, 155, 157, 159, 163,
279 167, 174, 176, 180, 182, 186, 190, 194, 196, 200,
280 202, 204, 205, 207, 209, 213, 217, 220, 224, 226,
281 228, 232, 235, 237, 239, 245, 246, 248, 250, 254,
282 257, 262, 266, 270, 274, 278, 282, 283, 285, 286,
283 293, 295, 298, 300, 302, 304, 308, 310, 314, 318,
284 322, 323, 326, 328, 333, 338, 343, 350, 357, 359,
285 364, 366, 371, 375, 377, 381, 385, 389, 391, 395,
286 397, 401, 403, 405, 407, 409, 413, 417, 419, 424,
287 428, 429, 433, 435, 437, 439, 441, 443, 445, 447,
288 449, 451, 455, 457, 459, 461, 463, 466, 468, 470,
289 472, 474, 477, 480, 482, 484, 487, 490, 492, 494,
290 496, 498, 500, 503, 505, 508, 510, 512, 514, 516,
291 518, 520, 522, 524, 526, 528, 530, 532, 534, 536,
292 538, 540, 542, 544, 546, 547, 549, 551, 556, 560,
293 565, 567, 571, 577, 579, 583, 587, 591, 595, 600,
294 604, 606, 608, 612, 616, 620, 624, 626, 628, 629,
295 635, 637, 640, 643, 647, 649, 651, 653, 655, 657,
296 659, 661, 663, 667, 673, 675, 679, 681, 685, 686,
297 688, 690, 692, 694, 696, 698, 702, 707, 709, 713,
298 716, 720, 722, 726, 727, 729, 731, 734, 737, 741,
299 743, 747, 749, 754, 759, 761, 763, 765, 767, 768,
300 770, 773, 778, 779, 781, 783, 785, 786, 788, 790,
301 792, 794, 796, 797, 799
302};
vlmfa67ddc2004-06-03 03:38:44 +0000303
vlm0c6d3812006-03-21 03:40:38 +0000304static const short yyrhs[] = { 121,
305 0, 122, 0, 121, 122, 0, 222, 123, 38, 127,
306 3, 25, 130, 43, 0, 0, 124, 0, 107, 125,
307 108, 0, 107, 108, 0, 126, 0, 125, 126, 0,
308 225, 0, 225, 109, 10, 110, 0, 10, 0, 0,
309 128, 0, 129, 0, 128, 129, 0, 45, 88, 0,
310 56, 88, 0, 24, 88, 0, 47, 57, 0, 15,
311 61, 0, 0, 131, 0, 132, 0, 131, 132, 0,
312 134, 0, 140, 0, 146, 0, 176, 0, 143, 0,
313 0, 42, 15, 133, 0, 185, 0, 58, 135, 111,
314 0, 58, 50, 0, 137, 0, 135, 137, 0, 0,
315 124, 0, 138, 50, 222, 136, 0, 139, 0, 138,
316 112, 139, 0, 222, 0, 222, 107, 108, 0, 225,
317 0, 46, 141, 111, 0, 46, 21, 111, 0, 46,
318 111, 0, 142, 0, 141, 112, 142, 0, 222, 0,
319 222, 107, 108, 0, 225, 0, 0, 222, 145, 3,
320 107, 144, 181, 0, 170, 0, 182, 0, 222, 3,
321 166, 0, 222, 3, 156, 0, 222, 107, 147, 108,
322 3, 166, 0, 148, 0, 147, 112, 148, 0, 222,
323 0, 222, 113, 225, 0, 222, 113, 222, 0, 182,
324 113, 225, 0, 150, 0, 149, 112, 150, 0, 166,
325 0, 225, 0, 0, 152, 0, 153, 0, 152, 112,
326 153, 0, 225, 166, 211, 0, 166, 211, 0, 34,
327 72, 166, 0, 165, 0, 155, 0, 154, 112, 155,
328 0, 225, 166, 0, 165, 0, 166, 0, 32, 107,
329 158, 108, 160, 0, 0, 92, 0, 159, 0, 158,
330 112, 159, 0, 16, 211, 0, 17, 166, 157, 211,
331 0, 17, 174, 211, 0, 17, 175, 211, 0, 16,
332 174, 211, 0, 16, 166, 211, 0, 16, 175, 211,
333 0, 0, 161, 0, 0, 99, 86, 107, 162, 163,
334 108, 0, 164, 0, 163, 164, 0, 4, 0, 18,
335 0, 173, 0, 114, 163, 115, 0, 106, 0, 106,
336 116, 179, 0, 106, 116, 216, 0, 217, 168, 189,
337 0, 0, 167, 169, 0, 184, 0, 31, 107, 154,
338 108, 0, 82, 107, 151, 108, 0, 83, 107, 151,
339 108, 0, 82, 189, 72, 224, 217, 168, 0, 83,
340 189, 72, 224, 217, 168, 0, 22, 0, 22, 39,
341 29, 225, 0, 170, 0, 170, 107, 149, 108, 0,
342 60, 72, 170, 0, 14, 0, 14, 117, 222, 0,
343 223, 117, 222, 0, 14, 117, 225, 0, 223, 0,
344 223, 117, 171, 0, 172, 0, 171, 117, 172, 0,
345 173, 0, 16, 0, 17, 0, 16, 0, 174, 117,
346 16, 0, 174, 117, 17, 0, 15, 0, 225, 145,
347 3, 177, 0, 225, 113, 177, 0, 0, 107, 178,
348 181, 0, 67, 0, 49, 0, 90, 0, 6, 0,
349 8, 0, 180, 0, 216, 0, 179, 0, 225, 0,
350 222, 117, 225, 0, 7, 0, 11, 0, 12, 0,
351 5, 0, 181, 5, 0, 28, 0, 67, 0, 80,
352 0, 183, 0, 71, 85, 0, 69, 55, 0, 81,
353 0, 48, 0, 40, 75, 0, 30, 85, 0, 95,
354 0, 51, 0, 185, 0, 62, 0, 44, 0, 26,
355 85, 0, 182, 0, 183, 213, 0, 27, 0, 52,
356 0, 53, 0, 54, 0, 63, 0, 68, 0, 78,
357 0, 87, 0, 89, 0, 94, 0, 96, 0, 97,
358 0, 98, 0, 70, 0, 103, 0, 104, 0, 101,
359 0, 102, 0, 100, 0, 0, 190, 0, 191, 0,
360 84, 109, 192, 110, 0, 109, 192, 110, 0, 191,
361 109, 192, 110, 0, 193, 0, 193, 112, 106, 0,
362 193, 112, 106, 112, 193, 0, 194, 0, 21, 100,
363 194, 0, 193, 186, 194, 0, 193, 187, 194, 0,
364 194, 188, 194, 0, 197, 109, 192, 110, 0, 109,
365 192, 110, 0, 198, 0, 199, 0, 198, 196, 198,
366 0, 65, 196, 198, 0, 198, 196, 64, 0, 65,
367 196, 64, 0, 205, 0, 200, 0, 0, 35, 29,
368 107, 195, 181, 0, 105, 0, 105, 118, 0, 118,
369 105, 0, 118, 105, 118, 0, 84, 0, 50, 0,
370 49, 0, 90, 0, 216, 0, 180, 0, 225, 0,
371 222, 0, 99, 33, 191, 0, 99, 34, 107, 201,
372 108, 0, 202, 0, 201, 112, 202, 0, 106, 0,
373 225, 189, 203, 0, 0, 204, 0, 77, 0, 19,
374 0, 73, 0, 206, 0, 207, 0, 107, 222, 108,
375 0, 206, 107, 208, 108, 0, 209, 0, 208, 112,
376 209, 0, 119, 210, 0, 119, 117, 210, 0, 225,
377 0, 210, 117, 225, 0, 0, 212, 0, 73, 0,
378 37, 177, 0, 107, 108, 0, 107, 214, 108, 0,
379 215, 0, 214, 112, 215, 0, 225, 0, 225, 109,
380 216, 110, 0, 225, 109, 179, 110, 0, 216, 0,
381 106, 0, 10, 0, 13, 0, 0, 218, 0, 219,
382 221, 0, 114, 220, 10, 115, 0, 0, 93, 0,
383 23, 0, 79, 0, 0, 56, 0, 45, 0, 14,
384 0, 15, 0, 15, 0, 0, 225, 0, 9, 0
385};
vlmfa67ddc2004-06-03 03:38:44 +0000386
387#endif
388
vlm0c6d3812006-03-21 03:40:38 +0000389#if YYDEBUG != 0
390static const short yyrline[] = { 0,
391 321, 327, 333, 349, 374, 376, 379, 383, 388, 395,
392 403, 408, 412, 421, 423, 431, 435, 443, 447, 450,
393 453, 457, 477, 479, 487, 491, 523, 527, 536, 543,
394 556, 563, 565, 577, 589, 600, 605, 611, 617, 619,
395 622, 633, 639, 645, 652, 658, 666, 670, 673, 680,
396 686, 692, 699, 705, 714, 716, 725, 733, 747, 757,
397 773, 781, 791, 801, 806, 813, 820, 830, 836, 842,
398 846, 873, 875, 877, 883, 889, 897, 903, 910, 915,
399 921, 927, 933, 936, 942, 952, 954, 957, 965, 972,
400 985, 996, 1006, 1017, 1027, 1038, 1049, 1051, 1056, 1060,
401 1065, 1070, 1076, 1081, 1084, 1088, 1093, 1102, 1111, 1122,
402 1144, 1151, 1170, 1174, 1180, 1186, 1192, 1202, 1212, 1218,
403 1239, 1249, 1257, 1271, 1280, 1290, 1300, 1310, 1318, 1339,
404 1348, 1357, 1359, 1366, 1373, 1379, 1383, 1389, 1409, 1419,
405 1427, 1427, 1432, 1437, 1442, 1447, 1451, 1455, 1458, 1461,
406 1466, 1478, 1495, 1500, 1505, 1538, 1548, 1562, 1564, 1565,
407 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575,
408 1581, 1583, 1584, 1587, 1594, 1606, 1608, 1612, 1616, 1617,
409 1618, 1619, 1620, 1624, 1625, 1626, 1627, 1631, 1632, 1639,
410 1639, 1640, 1640, 1641, 1643, 1645, 1650, 1654, 1663, 1667,
411 1672, 1676, 1682, 1692, 1696, 1699, 1702, 1705, 1710, 1719,
412 1727, 1733, 1739, 1746, 1754, 1762, 1771, 1774, 1777, 1778,
413 1788, 1790, 1791, 1792, 1795, 1799, 1804, 1810, 1815, 1818,
414 1821, 1834, 1848, 1852, 1857, 1861, 1866, 1873, 1886, 1888,
415 1891, 1895, 1898, 1903, 1907, 1915, 1930, 1936, 1943, 1956,
416 1968, 1983, 1987, 2004, 2009, 2012, 2017, 2039, 2044, 2049,
417 2055, 2061, 2069, 2077, 2085, 2092, 2102, 2107, 2137, 2139,
418 2142, 2149, 2155, 2157, 2158, 2159, 2162, 2164, 2165, 2168,
419 2173, 2180, 2187, 2189, 2194
420};
421#endif
422
423
424#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
425
426static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
427"TOK_whitespace","TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier",
428"TOK_number","TOK_tuple","TOK_quadruple","TOK_number_negative","TOK_typereference",
429"TOK_capitalreference","TOK_typefieldreference","TOK_valuefieldreference","TOK_Literal",
430"TOK_ABSENT","TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY","TOK_APPLICATION","TOK_AUTOMATIC",
431"TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN","TOK_BY","TOK_CHARACTER",
432"TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS","TOK_CONSTRAINED",
433"TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED","TOK_EMBEDDED",
434"TOK_ENCODED","TOK_ENCODING_CONTROL","TOK_END","TOK_ENUMERATED","TOK_EXPLICIT",
435"TOK_EXPORTS","TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime",
436"TOK_GeneralString","TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT",
437"TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INSTRUCTIONS",
438"TOK_INTEGER","TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL",
439"TOK_NumericString","TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET","TOK_OF",
440"TOK_OPTIONAL","TOK_PATTERN","TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString",
441"TOK_PRIVATE","TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE",
442"TOK_STRING","TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE",
443"TOK_TYPE_IDENTIFIER","TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime",
444"TOK_UTF8String","TOK_VideotexString","TOK_VisibleString","TOK_WITH","TOK_EXCEPT",
445"'^'","TOK_INTERSECTION","'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots","'{'",
446"'}'","'('","')'","';'","','","':'","'['","']'","'!'","'.'","'<'","'@'","ParsedGrammar",
447"ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
448"ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags",
449"ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody",
450"ModuleSpecificationBody","ModuleSpecificationElement","@1","ImportsDefinition",
451"ImportsBundleSet","AssignedIdentifier","ImportsBundle","ImportsList","ImportsElement",
452"ExportsDefinition","ExportsBody","ExportsElement","ValueSetDefinition","@2",
453"DefinedTypeRef","DataTypeReference","ParameterArgumentList","ParameterArgumentName",
454"Specializations","Specialization","optComponentTypeLists","ComponentTypeLists",
455"ComponentType","AlternativeTypeLists","AlternativeType","ObjectClass","optUnique",
456"FieldSpec","ClassField","optWithSyntax","WithSyntax","@3","WithSyntaxList",
457"WithSyntaxToken","ExtensionAndException","Type","NSTD_IndirectMarker","TypeDeclaration",
458"TypeDeclarationSet","ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement",
459"PrimitiveFieldReference","FieldName","DefinedObjectClass","ValueDefinition",
460"Value","@4","DefinedValue","RestrictedCharacterStringValue","Opaque","BasicTypeId",
461"BasicTypeId_UniverationCompatible","BasicType","BasicString","Union","Intersection",
462"Except","optConstraints","Constraints","SetOfConstraints","ElementSetSpecs",
463"ElementSetSpec","ConstraintSubtypeElement","@5","ConstraintRangeSpec","ConstraintSpec",
464"SingleValue","ContainedSubtype","InnerTypeConstraint","WithComponentsList",
465"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
466"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
467"ComponentIdList","optMarker","Marker","UniverationDefinition","UniverationList",
468"UniverationElement","SignedNumber","optTag","Tag","TagTypeValue","TagClass",
469"TagPlicit","TypeRefName","ObjectClassReference","optIdentifier","Identifier", NULL
470};
471#endif
472
473static const short yyr1[] = { 0,
474 120, 121, 121, 122, 123, 123, 124, 124, 125, 125,
475 126, 126, 126, 127, 127, 128, 128, 129, 129, 129,
476 129, 129, 130, 130, 131, 131, 132, 132, 132, 132,
477 132, 133, 132, 132, 134, 134, 135, 135, 136, 136,
478 137, 138, 138, 139, 139, 139, 140, 140, 140, 141,
479 141, 142, 142, 142, 144, 143, 145, 145, 146, 146,
480 146, 147, 147, 148, 148, 148, 148, 149, 149, 150,
481 150, 151, 151, 152, 152, 153, 153, 153, 153, 154,
482 154, 155, 155, 155, 156, 157, 157, 158, 158, 159,
483 159, 159, 159, 159, 159, 159, 160, 160, 162, 161,
484 163, 163, 164, 164, 164, 164, 165, 165, 165, 166,
485 167, 168, 169, 169, 169, 169, 169, 169, 169, 169,
486 169, 169, 169, 170, 170, 170, 170, 170, 170, 171,
487 171, 172, 173, 173, 174, 174, 174, 175, 176, 177,
488 178, 177, 177, 177, 177, 177, 177, 177, 177, 177,
489 179, 179, 180, 180, 180, 181, 181, 182, 182, 182,
490 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
491 183, 183, 183, 184, 184, 185, 185, 185, 185, 185,
492 185, 185, 185, 185, 185, 185, 185, 185, 185, 186,
493 186, 187, 187, 188, 189, 189, 190, 190, 191, 191,
494 192, 192, 192, 193, 193, 193, 193, 193, 194, 194,
495 194, 194, 194, 194, 194, 194, 194, 194, 195, 194,
496 196, 196, 196, 196, 197, 197, 198, 198, 198, 198,
497 198, 199, 200, 200, 201, 201, 202, 202, 203, 203,
498 204, 204, 204, 205, 205, 206, 207, 208, 208, 209,
499 209, 210, 210, 211, 211, 212, 212, 213, 213, 214,
500 214, 215, 215, 215, 215, 215, 216, 216, 217, 217,
501 218, 219, 220, 220, 220, 220, 221, 221, 221, 222,
502 222, 223, 224, 224, 225
503};
504
505static const short yyr2[] = { 0,
506 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
507 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
508 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
509 1, 0, 3, 1, 3, 2, 1, 2, 0, 1,
510 4, 1, 3, 1, 3, 1, 3, 3, 2, 1,
511 3, 1, 3, 1, 0, 6, 1, 1, 3, 3,
512 6, 1, 3, 1, 3, 3, 3, 1, 3, 1,
513 1, 0, 1, 1, 3, 3, 2, 3, 1, 1,
514 3, 2, 1, 1, 5, 0, 1, 1, 3, 2,
515 4, 3, 3, 3, 3, 3, 0, 1, 0, 6,
516 1, 2, 1, 1, 1, 3, 1, 3, 3, 3,
517 0, 2, 1, 4, 4, 4, 6, 6, 1, 4,
518 1, 4, 3, 1, 3, 3, 3, 1, 3, 1,
519 3, 1, 1, 1, 1, 3, 3, 1, 4, 3,
520 0, 3, 1, 1, 1, 1, 1, 1, 1, 1,
521 1, 3, 1, 1, 1, 1, 2, 1, 1, 1,
522 1, 2, 2, 1, 1, 2, 2, 1, 1, 1,
523 1, 1, 2, 1, 2, 1, 1, 1, 1, 1,
524 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
525 1, 1, 1, 1, 0, 1, 1, 4, 3, 4,
526 1, 3, 5, 1, 3, 3, 3, 3, 4, 3,
527 1, 1, 3, 3, 3, 3, 1, 1, 0, 5,
528 1, 2, 2, 3, 1, 1, 1, 1, 1, 1,
529 1, 1, 3, 5, 1, 3, 1, 3, 0, 1,
530 1, 1, 1, 1, 1, 3, 4, 1, 3, 2,
531 3, 1, 3, 0, 1, 1, 2, 2, 3, 1,
532 3, 1, 4, 4, 1, 1, 1, 1, 0, 1,
533 2, 4, 0, 1, 1, 1, 0, 1, 1, 1,
534 1, 1, 0, 1, 1
535};
536
537static const short yydefact[] = { 0,
538 280, 281, 1, 2, 5, 3, 0, 0, 6, 285,
539 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
540 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
541 18, 21, 19, 0, 17, 12, 23, 176, 0, 0,
542 177, 178, 179, 0, 180, 181, 189, 182, 183, 184,
543 185, 186, 187, 188, 0, 24, 25, 27, 28, 31,
544 29, 30, 34, 0, 0, 32, 0, 49, 0, 50,
545 52, 54, 36, 0, 37, 0, 42, 44, 46, 4,
546 26, 269, 124, 282, 0, 158, 0, 0, 172, 165,
547 169, 171, 159, 0, 0, 160, 164, 168, 0, 0,
548 57, 58, 161, 170, 128, 0, 33, 48, 47, 0,
549 0, 35, 38, 0, 0, 0, 0, 273, 60, 59,
550 111, 270, 277, 0, 173, 167, 166, 163, 162, 0,
551 62, 0, 64, 0, 0, 0, 51, 53, 39, 43,
552 45, 0, 275, 276, 274, 0, 0, 195, 279, 278,
553 271, 125, 127, 0, 0, 0, 0, 55, 133, 134,
554 129, 130, 132, 126, 146, 153, 147, 267, 154, 155,
555 268, 144, 143, 145, 141, 139, 150, 148, 149, 0,
556 151, 40, 41, 269, 269, 0, 88, 0, 119, 0,
557 0, 195, 195, 112, 121, 174, 161, 113, 0, 0,
558 110, 196, 197, 269, 63, 67, 66, 65, 0, 0,
559 0, 0, 0, 138, 135, 0, 256, 254, 254, 254,
560 90, 255, 86, 254, 254, 97, 0, 272, 0, 269,
561 0, 269, 0, 269, 0, 269, 0, 175, 0, 0,
562 0, 227, 226, 0, 225, 228, 0, 0, 0, 230,
563 0, 201, 204, 0, 211, 212, 218, 217, 244, 245,
564 229, 232, 231, 0, 61, 156, 56, 131, 142, 152,
565 140, 257, 95, 0, 94, 96, 87, 254, 92, 93,
566 0, 85, 98, 89, 0, 107, 0, 80, 83, 84,
567 269, 123, 0, 0, 73, 74, 79, 254, 269, 283,
568 0, 283, 0, 68, 70, 71, 266, 258, 0, 260,
569 265, 262, 0, 0, 0, 221, 0, 0, 0, 0,
570 0, 0, 199, 192, 193, 190, 191, 0, 0, 0,
571 194, 0, 0, 0, 0, 0, 157, 136, 137, 91,
572 0, 120, 0, 114, 269, 82, 269, 115, 269, 77,
573 254, 269, 284, 116, 269, 122, 269, 259, 0, 0,
574 198, 205, 219, 222, 223, 216, 214, 233, 0, 246,
575 210, 202, 206, 207, 208, 0, 215, 213, 0, 0,
576 248, 200, 99, 108, 109, 151, 81, 78, 75, 76,
577 111, 111, 69, 261, 0, 0, 0, 224, 237, 0,
578 235, 195, 0, 209, 0, 250, 252, 247, 0, 0,
579 117, 118, 264, 263, 220, 234, 0, 239, 203, 251,
580 0, 249, 103, 104, 0, 0, 101, 105, 236, 242,
581 243, 241, 238, 240, 253, 0, 100, 102, 106, 0,
582 0, 0
583};
584
585static const short yydefgoto[] = { 440,
586 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
587 56, 57, 107, 58, 74, 183, 75, 76, 77, 59,
588 69, 70, 60, 209, 100, 61, 130, 131, 303, 304,
589 294, 295, 296, 287, 288, 119, 278, 186, 187, 282,
590 283, 410, 426, 427, 297, 298, 147, 148, 194, 101,
591 161, 162, 428, 219, 220, 62, 176, 211, 177, 250,
592 267, 102, 103, 198, 104, 329, 330, 332, 201, 202,
593 203, 251, 252, 253, 397, 318, 254, 255, 256, 257,
594 400, 401, 433, 434, 258, 259, 260, 380, 381, 406,
595 221, 222, 238, 309, 310, 261, 121, 122, 123, 146,
596 151, 262, 105, 352, 263
597};
598
599static const short yypact[] = { 25,
600-32768,-32768, 25,-32768, -76,-32768, 18, 97,-32768,-32768,
601-32768,-32768, 34,-32768, -30, 139,-32768,-32768, 62, 82,
602 73, 100, 128, 102, 195, 139,-32768, 109,-32768,-32768,
603-32768,-32768,-32768, 199,-32768,-32768, 429,-32768, 229, 49,
604-32768,-32768,-32768, 207,-32768,-32768,-32768,-32768,-32768,-32768,
605-32768,-32768,-32768,-32768, 219, 429,-32768,-32768,-32768,-32768,
606-32768,-32768,-32768, 353, 582,-32768, 158,-32768, -6,-32768,
607 172,-32768,-32768, 67,-32768, -32,-32768, 175,-32768,-32768,
608-32768, -15, 183,-32768, 217,-32768, 223, 240,-32768,-32768,
609-32768,-32768,-32768, 261, 241,-32768,-32768,-32768, 658, 315,
610-32768,-32768,-32768,-32768, 210, 325,-32768,-32768,-32768, 233,
611 221,-32768,-32768, 25, 233, 222, 224, 48,-32768,-32768,
612-32768,-32768, 148, 233,-32768,-32768,-32768,-32768,-32768, -34,
613-32768, 220, 226, 225, 282, 455,-32768,-32768, -76,-32768,
614-32768, 191,-32768,-32768,-32768, 324, 506, -48,-32768,-32768,
615-32768,-32768,-32768, 332, 658, 328, 233,-32768,-32768,-32768,
616 230,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
617-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 231,
618 227,-32768,-32768, 75, 37, 45,-32768, 234, 302, 239,
619 279, 129, 134,-32768, 247,-32768, 248,-32768, 254, 161,
620-32768,-32768, 256, 243,-32768,-32768,-32768,-32768, 359, 218,
621 359, 328, 455,-32768,-32768, 455,-32768, -5, 22, -5,
622-32768,-32768, 277, 22, -5, 267, 191,-32768, 341, 41,
623 238, 26, 299, 26, 301, 16, 56,-32768, 161, 276,
624 345,-32768,-32768, 76,-32768,-32768, 258, 25, 161,-32768,
625 268, 163, 285, 273, 76,-32768,-32768,-32768, 270,-32768,
626-32768,-32768,-32768, 161,-32768,-32768, 381,-32768, 381,-32768,
627-32768,-32768,-32768, 255,-32768,-32768,-32768, -5,-32768,-32768,
628 303,-32768,-32768,-32768, 328, 271, 138,-32768,-32768,-32768,
629 243,-32768, 316, 283, 278,-32768,-32768, -5, 243, 328,
630 284, 328, 151,-32768,-32768,-32768,-32768,-32768, 165,-32768,
631-32768, 286, 289, 310, 295, 290, 291, 190, 304, 296,
632 317, 308,-32768,-32768,-32768,-32768,-32768, 305, 310, 310,
633-32768, 310, 161, 294, 293, 318,-32768,-32768,-32768,-32768,
634 319,-32768, 274,-32768, 41,-32768, 243,-32768, 17,-32768,
635 -5, 243,-32768,-32768, 243,-32768, 16,-32768, 74, 274,
636-32768,-32768,-32768,-32768, 309,-32768,-32768, 256, 15,-32768,
637-32768, 320,-32768,-32768,-32768, 326,-32768,-32768, 7, 173,
638-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
639-32768,-32768,-32768,-32768, 327, 329, 359,-32768,-32768, 182,
640-32768, -48, 161,-32768, 328, 312,-32768,-32768, 293, 38,
641-32768,-32768,-32768,-32768, 381,-32768, 15, 160, 208, 312,
642 328,-32768,-32768,-32768, 38, 30,-32768,-32768,-32768,-32768,
643-32768,-32768,-32768,-32768,-32768, 5,-32768,-32768,-32768, 430,
644 435,-32768
645};
646
647static const short yypgoto[] = {-32768,
648-32768, 438,-32768, 306,-32768, 433,-32768,-32768, 426,-32768,
649-32768, 397,-32768,-32768,-32768,-32768, 380,-32768, 340,-32768,
650-32768, 347,-32768,-32768, 393,-32768,-32768, 321,-32768, 115,
651 244,-32768, 110,-32768, 132,-32768,-32768,-32768, 246,-32768,
652-32768,-32768, 54, -329, -223, -71,-32768, -78,-32768, -137,
653-32768, 264, -106, 300, 311,-32768, -115,-32768, -215, -124,
654 -206, -37, 333,-32768, 40,-32768,-32768,-32768, -190,-32768,
655 167, -72, 81, -74,-32768, 235,-32768, -232,-32768,-32768,
656-32768, 71,-32768,-32768,-32768,-32768,-32768,-32768, 80, 86,
657 -205,-32768,-32768,-32768, 135, -128, -186,-32768,-32768,-32768,
658-32768, 1,-32768, 193, -7
659};
660
661
662#define YYLAST 756
663
664
665static const short yytable[] = { 15,
666 5, 233, 235, 5, 269, 15, 289, 179, 423, 195,
667 120, 178, 273, 275, 276, 10, 117, 114, 279, 280,
668 159, 160, 424, 10, 10, 10, 10, 11, 163, 65,
669 7, 216, 72, 423, 10, 199, 79, 64, 1, 2,
670 71, 423, 10, 11, 78, 159, 160, 424, 65, 10,
671 293, 214, 215, 159, 160, 424, 64, 10, 216, 293,
672 200, 132, 1, 2, 10, 168, 79, 217, 171, 67,
673 143, 28, 340, 154, 78, 10, 63, 155, 19, 115,
674 1, 2, 10, 168, 179, 367, 171, 179, 178, 214,
675 215, 178, 350, 292, 217, 63, 438, 271, 118, 133,
676 272, 378, 72, 163, 109, 110, 438, 79, 311, 196,
677 71, 216, 218, 223, 139, 78, 153, 132, 425, 439,
678 399, 289, 286, 405, 152, 12, 144, 384, 181, 118,
679 118, 286, 265, -72, 16, 164, 180, 437, 274, 118,
680 145, 17, 29, 425, 395, 390, 286, 217, 206, 208,
681 118, 425, 226, 20, 118, 133, 227, 207, 290, 68,
682 30, 307, 21, 308, 305, 391, 313, 166, 392, 10,
683 168, 169, 170, 171, 1, 2, 322, 112, 430, 307,
684 316, 240, -254, 22, 32, 23, -254, 31, 118, 33,
685 415, 336, 149, 317, 24, 241, 166, 34, 10, 168,
686 169, 170, 171, 150, 270, 181, 184, 185, 181, 242,
687 243, 418, 199, 180, 385, 10, 180, 199, 36, 346,
688 1, 2, 291, 37, 299, 244, 299, 351, 306, 312,
689 311, 396, 431, 159, 160, 232, 432, 200, 242, 362,
690 234, 10, 200, 66, 245, 344, 1, 2, 321, 345,
691 246, 83, 84, 366, 373, 374, 73, 375, 356, 247,
692 376, 80, 357, 324, 325, 326, 327, 248, 108, 249,
693 338, 339, 358, 290, 328, 388, 359, 342, 111, 246,
694 408, 116, 10, 168, 409, 305, 171, 1, 2, 416,
695 319, 320, 353, 417, 353, 1, 2, 159, 160, 124,
696 166, 125, 10, 168, 169, 170, 171, 126, 324, 325,
697 326, 327, 411, 412, 127, 128, 166, 134, 10, 168,
698 169, 170, 171, 1, 2, 129, 135, 136, 138, 141,
699 142, 158, 156, 188, 204, 386, 10, 291, 157, 213,
700 229, 299, 242, 180, 241, 230, 210, 212, 228, 306,
701 231, 312, 386, 236, 237, 82, 118, 377, 242, 243,
702 180, 402, 239, 266, 264, 281, 83, 84, 277, 285,
703 300, 407, 302, 315, 244, 314, 335, 323, 85, 38,
704 86, 333, 87, 246, 331, 337, 343, 347, 341, 349,
705 348, 354, 88, 245, 360, 365, 89, 407, 361, 246,
706 90, 363, 369, 91, 41, 42, 43, 364, 247, 402,
707 372, 379, 200, 435, 92, 45, 248, 371, 249, 93,
708 46, 94, 47, 95, 370, 383, 398, 382, 421, 441,
709 48, 403, 96, 97, 442, 404, 413, 10, 414, 49,
710 6, 50, 1, 2, 182, 18, 51, 98, 52, 53,
711 54, 35, 81, 113, 140, 38, 137, 106, 389, 99,
712 165, 166, 167, 10, 168, 169, 170, 171, 1, 2,
713 39, 393, 284, 268, 40, 205, 387, 301, 436, 197,
714 41, 42, 43, 419, 224, 368, 44, 429, 422, 334,
715 420, 45, 0, 394, 355, 225, 46, 0, 47, 0,
716 0, 0, 0, 172, 0, 0, 48, 0, 0, 0,
717 0, 0, 0, 0, 0, 49, 0, 50, 0, 83,
718 84, 173, 51, 0, 52, 53, 54, 189, 0, 0,
719 0, 85, 38, 86, 0, 87, 190, 0, 0, 0,
720 0, 0, 0, 0, 174, 88, 0, 0, 0, 89,
721 0, 0, 0, 90, 0, 0, 91, 41, 42, 43,
722 0, 175, 0, 0, 0, 191, 0, 92, 45, 0,
723 0, 0, 93, 46, 94, 47, 95, 0, 0, 0,
724 0, 0, 0, 48, 0, 96, 97, 192, 193, 0,
725 0, 0, 49, 0, 50, 83, 84, 0, 0, 51,
726 98, 52, 53, 54, 0, 0, 0, 85, 38, 86,
727 0, 87, 0, 0, 0, 0, 0, 0, 0, 0,
728 0, 88, 0, 0, 0, 89, 0, 0, 0, 90,
729 0, 0, 91, 41, 42, 43, 0, 0, 0, 0,
730 0, 0, 0, 92, 45, 0, 0, 0, 93, 46,
731 94, 47, 95, 0, 0, 0, 0, 0, 0, 48,
732 0, 96, 97, 0, 0, 0, 0, 0, 49, 0,
733 50, 1, 2, 0, 0, 51, 98, 52, 53, 54,
734 0, 0, 0, 85, 38, 86, 0, 87, 0, 0,
735 0, 0, 0, 0, 0, 0, 0, 88, 0, 0,
736 0, 89, 0, 0, 0, 90, 0, 0, 91, 41,
737 42, 43, 0, 0, 0, 0, 0, 0, 0, 92,
738 45, 0, 0, 0, 93, 46, 94, 47, 95, 0,
739 0, 0, 0, 0, 0, 48, 0, 96, 97, 0,
740 0, 0, 0, 0, 49, 0, 50, 0, 0, 0,
741 0, 51, 98, 52, 53, 54
742};
743
744static const short yycheck[] = { 7,
745 0, 192, 193, 3, 211, 13, 230, 136, 4, 147,
746 82, 136, 218, 219, 220, 9, 32, 50, 224, 225,
747 16, 17, 18, 9, 9, 9, 9, 10, 135, 37,
748 107, 37, 40, 4, 9, 84, 44, 37, 14, 15,
749 40, 4, 9, 10, 44, 16, 17, 18, 56, 9,
750 34, 15, 16, 16, 17, 18, 56, 9, 37, 34,
751 109, 99, 14, 15, 9, 10, 74, 73, 13, 21,
752 23, 10, 278, 108, 74, 9, 37, 112, 109, 112,
753 14, 15, 9, 10, 213, 318, 13, 216, 213, 15,
754 16, 216, 298, 231, 73, 56, 426, 213, 114, 99,
755 216, 334, 110, 210, 111, 112, 436, 115, 237, 147,
756 110, 37, 184, 185, 114, 115, 124, 155, 114, 115,
757 106, 345, 106, 117, 124, 108, 79, 343, 136, 114,
758 114, 106, 204, 108, 38, 135, 136, 108, 117, 114,
759 93, 108, 61, 114, 360, 351, 106, 73, 156, 157,
760 114, 114, 108, 15, 114, 155, 112, 157, 230, 111,
761 88, 106, 24, 108, 236, 352, 239, 7, 355, 9,
762 10, 11, 12, 13, 14, 15, 249, 111, 19, 106,
763 105, 21, 108, 45, 57, 47, 112, 88, 114, 88,
764 397, 264, 45, 118, 56, 35, 7, 3, 9, 10,
765 11, 12, 13, 56, 212, 213, 16, 17, 216, 49,
766 50, 402, 84, 213, 343, 9, 216, 84, 110, 291,
767 14, 15, 230, 25, 232, 65, 234, 299, 236, 237,
768 359, 360, 73, 16, 17, 107, 77, 109, 49, 314,
769 107, 9, 109, 15, 84, 108, 14, 15, 248, 112,
770 90, 14, 15, 64, 329, 330, 50, 332, 108, 99,
771 333, 43, 112, 101, 102, 103, 104, 107, 111, 109,
772 16, 17, 108, 345, 112, 347, 112, 285, 107, 90,
773 108, 107, 9, 10, 112, 357, 13, 14, 15, 108,
774 33, 34, 300, 112, 302, 14, 15, 16, 17, 117,
775 7, 85, 9, 10, 11, 12, 13, 85, 101, 102,
776 103, 104, 391, 392, 75, 55, 7, 3, 9, 10,
777 11, 12, 13, 14, 15, 85, 117, 3, 108, 108,
778 107, 107, 113, 10, 3, 343, 9, 345, 113, 113,
779 39, 349, 49, 343, 35, 107, 117, 117, 115, 357,
780 72, 359, 360, 107, 107, 3, 114, 64, 49, 50,
781 360, 369, 109, 5, 109, 99, 14, 15, 92, 29,
782 72, 379, 72, 29, 65, 100, 107, 110, 26, 27,
783 28, 109, 30, 90, 100, 5, 116, 72, 86, 112,
784 108, 108, 40, 84, 109, 105, 44, 405, 110, 90,
785 48, 107, 107, 51, 52, 53, 54, 118, 99, 417,
786 106, 119, 109, 421, 62, 63, 107, 110, 109, 67,
787 68, 69, 70, 71, 108, 107, 118, 110, 117, 0,
788 78, 112, 80, 81, 0, 110, 110, 9, 110, 87,
789 3, 89, 14, 15, 139, 13, 94, 95, 96, 97,
790 98, 26, 56, 74, 115, 27, 110, 65, 349, 107,
791 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
792 42, 357, 227, 210, 46, 155, 345, 234, 425, 147,
793 52, 53, 54, 403, 185, 319, 58, 417, 409, 255,
794 405, 63, -1, 359, 302, 185, 68, -1, 70, -1,
795 -1, -1, -1, 49, -1, -1, 78, -1, -1, -1,
796 -1, -1, -1, -1, -1, 87, -1, 89, -1, 14,
797 15, 67, 94, -1, 96, 97, 98, 22, -1, -1,
798 -1, 26, 27, 28, -1, 30, 31, -1, -1, -1,
799 -1, -1, -1, -1, 90, 40, -1, -1, -1, 44,
800 -1, -1, -1, 48, -1, -1, 51, 52, 53, 54,
801 -1, 107, -1, -1, -1, 60, -1, 62, 63, -1,
802 -1, -1, 67, 68, 69, 70, 71, -1, -1, -1,
803 -1, -1, -1, 78, -1, 80, 81, 82, 83, -1,
804 -1, -1, 87, -1, 89, 14, 15, -1, -1, 94,
805 95, 96, 97, 98, -1, -1, -1, 26, 27, 28,
806 -1, 30, -1, -1, -1, -1, -1, -1, -1, -1,
807 -1, 40, -1, -1, -1, 44, -1, -1, -1, 48,
808 -1, -1, 51, 52, 53, 54, -1, -1, -1, -1,
809 -1, -1, -1, 62, 63, -1, -1, -1, 67, 68,
810 69, 70, 71, -1, -1, -1, -1, -1, -1, 78,
811 -1, 80, 81, -1, -1, -1, -1, -1, 87, -1,
812 89, 14, 15, -1, -1, 94, 95, 96, 97, 98,
813 -1, -1, -1, 26, 27, 28, -1, 30, -1, -1,
814 -1, -1, -1, -1, -1, -1, -1, 40, -1, -1,
815 -1, 44, -1, -1, -1, 48, -1, -1, 51, 52,
816 53, 54, -1, -1, -1, -1, -1, -1, -1, 62,
817 63, -1, -1, -1, 67, 68, 69, 70, 71, -1,
818 -1, -1, -1, -1, -1, 78, -1, 80, 81, -1,
819 -1, -1, -1, -1, 87, -1, 89, -1, -1, -1,
820 -1, 94, 95, 96, 97, 98
821};
822/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
823#line 3 "/usr/share/bison.simple"
824/* This file comes from bison-1.28. */
825
826/* Skeleton output parser for bison,
827 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
828
829 This program is free software; you can redistribute it and/or modify
830 it under the terms of the GNU General Public License as published by
831 the Free Software Foundation; either version 2, or (at your option)
832 any later version.
833
834 This program is distributed in the hope that it will be useful,
835 but WITHOUT ANY WARRANTY; without even the implied warranty of
836 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
837 GNU General Public License for more details.
838
839 You should have received a copy of the GNU General Public License
840 along with this program; if not, write to the Free Software
841 Foundation, Inc., 59 Temple Place - Suite 330,
842 Boston, MA 02111-1307, USA. */
843
844/* As a special exception, when this file is copied by Bison into a
845 Bison output file, you may use that output file without restriction.
846 This special exception was added by the Free Software Foundation
847 in version 1.24 of Bison. */
848
849/* This is the parser code that is written into each bison parser
850 when the %semantic_parser declaration is not specified in the grammar.
851 It was written by Richard Stallman by simplifying the hairy parser
852 used when %semantic_parser is specified. */
853
854#ifndef YYSTACK_USE_ALLOCA
855#ifdef alloca
856#define YYSTACK_USE_ALLOCA
857#else /* alloca not defined */
858#ifdef __GNUC__
859#define YYSTACK_USE_ALLOCA
860#define alloca __builtin_alloca
861#else /* not GNU C. */
862#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
863#define YYSTACK_USE_ALLOCA
864#include <alloca.h>
865#else /* not sparc */
866/* We think this test detects Watcom and Microsoft C. */
867/* This used to test MSDOS, but that is a bad idea
868 since that symbol is in the user namespace. */
869#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
870#if 0 /* No need for malloc.h, which pollutes the namespace;
871 instead, just don't use alloca. */
872#include <malloc.h>
873#endif
874#else /* not MSDOS, or __TURBOC__ */
875#if defined(_AIX)
876/* I don't know what this was needed for, but it pollutes the namespace.
877 So I turned it off. rms, 2 May 1997. */
878/* #include <malloc.h> */
879 #pragma alloca
880#define YYSTACK_USE_ALLOCA
881#else /* not MSDOS, or __TURBOC__, or _AIX */
882#if 0
883#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
884 and on HPUX 10. Eventually we can turn this on. */
885#define YYSTACK_USE_ALLOCA
886#define alloca __builtin_alloca
887#endif /* __hpux */
888#endif
889#endif /* not _AIX */
890#endif /* not MSDOS, or __TURBOC__ */
891#endif /* not sparc */
892#endif /* not GNU C */
893#endif /* alloca not defined */
894#endif /* YYSTACK_USE_ALLOCA not defined */
895
896#ifdef YYSTACK_USE_ALLOCA
897#define YYSTACK_ALLOC alloca
vlmfa67ddc2004-06-03 03:38:44 +0000898#else
vlm0c6d3812006-03-21 03:40:38 +0000899#define YYSTACK_ALLOC malloc
vlmfa67ddc2004-06-03 03:38:44 +0000900#endif
901
vlm0c6d3812006-03-21 03:40:38 +0000902/* Note: there must be only one dollar sign in this file.
903 It is replaced by the list of actions, each action
904 as one case of the switch. */
vlmfa67ddc2004-06-03 03:38:44 +0000905
906#define yyerrok (yyerrstatus = 0)
907#define yyclearin (yychar = YYEMPTY)
vlm0c6d3812006-03-21 03:40:38 +0000908#define YYEMPTY -2
vlmfa67ddc2004-06-03 03:38:44 +0000909#define YYEOF 0
910#define YYACCEPT goto yyacceptlab
vlm0c6d3812006-03-21 03:40:38 +0000911#define YYABORT goto yyabortlab
912#define YYERROR goto yyerrlab1
913/* Like YYERROR except do call yyerror.
914 This remains here temporarily to ease the
915 transition to the new meaning of YYERROR, for GCC.
vlmfa67ddc2004-06-03 03:38:44 +0000916 Once GCC version 2 has supplanted version 1, this can go. */
917#define YYFAIL goto yyerrlab
918#define YYRECOVERING() (!!yyerrstatus)
vlm0c6d3812006-03-21 03:40:38 +0000919#define YYBACKUP(token, value) \
vlmfa67ddc2004-06-03 03:38:44 +0000920do \
921 if (yychar == YYEMPTY && yylen == 1) \
vlm0c6d3812006-03-21 03:40:38 +0000922 { yychar = (token), yylval = (value); \
923 yychar1 = YYTRANSLATE (yychar); \
vlmfa67ddc2004-06-03 03:38:44 +0000924 YYPOPSTACK; \
925 goto yybackup; \
926 } \
927 else \
vlm0c6d3812006-03-21 03:40:38 +0000928 { yyerror ("syntax error: cannot back up"); YYERROR; } \
vlmfa67ddc2004-06-03 03:38:44 +0000929while (0)
930
931#define YYTERROR 1
932#define YYERRCODE 256
933
vlm0c6d3812006-03-21 03:40:38 +0000934#ifndef YYPURE
935#define YYLEX yylex()
vlmfa67ddc2004-06-03 03:38:44 +0000936#endif
937
vlm0c6d3812006-03-21 03:40:38 +0000938#ifdef YYPURE
939#ifdef YYLSP_NEEDED
vlm6a02a8a2004-09-08 00:28:11 +0000940#ifdef YYLEX_PARAM
vlm0c6d3812006-03-21 03:40:38 +0000941#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
vlm6a02a8a2004-09-08 00:28:11 +0000942#else
vlm0c6d3812006-03-21 03:40:38 +0000943#define YYLEX yylex(&yylval, &yylloc)
944#endif
945#else /* not YYLSP_NEEDED */
946#ifdef YYLEX_PARAM
947#define YYLEX yylex(&yylval, YYLEX_PARAM)
948#else
949#define YYLEX yylex(&yylval)
950#endif
951#endif /* not YYLSP_NEEDED */
vlm6a02a8a2004-09-08 00:28:11 +0000952#endif
vlm7e436752006-03-18 06:53:11 +0000953
vlm0c6d3812006-03-21 03:40:38 +0000954/* If nonreentrant, generate the variables here */
vlm7e436752006-03-18 06:53:11 +0000955
vlm0c6d3812006-03-21 03:40:38 +0000956#ifndef YYPURE
vlm7e436752006-03-18 06:53:11 +0000957
vlm0c6d3812006-03-21 03:40:38 +0000958int yychar; /* the lookahead symbol */
959YYSTYPE yylval; /* the semantic value of the */
960 /* lookahead symbol */
vlm7e436752006-03-18 06:53:11 +0000961
vlm0c6d3812006-03-21 03:40:38 +0000962#ifdef YYLSP_NEEDED
963YYLTYPE yylloc; /* location data for the lookahead */
964 /* symbol */
vlm6a02a8a2004-09-08 00:28:11 +0000965#endif
vlm7e436752006-03-18 06:53:11 +0000966
vlm0c6d3812006-03-21 03:40:38 +0000967int yynerrs; /* number of parse errors so far */
968#endif /* not YYPURE */
vlm7e436752006-03-18 06:53:11 +0000969
vlm0c6d3812006-03-21 03:40:38 +0000970#if YYDEBUG != 0
971int yydebug; /* nonzero means print parse trace */
972/* Since this is uninitialized, it does not stop multiple parsers
973 from coexisting. */
vlm6a02a8a2004-09-08 00:28:11 +0000974#endif
vlmfa67ddc2004-06-03 03:38:44 +0000975
vlm0c6d3812006-03-21 03:40:38 +0000976/* YYINITDEPTH indicates the initial size of the parser's stacks */
vlmfa67ddc2004-06-03 03:38:44 +0000977
vlmfa67ddc2004-06-03 03:38:44 +0000978#ifndef YYINITDEPTH
vlm0c6d3812006-03-21 03:40:38 +0000979#define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +0000980#endif
981
vlm0c6d3812006-03-21 03:40:38 +0000982/* YYMAXDEPTH is the maximum size the stacks can grow to
983 (effective only if the built-in stack extension method is used). */
vlmfa67ddc2004-06-03 03:38:44 +0000984
vlm0c6d3812006-03-21 03:40:38 +0000985#if YYMAXDEPTH == 0
986#undef YYMAXDEPTH
987#endif
vlmfa67ddc2004-06-03 03:38:44 +0000988
989#ifndef YYMAXDEPTH
vlm0c6d3812006-03-21 03:40:38 +0000990#define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +0000991#endif
992
vlm0c6d3812006-03-21 03:40:38 +0000993/* Define __yy_memcpy. Note that the size argument
994 should be passed with type unsigned int, because that is what the non-GCC
995 definitions require. With GCC, __builtin_memcpy takes an arg
996 of type size_t, but it can handle unsigned int. */
vlmfa67ddc2004-06-03 03:38:44 +0000997
vlm0c6d3812006-03-21 03:40:38 +0000998#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
999#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
1000#else /* not GNU C or C++ */
1001#ifndef __cplusplus
vlmfa67ddc2004-06-03 03:38:44 +00001002
vlm0c6d3812006-03-21 03:40:38 +00001003/* This is the most reliable way to avoid incompatibilities
1004 in available built-in functions on various systems. */
vlm7e436752006-03-18 06:53:11 +00001005static void
vlm0c6d3812006-03-21 03:40:38 +00001006__yy_memcpy (to, from, count)
1007 char *to;
1008 char *from;
1009 unsigned int count;
1010{
1011 register char *f = from;
1012 register char *t = to;
1013 register int i = count;
1014
1015 while (i-- > 0)
1016 *t++ = *f++;
1017}
1018
1019#else /* __cplusplus */
1020
1021/* This is the most reliable way to avoid incompatibilities
1022 in available built-in functions on various systems. */
vlm7e436752006-03-18 06:53:11 +00001023static void
vlm0c6d3812006-03-21 03:40:38 +00001024__yy_memcpy (char *to, char *from, unsigned int count)
1025{
1026 register char *t = to;
1027 register char *f = from;
1028 register int i = count;
1029
1030 while (i-- > 0)
1031 *t++ = *f++;
1032}
1033
vlm7e436752006-03-18 06:53:11 +00001034#endif
vlm7e436752006-03-18 06:53:11 +00001035#endif
vlm7e436752006-03-18 06:53:11 +00001036
vlm0c6d3812006-03-21 03:40:38 +00001037#line 217 "/usr/share/bison.simple"
vlm7e436752006-03-18 06:53:11 +00001038
vlm0c6d3812006-03-21 03:40:38 +00001039/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1040 into yyparse. The argument should have type void *.
1041 It should actually point to an object.
1042 Grammar actions can access the variable by casting it
1043 to the proper pointer type. */
vlm7e436752006-03-18 06:53:11 +00001044
1045#ifdef YYPARSE_PARAM
vlm0c6d3812006-03-21 03:40:38 +00001046#ifdef __cplusplus
1047#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1048#define YYPARSE_PARAM_DECL
1049#else /* not __cplusplus */
1050#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1051#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1052#endif /* not __cplusplus */
1053#else /* not YYPARSE_PARAM */
1054#define YYPARSE_PARAM_ARG
1055#define YYPARSE_PARAM_DECL
1056#endif /* not YYPARSE_PARAM */
1057
1058/* Prevent warning if -Wstrict-prototypes. */
1059#ifdef __GNUC__
1060#ifdef YYPARSE_PARAM
1061int yyparse (void *);
1062#else
vlmfa67ddc2004-06-03 03:38:44 +00001063int yyparse (void);
vlm7e436752006-03-18 06:53:11 +00001064#endif
vlm0c6d3812006-03-21 03:40:38 +00001065#endif
vlm7e436752006-03-18 06:53:11 +00001066
vlm7e436752006-03-18 06:53:11 +00001067int
vlm0c6d3812006-03-21 03:40:38 +00001068yyparse(YYPARSE_PARAM_ARG)
1069 YYPARSE_PARAM_DECL
vlm7e436752006-03-18 06:53:11 +00001070{
vlm0c6d3812006-03-21 03:40:38 +00001071 register int yystate;
1072 register int yyn;
1073 register short *yyssp;
1074 register YYSTYPE *yyvsp;
1075 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1076 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
vlm7e436752006-03-18 06:53:11 +00001077
vlm0c6d3812006-03-21 03:40:38 +00001078 short yyssa[YYINITDEPTH]; /* the state stack */
1079 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
vlm7e436752006-03-18 06:53:11 +00001080
vlm0c6d3812006-03-21 03:40:38 +00001081 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1082 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
vlm7e436752006-03-18 06:53:11 +00001083
vlm0c6d3812006-03-21 03:40:38 +00001084#ifdef YYLSP_NEEDED
1085 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1086 YYLTYPE *yyls = yylsa;
1087 YYLTYPE *yylsp;
vlm7e436752006-03-18 06:53:11 +00001088
vlm0c6d3812006-03-21 03:40:38 +00001089#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1090#else
vlmfa67ddc2004-06-03 03:38:44 +00001091#define YYPOPSTACK (yyvsp--, yyssp--)
vlm0c6d3812006-03-21 03:40:38 +00001092#endif
vlmfa67ddc2004-06-03 03:38:44 +00001093
vlm0c6d3812006-03-21 03:40:38 +00001094 int yystacksize = YYINITDEPTH;
1095 int yyfree_stacks = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001096
vlm0c6d3812006-03-21 03:40:38 +00001097#ifdef YYPURE
1098 int yychar;
1099 YYSTYPE yylval;
1100 int yynerrs;
1101#ifdef YYLSP_NEEDED
1102 YYLTYPE yylloc;
1103#endif
1104#endif
vlmfa67ddc2004-06-03 03:38:44 +00001105
vlm0c6d3812006-03-21 03:40:38 +00001106 YYSTYPE yyval; /* the variable used to return */
1107 /* semantic values from the action */
1108 /* routines */
vlmfa67ddc2004-06-03 03:38:44 +00001109
1110 int yylen;
1111
vlm0c6d3812006-03-21 03:40:38 +00001112#if YYDEBUG != 0
1113 if (yydebug)
1114 fprintf(stderr, "Starting parse\n");
1115#endif
vlmfa67ddc2004-06-03 03:38:44 +00001116
1117 yystate = 0;
1118 yyerrstatus = 0;
1119 yynerrs = 0;
1120 yychar = YYEMPTY; /* Cause a token to be read. */
1121
1122 /* Initialize stack pointers.
1123 Waste one element of value and location stack
1124 so that they stay on the same level as the state stack.
1125 The wasted elements are never initialized. */
1126
vlm0c6d3812006-03-21 03:40:38 +00001127 yyssp = yyss - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001128 yyvsp = yyvs;
vlm0c6d3812006-03-21 03:40:38 +00001129#ifdef YYLSP_NEEDED
1130 yylsp = yyls;
1131#endif
vlmfa67ddc2004-06-03 03:38:44 +00001132
vlm0c6d3812006-03-21 03:40:38 +00001133/* Push a new state, which is found in yystate . */
1134/* In all cases, when you get here, the value and location stacks
1135 have just been pushed. so pushing a state here evens the stacks. */
1136yynewstate:
vlmfa67ddc2004-06-03 03:38:44 +00001137
vlm0c6d3812006-03-21 03:40:38 +00001138 *++yyssp = yystate;
vlmfa67ddc2004-06-03 03:38:44 +00001139
vlm0c6d3812006-03-21 03:40:38 +00001140 if (yyssp >= yyss + yystacksize - 1)
vlmfa67ddc2004-06-03 03:38:44 +00001141 {
vlm0c6d3812006-03-21 03:40:38 +00001142 /* Give user a chance to reallocate the stack */
1143 /* Use copies of these so that the &'s don't force the real ones into memory. */
1144 YYSTYPE *yyvs1 = yyvs;
1145 short *yyss1 = yyss;
1146#ifdef YYLSP_NEEDED
1147 YYLTYPE *yyls1 = yyls;
1148#endif
1149
vlmfa67ddc2004-06-03 03:38:44 +00001150 /* Get the current used size of the three stacks, in elements. */
vlm0c6d3812006-03-21 03:40:38 +00001151 int size = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001152
1153#ifdef yyoverflow
vlm0c6d3812006-03-21 03:40:38 +00001154 /* Each stack pointer address is followed by the size of
1155 the data in use in that stack, in bytes. */
1156#ifdef YYLSP_NEEDED
1157 /* This used to be a conditional around just the two extra args,
1158 but that might be undefined if yyoverflow is a macro. */
1159 yyoverflow("parser stack overflow",
1160 &yyss1, size * sizeof (*yyssp),
1161 &yyvs1, size * sizeof (*yyvsp),
1162 &yyls1, size * sizeof (*yylsp),
1163 &yystacksize);
1164#else
1165 yyoverflow("parser stack overflow",
1166 &yyss1, size * sizeof (*yyssp),
1167 &yyvs1, size * sizeof (*yyvsp),
1168 &yystacksize);
1169#endif
vlmfa67ddc2004-06-03 03:38:44 +00001170
vlm0c6d3812006-03-21 03:40:38 +00001171 yyss = yyss1; yyvs = yyvs1;
1172#ifdef YYLSP_NEEDED
1173 yyls = yyls1;
1174#endif
vlmfa67ddc2004-06-03 03:38:44 +00001175#else /* no yyoverflow */
1176 /* Extend the stack our own way. */
vlm0c6d3812006-03-21 03:40:38 +00001177 if (yystacksize >= YYMAXDEPTH)
1178 {
1179 yyerror("parser stack overflow");
1180 if (yyfree_stacks)
1181 {
1182 free (yyss);
1183 free (yyvs);
1184#ifdef YYLSP_NEEDED
1185 free (yyls);
1186#endif
1187 }
1188 return 2;
1189 }
vlmfa67ddc2004-06-03 03:38:44 +00001190 yystacksize *= 2;
vlm0c6d3812006-03-21 03:40:38 +00001191 if (yystacksize > YYMAXDEPTH)
vlmfa67ddc2004-06-03 03:38:44 +00001192 yystacksize = YYMAXDEPTH;
vlm0c6d3812006-03-21 03:40:38 +00001193#ifndef YYSTACK_USE_ALLOCA
1194 yyfree_stacks = 1;
1195#endif
1196 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1197 __yy_memcpy ((char *)yyss, (char *)yyss1,
1198 size * (unsigned int) sizeof (*yyssp));
1199 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1200 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1201 size * (unsigned int) sizeof (*yyvsp));
1202#ifdef YYLSP_NEEDED
1203 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1204 __yy_memcpy ((char *)yyls, (char *)yyls1,
1205 size * (unsigned int) sizeof (*yylsp));
1206#endif
vlmfa67ddc2004-06-03 03:38:44 +00001207#endif /* no yyoverflow */
1208
vlm0c6d3812006-03-21 03:40:38 +00001209 yyssp = yyss + size - 1;
1210 yyvsp = yyvs + size - 1;
1211#ifdef YYLSP_NEEDED
1212 yylsp = yyls + size - 1;
1213#endif
vlmfa67ddc2004-06-03 03:38:44 +00001214
vlm0c6d3812006-03-21 03:40:38 +00001215#if YYDEBUG != 0
1216 if (yydebug)
1217 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1218#endif
vlmfa67ddc2004-06-03 03:38:44 +00001219
vlm0c6d3812006-03-21 03:40:38 +00001220 if (yyssp >= yyss + yystacksize - 1)
vlmfa67ddc2004-06-03 03:38:44 +00001221 YYABORT;
1222 }
1223
vlm0c6d3812006-03-21 03:40:38 +00001224#if YYDEBUG != 0
1225 if (yydebug)
1226 fprintf(stderr, "Entering state %d\n", yystate);
1227#endif
vlmfa67ddc2004-06-03 03:38:44 +00001228
1229 goto yybackup;
vlm0c6d3812006-03-21 03:40:38 +00001230 yybackup:
vlmfa67ddc2004-06-03 03:38:44 +00001231
1232/* Do appropriate processing given the current state. */
vlm0c6d3812006-03-21 03:40:38 +00001233/* Read a lookahead token if we need one and don't already have one. */
vlmfa67ddc2004-06-03 03:38:44 +00001234/* yyresume: */
1235
vlm0c6d3812006-03-21 03:40:38 +00001236 /* First try to decide what to do without reference to lookahead token. */
vlmfa67ddc2004-06-03 03:38:44 +00001237
1238 yyn = yypact[yystate];
vlm0c6d3812006-03-21 03:40:38 +00001239 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001240 goto yydefault;
1241
vlm0c6d3812006-03-21 03:40:38 +00001242 /* Not known => get a lookahead token if don't already have one. */
vlmfa67ddc2004-06-03 03:38:44 +00001243
vlm0c6d3812006-03-21 03:40:38 +00001244 /* yychar is either YYEMPTY or YYEOF
1245 or a valid token in external form. */
1246
vlmfa67ddc2004-06-03 03:38:44 +00001247 if (yychar == YYEMPTY)
1248 {
vlm0c6d3812006-03-21 03:40:38 +00001249#if YYDEBUG != 0
1250 if (yydebug)
1251 fprintf(stderr, "Reading a token: ");
1252#endif
vlmfa67ddc2004-06-03 03:38:44 +00001253 yychar = YYLEX;
1254 }
1255
vlm0c6d3812006-03-21 03:40:38 +00001256 /* Convert token to internal form (in yychar1) for indexing tables with */
1257
1258 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001259 {
vlm0c6d3812006-03-21 03:40:38 +00001260 yychar1 = 0;
1261 yychar = YYEOF; /* Don't call YYLEX any more */
1262
1263#if YYDEBUG != 0
1264 if (yydebug)
1265 fprintf(stderr, "Now at end of input.\n");
1266#endif
vlmfa67ddc2004-06-03 03:38:44 +00001267 }
1268 else
1269 {
vlm0c6d3812006-03-21 03:40:38 +00001270 yychar1 = YYTRANSLATE(yychar);
1271
1272#if YYDEBUG != 0
1273 if (yydebug)
1274 {
1275 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1276 /* Give the individual parser a way to print the precise meaning
1277 of a token, for further debugging info. */
1278#ifdef YYPRINT
1279 YYPRINT (stderr, yychar, yylval);
1280#endif
1281 fprintf (stderr, ")\n");
1282 }
1283#endif
vlmfa67ddc2004-06-03 03:38:44 +00001284 }
1285
vlm0c6d3812006-03-21 03:40:38 +00001286 yyn += yychar1;
1287 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001288 goto yydefault;
vlm0c6d3812006-03-21 03:40:38 +00001289
vlmfa67ddc2004-06-03 03:38:44 +00001290 yyn = yytable[yyn];
vlm0c6d3812006-03-21 03:40:38 +00001291
1292 /* yyn is what to do for this token type in this state.
1293 Negative => reduce, -yyn is rule number.
1294 Positive => shift, yyn is new state.
1295 New state is final state => don't bother to shift,
1296 just return success.
1297 0, or most negative number => error. */
1298
1299 if (yyn < 0)
vlmfa67ddc2004-06-03 03:38:44 +00001300 {
vlm0c6d3812006-03-21 03:40:38 +00001301 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001302 goto yyerrlab;
1303 yyn = -yyn;
1304 goto yyreduce;
1305 }
vlm0c6d3812006-03-21 03:40:38 +00001306 else if (yyn == 0)
1307 goto yyerrlab;
vlmfa67ddc2004-06-03 03:38:44 +00001308
1309 if (yyn == YYFINAL)
1310 YYACCEPT;
1311
vlm0c6d3812006-03-21 03:40:38 +00001312 /* Shift the lookahead token. */
1313
1314#if YYDEBUG != 0
1315 if (yydebug)
1316 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1317#endif
vlmfa67ddc2004-06-03 03:38:44 +00001318
1319 /* Discard the token being shifted unless it is eof. */
1320 if (yychar != YYEOF)
1321 yychar = YYEMPTY;
1322
1323 *++yyvsp = yylval;
vlm0c6d3812006-03-21 03:40:38 +00001324#ifdef YYLSP_NEEDED
1325 *++yylsp = yylloc;
1326#endif
vlmfa67ddc2004-06-03 03:38:44 +00001327
vlm0c6d3812006-03-21 03:40:38 +00001328 /* count tokens shifted since error; after three, turn off error status. */
1329 if (yyerrstatus) yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001330
1331 yystate = yyn;
1332 goto yynewstate;
1333
vlm0c6d3812006-03-21 03:40:38 +00001334/* Do the default action for the current state. */
vlm7e436752006-03-18 06:53:11 +00001335yydefault:
vlm0c6d3812006-03-21 03:40:38 +00001336
vlmfa67ddc2004-06-03 03:38:44 +00001337 yyn = yydefact[yystate];
1338 if (yyn == 0)
1339 goto yyerrlab;
1340
vlm0c6d3812006-03-21 03:40:38 +00001341/* Do a reduction. yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001342yyreduce:
1343 yylen = yyr2[yyn];
vlm0c6d3812006-03-21 03:40:38 +00001344 if (yylen > 0)
1345 yyval = yyvsp[1-yylen]; /* implement default value of the action */
vlmfa67ddc2004-06-03 03:38:44 +00001346
vlm0c6d3812006-03-21 03:40:38 +00001347#if YYDEBUG != 0
1348 if (yydebug)
vlmfa67ddc2004-06-03 03:38:44 +00001349 {
vlm0c6d3812006-03-21 03:40:38 +00001350 int i;
1351
1352 fprintf (stderr, "Reducing via rule %d (line %d), ",
1353 yyn, yyrline[yyn]);
1354
1355 /* Print the symbols being reduced, and their result. */
1356 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1357 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1358 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
1359 }
1360#endif
1361
1362
1363 switch (yyn) {
1364
1365case 1:
vlm7259fdc2006-03-16 22:39:56 +00001366#line 322 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001367{
1368 *(void **)param = yyvsp[0].a_grammar;
1369 ;
1370 break;}
1371case 2:
vlm7e436752006-03-18 06:53:11 +00001372#line 328 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001373{
1374 yyval.a_grammar = asn1p_new();
1375 checkmem(yyval.a_grammar);
1376 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
1377 ;
1378 break;}
1379case 3:
vlm7e436752006-03-18 06:53:11 +00001380#line 333 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001381{
1382 yyval.a_grammar = yyvsp[-1].a_grammar;
1383 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
1384 ;
1385 break;}
1386case 4:
vlm7e436752006-03-18 06:53:11 +00001387#line 354 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001388{
vlm7e436752006-03-18 06:53:11 +00001389
vlm0c6d3812006-03-21 03:40:38 +00001390 if(yyvsp[-1].a_module) {
1391 yyval.a_module = yyvsp[-1].a_module;
vlmfa67ddc2004-06-03 03:38:44 +00001392 } else {
1393 /* There's a chance that a module is just plain empty */
vlm0c6d3812006-03-21 03:40:38 +00001394 yyval.a_module = asn1p_module_new();
vlmfa67ddc2004-06-03 03:38:44 +00001395 }
vlm0c6d3812006-03-21 03:40:38 +00001396 checkmem(yyval.a_module);
vlmfa67ddc2004-06-03 03:38:44 +00001397
vlm0c6d3812006-03-21 03:40:38 +00001398 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
1399 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1400 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
1401 ;
1402 break;}
1403case 5:
vlm7259fdc2006-03-16 22:39:56 +00001404#line 375 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001405{ yyval.a_oid = 0; ;
1406 break;}
1407case 6:
vlm7259fdc2006-03-16 22:39:56 +00001408#line 376 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001409{ yyval.a_oid = yyvsp[0].a_oid; ;
1410 break;}
1411case 7:
vlm7259fdc2006-03-16 22:39:56 +00001412#line 380 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001413{
1414 yyval.a_oid = yyvsp[-1].a_oid;
1415 ;
1416 break;}
1417case 8:
vlm7259fdc2006-03-16 22:39:56 +00001418#line 383 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001419{
1420 yyval.a_oid = 0;
1421 ;
1422 break;}
1423case 9:
vlm7259fdc2006-03-16 22:39:56 +00001424#line 389 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001425{
1426 yyval.a_oid = asn1p_oid_new();
1427 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1428 if(yyvsp[0].a_oid_arc.name)
1429 free(yyvsp[0].a_oid_arc.name);
1430 ;
1431 break;}
1432case 10:
vlm7259fdc2006-03-16 22:39:56 +00001433#line 395 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001434{
1435 yyval.a_oid = yyvsp[-1].a_oid;
1436 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1437 if(yyvsp[0].a_oid_arc.name)
1438 free(yyvsp[0].a_oid_arc.name);
1439 ;
1440 break;}
1441case 11:
vlm7259fdc2006-03-16 22:39:56 +00001442#line 404 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001443{ /* iso */
1444 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1445 yyval.a_oid_arc.number = -1;
1446 ;
1447 break;}
1448case 12:
vlm7259fdc2006-03-16 22:39:56 +00001449#line 408 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001450{ /* iso(1) */
1451 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1452 yyval.a_oid_arc.number = yyvsp[-1].a_int;
1453 ;
1454 break;}
1455case 13:
vlm7259fdc2006-03-16 22:39:56 +00001456#line 412 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001457{ /* 1 */
1458 yyval.a_oid_arc.name = 0;
1459 yyval.a_oid_arc.number = yyvsp[0].a_int;
1460 ;
1461 break;}
1462case 14:
vlm7259fdc2006-03-16 22:39:56 +00001463#line 422 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001464{ yyval.a_module_flags = MSF_NOFLAGS; ;
1465 break;}
1466case 15:
vlm7259fdc2006-03-16 22:39:56 +00001467#line 423 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001468{
1469 yyval.a_module_flags = yyvsp[0].a_module_flags;
1470 ;
1471 break;}
1472case 16:
vlm7259fdc2006-03-16 22:39:56 +00001473#line 432 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001474{
1475 yyval.a_module_flags = yyvsp[0].a_module_flags;
1476 ;
1477 break;}
1478case 17:
vlm7259fdc2006-03-16 22:39:56 +00001479#line 435 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001480{
1481 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
1482 ;
1483 break;}
1484case 18:
vlm7259fdc2006-03-16 22:39:56 +00001485#line 444 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001486{
1487 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
1488 ;
1489 break;}
1490case 19:
vlm7259fdc2006-03-16 22:39:56 +00001491#line 447 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001492{
1493 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
1494 ;
1495 break;}
1496case 20:
vlm7259fdc2006-03-16 22:39:56 +00001497#line 450 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001498{
1499 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
1500 ;
1501 break;}
1502case 21:
vlm7259fdc2006-03-16 22:39:56 +00001503#line 453 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001504{
1505 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
1506 ;
1507 break;}
1508case 22:
vlm7259fdc2006-03-16 22:39:56 +00001509#line 457 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001510{
vlm9283dbe2004-08-18 04:59:12 +00001511 /* X.680Amd1 specifies TAG and XER */
vlm0c6d3812006-03-21 03:40:38 +00001512 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1513 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1514 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1515 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
vlm9283dbe2004-08-18 04:59:12 +00001516 } else {
1517 fprintf(stderr,
1518 "WARNING: %s INSTRUCTIONS at line %d: "
1519 "Unrecognized encoding reference\n",
vlm0c6d3812006-03-21 03:40:38 +00001520 yyvsp[-1].tv_str, yylineno);
1521 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
vlm9283dbe2004-08-18 04:59:12 +00001522 }
vlm0c6d3812006-03-21 03:40:38 +00001523 free(yyvsp[-1].tv_str);
1524 ;
1525 break;}
1526case 23:
vlm7259fdc2006-03-16 22:39:56 +00001527#line 478 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001528{ yyval.a_module = 0; ;
1529 break;}
1530case 24:
vlm7259fdc2006-03-16 22:39:56 +00001531#line 479 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001532{
1533 yyval.a_module = yyvsp[0].a_module;
1534 ;
1535 break;}
1536case 25:
vlm7259fdc2006-03-16 22:39:56 +00001537#line 488 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001538{
1539 yyval.a_module = yyvsp[0].a_module;
1540 ;
1541 break;}
1542case 26:
vlm7259fdc2006-03-16 22:39:56 +00001543#line 491 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001544{
1545 yyval.a_module = yyvsp[-1].a_module;
vlmfa67ddc2004-06-03 03:38:44 +00001546
vlm9283dbe2004-08-18 04:59:12 +00001547 /* Behave well when one of them is skipped. */
vlm0c6d3812006-03-21 03:40:38 +00001548 if(!(yyvsp[-1].a_module)) {
1549 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
vlm9283dbe2004-08-18 04:59:12 +00001550 break;
1551 }
1552
vlmfa67ddc2004-06-03 03:38:44 +00001553#ifdef MY_IMPORT
1554#error MY_IMPORT DEFINED ELSEWHERE!
1555#endif
1556#define MY_IMPORT(foo,field) do { \
vlm0c6d3812006-03-21 03:40:38 +00001557 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
1558 TQ_ADD(&(yyval.a_module->foo), \
1559 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
vlmfa67ddc2004-06-03 03:38:44 +00001560 field); \
vlm97ed7152004-08-13 12:31:09 +00001561 } \
vlm0c6d3812006-03-21 03:40:38 +00001562 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
vlm97ed7152004-08-13 12:31:09 +00001563 } while(0)
vlmfa67ddc2004-06-03 03:38:44 +00001564
1565 MY_IMPORT(imports, xp_next);
1566 MY_IMPORT(exports, xp_next);
1567 MY_IMPORT(members, next);
1568#undef MY_IMPORT
1569
vlm0c6d3812006-03-21 03:40:38 +00001570 ;
1571 break;}
1572case 27:
vlm7259fdc2006-03-16 22:39:56 +00001573#line 524 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001574{
1575 yyval.a_module = yyvsp[0].a_module;
1576 ;
1577 break;}
1578case 28:
vlm7259fdc2006-03-16 22:39:56 +00001579#line 527 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001580{
1581 yyval.a_module = asn1p_module_new();
1582 checkmem(yyval.a_module);
1583 if(yyvsp[0].a_xports) {
1584 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
vlmfa67ddc2004-06-03 03:38:44 +00001585 } else {
1586 /* "EXPORTS ALL;" ? */
1587 }
vlm0c6d3812006-03-21 03:40:38 +00001588 ;
1589 break;}
1590case 29:
vlm7259fdc2006-03-16 22:39:56 +00001591#line 536 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001592{
1593 yyval.a_module = asn1p_module_new();
1594 checkmem(yyval.a_module);
1595 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1596 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1597 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1598 ;
1599 break;}
1600case 30:
vlm7259fdc2006-03-16 22:39:56 +00001601#line 543 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001602{
1603 yyval.a_module = asn1p_module_new();
1604 checkmem(yyval.a_module);
1605 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1606 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1607 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1608 ;
1609 break;}
1610case 31:
vlm7259fdc2006-03-16 22:39:56 +00001611#line 556 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001612{
1613 yyval.a_module = asn1p_module_new();
1614 checkmem(yyval.a_module);
1615 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1616 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1617 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1618 ;
1619 break;}
1620case 32:
vlm7259fdc2006-03-16 22:39:56 +00001621#line 564 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001622{ asn1p_lexer_hack_push_encoding_control(); ;
1623 break;}
1624case 33:
vlm7259fdc2006-03-16 22:39:56 +00001625#line 565 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001626{
vlm9283dbe2004-08-18 04:59:12 +00001627 fprintf(stderr,
1628 "WARNING: ENCODING-CONTROL %s "
1629 "specification at line %d ignored\n",
vlm0c6d3812006-03-21 03:40:38 +00001630 yyvsp[-1].tv_str, yylineno);
1631 free(yyvsp[-1].tv_str);
1632 yyval.a_module = 0;
1633 ;
1634 break;}
1635case 34:
vlm7259fdc2006-03-16 22:39:56 +00001636#line 577 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001637{
vlmfa67ddc2004-06-03 03:38:44 +00001638 return yyerror(
vlm1ac75e72005-11-26 11:21:55 +00001639 "Attempt to redefine a standard basic string type, "
1640 "please comment out or remove this type redefinition.");
vlm0c6d3812006-03-21 03:40:38 +00001641 ;
1642 break;}
1643case 35:
vlm7259fdc2006-03-16 22:39:56 +00001644#line 590 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001645{
vlm931aeed2005-08-12 10:09:10 +00001646 if(!saved_aid && 0)
1647 return yyerror("Unterminated IMPORTS FROM, "
1648 "expected semicolon ';'");
1649 saved_aid = 0;
vlm0c6d3812006-03-21 03:40:38 +00001650 yyval.a_module = yyvsp[-1].a_module;
1651 ;
1652 break;}
1653case 36:
vlm7259fdc2006-03-16 22:39:56 +00001654#line 600 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001655{
vlmfa67ddc2004-06-03 03:38:44 +00001656 return yyerror("Empty IMPORTS list");
vlm0c6d3812006-03-21 03:40:38 +00001657 ;
1658 break;}
1659case 37:
vlm7259fdc2006-03-16 22:39:56 +00001660#line 606 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001661{
1662 yyval.a_module = asn1p_module_new();
1663 checkmem(yyval.a_module);
1664 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
1665 ;
1666 break;}
1667case 38:
vlm7259fdc2006-03-16 22:39:56 +00001668#line 611 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001669{
1670 yyval.a_module = yyvsp[-1].a_module;
1671 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
1672 ;
1673 break;}
1674case 39:
vlm7259fdc2006-03-16 22:39:56 +00001675#line 618 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001676{ memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
1677 break;}
1678case 40:
vlm7259fdc2006-03-16 22:39:56 +00001679#line 619 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001680{ yyval.a_aid.oid = yyvsp[0].a_oid; ;
1681 break;}
1682case 41:
vlm7259fdc2006-03-16 22:39:56 +00001683#line 623 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001684{
1685 yyval.a_xports = yyvsp[-3].a_xports;
1686 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
1687 yyval.a_xports->identifier = yyvsp[0].a_aid;
vlm931aeed2005-08-12 10:09:10 +00001688 /* This stupid thing is used for look-back hack. */
vlm0c6d3812006-03-21 03:40:38 +00001689 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
1690 checkmem(yyval.a_xports);
1691 ;
1692 break;}
1693case 42:
vlm7259fdc2006-03-16 22:39:56 +00001694#line 634 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001695{
1696 yyval.a_xports = asn1p_xports_new();
1697 checkmem(yyval.a_xports);
1698 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
1699 ;
1700 break;}
1701case 43:
vlm7259fdc2006-03-16 22:39:56 +00001702#line 639 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001703{
1704 yyval.a_xports = yyvsp[-2].a_xports;
1705 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
1706 ;
1707 break;}
1708case 44:
vlm7259fdc2006-03-16 22:39:56 +00001709#line 646 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001710{
1711 yyval.a_expr = asn1p_expr_new(yylineno);
1712 checkmem(yyval.a_expr);
1713 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1714 yyval.a_expr->expr_type = A1TC_REFERENCE;
1715 ;
1716 break;}
1717case 45:
vlm7259fdc2006-03-16 22:39:56 +00001718#line 652 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001719{ /* Completely equivalent to above */
1720 yyval.a_expr = asn1p_expr_new(yylineno);
1721 checkmem(yyval.a_expr);
1722 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1723 yyval.a_expr->expr_type = A1TC_REFERENCE;
1724 ;
1725 break;}
1726case 46:
vlm7259fdc2006-03-16 22:39:56 +00001727#line 658 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001728{
1729 yyval.a_expr = asn1p_expr_new(yylineno);
1730 checkmem(yyval.a_expr);
1731 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1732 yyval.a_expr->expr_type = A1TC_REFERENCE;
1733 ;
1734 break;}
1735case 47:
vlm7259fdc2006-03-16 22:39:56 +00001736#line 667 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001737{
1738 yyval.a_xports = yyvsp[-1].a_xports;
1739 ;
1740 break;}
1741case 48:
vlm7259fdc2006-03-16 22:39:56 +00001742#line 670 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001743{
1744 yyval.a_xports = 0;
1745 ;
1746 break;}
1747case 49:
vlm7259fdc2006-03-16 22:39:56 +00001748#line 673 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001749{
vlmfa67ddc2004-06-03 03:38:44 +00001750 /* Empty EXPORTS clause effectively prohibits export. */
vlm0c6d3812006-03-21 03:40:38 +00001751 yyval.a_xports = asn1p_xports_new();
1752 checkmem(yyval.a_xports);
1753 ;
1754 break;}
1755case 50:
vlm7259fdc2006-03-16 22:39:56 +00001756#line 681 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001757{
1758 yyval.a_xports = asn1p_xports_new();
1759 assert(yyval.a_xports);
1760 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
1761 ;
1762 break;}
1763case 51:
vlm7259fdc2006-03-16 22:39:56 +00001764#line 686 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001765{
1766 yyval.a_xports = yyvsp[-2].a_xports;
1767 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
1768 ;
1769 break;}
1770case 52:
vlm7259fdc2006-03-16 22:39:56 +00001771#line 693 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001772{
1773 yyval.a_expr = asn1p_expr_new(yylineno);
1774 checkmem(yyval.a_expr);
1775 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1776 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1777 ;
1778 break;}
1779case 53:
vlm7259fdc2006-03-16 22:39:56 +00001780#line 699 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001781{
1782 yyval.a_expr = asn1p_expr_new(yylineno);
1783 checkmem(yyval.a_expr);
1784 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1785 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1786 ;
1787 break;}
1788case 54:
vlm7259fdc2006-03-16 22:39:56 +00001789#line 705 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001790{
1791 yyval.a_expr = asn1p_expr_new(yylineno);
1792 checkmem(yyval.a_expr);
1793 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1794 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1795 ;
1796 break;}
1797case 55:
vlm7259fdc2006-03-16 22:39:56 +00001798#line 716 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001799{ asn1p_lexer_hack_push_opaque_state(); ;
1800 break;}
1801case 56:
vlm7259fdc2006-03-16 22:39:56 +00001802#line 716 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001803{
1804 yyval.a_expr = yyvsp[-4].a_expr;
1805 assert(yyval.a_expr->Identifier == 0);
1806 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1807 yyval.a_expr->meta_type = AMT_VALUESET;
vlm7259fdc2006-03-16 22:39:56 +00001808 /* take care of ValueSet body */
vlm0c6d3812006-03-21 03:40:38 +00001809 ;
1810 break;}
1811case 57:
vlm7259fdc2006-03-16 22:39:56 +00001812#line 726 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001813{
1814 yyval.a_expr = asn1p_expr_new(yylineno);
1815 checkmem(yyval.a_expr);
1816 yyval.a_expr->reference = yyvsp[0].a_ref;
1817 yyval.a_expr->expr_type = A1TC_REFERENCE;
1818 yyval.a_expr->meta_type = AMT_TYPEREF;
1819 ;
1820 break;}
1821case 58:
vlm7259fdc2006-03-16 22:39:56 +00001822#line 733 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001823{
1824 yyval.a_expr = asn1p_expr_new(yylineno);
1825 checkmem(yyval.a_expr);
1826 yyval.a_expr->expr_type = yyvsp[0].a_type;
1827 yyval.a_expr->meta_type = AMT_TYPE;
1828 ;
1829 break;}
1830case 59:
vlm7259fdc2006-03-16 22:39:56 +00001831#line 751 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001832{
1833 yyval.a_expr = yyvsp[0].a_expr;
1834 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1835 assert(yyval.a_expr->expr_type);
1836 assert(yyval.a_expr->meta_type);
1837 ;
1838 break;}
1839case 60:
vlm7259fdc2006-03-16 22:39:56 +00001840#line 757 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001841{
1842 yyval.a_expr = yyvsp[0].a_expr;
1843 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1844 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1845 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
1846 ;
1847 break;}
1848case 61:
vlm7259fdc2006-03-16 22:39:56 +00001849#line 773 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001850{
1851 yyval.a_expr = yyvsp[0].a_expr;
1852 assert(yyval.a_expr->Identifier == 0);
1853 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1854 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
1855 ;
1856 break;}
1857case 62:
1858#line 782 "asn1p_y.y"
1859{
vlmfa67ddc2004-06-03 03:38:44 +00001860 int ret;
vlm0c6d3812006-03-21 03:40:38 +00001861 yyval.a_plist = asn1p_paramlist_new(yylineno);
1862 checkmem(yyval.a_plist);
1863 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
vlmfa67ddc2004-06-03 03:38:44 +00001864 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00001865 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1866 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
1867 ;
1868 break;}
1869case 63:
1870#line 791 "asn1p_y.y"
1871{
vlmfa67ddc2004-06-03 03:38:44 +00001872 int ret;
vlm0c6d3812006-03-21 03:40:38 +00001873 yyval.a_plist = yyvsp[-2].a_plist;
1874 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
vlmfa67ddc2004-06-03 03:38:44 +00001875 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00001876 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1877 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
1878 ;
1879 break;}
1880case 64:
1881#line 802 "asn1p_y.y"
1882{
1883 yyval.a_parg.governor = NULL;
1884 yyval.a_parg.argument = yyvsp[0].tv_str;
1885 ;
1886 break;}
1887case 65:
1888#line 806 "asn1p_y.y"
1889{
vlmdc7cf042006-03-09 08:49:26 +00001890 int ret;
vlm0c6d3812006-03-21 03:40:38 +00001891 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1892 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
vlmdc7cf042006-03-09 08:49:26 +00001893 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00001894 yyval.a_parg.argument = yyvsp[0].tv_str;
1895 ;
1896 break;}
1897case 66:
1898#line 813 "asn1p_y.y"
1899{
vlm931aeed2005-08-12 10:09:10 +00001900 int ret;
vlm0c6d3812006-03-21 03:40:38 +00001901 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1902 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
vlm931aeed2005-08-12 10:09:10 +00001903 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00001904 yyval.a_parg.argument = yyvsp[0].tv_str;
1905 ;
1906 break;}
1907case 67:
1908#line 820 "asn1p_y.y"
1909{
vlm4053ca52005-02-18 16:34:21 +00001910 int ret;
vlm0c6d3812006-03-21 03:40:38 +00001911 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1912 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1913 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
vlmfa67ddc2004-06-03 03:38:44 +00001914 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00001915 yyval.a_parg.argument = yyvsp[0].tv_str;
1916 ;
1917 break;}
1918case 68:
1919#line 831 "asn1p_y.y"
1920{
1921 yyval.a_expr = asn1p_expr_new(yylineno);
1922 checkmem(yyval.a_expr);
1923 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1924 ;
1925 break;}
1926case 69:
1927#line 836 "asn1p_y.y"
1928{
1929 yyval.a_expr = yyvsp[-2].a_expr;
1930 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1931 ;
1932 break;}
1933case 70:
1934#line 843 "asn1p_y.y"
1935{
1936 yyval.a_expr = yyvsp[0].a_expr;
1937 ;
1938 break;}
1939case 71:
1940#line 846 "asn1p_y.y"
1941{
1942 asn1p_ref_t *ref;
1943 yyval.a_expr = asn1p_expr_new(yylineno);
1944 checkmem(yyval.a_expr);
1945 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1946 yyval.a_expr->expr_type = A1TC_REFERENCE;
1947 yyval.a_expr->meta_type = AMT_VALUE;
1948 ref = asn1p_ref_new(yylineno);
1949 asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
1950 yyval.a_expr->value = asn1p_value_fromref(ref, 0);
1951 ;
1952 break;}
1953case 72:
1954#line 874 "asn1p_y.y"
1955{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1956 break;}
1957case 73:
vlm7259fdc2006-03-16 22:39:56 +00001958#line 875 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00001959{ yyval.a_expr = yyvsp[0].a_expr; ;
1960 break;}
1961case 74:
1962#line 878 "asn1p_y.y"
1963{
1964 yyval.a_expr = asn1p_expr_new(yylineno);
1965 checkmem(yyval.a_expr);
1966 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1967 ;
1968 break;}
1969case 75:
1970#line 883 "asn1p_y.y"
1971{
1972 yyval.a_expr = yyvsp[-2].a_expr;
1973 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1974 ;
1975 break;}
1976case 76:
1977#line 890 "asn1p_y.y"
1978{
1979 yyval.a_expr = yyvsp[-1].a_expr;
1980 assert(yyval.a_expr->Identifier == 0);
1981 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1982 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
1983 yyval.a_expr->marker = yyvsp[0].a_marker;
1984 ;
1985 break;}
1986case 77:
1987#line 897 "asn1p_y.y"
1988{
1989 yyval.a_expr = yyvsp[-1].a_expr;
1990 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
1991 yyval.a_expr->marker = yyvsp[0].a_marker;
1992 _fixup_anonymous_identifier(yyval.a_expr);
1993 ;
1994 break;}
1995case 78:
1996#line 903 "asn1p_y.y"
1997{
1998 yyval.a_expr = asn1p_expr_new(yylineno);
1999 checkmem(yyval.a_expr);
2000 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2001 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
2002 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2003 ;
2004 break;}
2005case 79:
2006#line 910 "asn1p_y.y"
2007{
2008 yyval.a_expr = yyvsp[0].a_expr;
2009 ;
2010 break;}
2011case 80:
2012#line 916 "asn1p_y.y"
2013{
2014 yyval.a_expr = asn1p_expr_new(yylineno);
2015 checkmem(yyval.a_expr);
2016 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2017 ;
2018 break;}
2019case 81:
2020#line 921 "asn1p_y.y"
2021{
2022 yyval.a_expr = yyvsp[-2].a_expr;
2023 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2024 ;
2025 break;}
2026case 82:
2027#line 928 "asn1p_y.y"
2028{
2029 yyval.a_expr = yyvsp[0].a_expr;
2030 assert(yyval.a_expr->Identifier == 0);
2031 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2032 ;
2033 break;}
2034case 83:
vlm7259fdc2006-03-16 22:39:56 +00002035#line 933 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002036{
2037 yyval.a_expr = yyvsp[0].a_expr;
2038 ;
2039 break;}
2040case 84:
2041#line 936 "asn1p_y.y"
2042{
2043 yyval.a_expr = yyvsp[0].a_expr;
2044 _fixup_anonymous_identifier(yyval.a_expr);
2045 ;
2046 break;}
2047case 85:
2048#line 943 "asn1p_y.y"
2049{
2050 yyval.a_expr = yyvsp[-2].a_expr;
2051 checkmem(yyval.a_expr);
2052 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2053 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2054 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
2055 ;
2056 break;}
2057case 86:
2058#line 953 "asn1p_y.y"
2059{ yyval.a_int = 0; ;
2060 break;}
2061case 87:
2062#line 954 "asn1p_y.y"
2063{ yyval.a_int = 1; ;
2064 break;}
2065case 88:
2066#line 958 "asn1p_y.y"
2067{
2068 yyval.a_expr = asn1p_expr_new(yylineno);
2069 checkmem(yyval.a_expr);
2070 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2071 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2072 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2073 ;
2074 break;}
2075case 89:
2076#line 965 "asn1p_y.y"
2077{
2078 yyval.a_expr = yyvsp[-2].a_expr;
2079 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2080 ;
2081 break;}
2082case 90:
2083#line 975 "asn1p_y.y"
2084{
2085 yyval.a_expr = asn1p_expr_new(yylineno);
2086 checkmem(yyval.a_expr);
2087 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2088 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2089 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2090 yyval.a_expr->marker = yyvsp[0].a_marker;
2091 ;
2092 break;}
2093case 91:
2094#line 985 "asn1p_y.y"
2095{
2096 yyval.a_expr = asn1p_expr_new(yylineno);
2097 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2098 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2099 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2100 yyval.a_expr->unique = yyvsp[-1].a_int;
2101 yyval.a_expr->marker = yyvsp[0].a_marker;
2102 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
2103 ;
2104 break;}
2105case 92:
2106#line 996 "asn1p_y.y"
2107{
2108 yyval.a_expr = asn1p_expr_new(yylineno);
2109 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2110 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2111 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2112 yyval.a_expr->reference = yyvsp[-1].a_ref;
2113 yyval.a_expr->marker = yyvsp[0].a_marker;
2114 ;
2115 break;}
2116case 93:
2117#line 1006 "asn1p_y.y"
2118{
2119 yyval.a_expr = asn1p_expr_new(yylineno);
2120 checkmem(yyval.a_expr);
2121 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2122 yyval.a_expr->reference = yyvsp[-1].a_ref;
2123 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2124 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2125 yyval.a_expr->marker = yyvsp[0].a_marker;
2126 ;
2127 break;}
2128case 94:
2129#line 1017 "asn1p_y.y"
2130{
2131 yyval.a_expr = asn1p_expr_new(yylineno);
2132 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2133 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2134 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2135 yyval.a_expr->reference = yyvsp[-1].a_ref;
2136 yyval.a_expr->marker = yyvsp[0].a_marker;
2137 ;
2138 break;}
2139case 95:
2140#line 1027 "asn1p_y.y"
2141{
2142 yyval.a_expr = asn1p_expr_new(yylineno);
2143 checkmem(yyval.a_expr);
2144 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2145 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2146 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2147 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
2148 yyval.a_expr->marker = yyvsp[0].a_marker;
2149 ;
2150 break;}
2151case 96:
2152#line 1038 "asn1p_y.y"
2153{
2154 yyval.a_expr = asn1p_expr_new(yylineno);
2155 checkmem(yyval.a_expr);
2156 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2157 yyval.a_expr->reference = yyvsp[-1].a_ref;
2158 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2159 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2160 yyval.a_expr->marker = yyvsp[0].a_marker;
2161 ;
2162 break;}
2163case 97:
2164#line 1050 "asn1p_y.y"
2165{ yyval.a_wsynt = 0; ;
2166 break;}
2167case 98:
2168#line 1051 "asn1p_y.y"
2169{
2170 yyval.a_wsynt = yyvsp[0].a_wsynt;
2171 ;
2172 break;}
2173case 99:
2174#line 1058 "asn1p_y.y"
2175{ asn1p_lexer_hack_enable_with_syntax(); ;
2176 break;}
2177case 100:
2178#line 1060 "asn1p_y.y"
2179{
2180 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2181 ;
2182 break;}
2183case 101:
2184#line 1066 "asn1p_y.y"
2185{
2186 yyval.a_wsynt = asn1p_wsyntx_new();
2187 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
2188 ;
2189 break;}
2190case 102:
2191#line 1070 "asn1p_y.y"
2192{
2193 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2194 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
2195 ;
2196 break;}
2197case 103:
2198#line 1077 "asn1p_y.y"
2199{
2200 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2201 yyval.a_wchunk->type = WC_WHITESPACE;
2202 ;
2203 break;}
2204case 104:
vlm7259fdc2006-03-16 22:39:56 +00002205#line 1081 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002206{
2207 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_str, strlen(yyvsp[0].tv_str), 0);
2208 ;
2209 break;}
2210case 105:
2211#line 1084 "asn1p_y.y"
2212{
2213 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].a_refcomp.name, strlen(yyvsp[0].a_refcomp.name), 0);
2214 yyval.a_wchunk->type = WC_FIELD;
2215 ;
2216 break;}
2217case 106:
2218#line 1088 "asn1p_y.y"
2219{
2220 yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
2221 ;
2222 break;}
2223case 107:
2224#line 1094 "asn1p_y.y"
2225{
2226 yyval.a_expr = asn1p_expr_new(yylineno);
2227 checkmem(yyval.a_expr);
2228 yyval.a_expr->Identifier = strdup("...");
2229 checkmem(yyval.a_expr->Identifier);
2230 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2231 yyval.a_expr->meta_type = AMT_TYPE;
2232 ;
2233 break;}
2234case 108:
2235#line 1102 "asn1p_y.y"
2236{
2237 yyval.a_expr = asn1p_expr_new(yylineno);
2238 checkmem(yyval.a_expr);
2239 yyval.a_expr->Identifier = strdup("...");
2240 checkmem(yyval.a_expr->Identifier);
2241 yyval.a_expr->value = yyvsp[0].a_value;
2242 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2243 yyval.a_expr->meta_type = AMT_TYPE;
2244 ;
2245 break;}
2246case 109:
2247#line 1111 "asn1p_y.y"
2248{
2249 yyval.a_expr = asn1p_expr_new(yylineno);
2250 checkmem(yyval.a_expr);
2251 yyval.a_expr->Identifier = strdup("...");
2252 yyval.a_expr->value = yyvsp[0].a_value;
2253 checkmem(yyval.a_expr->Identifier);
2254 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2255 yyval.a_expr->meta_type = AMT_TYPE;
2256 ;
2257 break;}
2258case 110:
2259#line 1123 "asn1p_y.y"
2260{
2261 yyval.a_expr = yyvsp[-1].a_expr;
2262 yyval.a_expr->tag = yyvsp[-2].a_tag;
vlmec8f6812004-08-22 03:19:54 +00002263 /*
2264 * Outer constraint for SEQUENCE OF and SET OF applies
2265 * to the inner type.
2266 */
vlm0c6d3812006-03-21 03:40:38 +00002267 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2268 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2269 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2270 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002271 } else {
vlm0c6d3812006-03-21 03:40:38 +00002272 if(yyval.a_expr->constraints) {
2273 assert(!yyvsp[-1].a_expr);
vlmec8f6812004-08-22 03:19:54 +00002274 } else {
vlm0c6d3812006-03-21 03:40:38 +00002275 yyval.a_expr->constraints = yyvsp[0].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002276 }
2277 }
vlm0c6d3812006-03-21 03:40:38 +00002278 ;
2279 break;}
2280case 111:
2281#line 1145 "asn1p_y.y"
2282{
2283 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
vlm7e436752006-03-18 06:53:11 +00002284 asn1p_as_pointer = 0;
vlm0c6d3812006-03-21 03:40:38 +00002285 ;
2286 break;}
2287case 112:
2288#line 1152 "asn1p_y.y"
2289{
2290 yyval.a_expr = yyvsp[0].a_expr;
2291 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
vlm7e436752006-03-18 06:53:11 +00002292
vlm0c6d3812006-03-21 03:40:38 +00002293 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2294 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
vlm177a5b62005-09-05 05:17:57 +00002295 fprintf(stderr,
2296 "INFO: Directive <ASN1C:RepresentAsPointer> "
2297 "applied to %s at line %d\n",
vlm0c6d3812006-03-21 03:40:38 +00002298 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2299 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
vlm177a5b62005-09-05 05:17:57 +00002300 : "member",
vlm0c6d3812006-03-21 03:40:38 +00002301 yyval.a_expr->_lineno
vlm177a5b62005-09-05 05:17:57 +00002302 );
2303 }
vlm0c6d3812006-03-21 03:40:38 +00002304 ;
2305 break;}
2306case 113:
vlm7259fdc2006-03-16 22:39:56 +00002307#line 1171 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002308{
2309 yyval.a_expr = yyvsp[0].a_expr;
2310 ;
2311 break;}
2312case 114:
2313#line 1174 "asn1p_y.y"
2314{
2315 yyval.a_expr = yyvsp[-1].a_expr;
2316 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2317 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2318 yyval.a_expr->meta_type = AMT_TYPE;
2319 ;
2320 break;}
2321case 115:
2322#line 1180 "asn1p_y.y"
2323{
2324 yyval.a_expr = yyvsp[-1].a_expr;
2325 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2326 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2327 yyval.a_expr->meta_type = AMT_TYPE;
2328 ;
2329 break;}
2330case 116:
2331#line 1186 "asn1p_y.y"
2332{
2333 yyval.a_expr = yyvsp[-1].a_expr;
2334 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2335 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2336 yyval.a_expr->meta_type = AMT_TYPE;
2337 ;
2338 break;}
2339case 117:
2340#line 1192 "asn1p_y.y"
2341{
2342 yyval.a_expr = asn1p_expr_new(yylineno);
2343 checkmem(yyval.a_expr);
2344 yyval.a_expr->constraints = yyvsp[-4].a_constr;
2345 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2346 yyval.a_expr->meta_type = AMT_TYPE;
2347 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
2348 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
2349 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2350 ;
2351 break;}
2352case 118:
2353#line 1202 "asn1p_y.y"
2354{
2355 yyval.a_expr = asn1p_expr_new(yylineno);
2356 checkmem(yyval.a_expr);
2357 yyval.a_expr->constraints = yyvsp[-4].a_constr;
2358 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2359 yyval.a_expr->meta_type = AMT_TYPE;
2360 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
2361 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
2362 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2363 ;
2364 break;}
2365case 119:
2366#line 1212 "asn1p_y.y"
2367{
2368 yyval.a_expr = asn1p_expr_new(yylineno);
2369 checkmem(yyval.a_expr);
2370 yyval.a_expr->expr_type = ASN_TYPE_ANY;
2371 yyval.a_expr->meta_type = AMT_TYPE;
2372 ;
2373 break;}
2374case 120:
2375#line 1218 "asn1p_y.y"
2376{
vlmec8f6812004-08-22 03:19:54 +00002377 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002378 yyval.a_expr = asn1p_expr_new(yylineno);
2379 checkmem(yyval.a_expr);
2380 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2381 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2382 yyvsp[0].tv_str, RLT_lowercase);
vlmec8f6812004-08-22 03:19:54 +00002383 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002384 yyval.a_expr->expr_type = ASN_TYPE_ANY;
2385 yyval.a_expr->meta_type = AMT_TYPE;
2386 ;
2387 break;}
2388case 121:
2389#line 1239 "asn1p_y.y"
2390{
2391 yyval.a_expr = asn1p_expr_new(yylineno);
2392 checkmem(yyval.a_expr);
2393 yyval.a_expr->reference = yyvsp[0].a_ref;
2394 yyval.a_expr->expr_type = A1TC_REFERENCE;
2395 yyval.a_expr->meta_type = AMT_TYPEREF;
2396 ;
2397 break;}
2398case 122:
2399#line 1249 "asn1p_y.y"
2400{
2401 yyval.a_expr = asn1p_expr_new(yylineno);
2402 checkmem(yyval.a_expr);
2403 yyval.a_expr->reference = yyvsp[-3].a_ref;
2404 yyval.a_expr->rhs_pspecs = yyvsp[-1].a_expr;
2405 yyval.a_expr->expr_type = A1TC_REFERENCE;
2406 yyval.a_expr->meta_type = AMT_TYPEREF;
2407 ;
2408 break;}
2409case 123:
2410#line 1257 "asn1p_y.y"
2411{
2412 yyval.a_expr = asn1p_expr_new(yylineno);
2413 checkmem(yyval.a_expr);
2414 yyval.a_expr->reference = yyvsp[0].a_ref;
2415 yyval.a_expr->expr_type = A1TC_INSTANCE;
2416 yyval.a_expr->meta_type = AMT_TYPE;
2417 ;
2418 break;}
2419case 124:
2420#line 1272 "asn1p_y.y"
2421{
vlmfa67ddc2004-06-03 03:38:44 +00002422 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002423 yyval.a_ref = asn1p_ref_new(yylineno);
2424 checkmem(yyval.a_ref);
2425 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
vlmfa67ddc2004-06-03 03:38:44 +00002426 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002427 free(yyvsp[0].tv_str);
2428 ;
2429 break;}
2430case 125:
2431#line 1280 "asn1p_y.y"
2432{
vlmfa67ddc2004-06-03 03:38:44 +00002433 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002434 yyval.a_ref = asn1p_ref_new(yylineno);
2435 checkmem(yyval.a_ref);
2436 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
vlmfa67ddc2004-06-03 03:38:44 +00002437 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002438 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2439 checkmem(ret == 0);
2440 free(yyvsp[-2].tv_str);
2441 ;
2442 break;}
2443case 126:
2444#line 1290 "asn1p_y.y"
2445{
vlm808411d2006-03-14 16:31:37 +00002446 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002447 yyval.a_ref = asn1p_ref_new(yylineno);
2448 checkmem(yyval.a_ref);
2449 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
vlm808411d2006-03-14 16:31:37 +00002450 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002451 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
vlm808411d2006-03-14 16:31:37 +00002452 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002453 free(yyvsp[-2].tv_str);
2454 ;
2455 break;}
2456case 127:
2457#line 1300 "asn1p_y.y"
2458{
vlm808411d2006-03-14 16:31:37 +00002459 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002460 yyval.a_ref = asn1p_ref_new(yylineno);
2461 checkmem(yyval.a_ref);
2462 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
vlm808411d2006-03-14 16:31:37 +00002463 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002464 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
vlm808411d2006-03-14 16:31:37 +00002465 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002466 free(yyvsp[-2].tv_str);
2467 ;
2468 break;}
2469case 128:
2470#line 1310 "asn1p_y.y"
2471{
vlmfa67ddc2004-06-03 03:38:44 +00002472 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002473 yyval.a_ref = asn1p_ref_new(yylineno);
2474 checkmem(yyval.a_ref);
2475 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2476 free(yyvsp[0].tv_str);
vlmc94e28f2004-09-15 11:59:51 +00002477 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002478 ;
2479 break;}
2480case 129:
2481#line 1318 "asn1p_y.y"
2482{
vlmc94e28f2004-09-15 11:59:51 +00002483 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002484 yyval.a_ref = yyvsp[0].a_ref;
2485 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2486 free(yyvsp[-2].tv_str);
vlmfa67ddc2004-06-03 03:38:44 +00002487 checkmem(ret == 0);
2488 /*
2489 * Move the last element infront.
2490 */
2491 {
2492 struct asn1p_ref_component_s tmp_comp;
vlm0c6d3812006-03-21 03:40:38 +00002493 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2494 memmove(&yyval.a_ref->components[1],
2495 &yyval.a_ref->components[0],
2496 sizeof(yyval.a_ref->components[0])
2497 * (yyval.a_ref->comp_count - 1));
2498 yyval.a_ref->components[0] = tmp_comp;
vlmfa67ddc2004-06-03 03:38:44 +00002499 }
vlm0c6d3812006-03-21 03:40:38 +00002500 ;
2501 break;}
2502case 130:
2503#line 1340 "asn1p_y.y"
2504{
vlmfa67ddc2004-06-03 03:38:44 +00002505 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002506 yyval.a_ref = asn1p_ref_new(yylineno);
2507 checkmem(yyval.a_ref);
2508 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2509 free(yyvsp[0].a_refcomp.name);
vlmfa67ddc2004-06-03 03:38:44 +00002510 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002511 ;
2512 break;}
2513case 131:
2514#line 1348 "asn1p_y.y"
2515{
vlmfa67ddc2004-06-03 03:38:44 +00002516 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002517 yyval.a_ref = yyvsp[-2].a_ref;
2518 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2519 free(yyvsp[0].a_refcomp.name);
vlmfa67ddc2004-06-03 03:38:44 +00002520 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002521 ;
2522 break;}
2523case 133:
2524#line 1361 "asn1p_y.y"
2525{
2526 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2527 yyval.a_refcomp.name = yyvsp[0].tv_str;
2528 ;
2529 break;}
2530case 134:
2531#line 1366 "asn1p_y.y"
2532{
2533 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2534 yyval.a_refcomp.name = yyvsp[0].tv_str;
2535 ;
2536 break;}
2537case 135:
2538#line 1375 "asn1p_y.y"
2539{
2540 yyval.a_ref = asn1p_ref_new(yylineno);
2541 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2542 ;
2543 break;}
2544case 136:
2545#line 1379 "asn1p_y.y"
2546{
2547 yyval.a_ref = yyval.a_ref;
2548 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2549 ;
2550 break;}
2551case 137:
2552#line 1383 "asn1p_y.y"
2553{
2554 yyval.a_ref = yyval.a_ref;
2555 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
2556 ;
2557 break;}
2558case 138:
2559#line 1390 "asn1p_y.y"
2560{
2561 yyval.a_ref = asn1p_ref_new(yylineno);
2562 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2563 ;
2564 break;}
2565case 139:
2566#line 1410 "asn1p_y.y"
2567{
2568 yyval.a_expr = yyvsp[-2].a_expr;
2569 assert(yyval.a_expr->Identifier == NULL);
2570 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2571 yyval.a_expr->meta_type = AMT_VALUE;
2572 yyval.a_expr->value = yyvsp[0].a_value;
2573 ;
2574 break;}
2575case 140:
2576#line 1420 "asn1p_y.y"
2577{
2578 yyval.a_value = asn1p_value_fromint(0);
2579 checkmem(yyval.a_value);
2580 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2581 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2582 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2583 ;
2584 break;}
2585case 141:
2586#line 1427 "asn1p_y.y"
2587{ asn1p_lexer_hack_push_opaque_state(); ;
2588 break;}
2589case 142:
2590#line 1427 "asn1p_y.y"
2591{
2592 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2593 checkmem(yyval.a_value);
2594 yyval.a_value->type = ATV_UNPARSED;
2595 ;
2596 break;}
2597case 143:
2598#line 1432 "asn1p_y.y"
2599{
2600 yyval.a_value = asn1p_value_fromint(0);
2601 checkmem(yyval.a_value);
2602 yyval.a_value->type = ATV_NULL;
2603 ;
2604 break;}
2605case 144:
2606#line 1437 "asn1p_y.y"
2607{
2608 yyval.a_value = asn1p_value_fromint(0);
2609 checkmem(yyval.a_value);
2610 yyval.a_value->type = ATV_FALSE;
2611 ;
2612 break;}
2613case 145:
2614#line 1442 "asn1p_y.y"
2615{
2616 yyval.a_value = asn1p_value_fromint(0);
2617 checkmem(yyval.a_value);
2618 yyval.a_value->type = ATV_TRUE;
2619 ;
2620 break;}
2621case 146:
2622#line 1447 "asn1p_y.y"
2623{
2624 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2625 checkmem(yyval.a_value);
2626 ;
2627 break;}
2628case 147:
2629#line 1451 "asn1p_y.y"
2630{
2631 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2632 checkmem(yyval.a_value);
2633 ;
2634 break;}
2635case 148:
2636#line 1455 "asn1p_y.y"
2637{
2638 yyval.a_value = yyval.a_value;
2639 ;
2640 break;}
2641case 149:
vlm7259fdc2006-03-16 22:39:56 +00002642#line 1458 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002643{
2644 yyval.a_value = yyvsp[0].a_value;
2645 ;
2646 break;}
2647case 150:
vlm7259fdc2006-03-16 22:39:56 +00002648#line 1461 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002649{
2650 yyval.a_value = yyvsp[0].a_value;
2651 ;
2652 break;}
2653case 151:
2654#line 1467 "asn1p_y.y"
2655{
vlmfa67ddc2004-06-03 03:38:44 +00002656 asn1p_ref_t *ref;
2657 int ret;
2658 ref = asn1p_ref_new(yylineno);
2659 checkmem(ref);
vlm0c6d3812006-03-21 03:40:38 +00002660 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
vlmfa67ddc2004-06-03 03:38:44 +00002661 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002662 yyval.a_value = asn1p_value_fromref(ref, 0);
2663 checkmem(yyval.a_value);
2664 free(yyvsp[0].tv_str);
2665 ;
2666 break;}
2667case 152:
2668#line 1478 "asn1p_y.y"
2669{
vlmfa67ddc2004-06-03 03:38:44 +00002670 asn1p_ref_t *ref;
2671 int ret;
2672 ref = asn1p_ref_new(yylineno);
2673 checkmem(ref);
vlm0c6d3812006-03-21 03:40:38 +00002674 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
vlmfa67ddc2004-06-03 03:38:44 +00002675 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002676 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
vlmfa67ddc2004-06-03 03:38:44 +00002677 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002678 yyval.a_value = asn1p_value_fromref(ref, 0);
2679 checkmem(yyval.a_value);
2680 free(yyvsp[-2].tv_str);
2681 free(yyvsp[0].tv_str);
2682 ;
2683 break;}
2684case 153:
2685#line 1496 "asn1p_y.y"
2686{
2687 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2688 checkmem(yyval.a_value);
2689 ;
2690 break;}
2691case 154:
2692#line 1500 "asn1p_y.y"
2693{
2694 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
2695 checkmem(yyval.a_value);
2696 yyval.a_value->type = ATV_TUPLE;
2697 ;
2698 break;}
2699case 155:
2700#line 1505 "asn1p_y.y"
2701{
2702 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
2703 checkmem(yyval.a_value);
2704 yyval.a_value->type = ATV_QUADRUPLE;
2705 ;
2706 break;}
2707case 156:
2708#line 1539 "asn1p_y.y"
2709{
2710 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
2711 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2712 checkmem(yyval.tv_opaque.buf);
2713 yyval.tv_opaque.buf[0] = '{';
2714 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2715 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2716 free(yyvsp[0].tv_opaque.buf);
2717 ;
2718 break;}
2719case 157:
2720#line 1548 "asn1p_y.y"
2721{
2722 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
vlmfa67ddc2004-06-03 03:38:44 +00002723 char *p = malloc(newsize + 1);
2724 checkmem(p);
vlm0c6d3812006-03-21 03:40:38 +00002725 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2726 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
vlmfa67ddc2004-06-03 03:38:44 +00002727 p[newsize] = '\0';
vlm0c6d3812006-03-21 03:40:38 +00002728 free(yyvsp[-1].tv_opaque.buf);
2729 free(yyvsp[0].tv_opaque.buf);
2730 yyval.tv_opaque.buf = p;
2731 yyval.tv_opaque.len = newsize;
2732 ;
2733 break;}
2734case 158:
2735#line 1563 "asn1p_y.y"
2736{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2737 break;}
2738case 159:
2739#line 1564 "asn1p_y.y"
2740{ yyval.a_type = ASN_BASIC_NULL; ;
2741 break;}
2742case 160:
2743#line 1565 "asn1p_y.y"
2744{ yyval.a_type = ASN_BASIC_REAL; ;
2745 break;}
2746case 161:
vlm7259fdc2006-03-16 22:39:56 +00002747#line 1566 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002748{ yyval.a_type = yyvsp[0].a_type; ;
2749 break;}
2750case 162:
vlm7259fdc2006-03-16 22:39:56 +00002751#line 1567 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002752{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
2753 break;}
2754case 163:
vlm7259fdc2006-03-16 22:39:56 +00002755#line 1568 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002756{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
2757 break;}
2758case 164:
vlm7259fdc2006-03-16 22:39:56 +00002759#line 1569 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002760{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
2761 break;}
2762case 165:
vlm7259fdc2006-03-16 22:39:56 +00002763#line 1570 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002764{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
2765 break;}
2766case 166:
vlm7259fdc2006-03-16 22:39:56 +00002767#line 1571 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002768{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
2769 break;}
2770case 167:
vlm7259fdc2006-03-16 22:39:56 +00002771#line 1572 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002772{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
2773 break;}
2774case 168:
vlm7259fdc2006-03-16 22:39:56 +00002775#line 1573 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002776{ yyval.a_type = ASN_BASIC_UTCTime; ;
2777 break;}
2778case 169:
vlm7259fdc2006-03-16 22:39:56 +00002779#line 1574 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002780{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2781 break;}
2782case 170:
vlm7259fdc2006-03-16 22:39:56 +00002783#line 1575 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002784{ yyval.a_type = yyvsp[0].a_type; ;
2785 break;}
2786case 171:
2787#line 1582 "asn1p_y.y"
2788{ yyval.a_type = ASN_BASIC_INTEGER; ;
2789 break;}
2790case 172:
2791#line 1583 "asn1p_y.y"
2792{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2793 break;}
2794case 173:
2795#line 1584 "asn1p_y.y"
2796{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2797 break;}
2798case 174:
2799#line 1588 "asn1p_y.y"
2800{
2801 yyval.a_expr = asn1p_expr_new(yylineno);
2802 checkmem(yyval.a_expr);
2803 yyval.a_expr->expr_type = yyvsp[0].a_type;
2804 yyval.a_expr->meta_type = AMT_TYPE;
2805 ;
2806 break;}
2807case 175:
2808#line 1594 "asn1p_y.y"
2809{
2810 if(yyvsp[0].a_expr) {
2811 yyval.a_expr = yyvsp[0].a_expr;
vlmfa67ddc2004-06-03 03:38:44 +00002812 } else {
vlm0c6d3812006-03-21 03:40:38 +00002813 yyval.a_expr = asn1p_expr_new(yylineno);
2814 checkmem(yyval.a_expr);
vlmfa67ddc2004-06-03 03:38:44 +00002815 }
vlm0c6d3812006-03-21 03:40:38 +00002816 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2817 yyval.a_expr->meta_type = AMT_TYPE;
2818 ;
2819 break;}
2820case 176:
2821#line 1607 "asn1p_y.y"
2822{ yyval.a_type = ASN_STRING_BMPString; ;
2823 break;}
2824case 177:
2825#line 1608 "asn1p_y.y"
2826{
2827 yyval.a_type = ASN_STRING_GeneralString;
vlmc94e28f2004-09-15 11:59:51 +00002828 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
vlm0c6d3812006-03-21 03:40:38 +00002829 ;
2830 break;}
2831case 178:
2832#line 1612 "asn1p_y.y"
2833{
2834 yyval.a_type = ASN_STRING_GraphicString;
vlmc94e28f2004-09-15 11:59:51 +00002835 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
vlm0c6d3812006-03-21 03:40:38 +00002836 ;
2837 break;}
2838case 179:
2839#line 1616 "asn1p_y.y"
2840{ yyval.a_type = ASN_STRING_IA5String; ;
2841 break;}
2842case 180:
2843#line 1617 "asn1p_y.y"
2844{ yyval.a_type = ASN_STRING_ISO646String; ;
2845 break;}
2846case 181:
2847#line 1618 "asn1p_y.y"
2848{ yyval.a_type = ASN_STRING_NumericString; ;
2849 break;}
2850case 182:
vlm7259fdc2006-03-16 22:39:56 +00002851#line 1619 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002852{ yyval.a_type = ASN_STRING_PrintableString; ;
2853 break;}
2854case 183:
vlm7259fdc2006-03-16 22:39:56 +00002855#line 1620 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002856{
2857 yyval.a_type = ASN_STRING_T61String;
vlmc94e28f2004-09-15 11:59:51 +00002858 fprintf(stderr, "WARNING: T61String is not fully supported\n");
vlm0c6d3812006-03-21 03:40:38 +00002859 ;
2860 break;}
2861case 184:
2862#line 1624 "asn1p_y.y"
2863{ yyval.a_type = ASN_STRING_TeletexString; ;
2864 break;}
2865case 185:
2866#line 1625 "asn1p_y.y"
2867{ yyval.a_type = ASN_STRING_UniversalString; ;
2868 break;}
2869case 186:
2870#line 1626 "asn1p_y.y"
2871{ yyval.a_type = ASN_STRING_UTF8String; ;
2872 break;}
2873case 187:
vlm7259fdc2006-03-16 22:39:56 +00002874#line 1627 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002875{
2876 yyval.a_type = ASN_STRING_VideotexString;
vlmc94e28f2004-09-15 11:59:51 +00002877 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
vlm0c6d3812006-03-21 03:40:38 +00002878 ;
2879 break;}
2880case 188:
2881#line 1631 "asn1p_y.y"
2882{ yyval.a_type = ASN_STRING_VisibleString; ;
2883 break;}
2884case 189:
2885#line 1632 "asn1p_y.y"
2886{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2887 break;}
2888case 195:
2889#line 1644 "asn1p_y.y"
2890{ yyval.a_constr = 0; ;
2891 break;}
2892case 196:
2893#line 1645 "asn1p_y.y"
2894{
2895 yyval.a_constr = yyvsp[0].a_constr;
2896 ;
2897 break;}
2898case 197:
2899#line 1651 "asn1p_y.y"
2900{
2901 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
2902 ;
2903 break;}
2904case 198:
vlm7259fdc2006-03-16 22:39:56 +00002905#line 1654 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002906{
vlmfa67ddc2004-06-03 03:38:44 +00002907 /*
2908 * This is a special case, for compatibility purposes.
vlm9283dbe2004-08-18 04:59:12 +00002909 * It goes without parentheses.
vlmfa67ddc2004-06-03 03:38:44 +00002910 */
vlm0c6d3812006-03-21 03:40:38 +00002911 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
2912 ;
2913 break;}
2914case 199:
2915#line 1664 "asn1p_y.y"
2916{
2917 yyval.a_constr = yyvsp[-1].a_constr;
2918 ;
2919 break;}
2920case 200:
vlm7259fdc2006-03-16 22:39:56 +00002921#line 1667 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002922{
2923 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
2924 ;
2925 break;}
2926case 201:
2927#line 1673 "asn1p_y.y"
2928{
2929 yyval.a_constr = yyvsp[0].a_constr;
2930 ;
2931 break;}
2932case 202:
vlm7259fdc2006-03-16 22:39:56 +00002933#line 1676 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002934{
vlmfa67ddc2004-06-03 03:38:44 +00002935 asn1p_constraint_t *ct;
2936 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002937 ct->type = ACT_EL_EXT;
vlm0c6d3812006-03-21 03:40:38 +00002938 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
2939 ;
2940 break;}
2941case 203:
2942#line 1682 "asn1p_y.y"
2943{
vlmfa67ddc2004-06-03 03:38:44 +00002944 asn1p_constraint_t *ct;
2945 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002946 ct->type = ACT_EL_EXT;
vlm0c6d3812006-03-21 03:40:38 +00002947 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
2948 ct = yyval.a_constr;
2949 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
2950 ;
2951 break;}
2952case 204:
2953#line 1693 "asn1p_y.y"
2954{
2955 yyval.a_constr = yyvsp[0].a_constr;
2956 ;
2957 break;}
2958case 205:
vlm7259fdc2006-03-16 22:39:56 +00002959#line 1696 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002960{
2961 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2962 ;
2963 break;}
2964case 206:
vlm7259fdc2006-03-16 22:39:56 +00002965#line 1699 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002966{
2967 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
2968 ;
2969 break;}
2970case 207:
vlm7259fdc2006-03-16 22:39:56 +00002971#line 1702 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002972{
2973 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
2974 ;
2975 break;}
2976case 208:
vlm7259fdc2006-03-16 22:39:56 +00002977#line 1705 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00002978{
2979 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
2980 ;
2981 break;}
2982case 209:
2983#line 1711 "asn1p_y.y"
2984{
vlmfa67ddc2004-06-03 03:38:44 +00002985 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002986 yyval.a_constr = asn1p_constraint_new(yylineno);
2987 checkmem(yyval.a_constr);
2988 yyval.a_constr->type = yyvsp[-3].a_ctype;
2989 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
vlmfa67ddc2004-06-03 03:38:44 +00002990 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002991 ;
2992 break;}
2993case 210:
2994#line 1719 "asn1p_y.y"
2995{
vlm9283dbe2004-08-18 04:59:12 +00002996 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002997 yyval.a_constr = asn1p_constraint_new(yylineno);
2998 checkmem(yyval.a_constr);
2999 yyval.a_constr->type = ACT_CA_SET;
3000 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
vlm9283dbe2004-08-18 04:59:12 +00003001 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003002 ;
3003 break;}
3004case 211:
3005#line 1727 "asn1p_y.y"
3006{
3007 yyval.a_constr = asn1p_constraint_new(yylineno);
3008 checkmem(yyval.a_constr);
3009 yyval.a_constr->type = ACT_EL_VALUE;
3010 yyval.a_constr->value = yyvsp[0].a_value;
3011 ;
3012 break;}
3013case 212:
3014#line 1733 "asn1p_y.y"
3015{
3016 yyval.a_constr = asn1p_constraint_new(yylineno);
3017 checkmem(yyval.a_constr);
3018 yyval.a_constr->type = ACT_EL_TYPE;
3019 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
3020 ;
3021 break;}
3022case 213:
3023#line 1739 "asn1p_y.y"
3024{
3025 yyval.a_constr = asn1p_constraint_new(yylineno);
3026 checkmem(yyval.a_constr);
3027 yyval.a_constr->type = yyvsp[-1].a_ctype;
3028 yyval.a_constr->range_start = yyvsp[-2].a_value;
3029 yyval.a_constr->range_stop = yyvsp[0].a_value;
3030 ;
3031 break;}
3032case 214:
3033#line 1746 "asn1p_y.y"
3034{
3035 yyval.a_constr = asn1p_constraint_new(yylineno);
3036 checkmem(yyval.a_constr);
3037 yyval.a_constr->type = yyvsp[-1].a_ctype;
3038 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3039 yyval.a_constr->range_stop = yyvsp[0].a_value;
3040 yyval.a_constr->range_start->type = ATV_MIN;
3041 ;
3042 break;}
3043case 215:
3044#line 1754 "asn1p_y.y"
3045{
3046 yyval.a_constr = asn1p_constraint_new(yylineno);
3047 checkmem(yyval.a_constr);
3048 yyval.a_constr->type = yyvsp[-1].a_ctype;
3049 yyval.a_constr->range_start = yyvsp[-2].a_value;
3050 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3051 yyval.a_constr->range_stop->type = ATV_MAX;
3052 ;
3053 break;}
3054case 216:
3055#line 1762 "asn1p_y.y"
3056{
3057 yyval.a_constr = asn1p_constraint_new(yylineno);
3058 checkmem(yyval.a_constr);
3059 yyval.a_constr->type = yyvsp[-1].a_ctype;
3060 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3061 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3062 yyval.a_constr->range_start->type = ATV_MIN;
3063 yyval.a_constr->range_stop->type = ATV_MAX;
3064 ;
3065 break;}
3066case 217:
3067#line 1771 "asn1p_y.y"
3068{
3069 yyval.a_constr = yyvsp[0].a_constr;
3070 ;
3071 break;}
3072case 218:
vlm7259fdc2006-03-16 22:39:56 +00003073#line 1774 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00003074{
3075 yyval.a_constr = yyvsp[0].a_constr;
3076 ;
3077 break;}
3078case 219:
3079#line 1778 "asn1p_y.y"
3080{ asn1p_lexer_hack_push_opaque_state(); ;
3081 break;}
3082case 220:
3083#line 1778 "asn1p_y.y"
3084{
3085 yyval.a_constr = asn1p_constraint_new(yylineno);
3086 checkmem(yyval.a_constr);
3087 yyval.a_constr->type = ACT_CT_CTDBY;
3088 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3089 checkmem(yyval.a_constr->value);
3090 yyval.a_constr->value->type = ATV_UNPARSED;
3091 ;
3092 break;}
3093case 221:
3094#line 1789 "asn1p_y.y"
3095{ yyval.a_ctype = ACT_EL_RANGE; ;
3096 break;}
3097case 222:
3098#line 1790 "asn1p_y.y"
3099{ yyval.a_ctype = ACT_EL_RLRANGE; ;
3100 break;}
3101case 223:
3102#line 1791 "asn1p_y.y"
3103{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3104 break;}
3105case 224:
vlm7259fdc2006-03-16 22:39:56 +00003106#line 1792 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00003107{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3108 break;}
3109case 225:
3110#line 1796 "asn1p_y.y"
3111{
3112 yyval.a_ctype = ACT_CT_SIZE;
3113 ;
3114 break;}
3115case 226:
vlm7259fdc2006-03-16 22:39:56 +00003116#line 1799 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00003117{
3118 yyval.a_ctype = ACT_CT_FROM;
3119 ;
3120 break;}
3121case 227:
3122#line 1805 "asn1p_y.y"
3123{
3124 yyval.a_value = asn1p_value_fromint(0);
3125 checkmem(yyval.a_value);
3126 yyval.a_value->type = ATV_FALSE;
3127 ;
3128 break;}
3129case 228:
3130#line 1810 "asn1p_y.y"
3131{
3132 yyval.a_value = asn1p_value_fromint(1);
3133 checkmem(yyval.a_value);
3134 yyval.a_value->type = ATV_TRUE;
3135 ;
3136 break;}
3137case 229:
3138#line 1815 "asn1p_y.y"
3139{
3140 yyval.a_value = yyvsp[0].a_value;
3141 ;
3142 break;}
3143case 230:
vlm7259fdc2006-03-16 22:39:56 +00003144#line 1818 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00003145{
3146 yyval.a_value = yyvsp[0].a_value;
3147 ;
3148 break;}
3149case 231:
vlm7259fdc2006-03-16 22:39:56 +00003150#line 1821 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00003151{
vlmfa67ddc2004-06-03 03:38:44 +00003152 asn1p_ref_t *ref;
3153 int ret;
3154 ref = asn1p_ref_new(yylineno);
3155 checkmem(ref);
vlm0c6d3812006-03-21 03:40:38 +00003156 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
vlmfa67ddc2004-06-03 03:38:44 +00003157 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003158 yyval.a_value = asn1p_value_fromref(ref, 0);
3159 checkmem(yyval.a_value);
3160 free(yyvsp[0].tv_str);
3161 ;
3162 break;}
3163case 232:
3164#line 1835 "asn1p_y.y"
3165{
vlm4053ca52005-02-18 16:34:21 +00003166 asn1p_ref_t *ref;
3167 int ret;
3168 ref = asn1p_ref_new(yylineno);
3169 checkmem(ref);
vlm0c6d3812006-03-21 03:40:38 +00003170 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
vlm4053ca52005-02-18 16:34:21 +00003171 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003172 yyval.a_value = asn1p_value_fromref(ref, 0);
3173 checkmem(yyval.a_value);
3174 free(yyvsp[0].tv_str);
3175 ;
3176 break;}
3177case 233:
3178#line 1849 "asn1p_y.y"
3179{
3180 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
3181 ;
3182 break;}
3183case 234:
vlm7259fdc2006-03-16 22:39:56 +00003184#line 1852 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00003185{
3186 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
3187 ;
3188 break;}
3189case 235:
3190#line 1858 "asn1p_y.y"
3191{
3192 yyval.a_constr = yyvsp[0].a_constr;
3193 ;
3194 break;}
3195case 236:
vlm7259fdc2006-03-16 22:39:56 +00003196#line 1861 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00003197{
3198 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3199 ;
3200 break;}
3201case 237:
3202#line 1867 "asn1p_y.y"
3203{
3204 yyval.a_constr = asn1p_constraint_new(yylineno);
3205 checkmem(yyval.a_constr);
3206 yyval.a_constr->type = ACT_EL_EXT;
3207 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
3208 ;
3209 break;}
3210case 238:
3211#line 1873 "asn1p_y.y"
3212{
3213 yyval.a_constr = asn1p_constraint_new(yylineno);
3214 checkmem(yyval.a_constr);
3215 yyval.a_constr->type = ACT_EL_VALUE;
3216 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3217 yyval.a_constr->presence = yyvsp[0].a_pres;
3218 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
3219 ;
3220 break;}
3221case 239:
3222#line 1887 "asn1p_y.y"
3223{ yyval.a_pres = ACPRES_DEFAULT; ;
3224 break;}
3225case 240:
3226#line 1888 "asn1p_y.y"
3227{ yyval.a_pres = yyvsp[0].a_pres; ;
3228 break;}
3229case 241:
3230#line 1892 "asn1p_y.y"
3231{
3232 yyval.a_pres = ACPRES_PRESENT;
3233 ;
3234 break;}
3235case 242:
vlm7259fdc2006-03-16 22:39:56 +00003236#line 1895 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00003237{
3238 yyval.a_pres = ACPRES_ABSENT;
3239 ;
3240 break;}
3241case 243:
vlm7259fdc2006-03-16 22:39:56 +00003242#line 1898 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00003243{
3244 yyval.a_pres = ACPRES_OPTIONAL;
3245 ;
3246 break;}
3247case 244:
3248#line 1904 "asn1p_y.y"
3249{
3250 yyval.a_constr = yyvsp[0].a_constr;
3251 ;
3252 break;}
3253case 245:
vlm7259fdc2006-03-16 22:39:56 +00003254#line 1907 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00003255{
3256 yyval.a_constr = yyvsp[0].a_constr;
3257 ;
3258 break;}
3259case 246:
3260#line 1916 "asn1p_y.y"
3261{
vlmfa67ddc2004-06-03 03:38:44 +00003262 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3263 asn1p_constraint_t *ct;
3264 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003265 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
vlmfa67ddc2004-06-03 03:38:44 +00003266 checkmem(ret == 0);
3267 ct = asn1p_constraint_new(yylineno);
vlm0c6d3812006-03-21 03:40:38 +00003268 checkmem(yyval.a_constr);
vlmfa67ddc2004-06-03 03:38:44 +00003269 ct->type = ACT_EL_VALUE;
3270 ct->value = asn1p_value_fromref(ref, 0);
vlm0c6d3812006-03-21 03:40:38 +00003271 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
3272 ;
3273 break;}
3274case 247:
3275#line 1931 "asn1p_y.y"
3276{
3277 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
3278 ;
3279 break;}
3280case 248:
3281#line 1937 "asn1p_y.y"
3282{
3283 yyval.a_constr = asn1p_constraint_new(yylineno);
3284 checkmem(yyval.a_constr);
3285 yyval.a_constr->type = ACT_EL_VALUE;
3286 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3287 ;
3288 break;}
3289case 249:
3290#line 1943 "asn1p_y.y"
3291{
vlmfa67ddc2004-06-03 03:38:44 +00003292 asn1p_constraint_t *ct;
3293 ct = asn1p_constraint_new(yylineno);
3294 checkmem(ct);
3295 ct->type = ACT_EL_VALUE;
vlm0c6d3812006-03-21 03:40:38 +00003296 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3297 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
3298 ;
3299 break;}
3300case 250:
3301#line 1957 "asn1p_y.y"
3302{
3303 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
vlmfa67ddc2004-06-03 03:38:44 +00003304 int ret;
3305 *p = '@';
vlm0c6d3812006-03-21 03:40:38 +00003306 strcpy(p + 1, yyvsp[0].tv_str);
3307 yyval.a_ref = asn1p_ref_new(yylineno);
3308 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
vlmfa67ddc2004-06-03 03:38:44 +00003309 checkmem(ret == 0);
3310 free(p);
vlm0c6d3812006-03-21 03:40:38 +00003311 free(yyvsp[0].tv_str);
3312 ;
3313 break;}
3314case 251:
3315#line 1968 "asn1p_y.y"
3316{
3317 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
vlmfa67ddc2004-06-03 03:38:44 +00003318 int ret;
3319 p[0] = '@';
3320 p[1] = '.';
vlm0c6d3812006-03-21 03:40:38 +00003321 strcpy(p + 2, yyvsp[0].tv_str);
3322 yyval.a_ref = asn1p_ref_new(yylineno);
3323 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
vlmfa67ddc2004-06-03 03:38:44 +00003324 checkmem(ret == 0);
3325 free(p);
vlm0c6d3812006-03-21 03:40:38 +00003326 free(yyvsp[0].tv_str);
3327 ;
3328 break;}
3329case 252:
3330#line 1984 "asn1p_y.y"
3331{
3332 yyval.tv_str = yyvsp[0].tv_str;
3333 ;
3334 break;}
3335case 253:
vlm7259fdc2006-03-16 22:39:56 +00003336#line 1987 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00003337{
3338 int l1 = strlen(yyvsp[-2].tv_str);
3339 int l3 = strlen(yyvsp[0].tv_str);
3340 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3341 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3342 yyval.tv_str[l1] = '.';
3343 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3344 yyval.tv_str[l1 + 1 + l3] = '\0';
3345 ;
3346 break;}
3347case 254:
3348#line 2005 "asn1p_y.y"
3349{
3350 yyval.a_marker.flags = EM_NOMARK;
3351 yyval.a_marker.default_value = 0;
3352 ;
3353 break;}
3354case 255:
3355#line 2009 "asn1p_y.y"
3356{ yyval.a_marker = yyvsp[0].a_marker; ;
3357 break;}
3358case 256:
3359#line 2013 "asn1p_y.y"
3360{
3361 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
3362 yyval.a_marker.default_value = 0;
3363 ;
3364 break;}
3365case 257:
3366#line 2017 "asn1p_y.y"
3367{
3368 yyval.a_marker.flags = EM_DEFAULT;
3369 yyval.a_marker.default_value = yyvsp[0].a_value;
3370 ;
3371 break;}
3372case 258:
3373#line 2040 "asn1p_y.y"
3374{
3375 yyval.a_expr = asn1p_expr_new(yylineno);
3376 checkmem(yyval.a_expr);
3377 ;
3378 break;}
3379case 259:
3380#line 2044 "asn1p_y.y"
3381{
3382 yyval.a_expr = yyvsp[-1].a_expr;
3383 ;
3384 break;}
3385case 260:
3386#line 2050 "asn1p_y.y"
3387{
3388 yyval.a_expr = asn1p_expr_new(yylineno);
3389 checkmem(yyval.a_expr);
3390 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3391 ;
3392 break;}
3393case 261:
3394#line 2055 "asn1p_y.y"
3395{
3396 yyval.a_expr = yyvsp[-2].a_expr;
3397 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3398 ;
3399 break;}
3400case 262:
3401#line 2062 "asn1p_y.y"
3402{
3403 yyval.a_expr = asn1p_expr_new(yylineno);
3404 checkmem(yyval.a_expr);
3405 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3406 yyval.a_expr->meta_type = AMT_VALUE;
3407 yyval.a_expr->Identifier = yyvsp[0].tv_str;
3408 ;
3409 break;}
3410case 263:
3411#line 2069 "asn1p_y.y"
3412{
3413 yyval.a_expr = asn1p_expr_new(yylineno);
3414 checkmem(yyval.a_expr);
3415 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3416 yyval.a_expr->meta_type = AMT_VALUE;
3417 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3418 yyval.a_expr->value = yyvsp[-1].a_value;
3419 ;
3420 break;}
3421case 264:
3422#line 2077 "asn1p_y.y"
3423{
3424 yyval.a_expr = asn1p_expr_new(yylineno);
3425 checkmem(yyval.a_expr);
3426 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3427 yyval.a_expr->meta_type = AMT_VALUE;
3428 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3429 yyval.a_expr->value = yyvsp[-1].a_value;
3430 ;
3431 break;}
3432case 265:
3433#line 2085 "asn1p_y.y"
3434{
3435 yyval.a_expr = asn1p_expr_new(yylineno);
3436 checkmem(yyval.a_expr);
3437 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3438 yyval.a_expr->meta_type = AMT_VALUE;
3439 yyval.a_expr->value = yyvsp[0].a_value;
3440 ;
3441 break;}
3442case 266:
3443#line 2092 "asn1p_y.y"
3444{
3445 yyval.a_expr = asn1p_expr_new(yylineno);
3446 checkmem(yyval.a_expr);
3447 yyval.a_expr->Identifier = strdup("...");
3448 checkmem(yyval.a_expr->Identifier);
3449 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3450 yyval.a_expr->meta_type = AMT_VALUE;
3451 ;
3452 break;}
3453case 267:
3454#line 2103 "asn1p_y.y"
3455{
3456 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3457 checkmem(yyval.a_value);
3458 ;
3459 break;}
3460case 268:
3461#line 2107 "asn1p_y.y"
3462{
3463 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3464 checkmem(yyval.a_value);
3465 ;
3466 break;}
3467case 269:
3468#line 2138 "asn1p_y.y"
3469{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3470 break;}
3471case 270:
3472#line 2139 "asn1p_y.y"
3473{ yyval.a_tag = yyvsp[0].a_tag; ;
3474 break;}
3475case 271:
3476#line 2143 "asn1p_y.y"
3477{
3478 yyval.a_tag = yyvsp[-1].a_tag;
3479 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
3480 ;
3481 break;}
3482case 272:
3483#line 2150 "asn1p_y.y"
3484{
3485 yyval.a_tag = yyvsp[-2].a_tag;
3486 yyval.a_tag.tag_value = yyvsp[-1].a_int;
3487 ;
3488 break;}
3489case 273:
3490#line 2156 "asn1p_y.y"
3491{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
3492 break;}
3493case 274:
3494#line 2157 "asn1p_y.y"
3495{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
3496 break;}
3497case 275:
3498#line 2158 "asn1p_y.y"
3499{ yyval.a_tag.tag_class = TC_APPLICATION; ;
3500 break;}
3501case 276:
vlm7259fdc2006-03-16 22:39:56 +00003502#line 2159 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +00003503{ yyval.a_tag.tag_class = TC_PRIVATE; ;
3504 break;}
3505case 277:
3506#line 2163 "asn1p_y.y"
3507{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3508 break;}
3509case 278:
3510#line 2164 "asn1p_y.y"
3511{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3512 break;}
3513case 279:
3514#line 2165 "asn1p_y.y"
3515{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3516 break;}
3517case 280:
3518#line 2169 "asn1p_y.y"
3519{
3520 checkmem(yyvsp[0].tv_str);
3521 yyval.tv_str = yyvsp[0].tv_str;
3522 ;
3523 break;}
3524case 281:
3525#line 2173 "asn1p_y.y"
3526{
3527 checkmem(yyvsp[0].tv_str);
3528 yyval.tv_str = yyvsp[0].tv_str;
3529 ;
3530 break;}
3531case 282:
3532#line 2181 "asn1p_y.y"
3533{
3534 checkmem(yyvsp[0].tv_str);
3535 yyval.tv_str = yyvsp[0].tv_str;
3536 ;
3537 break;}
3538case 283:
3539#line 2188 "asn1p_y.y"
3540{ yyval.tv_str = 0; ;
3541 break;}
3542case 284:
3543#line 2189 "asn1p_y.y"
3544{
3545 yyval.tv_str = yyvsp[0].tv_str;
3546 ;
3547 break;}
3548case 285:
3549#line 2195 "asn1p_y.y"
3550{
3551 checkmem(yyvsp[0].tv_str);
3552 yyval.tv_str = yyvsp[0].tv_str;
3553 ;
3554 break;}
3555}
3556 /* the action file gets copied in in place of this dollarsign */
3557#line 543 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00003558
3559 yyvsp -= yylen;
3560 yyssp -= yylen;
vlm0c6d3812006-03-21 03:40:38 +00003561#ifdef YYLSP_NEEDED
3562 yylsp -= yylen;
3563#endif
vlmfa67ddc2004-06-03 03:38:44 +00003564
vlm0c6d3812006-03-21 03:40:38 +00003565#if YYDEBUG != 0
3566 if (yydebug)
3567 {
3568 short *ssp1 = yyss - 1;
3569 fprintf (stderr, "state stack now");
3570 while (ssp1 != yyssp)
3571 fprintf (stderr, " %d", *++ssp1);
3572 fprintf (stderr, "\n");
3573 }
3574#endif
vlmfa67ddc2004-06-03 03:38:44 +00003575
3576 *++yyvsp = yyval;
3577
vlm0c6d3812006-03-21 03:40:38 +00003578#ifdef YYLSP_NEEDED
3579 yylsp++;
3580 if (yylen == 0)
3581 {
3582 yylsp->first_line = yylloc.first_line;
3583 yylsp->first_column = yylloc.first_column;
3584 yylsp->last_line = (yylsp-1)->last_line;
3585 yylsp->last_column = (yylsp-1)->last_column;
3586 yylsp->text = 0;
3587 }
3588 else
3589 {
3590 yylsp->last_line = (yylsp+yylen-1)->last_line;
3591 yylsp->last_column = (yylsp+yylen-1)->last_column;
3592 }
3593#endif
vlmfa67ddc2004-06-03 03:38:44 +00003594
vlm0c6d3812006-03-21 03:40:38 +00003595 /* Now "shift" the result of the reduction.
3596 Determine what state that goes to,
3597 based on the state we popped back to
3598 and the rule number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00003599
3600 yyn = yyr1[yyn];
3601
vlm0c6d3812006-03-21 03:40:38 +00003602 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3603 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00003604 yystate = yytable[yystate];
3605 else
vlm0c6d3812006-03-21 03:40:38 +00003606 yystate = yydefgoto[yyn - YYNTBASE];
vlmfa67ddc2004-06-03 03:38:44 +00003607
3608 goto yynewstate;
3609
vlm0c6d3812006-03-21 03:40:38 +00003610yyerrlab: /* here on detecting error */
vlmfa67ddc2004-06-03 03:38:44 +00003611
vlm0c6d3812006-03-21 03:40:38 +00003612 if (! yyerrstatus)
3613 /* If not already recovering from an error, report this error. */
vlmfa67ddc2004-06-03 03:38:44 +00003614 {
3615 ++yynerrs;
vlm0c6d3812006-03-21 03:40:38 +00003616
3617#ifdef YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00003618 yyn = yypact[yystate];
3619
vlm0c6d3812006-03-21 03:40:38 +00003620 if (yyn > YYFLAG && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00003621 {
vlm0c6d3812006-03-21 03:40:38 +00003622 int size = 0;
3623 char *msg;
3624 int x, count;
vlmfa67ddc2004-06-03 03:38:44 +00003625
vlm0c6d3812006-03-21 03:40:38 +00003626 count = 0;
3627 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3628 for (x = (yyn < 0 ? -yyn : 0);
3629 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
3630 if (yycheck[x + yyn] == x)
3631 size += strlen(yytname[x]) + 15, count++;
3632 msg = (char *) malloc(size + 15);
3633 if (msg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00003634 {
vlm0c6d3812006-03-21 03:40:38 +00003635 strcpy(msg, "parse error");
3636
3637 if (count < 5)
vlmfa67ddc2004-06-03 03:38:44 +00003638 {
vlm0c6d3812006-03-21 03:40:38 +00003639 count = 0;
3640 for (x = (yyn < 0 ? -yyn : 0);
3641 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
3642 if (yycheck[x + yyn] == x)
3643 {
3644 strcat(msg, count == 0 ? ", expecting `" : " or `");
3645 strcat(msg, yytname[x]);
3646 strcat(msg, "'");
3647 count++;
3648 }
vlmfa67ddc2004-06-03 03:38:44 +00003649 }
vlm0c6d3812006-03-21 03:40:38 +00003650 yyerror(msg);
3651 free(msg);
vlmfa67ddc2004-06-03 03:38:44 +00003652 }
3653 else
vlm0c6d3812006-03-21 03:40:38 +00003654 yyerror ("parse error; also virtual memory exceeded");
vlmfa67ddc2004-06-03 03:38:44 +00003655 }
3656 else
3657#endif /* YYERROR_VERBOSE */
vlm0c6d3812006-03-21 03:40:38 +00003658 yyerror("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003659 }
vlm6a02a8a2004-09-08 00:28:11 +00003660
vlm0c6d3812006-03-21 03:40:38 +00003661 goto yyerrlab1;
3662yyerrlab1: /* here on error raised explicitly by an action */
vlmfa67ddc2004-06-03 03:38:44 +00003663
3664 if (yyerrstatus == 3)
3665 {
vlm0c6d3812006-03-21 03:40:38 +00003666 /* if just tried and failed to reuse lookahead token after an error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00003667
vlm0c6d3812006-03-21 03:40:38 +00003668 /* return failure if at end of input */
3669 if (yychar == YYEOF)
vlm6a02a8a2004-09-08 00:28:11 +00003670 YYABORT;
vlmfa67ddc2004-06-03 03:38:44 +00003671
vlm0c6d3812006-03-21 03:40:38 +00003672#if YYDEBUG != 0
3673 if (yydebug)
3674 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3675#endif
vlm6a02a8a2004-09-08 00:28:11 +00003676
vlm0c6d3812006-03-21 03:40:38 +00003677 yychar = YYEMPTY;
vlmfa67ddc2004-06-03 03:38:44 +00003678 }
3679
vlm0c6d3812006-03-21 03:40:38 +00003680 /* Else will try to reuse lookahead token
3681 after shifting the error token. */
3682
3683 yyerrstatus = 3; /* Each real token shifted decrements this */
3684
3685 goto yyerrhandle;
3686
3687yyerrdefault: /* current state does not do anything special for the error token. */
3688
3689#if 0
3690 /* This is wrong; only states that explicitly want error tokens
3691 should shift them. */
3692 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3693 if (yyn) goto yydefault;
3694#endif
3695
3696yyerrpop: /* pop the current state because it cannot handle the error token */
3697
3698 if (yyssp == yyss) YYABORT;
3699 yyvsp--;
3700 yystate = *--yyssp;
3701#ifdef YYLSP_NEEDED
3702 yylsp--;
3703#endif
3704
3705#if YYDEBUG != 0
3706 if (yydebug)
3707 {
3708 short *ssp1 = yyss - 1;
3709 fprintf (stderr, "Error: state stack now");
3710 while (ssp1 != yyssp)
3711 fprintf (stderr, " %d", *++ssp1);
3712 fprintf (stderr, "\n");
3713 }
3714#endif
3715
3716yyerrhandle:
3717
3718 yyn = yypact[yystate];
3719 if (yyn == YYFLAG)
3720 goto yyerrdefault;
3721
3722 yyn += YYTERROR;
3723 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3724 goto yyerrdefault;
3725
3726 yyn = yytable[yyn];
3727 if (yyn < 0)
3728 {
3729 if (yyn == YYFLAG)
3730 goto yyerrpop;
3731 yyn = -yyn;
3732 goto yyreduce;
3733 }
3734 else if (yyn == 0)
3735 goto yyerrpop;
3736
vlmfa67ddc2004-06-03 03:38:44 +00003737 if (yyn == YYFINAL)
3738 YYACCEPT;
3739
vlm0c6d3812006-03-21 03:40:38 +00003740#if YYDEBUG != 0
3741 if (yydebug)
3742 fprintf(stderr, "Shifting error token, ");
3743#endif
3744
vlmfa67ddc2004-06-03 03:38:44 +00003745 *++yyvsp = yylval;
vlm0c6d3812006-03-21 03:40:38 +00003746#ifdef YYLSP_NEEDED
3747 *++yylsp = yylloc;
3748#endif
vlmfa67ddc2004-06-03 03:38:44 +00003749
3750 yystate = yyn;
3751 goto yynewstate;
3752
vlm0c6d3812006-03-21 03:40:38 +00003753 yyacceptlab:
3754 /* YYACCEPT comes here. */
3755 if (yyfree_stacks)
vlm7e436752006-03-18 06:53:11 +00003756 {
vlm0c6d3812006-03-21 03:40:38 +00003757 free (yyss);
3758 free (yyvs);
3759#ifdef YYLSP_NEEDED
3760 free (yyls);
vlm7e436752006-03-18 06:53:11 +00003761#endif
vlm0c6d3812006-03-21 03:40:38 +00003762 }
3763 return 0;
3764
3765 yyabortlab:
3766 /* YYABORT comes here. */
3767 if (yyfree_stacks)
3768 {
3769 free (yyss);
3770 free (yyvs);
3771#ifdef YYLSP_NEEDED
3772 free (yyls);
3773#endif
3774 }
3775 return 1;
vlmfa67ddc2004-06-03 03:38:44 +00003776}
vlm0c6d3812006-03-21 03:40:38 +00003777#line 2201 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00003778
3779
3780
3781/*
3782 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3783 */
3784static asn1p_value_t *
3785_convert_bitstring2binary(char *str, int base) {
3786 asn1p_value_t *val;
3787 int slen;
3788 int memlen;
3789 int baselen;
3790 int bits;
3791 uint8_t *binary_vector;
3792 uint8_t *bv_ptr;
3793 uint8_t cur_val;
3794
3795 assert(str);
3796 assert(str[0] == '\'');
3797
3798 switch(base) {
3799 case 'B':
3800 baselen = 1;
3801 break;
3802 case 'H':
3803 baselen = 4;
3804 break;
3805 default:
3806 assert(base == 'B' || base == 'H');
3807 errno = EINVAL;
3808 return NULL;
3809 }
3810
3811 slen = strlen(str);
3812 assert(str[slen - 1] == base);
3813 assert(str[slen - 2] == '\'');
3814
3815 memlen = slen / (8 / baselen); /* Conservative estimate */
3816
3817 bv_ptr = binary_vector = malloc(memlen + 1);
3818 if(bv_ptr == NULL)
3819 /* ENOMEM */
3820 return NULL;
3821
3822 cur_val = 0;
3823 bits = 0;
3824 while(*(++str) != '\'') {
3825 switch(baselen) {
3826 case 1:
3827 switch(*str) {
3828 case '1':
3829 cur_val |= 1 << (7 - (bits % 8));
3830 case '0':
3831 break;
3832 default:
3833 assert(!"_y UNREACH1");
3834 case ' ': case '\r': case '\n':
3835 continue;
3836 }
3837 break;
3838 case 4:
3839 switch(*str) {
3840 case '0': case '1': case '2': case '3': case '4':
3841 case '5': case '6': case '7': case '8': case '9':
3842 cur_val |= (*str - '0') << (4 - (bits % 8));
3843 break;
3844 case 'A': case 'B': case 'C':
3845 case 'D': case 'E': case 'F':
3846 cur_val |= ((*str - 'A') + 10)
3847 << (4 - (bits % 8));
3848 break;
3849 default:
3850 assert(!"_y UNREACH2");
3851 case ' ': case '\r': case '\n':
3852 continue;
3853 }
3854 break;
3855 }
3856
3857 bits += baselen;
3858 if((bits % 8) == 0) {
3859 *bv_ptr++ = cur_val;
3860 cur_val = 0;
3861 }
3862 }
3863
3864 *bv_ptr = cur_val;
3865 assert((bv_ptr - binary_vector) <= memlen);
3866
3867 val = asn1p_value_frombits(binary_vector, bits, 0);
3868 if(val == NULL) {
3869 free(binary_vector);
3870 }
3871
3872 return val;
3873}
3874
vlm5d89c3d2005-08-13 09:07:11 +00003875/*
3876 * For unnamed types (used in old X.208 compliant modules)
3877 * generate some sort of interim names, to not to force human being to fix
3878 * the specification's compliance to modern ASN.1 standards.
3879 */
3880static void
3881_fixup_anonymous_identifier(asn1p_expr_t *expr) {
3882 char *p;
3883 assert(expr->Identifier == 0);
3884
3885 /*
3886 * Try to figure out the type name
3887 * without going too much into details
3888 */
3889 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
3890 if(expr->reference && expr->reference->comp_count > 0)
3891 expr->Identifier = expr->reference->components[0].name;
3892
3893 fprintf(stderr,
3894 "WARNING: Line %d: expected lower-case member identifier, "
3895 "found an unnamed %s.\n"
3896 "WARNING: Obsolete X.208 syntax detected, "
3897 "please give the member a name.\n",
3898 yylineno, expr->Identifier ? expr->Identifier : "type");
3899
3900 if(!expr->Identifier)
3901 expr->Identifier = "unnamed";
3902 expr->Identifier = strdup(expr->Identifier);
3903 assert(expr->Identifier);
3904 /* Make a lowercase identifier from the type name */
3905 for(p = expr->Identifier; *p; p++) {
3906 switch(*p) {
3907 case 'A' ... 'Z': *p += 32; break;
3908 case ' ': *p = '_'; break;
3909 case '-': *p = '_'; break;
3910 }
3911 }
3912 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
3913 "Name clash may occur later.\n",
3914 expr->Identifier);
3915}
3916
vlmfa67ddc2004-06-03 03:38:44 +00003917int
3918yyerror(const char *msg) {
vlm808411d2006-03-14 16:31:37 +00003919 extern char *asn1p_text;
vlmfa67ddc2004-06-03 03:38:44 +00003920 fprintf(stderr,
3921 "ASN.1 grammar parse error "
3922 "near line %d (token \"%s\"): %s\n",
vlm39e5ed72004-09-05 10:40:41 +00003923 yylineno, asn1p_text, msg);
vlmfa67ddc2004-06-03 03:38:44 +00003924 return -1;
3925}
3926