blob: 024f520e62695eb558282804b3d1fea4f4260af6 [file] [log] [blame]
Lev Walkinf15320b2004-06-03 03:38:44 +00001
Lev Walkin1004aa92004-09-08 00:28:11 +00002/* A Bison parser, made from asn1p_y.y
3 by GNU Bison version 1.28 */
Lev Walkinf15320b2004-06-03 03:38:44 +00004
Lev Walkin1004aa92004-09-08 00:28:11 +00005#define YYBISON 1 /* Identify Bison output. */
Lev Walkinf15320b2004-06-03 03:38:44 +00006
7#define yyparse asn1p_parse
Lev Walkin1004aa92004-09-08 00:28:11 +00008#define yylex asn1p_lex
Lev Walkinf15320b2004-06-03 03:38:44 +00009#define yyerror asn1p_error
Lev Walkin1004aa92004-09-08 00:28:11 +000010#define yylval asn1p_lval
11#define yychar asn1p_char
Lev Walkinf15320b2004-06-03 03:38:44 +000012#define yydebug asn1p_debug
13#define yynerrs asn1p_nerrs
Lev Walkin1004aa92004-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
Lev Walkind9574ae2005-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
28#define TOK_ABSENT 271
29#define TOK_ABSTRACT_SYNTAX 272
30#define TOK_ALL 273
31#define TOK_ANY 274
32#define TOK_APPLICATION 275
33#define TOK_AUTOMATIC 276
34#define TOK_BEGIN 277
35#define TOK_BIT 278
36#define TOK_BMPString 279
37#define TOK_BOOLEAN 280
38#define TOK_BY 281
39#define TOK_CHARACTER 282
40#define TOK_CHOICE 283
41#define TOK_CLASS 284
42#define TOK_COMPONENT 285
43#define TOK_COMPONENTS 286
44#define TOK_CONSTRAINED 287
45#define TOK_CONTAINING 288
46#define TOK_DEFAULT 289
47#define TOK_DEFINITIONS 290
48#define TOK_DEFINED 291
49#define TOK_EMBEDDED 292
50#define TOK_ENCODED 293
51#define TOK_ENCODING_CONTROL 294
52#define TOK_END 295
53#define TOK_ENUMERATED 296
54#define TOK_EXPLICIT 297
55#define TOK_EXPORTS 298
56#define TOK_EXTENSIBILITY 299
57#define TOK_EXTERNAL 300
58#define TOK_FALSE 301
59#define TOK_FROM 302
60#define TOK_GeneralizedTime 303
61#define TOK_GeneralString 304
62#define TOK_GraphicString 305
63#define TOK_IA5String 306
64#define TOK_IDENTIFIER 307
65#define TOK_IMPLICIT 308
66#define TOK_IMPLIED 309
67#define TOK_IMPORTS 310
68#define TOK_INCLUDES 311
69#define TOK_INSTANCE 312
70#define TOK_INSTRUCTIONS 313
71#define TOK_INTEGER 314
72#define TOK_ISO646String 315
73#define TOK_MAX 316
74#define TOK_MIN 317
75#define TOK_MINUS_INFINITY 318
76#define TOK_NULL 319
77#define TOK_NumericString 320
78#define TOK_OBJECT 321
79#define TOK_ObjectDescriptor 322
80#define TOK_OCTET 323
81#define TOK_OF 324
82#define TOK_OPTIONAL 325
83#define TOK_PATTERN 326
84#define TOK_PDV 327
85#define TOK_PLUS_INFINITY 328
86#define TOK_PRESENT 329
87#define TOK_PrintableString 330
88#define TOK_PRIVATE 331
89#define TOK_REAL 332
90#define TOK_RELATIVE_OID 333
91#define TOK_SEQUENCE 334
92#define TOK_SET 335
93#define TOK_SIZE 336
94#define TOK_STRING 337
95#define TOK_SYNTAX 338
96#define TOK_T61String 339
97#define TOK_TAGS 340
98#define TOK_TeletexString 341
99#define TOK_TRUE 342
100#define TOK_TYPE_IDENTIFIER 343
101#define TOK_UNIQUE 344
102#define TOK_UNIVERSAL 345
103#define TOK_UniversalString 346
104#define TOK_UTCTime 347
105#define TOK_UTF8String 348
106#define TOK_VideotexString 349
107#define TOK_VisibleString 350
108#define TOK_WITH 351
109#define TOK_EXCEPT 352
110#define TOK_INTERSECTION 353
111#define TOK_UNION 354
112#define TOK_TwoDots 355
113#define TOK_ThreeDots 356
Lev Walkinf15320b2004-06-03 03:38:44 +0000114
115#line 1 "asn1p_y.y"
116
117
118#include <stdlib.h>
119#include <stdio.h>
120#include <string.h>
121#include <errno.h>
122#include <assert.h>
123
124#include "asn1parser.h"
125
126#define YYPARSE_PARAM param
Lev Walkin4a4bdf72005-06-07 21:43:32 +0000127#define YYPARSE_PARAM_TYPE void **
Lev Walkinf15320b2004-06-03 03:38:44 +0000128#define YYERROR_VERBOSE
129
130int yylex(void);
131int yyerror(const char *msg);
Lev Walkin4a4bdf72005-06-07 21:43:32 +0000132#ifdef YYBYACC
133int yyparse(void **param); /* byacc does not produce a prototype */
134#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000135void asn1p_lexer_hack_push_opaque_state(void);
136void asn1p_lexer_hack_enable_with_syntax(void);
Lev Walkinf59d0752004-08-18 04:59:12 +0000137void asn1p_lexer_hack_push_encoding_control(void);
Lev Walkinf15320b2004-06-03 03:38:44 +0000138#define yylineno asn1p_lineno
139extern int asn1p_lineno;
140
Lev Walkinb36317c2005-08-12 10:09:10 +0000141/*
Lev Walkinef625402005-09-05 05:17:57 +0000142 * Process directives as <ASN1C:RepresentAsPointer>
Lev Walkin4696c742005-08-22 12:23:54 +0000143 */
144extern int asn1p_as_pointer;
Lev Walkin4696c742005-08-22 12:23:54 +0000145
146/*
Lev Walkinb36317c2005-08-12 10:09:10 +0000147 * This temporary variable is used to solve the shortcomings of 1-lookahead
148 * parser.
149 */
150static struct AssignedIdentifier *saved_aid;
Lev Walkinf15320b2004-06-03 03:38:44 +0000151
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000152static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
153static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
Lev Walkinf15320b2004-06-03 03:38:44 +0000154
Lev Walkinb36317c2005-08-12 10:09:10 +0000155#define checkmem(ptr) do { \
156 if(!(ptr)) \
157 return yyerror("Memory failure"); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000158 } while(0)
159
Lev Walkinb36317c2005-08-12 10:09:10 +0000160#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
161 if(arg1->type != constr_type) { \
162 int __ret; \
163 root = asn1p_constraint_new(yylineno); \
164 checkmem(root); \
165 root->type = constr_type; \
166 __ret = asn1p_constraint_insert(root, \
167 arg1); \
168 checkmem(__ret == 0); \
169 } else { \
170 root = arg1; \
171 } \
172 if(arg2) { \
173 int __ret \
174 = asn1p_constraint_insert(root, arg2); \
175 checkmem(__ret == 0); \
176 } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000177 } while(0)
178
179
Lev Walkinef625402005-09-05 05:17:57 +0000180#line 72 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +0000181typedef union {
182 asn1p_t *a_grammar;
183 asn1p_module_flags_e a_module_flags;
184 asn1p_module_t *a_module;
185 asn1p_expr_type_e a_type; /* ASN.1 Type */
186 asn1p_expr_t *a_expr; /* Constructed collection */
187 asn1p_constraint_t *a_constr; /* Constraint */
188 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
189 asn1p_xports_t *a_xports; /* IMports/EXports */
Lev Walkinb36317c2005-08-12 10:09:10 +0000190 struct AssignedIdentifier a_aid; /* Assigned Identifier */
Lev Walkinf15320b2004-06-03 03:38:44 +0000191 asn1p_oid_t *a_oid; /* Object Identifier */
192 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
193 struct asn1p_type_tag_s a_tag; /* A tag */
194 asn1p_ref_t *a_ref; /* Reference to custom type */
195 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
196 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
197 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
198 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
199 struct asn1p_param_s a_parg; /* A parameter argument */
200 asn1p_paramlist_t *a_plist; /* A pargs list */
Lev Walkin9c974182004-09-15 11:59:51 +0000201 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
Lev Walkinf15320b2004-06-03 03:38:44 +0000202 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
Lev Walkind21c5052004-09-29 13:18:09 +0000203 asn1c_integer_t a_int;
Lev Walkinf15320b2004-06-03 03:38:44 +0000204 char *tv_str;
205 struct {
206 char *buf;
207 int len;
208 } tv_opaque;
209 struct {
210 char *name;
211 struct asn1p_type_tag_s tag;
212 } tv_nametag;
Lev Walkin1004aa92004-09-08 00:28:11 +0000213} YYSTYPE;
214#include <stdio.h>
215
216#ifndef __cplusplus
217#ifndef __STDC__
218#define const
219#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000220#endif
221
222
223
Lev Walkin9c2285a2006-03-09 08:49:26 +0000224#define YYFINAL 445
Lev Walkin1004aa92004-09-08 00:28:11 +0000225#define YYFLAG -32768
Lev Walkind9574ae2005-03-24 16:22:35 +0000226#define YYNTBASE 118
Lev Walkinf15320b2004-06-03 03:38:44 +0000227
Lev Walkin9c2285a2006-03-09 08:49:26 +0000228#define YYTRANSLATE(x) ((unsigned)(x) <= 356 ? yytranslate[x] : 225)
Lev Walkinf15320b2004-06-03 03:38:44 +0000229
Lev Walkin1004aa92004-09-08 00:28:11 +0000230static const char yytranslate[] = { 0,
231 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
232 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
233 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkind9574ae2005-03-24 16:22:35 +0000234 2, 2, 112, 2, 2, 2, 2, 2, 2, 107,
235 108, 2, 2, 110, 2, 113, 2, 2, 2, 2,
236 2, 2, 2, 2, 2, 2, 2, 111, 109, 114,
237 2, 2, 2, 115, 2, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000238 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
239 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkind9574ae2005-03-24 16:22:35 +0000240 116, 2, 117, 99, 2, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000241 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
242 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkind9574ae2005-03-24 16:22:35 +0000243 2, 2, 105, 101, 106, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-09-08 00:28:11 +0000244 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
245 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, 1, 3, 4, 5, 6,
257 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
258 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
259 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
260 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
261 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
262 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
263 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
264 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
265 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
Lev Walkind9574ae2005-03-24 16:22:35 +0000266 97, 98, 100, 102, 103, 104
Lev Walkin1004aa92004-09-08 00:28:11 +0000267};
Lev Walkinf15320b2004-06-03 03:38:44 +0000268
Lev Walkin1004aa92004-09-08 00:28:11 +0000269#if YYDEBUG != 0
270static const short yyprhs[] = { 0,
271 0, 2, 4, 7, 16, 17, 19, 23, 26, 28,
272 31, 33, 38, 40, 41, 43, 45, 48, 51, 54,
273 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
Lev Walkinb36317c2005-08-12 10:09:10 +0000274 79, 81, 82, 86, 88, 92, 95, 97, 100, 101,
275 103, 108, 110, 114, 116, 120, 122, 126, 130, 133,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000276 135, 139, 141, 145, 147, 148, 155, 157, 159, 163,
277 167, 174, 176, 180, 182, 186, 190, 194, 196, 200,
278 202, 204, 205, 207, 209, 213, 217, 220, 224, 226,
279 228, 232, 235, 237, 239, 245, 246, 248, 250, 254,
280 257, 262, 266, 270, 274, 278, 282, 283, 285, 286,
281 293, 295, 298, 300, 302, 304, 308, 312, 316, 317,
282 320, 322, 327, 332, 337, 344, 351, 353, 358, 363,
283 365, 369, 371, 375, 379, 383, 385, 389, 391, 395,
284 397, 399, 401, 403, 405, 409, 413, 415, 419, 424,
285 428, 429, 433, 435, 437, 439, 441, 443, 445, 447,
286 449, 451, 455, 457, 459, 461, 463, 466, 468, 470,
287 472, 474, 477, 480, 482, 484, 487, 490, 492, 494,
288 496, 498, 500, 503, 505, 508, 510, 512, 514, 516,
289 518, 520, 522, 524, 526, 528, 530, 532, 534, 536,
290 538, 540, 542, 544, 546, 547, 549, 551, 556, 560,
291 565, 567, 571, 577, 579, 583, 587, 591, 595, 600,
292 604, 606, 608, 612, 616, 620, 624, 626, 628, 629,
293 635, 637, 640, 643, 647, 649, 651, 653, 655, 657,
294 659, 661, 663, 667, 673, 675, 679, 681, 685, 686,
295 688, 690, 692, 694, 696, 698, 702, 707, 709, 713,
296 716, 720, 722, 726, 727, 729, 731, 734, 737, 741,
297 743, 747, 749, 754, 759, 761, 763, 765, 767, 768,
298 770, 773, 778, 779, 781, 783, 785, 786, 788, 790,
299 792, 794, 796, 797, 799
Lev Walkin1004aa92004-09-08 00:28:11 +0000300};
Lev Walkinf15320b2004-06-03 03:38:44 +0000301
Lev Walkind9574ae2005-03-24 16:22:35 +0000302static const short yyrhs[] = { 119,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000303 0, 120, 0, 119, 120, 0, 221, 121, 36, 125,
Lev Walkind9574ae2005-03-24 16:22:35 +0000304 3, 23, 128, 41, 0, 0, 122, 0, 105, 123,
305 106, 0, 105, 106, 0, 124, 0, 123, 124, 0,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000306 224, 0, 224, 107, 9, 108, 0, 9, 0, 0,
Lev Walkind9574ae2005-03-24 16:22:35 +0000307 126, 0, 127, 0, 126, 127, 0, 43, 86, 0,
308 54, 86, 0, 22, 86, 0, 45, 55, 0, 14,
309 59, 0, 0, 129, 0, 130, 0, 129, 130, 0,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000310 132, 0, 138, 0, 144, 0, 175, 0, 141, 0,
311 0, 40, 14, 131, 0, 184, 0, 56, 133, 109,
Lev Walkinb36317c2005-08-12 10:09:10 +0000312 0, 56, 48, 0, 135, 0, 133, 135, 0, 0,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000313 122, 0, 136, 48, 221, 134, 0, 137, 0, 136,
314 110, 137, 0, 221, 0, 221, 105, 106, 0, 224,
Lev Walkinb36317c2005-08-12 10:09:10 +0000315 0, 44, 139, 109, 0, 44, 19, 109, 0, 44,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000316 109, 0, 140, 0, 139, 110, 140, 0, 221, 0,
317 221, 105, 106, 0, 224, 0, 0, 221, 143, 3,
318 105, 142, 180, 0, 168, 0, 181, 0, 221, 3,
319 164, 0, 221, 3, 154, 0, 221, 105, 145, 106,
320 3, 164, 0, 146, 0, 145, 110, 146, 0, 221,
321 0, 221, 111, 224, 0, 221, 111, 221, 0, 181,
322 111, 224, 0, 148, 0, 147, 110, 148, 0, 164,
323 0, 224, 0, 0, 150, 0, 151, 0, 150, 110,
324 151, 0, 224, 164, 210, 0, 164, 210, 0, 32,
325 70, 164, 0, 163, 0, 153, 0, 152, 110, 153,
326 0, 224, 164, 0, 163, 0, 164, 0, 30, 105,
327 156, 106, 158, 0, 0, 90, 0, 157, 0, 156,
328 110, 157, 0, 15, 210, 0, 16, 164, 155, 210,
329 0, 16, 173, 210, 0, 15, 173, 210, 0, 16,
330 174, 210, 0, 15, 174, 210, 0, 15, 164, 210,
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000331 0, 0, 159, 0, 0, 97, 84, 105, 160, 161,
Lev Walkinef625402005-09-05 05:17:57 +0000332 106, 0, 162, 0, 161, 162, 0, 4, 0, 171,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000333 0, 104, 0, 104, 112, 178, 0, 104, 112, 215,
334 0, 216, 166, 188, 0, 0, 165, 167, 0, 183,
Lev Walkinef625402005-09-05 05:17:57 +0000335 0, 29, 105, 152, 106, 0, 80, 105, 149, 106,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000336 0, 81, 105, 149, 106, 0, 80, 188, 70, 223,
337 216, 166, 0, 81, 188, 70, 223, 216, 166, 0,
338 20, 0, 20, 37, 27, 224, 0, 221, 105, 147,
Lev Walkinef625402005-09-05 05:17:57 +0000339 106, 0, 168, 0, 58, 70, 168, 0, 13, 0,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000340 13, 113, 221, 0, 222, 113, 221, 0, 13, 113,
341 224, 0, 222, 0, 222, 113, 169, 0, 170, 0,
Lev Walkinef625402005-09-05 05:17:57 +0000342 169, 113, 170, 0, 172, 0, 172, 0, 15, 0,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000343 16, 0, 15, 0, 173, 113, 15, 0, 173, 113,
344 16, 0, 14, 0, 221, 113, 14, 0, 224, 143,
345 3, 176, 0, 224, 111, 176, 0, 0, 105, 177,
346 180, 0, 65, 0, 47, 0, 88, 0, 5, 0,
347 7, 0, 179, 0, 215, 0, 178, 0, 224, 0,
348 221, 113, 224, 0, 6, 0, 10, 0, 11, 0,
349 4, 0, 180, 4, 0, 26, 0, 65, 0, 78,
350 0, 182, 0, 69, 83, 0, 67, 53, 0, 79,
351 0, 46, 0, 38, 73, 0, 28, 83, 0, 93,
352 0, 49, 0, 184, 0, 60, 0, 42, 0, 24,
353 83, 0, 181, 0, 182, 212, 0, 25, 0, 50,
354 0, 51, 0, 52, 0, 61, 0, 66, 0, 76,
355 0, 85, 0, 87, 0, 92, 0, 94, 0, 95,
356 0, 96, 0, 68, 0, 101, 0, 102, 0, 99,
357 0, 100, 0, 98, 0, 0, 189, 0, 190, 0,
358 82, 107, 191, 108, 0, 107, 191, 108, 0, 190,
359 107, 191, 108, 0, 192, 0, 192, 110, 104, 0,
360 192, 110, 104, 110, 192, 0, 193, 0, 19, 98,
361 193, 0, 192, 185, 193, 0, 192, 186, 193, 0,
362 193, 187, 193, 0, 196, 107, 191, 108, 0, 107,
363 191, 108, 0, 197, 0, 198, 0, 197, 195, 197,
364 0, 63, 195, 197, 0, 197, 195, 62, 0, 63,
365 195, 62, 0, 204, 0, 199, 0, 0, 33, 27,
366 105, 194, 180, 0, 103, 0, 103, 114, 0, 114,
367 103, 0, 114, 103, 114, 0, 82, 0, 48, 0,
368 47, 0, 88, 0, 215, 0, 179, 0, 224, 0,
369 221, 0, 97, 31, 190, 0, 97, 32, 105, 200,
370 106, 0, 201, 0, 200, 110, 201, 0, 104, 0,
371 224, 188, 202, 0, 0, 203, 0, 75, 0, 17,
372 0, 71, 0, 205, 0, 206, 0, 105, 221, 106,
373 0, 205, 105, 207, 106, 0, 208, 0, 207, 110,
374 208, 0, 115, 209, 0, 115, 113, 209, 0, 224,
375 0, 209, 113, 224, 0, 0, 211, 0, 71, 0,
376 35, 176, 0, 105, 106, 0, 105, 213, 106, 0,
377 214, 0, 213, 110, 214, 0, 224, 0, 224, 107,
378 215, 108, 0, 224, 107, 178, 108, 0, 215, 0,
379 104, 0, 9, 0, 12, 0, 0, 217, 0, 218,
380 220, 0, 116, 219, 9, 117, 0, 0, 91, 0,
381 21, 0, 77, 0, 0, 54, 0, 43, 0, 13,
382 0, 14, 0, 14, 0, 0, 224, 0, 8, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000383};
Lev Walkinf15320b2004-06-03 03:38:44 +0000384
385#endif
386
Lev Walkin1004aa92004-09-08 00:28:11 +0000387#if YYDEBUG != 0
388static const short yyrline[] = { 0,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000389 322, 328, 334, 350, 375, 377, 380, 384, 389, 396,
390 404, 409, 413, 422, 424, 432, 436, 444, 448, 451,
391 454, 458, 478, 480, 488, 492, 524, 528, 537, 544,
392 557, 564, 566, 578, 590, 601, 606, 612, 618, 620,
393 623, 634, 640, 646, 653, 659, 667, 671, 674, 681,
394 687, 693, 700, 706, 715, 717, 726, 734, 748, 758,
395 774, 783, 793, 803, 808, 815, 822, 832, 838, 844,
396 848, 871, 873, 875, 881, 887, 895, 901, 908, 913,
397 919, 925, 931, 934, 940, 950, 952, 955, 963, 970,
398 983, 994, 1004, 1014, 1025, 1036, 1062, 1064, 1069, 1073,
399 1078, 1083, 1089, 1093, 1104, 1113, 1122, 1133, 1155, 1162,
400 1181, 1185, 1191, 1197, 1203, 1213, 1223, 1229, 1243, 1267,
401 1274, 1288, 1297, 1307, 1317, 1327, 1335, 1356, 1365, 1374,
402 1375, 1377, 1384, 1391, 1397, 1401, 1407, 1412, 1425, 1435,
403 1443, 1443, 1448, 1453, 1458, 1463, 1467, 1471, 1474, 1477,
404 1482, 1494, 1511, 1516, 1521, 1554, 1564, 1578, 1580, 1581,
405 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591,
406 1597, 1599, 1600, 1603, 1610, 1622, 1624, 1628, 1632, 1633,
407 1634, 1635, 1636, 1640, 1641, 1642, 1643, 1647, 1648, 1655,
408 1655, 1656, 1656, 1657, 1659, 1661, 1666, 1670, 1679, 1683,
409 1688, 1692, 1698, 1708, 1712, 1715, 1718, 1721, 1726, 1735,
410 1743, 1749, 1755, 1762, 1770, 1778, 1787, 1790, 1793, 1794,
411 1804, 1806, 1807, 1808, 1811, 1815, 1820, 1826, 1831, 1834,
412 1837, 1850, 1864, 1868, 1873, 1877, 1882, 1889, 1902, 1904,
413 1907, 1911, 1914, 1919, 1923, 1931, 1946, 1952, 1959, 1972,
414 1984, 1999, 2003, 2020, 2025, 2028, 2033, 2055, 2060, 2065,
415 2071, 2077, 2085, 2093, 2101, 2108, 2118, 2123, 2153, 2155,
416 2158, 2165, 2171, 2173, 2174, 2175, 2178, 2180, 2181, 2184,
417 2189, 2196, 2203, 2205, 2210
Lev Walkin1004aa92004-09-08 00:28:11 +0000418};
419#endif
420
421
422#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
423
424static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
425"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
Lev Walkind9574ae2005-03-24 16:22:35 +0000426"TOK_tuple","TOK_quadruple","TOK_number_negative","TOK_typereference","TOK_capitalreference",
427"TOK_typefieldreference","TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX",
428"TOK_ALL","TOK_ANY","TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT",
429"TOK_BMPString","TOK_BOOLEAN","TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS",
430"TOK_COMPONENT","TOK_COMPONENTS","TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT",
431"TOK_DEFINITIONS","TOK_DEFINED","TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL",
432"TOK_END","TOK_ENUMERATED","TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY",
433"TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString",
434"TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED",
435"TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INSTRUCTIONS","TOK_INTEGER",
436"TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL","TOK_NumericString",
437"TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET","TOK_OF","TOK_OPTIONAL","TOK_PATTERN",
438"TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString","TOK_PRIVATE",
439"TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE","TOK_STRING",
440"TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE","TOK_TYPE_IDENTIFIER",
441"TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime","TOK_UTF8String",
442"TOK_VideotexString","TOK_VisibleString","TOK_WITH","TOK_EXCEPT","'^'","TOK_INTERSECTION",
443"'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots","'{'","'}'","'('","')'","';'",
444"','","':'","'!'","'.'","'<'","'@'","'['","']'","ParsedGrammar","ModuleList",
445"ModuleSpecification","optObjectIdentifier","ObjectIdentifier","ObjectIdentifierBody",
446"ObjectIdentifierElement","optModuleSpecificationFlags","ModuleSpecificationFlags",
447"ModuleSpecificationFlag","optModuleSpecificationBody","ModuleSpecificationBody",
Lev Walkinb36317c2005-08-12 10:09:10 +0000448"ModuleSpecificationElement","@1","ImportsDefinition","ImportsBundleSet","AssignedIdentifier",
449"ImportsBundle","ImportsList","ImportsElement","ExportsDefinition","ExportsBody",
450"ExportsElement","ValueSetDefinition","@2","DefinedTypeRef","DataTypeReference",
451"ParameterArgumentList","ParameterArgumentName","ActualParameterList","ActualParameter",
452"optComponentTypeLists","ComponentTypeLists","ComponentType","AlternativeTypeLists",
Lev Walkin9c2285a2006-03-09 08:49:26 +0000453"AlternativeType","ObjectClass","optUnique","FieldSpec","ClassField","optWithSyntax",
454"WithSyntax","@3","WithSyntaxFormat","WithSyntaxFormatToken","ExtensionAndException",
455"Type","NSTD_IndirectMarker","TypeDeclaration","TypeDeclarationSet","ComplexTypeReference",
456"ComplexTypeReferenceAmpList","ComplexTypeReferenceElement","ClassFieldIdentifier",
457"ClassFieldName","FieldName","DefinedObjectClass","ValueDefinition","Value",
458"@4","DefinedValue","RestrictedCharacterStringValue","Opaque","BasicTypeId",
459"BasicTypeId_UniverationCompatible","BasicType","BasicString","Union","Intersection",
460"Except","optConstraints","Constraints","SetOfConstraints","ElementSetSpecs",
461"ElementSetSpec","ConstraintSubtypeElement","@5","ConstraintRangeSpec","ConstraintSpec",
462"SingleValue","ContainedSubtype","InnerTypeConstraint","WithComponentsList",
463"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
464"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
465"ComponentIdList","optMarker","Marker","UniverationDefinition","UniverationList",
466"UniverationElement","SignedNumber","optTag","Tag","TagTypeValue","TagClass",
467"TagPlicit","TypeRefName","ObjectClassReference","optIdentifier","Identifier", NULL
Lev Walkin1004aa92004-09-08 00:28:11 +0000468};
469#endif
470
471static const short yyr1[] = { 0,
Lev Walkind9574ae2005-03-24 16:22:35 +0000472 118, 119, 119, 120, 121, 121, 122, 122, 123, 123,
473 124, 124, 124, 125, 125, 126, 126, 127, 127, 127,
474 127, 127, 128, 128, 129, 129, 130, 130, 130, 130,
Lev Walkinb36317c2005-08-12 10:09:10 +0000475 130, 131, 130, 130, 132, 132, 133, 133, 134, 134,
476 135, 136, 136, 137, 137, 137, 138, 138, 138, 139,
477 139, 140, 140, 140, 142, 141, 143, 143, 144, 144,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000478 144, 145, 145, 146, 146, 146, 146, 147, 147, 148,
479 148, 149, 149, 150, 150, 151, 151, 151, 151, 152,
480 152, 153, 153, 153, 154, 155, 155, 156, 156, 157,
481 157, 157, 157, 157, 157, 157, 158, 158, 160, 159,
482 161, 161, 162, 162, 163, 163, 163, 164, 165, 166,
483 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
484 167, 168, 168, 168, 168, 168, 168, 169, 169, 170,
485 171, 172, 172, 173, 173, 173, 174, 174, 175, 176,
486 177, 176, 176, 176, 176, 176, 176, 176, 176, 176,
487 178, 178, 179, 179, 179, 180, 180, 181, 181, 181,
488 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
489 182, 182, 182, 183, 183, 184, 184, 184, 184, 184,
490 184, 184, 184, 184, 184, 184, 184, 184, 184, 185,
491 185, 186, 186, 187, 188, 188, 189, 189, 190, 190,
492 191, 191, 191, 192, 192, 192, 192, 192, 193, 193,
493 193, 193, 193, 193, 193, 193, 193, 193, 194, 193,
494 195, 195, 195, 195, 196, 196, 197, 197, 197, 197,
495 197, 198, 199, 199, 200, 200, 201, 201, 202, 202,
496 203, 203, 203, 204, 204, 205, 206, 207, 207, 208,
497 208, 209, 209, 210, 210, 211, 211, 212, 212, 213,
498 213, 214, 214, 214, 214, 214, 215, 215, 216, 216,
499 217, 218, 219, 219, 219, 219, 220, 220, 220, 221,
500 221, 222, 223, 223, 224
Lev Walkin1004aa92004-09-08 00:28:11 +0000501};
502
503static const short yyr2[] = { 0,
504 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
505 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
506 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
Lev Walkinb36317c2005-08-12 10:09:10 +0000507 1, 0, 3, 1, 3, 2, 1, 2, 0, 1,
508 4, 1, 3, 1, 3, 1, 3, 3, 2, 1,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000509 3, 1, 3, 1, 0, 6, 1, 1, 3, 3,
510 6, 1, 3, 1, 3, 3, 3, 1, 3, 1,
511 1, 0, 1, 1, 3, 3, 2, 3, 1, 1,
512 3, 2, 1, 1, 5, 0, 1, 1, 3, 2,
513 4, 3, 3, 3, 3, 3, 0, 1, 0, 6,
514 1, 2, 1, 1, 1, 3, 3, 3, 0, 2,
515 1, 4, 4, 4, 6, 6, 1, 4, 4, 1,
516 3, 1, 3, 3, 3, 1, 3, 1, 3, 1,
517 1, 1, 1, 1, 3, 3, 1, 3, 4, 3,
518 0, 3, 1, 1, 1, 1, 1, 1, 1, 1,
519 1, 3, 1, 1, 1, 1, 2, 1, 1, 1,
520 1, 2, 2, 1, 1, 2, 2, 1, 1, 1,
521 1, 1, 2, 1, 2, 1, 1, 1, 1, 1,
Lev Walkin1004aa92004-09-08 00:28:11 +0000522 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000523 1, 1, 1, 1, 0, 1, 1, 4, 3, 4,
524 1, 3, 5, 1, 3, 3, 3, 3, 4, 3,
525 1, 1, 3, 3, 3, 3, 1, 1, 0, 5,
526 1, 2, 2, 3, 1, 1, 1, 1, 1, 1,
527 1, 1, 3, 5, 1, 3, 1, 3, 0, 1,
528 1, 1, 1, 1, 1, 3, 4, 1, 3, 2,
529 3, 1, 3, 0, 1, 1, 2, 2, 3, 1,
530 3, 1, 4, 4, 1, 1, 1, 1, 0, 1,
531 2, 4, 0, 1, 1, 1, 0, 1, 1, 1,
532 1, 1, 0, 1, 1
Lev Walkin1004aa92004-09-08 00:28:11 +0000533};
534
535static const short yydefact[] = { 0,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000536 280, 281, 1, 2, 5, 3, 0, 0, 6, 285,
Lev Walkin1004aa92004-09-08 00:28:11 +0000537 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
538 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000539 18, 21, 19, 0, 17, 12, 23, 176, 0, 0,
540 177, 178, 179, 0, 180, 181, 189, 182, 183, 184,
541 185, 186, 187, 188, 0, 24, 25, 27, 28, 31,
Lev Walkinb36317c2005-08-12 10:09:10 +0000542 29, 30, 34, 0, 0, 32, 0, 49, 0, 50,
543 52, 54, 36, 0, 37, 0, 42, 44, 46, 4,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000544 26, 269, 122, 282, 0, 158, 0, 0, 172, 165,
545 169, 171, 159, 0, 0, 160, 164, 168, 0, 0,
546 57, 58, 161, 170, 126, 0, 33, 48, 47, 0,
547 0, 35, 38, 0, 0, 0, 0, 273, 60, 59,
548 109, 270, 277, 0, 173, 167, 166, 163, 162, 0,
549 62, 0, 64, 0, 0, 0, 51, 53, 39, 43,
550 45, 0, 275, 276, 274, 0, 0, 195, 279, 278,
551 271, 123, 125, 0, 0, 0, 0, 55, 132, 133,
552 127, 128, 130, 124, 146, 153, 147, 267, 154, 155,
553 268, 144, 143, 145, 141, 139, 150, 148, 149, 0,
554 151, 40, 41, 269, 269, 0, 88, 0, 122, 282,
555 117, 0, 0, 195, 195, 110, 120, 174, 161, 111,
556 0, 0, 0, 108, 196, 197, 269, 63, 67, 66,
557 65, 0, 0, 0, 0, 0, 137, 134, 0, 256,
558 254, 254, 254, 90, 255, 0, 86, 254, 254, 97,
559 0, 272, 0, 269, 0, 269, 0, 269, 0, 0,
560 175, 269, 0, 0, 0, 227, 226, 0, 225, 228,
561 0, 0, 0, 230, 0, 201, 204, 0, 211, 212,
562 218, 217, 244, 245, 229, 232, 231, 0, 61, 156,
563 56, 129, 142, 152, 140, 257, 96, 0, 93, 95,
564 0, 87, 254, 92, 94, 0, 85, 98, 89, 0,
565 105, 0, 80, 83, 84, 269, 121, 0, 0, 73,
566 74, 79, 254, 269, 283, 0, 283, 266, 258, 0,
567 260, 265, 262, 0, 68, 70, 71, 0, 0, 0,
568 221, 0, 0, 0, 0, 0, 0, 199, 192, 193,
569 190, 191, 0, 0, 0, 194, 0, 0, 0, 0,
570 0, 157, 135, 136, 138, 91, 0, 118, 0, 112,
571 269, 82, 269, 113, 269, 77, 254, 269, 284, 114,
572 269, 259, 0, 0, 119, 269, 198, 205, 219, 222,
573 223, 216, 214, 233, 0, 246, 210, 202, 206, 207,
574 208, 0, 215, 213, 0, 0, 248, 200, 99, 106,
575 107, 151, 81, 78, 75, 76, 109, 109, 261, 0,
576 0, 69, 0, 224, 237, 0, 235, 195, 0, 209,
577 0, 250, 252, 247, 0, 0, 115, 116, 264, 263,
578 220, 234, 0, 239, 203, 251, 0, 249, 103, 0,
579 101, 104, 131, 236, 242, 243, 241, 238, 240, 253,
580 100, 102, 0, 0, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000581};
582
Lev Walkin9c2285a2006-03-09 08:49:26 +0000583static const short yydefgoto[] = { 443,
Lev Walkin1004aa92004-09-08 00:28:11 +0000584 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000585 56, 57, 107, 58, 74, 183, 75, 76, 77, 59,
586 69, 70, 60, 212, 100, 61, 130, 131, 314, 315,
587 299, 300, 301, 292, 293, 119, 283, 186, 187, 287,
588 288, 416, 430, 431, 302, 303, 147, 148, 196, 101,
589 161, 162, 432, 163, 222, 223, 62, 176, 214, 177,
590 254, 271, 102, 103, 200, 104, 334, 335, 337, 204,
591 205, 206, 255, 256, 257, 403, 323, 258, 259, 260,
592 261, 406, 407, 438, 439, 262, 263, 264, 386, 387,
593 412, 224, 225, 241, 310, 311, 265, 121, 122, 123,
594 146, 151, 266, 105, 358, 267
Lev Walkin1004aa92004-09-08 00:28:11 +0000595};
596
Lev Walkin9c2285a2006-03-09 08:49:26 +0000597static const short yypact[] = { 200,
598-32768,-32768, 200,-32768, -83,-32768, 60, 10,-32768,-32768,
599-32768,-32768, 62,-32768, -48, 157,-32768,-32768, 20, 48,
600 23, 44, 98, 89, 212, 157,-32768, 117,-32768,-32768,
601-32768,-32768,-32768, 207,-32768,-32768, 431,-32768, 226, 42,
602-32768,-32768,-32768, 126,-32768,-32768,-32768,-32768,-32768,-32768,
603-32768,-32768,-32768,-32768, 208, 431,-32768,-32768,-32768,-32768,
604-32768,-32768,-32768, 242, 591,-32768, 148,-32768, 94,-32768,
605 146,-32768,-32768, 52,-32768, -24,-32768, 160,-32768,-32768,
606-32768, 5, 156,-32768, 196,-32768, 202, 214,-32768,-32768,
607-32768,-32768,-32768, 244, 216,-32768,-32768,-32768, 666, 298,
608-32768,-32768,-32768,-32768, 193, 309,-32768,-32768,-32768, 233,
609 213,-32768,-32768, 200, 233, 218, 220, 11,-32768,-32768,
610-32768,-32768, -15, 233,-32768,-32768,-32768,-32768,-32768, -25,
611-32768, 219, 221, 228, 248, 423,-32768,-32768, -83,-32768,
612-32768, 243,-32768,-32768,-32768, 317, 516, 53,-32768,-32768,
613-32768,-32768,-32768, 328, 666, 331, 233,-32768,-32768,-32768,
614 227,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
615-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 232,
616 235,-32768,-32768, 49, 12, -19,-32768, 224, 105, 238,
617 312, 246, 282, 82, 88,-32768,-32768,-32768, 250,-32768,
618 253, 254, 361,-32768,-32768, 255, 237,-32768,-32768,-32768,
619-32768, 356, 274, 356, 331, 423, 251,-32768, 423,-32768,
620 19, -18, 19,-32768,-32768, 263, 273, -18, 19, 269,
621 243,-32768, 350, 15, 268, 8, 311, 8, 313, 39,
622-32768, 7, 361, 281, 355,-32768,-32768, 87,-32768,-32768,
623 264, 200, 361,-32768, 276, 97, 288, 290, 87,-32768,
624-32768,-32768, 291,-32768,-32768,-32768,-32768, 361,-32768,-32768,
625 391,-32768, 391,-32768,-32768,-32768,-32768, 289,-32768,-32768,
626 384,-32768, 19,-32768,-32768, 315,-32768,-32768,-32768, 331,
627 293, 36,-32768,-32768,-32768, 237,-32768, 330, 295, 292,
628-32768,-32768, 19, 237, 331, 297, 331,-32768,-32768, 63,
629-32768,-32768, 299, 122,-32768,-32768,-32768, 302, 379, 306,
630 300, 304, 172, 308, 314, 307, 310,-32768,-32768,-32768,
631-32768,-32768, 318, 379, 379,-32768, 379, 361, 266, 323,
632 332,-32768,-32768,-32768,-32768,-32768, 316,-32768, 230,-32768,
633 15,-32768, 237,-32768, 2,-32768, 19, 237,-32768,-32768,
634 237,-32768, 68, 230,-32768, 7,-32768,-32768,-32768,-32768,
635 303,-32768,-32768, 255, 6,-32768,-32768, 336,-32768,-32768,
636-32768, 333,-32768,-32768, 13, 142,-32768,-32768,-32768,-32768,
637-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 339,
638 340,-32768, 356,-32768,-32768, 144,-32768, 53, 361,-32768,
639 331, 337,-32768,-32768, 323, 190,-32768,-32768,-32768,-32768,
640 391,-32768, 6, 3, 215, 337, 331,-32768,-32768, 27,
Lev Walkin1e448d32005-03-24 14:26:38 +0000641-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000642-32768,-32768, 425, 451,-32768
Lev Walkin1004aa92004-09-08 00:28:11 +0000643};
644
645static const short yypgoto[] = {-32768,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000646-32768, 420,-32768, 320,-32768, 439,-32768,-32768, 427,-32768,
647-32768, 398,-32768,-32768,-32768,-32768, 381,-32768, 342,-32768,
648-32768, 352,-32768,-32768, 395,-32768,-32768, 319,-32768, 99,
649 225,-32768, 109,-32768, 118,-32768,-32768,-32768, 241,-32768,
650-32768,-32768,-32768, 43, -229, -80,-32768, -75,-32768, -103,
651-32768, 265,-32768, -253, 294, 305,-32768, -28,-32768, -270,
652 -78, -211, -3, 338,-32768, 120,-32768,-32768,-32768, -187,
653-32768, 153, -171, 71, -236,-32768, 234,-32768, -287,-32768,
654-32768,-32768, 66,-32768,-32768,-32768,-32768,-32768,-32768, 76,
655 83, -210,-32768,-32768,-32768, 132, -127, -135,-32768,-32768,
656-32768,-32768, 1,-32768, 189, -7
Lev Walkin1004aa92004-09-08 00:28:11 +0000657};
658
659
Lev Walkin9c2285a2006-03-09 08:49:26 +0000660#define YYLAST 762
Lev Walkin1004aa92004-09-08 00:28:11 +0000661
662
663static const short yytable[] = { 15,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000664 5, 120, 273, 5, 294, 15, 237, 239, 179, 10,
665 277, 279, 280, 10, 10, 10, 219, 284, 285, 435,
666 10, 7, 10, 114, 1, 217, 218, 149, 28, 65,
667 429, 143, 72, 298, 117, 373, 79, 64, 150, 298,
668 71, 159, 160, 197, 78, 16, 10, 168, 65, 10,
669 171, 384, 220, 219, 1, 2, 64, 178, 19, 10,
670 67, 1, 217, 218, 1, 2, 79, 10, 11, 10,
671 11, 318, 346, 436, 78, 10, 168, 437, 390, 171,
672 154, 327, 368, 219, 155, 115, 230, 144, 179, 220,
673 231, 179, 356, 400, 278, 132, 341, 379, 380, 133,
674 381, 145, 72, 221, 227, 291, 29, 79, 30, 405,
675 71, 291, 312, -72, 139, 78, 153, 118, 291, 220,
676 118, 294, 118, 118, 152, 411, 269, 118, 181, 31,
677 118, 297, 441, 10, 202, 164, 180, 178, 1, 2,
678 178, 350, 308, 198, 309, 351, 396, 201, 209, 211,
679 68, 132, 32, 295, -254, 133, 63, 210, -254, 203,
680 112, 316, 433, 202, 118, 12, 382, 17, 362, 202,
681 20, 308, 363, 73, 33, 63, 433, 166, 21, 10,
682 168, 169, 170, 171, 226, 226, 236, 275, 203, 321,
683 276, 421, 238, 429, 203, 329, 330, 331, 332, 22,
684 322, 23, 109, 110, 159, 160, 333, 274, 181, -280,
685 24, 181, 1, 2, 34, 352, 180, 124, 246, 180,
686 424, 391, 397, 357, 36, 398, 296, 365, 304, 37,
687 304, 366, 313, 372, 317, 312, 401, 10, 168, 66,
688 10, 171, 1, 2, 82, 1, 2, 414, 80, 422,
689 111, 415, 326, 423, 83, 84, 108, 184, 185, 250,
690 1, 2, 159, 160, 116, 85, 38, 86, 124, 87,
691 295, 166, 394, 10, 168, 169, 170, 171, 125, 88,
692 83, 84, 348, 89, 126, 316, 127, 90, 159, 160,
693 91, 41, 42, 43, 324, 325, 128, 359, 129, 359,
694 134, 92, 45, 343, 344, 135, 93, 46, 94, 47,
695 95, 136, 246, 329, 330, 331, 332, 48, 138, 96,
696 97, 417, 418, 141, 142, 188, 49, 383, 50, 156,
697 207, 157, 158, 51, 98, 52, 53, 54, 10, 213,
698 232, 392, -281, 296, 215, 216, 99, 304, 233, 180,
699 234, 235, 118, 250, 240, 313, 392, 242, 317, 270,
700 243, 268, 282, -281, 180, 286, 166, 408, 10, 168,
701 169, 170, 171, 1, 2, 281, 290, 413, 319, 244,
702 305, 320, 307, 328, 166, 336, 10, 168, 169, 170,
703 171, 1, 2, 245, 342, 340, 338, 345, 347, 353,
704 354, 355, 360, 413, 349, 364, 371, 246, 247, 367,
705 369, 245, 376, 370, 203, 408, 404, 377, 375, 440,
706 389, 378, 6, 248, 444, 246, 247, 165, 166, 167,
707 10, 168, 169, 170, 171, 1, 2, 385, 10, 388,
708 410, 248, 249, 1, 2, 409, 419, 420, 250, 427,
709 445, 18, 35, 81, 113, 38, 140, 251, 182, 106,
710 249, 137, 306, 395, 402, 252, 250, 253, 393, 172,
711 39, 289, 442, 208, 40, 251, 374, 272, 228, 425,
712 41, 42, 43, 252, 199, 253, 44, 173, 434, 229,
713 428, 45, 339, 426, 399, 361, 46, 0, 47, 0,
714 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
715 174, 0, 0, 0, 0, 49, 0, 50, 0, 0,
716 0, 0, 51, 0, 52, 53, 54, 175, 189, 190,
717 0, 0, 0, 0, 0, 191, 0, 0, 0, 85,
718 38, 86, 0, 87, 192, 0, 0, 0, 0, 0,
Lev Walkinef625402005-09-05 05:17:57 +0000719 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
720 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000721 0, 0, 0, 193, 0, 92, 45, 0, 0, 0,
Lev Walkinef625402005-09-05 05:17:57 +0000722 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000723 0, 48, 0, 96, 97, 194, 195, 0, 0, 0,
Lev Walkinef625402005-09-05 05:17:57 +0000724 49, 0, 50, 83, 84, 0, 0, 51, 98, 52,
725 53, 54, 0, 0, 85, 38, 86, 0, 87, 0,
726 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
727 0, 0, 89, 0, 0, 0, 90, 0, 0, 91,
728 41, 42, 43, 0, 0, 0, 0, 0, 0, 0,
729 92, 45, 0, 0, 0, 93, 46, 94, 47, 95,
730 0, 0, 0, 0, 0, 0, 48, 0, 96, 97,
731 0, 0, 0, 0, 0, 49, 0, 50, 1, 2,
732 0, 0, 51, 98, 52, 53, 54, 0, 0, 85,
733 38, 86, 0, 87, 0, 0, 0, 0, 0, 0,
734 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
735 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
736 0, 0, 0, 0, 0, 92, 45, 0, 0, 0,
737 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
738 0, 48, 0, 96, 97, 0, 0, 0, 0, 0,
739 49, 0, 50, 0, 0, 0, 0, 51, 98, 52,
740 53, 54
Lev Walkin1004aa92004-09-08 00:28:11 +0000741};
742
743static const short yycheck[] = { 7,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000744 0, 82, 214, 3, 234, 13, 194, 195, 136, 8,
745 221, 222, 223, 8, 8, 8, 35, 228, 229, 17,
746 8, 105, 8, 48, 13, 14, 15, 43, 9, 37,
747 4, 21, 40, 32, 30, 323, 44, 37, 54, 32,
748 40, 15, 16, 147, 44, 36, 8, 9, 56, 8,
749 12, 339, 71, 35, 13, 14, 56, 136, 107, 8,
750 19, 13, 14, 15, 13, 14, 74, 8, 9, 8,
751 9, 243, 283, 71, 74, 8, 9, 75, 349, 12,
752 106, 253, 319, 35, 110, 110, 106, 77, 216, 71,
753 110, 219, 303, 364, 113, 99, 268, 334, 335, 99,
754 337, 91, 110, 184, 185, 104, 59, 115, 86, 104,
755 110, 104, 240, 106, 114, 115, 124, 116, 104, 71,
756 116, 351, 116, 116, 124, 113, 207, 116, 136, 86,
757 116, 235, 106, 8, 82, 135, 136, 216, 13, 14,
758 219, 106, 104, 147, 106, 110, 357, 147, 156, 157,
759 109, 155, 55, 234, 106, 155, 37, 157, 110, 107,
760 109, 242, 416, 82, 116, 106, 338, 106, 106, 82,
761 14, 104, 110, 48, 86, 56, 430, 6, 22, 8,
762 9, 10, 11, 12, 184, 185, 105, 216, 107, 103,
763 219, 403, 105, 4, 107, 99, 100, 101, 102, 43,
764 114, 45, 109, 110, 15, 16, 110, 215, 216, 105,
765 54, 219, 13, 14, 3, 296, 216, 113, 47, 219,
766 408, 349, 358, 304, 108, 361, 234, 106, 236, 23,
767 238, 110, 240, 62, 242, 363, 364, 8, 9, 14,
768 8, 12, 13, 14, 3, 13, 14, 106, 41, 106,
769 105, 110, 252, 110, 13, 14, 109, 15, 16, 88,
770 13, 14, 15, 16, 105, 24, 25, 26, 113, 28,
771 351, 6, 353, 8, 9, 10, 11, 12, 83, 38,
772 13, 14, 290, 42, 83, 366, 73, 46, 15, 16,
773 49, 50, 51, 52, 31, 32, 53, 305, 83, 307,
774 3, 60, 61, 15, 16, 113, 65, 66, 67, 68,
775 69, 3, 47, 99, 100, 101, 102, 76, 106, 78,
776 79, 397, 398, 106, 105, 9, 85, 62, 87, 111,
777 3, 111, 105, 92, 93, 94, 95, 96, 8, 113,
778 117, 349, 105, 351, 113, 111, 105, 355, 37, 349,
779 105, 70, 116, 88, 105, 363, 364, 105, 366, 4,
780 107, 107, 90, 113, 364, 97, 6, 375, 8, 9,
781 10, 11, 12, 13, 14, 113, 27, 385, 98, 19,
782 70, 27, 70, 108, 6, 98, 8, 9, 10, 11,
783 12, 13, 14, 33, 4, 105, 107, 14, 84, 70,
784 106, 110, 106, 411, 112, 107, 103, 47, 48, 108,
785 105, 33, 106, 114, 107, 423, 114, 108, 105, 427,
786 105, 104, 3, 63, 0, 47, 48, 5, 6, 7,
787 8, 9, 10, 11, 12, 13, 14, 115, 8, 108,
788 108, 63, 82, 13, 14, 110, 108, 108, 88, 113,
789 0, 13, 26, 56, 74, 25, 115, 97, 139, 65,
790 82, 110, 238, 355, 366, 105, 88, 107, 351, 47,
791 40, 231, 430, 155, 44, 97, 324, 213, 185, 409,
792 50, 51, 52, 105, 147, 107, 56, 65, 423, 185,
793 415, 61, 259, 411, 363, 307, 66, -1, 68, -1,
794 -1, -1, -1, -1, -1, -1, 76, -1, -1, -1,
795 88, -1, -1, -1, -1, 85, -1, 87, -1, -1,
796 -1, -1, 92, -1, 94, 95, 96, 105, 13, 14,
797 -1, -1, -1, -1, -1, 20, -1, -1, -1, 24,
Lev Walkinef625402005-09-05 05:17:57 +0000798 25, 26, -1, 28, 29, -1, -1, -1, -1, -1,
799 -1, -1, -1, 38, -1, -1, -1, 42, -1, -1,
800 -1, 46, -1, -1, 49, 50, 51, 52, -1, -1,
801 -1, -1, -1, 58, -1, 60, 61, -1, -1, -1,
802 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
803 -1, 76, -1, 78, 79, 80, 81, -1, -1, -1,
804 85, -1, 87, 13, 14, -1, -1, 92, 93, 94,
805 95, 96, -1, -1, 24, 25, 26, -1, 28, -1,
806 -1, -1, -1, -1, -1, -1, -1, -1, 38, -1,
807 -1, -1, 42, -1, -1, -1, 46, -1, -1, 49,
808 50, 51, 52, -1, -1, -1, -1, -1, -1, -1,
809 60, 61, -1, -1, -1, 65, 66, 67, 68, 69,
810 -1, -1, -1, -1, -1, -1, 76, -1, 78, 79,
811 -1, -1, -1, -1, -1, 85, -1, 87, 13, 14,
812 -1, -1, 92, 93, 94, 95, 96, -1, -1, 24,
813 25, 26, -1, 28, -1, -1, -1, -1, -1, -1,
814 -1, -1, -1, 38, -1, -1, -1, 42, -1, -1,
815 -1, 46, -1, -1, 49, 50, 51, 52, -1, -1,
816 -1, -1, -1, -1, -1, 60, 61, -1, -1, -1,
817 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
818 -1, 76, -1, 78, 79, -1, -1, -1, -1, -1,
819 85, -1, 87, -1, -1, -1, -1, 92, 93, 94,
820 95, 96
Lev Walkin1004aa92004-09-08 00:28:11 +0000821};
822/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
823#line 3 "/usr/share/bison.simple"
824/* This file comes from bison-1.28. */
825
826/* Skeleton output parser for bison,
827 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
828
829 This program is free software; you can redistribute it and/or modify
830 it under the terms of the GNU General Public License as published by
831 the Free Software Foundation; either version 2, or (at your option)
832 any later version.
833
834 This program is distributed in the hope that it will be useful,
835 but WITHOUT ANY WARRANTY; without even the implied warranty of
836 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
837 GNU General Public License for more details.
838
839 You should have received a copy of the GNU General Public License
840 along with this program; if not, write to the Free Software
841 Foundation, Inc., 59 Temple Place - Suite 330,
842 Boston, MA 02111-1307, USA. */
843
844/* As a special exception, when this file is copied by Bison into a
845 Bison output file, you may use that output file without restriction.
846 This special exception was added by the Free Software Foundation
847 in version 1.24 of Bison. */
848
849/* This is the parser code that is written into each bison parser
850 when the %semantic_parser declaration is not specified in the grammar.
851 It was written by Richard Stallman by simplifying the hairy parser
852 used when %semantic_parser is specified. */
853
854#ifndef YYSTACK_USE_ALLOCA
855#ifdef alloca
856#define YYSTACK_USE_ALLOCA
857#else /* alloca not defined */
858#ifdef __GNUC__
859#define YYSTACK_USE_ALLOCA
860#define alloca __builtin_alloca
861#else /* not GNU C. */
862#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
863#define YYSTACK_USE_ALLOCA
864#include <alloca.h>
865#else /* not sparc */
866/* We think this test detects Watcom and Microsoft C. */
867/* This used to test MSDOS, but that is a bad idea
868 since that symbol is in the user namespace. */
869#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
870#if 0 /* No need for malloc.h, which pollutes the namespace;
871 instead, just don't use alloca. */
872#include <malloc.h>
873#endif
874#else /* not MSDOS, or __TURBOC__ */
875#if defined(_AIX)
876/* I don't know what this was needed for, but it pollutes the namespace.
877 So I turned it off. rms, 2 May 1997. */
878/* #include <malloc.h> */
879 #pragma alloca
880#define YYSTACK_USE_ALLOCA
881#else /* not MSDOS, or __TURBOC__, or _AIX */
882#if 0
883#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
884 and on HPUX 10. Eventually we can turn this on. */
885#define YYSTACK_USE_ALLOCA
886#define alloca __builtin_alloca
887#endif /* __hpux */
888#endif
889#endif /* not _AIX */
890#endif /* not MSDOS, or __TURBOC__ */
891#endif /* not sparc */
892#endif /* not GNU C */
893#endif /* alloca not defined */
894#endif /* YYSTACK_USE_ALLOCA not defined */
895
896#ifdef YYSTACK_USE_ALLOCA
897#define YYSTACK_ALLOC alloca
Lev Walkinf15320b2004-06-03 03:38:44 +0000898#else
Lev Walkin1004aa92004-09-08 00:28:11 +0000899#define YYSTACK_ALLOC malloc
Lev Walkinf15320b2004-06-03 03:38:44 +0000900#endif
901
Lev Walkin1004aa92004-09-08 00:28:11 +0000902/* Note: there must be only one dollar sign in this file.
903 It is replaced by the list of actions, each action
904 as one case of the switch. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000905
906#define yyerrok (yyerrstatus = 0)
907#define yyclearin (yychar = YYEMPTY)
908#define YYEMPTY -2
909#define YYEOF 0
910#define YYACCEPT goto yyacceptlab
Lev Walkin1004aa92004-09-08 00:28:11 +0000911#define YYABORT goto yyabortlab
Lev Walkinf15320b2004-06-03 03:38:44 +0000912#define YYERROR goto yyerrlab1
Lev Walkin1004aa92004-09-08 00:28:11 +0000913/* Like YYERROR except do call yyerror.
914 This remains here temporarily to ease the
915 transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +0000916 Once GCC version 2 has supplanted version 1, this can go. */
917#define YYFAIL goto yyerrlab
918#define YYRECOVERING() (!!yyerrstatus)
Lev Walkin1004aa92004-09-08 00:28:11 +0000919#define YYBACKUP(token, value) \
Lev Walkinf15320b2004-06-03 03:38:44 +0000920do \
921 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin1004aa92004-09-08 00:28:11 +0000922 { yychar = (token), yylval = (value); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000923 yychar1 = YYTRANSLATE (yychar); \
924 YYPOPSTACK; \
925 goto yybackup; \
926 } \
927 else \
Lev Walkin1004aa92004-09-08 00:28:11 +0000928 { yyerror ("syntax error: cannot back up"); YYERROR; } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000929while (0)
930
931#define YYTERROR 1
932#define YYERRCODE 256
933
Lev Walkin1004aa92004-09-08 00:28:11 +0000934#ifndef YYPURE
935#define YYLEX yylex()
Lev Walkinf15320b2004-06-03 03:38:44 +0000936#endif
937
Lev Walkin1004aa92004-09-08 00:28:11 +0000938#ifdef YYPURE
939#ifdef YYLSP_NEEDED
940#ifdef YYLEX_PARAM
941#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
942#else
943#define YYLEX yylex(&yylval, &yylloc)
944#endif
945#else /* not YYLSP_NEEDED */
946#ifdef YYLEX_PARAM
947#define YYLEX yylex(&yylval, YYLEX_PARAM)
948#else
949#define YYLEX yylex(&yylval)
950#endif
951#endif /* not YYLSP_NEEDED */
952#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000953
Lev Walkin1004aa92004-09-08 00:28:11 +0000954/* If nonreentrant, generate the variables here */
Lev Walkinf15320b2004-06-03 03:38:44 +0000955
Lev Walkin1004aa92004-09-08 00:28:11 +0000956#ifndef YYPURE
Lev Walkinf15320b2004-06-03 03:38:44 +0000957
Lev Walkin1004aa92004-09-08 00:28:11 +0000958int yychar; /* the lookahead symbol */
959YYSTYPE yylval; /* the semantic value of the */
960 /* lookahead symbol */
Lev Walkinf15320b2004-06-03 03:38:44 +0000961
Lev Walkin1004aa92004-09-08 00:28:11 +0000962#ifdef YYLSP_NEEDED
963YYLTYPE yylloc; /* location data for the lookahead */
964 /* symbol */
965#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000966
Lev Walkin1004aa92004-09-08 00:28:11 +0000967int yynerrs; /* number of parse errors so far */
968#endif /* not YYPURE */
969
970#if YYDEBUG != 0
971int yydebug; /* nonzero means print parse trace */
972/* Since this is uninitialized, it does not stop multiple parsers
973 from coexisting. */
974#endif
975
976/* YYINITDEPTH indicates the initial size of the parser's stacks */
977
Lev Walkinf15320b2004-06-03 03:38:44 +0000978#ifndef YYINITDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000979#define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +0000980#endif
981
Lev Walkin1004aa92004-09-08 00:28:11 +0000982/* YYMAXDEPTH is the maximum size the stacks can grow to
983 (effective only if the built-in stack extension method is used). */
Lev Walkinf15320b2004-06-03 03:38:44 +0000984
985#if YYMAXDEPTH == 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000986#undef YYMAXDEPTH
Lev Walkinf15320b2004-06-03 03:38:44 +0000987#endif
988
989#ifndef YYMAXDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000990#define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +0000991#endif
992
Lev Walkin1004aa92004-09-08 00:28:11 +0000993/* Define __yy_memcpy. Note that the size argument
994 should be passed with type unsigned int, because that is what the non-GCC
995 definitions require. With GCC, __builtin_memcpy takes an arg
996 of type size_t, but it can handle unsigned int. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000997
Lev Walkin1004aa92004-09-08 00:28:11 +0000998#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
999#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
1000#else /* not GNU C or C++ */
1001#ifndef __cplusplus
Lev Walkinf15320b2004-06-03 03:38:44 +00001002
Lev Walkin1004aa92004-09-08 00:28:11 +00001003/* This is the most reliable way to avoid incompatibilities
1004 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +00001005static void
Lev Walkin1004aa92004-09-08 00:28:11 +00001006__yy_memcpy (to, from, count)
1007 char *to;
1008 char *from;
1009 unsigned int count;
Lev Walkin459ab022004-09-07 10:39:09 +00001010{
Lev Walkin1004aa92004-09-08 00:28:11 +00001011 register char *f = from;
1012 register char *t = to;
1013 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001014
Lev Walkin1004aa92004-09-08 00:28:11 +00001015 while (i-- > 0)
1016 *t++ = *f++;
Lev Walkin459ab022004-09-07 10:39:09 +00001017}
Lev Walkin459ab022004-09-07 10:39:09 +00001018
Lev Walkin1004aa92004-09-08 00:28:11 +00001019#else /* __cplusplus */
Lev Walkin459ab022004-09-07 10:39:09 +00001020
Lev Walkin1004aa92004-09-08 00:28:11 +00001021/* This is the most reliable way to avoid incompatibilities
1022 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +00001023static void
Lev Walkin1004aa92004-09-08 00:28:11 +00001024__yy_memcpy (char *to, char *from, unsigned int count)
Lev Walkin459ab022004-09-07 10:39:09 +00001025{
Lev Walkin1004aa92004-09-08 00:28:11 +00001026 register char *t = to;
1027 register char *f = from;
1028 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001029
Lev Walkin1004aa92004-09-08 00:28:11 +00001030 while (i-- > 0)
1031 *t++ = *f++;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001032}
Lev Walkin609ccbb2004-09-04 04:49:21 +00001033
Lev Walkin1004aa92004-09-08 00:28:11 +00001034#endif
1035#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001036
Lev Walkin1004aa92004-09-08 00:28:11 +00001037#line 217 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00001038
1039/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1040 into yyparse. The argument should have type void *.
1041 It should actually point to an object.
1042 Grammar actions can access the variable by casting it
1043 to the proper pointer type. */
1044
1045#ifdef YYPARSE_PARAM
Lev Walkin1004aa92004-09-08 00:28:11 +00001046#ifdef __cplusplus
1047#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1048#define YYPARSE_PARAM_DECL
1049#else /* not __cplusplus */
1050#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1051#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1052#endif /* not __cplusplus */
1053#else /* not YYPARSE_PARAM */
1054#define YYPARSE_PARAM_ARG
1055#define YYPARSE_PARAM_DECL
1056#endif /* not YYPARSE_PARAM */
Lev Walkinf15320b2004-06-03 03:38:44 +00001057
1058/* Prevent warning if -Wstrict-prototypes. */
1059#ifdef __GNUC__
Lev Walkin1004aa92004-09-08 00:28:11 +00001060#ifdef YYPARSE_PARAM
Lev Walkinf15320b2004-06-03 03:38:44 +00001061int yyparse (void *);
Lev Walkin1004aa92004-09-08 00:28:11 +00001062#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001063int yyparse (void);
Lev Walkin1004aa92004-09-08 00:28:11 +00001064#endif
Lev Walkinceb20e72004-09-05 10:40:41 +00001065#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001066
Lev Walkinf15320b2004-06-03 03:38:44 +00001067int
Lev Walkin1004aa92004-09-08 00:28:11 +00001068yyparse(YYPARSE_PARAM_ARG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001069 YYPARSE_PARAM_DECL
1070{
1071 register int yystate;
1072 register int yyn;
1073 register short *yyssp;
1074 register YYSTYPE *yyvsp;
Lev Walkin1004aa92004-09-08 00:28:11 +00001075 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1076 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
Lev Walkinf15320b2004-06-03 03:38:44 +00001077
Lev Walkin1004aa92004-09-08 00:28:11 +00001078 short yyssa[YYINITDEPTH]; /* the state stack */
1079 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
Lev Walkinf15320b2004-06-03 03:38:44 +00001080
Lev Walkin1004aa92004-09-08 00:28:11 +00001081 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1082 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
Lev Walkinf15320b2004-06-03 03:38:44 +00001083
Lev Walkin1004aa92004-09-08 00:28:11 +00001084#ifdef YYLSP_NEEDED
1085 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1086 YYLTYPE *yyls = yylsa;
1087 YYLTYPE *yylsp;
1088
1089#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1090#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001091#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkin1004aa92004-09-08 00:28:11 +00001092#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001093
Lev Walkin1004aa92004-09-08 00:28:11 +00001094 int yystacksize = YYINITDEPTH;
1095 int yyfree_stacks = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001096
Lev Walkin1004aa92004-09-08 00:28:11 +00001097#ifdef YYPURE
1098 int yychar;
1099 YYSTYPE yylval;
1100 int yynerrs;
1101#ifdef YYLSP_NEEDED
1102 YYLTYPE yylloc;
1103#endif
1104#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001105
Lev Walkin1004aa92004-09-08 00:28:11 +00001106 YYSTYPE yyval; /* the variable used to return */
1107 /* semantic values from the action */
1108 /* routines */
Lev Walkinf15320b2004-06-03 03:38:44 +00001109
1110 int yylen;
1111
Lev Walkin1004aa92004-09-08 00:28:11 +00001112#if YYDEBUG != 0
1113 if (yydebug)
1114 fprintf(stderr, "Starting parse\n");
1115#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001116
1117 yystate = 0;
1118 yyerrstatus = 0;
1119 yynerrs = 0;
1120 yychar = YYEMPTY; /* Cause a token to be read. */
1121
1122 /* Initialize stack pointers.
1123 Waste one element of value and location stack
1124 so that they stay on the same level as the state stack.
1125 The wasted elements are never initialized. */
1126
Lev Walkin1004aa92004-09-08 00:28:11 +00001127 yyssp = yyss - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001128 yyvsp = yyvs;
Lev Walkin1004aa92004-09-08 00:28:11 +00001129#ifdef YYLSP_NEEDED
1130 yylsp = yyls;
1131#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001132
Lev Walkin1004aa92004-09-08 00:28:11 +00001133/* Push a new state, which is found in yystate . */
1134/* In all cases, when you get here, the value and location stacks
1135 have just been pushed. so pushing a state here evens the stacks. */
1136yynewstate:
Lev Walkinf15320b2004-06-03 03:38:44 +00001137
Lev Walkin1004aa92004-09-08 00:28:11 +00001138 *++yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001139
1140 if (yyssp >= yyss + yystacksize - 1)
1141 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001142 /* Give user a chance to reallocate the stack */
1143 /* Use copies of these so that the &'s don't force the real ones into memory. */
1144 YYSTYPE *yyvs1 = yyvs;
1145 short *yyss1 = yyss;
1146#ifdef YYLSP_NEEDED
1147 YYLTYPE *yyls1 = yyls;
1148#endif
1149
Lev Walkinf15320b2004-06-03 03:38:44 +00001150 /* Get the current used size of the three stacks, in elements. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001151 int size = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001152
1153#ifdef yyoverflow
Lev Walkin1004aa92004-09-08 00:28:11 +00001154 /* Each stack pointer address is followed by the size of
1155 the data in use in that stack, in bytes. */
1156#ifdef YYLSP_NEEDED
1157 /* This used to be a conditional around just the two extra args,
1158 but that might be undefined if yyoverflow is a macro. */
1159 yyoverflow("parser stack overflow",
1160 &yyss1, size * sizeof (*yyssp),
1161 &yyvs1, size * sizeof (*yyvsp),
1162 &yyls1, size * sizeof (*yylsp),
1163 &yystacksize);
1164#else
1165 yyoverflow("parser stack overflow",
1166 &yyss1, size * sizeof (*yyssp),
1167 &yyvs1, size * sizeof (*yyvsp),
1168 &yystacksize);
1169#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001170
Lev Walkin1004aa92004-09-08 00:28:11 +00001171 yyss = yyss1; yyvs = yyvs1;
1172#ifdef YYLSP_NEEDED
1173 yyls = yyls1;
1174#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001175#else /* no yyoverflow */
1176 /* Extend the stack our own way. */
1177 if (yystacksize >= YYMAXDEPTH)
Lev Walkin1004aa92004-09-08 00:28:11 +00001178 {
1179 yyerror("parser stack overflow");
1180 if (yyfree_stacks)
1181 {
1182 free (yyss);
1183 free (yyvs);
1184#ifdef YYLSP_NEEDED
1185 free (yyls);
1186#endif
1187 }
1188 return 2;
1189 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001190 yystacksize *= 2;
1191 if (yystacksize > YYMAXDEPTH)
1192 yystacksize = YYMAXDEPTH;
Lev Walkin1004aa92004-09-08 00:28:11 +00001193#ifndef YYSTACK_USE_ALLOCA
1194 yyfree_stacks = 1;
1195#endif
1196 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1197 __yy_memcpy ((char *)yyss, (char *)yyss1,
1198 size * (unsigned int) sizeof (*yyssp));
1199 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1200 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1201 size * (unsigned int) sizeof (*yyvsp));
1202#ifdef YYLSP_NEEDED
1203 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1204 __yy_memcpy ((char *)yyls, (char *)yyls1,
1205 size * (unsigned int) sizeof (*yylsp));
1206#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001207#endif /* no yyoverflow */
1208
Lev Walkin1004aa92004-09-08 00:28:11 +00001209 yyssp = yyss + size - 1;
1210 yyvsp = yyvs + size - 1;
1211#ifdef YYLSP_NEEDED
1212 yylsp = yyls + size - 1;
1213#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001214
Lev Walkin1004aa92004-09-08 00:28:11 +00001215#if YYDEBUG != 0
1216 if (yydebug)
1217 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1218#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001219
1220 if (yyssp >= yyss + yystacksize - 1)
1221 YYABORT;
1222 }
1223
Lev Walkin1004aa92004-09-08 00:28:11 +00001224#if YYDEBUG != 0
1225 if (yydebug)
1226 fprintf(stderr, "Entering state %d\n", yystate);
1227#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001228
1229 goto yybackup;
Lev Walkin1004aa92004-09-08 00:28:11 +00001230 yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001231
1232/* Do appropriate processing given the current state. */
1233/* Read a lookahead token if we need one and don't already have one. */
1234/* yyresume: */
1235
1236 /* First try to decide what to do without reference to lookahead token. */
1237
1238 yyn = yypact[yystate];
Lev Walkin1004aa92004-09-08 00:28:11 +00001239 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001240 goto yydefault;
1241
1242 /* Not known => get a lookahead token if don't already have one. */
1243
1244 /* yychar is either YYEMPTY or YYEOF
1245 or a valid token in external form. */
1246
1247 if (yychar == YYEMPTY)
1248 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001249#if YYDEBUG != 0
1250 if (yydebug)
1251 fprintf(stderr, "Reading a token: ");
1252#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001253 yychar = YYLEX;
1254 }
1255
Lev Walkin1004aa92004-09-08 00:28:11 +00001256 /* Convert token to internal form (in yychar1) for indexing tables with */
Lev Walkinf15320b2004-06-03 03:38:44 +00001257
Lev Walkin1004aa92004-09-08 00:28:11 +00001258 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001259 {
1260 yychar1 = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001261 yychar = YYEOF; /* Don't call YYLEX any more */
Lev Walkinf15320b2004-06-03 03:38:44 +00001262
Lev Walkin1004aa92004-09-08 00:28:11 +00001263#if YYDEBUG != 0
1264 if (yydebug)
1265 fprintf(stderr, "Now at end of input.\n");
1266#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001267 }
1268 else
1269 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001270 yychar1 = YYTRANSLATE(yychar);
Lev Walkinf15320b2004-06-03 03:38:44 +00001271
Lev Walkin1004aa92004-09-08 00:28:11 +00001272#if YYDEBUG != 0
1273 if (yydebug)
1274 {
1275 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1276 /* Give the individual parser a way to print the precise meaning
1277 of a token, for further debugging info. */
1278#ifdef YYPRINT
1279 YYPRINT (stderr, yychar, yylval);
1280#endif
1281 fprintf (stderr, ")\n");
1282 }
1283#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001284 }
1285
1286 yyn += yychar1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001287 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001288 goto yydefault;
Lev Walkin1004aa92004-09-08 00:28:11 +00001289
Lev Walkinf15320b2004-06-03 03:38:44 +00001290 yyn = yytable[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001291
1292 /* yyn is what to do for this token type in this state.
1293 Negative => reduce, -yyn is rule number.
1294 Positive => shift, yyn is new state.
1295 New state is final state => don't bother to shift,
1296 just return success.
1297 0, or most negative number => error. */
1298
1299 if (yyn < 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001300 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001301 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001302 goto yyerrlab;
1303 yyn = -yyn;
1304 goto yyreduce;
1305 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001306 else if (yyn == 0)
1307 goto yyerrlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001308
1309 if (yyn == YYFINAL)
1310 YYACCEPT;
1311
1312 /* Shift the lookahead token. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001313
1314#if YYDEBUG != 0
1315 if (yydebug)
1316 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1317#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001318
1319 /* Discard the token being shifted unless it is eof. */
1320 if (yychar != YYEOF)
1321 yychar = YYEMPTY;
1322
1323 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00001324#ifdef YYLSP_NEEDED
1325 *++yylsp = yylloc;
1326#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001327
Lev Walkin1004aa92004-09-08 00:28:11 +00001328 /* count tokens shifted since error; after three, turn off error status. */
1329 if (yyerrstatus) yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001330
1331 yystate = yyn;
1332 goto yynewstate;
1333
Lev Walkin1004aa92004-09-08 00:28:11 +00001334/* Do the default action for the current state. */
Lev Walkin459ab022004-09-07 10:39:09 +00001335yydefault:
Lev Walkin1004aa92004-09-08 00:28:11 +00001336
Lev Walkinf15320b2004-06-03 03:38:44 +00001337 yyn = yydefact[yystate];
1338 if (yyn == 0)
1339 goto yyerrlab;
1340
Lev Walkin1004aa92004-09-08 00:28:11 +00001341/* Do a reduction. yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001342yyreduce:
1343 yylen = yyr2[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001344 if (yylen > 0)
1345 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Lev Walkinf15320b2004-06-03 03:38:44 +00001346
Lev Walkin1004aa92004-09-08 00:28:11 +00001347#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00001348 if (yydebug)
1349 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001350 int i;
Lev Walkinf15320b2004-06-03 03:38:44 +00001351
Lev Walkin1004aa92004-09-08 00:28:11 +00001352 fprintf (stderr, "Reducing via rule %d (line %d), ",
1353 yyn, yyrline[yyn]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001354
1355 /* Print the symbols being reduced, and their result. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001356 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1357 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1358 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001359 }
1360#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001361
Lev Walkin1004aa92004-09-08 00:28:11 +00001362
1363 switch (yyn) {
1364
1365case 1:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001366#line 323 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001367{
1368 *(void **)param = yyvsp[0].a_grammar;
1369 ;
1370 break;}
1371case 2:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001372#line 329 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001373{
Lev Walkinf15320b2004-06-03 03:38:44 +00001374 yyval.a_grammar = asn1p_new();
1375 checkmem(yyval.a_grammar);
1376 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001377 ;
1378 break;}
1379case 3:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001380#line 334 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001381{
Lev Walkinf15320b2004-06-03 03:38:44 +00001382 yyval.a_grammar = yyvsp[-1].a_grammar;
1383 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001384 ;
1385 break;}
1386case 4:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001387#line 355 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001388{
Lev Walkinf15320b2004-06-03 03:38:44 +00001389
1390 if(yyvsp[-1].a_module) {
1391 yyval.a_module = yyvsp[-1].a_module;
1392 } else {
1393 /* There's a chance that a module is just plain empty */
1394 yyval.a_module = asn1p_module_new();
1395 }
1396 checkmem(yyval.a_module);
1397
Lev Walkinb36317c2005-08-12 10:09:10 +00001398 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00001399 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1400 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001401 ;
1402 break;}
1403case 5:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001404#line 376 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001405{ yyval.a_oid = 0; ;
1406 break;}
1407case 6:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001408#line 377 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001409{ yyval.a_oid = yyvsp[0].a_oid; ;
1410 break;}
1411case 7:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001412#line 381 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001413{
Lev Walkinf15320b2004-06-03 03:38:44 +00001414 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin1004aa92004-09-08 00:28:11 +00001415 ;
1416 break;}
1417case 8:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001418#line 384 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001419{
Lev Walkinf15320b2004-06-03 03:38:44 +00001420 yyval.a_oid = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001421 ;
1422 break;}
1423case 9:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001424#line 390 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001425{
Lev Walkinf15320b2004-06-03 03:38:44 +00001426 yyval.a_oid = asn1p_oid_new();
1427 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1428 if(yyvsp[0].a_oid_arc.name)
1429 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001430 ;
1431 break;}
1432case 10:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001433#line 396 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001434{
Lev Walkinf15320b2004-06-03 03:38:44 +00001435 yyval.a_oid = yyvsp[-1].a_oid;
1436 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1437 if(yyvsp[0].a_oid_arc.name)
1438 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001439 ;
1440 break;}
1441case 11:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001442#line 405 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001443{ /* iso */
Lev Walkinf15320b2004-06-03 03:38:44 +00001444 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1445 yyval.a_oid_arc.number = -1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001446 ;
1447 break;}
1448case 12:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001449#line 409 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001450{ /* iso(1) */
Lev Walkinf15320b2004-06-03 03:38:44 +00001451 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1452 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001453 ;
1454 break;}
1455case 13:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001456#line 413 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001457{ /* 1 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001458 yyval.a_oid_arc.name = 0;
1459 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001460 ;
1461 break;}
1462case 14:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001463#line 423 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001464{ yyval.a_module_flags = MSF_NOFLAGS; ;
1465 break;}
1466case 15:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001467#line 424 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001468{
Lev Walkinf15320b2004-06-03 03:38:44 +00001469 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001470 ;
1471 break;}
1472case 16:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001473#line 433 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001474{
Lev Walkinf15320b2004-06-03 03:38:44 +00001475 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001476 ;
1477 break;}
1478case 17:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001479#line 436 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001480{
Lev Walkinf15320b2004-06-03 03:38:44 +00001481 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001482 ;
1483 break;}
1484case 18:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001485#line 445 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001486{
Lev Walkinf15320b2004-06-03 03:38:44 +00001487 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001488 ;
1489 break;}
1490case 19:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001491#line 448 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001492{
Lev Walkinf15320b2004-06-03 03:38:44 +00001493 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001494 ;
1495 break;}
1496case 20:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001497#line 451 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001498{
Lev Walkinf15320b2004-06-03 03:38:44 +00001499 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001500 ;
1501 break;}
1502case 21:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001503#line 454 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001504{
Lev Walkinf15320b2004-06-03 03:38:44 +00001505 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin1004aa92004-09-08 00:28:11 +00001506 ;
1507 break;}
1508case 22:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001509#line 458 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001510{
Lev Walkinf59d0752004-08-18 04:59:12 +00001511 /* X.680Amd1 specifies TAG and XER */
1512 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1513 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1514 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1515 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1516 } else {
1517 fprintf(stderr,
1518 "WARNING: %s INSTRUCTIONS at line %d: "
1519 "Unrecognized encoding reference\n",
1520 yyvsp[-1].tv_str, yylineno);
1521 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1522 }
1523 free(yyvsp[-1].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00001524 ;
1525 break;}
1526case 23:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001527#line 479 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001528{ yyval.a_module = 0; ;
1529 break;}
1530case 24:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001531#line 480 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001532{
Lev Walkinf15320b2004-06-03 03:38:44 +00001533 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001534 ;
1535 break;}
1536case 25:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001537#line 489 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001538{
Lev Walkinf59d0752004-08-18 04:59:12 +00001539 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001540 ;
1541 break;}
1542case 26:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001543#line 492 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001544{
Lev Walkinf15320b2004-06-03 03:38:44 +00001545 yyval.a_module = yyvsp[-1].a_module;
1546
Lev Walkinf59d0752004-08-18 04:59:12 +00001547 /* Behave well when one of them is skipped. */
1548 if(!(yyvsp[-1].a_module)) {
1549 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1550 break;
1551 }
1552
Lev Walkinf15320b2004-06-03 03:38:44 +00001553#ifdef MY_IMPORT
1554#error MY_IMPORT DEFINED ELSEWHERE!
1555#endif
1556#define MY_IMPORT(foo,field) do { \
Lev Walkinbc55d232004-08-13 12:31:09 +00001557 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
Lev Walkinf15320b2004-06-03 03:38:44 +00001558 TQ_ADD(&(yyval.a_module->foo), \
1559 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1560 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001561 } \
1562 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1563 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001564
1565 MY_IMPORT(imports, xp_next);
1566 MY_IMPORT(exports, xp_next);
1567 MY_IMPORT(members, next);
1568#undef MY_IMPORT
1569
Lev Walkin1004aa92004-09-08 00:28:11 +00001570 ;
1571 break;}
1572case 27:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001573#line 525 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001574{
Lev Walkinf15320b2004-06-03 03:38:44 +00001575 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001576 ;
1577 break;}
1578case 28:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001579#line 528 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001580{
Lev Walkinf15320b2004-06-03 03:38:44 +00001581 yyval.a_module = asn1p_module_new();
1582 checkmem(yyval.a_module);
1583 if(yyvsp[0].a_xports) {
1584 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1585 } else {
1586 /* "EXPORTS ALL;" ? */
1587 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001588 ;
1589 break;}
1590case 29:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001591#line 537 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001592{
Lev Walkinf59d0752004-08-18 04:59:12 +00001593 yyval.a_module = asn1p_module_new();
1594 checkmem(yyval.a_module);
1595 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1596 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1597 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001598 ;
1599 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001600case 30:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001601#line 544 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001602{
1603 yyval.a_module = asn1p_module_new();
1604 checkmem(yyval.a_module);
1605 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1606 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1607 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1608 ;
1609 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001610case 31:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001611#line 557 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001612{
Lev Walkinf59d0752004-08-18 04:59:12 +00001613 yyval.a_module = asn1p_module_new();
1614 checkmem(yyval.a_module);
1615 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1616 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1617 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001618 ;
1619 break;}
1620case 32:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001621#line 565 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001622{ asn1p_lexer_hack_push_encoding_control(); ;
1623 break;}
1624case 33:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001625#line 566 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001626{
Lev Walkinf59d0752004-08-18 04:59:12 +00001627 fprintf(stderr,
1628 "WARNING: ENCODING-CONTROL %s "
1629 "specification at line %d ignored\n",
1630 yyvsp[-1].tv_str, yylineno);
1631 free(yyvsp[-1].tv_str);
1632 yyval.a_module = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001633 ;
1634 break;}
1635case 34:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001636#line 578 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001637{
Lev Walkinf15320b2004-06-03 03:38:44 +00001638 return yyerror(
Lev Walkin70853052005-11-26 11:21:55 +00001639 "Attempt to redefine a standard basic string type, "
1640 "please comment out or remove this type redefinition.");
Lev Walkin1004aa92004-09-08 00:28:11 +00001641 ;
1642 break;}
1643case 35:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001644#line 591 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001645{
Lev Walkinb36317c2005-08-12 10:09:10 +00001646 if(!saved_aid && 0)
1647 return yyerror("Unterminated IMPORTS FROM, "
1648 "expected semicolon ';'");
1649 saved_aid = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001650 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001651 ;
1652 break;}
1653case 36:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001654#line 601 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001655{
Lev Walkinf15320b2004-06-03 03:38:44 +00001656 return yyerror("Empty IMPORTS list");
Lev Walkin1004aa92004-09-08 00:28:11 +00001657 ;
1658 break;}
1659case 37:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001660#line 607 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001661{
Lev Walkinf15320b2004-06-03 03:38:44 +00001662 yyval.a_module = asn1p_module_new();
1663 checkmem(yyval.a_module);
1664 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001665 ;
1666 break;}
1667case 38:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001668#line 612 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001669{
Lev Walkinf15320b2004-06-03 03:38:44 +00001670 yyval.a_module = yyvsp[-1].a_module;
1671 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001672 ;
1673 break;}
1674case 39:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001675#line 619 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001676{ memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
1677 break;}
1678case 40:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001679#line 620 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001680{ yyval.a_aid.oid = yyvsp[0].a_oid; ;
1681 break;}
1682case 41:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001683#line 624 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001684{
Lev Walkinf15320b2004-06-03 03:38:44 +00001685 yyval.a_xports = yyvsp[-3].a_xports;
Lev Walkinb36317c2005-08-12 10:09:10 +00001686 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
1687 yyval.a_xports->identifier = yyvsp[0].a_aid;
1688 /* This stupid thing is used for look-back hack. */
1689 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
Lev Walkinf15320b2004-06-03 03:38:44 +00001690 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001691 ;
1692 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001693case 42:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001694#line 635 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001695{
Lev Walkinf15320b2004-06-03 03:38:44 +00001696 yyval.a_xports = asn1p_xports_new();
1697 checkmem(yyval.a_xports);
1698 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001699 ;
1700 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001701case 43:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001702#line 640 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001703{
Lev Walkinf15320b2004-06-03 03:38:44 +00001704 yyval.a_xports = yyvsp[-2].a_xports;
1705 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001706 ;
1707 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001708case 44:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001709#line 647 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001710{
Lev Walkinf15320b2004-06-03 03:38:44 +00001711 yyval.a_expr = asn1p_expr_new(yylineno);
1712 checkmem(yyval.a_expr);
1713 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1714 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001715 ;
1716 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001717case 45:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001718#line 653 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001719{ /* Completely equivalent to above */
1720 yyval.a_expr = asn1p_expr_new(yylineno);
1721 checkmem(yyval.a_expr);
1722 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1723 yyval.a_expr->expr_type = A1TC_REFERENCE;
1724 ;
1725 break;}
1726case 46:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001727#line 659 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001728{
1729 yyval.a_expr = asn1p_expr_new(yylineno);
1730 checkmem(yyval.a_expr);
1731 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1732 yyval.a_expr->expr_type = A1TC_REFERENCE;
1733 ;
1734 break;}
1735case 47:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001736#line 668 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001737{
Lev Walkinf15320b2004-06-03 03:38:44 +00001738 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin1004aa92004-09-08 00:28:11 +00001739 ;
1740 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001741case 48:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001742#line 671 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001743{
Lev Walkinf15320b2004-06-03 03:38:44 +00001744 yyval.a_xports = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001745 ;
1746 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001747case 49:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001748#line 674 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001749{
Lev Walkinf15320b2004-06-03 03:38:44 +00001750 /* Empty EXPORTS clause effectively prohibits export. */
1751 yyval.a_xports = asn1p_xports_new();
1752 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001753 ;
1754 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001755case 50:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001756#line 682 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001757{
Lev Walkinf15320b2004-06-03 03:38:44 +00001758 yyval.a_xports = asn1p_xports_new();
1759 assert(yyval.a_xports);
1760 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001761 ;
1762 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001763case 51:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001764#line 687 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001765{
Lev Walkinf15320b2004-06-03 03:38:44 +00001766 yyval.a_xports = yyvsp[-2].a_xports;
1767 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001768 ;
1769 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001770case 52:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001771#line 694 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001772{
1773 yyval.a_expr = asn1p_expr_new(yylineno);
1774 checkmem(yyval.a_expr);
1775 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1776 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1777 ;
1778 break;}
1779case 53:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001780#line 700 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001781{
1782 yyval.a_expr = asn1p_expr_new(yylineno);
1783 checkmem(yyval.a_expr);
1784 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1785 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1786 ;
Lev Walkin8ea99482005-03-31 21:48:13 +00001787 break;}
1788case 54:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001789#line 706 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001790{
1791 yyval.a_expr = asn1p_expr_new(yylineno);
1792 checkmem(yyval.a_expr);
1793 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1794 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1795 ;
1796 break;}
1797case 55:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001798#line 717 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001799{ asn1p_lexer_hack_push_opaque_state(); ;
1800 break;}
1801case 56:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001802#line 717 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001803{
Lev Walkinf15320b2004-06-03 03:38:44 +00001804 yyval.a_expr = yyvsp[-4].a_expr;
1805 assert(yyval.a_expr->Identifier == 0);
1806 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1807 yyval.a_expr->meta_type = AMT_VALUESET;
Lev Walkin8ea99482005-03-31 21:48:13 +00001808 // take care of ValueSet body
Lev Walkin1004aa92004-09-08 00:28:11 +00001809 ;
1810 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001811case 57:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001812#line 727 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001813{
Lev Walkinf15320b2004-06-03 03:38:44 +00001814 yyval.a_expr = asn1p_expr_new(yylineno);
1815 checkmem(yyval.a_expr);
1816 yyval.a_expr->reference = yyvsp[0].a_ref;
1817 yyval.a_expr->expr_type = A1TC_REFERENCE;
1818 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001819 ;
1820 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001821case 58:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001822#line 734 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001823{
Lev Walkinf15320b2004-06-03 03:38:44 +00001824 yyval.a_expr = asn1p_expr_new(yylineno);
1825 checkmem(yyval.a_expr);
1826 yyval.a_expr->expr_type = yyvsp[0].a_type;
1827 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001828 ;
1829 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001830case 59:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001831#line 752 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001832{
Lev Walkinf15320b2004-06-03 03:38:44 +00001833 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00001834 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00001835 assert(yyval.a_expr->expr_type);
1836 assert(yyval.a_expr->meta_type);
Lev Walkin1004aa92004-09-08 00:28:11 +00001837 ;
1838 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001839case 60:
1840#line 758 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001841{
Lev Walkinf15320b2004-06-03 03:38:44 +00001842 yyval.a_expr = yyvsp[0].a_expr;
1843 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1844 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
Lev Walkin9c2285a2006-03-09 08:49:26 +00001845 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin1004aa92004-09-08 00:28:11 +00001846 ;
1847 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001848case 61:
1849#line 774 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001850{
Lev Walkinf15320b2004-06-03 03:38:44 +00001851 yyval.a_expr = yyvsp[0].a_expr;
1852 assert(yyval.a_expr->Identifier == 0);
1853 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1854 yyval.a_expr->params = yyvsp[-3].a_plist;
1855 yyval.a_expr->meta_type = AMT_PARAMTYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001856 ;
1857 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001858case 62:
1859#line 784 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001860{
Lev Walkinf15320b2004-06-03 03:38:44 +00001861 int ret;
1862 yyval.a_plist = asn1p_paramlist_new(yylineno);
1863 checkmem(yyval.a_plist);
1864 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1865 checkmem(ret == 0);
1866 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1867 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001868 ;
1869 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001870case 63:
1871#line 793 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001872{
Lev Walkinf15320b2004-06-03 03:38:44 +00001873 int ret;
1874 yyval.a_plist = yyvsp[-2].a_plist;
1875 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1876 checkmem(ret == 0);
1877 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1878 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001879 ;
1880 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001881case 64:
1882#line 804 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001883{
Lev Walkinf15320b2004-06-03 03:38:44 +00001884 yyval.a_parg.governor = NULL;
1885 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001886 ;
1887 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001888case 65:
1889#line 808 "asn1p_y.y"
1890{
1891 int ret;
1892 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1893 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1894 checkmem(ret == 0);
1895 yyval.a_parg.argument = yyvsp[0].tv_str;
1896 ;
1897 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001898case 66:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001899#line 815 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001900{
1901 int ret;
1902 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1903 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1904 checkmem(ret == 0);
1905 yyval.a_parg.argument = yyvsp[0].tv_str;
1906 ;
1907 break;}
1908case 67:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001909#line 822 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00001910{
1911 int ret;
1912 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00001913 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1914 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1915 checkmem(ret == 0);
1916 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001917 ;
1918 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001919case 68:
1920#line 833 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001921{
Lev Walkinf15320b2004-06-03 03:38:44 +00001922 yyval.a_expr = asn1p_expr_new(yylineno);
1923 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001924 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1925 ;
1926 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001927case 69:
1928#line 838 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001929{
Lev Walkinf15320b2004-06-03 03:38:44 +00001930 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001931 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1932 ;
1933 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001934case 70:
1935#line 845 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001936{
Lev Walkinf15320b2004-06-03 03:38:44 +00001937 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001938 ;
1939 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001940case 71:
1941#line 848 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001942{
Lev Walkinf15320b2004-06-03 03:38:44 +00001943 yyval.a_expr = asn1p_expr_new(yylineno);
1944 checkmem(yyval.a_expr);
1945 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1946 yyval.a_expr->expr_type = A1TC_REFERENCE;
1947 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001948 ;
1949 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001950case 72:
1951#line 872 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001952{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1953 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001954case 73:
1955#line 873 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001956{ yyval.a_expr = yyvsp[0].a_expr; ;
1957 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001958case 74:
1959#line 876 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001960{
Lev Walkinf15320b2004-06-03 03:38:44 +00001961 yyval.a_expr = asn1p_expr_new(yylineno);
1962 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001963 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1964 ;
1965 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001966case 75:
1967#line 881 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001968{
Lev Walkinf15320b2004-06-03 03:38:44 +00001969 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001970 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1971 ;
1972 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001973case 76:
1974#line 888 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001975{
Lev Walkin070a52d2004-08-22 03:19:54 +00001976 yyval.a_expr = yyvsp[-1].a_expr;
1977 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00001978 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinef625402005-09-05 05:17:57 +00001979 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
Lev Walkin070a52d2004-08-22 03:19:54 +00001980 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00001981 ;
1982 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001983case 77:
1984#line 895 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001985{
Lev Walkinef625402005-09-05 05:17:57 +00001986 yyval.a_expr = yyvsp[-1].a_expr;
1987 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
1988 yyval.a_expr->marker = yyvsp[0].a_marker;
1989 _fixup_anonymous_identifier(yyval.a_expr);
1990 ;
1991 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001992case 78:
1993#line 901 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00001994{
Lev Walkin070a52d2004-08-22 03:19:54 +00001995 yyval.a_expr = asn1p_expr_new(yylineno);
1996 checkmem(yyval.a_expr);
1997 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1998 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001999 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2000 ;
2001 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002002case 79:
2003#line 908 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002004{
Lev Walkin070a52d2004-08-22 03:19:54 +00002005 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002006 ;
2007 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002008case 80:
2009#line 914 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002010{
Lev Walkin070a52d2004-08-22 03:19:54 +00002011 yyval.a_expr = asn1p_expr_new(yylineno);
2012 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002013 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2014 ;
2015 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002016case 81:
2017#line 919 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002018{
Lev Walkin070a52d2004-08-22 03:19:54 +00002019 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002020 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2021 ;
2022 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002023case 82:
2024#line 926 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002025{
Lev Walkin070a52d2004-08-22 03:19:54 +00002026 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002027 assert(yyval.a_expr->Identifier == 0);
2028 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002029 ;
2030 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002031case 83:
2032#line 931 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002033{
2034 yyval.a_expr = yyvsp[0].a_expr;
2035 ;
2036 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002037case 84:
2038#line 934 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002039{
2040 yyval.a_expr = yyvsp[0].a_expr;
2041 _fixup_anonymous_identifier(yyval.a_expr);
2042 ;
2043 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002044case 85:
2045#line 941 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002046{
Lev Walkinf15320b2004-06-03 03:38:44 +00002047 yyval.a_expr = yyvsp[-2].a_expr;
2048 checkmem(yyval.a_expr);
2049 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2050 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
Lev Walkin9c2285a2006-03-09 08:49:26 +00002051 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin1004aa92004-09-08 00:28:11 +00002052 ;
2053 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002054case 86:
2055#line 951 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002056{ yyval.a_int = 0; ;
2057 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002058case 87:
2059#line 952 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002060{ yyval.a_int = 1; ;
2061 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002062case 88:
2063#line 956 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002064{
Lev Walkinf15320b2004-06-03 03:38:44 +00002065 yyval.a_expr = asn1p_expr_new(yylineno);
2066 checkmem(yyval.a_expr);
2067 yyval.a_expr->expr_type = A1TC_CLASSDEF;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002068 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2069 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2070 ;
2071 break;}
2072case 89:
2073#line 963 "asn1p_y.y"
2074{
2075 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002076 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2077 ;
2078 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002079case 90:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002080#line 973 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002081{
Lev Walkin9c2285a2006-03-09 08:49:26 +00002082 yyval.a_expr = asn1p_expr_new(yylineno);
2083 checkmem(yyval.a_expr);
2084 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2085 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2086 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2087 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002088 ;
2089 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002090case 91:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002091#line 983 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002092{
Lev Walkinf15320b2004-06-03 03:38:44 +00002093 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin9c2285a2006-03-09 08:49:26 +00002094 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00002095 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002096 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2097 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkinf15320b2004-06-03 03:38:44 +00002098 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002099 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002100 ;
2101 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002102case 92:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002103#line 994 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002104{
Lev Walkin9c2285a2006-03-09 08:49:26 +00002105 yyval.a_expr = asn1p_expr_new(yylineno);
2106 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2107 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2108 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2109 yyval.a_expr->reference = yyvsp[-1].a_ref;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002110 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002111 ;
2112 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002113case 93:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002114#line 1004 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002115{
Lev Walkinf15320b2004-06-03 03:38:44 +00002116 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin9c2285a2006-03-09 08:49:26 +00002117 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00002118 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002119 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2120 yyval.a_expr->reference = yyvsp[-1].a_ref;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002121 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002122 ;
2123 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002124case 94:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002125#line 1014 "asn1p_y.y"
2126{
2127 yyval.a_expr = asn1p_expr_new(yylineno);
2128 checkmem(yyval.a_expr);
2129 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2130 yyval.a_expr->reference = yyvsp[-1].a_ref;
2131 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2132 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2133 yyval.a_expr->marker = yyvsp[0].a_marker;
2134 ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002135 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002136case 95:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002137#line 1025 "asn1p_y.y"
2138{
2139 yyval.a_expr = asn1p_expr_new(yylineno);
2140 checkmem(yyval.a_expr);
2141 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2142 yyval.a_expr->reference = yyvsp[-1].a_ref;
2143 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2144 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2145 yyval.a_expr->marker = yyvsp[0].a_marker;
2146 ;
2147 break;}
2148case 96:
2149#line 1036 "asn1p_y.y"
2150{
2151 yyval.a_expr = asn1p_expr_new(yylineno);
2152 checkmem(yyval.a_expr);
2153 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2154 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2155 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2156 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
2157 yyval.a_expr->marker = yyvsp[0].a_marker;
2158 ;
2159 break;}
2160case 97:
2161#line 1063 "asn1p_y.y"
2162{ yyval.a_wsynt = 0; ;
2163 break;}
2164case 98:
2165#line 1064 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002166{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002167 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002168 ;
2169 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002170case 99:
2171#line 1071 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002172{ asn1p_lexer_hack_enable_with_syntax(); ;
2173 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002174case 100:
2175#line 1073 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002176{
2177 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2178 ;
2179 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002180case 101:
2181#line 1079 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002182{
Lev Walkinf15320b2004-06-03 03:38:44 +00002183 yyval.a_wsynt = asn1p_wsyntx_new();
2184 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002185 ;
2186 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002187case 102:
2188#line 1083 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002189{
Lev Walkinf15320b2004-06-03 03:38:44 +00002190 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2191 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002192 ;
2193 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002194case 103:
2195#line 1090 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002196{
Lev Walkinf15320b2004-06-03 03:38:44 +00002197 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002198 ;
2199 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002200case 104:
2201#line 1093 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002202{
Lev Walkinf15320b2004-06-03 03:38:44 +00002203 asn1p_ref_t *ref;
2204 int ret;
2205 ref = asn1p_ref_new(yylineno);
2206 checkmem(ref);
2207 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2208 checkmem(ret == 0);
2209 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002210 ;
2211 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002212case 105:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002213#line 1105 "asn1p_y.y"
2214{
2215 yyval.a_expr = asn1p_expr_new(yylineno);
2216 checkmem(yyval.a_expr);
2217 yyval.a_expr->Identifier = strdup("...");
2218 checkmem(yyval.a_expr->Identifier);
2219 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2220 yyval.a_expr->meta_type = AMT_TYPE;
2221 ;
2222 break;}
2223case 106:
2224#line 1113 "asn1p_y.y"
2225{
2226 yyval.a_expr = asn1p_expr_new(yylineno);
2227 checkmem(yyval.a_expr);
2228 yyval.a_expr->Identifier = strdup("...");
2229 checkmem(yyval.a_expr->Identifier);
2230 yyval.a_expr->value = yyvsp[0].a_value;
2231 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2232 yyval.a_expr->meta_type = AMT_TYPE;
2233 ;
2234 break;}
2235case 107:
2236#line 1122 "asn1p_y.y"
2237{
2238 yyval.a_expr = asn1p_expr_new(yylineno);
2239 checkmem(yyval.a_expr);
2240 yyval.a_expr->Identifier = strdup("...");
2241 yyval.a_expr->value = yyvsp[0].a_value;
2242 checkmem(yyval.a_expr->Identifier);
2243 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2244 yyval.a_expr->meta_type = AMT_TYPE;
2245 ;
2246 break;}
2247case 108:
2248#line 1134 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002249{
Lev Walkin070a52d2004-08-22 03:19:54 +00002250 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00002251 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002252 /*
2253 * Outer constraint for SEQUENCE OF and SET OF applies
2254 * to the inner type.
2255 */
2256 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2257 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2258 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2259 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2260 } else {
2261 if(yyval.a_expr->constraints) {
Lev Walkinaf120f72004-09-14 02:36:39 +00002262 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002263 } else {
2264 yyval.a_expr->constraints = yyvsp[0].a_constr;
2265 }
2266 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002267 ;
2268 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002269case 109:
2270#line 1156 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00002271{
2272 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
2273 asn1p_as_pointer = 0;
2274 ;
Lev Walkin4696c742005-08-22 12:23:54 +00002275 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002276case 110:
2277#line 1163 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002278{
Lev Walkind2ea1de2004-08-20 13:25:29 +00002279 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinef625402005-09-05 05:17:57 +00002280 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
2281
2282 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2283 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
2284 fprintf(stderr,
2285 "INFO: Directive <ASN1C:RepresentAsPointer> "
2286 "applied to %s at line %d\n",
2287 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2288 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2289 : "member",
2290 yyval.a_expr->_lineno
2291 );
2292 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002293 ;
2294 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002295case 111:
2296#line 1182 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002297{
Lev Walkin4696c742005-08-22 12:23:54 +00002298 yyval.a_expr = yyvsp[0].a_expr;
2299 ;
2300 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002301case 112:
2302#line 1185 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002303{
Lev Walkinef625402005-09-05 05:17:57 +00002304 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinc7d939d2005-03-20 11:12:40 +00002305 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2306 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
Lev Walkinf15320b2004-06-03 03:38:44 +00002307 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002308 ;
2309 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002310case 113:
2311#line 1191 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002312{
Lev Walkinef625402005-09-05 05:17:57 +00002313 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002314 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002315 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
Lev Walkin070a52d2004-08-22 03:19:54 +00002316 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002317 ;
2318 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002319case 114:
2320#line 1197 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002321{
Lev Walkinef625402005-09-05 05:17:57 +00002322 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002323 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002324 yyval.a_expr->expr_type = ASN_CONSTR_SET;
Lev Walkin070a52d2004-08-22 03:19:54 +00002325 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002326 ;
2327 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002328case 115:
2329#line 1203 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002330{
Lev Walkinceb20e72004-09-05 10:40:41 +00002331 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002332 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002333 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002334 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2335 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002336 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002337 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002338 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2339 ;
2340 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002341case 116:
2342#line 1213 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002343{
Lev Walkinceb20e72004-09-05 10:40:41 +00002344 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002345 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002346 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002347 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2348 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002349 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002350 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002351 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2352 ;
2353 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002354case 117:
2355#line 1223 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002356{
Lev Walkinceb20e72004-09-05 10:40:41 +00002357 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002358 checkmem(yyval.a_expr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002359 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002360 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002361 ;
2362 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002363case 118:
2364#line 1229 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002365{
Lev Walkin070a52d2004-08-22 03:19:54 +00002366 int ret;
Lev Walkinceb20e72004-09-05 10:40:41 +00002367 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002368 checkmem(yyval.a_expr);
2369 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2370 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2371 yyvsp[0].tv_str, RLT_lowercase);
2372 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002373 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002374 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002375 ;
2376 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002377case 119:
2378#line 1243 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002379{
Lev Walkinf15320b2004-06-03 03:38:44 +00002380 int ret;
2381 yyval.a_expr = yyvsp[-1].a_expr;
2382 assert(yyval.a_expr->expr_type == 0);
2383 assert(yyval.a_expr->meta_type == 0);
2384 assert(yyval.a_expr->reference == 0);
2385 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2386 checkmem(yyval.a_expr->reference);
2387 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2388 checkmem(ret == 0);
2389 free(yyvsp[-3].tv_str);
2390 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2391 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002392 ;
2393 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002394case 120:
2395#line 1267 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002396{
Lev Walkinf15320b2004-06-03 03:38:44 +00002397 yyval.a_expr = asn1p_expr_new(yylineno);
2398 checkmem(yyval.a_expr);
2399 yyval.a_expr->reference = yyvsp[0].a_ref;
2400 yyval.a_expr->expr_type = A1TC_REFERENCE;
2401 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00002402 ;
2403 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002404case 121:
2405#line 1274 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002406{
Lev Walkinf15320b2004-06-03 03:38:44 +00002407 yyval.a_expr = asn1p_expr_new(yylineno);
2408 checkmem(yyval.a_expr);
2409 yyval.a_expr->reference = yyvsp[0].a_ref;
2410 yyval.a_expr->expr_type = A1TC_INSTANCE;
2411 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002412 ;
2413 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002414case 122:
2415#line 1289 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002416{
Lev Walkinf15320b2004-06-03 03:38:44 +00002417 int ret;
2418 yyval.a_ref = asn1p_ref_new(yylineno);
2419 checkmem(yyval.a_ref);
2420 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2421 checkmem(ret == 0);
2422 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002423 ;
2424 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002425case 123:
2426#line 1297 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002427{
2428 int ret;
2429 yyval.a_ref = asn1p_ref_new(yylineno);
2430 checkmem(yyval.a_ref);
2431 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2432 checkmem(ret == 0);
2433 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2434 checkmem(ret == 0);
2435 free(yyvsp[-2].tv_str);
2436 ;
2437 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002438case 124:
2439#line 1307 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002440{
2441 int ret;
2442 yyval.a_ref = asn1p_ref_new(yylineno);
2443 checkmem(yyval.a_ref);
2444 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2445 checkmem(ret == 0);
2446 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2447 checkmem(ret == 0);
2448 free(yyvsp[-2].tv_str);
2449 ;
2450 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002451case 125:
2452#line 1317 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002453{
Lev Walkinf15320b2004-06-03 03:38:44 +00002454 int ret;
2455 yyval.a_ref = asn1p_ref_new(yylineno);
2456 checkmem(yyval.a_ref);
Lev Walkin9c974182004-09-15 11:59:51 +00002457 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2458 checkmem(ret == 0);
2459 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2460 checkmem(ret == 0);
2461 free(yyvsp[-2].tv_str);
2462 ;
2463 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002464case 126:
2465#line 1327 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002466{
2467 int ret;
2468 yyval.a_ref = asn1p_ref_new(yylineno);
2469 checkmem(yyval.a_ref);
Lev Walkinf15320b2004-06-03 03:38:44 +00002470 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2471 free(yyvsp[0].tv_str);
2472 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002473 ;
2474 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002475case 127:
2476#line 1335 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002477{
Lev Walkinf15320b2004-06-03 03:38:44 +00002478 int ret;
2479 yyval.a_ref = yyvsp[0].a_ref;
2480 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2481 free(yyvsp[-2].tv_str);
2482 checkmem(ret == 0);
2483 /*
2484 * Move the last element infront.
2485 */
2486 {
2487 struct asn1p_ref_component_s tmp_comp;
2488 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2489 memmove(&yyval.a_ref->components[1],
2490 &yyval.a_ref->components[0],
2491 sizeof(yyval.a_ref->components[0])
2492 * (yyval.a_ref->comp_count - 1));
2493 yyval.a_ref->components[0] = tmp_comp;
2494 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002495 ;
2496 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002497case 128:
2498#line 1357 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002499{
Lev Walkinf15320b2004-06-03 03:38:44 +00002500 int ret;
2501 yyval.a_ref = asn1p_ref_new(yylineno);
2502 checkmem(yyval.a_ref);
2503 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2504 free(yyvsp[0].a_refcomp.name);
2505 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002506 ;
2507 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002508case 129:
2509#line 1365 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002510{
Lev Walkinf15320b2004-06-03 03:38:44 +00002511 int ret;
2512 yyval.a_ref = yyvsp[-2].a_ref;
2513 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2514 free(yyvsp[0].a_refcomp.name);
2515 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002516 ;
2517 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002518case 132:
2519#line 1379 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002520{
Lev Walkinf15320b2004-06-03 03:38:44 +00002521 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2522 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002523 ;
2524 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002525case 133:
2526#line 1384 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002527{
Lev Walkinf15320b2004-06-03 03:38:44 +00002528 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2529 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002530 ;
2531 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002532case 134:
2533#line 1393 "asn1p_y.y"
2534{
2535 yyval.a_ref = asn1p_ref_new(yylineno);
2536 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2537 ;
2538 break;}
2539case 135:
2540#line 1397 "asn1p_y.y"
2541{
2542 yyval.a_ref = yyval.a_ref;
2543 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2544 ;
2545 break;}
2546case 136:
2547#line 1401 "asn1p_y.y"
2548{
2549 yyval.a_ref = yyval.a_ref;
2550 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
2551 ;
2552 break;}
2553case 137:
2554#line 1408 "asn1p_y.y"
2555{
2556 yyval.a_ref = asn1p_ref_new(yylineno);
2557 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2558 ;
2559 break;}
2560case 138:
2561#line 1412 "asn1p_y.y"
2562{
2563 yyval.a_ref = asn1p_ref_new(yylineno);
2564 asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_AmpUppercase);
2565 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2566 ;
2567 break;}
2568case 139:
2569#line 1426 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002570{
Lev Walkinf15320b2004-06-03 03:38:44 +00002571 yyval.a_expr = yyvsp[-2].a_expr;
2572 assert(yyval.a_expr->Identifier == NULL);
2573 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2574 yyval.a_expr->meta_type = AMT_VALUE;
2575 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002576 ;
2577 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002578case 140:
2579#line 1436 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002580{
2581 yyval.a_value = asn1p_value_fromint(0);
2582 checkmem(yyval.a_value);
2583 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2584 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2585 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2586 ;
2587 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002588case 141:
2589#line 1443 "asn1p_y.y"
Lev Walkincbad2512005-03-24 16:27:02 +00002590{ asn1p_lexer_hack_push_opaque_state(); ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002591 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002592case 142:
2593#line 1443 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002594{
Lev Walkinf15320b2004-06-03 03:38:44 +00002595 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2596 checkmem(yyval.a_value);
2597 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin1004aa92004-09-08 00:28:11 +00002598 ;
2599 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002600case 143:
2601#line 1448 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002602{
2603 yyval.a_value = asn1p_value_fromint(0);
2604 checkmem(yyval.a_value);
2605 yyval.a_value->type = ATV_NULL;
2606 ;
2607 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002608case 144:
2609#line 1453 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002610{
2611 yyval.a_value = asn1p_value_fromint(0);
2612 checkmem(yyval.a_value);
2613 yyval.a_value->type = ATV_FALSE;
2614 ;
2615 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002616case 145:
2617#line 1458 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002618{
2619 yyval.a_value = asn1p_value_fromint(0);
2620 checkmem(yyval.a_value);
2621 yyval.a_value->type = ATV_TRUE;
2622 ;
2623 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002624case 146:
2625#line 1463 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002626{
Lev Walkinf15320b2004-06-03 03:38:44 +00002627 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2628 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002629 ;
2630 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002631case 147:
2632#line 1467 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002633{
Lev Walkinf15320b2004-06-03 03:38:44 +00002634 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2635 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002636 ;
2637 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002638case 148:
2639#line 1471 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002640{
Lev Walkin1e448d32005-03-24 14:26:38 +00002641 yyval.a_value = yyval.a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002642 ;
2643 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002644case 149:
2645#line 1474 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002646{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002647 yyval.a_value = yyvsp[0].a_value;
2648 ;
2649 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002650case 150:
2651#line 1477 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002652{
2653 yyval.a_value = yyvsp[0].a_value;
2654 ;
2655 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002656case 151:
2657#line 1483 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002658{
Lev Walkinf15320b2004-06-03 03:38:44 +00002659 asn1p_ref_t *ref;
2660 int ret;
2661 ref = asn1p_ref_new(yylineno);
2662 checkmem(ref);
2663 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2664 checkmem(ret == 0);
2665 yyval.a_value = asn1p_value_fromref(ref, 0);
2666 checkmem(yyval.a_value);
2667 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002668 ;
2669 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002670case 152:
2671#line 1494 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002672{
Lev Walkinf15320b2004-06-03 03:38:44 +00002673 asn1p_ref_t *ref;
2674 int ret;
2675 ref = asn1p_ref_new(yylineno);
2676 checkmem(ref);
2677 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2678 checkmem(ret == 0);
2679 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2680 checkmem(ret == 0);
2681 yyval.a_value = asn1p_value_fromref(ref, 0);
2682 checkmem(yyval.a_value);
2683 free(yyvsp[-2].tv_str);
2684 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002685 ;
2686 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002687case 153:
2688#line 1512 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002689{
2690 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2691 checkmem(yyval.a_value);
2692 ;
2693 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002694case 154:
2695#line 1516 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002696{
Lev Walkind9574ae2005-03-24 16:22:35 +00002697 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002698 checkmem(yyval.a_value);
2699 yyval.a_value->type = ATV_TUPLE;
2700 ;
2701 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002702case 155:
2703#line 1521 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002704{
Lev Walkind9574ae2005-03-24 16:22:35 +00002705 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002706 checkmem(yyval.a_value);
2707 yyval.a_value->type = ATV_QUADRUPLE;
2708 ;
2709 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002710case 156:
2711#line 1555 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002712{
Lev Walkin1893ddf2005-03-20 14:28:32 +00002713 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00002714 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2715 checkmem(yyval.tv_opaque.buf);
2716 yyval.tv_opaque.buf[0] = '{';
Lev Walkin1893ddf2005-03-20 14:28:32 +00002717 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00002718 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2719 free(yyvsp[0].tv_opaque.buf);
Lev Walkin1004aa92004-09-08 00:28:11 +00002720 ;
2721 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002722case 157:
2723#line 1564 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002724{
Lev Walkinf15320b2004-06-03 03:38:44 +00002725 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2726 char *p = malloc(newsize + 1);
2727 checkmem(p);
2728 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2729 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2730 p[newsize] = '\0';
2731 free(yyvsp[-1].tv_opaque.buf);
2732 free(yyvsp[0].tv_opaque.buf);
2733 yyval.tv_opaque.buf = p;
2734 yyval.tv_opaque.len = newsize;
Lev Walkin1004aa92004-09-08 00:28:11 +00002735 ;
2736 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002737case 158:
2738#line 1579 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002739{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2740 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002741case 159:
2742#line 1580 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002743{ yyval.a_type = ASN_BASIC_NULL; ;
2744 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002745case 160:
2746#line 1581 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002747{ yyval.a_type = ASN_BASIC_REAL; ;
2748 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002749case 161:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002750#line 1582 "asn1p_y.y"
2751{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkin4696c742005-08-22 12:23:54 +00002752 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002753case 162:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002754#line 1583 "asn1p_y.y"
2755{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
Lev Walkin4696c742005-08-22 12:23:54 +00002756 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002757case 163:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002758#line 1584 "asn1p_y.y"
2759{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
Lev Walkin4696c742005-08-22 12:23:54 +00002760 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002761case 164:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002762#line 1585 "asn1p_y.y"
2763{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
Lev Walkin4696c742005-08-22 12:23:54 +00002764 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002765case 165:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002766#line 1586 "asn1p_y.y"
2767{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
Lev Walkin4696c742005-08-22 12:23:54 +00002768 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002769case 166:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002770#line 1587 "asn1p_y.y"
2771{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
2772 break;}
2773case 167:
2774#line 1588 "asn1p_y.y"
2775{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
2776 break;}
2777case 168:
2778#line 1589 "asn1p_y.y"
2779{ yyval.a_type = ASN_BASIC_UTCTime; ;
2780 break;}
2781case 169:
2782#line 1590 "asn1p_y.y"
2783{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2784 break;}
2785case 170:
2786#line 1591 "asn1p_y.y"
2787{ yyval.a_type = yyvsp[0].a_type; ;
2788 break;}
2789case 171:
2790#line 1598 "asn1p_y.y"
2791{ yyval.a_type = ASN_BASIC_INTEGER; ;
2792 break;}
2793case 172:
2794#line 1599 "asn1p_y.y"
2795{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2796 break;}
2797case 173:
2798#line 1600 "asn1p_y.y"
2799{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2800 break;}
2801case 174:
2802#line 1604 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002803{
Lev Walkinceb20e72004-09-05 10:40:41 +00002804 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002805 checkmem(yyval.a_expr);
2806 yyval.a_expr->expr_type = yyvsp[0].a_type;
2807 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002808 ;
2809 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002810case 175:
2811#line 1610 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002812{
Lev Walkinf15320b2004-06-03 03:38:44 +00002813 if(yyvsp[0].a_expr) {
2814 yyval.a_expr = yyvsp[0].a_expr;
2815 } else {
Lev Walkinceb20e72004-09-05 10:40:41 +00002816 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002817 checkmem(yyval.a_expr);
2818 }
2819 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2820 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002821 ;
2822 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002823case 176:
2824#line 1623 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002825{ yyval.a_type = ASN_STRING_BMPString; ;
2826 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002827case 177:
2828#line 1624 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002829{
Lev Walkinf15320b2004-06-03 03:38:44 +00002830 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00002831 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002832 ;
2833 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002834case 178:
2835#line 1628 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002836{
Lev Walkin9c974182004-09-15 11:59:51 +00002837 yyval.a_type = ASN_STRING_GraphicString;
2838 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002839 ;
2840 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002841case 179:
2842#line 1632 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002843{ yyval.a_type = ASN_STRING_IA5String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002844 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002845case 180:
2846#line 1633 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002847{ yyval.a_type = ASN_STRING_ISO646String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002848 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002849case 181:
2850#line 1634 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002851{ yyval.a_type = ASN_STRING_NumericString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002852 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002853case 182:
2854#line 1635 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002855{ yyval.a_type = ASN_STRING_PrintableString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002856 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002857case 183:
2858#line 1636 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002859{
2860 yyval.a_type = ASN_STRING_T61String;
2861 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2862 ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002863 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002864case 184:
2865#line 1640 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002866{ yyval.a_type = ASN_STRING_TeletexString; ;
2867 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002868case 185:
2869#line 1641 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002870{ yyval.a_type = ASN_STRING_UniversalString; ;
2871 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002872case 186:
2873#line 1642 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002874{ yyval.a_type = ASN_STRING_UTF8String; ;
2875 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002876case 187:
2877#line 1643 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002878{
2879 yyval.a_type = ASN_STRING_VideotexString;
2880 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2881 ;
2882 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002883case 188:
2884#line 1647 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002885{ yyval.a_type = ASN_STRING_VisibleString; ;
2886 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002887case 189:
2888#line 1648 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002889{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2890 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002891case 195:
2892#line 1660 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002893{ yyval.a_constr = 0; ;
2894 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002895case 196:
2896#line 1661 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002897{
Lev Walkinceb20e72004-09-05 10:40:41 +00002898 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002899 ;
2900 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002901case 197:
2902#line 1667 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002903{
Lev Walkinceb20e72004-09-05 10:40:41 +00002904 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002905 ;
2906 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002907case 198:
2908#line 1670 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002909{
Lev Walkinf15320b2004-06-03 03:38:44 +00002910 /*
2911 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00002912 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00002913 */
Lev Walkind2ea1de2004-08-20 13:25:29 +00002914 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002915 ;
2916 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002917case 199:
2918#line 1680 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002919{
Lev Walkinf15320b2004-06-03 03:38:44 +00002920 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002921 ;
2922 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002923case 200:
2924#line 1683 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002925{
Lev Walkinf59d0752004-08-18 04:59:12 +00002926 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002927 ;
2928 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002929case 201:
2930#line 1689 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002931{
Lev Walkinf15320b2004-06-03 03:38:44 +00002932 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002933 ;
2934 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002935case 202:
2936#line 1692 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002937{
Lev Walkinf15320b2004-06-03 03:38:44 +00002938 asn1p_constraint_t *ct;
2939 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002940 ct->type = ACT_EL_EXT;
2941 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00002942 ;
2943 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002944case 203:
2945#line 1698 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002946{
Lev Walkinf15320b2004-06-03 03:38:44 +00002947 asn1p_constraint_t *ct;
2948 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002949 ct->type = ACT_EL_EXT;
2950 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002951 ct = yyval.a_constr;
2952 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002953 ;
2954 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002955case 204:
2956#line 1709 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002957{
Lev Walkinf59d0752004-08-18 04:59:12 +00002958 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002959 ;
2960 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002961case 205:
2962#line 1712 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002963{
2964 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2965 ;
2966 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002967case 206:
2968#line 1715 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002969{
Lev Walkinf15320b2004-06-03 03:38:44 +00002970 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002971 ;
2972 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002973case 207:
2974#line 1718 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002975{
Lev Walkinf15320b2004-06-03 03:38:44 +00002976 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002977 ;
2978 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002979case 208:
2980#line 1721 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002981{
Lev Walkinf15320b2004-06-03 03:38:44 +00002982 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002983 ;
2984 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002985case 209:
2986#line 1727 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002987{
Lev Walkinf15320b2004-06-03 03:38:44 +00002988 int ret;
2989 yyval.a_constr = asn1p_constraint_new(yylineno);
2990 checkmem(yyval.a_constr);
2991 yyval.a_constr->type = yyvsp[-3].a_ctype;
2992 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2993 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002994 ;
2995 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002996case 210:
2997#line 1735 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002998{
Lev Walkinf59d0752004-08-18 04:59:12 +00002999 int ret;
3000 yyval.a_constr = asn1p_constraint_new(yylineno);
3001 checkmem(yyval.a_constr);
3002 yyval.a_constr->type = ACT_CA_SET;
3003 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
3004 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003005 ;
3006 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003007case 211:
3008#line 1743 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003009{
Lev Walkinf59d0752004-08-18 04:59:12 +00003010 yyval.a_constr = asn1p_constraint_new(yylineno);
3011 checkmem(yyval.a_constr);
3012 yyval.a_constr->type = ACT_EL_VALUE;
3013 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003014 ;
3015 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003016case 212:
3017#line 1749 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003018{
Lev Walkin144db9b2004-10-12 23:26:53 +00003019 yyval.a_constr = asn1p_constraint_new(yylineno);
3020 checkmem(yyval.a_constr);
Lev Walkinff7dd142005-03-20 12:58:00 +00003021 yyval.a_constr->type = ACT_EL_TYPE;
3022 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin9c974182004-09-15 11:59:51 +00003023 ;
3024 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003025case 213:
3026#line 1755 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003027{
Lev Walkin4696c742005-08-22 12:23:54 +00003028 yyval.a_constr = asn1p_constraint_new(yylineno);
3029 checkmem(yyval.a_constr);
3030 yyval.a_constr->type = yyvsp[-1].a_ctype;
3031 yyval.a_constr->range_start = yyvsp[-2].a_value;
3032 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003033 ;
3034 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003035case 214:
3036#line 1762 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003037{
3038 yyval.a_constr = asn1p_constraint_new(yylineno);
3039 checkmem(yyval.a_constr);
3040 yyval.a_constr->type = yyvsp[-1].a_ctype;
3041 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3042 yyval.a_constr->range_stop = yyvsp[0].a_value;
3043 yyval.a_constr->range_start->type = ATV_MIN;
3044 ;
3045 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003046case 215:
3047#line 1770 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003048{
3049 yyval.a_constr = asn1p_constraint_new(yylineno);
3050 checkmem(yyval.a_constr);
3051 yyval.a_constr->type = yyvsp[-1].a_ctype;
3052 yyval.a_constr->range_start = yyvsp[-2].a_value;
3053 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3054 yyval.a_constr->range_stop->type = ATV_MAX;
3055 ;
3056 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003057case 216:
3058#line 1778 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003059{
3060 yyval.a_constr = asn1p_constraint_new(yylineno);
3061 checkmem(yyval.a_constr);
3062 yyval.a_constr->type = yyvsp[-1].a_ctype;
3063 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3064 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3065 yyval.a_constr->range_start->type = ATV_MIN;
3066 yyval.a_constr->range_stop->type = ATV_MAX;
3067 ;
3068 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003069case 217:
3070#line 1787 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003071{
Lev Walkinef625402005-09-05 05:17:57 +00003072 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin4696c742005-08-22 12:23:54 +00003073 ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003074 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003075case 218:
3076#line 1790 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003077{
Lev Walkinef625402005-09-05 05:17:57 +00003078 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin4696c742005-08-22 12:23:54 +00003079 ;
3080 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003081case 219:
3082#line 1794 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003083{ asn1p_lexer_hack_push_opaque_state(); ;
3084 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003085case 220:
3086#line 1794 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003087{
3088 yyval.a_constr = asn1p_constraint_new(yylineno);
3089 checkmem(yyval.a_constr);
3090 yyval.a_constr->type = ACT_CT_CTDBY;
3091 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3092 checkmem(yyval.a_constr->value);
3093 yyval.a_constr->value->type = ATV_UNPARSED;
3094 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003095 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003096case 221:
3097#line 1805 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003098{ yyval.a_ctype = ACT_EL_RANGE; ;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003099 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003100case 222:
3101#line 1806 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003102{ yyval.a_ctype = ACT_EL_RLRANGE; ;
Lev Walkinff7dd142005-03-20 12:58:00 +00003103 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003104case 223:
3105#line 1807 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003106{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3107 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003108case 224:
3109#line 1808 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003110{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3111 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003112case 225:
3113#line 1812 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003114{
Lev Walkinceb20e72004-09-05 10:40:41 +00003115 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003116 ;
3117 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003118case 226:
3119#line 1815 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003120{
Lev Walkinceb20e72004-09-05 10:40:41 +00003121 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin1004aa92004-09-08 00:28:11 +00003122 ;
3123 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003124case 227:
3125#line 1821 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003126{
3127 yyval.a_value = asn1p_value_fromint(0);
3128 checkmem(yyval.a_value);
3129 yyval.a_value->type = ATV_FALSE;
3130 ;
3131 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003132case 228:
3133#line 1826 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003134{
3135 yyval.a_value = asn1p_value_fromint(1);
3136 checkmem(yyval.a_value);
3137 yyval.a_value->type = ATV_TRUE;
3138 ;
3139 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003140case 229:
3141#line 1831 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003142{
3143 yyval.a_value = yyvsp[0].a_value;
3144 ;
3145 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003146case 230:
3147#line 1834 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003148{
3149 yyval.a_value = yyvsp[0].a_value;
3150 ;
3151 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003152case 231:
3153#line 1837 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003154{
Lev Walkinf15320b2004-06-03 03:38:44 +00003155 asn1p_ref_t *ref;
3156 int ret;
3157 ref = asn1p_ref_new(yylineno);
3158 checkmem(ref);
3159 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3160 checkmem(ret == 0);
3161 yyval.a_value = asn1p_value_fromref(ref, 0);
3162 checkmem(yyval.a_value);
3163 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003164 ;
3165 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003166case 232:
3167#line 1851 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003168{
Lev Walkinc8092cb2005-02-18 16:34:21 +00003169 asn1p_ref_t *ref;
3170 int ret;
3171 ref = asn1p_ref_new(yylineno);
3172 checkmem(ref);
3173 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3174 checkmem(ret == 0);
3175 yyval.a_value = asn1p_value_fromref(ref, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003176 checkmem(yyval.a_value);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003177 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003178 ;
3179 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003180case 233:
3181#line 1865 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003182{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003183 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003184 ;
3185 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003186case 234:
3187#line 1868 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003188{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003189 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkine596bf02005-03-28 15:01:27 +00003190 ;
3191 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003192case 235:
3193#line 1874 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003194{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003195 yyval.a_constr = yyvsp[0].a_constr;
3196 ;
3197 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003198case 236:
3199#line 1877 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003200{
3201 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3202 ;
3203 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003204case 237:
3205#line 1883 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003206{
Lev Walkinf15320b2004-06-03 03:38:44 +00003207 yyval.a_constr = asn1p_constraint_new(yylineno);
3208 checkmem(yyval.a_constr);
3209 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkine596bf02005-03-28 15:01:27 +00003210 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003211 ;
3212 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003213case 238:
3214#line 1889 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003215{
Lev Walkinf15320b2004-06-03 03:38:44 +00003216 yyval.a_constr = asn1p_constraint_new(yylineno);
3217 checkmem(yyval.a_constr);
3218 yyval.a_constr->type = ACT_EL_VALUE;
3219 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3220 yyval.a_constr->presence = yyvsp[0].a_pres;
Lev Walkine596bf02005-03-28 15:01:27 +00003221 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003222 ;
3223 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003224case 239:
3225#line 1903 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003226{ yyval.a_pres = ACPRES_DEFAULT; ;
3227 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003228case 240:
3229#line 1904 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003230{ yyval.a_pres = yyvsp[0].a_pres; ;
3231 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003232case 241:
3233#line 1908 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003234{
Lev Walkinf15320b2004-06-03 03:38:44 +00003235 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003236 ;
3237 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003238case 242:
3239#line 1911 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00003240{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003241 yyval.a_pres = ACPRES_ABSENT;
Lev Walkinb36317c2005-08-12 10:09:10 +00003242 ;
3243 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003244case 243:
3245#line 1914 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00003246{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003247 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkinb36317c2005-08-12 10:09:10 +00003248 ;
3249 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003250case 244:
3251#line 1920 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003252{
3253 yyval.a_constr = yyvsp[0].a_constr;
3254 ;
3255 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003256case 245:
3257#line 1923 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003258{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003259 yyval.a_constr = yyvsp[0].a_constr;
3260 ;
3261 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003262case 246:
3263#line 1932 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003264{
Lev Walkinf15320b2004-06-03 03:38:44 +00003265 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3266 asn1p_constraint_t *ct;
3267 int ret;
3268 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3269 checkmem(ret == 0);
3270 ct = asn1p_constraint_new(yylineno);
3271 checkmem(yyval.a_constr);
3272 ct->type = ACT_EL_VALUE;
3273 ct->value = asn1p_value_fromref(ref, 0);
3274 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003275 ;
3276 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003277case 247:
3278#line 1947 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003279{
Lev Walkinf15320b2004-06-03 03:38:44 +00003280 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003281 ;
3282 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003283case 248:
3284#line 1953 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003285{
Lev Walkinf15320b2004-06-03 03:38:44 +00003286 yyval.a_constr = asn1p_constraint_new(yylineno);
3287 checkmem(yyval.a_constr);
3288 yyval.a_constr->type = ACT_EL_VALUE;
3289 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003290 ;
3291 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003292case 249:
3293#line 1959 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003294{
Lev Walkinf15320b2004-06-03 03:38:44 +00003295 asn1p_constraint_t *ct;
3296 ct = asn1p_constraint_new(yylineno);
3297 checkmem(ct);
3298 ct->type = ACT_EL_VALUE;
3299 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3300 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00003301 ;
3302 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003303case 250:
3304#line 1973 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003305{
Lev Walkinf15320b2004-06-03 03:38:44 +00003306 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3307 int ret;
3308 *p = '@';
3309 strcpy(p + 1, yyvsp[0].tv_str);
3310 yyval.a_ref = asn1p_ref_new(yylineno);
3311 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3312 checkmem(ret == 0);
3313 free(p);
3314 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003315 ;
3316 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003317case 251:
3318#line 1984 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003319{
Lev Walkinf15320b2004-06-03 03:38:44 +00003320 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3321 int ret;
3322 p[0] = '@';
3323 p[1] = '.';
3324 strcpy(p + 2, yyvsp[0].tv_str);
3325 yyval.a_ref = asn1p_ref_new(yylineno);
3326 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3327 checkmem(ret == 0);
3328 free(p);
3329 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003330 ;
3331 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003332case 252:
3333#line 2000 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003334{
Lev Walkinf15320b2004-06-03 03:38:44 +00003335 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003336 ;
3337 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003338case 253:
3339#line 2003 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003340{
Lev Walkinf15320b2004-06-03 03:38:44 +00003341 int l1 = strlen(yyvsp[-2].tv_str);
3342 int l3 = strlen(yyvsp[0].tv_str);
3343 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3344 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3345 yyval.tv_str[l1] = '.';
3346 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3347 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin1004aa92004-09-08 00:28:11 +00003348 ;
3349 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003350case 254:
3351#line 2021 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003352{
Lev Walkin9c974182004-09-15 11:59:51 +00003353 yyval.a_marker.flags = EM_NOMARK;
3354 yyval.a_marker.default_value = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00003355 ;
3356 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003357case 255:
3358#line 2025 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003359{ yyval.a_marker = yyvsp[0].a_marker; ;
Lev Walkinec208e62004-09-14 02:44:07 +00003360 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003361case 256:
3362#line 2029 "asn1p_y.y"
Lev Walkinec208e62004-09-14 02:44:07 +00003363{
Lev Walkin70853052005-11-26 11:21:55 +00003364 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
Lev Walkin9c974182004-09-15 11:59:51 +00003365 yyval.a_marker.default_value = 0;
Lev Walkinec208e62004-09-14 02:44:07 +00003366 ;
3367 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003368case 257:
3369#line 2033 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003370{
3371 yyval.a_marker.flags = EM_DEFAULT;
3372 yyval.a_marker.default_value = yyvsp[0].a_value;
3373 ;
3374 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003375case 258:
3376#line 2056 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003377{
Lev Walkinceb20e72004-09-05 10:40:41 +00003378 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003379 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003380 ;
3381 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003382case 259:
3383#line 2060 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003384{
Lev Walkine596bf02005-03-28 15:01:27 +00003385 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003386 ;
3387 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003388case 260:
3389#line 2066 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003390{
Lev Walkine596bf02005-03-28 15:01:27 +00003391 yyval.a_expr = asn1p_expr_new(yylineno);
3392 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003393 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3394 ;
3395 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003396case 261:
3397#line 2071 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003398{
3399 yyval.a_expr = yyvsp[-2].a_expr;
3400 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3401 ;
3402 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003403case 262:
3404#line 2078 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003405{
Lev Walkinceb20e72004-09-05 10:40:41 +00003406 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003407 checkmem(yyval.a_expr);
3408 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3409 yyval.a_expr->meta_type = AMT_VALUE;
3410 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003411 ;
3412 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003413case 263:
3414#line 2085 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003415{
3416 yyval.a_expr = asn1p_expr_new(yylineno);
3417 checkmem(yyval.a_expr);
3418 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3419 yyval.a_expr->meta_type = AMT_VALUE;
3420 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3421 yyval.a_expr->value = yyvsp[-1].a_value;
3422 ;
3423 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003424case 264:
3425#line 2093 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003426{
3427 yyval.a_expr = asn1p_expr_new(yylineno);
3428 checkmem(yyval.a_expr);
3429 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3430 yyval.a_expr->meta_type = AMT_VALUE;
3431 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3432 yyval.a_expr->value = yyvsp[-1].a_value;
3433 ;
3434 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003435case 265:
3436#line 2101 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003437{
3438 yyval.a_expr = asn1p_expr_new(yylineno);
3439 checkmem(yyval.a_expr);
3440 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3441 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkinf15320b2004-06-03 03:38:44 +00003442 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003443 ;
3444 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003445case 266:
3446#line 2108 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003447{
Lev Walkinceb20e72004-09-05 10:40:41 +00003448 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003449 checkmem(yyval.a_expr);
3450 yyval.a_expr->Identifier = strdup("...");
3451 checkmem(yyval.a_expr->Identifier);
3452 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3453 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003454 ;
3455 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003456case 267:
3457#line 2119 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003458{
3459 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3460 checkmem(yyval.a_value);
3461 ;
Lev Walkinb36317c2005-08-12 10:09:10 +00003462 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003463case 268:
3464#line 2123 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003465{
3466 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3467 checkmem(yyval.a_value);
3468 ;
Lev Walkinb36317c2005-08-12 10:09:10 +00003469 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003470case 269:
3471#line 2154 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003472{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3473 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003474case 270:
3475#line 2155 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003476{ yyval.a_tag = yyvsp[0].a_tag; ;
3477 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003478case 271:
3479#line 2159 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003480{
Lev Walkinc603f102005-01-23 09:51:44 +00003481 yyval.a_tag = yyvsp[-1].a_tag;
3482 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin1004aa92004-09-08 00:28:11 +00003483 ;
3484 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003485case 272:
3486#line 2166 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003487{
Lev Walkinc603f102005-01-23 09:51:44 +00003488 yyval.a_tag = yyvsp[-2].a_tag;
3489 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00003490 ;
3491 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003492case 273:
3493#line 2172 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003494{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00003495 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003496case 274:
3497#line 2173 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003498{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
Lev Walkin83cac2f2004-09-22 16:03:36 +00003499 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003500case 275:
3501#line 2174 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003502{ yyval.a_tag.tag_class = TC_APPLICATION; ;
Lev Walkin1e448d32005-03-24 14:26:38 +00003503 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003504case 276:
3505#line 2175 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003506{ yyval.a_tag.tag_class = TC_PRIVATE; ;
Lev Walkinb36317c2005-08-12 10:09:10 +00003507 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003508case 277:
3509#line 2179 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003510{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3511 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003512case 278:
3513#line 2180 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003514{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3515 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003516case 279:
3517#line 2181 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003518{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3519 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003520case 280:
3521#line 2185 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00003522{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003523 checkmem(yyvsp[0].tv_str);
Lev Walkinb36317c2005-08-12 10:09:10 +00003524 yyval.tv_str = yyvsp[0].tv_str;
3525 ;
3526 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003527case 281:
3528#line 2189 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003529{
3530 checkmem(yyvsp[0].tv_str);
3531 yyval.tv_str = yyvsp[0].tv_str;
3532 ;
3533 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003534case 282:
3535#line 2197 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003536{
3537 checkmem(yyvsp[0].tv_str);
3538 yyval.tv_str = yyvsp[0].tv_str;
3539 ;
3540 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003541case 283:
3542#line 2204 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003543{ yyval.tv_str = 0; ;
3544 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003545case 284:
3546#line 2205 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003547{
3548 yyval.tv_str = yyvsp[0].tv_str;
3549 ;
3550 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003551case 285:
3552#line 2211 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003553{
Lev Walkinceb20e72004-09-05 10:40:41 +00003554 checkmem(yyvsp[0].tv_str);
3555 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003556 ;
3557 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00003558}
3559 /* the action file gets copied in in place of this dollarsign */
3560#line 543 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00003561
3562 yyvsp -= yylen;
3563 yyssp -= yylen;
Lev Walkin1004aa92004-09-08 00:28:11 +00003564#ifdef YYLSP_NEEDED
3565 yylsp -= yylen;
3566#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003567
Lev Walkin1004aa92004-09-08 00:28:11 +00003568#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00003569 if (yydebug)
3570 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003571 short *ssp1 = yyss - 1;
3572 fprintf (stderr, "state stack now");
3573 while (ssp1 != yyssp)
3574 fprintf (stderr, " %d", *++ssp1);
3575 fprintf (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003576 }
3577#endif
3578
3579 *++yyvsp = yyval;
3580
Lev Walkin1004aa92004-09-08 00:28:11 +00003581#ifdef YYLSP_NEEDED
3582 yylsp++;
3583 if (yylen == 0)
3584 {
3585 yylsp->first_line = yylloc.first_line;
3586 yylsp->first_column = yylloc.first_column;
3587 yylsp->last_line = (yylsp-1)->last_line;
3588 yylsp->last_column = (yylsp-1)->last_column;
3589 yylsp->text = 0;
3590 }
3591 else
3592 {
3593 yylsp->last_line = (yylsp+yylen-1)->last_line;
3594 yylsp->last_column = (yylsp+yylen-1)->last_column;
3595 }
3596#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003597
Lev Walkin1004aa92004-09-08 00:28:11 +00003598 /* Now "shift" the result of the reduction.
3599 Determine what state that goes to,
3600 based on the state we popped back to
3601 and the rule number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003602
3603 yyn = yyr1[yyn];
3604
Lev Walkin1004aa92004-09-08 00:28:11 +00003605 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3606 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003607 yystate = yytable[yystate];
3608 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003609 yystate = yydefgoto[yyn - YYNTBASE];
Lev Walkinf15320b2004-06-03 03:38:44 +00003610
3611 goto yynewstate;
3612
Lev Walkin1004aa92004-09-08 00:28:11 +00003613yyerrlab: /* here on detecting error */
Lev Walkinf15320b2004-06-03 03:38:44 +00003614
Lev Walkin1004aa92004-09-08 00:28:11 +00003615 if (! yyerrstatus)
3616 /* If not already recovering from an error, report this error. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003617 {
3618 ++yynerrs;
Lev Walkin1004aa92004-09-08 00:28:11 +00003619
3620#ifdef YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003621 yyn = yypact[yystate];
3622
Lev Walkin1004aa92004-09-08 00:28:11 +00003623 if (yyn > YYFLAG && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003624 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003625 int size = 0;
3626 char *msg;
3627 int x, count;
Lev Walkinf15320b2004-06-03 03:38:44 +00003628
Lev Walkin1004aa92004-09-08 00:28:11 +00003629 count = 0;
3630 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3631 for (x = (yyn < 0 ? -yyn : 0);
Lev Walkin4a4bdf72005-06-07 21:43:32 +00003632 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
Lev Walkin1004aa92004-09-08 00:28:11 +00003633 if (yycheck[x + yyn] == x)
3634 size += strlen(yytname[x]) + 15, count++;
3635 msg = (char *) malloc(size + 15);
3636 if (msg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003637 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003638 strcpy(msg, "parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003639
Lev Walkin1004aa92004-09-08 00:28:11 +00003640 if (count < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003641 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003642 count = 0;
3643 for (x = (yyn < 0 ? -yyn : 0);
Lev Walkin4a4bdf72005-06-07 21:43:32 +00003644 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
Lev Walkin1004aa92004-09-08 00:28:11 +00003645 if (yycheck[x + yyn] == x)
Lev Walkinf15320b2004-06-03 03:38:44 +00003646 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003647 strcat(msg, count == 0 ? ", expecting `" : " or `");
3648 strcat(msg, yytname[x]);
3649 strcat(msg, "'");
3650 count++;
Lev Walkinf15320b2004-06-03 03:38:44 +00003651 }
3652 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003653 yyerror(msg);
3654 free(msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003655 }
3656 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003657 yyerror ("parse error; also virtual memory exceeded");
Lev Walkinf15320b2004-06-03 03:38:44 +00003658 }
3659 else
3660#endif /* YYERROR_VERBOSE */
Lev Walkin1004aa92004-09-08 00:28:11 +00003661 yyerror("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003662 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003663
Lev Walkinf15320b2004-06-03 03:38:44 +00003664 goto yyerrlab1;
Lev Walkin1004aa92004-09-08 00:28:11 +00003665yyerrlab1: /* here on error raised explicitly by an action */
Lev Walkinf15320b2004-06-03 03:38:44 +00003666
3667 if (yyerrstatus == 3)
3668 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003669 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003670
Lev Walkin1004aa92004-09-08 00:28:11 +00003671 /* return failure if at end of input */
Lev Walkinf15320b2004-06-03 03:38:44 +00003672 if (yychar == YYEOF)
Lev Walkin1004aa92004-09-08 00:28:11 +00003673 YYABORT;
Lev Walkinf15320b2004-06-03 03:38:44 +00003674
Lev Walkin1004aa92004-09-08 00:28:11 +00003675#if YYDEBUG != 0
3676 if (yydebug)
3677 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3678#endif
3679
Lev Walkinf15320b2004-06-03 03:38:44 +00003680 yychar = YYEMPTY;
3681 }
3682
Lev Walkin1004aa92004-09-08 00:28:11 +00003683 /* Else will try to reuse lookahead token
3684 after shifting the error token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003685
Lev Walkin1004aa92004-09-08 00:28:11 +00003686 yyerrstatus = 3; /* Each real token shifted decrements this */
Lev Walkinf15320b2004-06-03 03:38:44 +00003687
Lev Walkin1004aa92004-09-08 00:28:11 +00003688 goto yyerrhandle;
Lev Walkin459ab022004-09-07 10:39:09 +00003689
Lev Walkin1004aa92004-09-08 00:28:11 +00003690yyerrdefault: /* current state does not do anything special for the error token. */
Lev Walkin459ab022004-09-07 10:39:09 +00003691
Lev Walkin1004aa92004-09-08 00:28:11 +00003692#if 0
3693 /* This is wrong; only states that explicitly want error tokens
3694 should shift them. */
3695 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3696 if (yyn) goto yydefault;
Lev Walkinceb20e72004-09-05 10:40:41 +00003697#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003698
3699yyerrpop: /* pop the current state because it cannot handle the error token */
3700
3701 if (yyssp == yyss) YYABORT;
3702 yyvsp--;
3703 yystate = *--yyssp;
3704#ifdef YYLSP_NEEDED
3705 yylsp--;
3706#endif
3707
3708#if YYDEBUG != 0
3709 if (yydebug)
3710 {
3711 short *ssp1 = yyss - 1;
3712 fprintf (stderr, "Error: state stack now");
3713 while (ssp1 != yyssp)
3714 fprintf (stderr, " %d", *++ssp1);
3715 fprintf (stderr, "\n");
Lev Walkinceb20e72004-09-05 10:40:41 +00003716 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003717#endif
3718
3719yyerrhandle:
3720
3721 yyn = yypact[yystate];
3722 if (yyn == YYFLAG)
3723 goto yyerrdefault;
3724
3725 yyn += YYTERROR;
3726 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3727 goto yyerrdefault;
3728
3729 yyn = yytable[yyn];
3730 if (yyn < 0)
3731 {
3732 if (yyn == YYFLAG)
3733 goto yyerrpop;
3734 yyn = -yyn;
3735 goto yyreduce;
3736 }
3737 else if (yyn == 0)
3738 goto yyerrpop;
Lev Walkinf15320b2004-06-03 03:38:44 +00003739
3740 if (yyn == YYFINAL)
3741 YYACCEPT;
3742
Lev Walkin1004aa92004-09-08 00:28:11 +00003743#if YYDEBUG != 0
3744 if (yydebug)
3745 fprintf(stderr, "Shifting error token, ");
3746#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003747
3748 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00003749#ifdef YYLSP_NEEDED
3750 *++yylsp = yylloc;
3751#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003752
3753 yystate = yyn;
3754 goto yynewstate;
3755
Lev Walkin1004aa92004-09-08 00:28:11 +00003756 yyacceptlab:
3757 /* YYACCEPT comes here. */
3758 if (yyfree_stacks)
3759 {
3760 free (yyss);
3761 free (yyvs);
3762#ifdef YYLSP_NEEDED
3763 free (yyls);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003764#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003765 }
3766 return 0;
Lev Walkin459ab022004-09-07 10:39:09 +00003767
Lev Walkin1004aa92004-09-08 00:28:11 +00003768 yyabortlab:
3769 /* YYABORT comes here. */
3770 if (yyfree_stacks)
3771 {
3772 free (yyss);
3773 free (yyvs);
3774#ifdef YYLSP_NEEDED
3775 free (yyls);
Lev Walkin459ab022004-09-07 10:39:09 +00003776#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003777 }
3778 return 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003779}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003780#line 2217 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00003781
3782
3783
3784/*
3785 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3786 */
3787static asn1p_value_t *
3788_convert_bitstring2binary(char *str, int base) {
3789 asn1p_value_t *val;
3790 int slen;
3791 int memlen;
3792 int baselen;
3793 int bits;
3794 uint8_t *binary_vector;
3795 uint8_t *bv_ptr;
3796 uint8_t cur_val;
3797
3798 assert(str);
3799 assert(str[0] == '\'');
3800
3801 switch(base) {
3802 case 'B':
3803 baselen = 1;
3804 break;
3805 case 'H':
3806 baselen = 4;
3807 break;
3808 default:
3809 assert(base == 'B' || base == 'H');
3810 errno = EINVAL;
3811 return NULL;
3812 }
3813
3814 slen = strlen(str);
3815 assert(str[slen - 1] == base);
3816 assert(str[slen - 2] == '\'');
3817
3818 memlen = slen / (8 / baselen); /* Conservative estimate */
3819
3820 bv_ptr = binary_vector = malloc(memlen + 1);
3821 if(bv_ptr == NULL)
3822 /* ENOMEM */
3823 return NULL;
3824
3825 cur_val = 0;
3826 bits = 0;
3827 while(*(++str) != '\'') {
3828 switch(baselen) {
3829 case 1:
3830 switch(*str) {
3831 case '1':
3832 cur_val |= 1 << (7 - (bits % 8));
3833 case '0':
3834 break;
3835 default:
3836 assert(!"_y UNREACH1");
3837 case ' ': case '\r': case '\n':
3838 continue;
3839 }
3840 break;
3841 case 4:
3842 switch(*str) {
3843 case '0': case '1': case '2': case '3': case '4':
3844 case '5': case '6': case '7': case '8': case '9':
3845 cur_val |= (*str - '0') << (4 - (bits % 8));
3846 break;
3847 case 'A': case 'B': case 'C':
3848 case 'D': case 'E': case 'F':
3849 cur_val |= ((*str - 'A') + 10)
3850 << (4 - (bits % 8));
3851 break;
3852 default:
3853 assert(!"_y UNREACH2");
3854 case ' ': case '\r': case '\n':
3855 continue;
3856 }
3857 break;
3858 }
3859
3860 bits += baselen;
3861 if((bits % 8) == 0) {
3862 *bv_ptr++ = cur_val;
3863 cur_val = 0;
3864 }
3865 }
3866
3867 *bv_ptr = cur_val;
3868 assert((bv_ptr - binary_vector) <= memlen);
3869
3870 val = asn1p_value_frombits(binary_vector, bits, 0);
3871 if(val == NULL) {
3872 free(binary_vector);
3873 }
3874
3875 return val;
3876}
3877
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003878/*
3879 * For unnamed types (used in old X.208 compliant modules)
3880 * generate some sort of interim names, to not to force human being to fix
3881 * the specification's compliance to modern ASN.1 standards.
3882 */
3883static void
3884_fixup_anonymous_identifier(asn1p_expr_t *expr) {
3885 char *p;
3886 assert(expr->Identifier == 0);
3887
3888 /*
3889 * Try to figure out the type name
3890 * without going too much into details
3891 */
3892 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
3893 if(expr->reference && expr->reference->comp_count > 0)
3894 expr->Identifier = expr->reference->components[0].name;
3895
3896 fprintf(stderr,
3897 "WARNING: Line %d: expected lower-case member identifier, "
3898 "found an unnamed %s.\n"
3899 "WARNING: Obsolete X.208 syntax detected, "
3900 "please give the member a name.\n",
3901 yylineno, expr->Identifier ? expr->Identifier : "type");
3902
3903 if(!expr->Identifier)
3904 expr->Identifier = "unnamed";
3905 expr->Identifier = strdup(expr->Identifier);
3906 assert(expr->Identifier);
3907 /* Make a lowercase identifier from the type name */
3908 for(p = expr->Identifier; *p; p++) {
3909 switch(*p) {
3910 case 'A' ... 'Z': *p += 32; break;
3911 case ' ': *p = '_'; break;
3912 case '-': *p = '_'; break;
3913 }
3914 }
3915 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
3916 "Name clash may occur later.\n",
3917 expr->Identifier);
3918}
3919
Lev Walkinf15320b2004-06-03 03:38:44 +00003920extern char *asn1p_text;
3921
3922int
3923yyerror(const char *msg) {
3924 fprintf(stderr,
3925 "ASN.1 grammar parse error "
3926 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00003927 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003928 return -1;
3929}
3930
3931