blob: 058a7c84904acd82a344a29af1509ff788cad073 [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 Walkinef625402005-09-05 05:17:57 +0000224#define YYFINAL 431
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 Walkinef625402005-09-05 05:17:57 +0000228#define YYTRANSLATE(x) ((unsigned)(x) <= 356 ? yytranslate[x] : 223)
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,
276 135, 139, 141, 145, 147, 148, 155, 157, 159, 164,
277 168, 172, 179, 181, 185, 187, 191, 195, 199, 201,
Lev Walkinef625402005-09-05 05:17:57 +0000278 205, 207, 209, 210, 212, 214, 218, 222, 225, 229,
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000279 231, 233, 237, 240, 242, 244, 250, 251, 253, 255,
280 259, 262, 267, 272, 273, 275, 276, 283, 285, 288,
Lev Walkinef625402005-09-05 05:17:57 +0000281 290, 292, 294, 298, 302, 306, 307, 310, 312, 317,
282 322, 327, 334, 341, 343, 348, 353, 355, 359, 361,
283 365, 369, 373, 375, 379, 381, 385, 387, 389, 391,
284 393, 398, 402, 403, 407, 409, 411, 413, 415, 417,
285 419, 421, 423, 425, 429, 431, 433, 435, 437, 440,
286 442, 444, 446, 448, 451, 454, 456, 458, 461, 464,
287 466, 468, 470, 472, 474, 477, 479, 482, 484, 486,
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000288 488, 490, 492, 494, 496, 498, 500, 502, 504, 506,
Lev Walkinef625402005-09-05 05:17:57 +0000289 508, 510, 512, 514, 516, 518, 520, 521, 523, 525,
290 530, 534, 539, 541, 545, 551, 553, 557, 561, 565,
291 569, 574, 578, 580, 582, 586, 590, 594, 598, 600,
292 602, 603, 609, 611, 614, 617, 621, 623, 625, 627,
293 629, 631, 633, 635, 637, 641, 647, 649, 653, 655,
294 659, 660, 662, 664, 666, 668, 670, 672, 676, 681,
295 683, 687, 690, 694, 696, 700, 701, 703, 705, 708,
296 711, 715, 717, 721, 723, 728, 733, 735, 737, 739,
297 741, 742, 744, 747, 752, 753, 755, 757, 759, 760,
298 762, 764, 766, 768, 770, 771, 773
Lev Walkin1004aa92004-09-08 00:28:11 +0000299};
Lev Walkinf15320b2004-06-03 03:38:44 +0000300
Lev Walkind9574ae2005-03-24 16:22:35 +0000301static const short yyrhs[] = { 119,
Lev Walkinef625402005-09-05 05:17:57 +0000302 0, 120, 0, 119, 120, 0, 219, 121, 36, 125,
Lev Walkind9574ae2005-03-24 16:22:35 +0000303 3, 23, 128, 41, 0, 0, 122, 0, 105, 123,
304 106, 0, 105, 106, 0, 124, 0, 123, 124, 0,
Lev Walkinef625402005-09-05 05:17:57 +0000305 222, 0, 222, 107, 9, 108, 0, 9, 0, 0,
Lev Walkind9574ae2005-03-24 16:22:35 +0000306 126, 0, 127, 0, 126, 127, 0, 43, 86, 0,
307 54, 86, 0, 22, 86, 0, 45, 55, 0, 14,
308 59, 0, 0, 129, 0, 130, 0, 129, 130, 0,
Lev Walkinef625402005-09-05 05:17:57 +0000309 132, 0, 138, 0, 144, 0, 173, 0, 141, 0,
310 0, 40, 14, 131, 0, 182, 0, 56, 133, 109,
Lev Walkinb36317c2005-08-12 10:09:10 +0000311 0, 56, 48, 0, 135, 0, 133, 135, 0, 0,
Lev Walkinef625402005-09-05 05:17:57 +0000312 122, 0, 136, 48, 219, 134, 0, 137, 0, 136,
313 110, 137, 0, 219, 0, 219, 105, 106, 0, 222,
Lev Walkinb36317c2005-08-12 10:09:10 +0000314 0, 44, 139, 109, 0, 44, 19, 109, 0, 44,
Lev Walkinef625402005-09-05 05:17:57 +0000315 109, 0, 140, 0, 139, 110, 140, 0, 219, 0,
316 219, 105, 106, 0, 222, 0, 0, 219, 143, 3,
317 105, 142, 178, 0, 168, 0, 179, 0, 219, 3,
318 214, 89, 0, 219, 3, 164, 0, 219, 3, 154,
319 0, 219, 105, 145, 106, 3, 164, 0, 146, 0,
320 145, 110, 146, 0, 219, 0, 219, 111, 222, 0,
321 219, 111, 219, 0, 179, 111, 222, 0, 148, 0,
322 147, 110, 148, 0, 164, 0, 222, 0, 0, 150,
323 0, 151, 0, 150, 110, 151, 0, 222, 164, 208,
324 0, 164, 208, 0, 32, 70, 164, 0, 163, 0,
325 153, 0, 152, 110, 153, 0, 222, 164, 0, 163,
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000326 0, 164, 0, 30, 105, 156, 106, 158, 0, 0,
Lev Walkinef625402005-09-05 05:17:57 +0000327 90, 0, 157, 0, 156, 110, 157, 0, 171, 208,
328 0, 171, 164, 155, 208, 0, 171, 171, 155, 208,
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000329 0, 0, 159, 0, 0, 97, 84, 105, 160, 161,
Lev Walkinef625402005-09-05 05:17:57 +0000330 106, 0, 162, 0, 161, 162, 0, 4, 0, 171,
331 0, 104, 0, 104, 112, 176, 0, 104, 112, 213,
332 0, 214, 166, 186, 0, 0, 165, 167, 0, 181,
333 0, 29, 105, 152, 106, 0, 80, 105, 149, 106,
334 0, 81, 105, 149, 106, 0, 80, 186, 70, 221,
335 214, 166, 0, 81, 186, 70, 221, 214, 166, 0,
336 20, 0, 20, 37, 27, 222, 0, 219, 105, 147,
337 106, 0, 168, 0, 58, 70, 168, 0, 13, 0,
338 13, 113, 219, 0, 220, 113, 219, 0, 13, 113,
339 222, 0, 220, 0, 220, 113, 169, 0, 170, 0,
340 169, 113, 170, 0, 172, 0, 172, 0, 15, 0,
341 16, 0, 222, 143, 3, 174, 0, 222, 111, 174,
342 0, 0, 105, 175, 178, 0, 65, 0, 47, 0,
343 88, 0, 5, 0, 7, 0, 177, 0, 213, 0,
344 176, 0, 222, 0, 219, 113, 222, 0, 6, 0,
345 10, 0, 11, 0, 4, 0, 178, 4, 0, 26,
346 0, 65, 0, 78, 0, 180, 0, 69, 83, 0,
347 67, 53, 0, 79, 0, 46, 0, 38, 73, 0,
348 28, 83, 0, 93, 0, 49, 0, 182, 0, 60,
349 0, 42, 0, 24, 83, 0, 179, 0, 180, 210,
350 0, 25, 0, 50, 0, 51, 0, 52, 0, 61,
351 0, 66, 0, 76, 0, 85, 0, 87, 0, 92,
352 0, 94, 0, 95, 0, 96, 0, 68, 0, 101,
353 0, 102, 0, 99, 0, 100, 0, 98, 0, 0,
354 187, 0, 188, 0, 82, 107, 189, 108, 0, 107,
355 189, 108, 0, 188, 107, 189, 108, 0, 190, 0,
356 190, 110, 104, 0, 190, 110, 104, 110, 190, 0,
357 191, 0, 19, 98, 191, 0, 190, 183, 191, 0,
358 190, 184, 191, 0, 191, 185, 191, 0, 194, 107,
359 189, 108, 0, 107, 189, 108, 0, 195, 0, 196,
360 0, 195, 193, 195, 0, 63, 193, 195, 0, 195,
361 193, 62, 0, 63, 193, 62, 0, 202, 0, 197,
362 0, 0, 33, 27, 105, 192, 178, 0, 103, 0,
363 103, 114, 0, 114, 103, 0, 114, 103, 114, 0,
364 82, 0, 48, 0, 47, 0, 88, 0, 213, 0,
365 177, 0, 222, 0, 219, 0, 97, 31, 188, 0,
366 97, 32, 105, 198, 106, 0, 199, 0, 198, 110,
367 199, 0, 104, 0, 222, 186, 200, 0, 0, 201,
368 0, 75, 0, 17, 0, 71, 0, 203, 0, 204,
369 0, 105, 219, 106, 0, 203, 105, 205, 106, 0,
370 206, 0, 205, 110, 206, 0, 115, 207, 0, 115,
371 113, 207, 0, 222, 0, 207, 113, 222, 0, 0,
372 209, 0, 71, 0, 35, 174, 0, 105, 106, 0,
373 105, 211, 106, 0, 212, 0, 211, 110, 212, 0,
374 222, 0, 222, 107, 213, 108, 0, 222, 107, 176,
375 108, 0, 213, 0, 104, 0, 9, 0, 12, 0,
376 0, 215, 0, 216, 218, 0, 116, 217, 9, 117,
377 0, 0, 91, 0, 21, 0, 77, 0, 0, 54,
378 0, 43, 0, 13, 0, 14, 0, 14, 0, 0,
379 222, 0, 8, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000380};
Lev Walkinf15320b2004-06-03 03:38:44 +0000381
382#endif
383
Lev Walkin1004aa92004-09-08 00:28:11 +0000384#if YYDEBUG != 0
385static const short yyrline[] = { 0,
Lev Walkinef625402005-09-05 05:17:57 +0000386 320, 326, 332, 348, 373, 375, 378, 382, 387, 394,
387 402, 407, 411, 420, 422, 430, 434, 442, 446, 449,
388 452, 456, 476, 478, 486, 490, 522, 526, 535, 542,
Lev Walkin70853052005-11-26 11:21:55 +0000389 555, 562, 564, 576, 588, 599, 604, 610, 616, 618,
390 621, 632, 638, 644, 651, 657, 665, 669, 672, 679,
391 685, 691, 698, 704, 713, 715, 724, 732, 746, 758,
392 764, 780, 789, 799, 809, 814, 821, 828, 838, 844,
393 850, 854, 877, 879, 881, 887, 893, 901, 907, 914,
394 919, 925, 931, 937, 940, 946, 956, 958, 961, 969,
395 975, 984, 990, 1007, 1009, 1014, 1018, 1023, 1028, 1034,
396 1038, 1049, 1058, 1067, 1078, 1100, 1107, 1126, 1130, 1136,
397 1142, 1148, 1158, 1168, 1174, 1188, 1212, 1219, 1233, 1242,
398 1252, 1262, 1272, 1280, 1301, 1310, 1319, 1320, 1322, 1329,
399 1341, 1351, 1359, 1359, 1364, 1369, 1374, 1379, 1383, 1387,
400 1390, 1393, 1398, 1410, 1427, 1432, 1437, 1470, 1480, 1494,
401 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505,
402 1506, 1507, 1513, 1515, 1516, 1519, 1526, 1538, 1540, 1544,
403 1548, 1549, 1550, 1551, 1552, 1556, 1557, 1558, 1559, 1563,
404 1564, 1571, 1571, 1572, 1572, 1573, 1575, 1577, 1582, 1586,
405 1595, 1599, 1604, 1608, 1614, 1624, 1628, 1631, 1634, 1637,
406 1642, 1651, 1659, 1665, 1671, 1678, 1686, 1694, 1703, 1706,
407 1709, 1710, 1720, 1722, 1723, 1724, 1727, 1731, 1736, 1742,
408 1747, 1750, 1753, 1766, 1780, 1784, 1789, 1793, 1798, 1805,
409 1818, 1820, 1823, 1827, 1830, 1835, 1839, 1847, 1862, 1868,
410 1875, 1888, 1900, 1915, 1919, 1936, 1941, 1944, 1949, 1971,
411 1976, 1981, 1987, 1993, 2001, 2009, 2017, 2024, 2034, 2039,
412 2069, 2071, 2074, 2081, 2087, 2089, 2090, 2091, 2094, 2096,
413 2097, 2100, 2105, 2112, 2119, 2121, 2126
Lev Walkin1004aa92004-09-08 00:28:11 +0000414};
415#endif
416
417
418#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
419
420static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
421"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
Lev Walkind9574ae2005-03-24 16:22:35 +0000422"TOK_tuple","TOK_quadruple","TOK_number_negative","TOK_typereference","TOK_capitalreference",
423"TOK_typefieldreference","TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX",
424"TOK_ALL","TOK_ANY","TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT",
425"TOK_BMPString","TOK_BOOLEAN","TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS",
426"TOK_COMPONENT","TOK_COMPONENTS","TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT",
427"TOK_DEFINITIONS","TOK_DEFINED","TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL",
428"TOK_END","TOK_ENUMERATED","TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY",
429"TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString",
430"TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED",
431"TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INSTRUCTIONS","TOK_INTEGER",
432"TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL","TOK_NumericString",
433"TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET","TOK_OF","TOK_OPTIONAL","TOK_PATTERN",
434"TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString","TOK_PRIVATE",
435"TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE","TOK_STRING",
436"TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE","TOK_TYPE_IDENTIFIER",
437"TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime","TOK_UTF8String",
438"TOK_VideotexString","TOK_VisibleString","TOK_WITH","TOK_EXCEPT","'^'","TOK_INTERSECTION",
439"'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots","'{'","'}'","'('","')'","';'",
440"','","':'","'!'","'.'","'<'","'@'","'['","']'","ParsedGrammar","ModuleList",
441"ModuleSpecification","optObjectIdentifier","ObjectIdentifier","ObjectIdentifierBody",
442"ObjectIdentifierElement","optModuleSpecificationFlags","ModuleSpecificationFlags",
443"ModuleSpecificationFlag","optModuleSpecificationBody","ModuleSpecificationBody",
Lev Walkinb36317c2005-08-12 10:09:10 +0000444"ModuleSpecificationElement","@1","ImportsDefinition","ImportsBundleSet","AssignedIdentifier",
445"ImportsBundle","ImportsList","ImportsElement","ExportsDefinition","ExportsBody",
446"ExportsElement","ValueSetDefinition","@2","DefinedTypeRef","DataTypeReference",
447"ParameterArgumentList","ParameterArgumentName","ActualParameterList","ActualParameter",
448"optComponentTypeLists","ComponentTypeLists","ComponentType","AlternativeTypeLists",
449"AlternativeType","ClassDeclaration","optUnique","ClassFieldList","ClassField",
450"optWithSyntax","WithSyntax","@3","WithSyntaxFormat","WithSyntaxFormatToken",
Lev Walkinef625402005-09-05 05:17:57 +0000451"ExtensionAndException","Type","NSTD_IndirectMarker","TypeDeclaration","TypeDeclarationSet",
452"ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement",
453"ClassFieldIdentifier","ClassFieldName","ValueDefinition","Value","@4","DefinedValue",
Lev Walkin4696c742005-08-22 12:23:54 +0000454"RestrictedCharacterStringValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
455"BasicType","BasicString","Union","Intersection","Except","optConstraints","Constraints",
456"SetOfConstraints","ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement",
Lev Walkinef625402005-09-05 05:17:57 +0000457"@5","ConstraintRangeSpec","ConstraintSpec","SingleValue","ContainedSubtype",
Lev Walkin4696c742005-08-22 12:23:54 +0000458"InnerTypeConstraint","WithComponentsList","WithComponentsElement","optPresenceConstraint",
459"PresenceConstraint","TableConstraint","SimpleTableConstraint","ComponentRelationConstraint",
460"AtNotationList","AtNotationElement","ComponentIdList","optMarker","Marker",
461"UniverationDefinition","UniverationList","UniverationElement","SignedNumber",
462"optTag","Tag","TagTypeValue","TagClass","TagPlicit","TypeRefName","ObjectClassReference",
463"optIdentifier","Identifier", NULL
Lev Walkin1004aa92004-09-08 00:28:11 +0000464};
465#endif
466
467static const short yyr1[] = { 0,
Lev Walkind9574ae2005-03-24 16:22:35 +0000468 118, 119, 119, 120, 121, 121, 122, 122, 123, 123,
469 124, 124, 124, 125, 125, 126, 126, 127, 127, 127,
470 127, 127, 128, 128, 129, 129, 130, 130, 130, 130,
Lev Walkinb36317c2005-08-12 10:09:10 +0000471 130, 131, 130, 130, 132, 132, 133, 133, 134, 134,
472 135, 136, 136, 137, 137, 137, 138, 138, 138, 139,
473 139, 140, 140, 140, 142, 141, 143, 143, 144, 144,
474 144, 144, 145, 145, 146, 146, 146, 146, 147, 147,
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000475 148, 148, 149, 149, 150, 150, 151, 151, 151, 151,
476 152, 152, 153, 153, 153, 154, 155, 155, 156, 156,
477 157, 157, 157, 158, 158, 160, 159, 161, 161, 162,
Lev Walkinef625402005-09-05 05:17:57 +0000478 162, 163, 163, 163, 164, 165, 166, 167, 167, 167,
479 167, 167, 167, 167, 167, 167, 167, 167, 168, 168,
480 168, 168, 168, 168, 169, 169, 170, 171, 172, 172,
481 173, 174, 175, 174, 174, 174, 174, 174, 174, 174,
482 174, 174, 176, 176, 177, 177, 177, 178, 178, 179,
483 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
484 179, 179, 180, 180, 180, 181, 181, 182, 182, 182,
485 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
486 182, 183, 183, 184, 184, 185, 186, 186, 187, 187,
487 188, 188, 189, 189, 189, 190, 190, 190, 190, 190,
488 191, 191, 191, 191, 191, 191, 191, 191, 191, 191,
489 192, 191, 193, 193, 193, 193, 194, 194, 195, 195,
490 195, 195, 195, 196, 197, 197, 198, 198, 199, 199,
491 200, 200, 201, 201, 201, 202, 202, 203, 204, 205,
492 205, 206, 206, 207, 207, 208, 208, 209, 209, 210,
493 210, 211, 211, 212, 212, 212, 212, 212, 213, 213,
494 214, 214, 215, 216, 217, 217, 217, 217, 218, 218,
495 218, 219, 219, 220, 221, 221, 222
Lev Walkin1004aa92004-09-08 00:28:11 +0000496};
497
498static const short yyr2[] = { 0,
499 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
500 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
501 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
Lev Walkinb36317c2005-08-12 10:09:10 +0000502 1, 0, 3, 1, 3, 2, 1, 2, 0, 1,
503 4, 1, 3, 1, 3, 1, 3, 3, 2, 1,
504 3, 1, 3, 1, 0, 6, 1, 1, 4, 3,
505 3, 6, 1, 3, 1, 3, 3, 3, 1, 3,
Lev Walkinef625402005-09-05 05:17:57 +0000506 1, 1, 0, 1, 1, 3, 3, 2, 3, 1,
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000507 1, 3, 2, 1, 1, 5, 0, 1, 1, 3,
508 2, 4, 4, 0, 1, 0, 6, 1, 2, 1,
Lev Walkinef625402005-09-05 05:17:57 +0000509 1, 1, 3, 3, 3, 0, 2, 1, 4, 4,
510 4, 6, 6, 1, 4, 4, 1, 3, 1, 3,
511 3, 3, 1, 3, 1, 3, 1, 1, 1, 1,
512 4, 3, 0, 3, 1, 1, 1, 1, 1, 1,
513 1, 1, 1, 3, 1, 1, 1, 1, 2, 1,
514 1, 1, 1, 2, 2, 1, 1, 2, 2, 1,
515 1, 1, 1, 1, 2, 1, 2, 1, 1, 1,
Lev Walkin1004aa92004-09-08 00:28:11 +0000516 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkinef625402005-09-05 05:17:57 +0000517 1, 1, 1, 1, 1, 1, 0, 1, 1, 4,
518 3, 4, 1, 3, 5, 1, 3, 3, 3, 3,
519 4, 3, 1, 1, 3, 3, 3, 3, 1, 1,
520 0, 5, 1, 2, 2, 3, 1, 1, 1, 1,
521 1, 1, 1, 1, 3, 5, 1, 3, 1, 3,
522 0, 1, 1, 1, 1, 1, 1, 3, 4, 1,
523 3, 2, 3, 1, 3, 0, 1, 1, 2, 2,
524 3, 1, 3, 1, 4, 4, 1, 1, 1, 1,
525 0, 1, 2, 4, 0, 1, 1, 1, 0, 1,
526 1, 1, 1, 1, 0, 1, 1
Lev Walkin1004aa92004-09-08 00:28:11 +0000527};
528
529static const short yydefact[] = { 0,
Lev Walkinef625402005-09-05 05:17:57 +0000530 272, 273, 1, 2, 5, 3, 0, 0, 6, 277,
Lev Walkin1004aa92004-09-08 00:28:11 +0000531 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
532 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
Lev Walkinef625402005-09-05 05:17:57 +0000533 18, 21, 19, 0, 17, 12, 23, 168, 0, 0,
534 169, 170, 171, 0, 172, 173, 181, 174, 175, 176,
535 177, 178, 179, 180, 0, 24, 25, 27, 28, 31,
Lev Walkinb36317c2005-08-12 10:09:10 +0000536 29, 30, 34, 0, 0, 32, 0, 49, 0, 50,
537 52, 54, 36, 0, 37, 0, 42, 44, 46, 4,
Lev Walkinef625402005-09-05 05:17:57 +0000538 26, 261, 119, 274, 0, 150, 0, 0, 164, 157,
539 161, 163, 151, 0, 0, 152, 156, 160, 0, 0,
540 57, 58, 153, 162, 123, 0, 33, 48, 47, 0,
541 0, 35, 38, 0, 0, 0, 0, 265, 61, 60,
542 106, 262, 269, 0, 165, 159, 158, 155, 154, 0,
Lev Walkinb36317c2005-08-12 10:09:10 +0000543 63, 0, 65, 0, 0, 0, 51, 53, 39, 43,
Lev Walkinef625402005-09-05 05:17:57 +0000544 45, 0, 267, 268, 266, 0, 59, 0, 187, 271,
545 270, 263, 120, 122, 0, 0, 0, 0, 55, 129,
546 130, 124, 125, 127, 121, 138, 145, 139, 259, 146,
547 147, 260, 136, 135, 137, 133, 131, 142, 140, 141,
548 0, 143, 40, 41, 0, 89, 261, 128, 0, 119,
549 274, 114, 0, 0, 187, 187, 107, 117, 166, 153,
550 108, 0, 0, 0, 105, 188, 189, 261, 64, 68,
Lev Walkin4696c742005-08-22 12:23:54 +0000551 67, 66, 0, 0, 0, 0, 0, 94, 0, 0,
Lev Walkinef625402005-09-05 05:17:57 +0000552 248, 87, 87, 91, 247, 106, 264, 0, 261, 0,
553 261, 0, 261, 0, 0, 167, 261, 0, 0, 0,
554 219, 218, 0, 217, 220, 0, 0, 0, 222, 0,
555 193, 196, 0, 203, 204, 210, 209, 236, 237, 221,
556 224, 223, 0, 62, 148, 56, 126, 134, 144, 132,
557 0, 86, 95, 90, 249, 88, 246, 246, 0, 102,
558 0, 81, 84, 85, 261, 118, 0, 0, 74, 75,
559 80, 246, 261, 275, 0, 275, 258, 250, 0, 252,
560 257, 254, 0, 69, 71, 72, 0, 0, 0, 213,
561 0, 0, 0, 0, 0, 0, 191, 184, 185, 182,
562 183, 0, 0, 0, 186, 0, 0, 0, 0, 0,
563 149, 0, 92, 93, 115, 0, 109, 261, 83, 261,
564 110, 261, 78, 246, 261, 276, 111, 261, 251, 0,
565 0, 116, 261, 190, 197, 211, 214, 215, 208, 206,
566 225, 0, 238, 202, 194, 198, 199, 200, 0, 207,
567 205, 0, 0, 240, 192, 96, 103, 104, 143, 82,
568 79, 76, 77, 106, 106, 253, 0, 0, 70, 0,
569 216, 229, 0, 227, 187, 0, 201, 0, 242, 244,
570 239, 0, 0, 112, 113, 256, 255, 212, 226, 0,
571 231, 195, 243, 0, 241, 100, 0, 98, 101, 228,
572 234, 235, 233, 230, 232, 245, 97, 99, 0, 0,
573 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000574};
575
Lev Walkinef625402005-09-05 05:17:57 +0000576static const short yydefgoto[] = { 429,
Lev Walkin1004aa92004-09-08 00:28:11 +0000577 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
Lev Walkin4696c742005-08-22 12:23:54 +0000578 56, 57, 107, 58, 74, 184, 75, 76, 77, 59,
Lev Walkinef625402005-09-05 05:17:57 +0000579 69, 70, 60, 213, 100, 61, 130, 131, 303, 304,
580 288, 289, 290, 281, 282, 119, 277, 185, 186, 272,
581 273, 403, 417, 418, 291, 292, 148, 149, 197, 101,
582 162, 163, 187, 188, 62, 177, 215, 178, 249, 266,
583 102, 103, 201, 104, 323, 324, 326, 205, 206, 207,
584 250, 251, 252, 390, 312, 253, 254, 255, 256, 393,
585 394, 424, 425, 257, 258, 259, 373, 374, 399, 224,
586 225, 236, 299, 300, 260, 226, 122, 123, 146, 152,
587 261, 105, 345, 262
Lev Walkin1004aa92004-09-08 00:28:11 +0000588};
589
Lev Walkinef625402005-09-05 05:17:57 +0000590static const short yypact[] = { 9,
591-32768,-32768, 9,-32768, -76,-32768, 47, 15,-32768,-32768,
592-32768,-32768, 55,-32768, -24, 158,-32768,-32768, 130, 95,
593 81, 97, 162, 128, 228, 158,-32768, 141,-32768,-32768,
594-32768,-32768,-32768, 213,-32768,-32768, 419,-32768, 224, 39,
595-32768,-32768,-32768, 157,-32768,-32768,-32768,-32768,-32768,-32768,
596-32768,-32768,-32768,-32768, 211, 419,-32768,-32768,-32768,-32768,
597-32768,-32768,-32768, 344, 571,-32768, 151,-32768, 79,-32768,
598 164,-32768,-32768, 46,-32768, -36,-32768, 183,-32768,-32768,
599-32768, -11, 173,-32768, 229,-32768, 235, 249,-32768,-32768,
600-32768,-32768,-32768, 270, 241,-32768,-32768,-32768, 646, 322,
601-32768,-32768,-32768,-32768, 214, 323,-32768,-32768,-32768, 168,
602 226,-32768,-32768, 9, 168, 234, 225, 4,-32768,-32768,
603 250,-32768, -22, 168,-32768,-32768,-32768,-32768,-32768, 96,
604-32768, 230, 237, 240, 295, 185,-32768,-32768, -76,-32768,
605-32768, 269,-32768,-32768,-32768, 333,-32768, 496, 0,-32768,
606-32768,-32768,-32768,-32768, 347, 646, 343, 168,-32768,-32768,
607-32768, 243,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
Lev Walkin1e448d32005-03-24 14:26:38 +0000608-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
Lev Walkinef625402005-09-05 05:17:57 +0000609 246, 242,-32768,-32768, 105,-32768, 63,-32768, 244, 73,
610 255, 317, 257, 293, -34, 51,-32768,-32768,-32768, 259,
611-32768, 261, 260, 80,-32768,-32768, 264, 258,-32768,-32768,
612-32768,-32768, 369, 269, 369, 343, 185, 279, 269, 185,
613-32768, 288, 288,-32768,-32768,-32768,-32768, 350, 5, 233,
614 8, 309, 8, 310, 34,-32768, 6, 80, 283, 356,
615-32768,-32768, 27,-32768,-32768, 271, 9, 80,-32768, 276,
616 181, 289, 278, 27,-32768,-32768,-32768, 284,-32768,-32768,
617-32768,-32768, 80,-32768,-32768, 384,-32768, 384,-32768,-32768,
618 308,-32768,-32768,-32768,-32768,-32768, -9, -9, 343, 285,
619 117,-32768,-32768,-32768, 258,-32768, 328, 294, 291,-32768,
620-32768, -9, 258, 343, 296, 343,-32768,-32768, 119,-32768,
621-32768, 299, 152,-32768,-32768,-32768, 300, 231, 311, 301,
622 314, 245, 307, 313, 315, 316,-32768,-32768,-32768,-32768,
623-32768, 321, 231, 231,-32768, 231, 80, 287, 304, 318,
624-32768, 325,-32768,-32768,-32768, 292,-32768, 5,-32768, 258,
625-32768, 2,-32768, -9, 258,-32768,-32768, 258,-32768, 60,
626 292,-32768, 6,-32768,-32768,-32768,-32768, 320,-32768,-32768,
627 264, 31,-32768,-32768, 331,-32768,-32768,-32768, 327,-32768,
628-32768, 10, 160,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
629-32768,-32768,-32768,-32768,-32768,-32768, 334, 335,-32768, 369,
630-32768,-32768, 161,-32768, 0, 80,-32768, 343, 286,-32768,
631-32768, 304, 159,-32768,-32768,-32768,-32768, 384,-32768, 31,
632 129, 215, 286, 343,-32768,-32768, 20,-32768,-32768,-32768,
633-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 428, 445,
634-32768
Lev Walkin1004aa92004-09-08 00:28:11 +0000635};
636
637static const short yypgoto[] = {-32768,
Lev Walkinef625402005-09-05 05:17:57 +0000638-32768, 443,-32768, 312,-32768, 434,-32768,-32768, 422,-32768,
639-32768, 394,-32768,-32768,-32768,-32768, 378,-32768, 338,-32768,
640-32768, 345,-32768,-32768, 389,-32768,-32768, 302,-32768, 103,
641 227,-32768, 115,-32768, 123,-32768, 239,-32768, 247,-32768,
642-32768,-32768,-32768, 48, -218, -77,-32768, -64,-32768, -133,
643-32768, 253, -184, -118,-32768, -73,-32768, -266, -75, -206,
644 -72, 324,-32768, -6,-32768,-32768,-32768, -188,-32768, 155,
645 -161, 68, -49,-32768, 219,-32768, -284,-32768,-32768,-32768,
646 64,-32768,-32768,-32768,-32768,-32768,-32768, 74, 83, -212,
647-32768,-32768,-32768, 127, -116, -80,-32768,-32768,-32768,-32768,
648 1,-32768, 182, -7
Lev Walkin1004aa92004-09-08 00:28:11 +0000649};
650
651
Lev Walkinef625402005-09-05 05:17:57 +0000652#define YYLAST 742
Lev Walkin1004aa92004-09-08 00:28:11 +0000653
654
655static const short yytable[] = { 15,
Lev Walkinef625402005-09-05 05:17:57 +0000656 5, 121, 223, 5, 120, 15, 232, 234, 268, 10,
657 283, 114, 10, 10, 198, 10, 164, 10, 117, 180,
658 150, 1, 2, 416, 143, 220, 132, 360, 7, 65,
659 63, 151, 72, 287, 160, 161, 79, 64, 10, 287,
660 71, 10, 169, 371, 78, 172, 10, 203, 65, 63,
661 16, 1, 2, 10, 10, 11, 64, 67, 1, 2,
662 179, 221, 10, 11, 333, 334, 79, 10, 169, 377,
663 231, 172, 204, 115, 78, 199, 307, 160, 161, 343,
664 144, 203, 19, 132, 387, 167, 316, 10, 169, 170,
665 171, 172, 1, 2, 145, 164, 286, 220, 239, 133,
666 180, 330, 72, 180, 118, 280, 204, 79, 280, 222,
667 71, 280, 240, -73, 139, 78, 154, 118, 301, 283,
668 118, 118, 398, 118, 153, 427, 241, 242, 182, 310,
669 264, 383, 203, 221, 392, 165, 181, 297, 28, 298,
670 311, 179, 243, 270, 179, 421, 275, 68, 202, 210,
671 212, 284, 12, 29, 112, 233, 133, 204, 211, 305,
672 17, 244, 416, 297, 10, 369, 30, 245, -246, 1,
673 2, 20, -246, 160, 161, 10, 246, -272, 118, 21,
674 1, 2, 31, 408, 247, 124, 248, 109, 110, 166,
675 167, 168, 10, 169, 170, 171, 172, 1, 2, 422,
676 22, 155, 23, 423, 73, 156, 411, 339, 269, 182,
677 218, 24, 182, 33, 219, 344, 32, 181, 419, 378,
678 181, 285, 337, 293, 349, 293, 338, 302, 350, 306,
679 34, 173, 419, 301, 388, 37, 167, 66, 10, 169,
680 170, 171, 172, 1, 2, 83, 84, 315, 36, 174,
681 167, 80, 10, 169, 170, 171, 172, 352, 355, 108,
682 284, 353, 381, 240, 384, 401, 409, 385, 111, 402,
683 410, 335, 175, 366, 367, 305, 368, 241, 242, 318,
684 319, 320, 321, 160, 161, 124, 346, 116, 346, 176,
685 322, 241, 167, 243, 10, 169, 170, 171, 172, 10,
686 169, 313, 314, 172, 1, 2, 359, 1, 2, 160,
687 161, 125, 244, 318, 319, 320, 321, 126, 245, 404,
688 405, 127, 128, 129, 134, 136, 135, 246, 379, 142,
689 285, 138, 245, 241, 293, 247, 181, 248, 147, 141,
690 157, 189, 302, 379, 159, 306, 82, 158, 370, 208,
691 10, 181, 217, 228, 395, 214, 83, 84, 216, -273,
692 227, 229, 230, 235, 400, 237, 238, 85, 38, 86,
693 263, 87, 265, 118, 245, 271, 279, 276, 294, 296,
694 308, 88, 309, 317, 327, 89, 325, 331, 329, 90,
695 400, 332, 91, 41, 42, 43, 336, 340, 414, 341,
696 342, 347, 395, 92, 45, 351, 426, 354, 93, 46,
697 94, 47, 95, 204, 357, 356, 358, 362, 372, 48,
698 363, 96, 97, 364, 365, 375, 10, 430, 49, 376,
699 50, 1, 2, 391, 397, 51, 98, 52, 53, 54,
700 396, 406, 407, 38, 431, 6, 18, 35, 99, 81,
701 183, 113, 140, 106, 137, 389, 382, 209, 39, 295,
702 380, 278, 40, 412, 428, 274, 267, 361, 41, 42,
703 43, 200, 328, 420, 44, 415, 386, 348, 0, 45,
704 413, 0, 0, 0, 46, 0, 47, 0, 0, 0,
705 0, 0, 0, 0, 48, 0, 0, 0, 0, 0,
706 0, 0, 0, 49, 0, 50, 0, 0, 190, 191,
707 51, 0, 52, 53, 54, 192, 0, 0, 0, 85,
708 38, 86, 0, 87, 193, 0, 0, 0, 0, 0,
709 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
710 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
711 0, 0, 0, 194, 0, 92, 45, 0, 0, 0,
712 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
713 0, 48, 0, 96, 97, 195, 196, 0, 0, 0,
714 49, 0, 50, 83, 84, 0, 0, 51, 98, 52,
715 53, 54, 0, 0, 85, 38, 86, 0, 87, 0,
716 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
717 0, 0, 89, 0, 0, 0, 90, 0, 0, 91,
718 41, 42, 43, 0, 0, 0, 0, 0, 0, 0,
719 92, 45, 0, 0, 0, 93, 46, 94, 47, 95,
720 0, 0, 0, 0, 0, 0, 48, 0, 96, 97,
721 0, 0, 0, 0, 0, 49, 0, 50, 1, 2,
722 0, 0, 51, 98, 52, 53, 54, 0, 0, 85,
723 38, 86, 0, 87, 0, 0, 0, 0, 0, 0,
724 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
725 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
726 0, 0, 0, 0, 0, 92, 45, 0, 0, 0,
727 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
728 0, 48, 0, 96, 97, 0, 0, 0, 0, 0,
729 49, 0, 50, 0, 0, 0, 0, 51, 98, 52,
730 53, 54
Lev Walkin1004aa92004-09-08 00:28:11 +0000731};
732
733static const short yycheck[] = { 7,
Lev Walkinef625402005-09-05 05:17:57 +0000734 0, 82, 187, 3, 82, 13, 195, 196, 215, 8,
735 229, 48, 8, 8, 148, 8, 135, 8, 30, 136,
736 43, 13, 14, 4, 21, 35, 99, 312, 105, 37,
737 37, 54, 40, 32, 15, 16, 44, 37, 8, 32,
738 40, 8, 9, 328, 44, 12, 8, 82, 56, 56,
739 36, 13, 14, 8, 8, 9, 56, 19, 13, 14,
740 136, 71, 8, 9, 277, 278, 74, 8, 9, 336,
741 105, 12, 107, 110, 74, 148, 238, 15, 16, 292,
742 77, 82, 107, 156, 351, 6, 248, 8, 9, 10,
743 11, 12, 13, 14, 91, 214, 230, 35, 19, 99,
744 217, 263, 110, 220, 116, 104, 107, 115, 104, 187,
745 110, 104, 33, 106, 114, 115, 124, 116, 235, 338,
746 116, 116, 113, 116, 124, 106, 47, 48, 136, 103,
747 208, 344, 82, 71, 104, 135, 136, 104, 9, 106,
748 114, 217, 63, 217, 220, 17, 220, 109, 148, 157,
749 158, 229, 106, 59, 109, 105, 156, 107, 158, 237,
750 106, 82, 4, 104, 8, 327, 86, 88, 106, 13,
751 14, 14, 110, 15, 16, 8, 97, 105, 116, 22,
752 13, 14, 86, 390, 105, 113, 107, 109, 110, 5,
753 6, 7, 8, 9, 10, 11, 12, 13, 14, 71,
754 43, 106, 45, 75, 48, 110, 395, 285, 216, 217,
755 106, 54, 220, 86, 110, 293, 55, 217, 403, 336,
756 220, 229, 106, 231, 106, 233, 110, 235, 110, 237,
757 3, 47, 417, 350, 351, 23, 6, 14, 8, 9,
758 10, 11, 12, 13, 14, 13, 14, 247, 108, 65,
759 6, 41, 8, 9, 10, 11, 12, 106, 308, 109,
760 338, 110, 340, 33, 345, 106, 106, 348, 105, 110,
761 110, 279, 88, 323, 324, 353, 326, 47, 48, 99,
762 100, 101, 102, 15, 16, 113, 294, 105, 296, 105,
763 110, 47, 6, 63, 8, 9, 10, 11, 12, 8,
764 9, 31, 32, 12, 13, 14, 62, 13, 14, 15,
765 16, 83, 82, 99, 100, 101, 102, 83, 88, 384,
766 385, 73, 53, 83, 3, 3, 113, 97, 336, 105,
767 338, 106, 88, 47, 342, 105, 336, 107, 89, 106,
768 111, 9, 350, 351, 105, 353, 3, 111, 62, 3,
769 8, 351, 111, 37, 362, 113, 13, 14, 113, 105,
770 117, 105, 70, 105, 372, 105, 107, 24, 25, 26,
771 107, 28, 4, 116, 88, 97, 27, 90, 70, 70,
772 98, 38, 27, 108, 107, 42, 98, 4, 105, 46,
773 398, 84, 49, 50, 51, 52, 112, 70, 113, 106,
774 110, 106, 410, 60, 61, 107, 414, 108, 65, 66,
775 67, 68, 69, 107, 114, 105, 103, 105, 115, 76,
776 106, 78, 79, 108, 104, 108, 8, 0, 85, 105,
777 87, 13, 14, 114, 108, 92, 93, 94, 95, 96,
778 110, 108, 108, 25, 0, 3, 13, 26, 105, 56,
779 139, 74, 115, 65, 110, 353, 342, 156, 40, 233,
780 338, 223, 44, 396, 417, 219, 214, 313, 50, 51,
781 52, 148, 254, 410, 56, 402, 350, 296, -1, 61,
782 398, -1, -1, -1, 66, -1, 68, -1, -1, -1,
783 -1, -1, -1, -1, 76, -1, -1, -1, -1, -1,
784 -1, -1, -1, 85, -1, 87, -1, -1, 13, 14,
785 92, -1, 94, 95, 96, 20, -1, -1, -1, 24,
786 25, 26, -1, 28, 29, -1, -1, -1, -1, -1,
787 -1, -1, -1, 38, -1, -1, -1, 42, -1, -1,
788 -1, 46, -1, -1, 49, 50, 51, 52, -1, -1,
789 -1, -1, -1, 58, -1, 60, 61, -1, -1, -1,
790 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
791 -1, 76, -1, 78, 79, 80, 81, -1, -1, -1,
792 85, -1, 87, 13, 14, -1, -1, 92, 93, 94,
793 95, 96, -1, -1, 24, 25, 26, -1, 28, -1,
794 -1, -1, -1, -1, -1, -1, -1, -1, 38, -1,
795 -1, -1, 42, -1, -1, -1, 46, -1, -1, 49,
796 50, 51, 52, -1, -1, -1, -1, -1, -1, -1,
797 60, 61, -1, -1, -1, 65, 66, 67, 68, 69,
798 -1, -1, -1, -1, -1, -1, 76, -1, 78, 79,
799 -1, -1, -1, -1, -1, 85, -1, 87, 13, 14,
800 -1, -1, 92, 93, 94, 95, 96, -1, -1, 24,
801 25, 26, -1, 28, -1, -1, -1, -1, -1, -1,
802 -1, -1, -1, 38, -1, -1, -1, 42, -1, -1,
803 -1, 46, -1, -1, 49, 50, 51, 52, -1, -1,
804 -1, -1, -1, -1, -1, 60, 61, -1, -1, -1,
805 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
806 -1, 76, -1, 78, 79, -1, -1, -1, -1, -1,
807 85, -1, 87, -1, -1, -1, -1, 92, 93, 94,
808 95, 96
Lev Walkin1004aa92004-09-08 00:28:11 +0000809};
810/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
811#line 3 "/usr/share/bison.simple"
812/* This file comes from bison-1.28. */
813
814/* Skeleton output parser for bison,
815 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
816
817 This program is free software; you can redistribute it and/or modify
818 it under the terms of the GNU General Public License as published by
819 the Free Software Foundation; either version 2, or (at your option)
820 any later version.
821
822 This program is distributed in the hope that it will be useful,
823 but WITHOUT ANY WARRANTY; without even the implied warranty of
824 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
825 GNU General Public License for more details.
826
827 You should have received a copy of the GNU General Public License
828 along with this program; if not, write to the Free Software
829 Foundation, Inc., 59 Temple Place - Suite 330,
830 Boston, MA 02111-1307, USA. */
831
832/* As a special exception, when this file is copied by Bison into a
833 Bison output file, you may use that output file without restriction.
834 This special exception was added by the Free Software Foundation
835 in version 1.24 of Bison. */
836
837/* This is the parser code that is written into each bison parser
838 when the %semantic_parser declaration is not specified in the grammar.
839 It was written by Richard Stallman by simplifying the hairy parser
840 used when %semantic_parser is specified. */
841
842#ifndef YYSTACK_USE_ALLOCA
843#ifdef alloca
844#define YYSTACK_USE_ALLOCA
845#else /* alloca not defined */
846#ifdef __GNUC__
847#define YYSTACK_USE_ALLOCA
848#define alloca __builtin_alloca
849#else /* not GNU C. */
850#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
851#define YYSTACK_USE_ALLOCA
852#include <alloca.h>
853#else /* not sparc */
854/* We think this test detects Watcom and Microsoft C. */
855/* This used to test MSDOS, but that is a bad idea
856 since that symbol is in the user namespace. */
857#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
858#if 0 /* No need for malloc.h, which pollutes the namespace;
859 instead, just don't use alloca. */
860#include <malloc.h>
861#endif
862#else /* not MSDOS, or __TURBOC__ */
863#if defined(_AIX)
864/* I don't know what this was needed for, but it pollutes the namespace.
865 So I turned it off. rms, 2 May 1997. */
866/* #include <malloc.h> */
867 #pragma alloca
868#define YYSTACK_USE_ALLOCA
869#else /* not MSDOS, or __TURBOC__, or _AIX */
870#if 0
871#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
872 and on HPUX 10. Eventually we can turn this on. */
873#define YYSTACK_USE_ALLOCA
874#define alloca __builtin_alloca
875#endif /* __hpux */
876#endif
877#endif /* not _AIX */
878#endif /* not MSDOS, or __TURBOC__ */
879#endif /* not sparc */
880#endif /* not GNU C */
881#endif /* alloca not defined */
882#endif /* YYSTACK_USE_ALLOCA not defined */
883
884#ifdef YYSTACK_USE_ALLOCA
885#define YYSTACK_ALLOC alloca
Lev Walkinf15320b2004-06-03 03:38:44 +0000886#else
Lev Walkin1004aa92004-09-08 00:28:11 +0000887#define YYSTACK_ALLOC malloc
Lev Walkinf15320b2004-06-03 03:38:44 +0000888#endif
889
Lev Walkin1004aa92004-09-08 00:28:11 +0000890/* Note: there must be only one dollar sign in this file.
891 It is replaced by the list of actions, each action
892 as one case of the switch. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000893
894#define yyerrok (yyerrstatus = 0)
895#define yyclearin (yychar = YYEMPTY)
896#define YYEMPTY -2
897#define YYEOF 0
898#define YYACCEPT goto yyacceptlab
Lev Walkin1004aa92004-09-08 00:28:11 +0000899#define YYABORT goto yyabortlab
Lev Walkinf15320b2004-06-03 03:38:44 +0000900#define YYERROR goto yyerrlab1
Lev Walkin1004aa92004-09-08 00:28:11 +0000901/* Like YYERROR except do call yyerror.
902 This remains here temporarily to ease the
903 transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +0000904 Once GCC version 2 has supplanted version 1, this can go. */
905#define YYFAIL goto yyerrlab
906#define YYRECOVERING() (!!yyerrstatus)
Lev Walkin1004aa92004-09-08 00:28:11 +0000907#define YYBACKUP(token, value) \
Lev Walkinf15320b2004-06-03 03:38:44 +0000908do \
909 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin1004aa92004-09-08 00:28:11 +0000910 { yychar = (token), yylval = (value); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000911 yychar1 = YYTRANSLATE (yychar); \
912 YYPOPSTACK; \
913 goto yybackup; \
914 } \
915 else \
Lev Walkin1004aa92004-09-08 00:28:11 +0000916 { yyerror ("syntax error: cannot back up"); YYERROR; } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000917while (0)
918
919#define YYTERROR 1
920#define YYERRCODE 256
921
Lev Walkin1004aa92004-09-08 00:28:11 +0000922#ifndef YYPURE
923#define YYLEX yylex()
Lev Walkinf15320b2004-06-03 03:38:44 +0000924#endif
925
Lev Walkin1004aa92004-09-08 00:28:11 +0000926#ifdef YYPURE
927#ifdef YYLSP_NEEDED
928#ifdef YYLEX_PARAM
929#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
930#else
931#define YYLEX yylex(&yylval, &yylloc)
932#endif
933#else /* not YYLSP_NEEDED */
934#ifdef YYLEX_PARAM
935#define YYLEX yylex(&yylval, YYLEX_PARAM)
936#else
937#define YYLEX yylex(&yylval)
938#endif
939#endif /* not YYLSP_NEEDED */
940#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000941
Lev Walkin1004aa92004-09-08 00:28:11 +0000942/* If nonreentrant, generate the variables here */
Lev Walkinf15320b2004-06-03 03:38:44 +0000943
Lev Walkin1004aa92004-09-08 00:28:11 +0000944#ifndef YYPURE
Lev Walkinf15320b2004-06-03 03:38:44 +0000945
Lev Walkin1004aa92004-09-08 00:28:11 +0000946int yychar; /* the lookahead symbol */
947YYSTYPE yylval; /* the semantic value of the */
948 /* lookahead symbol */
Lev Walkinf15320b2004-06-03 03:38:44 +0000949
Lev Walkin1004aa92004-09-08 00:28:11 +0000950#ifdef YYLSP_NEEDED
951YYLTYPE yylloc; /* location data for the lookahead */
952 /* symbol */
953#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000954
Lev Walkin1004aa92004-09-08 00:28:11 +0000955int yynerrs; /* number of parse errors so far */
956#endif /* not YYPURE */
957
958#if YYDEBUG != 0
959int yydebug; /* nonzero means print parse trace */
960/* Since this is uninitialized, it does not stop multiple parsers
961 from coexisting. */
962#endif
963
964/* YYINITDEPTH indicates the initial size of the parser's stacks */
965
Lev Walkinf15320b2004-06-03 03:38:44 +0000966#ifndef YYINITDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000967#define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +0000968#endif
969
Lev Walkin1004aa92004-09-08 00:28:11 +0000970/* YYMAXDEPTH is the maximum size the stacks can grow to
971 (effective only if the built-in stack extension method is used). */
Lev Walkinf15320b2004-06-03 03:38:44 +0000972
973#if YYMAXDEPTH == 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000974#undef YYMAXDEPTH
Lev Walkinf15320b2004-06-03 03:38:44 +0000975#endif
976
977#ifndef YYMAXDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000978#define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +0000979#endif
980
Lev Walkin1004aa92004-09-08 00:28:11 +0000981/* Define __yy_memcpy. Note that the size argument
982 should be passed with type unsigned int, because that is what the non-GCC
983 definitions require. With GCC, __builtin_memcpy takes an arg
984 of type size_t, but it can handle unsigned int. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000985
Lev Walkin1004aa92004-09-08 00:28:11 +0000986#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
987#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
988#else /* not GNU C or C++ */
989#ifndef __cplusplus
Lev Walkinf15320b2004-06-03 03:38:44 +0000990
Lev Walkin1004aa92004-09-08 00:28:11 +0000991/* This is the most reliable way to avoid incompatibilities
992 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +0000993static void
Lev Walkin1004aa92004-09-08 00:28:11 +0000994__yy_memcpy (to, from, count)
995 char *to;
996 char *from;
997 unsigned int count;
Lev Walkin459ab022004-09-07 10:39:09 +0000998{
Lev Walkin1004aa92004-09-08 00:28:11 +0000999 register char *f = from;
1000 register char *t = to;
1001 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001002
Lev Walkin1004aa92004-09-08 00:28:11 +00001003 while (i-- > 0)
1004 *t++ = *f++;
Lev Walkin459ab022004-09-07 10:39:09 +00001005}
Lev Walkin459ab022004-09-07 10:39:09 +00001006
Lev Walkin1004aa92004-09-08 00:28:11 +00001007#else /* __cplusplus */
Lev Walkin459ab022004-09-07 10:39:09 +00001008
Lev Walkin1004aa92004-09-08 00:28:11 +00001009/* This is the most reliable way to avoid incompatibilities
1010 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +00001011static void
Lev Walkin1004aa92004-09-08 00:28:11 +00001012__yy_memcpy (char *to, char *from, unsigned int count)
Lev Walkin459ab022004-09-07 10:39:09 +00001013{
Lev Walkin1004aa92004-09-08 00:28:11 +00001014 register char *t = to;
1015 register char *f = from;
1016 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001017
Lev Walkin1004aa92004-09-08 00:28:11 +00001018 while (i-- > 0)
1019 *t++ = *f++;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001020}
Lev Walkin609ccbb2004-09-04 04:49:21 +00001021
Lev Walkin1004aa92004-09-08 00:28:11 +00001022#endif
1023#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001024
Lev Walkin1004aa92004-09-08 00:28:11 +00001025#line 217 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00001026
1027/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1028 into yyparse. The argument should have type void *.
1029 It should actually point to an object.
1030 Grammar actions can access the variable by casting it
1031 to the proper pointer type. */
1032
1033#ifdef YYPARSE_PARAM
Lev Walkin1004aa92004-09-08 00:28:11 +00001034#ifdef __cplusplus
1035#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1036#define YYPARSE_PARAM_DECL
1037#else /* not __cplusplus */
1038#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1039#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1040#endif /* not __cplusplus */
1041#else /* not YYPARSE_PARAM */
1042#define YYPARSE_PARAM_ARG
1043#define YYPARSE_PARAM_DECL
1044#endif /* not YYPARSE_PARAM */
Lev Walkinf15320b2004-06-03 03:38:44 +00001045
1046/* Prevent warning if -Wstrict-prototypes. */
1047#ifdef __GNUC__
Lev Walkin1004aa92004-09-08 00:28:11 +00001048#ifdef YYPARSE_PARAM
Lev Walkinf15320b2004-06-03 03:38:44 +00001049int yyparse (void *);
Lev Walkin1004aa92004-09-08 00:28:11 +00001050#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001051int yyparse (void);
Lev Walkin1004aa92004-09-08 00:28:11 +00001052#endif
Lev Walkinceb20e72004-09-05 10:40:41 +00001053#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001054
Lev Walkinf15320b2004-06-03 03:38:44 +00001055int
Lev Walkin1004aa92004-09-08 00:28:11 +00001056yyparse(YYPARSE_PARAM_ARG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001057 YYPARSE_PARAM_DECL
1058{
1059 register int yystate;
1060 register int yyn;
1061 register short *yyssp;
1062 register YYSTYPE *yyvsp;
Lev Walkin1004aa92004-09-08 00:28:11 +00001063 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1064 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
Lev Walkinf15320b2004-06-03 03:38:44 +00001065
Lev Walkin1004aa92004-09-08 00:28:11 +00001066 short yyssa[YYINITDEPTH]; /* the state stack */
1067 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
Lev Walkinf15320b2004-06-03 03:38:44 +00001068
Lev Walkin1004aa92004-09-08 00:28:11 +00001069 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1070 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
Lev Walkinf15320b2004-06-03 03:38:44 +00001071
Lev Walkin1004aa92004-09-08 00:28:11 +00001072#ifdef YYLSP_NEEDED
1073 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1074 YYLTYPE *yyls = yylsa;
1075 YYLTYPE *yylsp;
1076
1077#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1078#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001079#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkin1004aa92004-09-08 00:28:11 +00001080#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001081
Lev Walkin1004aa92004-09-08 00:28:11 +00001082 int yystacksize = YYINITDEPTH;
1083 int yyfree_stacks = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001084
Lev Walkin1004aa92004-09-08 00:28:11 +00001085#ifdef YYPURE
1086 int yychar;
1087 YYSTYPE yylval;
1088 int yynerrs;
1089#ifdef YYLSP_NEEDED
1090 YYLTYPE yylloc;
1091#endif
1092#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001093
Lev Walkin1004aa92004-09-08 00:28:11 +00001094 YYSTYPE yyval; /* the variable used to return */
1095 /* semantic values from the action */
1096 /* routines */
Lev Walkinf15320b2004-06-03 03:38:44 +00001097
1098 int yylen;
1099
Lev Walkin1004aa92004-09-08 00:28:11 +00001100#if YYDEBUG != 0
1101 if (yydebug)
1102 fprintf(stderr, "Starting parse\n");
1103#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001104
1105 yystate = 0;
1106 yyerrstatus = 0;
1107 yynerrs = 0;
1108 yychar = YYEMPTY; /* Cause a token to be read. */
1109
1110 /* Initialize stack pointers.
1111 Waste one element of value and location stack
1112 so that they stay on the same level as the state stack.
1113 The wasted elements are never initialized. */
1114
Lev Walkin1004aa92004-09-08 00:28:11 +00001115 yyssp = yyss - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001116 yyvsp = yyvs;
Lev Walkin1004aa92004-09-08 00:28:11 +00001117#ifdef YYLSP_NEEDED
1118 yylsp = yyls;
1119#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001120
Lev Walkin1004aa92004-09-08 00:28:11 +00001121/* Push a new state, which is found in yystate . */
1122/* In all cases, when you get here, the value and location stacks
1123 have just been pushed. so pushing a state here evens the stacks. */
1124yynewstate:
Lev Walkinf15320b2004-06-03 03:38:44 +00001125
Lev Walkin1004aa92004-09-08 00:28:11 +00001126 *++yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001127
1128 if (yyssp >= yyss + yystacksize - 1)
1129 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001130 /* Give user a chance to reallocate the stack */
1131 /* Use copies of these so that the &'s don't force the real ones into memory. */
1132 YYSTYPE *yyvs1 = yyvs;
1133 short *yyss1 = yyss;
1134#ifdef YYLSP_NEEDED
1135 YYLTYPE *yyls1 = yyls;
1136#endif
1137
Lev Walkinf15320b2004-06-03 03:38:44 +00001138 /* Get the current used size of the three stacks, in elements. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001139 int size = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001140
1141#ifdef yyoverflow
Lev Walkin1004aa92004-09-08 00:28:11 +00001142 /* Each stack pointer address is followed by the size of
1143 the data in use in that stack, in bytes. */
1144#ifdef YYLSP_NEEDED
1145 /* This used to be a conditional around just the two extra args,
1146 but that might be undefined if yyoverflow is a macro. */
1147 yyoverflow("parser stack overflow",
1148 &yyss1, size * sizeof (*yyssp),
1149 &yyvs1, size * sizeof (*yyvsp),
1150 &yyls1, size * sizeof (*yylsp),
1151 &yystacksize);
1152#else
1153 yyoverflow("parser stack overflow",
1154 &yyss1, size * sizeof (*yyssp),
1155 &yyvs1, size * sizeof (*yyvsp),
1156 &yystacksize);
1157#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001158
Lev Walkin1004aa92004-09-08 00:28:11 +00001159 yyss = yyss1; yyvs = yyvs1;
1160#ifdef YYLSP_NEEDED
1161 yyls = yyls1;
1162#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001163#else /* no yyoverflow */
1164 /* Extend the stack our own way. */
1165 if (yystacksize >= YYMAXDEPTH)
Lev Walkin1004aa92004-09-08 00:28:11 +00001166 {
1167 yyerror("parser stack overflow");
1168 if (yyfree_stacks)
1169 {
1170 free (yyss);
1171 free (yyvs);
1172#ifdef YYLSP_NEEDED
1173 free (yyls);
1174#endif
1175 }
1176 return 2;
1177 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001178 yystacksize *= 2;
1179 if (yystacksize > YYMAXDEPTH)
1180 yystacksize = YYMAXDEPTH;
Lev Walkin1004aa92004-09-08 00:28:11 +00001181#ifndef YYSTACK_USE_ALLOCA
1182 yyfree_stacks = 1;
1183#endif
1184 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1185 __yy_memcpy ((char *)yyss, (char *)yyss1,
1186 size * (unsigned int) sizeof (*yyssp));
1187 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1188 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1189 size * (unsigned int) sizeof (*yyvsp));
1190#ifdef YYLSP_NEEDED
1191 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1192 __yy_memcpy ((char *)yyls, (char *)yyls1,
1193 size * (unsigned int) sizeof (*yylsp));
1194#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001195#endif /* no yyoverflow */
1196
Lev Walkin1004aa92004-09-08 00:28:11 +00001197 yyssp = yyss + size - 1;
1198 yyvsp = yyvs + size - 1;
1199#ifdef YYLSP_NEEDED
1200 yylsp = yyls + size - 1;
1201#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001202
Lev Walkin1004aa92004-09-08 00:28:11 +00001203#if YYDEBUG != 0
1204 if (yydebug)
1205 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1206#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001207
1208 if (yyssp >= yyss + yystacksize - 1)
1209 YYABORT;
1210 }
1211
Lev Walkin1004aa92004-09-08 00:28:11 +00001212#if YYDEBUG != 0
1213 if (yydebug)
1214 fprintf(stderr, "Entering state %d\n", yystate);
1215#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001216
1217 goto yybackup;
Lev Walkin1004aa92004-09-08 00:28:11 +00001218 yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001219
1220/* Do appropriate processing given the current state. */
1221/* Read a lookahead token if we need one and don't already have one. */
1222/* yyresume: */
1223
1224 /* First try to decide what to do without reference to lookahead token. */
1225
1226 yyn = yypact[yystate];
Lev Walkin1004aa92004-09-08 00:28:11 +00001227 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001228 goto yydefault;
1229
1230 /* Not known => get a lookahead token if don't already have one. */
1231
1232 /* yychar is either YYEMPTY or YYEOF
1233 or a valid token in external form. */
1234
1235 if (yychar == YYEMPTY)
1236 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001237#if YYDEBUG != 0
1238 if (yydebug)
1239 fprintf(stderr, "Reading a token: ");
1240#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001241 yychar = YYLEX;
1242 }
1243
Lev Walkin1004aa92004-09-08 00:28:11 +00001244 /* Convert token to internal form (in yychar1) for indexing tables with */
Lev Walkinf15320b2004-06-03 03:38:44 +00001245
Lev Walkin1004aa92004-09-08 00:28:11 +00001246 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001247 {
1248 yychar1 = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001249 yychar = YYEOF; /* Don't call YYLEX any more */
Lev Walkinf15320b2004-06-03 03:38:44 +00001250
Lev Walkin1004aa92004-09-08 00:28:11 +00001251#if YYDEBUG != 0
1252 if (yydebug)
1253 fprintf(stderr, "Now at end of input.\n");
1254#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001255 }
1256 else
1257 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001258 yychar1 = YYTRANSLATE(yychar);
Lev Walkinf15320b2004-06-03 03:38:44 +00001259
Lev Walkin1004aa92004-09-08 00:28:11 +00001260#if YYDEBUG != 0
1261 if (yydebug)
1262 {
1263 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1264 /* Give the individual parser a way to print the precise meaning
1265 of a token, for further debugging info. */
1266#ifdef YYPRINT
1267 YYPRINT (stderr, yychar, yylval);
1268#endif
1269 fprintf (stderr, ")\n");
1270 }
1271#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001272 }
1273
1274 yyn += yychar1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001275 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001276 goto yydefault;
Lev Walkin1004aa92004-09-08 00:28:11 +00001277
Lev Walkinf15320b2004-06-03 03:38:44 +00001278 yyn = yytable[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001279
1280 /* yyn is what to do for this token type in this state.
1281 Negative => reduce, -yyn is rule number.
1282 Positive => shift, yyn is new state.
1283 New state is final state => don't bother to shift,
1284 just return success.
1285 0, or most negative number => error. */
1286
1287 if (yyn < 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001288 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001289 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001290 goto yyerrlab;
1291 yyn = -yyn;
1292 goto yyreduce;
1293 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001294 else if (yyn == 0)
1295 goto yyerrlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001296
1297 if (yyn == YYFINAL)
1298 YYACCEPT;
1299
1300 /* Shift the lookahead token. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001301
1302#if YYDEBUG != 0
1303 if (yydebug)
1304 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1305#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001306
1307 /* Discard the token being shifted unless it is eof. */
1308 if (yychar != YYEOF)
1309 yychar = YYEMPTY;
1310
1311 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00001312#ifdef YYLSP_NEEDED
1313 *++yylsp = yylloc;
1314#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001315
Lev Walkin1004aa92004-09-08 00:28:11 +00001316 /* count tokens shifted since error; after three, turn off error status. */
1317 if (yyerrstatus) yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001318
1319 yystate = yyn;
1320 goto yynewstate;
1321
Lev Walkin1004aa92004-09-08 00:28:11 +00001322/* Do the default action for the current state. */
Lev Walkin459ab022004-09-07 10:39:09 +00001323yydefault:
Lev Walkin1004aa92004-09-08 00:28:11 +00001324
Lev Walkinf15320b2004-06-03 03:38:44 +00001325 yyn = yydefact[yystate];
1326 if (yyn == 0)
1327 goto yyerrlab;
1328
Lev Walkin1004aa92004-09-08 00:28:11 +00001329/* Do a reduction. yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001330yyreduce:
1331 yylen = yyr2[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001332 if (yylen > 0)
1333 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Lev Walkinf15320b2004-06-03 03:38:44 +00001334
Lev Walkin1004aa92004-09-08 00:28:11 +00001335#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00001336 if (yydebug)
1337 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001338 int i;
Lev Walkinf15320b2004-06-03 03:38:44 +00001339
Lev Walkin1004aa92004-09-08 00:28:11 +00001340 fprintf (stderr, "Reducing via rule %d (line %d), ",
1341 yyn, yyrline[yyn]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001342
1343 /* Print the symbols being reduced, and their result. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001344 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1345 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1346 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001347 }
1348#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001349
Lev Walkin1004aa92004-09-08 00:28:11 +00001350
1351 switch (yyn) {
1352
1353case 1:
Lev Walkinef625402005-09-05 05:17:57 +00001354#line 321 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001355{
1356 *(void **)param = yyvsp[0].a_grammar;
1357 ;
1358 break;}
1359case 2:
Lev Walkinef625402005-09-05 05:17:57 +00001360#line 327 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001361{
Lev Walkinf15320b2004-06-03 03:38:44 +00001362 yyval.a_grammar = asn1p_new();
1363 checkmem(yyval.a_grammar);
1364 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001365 ;
1366 break;}
1367case 3:
Lev Walkinef625402005-09-05 05:17:57 +00001368#line 332 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001369{
Lev Walkinf15320b2004-06-03 03:38:44 +00001370 yyval.a_grammar = yyvsp[-1].a_grammar;
1371 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001372 ;
1373 break;}
1374case 4:
Lev Walkinef625402005-09-05 05:17:57 +00001375#line 353 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001376{
Lev Walkinf15320b2004-06-03 03:38:44 +00001377
1378 if(yyvsp[-1].a_module) {
1379 yyval.a_module = yyvsp[-1].a_module;
1380 } else {
1381 /* There's a chance that a module is just plain empty */
1382 yyval.a_module = asn1p_module_new();
1383 }
1384 checkmem(yyval.a_module);
1385
Lev Walkinb36317c2005-08-12 10:09:10 +00001386 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00001387 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1388 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001389 ;
1390 break;}
1391case 5:
Lev Walkinef625402005-09-05 05:17:57 +00001392#line 374 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001393{ yyval.a_oid = 0; ;
1394 break;}
1395case 6:
Lev Walkinef625402005-09-05 05:17:57 +00001396#line 375 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001397{ yyval.a_oid = yyvsp[0].a_oid; ;
1398 break;}
1399case 7:
Lev Walkinef625402005-09-05 05:17:57 +00001400#line 379 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001401{
Lev Walkinf15320b2004-06-03 03:38:44 +00001402 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin1004aa92004-09-08 00:28:11 +00001403 ;
1404 break;}
1405case 8:
Lev Walkinef625402005-09-05 05:17:57 +00001406#line 382 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001407{
Lev Walkinf15320b2004-06-03 03:38:44 +00001408 yyval.a_oid = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001409 ;
1410 break;}
1411case 9:
Lev Walkinef625402005-09-05 05:17:57 +00001412#line 388 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001413{
Lev Walkinf15320b2004-06-03 03:38:44 +00001414 yyval.a_oid = asn1p_oid_new();
1415 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1416 if(yyvsp[0].a_oid_arc.name)
1417 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001418 ;
1419 break;}
1420case 10:
Lev Walkinef625402005-09-05 05:17:57 +00001421#line 394 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001422{
Lev Walkinf15320b2004-06-03 03:38:44 +00001423 yyval.a_oid = yyvsp[-1].a_oid;
1424 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1425 if(yyvsp[0].a_oid_arc.name)
1426 free(yyvsp[0].a_oid_arc.name);
Lev Walkin1004aa92004-09-08 00:28:11 +00001427 ;
1428 break;}
1429case 11:
Lev Walkinef625402005-09-05 05:17:57 +00001430#line 403 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001431{ /* iso */
Lev Walkinf15320b2004-06-03 03:38:44 +00001432 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1433 yyval.a_oid_arc.number = -1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001434 ;
1435 break;}
1436case 12:
Lev Walkinef625402005-09-05 05:17:57 +00001437#line 407 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001438{ /* iso(1) */
Lev Walkinf15320b2004-06-03 03:38:44 +00001439 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1440 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001441 ;
1442 break;}
1443case 13:
Lev Walkinef625402005-09-05 05:17:57 +00001444#line 411 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001445{ /* 1 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001446 yyval.a_oid_arc.name = 0;
1447 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001448 ;
1449 break;}
1450case 14:
Lev Walkinef625402005-09-05 05:17:57 +00001451#line 421 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001452{ yyval.a_module_flags = MSF_NOFLAGS; ;
1453 break;}
1454case 15:
Lev Walkinef625402005-09-05 05:17:57 +00001455#line 422 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001456{
Lev Walkinf15320b2004-06-03 03:38:44 +00001457 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001458 ;
1459 break;}
1460case 16:
Lev Walkinef625402005-09-05 05:17:57 +00001461#line 431 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001462{
Lev Walkinf15320b2004-06-03 03:38:44 +00001463 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001464 ;
1465 break;}
1466case 17:
Lev Walkinef625402005-09-05 05:17:57 +00001467#line 434 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001468{
Lev Walkinf15320b2004-06-03 03:38:44 +00001469 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001470 ;
1471 break;}
1472case 18:
Lev Walkinef625402005-09-05 05:17:57 +00001473#line 443 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001474{
Lev Walkinf15320b2004-06-03 03:38:44 +00001475 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001476 ;
1477 break;}
1478case 19:
Lev Walkinef625402005-09-05 05:17:57 +00001479#line 446 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001480{
Lev Walkinf15320b2004-06-03 03:38:44 +00001481 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001482 ;
1483 break;}
1484case 20:
Lev Walkinef625402005-09-05 05:17:57 +00001485#line 449 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001486{
Lev Walkinf15320b2004-06-03 03:38:44 +00001487 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001488 ;
1489 break;}
1490case 21:
Lev Walkinef625402005-09-05 05:17:57 +00001491#line 452 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001492{
Lev Walkinf15320b2004-06-03 03:38:44 +00001493 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin1004aa92004-09-08 00:28:11 +00001494 ;
1495 break;}
1496case 22:
Lev Walkinef625402005-09-05 05:17:57 +00001497#line 456 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001498{
Lev Walkinf59d0752004-08-18 04:59:12 +00001499 /* X.680Amd1 specifies TAG and XER */
1500 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1501 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1502 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1503 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1504 } else {
1505 fprintf(stderr,
1506 "WARNING: %s INSTRUCTIONS at line %d: "
1507 "Unrecognized encoding reference\n",
1508 yyvsp[-1].tv_str, yylineno);
1509 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1510 }
1511 free(yyvsp[-1].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00001512 ;
1513 break;}
1514case 23:
Lev Walkinef625402005-09-05 05:17:57 +00001515#line 477 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001516{ yyval.a_module = 0; ;
1517 break;}
1518case 24:
Lev Walkinef625402005-09-05 05:17:57 +00001519#line 478 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001520{
Lev Walkinf15320b2004-06-03 03:38:44 +00001521 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001522 ;
1523 break;}
1524case 25:
Lev Walkinef625402005-09-05 05:17:57 +00001525#line 487 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001526{
Lev Walkinf59d0752004-08-18 04:59:12 +00001527 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001528 ;
1529 break;}
1530case 26:
Lev Walkinef625402005-09-05 05:17:57 +00001531#line 490 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001532{
Lev Walkinf15320b2004-06-03 03:38:44 +00001533 yyval.a_module = yyvsp[-1].a_module;
1534
Lev Walkinf59d0752004-08-18 04:59:12 +00001535 /* Behave well when one of them is skipped. */
1536 if(!(yyvsp[-1].a_module)) {
1537 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1538 break;
1539 }
1540
Lev Walkinf15320b2004-06-03 03:38:44 +00001541#ifdef MY_IMPORT
1542#error MY_IMPORT DEFINED ELSEWHERE!
1543#endif
1544#define MY_IMPORT(foo,field) do { \
Lev Walkinbc55d232004-08-13 12:31:09 +00001545 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
Lev Walkinf15320b2004-06-03 03:38:44 +00001546 TQ_ADD(&(yyval.a_module->foo), \
1547 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1548 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001549 } \
1550 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1551 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001552
1553 MY_IMPORT(imports, xp_next);
1554 MY_IMPORT(exports, xp_next);
1555 MY_IMPORT(members, next);
1556#undef MY_IMPORT
1557
Lev Walkin1004aa92004-09-08 00:28:11 +00001558 ;
1559 break;}
1560case 27:
Lev Walkinef625402005-09-05 05:17:57 +00001561#line 523 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001562{
Lev Walkinf15320b2004-06-03 03:38:44 +00001563 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001564 ;
1565 break;}
1566case 28:
Lev Walkinef625402005-09-05 05:17:57 +00001567#line 526 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001568{
Lev Walkinf15320b2004-06-03 03:38:44 +00001569 yyval.a_module = asn1p_module_new();
1570 checkmem(yyval.a_module);
1571 if(yyvsp[0].a_xports) {
1572 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1573 } else {
1574 /* "EXPORTS ALL;" ? */
1575 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001576 ;
1577 break;}
1578case 29:
Lev Walkinef625402005-09-05 05:17:57 +00001579#line 535 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001580{
Lev Walkinf59d0752004-08-18 04:59:12 +00001581 yyval.a_module = asn1p_module_new();
1582 checkmem(yyval.a_module);
1583 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1584 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1585 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001586 ;
1587 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001588case 30:
Lev Walkinef625402005-09-05 05:17:57 +00001589#line 542 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001590{
1591 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);
1596 ;
1597 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001598case 31:
Lev Walkinef625402005-09-05 05:17:57 +00001599#line 555 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001600{
Lev Walkinf59d0752004-08-18 04:59:12 +00001601 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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001606 ;
1607 break;}
1608case 32:
Lev Walkinef625402005-09-05 05:17:57 +00001609#line 563 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001610{ asn1p_lexer_hack_push_encoding_control(); ;
1611 break;}
1612case 33:
Lev Walkinef625402005-09-05 05:17:57 +00001613#line 564 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001614{
Lev Walkinf59d0752004-08-18 04:59:12 +00001615 fprintf(stderr,
1616 "WARNING: ENCODING-CONTROL %s "
1617 "specification at line %d ignored\n",
1618 yyvsp[-1].tv_str, yylineno);
1619 free(yyvsp[-1].tv_str);
1620 yyval.a_module = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001621 ;
1622 break;}
1623case 34:
Lev Walkinef625402005-09-05 05:17:57 +00001624#line 576 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001625{
Lev Walkinf15320b2004-06-03 03:38:44 +00001626 return yyerror(
Lev Walkin70853052005-11-26 11:21:55 +00001627 "Attempt to redefine a standard basic string type, "
1628 "please comment out or remove this type redefinition.");
Lev Walkin1004aa92004-09-08 00:28:11 +00001629 ;
1630 break;}
1631case 35:
Lev Walkin70853052005-11-26 11:21:55 +00001632#line 589 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001633{
Lev Walkinb36317c2005-08-12 10:09:10 +00001634 if(!saved_aid && 0)
1635 return yyerror("Unterminated IMPORTS FROM, "
1636 "expected semicolon ';'");
1637 saved_aid = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001638 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001639 ;
1640 break;}
1641case 36:
Lev Walkin70853052005-11-26 11:21:55 +00001642#line 599 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001643{
Lev Walkinf15320b2004-06-03 03:38:44 +00001644 return yyerror("Empty IMPORTS list");
Lev Walkin1004aa92004-09-08 00:28:11 +00001645 ;
1646 break;}
1647case 37:
Lev Walkin70853052005-11-26 11:21:55 +00001648#line 605 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001649{
Lev Walkinf15320b2004-06-03 03:38:44 +00001650 yyval.a_module = asn1p_module_new();
1651 checkmem(yyval.a_module);
1652 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001653 ;
1654 break;}
1655case 38:
Lev Walkin70853052005-11-26 11:21:55 +00001656#line 610 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001657{
Lev Walkinf15320b2004-06-03 03:38:44 +00001658 yyval.a_module = yyvsp[-1].a_module;
1659 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001660 ;
1661 break;}
1662case 39:
Lev Walkin70853052005-11-26 11:21:55 +00001663#line 617 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001664{ memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
1665 break;}
1666case 40:
Lev Walkin70853052005-11-26 11:21:55 +00001667#line 618 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001668{ yyval.a_aid.oid = yyvsp[0].a_oid; ;
1669 break;}
1670case 41:
Lev Walkin70853052005-11-26 11:21:55 +00001671#line 622 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001672{
Lev Walkinf15320b2004-06-03 03:38:44 +00001673 yyval.a_xports = yyvsp[-3].a_xports;
Lev Walkinb36317c2005-08-12 10:09:10 +00001674 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
1675 yyval.a_xports->identifier = yyvsp[0].a_aid;
1676 /* This stupid thing is used for look-back hack. */
1677 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
Lev Walkinf15320b2004-06-03 03:38:44 +00001678 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001679 ;
1680 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001681case 42:
Lev Walkin70853052005-11-26 11:21:55 +00001682#line 633 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001683{
Lev Walkinf15320b2004-06-03 03:38:44 +00001684 yyval.a_xports = asn1p_xports_new();
1685 checkmem(yyval.a_xports);
1686 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001687 ;
1688 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001689case 43:
Lev Walkin70853052005-11-26 11:21:55 +00001690#line 638 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001691{
Lev Walkinf15320b2004-06-03 03:38:44 +00001692 yyval.a_xports = yyvsp[-2].a_xports;
1693 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001694 ;
1695 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001696case 44:
Lev Walkin70853052005-11-26 11:21:55 +00001697#line 645 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001698{
Lev Walkinf15320b2004-06-03 03:38:44 +00001699 yyval.a_expr = asn1p_expr_new(yylineno);
1700 checkmem(yyval.a_expr);
1701 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1702 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001703 ;
1704 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001705case 45:
Lev Walkin70853052005-11-26 11:21:55 +00001706#line 651 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001707{ /* Completely equivalent to above */
1708 yyval.a_expr = asn1p_expr_new(yylineno);
1709 checkmem(yyval.a_expr);
1710 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1711 yyval.a_expr->expr_type = A1TC_REFERENCE;
1712 ;
1713 break;}
1714case 46:
Lev Walkin70853052005-11-26 11:21:55 +00001715#line 657 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001716{
1717 yyval.a_expr = asn1p_expr_new(yylineno);
1718 checkmem(yyval.a_expr);
1719 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1720 yyval.a_expr->expr_type = A1TC_REFERENCE;
1721 ;
1722 break;}
1723case 47:
Lev Walkin70853052005-11-26 11:21:55 +00001724#line 666 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001725{
Lev Walkinf15320b2004-06-03 03:38:44 +00001726 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin1004aa92004-09-08 00:28:11 +00001727 ;
1728 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001729case 48:
Lev Walkin70853052005-11-26 11:21:55 +00001730#line 669 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001731{
Lev Walkinf15320b2004-06-03 03:38:44 +00001732 yyval.a_xports = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001733 ;
1734 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001735case 49:
Lev Walkin70853052005-11-26 11:21:55 +00001736#line 672 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001737{
Lev Walkinf15320b2004-06-03 03:38:44 +00001738 /* Empty EXPORTS clause effectively prohibits export. */
1739 yyval.a_xports = asn1p_xports_new();
1740 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001741 ;
1742 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001743case 50:
Lev Walkin70853052005-11-26 11:21:55 +00001744#line 680 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001745{
Lev Walkinf15320b2004-06-03 03:38:44 +00001746 yyval.a_xports = asn1p_xports_new();
1747 assert(yyval.a_xports);
1748 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001749 ;
1750 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001751case 51:
Lev Walkin70853052005-11-26 11:21:55 +00001752#line 685 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001753{
Lev Walkinf15320b2004-06-03 03:38:44 +00001754 yyval.a_xports = yyvsp[-2].a_xports;
1755 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001756 ;
1757 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001758case 52:
Lev Walkin70853052005-11-26 11:21:55 +00001759#line 692 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001760{
1761 yyval.a_expr = asn1p_expr_new(yylineno);
1762 checkmem(yyval.a_expr);
1763 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1764 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1765 ;
1766 break;}
1767case 53:
Lev Walkin70853052005-11-26 11:21:55 +00001768#line 698 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001769{
1770 yyval.a_expr = asn1p_expr_new(yylineno);
1771 checkmem(yyval.a_expr);
1772 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1773 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1774 ;
Lev Walkin8ea99482005-03-31 21:48:13 +00001775 break;}
1776case 54:
Lev Walkin70853052005-11-26 11:21:55 +00001777#line 704 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001778{
1779 yyval.a_expr = asn1p_expr_new(yylineno);
1780 checkmem(yyval.a_expr);
1781 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1782 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1783 ;
1784 break;}
1785case 55:
Lev Walkin70853052005-11-26 11:21:55 +00001786#line 715 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001787{ asn1p_lexer_hack_push_opaque_state(); ;
1788 break;}
1789case 56:
Lev Walkin70853052005-11-26 11:21:55 +00001790#line 715 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001791{
Lev Walkinf15320b2004-06-03 03:38:44 +00001792 yyval.a_expr = yyvsp[-4].a_expr;
1793 assert(yyval.a_expr->Identifier == 0);
1794 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1795 yyval.a_expr->meta_type = AMT_VALUESET;
Lev Walkin8ea99482005-03-31 21:48:13 +00001796 // take care of ValueSet body
Lev Walkin1004aa92004-09-08 00:28:11 +00001797 ;
1798 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001799case 57:
Lev Walkin70853052005-11-26 11:21:55 +00001800#line 725 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001801{
Lev Walkinf15320b2004-06-03 03:38:44 +00001802 yyval.a_expr = asn1p_expr_new(yylineno);
1803 checkmem(yyval.a_expr);
1804 yyval.a_expr->reference = yyvsp[0].a_ref;
1805 yyval.a_expr->expr_type = A1TC_REFERENCE;
1806 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001807 ;
1808 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001809case 58:
Lev Walkin70853052005-11-26 11:21:55 +00001810#line 732 "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->expr_type = yyvsp[0].a_type;
1815 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001816 ;
1817 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001818case 59:
Lev Walkin70853052005-11-26 11:21:55 +00001819#line 750 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001820{
Lev Walkinf15320b2004-06-03 03:38:44 +00001821 yyval.a_expr = asn1p_expr_new(yylineno);
1822 checkmem(yyval.a_expr);
1823 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1824 yyval.a_expr->tag = yyvsp[-1].a_tag;
1825 yyval.a_expr->expr_type = A1TC_TYPEID;
1826 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001827 ;
1828 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001829case 60:
Lev Walkin70853052005-11-26 11:21:55 +00001830#line 758 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001831{
Lev Walkinf15320b2004-06-03 03:38:44 +00001832 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00001833 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00001834 assert(yyval.a_expr->expr_type);
1835 assert(yyval.a_expr->meta_type);
Lev Walkin1004aa92004-09-08 00:28:11 +00001836 ;
1837 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001838case 61:
Lev Walkin70853052005-11-26 11:21:55 +00001839#line 764 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001840{
Lev Walkinf15320b2004-06-03 03:38:44 +00001841 yyval.a_expr = yyvsp[0].a_expr;
1842 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1843 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1844 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin1004aa92004-09-08 00:28:11 +00001845 ;
1846 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001847case 62:
Lev Walkin70853052005-11-26 11:21:55 +00001848#line 780 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001849{
Lev Walkinf15320b2004-06-03 03:38:44 +00001850 yyval.a_expr = yyvsp[0].a_expr;
1851 assert(yyval.a_expr->Identifier == 0);
1852 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1853 yyval.a_expr->params = yyvsp[-3].a_plist;
1854 yyval.a_expr->meta_type = AMT_PARAMTYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001855 ;
1856 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001857case 63:
Lev Walkin70853052005-11-26 11:21:55 +00001858#line 790 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001859{
Lev Walkinf15320b2004-06-03 03:38:44 +00001860 int ret;
1861 yyval.a_plist = asn1p_paramlist_new(yylineno);
1862 checkmem(yyval.a_plist);
1863 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1864 checkmem(ret == 0);
1865 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1866 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001867 ;
1868 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001869case 64:
Lev Walkin70853052005-11-26 11:21:55 +00001870#line 799 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001871{
Lev Walkinf15320b2004-06-03 03:38:44 +00001872 int ret;
1873 yyval.a_plist = yyvsp[-2].a_plist;
1874 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1875 checkmem(ret == 0);
1876 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1877 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001878 ;
1879 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001880case 65:
Lev Walkin70853052005-11-26 11:21:55 +00001881#line 810 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001882{
Lev Walkinf15320b2004-06-03 03:38:44 +00001883 yyval.a_parg.governor = NULL;
1884 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001885 ;
1886 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001887case 66:
Lev Walkin70853052005-11-26 11:21:55 +00001888#line 814 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001889{
1890 int ret;
1891 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1892 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1893 checkmem(ret == 0);
1894 yyval.a_parg.argument = yyvsp[0].tv_str;
1895 ;
1896 break;}
1897case 67:
Lev Walkin70853052005-11-26 11:21:55 +00001898#line 821 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001899{
1900 int ret;
1901 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1902 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1903 checkmem(ret == 0);
1904 yyval.a_parg.argument = yyvsp[0].tv_str;
1905 ;
1906 break;}
1907case 68:
Lev Walkin70853052005-11-26 11:21:55 +00001908#line 828 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00001909{
1910 int ret;
1911 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00001912 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1913 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1914 checkmem(ret == 0);
1915 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001916 ;
1917 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001918case 69:
Lev Walkin70853052005-11-26 11:21:55 +00001919#line 839 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001920{
Lev Walkinf15320b2004-06-03 03:38:44 +00001921 yyval.a_expr = asn1p_expr_new(yylineno);
1922 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001923 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1924 ;
1925 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001926case 70:
Lev Walkin70853052005-11-26 11:21:55 +00001927#line 844 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001928{
Lev Walkinf15320b2004-06-03 03:38:44 +00001929 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001930 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1931 ;
1932 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001933case 71:
Lev Walkin70853052005-11-26 11:21:55 +00001934#line 851 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001935{
Lev Walkinf15320b2004-06-03 03:38:44 +00001936 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001937 ;
1938 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001939case 72:
Lev Walkin70853052005-11-26 11:21:55 +00001940#line 854 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001941{
Lev Walkinf15320b2004-06-03 03:38:44 +00001942 yyval.a_expr = asn1p_expr_new(yylineno);
1943 checkmem(yyval.a_expr);
1944 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1945 yyval.a_expr->expr_type = A1TC_REFERENCE;
1946 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001947 ;
1948 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001949case 73:
Lev Walkin70853052005-11-26 11:21:55 +00001950#line 878 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001951{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1952 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001953case 74:
Lev Walkin70853052005-11-26 11:21:55 +00001954#line 879 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001955{ yyval.a_expr = yyvsp[0].a_expr; ;
1956 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001957case 75:
Lev Walkin70853052005-11-26 11:21:55 +00001958#line 882 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001959{
Lev Walkinf15320b2004-06-03 03:38:44 +00001960 yyval.a_expr = asn1p_expr_new(yylineno);
1961 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001962 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1963 ;
1964 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001965case 76:
Lev Walkin70853052005-11-26 11:21:55 +00001966#line 887 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001967{
Lev Walkinf15320b2004-06-03 03:38:44 +00001968 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001969 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1970 ;
1971 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001972case 77:
Lev Walkin70853052005-11-26 11:21:55 +00001973#line 894 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001974{
Lev Walkin070a52d2004-08-22 03:19:54 +00001975 yyval.a_expr = yyvsp[-1].a_expr;
1976 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00001977 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinef625402005-09-05 05:17:57 +00001978 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
Lev Walkin070a52d2004-08-22 03:19:54 +00001979 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00001980 ;
1981 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001982case 78:
Lev Walkin70853052005-11-26 11:21:55 +00001983#line 901 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001984{
Lev Walkinef625402005-09-05 05:17:57 +00001985 yyval.a_expr = yyvsp[-1].a_expr;
1986 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
1987 yyval.a_expr->marker = yyvsp[0].a_marker;
1988 _fixup_anonymous_identifier(yyval.a_expr);
1989 ;
1990 break;}
1991case 79:
Lev Walkin70853052005-11-26 11:21:55 +00001992#line 907 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00001993{
Lev Walkin070a52d2004-08-22 03:19:54 +00001994 yyval.a_expr = asn1p_expr_new(yylineno);
1995 checkmem(yyval.a_expr);
1996 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1997 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001998 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1999 ;
2000 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002001case 80:
Lev Walkin70853052005-11-26 11:21:55 +00002002#line 914 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002003{
Lev Walkin070a52d2004-08-22 03:19:54 +00002004 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002005 ;
2006 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002007case 81:
Lev Walkin70853052005-11-26 11:21:55 +00002008#line 920 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002009{
Lev Walkin070a52d2004-08-22 03:19:54 +00002010 yyval.a_expr = asn1p_expr_new(yylineno);
2011 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002012 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2013 ;
2014 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002015case 82:
Lev Walkin70853052005-11-26 11:21:55 +00002016#line 925 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002017{
Lev Walkin070a52d2004-08-22 03:19:54 +00002018 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002019 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2020 ;
2021 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002022case 83:
Lev Walkin70853052005-11-26 11:21:55 +00002023#line 932 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002024{
Lev Walkin070a52d2004-08-22 03:19:54 +00002025 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002026 assert(yyval.a_expr->Identifier == 0);
2027 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002028 ;
2029 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002030case 84:
Lev Walkin70853052005-11-26 11:21:55 +00002031#line 937 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002032{
2033 yyval.a_expr = yyvsp[0].a_expr;
2034 ;
2035 break;}
2036case 85:
Lev Walkin70853052005-11-26 11:21:55 +00002037#line 940 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002038{
2039 yyval.a_expr = yyvsp[0].a_expr;
2040 _fixup_anonymous_identifier(yyval.a_expr);
2041 ;
2042 break;}
2043case 86:
Lev Walkin70853052005-11-26 11:21:55 +00002044#line 947 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002045{
Lev Walkinf15320b2004-06-03 03:38:44 +00002046 yyval.a_expr = yyvsp[-2].a_expr;
2047 checkmem(yyval.a_expr);
2048 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2049 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2050 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin1004aa92004-09-08 00:28:11 +00002051 ;
2052 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002053case 87:
Lev Walkin70853052005-11-26 11:21:55 +00002054#line 957 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002055{ yyval.a_int = 0; ;
2056 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002057case 88:
Lev Walkin70853052005-11-26 11:21:55 +00002058#line 958 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002059{ yyval.a_int = 1; ;
2060 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002061case 89:
Lev Walkin70853052005-11-26 11:21:55 +00002062#line 962 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002063{
Lev Walkinf15320b2004-06-03 03:38:44 +00002064 yyval.a_expr = asn1p_expr_new(yylineno);
2065 checkmem(yyval.a_expr);
2066 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2067 yyval.a_expr->meta_type = AMT_OBJECT;
Lev Walkin1004aa92004-09-08 00:28:11 +00002068 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2069 ;
2070 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002071case 90:
Lev Walkin70853052005-11-26 11:21:55 +00002072#line 969 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002073{
Lev Walkinf15320b2004-06-03 03:38:44 +00002074 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002075 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2076 ;
2077 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002078case 91:
Lev Walkin70853052005-11-26 11:21:55 +00002079#line 976 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002080{
Lev Walkinf15320b2004-06-03 03:38:44 +00002081 yyval.a_expr = asn1p_expr_new(yylineno);
2082 checkmem(yyval.a_expr);
2083 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2084 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2085 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2086 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002087 ;
2088 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002089case 92:
Lev Walkin70853052005-11-26 11:21:55 +00002090#line 984 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002091{
Lev Walkin070a52d2004-08-22 03:19:54 +00002092 yyval.a_expr = yyvsp[-2].a_expr;
2093 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002094 yyval.a_expr->marker = yyvsp[0].a_marker;
2095 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002096 ;
2097 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002098case 93:
Lev Walkin70853052005-11-26 11:21:55 +00002099#line 990 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002100{
Lev Walkinf15320b2004-06-03 03:38:44 +00002101 int ret;
2102 yyval.a_expr = asn1p_expr_new(yylineno);
2103 checkmem(yyval.a_expr);
2104 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2105 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2106 checkmem(yyval.a_expr->reference);
2107 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2108 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2109 checkmem(ret == 0);
2110 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2111 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002112 yyval.a_expr->marker = yyvsp[0].a_marker;
2113 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002114 ;
2115 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002116case 94:
Lev Walkin70853052005-11-26 11:21:55 +00002117#line 1008 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002118{ yyval.a_wsynt = 0; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002119 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002120case 95:
Lev Walkin70853052005-11-26 11:21:55 +00002121#line 1009 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002122{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002123 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002124 ;
2125 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002126case 96:
Lev Walkin70853052005-11-26 11:21:55 +00002127#line 1016 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002128{ asn1p_lexer_hack_enable_with_syntax(); ;
2129 break;}
2130case 97:
Lev Walkin70853052005-11-26 11:21:55 +00002131#line 1018 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002132{
2133 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2134 ;
2135 break;}
2136case 98:
Lev Walkin70853052005-11-26 11:21:55 +00002137#line 1024 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002138{
Lev Walkinf15320b2004-06-03 03:38:44 +00002139 yyval.a_wsynt = asn1p_wsyntx_new();
2140 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002141 ;
2142 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002143case 99:
Lev Walkin70853052005-11-26 11:21:55 +00002144#line 1028 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002145{
Lev Walkinf15320b2004-06-03 03:38:44 +00002146 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2147 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002148 ;
2149 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002150case 100:
Lev Walkin70853052005-11-26 11:21:55 +00002151#line 1035 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002152{
Lev Walkinf15320b2004-06-03 03:38:44 +00002153 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 +00002154 ;
2155 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002156case 101:
Lev Walkin70853052005-11-26 11:21:55 +00002157#line 1038 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002158{
Lev Walkinf15320b2004-06-03 03:38:44 +00002159 asn1p_ref_t *ref;
2160 int ret;
2161 ref = asn1p_ref_new(yylineno);
2162 checkmem(ref);
2163 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2164 checkmem(ret == 0);
2165 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002166 ;
2167 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002168case 102:
Lev Walkin70853052005-11-26 11:21:55 +00002169#line 1050 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00002170{
2171 yyval.a_expr = asn1p_expr_new(yylineno);
2172 checkmem(yyval.a_expr);
2173 yyval.a_expr->Identifier = strdup("...");
Lev Walkinb36317c2005-08-12 10:09:10 +00002174 checkmem(yyval.a_expr->Identifier);
2175 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2176 yyval.a_expr->meta_type = AMT_TYPE;
2177 ;
2178 break;}
2179case 103:
Lev Walkin70853052005-11-26 11:21:55 +00002180#line 1058 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002181{
2182 yyval.a_expr = asn1p_expr_new(yylineno);
2183 checkmem(yyval.a_expr);
2184 yyval.a_expr->Identifier = strdup("...");
2185 checkmem(yyval.a_expr->Identifier);
2186 yyval.a_expr->value = yyvsp[0].a_value;
2187 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2188 yyval.a_expr->meta_type = AMT_TYPE;
2189 ;
2190 break;}
2191case 104:
Lev Walkin70853052005-11-26 11:21:55 +00002192#line 1067 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002193{
2194 yyval.a_expr = asn1p_expr_new(yylineno);
2195 checkmem(yyval.a_expr);
2196 yyval.a_expr->Identifier = strdup("...");
2197 yyval.a_expr->value = yyvsp[0].a_value;
2198 checkmem(yyval.a_expr->Identifier);
2199 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2200 yyval.a_expr->meta_type = AMT_TYPE;
2201 ;
2202 break;}
2203case 105:
Lev Walkin70853052005-11-26 11:21:55 +00002204#line 1079 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002205{
Lev Walkin070a52d2004-08-22 03:19:54 +00002206 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00002207 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002208 /*
2209 * Outer constraint for SEQUENCE OF and SET OF applies
2210 * to the inner type.
2211 */
2212 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2213 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2214 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2215 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2216 } else {
2217 if(yyval.a_expr->constraints) {
Lev Walkinaf120f72004-09-14 02:36:39 +00002218 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002219 } else {
2220 yyval.a_expr->constraints = yyvsp[0].a_constr;
2221 }
2222 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002223 ;
2224 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002225case 106:
Lev Walkin70853052005-11-26 11:21:55 +00002226#line 1101 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00002227{
2228 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
2229 asn1p_as_pointer = 0;
2230 ;
Lev Walkin4696c742005-08-22 12:23:54 +00002231 break;}
2232case 107:
Lev Walkin70853052005-11-26 11:21:55 +00002233#line 1108 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002234{
Lev Walkind2ea1de2004-08-20 13:25:29 +00002235 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinef625402005-09-05 05:17:57 +00002236 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
2237
2238 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2239 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
2240 fprintf(stderr,
2241 "INFO: Directive <ASN1C:RepresentAsPointer> "
2242 "applied to %s at line %d\n",
2243 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2244 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2245 : "member",
2246 yyval.a_expr->_lineno
2247 );
2248 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002249 ;
2250 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002251case 108:
Lev Walkin70853052005-11-26 11:21:55 +00002252#line 1127 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002253{
Lev Walkin4696c742005-08-22 12:23:54 +00002254 yyval.a_expr = yyvsp[0].a_expr;
2255 ;
2256 break;}
2257case 109:
Lev Walkin70853052005-11-26 11:21:55 +00002258#line 1130 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002259{
Lev Walkinef625402005-09-05 05:17:57 +00002260 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinc7d939d2005-03-20 11:12:40 +00002261 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2262 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
Lev Walkinf15320b2004-06-03 03:38:44 +00002263 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002264 ;
2265 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002266case 110:
Lev Walkin70853052005-11-26 11:21:55 +00002267#line 1136 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002268{
Lev Walkinef625402005-09-05 05:17:57 +00002269 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002270 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002271 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
Lev Walkin070a52d2004-08-22 03:19:54 +00002272 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002273 ;
2274 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002275case 111:
Lev Walkin70853052005-11-26 11:21:55 +00002276#line 1142 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002277{
Lev Walkinef625402005-09-05 05:17:57 +00002278 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002279 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002280 yyval.a_expr->expr_type = ASN_CONSTR_SET;
Lev Walkin070a52d2004-08-22 03:19:54 +00002281 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002282 ;
2283 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002284case 112:
Lev Walkin70853052005-11-26 11:21:55 +00002285#line 1148 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002286{
Lev Walkinceb20e72004-09-05 10:40:41 +00002287 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002288 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002289 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002290 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2291 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002292 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002293 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002294 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2295 ;
2296 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002297case 113:
Lev Walkin70853052005-11-26 11:21:55 +00002298#line 1158 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002299{
Lev Walkinceb20e72004-09-05 10:40:41 +00002300 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002301 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002302 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002303 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2304 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002305 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002306 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002307 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2308 ;
2309 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002310case 114:
Lev Walkin70853052005-11-26 11:21:55 +00002311#line 1168 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002312{
Lev Walkinceb20e72004-09-05 10:40:41 +00002313 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002314 checkmem(yyval.a_expr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002315 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002316 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002317 ;
2318 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002319case 115:
Lev Walkin70853052005-11-26 11:21:55 +00002320#line 1174 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002321{
Lev Walkin070a52d2004-08-22 03:19:54 +00002322 int ret;
Lev Walkinceb20e72004-09-05 10:40:41 +00002323 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002324 checkmem(yyval.a_expr);
2325 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2326 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2327 yyvsp[0].tv_str, RLT_lowercase);
2328 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002329 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002330 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002331 ;
2332 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002333case 116:
Lev Walkin70853052005-11-26 11:21:55 +00002334#line 1188 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002335{
Lev Walkinf15320b2004-06-03 03:38:44 +00002336 int ret;
2337 yyval.a_expr = yyvsp[-1].a_expr;
2338 assert(yyval.a_expr->expr_type == 0);
2339 assert(yyval.a_expr->meta_type == 0);
2340 assert(yyval.a_expr->reference == 0);
2341 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2342 checkmem(yyval.a_expr->reference);
2343 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2344 checkmem(ret == 0);
2345 free(yyvsp[-3].tv_str);
2346 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2347 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002348 ;
2349 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002350case 117:
Lev Walkin70853052005-11-26 11:21:55 +00002351#line 1212 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002352{
Lev Walkinf15320b2004-06-03 03:38:44 +00002353 yyval.a_expr = asn1p_expr_new(yylineno);
2354 checkmem(yyval.a_expr);
2355 yyval.a_expr->reference = yyvsp[0].a_ref;
2356 yyval.a_expr->expr_type = A1TC_REFERENCE;
2357 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00002358 ;
2359 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002360case 118:
Lev Walkin70853052005-11-26 11:21:55 +00002361#line 1219 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002362{
Lev Walkinf15320b2004-06-03 03:38:44 +00002363 yyval.a_expr = asn1p_expr_new(yylineno);
2364 checkmem(yyval.a_expr);
2365 yyval.a_expr->reference = yyvsp[0].a_ref;
2366 yyval.a_expr->expr_type = A1TC_INSTANCE;
2367 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002368 ;
2369 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002370case 119:
Lev Walkin70853052005-11-26 11:21:55 +00002371#line 1234 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002372{
Lev Walkinf15320b2004-06-03 03:38:44 +00002373 int ret;
2374 yyval.a_ref = asn1p_ref_new(yylineno);
2375 checkmem(yyval.a_ref);
2376 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2377 checkmem(ret == 0);
2378 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002379 ;
2380 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002381case 120:
Lev Walkin70853052005-11-26 11:21:55 +00002382#line 1242 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002383{
2384 int ret;
2385 yyval.a_ref = asn1p_ref_new(yylineno);
2386 checkmem(yyval.a_ref);
2387 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2388 checkmem(ret == 0);
2389 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2390 checkmem(ret == 0);
2391 free(yyvsp[-2].tv_str);
2392 ;
2393 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002394case 121:
Lev Walkin70853052005-11-26 11:21:55 +00002395#line 1252 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002396{
2397 int ret;
2398 yyval.a_ref = asn1p_ref_new(yylineno);
2399 checkmem(yyval.a_ref);
2400 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2401 checkmem(ret == 0);
2402 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2403 checkmem(ret == 0);
2404 free(yyvsp[-2].tv_str);
2405 ;
2406 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002407case 122:
Lev Walkin70853052005-11-26 11:21:55 +00002408#line 1262 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002409{
Lev Walkinf15320b2004-06-03 03:38:44 +00002410 int ret;
2411 yyval.a_ref = asn1p_ref_new(yylineno);
2412 checkmem(yyval.a_ref);
Lev Walkin9c974182004-09-15 11:59:51 +00002413 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2414 checkmem(ret == 0);
2415 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2416 checkmem(ret == 0);
2417 free(yyvsp[-2].tv_str);
2418 ;
2419 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002420case 123:
Lev Walkin70853052005-11-26 11:21:55 +00002421#line 1272 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002422{
2423 int ret;
2424 yyval.a_ref = asn1p_ref_new(yylineno);
2425 checkmem(yyval.a_ref);
Lev Walkinf15320b2004-06-03 03:38:44 +00002426 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2427 free(yyvsp[0].tv_str);
2428 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002429 ;
2430 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002431case 124:
Lev Walkin70853052005-11-26 11:21:55 +00002432#line 1280 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002433{
Lev Walkinf15320b2004-06-03 03:38:44 +00002434 int ret;
2435 yyval.a_ref = yyvsp[0].a_ref;
2436 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2437 free(yyvsp[-2].tv_str);
2438 checkmem(ret == 0);
2439 /*
2440 * Move the last element infront.
2441 */
2442 {
2443 struct asn1p_ref_component_s tmp_comp;
2444 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2445 memmove(&yyval.a_ref->components[1],
2446 &yyval.a_ref->components[0],
2447 sizeof(yyval.a_ref->components[0])
2448 * (yyval.a_ref->comp_count - 1));
2449 yyval.a_ref->components[0] = tmp_comp;
2450 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002451 ;
2452 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002453case 125:
Lev Walkin70853052005-11-26 11:21:55 +00002454#line 1302 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002455{
Lev Walkinf15320b2004-06-03 03:38:44 +00002456 int ret;
2457 yyval.a_ref = asn1p_ref_new(yylineno);
2458 checkmem(yyval.a_ref);
2459 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2460 free(yyvsp[0].a_refcomp.name);
2461 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002462 ;
2463 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002464case 126:
Lev Walkin70853052005-11-26 11:21:55 +00002465#line 1310 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002466{
Lev Walkinf15320b2004-06-03 03:38:44 +00002467 int ret;
2468 yyval.a_ref = yyvsp[-2].a_ref;
2469 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2470 free(yyvsp[0].a_refcomp.name);
2471 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002472 ;
2473 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002474case 129:
Lev Walkin70853052005-11-26 11:21:55 +00002475#line 1324 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002476{
Lev Walkinf15320b2004-06-03 03:38:44 +00002477 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2478 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002479 ;
2480 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002481case 130:
Lev Walkin70853052005-11-26 11:21:55 +00002482#line 1329 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002483{
Lev Walkinf15320b2004-06-03 03:38:44 +00002484 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2485 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002486 ;
2487 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002488case 131:
Lev Walkin70853052005-11-26 11:21:55 +00002489#line 1342 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002490{
Lev Walkinf15320b2004-06-03 03:38:44 +00002491 yyval.a_expr = yyvsp[-2].a_expr;
2492 assert(yyval.a_expr->Identifier == NULL);
2493 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2494 yyval.a_expr->meta_type = AMT_VALUE;
2495 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002496 ;
2497 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002498case 132:
Lev Walkin70853052005-11-26 11:21:55 +00002499#line 1352 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002500{
2501 yyval.a_value = asn1p_value_fromint(0);
2502 checkmem(yyval.a_value);
2503 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2504 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2505 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2506 ;
2507 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002508case 133:
Lev Walkin70853052005-11-26 11:21:55 +00002509#line 1359 "asn1p_y.y"
Lev Walkincbad2512005-03-24 16:27:02 +00002510{ asn1p_lexer_hack_push_opaque_state(); ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002511 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002512case 134:
Lev Walkin70853052005-11-26 11:21:55 +00002513#line 1359 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002514{
Lev Walkinf15320b2004-06-03 03:38:44 +00002515 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2516 checkmem(yyval.a_value);
2517 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin1004aa92004-09-08 00:28:11 +00002518 ;
2519 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002520case 135:
Lev Walkin70853052005-11-26 11:21:55 +00002521#line 1364 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002522{
2523 yyval.a_value = asn1p_value_fromint(0);
2524 checkmem(yyval.a_value);
2525 yyval.a_value->type = ATV_NULL;
2526 ;
2527 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002528case 136:
Lev Walkin70853052005-11-26 11:21:55 +00002529#line 1369 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002530{
2531 yyval.a_value = asn1p_value_fromint(0);
2532 checkmem(yyval.a_value);
2533 yyval.a_value->type = ATV_FALSE;
2534 ;
2535 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002536case 137:
Lev Walkin70853052005-11-26 11:21:55 +00002537#line 1374 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002538{
2539 yyval.a_value = asn1p_value_fromint(0);
2540 checkmem(yyval.a_value);
2541 yyval.a_value->type = ATV_TRUE;
2542 ;
2543 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002544case 138:
Lev Walkin70853052005-11-26 11:21:55 +00002545#line 1379 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002546{
Lev Walkinf15320b2004-06-03 03:38:44 +00002547 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2548 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002549 ;
2550 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002551case 139:
Lev Walkin70853052005-11-26 11:21:55 +00002552#line 1383 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002553{
Lev Walkinf15320b2004-06-03 03:38:44 +00002554 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2555 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002556 ;
2557 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002558case 140:
Lev Walkin70853052005-11-26 11:21:55 +00002559#line 1387 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002560{
Lev Walkin1e448d32005-03-24 14:26:38 +00002561 yyval.a_value = yyval.a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002562 ;
2563 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002564case 141:
Lev Walkin70853052005-11-26 11:21:55 +00002565#line 1390 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002566{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002567 yyval.a_value = yyvsp[0].a_value;
2568 ;
2569 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002570case 142:
Lev Walkin70853052005-11-26 11:21:55 +00002571#line 1393 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002572{
2573 yyval.a_value = yyvsp[0].a_value;
2574 ;
2575 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002576case 143:
Lev Walkin70853052005-11-26 11:21:55 +00002577#line 1399 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002578{
Lev Walkinf15320b2004-06-03 03:38:44 +00002579 asn1p_ref_t *ref;
2580 int ret;
2581 ref = asn1p_ref_new(yylineno);
2582 checkmem(ref);
2583 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2584 checkmem(ret == 0);
2585 yyval.a_value = asn1p_value_fromref(ref, 0);
2586 checkmem(yyval.a_value);
2587 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002588 ;
2589 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002590case 144:
Lev Walkin70853052005-11-26 11:21:55 +00002591#line 1410 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002592{
Lev Walkinf15320b2004-06-03 03:38:44 +00002593 asn1p_ref_t *ref;
2594 int ret;
2595 ref = asn1p_ref_new(yylineno);
2596 checkmem(ref);
2597 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2598 checkmem(ret == 0);
2599 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2600 checkmem(ret == 0);
2601 yyval.a_value = asn1p_value_fromref(ref, 0);
2602 checkmem(yyval.a_value);
2603 free(yyvsp[-2].tv_str);
2604 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002605 ;
2606 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002607case 145:
Lev Walkin70853052005-11-26 11:21:55 +00002608#line 1428 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002609{
2610 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2611 checkmem(yyval.a_value);
2612 ;
2613 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002614case 146:
Lev Walkin70853052005-11-26 11:21:55 +00002615#line 1432 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002616{
Lev Walkind9574ae2005-03-24 16:22:35 +00002617 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002618 checkmem(yyval.a_value);
2619 yyval.a_value->type = ATV_TUPLE;
2620 ;
2621 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002622case 147:
Lev Walkin70853052005-11-26 11:21:55 +00002623#line 1437 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002624{
Lev Walkind9574ae2005-03-24 16:22:35 +00002625 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002626 checkmem(yyval.a_value);
2627 yyval.a_value->type = ATV_QUADRUPLE;
2628 ;
2629 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002630case 148:
Lev Walkin70853052005-11-26 11:21:55 +00002631#line 1471 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002632{
Lev Walkin1893ddf2005-03-20 14:28:32 +00002633 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00002634 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2635 checkmem(yyval.tv_opaque.buf);
2636 yyval.tv_opaque.buf[0] = '{';
Lev Walkin1893ddf2005-03-20 14:28:32 +00002637 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00002638 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2639 free(yyvsp[0].tv_opaque.buf);
Lev Walkin1004aa92004-09-08 00:28:11 +00002640 ;
2641 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002642case 149:
Lev Walkin70853052005-11-26 11:21:55 +00002643#line 1480 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002644{
Lev Walkinf15320b2004-06-03 03:38:44 +00002645 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2646 char *p = malloc(newsize + 1);
2647 checkmem(p);
2648 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2649 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2650 p[newsize] = '\0';
2651 free(yyvsp[-1].tv_opaque.buf);
2652 free(yyvsp[0].tv_opaque.buf);
2653 yyval.tv_opaque.buf = p;
2654 yyval.tv_opaque.len = newsize;
Lev Walkin1004aa92004-09-08 00:28:11 +00002655 ;
2656 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002657case 150:
Lev Walkin70853052005-11-26 11:21:55 +00002658#line 1495 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002659{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2660 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002661case 151:
Lev Walkin70853052005-11-26 11:21:55 +00002662#line 1496 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002663{ yyval.a_type = ASN_BASIC_NULL; ;
2664 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002665case 152:
Lev Walkin70853052005-11-26 11:21:55 +00002666#line 1497 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002667{ yyval.a_type = ASN_BASIC_REAL; ;
2668 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002669case 153:
Lev Walkin70853052005-11-26 11:21:55 +00002670#line 1498 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002671{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002672 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002673case 154:
Lev Walkin70853052005-11-26 11:21:55 +00002674#line 1499 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002675{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002676 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002677case 155:
Lev Walkin70853052005-11-26 11:21:55 +00002678#line 1500 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002679{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002680 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002681case 156:
Lev Walkin70853052005-11-26 11:21:55 +00002682#line 1501 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002683{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
Lev Walkin1e448d32005-03-24 14:26:38 +00002684 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002685case 157:
Lev Walkin70853052005-11-26 11:21:55 +00002686#line 1502 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002687{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
Lev Walkinb36317c2005-08-12 10:09:10 +00002688 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002689case 158:
Lev Walkin70853052005-11-26 11:21:55 +00002690#line 1503 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002691{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
Lev Walkinb36317c2005-08-12 10:09:10 +00002692 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002693case 159:
Lev Walkin70853052005-11-26 11:21:55 +00002694#line 1504 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002695{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002696 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002697case 160:
Lev Walkin70853052005-11-26 11:21:55 +00002698#line 1505 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002699{ yyval.a_type = ASN_BASIC_UTCTime; ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002700 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002701case 161:
Lev Walkin70853052005-11-26 11:21:55 +00002702#line 1506 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002703{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2704 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002705case 162:
Lev Walkin70853052005-11-26 11:21:55 +00002706#line 1507 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002707{ yyval.a_type = yyvsp[0].a_type; ;
2708 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002709case 163:
Lev Walkin70853052005-11-26 11:21:55 +00002710#line 1514 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002711{ yyval.a_type = ASN_BASIC_INTEGER; ;
2712 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002713case 164:
Lev Walkin70853052005-11-26 11:21:55 +00002714#line 1515 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002715{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2716 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002717case 165:
Lev Walkin70853052005-11-26 11:21:55 +00002718#line 1516 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002719{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2720 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002721case 166:
Lev Walkin70853052005-11-26 11:21:55 +00002722#line 1520 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002723{
Lev Walkinceb20e72004-09-05 10:40:41 +00002724 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002725 checkmem(yyval.a_expr);
2726 yyval.a_expr->expr_type = yyvsp[0].a_type;
2727 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002728 ;
2729 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002730case 167:
Lev Walkin70853052005-11-26 11:21:55 +00002731#line 1526 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002732{
Lev Walkinf15320b2004-06-03 03:38:44 +00002733 if(yyvsp[0].a_expr) {
2734 yyval.a_expr = yyvsp[0].a_expr;
2735 } else {
Lev Walkinceb20e72004-09-05 10:40:41 +00002736 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002737 checkmem(yyval.a_expr);
2738 }
2739 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2740 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002741 ;
2742 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002743case 168:
Lev Walkin70853052005-11-26 11:21:55 +00002744#line 1539 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002745{ yyval.a_type = ASN_STRING_BMPString; ;
2746 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002747case 169:
Lev Walkin70853052005-11-26 11:21:55 +00002748#line 1540 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002749{
Lev Walkinf15320b2004-06-03 03:38:44 +00002750 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00002751 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002752 ;
2753 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002754case 170:
Lev Walkin70853052005-11-26 11:21:55 +00002755#line 1544 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002756{
Lev Walkin9c974182004-09-15 11:59:51 +00002757 yyval.a_type = ASN_STRING_GraphicString;
2758 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002759 ;
2760 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002761case 171:
Lev Walkin70853052005-11-26 11:21:55 +00002762#line 1548 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002763{ yyval.a_type = ASN_STRING_IA5String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002764 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002765case 172:
Lev Walkin70853052005-11-26 11:21:55 +00002766#line 1549 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002767{ yyval.a_type = ASN_STRING_ISO646String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002768 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002769case 173:
Lev Walkin70853052005-11-26 11:21:55 +00002770#line 1550 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002771{ yyval.a_type = ASN_STRING_NumericString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002772 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002773case 174:
Lev Walkin70853052005-11-26 11:21:55 +00002774#line 1551 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002775{ yyval.a_type = ASN_STRING_PrintableString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002776 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002777case 175:
Lev Walkin70853052005-11-26 11:21:55 +00002778#line 1552 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002779{
2780 yyval.a_type = ASN_STRING_T61String;
2781 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2782 ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002783 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002784case 176:
Lev Walkin70853052005-11-26 11:21:55 +00002785#line 1556 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002786{ yyval.a_type = ASN_STRING_TeletexString; ;
2787 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002788case 177:
Lev Walkin70853052005-11-26 11:21:55 +00002789#line 1557 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002790{ yyval.a_type = ASN_STRING_UniversalString; ;
2791 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002792case 178:
Lev Walkin70853052005-11-26 11:21:55 +00002793#line 1558 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002794{ yyval.a_type = ASN_STRING_UTF8String; ;
2795 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002796case 179:
Lev Walkin70853052005-11-26 11:21:55 +00002797#line 1559 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002798{
2799 yyval.a_type = ASN_STRING_VideotexString;
2800 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2801 ;
2802 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002803case 180:
Lev Walkin70853052005-11-26 11:21:55 +00002804#line 1563 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002805{ yyval.a_type = ASN_STRING_VisibleString; ;
2806 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002807case 181:
Lev Walkin70853052005-11-26 11:21:55 +00002808#line 1564 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002809{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2810 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002811case 187:
Lev Walkin70853052005-11-26 11:21:55 +00002812#line 1576 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002813{ yyval.a_constr = 0; ;
2814 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002815case 188:
Lev Walkin70853052005-11-26 11:21:55 +00002816#line 1577 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002817{
Lev Walkinceb20e72004-09-05 10:40:41 +00002818 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002819 ;
2820 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002821case 189:
Lev Walkin70853052005-11-26 11:21:55 +00002822#line 1583 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002823{
Lev Walkinceb20e72004-09-05 10:40:41 +00002824 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002825 ;
2826 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002827case 190:
Lev Walkin70853052005-11-26 11:21:55 +00002828#line 1586 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002829{
Lev Walkinf15320b2004-06-03 03:38:44 +00002830 /*
2831 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00002832 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00002833 */
Lev Walkind2ea1de2004-08-20 13:25:29 +00002834 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002835 ;
2836 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002837case 191:
Lev Walkin70853052005-11-26 11:21:55 +00002838#line 1596 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002839{
Lev Walkinf15320b2004-06-03 03:38:44 +00002840 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002841 ;
2842 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002843case 192:
Lev Walkin70853052005-11-26 11:21:55 +00002844#line 1599 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002845{
Lev Walkinf59d0752004-08-18 04:59:12 +00002846 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002847 ;
2848 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002849case 193:
Lev Walkin70853052005-11-26 11:21:55 +00002850#line 1605 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002851{
Lev Walkinf15320b2004-06-03 03:38:44 +00002852 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002853 ;
2854 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002855case 194:
Lev Walkin70853052005-11-26 11:21:55 +00002856#line 1608 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002857{
Lev Walkinf15320b2004-06-03 03:38:44 +00002858 asn1p_constraint_t *ct;
2859 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002860 ct->type = ACT_EL_EXT;
2861 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00002862 ;
2863 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002864case 195:
Lev Walkin70853052005-11-26 11:21:55 +00002865#line 1614 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002866{
Lev Walkinf15320b2004-06-03 03:38:44 +00002867 asn1p_constraint_t *ct;
2868 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002869 ct->type = ACT_EL_EXT;
2870 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002871 ct = yyval.a_constr;
2872 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002873 ;
2874 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002875case 196:
Lev Walkin70853052005-11-26 11:21:55 +00002876#line 1625 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002877{
Lev Walkinf59d0752004-08-18 04:59:12 +00002878 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002879 ;
2880 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002881case 197:
Lev Walkin70853052005-11-26 11:21:55 +00002882#line 1628 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002883{
2884 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2885 ;
2886 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002887case 198:
Lev Walkin70853052005-11-26 11:21:55 +00002888#line 1631 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002889{
Lev Walkinf15320b2004-06-03 03:38:44 +00002890 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002891 ;
2892 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002893case 199:
Lev Walkin70853052005-11-26 11:21:55 +00002894#line 1634 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002895{
Lev Walkinf15320b2004-06-03 03:38:44 +00002896 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002897 ;
2898 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002899case 200:
Lev Walkin70853052005-11-26 11:21:55 +00002900#line 1637 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002901{
Lev Walkinf15320b2004-06-03 03:38:44 +00002902 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002903 ;
2904 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002905case 201:
Lev Walkin70853052005-11-26 11:21:55 +00002906#line 1643 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002907{
Lev Walkinf15320b2004-06-03 03:38:44 +00002908 int ret;
2909 yyval.a_constr = asn1p_constraint_new(yylineno);
2910 checkmem(yyval.a_constr);
2911 yyval.a_constr->type = yyvsp[-3].a_ctype;
2912 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2913 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002914 ;
2915 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002916case 202:
Lev Walkin70853052005-11-26 11:21:55 +00002917#line 1651 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002918{
Lev Walkinf59d0752004-08-18 04:59:12 +00002919 int ret;
2920 yyval.a_constr = asn1p_constraint_new(yylineno);
2921 checkmem(yyval.a_constr);
2922 yyval.a_constr->type = ACT_CA_SET;
2923 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2924 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002925 ;
2926 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002927case 203:
Lev Walkin70853052005-11-26 11:21:55 +00002928#line 1659 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002929{
Lev Walkinf59d0752004-08-18 04:59:12 +00002930 yyval.a_constr = asn1p_constraint_new(yylineno);
2931 checkmem(yyval.a_constr);
2932 yyval.a_constr->type = ACT_EL_VALUE;
2933 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002934 ;
2935 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002936case 204:
Lev Walkin70853052005-11-26 11:21:55 +00002937#line 1665 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002938{
Lev Walkin144db9b2004-10-12 23:26:53 +00002939 yyval.a_constr = asn1p_constraint_new(yylineno);
2940 checkmem(yyval.a_constr);
Lev Walkinff7dd142005-03-20 12:58:00 +00002941 yyval.a_constr->type = ACT_EL_TYPE;
2942 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin9c974182004-09-15 11:59:51 +00002943 ;
2944 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002945case 205:
Lev Walkin70853052005-11-26 11:21:55 +00002946#line 1671 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002947{
Lev Walkin4696c742005-08-22 12:23:54 +00002948 yyval.a_constr = asn1p_constraint_new(yylineno);
2949 checkmem(yyval.a_constr);
2950 yyval.a_constr->type = yyvsp[-1].a_ctype;
2951 yyval.a_constr->range_start = yyvsp[-2].a_value;
2952 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002953 ;
2954 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002955case 206:
Lev Walkin70853052005-11-26 11:21:55 +00002956#line 1678 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00002957{
2958 yyval.a_constr = asn1p_constraint_new(yylineno);
2959 checkmem(yyval.a_constr);
2960 yyval.a_constr->type = yyvsp[-1].a_ctype;
2961 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2962 yyval.a_constr->range_stop = yyvsp[0].a_value;
2963 yyval.a_constr->range_start->type = ATV_MIN;
2964 ;
2965 break;}
2966case 207:
Lev Walkin70853052005-11-26 11:21:55 +00002967#line 1686 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00002968{
2969 yyval.a_constr = asn1p_constraint_new(yylineno);
2970 checkmem(yyval.a_constr);
2971 yyval.a_constr->type = yyvsp[-1].a_ctype;
2972 yyval.a_constr->range_start = yyvsp[-2].a_value;
2973 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2974 yyval.a_constr->range_stop->type = ATV_MAX;
2975 ;
2976 break;}
2977case 208:
Lev Walkin70853052005-11-26 11:21:55 +00002978#line 1694 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00002979{
2980 yyval.a_constr = asn1p_constraint_new(yylineno);
2981 checkmem(yyval.a_constr);
2982 yyval.a_constr->type = yyvsp[-1].a_ctype;
2983 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2984 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2985 yyval.a_constr->range_start->type = ATV_MIN;
2986 yyval.a_constr->range_stop->type = ATV_MAX;
2987 ;
2988 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002989case 209:
Lev Walkin70853052005-11-26 11:21:55 +00002990#line 1703 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002991{
Lev Walkinef625402005-09-05 05:17:57 +00002992 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin4696c742005-08-22 12:23:54 +00002993 ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002994 break;}
2995case 210:
Lev Walkin70853052005-11-26 11:21:55 +00002996#line 1706 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002997{
Lev Walkinef625402005-09-05 05:17:57 +00002998 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin4696c742005-08-22 12:23:54 +00002999 ;
3000 break;}
3001case 211:
Lev Walkin70853052005-11-26 11:21:55 +00003002#line 1710 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003003{ asn1p_lexer_hack_push_opaque_state(); ;
3004 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003005case 212:
Lev Walkin70853052005-11-26 11:21:55 +00003006#line 1710 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003007{
3008 yyval.a_constr = asn1p_constraint_new(yylineno);
3009 checkmem(yyval.a_constr);
3010 yyval.a_constr->type = ACT_CT_CTDBY;
3011 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3012 checkmem(yyval.a_constr->value);
3013 yyval.a_constr->value->type = ATV_UNPARSED;
3014 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003015 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003016case 213:
Lev Walkin70853052005-11-26 11:21:55 +00003017#line 1721 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003018{ yyval.a_ctype = ACT_EL_RANGE; ;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003019 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003020case 214:
Lev Walkin70853052005-11-26 11:21:55 +00003021#line 1722 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003022{ yyval.a_ctype = ACT_EL_RLRANGE; ;
Lev Walkinff7dd142005-03-20 12:58:00 +00003023 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003024case 215:
Lev Walkin70853052005-11-26 11:21:55 +00003025#line 1723 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003026{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3027 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003028case 216:
Lev Walkin70853052005-11-26 11:21:55 +00003029#line 1724 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003030{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3031 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003032case 217:
Lev Walkin70853052005-11-26 11:21:55 +00003033#line 1728 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003034{
Lev Walkinceb20e72004-09-05 10:40:41 +00003035 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003036 ;
3037 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003038case 218:
Lev Walkin70853052005-11-26 11:21:55 +00003039#line 1731 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003040{
Lev Walkinceb20e72004-09-05 10:40:41 +00003041 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin1004aa92004-09-08 00:28:11 +00003042 ;
3043 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003044case 219:
Lev Walkin70853052005-11-26 11:21:55 +00003045#line 1737 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003046{
3047 yyval.a_value = asn1p_value_fromint(0);
3048 checkmem(yyval.a_value);
3049 yyval.a_value->type = ATV_FALSE;
3050 ;
3051 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003052case 220:
Lev Walkin70853052005-11-26 11:21:55 +00003053#line 1742 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003054{
3055 yyval.a_value = asn1p_value_fromint(1);
3056 checkmem(yyval.a_value);
3057 yyval.a_value->type = ATV_TRUE;
3058 ;
3059 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003060case 221:
Lev Walkin70853052005-11-26 11:21:55 +00003061#line 1747 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003062{
3063 yyval.a_value = yyvsp[0].a_value;
3064 ;
3065 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003066case 222:
Lev Walkin70853052005-11-26 11:21:55 +00003067#line 1750 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003068{
3069 yyval.a_value = yyvsp[0].a_value;
3070 ;
3071 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003072case 223:
Lev Walkin70853052005-11-26 11:21:55 +00003073#line 1753 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003074{
Lev Walkinf15320b2004-06-03 03:38:44 +00003075 asn1p_ref_t *ref;
3076 int ret;
3077 ref = asn1p_ref_new(yylineno);
3078 checkmem(ref);
3079 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3080 checkmem(ret == 0);
3081 yyval.a_value = asn1p_value_fromref(ref, 0);
3082 checkmem(yyval.a_value);
3083 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003084 ;
3085 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003086case 224:
Lev Walkin70853052005-11-26 11:21:55 +00003087#line 1767 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003088{
Lev Walkinc8092cb2005-02-18 16:34:21 +00003089 asn1p_ref_t *ref;
3090 int ret;
3091 ref = asn1p_ref_new(yylineno);
3092 checkmem(ref);
3093 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3094 checkmem(ret == 0);
3095 yyval.a_value = asn1p_value_fromref(ref, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003096 checkmem(yyval.a_value);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003097 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003098 ;
3099 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003100case 225:
Lev Walkin70853052005-11-26 11:21:55 +00003101#line 1781 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003102{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003103 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003104 ;
3105 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003106case 226:
Lev Walkin70853052005-11-26 11:21:55 +00003107#line 1784 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003108{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003109 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkine596bf02005-03-28 15:01:27 +00003110 ;
3111 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003112case 227:
Lev Walkin70853052005-11-26 11:21:55 +00003113#line 1790 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003114{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003115 yyval.a_constr = yyvsp[0].a_constr;
3116 ;
3117 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003118case 228:
Lev Walkin70853052005-11-26 11:21:55 +00003119#line 1793 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003120{
3121 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3122 ;
3123 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003124case 229:
Lev Walkin70853052005-11-26 11:21:55 +00003125#line 1799 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003126{
Lev Walkinf15320b2004-06-03 03:38:44 +00003127 yyval.a_constr = asn1p_constraint_new(yylineno);
3128 checkmem(yyval.a_constr);
3129 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkine596bf02005-03-28 15:01:27 +00003130 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003131 ;
3132 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003133case 230:
Lev Walkin70853052005-11-26 11:21:55 +00003134#line 1805 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003135{
Lev Walkinf15320b2004-06-03 03:38:44 +00003136 yyval.a_constr = asn1p_constraint_new(yylineno);
3137 checkmem(yyval.a_constr);
3138 yyval.a_constr->type = ACT_EL_VALUE;
3139 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3140 yyval.a_constr->presence = yyvsp[0].a_pres;
Lev Walkine596bf02005-03-28 15:01:27 +00003141 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003142 ;
3143 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003144case 231:
Lev Walkin70853052005-11-26 11:21:55 +00003145#line 1819 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003146{ yyval.a_pres = ACPRES_DEFAULT; ;
3147 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003148case 232:
Lev Walkin70853052005-11-26 11:21:55 +00003149#line 1820 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003150{ yyval.a_pres = yyvsp[0].a_pres; ;
3151 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003152case 233:
Lev Walkin70853052005-11-26 11:21:55 +00003153#line 1824 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003154{
Lev Walkinf15320b2004-06-03 03:38:44 +00003155 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003156 ;
3157 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003158case 234:
Lev Walkin70853052005-11-26 11:21:55 +00003159#line 1827 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00003160{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003161 yyval.a_pres = ACPRES_ABSENT;
Lev Walkinb36317c2005-08-12 10:09:10 +00003162 ;
3163 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003164case 235:
Lev Walkin70853052005-11-26 11:21:55 +00003165#line 1830 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00003166{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003167 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkinb36317c2005-08-12 10:09:10 +00003168 ;
3169 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003170case 236:
Lev Walkin70853052005-11-26 11:21:55 +00003171#line 1836 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003172{
3173 yyval.a_constr = yyvsp[0].a_constr;
3174 ;
3175 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003176case 237:
Lev Walkin70853052005-11-26 11:21:55 +00003177#line 1839 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003178{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003179 yyval.a_constr = yyvsp[0].a_constr;
3180 ;
3181 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003182case 238:
Lev Walkin70853052005-11-26 11:21:55 +00003183#line 1848 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003184{
Lev Walkinf15320b2004-06-03 03:38:44 +00003185 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3186 asn1p_constraint_t *ct;
3187 int ret;
3188 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3189 checkmem(ret == 0);
3190 ct = asn1p_constraint_new(yylineno);
3191 checkmem(yyval.a_constr);
3192 ct->type = ACT_EL_VALUE;
3193 ct->value = asn1p_value_fromref(ref, 0);
3194 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003195 ;
3196 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003197case 239:
Lev Walkin70853052005-11-26 11:21:55 +00003198#line 1863 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003199{
Lev Walkinf15320b2004-06-03 03:38:44 +00003200 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003201 ;
3202 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003203case 240:
Lev Walkin70853052005-11-26 11:21:55 +00003204#line 1869 "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_fromref(yyvsp[0].a_ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003210 ;
3211 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003212case 241:
Lev Walkin70853052005-11-26 11:21:55 +00003213#line 1875 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003214{
Lev Walkinf15320b2004-06-03 03:38:44 +00003215 asn1p_constraint_t *ct;
3216 ct = asn1p_constraint_new(yylineno);
3217 checkmem(ct);
3218 ct->type = ACT_EL_VALUE;
3219 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3220 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00003221 ;
3222 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003223case 242:
Lev Walkin70853052005-11-26 11:21:55 +00003224#line 1889 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003225{
Lev Walkinf15320b2004-06-03 03:38:44 +00003226 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3227 int ret;
3228 *p = '@';
3229 strcpy(p + 1, yyvsp[0].tv_str);
3230 yyval.a_ref = asn1p_ref_new(yylineno);
3231 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3232 checkmem(ret == 0);
3233 free(p);
3234 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003235 ;
3236 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003237case 243:
Lev Walkin70853052005-11-26 11:21:55 +00003238#line 1900 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003239{
Lev Walkinf15320b2004-06-03 03:38:44 +00003240 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3241 int ret;
3242 p[0] = '@';
3243 p[1] = '.';
3244 strcpy(p + 2, yyvsp[0].tv_str);
3245 yyval.a_ref = asn1p_ref_new(yylineno);
3246 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3247 checkmem(ret == 0);
3248 free(p);
3249 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003250 ;
3251 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003252case 244:
Lev Walkin70853052005-11-26 11:21:55 +00003253#line 1916 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003254{
Lev Walkinf15320b2004-06-03 03:38:44 +00003255 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003256 ;
3257 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003258case 245:
Lev Walkin70853052005-11-26 11:21:55 +00003259#line 1919 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003260{
Lev Walkinf15320b2004-06-03 03:38:44 +00003261 int l1 = strlen(yyvsp[-2].tv_str);
3262 int l3 = strlen(yyvsp[0].tv_str);
3263 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3264 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3265 yyval.tv_str[l1] = '.';
3266 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3267 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin1004aa92004-09-08 00:28:11 +00003268 ;
3269 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003270case 246:
Lev Walkin70853052005-11-26 11:21:55 +00003271#line 1937 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003272{
Lev Walkin9c974182004-09-15 11:59:51 +00003273 yyval.a_marker.flags = EM_NOMARK;
3274 yyval.a_marker.default_value = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00003275 ;
3276 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003277case 247:
Lev Walkin70853052005-11-26 11:21:55 +00003278#line 1941 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003279{ yyval.a_marker = yyvsp[0].a_marker; ;
Lev Walkinec208e62004-09-14 02:44:07 +00003280 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003281case 248:
Lev Walkin70853052005-11-26 11:21:55 +00003282#line 1945 "asn1p_y.y"
Lev Walkinec208e62004-09-14 02:44:07 +00003283{
Lev Walkin70853052005-11-26 11:21:55 +00003284 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
Lev Walkin9c974182004-09-15 11:59:51 +00003285 yyval.a_marker.default_value = 0;
Lev Walkinec208e62004-09-14 02:44:07 +00003286 ;
3287 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003288case 249:
Lev Walkin70853052005-11-26 11:21:55 +00003289#line 1949 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003290{
3291 yyval.a_marker.flags = EM_DEFAULT;
3292 yyval.a_marker.default_value = yyvsp[0].a_value;
3293 ;
3294 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003295case 250:
Lev Walkin70853052005-11-26 11:21:55 +00003296#line 1972 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003297{
Lev Walkinceb20e72004-09-05 10:40:41 +00003298 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003299 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003300 ;
3301 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003302case 251:
Lev Walkin70853052005-11-26 11:21:55 +00003303#line 1976 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003304{
Lev Walkine596bf02005-03-28 15:01:27 +00003305 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003306 ;
3307 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003308case 252:
Lev Walkin70853052005-11-26 11:21:55 +00003309#line 1982 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003310{
Lev Walkine596bf02005-03-28 15:01:27 +00003311 yyval.a_expr = asn1p_expr_new(yylineno);
3312 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003313 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3314 ;
3315 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003316case 253:
Lev Walkin70853052005-11-26 11:21:55 +00003317#line 1987 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003318{
3319 yyval.a_expr = yyvsp[-2].a_expr;
3320 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3321 ;
3322 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003323case 254:
Lev Walkin70853052005-11-26 11:21:55 +00003324#line 1994 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003325{
Lev Walkinceb20e72004-09-05 10:40:41 +00003326 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003327 checkmem(yyval.a_expr);
3328 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3329 yyval.a_expr->meta_type = AMT_VALUE;
3330 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003331 ;
3332 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003333case 255:
Lev Walkin70853052005-11-26 11:21:55 +00003334#line 2001 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003335{
3336 yyval.a_expr = asn1p_expr_new(yylineno);
3337 checkmem(yyval.a_expr);
3338 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3339 yyval.a_expr->meta_type = AMT_VALUE;
3340 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3341 yyval.a_expr->value = yyvsp[-1].a_value;
3342 ;
3343 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003344case 256:
Lev Walkin70853052005-11-26 11:21:55 +00003345#line 2009 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003346{
3347 yyval.a_expr = asn1p_expr_new(yylineno);
3348 checkmem(yyval.a_expr);
3349 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3350 yyval.a_expr->meta_type = AMT_VALUE;
3351 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3352 yyval.a_expr->value = yyvsp[-1].a_value;
3353 ;
3354 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003355case 257:
Lev Walkin70853052005-11-26 11:21:55 +00003356#line 2017 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003357{
3358 yyval.a_expr = asn1p_expr_new(yylineno);
3359 checkmem(yyval.a_expr);
3360 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3361 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkinf15320b2004-06-03 03:38:44 +00003362 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003363 ;
3364 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003365case 258:
Lev Walkin70853052005-11-26 11:21:55 +00003366#line 2024 "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);
3370 yyval.a_expr->Identifier = strdup("...");
3371 checkmem(yyval.a_expr->Identifier);
3372 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3373 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003374 ;
3375 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003376case 259:
Lev Walkin70853052005-11-26 11:21:55 +00003377#line 2035 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003378{
3379 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3380 checkmem(yyval.a_value);
3381 ;
Lev Walkinb36317c2005-08-12 10:09:10 +00003382 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003383case 260:
Lev Walkin70853052005-11-26 11:21:55 +00003384#line 2039 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003385{
3386 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3387 checkmem(yyval.a_value);
3388 ;
Lev Walkinb36317c2005-08-12 10:09:10 +00003389 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003390case 261:
Lev Walkin70853052005-11-26 11:21:55 +00003391#line 2070 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003392{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3393 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003394case 262:
Lev Walkin70853052005-11-26 11:21:55 +00003395#line 2071 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003396{ yyval.a_tag = yyvsp[0].a_tag; ;
3397 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003398case 263:
Lev Walkin70853052005-11-26 11:21:55 +00003399#line 2075 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003400{
Lev Walkinc603f102005-01-23 09:51:44 +00003401 yyval.a_tag = yyvsp[-1].a_tag;
3402 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin1004aa92004-09-08 00:28:11 +00003403 ;
3404 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003405case 264:
Lev Walkin70853052005-11-26 11:21:55 +00003406#line 2082 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003407{
Lev Walkinc603f102005-01-23 09:51:44 +00003408 yyval.a_tag = yyvsp[-2].a_tag;
3409 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00003410 ;
3411 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003412case 265:
Lev Walkin70853052005-11-26 11:21:55 +00003413#line 2088 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003414{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00003415 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003416case 266:
Lev Walkin70853052005-11-26 11:21:55 +00003417#line 2089 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003418{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
Lev Walkin83cac2f2004-09-22 16:03:36 +00003419 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003420case 267:
Lev Walkin70853052005-11-26 11:21:55 +00003421#line 2090 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003422{ yyval.a_tag.tag_class = TC_APPLICATION; ;
Lev Walkin1e448d32005-03-24 14:26:38 +00003423 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003424case 268:
Lev Walkin70853052005-11-26 11:21:55 +00003425#line 2091 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003426{ yyval.a_tag.tag_class = TC_PRIVATE; ;
Lev Walkinb36317c2005-08-12 10:09:10 +00003427 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003428case 269:
Lev Walkin70853052005-11-26 11:21:55 +00003429#line 2095 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003430{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3431 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003432case 270:
Lev Walkin70853052005-11-26 11:21:55 +00003433#line 2096 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003434{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3435 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003436case 271:
Lev Walkin70853052005-11-26 11:21:55 +00003437#line 2097 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003438{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3439 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003440case 272:
Lev Walkin70853052005-11-26 11:21:55 +00003441#line 2101 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00003442{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003443 checkmem(yyvsp[0].tv_str);
Lev Walkinb36317c2005-08-12 10:09:10 +00003444 yyval.tv_str = yyvsp[0].tv_str;
3445 ;
3446 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003447case 273:
Lev Walkin70853052005-11-26 11:21:55 +00003448#line 2105 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003449{
3450 checkmem(yyvsp[0].tv_str);
3451 yyval.tv_str = yyvsp[0].tv_str;
3452 ;
3453 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003454case 274:
Lev Walkin70853052005-11-26 11:21:55 +00003455#line 2113 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003456{
3457 checkmem(yyvsp[0].tv_str);
3458 yyval.tv_str = yyvsp[0].tv_str;
3459 ;
3460 break;}
3461case 275:
Lev Walkin70853052005-11-26 11:21:55 +00003462#line 2120 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003463{ yyval.tv_str = 0; ;
3464 break;}
3465case 276:
Lev Walkin70853052005-11-26 11:21:55 +00003466#line 2121 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00003467{
3468 yyval.tv_str = yyvsp[0].tv_str;
3469 ;
3470 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003471case 277:
Lev Walkin70853052005-11-26 11:21:55 +00003472#line 2127 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003473{
Lev Walkinceb20e72004-09-05 10:40:41 +00003474 checkmem(yyvsp[0].tv_str);
3475 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003476 ;
3477 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00003478}
3479 /* the action file gets copied in in place of this dollarsign */
3480#line 543 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00003481
3482 yyvsp -= yylen;
3483 yyssp -= yylen;
Lev Walkin1004aa92004-09-08 00:28:11 +00003484#ifdef YYLSP_NEEDED
3485 yylsp -= yylen;
3486#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003487
Lev Walkin1004aa92004-09-08 00:28:11 +00003488#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00003489 if (yydebug)
3490 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003491 short *ssp1 = yyss - 1;
3492 fprintf (stderr, "state stack now");
3493 while (ssp1 != yyssp)
3494 fprintf (stderr, " %d", *++ssp1);
3495 fprintf (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003496 }
3497#endif
3498
3499 *++yyvsp = yyval;
3500
Lev Walkin1004aa92004-09-08 00:28:11 +00003501#ifdef YYLSP_NEEDED
3502 yylsp++;
3503 if (yylen == 0)
3504 {
3505 yylsp->first_line = yylloc.first_line;
3506 yylsp->first_column = yylloc.first_column;
3507 yylsp->last_line = (yylsp-1)->last_line;
3508 yylsp->last_column = (yylsp-1)->last_column;
3509 yylsp->text = 0;
3510 }
3511 else
3512 {
3513 yylsp->last_line = (yylsp+yylen-1)->last_line;
3514 yylsp->last_column = (yylsp+yylen-1)->last_column;
3515 }
3516#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003517
Lev Walkin1004aa92004-09-08 00:28:11 +00003518 /* Now "shift" the result of the reduction.
3519 Determine what state that goes to,
3520 based on the state we popped back to
3521 and the rule number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003522
3523 yyn = yyr1[yyn];
3524
Lev Walkin1004aa92004-09-08 00:28:11 +00003525 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3526 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003527 yystate = yytable[yystate];
3528 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003529 yystate = yydefgoto[yyn - YYNTBASE];
Lev Walkinf15320b2004-06-03 03:38:44 +00003530
3531 goto yynewstate;
3532
Lev Walkin1004aa92004-09-08 00:28:11 +00003533yyerrlab: /* here on detecting error */
Lev Walkinf15320b2004-06-03 03:38:44 +00003534
Lev Walkin1004aa92004-09-08 00:28:11 +00003535 if (! yyerrstatus)
3536 /* If not already recovering from an error, report this error. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003537 {
3538 ++yynerrs;
Lev Walkin1004aa92004-09-08 00:28:11 +00003539
3540#ifdef YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003541 yyn = yypact[yystate];
3542
Lev Walkin1004aa92004-09-08 00:28:11 +00003543 if (yyn > YYFLAG && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003544 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003545 int size = 0;
3546 char *msg;
3547 int x, count;
Lev Walkinf15320b2004-06-03 03:38:44 +00003548
Lev Walkin1004aa92004-09-08 00:28:11 +00003549 count = 0;
3550 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3551 for (x = (yyn < 0 ? -yyn : 0);
Lev Walkin4a4bdf72005-06-07 21:43:32 +00003552 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
Lev Walkin1004aa92004-09-08 00:28:11 +00003553 if (yycheck[x + yyn] == x)
3554 size += strlen(yytname[x]) + 15, count++;
3555 msg = (char *) malloc(size + 15);
3556 if (msg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003557 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003558 strcpy(msg, "parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003559
Lev Walkin1004aa92004-09-08 00:28:11 +00003560 if (count < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003561 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003562 count = 0;
3563 for (x = (yyn < 0 ? -yyn : 0);
Lev Walkin4a4bdf72005-06-07 21:43:32 +00003564 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
Lev Walkin1004aa92004-09-08 00:28:11 +00003565 if (yycheck[x + yyn] == x)
Lev Walkinf15320b2004-06-03 03:38:44 +00003566 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003567 strcat(msg, count == 0 ? ", expecting `" : " or `");
3568 strcat(msg, yytname[x]);
3569 strcat(msg, "'");
3570 count++;
Lev Walkinf15320b2004-06-03 03:38:44 +00003571 }
3572 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003573 yyerror(msg);
3574 free(msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003575 }
3576 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003577 yyerror ("parse error; also virtual memory exceeded");
Lev Walkinf15320b2004-06-03 03:38:44 +00003578 }
3579 else
3580#endif /* YYERROR_VERBOSE */
Lev Walkin1004aa92004-09-08 00:28:11 +00003581 yyerror("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003582 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003583
Lev Walkinf15320b2004-06-03 03:38:44 +00003584 goto yyerrlab1;
Lev Walkin1004aa92004-09-08 00:28:11 +00003585yyerrlab1: /* here on error raised explicitly by an action */
Lev Walkinf15320b2004-06-03 03:38:44 +00003586
3587 if (yyerrstatus == 3)
3588 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003589 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003590
Lev Walkin1004aa92004-09-08 00:28:11 +00003591 /* return failure if at end of input */
Lev Walkinf15320b2004-06-03 03:38:44 +00003592 if (yychar == YYEOF)
Lev Walkin1004aa92004-09-08 00:28:11 +00003593 YYABORT;
Lev Walkinf15320b2004-06-03 03:38:44 +00003594
Lev Walkin1004aa92004-09-08 00:28:11 +00003595#if YYDEBUG != 0
3596 if (yydebug)
3597 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3598#endif
3599
Lev Walkinf15320b2004-06-03 03:38:44 +00003600 yychar = YYEMPTY;
3601 }
3602
Lev Walkin1004aa92004-09-08 00:28:11 +00003603 /* Else will try to reuse lookahead token
3604 after shifting the error token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003605
Lev Walkin1004aa92004-09-08 00:28:11 +00003606 yyerrstatus = 3; /* Each real token shifted decrements this */
Lev Walkinf15320b2004-06-03 03:38:44 +00003607
Lev Walkin1004aa92004-09-08 00:28:11 +00003608 goto yyerrhandle;
Lev Walkin459ab022004-09-07 10:39:09 +00003609
Lev Walkin1004aa92004-09-08 00:28:11 +00003610yyerrdefault: /* current state does not do anything special for the error token. */
Lev Walkin459ab022004-09-07 10:39:09 +00003611
Lev Walkin1004aa92004-09-08 00:28:11 +00003612#if 0
3613 /* This is wrong; only states that explicitly want error tokens
3614 should shift them. */
3615 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3616 if (yyn) goto yydefault;
Lev Walkinceb20e72004-09-05 10:40:41 +00003617#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003618
3619yyerrpop: /* pop the current state because it cannot handle the error token */
3620
3621 if (yyssp == yyss) YYABORT;
3622 yyvsp--;
3623 yystate = *--yyssp;
3624#ifdef YYLSP_NEEDED
3625 yylsp--;
3626#endif
3627
3628#if YYDEBUG != 0
3629 if (yydebug)
3630 {
3631 short *ssp1 = yyss - 1;
3632 fprintf (stderr, "Error: state stack now");
3633 while (ssp1 != yyssp)
3634 fprintf (stderr, " %d", *++ssp1);
3635 fprintf (stderr, "\n");
Lev Walkinceb20e72004-09-05 10:40:41 +00003636 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003637#endif
3638
3639yyerrhandle:
3640
3641 yyn = yypact[yystate];
3642 if (yyn == YYFLAG)
3643 goto yyerrdefault;
3644
3645 yyn += YYTERROR;
3646 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3647 goto yyerrdefault;
3648
3649 yyn = yytable[yyn];
3650 if (yyn < 0)
3651 {
3652 if (yyn == YYFLAG)
3653 goto yyerrpop;
3654 yyn = -yyn;
3655 goto yyreduce;
3656 }
3657 else if (yyn == 0)
3658 goto yyerrpop;
Lev Walkinf15320b2004-06-03 03:38:44 +00003659
3660 if (yyn == YYFINAL)
3661 YYACCEPT;
3662
Lev Walkin1004aa92004-09-08 00:28:11 +00003663#if YYDEBUG != 0
3664 if (yydebug)
3665 fprintf(stderr, "Shifting error token, ");
3666#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003667
3668 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00003669#ifdef YYLSP_NEEDED
3670 *++yylsp = yylloc;
3671#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003672
3673 yystate = yyn;
3674 goto yynewstate;
3675
Lev Walkin1004aa92004-09-08 00:28:11 +00003676 yyacceptlab:
3677 /* YYACCEPT comes here. */
3678 if (yyfree_stacks)
3679 {
3680 free (yyss);
3681 free (yyvs);
3682#ifdef YYLSP_NEEDED
3683 free (yyls);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003684#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003685 }
3686 return 0;
Lev Walkin459ab022004-09-07 10:39:09 +00003687
Lev Walkin1004aa92004-09-08 00:28:11 +00003688 yyabortlab:
3689 /* YYABORT comes here. */
3690 if (yyfree_stacks)
3691 {
3692 free (yyss);
3693 free (yyvs);
3694#ifdef YYLSP_NEEDED
3695 free (yyls);
Lev Walkin459ab022004-09-07 10:39:09 +00003696#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003697 }
3698 return 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003699}
Lev Walkin70853052005-11-26 11:21:55 +00003700#line 2133 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00003701
3702
3703
3704/*
3705 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3706 */
3707static asn1p_value_t *
3708_convert_bitstring2binary(char *str, int base) {
3709 asn1p_value_t *val;
3710 int slen;
3711 int memlen;
3712 int baselen;
3713 int bits;
3714 uint8_t *binary_vector;
3715 uint8_t *bv_ptr;
3716 uint8_t cur_val;
3717
3718 assert(str);
3719 assert(str[0] == '\'');
3720
3721 switch(base) {
3722 case 'B':
3723 baselen = 1;
3724 break;
3725 case 'H':
3726 baselen = 4;
3727 break;
3728 default:
3729 assert(base == 'B' || base == 'H');
3730 errno = EINVAL;
3731 return NULL;
3732 }
3733
3734 slen = strlen(str);
3735 assert(str[slen - 1] == base);
3736 assert(str[slen - 2] == '\'');
3737
3738 memlen = slen / (8 / baselen); /* Conservative estimate */
3739
3740 bv_ptr = binary_vector = malloc(memlen + 1);
3741 if(bv_ptr == NULL)
3742 /* ENOMEM */
3743 return NULL;
3744
3745 cur_val = 0;
3746 bits = 0;
3747 while(*(++str) != '\'') {
3748 switch(baselen) {
3749 case 1:
3750 switch(*str) {
3751 case '1':
3752 cur_val |= 1 << (7 - (bits % 8));
3753 case '0':
3754 break;
3755 default:
3756 assert(!"_y UNREACH1");
3757 case ' ': case '\r': case '\n':
3758 continue;
3759 }
3760 break;
3761 case 4:
3762 switch(*str) {
3763 case '0': case '1': case '2': case '3': case '4':
3764 case '5': case '6': case '7': case '8': case '9':
3765 cur_val |= (*str - '0') << (4 - (bits % 8));
3766 break;
3767 case 'A': case 'B': case 'C':
3768 case 'D': case 'E': case 'F':
3769 cur_val |= ((*str - 'A') + 10)
3770 << (4 - (bits % 8));
3771 break;
3772 default:
3773 assert(!"_y UNREACH2");
3774 case ' ': case '\r': case '\n':
3775 continue;
3776 }
3777 break;
3778 }
3779
3780 bits += baselen;
3781 if((bits % 8) == 0) {
3782 *bv_ptr++ = cur_val;
3783 cur_val = 0;
3784 }
3785 }
3786
3787 *bv_ptr = cur_val;
3788 assert((bv_ptr - binary_vector) <= memlen);
3789
3790 val = asn1p_value_frombits(binary_vector, bits, 0);
3791 if(val == NULL) {
3792 free(binary_vector);
3793 }
3794
3795 return val;
3796}
3797
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003798/*
3799 * For unnamed types (used in old X.208 compliant modules)
3800 * generate some sort of interim names, to not to force human being to fix
3801 * the specification's compliance to modern ASN.1 standards.
3802 */
3803static void
3804_fixup_anonymous_identifier(asn1p_expr_t *expr) {
3805 char *p;
3806 assert(expr->Identifier == 0);
3807
3808 /*
3809 * Try to figure out the type name
3810 * without going too much into details
3811 */
3812 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
3813 if(expr->reference && expr->reference->comp_count > 0)
3814 expr->Identifier = expr->reference->components[0].name;
3815
3816 fprintf(stderr,
3817 "WARNING: Line %d: expected lower-case member identifier, "
3818 "found an unnamed %s.\n"
3819 "WARNING: Obsolete X.208 syntax detected, "
3820 "please give the member a name.\n",
3821 yylineno, expr->Identifier ? expr->Identifier : "type");
3822
3823 if(!expr->Identifier)
3824 expr->Identifier = "unnamed";
3825 expr->Identifier = strdup(expr->Identifier);
3826 assert(expr->Identifier);
3827 /* Make a lowercase identifier from the type name */
3828 for(p = expr->Identifier; *p; p++) {
3829 switch(*p) {
3830 case 'A' ... 'Z': *p += 32; break;
3831 case ' ': *p = '_'; break;
3832 case '-': *p = '_'; break;
3833 }
3834 }
3835 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
3836 "Name clash may occur later.\n",
3837 expr->Identifier);
3838}
3839
Lev Walkinf15320b2004-06-03 03:38:44 +00003840extern char *asn1p_text;
3841
3842int
3843yyerror(const char *msg) {
3844 fprintf(stderr,
3845 "ASN.1 grammar parse error "
3846 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00003847 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003848 return -1;
3849}
3850
3851