blob: 419cae45b062bb5ee696ba931fe8d4a92fc23046 [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,
389 555, 562, 564, 576, 589, 600, 605, 611, 617, 619,
390 622, 633, 639, 645, 652, 658, 666, 670, 673, 680,
391 686, 692, 699, 705, 714, 716, 725, 733, 747, 759,
392 765, 781, 790, 800, 810, 815, 822, 829, 839, 845,
393 851, 855, 878, 880, 882, 888, 894, 902, 908, 915,
394 920, 926, 932, 938, 941, 947, 957, 959, 962, 970,
395 976, 985, 991, 1008, 1010, 1015, 1019, 1024, 1029, 1035,
396 1039, 1050, 1059, 1068, 1079, 1101, 1108, 1127, 1131, 1137,
397 1143, 1149, 1159, 1169, 1175, 1189, 1213, 1220, 1234, 1243,
398 1253, 1263, 1273, 1281, 1302, 1311, 1320, 1321, 1323, 1330,
399 1342, 1352, 1360, 1360, 1365, 1370, 1375, 1380, 1384, 1388,
400 1391, 1394, 1399, 1411, 1428, 1433, 1438, 1471, 1481, 1495,
401 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506,
402 1507, 1508, 1514, 1516, 1517, 1520, 1527, 1539, 1541, 1545,
403 1549, 1550, 1551, 1552, 1553, 1557, 1558, 1559, 1560, 1564,
404 1565, 1572, 1572, 1573, 1573, 1574, 1576, 1578, 1583, 1587,
405 1596, 1600, 1605, 1609, 1615, 1625, 1629, 1632, 1635, 1638,
406 1643, 1652, 1660, 1666, 1672, 1679, 1687, 1695, 1704, 1707,
407 1710, 1711, 1721, 1723, 1724, 1725, 1728, 1732, 1737, 1743,
408 1748, 1751, 1754, 1767, 1781, 1785, 1790, 1794, 1799, 1806,
409 1819, 1821, 1824, 1828, 1831, 1836, 1840, 1848, 1863, 1869,
410 1876, 1889, 1901, 1916, 1920, 1937, 1942, 1945, 1950, 1972,
411 1977, 1982, 1988, 1994, 2002, 2010, 2018, 2025, 2035, 2040,
412 2070, 2072, 2075, 2082, 2088, 2090, 2091, 2092, 2095, 2097,
413 2098, 2101, 2106, 2113, 2120, 2122, 2127
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(
1627 "Attempt to redefine a standard basic type, "
1628 "use -ftypesXY to switch back "
1629 "to older version of ASN.1 standard");
Lev Walkin1004aa92004-09-08 00:28:11 +00001630 ;
1631 break;}
1632case 35:
Lev Walkinef625402005-09-05 05:17:57 +00001633#line 590 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001634{
Lev Walkinb36317c2005-08-12 10:09:10 +00001635 if(!saved_aid && 0)
1636 return yyerror("Unterminated IMPORTS FROM, "
1637 "expected semicolon ';'");
1638 saved_aid = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001639 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001640 ;
1641 break;}
1642case 36:
Lev Walkinef625402005-09-05 05:17:57 +00001643#line 600 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001644{
Lev Walkinf15320b2004-06-03 03:38:44 +00001645 return yyerror("Empty IMPORTS list");
Lev Walkin1004aa92004-09-08 00:28:11 +00001646 ;
1647 break;}
1648case 37:
Lev Walkinef625402005-09-05 05:17:57 +00001649#line 606 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001650{
Lev Walkinf15320b2004-06-03 03:38:44 +00001651 yyval.a_module = asn1p_module_new();
1652 checkmem(yyval.a_module);
1653 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001654 ;
1655 break;}
1656case 38:
Lev Walkinef625402005-09-05 05:17:57 +00001657#line 611 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001658{
Lev Walkinf15320b2004-06-03 03:38:44 +00001659 yyval.a_module = yyvsp[-1].a_module;
1660 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001661 ;
1662 break;}
1663case 39:
Lev Walkinef625402005-09-05 05:17:57 +00001664#line 618 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001665{ memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
1666 break;}
1667case 40:
Lev Walkinef625402005-09-05 05:17:57 +00001668#line 619 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001669{ yyval.a_aid.oid = yyvsp[0].a_oid; ;
1670 break;}
1671case 41:
Lev Walkinef625402005-09-05 05:17:57 +00001672#line 623 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001673{
Lev Walkinf15320b2004-06-03 03:38:44 +00001674 yyval.a_xports = yyvsp[-3].a_xports;
Lev Walkinb36317c2005-08-12 10:09:10 +00001675 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
1676 yyval.a_xports->identifier = yyvsp[0].a_aid;
1677 /* This stupid thing is used for look-back hack. */
1678 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
Lev Walkinf15320b2004-06-03 03:38:44 +00001679 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001680 ;
1681 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001682case 42:
Lev Walkinef625402005-09-05 05:17:57 +00001683#line 634 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001684{
Lev Walkinf15320b2004-06-03 03:38:44 +00001685 yyval.a_xports = asn1p_xports_new();
1686 checkmem(yyval.a_xports);
1687 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001688 ;
1689 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001690case 43:
Lev Walkinef625402005-09-05 05:17:57 +00001691#line 639 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001692{
Lev Walkinf15320b2004-06-03 03:38:44 +00001693 yyval.a_xports = yyvsp[-2].a_xports;
1694 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001695 ;
1696 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001697case 44:
Lev Walkinef625402005-09-05 05:17:57 +00001698#line 646 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001699{
Lev Walkinf15320b2004-06-03 03:38:44 +00001700 yyval.a_expr = asn1p_expr_new(yylineno);
1701 checkmem(yyval.a_expr);
1702 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1703 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001704 ;
1705 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001706case 45:
Lev Walkinef625402005-09-05 05:17:57 +00001707#line 652 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001708{ /* Completely equivalent to above */
1709 yyval.a_expr = asn1p_expr_new(yylineno);
1710 checkmem(yyval.a_expr);
1711 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1712 yyval.a_expr->expr_type = A1TC_REFERENCE;
1713 ;
1714 break;}
1715case 46:
Lev Walkinef625402005-09-05 05:17:57 +00001716#line 658 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001717{
1718 yyval.a_expr = asn1p_expr_new(yylineno);
1719 checkmem(yyval.a_expr);
1720 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1721 yyval.a_expr->expr_type = A1TC_REFERENCE;
1722 ;
1723 break;}
1724case 47:
Lev Walkinef625402005-09-05 05:17:57 +00001725#line 667 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001726{
Lev Walkinf15320b2004-06-03 03:38:44 +00001727 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin1004aa92004-09-08 00:28:11 +00001728 ;
1729 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001730case 48:
Lev Walkinef625402005-09-05 05:17:57 +00001731#line 670 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001732{
Lev Walkinf15320b2004-06-03 03:38:44 +00001733 yyval.a_xports = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001734 ;
1735 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001736case 49:
Lev Walkinef625402005-09-05 05:17:57 +00001737#line 673 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001738{
Lev Walkinf15320b2004-06-03 03:38:44 +00001739 /* Empty EXPORTS clause effectively prohibits export. */
1740 yyval.a_xports = asn1p_xports_new();
1741 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001742 ;
1743 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001744case 50:
Lev Walkinef625402005-09-05 05:17:57 +00001745#line 681 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001746{
Lev Walkinf15320b2004-06-03 03:38:44 +00001747 yyval.a_xports = asn1p_xports_new();
1748 assert(yyval.a_xports);
1749 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001750 ;
1751 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001752case 51:
Lev Walkinef625402005-09-05 05:17:57 +00001753#line 686 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001754{
Lev Walkinf15320b2004-06-03 03:38:44 +00001755 yyval.a_xports = yyvsp[-2].a_xports;
1756 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00001757 ;
1758 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001759case 52:
Lev Walkinef625402005-09-05 05:17:57 +00001760#line 693 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001761{
1762 yyval.a_expr = asn1p_expr_new(yylineno);
1763 checkmem(yyval.a_expr);
1764 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1765 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1766 ;
1767 break;}
1768case 53:
Lev Walkinef625402005-09-05 05:17:57 +00001769#line 699 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001770{
1771 yyval.a_expr = asn1p_expr_new(yylineno);
1772 checkmem(yyval.a_expr);
1773 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1774 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1775 ;
Lev Walkin8ea99482005-03-31 21:48:13 +00001776 break;}
1777case 54:
Lev Walkinef625402005-09-05 05:17:57 +00001778#line 705 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001779{
1780 yyval.a_expr = asn1p_expr_new(yylineno);
1781 checkmem(yyval.a_expr);
1782 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1783 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1784 ;
1785 break;}
1786case 55:
Lev Walkinef625402005-09-05 05:17:57 +00001787#line 716 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001788{ asn1p_lexer_hack_push_opaque_state(); ;
1789 break;}
1790case 56:
Lev Walkinef625402005-09-05 05:17:57 +00001791#line 716 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001792{
Lev Walkinf15320b2004-06-03 03:38:44 +00001793 yyval.a_expr = yyvsp[-4].a_expr;
1794 assert(yyval.a_expr->Identifier == 0);
1795 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1796 yyval.a_expr->meta_type = AMT_VALUESET;
Lev Walkin8ea99482005-03-31 21:48:13 +00001797 // take care of ValueSet body
Lev Walkin1004aa92004-09-08 00:28:11 +00001798 ;
1799 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001800case 57:
Lev Walkinef625402005-09-05 05:17:57 +00001801#line 726 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001802{
Lev Walkinf15320b2004-06-03 03:38:44 +00001803 yyval.a_expr = asn1p_expr_new(yylineno);
1804 checkmem(yyval.a_expr);
1805 yyval.a_expr->reference = yyvsp[0].a_ref;
1806 yyval.a_expr->expr_type = A1TC_REFERENCE;
1807 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001808 ;
1809 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001810case 58:
Lev Walkinef625402005-09-05 05:17:57 +00001811#line 733 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001812{
Lev Walkinf15320b2004-06-03 03:38:44 +00001813 yyval.a_expr = asn1p_expr_new(yylineno);
1814 checkmem(yyval.a_expr);
1815 yyval.a_expr->expr_type = yyvsp[0].a_type;
1816 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001817 ;
1818 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001819case 59:
Lev Walkinef625402005-09-05 05:17:57 +00001820#line 751 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001821{
Lev Walkinf15320b2004-06-03 03:38:44 +00001822 yyval.a_expr = asn1p_expr_new(yylineno);
1823 checkmem(yyval.a_expr);
1824 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1825 yyval.a_expr->tag = yyvsp[-1].a_tag;
1826 yyval.a_expr->expr_type = A1TC_TYPEID;
1827 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001828 ;
1829 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001830case 60:
Lev Walkinef625402005-09-05 05:17:57 +00001831#line 759 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001832{
Lev Walkinf15320b2004-06-03 03:38:44 +00001833 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00001834 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00001835 assert(yyval.a_expr->expr_type);
1836 assert(yyval.a_expr->meta_type);
Lev Walkin1004aa92004-09-08 00:28:11 +00001837 ;
1838 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001839case 61:
Lev Walkinef625402005-09-05 05:17:57 +00001840#line 765 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001841{
Lev Walkinf15320b2004-06-03 03:38:44 +00001842 yyval.a_expr = yyvsp[0].a_expr;
1843 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1844 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1845 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin1004aa92004-09-08 00:28:11 +00001846 ;
1847 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001848case 62:
Lev Walkinef625402005-09-05 05:17:57 +00001849#line 781 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001850{
Lev Walkinf15320b2004-06-03 03:38:44 +00001851 yyval.a_expr = yyvsp[0].a_expr;
1852 assert(yyval.a_expr->Identifier == 0);
1853 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1854 yyval.a_expr->params = yyvsp[-3].a_plist;
1855 yyval.a_expr->meta_type = AMT_PARAMTYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001856 ;
1857 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001858case 63:
Lev Walkinef625402005-09-05 05:17:57 +00001859#line 791 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001860{
Lev Walkinf15320b2004-06-03 03:38:44 +00001861 int ret;
1862 yyval.a_plist = asn1p_paramlist_new(yylineno);
1863 checkmem(yyval.a_plist);
1864 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1865 checkmem(ret == 0);
1866 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1867 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001868 ;
1869 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001870case 64:
Lev Walkinef625402005-09-05 05:17:57 +00001871#line 800 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001872{
Lev Walkinf15320b2004-06-03 03:38:44 +00001873 int ret;
1874 yyval.a_plist = yyvsp[-2].a_plist;
1875 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1876 checkmem(ret == 0);
1877 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1878 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin1004aa92004-09-08 00:28:11 +00001879 ;
1880 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001881case 65:
Lev Walkinef625402005-09-05 05:17:57 +00001882#line 811 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001883{
Lev Walkinf15320b2004-06-03 03:38:44 +00001884 yyval.a_parg.governor = NULL;
1885 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001886 ;
1887 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001888case 66:
Lev Walkinef625402005-09-05 05:17:57 +00001889#line 815 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001890{
1891 int ret;
1892 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1893 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1894 checkmem(ret == 0);
1895 yyval.a_parg.argument = yyvsp[0].tv_str;
1896 ;
1897 break;}
1898case 67:
Lev Walkinef625402005-09-05 05:17:57 +00001899#line 822 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001900{
1901 int ret;
1902 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1903 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1904 checkmem(ret == 0);
1905 yyval.a_parg.argument = yyvsp[0].tv_str;
1906 ;
1907 break;}
1908case 68:
Lev Walkinef625402005-09-05 05:17:57 +00001909#line 829 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00001910{
1911 int ret;
1912 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00001913 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1914 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1915 checkmem(ret == 0);
1916 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001917 ;
1918 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001919case 69:
Lev Walkinef625402005-09-05 05:17:57 +00001920#line 840 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001921{
Lev Walkinf15320b2004-06-03 03:38:44 +00001922 yyval.a_expr = asn1p_expr_new(yylineno);
1923 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001924 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1925 ;
1926 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001927case 70:
Lev Walkinef625402005-09-05 05:17:57 +00001928#line 845 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001929{
Lev Walkinf15320b2004-06-03 03:38:44 +00001930 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001931 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1932 ;
1933 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001934case 71:
Lev Walkinef625402005-09-05 05:17:57 +00001935#line 852 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001936{
Lev Walkinf15320b2004-06-03 03:38:44 +00001937 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001938 ;
1939 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001940case 72:
Lev Walkinef625402005-09-05 05:17:57 +00001941#line 855 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001942{
Lev Walkinf15320b2004-06-03 03:38:44 +00001943 yyval.a_expr = asn1p_expr_new(yylineno);
1944 checkmem(yyval.a_expr);
1945 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1946 yyval.a_expr->expr_type = A1TC_REFERENCE;
1947 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00001948 ;
1949 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001950case 73:
Lev Walkinef625402005-09-05 05:17:57 +00001951#line 879 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001952{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1953 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001954case 74:
Lev Walkinef625402005-09-05 05:17:57 +00001955#line 880 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001956{ yyval.a_expr = yyvsp[0].a_expr; ;
1957 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001958case 75:
Lev Walkinef625402005-09-05 05:17:57 +00001959#line 883 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001960{
Lev Walkinf15320b2004-06-03 03:38:44 +00001961 yyval.a_expr = asn1p_expr_new(yylineno);
1962 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001963 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1964 ;
1965 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001966case 76:
Lev Walkinef625402005-09-05 05:17:57 +00001967#line 888 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001968{
Lev Walkinf15320b2004-06-03 03:38:44 +00001969 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001970 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1971 ;
1972 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001973case 77:
Lev Walkinef625402005-09-05 05:17:57 +00001974#line 895 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001975{
Lev Walkin070a52d2004-08-22 03:19:54 +00001976 yyval.a_expr = yyvsp[-1].a_expr;
1977 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00001978 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinef625402005-09-05 05:17:57 +00001979 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
Lev Walkin070a52d2004-08-22 03:19:54 +00001980 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00001981 ;
1982 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001983case 78:
Lev Walkin4696c742005-08-22 12:23:54 +00001984#line 902 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001985{
Lev Walkinef625402005-09-05 05:17:57 +00001986 yyval.a_expr = yyvsp[-1].a_expr;
1987 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
1988 yyval.a_expr->marker = yyvsp[0].a_marker;
1989 _fixup_anonymous_identifier(yyval.a_expr);
1990 ;
1991 break;}
1992case 79:
1993#line 908 "asn1p_y.y"
1994{
Lev Walkin070a52d2004-08-22 03:19:54 +00001995 yyval.a_expr = asn1p_expr_new(yylineno);
1996 checkmem(yyval.a_expr);
1997 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1998 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
Lev Walkin1004aa92004-09-08 00:28:11 +00001999 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2000 ;
2001 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002002case 80:
2003#line 915 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002004{
Lev Walkin070a52d2004-08-22 03:19:54 +00002005 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002006 ;
2007 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002008case 81:
Lev Walkinef625402005-09-05 05:17:57 +00002009#line 921 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002010{
Lev Walkin070a52d2004-08-22 03:19:54 +00002011 yyval.a_expr = asn1p_expr_new(yylineno);
2012 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002013 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2014 ;
2015 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002016case 82:
Lev Walkinef625402005-09-05 05:17:57 +00002017#line 926 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002018{
Lev Walkin070a52d2004-08-22 03:19:54 +00002019 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002020 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2021 ;
2022 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002023case 83:
Lev Walkinef625402005-09-05 05:17:57 +00002024#line 933 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002025{
Lev Walkin070a52d2004-08-22 03:19:54 +00002026 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002027 assert(yyval.a_expr->Identifier == 0);
2028 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002029 ;
2030 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002031case 84:
Lev Walkinef625402005-09-05 05:17:57 +00002032#line 938 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002033{
2034 yyval.a_expr = yyvsp[0].a_expr;
2035 ;
2036 break;}
2037case 85:
Lev Walkinef625402005-09-05 05:17:57 +00002038#line 941 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002039{
2040 yyval.a_expr = yyvsp[0].a_expr;
2041 _fixup_anonymous_identifier(yyval.a_expr);
2042 ;
2043 break;}
2044case 86:
Lev Walkinef625402005-09-05 05:17:57 +00002045#line 948 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002046{
Lev Walkinf15320b2004-06-03 03:38:44 +00002047 yyval.a_expr = yyvsp[-2].a_expr;
2048 checkmem(yyval.a_expr);
2049 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2050 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2051 assert(yyval.a_expr->meta_type == AMT_OBJECT);
Lev Walkin1004aa92004-09-08 00:28:11 +00002052 ;
2053 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002054case 87:
Lev Walkinef625402005-09-05 05:17:57 +00002055#line 958 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002056{ yyval.a_int = 0; ;
2057 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002058case 88:
Lev Walkinef625402005-09-05 05:17:57 +00002059#line 959 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002060{ yyval.a_int = 1; ;
2061 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002062case 89:
Lev Walkinef625402005-09-05 05:17:57 +00002063#line 963 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002064{
Lev Walkinf15320b2004-06-03 03:38:44 +00002065 yyval.a_expr = asn1p_expr_new(yylineno);
2066 checkmem(yyval.a_expr);
2067 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2068 yyval.a_expr->meta_type = AMT_OBJECT;
Lev Walkin1004aa92004-09-08 00:28:11 +00002069 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2070 ;
2071 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002072case 90:
Lev Walkinef625402005-09-05 05:17:57 +00002073#line 970 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002074{
Lev Walkinf15320b2004-06-03 03:38:44 +00002075 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002076 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2077 ;
2078 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002079case 91:
Lev Walkinef625402005-09-05 05:17:57 +00002080#line 977 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002081{
Lev Walkinf15320b2004-06-03 03:38:44 +00002082 yyval.a_expr = asn1p_expr_new(yylineno);
2083 checkmem(yyval.a_expr);
2084 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2085 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2086 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2087 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00002088 ;
2089 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002090case 92:
Lev Walkinef625402005-09-05 05:17:57 +00002091#line 985 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002092{
Lev Walkin070a52d2004-08-22 03:19:54 +00002093 yyval.a_expr = yyvsp[-2].a_expr;
2094 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002095 yyval.a_expr->marker = yyvsp[0].a_marker;
2096 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002097 ;
2098 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002099case 93:
Lev Walkinef625402005-09-05 05:17:57 +00002100#line 991 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002101{
Lev Walkinf15320b2004-06-03 03:38:44 +00002102 int ret;
2103 yyval.a_expr = asn1p_expr_new(yylineno);
2104 checkmem(yyval.a_expr);
2105 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2106 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2107 checkmem(yyval.a_expr->reference);
2108 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2109 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2110 checkmem(ret == 0);
2111 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2112 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002113 yyval.a_expr->marker = yyvsp[0].a_marker;
2114 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002115 ;
2116 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002117case 94:
Lev Walkinef625402005-09-05 05:17:57 +00002118#line 1009 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002119{ yyval.a_wsynt = 0; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002120 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002121case 95:
Lev Walkinef625402005-09-05 05:17:57 +00002122#line 1010 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002123{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002124 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002125 ;
2126 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002127case 96:
Lev Walkinef625402005-09-05 05:17:57 +00002128#line 1017 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002129{ asn1p_lexer_hack_enable_with_syntax(); ;
2130 break;}
2131case 97:
Lev Walkinef625402005-09-05 05:17:57 +00002132#line 1019 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002133{
2134 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2135 ;
2136 break;}
2137case 98:
Lev Walkinef625402005-09-05 05:17:57 +00002138#line 1025 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002139{
Lev Walkinf15320b2004-06-03 03:38:44 +00002140 yyval.a_wsynt = asn1p_wsyntx_new();
2141 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002142 ;
2143 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002144case 99:
Lev Walkinef625402005-09-05 05:17:57 +00002145#line 1029 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002146{
Lev Walkinf15320b2004-06-03 03:38:44 +00002147 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2148 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002149 ;
2150 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002151case 100:
Lev Walkinef625402005-09-05 05:17:57 +00002152#line 1036 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002153{
Lev Walkinf15320b2004-06-03 03:38:44 +00002154 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 +00002155 ;
2156 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002157case 101:
Lev Walkinef625402005-09-05 05:17:57 +00002158#line 1039 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002159{
Lev Walkinf15320b2004-06-03 03:38:44 +00002160 asn1p_ref_t *ref;
2161 int ret;
2162 ref = asn1p_ref_new(yylineno);
2163 checkmem(ref);
2164 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2165 checkmem(ret == 0);
2166 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002167 ;
2168 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002169case 102:
Lev Walkinef625402005-09-05 05:17:57 +00002170#line 1051 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00002171{
2172 yyval.a_expr = asn1p_expr_new(yylineno);
2173 checkmem(yyval.a_expr);
2174 yyval.a_expr->Identifier = strdup("...");
Lev Walkinb36317c2005-08-12 10:09:10 +00002175 checkmem(yyval.a_expr->Identifier);
2176 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2177 yyval.a_expr->meta_type = AMT_TYPE;
2178 ;
2179 break;}
2180case 103:
Lev Walkinef625402005-09-05 05:17:57 +00002181#line 1059 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002182{
2183 yyval.a_expr = asn1p_expr_new(yylineno);
2184 checkmem(yyval.a_expr);
2185 yyval.a_expr->Identifier = strdup("...");
2186 checkmem(yyval.a_expr->Identifier);
2187 yyval.a_expr->value = yyvsp[0].a_value;
2188 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2189 yyval.a_expr->meta_type = AMT_TYPE;
2190 ;
2191 break;}
2192case 104:
Lev Walkinef625402005-09-05 05:17:57 +00002193#line 1068 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002194{
2195 yyval.a_expr = asn1p_expr_new(yylineno);
2196 checkmem(yyval.a_expr);
2197 yyval.a_expr->Identifier = strdup("...");
2198 yyval.a_expr->value = yyvsp[0].a_value;
2199 checkmem(yyval.a_expr->Identifier);
2200 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2201 yyval.a_expr->meta_type = AMT_TYPE;
2202 ;
2203 break;}
2204case 105:
Lev Walkinef625402005-09-05 05:17:57 +00002205#line 1080 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002206{
Lev Walkin070a52d2004-08-22 03:19:54 +00002207 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00002208 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002209 /*
2210 * Outer constraint for SEQUENCE OF and SET OF applies
2211 * to the inner type.
2212 */
2213 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2214 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2215 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2216 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2217 } else {
2218 if(yyval.a_expr->constraints) {
Lev Walkinaf120f72004-09-14 02:36:39 +00002219 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002220 } else {
2221 yyval.a_expr->constraints = yyvsp[0].a_constr;
2222 }
2223 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002224 ;
2225 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002226case 106:
Lev Walkin4696c742005-08-22 12:23:54 +00002227#line 1102 "asn1p_y.y"
Lev Walkinef625402005-09-05 05:17:57 +00002228{
2229 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
2230 asn1p_as_pointer = 0;
2231 ;
Lev Walkin4696c742005-08-22 12:23:54 +00002232 break;}
2233case 107:
Lev Walkinef625402005-09-05 05:17:57 +00002234#line 1109 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002235{
Lev Walkind2ea1de2004-08-20 13:25:29 +00002236 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinef625402005-09-05 05:17:57 +00002237 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
2238
2239 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2240 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
2241 fprintf(stderr,
2242 "INFO: Directive <ASN1C:RepresentAsPointer> "
2243 "applied to %s at line %d\n",
2244 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2245 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2246 : "member",
2247 yyval.a_expr->_lineno
2248 );
2249 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002250 ;
2251 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002252case 108:
Lev Walkinef625402005-09-05 05:17:57 +00002253#line 1128 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002254{
Lev Walkin4696c742005-08-22 12:23:54 +00002255 yyval.a_expr = yyvsp[0].a_expr;
2256 ;
2257 break;}
2258case 109:
Lev Walkinef625402005-09-05 05:17:57 +00002259#line 1131 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002260{
Lev Walkinef625402005-09-05 05:17:57 +00002261 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinc7d939d2005-03-20 11:12:40 +00002262 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2263 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
Lev Walkinf15320b2004-06-03 03:38:44 +00002264 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002265 ;
2266 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002267case 110:
2268#line 1137 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002269{
Lev Walkinef625402005-09-05 05:17:57 +00002270 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002271 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002272 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
Lev Walkin070a52d2004-08-22 03:19:54 +00002273 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002274 ;
2275 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002276case 111:
2277#line 1143 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002278{
Lev Walkinef625402005-09-05 05:17:57 +00002279 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002280 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002281 yyval.a_expr->expr_type = ASN_CONSTR_SET;
Lev Walkin070a52d2004-08-22 03:19:54 +00002282 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002283 ;
2284 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002285case 112:
2286#line 1149 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002287{
Lev Walkinceb20e72004-09-05 10:40:41 +00002288 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002289 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002290 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002291 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2292 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002293 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002294 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002295 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2296 ;
2297 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002298case 113:
2299#line 1159 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002300{
Lev Walkinceb20e72004-09-05 10:40:41 +00002301 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002302 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002303 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002304 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2305 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002306 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002307 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002308 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2309 ;
2310 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002311case 114:
2312#line 1169 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002313{
Lev Walkinceb20e72004-09-05 10:40:41 +00002314 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002315 checkmem(yyval.a_expr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002316 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002317 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002318 ;
2319 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002320case 115:
2321#line 1175 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002322{
Lev Walkin070a52d2004-08-22 03:19:54 +00002323 int ret;
Lev Walkinceb20e72004-09-05 10:40:41 +00002324 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002325 checkmem(yyval.a_expr);
2326 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2327 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2328 yyvsp[0].tv_str, RLT_lowercase);
2329 checkmem(ret == 0);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002330 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002331 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002332 ;
2333 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002334case 116:
2335#line 1189 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002336{
Lev Walkinf15320b2004-06-03 03:38:44 +00002337 int ret;
2338 yyval.a_expr = yyvsp[-1].a_expr;
2339 assert(yyval.a_expr->expr_type == 0);
2340 assert(yyval.a_expr->meta_type == 0);
2341 assert(yyval.a_expr->reference == 0);
2342 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2343 checkmem(yyval.a_expr->reference);
2344 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2345 checkmem(ret == 0);
2346 free(yyvsp[-3].tv_str);
2347 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2348 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002349 ;
2350 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002351case 117:
2352#line 1213 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002353{
Lev Walkinf15320b2004-06-03 03:38:44 +00002354 yyval.a_expr = asn1p_expr_new(yylineno);
2355 checkmem(yyval.a_expr);
2356 yyval.a_expr->reference = yyvsp[0].a_ref;
2357 yyval.a_expr->expr_type = A1TC_REFERENCE;
2358 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin1004aa92004-09-08 00:28:11 +00002359 ;
2360 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002361case 118:
2362#line 1220 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002363{
Lev Walkinf15320b2004-06-03 03:38:44 +00002364 yyval.a_expr = asn1p_expr_new(yylineno);
2365 checkmem(yyval.a_expr);
2366 yyval.a_expr->reference = yyvsp[0].a_ref;
2367 yyval.a_expr->expr_type = A1TC_INSTANCE;
2368 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002369 ;
2370 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002371case 119:
2372#line 1235 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002373{
Lev Walkinf15320b2004-06-03 03:38:44 +00002374 int ret;
2375 yyval.a_ref = asn1p_ref_new(yylineno);
2376 checkmem(yyval.a_ref);
2377 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2378 checkmem(ret == 0);
2379 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002380 ;
2381 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002382case 120:
2383#line 1243 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002384{
2385 int ret;
2386 yyval.a_ref = asn1p_ref_new(yylineno);
2387 checkmem(yyval.a_ref);
2388 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2389 checkmem(ret == 0);
2390 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2391 checkmem(ret == 0);
2392 free(yyvsp[-2].tv_str);
2393 ;
2394 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002395case 121:
2396#line 1253 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002397{
2398 int ret;
2399 yyval.a_ref = asn1p_ref_new(yylineno);
2400 checkmem(yyval.a_ref);
2401 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2402 checkmem(ret == 0);
2403 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2404 checkmem(ret == 0);
2405 free(yyvsp[-2].tv_str);
2406 ;
2407 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002408case 122:
2409#line 1263 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002410{
Lev Walkinf15320b2004-06-03 03:38:44 +00002411 int ret;
2412 yyval.a_ref = asn1p_ref_new(yylineno);
2413 checkmem(yyval.a_ref);
Lev Walkin9c974182004-09-15 11:59:51 +00002414 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2415 checkmem(ret == 0);
2416 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2417 checkmem(ret == 0);
2418 free(yyvsp[-2].tv_str);
2419 ;
2420 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002421case 123:
2422#line 1273 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002423{
2424 int ret;
2425 yyval.a_ref = asn1p_ref_new(yylineno);
2426 checkmem(yyval.a_ref);
Lev Walkinf15320b2004-06-03 03:38:44 +00002427 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2428 free(yyvsp[0].tv_str);
2429 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002430 ;
2431 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002432case 124:
2433#line 1281 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002434{
Lev Walkinf15320b2004-06-03 03:38:44 +00002435 int ret;
2436 yyval.a_ref = yyvsp[0].a_ref;
2437 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2438 free(yyvsp[-2].tv_str);
2439 checkmem(ret == 0);
2440 /*
2441 * Move the last element infront.
2442 */
2443 {
2444 struct asn1p_ref_component_s tmp_comp;
2445 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2446 memmove(&yyval.a_ref->components[1],
2447 &yyval.a_ref->components[0],
2448 sizeof(yyval.a_ref->components[0])
2449 * (yyval.a_ref->comp_count - 1));
2450 yyval.a_ref->components[0] = tmp_comp;
2451 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002452 ;
2453 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002454case 125:
2455#line 1303 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002456{
Lev Walkinf15320b2004-06-03 03:38:44 +00002457 int ret;
2458 yyval.a_ref = asn1p_ref_new(yylineno);
2459 checkmem(yyval.a_ref);
2460 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2461 free(yyvsp[0].a_refcomp.name);
2462 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002463 ;
2464 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002465case 126:
2466#line 1311 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002467{
Lev Walkinf15320b2004-06-03 03:38:44 +00002468 int ret;
2469 yyval.a_ref = yyvsp[-2].a_ref;
2470 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2471 free(yyvsp[0].a_refcomp.name);
2472 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002473 ;
2474 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002475case 129:
2476#line 1325 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002477{
Lev Walkinf15320b2004-06-03 03:38:44 +00002478 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2479 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002480 ;
2481 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002482case 130:
2483#line 1330 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002484{
Lev Walkinf15320b2004-06-03 03:38:44 +00002485 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2486 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002487 ;
2488 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002489case 131:
2490#line 1343 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002491{
Lev Walkinf15320b2004-06-03 03:38:44 +00002492 yyval.a_expr = yyvsp[-2].a_expr;
2493 assert(yyval.a_expr->Identifier == NULL);
2494 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2495 yyval.a_expr->meta_type = AMT_VALUE;
2496 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002497 ;
2498 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002499case 132:
2500#line 1353 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002501{
2502 yyval.a_value = asn1p_value_fromint(0);
2503 checkmem(yyval.a_value);
2504 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2505 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2506 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2507 ;
2508 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002509case 133:
2510#line 1360 "asn1p_y.y"
Lev Walkincbad2512005-03-24 16:27:02 +00002511{ asn1p_lexer_hack_push_opaque_state(); ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002512 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002513case 134:
2514#line 1360 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002515{
Lev Walkinf15320b2004-06-03 03:38:44 +00002516 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2517 checkmem(yyval.a_value);
2518 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin1004aa92004-09-08 00:28:11 +00002519 ;
2520 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002521case 135:
2522#line 1365 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002523{
2524 yyval.a_value = asn1p_value_fromint(0);
2525 checkmem(yyval.a_value);
2526 yyval.a_value->type = ATV_NULL;
2527 ;
2528 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002529case 136:
2530#line 1370 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002531{
2532 yyval.a_value = asn1p_value_fromint(0);
2533 checkmem(yyval.a_value);
2534 yyval.a_value->type = ATV_FALSE;
2535 ;
2536 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002537case 137:
2538#line 1375 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002539{
2540 yyval.a_value = asn1p_value_fromint(0);
2541 checkmem(yyval.a_value);
2542 yyval.a_value->type = ATV_TRUE;
2543 ;
2544 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002545case 138:
2546#line 1380 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002547{
Lev Walkinf15320b2004-06-03 03:38:44 +00002548 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2549 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002550 ;
2551 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002552case 139:
2553#line 1384 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002554{
Lev Walkinf15320b2004-06-03 03:38:44 +00002555 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2556 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002557 ;
2558 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002559case 140:
2560#line 1388 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002561{
Lev Walkin1e448d32005-03-24 14:26:38 +00002562 yyval.a_value = yyval.a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002563 ;
2564 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002565case 141:
2566#line 1391 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002567{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002568 yyval.a_value = yyvsp[0].a_value;
2569 ;
2570 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002571case 142:
2572#line 1394 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002573{
2574 yyval.a_value = yyvsp[0].a_value;
2575 ;
2576 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002577case 143:
2578#line 1400 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002579{
Lev Walkinf15320b2004-06-03 03:38:44 +00002580 asn1p_ref_t *ref;
2581 int ret;
2582 ref = asn1p_ref_new(yylineno);
2583 checkmem(ref);
2584 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2585 checkmem(ret == 0);
2586 yyval.a_value = asn1p_value_fromref(ref, 0);
2587 checkmem(yyval.a_value);
2588 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002589 ;
2590 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002591case 144:
2592#line 1411 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002593{
Lev Walkinf15320b2004-06-03 03:38:44 +00002594 asn1p_ref_t *ref;
2595 int ret;
2596 ref = asn1p_ref_new(yylineno);
2597 checkmem(ref);
2598 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2599 checkmem(ret == 0);
2600 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2601 checkmem(ret == 0);
2602 yyval.a_value = asn1p_value_fromref(ref, 0);
2603 checkmem(yyval.a_value);
2604 free(yyvsp[-2].tv_str);
2605 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00002606 ;
2607 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002608case 145:
2609#line 1429 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002610{
2611 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2612 checkmem(yyval.a_value);
2613 ;
2614 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002615case 146:
2616#line 1433 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002617{
Lev Walkind9574ae2005-03-24 16:22:35 +00002618 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002619 checkmem(yyval.a_value);
2620 yyval.a_value->type = ATV_TUPLE;
2621 ;
2622 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002623case 147:
2624#line 1438 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002625{
Lev Walkind9574ae2005-03-24 16:22:35 +00002626 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002627 checkmem(yyval.a_value);
2628 yyval.a_value->type = ATV_QUADRUPLE;
2629 ;
2630 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002631case 148:
2632#line 1472 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002633{
Lev Walkin1893ddf2005-03-20 14:28:32 +00002634 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00002635 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2636 checkmem(yyval.tv_opaque.buf);
2637 yyval.tv_opaque.buf[0] = '{';
Lev Walkin1893ddf2005-03-20 14:28:32 +00002638 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00002639 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2640 free(yyvsp[0].tv_opaque.buf);
Lev Walkin1004aa92004-09-08 00:28:11 +00002641 ;
2642 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002643case 149:
2644#line 1481 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002645{
Lev Walkinf15320b2004-06-03 03:38:44 +00002646 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2647 char *p = malloc(newsize + 1);
2648 checkmem(p);
2649 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2650 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2651 p[newsize] = '\0';
2652 free(yyvsp[-1].tv_opaque.buf);
2653 free(yyvsp[0].tv_opaque.buf);
2654 yyval.tv_opaque.buf = p;
2655 yyval.tv_opaque.len = newsize;
Lev Walkin1004aa92004-09-08 00:28:11 +00002656 ;
2657 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002658case 150:
2659#line 1496 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002660{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2661 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002662case 151:
2663#line 1497 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002664{ yyval.a_type = ASN_BASIC_NULL; ;
2665 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002666case 152:
2667#line 1498 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002668{ yyval.a_type = ASN_BASIC_REAL; ;
2669 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002670case 153:
2671#line 1499 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002672{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002673 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002674case 154:
2675#line 1500 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002676{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002677 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002678case 155:
2679#line 1501 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002680{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002681 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002682case 156:
2683#line 1502 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002684{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
Lev Walkin1e448d32005-03-24 14:26:38 +00002685 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002686case 157:
2687#line 1503 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002688{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
Lev Walkinb36317c2005-08-12 10:09:10 +00002689 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002690case 158:
2691#line 1504 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002692{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
Lev Walkinb36317c2005-08-12 10:09:10 +00002693 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002694case 159:
2695#line 1505 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002696{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002697 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002698case 160:
2699#line 1506 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002700{ yyval.a_type = ASN_BASIC_UTCTime; ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002701 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002702case 161:
2703#line 1507 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002704{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2705 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002706case 162:
2707#line 1508 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002708{ yyval.a_type = yyvsp[0].a_type; ;
2709 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002710case 163:
2711#line 1515 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002712{ yyval.a_type = ASN_BASIC_INTEGER; ;
2713 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002714case 164:
2715#line 1516 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002716{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2717 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002718case 165:
2719#line 1517 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002720{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2721 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002722case 166:
2723#line 1521 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002724{
Lev Walkinceb20e72004-09-05 10:40:41 +00002725 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002726 checkmem(yyval.a_expr);
2727 yyval.a_expr->expr_type = yyvsp[0].a_type;
2728 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002729 ;
2730 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002731case 167:
2732#line 1527 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002733{
Lev Walkinf15320b2004-06-03 03:38:44 +00002734 if(yyvsp[0].a_expr) {
2735 yyval.a_expr = yyvsp[0].a_expr;
2736 } else {
Lev Walkinceb20e72004-09-05 10:40:41 +00002737 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002738 checkmem(yyval.a_expr);
2739 }
2740 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2741 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002742 ;
2743 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002744case 168:
2745#line 1540 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002746{ yyval.a_type = ASN_STRING_BMPString; ;
2747 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002748case 169:
2749#line 1541 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002750{
Lev Walkinf15320b2004-06-03 03:38:44 +00002751 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00002752 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002753 ;
2754 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002755case 170:
2756#line 1545 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002757{
Lev Walkin9c974182004-09-15 11:59:51 +00002758 yyval.a_type = ASN_STRING_GraphicString;
2759 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002760 ;
2761 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002762case 171:
2763#line 1549 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002764{ yyval.a_type = ASN_STRING_IA5String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002765 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002766case 172:
2767#line 1550 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002768{ yyval.a_type = ASN_STRING_ISO646String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002769 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002770case 173:
2771#line 1551 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002772{ yyval.a_type = ASN_STRING_NumericString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002773 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002774case 174:
2775#line 1552 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002776{ yyval.a_type = ASN_STRING_PrintableString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002777 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002778case 175:
2779#line 1553 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002780{
2781 yyval.a_type = ASN_STRING_T61String;
2782 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2783 ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002784 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002785case 176:
2786#line 1557 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002787{ yyval.a_type = ASN_STRING_TeletexString; ;
2788 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002789case 177:
2790#line 1558 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002791{ yyval.a_type = ASN_STRING_UniversalString; ;
2792 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002793case 178:
2794#line 1559 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002795{ yyval.a_type = ASN_STRING_UTF8String; ;
2796 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002797case 179:
2798#line 1560 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002799{
2800 yyval.a_type = ASN_STRING_VideotexString;
2801 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2802 ;
2803 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002804case 180:
2805#line 1564 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002806{ yyval.a_type = ASN_STRING_VisibleString; ;
2807 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002808case 181:
2809#line 1565 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002810{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2811 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002812case 187:
2813#line 1577 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002814{ yyval.a_constr = 0; ;
2815 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002816case 188:
2817#line 1578 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002818{
Lev Walkinceb20e72004-09-05 10:40:41 +00002819 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002820 ;
2821 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002822case 189:
2823#line 1584 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002824{
Lev Walkinceb20e72004-09-05 10:40:41 +00002825 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002826 ;
2827 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002828case 190:
2829#line 1587 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002830{
Lev Walkinf15320b2004-06-03 03:38:44 +00002831 /*
2832 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00002833 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00002834 */
Lev Walkind2ea1de2004-08-20 13:25:29 +00002835 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002836 ;
2837 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002838case 191:
2839#line 1597 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002840{
Lev Walkinf15320b2004-06-03 03:38:44 +00002841 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002842 ;
2843 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002844case 192:
2845#line 1600 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002846{
Lev Walkinf59d0752004-08-18 04:59:12 +00002847 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002848 ;
2849 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002850case 193:
2851#line 1606 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002852{
Lev Walkinf15320b2004-06-03 03:38:44 +00002853 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002854 ;
2855 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002856case 194:
2857#line 1609 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002858{
Lev Walkinf15320b2004-06-03 03:38:44 +00002859 asn1p_constraint_t *ct;
2860 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002861 ct->type = ACT_EL_EXT;
2862 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00002863 ;
2864 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002865case 195:
2866#line 1615 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002867{
Lev Walkinf15320b2004-06-03 03:38:44 +00002868 asn1p_constraint_t *ct;
2869 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002870 ct->type = ACT_EL_EXT;
2871 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002872 ct = yyval.a_constr;
2873 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002874 ;
2875 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002876case 196:
2877#line 1626 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002878{
Lev Walkinf59d0752004-08-18 04:59:12 +00002879 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002880 ;
2881 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002882case 197:
2883#line 1629 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002884{
2885 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2886 ;
2887 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002888case 198:
2889#line 1632 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002890{
Lev Walkinf15320b2004-06-03 03:38:44 +00002891 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002892 ;
2893 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002894case 199:
2895#line 1635 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002896{
Lev Walkinf15320b2004-06-03 03:38:44 +00002897 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002898 ;
2899 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002900case 200:
2901#line 1638 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002902{
Lev Walkinf15320b2004-06-03 03:38:44 +00002903 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002904 ;
2905 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002906case 201:
2907#line 1644 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002908{
Lev Walkinf15320b2004-06-03 03:38:44 +00002909 int ret;
2910 yyval.a_constr = asn1p_constraint_new(yylineno);
2911 checkmem(yyval.a_constr);
2912 yyval.a_constr->type = yyvsp[-3].a_ctype;
2913 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2914 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002915 ;
2916 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002917case 202:
2918#line 1652 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002919{
Lev Walkinf59d0752004-08-18 04:59:12 +00002920 int ret;
2921 yyval.a_constr = asn1p_constraint_new(yylineno);
2922 checkmem(yyval.a_constr);
2923 yyval.a_constr->type = ACT_CA_SET;
2924 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2925 checkmem(ret == 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002926 ;
2927 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002928case 203:
2929#line 1660 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002930{
Lev Walkinf59d0752004-08-18 04:59:12 +00002931 yyval.a_constr = asn1p_constraint_new(yylineno);
2932 checkmem(yyval.a_constr);
2933 yyval.a_constr->type = ACT_EL_VALUE;
2934 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002935 ;
2936 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002937case 204:
2938#line 1666 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002939{
Lev Walkin144db9b2004-10-12 23:26:53 +00002940 yyval.a_constr = asn1p_constraint_new(yylineno);
2941 checkmem(yyval.a_constr);
Lev Walkinff7dd142005-03-20 12:58:00 +00002942 yyval.a_constr->type = ACT_EL_TYPE;
2943 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin9c974182004-09-15 11:59:51 +00002944 ;
2945 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002946case 205:
2947#line 1672 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002948{
Lev Walkin4696c742005-08-22 12:23:54 +00002949 yyval.a_constr = asn1p_constraint_new(yylineno);
2950 checkmem(yyval.a_constr);
2951 yyval.a_constr->type = yyvsp[-1].a_ctype;
2952 yyval.a_constr->range_start = yyvsp[-2].a_value;
2953 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002954 ;
2955 break;}
Lev Walkinef625402005-09-05 05:17:57 +00002956case 206:
2957#line 1679 "asn1p_y.y"
2958{
2959 yyval.a_constr = asn1p_constraint_new(yylineno);
2960 checkmem(yyval.a_constr);
2961 yyval.a_constr->type = yyvsp[-1].a_ctype;
2962 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2963 yyval.a_constr->range_stop = yyvsp[0].a_value;
2964 yyval.a_constr->range_start->type = ATV_MIN;
2965 ;
2966 break;}
2967case 207:
2968#line 1687 "asn1p_y.y"
2969{
2970 yyval.a_constr = asn1p_constraint_new(yylineno);
2971 checkmem(yyval.a_constr);
2972 yyval.a_constr->type = yyvsp[-1].a_ctype;
2973 yyval.a_constr->range_start = yyvsp[-2].a_value;
2974 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2975 yyval.a_constr->range_stop->type = ATV_MAX;
2976 ;
2977 break;}
2978case 208:
2979#line 1695 "asn1p_y.y"
2980{
2981 yyval.a_constr = asn1p_constraint_new(yylineno);
2982 checkmem(yyval.a_constr);
2983 yyval.a_constr->type = yyvsp[-1].a_ctype;
2984 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2985 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2986 yyval.a_constr->range_start->type = ATV_MIN;
2987 yyval.a_constr->range_stop->type = ATV_MAX;
2988 ;
2989 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002990case 209:
Lev Walkinef625402005-09-05 05:17:57 +00002991#line 1704 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002992{
Lev Walkinef625402005-09-05 05:17:57 +00002993 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin4696c742005-08-22 12:23:54 +00002994 ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002995 break;}
2996case 210:
Lev Walkinef625402005-09-05 05:17:57 +00002997#line 1707 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00002998{
Lev Walkinef625402005-09-05 05:17:57 +00002999 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin4696c742005-08-22 12:23:54 +00003000 ;
3001 break;}
3002case 211:
Lev Walkinef625402005-09-05 05:17:57 +00003003#line 1711 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003004{ asn1p_lexer_hack_push_opaque_state(); ;
3005 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003006case 212:
3007#line 1711 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003008{
3009 yyval.a_constr = asn1p_constraint_new(yylineno);
3010 checkmem(yyval.a_constr);
3011 yyval.a_constr->type = ACT_CT_CTDBY;
3012 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3013 checkmem(yyval.a_constr->value);
3014 yyval.a_constr->value->type = ATV_UNPARSED;
3015 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003016 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003017case 213:
3018#line 1722 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003019{ yyval.a_ctype = ACT_EL_RANGE; ;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003020 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003021case 214:
3022#line 1723 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003023{ yyval.a_ctype = ACT_EL_RLRANGE; ;
Lev Walkinff7dd142005-03-20 12:58:00 +00003024 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003025case 215:
3026#line 1724 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003027{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3028 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003029case 216:
3030#line 1725 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003031{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3032 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003033case 217:
3034#line 1729 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003035{
Lev Walkinceb20e72004-09-05 10:40:41 +00003036 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003037 ;
3038 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003039case 218:
3040#line 1732 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003041{
Lev Walkinceb20e72004-09-05 10:40:41 +00003042 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin1004aa92004-09-08 00:28:11 +00003043 ;
3044 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003045case 219:
3046#line 1738 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003047{
3048 yyval.a_value = asn1p_value_fromint(0);
3049 checkmem(yyval.a_value);
3050 yyval.a_value->type = ATV_FALSE;
3051 ;
3052 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003053case 220:
3054#line 1743 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00003055{
3056 yyval.a_value = asn1p_value_fromint(1);
3057 checkmem(yyval.a_value);
3058 yyval.a_value->type = ATV_TRUE;
3059 ;
3060 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003061case 221:
3062#line 1748 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003063{
3064 yyval.a_value = yyvsp[0].a_value;
3065 ;
3066 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003067case 222:
3068#line 1751 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003069{
3070 yyval.a_value = yyvsp[0].a_value;
3071 ;
3072 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003073case 223:
3074#line 1754 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003075{
Lev Walkinf15320b2004-06-03 03:38:44 +00003076 asn1p_ref_t *ref;
3077 int ret;
3078 ref = asn1p_ref_new(yylineno);
3079 checkmem(ref);
3080 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3081 checkmem(ret == 0);
3082 yyval.a_value = asn1p_value_fromref(ref, 0);
3083 checkmem(yyval.a_value);
3084 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003085 ;
3086 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003087case 224:
3088#line 1768 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003089{
Lev Walkinc8092cb2005-02-18 16:34:21 +00003090 asn1p_ref_t *ref;
3091 int ret;
3092 ref = asn1p_ref_new(yylineno);
3093 checkmem(ref);
3094 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3095 checkmem(ret == 0);
3096 yyval.a_value = asn1p_value_fromref(ref, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003097 checkmem(yyval.a_value);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003098 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003099 ;
3100 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003101case 225:
3102#line 1782 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003103{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003104 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003105 ;
3106 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003107case 226:
3108#line 1785 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003109{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003110 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkine596bf02005-03-28 15:01:27 +00003111 ;
3112 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003113case 227:
3114#line 1791 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003115{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003116 yyval.a_constr = yyvsp[0].a_constr;
3117 ;
3118 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003119case 228:
3120#line 1794 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003121{
3122 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3123 ;
3124 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003125case 229:
3126#line 1800 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003127{
Lev Walkinf15320b2004-06-03 03:38:44 +00003128 yyval.a_constr = asn1p_constraint_new(yylineno);
3129 checkmem(yyval.a_constr);
3130 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkine596bf02005-03-28 15:01:27 +00003131 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003132 ;
3133 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003134case 230:
3135#line 1806 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003136{
Lev Walkinf15320b2004-06-03 03:38:44 +00003137 yyval.a_constr = asn1p_constraint_new(yylineno);
3138 checkmem(yyval.a_constr);
3139 yyval.a_constr->type = ACT_EL_VALUE;
3140 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3141 yyval.a_constr->presence = yyvsp[0].a_pres;
Lev Walkine596bf02005-03-28 15:01:27 +00003142 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003143 ;
3144 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003145case 231:
3146#line 1820 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003147{ yyval.a_pres = ACPRES_DEFAULT; ;
3148 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003149case 232:
3150#line 1821 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003151{ yyval.a_pres = yyvsp[0].a_pres; ;
3152 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003153case 233:
3154#line 1825 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003155{
Lev Walkinf15320b2004-06-03 03:38:44 +00003156 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003157 ;
3158 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003159case 234:
3160#line 1828 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00003161{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003162 yyval.a_pres = ACPRES_ABSENT;
Lev Walkinb36317c2005-08-12 10:09:10 +00003163 ;
3164 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003165case 235:
3166#line 1831 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00003167{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003168 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkinb36317c2005-08-12 10:09:10 +00003169 ;
3170 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003171case 236:
3172#line 1837 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003173{
3174 yyval.a_constr = yyvsp[0].a_constr;
3175 ;
3176 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003177case 237:
3178#line 1840 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003179{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003180 yyval.a_constr = yyvsp[0].a_constr;
3181 ;
3182 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003183case 238:
3184#line 1849 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003185{
Lev Walkinf15320b2004-06-03 03:38:44 +00003186 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3187 asn1p_constraint_t *ct;
3188 int ret;
3189 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3190 checkmem(ret == 0);
3191 ct = asn1p_constraint_new(yylineno);
3192 checkmem(yyval.a_constr);
3193 ct->type = ACT_EL_VALUE;
3194 ct->value = asn1p_value_fromref(ref, 0);
3195 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003196 ;
3197 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003198case 239:
3199#line 1864 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003200{
Lev Walkinf15320b2004-06-03 03:38:44 +00003201 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003202 ;
3203 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003204case 240:
3205#line 1870 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003206{
Lev Walkinf15320b2004-06-03 03:38:44 +00003207 yyval.a_constr = asn1p_constraint_new(yylineno);
3208 checkmem(yyval.a_constr);
3209 yyval.a_constr->type = ACT_EL_VALUE;
3210 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003211 ;
3212 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003213case 241:
3214#line 1876 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003215{
Lev Walkinf15320b2004-06-03 03:38:44 +00003216 asn1p_constraint_t *ct;
3217 ct = asn1p_constraint_new(yylineno);
3218 checkmem(ct);
3219 ct->type = ACT_EL_VALUE;
3220 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3221 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin1004aa92004-09-08 00:28:11 +00003222 ;
3223 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003224case 242:
3225#line 1890 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003226{
Lev Walkinf15320b2004-06-03 03:38:44 +00003227 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3228 int ret;
3229 *p = '@';
3230 strcpy(p + 1, yyvsp[0].tv_str);
3231 yyval.a_ref = asn1p_ref_new(yylineno);
3232 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3233 checkmem(ret == 0);
3234 free(p);
3235 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003236 ;
3237 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003238case 243:
3239#line 1901 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003240{
Lev Walkinf15320b2004-06-03 03:38:44 +00003241 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3242 int ret;
3243 p[0] = '@';
3244 p[1] = '.';
3245 strcpy(p + 2, yyvsp[0].tv_str);
3246 yyval.a_ref = asn1p_ref_new(yylineno);
3247 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3248 checkmem(ret == 0);
3249 free(p);
3250 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003251 ;
3252 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003253case 244:
3254#line 1917 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003255{
Lev Walkinf15320b2004-06-03 03:38:44 +00003256 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003257 ;
3258 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003259case 245:
3260#line 1920 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003261{
Lev Walkinf15320b2004-06-03 03:38:44 +00003262 int l1 = strlen(yyvsp[-2].tv_str);
3263 int l3 = strlen(yyvsp[0].tv_str);
3264 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3265 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3266 yyval.tv_str[l1] = '.';
3267 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3268 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin1004aa92004-09-08 00:28:11 +00003269 ;
3270 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003271case 246:
3272#line 1938 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003273{
Lev Walkin9c974182004-09-15 11:59:51 +00003274 yyval.a_marker.flags = EM_NOMARK;
3275 yyval.a_marker.default_value = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00003276 ;
3277 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003278case 247:
3279#line 1942 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003280{ yyval.a_marker = yyvsp[0].a_marker; ;
Lev Walkinec208e62004-09-14 02:44:07 +00003281 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003282case 248:
3283#line 1946 "asn1p_y.y"
Lev Walkinec208e62004-09-14 02:44:07 +00003284{
Lev Walkin9c974182004-09-15 11:59:51 +00003285 yyval.a_marker.flags = EM_OPTIONAL;
3286 yyval.a_marker.default_value = 0;
Lev Walkinec208e62004-09-14 02:44:07 +00003287 ;
3288 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003289case 249:
3290#line 1950 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003291{
3292 yyval.a_marker.flags = EM_DEFAULT;
3293 yyval.a_marker.default_value = yyvsp[0].a_value;
3294 ;
3295 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003296case 250:
3297#line 1973 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003298{
Lev Walkinceb20e72004-09-05 10:40:41 +00003299 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003300 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003301 ;
3302 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003303case 251:
3304#line 1977 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003305{
Lev Walkine596bf02005-03-28 15:01:27 +00003306 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003307 ;
3308 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003309case 252:
3310#line 1983 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003311{
Lev Walkine596bf02005-03-28 15:01:27 +00003312 yyval.a_expr = asn1p_expr_new(yylineno);
3313 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003314 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3315 ;
3316 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003317case 253:
3318#line 1988 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003319{
3320 yyval.a_expr = yyvsp[-2].a_expr;
3321 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3322 ;
3323 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003324case 254:
3325#line 1995 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003326{
Lev Walkinceb20e72004-09-05 10:40:41 +00003327 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003328 checkmem(yyval.a_expr);
3329 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3330 yyval.a_expr->meta_type = AMT_VALUE;
3331 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003332 ;
3333 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003334case 255:
3335#line 2002 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003336{
3337 yyval.a_expr = asn1p_expr_new(yylineno);
3338 checkmem(yyval.a_expr);
3339 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3340 yyval.a_expr->meta_type = AMT_VALUE;
3341 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3342 yyval.a_expr->value = yyvsp[-1].a_value;
3343 ;
3344 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003345case 256:
3346#line 2010 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003347{
3348 yyval.a_expr = asn1p_expr_new(yylineno);
3349 checkmem(yyval.a_expr);
3350 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3351 yyval.a_expr->meta_type = AMT_VALUE;
3352 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3353 yyval.a_expr->value = yyvsp[-1].a_value;
3354 ;
3355 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003356case 257:
3357#line 2018 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003358{
3359 yyval.a_expr = asn1p_expr_new(yylineno);
3360 checkmem(yyval.a_expr);
3361 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3362 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkinf15320b2004-06-03 03:38:44 +00003363 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003364 ;
3365 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003366case 258:
3367#line 2025 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003368{
Lev Walkinceb20e72004-09-05 10:40:41 +00003369 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003370 checkmem(yyval.a_expr);
3371 yyval.a_expr->Identifier = strdup("...");
3372 checkmem(yyval.a_expr->Identifier);
3373 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3374 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003375 ;
3376 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003377case 259:
3378#line 2036 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003379{
3380 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3381 checkmem(yyval.a_value);
3382 ;
Lev Walkinb36317c2005-08-12 10:09:10 +00003383 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003384case 260:
3385#line 2040 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003386{
3387 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3388 checkmem(yyval.a_value);
3389 ;
Lev Walkinb36317c2005-08-12 10:09:10 +00003390 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003391case 261:
3392#line 2071 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003393{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3394 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003395case 262:
3396#line 2072 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003397{ yyval.a_tag = yyvsp[0].a_tag; ;
3398 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003399case 263:
3400#line 2076 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003401{
Lev Walkinc603f102005-01-23 09:51:44 +00003402 yyval.a_tag = yyvsp[-1].a_tag;
3403 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin1004aa92004-09-08 00:28:11 +00003404 ;
3405 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003406case 264:
3407#line 2083 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003408{
Lev Walkinc603f102005-01-23 09:51:44 +00003409 yyval.a_tag = yyvsp[-2].a_tag;
3410 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00003411 ;
3412 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003413case 265:
3414#line 2089 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003415{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00003416 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003417case 266:
3418#line 2090 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003419{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
Lev Walkin83cac2f2004-09-22 16:03:36 +00003420 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003421case 267:
3422#line 2091 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003423{ yyval.a_tag.tag_class = TC_APPLICATION; ;
Lev Walkin1e448d32005-03-24 14:26:38 +00003424 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003425case 268:
3426#line 2092 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003427{ yyval.a_tag.tag_class = TC_PRIVATE; ;
Lev Walkinb36317c2005-08-12 10:09:10 +00003428 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003429case 269:
3430#line 2096 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003431{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3432 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003433case 270:
3434#line 2097 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003435{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3436 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003437case 271:
3438#line 2098 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003439{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3440 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003441case 272:
3442#line 2102 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00003443{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003444 checkmem(yyvsp[0].tv_str);
Lev Walkinb36317c2005-08-12 10:09:10 +00003445 yyval.tv_str = yyvsp[0].tv_str;
3446 ;
3447 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003448case 273:
3449#line 2106 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003450{
3451 checkmem(yyvsp[0].tv_str);
3452 yyval.tv_str = yyvsp[0].tv_str;
3453 ;
3454 break;}
Lev Walkinef625402005-09-05 05:17:57 +00003455case 274:
3456#line 2114 "asn1p_y.y"
3457{
3458 checkmem(yyvsp[0].tv_str);
3459 yyval.tv_str = yyvsp[0].tv_str;
3460 ;
3461 break;}
3462case 275:
3463#line 2121 "asn1p_y.y"
3464{ yyval.tv_str = 0; ;
3465 break;}
3466case 276:
3467#line 2122 "asn1p_y.y"
3468{
3469 yyval.tv_str = yyvsp[0].tv_str;
3470 ;
3471 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003472case 277:
Lev Walkinef625402005-09-05 05:17:57 +00003473#line 2128 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003474{
Lev Walkinceb20e72004-09-05 10:40:41 +00003475 checkmem(yyvsp[0].tv_str);
3476 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003477 ;
3478 break;}
Lev Walkin1004aa92004-09-08 00:28:11 +00003479}
3480 /* the action file gets copied in in place of this dollarsign */
3481#line 543 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00003482
3483 yyvsp -= yylen;
3484 yyssp -= yylen;
Lev Walkin1004aa92004-09-08 00:28:11 +00003485#ifdef YYLSP_NEEDED
3486 yylsp -= yylen;
3487#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003488
Lev Walkin1004aa92004-09-08 00:28:11 +00003489#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00003490 if (yydebug)
3491 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003492 short *ssp1 = yyss - 1;
3493 fprintf (stderr, "state stack now");
3494 while (ssp1 != yyssp)
3495 fprintf (stderr, " %d", *++ssp1);
3496 fprintf (stderr, "\n");
Lev Walkinf15320b2004-06-03 03:38:44 +00003497 }
3498#endif
3499
3500 *++yyvsp = yyval;
3501
Lev Walkin1004aa92004-09-08 00:28:11 +00003502#ifdef YYLSP_NEEDED
3503 yylsp++;
3504 if (yylen == 0)
3505 {
3506 yylsp->first_line = yylloc.first_line;
3507 yylsp->first_column = yylloc.first_column;
3508 yylsp->last_line = (yylsp-1)->last_line;
3509 yylsp->last_column = (yylsp-1)->last_column;
3510 yylsp->text = 0;
3511 }
3512 else
3513 {
3514 yylsp->last_line = (yylsp+yylen-1)->last_line;
3515 yylsp->last_column = (yylsp+yylen-1)->last_column;
3516 }
3517#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003518
Lev Walkin1004aa92004-09-08 00:28:11 +00003519 /* Now "shift" the result of the reduction.
3520 Determine what state that goes to,
3521 based on the state we popped back to
3522 and the rule number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003523
3524 yyn = yyr1[yyn];
3525
Lev Walkin1004aa92004-09-08 00:28:11 +00003526 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3527 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003528 yystate = yytable[yystate];
3529 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003530 yystate = yydefgoto[yyn - YYNTBASE];
Lev Walkinf15320b2004-06-03 03:38:44 +00003531
3532 goto yynewstate;
3533
Lev Walkin1004aa92004-09-08 00:28:11 +00003534yyerrlab: /* here on detecting error */
Lev Walkinf15320b2004-06-03 03:38:44 +00003535
Lev Walkin1004aa92004-09-08 00:28:11 +00003536 if (! yyerrstatus)
3537 /* If not already recovering from an error, report this error. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003538 {
3539 ++yynerrs;
Lev Walkin1004aa92004-09-08 00:28:11 +00003540
3541#ifdef YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003542 yyn = yypact[yystate];
3543
Lev Walkin1004aa92004-09-08 00:28:11 +00003544 if (yyn > YYFLAG && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003545 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003546 int size = 0;
3547 char *msg;
3548 int x, count;
Lev Walkinf15320b2004-06-03 03:38:44 +00003549
Lev Walkin1004aa92004-09-08 00:28:11 +00003550 count = 0;
3551 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3552 for (x = (yyn < 0 ? -yyn : 0);
Lev Walkin4a4bdf72005-06-07 21:43:32 +00003553 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
Lev Walkin1004aa92004-09-08 00:28:11 +00003554 if (yycheck[x + yyn] == x)
3555 size += strlen(yytname[x]) + 15, count++;
3556 msg = (char *) malloc(size + 15);
3557 if (msg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003558 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003559 strcpy(msg, "parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003560
Lev Walkin1004aa92004-09-08 00:28:11 +00003561 if (count < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003562 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003563 count = 0;
3564 for (x = (yyn < 0 ? -yyn : 0);
Lev Walkin4a4bdf72005-06-07 21:43:32 +00003565 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
Lev Walkin1004aa92004-09-08 00:28:11 +00003566 if (yycheck[x + yyn] == x)
Lev Walkinf15320b2004-06-03 03:38:44 +00003567 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003568 strcat(msg, count == 0 ? ", expecting `" : " or `");
3569 strcat(msg, yytname[x]);
3570 strcat(msg, "'");
3571 count++;
Lev Walkinf15320b2004-06-03 03:38:44 +00003572 }
3573 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003574 yyerror(msg);
3575 free(msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003576 }
3577 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003578 yyerror ("parse error; also virtual memory exceeded");
Lev Walkinf15320b2004-06-03 03:38:44 +00003579 }
3580 else
3581#endif /* YYERROR_VERBOSE */
Lev Walkin1004aa92004-09-08 00:28:11 +00003582 yyerror("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003583 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003584
Lev Walkinf15320b2004-06-03 03:38:44 +00003585 goto yyerrlab1;
Lev Walkin1004aa92004-09-08 00:28:11 +00003586yyerrlab1: /* here on error raised explicitly by an action */
Lev Walkinf15320b2004-06-03 03:38:44 +00003587
3588 if (yyerrstatus == 3)
3589 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003590 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003591
Lev Walkin1004aa92004-09-08 00:28:11 +00003592 /* return failure if at end of input */
Lev Walkinf15320b2004-06-03 03:38:44 +00003593 if (yychar == YYEOF)
Lev Walkin1004aa92004-09-08 00:28:11 +00003594 YYABORT;
Lev Walkinf15320b2004-06-03 03:38:44 +00003595
Lev Walkin1004aa92004-09-08 00:28:11 +00003596#if YYDEBUG != 0
3597 if (yydebug)
3598 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3599#endif
3600
Lev Walkinf15320b2004-06-03 03:38:44 +00003601 yychar = YYEMPTY;
3602 }
3603
Lev Walkin1004aa92004-09-08 00:28:11 +00003604 /* Else will try to reuse lookahead token
3605 after shifting the error token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003606
Lev Walkin1004aa92004-09-08 00:28:11 +00003607 yyerrstatus = 3; /* Each real token shifted decrements this */
Lev Walkinf15320b2004-06-03 03:38:44 +00003608
Lev Walkin1004aa92004-09-08 00:28:11 +00003609 goto yyerrhandle;
Lev Walkin459ab022004-09-07 10:39:09 +00003610
Lev Walkin1004aa92004-09-08 00:28:11 +00003611yyerrdefault: /* current state does not do anything special for the error token. */
Lev Walkin459ab022004-09-07 10:39:09 +00003612
Lev Walkin1004aa92004-09-08 00:28:11 +00003613#if 0
3614 /* This is wrong; only states that explicitly want error tokens
3615 should shift them. */
3616 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3617 if (yyn) goto yydefault;
Lev Walkinceb20e72004-09-05 10:40:41 +00003618#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003619
3620yyerrpop: /* pop the current state because it cannot handle the error token */
3621
3622 if (yyssp == yyss) YYABORT;
3623 yyvsp--;
3624 yystate = *--yyssp;
3625#ifdef YYLSP_NEEDED
3626 yylsp--;
3627#endif
3628
3629#if YYDEBUG != 0
3630 if (yydebug)
3631 {
3632 short *ssp1 = yyss - 1;
3633 fprintf (stderr, "Error: state stack now");
3634 while (ssp1 != yyssp)
3635 fprintf (stderr, " %d", *++ssp1);
3636 fprintf (stderr, "\n");
Lev Walkinceb20e72004-09-05 10:40:41 +00003637 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003638#endif
3639
3640yyerrhandle:
3641
3642 yyn = yypact[yystate];
3643 if (yyn == YYFLAG)
3644 goto yyerrdefault;
3645
3646 yyn += YYTERROR;
3647 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3648 goto yyerrdefault;
3649
3650 yyn = yytable[yyn];
3651 if (yyn < 0)
3652 {
3653 if (yyn == YYFLAG)
3654 goto yyerrpop;
3655 yyn = -yyn;
3656 goto yyreduce;
3657 }
3658 else if (yyn == 0)
3659 goto yyerrpop;
Lev Walkinf15320b2004-06-03 03:38:44 +00003660
3661 if (yyn == YYFINAL)
3662 YYACCEPT;
3663
Lev Walkin1004aa92004-09-08 00:28:11 +00003664#if YYDEBUG != 0
3665 if (yydebug)
3666 fprintf(stderr, "Shifting error token, ");
3667#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003668
3669 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00003670#ifdef YYLSP_NEEDED
3671 *++yylsp = yylloc;
3672#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003673
3674 yystate = yyn;
3675 goto yynewstate;
3676
Lev Walkin1004aa92004-09-08 00:28:11 +00003677 yyacceptlab:
3678 /* YYACCEPT comes here. */
3679 if (yyfree_stacks)
3680 {
3681 free (yyss);
3682 free (yyvs);
3683#ifdef YYLSP_NEEDED
3684 free (yyls);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003685#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003686 }
3687 return 0;
Lev Walkin459ab022004-09-07 10:39:09 +00003688
Lev Walkin1004aa92004-09-08 00:28:11 +00003689 yyabortlab:
3690 /* YYABORT comes here. */
3691 if (yyfree_stacks)
3692 {
3693 free (yyss);
3694 free (yyvs);
3695#ifdef YYLSP_NEEDED
3696 free (yyls);
Lev Walkin459ab022004-09-07 10:39:09 +00003697#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003698 }
3699 return 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003700}
Lev Walkinef625402005-09-05 05:17:57 +00003701#line 2134 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00003702
3703
3704
3705/*
3706 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3707 */
3708static asn1p_value_t *
3709_convert_bitstring2binary(char *str, int base) {
3710 asn1p_value_t *val;
3711 int slen;
3712 int memlen;
3713 int baselen;
3714 int bits;
3715 uint8_t *binary_vector;
3716 uint8_t *bv_ptr;
3717 uint8_t cur_val;
3718
3719 assert(str);
3720 assert(str[0] == '\'');
3721
3722 switch(base) {
3723 case 'B':
3724 baselen = 1;
3725 break;
3726 case 'H':
3727 baselen = 4;
3728 break;
3729 default:
3730 assert(base == 'B' || base == 'H');
3731 errno = EINVAL;
3732 return NULL;
3733 }
3734
3735 slen = strlen(str);
3736 assert(str[slen - 1] == base);
3737 assert(str[slen - 2] == '\'');
3738
3739 memlen = slen / (8 / baselen); /* Conservative estimate */
3740
3741 bv_ptr = binary_vector = malloc(memlen + 1);
3742 if(bv_ptr == NULL)
3743 /* ENOMEM */
3744 return NULL;
3745
3746 cur_val = 0;
3747 bits = 0;
3748 while(*(++str) != '\'') {
3749 switch(baselen) {
3750 case 1:
3751 switch(*str) {
3752 case '1':
3753 cur_val |= 1 << (7 - (bits % 8));
3754 case '0':
3755 break;
3756 default:
3757 assert(!"_y UNREACH1");
3758 case ' ': case '\r': case '\n':
3759 continue;
3760 }
3761 break;
3762 case 4:
3763 switch(*str) {
3764 case '0': case '1': case '2': case '3': case '4':
3765 case '5': case '6': case '7': case '8': case '9':
3766 cur_val |= (*str - '0') << (4 - (bits % 8));
3767 break;
3768 case 'A': case 'B': case 'C':
3769 case 'D': case 'E': case 'F':
3770 cur_val |= ((*str - 'A') + 10)
3771 << (4 - (bits % 8));
3772 break;
3773 default:
3774 assert(!"_y UNREACH2");
3775 case ' ': case '\r': case '\n':
3776 continue;
3777 }
3778 break;
3779 }
3780
3781 bits += baselen;
3782 if((bits % 8) == 0) {
3783 *bv_ptr++ = cur_val;
3784 cur_val = 0;
3785 }
3786 }
3787
3788 *bv_ptr = cur_val;
3789 assert((bv_ptr - binary_vector) <= memlen);
3790
3791 val = asn1p_value_frombits(binary_vector, bits, 0);
3792 if(val == NULL) {
3793 free(binary_vector);
3794 }
3795
3796 return val;
3797}
3798
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003799/*
3800 * For unnamed types (used in old X.208 compliant modules)
3801 * generate some sort of interim names, to not to force human being to fix
3802 * the specification's compliance to modern ASN.1 standards.
3803 */
3804static void
3805_fixup_anonymous_identifier(asn1p_expr_t *expr) {
3806 char *p;
3807 assert(expr->Identifier == 0);
3808
3809 /*
3810 * Try to figure out the type name
3811 * without going too much into details
3812 */
3813 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
3814 if(expr->reference && expr->reference->comp_count > 0)
3815 expr->Identifier = expr->reference->components[0].name;
3816
3817 fprintf(stderr,
3818 "WARNING: Line %d: expected lower-case member identifier, "
3819 "found an unnamed %s.\n"
3820 "WARNING: Obsolete X.208 syntax detected, "
3821 "please give the member a name.\n",
3822 yylineno, expr->Identifier ? expr->Identifier : "type");
3823
3824 if(!expr->Identifier)
3825 expr->Identifier = "unnamed";
3826 expr->Identifier = strdup(expr->Identifier);
3827 assert(expr->Identifier);
3828 /* Make a lowercase identifier from the type name */
3829 for(p = expr->Identifier; *p; p++) {
3830 switch(*p) {
3831 case 'A' ... 'Z': *p += 32; break;
3832 case ' ': *p = '_'; break;
3833 case '-': *p = '_'; break;
3834 }
3835 }
3836 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
3837 "Name clash may occur later.\n",
3838 expr->Identifier);
3839}
3840
Lev Walkinf15320b2004-06-03 03:38:44 +00003841extern char *asn1p_text;
3842
3843int
3844yyerror(const char *msg) {
3845 fprintf(stderr,
3846 "ASN.1 grammar parse error "
3847 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00003848 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003849 return -1;
3850}
3851
3852