blob: 385ded7da7e050a89e67a1e57524baefcc0bcb44 [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 Walkin1db91132006-03-09 09:11:53 +0000224#define YYFINAL 442
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,
Lev Walkin1db91132006-03-09 09:11:53 +0000284 397, 399, 401, 403, 405, 409, 413, 415, 420, 424,
285 425, 429, 431, 433, 435, 437, 439, 441, 443, 445,
286 447, 451, 453, 455, 457, 459, 462, 464, 466, 468,
287 470, 473, 476, 478, 480, 483, 486, 488, 490, 492,
288 494, 496, 499, 501, 504, 506, 508, 510, 512, 514,
289 516, 518, 520, 522, 524, 526, 528, 530, 532, 534,
290 536, 538, 540, 542, 543, 545, 547, 552, 556, 561,
291 563, 567, 573, 575, 579, 583, 587, 591, 596, 600,
292 602, 604, 608, 612, 616, 620, 622, 624, 625, 631,
293 633, 636, 639, 643, 645, 647, 649, 651, 653, 655,
294 657, 659, 663, 669, 671, 675, 677, 681, 682, 684,
295 686, 688, 690, 692, 694, 698, 703, 705, 709, 712,
296 716, 718, 722, 723, 725, 727, 730, 733, 737, 739,
297 743, 745, 750, 755, 757, 759, 761, 763, 764, 766,
298 769, 774, 775, 777, 779, 781, 782, 784, 786, 788,
299 790, 792, 793, 795
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,
Lev Walkin1db91132006-03-09 09:11:53 +0000329 0, 16, 173, 210, 0, 16, 174, 210, 0, 15,
330 173, 210, 0, 15, 164, 210, 0, 15, 174, 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,
Lev Walkin1db91132006-03-09 09:11:53 +0000344 16, 0, 14, 0, 224, 143, 3, 176, 0, 224,
345 111, 176, 0, 0, 105, 177, 180, 0, 65, 0,
346 47, 0, 88, 0, 5, 0, 7, 0, 179, 0,
347 215, 0, 178, 0, 224, 0, 221, 113, 224, 0,
348 6, 0, 10, 0, 11, 0, 4, 0, 180, 4,
349 0, 26, 0, 65, 0, 78, 0, 182, 0, 69,
350 83, 0, 67, 53, 0, 79, 0, 46, 0, 38,
351 73, 0, 28, 83, 0, 93, 0, 49, 0, 184,
352 0, 60, 0, 42, 0, 24, 83, 0, 181, 0,
353 182, 212, 0, 25, 0, 50, 0, 51, 0, 52,
354 0, 61, 0, 66, 0, 76, 0, 85, 0, 87,
355 0, 92, 0, 94, 0, 95, 0, 96, 0, 68,
356 0, 101, 0, 102, 0, 99, 0, 100, 0, 98,
357 0, 0, 189, 0, 190, 0, 82, 107, 191, 108,
358 0, 107, 191, 108, 0, 190, 107, 191, 108, 0,
359 192, 0, 192, 110, 104, 0, 192, 110, 104, 110,
360 192, 0, 193, 0, 19, 98, 193, 0, 192, 185,
361 193, 0, 192, 186, 193, 0, 193, 187, 193, 0,
362 196, 107, 191, 108, 0, 107, 191, 108, 0, 197,
363 0, 198, 0, 197, 195, 197, 0, 63, 195, 197,
364 0, 197, 195, 62, 0, 63, 195, 62, 0, 204,
365 0, 199, 0, 0, 33, 27, 105, 194, 180, 0,
366 103, 0, 103, 114, 0, 114, 103, 0, 114, 103,
367 114, 0, 82, 0, 48, 0, 47, 0, 88, 0,
368 215, 0, 179, 0, 224, 0, 221, 0, 97, 31,
369 190, 0, 97, 32, 105, 200, 106, 0, 201, 0,
370 200, 110, 201, 0, 104, 0, 224, 188, 202, 0,
371 0, 203, 0, 75, 0, 17, 0, 71, 0, 205,
372 0, 206, 0, 105, 221, 106, 0, 205, 105, 207,
373 106, 0, 208, 0, 207, 110, 208, 0, 115, 209,
374 0, 115, 113, 209, 0, 224, 0, 209, 113, 224,
375 0, 0, 211, 0, 71, 0, 35, 176, 0, 105,
376 106, 0, 105, 213, 106, 0, 214, 0, 213, 110,
377 214, 0, 224, 0, 224, 107, 215, 108, 0, 224,
378 107, 178, 108, 0, 215, 0, 104, 0, 9, 0,
379 12, 0, 0, 217, 0, 218, 220, 0, 116, 219,
380 9, 117, 0, 0, 91, 0, 21, 0, 77, 0,
381 0, 54, 0, 43, 0, 13, 0, 14, 0, 14,
382 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,
Lev Walkin1db91132006-03-09 09:11:53 +0000398 983, 994, 1004, 1015, 1025, 1036, 1047, 1049, 1054, 1058,
399 1063, 1068, 1074, 1078, 1089, 1098, 1107, 1118, 1140, 1147,
400 1166, 1170, 1176, 1182, 1188, 1198, 1208, 1214, 1228, 1252,
401 1259, 1273, 1282, 1292, 1302, 1312, 1320, 1341, 1350, 1359,
402 1360, 1362, 1369, 1376, 1382, 1386, 1392, 1412, 1422, 1430,
403 1430, 1435, 1440, 1445, 1450, 1454, 1458, 1461, 1464, 1469,
404 1481, 1498, 1503, 1508, 1541, 1551, 1565, 1567, 1568, 1569,
405 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1584,
406 1586, 1587, 1590, 1597, 1609, 1611, 1615, 1619, 1620, 1621,
407 1622, 1623, 1627, 1628, 1629, 1630, 1634, 1635, 1642, 1642,
408 1643, 1643, 1644, 1646, 1648, 1653, 1657, 1666, 1670, 1675,
409 1679, 1685, 1695, 1699, 1702, 1705, 1708, 1713, 1722, 1730,
410 1736, 1742, 1749, 1757, 1765, 1774, 1777, 1780, 1781, 1791,
411 1793, 1794, 1795, 1798, 1802, 1807, 1813, 1818, 1821, 1824,
412 1837, 1851, 1855, 1860, 1864, 1869, 1876, 1889, 1891, 1894,
413 1898, 1901, 1906, 1910, 1918, 1933, 1939, 1946, 1959, 1971,
414 1986, 1990, 2007, 2012, 2015, 2020, 2042, 2047, 2052, 2058,
415 2064, 2072, 2080, 2088, 2095, 2105, 2110, 2140, 2142, 2145,
416 2152, 2158, 2160, 2161, 2162, 2165, 2167, 2168, 2171, 2176,
417 2183, 2190, 2192, 2197
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,
Lev Walkin1db91132006-03-09 09:11:53 +0000485 171, 172, 172, 173, 173, 173, 174, 175, 176, 177,
486 176, 176, 176, 176, 176, 176, 176, 176, 176, 178,
487 178, 179, 179, 179, 180, 180, 181, 181, 181, 181,
488 181, 181, 181, 181, 181, 181, 181, 181, 181, 182,
489 182, 182, 183, 183, 184, 184, 184, 184, 184, 184,
490 184, 184, 184, 184, 184, 184, 184, 184, 185, 185,
491 186, 186, 187, 188, 188, 189, 189, 190, 190, 191,
492 191, 191, 192, 192, 192, 192, 192, 193, 193, 193,
493 193, 193, 193, 193, 193, 193, 193, 194, 193, 195,
494 195, 195, 195, 196, 196, 197, 197, 197, 197, 197,
495 198, 199, 199, 200, 200, 201, 201, 202, 202, 203,
496 203, 203, 204, 204, 205, 206, 207, 207, 208, 208,
497 209, 209, 210, 210, 211, 211, 212, 212, 213, 213,
498 214, 214, 214, 214, 214, 215, 215, 216, 216, 217,
499 218, 219, 219, 219, 219, 220, 220, 220, 221, 221,
500 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,
Lev Walkin1db91132006-03-09 09:11:53 +0000517 1, 1, 1, 1, 3, 3, 1, 4, 3, 0,
518 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
519 3, 1, 1, 1, 1, 2, 1, 1, 1, 1,
520 2, 2, 1, 1, 2, 2, 1, 1, 1, 1,
521 1, 2, 1, 2, 1, 1, 1, 1, 1, 1,
Lev Walkin1004aa92004-09-08 00:28:11 +0000522 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin1db91132006-03-09 09:11:53 +0000523 1, 1, 1, 0, 1, 1, 4, 3, 4, 1,
524 3, 5, 1, 3, 3, 3, 3, 4, 3, 1,
525 1, 3, 3, 3, 3, 1, 1, 0, 5, 1,
526 2, 2, 3, 1, 1, 1, 1, 1, 1, 1,
527 1, 3, 5, 1, 3, 1, 3, 0, 1, 1,
528 1, 1, 1, 1, 3, 4, 1, 3, 2, 3,
529 1, 3, 0, 1, 1, 2, 2, 3, 1, 3,
530 1, 4, 4, 1, 1, 1, 1, 0, 1, 2,
531 4, 0, 1, 1, 1, 0, 1, 1, 1, 1,
532 1, 0, 1, 1
Lev Walkin1004aa92004-09-08 00:28:11 +0000533};
534
535static const short yydefact[] = { 0,
Lev Walkin1db91132006-03-09 09:11:53 +0000536 279, 280, 1, 2, 5, 3, 0, 0, 6, 284,
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 Walkin1db91132006-03-09 09:11:53 +0000539 18, 21, 19, 0, 17, 12, 23, 175, 0, 0,
540 176, 177, 178, 0, 179, 180, 188, 181, 182, 183,
541 184, 185, 186, 187, 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 Walkin1db91132006-03-09 09:11:53 +0000544 26, 268, 122, 281, 0, 157, 0, 0, 171, 164,
545 168, 170, 158, 0, 0, 159, 163, 167, 0, 0,
546 57, 58, 160, 169, 126, 0, 33, 48, 47, 0,
547 0, 35, 38, 0, 0, 0, 0, 272, 60, 59,
548 109, 269, 276, 0, 172, 166, 165, 162, 161, 0,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000549 62, 0, 64, 0, 0, 0, 51, 53, 39, 43,
Lev Walkin1db91132006-03-09 09:11:53 +0000550 45, 0, 274, 275, 273, 0, 0, 194, 278, 277,
551 270, 123, 125, 0, 0, 0, 0, 55, 132, 133,
552 127, 128, 130, 124, 145, 152, 146, 266, 153, 154,
553 267, 143, 142, 144, 140, 138, 149, 147, 148, 0,
554 150, 40, 41, 268, 268, 0, 88, 0, 122, 281,
555 117, 0, 0, 194, 194, 110, 120, 173, 160, 111,
556 0, 0, 0, 108, 195, 196, 268, 63, 67, 66,
557 65, 0, 0, 0, 0, 0, 137, 134, 0, 255,
558 253, 253, 253, 90, 254, 86, 253, 253, 97, 0,
559 271, 0, 268, 0, 268, 0, 268, 0, 0, 174,
560 268, 0, 0, 0, 226, 225, 0, 224, 227, 0,
561 0, 0, 229, 0, 200, 203, 0, 210, 211, 217,
562 216, 243, 244, 228, 231, 230, 0, 61, 155, 56,
563 129, 141, 151, 139, 256, 95, 0, 94, 96, 87,
564 253, 92, 93, 0, 85, 98, 89, 0, 105, 0,
565 80, 83, 84, 268, 121, 0, 0, 73, 74, 79,
566 253, 268, 282, 0, 282, 265, 257, 0, 259, 264,
567 261, 0, 68, 70, 71, 0, 0, 0, 220, 0,
568 0, 0, 0, 0, 0, 198, 191, 192, 189, 190,
569 0, 0, 0, 193, 0, 0, 0, 0, 0, 156,
570 135, 136, 91, 0, 118, 0, 112, 268, 82, 268,
571 113, 268, 77, 253, 268, 283, 114, 268, 258, 0,
572 0, 119, 268, 197, 204, 218, 221, 222, 215, 213,
573 232, 0, 245, 209, 201, 205, 206, 207, 0, 214,
574 212, 0, 0, 247, 199, 99, 106, 107, 150, 81,
575 78, 75, 76, 109, 109, 260, 0, 0, 69, 0,
576 223, 236, 0, 234, 194, 0, 208, 0, 249, 251,
577 246, 0, 0, 115, 116, 263, 262, 219, 233, 0,
578 238, 202, 250, 0, 248, 103, 0, 101, 104, 131,
579 235, 241, 242, 240, 237, 239, 252, 100, 102, 0,
580 0, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000581};
582
Lev Walkin1db91132006-03-09 09:11:53 +0000583static const short yydefgoto[] = { 440,
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,
Lev Walkin1db91132006-03-09 09:11:53 +0000586 69, 70, 60, 212, 100, 61, 130, 131, 312, 313,
587 297, 298, 299, 290, 291, 119, 281, 186, 187, 285,
588 286, 413, 427, 428, 300, 301, 147, 148, 196, 101,
589 161, 162, 429, 163, 222, 223, 62, 176, 214, 177,
590 253, 270, 102, 103, 200, 104, 332, 333, 335, 204,
591 205, 206, 254, 255, 256, 400, 321, 257, 258, 259,
592 260, 403, 404, 435, 436, 261, 262, 263, 383, 384,
593 409, 224, 225, 240, 308, 309, 264, 121, 122, 123,
594 146, 151, 265, 105, 355, 266
Lev Walkin1004aa92004-09-08 00:28:11 +0000595};
596
Lev Walkin1db91132006-03-09 09:11:53 +0000597static const short yypact[] = { 258,
598-32768,-32768, 258,-32768, -19,-32768, 51, 103,-32768,-32768,
599-32768,-32768, 69,-32768, 39, 87,-32768,-32768, 143, 114,
600 73, 105, 212, 183, 277, 87,-32768, 174,-32768,-32768,
601-32768,-32768,-32768, 262,-32768,-32768, 429,-32768, 279, 42,
602-32768,-32768,-32768, 211,-32768,-32768,-32768,-32768,-32768,-32768,
603-32768,-32768,-32768,-32768, 254, 429,-32768,-32768,-32768,-32768,
604-32768,-32768,-32768, 354, 581,-32768, 188,-32768, 167,-32768,
605 213,-32768,-32768, 38,-32768, -28,-32768, 219,-32768,-32768,
606-32768, -9, 216,-32768, 251,-32768, 252, 264,-32768,-32768,
607-32768,-32768,-32768, 289, 260,-32768,-32768,-32768, 656, 341,
608-32768,-32768,-32768,-32768, 233, 345,-32768,-32768,-32768, 247,
609 243,-32768,-32768, 258, 247, 244, 246, 4,-32768,-32768,
610-32768,-32768, 59, 247,-32768,-32768,-32768,-32768,-32768, -22,
611-32768, 241, 248, 250, 301, 158,-32768,-32768, -19,-32768,
612-32768, 276,-32768,-32768,-32768, 349, 506, -54,-32768,-32768,
613-32768,-32768,-32768, 357, 656, 353, 247,-32768,-32768,-32768,
614 256,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
615-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 257,
616 253,-32768,-32768, 28, 12, 97,-32768, 255, -73, 266,
617 326, 268, 304, 106, 122,-32768,-32768,-32768, 271,-32768,
618 272, 274, 168,-32768,-32768, 280, 267,-32768,-32768,-32768,
619-32768, 380, 290, 380, 353, 158,-32768,-32768, 158,-32768,
620 62, 27, 62,-32768,-32768, 296, 27, 62, 288, 276,
621-32768, 361, 8, 298, 15, 319, 15, 320, 56,-32768,
622 7, 168, 293, 366,-32768,-32768, 135,-32768,-32768, 299,
623 258, 168,-32768, 286, 200, 297, 291, 135,-32768,-32768,
624-32768, 292,-32768,-32768,-32768,-32768, 168,-32768,-32768, 395,
625-32768, 395,-32768,-32768,-32768,-32768, 311,-32768,-32768,-32768,
626 62,-32768,-32768, 318,-32768,-32768,-32768, 353, 300, 100,
627-32768,-32768,-32768, 267,-32768, 337, 302, 306,-32768,-32768,
628 62, 267, 353, 303, 353,-32768,-32768, 141,-32768,-32768,
629 317, 147,-32768,-32768,-32768, 310, 231, 305, 312, 308,
630 186, 321, 322, 323, 327,-32768,-32768,-32768,-32768,-32768,
631 330, 231, 231,-32768, 231, 168, 278, 316, 328,-32768,
632-32768,-32768,-32768, 333,-32768, 295,-32768, 8,-32768, 267,
633-32768, 2,-32768, 62, 267,-32768,-32768, 267,-32768, 81,
634 295,-32768, 7,-32768,-32768,-32768,-32768, 331,-32768,-32768,
635 280, 31,-32768,-32768, 315,-32768,-32768,-32768, 332,-32768,
636-32768, 9, 148,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
637-32768,-32768,-32768,-32768,-32768,-32768, 336, 343,-32768, 380,
638-32768,-32768, 156,-32768, -54, 168,-32768, 353, 339,-32768,
639-32768, 316, 139,-32768,-32768,-32768,-32768, 395,-32768, 31,
640 5, 221, 339, 353,-32768,-32768, 20,-32768,-32768,-32768,
641-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 453,
642 455,-32768
Lev Walkin1004aa92004-09-08 00:28:11 +0000643};
644
645static const short yypgoto[] = {-32768,
Lev Walkin1db91132006-03-09 09:11:53 +0000646-32768, 454,-32768, 324,-32768, 443,-32768,-32768, 432,-32768,
647-32768, 404,-32768,-32768,-32768,-32768, 387,-32768, 347,-32768,
648-32768, 355,-32768,-32768, 399,-32768,-32768, 313,-32768, 104,
649 229,-32768, 118,-32768, 123,-32768,-32768,-32768, 242,-32768,
650-32768,-32768,-32768, 47, -228, -80,-32768, -62,-32768, -138,
651-32768, 263,-32768, -344, 307, 309,-32768, -145,-32768, -317,
652 -26, -211, -68, 335,-32768, 29,-32768,-32768,-32768, -187,
653-32768, 153, -194, 71, -133,-32768, 220,-32768, -267,-32768,
654-32768,-32768, 63,-32768,-32768,-32768,-32768,-32768,-32768, 72,
655 78, -209,-32768,-32768,-32768, 127, -125, -172,-32768,-32768,
656-32768,-32768, 1,-32768, 184, -7
Lev Walkin1004aa92004-09-08 00:28:11 +0000657};
658
659
Lev Walkin1db91132006-03-09 09:11:53 +0000660#define YYLAST 752
Lev Walkin1004aa92004-09-08 00:28:11 +0000661
662
663static const short yytable[] = { 15,
Lev Walkin1db91132006-03-09 09:11:53 +0000664 5, 120, 272, 5, 292, 15, 236, 238, 197, 10,
665 179, 276, 278, 279, 10, 10, 10, 282, 283, 114,
666 117, 432, 10, 426, 143, 217, 218, 202, 387, 65,
667 132, -279, 72, 296, 159, 160, 79, 64, 10, 124,
668 71, 217, 218, 397, 78, 10, 296, 316, 65, 10,
669 1, 2, 203, 370, 1, 2, 64, 325, 10, 11,
670 67, 219, 219, 10, 168, 63, 79, 171, 430, 381,
671 274, 343, 339, 275, 78, 433, 10, 11, 198, 434,
672 144, 115, 430, 154, 63, 7, 132, 155, 10, 168,
673 179, 353, 171, 179, 145, 295, 219, 220, 220, 133,
674 20, 149, 72, 221, 226, 289, 118, 79, 21, 178,
675 71, 289, 150, 310, 139, 78, 153, 118, 289, 292,
676 -72, 408, 118, 118, 152, 438, 268, 118, 181, 22,
677 118, 23, 220, -253, 402, 164, 180, -253, 16, 277,
678 24, 379, 426, 118, 393, 19, 112, 201, 209, 211,
679 68, 28, 293, 159, 160, 133, 12, 210, 30, 306,
680 314, 307, 165, 166, 167, 10, 168, 169, 170, 171,
681 1, 2, 29, 166, 17, 10, 168, 169, 170, 171,
682 1, 2, 394, 365, 306, 395, 243, 202, 418, 178,
683 31, 166, 178, 10, 168, 169, 170, 171, 376, 377,
684 244, 378, 229, 202, 172, 347, 230, 273, 181, 348,
685 235, 181, 203, 349, 245, 246, 180, 421, 10, 180,
686 388, 354, 173, 1, 2, 294, 237, 302, 203, 302,
687 247, 311, 245, 315, 310, 398, 166, 319, 10, 168,
688 169, 170, 171, 1, 2, 174, 359, 369, 320, 248,
689 360, 324, 362, 411, 10, 249, 363, 412, 73, 1,
690 2, 419, 175, 244, 250, 420, 32, 293, 33, 391,
691 1, 2, 251, 249, 252, 109, 110, 245, 246, 34,
692 345, 36, 314, 166, 37, 10, 168, 169, 170, 171,
693 184, 185, 66, 247, 80, 356, 108, 356, 327, 328,
694 329, 330, 10, 168, 159, 160, 171, 1, 2, 331,
695 83, 84, 248, 1, 2, 159, 160, 111, 249, 327,
696 328, 329, 330, 116, 245, 341, 342, 250, 124, 322,
697 323, 414, 415, 125, 126, 251, 127, 252, 389, 380,
698 294, 128, 129, 134, 302, 135, 180, 136, 138, 141,
699 142, 156, 311, 389, 158, 315, 82, 188, 157, 207,
700 10, 180, 232, 216, 405, 249, 83, 84, 213, 215,
701 -280, 231, 233, 234, 410, 239, 241, 85, 38, 86,
702 242, 87, 118, 269, 284, 280, 267, 288, 303, 305,
703 317, 88, 318, 326, 334, 89, 338, 336, 340, 90,
704 410, 344, 91, 41, 42, 43, 350, 351, 357, 366,
705 368, 346, 405, 92, 45, 352, 437, 364, 93, 46,
706 94, 47, 95, 361, 406, 367, 372, 203, 373, 48,
707 382, 96, 97, 375, 374, 385, 10, 386, 49, 407,
708 50, 1, 2, 416, 401, 51, 98, 52, 53, 54,
709 417, 424, 441, 38, 442, 18, 6, 35, 99, 81,
710 113, 140, 182, 106, 137, 304, 399, 208, 39, 392,
711 390, 287, 40, 439, 371, 271, 422, 337, 41, 42,
712 43, 199, 431, 425, 44, 423, 396, 0, 358, 45,
713 0, 227, 0, 228, 46, 0, 47, 0, 0, 0,
714 0, 0, 0, 0, 48, 0, 0, 0, 0, 0,
715 0, 0, 0, 49, 0, 50, 0, 0, 189, 190,
716 51, 0, 52, 53, 54, 191, 0, 0, 0, 85,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000717 38, 86, 0, 87, 192, 0, 0, 0, 0, 0,
Lev Walkinef625402005-09-05 05:17:57 +0000718 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
719 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000720 0, 0, 0, 193, 0, 92, 45, 0, 0, 0,
Lev Walkinef625402005-09-05 05:17:57 +0000721 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
Lev Walkin9c2285a2006-03-09 08:49:26 +0000722 0, 48, 0, 96, 97, 194, 195, 0, 0, 0,
Lev Walkinef625402005-09-05 05:17:57 +0000723 49, 0, 50, 83, 84, 0, 0, 51, 98, 52,
724 53, 54, 0, 0, 85, 38, 86, 0, 87, 0,
725 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
726 0, 0, 89, 0, 0, 0, 90, 0, 0, 91,
727 41, 42, 43, 0, 0, 0, 0, 0, 0, 0,
728 92, 45, 0, 0, 0, 93, 46, 94, 47, 95,
729 0, 0, 0, 0, 0, 0, 48, 0, 96, 97,
730 0, 0, 0, 0, 0, 49, 0, 50, 1, 2,
731 0, 0, 51, 98, 52, 53, 54, 0, 0, 85,
732 38, 86, 0, 87, 0, 0, 0, 0, 0, 0,
733 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
734 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
735 0, 0, 0, 0, 0, 92, 45, 0, 0, 0,
736 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
737 0, 48, 0, 96, 97, 0, 0, 0, 0, 0,
738 49, 0, 50, 0, 0, 0, 0, 51, 98, 52,
739 53, 54
Lev Walkin1004aa92004-09-08 00:28:11 +0000740};
741
742static const short yycheck[] = { 7,
Lev Walkin1db91132006-03-09 09:11:53 +0000743 0, 82, 214, 3, 233, 13, 194, 195, 147, 8,
744 136, 221, 222, 223, 8, 8, 8, 227, 228, 48,
745 30, 17, 8, 4, 21, 14, 15, 82, 346, 37,
746 99, 105, 40, 32, 15, 16, 44, 37, 8, 113,
747 40, 14, 15, 361, 44, 8, 32, 242, 56, 8,
748 13, 14, 107, 321, 13, 14, 56, 252, 8, 9,
749 19, 35, 35, 8, 9, 37, 74, 12, 413, 337,
750 216, 281, 267, 219, 74, 71, 8, 9, 147, 75,
751 77, 110, 427, 106, 56, 105, 155, 110, 8, 9,
752 216, 301, 12, 219, 91, 234, 35, 71, 71, 99,
753 14, 43, 110, 184, 185, 104, 116, 115, 22, 136,
754 110, 104, 54, 239, 114, 115, 124, 116, 104, 348,
755 106, 113, 116, 116, 124, 106, 207, 116, 136, 43,
756 116, 45, 71, 106, 104, 135, 136, 110, 36, 113,
757 54, 336, 4, 116, 354, 107, 109, 147, 156, 157,
758 109, 9, 233, 15, 16, 155, 106, 157, 86, 104,
759 241, 106, 5, 6, 7, 8, 9, 10, 11, 12,
760 13, 14, 59, 6, 106, 8, 9, 10, 11, 12,
761 13, 14, 355, 317, 104, 358, 19, 82, 400, 216,
762 86, 6, 219, 8, 9, 10, 11, 12, 332, 333,
763 33, 335, 106, 82, 47, 106, 110, 215, 216, 110,
764 105, 219, 107, 294, 47, 48, 216, 405, 8, 219,
765 346, 302, 65, 13, 14, 233, 105, 235, 107, 237,
766 63, 239, 47, 241, 360, 361, 6, 103, 8, 9,
767 10, 11, 12, 13, 14, 88, 106, 62, 114, 82,
768 110, 251, 106, 106, 8, 88, 110, 110, 48, 13,
769 14, 106, 105, 33, 97, 110, 55, 348, 86, 350,
770 13, 14, 105, 88, 107, 109, 110, 47, 48, 3,
771 288, 108, 363, 6, 23, 8, 9, 10, 11, 12,
772 15, 16, 14, 63, 41, 303, 109, 305, 99, 100,
773 101, 102, 8, 9, 15, 16, 12, 13, 14, 110,
774 13, 14, 82, 13, 14, 15, 16, 105, 88, 99,
775 100, 101, 102, 105, 47, 15, 16, 97, 113, 31,
776 32, 394, 395, 83, 83, 105, 73, 107, 346, 62,
777 348, 53, 83, 3, 352, 113, 346, 3, 106, 106,
778 105, 111, 360, 361, 105, 363, 3, 9, 111, 3,
779 8, 361, 37, 111, 372, 88, 13, 14, 113, 113,
780 105, 117, 105, 70, 382, 105, 105, 24, 25, 26,
781 107, 28, 116, 4, 97, 90, 107, 27, 70, 70,
782 98, 38, 27, 108, 98, 42, 105, 107, 4, 46,
783 408, 84, 49, 50, 51, 52, 70, 106, 106, 105,
784 103, 112, 420, 60, 61, 110, 424, 108, 65, 66,
785 67, 68, 69, 107, 110, 114, 105, 107, 106, 76,
786 115, 78, 79, 104, 108, 108, 8, 105, 85, 108,
787 87, 13, 14, 108, 114, 92, 93, 94, 95, 96,
788 108, 113, 0, 25, 0, 13, 3, 26, 105, 56,
789 74, 115, 139, 65, 110, 237, 363, 155, 40, 352,
790 348, 230, 44, 427, 322, 213, 406, 258, 50, 51,
791 52, 147, 420, 412, 56, 408, 360, -1, 305, 61,
792 -1, 185, -1, 185, 66, -1, 68, -1, -1, -1,
793 -1, -1, -1, -1, 76, -1, -1, -1, -1, -1,
794 -1, -1, -1, 85, -1, 87, -1, -1, 13, 14,
795 92, -1, 94, 95, 96, 20, -1, -1, -1, 24,
Lev Walkinef625402005-09-05 05:17:57 +0000796 25, 26, -1, 28, 29, -1, -1, -1, -1, -1,
797 -1, -1, -1, 38, -1, -1, -1, 42, -1, -1,
798 -1, 46, -1, -1, 49, 50, 51, 52, -1, -1,
799 -1, -1, -1, 58, -1, 60, 61, -1, -1, -1,
800 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
801 -1, 76, -1, 78, 79, 80, 81, -1, -1, -1,
802 85, -1, 87, 13, 14, -1, -1, 92, 93, 94,
803 95, 96, -1, -1, 24, 25, 26, -1, 28, -1,
804 -1, -1, -1, -1, -1, -1, -1, -1, 38, -1,
805 -1, -1, 42, -1, -1, -1, 46, -1, -1, 49,
806 50, 51, 52, -1, -1, -1, -1, -1, -1, -1,
807 60, 61, -1, -1, -1, 65, 66, 67, 68, 69,
808 -1, -1, -1, -1, -1, -1, 76, -1, 78, 79,
809 -1, -1, -1, -1, -1, 85, -1, 87, 13, 14,
810 -1, -1, 92, 93, 94, 95, 96, -1, -1, 24,
811 25, 26, -1, 28, -1, -1, -1, -1, -1, -1,
812 -1, -1, -1, 38, -1, -1, -1, 42, -1, -1,
813 -1, 46, -1, -1, 49, 50, 51, 52, -1, -1,
814 -1, -1, -1, -1, -1, 60, 61, -1, -1, -1,
815 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
816 -1, 76, -1, 78, 79, -1, -1, -1, -1, -1,
817 85, -1, 87, -1, -1, -1, -1, 92, 93, 94,
818 95, 96
Lev Walkin1004aa92004-09-08 00:28:11 +0000819};
820/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
821#line 3 "/usr/share/bison.simple"
822/* This file comes from bison-1.28. */
823
824/* Skeleton output parser for bison,
825 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
826
827 This program is free software; you can redistribute it and/or modify
828 it under the terms of the GNU General Public License as published by
829 the Free Software Foundation; either version 2, or (at your option)
830 any later version.
831
832 This program is distributed in the hope that it will be useful,
833 but WITHOUT ANY WARRANTY; without even the implied warranty of
834 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
835 GNU General Public License for more details.
836
837 You should have received a copy of the GNU General Public License
838 along with this program; if not, write to the Free Software
839 Foundation, Inc., 59 Temple Place - Suite 330,
840 Boston, MA 02111-1307, USA. */
841
842/* As a special exception, when this file is copied by Bison into a
843 Bison output file, you may use that output file without restriction.
844 This special exception was added by the Free Software Foundation
845 in version 1.24 of Bison. */
846
847/* This is the parser code that is written into each bison parser
848 when the %semantic_parser declaration is not specified in the grammar.
849 It was written by Richard Stallman by simplifying the hairy parser
850 used when %semantic_parser is specified. */
851
852#ifndef YYSTACK_USE_ALLOCA
853#ifdef alloca
854#define YYSTACK_USE_ALLOCA
855#else /* alloca not defined */
856#ifdef __GNUC__
857#define YYSTACK_USE_ALLOCA
858#define alloca __builtin_alloca
859#else /* not GNU C. */
860#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
861#define YYSTACK_USE_ALLOCA
862#include <alloca.h>
863#else /* not sparc */
864/* We think this test detects Watcom and Microsoft C. */
865/* This used to test MSDOS, but that is a bad idea
866 since that symbol is in the user namespace. */
867#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
868#if 0 /* No need for malloc.h, which pollutes the namespace;
869 instead, just don't use alloca. */
870#include <malloc.h>
871#endif
872#else /* not MSDOS, or __TURBOC__ */
873#if defined(_AIX)
874/* I don't know what this was needed for, but it pollutes the namespace.
875 So I turned it off. rms, 2 May 1997. */
876/* #include <malloc.h> */
877 #pragma alloca
878#define YYSTACK_USE_ALLOCA
879#else /* not MSDOS, or __TURBOC__, or _AIX */
880#if 0
881#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
882 and on HPUX 10. Eventually we can turn this on. */
883#define YYSTACK_USE_ALLOCA
884#define alloca __builtin_alloca
885#endif /* __hpux */
886#endif
887#endif /* not _AIX */
888#endif /* not MSDOS, or __TURBOC__ */
889#endif /* not sparc */
890#endif /* not GNU C */
891#endif /* alloca not defined */
892#endif /* YYSTACK_USE_ALLOCA not defined */
893
894#ifdef YYSTACK_USE_ALLOCA
895#define YYSTACK_ALLOC alloca
Lev Walkinf15320b2004-06-03 03:38:44 +0000896#else
Lev Walkin1004aa92004-09-08 00:28:11 +0000897#define YYSTACK_ALLOC malloc
Lev Walkinf15320b2004-06-03 03:38:44 +0000898#endif
899
Lev Walkin1004aa92004-09-08 00:28:11 +0000900/* Note: there must be only one dollar sign in this file.
901 It is replaced by the list of actions, each action
902 as one case of the switch. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000903
904#define yyerrok (yyerrstatus = 0)
905#define yyclearin (yychar = YYEMPTY)
906#define YYEMPTY -2
907#define YYEOF 0
908#define YYACCEPT goto yyacceptlab
Lev Walkin1004aa92004-09-08 00:28:11 +0000909#define YYABORT goto yyabortlab
Lev Walkinf15320b2004-06-03 03:38:44 +0000910#define YYERROR goto yyerrlab1
Lev Walkin1004aa92004-09-08 00:28:11 +0000911/* Like YYERROR except do call yyerror.
912 This remains here temporarily to ease the
913 transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +0000914 Once GCC version 2 has supplanted version 1, this can go. */
915#define YYFAIL goto yyerrlab
916#define YYRECOVERING() (!!yyerrstatus)
Lev Walkin1004aa92004-09-08 00:28:11 +0000917#define YYBACKUP(token, value) \
Lev Walkinf15320b2004-06-03 03:38:44 +0000918do \
919 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin1004aa92004-09-08 00:28:11 +0000920 { yychar = (token), yylval = (value); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000921 yychar1 = YYTRANSLATE (yychar); \
922 YYPOPSTACK; \
923 goto yybackup; \
924 } \
925 else \
Lev Walkin1004aa92004-09-08 00:28:11 +0000926 { yyerror ("syntax error: cannot back up"); YYERROR; } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000927while (0)
928
929#define YYTERROR 1
930#define YYERRCODE 256
931
Lev Walkin1004aa92004-09-08 00:28:11 +0000932#ifndef YYPURE
933#define YYLEX yylex()
Lev Walkinf15320b2004-06-03 03:38:44 +0000934#endif
935
Lev Walkin1004aa92004-09-08 00:28:11 +0000936#ifdef YYPURE
937#ifdef YYLSP_NEEDED
938#ifdef YYLEX_PARAM
939#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
940#else
941#define YYLEX yylex(&yylval, &yylloc)
942#endif
943#else /* not YYLSP_NEEDED */
944#ifdef YYLEX_PARAM
945#define YYLEX yylex(&yylval, YYLEX_PARAM)
946#else
947#define YYLEX yylex(&yylval)
948#endif
949#endif /* not YYLSP_NEEDED */
950#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000951
Lev Walkin1004aa92004-09-08 00:28:11 +0000952/* If nonreentrant, generate the variables here */
Lev Walkinf15320b2004-06-03 03:38:44 +0000953
Lev Walkin1004aa92004-09-08 00:28:11 +0000954#ifndef YYPURE
Lev Walkinf15320b2004-06-03 03:38:44 +0000955
Lev Walkin1004aa92004-09-08 00:28:11 +0000956int yychar; /* the lookahead symbol */
957YYSTYPE yylval; /* the semantic value of the */
958 /* lookahead symbol */
Lev Walkinf15320b2004-06-03 03:38:44 +0000959
Lev Walkin1004aa92004-09-08 00:28:11 +0000960#ifdef YYLSP_NEEDED
961YYLTYPE yylloc; /* location data for the lookahead */
962 /* symbol */
963#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000964
Lev Walkin1004aa92004-09-08 00:28:11 +0000965int yynerrs; /* number of parse errors so far */
966#endif /* not YYPURE */
967
968#if YYDEBUG != 0
969int yydebug; /* nonzero means print parse trace */
970/* Since this is uninitialized, it does not stop multiple parsers
971 from coexisting. */
972#endif
973
974/* YYINITDEPTH indicates the initial size of the parser's stacks */
975
Lev Walkinf15320b2004-06-03 03:38:44 +0000976#ifndef YYINITDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000977#define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +0000978#endif
979
Lev Walkin1004aa92004-09-08 00:28:11 +0000980/* YYMAXDEPTH is the maximum size the stacks can grow to
981 (effective only if the built-in stack extension method is used). */
Lev Walkinf15320b2004-06-03 03:38:44 +0000982
983#if YYMAXDEPTH == 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000984#undef YYMAXDEPTH
Lev Walkinf15320b2004-06-03 03:38:44 +0000985#endif
986
987#ifndef YYMAXDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000988#define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +0000989#endif
990
Lev Walkin1004aa92004-09-08 00:28:11 +0000991/* Define __yy_memcpy. Note that the size argument
992 should be passed with type unsigned int, because that is what the non-GCC
993 definitions require. With GCC, __builtin_memcpy takes an arg
994 of type size_t, but it can handle unsigned int. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000995
Lev Walkin1004aa92004-09-08 00:28:11 +0000996#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
997#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
998#else /* not GNU C or C++ */
999#ifndef __cplusplus
Lev Walkinf15320b2004-06-03 03:38:44 +00001000
Lev Walkin1004aa92004-09-08 00:28:11 +00001001/* This is the most reliable way to avoid incompatibilities
1002 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +00001003static void
Lev Walkin1004aa92004-09-08 00:28:11 +00001004__yy_memcpy (to, from, count)
1005 char *to;
1006 char *from;
1007 unsigned int count;
Lev Walkin459ab022004-09-07 10:39:09 +00001008{
Lev Walkin1004aa92004-09-08 00:28:11 +00001009 register char *f = from;
1010 register char *t = to;
1011 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001012
Lev Walkin1004aa92004-09-08 00:28:11 +00001013 while (i-- > 0)
1014 *t++ = *f++;
Lev Walkin459ab022004-09-07 10:39:09 +00001015}
Lev Walkin459ab022004-09-07 10:39:09 +00001016
Lev Walkin1004aa92004-09-08 00:28:11 +00001017#else /* __cplusplus */
Lev Walkin459ab022004-09-07 10:39:09 +00001018
Lev Walkin1004aa92004-09-08 00:28:11 +00001019/* This is the most reliable way to avoid incompatibilities
1020 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +00001021static void
Lev Walkin1004aa92004-09-08 00:28:11 +00001022__yy_memcpy (char *to, char *from, unsigned int count)
Lev Walkin459ab022004-09-07 10:39:09 +00001023{
Lev Walkin1004aa92004-09-08 00:28:11 +00001024 register char *t = to;
1025 register char *f = from;
1026 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001027
Lev Walkin1004aa92004-09-08 00:28:11 +00001028 while (i-- > 0)
1029 *t++ = *f++;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001030}
Lev Walkin609ccbb2004-09-04 04:49:21 +00001031
Lev Walkin1004aa92004-09-08 00:28:11 +00001032#endif
1033#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001034
Lev Walkin1004aa92004-09-08 00:28:11 +00001035#line 217 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00001036
1037/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1038 into yyparse. The argument should have type void *.
1039 It should actually point to an object.
1040 Grammar actions can access the variable by casting it
1041 to the proper pointer type. */
1042
1043#ifdef YYPARSE_PARAM
Lev Walkin1004aa92004-09-08 00:28:11 +00001044#ifdef __cplusplus
1045#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1046#define YYPARSE_PARAM_DECL
1047#else /* not __cplusplus */
1048#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1049#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1050#endif /* not __cplusplus */
1051#else /* not YYPARSE_PARAM */
1052#define YYPARSE_PARAM_ARG
1053#define YYPARSE_PARAM_DECL
1054#endif /* not YYPARSE_PARAM */
Lev Walkinf15320b2004-06-03 03:38:44 +00001055
1056/* Prevent warning if -Wstrict-prototypes. */
1057#ifdef __GNUC__
Lev Walkin1004aa92004-09-08 00:28:11 +00001058#ifdef YYPARSE_PARAM
Lev Walkinf15320b2004-06-03 03:38:44 +00001059int yyparse (void *);
Lev Walkin1004aa92004-09-08 00:28:11 +00001060#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001061int yyparse (void);
Lev Walkin1004aa92004-09-08 00:28:11 +00001062#endif
Lev Walkinceb20e72004-09-05 10:40:41 +00001063#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001064
Lev Walkinf15320b2004-06-03 03:38:44 +00001065int
Lev Walkin1004aa92004-09-08 00:28:11 +00001066yyparse(YYPARSE_PARAM_ARG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001067 YYPARSE_PARAM_DECL
1068{
1069 register int yystate;
1070 register int yyn;
1071 register short *yyssp;
1072 register YYSTYPE *yyvsp;
Lev Walkin1004aa92004-09-08 00:28:11 +00001073 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1074 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
Lev Walkinf15320b2004-06-03 03:38:44 +00001075
Lev Walkin1004aa92004-09-08 00:28:11 +00001076 short yyssa[YYINITDEPTH]; /* the state stack */
1077 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
Lev Walkinf15320b2004-06-03 03:38:44 +00001078
Lev Walkin1004aa92004-09-08 00:28:11 +00001079 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1080 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
Lev Walkinf15320b2004-06-03 03:38:44 +00001081
Lev Walkin1004aa92004-09-08 00:28:11 +00001082#ifdef YYLSP_NEEDED
1083 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1084 YYLTYPE *yyls = yylsa;
1085 YYLTYPE *yylsp;
1086
1087#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1088#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001089#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkin1004aa92004-09-08 00:28:11 +00001090#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001091
Lev Walkin1004aa92004-09-08 00:28:11 +00001092 int yystacksize = YYINITDEPTH;
1093 int yyfree_stacks = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001094
Lev Walkin1004aa92004-09-08 00:28:11 +00001095#ifdef YYPURE
1096 int yychar;
1097 YYSTYPE yylval;
1098 int yynerrs;
1099#ifdef YYLSP_NEEDED
1100 YYLTYPE yylloc;
1101#endif
1102#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001103
Lev Walkin1004aa92004-09-08 00:28:11 +00001104 YYSTYPE yyval; /* the variable used to return */
1105 /* semantic values from the action */
1106 /* routines */
Lev Walkinf15320b2004-06-03 03:38:44 +00001107
1108 int yylen;
1109
Lev Walkin1004aa92004-09-08 00:28:11 +00001110#if YYDEBUG != 0
1111 if (yydebug)
1112 fprintf(stderr, "Starting parse\n");
1113#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001114
1115 yystate = 0;
1116 yyerrstatus = 0;
1117 yynerrs = 0;
1118 yychar = YYEMPTY; /* Cause a token to be read. */
1119
1120 /* Initialize stack pointers.
1121 Waste one element of value and location stack
1122 so that they stay on the same level as the state stack.
1123 The wasted elements are never initialized. */
1124
Lev Walkin1004aa92004-09-08 00:28:11 +00001125 yyssp = yyss - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001126 yyvsp = yyvs;
Lev Walkin1004aa92004-09-08 00:28:11 +00001127#ifdef YYLSP_NEEDED
1128 yylsp = yyls;
1129#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001130
Lev Walkin1004aa92004-09-08 00:28:11 +00001131/* Push a new state, which is found in yystate . */
1132/* In all cases, when you get here, the value and location stacks
1133 have just been pushed. so pushing a state here evens the stacks. */
1134yynewstate:
Lev Walkinf15320b2004-06-03 03:38:44 +00001135
Lev Walkin1004aa92004-09-08 00:28:11 +00001136 *++yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001137
1138 if (yyssp >= yyss + yystacksize - 1)
1139 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001140 /* Give user a chance to reallocate the stack */
1141 /* Use copies of these so that the &'s don't force the real ones into memory. */
1142 YYSTYPE *yyvs1 = yyvs;
1143 short *yyss1 = yyss;
1144#ifdef YYLSP_NEEDED
1145 YYLTYPE *yyls1 = yyls;
1146#endif
1147
Lev Walkinf15320b2004-06-03 03:38:44 +00001148 /* Get the current used size of the three stacks, in elements. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001149 int size = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001150
1151#ifdef yyoverflow
Lev Walkin1004aa92004-09-08 00:28:11 +00001152 /* Each stack pointer address is followed by the size of
1153 the data in use in that stack, in bytes. */
1154#ifdef YYLSP_NEEDED
1155 /* This used to be a conditional around just the two extra args,
1156 but that might be undefined if yyoverflow is a macro. */
1157 yyoverflow("parser stack overflow",
1158 &yyss1, size * sizeof (*yyssp),
1159 &yyvs1, size * sizeof (*yyvsp),
1160 &yyls1, size * sizeof (*yylsp),
1161 &yystacksize);
1162#else
1163 yyoverflow("parser stack overflow",
1164 &yyss1, size * sizeof (*yyssp),
1165 &yyvs1, size * sizeof (*yyvsp),
1166 &yystacksize);
1167#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001168
Lev Walkin1004aa92004-09-08 00:28:11 +00001169 yyss = yyss1; yyvs = yyvs1;
1170#ifdef YYLSP_NEEDED
1171 yyls = yyls1;
1172#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001173#else /* no yyoverflow */
1174 /* Extend the stack our own way. */
1175 if (yystacksize >= YYMAXDEPTH)
Lev Walkin1004aa92004-09-08 00:28:11 +00001176 {
1177 yyerror("parser stack overflow");
1178 if (yyfree_stacks)
1179 {
1180 free (yyss);
1181 free (yyvs);
1182#ifdef YYLSP_NEEDED
1183 free (yyls);
1184#endif
1185 }
1186 return 2;
1187 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001188 yystacksize *= 2;
1189 if (yystacksize > YYMAXDEPTH)
1190 yystacksize = YYMAXDEPTH;
Lev Walkin1004aa92004-09-08 00:28:11 +00001191#ifndef YYSTACK_USE_ALLOCA
1192 yyfree_stacks = 1;
1193#endif
1194 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1195 __yy_memcpy ((char *)yyss, (char *)yyss1,
1196 size * (unsigned int) sizeof (*yyssp));
1197 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1198 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1199 size * (unsigned int) sizeof (*yyvsp));
1200#ifdef YYLSP_NEEDED
1201 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1202 __yy_memcpy ((char *)yyls, (char *)yyls1,
1203 size * (unsigned int) sizeof (*yylsp));
1204#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001205#endif /* no yyoverflow */
1206
Lev Walkin1004aa92004-09-08 00:28:11 +00001207 yyssp = yyss + size - 1;
1208 yyvsp = yyvs + size - 1;
1209#ifdef YYLSP_NEEDED
1210 yylsp = yyls + size - 1;
1211#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001212
Lev Walkin1004aa92004-09-08 00:28:11 +00001213#if YYDEBUG != 0
1214 if (yydebug)
1215 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1216#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001217
1218 if (yyssp >= yyss + yystacksize - 1)
1219 YYABORT;
1220 }
1221
Lev Walkin1004aa92004-09-08 00:28:11 +00001222#if YYDEBUG != 0
1223 if (yydebug)
1224 fprintf(stderr, "Entering state %d\n", yystate);
1225#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001226
1227 goto yybackup;
Lev Walkin1004aa92004-09-08 00:28:11 +00001228 yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001229
1230/* Do appropriate processing given the current state. */
1231/* Read a lookahead token if we need one and don't already have one. */
1232/* yyresume: */
1233
1234 /* First try to decide what to do without reference to lookahead token. */
1235
1236 yyn = yypact[yystate];
Lev Walkin1004aa92004-09-08 00:28:11 +00001237 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001238 goto yydefault;
1239
1240 /* Not known => get a lookahead token if don't already have one. */
1241
1242 /* yychar is either YYEMPTY or YYEOF
1243 or a valid token in external form. */
1244
1245 if (yychar == YYEMPTY)
1246 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001247#if YYDEBUG != 0
1248 if (yydebug)
1249 fprintf(stderr, "Reading a token: ");
1250#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001251 yychar = YYLEX;
1252 }
1253
Lev Walkin1004aa92004-09-08 00:28:11 +00001254 /* Convert token to internal form (in yychar1) for indexing tables with */
Lev Walkinf15320b2004-06-03 03:38:44 +00001255
Lev Walkin1004aa92004-09-08 00:28:11 +00001256 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001257 {
1258 yychar1 = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001259 yychar = YYEOF; /* Don't call YYLEX any more */
Lev Walkinf15320b2004-06-03 03:38:44 +00001260
Lev Walkin1004aa92004-09-08 00:28:11 +00001261#if YYDEBUG != 0
1262 if (yydebug)
1263 fprintf(stderr, "Now at end of input.\n");
1264#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001265 }
1266 else
1267 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001268 yychar1 = YYTRANSLATE(yychar);
Lev Walkinf15320b2004-06-03 03:38:44 +00001269
Lev Walkin1004aa92004-09-08 00:28:11 +00001270#if YYDEBUG != 0
1271 if (yydebug)
1272 {
1273 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1274 /* Give the individual parser a way to print the precise meaning
1275 of a token, for further debugging info. */
1276#ifdef YYPRINT
1277 YYPRINT (stderr, yychar, yylval);
1278#endif
1279 fprintf (stderr, ")\n");
1280 }
1281#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001282 }
1283
1284 yyn += yychar1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001285 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001286 goto yydefault;
Lev Walkin1004aa92004-09-08 00:28:11 +00001287
Lev Walkinf15320b2004-06-03 03:38:44 +00001288 yyn = yytable[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001289
1290 /* yyn is what to do for this token type in this state.
1291 Negative => reduce, -yyn is rule number.
1292 Positive => shift, yyn is new state.
1293 New state is final state => don't bother to shift,
1294 just return success.
1295 0, or most negative number => error. */
1296
1297 if (yyn < 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001298 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001299 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001300 goto yyerrlab;
1301 yyn = -yyn;
1302 goto yyreduce;
1303 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001304 else if (yyn == 0)
1305 goto yyerrlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001306
1307 if (yyn == YYFINAL)
1308 YYACCEPT;
1309
1310 /* Shift the lookahead token. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001311
1312#if YYDEBUG != 0
1313 if (yydebug)
1314 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1315#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001316
1317 /* Discard the token being shifted unless it is eof. */
1318 if (yychar != YYEOF)
1319 yychar = YYEMPTY;
1320
1321 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00001322#ifdef YYLSP_NEEDED
1323 *++yylsp = yylloc;
1324#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001325
Lev Walkin1004aa92004-09-08 00:28:11 +00001326 /* count tokens shifted since error; after three, turn off error status. */
1327 if (yyerrstatus) yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001328
1329 yystate = yyn;
1330 goto yynewstate;
1331
Lev Walkin1004aa92004-09-08 00:28:11 +00001332/* Do the default action for the current state. */
Lev Walkin459ab022004-09-07 10:39:09 +00001333yydefault:
Lev Walkin1004aa92004-09-08 00:28:11 +00001334
Lev Walkinf15320b2004-06-03 03:38:44 +00001335 yyn = yydefact[yystate];
1336 if (yyn == 0)
1337 goto yyerrlab;
1338
Lev Walkin1004aa92004-09-08 00:28:11 +00001339/* Do a reduction. yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001340yyreduce:
1341 yylen = yyr2[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001342 if (yylen > 0)
1343 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Lev Walkinf15320b2004-06-03 03:38:44 +00001344
Lev Walkin1004aa92004-09-08 00:28:11 +00001345#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00001346 if (yydebug)
1347 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001348 int i;
Lev Walkinf15320b2004-06-03 03:38:44 +00001349
Lev Walkin1004aa92004-09-08 00:28:11 +00001350 fprintf (stderr, "Reducing via rule %d (line %d), ",
1351 yyn, yyrline[yyn]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001352
1353 /* Print the symbols being reduced, and their result. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001354 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1355 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1356 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001357 }
1358#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001359
Lev Walkin1004aa92004-09-08 00:28:11 +00001360
1361 switch (yyn) {
1362
1363case 1:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001364#line 323 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001365{
1366 *(void **)param = yyvsp[0].a_grammar;
1367 ;
1368 break;}
1369case 2:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001370#line 329 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001371{
Lev Walkinf15320b2004-06-03 03:38:44 +00001372 yyval.a_grammar = asn1p_new();
1373 checkmem(yyval.a_grammar);
1374 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001375 ;
1376 break;}
1377case 3:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001378#line 334 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001379{
Lev Walkinf15320b2004-06-03 03:38:44 +00001380 yyval.a_grammar = yyvsp[-1].a_grammar;
1381 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001382 ;
1383 break;}
1384case 4:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001385#line 355 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001386{
Lev Walkinf15320b2004-06-03 03:38:44 +00001387
1388 if(yyvsp[-1].a_module) {
1389 yyval.a_module = yyvsp[-1].a_module;
1390 } else {
1391 /* There's a chance that a module is just plain empty */
1392 yyval.a_module = asn1p_module_new();
1393 }
1394 checkmem(yyval.a_module);
1395
Lev Walkinb36317c2005-08-12 10:09:10 +00001396 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00001397 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1398 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001399 ;
1400 break;}
1401case 5:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001402#line 376 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001403{ yyval.a_oid = 0; ;
1404 break;}
1405case 6:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001406#line 377 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001407{ yyval.a_oid = yyvsp[0].a_oid; ;
1408 break;}
1409case 7:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001410#line 381 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001411{
Lev Walkinf15320b2004-06-03 03:38:44 +00001412 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin1004aa92004-09-08 00:28:11 +00001413 ;
1414 break;}
1415case 8:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001416#line 384 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001417{
Lev Walkinf15320b2004-06-03 03:38:44 +00001418 yyval.a_oid = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001419 ;
1420 break;}
1421case 9:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001422#line 390 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001423{
Lev Walkinf15320b2004-06-03 03:38:44 +00001424 yyval.a_oid = asn1p_oid_new();
1425 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1426 if(yyvsp[0].a_oid_arc.name)
1427 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001428 ;
1429 break;}
1430case 10:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001431#line 396 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001432{
Lev Walkinf15320b2004-06-03 03:38:44 +00001433 yyval.a_oid = yyvsp[-1].a_oid;
1434 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1435 if(yyvsp[0].a_oid_arc.name)
1436 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001437 ;
1438 break;}
1439case 11:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001440#line 405 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001441{ /* iso */
Lev Walkinf15320b2004-06-03 03:38:44 +00001442 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1443 yyval.a_oid_arc.number = -1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001444 ;
1445 break;}
1446case 12:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001447#line 409 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001448{ /* iso(1) */
Lev Walkinf15320b2004-06-03 03:38:44 +00001449 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1450 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001451 ;
1452 break;}
1453case 13:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001454#line 413 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001455{ /* 1 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001456 yyval.a_oid_arc.name = 0;
1457 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001458 ;
1459 break;}
1460case 14:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001461#line 423 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001462{ yyval.a_module_flags = MSF_NOFLAGS; ;
1463 break;}
1464case 15:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001465#line 424 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001466{
Lev Walkinf15320b2004-06-03 03:38:44 +00001467 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001468 ;
1469 break;}
1470case 16:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001471#line 433 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001472{
Lev Walkinf15320b2004-06-03 03:38:44 +00001473 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001474 ;
1475 break;}
1476case 17:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001477#line 436 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001478{
Lev Walkinf15320b2004-06-03 03:38:44 +00001479 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001480 ;
1481 break;}
1482case 18:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001483#line 445 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001484{
Lev Walkinf15320b2004-06-03 03:38:44 +00001485 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001486 ;
1487 break;}
1488case 19:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001489#line 448 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001490{
Lev Walkinf15320b2004-06-03 03:38:44 +00001491 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001492 ;
1493 break;}
1494case 20:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001495#line 451 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001496{
Lev Walkinf15320b2004-06-03 03:38:44 +00001497 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001498 ;
1499 break;}
1500case 21:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001501#line 454 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001502{
Lev Walkinf15320b2004-06-03 03:38:44 +00001503 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin1004aa92004-09-08 00:28:11 +00001504 ;
1505 break;}
1506case 22:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001507#line 458 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001508{
Lev Walkinf59d0752004-08-18 04:59:12 +00001509 /* X.680Amd1 specifies TAG and XER */
1510 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1511 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1512 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1513 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1514 } else {
1515 fprintf(stderr,
1516 "WARNING: %s INSTRUCTIONS at line %d: "
1517 "Unrecognized encoding reference\n",
1518 yyvsp[-1].tv_str, yylineno);
1519 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1520 }
1521 free(yyvsp[-1].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00001522 ;
1523 break;}
1524case 23:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001525#line 479 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001526{ yyval.a_module = 0; ;
1527 break;}
1528case 24:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001529#line 480 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001530{
Lev Walkinf15320b2004-06-03 03:38:44 +00001531 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001532 ;
1533 break;}
1534case 25:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001535#line 489 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001536{
Lev Walkinf59d0752004-08-18 04:59:12 +00001537 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001538 ;
1539 break;}
1540case 26:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001541#line 492 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001542{
Lev Walkinf15320b2004-06-03 03:38:44 +00001543 yyval.a_module = yyvsp[-1].a_module;
1544
Lev Walkinf59d0752004-08-18 04:59:12 +00001545 /* Behave well when one of them is skipped. */
1546 if(!(yyvsp[-1].a_module)) {
1547 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1548 break;
1549 }
1550
Lev Walkinf15320b2004-06-03 03:38:44 +00001551#ifdef MY_IMPORT
1552#error MY_IMPORT DEFINED ELSEWHERE!
1553#endif
1554#define MY_IMPORT(foo,field) do { \
Lev Walkinbc55d232004-08-13 12:31:09 +00001555 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
Lev Walkinf15320b2004-06-03 03:38:44 +00001556 TQ_ADD(&(yyval.a_module->foo), \
1557 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1558 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001559 } \
1560 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1561 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001562
1563 MY_IMPORT(imports, xp_next);
1564 MY_IMPORT(exports, xp_next);
1565 MY_IMPORT(members, next);
1566#undef MY_IMPORT
1567
Lev Walkin1004aa92004-09-08 00:28:11 +00001568 ;
1569 break;}
1570case 27:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001571#line 525 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001572{
Lev Walkinf15320b2004-06-03 03:38:44 +00001573 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001574 ;
1575 break;}
1576case 28:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001577#line 528 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001578{
Lev Walkinf15320b2004-06-03 03:38:44 +00001579 yyval.a_module = asn1p_module_new();
1580 checkmem(yyval.a_module);
1581 if(yyvsp[0].a_xports) {
1582 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1583 } else {
1584 /* "EXPORTS ALL;" ? */
1585 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001586 ;
1587 break;}
1588case 29:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001589#line 537 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001590{
Lev Walkinf59d0752004-08-18 04:59:12 +00001591 yyval.a_module = asn1p_module_new();
1592 checkmem(yyval.a_module);
1593 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1594 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1595 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001596 ;
1597 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001598case 30:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001599#line 544 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001600{
1601 yyval.a_module = asn1p_module_new();
1602 checkmem(yyval.a_module);
1603 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1604 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1605 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1606 ;
1607 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001608case 31:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001609#line 557 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001610{
Lev Walkinf59d0752004-08-18 04:59:12 +00001611 yyval.a_module = asn1p_module_new();
1612 checkmem(yyval.a_module);
1613 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1614 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1615 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001616 ;
1617 break;}
1618case 32:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001619#line 565 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001620{ asn1p_lexer_hack_push_encoding_control(); ;
1621 break;}
1622case 33:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001623#line 566 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001624{
Lev Walkinf59d0752004-08-18 04:59:12 +00001625 fprintf(stderr,
1626 "WARNING: ENCODING-CONTROL %s "
1627 "specification at line %d ignored\n",
1628 yyvsp[-1].tv_str, yylineno);
1629 free(yyvsp[-1].tv_str);
1630 yyval.a_module = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001631 ;
1632 break;}
1633case 34:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001634#line 578 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001635{
Lev Walkinf15320b2004-06-03 03:38:44 +00001636 return yyerror(
Lev Walkin70853052005-11-26 11:21:55 +00001637 "Attempt to redefine a standard basic string type, "
1638 "please comment out or remove this type redefinition.");
Lev Walkin1004aa92004-09-08 00:28:11 +00001639 ;
1640 break;}
1641case 35:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001642#line 591 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001643{
Lev Walkinb36317c2005-08-12 10:09:10 +00001644 if(!saved_aid && 0)
1645 return yyerror("Unterminated IMPORTS FROM, "
1646 "expected semicolon ';'");
1647 saved_aid = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001648 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001649 ;
1650 break;}
1651case 36:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001652#line 601 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001653{
Lev Walkinf15320b2004-06-03 03:38:44 +00001654 return yyerror("Empty IMPORTS list");
Lev Walkin1004aa92004-09-08 00:28:11 +00001655 ;
1656 break;}
1657case 37:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001658#line 607 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001659{
Lev Walkinf15320b2004-06-03 03:38:44 +00001660 yyval.a_module = asn1p_module_new();
1661 checkmem(yyval.a_module);
1662 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001663 ;
1664 break;}
1665case 38:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001666#line 612 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001667{
Lev Walkinf15320b2004-06-03 03:38:44 +00001668 yyval.a_module = yyvsp[-1].a_module;
1669 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001670 ;
1671 break;}
1672case 39:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001673#line 619 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001674{ memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
1675 break;}
1676case 40:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001677#line 620 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001678{ yyval.a_aid.oid = yyvsp[0].a_oid; ;
1679 break;}
1680case 41:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001681#line 624 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001682{
Lev Walkinf15320b2004-06-03 03:38:44 +00001683 yyval.a_xports = yyvsp[-3].a_xports;
Lev Walkinb36317c2005-08-12 10:09:10 +00001684 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
1685 yyval.a_xports->identifier = yyvsp[0].a_aid;
1686 /* This stupid thing is used for look-back hack. */
1687 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
Lev Walkinf15320b2004-06-03 03:38:44 +00001688 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001689 ;
1690 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001691case 42:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001692#line 635 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001693{
Lev Walkinf15320b2004-06-03 03:38:44 +00001694 yyval.a_xports = asn1p_xports_new();
1695 checkmem(yyval.a_xports);
1696 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001697 ;
1698 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001699case 43:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001700#line 640 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001701{
Lev Walkinf15320b2004-06-03 03:38:44 +00001702 yyval.a_xports = yyvsp[-2].a_xports;
1703 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001704 ;
1705 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001706case 44:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001707#line 647 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001708{
Lev Walkinf15320b2004-06-03 03:38:44 +00001709 yyval.a_expr = asn1p_expr_new(yylineno);
1710 checkmem(yyval.a_expr);
1711 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1712 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001713 ;
1714 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001715case 45:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001716#line 653 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001717{ /* Completely equivalent to above */
1718 yyval.a_expr = asn1p_expr_new(yylineno);
1719 checkmem(yyval.a_expr);
1720 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1721 yyval.a_expr->expr_type = A1TC_REFERENCE;
1722 ;
1723 break;}
1724case 46:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001725#line 659 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001726{
1727 yyval.a_expr = asn1p_expr_new(yylineno);
1728 checkmem(yyval.a_expr);
1729 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1730 yyval.a_expr->expr_type = A1TC_REFERENCE;
1731 ;
1732 break;}
1733case 47:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001734#line 668 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001735{
Lev Walkinf15320b2004-06-03 03:38:44 +00001736 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin1004aa92004-09-08 00:28:11 +00001737 ;
1738 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001739case 48:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001740#line 671 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001741{
Lev Walkinf15320b2004-06-03 03:38:44 +00001742 yyval.a_xports = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001743 ;
1744 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001745case 49:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001746#line 674 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001747{
Lev Walkinf15320b2004-06-03 03:38:44 +00001748 /* Empty EXPORTS clause effectively prohibits export. */
1749 yyval.a_xports = asn1p_xports_new();
1750 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001751 ;
1752 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001753case 50:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001754#line 682 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001755{
Lev Walkinf15320b2004-06-03 03:38:44 +00001756 yyval.a_xports = asn1p_xports_new();
1757 assert(yyval.a_xports);
1758 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001759 ;
1760 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001761case 51:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001762#line 687 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001763{
Lev Walkinf15320b2004-06-03 03:38:44 +00001764 yyval.a_xports = yyvsp[-2].a_xports;
1765 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001766 ;
1767 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001768case 52:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001769#line 694 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001770{
1771 yyval.a_expr = asn1p_expr_new(yylineno);
1772 checkmem(yyval.a_expr);
1773 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1774 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1775 ;
1776 break;}
1777case 53:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001778#line 700 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001779{
1780 yyval.a_expr = asn1p_expr_new(yylineno);
1781 checkmem(yyval.a_expr);
1782 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1783 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1784 ;
Lev Walkin8ea99482005-03-31 21:48:13 +00001785 break;}
1786case 54:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001787#line 706 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001788{
1789 yyval.a_expr = asn1p_expr_new(yylineno);
1790 checkmem(yyval.a_expr);
1791 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1792 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1793 ;
1794 break;}
1795case 55:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001796#line 717 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001797{ asn1p_lexer_hack_push_opaque_state(); ;
1798 break;}
1799case 56:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001800#line 717 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001801{
Lev Walkinf15320b2004-06-03 03:38:44 +00001802 yyval.a_expr = yyvsp[-4].a_expr;
1803 assert(yyval.a_expr->Identifier == 0);
1804 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1805 yyval.a_expr->meta_type = AMT_VALUESET;
Lev Walkin8ea99482005-03-31 21:48:13 +00001806 // take care of ValueSet body
Lev Walkin1004aa92004-09-08 00:28:11 +00001807 ;
1808 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001809case 57:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001810#line 727 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001811{
Lev Walkinf15320b2004-06-03 03:38:44 +00001812 yyval.a_expr = asn1p_expr_new(yylineno);
1813 checkmem(yyval.a_expr);
1814 yyval.a_expr->reference = yyvsp[0].a_ref;
1815 yyval.a_expr->expr_type = A1TC_REFERENCE;
1816 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001817 ;
1818 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001819case 58:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001820#line 734 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001821{
Lev Walkinf15320b2004-06-03 03:38:44 +00001822 yyval.a_expr = asn1p_expr_new(yylineno);
1823 checkmem(yyval.a_expr);
1824 yyval.a_expr->expr_type = yyvsp[0].a_type;
1825 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001826 ;
1827 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001828case 59:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001829#line 752 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001830{
Lev Walkinf15320b2004-06-03 03:38:44 +00001831 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00001832 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00001833 assert(yyval.a_expr->expr_type);
1834 assert(yyval.a_expr->meta_type);
Lev Walkin1004aa92004-09-08 00:28:11 +00001835 ;
1836 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001837case 60:
1838#line 758 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001839{
Lev Walkinf15320b2004-06-03 03:38:44 +00001840 yyval.a_expr = yyvsp[0].a_expr;
1841 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1842 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
Lev Walkin9c2285a2006-03-09 08:49:26 +00001843 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin1004aa92004-09-08 00:28:11 +00001844 ;
1845 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001846case 61:
1847#line 774 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001848{
Lev Walkinf15320b2004-06-03 03:38:44 +00001849 yyval.a_expr = yyvsp[0].a_expr;
1850 assert(yyval.a_expr->Identifier == 0);
1851 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1852 yyval.a_expr->params = yyvsp[-3].a_plist;
1853 yyval.a_expr->meta_type = AMT_PARAMTYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001854 ;
1855 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001856case 62:
1857#line 784 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001858{
Lev Walkinf15320b2004-06-03 03:38:44 +00001859 int ret;
1860 yyval.a_plist = asn1p_paramlist_new(yylineno);
1861 checkmem(yyval.a_plist);
1862 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1863 checkmem(ret == 0);
1864 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1865 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001866 ;
1867 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001868case 63:
1869#line 793 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001870{
Lev Walkinf15320b2004-06-03 03:38:44 +00001871 int ret;
1872 yyval.a_plist = yyvsp[-2].a_plist;
1873 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1874 checkmem(ret == 0);
1875 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1876 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001877 ;
1878 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001879case 64:
1880#line 804 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001881{
Lev Walkinf15320b2004-06-03 03:38:44 +00001882 yyval.a_parg.governor = NULL;
1883 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001884 ;
1885 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001886case 65:
1887#line 808 "asn1p_y.y"
1888{
1889 int ret;
1890 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1891 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1892 checkmem(ret == 0);
1893 yyval.a_parg.argument = yyvsp[0].tv_str;
1894 ;
1895 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001896case 66:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001897#line 815 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001898{
1899 int ret;
1900 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1901 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1902 checkmem(ret == 0);
1903 yyval.a_parg.argument = yyvsp[0].tv_str;
1904 ;
1905 break;}
1906case 67:
Lev Walkin9c2285a2006-03-09 08:49:26 +00001907#line 822 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00001908{
1909 int ret;
1910 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00001911 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1912 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1913 checkmem(ret == 0);
1914 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001915 ;
1916 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001917case 68:
1918#line 833 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001919{
Lev Walkinf15320b2004-06-03 03:38:44 +00001920 yyval.a_expr = asn1p_expr_new(yylineno);
1921 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001922 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1923 ;
1924 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001925case 69:
1926#line 838 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001927{
Lev Walkinf15320b2004-06-03 03:38:44 +00001928 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001929 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1930 ;
1931 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001932case 70:
1933#line 845 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001934{
Lev Walkinf15320b2004-06-03 03:38:44 +00001935 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001936 ;
1937 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001938case 71:
1939#line 848 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001940{
Lev Walkinf15320b2004-06-03 03:38:44 +00001941 yyval.a_expr = asn1p_expr_new(yylineno);
1942 checkmem(yyval.a_expr);
1943 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1944 yyval.a_expr->expr_type = A1TC_REFERENCE;
1945 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001946 ;
1947 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001948case 72:
1949#line 872 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001950{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1951 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001952case 73:
1953#line 873 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001954{ yyval.a_expr = yyvsp[0].a_expr; ;
1955 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001956case 74:
1957#line 876 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001958{
Lev Walkinf15320b2004-06-03 03:38:44 +00001959 yyval.a_expr = asn1p_expr_new(yylineno);
1960 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001961 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1962 ;
1963 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001964case 75:
1965#line 881 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001966{
Lev Walkinf15320b2004-06-03 03:38:44 +00001967 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001968 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1969 ;
1970 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001971case 76:
1972#line 888 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001973{
Lev Walkin070a52d2004-08-22 03:19:54 +00001974 yyval.a_expr = yyvsp[-1].a_expr;
1975 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00001976 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinef625402005-09-05 05:17:57 +00001977 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
Lev Walkin070a52d2004-08-22 03:19:54 +00001978 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00001979 ;
1980 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001981case 77:
1982#line 895 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001983{
Lev Walkinef625402005-09-05 05:17:57 +00001984 yyval.a_expr = yyvsp[-1].a_expr;
1985 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
1986 yyval.a_expr->marker = yyvsp[0].a_marker;
1987 _fixup_anonymous_identifier(yyval.a_expr);
1988 ;
1989 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00001990case 78:
1991#line 901 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00001992{
Lev Walkin070a52d2004-08-22 03:19:54 +00001993 yyval.a_expr = asn1p_expr_new(yylineno);
1994 checkmem(yyval.a_expr);
1995 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1996 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001997 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1998 ;
1999 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002000case 79:
2001#line 908 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002002{
Lev Walkin070a52d2004-08-22 03:19:54 +00002003 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002004 ;
2005 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002006case 80:
2007#line 914 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002008{
Lev Walkin070a52d2004-08-22 03:19:54 +00002009 yyval.a_expr = asn1p_expr_new(yylineno);
2010 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002011 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2012 ;
2013 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002014case 81:
2015#line 919 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002016{
Lev Walkin070a52d2004-08-22 03:19:54 +00002017 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002018 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2019 ;
2020 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002021case 82:
2022#line 926 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002023{
Lev Walkin070a52d2004-08-22 03:19:54 +00002024 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002025 assert(yyval.a_expr->Identifier == 0);
2026 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002027 ;
2028 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002029case 83:
2030#line 931 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002031{
2032 yyval.a_expr = yyvsp[0].a_expr;
2033 ;
2034 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002035case 84:
2036#line 934 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002037{
2038 yyval.a_expr = yyvsp[0].a_expr;
2039 _fixup_anonymous_identifier(yyval.a_expr);
2040 ;
2041 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002042case 85:
2043#line 941 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002044{
Lev Walkinf15320b2004-06-03 03:38:44 +00002045 yyval.a_expr = yyvsp[-2].a_expr;
2046 checkmem(yyval.a_expr);
2047 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2048 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
Lev Walkin9c2285a2006-03-09 08:49:26 +00002049 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin1004aa92004-09-08 00:28:11 +00002050 ;
2051 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002052case 86:
2053#line 951 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002054{ yyval.a_int = 0; ;
2055 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002056case 87:
2057#line 952 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002058{ yyval.a_int = 1; ;
2059 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002060case 88:
2061#line 956 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002062{
Lev Walkinf15320b2004-06-03 03:38:44 +00002063 yyval.a_expr = asn1p_expr_new(yylineno);
2064 checkmem(yyval.a_expr);
2065 yyval.a_expr->expr_type = A1TC_CLASSDEF;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002066 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2067 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2068 ;
2069 break;}
2070case 89:
2071#line 963 "asn1p_y.y"
2072{
2073 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002074 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2075 ;
2076 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002077case 90:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002078#line 973 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002079{
Lev Walkin9c2285a2006-03-09 08:49:26 +00002080 yyval.a_expr = asn1p_expr_new(yylineno);
2081 checkmem(yyval.a_expr);
2082 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2083 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2084 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2085 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002086 ;
2087 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002088case 91:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002089#line 983 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002090{
Lev Walkinf15320b2004-06-03 03:38:44 +00002091 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin9c2285a2006-03-09 08:49:26 +00002092 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00002093 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002094 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2095 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkinf15320b2004-06-03 03:38:44 +00002096 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002097 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002098 ;
2099 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002100case 92:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002101#line 994 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002102{
Lev Walkin9c2285a2006-03-09 08:49:26 +00002103 yyval.a_expr = asn1p_expr_new(yylineno);
2104 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2105 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2106 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2107 yyval.a_expr->reference = yyvsp[-1].a_ref;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002108 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002109 ;
2110 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002111case 93:
Lev Walkin9c2285a2006-03-09 08:49:26 +00002112#line 1004 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002113{
Lev Walkinf15320b2004-06-03 03:38:44 +00002114 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin9c2285a2006-03-09 08:49:26 +00002115 checkmem(yyval.a_expr);
2116 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2117 yyval.a_expr->reference = yyvsp[-1].a_ref;
2118 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2119 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2120 yyval.a_expr->marker = yyvsp[0].a_marker;
2121 ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002122 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002123case 94:
2124#line 1015 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002125{
2126 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin9c2285a2006-03-09 08:49:26 +00002127 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002128 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
Lev Walkin1db91132006-03-09 09:11:53 +00002129 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2130 yyval.a_expr->reference = yyvsp[-1].a_ref;
Lev Walkin9c2285a2006-03-09 08:49:26 +00002131 yyval.a_expr->marker = yyvsp[0].a_marker;
2132 ;
2133 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002134case 95:
2135#line 1025 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002136{
2137 yyval.a_expr = asn1p_expr_new(yylineno);
2138 checkmem(yyval.a_expr);
2139 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2140 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2141 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2142 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
2143 yyval.a_expr->marker = yyvsp[0].a_marker;
2144 ;
2145 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002146case 96:
2147#line 1036 "asn1p_y.y"
2148{
2149 yyval.a_expr = asn1p_expr_new(yylineno);
2150 checkmem(yyval.a_expr);
2151 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2152 yyval.a_expr->reference = yyvsp[-1].a_ref;
2153 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2154 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2155 yyval.a_expr->marker = yyvsp[0].a_marker;
2156 ;
2157 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002158case 97:
Lev Walkin1db91132006-03-09 09:11:53 +00002159#line 1048 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002160{ yyval.a_wsynt = 0; ;
2161 break;}
2162case 98:
Lev Walkin1db91132006-03-09 09:11:53 +00002163#line 1049 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002164{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002165 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002166 ;
2167 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002168case 99:
Lev Walkin1db91132006-03-09 09:11:53 +00002169#line 1056 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002170{ asn1p_lexer_hack_enable_with_syntax(); ;
2171 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002172case 100:
Lev Walkin1db91132006-03-09 09:11:53 +00002173#line 1058 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002174{
2175 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2176 ;
2177 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002178case 101:
Lev Walkin1db91132006-03-09 09:11:53 +00002179#line 1064 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002180{
Lev Walkinf15320b2004-06-03 03:38:44 +00002181 yyval.a_wsynt = asn1p_wsyntx_new();
2182 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002183 ;
2184 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002185case 102:
Lev Walkin1db91132006-03-09 09:11:53 +00002186#line 1068 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002187{
Lev Walkinf15320b2004-06-03 03:38:44 +00002188 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2189 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002190 ;
2191 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002192case 103:
Lev Walkin1db91132006-03-09 09:11:53 +00002193#line 1075 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002194{
Lev Walkinf15320b2004-06-03 03:38:44 +00002195 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 +00002196 ;
2197 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002198case 104:
Lev Walkin1db91132006-03-09 09:11:53 +00002199#line 1078 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002200{
Lev Walkinf15320b2004-06-03 03:38:44 +00002201 asn1p_ref_t *ref;
2202 int ret;
2203 ref = asn1p_ref_new(yylineno);
2204 checkmem(ref);
2205 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2206 checkmem(ret == 0);
2207 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002208 ;
2209 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002210case 105:
Lev Walkin1db91132006-03-09 09:11:53 +00002211#line 1090 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002212{
2213 yyval.a_expr = asn1p_expr_new(yylineno);
2214 checkmem(yyval.a_expr);
2215 yyval.a_expr->Identifier = strdup("...");
2216 checkmem(yyval.a_expr->Identifier);
2217 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2218 yyval.a_expr->meta_type = AMT_TYPE;
2219 ;
2220 break;}
2221case 106:
Lev Walkin1db91132006-03-09 09:11:53 +00002222#line 1098 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002223{
2224 yyval.a_expr = asn1p_expr_new(yylineno);
2225 checkmem(yyval.a_expr);
2226 yyval.a_expr->Identifier = strdup("...");
2227 checkmem(yyval.a_expr->Identifier);
2228 yyval.a_expr->value = yyvsp[0].a_value;
2229 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2230 yyval.a_expr->meta_type = AMT_TYPE;
2231 ;
2232 break;}
2233case 107:
Lev Walkin1db91132006-03-09 09:11:53 +00002234#line 1107 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002235{
2236 yyval.a_expr = asn1p_expr_new(yylineno);
2237 checkmem(yyval.a_expr);
2238 yyval.a_expr->Identifier = strdup("...");
2239 yyval.a_expr->value = yyvsp[0].a_value;
2240 checkmem(yyval.a_expr->Identifier);
2241 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2242 yyval.a_expr->meta_type = AMT_TYPE;
2243 ;
2244 break;}
2245case 108:
Lev Walkin1db91132006-03-09 09:11:53 +00002246#line 1119 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002247{
Lev Walkin070a52d2004-08-22 03:19:54 +00002248 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00002249 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002250 /*
2251 * Outer constraint for SEQUENCE OF and SET OF applies
2252 * to the inner type.
2253 */
2254 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2255 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2256 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2257 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2258 } else {
2259 if(yyval.a_expr->constraints) {
Lev Walkinaf120f72004-09-14 02:36:39 +00002260 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002261 } else {
2262 yyval.a_expr->constraints = yyvsp[0].a_constr;
2263 }
2264 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002265 ;
2266 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002267case 109:
Lev Walkin1db91132006-03-09 09:11:53 +00002268#line 1141 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00002269{
2270 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
2271 asn1p_as_pointer = 0;
2272 ;
Lev Walkin4696c742005-08-22 12:23:54 +00002273 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002274case 110:
Lev Walkin1db91132006-03-09 09:11:53 +00002275#line 1148 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002276{
Lev Walkind2ea1de2004-08-20 13:25:29 +00002277 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinef625402005-09-05 05:17:57 +00002278 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
2279
2280 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2281 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
2282 fprintf(stderr,
2283 "INFO: Directive <ASN1C:RepresentAsPointer> "
2284 "applied to %s at line %d\n",
2285 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2286 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2287 : "member",
2288 yyval.a_expr->_lineno
2289 );
2290 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002291 ;
2292 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002293case 111:
Lev Walkin1db91132006-03-09 09:11:53 +00002294#line 1167 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002295{
Lev Walkin4696c742005-08-22 12:23:54 +00002296 yyval.a_expr = yyvsp[0].a_expr;
2297 ;
2298 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002299case 112:
Lev Walkin1db91132006-03-09 09:11:53 +00002300#line 1170 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002301{
Lev Walkinef625402005-09-05 05:17:57 +00002302 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinc7d939d2005-03-20 11:12:40 +00002303 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2304 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
Lev Walkinf15320b2004-06-03 03:38:44 +00002305 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002306 ;
2307 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002308case 113:
Lev Walkin1db91132006-03-09 09:11:53 +00002309#line 1176 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002310{
Lev Walkinef625402005-09-05 05:17:57 +00002311 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002312 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002313 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
Lev Walkin070a52d2004-08-22 03:19:54 +00002314 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002315 ;
2316 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002317case 114:
Lev Walkin1db91132006-03-09 09:11:53 +00002318#line 1182 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002319{
Lev Walkinef625402005-09-05 05:17:57 +00002320 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002321 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002322 yyval.a_expr->expr_type = ASN_CONSTR_SET;
Lev Walkin070a52d2004-08-22 03:19:54 +00002323 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002324 ;
2325 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002326case 115:
Lev Walkin1db91132006-03-09 09:11:53 +00002327#line 1188 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002328{
Lev Walkinceb20e72004-09-05 10:40:41 +00002329 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002330 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002331 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002332 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2333 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002334 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002335 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002336 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2337 ;
2338 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002339case 116:
Lev Walkin1db91132006-03-09 09:11:53 +00002340#line 1198 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002341{
Lev Walkinceb20e72004-09-05 10:40:41 +00002342 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002343 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002344 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002345 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2346 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002347 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002348 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002349 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2350 ;
2351 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002352case 117:
Lev Walkin1db91132006-03-09 09:11:53 +00002353#line 1208 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002354{
Lev Walkinceb20e72004-09-05 10:40:41 +00002355 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002356 checkmem(yyval.a_expr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002357 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002358 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002359 ;
2360 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002361case 118:
Lev Walkin1db91132006-03-09 09:11:53 +00002362#line 1214 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002363{
Lev Walkin070a52d2004-08-22 03:19:54 +00002364 int ret;
Lev Walkinceb20e72004-09-05 10:40:41 +00002365 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002366 checkmem(yyval.a_expr);
2367 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2368 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2369 yyvsp[0].tv_str, RLT_lowercase);
2370 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002371 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002372 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002373 ;
2374 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002375case 119:
Lev Walkin1db91132006-03-09 09:11:53 +00002376#line 1228 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002377{
Lev Walkinf15320b2004-06-03 03:38:44 +00002378 int ret;
2379 yyval.a_expr = yyvsp[-1].a_expr;
2380 assert(yyval.a_expr->expr_type == 0);
2381 assert(yyval.a_expr->meta_type == 0);
2382 assert(yyval.a_expr->reference == 0);
2383 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2384 checkmem(yyval.a_expr->reference);
2385 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2386 checkmem(ret == 0);
2387 free(yyvsp[-3].tv_str);
2388 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2389 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002390 ;
2391 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002392case 120:
Lev Walkin1db91132006-03-09 09:11:53 +00002393#line 1252 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002394{
Lev Walkinf15320b2004-06-03 03:38:44 +00002395 yyval.a_expr = asn1p_expr_new(yylineno);
2396 checkmem(yyval.a_expr);
2397 yyval.a_expr->reference = yyvsp[0].a_ref;
2398 yyval.a_expr->expr_type = A1TC_REFERENCE;
2399 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00002400 ;
2401 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002402case 121:
Lev Walkin1db91132006-03-09 09:11:53 +00002403#line 1259 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002404{
Lev Walkinf15320b2004-06-03 03:38:44 +00002405 yyval.a_expr = asn1p_expr_new(yylineno);
2406 checkmem(yyval.a_expr);
2407 yyval.a_expr->reference = yyvsp[0].a_ref;
2408 yyval.a_expr->expr_type = A1TC_INSTANCE;
2409 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002410 ;
2411 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002412case 122:
Lev Walkin1db91132006-03-09 09:11:53 +00002413#line 1274 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002414{
Lev Walkinf15320b2004-06-03 03:38:44 +00002415 int ret;
2416 yyval.a_ref = asn1p_ref_new(yylineno);
2417 checkmem(yyval.a_ref);
2418 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2419 checkmem(ret == 0);
2420 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002421 ;
2422 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002423case 123:
Lev Walkin1db91132006-03-09 09:11:53 +00002424#line 1282 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002425{
2426 int ret;
2427 yyval.a_ref = asn1p_ref_new(yylineno);
2428 checkmem(yyval.a_ref);
2429 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2430 checkmem(ret == 0);
2431 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2432 checkmem(ret == 0);
2433 free(yyvsp[-2].tv_str);
2434 ;
2435 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002436case 124:
Lev Walkin1db91132006-03-09 09:11:53 +00002437#line 1292 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002438{
2439 int ret;
2440 yyval.a_ref = asn1p_ref_new(yylineno);
2441 checkmem(yyval.a_ref);
2442 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2443 checkmem(ret == 0);
2444 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2445 checkmem(ret == 0);
2446 free(yyvsp[-2].tv_str);
2447 ;
2448 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002449case 125:
Lev Walkin1db91132006-03-09 09:11:53 +00002450#line 1302 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002451{
Lev Walkinf15320b2004-06-03 03:38:44 +00002452 int ret;
2453 yyval.a_ref = asn1p_ref_new(yylineno);
2454 checkmem(yyval.a_ref);
Lev Walkin9c974182004-09-15 11:59:51 +00002455 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2456 checkmem(ret == 0);
2457 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2458 checkmem(ret == 0);
2459 free(yyvsp[-2].tv_str);
2460 ;
2461 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002462case 126:
Lev Walkin1db91132006-03-09 09:11:53 +00002463#line 1312 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002464{
2465 int ret;
2466 yyval.a_ref = asn1p_ref_new(yylineno);
2467 checkmem(yyval.a_ref);
Lev Walkinf15320b2004-06-03 03:38:44 +00002468 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2469 free(yyvsp[0].tv_str);
2470 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002471 ;
2472 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002473case 127:
Lev Walkin1db91132006-03-09 09:11:53 +00002474#line 1320 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002475{
Lev Walkinf15320b2004-06-03 03:38:44 +00002476 int ret;
2477 yyval.a_ref = yyvsp[0].a_ref;
2478 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2479 free(yyvsp[-2].tv_str);
2480 checkmem(ret == 0);
2481 /*
2482 * Move the last element infront.
2483 */
2484 {
2485 struct asn1p_ref_component_s tmp_comp;
2486 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2487 memmove(&yyval.a_ref->components[1],
2488 &yyval.a_ref->components[0],
2489 sizeof(yyval.a_ref->components[0])
2490 * (yyval.a_ref->comp_count - 1));
2491 yyval.a_ref->components[0] = tmp_comp;
2492 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002493 ;
2494 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002495case 128:
Lev Walkin1db91132006-03-09 09:11:53 +00002496#line 1342 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002497{
Lev Walkinf15320b2004-06-03 03:38:44 +00002498 int ret;
2499 yyval.a_ref = asn1p_ref_new(yylineno);
2500 checkmem(yyval.a_ref);
2501 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2502 free(yyvsp[0].a_refcomp.name);
2503 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002504 ;
2505 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002506case 129:
Lev Walkin1db91132006-03-09 09:11:53 +00002507#line 1350 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002508{
Lev Walkinf15320b2004-06-03 03:38:44 +00002509 int ret;
2510 yyval.a_ref = yyvsp[-2].a_ref;
2511 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2512 free(yyvsp[0].a_refcomp.name);
2513 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002514 ;
2515 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002516case 132:
Lev Walkin1db91132006-03-09 09:11:53 +00002517#line 1364 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002518{
Lev Walkinf15320b2004-06-03 03:38:44 +00002519 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2520 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002521 ;
2522 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002523case 133:
Lev Walkin1db91132006-03-09 09:11:53 +00002524#line 1369 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002525{
Lev Walkinf15320b2004-06-03 03:38:44 +00002526 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2527 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002528 ;
2529 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002530case 134:
Lev Walkin1db91132006-03-09 09:11:53 +00002531#line 1378 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002532{
2533 yyval.a_ref = asn1p_ref_new(yylineno);
2534 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2535 ;
2536 break;}
2537case 135:
Lev Walkin1db91132006-03-09 09:11:53 +00002538#line 1382 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002539{
2540 yyval.a_ref = yyval.a_ref;
2541 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2542 ;
2543 break;}
2544case 136:
Lev Walkin1db91132006-03-09 09:11:53 +00002545#line 1386 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002546{
2547 yyval.a_ref = yyval.a_ref;
2548 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
2549 ;
2550 break;}
2551case 137:
Lev Walkin1db91132006-03-09 09:11:53 +00002552#line 1393 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002553{
2554 yyval.a_ref = asn1p_ref_new(yylineno);
2555 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2556 ;
2557 break;}
2558case 138:
Lev Walkin1db91132006-03-09 09:11:53 +00002559#line 1413 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002560{
Lev Walkinf15320b2004-06-03 03:38:44 +00002561 yyval.a_expr = yyvsp[-2].a_expr;
2562 assert(yyval.a_expr->Identifier == NULL);
2563 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2564 yyval.a_expr->meta_type = AMT_VALUE;
2565 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002566 ;
2567 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002568case 139:
2569#line 1423 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002570{
2571 yyval.a_value = asn1p_value_fromint(0);
2572 checkmem(yyval.a_value);
2573 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2574 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2575 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2576 ;
2577 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002578case 140:
2579#line 1430 "asn1p_y.y"
Lev Walkincbad2512005-03-24 16:27:02 +00002580{ asn1p_lexer_hack_push_opaque_state(); ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002581 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002582case 141:
2583#line 1430 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002584{
Lev Walkinf15320b2004-06-03 03:38:44 +00002585 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2586 checkmem(yyval.a_value);
2587 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin1004aa92004-09-08 00:28:11 +00002588 ;
2589 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002590case 142:
2591#line 1435 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002592{
2593 yyval.a_value = asn1p_value_fromint(0);
2594 checkmem(yyval.a_value);
2595 yyval.a_value->type = ATV_NULL;
2596 ;
2597 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002598case 143:
2599#line 1440 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002600{
2601 yyval.a_value = asn1p_value_fromint(0);
2602 checkmem(yyval.a_value);
2603 yyval.a_value->type = ATV_FALSE;
2604 ;
2605 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002606case 144:
2607#line 1445 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002608{
2609 yyval.a_value = asn1p_value_fromint(0);
2610 checkmem(yyval.a_value);
2611 yyval.a_value->type = ATV_TRUE;
2612 ;
2613 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002614case 145:
2615#line 1450 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002616{
Lev Walkinf15320b2004-06-03 03:38:44 +00002617 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2618 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002619 ;
2620 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002621case 146:
2622#line 1454 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002623{
Lev Walkinf15320b2004-06-03 03:38:44 +00002624 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2625 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002626 ;
2627 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002628case 147:
2629#line 1458 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002630{
Lev Walkin1e448d32005-03-24 14:26:38 +00002631 yyval.a_value = yyval.a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002632 ;
2633 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002634case 148:
2635#line 1461 "asn1p_y.y"
2636{
2637 yyval.a_value = yyvsp[0].a_value;
2638 ;
2639 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002640case 149:
Lev Walkin1db91132006-03-09 09:11:53 +00002641#line 1464 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002642{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002643 yyval.a_value = yyvsp[0].a_value;
2644 ;
2645 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00002646case 150:
Lev Walkin1db91132006-03-09 09:11:53 +00002647#line 1470 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002648{
Lev Walkinf15320b2004-06-03 03:38:44 +00002649 asn1p_ref_t *ref;
2650 int ret;
2651 ref = asn1p_ref_new(yylineno);
2652 checkmem(ref);
2653 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2654 checkmem(ret == 0);
2655 yyval.a_value = asn1p_value_fromref(ref, 0);
2656 checkmem(yyval.a_value);
2657 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002658 ;
2659 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002660case 151:
2661#line 1481 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002662{
Lev Walkinf15320b2004-06-03 03:38:44 +00002663 asn1p_ref_t *ref;
2664 int ret;
2665 ref = asn1p_ref_new(yylineno);
2666 checkmem(ref);
2667 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2668 checkmem(ret == 0);
2669 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2670 checkmem(ret == 0);
2671 yyval.a_value = asn1p_value_fromref(ref, 0);
2672 checkmem(yyval.a_value);
2673 free(yyvsp[-2].tv_str);
2674 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002675 ;
2676 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002677case 152:
2678#line 1499 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002679{
2680 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2681 checkmem(yyval.a_value);
2682 ;
2683 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002684case 153:
2685#line 1503 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002686{
Lev Walkind9574ae2005-03-24 16:22:35 +00002687 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002688 checkmem(yyval.a_value);
2689 yyval.a_value->type = ATV_TUPLE;
2690 ;
2691 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002692case 154:
2693#line 1508 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002694{
Lev Walkind9574ae2005-03-24 16:22:35 +00002695 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002696 checkmem(yyval.a_value);
2697 yyval.a_value->type = ATV_QUADRUPLE;
2698 ;
2699 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002700case 155:
2701#line 1542 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002702{
Lev Walkin1893ddf2005-03-20 14:28:32 +00002703 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00002704 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2705 checkmem(yyval.tv_opaque.buf);
2706 yyval.tv_opaque.buf[0] = '{';
Lev Walkin1893ddf2005-03-20 14:28:32 +00002707 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00002708 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2709 free(yyvsp[0].tv_opaque.buf);
Lev Walkin1004aa92004-09-08 00:28:11 +00002710 ;
2711 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002712case 156:
2713#line 1551 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002714{
Lev Walkinf15320b2004-06-03 03:38:44 +00002715 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2716 char *p = malloc(newsize + 1);
2717 checkmem(p);
2718 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2719 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2720 p[newsize] = '\0';
2721 free(yyvsp[-1].tv_opaque.buf);
2722 free(yyvsp[0].tv_opaque.buf);
2723 yyval.tv_opaque.buf = p;
2724 yyval.tv_opaque.len = newsize;
Lev Walkin1004aa92004-09-08 00:28:11 +00002725 ;
2726 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002727case 157:
2728#line 1566 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002729{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2730 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002731case 158:
2732#line 1567 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002733{ yyval.a_type = ASN_BASIC_NULL; ;
2734 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002735case 159:
2736#line 1568 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002737{ yyval.a_type = ASN_BASIC_REAL; ;
2738 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002739case 160:
2740#line 1569 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002741{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkin4696c742005-08-22 12:23:54 +00002742 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002743case 161:
2744#line 1570 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002745{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
Lev Walkin4696c742005-08-22 12:23:54 +00002746 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002747case 162:
2748#line 1571 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002749{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
Lev Walkin4696c742005-08-22 12:23:54 +00002750 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002751case 163:
2752#line 1572 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002753{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
Lev Walkin4696c742005-08-22 12:23:54 +00002754 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002755case 164:
2756#line 1573 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002757{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
Lev Walkin4696c742005-08-22 12:23:54 +00002758 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002759case 165:
2760#line 1574 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002761{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
2762 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002763case 166:
2764#line 1575 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002765{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
2766 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002767case 167:
2768#line 1576 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002769{ yyval.a_type = ASN_BASIC_UTCTime; ;
2770 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002771case 168:
2772#line 1577 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002773{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2774 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002775case 169:
2776#line 1578 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002777{ yyval.a_type = yyvsp[0].a_type; ;
2778 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002779case 170:
2780#line 1585 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002781{ yyval.a_type = ASN_BASIC_INTEGER; ;
2782 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002783case 171:
2784#line 1586 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002785{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2786 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002787case 172:
2788#line 1587 "asn1p_y.y"
Lev Walkin9c2285a2006-03-09 08:49:26 +00002789{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2790 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002791case 173:
2792#line 1591 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002793{
Lev Walkinceb20e72004-09-05 10:40:41 +00002794 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002795 checkmem(yyval.a_expr);
2796 yyval.a_expr->expr_type = yyvsp[0].a_type;
2797 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002798 ;
2799 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002800case 174:
2801#line 1597 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002802{
Lev Walkinf15320b2004-06-03 03:38:44 +00002803 if(yyvsp[0].a_expr) {
2804 yyval.a_expr = yyvsp[0].a_expr;
2805 } else {
Lev Walkinceb20e72004-09-05 10:40:41 +00002806 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002807 checkmem(yyval.a_expr);
2808 }
2809 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2810 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002811 ;
2812 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002813case 175:
2814#line 1610 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002815{ yyval.a_type = ASN_STRING_BMPString; ;
2816 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002817case 176:
2818#line 1611 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002819{
Lev Walkinf15320b2004-06-03 03:38:44 +00002820 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00002821 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002822 ;
2823 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002824case 177:
2825#line 1615 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002826{
Lev Walkin9c974182004-09-15 11:59:51 +00002827 yyval.a_type = ASN_STRING_GraphicString;
2828 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002829 ;
2830 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002831case 178:
2832#line 1619 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002833{ yyval.a_type = ASN_STRING_IA5String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002834 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002835case 179:
2836#line 1620 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002837{ yyval.a_type = ASN_STRING_ISO646String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002838 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002839case 180:
2840#line 1621 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002841{ yyval.a_type = ASN_STRING_NumericString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002842 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002843case 181:
2844#line 1622 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002845{ yyval.a_type = ASN_STRING_PrintableString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002846 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002847case 182:
2848#line 1623 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002849{
2850 yyval.a_type = ASN_STRING_T61String;
2851 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2852 ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002853 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002854case 183:
2855#line 1627 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002856{ yyval.a_type = ASN_STRING_TeletexString; ;
2857 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002858case 184:
2859#line 1628 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002860{ yyval.a_type = ASN_STRING_UniversalString; ;
2861 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002862case 185:
2863#line 1629 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002864{ yyval.a_type = ASN_STRING_UTF8String; ;
2865 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002866case 186:
2867#line 1630 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002868{
2869 yyval.a_type = ASN_STRING_VideotexString;
2870 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2871 ;
2872 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002873case 187:
2874#line 1634 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002875{ yyval.a_type = ASN_STRING_VisibleString; ;
2876 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002877case 188:
2878#line 1635 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002879{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2880 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002881case 194:
2882#line 1647 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002883{ yyval.a_constr = 0; ;
2884 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002885case 195:
2886#line 1648 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002887{
Lev Walkinceb20e72004-09-05 10:40:41 +00002888 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002889 ;
2890 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002891case 196:
2892#line 1654 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002893{
Lev Walkinceb20e72004-09-05 10:40:41 +00002894 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002895 ;
2896 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002897case 197:
2898#line 1657 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002899{
Lev Walkinf15320b2004-06-03 03:38:44 +00002900 /*
2901 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00002902 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00002903 */
Lev Walkind2ea1de2004-08-20 13:25:29 +00002904 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002905 ;
2906 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002907case 198:
2908#line 1667 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002909{
Lev Walkinf15320b2004-06-03 03:38:44 +00002910 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002911 ;
2912 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002913case 199:
2914#line 1670 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002915{
Lev Walkinf59d0752004-08-18 04:59:12 +00002916 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002917 ;
2918 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002919case 200:
2920#line 1676 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002921{
Lev Walkinf15320b2004-06-03 03:38:44 +00002922 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002923 ;
2924 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002925case 201:
2926#line 1679 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002927{
Lev Walkinf15320b2004-06-03 03:38:44 +00002928 asn1p_constraint_t *ct;
2929 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002930 ct->type = ACT_EL_EXT;
2931 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00002932 ;
2933 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002934case 202:
2935#line 1685 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002936{
Lev Walkinf15320b2004-06-03 03:38:44 +00002937 asn1p_constraint_t *ct;
2938 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002939 ct->type = ACT_EL_EXT;
2940 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002941 ct = yyval.a_constr;
2942 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002943 ;
2944 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002945case 203:
2946#line 1696 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002947{
Lev Walkinf59d0752004-08-18 04:59:12 +00002948 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002949 ;
2950 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002951case 204:
2952#line 1699 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002953{
2954 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2955 ;
2956 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002957case 205:
2958#line 1702 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002959{
Lev Walkinf15320b2004-06-03 03:38:44 +00002960 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002961 ;
2962 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002963case 206:
2964#line 1705 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002965{
Lev Walkinf15320b2004-06-03 03:38:44 +00002966 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002967 ;
2968 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002969case 207:
2970#line 1708 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002971{
Lev Walkinf15320b2004-06-03 03:38:44 +00002972 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002973 ;
2974 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002975case 208:
2976#line 1714 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002977{
Lev Walkinf15320b2004-06-03 03:38:44 +00002978 int ret;
2979 yyval.a_constr = asn1p_constraint_new(yylineno);
2980 checkmem(yyval.a_constr);
2981 yyval.a_constr->type = yyvsp[-3].a_ctype;
2982 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2983 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002984 ;
2985 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002986case 209:
2987#line 1722 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002988{
Lev Walkinf59d0752004-08-18 04:59:12 +00002989 int ret;
2990 yyval.a_constr = asn1p_constraint_new(yylineno);
2991 checkmem(yyval.a_constr);
2992 yyval.a_constr->type = ACT_CA_SET;
2993 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2994 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002995 ;
2996 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00002997case 210:
2998#line 1730 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002999{
Lev Walkinf59d0752004-08-18 04:59:12 +00003000 yyval.a_constr = asn1p_constraint_new(yylineno);
3001 checkmem(yyval.a_constr);
3002 yyval.a_constr->type = ACT_EL_VALUE;
3003 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003004 ;
3005 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003006case 211:
3007#line 1736 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003008{
Lev Walkin144db9b2004-10-12 23:26:53 +00003009 yyval.a_constr = asn1p_constraint_new(yylineno);
3010 checkmem(yyval.a_constr);
Lev Walkinff7dd142005-03-20 12:58:00 +00003011 yyval.a_constr->type = ACT_EL_TYPE;
3012 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin9c974182004-09-15 11:59:51 +00003013 ;
3014 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003015case 212:
3016#line 1742 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003017{
Lev Walkin4696c742005-08-22 12:23:54 +00003018 yyval.a_constr = asn1p_constraint_new(yylineno);
3019 checkmem(yyval.a_constr);
3020 yyval.a_constr->type = yyvsp[-1].a_ctype;
3021 yyval.a_constr->range_start = yyvsp[-2].a_value;
3022 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003023 ;
3024 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003025case 213:
3026#line 1749 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003027{
3028 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 = asn1p_value_fromint(-123);
3032 yyval.a_constr->range_stop = yyvsp[0].a_value;
3033 yyval.a_constr->range_start->type = ATV_MIN;
3034 ;
3035 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003036case 214:
3037#line 1757 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003038{
3039 yyval.a_constr = asn1p_constraint_new(yylineno);
3040 checkmem(yyval.a_constr);
3041 yyval.a_constr->type = yyvsp[-1].a_ctype;
3042 yyval.a_constr->range_start = yyvsp[-2].a_value;
3043 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3044 yyval.a_constr->range_stop->type = ATV_MAX;
3045 ;
3046 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003047case 215:
3048#line 1765 "asn1p_y.y"
3049{
3050 yyval.a_constr = asn1p_constraint_new(yylineno);
3051 checkmem(yyval.a_constr);
3052 yyval.a_constr->type = yyvsp[-1].a_ctype;
3053 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3054 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3055 yyval.a_constr->range_start->type = ATV_MIN;
3056 yyval.a_constr->range_stop->type = ATV_MAX;
3057 ;
3058 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003059case 216:
Lev Walkin1db91132006-03-09 09:11:53 +00003060#line 1774 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003061{
Lev Walkin1db91132006-03-09 09:11:53 +00003062 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkinef625402005-09-05 05:17:57 +00003063 ;
3064 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003065case 217:
Lev Walkin1db91132006-03-09 09:11:53 +00003066#line 1777 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003067{
Lev Walkinef625402005-09-05 05:17:57 +00003068 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin4696c742005-08-22 12:23:54 +00003069 ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003070 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003071case 218:
Lev Walkin1db91132006-03-09 09:11:53 +00003072#line 1781 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003073{ asn1p_lexer_hack_push_opaque_state(); ;
3074 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003075case 219:
3076#line 1781 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003077{
3078 yyval.a_constr = asn1p_constraint_new(yylineno);
3079 checkmem(yyval.a_constr);
3080 yyval.a_constr->type = ACT_CT_CTDBY;
3081 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3082 checkmem(yyval.a_constr->value);
3083 yyval.a_constr->value->type = ATV_UNPARSED;
3084 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003085 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003086case 220:
3087#line 1792 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003088{ yyval.a_ctype = ACT_EL_RANGE; ;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003089 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003090case 221:
3091#line 1793 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003092{ yyval.a_ctype = ACT_EL_RLRANGE; ;
Lev Walkinff7dd142005-03-20 12:58:00 +00003093 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003094case 222:
3095#line 1794 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003096{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3097 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003098case 223:
3099#line 1795 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003100{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3101 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003102case 224:
3103#line 1799 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003104{
Lev Walkinceb20e72004-09-05 10:40:41 +00003105 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003106 ;
3107 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003108case 225:
3109#line 1802 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003110{
Lev Walkinceb20e72004-09-05 10:40:41 +00003111 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin1004aa92004-09-08 00:28:11 +00003112 ;
3113 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003114case 226:
3115#line 1808 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003116{
3117 yyval.a_value = asn1p_value_fromint(0);
3118 checkmem(yyval.a_value);
3119 yyval.a_value->type = ATV_FALSE;
3120 ;
3121 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003122case 227:
3123#line 1813 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003124{
3125 yyval.a_value = asn1p_value_fromint(1);
3126 checkmem(yyval.a_value);
3127 yyval.a_value->type = ATV_TRUE;
3128 ;
3129 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003130case 228:
3131#line 1818 "asn1p_y.y"
3132{
3133 yyval.a_value = yyvsp[0].a_value;
3134 ;
3135 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003136case 229:
Lev Walkin1db91132006-03-09 09:11:53 +00003137#line 1821 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003138{
3139 yyval.a_value = yyvsp[0].a_value;
3140 ;
3141 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003142case 230:
Lev Walkin1db91132006-03-09 09:11:53 +00003143#line 1824 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003144{
Lev Walkinf15320b2004-06-03 03:38:44 +00003145 asn1p_ref_t *ref;
3146 int ret;
3147 ref = asn1p_ref_new(yylineno);
3148 checkmem(ref);
3149 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3150 checkmem(ret == 0);
3151 yyval.a_value = asn1p_value_fromref(ref, 0);
3152 checkmem(yyval.a_value);
3153 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003154 ;
3155 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003156case 231:
3157#line 1838 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003158{
Lev Walkinc8092cb2005-02-18 16:34:21 +00003159 asn1p_ref_t *ref;
3160 int ret;
3161 ref = asn1p_ref_new(yylineno);
3162 checkmem(ref);
3163 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3164 checkmem(ret == 0);
3165 yyval.a_value = asn1p_value_fromref(ref, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003166 checkmem(yyval.a_value);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003167 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003168 ;
3169 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003170case 232:
3171#line 1852 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003172{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003173 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003174 ;
3175 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003176case 233:
3177#line 1855 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003178{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003179 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkine596bf02005-03-28 15:01:27 +00003180 ;
3181 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003182case 234:
3183#line 1861 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003184{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003185 yyval.a_constr = yyvsp[0].a_constr;
3186 ;
3187 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003188case 235:
3189#line 1864 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003190{
3191 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3192 ;
3193 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003194case 236:
3195#line 1870 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003196{
Lev Walkinf15320b2004-06-03 03:38:44 +00003197 yyval.a_constr = asn1p_constraint_new(yylineno);
3198 checkmem(yyval.a_constr);
3199 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkine596bf02005-03-28 15:01:27 +00003200 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003201 ;
3202 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003203case 237:
3204#line 1876 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003205{
Lev Walkinf15320b2004-06-03 03:38:44 +00003206 yyval.a_constr = asn1p_constraint_new(yylineno);
3207 checkmem(yyval.a_constr);
3208 yyval.a_constr->type = ACT_EL_VALUE;
3209 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3210 yyval.a_constr->presence = yyvsp[0].a_pres;
Lev Walkine596bf02005-03-28 15:01:27 +00003211 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003212 ;
3213 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003214case 238:
3215#line 1890 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003216{ yyval.a_pres = ACPRES_DEFAULT; ;
3217 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003218case 239:
3219#line 1891 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003220{ yyval.a_pres = yyvsp[0].a_pres; ;
3221 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003222case 240:
3223#line 1895 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003224{
Lev Walkinf15320b2004-06-03 03:38:44 +00003225 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003226 ;
3227 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003228case 241:
3229#line 1898 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00003230{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003231 yyval.a_pres = ACPRES_ABSENT;
Lev Walkinb36317c2005-08-12 10:09:10 +00003232 ;
3233 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003234case 242:
3235#line 1901 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00003236{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003237 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkinb36317c2005-08-12 10:09:10 +00003238 ;
3239 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003240case 243:
3241#line 1907 "asn1p_y.y"
3242{
3243 yyval.a_constr = yyvsp[0].a_constr;
3244 ;
3245 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003246case 244:
Lev Walkin1db91132006-03-09 09:11:53 +00003247#line 1910 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003248{
3249 yyval.a_constr = yyvsp[0].a_constr;
3250 ;
3251 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003252case 245:
Lev Walkin1db91132006-03-09 09:11:53 +00003253#line 1919 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003254{
Lev Walkinf15320b2004-06-03 03:38:44 +00003255 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3256 asn1p_constraint_t *ct;
3257 int ret;
3258 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3259 checkmem(ret == 0);
3260 ct = asn1p_constraint_new(yylineno);
3261 checkmem(yyval.a_constr);
3262 ct->type = ACT_EL_VALUE;
3263 ct->value = asn1p_value_fromref(ref, 0);
3264 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003265 ;
3266 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003267case 246:
3268#line 1934 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003269{
Lev Walkinf15320b2004-06-03 03:38:44 +00003270 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003271 ;
3272 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003273case 247:
3274#line 1940 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003275{
Lev Walkinf15320b2004-06-03 03:38:44 +00003276 yyval.a_constr = asn1p_constraint_new(yylineno);
3277 checkmem(yyval.a_constr);
3278 yyval.a_constr->type = ACT_EL_VALUE;
3279 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003280 ;
3281 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003282case 248:
3283#line 1946 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003284{
Lev Walkinf15320b2004-06-03 03:38:44 +00003285 asn1p_constraint_t *ct;
3286 ct = asn1p_constraint_new(yylineno);
3287 checkmem(ct);
3288 ct->type = ACT_EL_VALUE;
3289 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3290 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00003291 ;
3292 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003293case 249:
3294#line 1960 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003295{
Lev Walkinf15320b2004-06-03 03:38:44 +00003296 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3297 int ret;
3298 *p = '@';
3299 strcpy(p + 1, yyvsp[0].tv_str);
3300 yyval.a_ref = asn1p_ref_new(yylineno);
3301 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3302 checkmem(ret == 0);
3303 free(p);
3304 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003305 ;
3306 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003307case 250:
3308#line 1971 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003309{
Lev Walkinf15320b2004-06-03 03:38:44 +00003310 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3311 int ret;
3312 p[0] = '@';
3313 p[1] = '.';
3314 strcpy(p + 2, yyvsp[0].tv_str);
3315 yyval.a_ref = asn1p_ref_new(yylineno);
3316 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3317 checkmem(ret == 0);
3318 free(p);
3319 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003320 ;
3321 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003322case 251:
3323#line 1987 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003324{
Lev Walkinf15320b2004-06-03 03:38:44 +00003325 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003326 ;
3327 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003328case 252:
3329#line 1990 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003330{
Lev Walkinf15320b2004-06-03 03:38:44 +00003331 int l1 = strlen(yyvsp[-2].tv_str);
3332 int l3 = strlen(yyvsp[0].tv_str);
3333 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3334 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3335 yyval.tv_str[l1] = '.';
3336 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3337 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin1004aa92004-09-08 00:28:11 +00003338 ;
3339 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003340case 253:
3341#line 2008 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003342{
Lev Walkin9c974182004-09-15 11:59:51 +00003343 yyval.a_marker.flags = EM_NOMARK;
3344 yyval.a_marker.default_value = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00003345 ;
3346 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003347case 254:
3348#line 2012 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003349{ yyval.a_marker = yyvsp[0].a_marker; ;
Lev Walkinec208e62004-09-14 02:44:07 +00003350 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003351case 255:
3352#line 2016 "asn1p_y.y"
Lev Walkinec208e62004-09-14 02:44:07 +00003353{
Lev Walkin70853052005-11-26 11:21:55 +00003354 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
Lev Walkin9c974182004-09-15 11:59:51 +00003355 yyval.a_marker.default_value = 0;
Lev Walkinec208e62004-09-14 02:44:07 +00003356 ;
3357 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003358case 256:
3359#line 2020 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003360{
3361 yyval.a_marker.flags = EM_DEFAULT;
3362 yyval.a_marker.default_value = yyvsp[0].a_value;
3363 ;
3364 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003365case 257:
3366#line 2043 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003367{
Lev Walkinceb20e72004-09-05 10:40:41 +00003368 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003369 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003370 ;
3371 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003372case 258:
3373#line 2047 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003374{
Lev Walkine596bf02005-03-28 15:01:27 +00003375 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003376 ;
3377 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003378case 259:
3379#line 2053 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003380{
Lev Walkine596bf02005-03-28 15:01:27 +00003381 yyval.a_expr = asn1p_expr_new(yylineno);
3382 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003383 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3384 ;
3385 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003386case 260:
3387#line 2058 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003388{
3389 yyval.a_expr = yyvsp[-2].a_expr;
3390 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3391 ;
3392 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003393case 261:
3394#line 2065 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003395{
Lev Walkinceb20e72004-09-05 10:40:41 +00003396 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003397 checkmem(yyval.a_expr);
3398 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3399 yyval.a_expr->meta_type = AMT_VALUE;
3400 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003401 ;
3402 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003403case 262:
3404#line 2072 "asn1p_y.y"
3405{
3406 yyval.a_expr = asn1p_expr_new(yylineno);
3407 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[-3].tv_str;
3411 yyval.a_expr->value = yyvsp[-1].a_value;
3412 ;
3413 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003414case 263:
Lev Walkin1db91132006-03-09 09:11:53 +00003415#line 2080 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003416{
3417 yyval.a_expr = asn1p_expr_new(yylineno);
3418 checkmem(yyval.a_expr);
3419 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3420 yyval.a_expr->meta_type = AMT_VALUE;
3421 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3422 yyval.a_expr->value = yyvsp[-1].a_value;
3423 ;
3424 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003425case 264:
Lev Walkin1db91132006-03-09 09:11:53 +00003426#line 2088 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003427{
3428 yyval.a_expr = asn1p_expr_new(yylineno);
3429 checkmem(yyval.a_expr);
3430 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3431 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkinf15320b2004-06-03 03:38:44 +00003432 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003433 ;
3434 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003435case 265:
3436#line 2095 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003437{
Lev Walkinceb20e72004-09-05 10:40:41 +00003438 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003439 checkmem(yyval.a_expr);
3440 yyval.a_expr->Identifier = strdup("...");
3441 checkmem(yyval.a_expr->Identifier);
3442 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3443 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003444 ;
3445 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003446case 266:
3447#line 2106 "asn1p_y.y"
3448{
3449 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3450 checkmem(yyval.a_value);
3451 ;
3452 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003453case 267:
Lev Walkin1db91132006-03-09 09:11:53 +00003454#line 2110 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003455{
3456 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3457 checkmem(yyval.a_value);
3458 ;
Lev Walkinb36317c2005-08-12 10:09:10 +00003459 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003460case 268:
Lev Walkin1db91132006-03-09 09:11:53 +00003461#line 2141 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003462{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3463 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003464case 269:
3465#line 2142 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003466{ yyval.a_tag = yyvsp[0].a_tag; ;
3467 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003468case 270:
3469#line 2146 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003470{
Lev Walkinc603f102005-01-23 09:51:44 +00003471 yyval.a_tag = yyvsp[-1].a_tag;
3472 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin1004aa92004-09-08 00:28:11 +00003473 ;
3474 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003475case 271:
3476#line 2153 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003477{
Lev Walkinc603f102005-01-23 09:51:44 +00003478 yyval.a_tag = yyvsp[-2].a_tag;
3479 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00003480 ;
3481 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003482case 272:
3483#line 2159 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003484{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00003485 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003486case 273:
3487#line 2160 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003488{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
Lev Walkin83cac2f2004-09-22 16:03:36 +00003489 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003490case 274:
3491#line 2161 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003492{ yyval.a_tag.tag_class = TC_APPLICATION; ;
Lev Walkin1e448d32005-03-24 14:26:38 +00003493 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003494case 275:
3495#line 2162 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003496{ yyval.a_tag.tag_class = TC_PRIVATE; ;
Lev Walkinb36317c2005-08-12 10:09:10 +00003497 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003498case 276:
3499#line 2166 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003500{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3501 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003502case 277:
3503#line 2167 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003504{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3505 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003506case 278:
3507#line 2168 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003508{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3509 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003510case 279:
3511#line 2172 "asn1p_y.y"
3512{
3513 checkmem(yyvsp[0].tv_str);
3514 yyval.tv_str = yyvsp[0].tv_str;
3515 ;
3516 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003517case 280:
Lev Walkin1db91132006-03-09 09:11:53 +00003518#line 2176 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00003519{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003520 checkmem(yyvsp[0].tv_str);
Lev Walkinb36317c2005-08-12 10:09:10 +00003521 yyval.tv_str = yyvsp[0].tv_str;
3522 ;
3523 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003524case 281:
Lev Walkin1db91132006-03-09 09:11:53 +00003525#line 2184 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003526{
3527 checkmem(yyvsp[0].tv_str);
3528 yyval.tv_str = yyvsp[0].tv_str;
3529 ;
3530 break;}
Lev Walkin9c2285a2006-03-09 08:49:26 +00003531case 282:
Lev Walkin1db91132006-03-09 09:11:53 +00003532#line 2191 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003533{ yyval.tv_str = 0; ;
3534 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003535case 283:
3536#line 2192 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003537{
3538 yyval.tv_str = yyvsp[0].tv_str;
3539 ;
3540 break;}
Lev Walkin1db91132006-03-09 09:11:53 +00003541case 284:
3542#line 2198 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003543{
Lev Walkinceb20e72004-09-05 10:40:41 +00003544 checkmem(yyvsp[0].tv_str);
3545 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003546 ;
3547 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00003548}
3549 /* the action file gets copied in in place of this dollarsign */
3550#line 543 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00003551
3552 yyvsp -= yylen;
3553 yyssp -= yylen;
Lev Walkin1004aa92004-09-08 00:28:11 +00003554#ifdef YYLSP_NEEDED
3555 yylsp -= yylen;
3556#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003557
Lev Walkin1004aa92004-09-08 00:28:11 +00003558#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00003559 if (yydebug)
3560 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003561 short *ssp1 = yyss - 1;
3562 fprintf (stderr, "state stack now");
3563 while (ssp1 != yyssp)
3564 fprintf (stderr, " %d", *++ssp1);
3565 fprintf (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003566 }
3567#endif
3568
3569 *++yyvsp = yyval;
3570
Lev Walkin1004aa92004-09-08 00:28:11 +00003571#ifdef YYLSP_NEEDED
3572 yylsp++;
3573 if (yylen == 0)
3574 {
3575 yylsp->first_line = yylloc.first_line;
3576 yylsp->first_column = yylloc.first_column;
3577 yylsp->last_line = (yylsp-1)->last_line;
3578 yylsp->last_column = (yylsp-1)->last_column;
3579 yylsp->text = 0;
3580 }
3581 else
3582 {
3583 yylsp->last_line = (yylsp+yylen-1)->last_line;
3584 yylsp->last_column = (yylsp+yylen-1)->last_column;
3585 }
3586#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003587
Lev Walkin1004aa92004-09-08 00:28:11 +00003588 /* Now "shift" the result of the reduction.
3589 Determine what state that goes to,
3590 based on the state we popped back to
3591 and the rule number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003592
3593 yyn = yyr1[yyn];
3594
Lev Walkin1004aa92004-09-08 00:28:11 +00003595 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3596 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003597 yystate = yytable[yystate];
3598 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003599 yystate = yydefgoto[yyn - YYNTBASE];
Lev Walkinf15320b2004-06-03 03:38:44 +00003600
3601 goto yynewstate;
3602
Lev Walkin1004aa92004-09-08 00:28:11 +00003603yyerrlab: /* here on detecting error */
Lev Walkinf15320b2004-06-03 03:38:44 +00003604
Lev Walkin1004aa92004-09-08 00:28:11 +00003605 if (! yyerrstatus)
3606 /* If not already recovering from an error, report this error. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003607 {
3608 ++yynerrs;
Lev Walkin1004aa92004-09-08 00:28:11 +00003609
3610#ifdef YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003611 yyn = yypact[yystate];
3612
Lev Walkin1004aa92004-09-08 00:28:11 +00003613 if (yyn > YYFLAG && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003614 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003615 int size = 0;
3616 char *msg;
3617 int x, count;
Lev Walkinf15320b2004-06-03 03:38:44 +00003618
Lev Walkin1004aa92004-09-08 00:28:11 +00003619 count = 0;
3620 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3621 for (x = (yyn < 0 ? -yyn : 0);
Lev Walkin4a4bdf72005-06-07 21:43:32 +00003622 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
Lev Walkin1004aa92004-09-08 00:28:11 +00003623 if (yycheck[x + yyn] == x)
3624 size += strlen(yytname[x]) + 15, count++;
3625 msg = (char *) malloc(size + 15);
3626 if (msg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003627 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003628 strcpy(msg, "parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003629
Lev Walkin1004aa92004-09-08 00:28:11 +00003630 if (count < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003631 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003632 count = 0;
3633 for (x = (yyn < 0 ? -yyn : 0);
Lev Walkin4a4bdf72005-06-07 21:43:32 +00003634 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
Lev Walkin1004aa92004-09-08 00:28:11 +00003635 if (yycheck[x + yyn] == x)
Lev Walkinf15320b2004-06-03 03:38:44 +00003636 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003637 strcat(msg, count == 0 ? ", expecting `" : " or `");
3638 strcat(msg, yytname[x]);
3639 strcat(msg, "'");
3640 count++;
Lev Walkinf15320b2004-06-03 03:38:44 +00003641 }
3642 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003643 yyerror(msg);
3644 free(msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003645 }
3646 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003647 yyerror ("parse error; also virtual memory exceeded");
Lev Walkinf15320b2004-06-03 03:38:44 +00003648 }
3649 else
3650#endif /* YYERROR_VERBOSE */
Lev Walkin1004aa92004-09-08 00:28:11 +00003651 yyerror("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003652 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003653
Lev Walkinf15320b2004-06-03 03:38:44 +00003654 goto yyerrlab1;
Lev Walkin1004aa92004-09-08 00:28:11 +00003655yyerrlab1: /* here on error raised explicitly by an action */
Lev Walkinf15320b2004-06-03 03:38:44 +00003656
3657 if (yyerrstatus == 3)
3658 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003659 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003660
Lev Walkin1004aa92004-09-08 00:28:11 +00003661 /* return failure if at end of input */
Lev Walkinf15320b2004-06-03 03:38:44 +00003662 if (yychar == YYEOF)
Lev Walkin1004aa92004-09-08 00:28:11 +00003663 YYABORT;
Lev Walkinf15320b2004-06-03 03:38:44 +00003664
Lev Walkin1004aa92004-09-08 00:28:11 +00003665#if YYDEBUG != 0
3666 if (yydebug)
3667 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3668#endif
3669
Lev Walkinf15320b2004-06-03 03:38:44 +00003670 yychar = YYEMPTY;
3671 }
3672
Lev Walkin1004aa92004-09-08 00:28:11 +00003673 /* Else will try to reuse lookahead token
3674 after shifting the error token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003675
Lev Walkin1004aa92004-09-08 00:28:11 +00003676 yyerrstatus = 3; /* Each real token shifted decrements this */
Lev Walkinf15320b2004-06-03 03:38:44 +00003677
Lev Walkin1004aa92004-09-08 00:28:11 +00003678 goto yyerrhandle;
Lev Walkin459ab022004-09-07 10:39:09 +00003679
Lev Walkin1004aa92004-09-08 00:28:11 +00003680yyerrdefault: /* current state does not do anything special for the error token. */
Lev Walkin459ab022004-09-07 10:39:09 +00003681
Lev Walkin1004aa92004-09-08 00:28:11 +00003682#if 0
3683 /* This is wrong; only states that explicitly want error tokens
3684 should shift them. */
3685 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3686 if (yyn) goto yydefault;
Lev Walkinceb20e72004-09-05 10:40:41 +00003687#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003688
3689yyerrpop: /* pop the current state because it cannot handle the error token */
3690
3691 if (yyssp == yyss) YYABORT;
3692 yyvsp--;
3693 yystate = *--yyssp;
3694#ifdef YYLSP_NEEDED
3695 yylsp--;
3696#endif
3697
3698#if YYDEBUG != 0
3699 if (yydebug)
3700 {
3701 short *ssp1 = yyss - 1;
3702 fprintf (stderr, "Error: state stack now");
3703 while (ssp1 != yyssp)
3704 fprintf (stderr, " %d", *++ssp1);
3705 fprintf (stderr, "\n");
Lev Walkinceb20e72004-09-05 10:40:41 +00003706 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003707#endif
3708
3709yyerrhandle:
3710
3711 yyn = yypact[yystate];
3712 if (yyn == YYFLAG)
3713 goto yyerrdefault;
3714
3715 yyn += YYTERROR;
3716 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3717 goto yyerrdefault;
3718
3719 yyn = yytable[yyn];
3720 if (yyn < 0)
3721 {
3722 if (yyn == YYFLAG)
3723 goto yyerrpop;
3724 yyn = -yyn;
3725 goto yyreduce;
3726 }
3727 else if (yyn == 0)
3728 goto yyerrpop;
Lev Walkinf15320b2004-06-03 03:38:44 +00003729
3730 if (yyn == YYFINAL)
3731 YYACCEPT;
3732
Lev Walkin1004aa92004-09-08 00:28:11 +00003733#if YYDEBUG != 0
3734 if (yydebug)
3735 fprintf(stderr, "Shifting error token, ");
3736#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003737
3738 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00003739#ifdef YYLSP_NEEDED
3740 *++yylsp = yylloc;
3741#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003742
3743 yystate = yyn;
3744 goto yynewstate;
3745
Lev Walkin1004aa92004-09-08 00:28:11 +00003746 yyacceptlab:
3747 /* YYACCEPT comes here. */
3748 if (yyfree_stacks)
3749 {
3750 free (yyss);
3751 free (yyvs);
3752#ifdef YYLSP_NEEDED
3753 free (yyls);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003754#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003755 }
3756 return 0;
Lev Walkin459ab022004-09-07 10:39:09 +00003757
Lev Walkin1004aa92004-09-08 00:28:11 +00003758 yyabortlab:
3759 /* YYABORT comes here. */
3760 if (yyfree_stacks)
3761 {
3762 free (yyss);
3763 free (yyvs);
3764#ifdef YYLSP_NEEDED
3765 free (yyls);
Lev Walkin459ab022004-09-07 10:39:09 +00003766#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003767 }
3768 return 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003769}
Lev Walkin1db91132006-03-09 09:11:53 +00003770#line 2204 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00003771
3772
3773
3774/*
3775 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3776 */
3777static asn1p_value_t *
3778_convert_bitstring2binary(char *str, int base) {
3779 asn1p_value_t *val;
3780 int slen;
3781 int memlen;
3782 int baselen;
3783 int bits;
3784 uint8_t *binary_vector;
3785 uint8_t *bv_ptr;
3786 uint8_t cur_val;
3787
3788 assert(str);
3789 assert(str[0] == '\'');
3790
3791 switch(base) {
3792 case 'B':
3793 baselen = 1;
3794 break;
3795 case 'H':
3796 baselen = 4;
3797 break;
3798 default:
3799 assert(base == 'B' || base == 'H');
3800 errno = EINVAL;
3801 return NULL;
3802 }
3803
3804 slen = strlen(str);
3805 assert(str[slen - 1] == base);
3806 assert(str[slen - 2] == '\'');
3807
3808 memlen = slen / (8 / baselen); /* Conservative estimate */
3809
3810 bv_ptr = binary_vector = malloc(memlen + 1);
3811 if(bv_ptr == NULL)
3812 /* ENOMEM */
3813 return NULL;
3814
3815 cur_val = 0;
3816 bits = 0;
3817 while(*(++str) != '\'') {
3818 switch(baselen) {
3819 case 1:
3820 switch(*str) {
3821 case '1':
3822 cur_val |= 1 << (7 - (bits % 8));
3823 case '0':
3824 break;
3825 default:
3826 assert(!"_y UNREACH1");
3827 case ' ': case '\r': case '\n':
3828 continue;
3829 }
3830 break;
3831 case 4:
3832 switch(*str) {
3833 case '0': case '1': case '2': case '3': case '4':
3834 case '5': case '6': case '7': case '8': case '9':
3835 cur_val |= (*str - '0') << (4 - (bits % 8));
3836 break;
3837 case 'A': case 'B': case 'C':
3838 case 'D': case 'E': case 'F':
3839 cur_val |= ((*str - 'A') + 10)
3840 << (4 - (bits % 8));
3841 break;
3842 default:
3843 assert(!"_y UNREACH2");
3844 case ' ': case '\r': case '\n':
3845 continue;
3846 }
3847 break;
3848 }
3849
3850 bits += baselen;
3851 if((bits % 8) == 0) {
3852 *bv_ptr++ = cur_val;
3853 cur_val = 0;
3854 }
3855 }
3856
3857 *bv_ptr = cur_val;
3858 assert((bv_ptr - binary_vector) <= memlen);
3859
3860 val = asn1p_value_frombits(binary_vector, bits, 0);
3861 if(val == NULL) {
3862 free(binary_vector);
3863 }
3864
3865 return val;
3866}
3867
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003868/*
3869 * For unnamed types (used in old X.208 compliant modules)
3870 * generate some sort of interim names, to not to force human being to fix
3871 * the specification's compliance to modern ASN.1 standards.
3872 */
3873static void
3874_fixup_anonymous_identifier(asn1p_expr_t *expr) {
3875 char *p;
3876 assert(expr->Identifier == 0);
3877
3878 /*
3879 * Try to figure out the type name
3880 * without going too much into details
3881 */
3882 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
3883 if(expr->reference && expr->reference->comp_count > 0)
3884 expr->Identifier = expr->reference->components[0].name;
3885
3886 fprintf(stderr,
3887 "WARNING: Line %d: expected lower-case member identifier, "
3888 "found an unnamed %s.\n"
3889 "WARNING: Obsolete X.208 syntax detected, "
3890 "please give the member a name.\n",
3891 yylineno, expr->Identifier ? expr->Identifier : "type");
3892
3893 if(!expr->Identifier)
3894 expr->Identifier = "unnamed";
3895 expr->Identifier = strdup(expr->Identifier);
3896 assert(expr->Identifier);
3897 /* Make a lowercase identifier from the type name */
3898 for(p = expr->Identifier; *p; p++) {
3899 switch(*p) {
3900 case 'A' ... 'Z': *p += 32; break;
3901 case ' ': *p = '_'; break;
3902 case '-': *p = '_'; break;
3903 }
3904 }
3905 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
3906 "Name clash may occur later.\n",
3907 expr->Identifier);
3908}
3909
Lev Walkinf15320b2004-06-03 03:38:44 +00003910extern char *asn1p_text;
3911
3912int
3913yyerror(const char *msg) {
3914 fprintf(stderr,
3915 "ASN.1 grammar parse error "
3916 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00003917 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003918 return -1;
3919}
3920
3921