blob: b5c625626716b73e1e348629f7da5f26f9c45291 [file] [log] [blame]
vlmfa67ddc2004-06-03 03:38:44 +00001
vlm6a02a8a2004-09-08 00:28:11 +00002/* A Bison parser, made from asn1p_y.y
3 by GNU Bison version 1.28 */
vlmfa67ddc2004-06-03 03:38:44 +00004
vlm6a02a8a2004-09-08 00:28:11 +00005#define YYBISON 1 /* Identify Bison output. */
vlmfa67ddc2004-06-03 03:38:44 +00006
7#define yyparse asn1p_parse
vlm6a02a8a2004-09-08 00:28:11 +00008#define yylex asn1p_lex
vlmfa67ddc2004-06-03 03:38:44 +00009#define yyerror asn1p_error
vlm6a02a8a2004-09-08 00:28:11 +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
vlm6a02a8a2004-09-08 00:28:11 +000014#define TOK_PPEQ 257
15#define TOK_opaque 258
16#define TOK_bstring 259
17#define TOK_cstring 260
18#define TOK_hstring 261
19#define TOK_identifier 262
20#define TOK_number 263
vlm2c8c44d2005-03-24 16:22:35 +000021#define TOK_tuple 264
22#define TOK_quadruple 265
23#define TOK_number_negative 266
24#define TOK_typereference 267
25#define TOK_capitalreference 268
26#define TOK_typefieldreference 269
27#define TOK_valuefieldreference 270
vlm808411d2006-03-14 16:31:37 +000028#define TOK_Literal 271
29#define TOK_ABSENT 272
30#define TOK_ABSTRACT_SYNTAX 273
31#define TOK_ALL 274
32#define TOK_ANY 275
33#define TOK_APPLICATION 276
34#define TOK_AUTOMATIC 277
35#define TOK_BEGIN 278
36#define TOK_BIT 279
37#define TOK_BMPString 280
38#define TOK_BOOLEAN 281
39#define TOK_BY 282
40#define TOK_CHARACTER 283
41#define TOK_CHOICE 284
42#define TOK_CLASS 285
43#define TOK_COMPONENT 286
44#define TOK_COMPONENTS 287
45#define TOK_CONSTRAINED 288
46#define TOK_CONTAINING 289
47#define TOK_DEFAULT 290
48#define TOK_DEFINITIONS 291
49#define TOK_DEFINED 292
50#define TOK_EMBEDDED 293
51#define TOK_ENCODED 294
52#define TOK_ENCODING_CONTROL 295
53#define TOK_END 296
54#define TOK_ENUMERATED 297
55#define TOK_EXPLICIT 298
56#define TOK_EXPORTS 299
57#define TOK_EXTENSIBILITY 300
58#define TOK_EXTERNAL 301
59#define TOK_FALSE 302
60#define TOK_FROM 303
61#define TOK_GeneralizedTime 304
62#define TOK_GeneralString 305
63#define TOK_GraphicString 306
64#define TOK_IA5String 307
65#define TOK_IDENTIFIER 308
66#define TOK_IMPLICIT 309
67#define TOK_IMPLIED 310
68#define TOK_IMPORTS 311
69#define TOK_INCLUDES 312
70#define TOK_INSTANCE 313
71#define TOK_INSTRUCTIONS 314
72#define TOK_INTEGER 315
73#define TOK_ISO646String 316
74#define TOK_MAX 317
75#define TOK_MIN 318
76#define TOK_MINUS_INFINITY 319
77#define TOK_NULL 320
78#define TOK_NumericString 321
79#define TOK_OBJECT 322
80#define TOK_ObjectDescriptor 323
81#define TOK_OCTET 324
82#define TOK_OF 325
83#define TOK_OPTIONAL 326
84#define TOK_PATTERN 327
85#define TOK_PDV 328
86#define TOK_PLUS_INFINITY 329
87#define TOK_PRESENT 330
88#define TOK_PrintableString 331
89#define TOK_PRIVATE 332
90#define TOK_REAL 333
91#define TOK_RELATIVE_OID 334
92#define TOK_SEQUENCE 335
93#define TOK_SET 336
94#define TOK_SIZE 337
95#define TOK_STRING 338
96#define TOK_SYNTAX 339
97#define TOK_T61String 340
98#define TOK_TAGS 341
99#define TOK_TeletexString 342
100#define TOK_TRUE 343
101#define TOK_TYPE_IDENTIFIER 344
102#define TOK_UNIQUE 345
103#define TOK_UNIVERSAL 346
104#define TOK_UniversalString 347
105#define TOK_UTCTime 348
106#define TOK_UTF8String 349
107#define TOK_VideotexString 350
108#define TOK_VisibleString 351
109#define TOK_WITH 352
110#define TOK_EXCEPT 353
111#define TOK_INTERSECTION 354
112#define TOK_UNION 355
113#define TOK_TwoDots 356
114#define TOK_ThreeDots 357
vlmfa67ddc2004-06-03 03:38:44 +0000115
116#line 1 "asn1p_y.y"
117
118
119#include <stdlib.h>
120#include <stdio.h>
121#include <string.h>
122#include <errno.h>
123#include <assert.h>
124
125#include "asn1parser.h"
126
127#define YYPARSE_PARAM param
vlm03630c52005-06-07 21:43:32 +0000128#define YYPARSE_PARAM_TYPE void **
vlmfa67ddc2004-06-03 03:38:44 +0000129#define YYERROR_VERBOSE
130
131int yylex(void);
132int yyerror(const char *msg);
vlm03630c52005-06-07 21:43:32 +0000133#ifdef YYBYACC
134int yyparse(void **param); /* byacc does not produce a prototype */
135#endif
vlmfa67ddc2004-06-03 03:38:44 +0000136void asn1p_lexer_hack_push_opaque_state(void);
137void asn1p_lexer_hack_enable_with_syntax(void);
vlm9283dbe2004-08-18 04:59:12 +0000138void asn1p_lexer_hack_push_encoding_control(void);
vlmfa67ddc2004-06-03 03:38:44 +0000139#define yylineno asn1p_lineno
140extern int asn1p_lineno;
141
vlm931aeed2005-08-12 10:09:10 +0000142/*
vlm177a5b62005-09-05 05:17:57 +0000143 * Process directives as <ASN1C:RepresentAsPointer>
vlm066dc102005-08-22 12:23:54 +0000144 */
145extern int asn1p_as_pointer;
vlm066dc102005-08-22 12:23:54 +0000146
147/*
vlm931aeed2005-08-12 10:09:10 +0000148 * This temporary variable is used to solve the shortcomings of 1-lookahead
149 * parser.
150 */
151static struct AssignedIdentifier *saved_aid;
vlmfa67ddc2004-06-03 03:38:44 +0000152
vlm5d89c3d2005-08-13 09:07:11 +0000153static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
154static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
vlmfa67ddc2004-06-03 03:38:44 +0000155
vlm931aeed2005-08-12 10:09:10 +0000156#define checkmem(ptr) do { \
157 if(!(ptr)) \
158 return yyerror("Memory failure"); \
vlmfa67ddc2004-06-03 03:38:44 +0000159 } while(0)
160
vlm931aeed2005-08-12 10:09:10 +0000161#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
162 if(arg1->type != constr_type) { \
163 int __ret; \
164 root = asn1p_constraint_new(yylineno); \
165 checkmem(root); \
166 root->type = constr_type; \
167 __ret = asn1p_constraint_insert(root, \
168 arg1); \
169 checkmem(__ret == 0); \
170 } else { \
171 root = arg1; \
172 } \
173 if(arg2) { \
174 int __ret \
175 = asn1p_constraint_insert(root, arg2); \
176 checkmem(__ret == 0); \
177 } \
vlmfa67ddc2004-06-03 03:38:44 +0000178 } while(0)
179
180
vlm177a5b62005-09-05 05:17:57 +0000181#line 72 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +0000182typedef union {
183 asn1p_t *a_grammar;
184 asn1p_module_flags_e a_module_flags;
185 asn1p_module_t *a_module;
186 asn1p_expr_type_e a_type; /* ASN.1 Type */
187 asn1p_expr_t *a_expr; /* Constructed collection */
188 asn1p_constraint_t *a_constr; /* Constraint */
189 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
190 asn1p_xports_t *a_xports; /* IMports/EXports */
vlm931aeed2005-08-12 10:09:10 +0000191 struct AssignedIdentifier a_aid; /* Assigned Identifier */
vlmfa67ddc2004-06-03 03:38:44 +0000192 asn1p_oid_t *a_oid; /* Object Identifier */
193 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
194 struct asn1p_type_tag_s a_tag; /* A tag */
195 asn1p_ref_t *a_ref; /* Reference to custom type */
196 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
197 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
198 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
199 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
200 struct asn1p_param_s a_parg; /* A parameter argument */
201 asn1p_paramlist_t *a_plist; /* A pargs list */
vlmc94e28f2004-09-15 11:59:51 +0000202 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
vlmfa67ddc2004-06-03 03:38:44 +0000203 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
vlmec6acd42004-09-29 13:18:09 +0000204 asn1c_integer_t a_int;
vlmfa67ddc2004-06-03 03:38:44 +0000205 char *tv_str;
206 struct {
207 char *buf;
208 int len;
209 } tv_opaque;
210 struct {
211 char *name;
212 struct asn1p_type_tag_s tag;
213 } tv_nametag;
vlm6a02a8a2004-09-08 00:28:11 +0000214} YYSTYPE;
215#include <stdio.h>
216
217#ifndef __cplusplus
218#ifndef __STDC__
219#define const
220#endif
vlmfa67ddc2004-06-03 03:38:44 +0000221#endif
222
223
224
vlm808411d2006-03-14 16:31:37 +0000225#define YYFINAL 446
vlm6a02a8a2004-09-08 00:28:11 +0000226#define YYFLAG -32768
vlm808411d2006-03-14 16:31:37 +0000227#define YYNTBASE 119
vlmfa67ddc2004-06-03 03:38:44 +0000228
vlm808411d2006-03-14 16:31:37 +0000229#define YYTRANSLATE(x) ((unsigned)(x) <= 357 ? yytranslate[x] : 226)
vlmfa67ddc2004-06-03 03:38:44 +0000230
vlm6a02a8a2004-09-08 00:28:11 +0000231static const char yytranslate[] = { 0,
232 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
233 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
234 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm808411d2006-03-14 16:31:37 +0000235 2, 2, 115, 2, 2, 2, 2, 2, 2, 108,
236 109, 2, 2, 111, 2, 116, 2, 2, 2, 2,
237 2, 2, 2, 2, 2, 2, 2, 112, 110, 117,
238 2, 2, 2, 118, 2, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000239 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
240 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm808411d2006-03-14 16:31:37 +0000241 113, 2, 114, 100, 2, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000242 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
243 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm808411d2006-03-14 16:31:37 +0000244 2, 2, 106, 102, 107, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000245 2, 2, 2, 2, 2, 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, 1, 3, 4, 5, 6,
258 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
259 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
260 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
261 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
262 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
263 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
264 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
265 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
266 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
vlm808411d2006-03-14 16:31:37 +0000267 97, 98, 99, 101, 103, 104, 105
vlm6a02a8a2004-09-08 00:28:11 +0000268};
vlmfa67ddc2004-06-03 03:38:44 +0000269
vlm6a02a8a2004-09-08 00:28:11 +0000270#if YYDEBUG != 0
271static const short yyprhs[] = { 0,
272 0, 2, 4, 7, 16, 17, 19, 23, 26, 28,
273 31, 33, 38, 40, 41, 43, 45, 48, 51, 54,
274 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
vlm931aeed2005-08-12 10:09:10 +0000275 79, 81, 82, 86, 88, 92, 95, 97, 100, 101,
276 103, 108, 110, 114, 116, 120, 122, 126, 130, 133,
vlmdc7cf042006-03-09 08:49:26 +0000277 135, 139, 141, 145, 147, 148, 155, 157, 159, 163,
278 167, 174, 176, 180, 182, 186, 190, 194, 196, 200,
279 202, 204, 205, 207, 209, 213, 217, 220, 224, 226,
280 228, 232, 235, 237, 239, 245, 246, 248, 250, 254,
281 257, 262, 266, 270, 274, 278, 282, 283, 285, 286,
vlm808411d2006-03-14 16:31:37 +0000282 293, 295, 298, 300, 302, 304, 308, 310, 314, 318,
283 322, 323, 326, 328, 333, 338, 343, 350, 357, 359,
284 364, 369, 371, 375, 377, 381, 385, 389, 391, 395,
285 397, 401, 403, 405, 407, 409, 411, 415, 419, 421,
286 426, 430, 431, 435, 437, 439, 441, 443, 445, 447,
287 449, 451, 453, 457, 459, 461, 463, 465, 468, 470,
288 472, 474, 476, 479, 482, 484, 486, 489, 492, 494,
289 496, 498, 500, 502, 505, 507, 510, 512, 514, 516,
290 518, 520, 522, 524, 526, 528, 530, 532, 534, 536,
291 538, 540, 542, 544, 546, 548, 549, 551, 553, 558,
292 562, 567, 569, 573, 579, 581, 585, 589, 593, 597,
293 602, 606, 608, 610, 614, 618, 622, 626, 628, 630,
294 631, 637, 639, 642, 645, 649, 651, 653, 655, 657,
295 659, 661, 663, 665, 669, 675, 677, 681, 683, 687,
296 688, 690, 692, 694, 696, 698, 700, 704, 709, 711,
297 715, 718, 722, 724, 728, 729, 731, 733, 736, 739,
298 743, 745, 749, 751, 756, 761, 763, 765, 767, 769,
299 770, 772, 775, 780, 781, 783, 785, 787, 788, 790,
300 792, 794, 796, 798, 799, 801
vlm6a02a8a2004-09-08 00:28:11 +0000301};
vlmfa67ddc2004-06-03 03:38:44 +0000302
vlm808411d2006-03-14 16:31:37 +0000303static const short yyrhs[] = { 120,
304 0, 121, 0, 120, 121, 0, 222, 122, 37, 126,
305 3, 24, 129, 42, 0, 0, 123, 0, 106, 124,
306 107, 0, 106, 107, 0, 125, 0, 124, 125, 0,
307 225, 0, 225, 108, 9, 109, 0, 9, 0, 0,
308 127, 0, 128, 0, 127, 128, 0, 44, 87, 0,
309 55, 87, 0, 23, 87, 0, 46, 56, 0, 14,
310 60, 0, 0, 130, 0, 131, 0, 130, 131, 0,
311 133, 0, 139, 0, 145, 0, 176, 0, 142, 0,
312 0, 41, 14, 132, 0, 185, 0, 57, 134, 110,
313 0, 57, 49, 0, 136, 0, 134, 136, 0, 0,
314 123, 0, 137, 49, 222, 135, 0, 138, 0, 137,
315 111, 138, 0, 222, 0, 222, 106, 107, 0, 225,
316 0, 45, 140, 110, 0, 45, 20, 110, 0, 45,
317 110, 0, 141, 0, 140, 111, 141, 0, 222, 0,
318 222, 106, 107, 0, 225, 0, 0, 222, 144, 3,
319 106, 143, 181, 0, 169, 0, 182, 0, 222, 3,
320 165, 0, 222, 3, 155, 0, 222, 106, 146, 107,
321 3, 165, 0, 147, 0, 146, 111, 147, 0, 222,
322 0, 222, 112, 225, 0, 222, 112, 222, 0, 182,
323 112, 225, 0, 149, 0, 148, 111, 149, 0, 165,
324 0, 225, 0, 0, 151, 0, 152, 0, 151, 111,
325 152, 0, 225, 165, 211, 0, 165, 211, 0, 33,
326 71, 165, 0, 164, 0, 154, 0, 153, 111, 154,
327 0, 225, 165, 0, 164, 0, 165, 0, 31, 106,
328 157, 107, 159, 0, 0, 91, 0, 158, 0, 157,
329 111, 158, 0, 15, 211, 0, 16, 165, 156, 211,
330 0, 16, 174, 211, 0, 16, 175, 211, 0, 15,
331 174, 211, 0, 15, 165, 211, 0, 15, 175, 211,
332 0, 0, 160, 0, 0, 98, 85, 106, 161, 162,
333 107, 0, 163, 0, 162, 163, 0, 4, 0, 17,
334 0, 172, 0, 113, 162, 114, 0, 105, 0, 105,
335 115, 179, 0, 105, 115, 216, 0, 217, 167, 189,
336 0, 0, 166, 168, 0, 184, 0, 30, 106, 153,
337 107, 0, 81, 106, 150, 107, 0, 82, 106, 150,
338 107, 0, 81, 189, 71, 224, 217, 167, 0, 82,
339 189, 71, 224, 217, 167, 0, 21, 0, 21, 38,
340 28, 225, 0, 222, 106, 148, 107, 0, 169, 0,
341 59, 71, 169, 0, 13, 0, 13, 116, 222, 0,
342 223, 116, 222, 0, 13, 116, 225, 0, 223, 0,
343 223, 116, 170, 0, 171, 0, 170, 116, 171, 0,
344 173, 0, 173, 0, 15, 0, 16, 0, 15, 0,
345 174, 116, 15, 0, 174, 116, 16, 0, 14, 0,
346 225, 144, 3, 177, 0, 225, 112, 177, 0, 0,
347 106, 178, 181, 0, 66, 0, 48, 0, 89, 0,
348 5, 0, 7, 0, 180, 0, 216, 0, 179, 0,
349 225, 0, 222, 116, 225, 0, 6, 0, 10, 0,
350 11, 0, 4, 0, 181, 4, 0, 27, 0, 66,
351 0, 79, 0, 183, 0, 70, 84, 0, 68, 54,
352 0, 80, 0, 47, 0, 39, 74, 0, 29, 84,
353 0, 94, 0, 50, 0, 185, 0, 61, 0, 43,
354 0, 25, 84, 0, 182, 0, 183, 213, 0, 26,
355 0, 51, 0, 52, 0, 53, 0, 62, 0, 67,
356 0, 77, 0, 86, 0, 88, 0, 93, 0, 95,
357 0, 96, 0, 97, 0, 69, 0, 102, 0, 103,
358 0, 100, 0, 101, 0, 99, 0, 0, 190, 0,
359 191, 0, 83, 108, 192, 109, 0, 108, 192, 109,
360 0, 191, 108, 192, 109, 0, 193, 0, 193, 111,
361 105, 0, 193, 111, 105, 111, 193, 0, 194, 0,
362 20, 99, 194, 0, 193, 186, 194, 0, 193, 187,
363 194, 0, 194, 188, 194, 0, 197, 108, 192, 109,
364 0, 108, 192, 109, 0, 198, 0, 199, 0, 198,
365 196, 198, 0, 64, 196, 198, 0, 198, 196, 63,
366 0, 64, 196, 63, 0, 205, 0, 200, 0, 0,
367 34, 28, 106, 195, 181, 0, 104, 0, 104, 117,
368 0, 117, 104, 0, 117, 104, 117, 0, 83, 0,
369 49, 0, 48, 0, 89, 0, 216, 0, 180, 0,
370 225, 0, 222, 0, 98, 32, 191, 0, 98, 33,
371 106, 201, 107, 0, 202, 0, 201, 111, 202, 0,
372 105, 0, 225, 189, 203, 0, 0, 204, 0, 76,
373 0, 18, 0, 72, 0, 206, 0, 207, 0, 106,
374 222, 107, 0, 206, 106, 208, 107, 0, 209, 0,
375 208, 111, 209, 0, 118, 210, 0, 118, 116, 210,
376 0, 225, 0, 210, 116, 225, 0, 0, 212, 0,
377 72, 0, 36, 177, 0, 106, 107, 0, 106, 214,
378 107, 0, 215, 0, 214, 111, 215, 0, 225, 0,
379 225, 108, 216, 109, 0, 225, 108, 179, 109, 0,
380 216, 0, 105, 0, 9, 0, 12, 0, 0, 218,
381 0, 219, 221, 0, 113, 220, 9, 114, 0, 0,
382 92, 0, 22, 0, 78, 0, 0, 55, 0, 44,
383 0, 13, 0, 14, 0, 14, 0, 0, 225, 0,
384 8, 0
vlm6a02a8a2004-09-08 00:28:11 +0000385};
vlmfa67ddc2004-06-03 03:38:44 +0000386
387#endif
388
vlm6a02a8a2004-09-08 00:28:11 +0000389#if YYDEBUG != 0
390static const short yyrline[] = { 0,
vlm808411d2006-03-14 16:31:37 +0000391 323, 329, 335, 351, 376, 378, 381, 385, 390, 397,
392 405, 410, 414, 423, 425, 433, 437, 445, 449, 452,
393 455, 459, 479, 481, 489, 493, 525, 529, 538, 545,
394 558, 565, 567, 579, 591, 602, 607, 613, 619, 621,
395 624, 635, 641, 647, 654, 660, 668, 672, 675, 682,
396 688, 694, 701, 707, 716, 718, 727, 735, 749, 759,
397 775, 784, 794, 804, 809, 816, 823, 833, 839, 845,
398 849, 872, 874, 876, 882, 888, 896, 902, 909, 914,
399 920, 926, 932, 935, 941, 951, 953, 956, 964, 971,
400 984, 995, 1005, 1016, 1026, 1037, 1048, 1050, 1055, 1059,
401 1064, 1069, 1075, 1079, 1082, 1091, 1096, 1105, 1114, 1125,
402 1147, 1154, 1173, 1177, 1183, 1189, 1195, 1205, 1215, 1221,
403 1235, 1259, 1266, 1280, 1289, 1299, 1309, 1319, 1327, 1348,
404 1357, 1366, 1367, 1369, 1376, 1383, 1389, 1393, 1399, 1419,
405 1429, 1437, 1437, 1442, 1447, 1452, 1457, 1461, 1465, 1468,
406 1471, 1476, 1488, 1505, 1510, 1515, 1548, 1558, 1572, 1574,
407 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584,
408 1585, 1591, 1593, 1594, 1597, 1604, 1616, 1618, 1622, 1626,
409 1627, 1628, 1629, 1630, 1634, 1635, 1636, 1637, 1641, 1642,
410 1649, 1649, 1650, 1650, 1651, 1653, 1655, 1660, 1664, 1673,
411 1677, 1682, 1686, 1692, 1702, 1706, 1709, 1712, 1715, 1720,
412 1729, 1737, 1743, 1749, 1756, 1764, 1772, 1781, 1784, 1787,
413 1788, 1798, 1800, 1801, 1802, 1805, 1809, 1814, 1820, 1825,
414 1828, 1831, 1844, 1858, 1862, 1867, 1871, 1876, 1883, 1896,
415 1898, 1901, 1905, 1908, 1913, 1917, 1925, 1940, 1946, 1953,
416 1966, 1978, 1993, 1997, 2014, 2019, 2022, 2027, 2049, 2054,
417 2059, 2065, 2071, 2079, 2087, 2095, 2102, 2112, 2117, 2147,
418 2149, 2152, 2159, 2165, 2167, 2168, 2169, 2172, 2174, 2175,
419 2178, 2183, 2190, 2197, 2199, 2204
vlm6a02a8a2004-09-08 00:28:11 +0000420};
421#endif
422
423
424#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
425
426static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
427"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
vlm2c8c44d2005-03-24 16:22:35 +0000428"TOK_tuple","TOK_quadruple","TOK_number_negative","TOK_typereference","TOK_capitalreference",
vlm808411d2006-03-14 16:31:37 +0000429"TOK_typefieldreference","TOK_valuefieldreference","TOK_Literal","TOK_ABSENT",
430"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"ActualParameterList","ActualParameter","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"ClassFieldIdentifier","ClassFieldName","FieldName","DefinedObjectClass","ValueDefinition",
460"Value","@4","DefinedValue","RestrictedCharacterStringValue","Opaque","BasicTypeId",
vlmdc7cf042006-03-09 08:49:26 +0000461"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
vlm6a02a8a2004-09-08 00:28:11 +0000470};
471#endif
472
473static const short yyr1[] = { 0,
vlm808411d2006-03-14 16:31:37 +0000474 119, 120, 120, 121, 122, 122, 123, 123, 124, 124,
475 125, 125, 125, 126, 126, 127, 127, 128, 128, 128,
476 128, 128, 129, 129, 130, 130, 131, 131, 131, 131,
477 131, 132, 131, 131, 133, 133, 134, 134, 135, 135,
478 136, 137, 137, 138, 138, 138, 139, 139, 139, 140,
479 140, 141, 141, 141, 143, 142, 144, 144, 145, 145,
480 145, 146, 146, 147, 147, 147, 147, 148, 148, 149,
481 149, 150, 150, 151, 151, 152, 152, 152, 152, 153,
482 153, 154, 154, 154, 155, 156, 156, 157, 157, 158,
483 158, 158, 158, 158, 158, 158, 159, 159, 161, 160,
484 162, 162, 163, 163, 163, 163, 164, 164, 164, 165,
485 166, 167, 168, 168, 168, 168, 168, 168, 168, 168,
486 168, 168, 168, 169, 169, 169, 169, 169, 169, 170,
487 170, 171, 172, 173, 173, 174, 174, 174, 175, 176,
488 177, 178, 177, 177, 177, 177, 177, 177, 177, 177,
489 177, 179, 179, 180, 180, 180, 181, 181, 182, 182,
490 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
491 182, 183, 183, 183, 184, 184, 185, 185, 185, 185,
492 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
493 186, 186, 187, 187, 188, 189, 189, 190, 190, 191,
494 191, 192, 192, 192, 193, 193, 193, 193, 193, 194,
495 194, 194, 194, 194, 194, 194, 194, 194, 194, 195,
496 194, 196, 196, 196, 196, 197, 197, 198, 198, 198,
497 198, 198, 199, 200, 200, 201, 201, 202, 202, 203,
498 203, 204, 204, 204, 205, 205, 206, 207, 208, 208,
vlma367d552006-03-09 09:11:53 +0000499 209, 209, 210, 210, 211, 211, 212, 212, 213, 213,
vlm808411d2006-03-14 16:31:37 +0000500 214, 214, 215, 215, 215, 215, 215, 216, 216, 217,
501 217, 218, 219, 220, 220, 220, 220, 221, 221, 221,
502 222, 222, 223, 224, 224, 225
vlm6a02a8a2004-09-08 00:28:11 +0000503};
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,
vlm931aeed2005-08-12 10:09:10 +0000509 1, 0, 3, 1, 3, 2, 1, 2, 0, 1,
510 4, 1, 3, 1, 3, 1, 3, 3, 2, 1,
vlmdc7cf042006-03-09 08:49:26 +0000511 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,
vlm808411d2006-03-14 16:31:37 +0000516 1, 2, 1, 1, 1, 3, 1, 3, 3, 3,
517 0, 2, 1, 4, 4, 4, 6, 6, 1, 4,
518 4, 1, 3, 1, 3, 3, 3, 1, 3, 1,
519 3, 1, 1, 1, 1, 1, 3, 3, 1, 4,
520 3, 0, 3, 1, 1, 1, 1, 1, 1, 1,
521 1, 1, 3, 1, 1, 1, 1, 2, 1, 1,
522 1, 1, 2, 2, 1, 1, 2, 2, 1, 1,
523 1, 1, 1, 2, 1, 2, 1, 1, 1, 1,
vlm6a02a8a2004-09-08 00:28:11 +0000524 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
vlm808411d2006-03-14 16:31:37 +0000525 1, 1, 1, 1, 1, 0, 1, 1, 4, 3,
526 4, 1, 3, 5, 1, 3, 3, 3, 3, 4,
527 3, 1, 1, 3, 3, 3, 3, 1, 1, 0,
528 5, 1, 2, 2, 3, 1, 1, 1, 1, 1,
529 1, 1, 1, 3, 5, 1, 3, 1, 3, 0,
530 1, 1, 1, 1, 1, 1, 3, 4, 1, 3,
531 2, 3, 1, 3, 0, 1, 1, 2, 2, 3,
532 1, 3, 1, 4, 4, 1, 1, 1, 1, 0,
533 1, 2, 4, 0, 1, 1, 1, 0, 1, 1,
534 1, 1, 1, 0, 1, 1
vlm6a02a8a2004-09-08 00:28:11 +0000535};
536
537static const short yydefact[] = { 0,
vlm808411d2006-03-14 16:31:37 +0000538 281, 282, 1, 2, 5, 3, 0, 0, 6, 286,
vlm6a02a8a2004-09-08 00:28:11 +0000539 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
540 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
vlm808411d2006-03-14 16:31:37 +0000541 18, 21, 19, 0, 17, 12, 23, 177, 0, 0,
542 178, 179, 180, 0, 181, 182, 190, 183, 184, 185,
543 186, 187, 188, 189, 0, 24, 25, 27, 28, 31,
vlm931aeed2005-08-12 10:09:10 +0000544 29, 30, 34, 0, 0, 32, 0, 49, 0, 50,
545 52, 54, 36, 0, 37, 0, 42, 44, 46, 4,
vlm808411d2006-03-14 16:31:37 +0000546 26, 270, 124, 283, 0, 159, 0, 0, 173, 166,
547 170, 172, 160, 0, 0, 161, 165, 169, 0, 0,
548 57, 58, 162, 171, 128, 0, 33, 48, 47, 0,
549 0, 35, 38, 0, 0, 0, 0, 274, 60, 59,
550 111, 271, 278, 0, 174, 168, 167, 164, 163, 0,
vlmdc7cf042006-03-09 08:49:26 +0000551 62, 0, 64, 0, 0, 0, 51, 53, 39, 43,
vlm808411d2006-03-14 16:31:37 +0000552 45, 0, 276, 277, 275, 0, 0, 196, 280, 279,
553 272, 125, 127, 0, 0, 0, 0, 55, 134, 135,
554 129, 130, 132, 126, 147, 154, 148, 268, 155, 156,
555 269, 145, 144, 146, 142, 140, 151, 149, 150, 0,
556 152, 40, 41, 270, 270, 0, 88, 0, 124, 283,
557 119, 0, 0, 196, 196, 112, 122, 175, 162, 113,
558 0, 0, 0, 110, 197, 198, 270, 63, 67, 66,
559 65, 0, 0, 0, 0, 0, 139, 136, 0, 257,
560 255, 255, 255, 90, 256, 86, 255, 255, 97, 0,
561 273, 0, 270, 0, 270, 0, 270, 0, 0, 176,
562 270, 0, 0, 0, 228, 227, 0, 226, 229, 0,
563 0, 0, 231, 0, 202, 205, 0, 212, 213, 219,
564 218, 245, 246, 230, 233, 232, 0, 61, 157, 56,
565 131, 143, 153, 141, 258, 95, 0, 94, 96, 87,
566 255, 92, 93, 0, 85, 98, 89, 0, 107, 0,
567 80, 83, 84, 270, 123, 0, 0, 73, 74, 79,
568 255, 270, 284, 0, 284, 267, 259, 0, 261, 266,
569 263, 0, 68, 70, 71, 0, 0, 0, 222, 0,
570 0, 0, 0, 0, 0, 200, 193, 194, 191, 192,
571 0, 0, 0, 195, 0, 0, 0, 0, 0, 158,
572 137, 138, 91, 0, 120, 0, 114, 270, 82, 270,
573 115, 270, 77, 255, 270, 285, 116, 270, 260, 0,
574 0, 121, 270, 199, 206, 220, 223, 224, 217, 215,
575 234, 0, 247, 211, 203, 207, 208, 209, 0, 216,
576 214, 0, 0, 249, 201, 99, 108, 109, 152, 81,
577 78, 75, 76, 111, 111, 262, 0, 0, 69, 0,
578 225, 238, 0, 236, 196, 0, 210, 0, 251, 253,
579 248, 0, 0, 117, 118, 265, 264, 221, 235, 0,
580 240, 204, 252, 0, 250, 103, 104, 0, 0, 101,
581 105, 133, 237, 243, 244, 242, 239, 241, 254, 0,
582 100, 102, 106, 0, 0, 0
vlm6a02a8a2004-09-08 00:28:11 +0000583};
584
vlm808411d2006-03-14 16:31:37 +0000585static const short yydefgoto[] = { 444,
vlm6a02a8a2004-09-08 00:28:11 +0000586 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
vlmdc7cf042006-03-09 08:49:26 +0000587 56, 57, 107, 58, 74, 183, 75, 76, 77, 59,
vlma367d552006-03-09 09:11:53 +0000588 69, 70, 60, 212, 100, 61, 130, 131, 312, 313,
589 297, 298, 299, 290, 291, 119, 281, 186, 187, 285,
vlm808411d2006-03-14 16:31:37 +0000590 286, 413, 429, 430, 300, 301, 147, 148, 196, 101,
591 161, 162, 431, 432, 222, 223, 62, 176, 214, 177,
vlma367d552006-03-09 09:11:53 +0000592 253, 270, 102, 103, 200, 104, 332, 333, 335, 204,
593 205, 206, 254, 255, 256, 400, 321, 257, 258, 259,
vlm808411d2006-03-14 16:31:37 +0000594 260, 403, 404, 437, 438, 261, 262, 263, 383, 384,
vlma367d552006-03-09 09:11:53 +0000595 409, 224, 225, 240, 308, 309, 264, 121, 122, 123,
596 146, 151, 265, 105, 355, 266
vlm6a02a8a2004-09-08 00:28:11 +0000597};
598
vlm808411d2006-03-14 16:31:37 +0000599static const short yypact[] = { 76,
600-32768,-32768, 76,-32768, -55,-32768, 23, 59,-32768,-32768,
601-32768,-32768, 31,-32768, 32, 350,-32768,-32768, 101, 120,
602 136, 144, 131, 152, 192, 350,-32768, 139,-32768,-32768,
603-32768,-32768,-32768, 233,-32768,-32768, 394,-32768, 275, 34,
604-32768,-32768,-32768, 133,-32768,-32768,-32768,-32768,-32768,-32768,
605-32768,-32768,-32768,-32768, 258, 394,-32768,-32768,-32768,-32768,
606-32768,-32768,-32768, 224, 547,-32768, 197,-32768, 63,-32768,
607 203,-32768,-32768, 45,-32768, 24,-32768, 205,-32768,-32768,
608-32768, 21, 206,-32768, 240,-32768, 254, 266,-32768,-32768,
609-32768,-32768,-32768, 288, 260,-32768,-32768,-32768, 623, 343,
610-32768,-32768,-32768,-32768, 236, 352,-32768,-32768,-32768, 248,
611 251,-32768,-32768, 76, 248, 252, 257, 106,-32768,-32768,
612-32768,-32768, 43, 248,-32768,-32768,-32768,-32768,-32768, 100,
613-32768, 249, 256, 261, 300, 158,-32768,-32768, -55,-32768,
614-32768, 189,-32768,-32768,-32768, 351, 471, -27,-32768,-32768,
615-32768,-32768,-32768, 363, 623, 361, 248,-32768,-32768,-32768,
616 269,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
617-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 277,
618 262,-32768,-32768, 70, 62, 108,-32768, 263, 80, 264,
619 357, 291, 327, -13, -9,-32768,-32768,-32768, 293,-32768,
620 294, 295, 323,-32768,-32768, 301, 297,-32768,-32768,-32768,
621-32768, 407, 250, 407, 361, 158,-32768,-32768, 158,-32768,
622 14, 7, 14,-32768,-32768, 324, 7, 14, 316, 189,
623-32768, 388, 8, 265, 47, 353, 47, 354, 52,-32768,
624 9, 323, 328, 395,-32768,-32768, -16,-32768,-32768, 255,
625 76, 323,-32768, 313, 99, 331, 318, -16,-32768,-32768,
626-32768, 326,-32768,-32768,-32768,-32768, 323,-32768,-32768, 429,
627-32768, 429,-32768,-32768,-32768,-32768, 333,-32768,-32768,-32768,
628 14,-32768,-32768, 355,-32768,-32768,-32768, 361, 321, 118,
629-32768,-32768,-32768, 297,-32768, 366, 334, 337,-32768,-32768,
630 14, 297, 361, 335, 361,-32768,-32768, 162,-32768,-32768,
631 330, 173,-32768,-32768,-32768, 340, 370, 338, 341, 346,
632 234, 344, 348, 358, 364,-32768,-32768,-32768,-32768,-32768,
633 359, 370, 370,-32768, 370, 323, 380, 339, 365,-32768,
634-32768,-32768,-32768, 349,-32768, 246,-32768, 8,-32768, 297,
635-32768, 38,-32768, 14, 297,-32768,-32768, 297,-32768, 57,
636 246,-32768, 9,-32768,-32768,-32768,-32768, 345,-32768,-32768,
637 301, 2,-32768,-32768, 356,-32768,-32768,-32768, 368,-32768,
638-32768, 17, 188,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
639-32768,-32768,-32768,-32768,-32768,-32768, 372, 374,-32768, 407,
640-32768,-32768, 195,-32768, -27, 323,-32768, 361, 377,-32768,
641-32768, 339, 11,-32768,-32768,-32768,-32768, 429,-32768, 2,
642 121, 225, 377, 361,-32768,-32768,-32768, 11, 19,-32768,
643-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 5,
644-32768,-32768,-32768, 460, 466,-32768
vlm6a02a8a2004-09-08 00:28:11 +0000645};
646
647static const short yypgoto[] = {-32768,
vlm808411d2006-03-14 16:31:37 +0000648-32768, 467,-32768, 336,-32768, 459,-32768,-32768, 453,-32768,
649-32768, 430,-32768,-32768,-32768,-32768, 414,-32768, 379,-32768,
650-32768, 385,-32768,-32768, 434,-32768,-32768, 347,-32768, 140,
651 267,-32768, 153,-32768, 159,-32768,-32768,-32768, 276,-32768,
652-32768,-32768, 81, -250, -228, -80,-32768, -44,-32768, -103,
653-32768, 298,-32768, -111, 332, 342,-32768, -3,-32768, -278,
654 -107, -211, 86, 369,-32768, 26,-32768,-32768,-32768, -187,
655-32768, 186, -64, 107, -141,-32768, 268,-32768, -259,-32768,
656-32768,-32768, 92,-32768,-32768,-32768,-32768,-32768,-32768, 103,
657 111, -209,-32768,-32768,-32768, 160, -125, -50,-32768,-32768,
658-32768,-32768, 1,-32768, 220, -7
vlm6a02a8a2004-09-08 00:28:11 +0000659};
660
661
vlm808411d2006-03-14 16:31:37 +0000662#define YYLAST 720
vlm6a02a8a2004-09-08 00:28:11 +0000663
664
665static const short yytable[] = { 15,
vlm808411d2006-03-14 16:31:37 +0000666 5, 120, 272, 5, 292, 15, 236, 238, 426, 10,
667 179, 276, 278, 279, 426, 10, 10, 282, 283, 159,
668 160, 427, 426, 163, 10, 159, 160, 427, 178, 65,
669 10, 11, 72, 159, 160, 427, 79, 64, 10, 11,
670 71, 10, 219, 197, 78, 10, 1, 2, 65, 219,
671 7, 117, 10, 67, 10, 202, 64, 1, 2, 10,
672 168, 370, 63, 171, 10, 168, 79, 387, 171, 202,
673 296, 343, 114, 202, 78, 217, 218, 381, 220, 296,
674 203, 63, 397, 217, 218, 220, 149, 319, 1, 2,
675 179, 353, 235, 179, 203, 16, 237, 150, 203, 133,
676 320, 163, 72, 221, 226, 219, 402, 79, 178, 28,
677 71, 178, 289, 310, 139, 78, 153, 428, 443, 292,
678 118, 118, 277, 428, 152, 441, 268, 143, 181, 12,
679 295, 428, 408, 118, 115, 164, 180, 17, 434, 19,
680 10, 220, 289, 68, 393, 1, 2, 201, 209, 211,
681 118, 289, 293, -72, 112, 133, 306, 210, 307, 118,
682 314, 306, 165, 166, 167, 10, 168, 169, 170, 171,
683 1, 2, 109, 110, 118, 365, -255, 316, 442, 29,
684 -255, 73, 118, 144, 132, -281, 32, 325, 418, 442,
685 376, 377, 435, 378, 34, 124, 436, 145, 327, 328,
686 329, 330, 339, 184, 185, 172, 154, 273, 181, 331,
687 155, 181, 274, 349, 229, 275, 180, 421, 230, 180,
688 388, 354, 30, 173, 347, 294, 82, 302, 348, 302,
689 31, 311, 198, 315, 310, 398, 83, 84, 33, 166,
690 132, 10, 168, 169, 170, 171, 174, 36, 85, 38,
691 86, 324, 87, 10, 168, 10, 37, 171, 1, 2,
692 1, 2, 88, 175, 159, 160, 89, 293, 359, 391,
693 90, 379, 360, 91, 41, 42, 43, 83, 84, 362,
694 345, 245, 314, 363, 92, 45, 322, 323, 66, 93,
695 46, 94, 47, 95, 411, 356, 369, 356, 412, 80,
696 48, 419, 96, 97, 394, 420, 108, 395, 111, 49,
697 116, 50, 1, 2, 159, 160, 51, 98, 52, 53,
698 54, 124, 249, 125, 327, 328, 329, 330, 166, 99,
699 10, 168, 169, 170, 171, 1, 2, 126, 389, 127,
700 294, 128, 243, 129, 302, 134, 180, 341, 342, 414,
701 415, 135, 311, 389, 136, 315, 244, 138, 141, 188,
702 156, 180, 142, 20, 405, 207, 158, 157, 10, -282,
703 245, 246, 21, 216, 410, 166, 231, 10, 168, 169,
704 170, 171, 1, 2, 213, 166, 247, 10, 168, 169,
705 170, 171, 215, 22, 232, 23, 233, 234, 239, 241,
706 410, 10, 242, 244, 24, 248, 1, 2, 267, 118,
707 269, 249, 405, 284, 280, 288, 439, 245, 246, 38,
708 250, 326, 318, 303, 305, 336, 317, 245, 251, 334,
709 252, 338, 340, 247, 39, 346, 350, 361, 40, 344,
710 351, 357, 380, 366, 41, 42, 43, 352, 364, 368,
711 44, 203, 248, 372, 386, 45, 382, 367, 249, 445,
712 46, 401, 47, 375, 373, 446, 406, 250, 249, 6,
713 48, 18, 374, 385, 182, 251, 407, 252, 35, 49,
714 416, 50, 417, 189, 190, 81, 51, 113, 52, 53,
715 54, 191, 424, 140, 137, 85, 38, 86, 106, 87,
716 192, 208, 399, 304, 392, 287, 390, 371, 440, 88,
717 271, 433, 422, 89, 425, 199, 227, 90, 423, 396,
718 91, 41, 42, 43, 358, 337, 228, 0, 0, 193,
719 0, 92, 45, 0, 0, 0, 93, 46, 94, 47,
720 95, 0, 0, 0, 0, 0, 0, 48, 0, 96,
721 97, 194, 195, 0, 0, 0, 49, 0, 50, 83,
722 84, 0, 0, 51, 98, 52, 53, 54, 0, 0,
723 0, 85, 38, 86, 0, 87, 0, 0, 0, 0,
724 0, 0, 0, 0, 0, 88, 0, 0, 0, 89,
725 0, 0, 0, 90, 0, 0, 91, 41, 42, 43,
726 0, 0, 0, 0, 0, 0, 0, 92, 45, 0,
727 0, 0, 93, 46, 94, 47, 95, 0, 0, 0,
728 0, 0, 0, 48, 0, 96, 97, 0, 0, 0,
729 0, 0, 49, 0, 50, 1, 2, 0, 0, 51,
730 98, 52, 53, 54, 0, 0, 0, 85, 38, 86,
731 0, 87, 0, 0, 0, 0, 0, 0, 0, 0,
732 0, 88, 0, 0, 0, 89, 0, 0, 0, 90,
733 0, 0, 91, 41, 42, 43, 0, 0, 0, 0,
734 0, 0, 0, 92, 45, 0, 0, 0, 93, 46,
735 94, 47, 95, 0, 0, 0, 0, 0, 0, 48,
736 0, 96, 97, 0, 0, 0, 0, 0, 49, 0,
737 50, 0, 0, 0, 0, 51, 98, 52, 53, 54
vlm6a02a8a2004-09-08 00:28:11 +0000738};
739
740static const short yycheck[] = { 7,
vlm808411d2006-03-14 16:31:37 +0000741 0, 82, 214, 3, 233, 13, 194, 195, 4, 8,
742 136, 221, 222, 223, 4, 8, 8, 227, 228, 15,
743 16, 17, 4, 135, 8, 15, 16, 17, 136, 37,
744 8, 9, 40, 15, 16, 17, 44, 37, 8, 9,
745 40, 8, 36, 147, 44, 8, 13, 14, 56, 36,
746 106, 31, 8, 20, 8, 83, 56, 13, 14, 8,
747 9, 321, 37, 12, 8, 9, 74, 346, 12, 83,
748 33, 281, 49, 83, 74, 14, 15, 337, 72, 33,
749 108, 56, 361, 14, 15, 72, 44, 104, 13, 14,
750 216, 301, 106, 219, 108, 37, 106, 55, 108, 99,
751 117, 213, 110, 184, 185, 36, 105, 115, 216, 9,
752 110, 219, 105, 239, 114, 115, 124, 113, 114, 348,
753 113, 113, 116, 113, 124, 107, 207, 22, 136, 107,
754 234, 113, 116, 113, 111, 135, 136, 107, 18, 108,
755 8, 72, 105, 110, 354, 13, 14, 147, 156, 157,
756 113, 105, 233, 107, 110, 155, 105, 157, 107, 113,
757 241, 105, 5, 6, 7, 8, 9, 10, 11, 12,
758 13, 14, 110, 111, 113, 317, 107, 242, 429, 60,
759 111, 49, 113, 78, 99, 106, 56, 252, 400, 440,
760 332, 333, 72, 335, 3, 116, 76, 92, 100, 101,
761 102, 103, 267, 15, 16, 48, 107, 215, 216, 111,
762 111, 219, 216, 294, 107, 219, 216, 405, 111, 219,
763 346, 302, 87, 66, 107, 233, 3, 235, 111, 237,
764 87, 239, 147, 241, 360, 361, 13, 14, 87, 6,
765 155, 8, 9, 10, 11, 12, 89, 109, 25, 26,
766 27, 251, 29, 8, 9, 8, 24, 12, 13, 14,
767 13, 14, 39, 106, 15, 16, 43, 348, 107, 350,
768 47, 336, 111, 50, 51, 52, 53, 13, 14, 107,
769 288, 48, 363, 111, 61, 62, 32, 33, 14, 66,
770 67, 68, 69, 70, 107, 303, 63, 305, 111, 42,
771 77, 107, 79, 80, 355, 111, 110, 358, 106, 86,
772 106, 88, 13, 14, 15, 16, 93, 94, 95, 96,
773 97, 116, 89, 84, 100, 101, 102, 103, 6, 106,
774 8, 9, 10, 11, 12, 13, 14, 84, 346, 74,
775 348, 54, 20, 84, 352, 3, 346, 15, 16, 394,
776 395, 116, 360, 361, 3, 363, 34, 107, 107, 9,
777 112, 361, 106, 14, 372, 3, 106, 112, 8, 106,
778 48, 49, 23, 112, 382, 6, 114, 8, 9, 10,
779 11, 12, 13, 14, 116, 6, 64, 8, 9, 10,
780 11, 12, 116, 44, 38, 46, 106, 71, 106, 106,
781 408, 8, 108, 34, 55, 83, 13, 14, 108, 113,
782 4, 89, 420, 98, 91, 28, 424, 48, 49, 26,
783 98, 109, 28, 71, 71, 108, 99, 48, 106, 99,
784 108, 106, 4, 64, 41, 115, 71, 108, 45, 85,
785 107, 107, 63, 106, 51, 52, 53, 111, 109, 104,
786 57, 108, 83, 106, 106, 62, 118, 117, 89, 0,
787 67, 117, 69, 105, 107, 0, 111, 98, 89, 3,
788 77, 13, 109, 109, 139, 106, 109, 108, 26, 86,
789 109, 88, 109, 13, 14, 56, 93, 74, 95, 96,
790 97, 21, 116, 115, 110, 25, 26, 27, 65, 29,
791 30, 155, 363, 237, 352, 230, 348, 322, 428, 39,
792 213, 420, 406, 43, 412, 147, 185, 47, 408, 360,
793 50, 51, 52, 53, 305, 258, 185, -1, -1, 59,
794 -1, 61, 62, -1, -1, -1, 66, 67, 68, 69,
795 70, -1, -1, -1, -1, -1, -1, 77, -1, 79,
796 80, 81, 82, -1, -1, -1, 86, -1, 88, 13,
797 14, -1, -1, 93, 94, 95, 96, 97, -1, -1,
798 -1, 25, 26, 27, -1, 29, -1, -1, -1, -1,
799 -1, -1, -1, -1, -1, 39, -1, -1, -1, 43,
800 -1, -1, -1, 47, -1, -1, 50, 51, 52, 53,
801 -1, -1, -1, -1, -1, -1, -1, 61, 62, -1,
802 -1, -1, 66, 67, 68, 69, 70, -1, -1, -1,
803 -1, -1, -1, 77, -1, 79, 80, -1, -1, -1,
804 -1, -1, 86, -1, 88, 13, 14, -1, -1, 93,
805 94, 95, 96, 97, -1, -1, -1, 25, 26, 27,
806 -1, 29, -1, -1, -1, -1, -1, -1, -1, -1,
807 -1, 39, -1, -1, -1, 43, -1, -1, -1, 47,
808 -1, -1, 50, 51, 52, 53, -1, -1, -1, -1,
809 -1, -1, -1, 61, 62, -1, -1, -1, 66, 67,
810 68, 69, 70, -1, -1, -1, -1, -1, -1, 77,
811 -1, 79, 80, -1, -1, -1, -1, -1, 86, -1,
812 88, -1, -1, -1, -1, 93, 94, 95, 96, 97
vlm6a02a8a2004-09-08 00:28:11 +0000813};
814/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
815#line 3 "/usr/share/bison.simple"
816/* This file comes from bison-1.28. */
817
818/* Skeleton output parser for bison,
819 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
820
821 This program is free software; you can redistribute it and/or modify
822 it under the terms of the GNU General Public License as published by
823 the Free Software Foundation; either version 2, or (at your option)
824 any later version.
825
826 This program is distributed in the hope that it will be useful,
827 but WITHOUT ANY WARRANTY; without even the implied warranty of
828 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
829 GNU General Public License for more details.
830
831 You should have received a copy of the GNU General Public License
832 along with this program; if not, write to the Free Software
833 Foundation, Inc., 59 Temple Place - Suite 330,
834 Boston, MA 02111-1307, USA. */
835
836/* As a special exception, when this file is copied by Bison into a
837 Bison output file, you may use that output file without restriction.
838 This special exception was added by the Free Software Foundation
839 in version 1.24 of Bison. */
840
841/* This is the parser code that is written into each bison parser
842 when the %semantic_parser declaration is not specified in the grammar.
843 It was written by Richard Stallman by simplifying the hairy parser
844 used when %semantic_parser is specified. */
845
846#ifndef YYSTACK_USE_ALLOCA
847#ifdef alloca
848#define YYSTACK_USE_ALLOCA
849#else /* alloca not defined */
850#ifdef __GNUC__
851#define YYSTACK_USE_ALLOCA
852#define alloca __builtin_alloca
853#else /* not GNU C. */
854#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
855#define YYSTACK_USE_ALLOCA
856#include <alloca.h>
857#else /* not sparc */
858/* We think this test detects Watcom and Microsoft C. */
859/* This used to test MSDOS, but that is a bad idea
860 since that symbol is in the user namespace. */
861#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
862#if 0 /* No need for malloc.h, which pollutes the namespace;
863 instead, just don't use alloca. */
864#include <malloc.h>
865#endif
866#else /* not MSDOS, or __TURBOC__ */
867#if defined(_AIX)
868/* I don't know what this was needed for, but it pollutes the namespace.
869 So I turned it off. rms, 2 May 1997. */
870/* #include <malloc.h> */
871 #pragma alloca
872#define YYSTACK_USE_ALLOCA
873#else /* not MSDOS, or __TURBOC__, or _AIX */
874#if 0
875#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
876 and on HPUX 10. Eventually we can turn this on. */
877#define YYSTACK_USE_ALLOCA
878#define alloca __builtin_alloca
879#endif /* __hpux */
880#endif
881#endif /* not _AIX */
882#endif /* not MSDOS, or __TURBOC__ */
883#endif /* not sparc */
884#endif /* not GNU C */
885#endif /* alloca not defined */
886#endif /* YYSTACK_USE_ALLOCA not defined */
887
888#ifdef YYSTACK_USE_ALLOCA
889#define YYSTACK_ALLOC alloca
vlmfa67ddc2004-06-03 03:38:44 +0000890#else
vlm6a02a8a2004-09-08 00:28:11 +0000891#define YYSTACK_ALLOC malloc
vlmfa67ddc2004-06-03 03:38:44 +0000892#endif
893
vlm6a02a8a2004-09-08 00:28:11 +0000894/* Note: there must be only one dollar sign in this file.
895 It is replaced by the list of actions, each action
896 as one case of the switch. */
vlmfa67ddc2004-06-03 03:38:44 +0000897
898#define yyerrok (yyerrstatus = 0)
899#define yyclearin (yychar = YYEMPTY)
900#define YYEMPTY -2
901#define YYEOF 0
902#define YYACCEPT goto yyacceptlab
vlm6a02a8a2004-09-08 00:28:11 +0000903#define YYABORT goto yyabortlab
vlmfa67ddc2004-06-03 03:38:44 +0000904#define YYERROR goto yyerrlab1
vlm6a02a8a2004-09-08 00:28:11 +0000905/* Like YYERROR except do call yyerror.
906 This remains here temporarily to ease the
907 transition to the new meaning of YYERROR, for GCC.
vlmfa67ddc2004-06-03 03:38:44 +0000908 Once GCC version 2 has supplanted version 1, this can go. */
909#define YYFAIL goto yyerrlab
910#define YYRECOVERING() (!!yyerrstatus)
vlm6a02a8a2004-09-08 00:28:11 +0000911#define YYBACKUP(token, value) \
vlmfa67ddc2004-06-03 03:38:44 +0000912do \
913 if (yychar == YYEMPTY && yylen == 1) \
vlm6a02a8a2004-09-08 00:28:11 +0000914 { yychar = (token), yylval = (value); \
vlmfa67ddc2004-06-03 03:38:44 +0000915 yychar1 = YYTRANSLATE (yychar); \
916 YYPOPSTACK; \
917 goto yybackup; \
918 } \
919 else \
vlm6a02a8a2004-09-08 00:28:11 +0000920 { yyerror ("syntax error: cannot back up"); YYERROR; } \
vlmfa67ddc2004-06-03 03:38:44 +0000921while (0)
922
923#define YYTERROR 1
924#define YYERRCODE 256
925
vlm6a02a8a2004-09-08 00:28:11 +0000926#ifndef YYPURE
927#define YYLEX yylex()
vlmfa67ddc2004-06-03 03:38:44 +0000928#endif
929
vlm6a02a8a2004-09-08 00:28:11 +0000930#ifdef YYPURE
931#ifdef YYLSP_NEEDED
932#ifdef YYLEX_PARAM
933#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
934#else
935#define YYLEX yylex(&yylval, &yylloc)
936#endif
937#else /* not YYLSP_NEEDED */
938#ifdef YYLEX_PARAM
939#define YYLEX yylex(&yylval, YYLEX_PARAM)
940#else
941#define YYLEX yylex(&yylval)
942#endif
943#endif /* not YYLSP_NEEDED */
944#endif
vlmfa67ddc2004-06-03 03:38:44 +0000945
vlm6a02a8a2004-09-08 00:28:11 +0000946/* If nonreentrant, generate the variables here */
vlmfa67ddc2004-06-03 03:38:44 +0000947
vlm6a02a8a2004-09-08 00:28:11 +0000948#ifndef YYPURE
vlmfa67ddc2004-06-03 03:38:44 +0000949
vlm6a02a8a2004-09-08 00:28:11 +0000950int yychar; /* the lookahead symbol */
951YYSTYPE yylval; /* the semantic value of the */
952 /* lookahead symbol */
vlmfa67ddc2004-06-03 03:38:44 +0000953
vlm6a02a8a2004-09-08 00:28:11 +0000954#ifdef YYLSP_NEEDED
955YYLTYPE yylloc; /* location data for the lookahead */
956 /* symbol */
957#endif
vlmfa67ddc2004-06-03 03:38:44 +0000958
vlm6a02a8a2004-09-08 00:28:11 +0000959int yynerrs; /* number of parse errors so far */
960#endif /* not YYPURE */
961
962#if YYDEBUG != 0
963int yydebug; /* nonzero means print parse trace */
964/* Since this is uninitialized, it does not stop multiple parsers
965 from coexisting. */
966#endif
967
968/* YYINITDEPTH indicates the initial size of the parser's stacks */
969
vlmfa67ddc2004-06-03 03:38:44 +0000970#ifndef YYINITDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000971#define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +0000972#endif
973
vlm6a02a8a2004-09-08 00:28:11 +0000974/* YYMAXDEPTH is the maximum size the stacks can grow to
975 (effective only if the built-in stack extension method is used). */
vlmfa67ddc2004-06-03 03:38:44 +0000976
977#if YYMAXDEPTH == 0
vlm6a02a8a2004-09-08 00:28:11 +0000978#undef YYMAXDEPTH
vlmfa67ddc2004-06-03 03:38:44 +0000979#endif
980
981#ifndef YYMAXDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000982#define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +0000983#endif
984
vlm6a02a8a2004-09-08 00:28:11 +0000985/* Define __yy_memcpy. Note that the size argument
986 should be passed with type unsigned int, because that is what the non-GCC
987 definitions require. With GCC, __builtin_memcpy takes an arg
988 of type size_t, but it can handle unsigned int. */
vlmfa67ddc2004-06-03 03:38:44 +0000989
vlm6a02a8a2004-09-08 00:28:11 +0000990#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
991#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
992#else /* not GNU C or C++ */
993#ifndef __cplusplus
vlmfa67ddc2004-06-03 03:38:44 +0000994
vlm6a02a8a2004-09-08 00:28:11 +0000995/* This is the most reliable way to avoid incompatibilities
996 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +0000997static void
vlm6a02a8a2004-09-08 00:28:11 +0000998__yy_memcpy (to, from, count)
999 char *to;
1000 char *from;
1001 unsigned int count;
vlm80103492004-09-07 10:39:09 +00001002{
vlm6a02a8a2004-09-08 00:28:11 +00001003 register char *f = from;
1004 register char *t = to;
1005 register int i = count;
vlm80103492004-09-07 10:39:09 +00001006
vlm6a02a8a2004-09-08 00:28:11 +00001007 while (i-- > 0)
1008 *t++ = *f++;
vlm80103492004-09-07 10:39:09 +00001009}
vlm80103492004-09-07 10:39:09 +00001010
vlm6a02a8a2004-09-08 00:28:11 +00001011#else /* __cplusplus */
vlm80103492004-09-07 10:39:09 +00001012
vlm6a02a8a2004-09-08 00:28:11 +00001013/* This is the most reliable way to avoid incompatibilities
1014 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +00001015static void
vlm6a02a8a2004-09-08 00:28:11 +00001016__yy_memcpy (char *to, char *from, unsigned int count)
vlm80103492004-09-07 10:39:09 +00001017{
vlm6a02a8a2004-09-08 00:28:11 +00001018 register char *t = to;
1019 register char *f = from;
1020 register int i = count;
vlm80103492004-09-07 10:39:09 +00001021
vlm6a02a8a2004-09-08 00:28:11 +00001022 while (i-- > 0)
1023 *t++ = *f++;
vlm044f7442004-09-04 04:49:21 +00001024}
vlm044f7442004-09-04 04:49:21 +00001025
vlm6a02a8a2004-09-08 00:28:11 +00001026#endif
1027#endif
vlmfa67ddc2004-06-03 03:38:44 +00001028
vlm6a02a8a2004-09-08 00:28:11 +00001029#line 217 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00001030
1031/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1032 into yyparse. The argument should have type void *.
1033 It should actually point to an object.
1034 Grammar actions can access the variable by casting it
1035 to the proper pointer type. */
1036
1037#ifdef YYPARSE_PARAM
vlm6a02a8a2004-09-08 00:28:11 +00001038#ifdef __cplusplus
1039#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1040#define YYPARSE_PARAM_DECL
1041#else /* not __cplusplus */
1042#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1043#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1044#endif /* not __cplusplus */
1045#else /* not YYPARSE_PARAM */
1046#define YYPARSE_PARAM_ARG
1047#define YYPARSE_PARAM_DECL
1048#endif /* not YYPARSE_PARAM */
vlmfa67ddc2004-06-03 03:38:44 +00001049
1050/* Prevent warning if -Wstrict-prototypes. */
1051#ifdef __GNUC__
vlm6a02a8a2004-09-08 00:28:11 +00001052#ifdef YYPARSE_PARAM
vlmfa67ddc2004-06-03 03:38:44 +00001053int yyparse (void *);
vlm6a02a8a2004-09-08 00:28:11 +00001054#else
vlmfa67ddc2004-06-03 03:38:44 +00001055int yyparse (void);
vlm6a02a8a2004-09-08 00:28:11 +00001056#endif
vlm39e5ed72004-09-05 10:40:41 +00001057#endif
vlm80103492004-09-07 10:39:09 +00001058
vlmfa67ddc2004-06-03 03:38:44 +00001059int
vlm6a02a8a2004-09-08 00:28:11 +00001060yyparse(YYPARSE_PARAM_ARG)
vlmfa67ddc2004-06-03 03:38:44 +00001061 YYPARSE_PARAM_DECL
1062{
1063 register int yystate;
1064 register int yyn;
1065 register short *yyssp;
1066 register YYSTYPE *yyvsp;
vlm6a02a8a2004-09-08 00:28:11 +00001067 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1068 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
vlmfa67ddc2004-06-03 03:38:44 +00001069
vlm6a02a8a2004-09-08 00:28:11 +00001070 short yyssa[YYINITDEPTH]; /* the state stack */
1071 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
vlmfa67ddc2004-06-03 03:38:44 +00001072
vlm6a02a8a2004-09-08 00:28:11 +00001073 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1074 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
vlmfa67ddc2004-06-03 03:38:44 +00001075
vlm6a02a8a2004-09-08 00:28:11 +00001076#ifdef YYLSP_NEEDED
1077 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1078 YYLTYPE *yyls = yylsa;
1079 YYLTYPE *yylsp;
1080
1081#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1082#else
vlmfa67ddc2004-06-03 03:38:44 +00001083#define YYPOPSTACK (yyvsp--, yyssp--)
vlm6a02a8a2004-09-08 00:28:11 +00001084#endif
vlmfa67ddc2004-06-03 03:38:44 +00001085
vlm6a02a8a2004-09-08 00:28:11 +00001086 int yystacksize = YYINITDEPTH;
1087 int yyfree_stacks = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001088
vlm6a02a8a2004-09-08 00:28:11 +00001089#ifdef YYPURE
1090 int yychar;
1091 YYSTYPE yylval;
1092 int yynerrs;
1093#ifdef YYLSP_NEEDED
1094 YYLTYPE yylloc;
1095#endif
1096#endif
vlmfa67ddc2004-06-03 03:38:44 +00001097
vlm6a02a8a2004-09-08 00:28:11 +00001098 YYSTYPE yyval; /* the variable used to return */
1099 /* semantic values from the action */
1100 /* routines */
vlmfa67ddc2004-06-03 03:38:44 +00001101
1102 int yylen;
1103
vlm6a02a8a2004-09-08 00:28:11 +00001104#if YYDEBUG != 0
1105 if (yydebug)
1106 fprintf(stderr, "Starting parse\n");
1107#endif
vlmfa67ddc2004-06-03 03:38:44 +00001108
1109 yystate = 0;
1110 yyerrstatus = 0;
1111 yynerrs = 0;
1112 yychar = YYEMPTY; /* Cause a token to be read. */
1113
1114 /* Initialize stack pointers.
1115 Waste one element of value and location stack
1116 so that they stay on the same level as the state stack.
1117 The wasted elements are never initialized. */
1118
vlm6a02a8a2004-09-08 00:28:11 +00001119 yyssp = yyss - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001120 yyvsp = yyvs;
vlm6a02a8a2004-09-08 00:28:11 +00001121#ifdef YYLSP_NEEDED
1122 yylsp = yyls;
1123#endif
vlmfa67ddc2004-06-03 03:38:44 +00001124
vlm6a02a8a2004-09-08 00:28:11 +00001125/* Push a new state, which is found in yystate . */
1126/* In all cases, when you get here, the value and location stacks
1127 have just been pushed. so pushing a state here evens the stacks. */
1128yynewstate:
vlmfa67ddc2004-06-03 03:38:44 +00001129
vlm6a02a8a2004-09-08 00:28:11 +00001130 *++yyssp = yystate;
vlmfa67ddc2004-06-03 03:38:44 +00001131
1132 if (yyssp >= yyss + yystacksize - 1)
1133 {
vlm6a02a8a2004-09-08 00:28:11 +00001134 /* Give user a chance to reallocate the stack */
1135 /* Use copies of these so that the &'s don't force the real ones into memory. */
1136 YYSTYPE *yyvs1 = yyvs;
1137 short *yyss1 = yyss;
1138#ifdef YYLSP_NEEDED
1139 YYLTYPE *yyls1 = yyls;
1140#endif
1141
vlmfa67ddc2004-06-03 03:38:44 +00001142 /* Get the current used size of the three stacks, in elements. */
vlm6a02a8a2004-09-08 00:28:11 +00001143 int size = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001144
1145#ifdef yyoverflow
vlm6a02a8a2004-09-08 00:28:11 +00001146 /* Each stack pointer address is followed by the size of
1147 the data in use in that stack, in bytes. */
1148#ifdef YYLSP_NEEDED
1149 /* This used to be a conditional around just the two extra args,
1150 but that might be undefined if yyoverflow is a macro. */
1151 yyoverflow("parser stack overflow",
1152 &yyss1, size * sizeof (*yyssp),
1153 &yyvs1, size * sizeof (*yyvsp),
1154 &yyls1, size * sizeof (*yylsp),
1155 &yystacksize);
1156#else
1157 yyoverflow("parser stack overflow",
1158 &yyss1, size * sizeof (*yyssp),
1159 &yyvs1, size * sizeof (*yyvsp),
1160 &yystacksize);
1161#endif
vlmfa67ddc2004-06-03 03:38:44 +00001162
vlm6a02a8a2004-09-08 00:28:11 +00001163 yyss = yyss1; yyvs = yyvs1;
1164#ifdef YYLSP_NEEDED
1165 yyls = yyls1;
1166#endif
vlmfa67ddc2004-06-03 03:38:44 +00001167#else /* no yyoverflow */
1168 /* Extend the stack our own way. */
1169 if (yystacksize >= YYMAXDEPTH)
vlm6a02a8a2004-09-08 00:28:11 +00001170 {
1171 yyerror("parser stack overflow");
1172 if (yyfree_stacks)
1173 {
1174 free (yyss);
1175 free (yyvs);
1176#ifdef YYLSP_NEEDED
1177 free (yyls);
1178#endif
1179 }
1180 return 2;
1181 }
vlmfa67ddc2004-06-03 03:38:44 +00001182 yystacksize *= 2;
1183 if (yystacksize > YYMAXDEPTH)
1184 yystacksize = YYMAXDEPTH;
vlm6a02a8a2004-09-08 00:28:11 +00001185#ifndef YYSTACK_USE_ALLOCA
1186 yyfree_stacks = 1;
1187#endif
1188 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1189 __yy_memcpy ((char *)yyss, (char *)yyss1,
1190 size * (unsigned int) sizeof (*yyssp));
1191 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1192 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1193 size * (unsigned int) sizeof (*yyvsp));
1194#ifdef YYLSP_NEEDED
1195 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1196 __yy_memcpy ((char *)yyls, (char *)yyls1,
1197 size * (unsigned int) sizeof (*yylsp));
1198#endif
vlmfa67ddc2004-06-03 03:38:44 +00001199#endif /* no yyoverflow */
1200
vlm6a02a8a2004-09-08 00:28:11 +00001201 yyssp = yyss + size - 1;
1202 yyvsp = yyvs + size - 1;
1203#ifdef YYLSP_NEEDED
1204 yylsp = yyls + size - 1;
1205#endif
vlmfa67ddc2004-06-03 03:38:44 +00001206
vlm6a02a8a2004-09-08 00:28:11 +00001207#if YYDEBUG != 0
1208 if (yydebug)
1209 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1210#endif
vlmfa67ddc2004-06-03 03:38:44 +00001211
1212 if (yyssp >= yyss + yystacksize - 1)
1213 YYABORT;
1214 }
1215
vlm6a02a8a2004-09-08 00:28:11 +00001216#if YYDEBUG != 0
1217 if (yydebug)
1218 fprintf(stderr, "Entering state %d\n", yystate);
1219#endif
vlmfa67ddc2004-06-03 03:38:44 +00001220
1221 goto yybackup;
vlm6a02a8a2004-09-08 00:28:11 +00001222 yybackup:
vlmfa67ddc2004-06-03 03:38:44 +00001223
1224/* Do appropriate processing given the current state. */
1225/* Read a lookahead token if we need one and don't already have one. */
1226/* yyresume: */
1227
1228 /* First try to decide what to do without reference to lookahead token. */
1229
1230 yyn = yypact[yystate];
vlm6a02a8a2004-09-08 00:28:11 +00001231 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001232 goto yydefault;
1233
1234 /* Not known => get a lookahead token if don't already have one. */
1235
1236 /* yychar is either YYEMPTY or YYEOF
1237 or a valid token in external form. */
1238
1239 if (yychar == YYEMPTY)
1240 {
vlm6a02a8a2004-09-08 00:28:11 +00001241#if YYDEBUG != 0
1242 if (yydebug)
1243 fprintf(stderr, "Reading a token: ");
1244#endif
vlmfa67ddc2004-06-03 03:38:44 +00001245 yychar = YYLEX;
1246 }
1247
vlm6a02a8a2004-09-08 00:28:11 +00001248 /* Convert token to internal form (in yychar1) for indexing tables with */
vlmfa67ddc2004-06-03 03:38:44 +00001249
vlm6a02a8a2004-09-08 00:28:11 +00001250 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001251 {
1252 yychar1 = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001253 yychar = YYEOF; /* Don't call YYLEX any more */
vlmfa67ddc2004-06-03 03:38:44 +00001254
vlm6a02a8a2004-09-08 00:28:11 +00001255#if YYDEBUG != 0
1256 if (yydebug)
1257 fprintf(stderr, "Now at end of input.\n");
1258#endif
vlmfa67ddc2004-06-03 03:38:44 +00001259 }
1260 else
1261 {
vlm6a02a8a2004-09-08 00:28:11 +00001262 yychar1 = YYTRANSLATE(yychar);
vlmfa67ddc2004-06-03 03:38:44 +00001263
vlm6a02a8a2004-09-08 00:28:11 +00001264#if YYDEBUG != 0
1265 if (yydebug)
1266 {
1267 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1268 /* Give the individual parser a way to print the precise meaning
1269 of a token, for further debugging info. */
1270#ifdef YYPRINT
1271 YYPRINT (stderr, yychar, yylval);
1272#endif
1273 fprintf (stderr, ")\n");
1274 }
1275#endif
vlmfa67ddc2004-06-03 03:38:44 +00001276 }
1277
1278 yyn += yychar1;
vlm6a02a8a2004-09-08 00:28:11 +00001279 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001280 goto yydefault;
vlm6a02a8a2004-09-08 00:28:11 +00001281
vlmfa67ddc2004-06-03 03:38:44 +00001282 yyn = yytable[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001283
1284 /* yyn is what to do for this token type in this state.
1285 Negative => reduce, -yyn is rule number.
1286 Positive => shift, yyn is new state.
1287 New state is final state => don't bother to shift,
1288 just return success.
1289 0, or most negative number => error. */
1290
1291 if (yyn < 0)
vlmfa67ddc2004-06-03 03:38:44 +00001292 {
vlm6a02a8a2004-09-08 00:28:11 +00001293 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001294 goto yyerrlab;
1295 yyn = -yyn;
1296 goto yyreduce;
1297 }
vlm6a02a8a2004-09-08 00:28:11 +00001298 else if (yyn == 0)
1299 goto yyerrlab;
vlmfa67ddc2004-06-03 03:38:44 +00001300
1301 if (yyn == YYFINAL)
1302 YYACCEPT;
1303
1304 /* Shift the lookahead token. */
vlm6a02a8a2004-09-08 00:28:11 +00001305
1306#if YYDEBUG != 0
1307 if (yydebug)
1308 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1309#endif
vlmfa67ddc2004-06-03 03:38:44 +00001310
1311 /* Discard the token being shifted unless it is eof. */
1312 if (yychar != YYEOF)
1313 yychar = YYEMPTY;
1314
1315 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00001316#ifdef YYLSP_NEEDED
1317 *++yylsp = yylloc;
1318#endif
vlmfa67ddc2004-06-03 03:38:44 +00001319
vlm6a02a8a2004-09-08 00:28:11 +00001320 /* count tokens shifted since error; after three, turn off error status. */
1321 if (yyerrstatus) yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001322
1323 yystate = yyn;
1324 goto yynewstate;
1325
vlm6a02a8a2004-09-08 00:28:11 +00001326/* Do the default action for the current state. */
vlm80103492004-09-07 10:39:09 +00001327yydefault:
vlm6a02a8a2004-09-08 00:28:11 +00001328
vlmfa67ddc2004-06-03 03:38:44 +00001329 yyn = yydefact[yystate];
1330 if (yyn == 0)
1331 goto yyerrlab;
1332
vlm6a02a8a2004-09-08 00:28:11 +00001333/* Do a reduction. yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001334yyreduce:
1335 yylen = yyr2[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001336 if (yylen > 0)
1337 yyval = yyvsp[1-yylen]; /* implement default value of the action */
vlmfa67ddc2004-06-03 03:38:44 +00001338
vlm6a02a8a2004-09-08 00:28:11 +00001339#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00001340 if (yydebug)
1341 {
vlm6a02a8a2004-09-08 00:28:11 +00001342 int i;
vlmfa67ddc2004-06-03 03:38:44 +00001343
vlm6a02a8a2004-09-08 00:28:11 +00001344 fprintf (stderr, "Reducing via rule %d (line %d), ",
1345 yyn, yyrline[yyn]);
vlmfa67ddc2004-06-03 03:38:44 +00001346
1347 /* Print the symbols being reduced, and their result. */
vlm6a02a8a2004-09-08 00:28:11 +00001348 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1349 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1350 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
vlmfa67ddc2004-06-03 03:38:44 +00001351 }
1352#endif
vlm80103492004-09-07 10:39:09 +00001353
vlm6a02a8a2004-09-08 00:28:11 +00001354
1355 switch (yyn) {
1356
1357case 1:
vlm808411d2006-03-14 16:31:37 +00001358#line 324 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001359{
1360 *(void **)param = yyvsp[0].a_grammar;
1361 ;
1362 break;}
1363case 2:
vlm808411d2006-03-14 16:31:37 +00001364#line 330 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001365{
vlmfa67ddc2004-06-03 03:38:44 +00001366 yyval.a_grammar = asn1p_new();
1367 checkmem(yyval.a_grammar);
1368 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001369 ;
1370 break;}
1371case 3:
vlm808411d2006-03-14 16:31:37 +00001372#line 335 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001373{
vlmfa67ddc2004-06-03 03:38:44 +00001374 yyval.a_grammar = yyvsp[-1].a_grammar;
1375 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001376 ;
1377 break;}
1378case 4:
vlm808411d2006-03-14 16:31:37 +00001379#line 356 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001380{
vlmfa67ddc2004-06-03 03:38:44 +00001381
1382 if(yyvsp[-1].a_module) {
1383 yyval.a_module = yyvsp[-1].a_module;
1384 } else {
1385 /* There's a chance that a module is just plain empty */
1386 yyval.a_module = asn1p_module_new();
1387 }
1388 checkmem(yyval.a_module);
1389
vlm931aeed2005-08-12 10:09:10 +00001390 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00001391 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1392 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001393 ;
1394 break;}
1395case 5:
vlm808411d2006-03-14 16:31:37 +00001396#line 377 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001397{ yyval.a_oid = 0; ;
1398 break;}
1399case 6:
vlm808411d2006-03-14 16:31:37 +00001400#line 378 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001401{ yyval.a_oid = yyvsp[0].a_oid; ;
1402 break;}
1403case 7:
vlm808411d2006-03-14 16:31:37 +00001404#line 382 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001405{
vlmfa67ddc2004-06-03 03:38:44 +00001406 yyval.a_oid = yyvsp[-1].a_oid;
vlm6a02a8a2004-09-08 00:28:11 +00001407 ;
1408 break;}
1409case 8:
vlm808411d2006-03-14 16:31:37 +00001410#line 385 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001411{
vlmfa67ddc2004-06-03 03:38:44 +00001412 yyval.a_oid = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001413 ;
1414 break;}
1415case 9:
vlm808411d2006-03-14 16:31:37 +00001416#line 391 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001417{
vlmfa67ddc2004-06-03 03:38:44 +00001418 yyval.a_oid = asn1p_oid_new();
1419 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1420 if(yyvsp[0].a_oid_arc.name)
1421 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001422 ;
1423 break;}
1424case 10:
vlm808411d2006-03-14 16:31:37 +00001425#line 397 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001426{
vlmfa67ddc2004-06-03 03:38:44 +00001427 yyval.a_oid = yyvsp[-1].a_oid;
1428 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1429 if(yyvsp[0].a_oid_arc.name)
1430 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001431 ;
1432 break;}
1433case 11:
vlm808411d2006-03-14 16:31:37 +00001434#line 406 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001435{ /* iso */
vlmfa67ddc2004-06-03 03:38:44 +00001436 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1437 yyval.a_oid_arc.number = -1;
vlm6a02a8a2004-09-08 00:28:11 +00001438 ;
1439 break;}
1440case 12:
vlm808411d2006-03-14 16:31:37 +00001441#line 410 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001442{ /* iso(1) */
vlmfa67ddc2004-06-03 03:38:44 +00001443 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1444 yyval.a_oid_arc.number = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001445 ;
1446 break;}
1447case 13:
vlm808411d2006-03-14 16:31:37 +00001448#line 414 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001449{ /* 1 */
vlmfa67ddc2004-06-03 03:38:44 +00001450 yyval.a_oid_arc.name = 0;
1451 yyval.a_oid_arc.number = yyvsp[0].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001452 ;
1453 break;}
1454case 14:
vlm808411d2006-03-14 16:31:37 +00001455#line 424 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001456{ yyval.a_module_flags = MSF_NOFLAGS; ;
1457 break;}
1458case 15:
vlm808411d2006-03-14 16:31:37 +00001459#line 425 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001460{
vlmfa67ddc2004-06-03 03:38:44 +00001461 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001462 ;
1463 break;}
1464case 16:
vlm808411d2006-03-14 16:31:37 +00001465#line 434 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001466{
vlmfa67ddc2004-06-03 03:38:44 +00001467 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001468 ;
1469 break;}
1470case 17:
vlm808411d2006-03-14 16:31:37 +00001471#line 437 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001472{
vlmfa67ddc2004-06-03 03:38:44 +00001473 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001474 ;
1475 break;}
1476case 18:
vlm808411d2006-03-14 16:31:37 +00001477#line 446 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001478{
vlmfa67ddc2004-06-03 03:38:44 +00001479 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001480 ;
1481 break;}
1482case 19:
vlm808411d2006-03-14 16:31:37 +00001483#line 449 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001484{
vlmfa67ddc2004-06-03 03:38:44 +00001485 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001486 ;
1487 break;}
1488case 20:
vlm808411d2006-03-14 16:31:37 +00001489#line 452 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001490{
vlmfa67ddc2004-06-03 03:38:44 +00001491 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001492 ;
1493 break;}
1494case 21:
vlm808411d2006-03-14 16:31:37 +00001495#line 455 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001496{
vlmfa67ddc2004-06-03 03:38:44 +00001497 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
vlm6a02a8a2004-09-08 00:28:11 +00001498 ;
1499 break;}
1500case 22:
vlm808411d2006-03-14 16:31:37 +00001501#line 459 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001502{
vlm9283dbe2004-08-18 04:59:12 +00001503 /* X.680Amd1 specifies TAG and XER */
1504 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1505 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1506 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1507 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1508 } else {
1509 fprintf(stderr,
1510 "WARNING: %s INSTRUCTIONS at line %d: "
1511 "Unrecognized encoding reference\n",
1512 yyvsp[-1].tv_str, yylineno);
1513 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1514 }
1515 free(yyvsp[-1].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00001516 ;
1517 break;}
1518case 23:
vlm808411d2006-03-14 16:31:37 +00001519#line 480 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001520{ yyval.a_module = 0; ;
1521 break;}
1522case 24:
vlm808411d2006-03-14 16:31:37 +00001523#line 481 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001524{
vlmfa67ddc2004-06-03 03:38:44 +00001525 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001526 ;
1527 break;}
1528case 25:
vlm808411d2006-03-14 16:31:37 +00001529#line 490 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001530{
vlm9283dbe2004-08-18 04:59:12 +00001531 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001532 ;
1533 break;}
1534case 26:
vlm808411d2006-03-14 16:31:37 +00001535#line 493 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001536{
vlmfa67ddc2004-06-03 03:38:44 +00001537 yyval.a_module = yyvsp[-1].a_module;
1538
vlm9283dbe2004-08-18 04:59:12 +00001539 /* Behave well when one of them is skipped. */
1540 if(!(yyvsp[-1].a_module)) {
1541 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1542 break;
1543 }
1544
vlmfa67ddc2004-06-03 03:38:44 +00001545#ifdef MY_IMPORT
1546#error MY_IMPORT DEFINED ELSEWHERE!
1547#endif
1548#define MY_IMPORT(foo,field) do { \
vlm97ed7152004-08-13 12:31:09 +00001549 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
vlmfa67ddc2004-06-03 03:38:44 +00001550 TQ_ADD(&(yyval.a_module->foo), \
1551 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1552 field); \
vlm97ed7152004-08-13 12:31:09 +00001553 } \
1554 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1555 } while(0)
vlmfa67ddc2004-06-03 03:38:44 +00001556
1557 MY_IMPORT(imports, xp_next);
1558 MY_IMPORT(exports, xp_next);
1559 MY_IMPORT(members, next);
1560#undef MY_IMPORT
1561
vlm6a02a8a2004-09-08 00:28:11 +00001562 ;
1563 break;}
1564case 27:
vlm808411d2006-03-14 16:31:37 +00001565#line 526 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001566{
vlmfa67ddc2004-06-03 03:38:44 +00001567 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001568 ;
1569 break;}
1570case 28:
vlm808411d2006-03-14 16:31:37 +00001571#line 529 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001572{
vlmfa67ddc2004-06-03 03:38:44 +00001573 yyval.a_module = asn1p_module_new();
1574 checkmem(yyval.a_module);
1575 if(yyvsp[0].a_xports) {
1576 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1577 } else {
1578 /* "EXPORTS ALL;" ? */
1579 }
vlm6a02a8a2004-09-08 00:28:11 +00001580 ;
1581 break;}
1582case 29:
vlm808411d2006-03-14 16:31:37 +00001583#line 538 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001584{
vlm9283dbe2004-08-18 04:59:12 +00001585 yyval.a_module = asn1p_module_new();
1586 checkmem(yyval.a_module);
1587 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1588 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1589 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001590 ;
1591 break;}
vlm931aeed2005-08-12 10:09:10 +00001592case 30:
vlm808411d2006-03-14 16:31:37 +00001593#line 545 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001594{
1595 yyval.a_module = asn1p_module_new();
1596 checkmem(yyval.a_module);
1597 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1598 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1599 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1600 ;
1601 break;}
vlm6a02a8a2004-09-08 00:28:11 +00001602case 31:
vlm808411d2006-03-14 16:31:37 +00001603#line 558 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001604{
vlm9283dbe2004-08-18 04:59:12 +00001605 yyval.a_module = asn1p_module_new();
1606 checkmem(yyval.a_module);
1607 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1608 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1609 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001610 ;
1611 break;}
1612case 32:
vlm808411d2006-03-14 16:31:37 +00001613#line 566 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001614{ asn1p_lexer_hack_push_encoding_control(); ;
1615 break;}
1616case 33:
vlm808411d2006-03-14 16:31:37 +00001617#line 567 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001618{
vlm9283dbe2004-08-18 04:59:12 +00001619 fprintf(stderr,
1620 "WARNING: ENCODING-CONTROL %s "
1621 "specification at line %d ignored\n",
1622 yyvsp[-1].tv_str, yylineno);
1623 free(yyvsp[-1].tv_str);
1624 yyval.a_module = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001625 ;
1626 break;}
1627case 34:
vlm808411d2006-03-14 16:31:37 +00001628#line 579 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001629{
vlmfa67ddc2004-06-03 03:38:44 +00001630 return yyerror(
vlm1ac75e72005-11-26 11:21:55 +00001631 "Attempt to redefine a standard basic string type, "
1632 "please comment out or remove this type redefinition.");
vlm6a02a8a2004-09-08 00:28:11 +00001633 ;
1634 break;}
1635case 35:
vlm808411d2006-03-14 16:31:37 +00001636#line 592 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001637{
vlm931aeed2005-08-12 10:09:10 +00001638 if(!saved_aid && 0)
1639 return yyerror("Unterminated IMPORTS FROM, "
1640 "expected semicolon ';'");
1641 saved_aid = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001642 yyval.a_module = yyvsp[-1].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001643 ;
1644 break;}
1645case 36:
vlm808411d2006-03-14 16:31:37 +00001646#line 602 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001647{
vlmfa67ddc2004-06-03 03:38:44 +00001648 return yyerror("Empty IMPORTS list");
vlm6a02a8a2004-09-08 00:28:11 +00001649 ;
1650 break;}
1651case 37:
vlm808411d2006-03-14 16:31:37 +00001652#line 608 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001653{
vlmfa67ddc2004-06-03 03:38:44 +00001654 yyval.a_module = asn1p_module_new();
1655 checkmem(yyval.a_module);
1656 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001657 ;
1658 break;}
1659case 38:
vlm808411d2006-03-14 16:31:37 +00001660#line 613 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001661{
vlmfa67ddc2004-06-03 03:38:44 +00001662 yyval.a_module = yyvsp[-1].a_module;
1663 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001664 ;
1665 break;}
1666case 39:
vlm808411d2006-03-14 16:31:37 +00001667#line 620 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001668{ memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
1669 break;}
1670case 40:
vlm808411d2006-03-14 16:31:37 +00001671#line 621 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001672{ yyval.a_aid.oid = yyvsp[0].a_oid; ;
1673 break;}
1674case 41:
vlm808411d2006-03-14 16:31:37 +00001675#line 625 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001676{
vlmfa67ddc2004-06-03 03:38:44 +00001677 yyval.a_xports = yyvsp[-3].a_xports;
vlm931aeed2005-08-12 10:09:10 +00001678 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
1679 yyval.a_xports->identifier = yyvsp[0].a_aid;
1680 /* This stupid thing is used for look-back hack. */
1681 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
vlmfa67ddc2004-06-03 03:38:44 +00001682 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001683 ;
1684 break;}
vlm931aeed2005-08-12 10:09:10 +00001685case 42:
vlm808411d2006-03-14 16:31:37 +00001686#line 636 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001687{
vlmfa67ddc2004-06-03 03:38:44 +00001688 yyval.a_xports = asn1p_xports_new();
1689 checkmem(yyval.a_xports);
1690 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001691 ;
1692 break;}
vlm931aeed2005-08-12 10:09:10 +00001693case 43:
vlm808411d2006-03-14 16:31:37 +00001694#line 641 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001695{
vlmfa67ddc2004-06-03 03:38:44 +00001696 yyval.a_xports = yyvsp[-2].a_xports;
1697 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001698 ;
1699 break;}
vlm0aa86902004-10-12 23:26:53 +00001700case 44:
vlm808411d2006-03-14 16:31:37 +00001701#line 648 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001702{
vlmfa67ddc2004-06-03 03:38:44 +00001703 yyval.a_expr = asn1p_expr_new(yylineno);
1704 checkmem(yyval.a_expr);
1705 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1706 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm6a02a8a2004-09-08 00:28:11 +00001707 ;
1708 break;}
vlm0aa86902004-10-12 23:26:53 +00001709case 45:
vlm808411d2006-03-14 16:31:37 +00001710#line 654 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001711{ /* Completely equivalent to above */
1712 yyval.a_expr = asn1p_expr_new(yylineno);
1713 checkmem(yyval.a_expr);
1714 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1715 yyval.a_expr->expr_type = A1TC_REFERENCE;
1716 ;
1717 break;}
1718case 46:
vlm808411d2006-03-14 16:31:37 +00001719#line 660 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001720{
1721 yyval.a_expr = asn1p_expr_new(yylineno);
1722 checkmem(yyval.a_expr);
1723 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1724 yyval.a_expr->expr_type = A1TC_REFERENCE;
1725 ;
1726 break;}
1727case 47:
vlm808411d2006-03-14 16:31:37 +00001728#line 669 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001729{
vlmfa67ddc2004-06-03 03:38:44 +00001730 yyval.a_xports = yyvsp[-1].a_xports;
vlm6a02a8a2004-09-08 00:28:11 +00001731 ;
1732 break;}
vlm931aeed2005-08-12 10:09:10 +00001733case 48:
vlm808411d2006-03-14 16:31:37 +00001734#line 672 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001735{
vlmfa67ddc2004-06-03 03:38:44 +00001736 yyval.a_xports = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001737 ;
1738 break;}
vlm931aeed2005-08-12 10:09:10 +00001739case 49:
vlm808411d2006-03-14 16:31:37 +00001740#line 675 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001741{
vlmfa67ddc2004-06-03 03:38:44 +00001742 /* Empty EXPORTS clause effectively prohibits export. */
1743 yyval.a_xports = asn1p_xports_new();
1744 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001745 ;
1746 break;}
vlm931aeed2005-08-12 10:09:10 +00001747case 50:
vlm808411d2006-03-14 16:31:37 +00001748#line 683 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001749{
vlmfa67ddc2004-06-03 03:38:44 +00001750 yyval.a_xports = asn1p_xports_new();
1751 assert(yyval.a_xports);
1752 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001753 ;
1754 break;}
vlm931aeed2005-08-12 10:09:10 +00001755case 51:
vlm808411d2006-03-14 16:31:37 +00001756#line 688 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001757{
vlmfa67ddc2004-06-03 03:38:44 +00001758 yyval.a_xports = yyvsp[-2].a_xports;
1759 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001760 ;
1761 break;}
vlm0aa86902004-10-12 23:26:53 +00001762case 52:
vlm808411d2006-03-14 16:31:37 +00001763#line 695 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001764{
1765 yyval.a_expr = asn1p_expr_new(yylineno);
1766 checkmem(yyval.a_expr);
1767 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1768 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1769 ;
1770 break;}
1771case 53:
vlm808411d2006-03-14 16:31:37 +00001772#line 701 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001773{
1774 yyval.a_expr = asn1p_expr_new(yylineno);
1775 checkmem(yyval.a_expr);
1776 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1777 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1778 ;
vlm7388db02005-03-31 21:48:13 +00001779 break;}
1780case 54:
vlm808411d2006-03-14 16:31:37 +00001781#line 707 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001782{
1783 yyval.a_expr = asn1p_expr_new(yylineno);
1784 checkmem(yyval.a_expr);
1785 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1786 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1787 ;
1788 break;}
1789case 55:
vlm808411d2006-03-14 16:31:37 +00001790#line 718 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001791{ asn1p_lexer_hack_push_opaque_state(); ;
1792 break;}
1793case 56:
vlm808411d2006-03-14 16:31:37 +00001794#line 718 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001795{
vlmfa67ddc2004-06-03 03:38:44 +00001796 yyval.a_expr = yyvsp[-4].a_expr;
1797 assert(yyval.a_expr->Identifier == 0);
1798 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1799 yyval.a_expr->meta_type = AMT_VALUESET;
vlm7388db02005-03-31 21:48:13 +00001800 // take care of ValueSet body
vlm6a02a8a2004-09-08 00:28:11 +00001801 ;
1802 break;}
vlm931aeed2005-08-12 10:09:10 +00001803case 57:
vlm808411d2006-03-14 16:31:37 +00001804#line 728 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001805{
vlmfa67ddc2004-06-03 03:38:44 +00001806 yyval.a_expr = asn1p_expr_new(yylineno);
1807 checkmem(yyval.a_expr);
1808 yyval.a_expr->reference = yyvsp[0].a_ref;
1809 yyval.a_expr->expr_type = A1TC_REFERENCE;
1810 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00001811 ;
1812 break;}
vlm931aeed2005-08-12 10:09:10 +00001813case 58:
vlm808411d2006-03-14 16:31:37 +00001814#line 735 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001815{
vlmfa67ddc2004-06-03 03:38:44 +00001816 yyval.a_expr = asn1p_expr_new(yylineno);
1817 checkmem(yyval.a_expr);
1818 yyval.a_expr->expr_type = yyvsp[0].a_type;
1819 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001820 ;
1821 break;}
vlm931aeed2005-08-12 10:09:10 +00001822case 59:
vlm808411d2006-03-14 16:31:37 +00001823#line 753 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001824{
vlmfa67ddc2004-06-03 03:38:44 +00001825 yyval.a_expr = yyvsp[0].a_expr;
vlmfce48a42004-09-14 02:36:39 +00001826 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00001827 assert(yyval.a_expr->expr_type);
1828 assert(yyval.a_expr->meta_type);
vlm6a02a8a2004-09-08 00:28:11 +00001829 ;
1830 break;}
vlmdc7cf042006-03-09 08:49:26 +00001831case 60:
vlm808411d2006-03-14 16:31:37 +00001832#line 759 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001833{
vlmfa67ddc2004-06-03 03:38:44 +00001834 yyval.a_expr = yyvsp[0].a_expr;
1835 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1836 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
vlmdc7cf042006-03-09 08:49:26 +00001837 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
vlm6a02a8a2004-09-08 00:28:11 +00001838 ;
1839 break;}
vlmdc7cf042006-03-09 08:49:26 +00001840case 61:
vlm808411d2006-03-14 16:31:37 +00001841#line 775 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001842{
vlmfa67ddc2004-06-03 03:38:44 +00001843 yyval.a_expr = yyvsp[0].a_expr;
1844 assert(yyval.a_expr->Identifier == 0);
1845 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1846 yyval.a_expr->params = yyvsp[-3].a_plist;
1847 yyval.a_expr->meta_type = AMT_PARAMTYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001848 ;
1849 break;}
vlmdc7cf042006-03-09 08:49:26 +00001850case 62:
vlm808411d2006-03-14 16:31:37 +00001851#line 785 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001852{
vlmfa67ddc2004-06-03 03:38:44 +00001853 int ret;
1854 yyval.a_plist = asn1p_paramlist_new(yylineno);
1855 checkmem(yyval.a_plist);
1856 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1857 checkmem(ret == 0);
1858 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1859 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001860 ;
1861 break;}
vlmdc7cf042006-03-09 08:49:26 +00001862case 63:
vlm808411d2006-03-14 16:31:37 +00001863#line 794 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001864{
vlmfa67ddc2004-06-03 03:38:44 +00001865 int ret;
1866 yyval.a_plist = yyvsp[-2].a_plist;
1867 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1868 checkmem(ret == 0);
1869 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1870 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001871 ;
1872 break;}
vlmdc7cf042006-03-09 08:49:26 +00001873case 64:
vlm808411d2006-03-14 16:31:37 +00001874#line 805 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001875{
vlmfa67ddc2004-06-03 03:38:44 +00001876 yyval.a_parg.governor = NULL;
1877 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001878 ;
1879 break;}
vlmdc7cf042006-03-09 08:49:26 +00001880case 65:
vlm808411d2006-03-14 16:31:37 +00001881#line 809 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00001882{
1883 int ret;
1884 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1885 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1886 checkmem(ret == 0);
1887 yyval.a_parg.argument = yyvsp[0].tv_str;
1888 ;
1889 break;}
vlm7388db02005-03-31 21:48:13 +00001890case 66:
vlm808411d2006-03-14 16:31:37 +00001891#line 816 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001892{
1893 int ret;
1894 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1895 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1896 checkmem(ret == 0);
1897 yyval.a_parg.argument = yyvsp[0].tv_str;
1898 ;
1899 break;}
1900case 67:
vlm808411d2006-03-14 16:31:37 +00001901#line 823 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00001902{
1903 int ret;
1904 yyval.a_parg.governor = asn1p_ref_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00001905 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1906 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1907 checkmem(ret == 0);
1908 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001909 ;
1910 break;}
vlmdc7cf042006-03-09 08:49:26 +00001911case 68:
vlm808411d2006-03-14 16:31:37 +00001912#line 834 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001913{
vlmfa67ddc2004-06-03 03:38:44 +00001914 yyval.a_expr = asn1p_expr_new(yylineno);
1915 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001916 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1917 ;
1918 break;}
vlmdc7cf042006-03-09 08:49:26 +00001919case 69:
vlm808411d2006-03-14 16:31:37 +00001920#line 839 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001921{
vlmfa67ddc2004-06-03 03:38:44 +00001922 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001923 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1924 ;
1925 break;}
vlmdc7cf042006-03-09 08:49:26 +00001926case 70:
vlm808411d2006-03-14 16:31:37 +00001927#line 846 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001928{
vlmfa67ddc2004-06-03 03:38:44 +00001929 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001930 ;
1931 break;}
vlmdc7cf042006-03-09 08:49:26 +00001932case 71:
vlm808411d2006-03-14 16:31:37 +00001933#line 849 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001934{
vlmfa67ddc2004-06-03 03:38:44 +00001935 yyval.a_expr = asn1p_expr_new(yylineno);
1936 checkmem(yyval.a_expr);
1937 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1938 yyval.a_expr->expr_type = A1TC_REFERENCE;
1939 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00001940 ;
1941 break;}
vlmdc7cf042006-03-09 08:49:26 +00001942case 72:
vlm808411d2006-03-14 16:31:37 +00001943#line 873 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001944{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1945 break;}
vlmdc7cf042006-03-09 08:49:26 +00001946case 73:
vlm808411d2006-03-14 16:31:37 +00001947#line 874 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001948{ yyval.a_expr = yyvsp[0].a_expr; ;
1949 break;}
vlmdc7cf042006-03-09 08:49:26 +00001950case 74:
vlm808411d2006-03-14 16:31:37 +00001951#line 877 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001952{
vlmfa67ddc2004-06-03 03:38:44 +00001953 yyval.a_expr = asn1p_expr_new(yylineno);
1954 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001955 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1956 ;
1957 break;}
vlmdc7cf042006-03-09 08:49:26 +00001958case 75:
vlm808411d2006-03-14 16:31:37 +00001959#line 882 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001960{
vlmfa67ddc2004-06-03 03:38:44 +00001961 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001962 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1963 ;
1964 break;}
vlmdc7cf042006-03-09 08:49:26 +00001965case 76:
vlm808411d2006-03-14 16:31:37 +00001966#line 889 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001967{
vlmec8f6812004-08-22 03:19:54 +00001968 yyval.a_expr = yyvsp[-1].a_expr;
1969 assert(yyval.a_expr->Identifier == 0);
vlmfce48a42004-09-14 02:36:39 +00001970 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlm177a5b62005-09-05 05:17:57 +00001971 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
vlmec8f6812004-08-22 03:19:54 +00001972 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00001973 ;
1974 break;}
vlmdc7cf042006-03-09 08:49:26 +00001975case 77:
vlm808411d2006-03-14 16:31:37 +00001976#line 896 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001977{
vlm177a5b62005-09-05 05:17:57 +00001978 yyval.a_expr = yyvsp[-1].a_expr;
1979 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
1980 yyval.a_expr->marker = yyvsp[0].a_marker;
1981 _fixup_anonymous_identifier(yyval.a_expr);
1982 ;
1983 break;}
vlmdc7cf042006-03-09 08:49:26 +00001984case 78:
vlm808411d2006-03-14 16:31:37 +00001985#line 902 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00001986{
vlmec8f6812004-08-22 03:19:54 +00001987 yyval.a_expr = asn1p_expr_new(yylineno);
1988 checkmem(yyval.a_expr);
1989 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1990 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
vlm6a02a8a2004-09-08 00:28:11 +00001991 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1992 ;
1993 break;}
vlmdc7cf042006-03-09 08:49:26 +00001994case 79:
vlm808411d2006-03-14 16:31:37 +00001995#line 909 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001996{
vlmec8f6812004-08-22 03:19:54 +00001997 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001998 ;
1999 break;}
vlmdc7cf042006-03-09 08:49:26 +00002000case 80:
vlm808411d2006-03-14 16:31:37 +00002001#line 915 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002002{
vlmec8f6812004-08-22 03:19:54 +00002003 yyval.a_expr = asn1p_expr_new(yylineno);
2004 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00002005 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2006 ;
2007 break;}
vlmdc7cf042006-03-09 08:49:26 +00002008case 81:
vlm808411d2006-03-14 16:31:37 +00002009#line 920 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002010{
vlmec8f6812004-08-22 03:19:54 +00002011 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002012 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2013 ;
2014 break;}
vlmdc7cf042006-03-09 08:49:26 +00002015case 82:
vlm808411d2006-03-14 16:31:37 +00002016#line 927 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002017{
vlmec8f6812004-08-22 03:19:54 +00002018 yyval.a_expr = yyvsp[0].a_expr;
vlm5d89c3d2005-08-13 09:07:11 +00002019 assert(yyval.a_expr->Identifier == 0);
2020 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002021 ;
2022 break;}
vlmdc7cf042006-03-09 08:49:26 +00002023case 83:
vlm808411d2006-03-14 16:31:37 +00002024#line 932 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002025{
2026 yyval.a_expr = yyvsp[0].a_expr;
2027 ;
2028 break;}
vlmdc7cf042006-03-09 08:49:26 +00002029case 84:
vlm808411d2006-03-14 16:31:37 +00002030#line 935 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002031{
2032 yyval.a_expr = yyvsp[0].a_expr;
2033 _fixup_anonymous_identifier(yyval.a_expr);
2034 ;
2035 break;}
vlmdc7cf042006-03-09 08:49:26 +00002036case 85:
vlm808411d2006-03-14 16:31:37 +00002037#line 942 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002038{
vlmfa67ddc2004-06-03 03:38:44 +00002039 yyval.a_expr = yyvsp[-2].a_expr;
2040 checkmem(yyval.a_expr);
2041 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2042 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
vlmdc7cf042006-03-09 08:49:26 +00002043 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
vlm6a02a8a2004-09-08 00:28:11 +00002044 ;
2045 break;}
vlmdc7cf042006-03-09 08:49:26 +00002046case 86:
vlm808411d2006-03-14 16:31:37 +00002047#line 952 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002048{ yyval.a_int = 0; ;
2049 break;}
vlmdc7cf042006-03-09 08:49:26 +00002050case 87:
vlm808411d2006-03-14 16:31:37 +00002051#line 953 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002052{ yyval.a_int = 1; ;
2053 break;}
vlmdc7cf042006-03-09 08:49:26 +00002054case 88:
vlm808411d2006-03-14 16:31:37 +00002055#line 957 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002056{
vlmfa67ddc2004-06-03 03:38:44 +00002057 yyval.a_expr = asn1p_expr_new(yylineno);
2058 checkmem(yyval.a_expr);
2059 yyval.a_expr->expr_type = A1TC_CLASSDEF;
vlmdc7cf042006-03-09 08:49:26 +00002060 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2061 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2062 ;
2063 break;}
2064case 89:
vlm808411d2006-03-14 16:31:37 +00002065#line 964 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002066{
2067 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002068 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2069 ;
2070 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002071case 90:
vlm808411d2006-03-14 16:31:37 +00002072#line 974 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002073{
vlmdc7cf042006-03-09 08:49:26 +00002074 yyval.a_expr = asn1p_expr_new(yylineno);
2075 checkmem(yyval.a_expr);
2076 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2077 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2078 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2079 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00002080 ;
2081 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002082case 91:
vlm808411d2006-03-14 16:31:37 +00002083#line 984 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002084{
vlmfa67ddc2004-06-03 03:38:44 +00002085 yyval.a_expr = asn1p_expr_new(yylineno);
vlmdc7cf042006-03-09 08:49:26 +00002086 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00002087 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
vlmdc7cf042006-03-09 08:49:26 +00002088 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2089 yyval.a_expr->unique = yyvsp[-1].a_int;
vlmfa67ddc2004-06-03 03:38:44 +00002090 yyval.a_expr->marker = yyvsp[0].a_marker;
vlmdc7cf042006-03-09 08:49:26 +00002091 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00002092 ;
2093 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002094case 92:
vlm808411d2006-03-14 16:31:37 +00002095#line 995 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002096{
vlmdc7cf042006-03-09 08:49:26 +00002097 yyval.a_expr = asn1p_expr_new(yylineno);
2098 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2099 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2100 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2101 yyval.a_expr->reference = yyvsp[-1].a_ref;
vlmbde35d42004-11-24 17:43:29 +00002102 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00002103 ;
2104 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002105case 93:
vlm808411d2006-03-14 16:31:37 +00002106#line 1005 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002107{
vlmfa67ddc2004-06-03 03:38:44 +00002108 yyval.a_expr = asn1p_expr_new(yylineno);
vlmdc7cf042006-03-09 08:49:26 +00002109 checkmem(yyval.a_expr);
2110 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2111 yyval.a_expr->reference = yyvsp[-1].a_ref;
2112 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2113 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2114 yyval.a_expr->marker = yyvsp[0].a_marker;
2115 ;
vlm6a02a8a2004-09-08 00:28:11 +00002116 break;}
vlma367d552006-03-09 09:11:53 +00002117case 94:
vlm808411d2006-03-14 16:31:37 +00002118#line 1016 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002119{
2120 yyval.a_expr = asn1p_expr_new(yylineno);
vlmdc7cf042006-03-09 08:49:26 +00002121 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmdc7cf042006-03-09 08:49:26 +00002122 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
vlma367d552006-03-09 09:11:53 +00002123 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2124 yyval.a_expr->reference = yyvsp[-1].a_ref;
vlmdc7cf042006-03-09 08:49:26 +00002125 yyval.a_expr->marker = yyvsp[0].a_marker;
2126 ;
2127 break;}
vlma367d552006-03-09 09:11:53 +00002128case 95:
vlm808411d2006-03-14 16:31:37 +00002129#line 1026 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002130{
2131 yyval.a_expr = asn1p_expr_new(yylineno);
2132 checkmem(yyval.a_expr);
2133 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2134 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2135 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2136 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
2137 yyval.a_expr->marker = yyvsp[0].a_marker;
2138 ;
2139 break;}
vlma367d552006-03-09 09:11:53 +00002140case 96:
vlm808411d2006-03-14 16:31:37 +00002141#line 1037 "asn1p_y.y"
vlma367d552006-03-09 09:11:53 +00002142{
2143 yyval.a_expr = asn1p_expr_new(yylineno);
2144 checkmem(yyval.a_expr);
2145 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2146 yyval.a_expr->reference = yyvsp[-1].a_ref;
2147 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2148 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2149 yyval.a_expr->marker = yyvsp[0].a_marker;
2150 ;
2151 break;}
vlmdc7cf042006-03-09 08:49:26 +00002152case 97:
vlm808411d2006-03-14 16:31:37 +00002153#line 1049 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002154{ yyval.a_wsynt = 0; ;
2155 break;}
2156case 98:
vlm808411d2006-03-14 16:31:37 +00002157#line 1050 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002158{
vlm5d89c3d2005-08-13 09:07:11 +00002159 yyval.a_wsynt = yyvsp[0].a_wsynt;
vlm6a02a8a2004-09-08 00:28:11 +00002160 ;
2161 break;}
vlmdc7cf042006-03-09 08:49:26 +00002162case 99:
vlm808411d2006-03-14 16:31:37 +00002163#line 1057 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002164{ asn1p_lexer_hack_enable_with_syntax(); ;
2165 break;}
vlmdc7cf042006-03-09 08:49:26 +00002166case 100:
vlm808411d2006-03-14 16:31:37 +00002167#line 1059 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002168{
2169 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2170 ;
2171 break;}
vlmdc7cf042006-03-09 08:49:26 +00002172case 101:
vlm808411d2006-03-14 16:31:37 +00002173#line 1065 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002174{
vlmfa67ddc2004-06-03 03:38:44 +00002175 yyval.a_wsynt = asn1p_wsyntx_new();
2176 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002177 ;
2178 break;}
vlmdc7cf042006-03-09 08:49:26 +00002179case 102:
vlm808411d2006-03-14 16:31:37 +00002180#line 1069 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002181{
vlmfa67ddc2004-06-03 03:38:44 +00002182 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2183 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002184 ;
2185 break;}
vlmdc7cf042006-03-09 08:49:26 +00002186case 103:
vlm808411d2006-03-14 16:31:37 +00002187#line 1076 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002188{
vlmfa67ddc2004-06-03 03:38:44 +00002189 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002190 ;
2191 break;}
vlmdc7cf042006-03-09 08:49:26 +00002192case 104:
vlm808411d2006-03-14 16:31:37 +00002193#line 1079 "asn1p_y.y"
2194{
2195 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_str, strlen(yyvsp[0].tv_str), 0);
2196 ;
2197 break;}
2198case 105:
2199#line 1082 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002200{
vlmfa67ddc2004-06-03 03:38:44 +00002201 asn1p_ref_t *ref;
2202 int ret;
2203 ref = asn1p_ref_new(yylineno);
2204 checkmem(ref);
2205 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2206 checkmem(ret == 0);
2207 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002208 ;
2209 break;}
vlmdc7cf042006-03-09 08:49:26 +00002210case 106:
vlm808411d2006-03-14 16:31:37 +00002211#line 1091 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002212{
vlm808411d2006-03-14 16:31:37 +00002213 yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
vlmdc7cf042006-03-09 08:49:26 +00002214 ;
2215 break;}
2216case 107:
vlm808411d2006-03-14 16:31:37 +00002217#line 1097 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002218{
2219 yyval.a_expr = asn1p_expr_new(yylineno);
2220 checkmem(yyval.a_expr);
2221 yyval.a_expr->Identifier = strdup("...");
vlmdc7cf042006-03-09 08:49:26 +00002222 checkmem(yyval.a_expr->Identifier);
2223 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2224 yyval.a_expr->meta_type = AMT_TYPE;
2225 ;
2226 break;}
2227case 108:
vlm808411d2006-03-14 16:31:37 +00002228#line 1105 "asn1p_y.y"
2229{
2230 yyval.a_expr = asn1p_expr_new(yylineno);
2231 checkmem(yyval.a_expr);
2232 yyval.a_expr->Identifier = strdup("...");
2233 checkmem(yyval.a_expr->Identifier);
2234 yyval.a_expr->value = yyvsp[0].a_value;
2235 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2236 yyval.a_expr->meta_type = AMT_TYPE;
2237 ;
2238 break;}
2239case 109:
2240#line 1114 "asn1p_y.y"
2241{
2242 yyval.a_expr = asn1p_expr_new(yylineno);
2243 checkmem(yyval.a_expr);
2244 yyval.a_expr->Identifier = strdup("...");
2245 yyval.a_expr->value = yyvsp[0].a_value;
2246 checkmem(yyval.a_expr->Identifier);
2247 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2248 yyval.a_expr->meta_type = AMT_TYPE;
2249 ;
2250 break;}
2251case 110:
2252#line 1126 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002253{
vlmec8f6812004-08-22 03:19:54 +00002254 yyval.a_expr = yyvsp[-1].a_expr;
vlmfce48a42004-09-14 02:36:39 +00002255 yyval.a_expr->tag = yyvsp[-2].a_tag;
vlmec8f6812004-08-22 03:19:54 +00002256 /*
2257 * Outer constraint for SEQUENCE OF and SET OF applies
2258 * to the inner type.
2259 */
2260 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2261 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2262 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2263 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2264 } else {
2265 if(yyval.a_expr->constraints) {
vlmfce48a42004-09-14 02:36:39 +00002266 assert(!yyvsp[-1].a_expr);
vlmec8f6812004-08-22 03:19:54 +00002267 } else {
2268 yyval.a_expr->constraints = yyvsp[0].a_constr;
2269 }
2270 }
vlm6a02a8a2004-09-08 00:28:11 +00002271 ;
2272 break;}
vlm808411d2006-03-14 16:31:37 +00002273case 111:
2274#line 1148 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00002275{
2276 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
2277 asn1p_as_pointer = 0;
2278 ;
vlm066dc102005-08-22 12:23:54 +00002279 break;}
vlm808411d2006-03-14 16:31:37 +00002280case 112:
2281#line 1155 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002282{
vlm5f0128b2004-08-20 13:25:29 +00002283 yyval.a_expr = yyvsp[0].a_expr;
vlm177a5b62005-09-05 05:17:57 +00002284 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
2285
2286 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2287 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
2288 fprintf(stderr,
2289 "INFO: Directive <ASN1C:RepresentAsPointer> "
2290 "applied to %s at line %d\n",
2291 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2292 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2293 : "member",
2294 yyval.a_expr->_lineno
2295 );
2296 }
vlm6a02a8a2004-09-08 00:28:11 +00002297 ;
2298 break;}
vlm808411d2006-03-14 16:31:37 +00002299case 113:
2300#line 1174 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002301{
vlm066dc102005-08-22 12:23:54 +00002302 yyval.a_expr = yyvsp[0].a_expr;
2303 ;
2304 break;}
vlm808411d2006-03-14 16:31:37 +00002305case 114:
2306#line 1177 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002307{
vlm177a5b62005-09-05 05:17:57 +00002308 yyval.a_expr = yyvsp[-1].a_expr;
vlm5e2c4b92005-03-20 11:12:40 +00002309 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2310 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
vlmfa67ddc2004-06-03 03:38:44 +00002311 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002312 ;
2313 break;}
vlm808411d2006-03-14 16:31:37 +00002314case 115:
2315#line 1183 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002316{
vlm177a5b62005-09-05 05:17:57 +00002317 yyval.a_expr = yyvsp[-1].a_expr;
vlmec8f6812004-08-22 03:19:54 +00002318 assert(yyval.a_expr->expr_type == A1TC_INVALID);
vlm5e2c4b92005-03-20 11:12:40 +00002319 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
vlmec8f6812004-08-22 03:19:54 +00002320 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002321 ;
2322 break;}
vlm808411d2006-03-14 16:31:37 +00002323case 116:
2324#line 1189 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002325{
vlm177a5b62005-09-05 05:17:57 +00002326 yyval.a_expr = yyvsp[-1].a_expr;
vlmec8f6812004-08-22 03:19:54 +00002327 assert(yyval.a_expr->expr_type == A1TC_INVALID);
vlm5e2c4b92005-03-20 11:12:40 +00002328 yyval.a_expr->expr_type = ASN_CONSTR_SET;
vlmec8f6812004-08-22 03:19:54 +00002329 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002330 ;
2331 break;}
vlm808411d2006-03-14 16:31:37 +00002332case 117:
2333#line 1195 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002334{
vlm39e5ed72004-09-05 10:40:41 +00002335 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002336 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002337 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002338 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2339 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002340 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002341 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002342 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2343 ;
2344 break;}
vlm808411d2006-03-14 16:31:37 +00002345case 118:
2346#line 1205 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002347{
vlm39e5ed72004-09-05 10:40:41 +00002348 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002349 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002350 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002351 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2352 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002353 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002354 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002355 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2356 ;
2357 break;}
vlm808411d2006-03-14 16:31:37 +00002358case 119:
2359#line 1215 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002360{
vlm39e5ed72004-09-05 10:40:41 +00002361 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002362 checkmem(yyval.a_expr);
vlm044f7442004-09-04 04:49:21 +00002363 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002364 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002365 ;
2366 break;}
vlm808411d2006-03-14 16:31:37 +00002367case 120:
2368#line 1221 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002369{
vlmec8f6812004-08-22 03:19:54 +00002370 int ret;
vlm39e5ed72004-09-05 10:40:41 +00002371 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002372 checkmem(yyval.a_expr);
2373 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2374 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2375 yyvsp[0].tv_str, RLT_lowercase);
2376 checkmem(ret == 0);
vlm044f7442004-09-04 04:49:21 +00002377 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002378 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002379 ;
2380 break;}
vlm808411d2006-03-14 16:31:37 +00002381case 121:
2382#line 1235 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002383{
vlmfa67ddc2004-06-03 03:38:44 +00002384 int ret;
2385 yyval.a_expr = yyvsp[-1].a_expr;
2386 assert(yyval.a_expr->expr_type == 0);
2387 assert(yyval.a_expr->meta_type == 0);
2388 assert(yyval.a_expr->reference == 0);
2389 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2390 checkmem(yyval.a_expr->reference);
2391 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2392 checkmem(ret == 0);
2393 free(yyvsp[-3].tv_str);
2394 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2395 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002396 ;
2397 break;}
vlm808411d2006-03-14 16:31:37 +00002398case 122:
2399#line 1259 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002400{
vlmfa67ddc2004-06-03 03:38:44 +00002401 yyval.a_expr = asn1p_expr_new(yylineno);
2402 checkmem(yyval.a_expr);
2403 yyval.a_expr->reference = yyvsp[0].a_ref;
2404 yyval.a_expr->expr_type = A1TC_REFERENCE;
2405 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00002406 ;
2407 break;}
vlm808411d2006-03-14 16:31:37 +00002408case 123:
2409#line 1266 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002410{
vlmfa67ddc2004-06-03 03:38:44 +00002411 yyval.a_expr = asn1p_expr_new(yylineno);
2412 checkmem(yyval.a_expr);
2413 yyval.a_expr->reference = yyvsp[0].a_ref;
2414 yyval.a_expr->expr_type = A1TC_INSTANCE;
2415 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002416 ;
2417 break;}
vlm808411d2006-03-14 16:31:37 +00002418case 124:
2419#line 1281 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002420{
vlmfa67ddc2004-06-03 03:38:44 +00002421 int ret;
2422 yyval.a_ref = asn1p_ref_new(yylineno);
2423 checkmem(yyval.a_ref);
2424 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2425 checkmem(ret == 0);
2426 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002427 ;
2428 break;}
vlmdc7cf042006-03-09 08:49:26 +00002429case 125:
vlm808411d2006-03-14 16:31:37 +00002430#line 1289 "asn1p_y.y"
2431{
2432 int ret;
2433 yyval.a_ref = asn1p_ref_new(yylineno);
2434 checkmem(yyval.a_ref);
2435 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2436 checkmem(ret == 0);
2437 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2438 checkmem(ret == 0);
2439 free(yyvsp[-2].tv_str);
2440 ;
2441 break;}
2442case 126:
2443#line 1299 "asn1p_y.y"
2444{
2445 int ret;
2446 yyval.a_ref = asn1p_ref_new(yylineno);
2447 checkmem(yyval.a_ref);
2448 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2449 checkmem(ret == 0);
2450 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2451 checkmem(ret == 0);
2452 free(yyvsp[-2].tv_str);
2453 ;
2454 break;}
2455case 127:
2456#line 1309 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002457{
vlmfa67ddc2004-06-03 03:38:44 +00002458 int ret;
2459 yyval.a_ref = asn1p_ref_new(yylineno);
2460 checkmem(yyval.a_ref);
vlmc94e28f2004-09-15 11:59:51 +00002461 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2462 checkmem(ret == 0);
2463 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2464 checkmem(ret == 0);
2465 free(yyvsp[-2].tv_str);
2466 ;
2467 break;}
vlm808411d2006-03-14 16:31:37 +00002468case 128:
2469#line 1319 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002470{
2471 int ret;
2472 yyval.a_ref = asn1p_ref_new(yylineno);
2473 checkmem(yyval.a_ref);
vlmfa67ddc2004-06-03 03:38:44 +00002474 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2475 free(yyvsp[0].tv_str);
2476 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002477 ;
2478 break;}
vlm808411d2006-03-14 16:31:37 +00002479case 129:
2480#line 1327 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002481{
vlmfa67ddc2004-06-03 03:38:44 +00002482 int ret;
2483 yyval.a_ref = yyvsp[0].a_ref;
2484 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2485 free(yyvsp[-2].tv_str);
2486 checkmem(ret == 0);
2487 /*
2488 * Move the last element infront.
2489 */
2490 {
2491 struct asn1p_ref_component_s tmp_comp;
2492 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2493 memmove(&yyval.a_ref->components[1],
2494 &yyval.a_ref->components[0],
2495 sizeof(yyval.a_ref->components[0])
2496 * (yyval.a_ref->comp_count - 1));
2497 yyval.a_ref->components[0] = tmp_comp;
2498 }
vlm6a02a8a2004-09-08 00:28:11 +00002499 ;
2500 break;}
vlm808411d2006-03-14 16:31:37 +00002501case 130:
2502#line 1349 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002503{
vlmfa67ddc2004-06-03 03:38:44 +00002504 int ret;
2505 yyval.a_ref = asn1p_ref_new(yylineno);
2506 checkmem(yyval.a_ref);
2507 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2508 free(yyvsp[0].a_refcomp.name);
2509 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002510 ;
2511 break;}
vlm808411d2006-03-14 16:31:37 +00002512case 131:
2513#line 1357 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002514{
vlmfa67ddc2004-06-03 03:38:44 +00002515 int ret;
2516 yyval.a_ref = yyvsp[-2].a_ref;
2517 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2518 free(yyvsp[0].a_refcomp.name);
2519 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002520 ;
2521 break;}
vlm808411d2006-03-14 16:31:37 +00002522case 134:
2523#line 1371 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002524{
vlmfa67ddc2004-06-03 03:38:44 +00002525 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2526 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002527 ;
2528 break;}
vlm808411d2006-03-14 16:31:37 +00002529case 135:
2530#line 1376 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002531{
vlmfa67ddc2004-06-03 03:38:44 +00002532 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2533 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002534 ;
2535 break;}
vlm808411d2006-03-14 16:31:37 +00002536case 136:
2537#line 1385 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002538{
2539 yyval.a_ref = asn1p_ref_new(yylineno);
2540 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2541 ;
2542 break;}
vlm808411d2006-03-14 16:31:37 +00002543case 137:
2544#line 1389 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002545{
2546 yyval.a_ref = yyval.a_ref;
2547 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2548 ;
2549 break;}
vlm808411d2006-03-14 16:31:37 +00002550case 138:
2551#line 1393 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002552{
2553 yyval.a_ref = yyval.a_ref;
2554 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
2555 ;
2556 break;}
vlm808411d2006-03-14 16:31:37 +00002557case 139:
2558#line 1400 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002559{
2560 yyval.a_ref = asn1p_ref_new(yylineno);
2561 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2562 ;
2563 break;}
vlm808411d2006-03-14 16:31:37 +00002564case 140:
2565#line 1420 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002566{
vlmfa67ddc2004-06-03 03:38:44 +00002567 yyval.a_expr = yyvsp[-2].a_expr;
2568 assert(yyval.a_expr->Identifier == NULL);
2569 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2570 yyval.a_expr->meta_type = AMT_VALUE;
2571 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002572 ;
2573 break;}
vlm808411d2006-03-14 16:31:37 +00002574case 141:
2575#line 1430 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002576{
2577 yyval.a_value = asn1p_value_fromint(0);
2578 checkmem(yyval.a_value);
2579 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2580 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2581 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2582 ;
2583 break;}
vlm808411d2006-03-14 16:31:37 +00002584case 142:
2585#line 1437 "asn1p_y.y"
vlmd30bc6c2005-03-24 16:27:02 +00002586{ asn1p_lexer_hack_push_opaque_state(); ;
vlm6a02a8a2004-09-08 00:28:11 +00002587 break;}
vlm808411d2006-03-14 16:31:37 +00002588case 143:
2589#line 1437 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002590{
vlmfa67ddc2004-06-03 03:38:44 +00002591 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2592 checkmem(yyval.a_value);
2593 yyval.a_value->type = ATV_UNPARSED;
vlm6a02a8a2004-09-08 00:28:11 +00002594 ;
2595 break;}
vlm808411d2006-03-14 16:31:37 +00002596case 144:
2597#line 1442 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002598{
2599 yyval.a_value = asn1p_value_fromint(0);
2600 checkmem(yyval.a_value);
2601 yyval.a_value->type = ATV_NULL;
2602 ;
2603 break;}
vlm808411d2006-03-14 16:31:37 +00002604case 145:
2605#line 1447 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002606{
2607 yyval.a_value = asn1p_value_fromint(0);
2608 checkmem(yyval.a_value);
2609 yyval.a_value->type = ATV_FALSE;
2610 ;
2611 break;}
vlm808411d2006-03-14 16:31:37 +00002612case 146:
2613#line 1452 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002614{
2615 yyval.a_value = asn1p_value_fromint(0);
2616 checkmem(yyval.a_value);
2617 yyval.a_value->type = ATV_TRUE;
2618 ;
2619 break;}
vlm808411d2006-03-14 16:31:37 +00002620case 147:
2621#line 1457 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002622{
vlmfa67ddc2004-06-03 03:38:44 +00002623 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2624 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002625 ;
2626 break;}
vlm808411d2006-03-14 16:31:37 +00002627case 148:
2628#line 1461 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002629{
vlmfa67ddc2004-06-03 03:38:44 +00002630 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2631 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002632 ;
2633 break;}
vlm808411d2006-03-14 16:31:37 +00002634case 149:
2635#line 1465 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002636{
vlme1e6ed82005-03-24 14:26:38 +00002637 yyval.a_value = yyval.a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002638 ;
2639 break;}
vlmdc7cf042006-03-09 08:49:26 +00002640case 150:
vlm808411d2006-03-14 16:31:37 +00002641#line 1468 "asn1p_y.y"
2642{
2643 yyval.a_value = yyvsp[0].a_value;
2644 ;
2645 break;}
2646case 151:
2647#line 1471 "asn1p_y.y"
2648{
2649 yyval.a_value = yyvsp[0].a_value;
2650 ;
2651 break;}
2652case 152:
2653#line 1477 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002654{
vlmfa67ddc2004-06-03 03:38:44 +00002655 asn1p_ref_t *ref;
2656 int ret;
2657 ref = asn1p_ref_new(yylineno);
2658 checkmem(ref);
2659 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2660 checkmem(ret == 0);
2661 yyval.a_value = asn1p_value_fromref(ref, 0);
2662 checkmem(yyval.a_value);
2663 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002664 ;
2665 break;}
vlm808411d2006-03-14 16:31:37 +00002666case 153:
2667#line 1488 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002668{
vlmfa67ddc2004-06-03 03:38:44 +00002669 asn1p_ref_t *ref;
2670 int ret;
2671 ref = asn1p_ref_new(yylineno);
2672 checkmem(ref);
2673 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2674 checkmem(ret == 0);
2675 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2676 checkmem(ret == 0);
2677 yyval.a_value = asn1p_value_fromref(ref, 0);
2678 checkmem(yyval.a_value);
2679 free(yyvsp[-2].tv_str);
2680 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002681 ;
2682 break;}
vlm808411d2006-03-14 16:31:37 +00002683case 154:
2684#line 1506 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002685{
2686 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2687 checkmem(yyval.a_value);
2688 ;
2689 break;}
vlm808411d2006-03-14 16:31:37 +00002690case 155:
2691#line 1510 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002692{
vlm2c8c44d2005-03-24 16:22:35 +00002693 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
vlme1e6ed82005-03-24 14:26:38 +00002694 checkmem(yyval.a_value);
2695 yyval.a_value->type = ATV_TUPLE;
2696 ;
2697 break;}
vlm808411d2006-03-14 16:31:37 +00002698case 156:
2699#line 1515 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002700{
vlm2c8c44d2005-03-24 16:22:35 +00002701 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
vlme1e6ed82005-03-24 14:26:38 +00002702 checkmem(yyval.a_value);
2703 yyval.a_value->type = ATV_QUADRUPLE;
2704 ;
2705 break;}
vlm808411d2006-03-14 16:31:37 +00002706case 157:
2707#line 1549 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002708{
vlm6611add2005-03-20 14:28:32 +00002709 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
vlmfa67ddc2004-06-03 03:38:44 +00002710 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2711 checkmem(yyval.tv_opaque.buf);
2712 yyval.tv_opaque.buf[0] = '{';
vlm6611add2005-03-20 14:28:32 +00002713 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
vlmfa67ddc2004-06-03 03:38:44 +00002714 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2715 free(yyvsp[0].tv_opaque.buf);
vlm6a02a8a2004-09-08 00:28:11 +00002716 ;
2717 break;}
vlm808411d2006-03-14 16:31:37 +00002718case 158:
2719#line 1558 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002720{
vlmfa67ddc2004-06-03 03:38:44 +00002721 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2722 char *p = malloc(newsize + 1);
2723 checkmem(p);
2724 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2725 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2726 p[newsize] = '\0';
2727 free(yyvsp[-1].tv_opaque.buf);
2728 free(yyvsp[0].tv_opaque.buf);
2729 yyval.tv_opaque.buf = p;
2730 yyval.tv_opaque.len = newsize;
vlm6a02a8a2004-09-08 00:28:11 +00002731 ;
2732 break;}
vlm808411d2006-03-14 16:31:37 +00002733case 159:
2734#line 1573 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002735{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2736 break;}
vlm808411d2006-03-14 16:31:37 +00002737case 160:
2738#line 1574 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002739{ yyval.a_type = ASN_BASIC_NULL; ;
2740 break;}
vlm808411d2006-03-14 16:31:37 +00002741case 161:
2742#line 1575 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002743{ yyval.a_type = ASN_BASIC_REAL; ;
2744 break;}
vlma367d552006-03-09 09:11:53 +00002745case 162:
vlm808411d2006-03-14 16:31:37 +00002746#line 1576 "asn1p_y.y"
2747{ yyval.a_type = yyvsp[0].a_type; ;
vlm066dc102005-08-22 12:23:54 +00002748 break;}
vlma367d552006-03-09 09:11:53 +00002749case 163:
vlm808411d2006-03-14 16:31:37 +00002750#line 1577 "asn1p_y.y"
2751{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
vlm066dc102005-08-22 12:23:54 +00002752 break;}
vlma367d552006-03-09 09:11:53 +00002753case 164:
vlm808411d2006-03-14 16:31:37 +00002754#line 1578 "asn1p_y.y"
2755{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
vlm066dc102005-08-22 12:23:54 +00002756 break;}
vlma367d552006-03-09 09:11:53 +00002757case 165:
vlm808411d2006-03-14 16:31:37 +00002758#line 1579 "asn1p_y.y"
2759{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
vlmdc7cf042006-03-09 08:49:26 +00002760 break;}
vlma367d552006-03-09 09:11:53 +00002761case 166:
vlm808411d2006-03-14 16:31:37 +00002762#line 1580 "asn1p_y.y"
2763{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
vlmdc7cf042006-03-09 08:49:26 +00002764 break;}
vlma367d552006-03-09 09:11:53 +00002765case 167:
vlm808411d2006-03-14 16:31:37 +00002766#line 1581 "asn1p_y.y"
2767{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
vlmdc7cf042006-03-09 08:49:26 +00002768 break;}
vlma367d552006-03-09 09:11:53 +00002769case 168:
vlm808411d2006-03-14 16:31:37 +00002770#line 1582 "asn1p_y.y"
2771{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
vlmdc7cf042006-03-09 08:49:26 +00002772 break;}
vlma367d552006-03-09 09:11:53 +00002773case 169:
vlm808411d2006-03-14 16:31:37 +00002774#line 1583 "asn1p_y.y"
2775{ yyval.a_type = ASN_BASIC_UTCTime; ;
vlmdc7cf042006-03-09 08:49:26 +00002776 break;}
vlma367d552006-03-09 09:11:53 +00002777case 170:
vlm808411d2006-03-14 16:31:37 +00002778#line 1584 "asn1p_y.y"
2779{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
vlmdc7cf042006-03-09 08:49:26 +00002780 break;}
vlma367d552006-03-09 09:11:53 +00002781case 171:
vlm808411d2006-03-14 16:31:37 +00002782#line 1585 "asn1p_y.y"
2783{ yyval.a_type = yyvsp[0].a_type; ;
vlmdc7cf042006-03-09 08:49:26 +00002784 break;}
vlma367d552006-03-09 09:11:53 +00002785case 172:
vlm808411d2006-03-14 16:31:37 +00002786#line 1592 "asn1p_y.y"
2787{ yyval.a_type = ASN_BASIC_INTEGER; ;
vlmdc7cf042006-03-09 08:49:26 +00002788 break;}
vlma367d552006-03-09 09:11:53 +00002789case 173:
vlm808411d2006-03-14 16:31:37 +00002790#line 1593 "asn1p_y.y"
2791{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2792 break;}
2793case 174:
2794#line 1594 "asn1p_y.y"
2795{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2796 break;}
2797case 175:
2798#line 1598 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002799{
vlm39e5ed72004-09-05 10:40:41 +00002800 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002801 checkmem(yyval.a_expr);
2802 yyval.a_expr->expr_type = yyvsp[0].a_type;
2803 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002804 ;
2805 break;}
vlm808411d2006-03-14 16:31:37 +00002806case 176:
2807#line 1604 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002808{
vlmfa67ddc2004-06-03 03:38:44 +00002809 if(yyvsp[0].a_expr) {
2810 yyval.a_expr = yyvsp[0].a_expr;
2811 } else {
vlm39e5ed72004-09-05 10:40:41 +00002812 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002813 checkmem(yyval.a_expr);
2814 }
2815 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2816 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002817 ;
2818 break;}
vlm808411d2006-03-14 16:31:37 +00002819case 177:
2820#line 1617 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002821{ yyval.a_type = ASN_STRING_BMPString; ;
2822 break;}
vlm808411d2006-03-14 16:31:37 +00002823case 178:
2824#line 1618 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002825{
vlmfa67ddc2004-06-03 03:38:44 +00002826 yyval.a_type = ASN_STRING_GeneralString;
vlmc94e28f2004-09-15 11:59:51 +00002827 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002828 ;
2829 break;}
vlm808411d2006-03-14 16:31:37 +00002830case 179:
2831#line 1622 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002832{
vlmc94e28f2004-09-15 11:59:51 +00002833 yyval.a_type = ASN_STRING_GraphicString;
2834 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002835 ;
2836 break;}
vlm808411d2006-03-14 16:31:37 +00002837case 180:
2838#line 1626 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002839{ yyval.a_type = ASN_STRING_IA5String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002840 break;}
vlm808411d2006-03-14 16:31:37 +00002841case 181:
2842#line 1627 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002843{ yyval.a_type = ASN_STRING_ISO646String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002844 break;}
vlm808411d2006-03-14 16:31:37 +00002845case 182:
2846#line 1628 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002847{ yyval.a_type = ASN_STRING_NumericString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002848 break;}
vlm808411d2006-03-14 16:31:37 +00002849case 183:
2850#line 1629 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002851{ yyval.a_type = ASN_STRING_PrintableString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002852 break;}
vlm808411d2006-03-14 16:31:37 +00002853case 184:
2854#line 1630 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002855{
2856 yyval.a_type = ASN_STRING_T61String;
2857 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2858 ;
vlm6a02a8a2004-09-08 00:28:11 +00002859 break;}
vlm808411d2006-03-14 16:31:37 +00002860case 185:
2861#line 1634 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002862{ yyval.a_type = ASN_STRING_TeletexString; ;
2863 break;}
vlm808411d2006-03-14 16:31:37 +00002864case 186:
2865#line 1635 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002866{ yyval.a_type = ASN_STRING_UniversalString; ;
2867 break;}
vlm808411d2006-03-14 16:31:37 +00002868case 187:
2869#line 1636 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002870{ yyval.a_type = ASN_STRING_UTF8String; ;
2871 break;}
vlm808411d2006-03-14 16:31:37 +00002872case 188:
2873#line 1637 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002874{
2875 yyval.a_type = ASN_STRING_VideotexString;
2876 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2877 ;
2878 break;}
vlm808411d2006-03-14 16:31:37 +00002879case 189:
2880#line 1641 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002881{ yyval.a_type = ASN_STRING_VisibleString; ;
2882 break;}
vlm808411d2006-03-14 16:31:37 +00002883case 190:
2884#line 1642 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002885{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2886 break;}
vlm808411d2006-03-14 16:31:37 +00002887case 196:
2888#line 1654 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002889{ yyval.a_constr = 0; ;
2890 break;}
vlm808411d2006-03-14 16:31:37 +00002891case 197:
2892#line 1655 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002893{
vlm39e5ed72004-09-05 10:40:41 +00002894 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002895 ;
2896 break;}
vlm808411d2006-03-14 16:31:37 +00002897case 198:
2898#line 1661 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002899{
vlm39e5ed72004-09-05 10:40:41 +00002900 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002901 ;
2902 break;}
vlm808411d2006-03-14 16:31:37 +00002903case 199:
2904#line 1664 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002905{
vlmfa67ddc2004-06-03 03:38:44 +00002906 /*
2907 * This is a special case, for compatibility purposes.
vlm9283dbe2004-08-18 04:59:12 +00002908 * It goes without parentheses.
vlmfa67ddc2004-06-03 03:38:44 +00002909 */
vlm5f0128b2004-08-20 13:25:29 +00002910 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002911 ;
2912 break;}
vlm808411d2006-03-14 16:31:37 +00002913case 200:
2914#line 1674 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002915{
vlmfa67ddc2004-06-03 03:38:44 +00002916 yyval.a_constr = yyvsp[-1].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002917 ;
2918 break;}
vlm808411d2006-03-14 16:31:37 +00002919case 201:
2920#line 1677 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002921{
vlm9283dbe2004-08-18 04:59:12 +00002922 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002923 ;
2924 break;}
vlm808411d2006-03-14 16:31:37 +00002925case 202:
2926#line 1683 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002927{
vlmfa67ddc2004-06-03 03:38:44 +00002928 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002929 ;
2930 break;}
vlm808411d2006-03-14 16:31:37 +00002931case 203:
2932#line 1686 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002933{
vlmfa67ddc2004-06-03 03:38:44 +00002934 asn1p_constraint_t *ct;
2935 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002936 ct->type = ACT_EL_EXT;
2937 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00002938 ;
2939 break;}
vlm808411d2006-03-14 16:31:37 +00002940case 204:
2941#line 1692 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002942{
vlmfa67ddc2004-06-03 03:38:44 +00002943 asn1p_constraint_t *ct;
2944 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002945 ct->type = ACT_EL_EXT;
2946 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
vlm6f5eb0b2004-08-13 12:35:09 +00002947 ct = yyval.a_constr;
2948 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002949 ;
2950 break;}
vlm808411d2006-03-14 16:31:37 +00002951case 205:
2952#line 1703 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002953{
vlm9283dbe2004-08-18 04:59:12 +00002954 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002955 ;
2956 break;}
vlm808411d2006-03-14 16:31:37 +00002957case 206:
2958#line 1706 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002959{
2960 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2961 ;
2962 break;}
vlm808411d2006-03-14 16:31:37 +00002963case 207:
2964#line 1709 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002965{
vlmfa67ddc2004-06-03 03:38:44 +00002966 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002967 ;
2968 break;}
vlm808411d2006-03-14 16:31:37 +00002969case 208:
2970#line 1712 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002971{
vlmfa67ddc2004-06-03 03:38:44 +00002972 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002973 ;
2974 break;}
vlm808411d2006-03-14 16:31:37 +00002975case 209:
2976#line 1715 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002977{
vlmfa67ddc2004-06-03 03:38:44 +00002978 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002979 ;
2980 break;}
vlm808411d2006-03-14 16:31:37 +00002981case 210:
2982#line 1721 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002983{
vlmfa67ddc2004-06-03 03:38:44 +00002984 int ret;
2985 yyval.a_constr = asn1p_constraint_new(yylineno);
2986 checkmem(yyval.a_constr);
2987 yyval.a_constr->type = yyvsp[-3].a_ctype;
2988 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2989 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002990 ;
2991 break;}
vlm808411d2006-03-14 16:31:37 +00002992case 211:
2993#line 1729 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002994{
vlm9283dbe2004-08-18 04:59:12 +00002995 int ret;
2996 yyval.a_constr = asn1p_constraint_new(yylineno);
2997 checkmem(yyval.a_constr);
2998 yyval.a_constr->type = ACT_CA_SET;
2999 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
3000 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00003001 ;
3002 break;}
vlm808411d2006-03-14 16:31:37 +00003003case 212:
3004#line 1737 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003005{
vlm9283dbe2004-08-18 04:59:12 +00003006 yyval.a_constr = asn1p_constraint_new(yylineno);
3007 checkmem(yyval.a_constr);
3008 yyval.a_constr->type = ACT_EL_VALUE;
3009 yyval.a_constr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00003010 ;
3011 break;}
vlm808411d2006-03-14 16:31:37 +00003012case 213:
3013#line 1743 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003014{
vlm0aa86902004-10-12 23:26:53 +00003015 yyval.a_constr = asn1p_constraint_new(yylineno);
3016 checkmem(yyval.a_constr);
vlma6a12e32005-03-20 12:58:00 +00003017 yyval.a_constr->type = ACT_EL_TYPE;
3018 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
vlmc94e28f2004-09-15 11:59:51 +00003019 ;
3020 break;}
vlm808411d2006-03-14 16:31:37 +00003021case 214:
vlma367d552006-03-09 09:11:53 +00003022#line 1749 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003023{
3024 yyval.a_constr = asn1p_constraint_new(yylineno);
3025 checkmem(yyval.a_constr);
3026 yyval.a_constr->type = yyvsp[-1].a_ctype;
vlm808411d2006-03-14 16:31:37 +00003027 yyval.a_constr->range_start = yyvsp[-2].a_value;
3028 yyval.a_constr->range_stop = yyvsp[0].a_value;
3029 ;
3030 break;}
3031case 215:
3032#line 1756 "asn1p_y.y"
3033{
3034 yyval.a_constr = asn1p_constraint_new(yylineno);
3035 checkmem(yyval.a_constr);
3036 yyval.a_constr->type = yyvsp[-1].a_ctype;
vlm177a5b62005-09-05 05:17:57 +00003037 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3038 yyval.a_constr->range_stop = yyvsp[0].a_value;
3039 yyval.a_constr->range_start->type = ATV_MIN;
3040 ;
3041 break;}
vlm808411d2006-03-14 16:31:37 +00003042case 216:
3043#line 1764 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003044{
3045 yyval.a_constr = asn1p_constraint_new(yylineno);
3046 checkmem(yyval.a_constr);
3047 yyval.a_constr->type = yyvsp[-1].a_ctype;
3048 yyval.a_constr->range_start = yyvsp[-2].a_value;
3049 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3050 yyval.a_constr->range_stop->type = ATV_MAX;
3051 ;
3052 break;}
vlm808411d2006-03-14 16:31:37 +00003053case 217:
3054#line 1772 "asn1p_y.y"
vlma367d552006-03-09 09:11:53 +00003055{
3056 yyval.a_constr = asn1p_constraint_new(yylineno);
3057 checkmem(yyval.a_constr);
3058 yyval.a_constr->type = yyvsp[-1].a_ctype;
3059 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3060 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3061 yyval.a_constr->range_start->type = ATV_MIN;
3062 yyval.a_constr->range_stop->type = ATV_MAX;
3063 ;
3064 break;}
vlmdc7cf042006-03-09 08:49:26 +00003065case 218:
vlma367d552006-03-09 09:11:53 +00003066#line 1781 "asn1p_y.y"
vlm808411d2006-03-14 16:31:37 +00003067{
3068 yyval.a_constr = yyvsp[0].a_constr;
3069 ;
vlm066dc102005-08-22 12:23:54 +00003070 break;}
vlma367d552006-03-09 09:11:53 +00003071case 219:
vlm808411d2006-03-14 16:31:37 +00003072#line 1784 "asn1p_y.y"
3073{
3074 yyval.a_constr = yyvsp[0].a_constr;
3075 ;
3076 break;}
3077case 220:
3078#line 1788 "asn1p_y.y"
3079{ asn1p_lexer_hack_push_opaque_state(); ;
3080 break;}
3081case 221:
3082#line 1788 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003083{
3084 yyval.a_constr = asn1p_constraint_new(yylineno);
3085 checkmem(yyval.a_constr);
3086 yyval.a_constr->type = ACT_CT_CTDBY;
3087 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3088 checkmem(yyval.a_constr->value);
3089 yyval.a_constr->value->type = ATV_UNPARSED;
3090 ;
vlm0aa86902004-10-12 23:26:53 +00003091 break;}
vlm808411d2006-03-14 16:31:37 +00003092case 222:
3093#line 1799 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003094{ yyval.a_ctype = ACT_EL_RANGE; ;
vlm4053ca52005-02-18 16:34:21 +00003095 break;}
vlm808411d2006-03-14 16:31:37 +00003096case 223:
3097#line 1800 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003098{ yyval.a_ctype = ACT_EL_RLRANGE; ;
vlma6a12e32005-03-20 12:58:00 +00003099 break;}
vlm808411d2006-03-14 16:31:37 +00003100case 224:
3101#line 1801 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003102{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3103 break;}
vlm808411d2006-03-14 16:31:37 +00003104case 225:
3105#line 1802 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003106{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3107 break;}
vlm808411d2006-03-14 16:31:37 +00003108case 226:
3109#line 1806 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003110{
vlm39e5ed72004-09-05 10:40:41 +00003111 yyval.a_ctype = ACT_CT_SIZE;
vlm6a02a8a2004-09-08 00:28:11 +00003112 ;
3113 break;}
vlm808411d2006-03-14 16:31:37 +00003114case 227:
3115#line 1809 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003116{
vlm39e5ed72004-09-05 10:40:41 +00003117 yyval.a_ctype = ACT_CT_FROM;
vlm6a02a8a2004-09-08 00:28:11 +00003118 ;
3119 break;}
vlm808411d2006-03-14 16:31:37 +00003120case 228:
3121#line 1815 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003122{
3123 yyval.a_value = asn1p_value_fromint(0);
3124 checkmem(yyval.a_value);
3125 yyval.a_value->type = ATV_FALSE;
3126 ;
3127 break;}
vlm808411d2006-03-14 16:31:37 +00003128case 229:
3129#line 1820 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003130{
3131 yyval.a_value = asn1p_value_fromint(1);
3132 checkmem(yyval.a_value);
3133 yyval.a_value->type = ATV_TRUE;
3134 ;
3135 break;}
vlmdc7cf042006-03-09 08:49:26 +00003136case 230:
vlm808411d2006-03-14 16:31:37 +00003137#line 1825 "asn1p_y.y"
3138{
3139 yyval.a_value = yyvsp[0].a_value;
3140 ;
3141 break;}
3142case 231:
3143#line 1828 "asn1p_y.y"
3144{
3145 yyval.a_value = yyvsp[0].a_value;
3146 ;
3147 break;}
3148case 232:
3149#line 1831 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003150{
vlmfa67ddc2004-06-03 03:38:44 +00003151 asn1p_ref_t *ref;
3152 int ret;
3153 ref = asn1p_ref_new(yylineno);
3154 checkmem(ref);
3155 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3156 checkmem(ret == 0);
3157 yyval.a_value = asn1p_value_fromref(ref, 0);
3158 checkmem(yyval.a_value);
3159 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003160 ;
3161 break;}
vlm808411d2006-03-14 16:31:37 +00003162case 233:
3163#line 1845 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003164{
vlm4053ca52005-02-18 16:34:21 +00003165 asn1p_ref_t *ref;
3166 int ret;
3167 ref = asn1p_ref_new(yylineno);
3168 checkmem(ref);
3169 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3170 checkmem(ret == 0);
3171 yyval.a_value = asn1p_value_fromref(ref, 0);
vlmfa67ddc2004-06-03 03:38:44 +00003172 checkmem(yyval.a_value);
vlm4053ca52005-02-18 16:34:21 +00003173 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003174 ;
3175 break;}
vlm808411d2006-03-14 16:31:37 +00003176case 234:
3177#line 1859 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003178{
vlm5d89c3d2005-08-13 09:07:11 +00003179 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003180 ;
3181 break;}
vlm808411d2006-03-14 16:31:37 +00003182case 235:
3183#line 1862 "asn1p_y.y"
vlm7bbdc9f2005-03-28 15:01:27 +00003184{
vlm5d89c3d2005-08-13 09:07:11 +00003185 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
vlm7bbdc9f2005-03-28 15:01:27 +00003186 ;
3187 break;}
vlm808411d2006-03-14 16:31:37 +00003188case 236:
3189#line 1868 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003190{
vlm5d89c3d2005-08-13 09:07:11 +00003191 yyval.a_constr = yyvsp[0].a_constr;
3192 ;
3193 break;}
vlm808411d2006-03-14 16:31:37 +00003194case 237:
3195#line 1871 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003196{
3197 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3198 ;
3199 break;}
vlm808411d2006-03-14 16:31:37 +00003200case 238:
3201#line 1877 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003202{
vlmfa67ddc2004-06-03 03:38:44 +00003203 yyval.a_constr = asn1p_constraint_new(yylineno);
3204 checkmem(yyval.a_constr);
3205 yyval.a_constr->type = ACT_EL_EXT;
vlm7bbdc9f2005-03-28 15:01:27 +00003206 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003207 ;
3208 break;}
vlm808411d2006-03-14 16:31:37 +00003209case 239:
3210#line 1883 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003211{
vlmfa67ddc2004-06-03 03:38:44 +00003212 yyval.a_constr = asn1p_constraint_new(yylineno);
3213 checkmem(yyval.a_constr);
3214 yyval.a_constr->type = ACT_EL_VALUE;
3215 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3216 yyval.a_constr->presence = yyvsp[0].a_pres;
vlm7bbdc9f2005-03-28 15:01:27 +00003217 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003218 ;
3219 break;}
vlm808411d2006-03-14 16:31:37 +00003220case 240:
3221#line 1897 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003222{ yyval.a_pres = ACPRES_DEFAULT; ;
3223 break;}
vlm808411d2006-03-14 16:31:37 +00003224case 241:
3225#line 1898 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003226{ yyval.a_pres = yyvsp[0].a_pres; ;
3227 break;}
vlm808411d2006-03-14 16:31:37 +00003228case 242:
3229#line 1902 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003230{
vlmfa67ddc2004-06-03 03:38:44 +00003231 yyval.a_pres = ACPRES_PRESENT;
vlm6a02a8a2004-09-08 00:28:11 +00003232 ;
3233 break;}
vlm808411d2006-03-14 16:31:37 +00003234case 243:
3235#line 1905 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00003236{
vlm5d89c3d2005-08-13 09:07:11 +00003237 yyval.a_pres = ACPRES_ABSENT;
vlm931aeed2005-08-12 10:09:10 +00003238 ;
3239 break;}
vlm808411d2006-03-14 16:31:37 +00003240case 244:
3241#line 1908 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00003242{
vlm5d89c3d2005-08-13 09:07:11 +00003243 yyval.a_pres = ACPRES_OPTIONAL;
vlm931aeed2005-08-12 10:09:10 +00003244 ;
3245 break;}
vlmdc7cf042006-03-09 08:49:26 +00003246case 245:
vlm808411d2006-03-14 16:31:37 +00003247#line 1914 "asn1p_y.y"
3248{
3249 yyval.a_constr = yyvsp[0].a_constr;
3250 ;
3251 break;}
3252case 246:
3253#line 1917 "asn1p_y.y"
3254{
3255 yyval.a_constr = yyvsp[0].a_constr;
3256 ;
3257 break;}
3258case 247:
3259#line 1926 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003260{
vlmfa67ddc2004-06-03 03:38:44 +00003261 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3262 asn1p_constraint_t *ct;
3263 int ret;
3264 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3265 checkmem(ret == 0);
3266 ct = asn1p_constraint_new(yylineno);
3267 checkmem(yyval.a_constr);
3268 ct->type = ACT_EL_VALUE;
3269 ct->value = asn1p_value_fromref(ref, 0);
3270 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003271 ;
3272 break;}
vlm808411d2006-03-14 16:31:37 +00003273case 248:
3274#line 1941 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003275{
vlmfa67ddc2004-06-03 03:38:44 +00003276 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003277 ;
3278 break;}
vlm808411d2006-03-14 16:31:37 +00003279case 249:
3280#line 1947 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003281{
vlmfa67ddc2004-06-03 03:38:44 +00003282 yyval.a_constr = asn1p_constraint_new(yylineno);
3283 checkmem(yyval.a_constr);
3284 yyval.a_constr->type = ACT_EL_VALUE;
3285 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003286 ;
3287 break;}
vlm808411d2006-03-14 16:31:37 +00003288case 250:
3289#line 1953 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003290{
vlmfa67ddc2004-06-03 03:38:44 +00003291 asn1p_constraint_t *ct;
3292 ct = asn1p_constraint_new(yylineno);
3293 checkmem(ct);
3294 ct->type = ACT_EL_VALUE;
3295 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3296 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00003297 ;
3298 break;}
vlm808411d2006-03-14 16:31:37 +00003299case 251:
3300#line 1967 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003301{
vlmfa67ddc2004-06-03 03:38:44 +00003302 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3303 int ret;
3304 *p = '@';
3305 strcpy(p + 1, yyvsp[0].tv_str);
3306 yyval.a_ref = asn1p_ref_new(yylineno);
3307 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3308 checkmem(ret == 0);
3309 free(p);
3310 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003311 ;
3312 break;}
vlm808411d2006-03-14 16:31:37 +00003313case 252:
3314#line 1978 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003315{
vlmfa67ddc2004-06-03 03:38:44 +00003316 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3317 int ret;
3318 p[0] = '@';
3319 p[1] = '.';
3320 strcpy(p + 2, yyvsp[0].tv_str);
3321 yyval.a_ref = asn1p_ref_new(yylineno);
3322 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3323 checkmem(ret == 0);
3324 free(p);
3325 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003326 ;
3327 break;}
vlm808411d2006-03-14 16:31:37 +00003328case 253:
3329#line 1994 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003330{
vlmfa67ddc2004-06-03 03:38:44 +00003331 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003332 ;
3333 break;}
vlm808411d2006-03-14 16:31:37 +00003334case 254:
3335#line 1997 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003336{
vlmfa67ddc2004-06-03 03:38:44 +00003337 int l1 = strlen(yyvsp[-2].tv_str);
3338 int l3 = strlen(yyvsp[0].tv_str);
3339 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3340 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3341 yyval.tv_str[l1] = '.';
3342 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3343 yyval.tv_str[l1 + 1 + l3] = '\0';
vlm6a02a8a2004-09-08 00:28:11 +00003344 ;
3345 break;}
vlm808411d2006-03-14 16:31:37 +00003346case 255:
3347#line 2015 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003348{
vlmc94e28f2004-09-15 11:59:51 +00003349 yyval.a_marker.flags = EM_NOMARK;
3350 yyval.a_marker.default_value = 0;
vlm6a02a8a2004-09-08 00:28:11 +00003351 ;
3352 break;}
vlm808411d2006-03-14 16:31:37 +00003353case 256:
3354#line 2019 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003355{ yyval.a_marker = yyvsp[0].a_marker; ;
vlma2374a02004-09-14 02:44:07 +00003356 break;}
vlm808411d2006-03-14 16:31:37 +00003357case 257:
3358#line 2023 "asn1p_y.y"
vlma2374a02004-09-14 02:44:07 +00003359{
vlm1ac75e72005-11-26 11:21:55 +00003360 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
vlmc94e28f2004-09-15 11:59:51 +00003361 yyval.a_marker.default_value = 0;
vlma2374a02004-09-14 02:44:07 +00003362 ;
3363 break;}
vlm808411d2006-03-14 16:31:37 +00003364case 258:
3365#line 2027 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003366{
3367 yyval.a_marker.flags = EM_DEFAULT;
3368 yyval.a_marker.default_value = yyvsp[0].a_value;
3369 ;
3370 break;}
vlm808411d2006-03-14 16:31:37 +00003371case 259:
3372#line 2050 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003373{
vlm39e5ed72004-09-05 10:40:41 +00003374 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003375 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003376 ;
3377 break;}
vlm808411d2006-03-14 16:31:37 +00003378case 260:
3379#line 2054 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003380{
vlm7bbdc9f2005-03-28 15:01:27 +00003381 yyval.a_expr = yyvsp[-1].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00003382 ;
3383 break;}
vlm808411d2006-03-14 16:31:37 +00003384case 261:
3385#line 2060 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003386{
vlm7bbdc9f2005-03-28 15:01:27 +00003387 yyval.a_expr = asn1p_expr_new(yylineno);
3388 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003389 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3390 ;
3391 break;}
vlm808411d2006-03-14 16:31:37 +00003392case 262:
3393#line 2065 "asn1p_y.y"
vlm7bbdc9f2005-03-28 15:01:27 +00003394{
3395 yyval.a_expr = yyvsp[-2].a_expr;
3396 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3397 ;
3398 break;}
vlm808411d2006-03-14 16:31:37 +00003399case 263:
3400#line 2072 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003401{
vlm39e5ed72004-09-05 10:40:41 +00003402 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003403 checkmem(yyval.a_expr);
3404 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3405 yyval.a_expr->meta_type = AMT_VALUE;
3406 yyval.a_expr->Identifier = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003407 ;
3408 break;}
vlmdc7cf042006-03-09 08:49:26 +00003409case 264:
vlm808411d2006-03-14 16:31:37 +00003410#line 2079 "asn1p_y.y"
3411{
3412 yyval.a_expr = asn1p_expr_new(yylineno);
3413 checkmem(yyval.a_expr);
3414 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3415 yyval.a_expr->meta_type = AMT_VALUE;
3416 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3417 yyval.a_expr->value = yyvsp[-1].a_value;
3418 ;
3419 break;}
3420case 265:
3421#line 2087 "asn1p_y.y"
3422{
3423 yyval.a_expr = asn1p_expr_new(yylineno);
3424 checkmem(yyval.a_expr);
3425 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3426 yyval.a_expr->meta_type = AMT_VALUE;
3427 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3428 yyval.a_expr->value = yyvsp[-1].a_value;
3429 ;
3430 break;}
3431case 266:
3432#line 2095 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003433{
3434 yyval.a_expr = asn1p_expr_new(yylineno);
3435 checkmem(yyval.a_expr);
3436 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3437 yyval.a_expr->meta_type = AMT_VALUE;
vlmfa67ddc2004-06-03 03:38:44 +00003438 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00003439 ;
3440 break;}
vlm808411d2006-03-14 16:31:37 +00003441case 267:
3442#line 2102 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003443{
vlm39e5ed72004-09-05 10:40:41 +00003444 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003445 checkmem(yyval.a_expr);
3446 yyval.a_expr->Identifier = strdup("...");
3447 checkmem(yyval.a_expr->Identifier);
3448 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3449 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00003450 ;
3451 break;}
vlmdc7cf042006-03-09 08:49:26 +00003452case 268:
vlm808411d2006-03-14 16:31:37 +00003453#line 2113 "asn1p_y.y"
3454{
3455 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3456 checkmem(yyval.a_value);
3457 ;
vlm5d89c3d2005-08-13 09:07:11 +00003458 break;}
vlma367d552006-03-09 09:11:53 +00003459case 269:
vlm808411d2006-03-14 16:31:37 +00003460#line 2117 "asn1p_y.y"
3461{
3462 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3463 checkmem(yyval.a_value);
3464 ;
vlm5d89c3d2005-08-13 09:07:11 +00003465 break;}
vlma367d552006-03-09 09:11:53 +00003466case 270:
vlm808411d2006-03-14 16:31:37 +00003467#line 2148 "asn1p_y.y"
3468{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3469 break;}
3470case 271:
3471#line 2149 "asn1p_y.y"
3472{ yyval.a_tag = yyvsp[0].a_tag; ;
3473 break;}
3474case 272:
3475#line 2153 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003476{
vlm2728a8d2005-01-23 09:51:44 +00003477 yyval.a_tag = yyvsp[-1].a_tag;
3478 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
vlm6a02a8a2004-09-08 00:28:11 +00003479 ;
3480 break;}
vlm808411d2006-03-14 16:31:37 +00003481case 273:
3482#line 2160 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003483{
vlm2728a8d2005-01-23 09:51:44 +00003484 yyval.a_tag = yyvsp[-2].a_tag;
3485 yyval.a_tag.tag_value = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00003486 ;
3487 break;}
vlm808411d2006-03-14 16:31:37 +00003488case 274:
3489#line 2166 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003490{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
vlm6a02a8a2004-09-08 00:28:11 +00003491 break;}
vlm808411d2006-03-14 16:31:37 +00003492case 275:
3493#line 2167 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003494{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
vlm151c0b22004-09-22 16:03:36 +00003495 break;}
vlm808411d2006-03-14 16:31:37 +00003496case 276:
3497#line 2168 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003498{ yyval.a_tag.tag_class = TC_APPLICATION; ;
vlme1e6ed82005-03-24 14:26:38 +00003499 break;}
vlm808411d2006-03-14 16:31:37 +00003500case 277:
3501#line 2169 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003502{ yyval.a_tag.tag_class = TC_PRIVATE; ;
vlm931aeed2005-08-12 10:09:10 +00003503 break;}
vlm808411d2006-03-14 16:31:37 +00003504case 278:
3505#line 2173 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003506{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3507 break;}
vlm808411d2006-03-14 16:31:37 +00003508case 279:
3509#line 2174 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003510{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3511 break;}
vlm808411d2006-03-14 16:31:37 +00003512case 280:
3513#line 2175 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003514{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3515 break;}
vlmdc7cf042006-03-09 08:49:26 +00003516case 281:
vlm808411d2006-03-14 16:31:37 +00003517#line 2179 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003518{
3519 checkmem(yyvsp[0].tv_str);
3520 yyval.tv_str = yyvsp[0].tv_str;
3521 ;
3522 break;}
vlmdc7cf042006-03-09 08:49:26 +00003523case 282:
vlm808411d2006-03-14 16:31:37 +00003524#line 2183 "asn1p_y.y"
3525{
3526 checkmem(yyvsp[0].tv_str);
3527 yyval.tv_str = yyvsp[0].tv_str;
3528 ;
vlm177a5b62005-09-05 05:17:57 +00003529 break;}
vlma367d552006-03-09 09:11:53 +00003530case 283:
vlm808411d2006-03-14 16:31:37 +00003531#line 2191 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003532{
vlm808411d2006-03-14 16:31:37 +00003533 checkmem(yyvsp[0].tv_str);
vlm177a5b62005-09-05 05:17:57 +00003534 yyval.tv_str = yyvsp[0].tv_str;
3535 ;
3536 break;}
vlma367d552006-03-09 09:11:53 +00003537case 284:
3538#line 2198 "asn1p_y.y"
vlm808411d2006-03-14 16:31:37 +00003539{ yyval.tv_str = 0; ;
3540 break;}
3541case 285:
3542#line 2199 "asn1p_y.y"
3543{
3544 yyval.tv_str = yyvsp[0].tv_str;
3545 ;
3546 break;}
3547case 286:
3548#line 2205 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003549{
vlm39e5ed72004-09-05 10:40:41 +00003550 checkmem(yyvsp[0].tv_str);
3551 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003552 ;
3553 break;}
vlm6a02a8a2004-09-08 00:28:11 +00003554}
3555 /* the action file gets copied in in place of this dollarsign */
3556#line 543 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00003557
3558 yyvsp -= yylen;
3559 yyssp -= yylen;
vlm6a02a8a2004-09-08 00:28:11 +00003560#ifdef YYLSP_NEEDED
3561 yylsp -= yylen;
3562#endif
vlmfa67ddc2004-06-03 03:38:44 +00003563
vlm6a02a8a2004-09-08 00:28:11 +00003564#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00003565 if (yydebug)
3566 {
vlm6a02a8a2004-09-08 00:28:11 +00003567 short *ssp1 = yyss - 1;
3568 fprintf (stderr, "state stack now");
3569 while (ssp1 != yyssp)
3570 fprintf (stderr, " %d", *++ssp1);
3571 fprintf (stderr, "\n");
vlmfa67ddc2004-06-03 03:38:44 +00003572 }
3573#endif
3574
3575 *++yyvsp = yyval;
3576
vlm6a02a8a2004-09-08 00:28:11 +00003577#ifdef YYLSP_NEEDED
3578 yylsp++;
3579 if (yylen == 0)
3580 {
3581 yylsp->first_line = yylloc.first_line;
3582 yylsp->first_column = yylloc.first_column;
3583 yylsp->last_line = (yylsp-1)->last_line;
3584 yylsp->last_column = (yylsp-1)->last_column;
3585 yylsp->text = 0;
3586 }
3587 else
3588 {
3589 yylsp->last_line = (yylsp+yylen-1)->last_line;
3590 yylsp->last_column = (yylsp+yylen-1)->last_column;
3591 }
3592#endif
vlmfa67ddc2004-06-03 03:38:44 +00003593
vlm6a02a8a2004-09-08 00:28:11 +00003594 /* Now "shift" the result of the reduction.
3595 Determine what state that goes to,
3596 based on the state we popped back to
3597 and the rule number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00003598
3599 yyn = yyr1[yyn];
3600
vlm6a02a8a2004-09-08 00:28:11 +00003601 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3602 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00003603 yystate = yytable[yystate];
3604 else
vlm6a02a8a2004-09-08 00:28:11 +00003605 yystate = yydefgoto[yyn - YYNTBASE];
vlmfa67ddc2004-06-03 03:38:44 +00003606
3607 goto yynewstate;
3608
vlm6a02a8a2004-09-08 00:28:11 +00003609yyerrlab: /* here on detecting error */
vlmfa67ddc2004-06-03 03:38:44 +00003610
vlm6a02a8a2004-09-08 00:28:11 +00003611 if (! yyerrstatus)
3612 /* If not already recovering from an error, report this error. */
vlmfa67ddc2004-06-03 03:38:44 +00003613 {
3614 ++yynerrs;
vlm6a02a8a2004-09-08 00:28:11 +00003615
3616#ifdef YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00003617 yyn = yypact[yystate];
3618
vlm6a02a8a2004-09-08 00:28:11 +00003619 if (yyn > YYFLAG && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00003620 {
vlm6a02a8a2004-09-08 00:28:11 +00003621 int size = 0;
3622 char *msg;
3623 int x, count;
vlmfa67ddc2004-06-03 03:38:44 +00003624
vlm6a02a8a2004-09-08 00:28:11 +00003625 count = 0;
3626 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3627 for (x = (yyn < 0 ? -yyn : 0);
vlm03630c52005-06-07 21:43:32 +00003628 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
vlm6a02a8a2004-09-08 00:28:11 +00003629 if (yycheck[x + yyn] == x)
3630 size += strlen(yytname[x]) + 15, count++;
3631 msg = (char *) malloc(size + 15);
3632 if (msg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00003633 {
vlm6a02a8a2004-09-08 00:28:11 +00003634 strcpy(msg, "parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003635
vlm6a02a8a2004-09-08 00:28:11 +00003636 if (count < 5)
vlmfa67ddc2004-06-03 03:38:44 +00003637 {
vlm6a02a8a2004-09-08 00:28:11 +00003638 count = 0;
3639 for (x = (yyn < 0 ? -yyn : 0);
vlm03630c52005-06-07 21:43:32 +00003640 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
vlm6a02a8a2004-09-08 00:28:11 +00003641 if (yycheck[x + yyn] == x)
vlmfa67ddc2004-06-03 03:38:44 +00003642 {
vlm6a02a8a2004-09-08 00:28:11 +00003643 strcat(msg, count == 0 ? ", expecting `" : " or `");
3644 strcat(msg, yytname[x]);
3645 strcat(msg, "'");
3646 count++;
vlmfa67ddc2004-06-03 03:38:44 +00003647 }
3648 }
vlm6a02a8a2004-09-08 00:28:11 +00003649 yyerror(msg);
3650 free(msg);
vlmfa67ddc2004-06-03 03:38:44 +00003651 }
3652 else
vlm6a02a8a2004-09-08 00:28:11 +00003653 yyerror ("parse error; also virtual memory exceeded");
vlmfa67ddc2004-06-03 03:38:44 +00003654 }
3655 else
3656#endif /* YYERROR_VERBOSE */
vlm6a02a8a2004-09-08 00:28:11 +00003657 yyerror("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003658 }
vlm6a02a8a2004-09-08 00:28:11 +00003659
vlmfa67ddc2004-06-03 03:38:44 +00003660 goto yyerrlab1;
vlm6a02a8a2004-09-08 00:28:11 +00003661yyerrlab1: /* here on error raised explicitly by an action */
vlmfa67ddc2004-06-03 03:38:44 +00003662
3663 if (yyerrstatus == 3)
3664 {
vlm6a02a8a2004-09-08 00:28:11 +00003665 /* if just tried and failed to reuse lookahead token after an error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00003666
vlm6a02a8a2004-09-08 00:28:11 +00003667 /* return failure if at end of input */
vlmfa67ddc2004-06-03 03:38:44 +00003668 if (yychar == YYEOF)
vlm6a02a8a2004-09-08 00:28:11 +00003669 YYABORT;
vlmfa67ddc2004-06-03 03:38:44 +00003670
vlm6a02a8a2004-09-08 00:28:11 +00003671#if YYDEBUG != 0
3672 if (yydebug)
3673 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3674#endif
3675
vlmfa67ddc2004-06-03 03:38:44 +00003676 yychar = YYEMPTY;
3677 }
3678
vlm6a02a8a2004-09-08 00:28:11 +00003679 /* Else will try to reuse lookahead token
3680 after shifting the error token. */
vlmfa67ddc2004-06-03 03:38:44 +00003681
vlm6a02a8a2004-09-08 00:28:11 +00003682 yyerrstatus = 3; /* Each real token shifted decrements this */
vlmfa67ddc2004-06-03 03:38:44 +00003683
vlm6a02a8a2004-09-08 00:28:11 +00003684 goto yyerrhandle;
vlm80103492004-09-07 10:39:09 +00003685
vlm6a02a8a2004-09-08 00:28:11 +00003686yyerrdefault: /* current state does not do anything special for the error token. */
vlm80103492004-09-07 10:39:09 +00003687
vlm6a02a8a2004-09-08 00:28:11 +00003688#if 0
3689 /* This is wrong; only states that explicitly want error tokens
3690 should shift them. */
3691 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3692 if (yyn) goto yydefault;
vlm39e5ed72004-09-05 10:40:41 +00003693#endif
vlm6a02a8a2004-09-08 00:28:11 +00003694
3695yyerrpop: /* pop the current state because it cannot handle the error token */
3696
3697 if (yyssp == yyss) YYABORT;
3698 yyvsp--;
3699 yystate = *--yyssp;
3700#ifdef YYLSP_NEEDED
3701 yylsp--;
3702#endif
3703
3704#if YYDEBUG != 0
3705 if (yydebug)
3706 {
3707 short *ssp1 = yyss - 1;
3708 fprintf (stderr, "Error: state stack now");
3709 while (ssp1 != yyssp)
3710 fprintf (stderr, " %d", *++ssp1);
3711 fprintf (stderr, "\n");
vlm39e5ed72004-09-05 10:40:41 +00003712 }
vlm6a02a8a2004-09-08 00:28:11 +00003713#endif
3714
3715yyerrhandle:
3716
3717 yyn = yypact[yystate];
3718 if (yyn == YYFLAG)
3719 goto yyerrdefault;
3720
3721 yyn += YYTERROR;
3722 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3723 goto yyerrdefault;
3724
3725 yyn = yytable[yyn];
3726 if (yyn < 0)
3727 {
3728 if (yyn == YYFLAG)
3729 goto yyerrpop;
3730 yyn = -yyn;
3731 goto yyreduce;
3732 }
3733 else if (yyn == 0)
3734 goto yyerrpop;
vlmfa67ddc2004-06-03 03:38:44 +00003735
3736 if (yyn == YYFINAL)
3737 YYACCEPT;
3738
vlm6a02a8a2004-09-08 00:28:11 +00003739#if YYDEBUG != 0
3740 if (yydebug)
3741 fprintf(stderr, "Shifting error token, ");
3742#endif
vlmfa67ddc2004-06-03 03:38:44 +00003743
3744 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00003745#ifdef YYLSP_NEEDED
3746 *++yylsp = yylloc;
3747#endif
vlmfa67ddc2004-06-03 03:38:44 +00003748
3749 yystate = yyn;
3750 goto yynewstate;
3751
vlm6a02a8a2004-09-08 00:28:11 +00003752 yyacceptlab:
3753 /* YYACCEPT comes here. */
3754 if (yyfree_stacks)
3755 {
3756 free (yyss);
3757 free (yyvs);
3758#ifdef YYLSP_NEEDED
3759 free (yyls);
vlm044f7442004-09-04 04:49:21 +00003760#endif
vlm6a02a8a2004-09-08 00:28:11 +00003761 }
3762 return 0;
vlm80103492004-09-07 10:39:09 +00003763
vlm6a02a8a2004-09-08 00:28:11 +00003764 yyabortlab:
3765 /* YYABORT comes here. */
3766 if (yyfree_stacks)
3767 {
3768 free (yyss);
3769 free (yyvs);
3770#ifdef YYLSP_NEEDED
3771 free (yyls);
vlm80103492004-09-07 10:39:09 +00003772#endif
vlm6a02a8a2004-09-08 00:28:11 +00003773 }
3774 return 1;
vlmfa67ddc2004-06-03 03:38:44 +00003775}
vlm808411d2006-03-14 16:31:37 +00003776#line 2211 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00003777
3778
3779
3780/*
3781 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3782 */
3783static asn1p_value_t *
3784_convert_bitstring2binary(char *str, int base) {
3785 asn1p_value_t *val;
3786 int slen;
3787 int memlen;
3788 int baselen;
3789 int bits;
3790 uint8_t *binary_vector;
3791 uint8_t *bv_ptr;
3792 uint8_t cur_val;
3793
3794 assert(str);
3795 assert(str[0] == '\'');
3796
3797 switch(base) {
3798 case 'B':
3799 baselen = 1;
3800 break;
3801 case 'H':
3802 baselen = 4;
3803 break;
3804 default:
3805 assert(base == 'B' || base == 'H');
3806 errno = EINVAL;
3807 return NULL;
3808 }
3809
3810 slen = strlen(str);
3811 assert(str[slen - 1] == base);
3812 assert(str[slen - 2] == '\'');
3813
3814 memlen = slen / (8 / baselen); /* Conservative estimate */
3815
3816 bv_ptr = binary_vector = malloc(memlen + 1);
3817 if(bv_ptr == NULL)
3818 /* ENOMEM */
3819 return NULL;
3820
3821 cur_val = 0;
3822 bits = 0;
3823 while(*(++str) != '\'') {
3824 switch(baselen) {
3825 case 1:
3826 switch(*str) {
3827 case '1':
3828 cur_val |= 1 << (7 - (bits % 8));
3829 case '0':
3830 break;
3831 default:
3832 assert(!"_y UNREACH1");
3833 case ' ': case '\r': case '\n':
3834 continue;
3835 }
3836 break;
3837 case 4:
3838 switch(*str) {
3839 case '0': case '1': case '2': case '3': case '4':
3840 case '5': case '6': case '7': case '8': case '9':
3841 cur_val |= (*str - '0') << (4 - (bits % 8));
3842 break;
3843 case 'A': case 'B': case 'C':
3844 case 'D': case 'E': case 'F':
3845 cur_val |= ((*str - 'A') + 10)
3846 << (4 - (bits % 8));
3847 break;
3848 default:
3849 assert(!"_y UNREACH2");
3850 case ' ': case '\r': case '\n':
3851 continue;
3852 }
3853 break;
3854 }
3855
3856 bits += baselen;
3857 if((bits % 8) == 0) {
3858 *bv_ptr++ = cur_val;
3859 cur_val = 0;
3860 }
3861 }
3862
3863 *bv_ptr = cur_val;
3864 assert((bv_ptr - binary_vector) <= memlen);
3865
3866 val = asn1p_value_frombits(binary_vector, bits, 0);
3867 if(val == NULL) {
3868 free(binary_vector);
3869 }
3870
3871 return val;
3872}
3873
vlm5d89c3d2005-08-13 09:07:11 +00003874/*
3875 * For unnamed types (used in old X.208 compliant modules)
3876 * generate some sort of interim names, to not to force human being to fix
3877 * the specification's compliance to modern ASN.1 standards.
3878 */
3879static void
3880_fixup_anonymous_identifier(asn1p_expr_t *expr) {
3881 char *p;
3882 assert(expr->Identifier == 0);
3883
3884 /*
3885 * Try to figure out the type name
3886 * without going too much into details
3887 */
3888 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
3889 if(expr->reference && expr->reference->comp_count > 0)
3890 expr->Identifier = expr->reference->components[0].name;
3891
3892 fprintf(stderr,
3893 "WARNING: Line %d: expected lower-case member identifier, "
3894 "found an unnamed %s.\n"
3895 "WARNING: Obsolete X.208 syntax detected, "
3896 "please give the member a name.\n",
3897 yylineno, expr->Identifier ? expr->Identifier : "type");
3898
3899 if(!expr->Identifier)
3900 expr->Identifier = "unnamed";
3901 expr->Identifier = strdup(expr->Identifier);
3902 assert(expr->Identifier);
3903 /* Make a lowercase identifier from the type name */
3904 for(p = expr->Identifier; *p; p++) {
3905 switch(*p) {
3906 case 'A' ... 'Z': *p += 32; break;
3907 case ' ': *p = '_'; break;
3908 case '-': *p = '_'; break;
3909 }
3910 }
3911 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
3912 "Name clash may occur later.\n",
3913 expr->Identifier);
3914}
3915
vlmfa67ddc2004-06-03 03:38:44 +00003916int
3917yyerror(const char *msg) {
vlm808411d2006-03-14 16:31:37 +00003918 extern char *asn1p_text;
vlmfa67ddc2004-06-03 03:38:44 +00003919 fprintf(stderr,
3920 "ASN.1 grammar parse error "
3921 "near line %d (token \"%s\"): %s\n",
vlm39e5ed72004-09-05 10:40:41 +00003922 yylineno, asn1p_text, msg);
vlmfa67ddc2004-06-03 03:38:44 +00003923 return -1;
3924}
3925