blob: e9be56f6479f2277944787fb34d63fc8496cb2d2 [file] [log] [blame]
Lev Walkinf15320b2004-06-03 03:38:44 +00001
Lev Walkina00d6b32006-03-21 03:40:38 +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 Walkina00d6b32006-03-21 03:40:38 +00005#define YYBISON 1 /* Identify Bison output. */
Lev Walkinf15320b2004-06-03 03:38:44 +00006
7#define yyparse asn1p_parse
Lev Walkina00d6b32006-03-21 03:40:38 +00008#define yylex asn1p_lex
Lev Walkinf15320b2004-06-03 03:38:44 +00009#define yyerror asn1p_error
Lev Walkina00d6b32006-03-21 03:40:38 +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 Walkina00d6b32006-03-21 03:40:38 +000014#define TOK_PPEQ 257
15#define TOK_whitespace 258
16#define TOK_opaque 259
17#define TOK_bstring 260
18#define TOK_cstring 261
19#define TOK_hstring 262
20#define TOK_identifier 263
21#define TOK_number 264
22#define TOK_tuple 265
23#define TOK_quadruple 266
24#define TOK_number_negative 267
25#define TOK_typereference 268
26#define TOK_capitalreference 269
27#define TOK_typefieldreference 270
28#define TOK_valuefieldreference 271
29#define TOK_Literal 272
30#define TOK_ABSENT 273
31#define TOK_ABSTRACT_SYNTAX 274
32#define TOK_ALL 275
33#define TOK_ANY 276
34#define TOK_APPLICATION 277
35#define TOK_AUTOMATIC 278
36#define TOK_BEGIN 279
37#define TOK_BIT 280
38#define TOK_BMPString 281
39#define TOK_BOOLEAN 282
40#define TOK_BY 283
41#define TOK_CHARACTER 284
42#define TOK_CHOICE 285
43#define TOK_CLASS 286
44#define TOK_COMPONENT 287
45#define TOK_COMPONENTS 288
46#define TOK_CONSTRAINED 289
47#define TOK_CONTAINING 290
48#define TOK_DEFAULT 291
49#define TOK_DEFINITIONS 292
50#define TOK_DEFINED 293
51#define TOK_EMBEDDED 294
52#define TOK_ENCODED 295
53#define TOK_ENCODING_CONTROL 296
54#define TOK_END 297
55#define TOK_ENUMERATED 298
56#define TOK_EXPLICIT 299
57#define TOK_EXPORTS 300
58#define TOK_EXTENSIBILITY 301
59#define TOK_EXTERNAL 302
60#define TOK_FALSE 303
61#define TOK_FROM 304
62#define TOK_GeneralizedTime 305
63#define TOK_GeneralString 306
64#define TOK_GraphicString 307
65#define TOK_IA5String 308
66#define TOK_IDENTIFIER 309
67#define TOK_IMPLICIT 310
68#define TOK_IMPLIED 311
69#define TOK_IMPORTS 312
70#define TOK_INCLUDES 313
71#define TOK_INSTANCE 314
72#define TOK_INSTRUCTIONS 315
73#define TOK_INTEGER 316
74#define TOK_ISO646String 317
75#define TOK_MAX 318
76#define TOK_MIN 319
77#define TOK_MINUS_INFINITY 320
78#define TOK_NULL 321
79#define TOK_NumericString 322
80#define TOK_OBJECT 323
81#define TOK_ObjectDescriptor 324
82#define TOK_OCTET 325
83#define TOK_OF 326
84#define TOK_OPTIONAL 327
85#define TOK_PATTERN 328
86#define TOK_PDV 329
87#define TOK_PLUS_INFINITY 330
88#define TOK_PRESENT 331
89#define TOK_PrintableString 332
90#define TOK_PRIVATE 333
91#define TOK_REAL 334
92#define TOK_RELATIVE_OID 335
93#define TOK_SEQUENCE 336
94#define TOK_SET 337
95#define TOK_SIZE 338
96#define TOK_STRING 339
97#define TOK_SYNTAX 340
98#define TOK_T61String 341
99#define TOK_TAGS 342
100#define TOK_TeletexString 343
101#define TOK_TRUE 344
102#define TOK_TYPE_IDENTIFIER 345
103#define TOK_UNIQUE 346
104#define TOK_UNIVERSAL 347
105#define TOK_UniversalString 348
106#define TOK_UTCTime 349
107#define TOK_UTF8String 350
108#define TOK_VideotexString 351
109#define TOK_VisibleString 352
110#define TOK_WITH 353
111#define TOK_EXCEPT 354
112#define TOK_INTERSECTION 355
113#define TOK_UNION 356
114#define TOK_TwoDots 357
115#define TOK_ThreeDots 358
Lev Walkinf15320b2004-06-03 03:38:44 +0000116
117#line 1 "asn1p_y.y"
118
119
120#include <stdlib.h>
121#include <stdio.h>
122#include <string.h>
123#include <errno.h>
124#include <assert.h>
125
126#include "asn1parser.h"
127
128#define YYPARSE_PARAM param
Lev Walkin4a4bdf72005-06-07 21:43:32 +0000129#define YYPARSE_PARAM_TYPE void **
Lev Walkinf15320b2004-06-03 03:38:44 +0000130#define YYERROR_VERBOSE
131
132int yylex(void);
133int yyerror(const char *msg);
Lev Walkin4a4bdf72005-06-07 21:43:32 +0000134#ifdef YYBYACC
135int yyparse(void **param); /* byacc does not produce a prototype */
136#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000137void asn1p_lexer_hack_push_opaque_state(void);
138void asn1p_lexer_hack_enable_with_syntax(void);
Lev Walkinf59d0752004-08-18 04:59:12 +0000139void asn1p_lexer_hack_push_encoding_control(void);
Lev Walkinf15320b2004-06-03 03:38:44 +0000140#define yylineno asn1p_lineno
141extern int asn1p_lineno;
142
Lev Walkinb36317c2005-08-12 10:09:10 +0000143/*
Lev Walkinef625402005-09-05 05:17:57 +0000144 * Process directives as <ASN1C:RepresentAsPointer>
Lev Walkin4696c742005-08-22 12:23:54 +0000145 */
146extern int asn1p_as_pointer;
Lev Walkin4696c742005-08-22 12:23:54 +0000147
148/*
Lev Walkinb36317c2005-08-12 10:09:10 +0000149 * This temporary variable is used to solve the shortcomings of 1-lookahead
150 * parser.
151 */
152static struct AssignedIdentifier *saved_aid;
Lev Walkinf15320b2004-06-03 03:38:44 +0000153
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000154static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
155static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
Lev Walkinf15320b2004-06-03 03:38:44 +0000156
Lev Walkinb36317c2005-08-12 10:09:10 +0000157#define checkmem(ptr) do { \
158 if(!(ptr)) \
159 return yyerror("Memory failure"); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000160 } while(0)
161
Lev Walkinb36317c2005-08-12 10:09:10 +0000162#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
163 if(arg1->type != constr_type) { \
164 int __ret; \
165 root = asn1p_constraint_new(yylineno); \
166 checkmem(root); \
167 root->type = constr_type; \
168 __ret = asn1p_constraint_insert(root, \
169 arg1); \
170 checkmem(__ret == 0); \
171 } else { \
172 root = arg1; \
173 } \
174 if(arg2) { \
175 int __ret \
176 = asn1p_constraint_insert(root, arg2); \
177 checkmem(__ret == 0); \
178 } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000179 } while(0)
180
181
Lev Walkinef625402005-09-05 05:17:57 +0000182#line 72 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +0000183typedef union {
Lev Walkinf15320b2004-06-03 03:38:44 +0000184 asn1p_t *a_grammar;
185 asn1p_module_flags_e a_module_flags;
186 asn1p_module_t *a_module;
187 asn1p_expr_type_e a_type; /* ASN.1 Type */
188 asn1p_expr_t *a_expr; /* Constructed collection */
189 asn1p_constraint_t *a_constr; /* Constraint */
190 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
191 asn1p_xports_t *a_xports; /* IMports/EXports */
Lev Walkinb36317c2005-08-12 10:09:10 +0000192 struct AssignedIdentifier a_aid; /* Assigned Identifier */
Lev Walkinf15320b2004-06-03 03:38:44 +0000193 asn1p_oid_t *a_oid; /* Object Identifier */
194 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
195 struct asn1p_type_tag_s a_tag; /* A tag */
196 asn1p_ref_t *a_ref; /* Reference to custom type */
197 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
198 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
199 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
200 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
201 struct asn1p_param_s a_parg; /* A parameter argument */
202 asn1p_paramlist_t *a_plist; /* A pargs list */
Lev Walkin9c974182004-09-15 11:59:51 +0000203 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
Lev Walkinf15320b2004-06-03 03:38:44 +0000204 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
Lev Walkind21c5052004-09-29 13:18:09 +0000205 asn1c_integer_t a_int;
Lev Walkinf15320b2004-06-03 03:38:44 +0000206 char *tv_str;
207 struct {
208 char *buf;
209 int len;
210 } tv_opaque;
211 struct {
212 char *name;
213 struct asn1p_type_tag_s tag;
214 } tv_nametag;
Lev Walkin1004aa92004-09-08 00:28:11 +0000215} YYSTYPE;
Lev Walkina00d6b32006-03-21 03:40:38 +0000216#include <stdio.h>
217
218#ifndef __cplusplus
219#ifndef __STDC__
220#define const
221#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000222#endif
223
224
225
Lev Walkin5045dfa2006-03-21 09:41:28 +0000226#define YYFINAL 448
Lev Walkina00d6b32006-03-21 03:40:38 +0000227#define YYFLAG -32768
228#define YYNTBASE 120
Lev Walkinf15320b2004-06-03 03:38:44 +0000229
Lev Walkin0c0bca62006-03-21 04:48:15 +0000230#define YYTRANSLATE(x) ((unsigned)(x) <= 358 ? yytranslate[x] : 227)
Lev Walkinf15320b2004-06-03 03:38:44 +0000231
Lev Walkina00d6b32006-03-21 03:40:38 +0000232static const char yytranslate[] = { 0,
233 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
234 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
235 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
236 2, 2, 116, 2, 2, 2, 2, 2, 2, 109,
237 110, 2, 2, 112, 2, 117, 2, 2, 2, 2,
238 2, 2, 2, 2, 2, 2, 2, 113, 111, 118,
239 2, 2, 2, 119, 2, 2, 2, 2, 2, 2,
240 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
241 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
242 114, 2, 115, 101, 2, 2, 2, 2, 2, 2,
243 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
244 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
245 2, 2, 107, 103, 108, 2, 2, 2, 2, 2,
246 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
247 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
248 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
249 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
250 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
251 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
252 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
253 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
254 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
255 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
256 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
257 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
258 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
259 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
260 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
261 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
262 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
263 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
264 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
265 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
266 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
267 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
268 97, 98, 99, 100, 102, 104, 105, 106
269};
Lev Walkinf15320b2004-06-03 03:38:44 +0000270
Lev Walkina00d6b32006-03-21 03:40:38 +0000271#if YYDEBUG != 0
272static const short yyprhs[] = { 0,
273 0, 2, 4, 7, 16, 17, 19, 23, 26, 28,
274 31, 33, 38, 40, 41, 43, 45, 48, 51, 54,
275 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
276 79, 81, 82, 86, 88, 92, 95, 97, 100, 101,
277 103, 108, 110, 114, 116, 120, 122, 126, 130, 133,
Lev Walkin557f27d2006-03-21 07:46:48 +0000278 135, 139, 141, 145, 147, 151, 156, 158, 160, 165,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000279 169, 173, 180, 187, 189, 193, 195, 199, 203, 207,
280 211, 213, 217, 219, 221, 223, 225, 226, 228, 230,
281 234, 238, 241, 245, 247, 249, 253, 256, 258, 260,
282 266, 267, 269, 271, 275, 278, 283, 287, 291, 295,
283 299, 303, 304, 306, 307, 314, 316, 319, 321, 323,
284 325, 329, 331, 335, 339, 343, 344, 347, 349, 354,
285 359, 364, 371, 378, 380, 385, 389, 391, 395, 399,
286 403, 405, 409, 411, 415, 417, 419, 421, 423, 427,
287 431, 433, 438, 440, 442, 446, 447, 451, 453, 455,
288 457, 459, 461, 463, 465, 467, 471, 473, 475, 477,
289 479, 482, 484, 486, 488, 490, 493, 496, 498, 500,
290 503, 506, 508, 510, 512, 514, 516, 519, 521, 524,
291 526, 528, 530, 532, 534, 536, 538, 540, 542, 544,
292 546, 548, 550, 552, 554, 556, 558, 560, 562, 563,
293 565, 567, 572, 576, 581, 583, 585, 589, 595, 597,
294 601, 605, 609, 613, 618, 622, 624, 626, 630, 634,
295 638, 642, 644, 646, 647, 653, 655, 658, 661, 665,
296 667, 669, 671, 673, 675, 677, 679, 681, 685, 691,
297 693, 697, 699, 703, 704, 706, 708, 710, 712, 714,
298 716, 720, 725, 727, 731, 734, 738, 740, 744, 745,
299 747, 749, 752, 755, 759, 761, 765, 767, 772, 777,
300 779, 781, 783, 785, 786, 788, 791, 796, 797, 799,
301 801, 803, 804, 806, 808, 810, 812, 814, 815, 817
Lev Walkina00d6b32006-03-21 03:40:38 +0000302};
Lev Walkinf15320b2004-06-03 03:38:44 +0000303
Lev Walkina00d6b32006-03-21 03:40:38 +0000304static const short yyrhs[] = { 121,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000305 0, 122, 0, 121, 122, 0, 223, 123, 38, 127,
Lev Walkina00d6b32006-03-21 03:40:38 +0000306 3, 25, 130, 43, 0, 0, 124, 0, 107, 125,
307 108, 0, 107, 108, 0, 126, 0, 125, 126, 0,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000308 226, 0, 226, 109, 10, 110, 0, 10, 0, 0,
Lev Walkina00d6b32006-03-21 03:40:38 +0000309 128, 0, 129, 0, 128, 129, 0, 45, 88, 0,
310 56, 88, 0, 24, 88, 0, 47, 57, 0, 15,
311 61, 0, 0, 131, 0, 132, 0, 131, 132, 0,
Lev Walkin557f27d2006-03-21 07:46:48 +0000312 134, 0, 140, 0, 146, 0, 176, 0, 144, 0,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000313 0, 42, 15, 133, 0, 186, 0, 58, 135, 111,
Lev Walkina00d6b32006-03-21 03:40:38 +0000314 0, 58, 50, 0, 137, 0, 135, 137, 0, 0,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000315 124, 0, 138, 50, 223, 136, 0, 139, 0, 138,
316 112, 139, 0, 223, 0, 223, 107, 108, 0, 226,
Lev Walkina00d6b32006-03-21 03:40:38 +0000317 0, 46, 141, 111, 0, 46, 21, 111, 0, 46,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000318 111, 0, 142, 0, 141, 112, 142, 0, 223, 0,
Lev Walkin557f27d2006-03-21 07:46:48 +0000319 223, 107, 108, 0, 226, 0, 107, 193, 108, 0,
320 223, 145, 3, 143, 0, 185, 0, 170, 0, 170,
321 107, 149, 108, 0, 223, 3, 166, 0, 223, 3,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000322 156, 0, 223, 107, 147, 108, 3, 166, 0, 223,
323 107, 147, 108, 3, 156, 0, 148, 0, 147, 112,
324 148, 0, 223, 0, 223, 113, 226, 0, 223, 113,
325 223, 0, 183, 113, 226, 0, 183, 113, 223, 0,
326 150, 0, 149, 112, 150, 0, 166, 0, 179, 0,
327 226, 0, 143, 0, 0, 152, 0, 153, 0, 152,
328 112, 153, 0, 226, 166, 212, 0, 166, 212, 0,
329 34, 72, 166, 0, 165, 0, 155, 0, 154, 112,
330 155, 0, 226, 166, 0, 165, 0, 166, 0, 32,
331 107, 158, 108, 160, 0, 0, 92, 0, 159, 0,
332 158, 112, 159, 0, 16, 212, 0, 17, 166, 157,
333 212, 0, 17, 174, 212, 0, 17, 175, 212, 0,
334 16, 174, 212, 0, 16, 166, 212, 0, 16, 175,
335 212, 0, 0, 161, 0, 0, 99, 86, 107, 162,
336 163, 108, 0, 164, 0, 163, 164, 0, 4, 0,
337 18, 0, 173, 0, 114, 163, 115, 0, 106, 0,
338 106, 116, 180, 0, 106, 116, 217, 0, 218, 168,
339 190, 0, 0, 167, 169, 0, 145, 0, 31, 107,
340 154, 108, 0, 82, 107, 151, 108, 0, 83, 107,
341 151, 108, 0, 82, 190, 72, 225, 218, 168, 0,
342 83, 190, 72, 225, 218, 168, 0, 22, 0, 22,
343 39, 29, 226, 0, 60, 72, 170, 0, 14, 0,
344 14, 117, 223, 0, 224, 117, 223, 0, 14, 117,
345 226, 0, 224, 0, 224, 117, 171, 0, 172, 0,
346 171, 117, 172, 0, 173, 0, 16, 0, 17, 0,
347 16, 0, 174, 117, 16, 0, 174, 117, 17, 0,
348 15, 0, 226, 145, 3, 177, 0, 179, 0, 180,
349 0, 226, 113, 177, 0, 0, 107, 178, 182, 0,
350 67, 0, 49, 0, 90, 0, 6, 0, 8, 0,
351 181, 0, 217, 0, 226, 0, 223, 117, 226, 0,
352 7, 0, 11, 0, 12, 0, 5, 0, 182, 5,
353 0, 28, 0, 67, 0, 80, 0, 184, 0, 71,
354 85, 0, 69, 55, 0, 81, 0, 48, 0, 40,
355 75, 0, 30, 85, 0, 95, 0, 51, 0, 186,
356 0, 62, 0, 44, 0, 26, 85, 0, 183, 0,
357 184, 214, 0, 27, 0, 52, 0, 53, 0, 54,
358 0, 63, 0, 68, 0, 78, 0, 87, 0, 89,
359 0, 94, 0, 96, 0, 97, 0, 98, 0, 70,
360 0, 103, 0, 104, 0, 101, 0, 102, 0, 100,
361 0, 0, 191, 0, 192, 0, 84, 109, 193, 110,
362 0, 109, 193, 110, 0, 192, 109, 193, 110, 0,
363 106, 0, 194, 0, 194, 112, 106, 0, 194, 112,
364 106, 112, 194, 0, 195, 0, 21, 100, 195, 0,
365 194, 187, 195, 0, 194, 188, 195, 0, 195, 189,
366 195, 0, 198, 109, 193, 110, 0, 109, 193, 110,
367 0, 199, 0, 200, 0, 199, 197, 199, 0, 65,
368 197, 199, 0, 199, 197, 64, 0, 65, 197, 64,
369 0, 206, 0, 201, 0, 0, 35, 29, 107, 196,
370 182, 0, 105, 0, 105, 118, 0, 118, 105, 0,
371 118, 105, 118, 0, 84, 0, 50, 0, 49, 0,
372 90, 0, 217, 0, 181, 0, 226, 0, 223, 0,
373 99, 33, 192, 0, 99, 34, 107, 202, 108, 0,
374 203, 0, 202, 112, 203, 0, 106, 0, 226, 190,
375 204, 0, 0, 205, 0, 77, 0, 19, 0, 73,
376 0, 207, 0, 208, 0, 107, 223, 108, 0, 207,
377 107, 209, 108, 0, 210, 0, 209, 112, 210, 0,
378 119, 211, 0, 119, 117, 211, 0, 226, 0, 211,
379 117, 226, 0, 0, 213, 0, 73, 0, 37, 177,
380 0, 107, 108, 0, 107, 215, 108, 0, 216, 0,
381 215, 112, 216, 0, 226, 0, 226, 109, 217, 110,
382 0, 226, 109, 180, 110, 0, 217, 0, 106, 0,
383 10, 0, 13, 0, 0, 219, 0, 220, 222, 0,
384 114, 221, 10, 115, 0, 0, 93, 0, 23, 0,
385 79, 0, 0, 56, 0, 45, 0, 14, 0, 15,
386 0, 15, 0, 0, 226, 0, 9, 0
Lev Walkina00d6b32006-03-21 03:40:38 +0000387};
Lev Walkinf15320b2004-06-03 03:38:44 +0000388
389#endif
390
Lev Walkina00d6b32006-03-21 03:40:38 +0000391#if YYDEBUG != 0
392static const short yyrline[] = { 0,
Lev Walkin557f27d2006-03-21 07:46:48 +0000393 323, 329, 335, 351, 376, 378, 381, 385, 390, 397,
394 405, 410, 414, 423, 425, 433, 437, 445, 449, 452,
395 455, 459, 479, 481, 489, 493, 525, 529, 538, 545,
396 558, 565, 567, 579, 591, 602, 607, 613, 619, 621,
397 624, 635, 641, 647, 654, 660, 668, 672, 675, 682,
398 688, 694, 701, 707, 716, 718, 728, 742, 752, 768,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000399 778, 794, 800, 807, 817, 827, 832, 839, 846, 854,
400 864, 870, 876, 880, 888, 899, 921, 923, 925, 931,
401 937, 945, 951, 958, 963, 969, 975, 981, 984, 990,
402 1000, 1002, 1005, 1013, 1020, 1033, 1044, 1054, 1065, 1075,
403 1086, 1097, 1099, 1104, 1108, 1113, 1118, 1124, 1129, 1132,
404 1136, 1141, 1150, 1159, 1170, 1192, 1199, 1218, 1222, 1228,
405 1234, 1240, 1250, 1260, 1266, 1277, 1291, 1300, 1310, 1320,
406 1330, 1338, 1359, 1368, 1377, 1379, 1386, 1393, 1399, 1403,
407 1409, 1429, 1439, 1441, 1442, 1449, 1449, 1454, 1461, 1467,
408 1472, 1476, 1480, 1483, 1488, 1500, 1517, 1522, 1527, 1560,
409 1570, 1584, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593,
410 1594, 1595, 1596, 1597, 1603, 1605, 1606, 1609, 1616, 1628,
411 1630, 1634, 1638, 1639, 1640, 1641, 1642, 1646, 1647, 1648,
412 1649, 1653, 1654, 1661, 1661, 1662, 1662, 1663, 1665, 1667,
413 1672, 1676, 1685, 1689, 1694, 1699, 1702, 1708, 1718, 1722,
414 1725, 1728, 1731, 1736, 1745, 1753, 1759, 1765, 1772, 1780,
415 1788, 1797, 1800, 1803, 1804, 1814, 1816, 1817, 1818, 1821,
416 1825, 1830, 1836, 1841, 1844, 1847, 1860, 1874, 1878, 1883,
417 1887, 1892, 1899, 1912, 1914, 1917, 1921, 1924, 1929, 1933,
418 1941, 1956, 1962, 1969, 1982, 1994, 2009, 2013, 2030, 2035,
419 2038, 2043, 2065, 2070, 2075, 2081, 2087, 2095, 2103, 2111,
420 2118, 2128, 2133, 2163, 2165, 2168, 2175, 2181, 2183, 2184,
421 2185, 2188, 2190, 2191, 2194, 2199, 2206, 2213, 2215, 2220
Lev Walkina00d6b32006-03-21 03:40:38 +0000422};
423#endif
424
425
426#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
427
428static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
429"TOK_whitespace","TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier",
430"TOK_number","TOK_tuple","TOK_quadruple","TOK_number_negative","TOK_typereference",
431"TOK_capitalreference","TOK_typefieldreference","TOK_valuefieldreference","TOK_Literal",
432"TOK_ABSENT","TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY","TOK_APPLICATION","TOK_AUTOMATIC",
433"TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN","TOK_BY","TOK_CHARACTER",
434"TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS","TOK_CONSTRAINED",
435"TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED","TOK_EMBEDDED",
436"TOK_ENCODED","TOK_ENCODING_CONTROL","TOK_END","TOK_ENUMERATED","TOK_EXPLICIT",
437"TOK_EXPORTS","TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime",
438"TOK_GeneralString","TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT",
439"TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INSTRUCTIONS",
440"TOK_INTEGER","TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL",
441"TOK_NumericString","TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET","TOK_OF",
442"TOK_OPTIONAL","TOK_PATTERN","TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString",
443"TOK_PRIVATE","TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE",
444"TOK_STRING","TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE",
445"TOK_TYPE_IDENTIFIER","TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime",
446"TOK_UTF8String","TOK_VideotexString","TOK_VisibleString","TOK_WITH","TOK_EXCEPT",
447"'^'","TOK_INTERSECTION","'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots","'{'",
448"'}'","'('","')'","';'","','","':'","'['","']'","'!'","'.'","'<'","'@'","ParsedGrammar",
449"ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
450"ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags",
451"ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody",
452"ModuleSpecificationBody","ModuleSpecificationElement","@1","ImportsDefinition",
453"ImportsBundleSet","AssignedIdentifier","ImportsBundle","ImportsList","ImportsElement",
Lev Walkin557f27d2006-03-21 07:46:48 +0000454"ExportsDefinition","ExportsBody","ExportsElement","ValueSet","ValueSetTypeAssignment",
Lev Walkin0c0bca62006-03-21 04:48:15 +0000455"DefinedType","DataTypeReference","ParameterArgumentList","ParameterArgumentName",
Lev Walkin5045dfa2006-03-21 09:41:28 +0000456"ActualParameterList","ActualParameter","optComponentTypeLists","ComponentTypeLists",
Lev Walkina00d6b32006-03-21 03:40:38 +0000457"ComponentType","AlternativeTypeLists","AlternativeType","ObjectClass","optUnique",
Lev Walkin557f27d2006-03-21 07:46:48 +0000458"FieldSpec","ClassField","optWithSyntax","WithSyntax","@2","WithSyntaxList",
Lev Walkina00d6b32006-03-21 03:40:38 +0000459"WithSyntaxToken","ExtensionAndException","Type","NSTD_IndirectMarker","TypeDeclaration",
460"TypeDeclarationSet","ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement",
461"PrimitiveFieldReference","FieldName","DefinedObjectClass","ValueDefinition",
Lev Walkin557f27d2006-03-21 07:46:48 +0000462"Value","@3","SimpleValue","DefinedValue","RestrictedCharacterStringValue","Opaque",
Lev Walkin0c0bca62006-03-21 04:48:15 +0000463"BasicTypeId","BasicTypeId_UniverationCompatible","BasicType","BasicString",
464"Union","Intersection","Except","optConstraints","Constraints","SetOfConstraints",
Lev Walkin557f27d2006-03-21 07:46:48 +0000465"ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement","@4","ConstraintRangeSpec",
Lev Walkin0c0bca62006-03-21 04:48:15 +0000466"ConstraintSpec","SingleValue","ContainedSubtype","InnerTypeConstraint","WithComponentsList",
Lev Walkina00d6b32006-03-21 03:40:38 +0000467"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
468"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
469"ComponentIdList","optMarker","Marker","UniverationDefinition","UniverationList",
470"UniverationElement","SignedNumber","optTag","Tag","TagTypeValue","TagClass",
471"TagPlicit","TypeRefName","ObjectClassReference","optIdentifier","Identifier", NULL
472};
473#endif
474
475static const short yyr1[] = { 0,
476 120, 121, 121, 122, 123, 123, 124, 124, 125, 125,
477 126, 126, 126, 127, 127, 128, 128, 129, 129, 129,
478 129, 129, 130, 130, 131, 131, 132, 132, 132, 132,
479 132, 133, 132, 132, 134, 134, 135, 135, 136, 136,
480 137, 138, 138, 139, 139, 139, 140, 140, 140, 141,
Lev Walkin557f27d2006-03-21 07:46:48 +0000481 141, 142, 142, 142, 143, 144, 145, 145, 145, 146,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000482 146, 146, 146, 147, 147, 148, 148, 148, 148, 148,
483 149, 149, 150, 150, 150, 150, 151, 151, 152, 152,
484 153, 153, 153, 153, 154, 154, 155, 155, 155, 156,
485 157, 157, 158, 158, 159, 159, 159, 159, 159, 159,
486 159, 160, 160, 162, 161, 163, 163, 164, 164, 164,
487 164, 165, 165, 165, 166, 167, 168, 169, 169, 169,
488 169, 169, 169, 169, 169, 169, 170, 170, 170, 170,
489 170, 170, 171, 171, 172, 173, 173, 174, 174, 174,
490 175, 176, 177, 177, 177, 178, 177, 177, 179, 179,
491 179, 179, 179, 179, 180, 180, 181, 181, 181, 182,
492 182, 183, 183, 183, 183, 183, 183, 183, 183, 183,
493 183, 183, 183, 183, 184, 184, 184, 185, 185, 186,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000494 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000495 186, 186, 186, 187, 187, 188, 188, 189, 190, 190,
496 191, 191, 192, 192, 193, 193, 193, 193, 194, 194,
497 194, 194, 194, 195, 195, 195, 195, 195, 195, 195,
498 195, 195, 195, 196, 195, 197, 197, 197, 197, 198,
499 198, 199, 199, 199, 199, 199, 200, 201, 201, 202,
500 202, 203, 203, 204, 204, 205, 205, 205, 206, 206,
501 207, 208, 209, 209, 210, 210, 211, 211, 212, 212,
502 213, 213, 214, 214, 215, 215, 216, 216, 216, 216,
503 216, 217, 217, 218, 218, 219, 220, 221, 221, 221,
504 221, 222, 222, 222, 223, 223, 224, 225, 225, 226
Lev Walkina00d6b32006-03-21 03:40:38 +0000505};
506
507static const short yyr2[] = { 0,
508 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
509 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
510 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
511 1, 0, 3, 1, 3, 2, 1, 2, 0, 1,
512 4, 1, 3, 1, 3, 1, 3, 3, 2, 1,
Lev Walkin557f27d2006-03-21 07:46:48 +0000513 3, 1, 3, 1, 3, 4, 1, 1, 4, 3,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000514 3, 6, 6, 1, 3, 1, 3, 3, 3, 3,
515 1, 3, 1, 1, 1, 1, 0, 1, 1, 3,
516 3, 2, 3, 1, 1, 3, 2, 1, 1, 5,
517 0, 1, 1, 3, 2, 4, 3, 3, 3, 3,
518 3, 0, 1, 0, 6, 1, 2, 1, 1, 1,
519 3, 1, 3, 3, 3, 0, 2, 1, 4, 4,
520 4, 6, 6, 1, 4, 3, 1, 3, 3, 3,
521 1, 3, 1, 3, 1, 1, 1, 1, 3, 3,
522 1, 4, 1, 1, 3, 0, 3, 1, 1, 1,
523 1, 1, 1, 1, 1, 3, 1, 1, 1, 1,
524 2, 1, 1, 1, 1, 2, 2, 1, 1, 2,
525 2, 1, 1, 1, 1, 1, 2, 1, 2, 1,
Lev Walkina00d6b32006-03-21 03:40:38 +0000526 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000527 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
528 1, 4, 3, 4, 1, 1, 3, 5, 1, 3,
529 3, 3, 3, 4, 3, 1, 1, 3, 3, 3,
530 3, 1, 1, 0, 5, 1, 2, 2, 3, 1,
531 1, 1, 1, 1, 1, 1, 1, 3, 5, 1,
532 3, 1, 3, 0, 1, 1, 1, 1, 1, 1,
533 3, 4, 1, 3, 2, 3, 1, 3, 0, 1,
534 1, 2, 2, 3, 1, 3, 1, 4, 4, 1,
535 1, 1, 1, 0, 1, 2, 4, 0, 1, 1,
536 1, 0, 1, 1, 1, 1, 1, 0, 1, 1
Lev Walkina00d6b32006-03-21 03:40:38 +0000537};
538
539static const short yydefact[] = { 0,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000540 285, 286, 1, 2, 5, 3, 0, 0, 6, 290,
Lev Walkina00d6b32006-03-21 03:40:38 +0000541 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
542 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000543 18, 21, 19, 0, 17, 12, 23, 180, 0, 0,
544 181, 182, 183, 0, 184, 185, 193, 186, 187, 188,
545 189, 190, 191, 192, 0, 24, 25, 27, 28, 31,
Lev Walkina00d6b32006-03-21 03:40:38 +0000546 29, 30, 34, 0, 0, 32, 0, 49, 0, 50,
547 52, 54, 36, 0, 37, 0, 42, 44, 46, 4,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000548 26, 274, 127, 287, 0, 162, 0, 0, 176, 169,
549 173, 175, 163, 0, 0, 164, 168, 172, 0, 0,
550 58, 178, 165, 57, 174, 131, 0, 33, 48, 47,
551 0, 0, 35, 38, 0, 0, 0, 0, 278, 61,
552 60, 116, 275, 282, 0, 177, 171, 170, 167, 166,
553 0, 64, 0, 165, 66, 0, 274, 0, 179, 0,
554 0, 51, 53, 39, 43, 45, 0, 280, 281, 279,
555 0, 0, 199, 284, 283, 276, 128, 130, 0, 0,
556 0, 0, 0, 56, 151, 157, 152, 272, 158, 159,
557 273, 149, 150, 76, 0, 71, 73, 74, 153, 154,
558 75, 271, 263, 0, 265, 270, 267, 136, 137, 132,
559 133, 135, 129, 148, 146, 142, 143, 144, 0, 155,
560 40, 41, 274, 274, 0, 93, 0, 124, 0, 0,
561 199, 199, 118, 117, 0, 0, 115, 200, 201, 274,
562 65, 70, 69, 68, 67, 0, 0, 232, 231, 0,
563 230, 233, 0, 205, 0, 0, 235, 0, 206, 209,
564 0, 216, 217, 223, 222, 249, 250, 234, 237, 236,
565 59, 274, 264, 0, 0, 0, 0, 0, 0, 141,
566 138, 0, 261, 259, 259, 259, 95, 260, 91, 259,
567 259, 102, 0, 277, 0, 274, 0, 274, 0, 274,
568 0, 0, 0, 0, 63, 62, 0, 0, 226, 0,
569 0, 0, 0, 0, 0, 55, 196, 197, 194, 195,
570 0, 0, 0, 198, 0, 0, 0, 0, 72, 266,
571 0, 0, 155, 134, 160, 147, 156, 145, 262, 100,
572 0, 99, 101, 92, 259, 97, 98, 0, 90, 103,
573 94, 0, 112, 0, 85, 88, 89, 274, 126, 0,
574 0, 78, 79, 84, 259, 274, 288, 0, 288, 0,
575 203, 0, 210, 224, 227, 228, 221, 219, 238, 0,
576 251, 215, 207, 211, 212, 213, 0, 220, 218, 0,
577 0, 253, 269, 268, 161, 139, 140, 96, 0, 125,
578 0, 119, 274, 87, 274, 120, 274, 82, 259, 274,
579 289, 121, 274, 202, 204, 0, 229, 242, 0, 240,
580 199, 0, 214, 0, 255, 257, 252, 0, 104, 113,
581 114, 86, 83, 80, 81, 116, 116, 225, 239, 0,
582 244, 208, 256, 0, 254, 0, 122, 123, 241, 247,
583 248, 246, 243, 245, 258, 108, 109, 0, 0, 106,
584 110, 0, 105, 107, 111, 0, 0, 0
Lev Walkina00d6b32006-03-21 03:40:38 +0000585};
586
Lev Walkin5045dfa2006-03-21 09:41:28 +0000587static const short yydefgoto[] = { 446,
Lev Walkina00d6b32006-03-21 03:40:38 +0000588 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000589 56, 57, 108, 58, 74, 202, 75, 76, 77, 59,
590 69, 70, 174, 60, 100, 61, 131, 132, 175, 176,
591 341, 342, 343, 334, 335, 120, 325, 205, 206, 329,
592 330, 426, 439, 440, 344, 345, 152, 153, 214, 101,
593 190, 191, 441, 265, 266, 62, 196, 257, 197, 198,
594 237, 316, 102, 103, 104, 105, 302, 303, 305, 217,
595 218, 219, 238, 239, 240, 396, 291, 241, 242, 243,
596 244, 399, 400, 433, 434, 245, 246, 247, 371, 372,
597 405, 267, 268, 139, 184, 185, 248, 122, 123, 124,
598 151, 156, 249, 106, 390, 250
Lev Walkina00d6b32006-03-21 03:40:38 +0000599};
600
Lev Walkin5045dfa2006-03-21 09:41:28 +0000601static const short yypact[] = { 200,
602-32768,-32768, 200,-32768, -45,-32768, 43, 34,-32768,-32768,
603-32768,-32768, 50,-32768, -19, 235,-32768,-32768, 86, 122,
604 22, 106, 139, 120, 236, 235,-32768, 134,-32768,-32768,
605-32768,-32768,-32768, 197,-32768,-32768, 457,-32768, 234, 56,
606-32768,-32768,-32768, 49,-32768,-32768,-32768,-32768,-32768,-32768,
607-32768,-32768,-32768,-32768, 214, 457,-32768,-32768,-32768,-32768,
608-32768,-32768,-32768, 341, 618,-32768, 163,-32768, 181,-32768,
609 206,-32768,-32768, 65,-32768, -14,-32768, 216,-32768,-32768,
610-32768, 57, 210,-32768, 256,-32768, 258, 274,-32768,-32768,
611-32768,-32768,-32768, 295, 266,-32768,-32768,-32768, 694, 349,
612 250,-32768, 251,-32768,-32768, 242, 357,-32768,-32768,-32768,
613 226, 253,-32768,-32768, 200, 226, 254, 257, 85,-32768,
614-32768,-32768,-32768, 5, 226,-32768,-32768,-32768,-32768,-32768,
615 -5,-32768, 252,-32768, 259, 263, 75, 82,-32768, 303,
616 219,-32768,-32768, -45,-32768,-32768, 305,-32768,-32768,-32768,
617 356, 542, 18,-32768,-32768,-32768,-32768,-32768, 372, 694,
618 226, 226, 188,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
619-32768,-32768,-32768,-32768, 67,-32768,-32768,-32768,-32768,-32768,
620-32768,-32768,-32768, 99,-32768,-32768, 268,-32768,-32768, 261,
621-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 267, 270,
622-32768,-32768, 169, 90, 112,-32768, 271, 348, 283, 319,
623 103, 109,-32768,-32768, 290, 188,-32768,-32768, 291, 57,
624-32768,-32768,-32768,-32768,-32768, 301, 373,-32768,-32768, -74,
625-32768,-32768, 299,-32768, 200, 188,-32768, 297, 204, 306,
626 298, -74,-32768,-32768,-32768, 307,-32768,-32768,-32768,-32768,
627-32768, 75,-32768, 7, 275, 318, 410, 407, 219,-32768,
628-32768, 219,-32768, 41, 74, 41,-32768,-32768, 326, 74,
629 41, 321, 305,-32768, 394, 14, 322, 60, 352, 60,
630 353, 188, 316, 188,-32768,-32768, 440, 320, 311, 327,
631 433, 324, 334, 323, 346,-32768,-32768,-32768,-32768,-32768,
632 328, 440, 440,-32768, 440, 188, 452, 338,-32768,-32768,
633 350, 358,-32768,-32768,-32768, 453,-32768,-32768,-32768,-32768,
634 329,-32768,-32768,-32768, 41,-32768,-32768, 381,-32768,-32768,
635-32768, 407, 354, 146,-32768,-32768,-32768, 355,-32768, 401,
636 366, 364,-32768,-32768, 41, 355, 407, 369, 407, 368,
637-32768, 370,-32768,-32768,-32768, 361,-32768,-32768, 291, 17,
638-32768,-32768, 371,-32768,-32768,-32768, 375,-32768,-32768, 23,
639 158,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 374,-32768,
640 275,-32768, 14,-32768, 355,-32768, 42,-32768, 41, 355,
641-32768,-32768, 355,-32768,-32768, 410,-32768,-32768, 203,-32768,
642 18, 289,-32768, 407, 376,-32768,-32768, 338,-32768,-32768,
643-32768,-32768,-32768,-32768,-32768,-32768,-32768, 453,-32768, 17,
644 140, 227, 376, 407,-32768, 38,-32768,-32768,-32768,-32768,
645-32768,-32768,-32768,-32768,-32768,-32768,-32768, 38, 11,-32768,
646-32768, 30,-32768,-32768,-32768, 486, 487,-32768
Lev Walkina00d6b32006-03-21 03:40:38 +0000647};
648
649static const short yypgoto[] = {-32768,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000650-32768, 485,-32768, 347,-32768, 479,-32768,-32768, 468,-32768,
651-32768, 439,-32768,-32768,-32768,-32768, 422,-32768, 382,-32768,
652-32768, 389, 377,-32768, -55,-32768,-32768, 342,-32768, 255,
653 224,-32768, 119,-32768, 125, 292,-32768,-32768, 241,-32768,
654-32768,-32768, 79, -270, -268, -71,-32768, -69,-32768, 244,
655-32768, 262, -135, 315, 325,-32768, -82,-32768, -130, -246,
656 -102, 126, -59, -31,-32768, -13,-32768,-32768,-32768, -209,
657-32768, 239, -63, 124, -41,-32768, 286,-32768, -121,-32768,
658-32768,-32768, 113,-32768,-32768,-32768,-32768,-32768,-32768, 128,
659 130, -252,-32768,-32768,-32768, 278, -116, -114,-32768,-32768,
660-32768,-32768, 1,-32768, 189, -7
Lev Walkina00d6b32006-03-21 03:40:38 +0000661};
662
663
Lev Walkin5045dfa2006-03-21 09:41:28 +0000664#define YYLAST 792
Lev Walkina00d6b32006-03-21 03:40:38 +0000665
666
667static const short yytable[] = { 15,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000668 5, 279, 281, 5, 192, 15, 178, 336, 311, 107,
669 121, 320, 322, 323, 436, 10, 168, 326, 327, 171,
670 180, 186, 10, 63, 180, 10, 188, 189, 437, 65,
671 289, 10, 72, 436, 179, 115, 79, 64, 179, 133,
672 71, 436, 63, 290, 78, 188, 189, 437, 65, 154,
673 10, 10, 11, 188, 189, 437, 64, 10, 10, 11,
674 155, 7, 1, 2, 10, 177, 79, 134, 10, 1,
675 2, 16, 378, 10, 78, 340, 67, 262, 1, 2,
676 165, 166, 167, 10, 168, 169, 170, 171, 118, 19,
677 10, 168, 388, 340, 171, 28, 213, 116, 73, 135,
678 133, 215, 159, 72, 260, 261, 160, 148, 79, 30,
679 262, 71, 182, 263, 336, 144, 78, 158, 443, 333,
680 192, 178, 398, 172, 438, 157, 216, 119, 134, 181,
681 187, 264, 269, 200, 410, 180, 415, 186, 312, 404,
682 193, 199, 180, 438, 445, 180, 263, 333, 286, 179,
683 12, 438, 283, 223, 225, 119, 179, 17, 430, 179,
684 135, 222, 224, 149, 173, 333, 68, -77, 444, 358,
685 119, 444, 295, 119, 251, 113, 318, 150, 252, 319,
686 177, 163, 29, 260, 261, 369, 215, 182, 119, 183,
687 321, 421, 215, 31, 166, 32, 10, 168, 169, 170,
688 171, 1, 2, 119, 337, 262, 253, 33, 226, 278,
689 254, 216, 431, 1, 2, 280, 432, 216, 350, 272,
690 352, 37, 227, 273, 165, 166, 167, 10, 168, 169,
691 170, 171, 1, 2, 10, 294, 228, 229, 34, 1,
692 2, 263, 367, 36, 181, 353, 187, 313, 66, 20,
693 317, 200, 230, 382, 200, 199, 80, 383, 21, 199,
694 364, 365, 199, 366, 411, 407, 384, 172, 338, 408,
695 346, 231, 346, 109, 389, 416, -259, 232, 417, 22,
696 -259, 23, 119, 10, 168, 194, 233, 171, 1, 2,
697 24, 110, 111, 234, 235, 166, 236, 10, 168, 169,
698 170, 171, 1, 2, 297, 298, 299, 300, 173, 226,
699 419, 337, 112, 413, 420, 301, 1, 2, 188, 189,
700 203, 204, 117, 227, 380, 195, 125, 297, 298, 299,
701 300, 292, 293, 188, 189, 83, 84, 228, 229, 391,
702 126, 391, 127, 82, 376, 377, 427, 428, 128, 129,
703 130, 136, 401, 230, 83, 84, 137, 138, 140, 141,
704 143, 146, 406, 147, 161, 207, 85, 38, 86, 163,
705 87, 162, 231, 313, 220, 338, 255, 256, 232, 346,
706 88, 199, 259, 258, 89, 274, 275, 233, 90, 276,
707 277, 91, 41, 42, 43, 235, 406, 236, 282, 284,
708 287, 288, 92, 45, 296, 304, 306, 93, 46, 94,
709 47, 95, 401, 308, 315, 10, 435, 324, 48, 328,
710 96, 97, 332, 347, 349, 351, 354, 49, 355, 50,
711 361, 356, 216, 363, 51, 98, 52, 53, 54, 166,
712 360, 10, 168, 169, 170, 171, 166, 99, 10, 168,
713 169, 170, 171, 1, 2, 362, 370, 375, 166, 373,
714 10, 168, 169, 170, 171, 10, 379, 374, 119, 381,
715 1, 2, 385, 386, 227, 387, 392, 394, 397, 395,
716 409, 228, 402, 38, 403, 447, 448, 6, 228, 229,
717 201, 18, 424, 35, 81, 114, 357, 145, 39, 142,
718 228, 221, 40, 348, 230, 414, 309, 412, 41, 42,
719 43, 285, 164, 331, 44, 368, 442, 314, 270, 45,
720 339, 418, 232, 231, 46, 422, 47, 307, 271, 232,
721 359, 310, 429, 423, 48, 425, 0, 393, 233, 0,
722 0, 232, 0, 49, 0, 50, 235, 0, 236, 0,
723 51, 0, 52, 53, 54, 83, 84, 0, 0, 0,
724 0, 0, 0, 208, 0, 0, 0, 85, 38, 86,
725 0, 87, 209, 0, 0, 0, 0, 0, 0, 0,
726 0, 88, 0, 0, 0, 89, 0, 0, 0, 90,
727 0, 0, 91, 41, 42, 43, 0, 0, 0, 0,
728 0, 210, 0, 92, 45, 0, 0, 0, 93, 46,
729 94, 47, 95, 0, 0, 0, 0, 0, 0, 48,
730 0, 96, 97, 211, 212, 0, 0, 0, 49, 0,
731 50, 83, 84, 0, 0, 51, 98, 52, 53, 54,
732 0, 0, 0, 85, 38, 86, 0, 87, 0, 0,
Lev Walkina00d6b32006-03-21 03:40:38 +0000733 0, 0, 0, 0, 0, 0, 0, 88, 0, 0,
734 0, 89, 0, 0, 0, 90, 0, 0, 91, 41,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000735 42, 43, 0, 0, 0, 0, 0, 0, 0, 92,
Lev Walkina00d6b32006-03-21 03:40:38 +0000736 45, 0, 0, 0, 93, 46, 94, 47, 95, 0,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000737 0, 0, 0, 0, 0, 48, 0, 96, 97, 0,
738 0, 0, 0, 0, 49, 0, 50, 1, 2, 0,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000739 0, 51, 98, 52, 53, 54, 0, 0, 0, 85,
740 38, 86, 0, 87, 0, 0, 0, 0, 0, 0,
741 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
742 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
743 0, 0, 0, 0, 0, 92, 45, 0, 0, 0,
744 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
745 0, 48, 0, 96, 97, 0, 0, 0, 0, 0,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000746 49, 0, 50, 0, 0, 0, 0, 51, 98, 52,
747 53, 54
Lev Walkina00d6b32006-03-21 03:40:38 +0000748};
749
750static const short yycheck[] = { 7,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000751 0, 211, 212, 3, 140, 13, 137, 276, 255, 65,
752 82, 264, 265, 266, 4, 9, 10, 270, 271, 13,
753 137, 138, 9, 37, 141, 9, 16, 17, 18, 37,
754 105, 9, 40, 4, 137, 50, 44, 37, 141, 99,
755 40, 4, 56, 118, 44, 16, 17, 18, 56, 45,
756 9, 9, 10, 16, 17, 18, 56, 9, 9, 10,
757 56, 107, 14, 15, 9, 137, 74, 99, 9, 14,
758 15, 38, 325, 9, 74, 34, 21, 37, 14, 15,
759 6, 7, 8, 9, 10, 11, 12, 13, 32, 109,
760 9, 10, 345, 34, 13, 10, 152, 112, 50, 99,
761 160, 84, 108, 111, 15, 16, 112, 23, 116, 88,
762 37, 111, 106, 73, 383, 115, 116, 125, 108, 106,
763 256, 252, 106, 49, 114, 125, 109, 114, 160, 137,
764 138, 203, 204, 141, 381, 252, 389, 254, 255, 117,
765 140, 141, 259, 114, 115, 262, 73, 106, 220, 252,
766 108, 114, 216, 161, 162, 114, 259, 108, 19, 262,
767 160, 161, 162, 79, 90, 106, 111, 108, 439, 291,
768 114, 442, 236, 114, 108, 111, 259, 93, 112, 262,
769 252, 107, 61, 15, 16, 307, 84, 106, 114, 108,
770 117, 401, 84, 88, 7, 57, 9, 10, 11, 12,
771 13, 14, 15, 114, 276, 37, 108, 88, 21, 107,
772 112, 109, 73, 14, 15, 107, 77, 109, 282, 108,
773 284, 25, 35, 112, 6, 7, 8, 9, 10, 11,
774 12, 13, 14, 15, 9, 235, 49, 50, 3, 14,
775 15, 73, 306, 110, 252, 287, 254, 255, 15, 15,
776 258, 259, 65, 108, 262, 255, 43, 112, 24, 259,
777 302, 303, 262, 305, 381, 108, 338, 49, 276, 112,
778 278, 84, 280, 111, 346, 390, 108, 90, 393, 45,
779 112, 47, 114, 9, 10, 67, 99, 13, 14, 15,
780 56, 111, 112, 106, 107, 7, 109, 9, 10, 11,
781 12, 13, 14, 15, 101, 102, 103, 104, 90, 21,
782 108, 383, 107, 385, 112, 112, 14, 15, 16, 17,
783 16, 17, 107, 35, 332, 107, 117, 101, 102, 103,
784 104, 33, 34, 16, 17, 14, 15, 49, 50, 347,
785 85, 349, 85, 3, 16, 17, 416, 417, 75, 55,
786 85, 3, 360, 65, 14, 15, 107, 107, 117, 3,
787 108, 108, 370, 107, 113, 10, 26, 27, 28, 107,
788 30, 113, 84, 381, 3, 383, 109, 117, 90, 387,
789 40, 381, 113, 117, 44, 115, 39, 99, 48, 107,
790 72, 51, 52, 53, 54, 107, 404, 109, 109, 109,
791 100, 29, 62, 63, 108, 100, 109, 67, 68, 69,
792 70, 71, 420, 107, 5, 9, 424, 92, 78, 99,
793 80, 81, 29, 72, 72, 110, 107, 87, 118, 89,
794 108, 105, 109, 106, 94, 95, 96, 97, 98, 7,
795 107, 9, 10, 11, 12, 13, 7, 107, 9, 10,
796 11, 12, 13, 14, 15, 110, 119, 5, 7, 110,
797 9, 10, 11, 12, 13, 9, 86, 110, 114, 116,
798 14, 15, 72, 108, 35, 112, 108, 110, 118, 110,
799 107, 49, 112, 27, 110, 0, 0, 3, 49, 50,
800 144, 13, 117, 26, 56, 74, 64, 116, 42, 111,
801 49, 160, 46, 280, 65, 387, 252, 383, 52, 53,
802 54, 220, 136, 273, 58, 64, 438, 256, 204, 63,
803 277, 396, 90, 84, 68, 402, 70, 242, 204, 90,
804 292, 254, 420, 404, 78, 408, -1, 349, 99, -1,
805 -1, 90, -1, 87, -1, 89, 107, -1, 109, -1,
806 94, -1, 96, 97, 98, 14, 15, -1, -1, -1,
807 -1, -1, -1, 22, -1, -1, -1, 26, 27, 28,
808 -1, 30, 31, -1, -1, -1, -1, -1, -1, -1,
809 -1, 40, -1, -1, -1, 44, -1, -1, -1, 48,
810 -1, -1, 51, 52, 53, 54, -1, -1, -1, -1,
811 -1, 60, -1, 62, 63, -1, -1, -1, 67, 68,
812 69, 70, 71, -1, -1, -1, -1, -1, -1, 78,
813 -1, 80, 81, 82, 83, -1, -1, -1, 87, -1,
814 89, 14, 15, -1, -1, 94, 95, 96, 97, 98,
815 -1, -1, -1, 26, 27, 28, -1, 30, -1, -1,
Lev Walkina00d6b32006-03-21 03:40:38 +0000816 -1, -1, -1, -1, -1, -1, -1, 40, -1, -1,
817 -1, 44, -1, -1, -1, 48, -1, -1, 51, 52,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000818 53, 54, -1, -1, -1, -1, -1, -1, -1, 62,
Lev Walkina00d6b32006-03-21 03:40:38 +0000819 63, -1, -1, -1, 67, 68, 69, 70, 71, -1,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000820 -1, -1, -1, -1, -1, 78, -1, 80, 81, -1,
821 -1, -1, -1, -1, 87, -1, 89, 14, 15, -1,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000822 -1, 94, 95, 96, 97, 98, -1, -1, -1, 26,
823 27, 28, -1, 30, -1, -1, -1, -1, -1, -1,
824 -1, -1, -1, 40, -1, -1, -1, 44, -1, -1,
825 -1, 48, -1, -1, 51, 52, 53, 54, -1, -1,
826 -1, -1, -1, -1, -1, 62, 63, -1, -1, -1,
827 67, 68, 69, 70, 71, -1, -1, -1, -1, -1,
828 -1, 78, -1, 80, 81, -1, -1, -1, -1, -1,
Lev Walkin5045dfa2006-03-21 09:41:28 +0000829 87, -1, 89, -1, -1, -1, -1, 94, 95, 96,
830 97, 98
Lev Walkina00d6b32006-03-21 03:40:38 +0000831};
832/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
833#line 3 "/usr/share/bison.simple"
834/* This file comes from bison-1.28. */
835
836/* Skeleton output parser for bison,
837 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
838
839 This program is free software; you can redistribute it and/or modify
840 it under the terms of the GNU General Public License as published by
841 the Free Software Foundation; either version 2, or (at your option)
842 any later version.
843
844 This program is distributed in the hope that it will be useful,
845 but WITHOUT ANY WARRANTY; without even the implied warranty of
846 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
847 GNU General Public License for more details.
848
849 You should have received a copy of the GNU General Public License
850 along with this program; if not, write to the Free Software
851 Foundation, Inc., 59 Temple Place - Suite 330,
852 Boston, MA 02111-1307, USA. */
853
854/* As a special exception, when this file is copied by Bison into a
855 Bison output file, you may use that output file without restriction.
856 This special exception was added by the Free Software Foundation
857 in version 1.24 of Bison. */
858
859/* This is the parser code that is written into each bison parser
860 when the %semantic_parser declaration is not specified in the grammar.
861 It was written by Richard Stallman by simplifying the hairy parser
862 used when %semantic_parser is specified. */
863
864#ifndef YYSTACK_USE_ALLOCA
865#ifdef alloca
866#define YYSTACK_USE_ALLOCA
867#else /* alloca not defined */
868#ifdef __GNUC__
869#define YYSTACK_USE_ALLOCA
870#define alloca __builtin_alloca
871#else /* not GNU C. */
872#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
873#define YYSTACK_USE_ALLOCA
874#include <alloca.h>
875#else /* not sparc */
876/* We think this test detects Watcom and Microsoft C. */
877/* This used to test MSDOS, but that is a bad idea
878 since that symbol is in the user namespace. */
879#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
880#if 0 /* No need for malloc.h, which pollutes the namespace;
881 instead, just don't use alloca. */
882#include <malloc.h>
883#endif
884#else /* not MSDOS, or __TURBOC__ */
885#if defined(_AIX)
886/* I don't know what this was needed for, but it pollutes the namespace.
887 So I turned it off. rms, 2 May 1997. */
888/* #include <malloc.h> */
889 #pragma alloca
890#define YYSTACK_USE_ALLOCA
891#else /* not MSDOS, or __TURBOC__, or _AIX */
892#if 0
893#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
894 and on HPUX 10. Eventually we can turn this on. */
895#define YYSTACK_USE_ALLOCA
896#define alloca __builtin_alloca
897#endif /* __hpux */
898#endif
899#endif /* not _AIX */
900#endif /* not MSDOS, or __TURBOC__ */
901#endif /* not sparc */
902#endif /* not GNU C */
903#endif /* alloca not defined */
904#endif /* YYSTACK_USE_ALLOCA not defined */
905
906#ifdef YYSTACK_USE_ALLOCA
907#define YYSTACK_ALLOC alloca
Lev Walkinf15320b2004-06-03 03:38:44 +0000908#else
Lev Walkina00d6b32006-03-21 03:40:38 +0000909#define YYSTACK_ALLOC malloc
Lev Walkinf15320b2004-06-03 03:38:44 +0000910#endif
911
Lev Walkina00d6b32006-03-21 03:40:38 +0000912/* Note: there must be only one dollar sign in this file.
913 It is replaced by the list of actions, each action
914 as one case of the switch. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000915
916#define yyerrok (yyerrstatus = 0)
917#define yyclearin (yychar = YYEMPTY)
Lev Walkina00d6b32006-03-21 03:40:38 +0000918#define YYEMPTY -2
Lev Walkinf15320b2004-06-03 03:38:44 +0000919#define YYEOF 0
920#define YYACCEPT goto yyacceptlab
Lev Walkina00d6b32006-03-21 03:40:38 +0000921#define YYABORT goto yyabortlab
922#define YYERROR goto yyerrlab1
923/* Like YYERROR except do call yyerror.
924 This remains here temporarily to ease the
925 transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +0000926 Once GCC version 2 has supplanted version 1, this can go. */
927#define YYFAIL goto yyerrlab
928#define YYRECOVERING() (!!yyerrstatus)
Lev Walkina00d6b32006-03-21 03:40:38 +0000929#define YYBACKUP(token, value) \
Lev Walkinf15320b2004-06-03 03:38:44 +0000930do \
931 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkina00d6b32006-03-21 03:40:38 +0000932 { yychar = (token), yylval = (value); \
933 yychar1 = YYTRANSLATE (yychar); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000934 YYPOPSTACK; \
935 goto yybackup; \
936 } \
937 else \
Lev Walkina00d6b32006-03-21 03:40:38 +0000938 { yyerror ("syntax error: cannot back up"); YYERROR; } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000939while (0)
940
941#define YYTERROR 1
942#define YYERRCODE 256
943
Lev Walkina00d6b32006-03-21 03:40:38 +0000944#ifndef YYPURE
945#define YYLEX yylex()
Lev Walkinf15320b2004-06-03 03:38:44 +0000946#endif
947
Lev Walkina00d6b32006-03-21 03:40:38 +0000948#ifdef YYPURE
949#ifdef YYLSP_NEEDED
Lev Walkin1004aa92004-09-08 00:28:11 +0000950#ifdef YYLEX_PARAM
Lev Walkina00d6b32006-03-21 03:40:38 +0000951#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
Lev Walkin1004aa92004-09-08 00:28:11 +0000952#else
Lev Walkina00d6b32006-03-21 03:40:38 +0000953#define YYLEX yylex(&yylval, &yylloc)
954#endif
955#else /* not YYLSP_NEEDED */
956#ifdef YYLEX_PARAM
957#define YYLEX yylex(&yylval, YYLEX_PARAM)
958#else
959#define YYLEX yylex(&yylval)
960#endif
961#endif /* not YYLSP_NEEDED */
Lev Walkin1004aa92004-09-08 00:28:11 +0000962#endif
Lev Walkinfb872bd2006-03-18 06:53:11 +0000963
Lev Walkina00d6b32006-03-21 03:40:38 +0000964/* If nonreentrant, generate the variables here */
Lev Walkinfb872bd2006-03-18 06:53:11 +0000965
Lev Walkina00d6b32006-03-21 03:40:38 +0000966#ifndef YYPURE
Lev Walkinfb872bd2006-03-18 06:53:11 +0000967
Lev Walkina00d6b32006-03-21 03:40:38 +0000968int yychar; /* the lookahead symbol */
969YYSTYPE yylval; /* the semantic value of the */
970 /* lookahead symbol */
Lev Walkinfb872bd2006-03-18 06:53:11 +0000971
Lev Walkina00d6b32006-03-21 03:40:38 +0000972#ifdef YYLSP_NEEDED
973YYLTYPE yylloc; /* location data for the lookahead */
974 /* symbol */
Lev Walkin1004aa92004-09-08 00:28:11 +0000975#endif
Lev Walkinfb872bd2006-03-18 06:53:11 +0000976
Lev Walkina00d6b32006-03-21 03:40:38 +0000977int yynerrs; /* number of parse errors so far */
978#endif /* not YYPURE */
Lev Walkinfb872bd2006-03-18 06:53:11 +0000979
Lev Walkina00d6b32006-03-21 03:40:38 +0000980#if YYDEBUG != 0
981int yydebug; /* nonzero means print parse trace */
982/* Since this is uninitialized, it does not stop multiple parsers
983 from coexisting. */
Lev Walkin1004aa92004-09-08 00:28:11 +0000984#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000985
Lev Walkina00d6b32006-03-21 03:40:38 +0000986/* YYINITDEPTH indicates the initial size of the parser's stacks */
Lev Walkinf15320b2004-06-03 03:38:44 +0000987
Lev Walkinf15320b2004-06-03 03:38:44 +0000988#ifndef YYINITDEPTH
Lev Walkina00d6b32006-03-21 03:40:38 +0000989#define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +0000990#endif
991
Lev Walkina00d6b32006-03-21 03:40:38 +0000992/* YYMAXDEPTH is the maximum size the stacks can grow to
993 (effective only if the built-in stack extension method is used). */
Lev Walkinf15320b2004-06-03 03:38:44 +0000994
Lev Walkina00d6b32006-03-21 03:40:38 +0000995#if YYMAXDEPTH == 0
996#undef YYMAXDEPTH
997#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000998
999#ifndef YYMAXDEPTH
Lev Walkina00d6b32006-03-21 03:40:38 +00001000#define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +00001001#endif
1002
Lev Walkina00d6b32006-03-21 03:40:38 +00001003/* Define __yy_memcpy. Note that the size argument
1004 should be passed with type unsigned int, because that is what the non-GCC
1005 definitions require. With GCC, __builtin_memcpy takes an arg
1006 of type size_t, but it can handle unsigned int. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001007
Lev Walkina00d6b32006-03-21 03:40:38 +00001008#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
1009#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
1010#else /* not GNU C or C++ */
1011#ifndef __cplusplus
Lev Walkinf15320b2004-06-03 03:38:44 +00001012
Lev Walkina00d6b32006-03-21 03:40:38 +00001013/* This is the most reliable way to avoid incompatibilities
1014 in available built-in functions on various systems. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001015static void
Lev Walkina00d6b32006-03-21 03:40:38 +00001016__yy_memcpy (to, from, count)
1017 char *to;
1018 char *from;
1019 unsigned int count;
1020{
1021 register char *f = from;
1022 register char *t = to;
1023 register int i = count;
1024
1025 while (i-- > 0)
1026 *t++ = *f++;
1027}
1028
1029#else /* __cplusplus */
1030
1031/* This is the most reliable way to avoid incompatibilities
1032 in available built-in functions on various systems. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001033static void
Lev Walkina00d6b32006-03-21 03:40:38 +00001034__yy_memcpy (char *to, char *from, unsigned int count)
1035{
1036 register char *t = to;
1037 register char *f = from;
1038 register int i = count;
1039
1040 while (i-- > 0)
1041 *t++ = *f++;
1042}
1043
Lev Walkinfb872bd2006-03-18 06:53:11 +00001044#endif
Lev Walkinfb872bd2006-03-18 06:53:11 +00001045#endif
Lev Walkinfb872bd2006-03-18 06:53:11 +00001046
Lev Walkina00d6b32006-03-21 03:40:38 +00001047#line 217 "/usr/share/bison.simple"
Lev Walkinfb872bd2006-03-18 06:53:11 +00001048
Lev Walkina00d6b32006-03-21 03:40:38 +00001049/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1050 into yyparse. The argument should have type void *.
1051 It should actually point to an object.
1052 Grammar actions can access the variable by casting it
1053 to the proper pointer type. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001054
1055#ifdef YYPARSE_PARAM
Lev Walkina00d6b32006-03-21 03:40:38 +00001056#ifdef __cplusplus
1057#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1058#define YYPARSE_PARAM_DECL
1059#else /* not __cplusplus */
1060#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1061#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1062#endif /* not __cplusplus */
1063#else /* not YYPARSE_PARAM */
1064#define YYPARSE_PARAM_ARG
1065#define YYPARSE_PARAM_DECL
1066#endif /* not YYPARSE_PARAM */
1067
1068/* Prevent warning if -Wstrict-prototypes. */
1069#ifdef __GNUC__
1070#ifdef YYPARSE_PARAM
1071int yyparse (void *);
1072#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001073int yyparse (void);
Lev Walkinfb872bd2006-03-18 06:53:11 +00001074#endif
Lev Walkina00d6b32006-03-21 03:40:38 +00001075#endif
Lev Walkinfb872bd2006-03-18 06:53:11 +00001076
Lev Walkinfb872bd2006-03-18 06:53:11 +00001077int
Lev Walkina00d6b32006-03-21 03:40:38 +00001078yyparse(YYPARSE_PARAM_ARG)
1079 YYPARSE_PARAM_DECL
Lev Walkinfb872bd2006-03-18 06:53:11 +00001080{
Lev Walkina00d6b32006-03-21 03:40:38 +00001081 register int yystate;
1082 register int yyn;
1083 register short *yyssp;
1084 register YYSTYPE *yyvsp;
1085 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1086 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001087
Lev Walkina00d6b32006-03-21 03:40:38 +00001088 short yyssa[YYINITDEPTH]; /* the state stack */
1089 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001090
Lev Walkina00d6b32006-03-21 03:40:38 +00001091 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1092 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001093
Lev Walkina00d6b32006-03-21 03:40:38 +00001094#ifdef YYLSP_NEEDED
1095 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1096 YYLTYPE *yyls = yylsa;
1097 YYLTYPE *yylsp;
Lev Walkinfb872bd2006-03-18 06:53:11 +00001098
Lev Walkina00d6b32006-03-21 03:40:38 +00001099#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1100#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001101#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkina00d6b32006-03-21 03:40:38 +00001102#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001103
Lev Walkina00d6b32006-03-21 03:40:38 +00001104 int yystacksize = YYINITDEPTH;
1105 int yyfree_stacks = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001106
Lev Walkina00d6b32006-03-21 03:40:38 +00001107#ifdef YYPURE
1108 int yychar;
1109 YYSTYPE yylval;
1110 int yynerrs;
1111#ifdef YYLSP_NEEDED
1112 YYLTYPE yylloc;
1113#endif
1114#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001115
Lev Walkina00d6b32006-03-21 03:40:38 +00001116 YYSTYPE yyval; /* the variable used to return */
1117 /* semantic values from the action */
1118 /* routines */
Lev Walkinf15320b2004-06-03 03:38:44 +00001119
1120 int yylen;
1121
Lev Walkina00d6b32006-03-21 03:40:38 +00001122#if YYDEBUG != 0
1123 if (yydebug)
1124 fprintf(stderr, "Starting parse\n");
1125#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001126
1127 yystate = 0;
1128 yyerrstatus = 0;
1129 yynerrs = 0;
1130 yychar = YYEMPTY; /* Cause a token to be read. */
1131
1132 /* Initialize stack pointers.
1133 Waste one element of value and location stack
1134 so that they stay on the same level as the state stack.
1135 The wasted elements are never initialized. */
1136
Lev Walkina00d6b32006-03-21 03:40:38 +00001137 yyssp = yyss - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001138 yyvsp = yyvs;
Lev Walkina00d6b32006-03-21 03:40:38 +00001139#ifdef YYLSP_NEEDED
1140 yylsp = yyls;
1141#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001142
Lev Walkina00d6b32006-03-21 03:40:38 +00001143/* Push a new state, which is found in yystate . */
1144/* In all cases, when you get here, the value and location stacks
1145 have just been pushed. so pushing a state here evens the stacks. */
1146yynewstate:
Lev Walkinf15320b2004-06-03 03:38:44 +00001147
Lev Walkina00d6b32006-03-21 03:40:38 +00001148 *++yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001149
Lev Walkina00d6b32006-03-21 03:40:38 +00001150 if (yyssp >= yyss + yystacksize - 1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001151 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001152 /* Give user a chance to reallocate the stack */
1153 /* Use copies of these so that the &'s don't force the real ones into memory. */
1154 YYSTYPE *yyvs1 = yyvs;
1155 short *yyss1 = yyss;
1156#ifdef YYLSP_NEEDED
1157 YYLTYPE *yyls1 = yyls;
1158#endif
1159
Lev Walkinf15320b2004-06-03 03:38:44 +00001160 /* Get the current used size of the three stacks, in elements. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001161 int size = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001162
1163#ifdef yyoverflow
Lev Walkina00d6b32006-03-21 03:40:38 +00001164 /* Each stack pointer address is followed by the size of
1165 the data in use in that stack, in bytes. */
1166#ifdef YYLSP_NEEDED
1167 /* This used to be a conditional around just the two extra args,
1168 but that might be undefined if yyoverflow is a macro. */
1169 yyoverflow("parser stack overflow",
1170 &yyss1, size * sizeof (*yyssp),
1171 &yyvs1, size * sizeof (*yyvsp),
1172 &yyls1, size * sizeof (*yylsp),
1173 &yystacksize);
1174#else
1175 yyoverflow("parser stack overflow",
1176 &yyss1, size * sizeof (*yyssp),
1177 &yyvs1, size * sizeof (*yyvsp),
1178 &yystacksize);
1179#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001180
Lev Walkina00d6b32006-03-21 03:40:38 +00001181 yyss = yyss1; yyvs = yyvs1;
1182#ifdef YYLSP_NEEDED
1183 yyls = yyls1;
1184#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001185#else /* no yyoverflow */
1186 /* Extend the stack our own way. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001187 if (yystacksize >= YYMAXDEPTH)
1188 {
1189 yyerror("parser stack overflow");
1190 if (yyfree_stacks)
1191 {
1192 free (yyss);
1193 free (yyvs);
1194#ifdef YYLSP_NEEDED
1195 free (yyls);
1196#endif
1197 }
1198 return 2;
1199 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001200 yystacksize *= 2;
Lev Walkina00d6b32006-03-21 03:40:38 +00001201 if (yystacksize > YYMAXDEPTH)
Lev Walkinf15320b2004-06-03 03:38:44 +00001202 yystacksize = YYMAXDEPTH;
Lev Walkina00d6b32006-03-21 03:40:38 +00001203#ifndef YYSTACK_USE_ALLOCA
1204 yyfree_stacks = 1;
1205#endif
1206 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1207 __yy_memcpy ((char *)yyss, (char *)yyss1,
1208 size * (unsigned int) sizeof (*yyssp));
1209 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1210 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1211 size * (unsigned int) sizeof (*yyvsp));
1212#ifdef YYLSP_NEEDED
1213 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1214 __yy_memcpy ((char *)yyls, (char *)yyls1,
1215 size * (unsigned int) sizeof (*yylsp));
1216#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001217#endif /* no yyoverflow */
1218
Lev Walkina00d6b32006-03-21 03:40:38 +00001219 yyssp = yyss + size - 1;
1220 yyvsp = yyvs + size - 1;
1221#ifdef YYLSP_NEEDED
1222 yylsp = yyls + size - 1;
1223#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001224
Lev Walkina00d6b32006-03-21 03:40:38 +00001225#if YYDEBUG != 0
1226 if (yydebug)
1227 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1228#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001229
Lev Walkina00d6b32006-03-21 03:40:38 +00001230 if (yyssp >= yyss + yystacksize - 1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001231 YYABORT;
1232 }
1233
Lev Walkina00d6b32006-03-21 03:40:38 +00001234#if YYDEBUG != 0
1235 if (yydebug)
1236 fprintf(stderr, "Entering state %d\n", yystate);
1237#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001238
1239 goto yybackup;
Lev Walkina00d6b32006-03-21 03:40:38 +00001240 yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001241
1242/* Do appropriate processing given the current state. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001243/* Read a lookahead token if we need one and don't already have one. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001244/* yyresume: */
1245
Lev Walkina00d6b32006-03-21 03:40:38 +00001246 /* First try to decide what to do without reference to lookahead token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001247
1248 yyn = yypact[yystate];
Lev Walkina00d6b32006-03-21 03:40:38 +00001249 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001250 goto yydefault;
1251
Lev Walkina00d6b32006-03-21 03:40:38 +00001252 /* Not known => get a lookahead token if don't already have one. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001253
Lev Walkina00d6b32006-03-21 03:40:38 +00001254 /* yychar is either YYEMPTY or YYEOF
1255 or a valid token in external form. */
1256
Lev Walkinf15320b2004-06-03 03:38:44 +00001257 if (yychar == YYEMPTY)
1258 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001259#if YYDEBUG != 0
1260 if (yydebug)
1261 fprintf(stderr, "Reading a token: ");
1262#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001263 yychar = YYLEX;
1264 }
1265
Lev Walkina00d6b32006-03-21 03:40:38 +00001266 /* Convert token to internal form (in yychar1) for indexing tables with */
1267
1268 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001269 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001270 yychar1 = 0;
1271 yychar = YYEOF; /* Don't call YYLEX any more */
1272
1273#if YYDEBUG != 0
1274 if (yydebug)
1275 fprintf(stderr, "Now at end of input.\n");
1276#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001277 }
1278 else
1279 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001280 yychar1 = YYTRANSLATE(yychar);
1281
1282#if YYDEBUG != 0
1283 if (yydebug)
1284 {
1285 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1286 /* Give the individual parser a way to print the precise meaning
1287 of a token, for further debugging info. */
1288#ifdef YYPRINT
1289 YYPRINT (stderr, yychar, yylval);
1290#endif
1291 fprintf (stderr, ")\n");
1292 }
1293#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001294 }
1295
Lev Walkina00d6b32006-03-21 03:40:38 +00001296 yyn += yychar1;
1297 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001298 goto yydefault;
Lev Walkina00d6b32006-03-21 03:40:38 +00001299
Lev Walkinf15320b2004-06-03 03:38:44 +00001300 yyn = yytable[yyn];
Lev Walkina00d6b32006-03-21 03:40:38 +00001301
1302 /* yyn is what to do for this token type in this state.
1303 Negative => reduce, -yyn is rule number.
1304 Positive => shift, yyn is new state.
1305 New state is final state => don't bother to shift,
1306 just return success.
1307 0, or most negative number => error. */
1308
1309 if (yyn < 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001310 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001311 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001312 goto yyerrlab;
1313 yyn = -yyn;
1314 goto yyreduce;
1315 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001316 else if (yyn == 0)
1317 goto yyerrlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001318
1319 if (yyn == YYFINAL)
1320 YYACCEPT;
1321
Lev Walkina00d6b32006-03-21 03:40:38 +00001322 /* Shift the lookahead token. */
1323
1324#if YYDEBUG != 0
1325 if (yydebug)
1326 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1327#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001328
1329 /* Discard the token being shifted unless it is eof. */
1330 if (yychar != YYEOF)
1331 yychar = YYEMPTY;
1332
1333 *++yyvsp = yylval;
Lev Walkina00d6b32006-03-21 03:40:38 +00001334#ifdef YYLSP_NEEDED
1335 *++yylsp = yylloc;
1336#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001337
Lev Walkina00d6b32006-03-21 03:40:38 +00001338 /* count tokens shifted since error; after three, turn off error status. */
1339 if (yyerrstatus) yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001340
1341 yystate = yyn;
1342 goto yynewstate;
1343
Lev Walkina00d6b32006-03-21 03:40:38 +00001344/* Do the default action for the current state. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001345yydefault:
Lev Walkina00d6b32006-03-21 03:40:38 +00001346
Lev Walkinf15320b2004-06-03 03:38:44 +00001347 yyn = yydefact[yystate];
1348 if (yyn == 0)
1349 goto yyerrlab;
1350
Lev Walkina00d6b32006-03-21 03:40:38 +00001351/* Do a reduction. yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001352yyreduce:
1353 yylen = yyr2[yyn];
Lev Walkina00d6b32006-03-21 03:40:38 +00001354 if (yylen > 0)
1355 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Lev Walkinf15320b2004-06-03 03:38:44 +00001356
Lev Walkina00d6b32006-03-21 03:40:38 +00001357#if YYDEBUG != 0
1358 if (yydebug)
Lev Walkinf15320b2004-06-03 03:38:44 +00001359 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001360 int i;
1361
1362 fprintf (stderr, "Reducing via rule %d (line %d), ",
1363 yyn, yyrline[yyn]);
1364
1365 /* Print the symbols being reduced, and their result. */
1366 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1367 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1368 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
1369 }
1370#endif
1371
1372
1373 switch (yyn) {
1374
1375case 1:
Lev Walkin557f27d2006-03-21 07:46:48 +00001376#line 324 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001377{
1378 *(void **)param = yyvsp[0].a_grammar;
1379 ;
1380 break;}
1381case 2:
Lev Walkin557f27d2006-03-21 07:46:48 +00001382#line 330 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001383{
1384 yyval.a_grammar = asn1p_new();
1385 checkmem(yyval.a_grammar);
1386 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
1387 ;
1388 break;}
1389case 3:
Lev Walkin557f27d2006-03-21 07:46:48 +00001390#line 335 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001391{
1392 yyval.a_grammar = yyvsp[-1].a_grammar;
1393 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
1394 ;
1395 break;}
1396case 4:
Lev Walkin557f27d2006-03-21 07:46:48 +00001397#line 356 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001398{
Lev Walkinfb872bd2006-03-18 06:53:11 +00001399
Lev Walkina00d6b32006-03-21 03:40:38 +00001400 if(yyvsp[-1].a_module) {
1401 yyval.a_module = yyvsp[-1].a_module;
Lev Walkinf15320b2004-06-03 03:38:44 +00001402 } else {
1403 /* There's a chance that a module is just plain empty */
Lev Walkina00d6b32006-03-21 03:40:38 +00001404 yyval.a_module = asn1p_module_new();
Lev Walkinf15320b2004-06-03 03:38:44 +00001405 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001406 checkmem(yyval.a_module);
Lev Walkinf15320b2004-06-03 03:38:44 +00001407
Lev Walkina00d6b32006-03-21 03:40:38 +00001408 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
1409 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1410 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
1411 ;
1412 break;}
1413case 5:
Lev Walkin557f27d2006-03-21 07:46:48 +00001414#line 377 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001415{ yyval.a_oid = 0; ;
1416 break;}
1417case 6:
Lev Walkin557f27d2006-03-21 07:46:48 +00001418#line 378 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001419{ yyval.a_oid = yyvsp[0].a_oid; ;
1420 break;}
1421case 7:
Lev Walkin557f27d2006-03-21 07:46:48 +00001422#line 382 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001423{
1424 yyval.a_oid = yyvsp[-1].a_oid;
1425 ;
1426 break;}
1427case 8:
Lev Walkin557f27d2006-03-21 07:46:48 +00001428#line 385 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001429{
1430 yyval.a_oid = 0;
1431 ;
1432 break;}
1433case 9:
Lev Walkin557f27d2006-03-21 07:46:48 +00001434#line 391 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001435{
1436 yyval.a_oid = asn1p_oid_new();
1437 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1438 if(yyvsp[0].a_oid_arc.name)
1439 free(yyvsp[0].a_oid_arc.name);
1440 ;
1441 break;}
1442case 10:
Lev Walkin557f27d2006-03-21 07:46:48 +00001443#line 397 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001444{
1445 yyval.a_oid = yyvsp[-1].a_oid;
1446 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1447 if(yyvsp[0].a_oid_arc.name)
1448 free(yyvsp[0].a_oid_arc.name);
1449 ;
1450 break;}
1451case 11:
Lev Walkin557f27d2006-03-21 07:46:48 +00001452#line 406 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001453{ /* iso */
1454 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1455 yyval.a_oid_arc.number = -1;
1456 ;
1457 break;}
1458case 12:
Lev Walkin557f27d2006-03-21 07:46:48 +00001459#line 410 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001460{ /* iso(1) */
1461 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1462 yyval.a_oid_arc.number = yyvsp[-1].a_int;
1463 ;
1464 break;}
1465case 13:
Lev Walkin557f27d2006-03-21 07:46:48 +00001466#line 414 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001467{ /* 1 */
1468 yyval.a_oid_arc.name = 0;
1469 yyval.a_oid_arc.number = yyvsp[0].a_int;
1470 ;
1471 break;}
1472case 14:
Lev Walkin557f27d2006-03-21 07:46:48 +00001473#line 424 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001474{ yyval.a_module_flags = MSF_NOFLAGS; ;
1475 break;}
1476case 15:
Lev Walkin557f27d2006-03-21 07:46:48 +00001477#line 425 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001478{
1479 yyval.a_module_flags = yyvsp[0].a_module_flags;
1480 ;
1481 break;}
1482case 16:
Lev Walkin557f27d2006-03-21 07:46:48 +00001483#line 434 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001484{
1485 yyval.a_module_flags = yyvsp[0].a_module_flags;
1486 ;
1487 break;}
1488case 17:
Lev Walkin557f27d2006-03-21 07:46:48 +00001489#line 437 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001490{
1491 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
1492 ;
1493 break;}
1494case 18:
Lev Walkin557f27d2006-03-21 07:46:48 +00001495#line 446 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001496{
1497 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
1498 ;
1499 break;}
1500case 19:
Lev Walkin557f27d2006-03-21 07:46:48 +00001501#line 449 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001502{
1503 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
1504 ;
1505 break;}
1506case 20:
Lev Walkin557f27d2006-03-21 07:46:48 +00001507#line 452 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001508{
1509 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
1510 ;
1511 break;}
1512case 21:
Lev Walkin557f27d2006-03-21 07:46:48 +00001513#line 455 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001514{
1515 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
1516 ;
1517 break;}
1518case 22:
Lev Walkin557f27d2006-03-21 07:46:48 +00001519#line 459 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001520{
Lev Walkinf59d0752004-08-18 04:59:12 +00001521 /* X.680Amd1 specifies TAG and XER */
Lev Walkina00d6b32006-03-21 03:40:38 +00001522 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1523 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1524 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1525 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
Lev Walkinf59d0752004-08-18 04:59:12 +00001526 } else {
1527 fprintf(stderr,
1528 "WARNING: %s INSTRUCTIONS at line %d: "
1529 "Unrecognized encoding reference\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00001530 yyvsp[-1].tv_str, yylineno);
1531 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
Lev Walkinf59d0752004-08-18 04:59:12 +00001532 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001533 free(yyvsp[-1].tv_str);
1534 ;
1535 break;}
1536case 23:
Lev Walkin557f27d2006-03-21 07:46:48 +00001537#line 480 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001538{ yyval.a_module = 0; ;
1539 break;}
1540case 24:
Lev Walkin557f27d2006-03-21 07:46:48 +00001541#line 481 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001542{
1543 yyval.a_module = yyvsp[0].a_module;
1544 ;
1545 break;}
1546case 25:
Lev Walkin557f27d2006-03-21 07:46:48 +00001547#line 490 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001548{
1549 yyval.a_module = yyvsp[0].a_module;
1550 ;
1551 break;}
1552case 26:
Lev Walkin557f27d2006-03-21 07:46:48 +00001553#line 493 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001554{
1555 yyval.a_module = yyvsp[-1].a_module;
Lev Walkinf15320b2004-06-03 03:38:44 +00001556
Lev Walkinf59d0752004-08-18 04:59:12 +00001557 /* Behave well when one of them is skipped. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001558 if(!(yyvsp[-1].a_module)) {
1559 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
Lev Walkinf59d0752004-08-18 04:59:12 +00001560 break;
1561 }
1562
Lev Walkinf15320b2004-06-03 03:38:44 +00001563#ifdef MY_IMPORT
1564#error MY_IMPORT DEFINED ELSEWHERE!
1565#endif
1566#define MY_IMPORT(foo,field) do { \
Lev Walkina00d6b32006-03-21 03:40:38 +00001567 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
1568 TQ_ADD(&(yyval.a_module->foo), \
1569 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
Lev Walkinf15320b2004-06-03 03:38:44 +00001570 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001571 } \
Lev Walkina00d6b32006-03-21 03:40:38 +00001572 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001573 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001574
1575 MY_IMPORT(imports, xp_next);
1576 MY_IMPORT(exports, xp_next);
1577 MY_IMPORT(members, next);
1578#undef MY_IMPORT
1579
Lev Walkina00d6b32006-03-21 03:40:38 +00001580 ;
1581 break;}
1582case 27:
Lev Walkin557f27d2006-03-21 07:46:48 +00001583#line 526 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001584{
1585 yyval.a_module = yyvsp[0].a_module;
1586 ;
1587 break;}
1588case 28:
Lev Walkin557f27d2006-03-21 07:46:48 +00001589#line 529 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001590{
1591 yyval.a_module = asn1p_module_new();
1592 checkmem(yyval.a_module);
1593 if(yyvsp[0].a_xports) {
1594 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
Lev Walkinf15320b2004-06-03 03:38:44 +00001595 } else {
1596 /* "EXPORTS ALL;" ? */
1597 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001598 ;
1599 break;}
1600case 29:
Lev Walkin557f27d2006-03-21 07:46:48 +00001601#line 538 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001602{
1603 yyval.a_module = asn1p_module_new();
1604 checkmem(yyval.a_module);
1605 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1606 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1607 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1608 ;
1609 break;}
1610case 30:
Lev Walkin557f27d2006-03-21 07:46:48 +00001611#line 545 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001612{
1613 yyval.a_module = asn1p_module_new();
1614 checkmem(yyval.a_module);
1615 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1616 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1617 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1618 ;
1619 break;}
1620case 31:
Lev Walkin557f27d2006-03-21 07:46:48 +00001621#line 558 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001622{
1623 yyval.a_module = asn1p_module_new();
1624 checkmem(yyval.a_module);
1625 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1626 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1627 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1628 ;
1629 break;}
1630case 32:
Lev Walkin557f27d2006-03-21 07:46:48 +00001631#line 566 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001632{ asn1p_lexer_hack_push_encoding_control(); ;
1633 break;}
1634case 33:
Lev Walkin557f27d2006-03-21 07:46:48 +00001635#line 567 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001636{
Lev Walkinf59d0752004-08-18 04:59:12 +00001637 fprintf(stderr,
1638 "WARNING: ENCODING-CONTROL %s "
1639 "specification at line %d ignored\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00001640 yyvsp[-1].tv_str, yylineno);
1641 free(yyvsp[-1].tv_str);
1642 yyval.a_module = 0;
1643 ;
1644 break;}
1645case 34:
Lev Walkin557f27d2006-03-21 07:46:48 +00001646#line 579 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001647{
Lev Walkinf15320b2004-06-03 03:38:44 +00001648 return yyerror(
Lev Walkin70853052005-11-26 11:21:55 +00001649 "Attempt to redefine a standard basic string type, "
1650 "please comment out or remove this type redefinition.");
Lev Walkina00d6b32006-03-21 03:40:38 +00001651 ;
1652 break;}
1653case 35:
Lev Walkin557f27d2006-03-21 07:46:48 +00001654#line 592 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001655{
Lev Walkinb36317c2005-08-12 10:09:10 +00001656 if(!saved_aid && 0)
1657 return yyerror("Unterminated IMPORTS FROM, "
1658 "expected semicolon ';'");
1659 saved_aid = 0;
Lev Walkina00d6b32006-03-21 03:40:38 +00001660 yyval.a_module = yyvsp[-1].a_module;
1661 ;
1662 break;}
1663case 36:
Lev Walkin557f27d2006-03-21 07:46:48 +00001664#line 602 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001665{
Lev Walkinf15320b2004-06-03 03:38:44 +00001666 return yyerror("Empty IMPORTS list");
Lev Walkina00d6b32006-03-21 03:40:38 +00001667 ;
1668 break;}
1669case 37:
Lev Walkin557f27d2006-03-21 07:46:48 +00001670#line 608 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001671{
1672 yyval.a_module = asn1p_module_new();
1673 checkmem(yyval.a_module);
1674 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
1675 ;
1676 break;}
1677case 38:
Lev Walkin557f27d2006-03-21 07:46:48 +00001678#line 613 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001679{
1680 yyval.a_module = yyvsp[-1].a_module;
1681 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
1682 ;
1683 break;}
1684case 39:
Lev Walkin557f27d2006-03-21 07:46:48 +00001685#line 620 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001686{ memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
1687 break;}
1688case 40:
Lev Walkin557f27d2006-03-21 07:46:48 +00001689#line 621 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001690{ yyval.a_aid.oid = yyvsp[0].a_oid; ;
1691 break;}
1692case 41:
Lev Walkin557f27d2006-03-21 07:46:48 +00001693#line 625 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001694{
1695 yyval.a_xports = yyvsp[-3].a_xports;
1696 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
1697 yyval.a_xports->identifier = yyvsp[0].a_aid;
Lev Walkinb36317c2005-08-12 10:09:10 +00001698 /* This stupid thing is used for look-back hack. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001699 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
1700 checkmem(yyval.a_xports);
1701 ;
1702 break;}
1703case 42:
Lev Walkin557f27d2006-03-21 07:46:48 +00001704#line 636 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001705{
1706 yyval.a_xports = asn1p_xports_new();
1707 checkmem(yyval.a_xports);
1708 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
1709 ;
1710 break;}
1711case 43:
Lev Walkin557f27d2006-03-21 07:46:48 +00001712#line 641 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001713{
1714 yyval.a_xports = yyvsp[-2].a_xports;
1715 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
1716 ;
1717 break;}
1718case 44:
Lev Walkin557f27d2006-03-21 07:46:48 +00001719#line 648 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001720{
1721 yyval.a_expr = asn1p_expr_new(yylineno);
1722 checkmem(yyval.a_expr);
1723 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1724 yyval.a_expr->expr_type = A1TC_REFERENCE;
1725 ;
1726 break;}
1727case 45:
Lev Walkin557f27d2006-03-21 07:46:48 +00001728#line 654 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001729{ /* Completely equivalent to above */
1730 yyval.a_expr = asn1p_expr_new(yylineno);
1731 checkmem(yyval.a_expr);
1732 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1733 yyval.a_expr->expr_type = A1TC_REFERENCE;
1734 ;
1735 break;}
1736case 46:
Lev Walkin557f27d2006-03-21 07:46:48 +00001737#line 660 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001738{
1739 yyval.a_expr = asn1p_expr_new(yylineno);
1740 checkmem(yyval.a_expr);
1741 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1742 yyval.a_expr->expr_type = A1TC_REFERENCE;
1743 ;
1744 break;}
1745case 47:
Lev Walkin557f27d2006-03-21 07:46:48 +00001746#line 669 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001747{
1748 yyval.a_xports = yyvsp[-1].a_xports;
1749 ;
1750 break;}
1751case 48:
Lev Walkin557f27d2006-03-21 07:46:48 +00001752#line 672 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001753{
1754 yyval.a_xports = 0;
1755 ;
1756 break;}
1757case 49:
Lev Walkin557f27d2006-03-21 07:46:48 +00001758#line 675 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001759{
Lev Walkinf15320b2004-06-03 03:38:44 +00001760 /* Empty EXPORTS clause effectively prohibits export. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001761 yyval.a_xports = asn1p_xports_new();
1762 checkmem(yyval.a_xports);
1763 ;
1764 break;}
1765case 50:
Lev Walkin557f27d2006-03-21 07:46:48 +00001766#line 683 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001767{
1768 yyval.a_xports = asn1p_xports_new();
1769 assert(yyval.a_xports);
1770 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
1771 ;
1772 break;}
1773case 51:
Lev Walkin557f27d2006-03-21 07:46:48 +00001774#line 688 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001775{
1776 yyval.a_xports = yyvsp[-2].a_xports;
1777 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
1778 ;
1779 break;}
1780case 52:
Lev Walkin557f27d2006-03-21 07:46:48 +00001781#line 695 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001782{
1783 yyval.a_expr = asn1p_expr_new(yylineno);
1784 checkmem(yyval.a_expr);
1785 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1786 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1787 ;
1788 break;}
1789case 53:
Lev Walkin557f27d2006-03-21 07:46:48 +00001790#line 701 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001791{
1792 yyval.a_expr = asn1p_expr_new(yylineno);
1793 checkmem(yyval.a_expr);
1794 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1795 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1796 ;
1797 break;}
1798case 54:
Lev Walkin557f27d2006-03-21 07:46:48 +00001799#line 707 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001800{
1801 yyval.a_expr = asn1p_expr_new(yylineno);
1802 checkmem(yyval.a_expr);
1803 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1804 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1805 ;
1806 break;}
1807case 55:
Lev Walkin557f27d2006-03-21 07:46:48 +00001808#line 716 "asn1p_y.y"
1809{ yyval.a_constr = yyvsp[-1].a_constr; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00001810 break;}
1811case 56:
Lev Walkin557f27d2006-03-21 07:46:48 +00001812#line 719 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001813{
Lev Walkin557f27d2006-03-21 07:46:48 +00001814 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkina00d6b32006-03-21 03:40:38 +00001815 assert(yyval.a_expr->Identifier == 0);
Lev Walkin557f27d2006-03-21 07:46:48 +00001816 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
Lev Walkina00d6b32006-03-21 03:40:38 +00001817 yyval.a_expr->meta_type = AMT_VALUESET;
Lev Walkin557f27d2006-03-21 07:46:48 +00001818 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkina00d6b32006-03-21 03:40:38 +00001819 ;
1820 break;}
1821case 57:
Lev Walkin557f27d2006-03-21 07:46:48 +00001822#line 729 "asn1p_y.y"
Lev Walkin0c0bca62006-03-21 04:48:15 +00001823{
1824 yyval.a_expr = yyvsp[0].a_expr;
1825 ;
1826 break;}
1827case 58:
Lev Walkin557f27d2006-03-21 07:46:48 +00001828#line 742 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001829{
1830 yyval.a_expr = asn1p_expr_new(yylineno);
1831 checkmem(yyval.a_expr);
1832 yyval.a_expr->reference = yyvsp[0].a_ref;
1833 yyval.a_expr->expr_type = A1TC_REFERENCE;
1834 yyval.a_expr->meta_type = AMT_TYPEREF;
1835 ;
1836 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001837case 59:
Lev Walkin557f27d2006-03-21 07:46:48 +00001838#line 752 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001839{
1840 yyval.a_expr = asn1p_expr_new(yylineno);
1841 checkmem(yyval.a_expr);
Lev Walkin0c0bca62006-03-21 04:48:15 +00001842 yyval.a_expr->reference = yyvsp[-3].a_ref;
1843 yyval.a_expr->rhs_pspecs = yyvsp[-1].a_expr;
1844 yyval.a_expr->expr_type = A1TC_REFERENCE;
1845 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkina00d6b32006-03-21 03:40:38 +00001846 ;
1847 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001848case 60:
Lev Walkin557f27d2006-03-21 07:46:48 +00001849#line 772 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001850{
1851 yyval.a_expr = yyvsp[0].a_expr;
1852 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1853 assert(yyval.a_expr->expr_type);
1854 assert(yyval.a_expr->meta_type);
1855 ;
1856 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001857case 61:
Lev Walkin557f27d2006-03-21 07:46:48 +00001858#line 778 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001859{
1860 yyval.a_expr = yyvsp[0].a_expr;
1861 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1862 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1863 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
1864 ;
1865 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001866case 62:
Lev Walkin557f27d2006-03-21 07:46:48 +00001867#line 794 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001868{
1869 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkina00d6b32006-03-21 03:40:38 +00001870 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1871 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
1872 ;
1873 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001874case 63:
Lev Walkin5045dfa2006-03-21 09:41:28 +00001875#line 800 "asn1p_y.y"
1876{
1877 yyval.a_expr = yyvsp[0].a_expr;
1878 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1879 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
1880 ;
1881 break;}
1882case 64:
1883#line 808 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001884{
Lev Walkinf15320b2004-06-03 03:38:44 +00001885 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00001886 yyval.a_plist = asn1p_paramlist_new(yylineno);
1887 checkmem(yyval.a_plist);
1888 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
Lev Walkinf15320b2004-06-03 03:38:44 +00001889 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00001890 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1891 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
1892 ;
1893 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00001894case 65:
1895#line 817 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001896{
Lev Walkinf15320b2004-06-03 03:38:44 +00001897 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00001898 yyval.a_plist = yyvsp[-2].a_plist;
1899 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
Lev Walkinf15320b2004-06-03 03:38:44 +00001900 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00001901 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1902 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
1903 ;
1904 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00001905case 66:
1906#line 828 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001907{
1908 yyval.a_parg.governor = NULL;
1909 yyval.a_parg.argument = yyvsp[0].tv_str;
1910 ;
1911 break;}
Lev Walkina00d6b32006-03-21 03:40:38 +00001912case 67:
Lev Walkin5045dfa2006-03-21 09:41:28 +00001913#line 832 "asn1p_y.y"
Lev Walkin0c0bca62006-03-21 04:48:15 +00001914{
1915 int ret;
1916 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1917 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1918 checkmem(ret == 0);
1919 yyval.a_parg.argument = yyvsp[0].tv_str;
1920 ;
1921 break;}
1922case 68:
Lev Walkin5045dfa2006-03-21 09:41:28 +00001923#line 839 "asn1p_y.y"
1924{
1925 int ret;
1926 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1927 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1928 checkmem(ret == 0);
1929 yyval.a_parg.argument = yyvsp[0].tv_str;
1930 ;
1931 break;}
1932case 69:
1933#line 846 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001934{
Lev Walkinc8092cb2005-02-18 16:34:21 +00001935 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00001936 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1937 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1938 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
Lev Walkinf15320b2004-06-03 03:38:44 +00001939 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00001940 yyval.a_parg.argument = yyvsp[0].tv_str;
1941 ;
1942 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00001943case 70:
1944#line 854 "asn1p_y.y"
1945{
1946 int ret;
1947 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1948 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1949 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1950 checkmem(ret == 0);
1951 yyval.a_parg.argument = yyvsp[0].tv_str;
1952 ;
1953 break;}
1954case 71:
1955#line 865 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001956{
1957 yyval.a_expr = asn1p_expr_new(yylineno);
1958 checkmem(yyval.a_expr);
1959 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1960 ;
1961 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00001962case 72:
1963#line 870 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001964{
1965 yyval.a_expr = yyvsp[-2].a_expr;
1966 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1967 ;
1968 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00001969case 73:
1970#line 877 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001971{
1972 yyval.a_expr = yyvsp[0].a_expr;
1973 ;
1974 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00001975case 74:
1976#line 880 "asn1p_y.y"
Lev Walkin0c0bca62006-03-21 04:48:15 +00001977{
1978 yyval.a_expr = asn1p_expr_new(yylineno);
1979 checkmem(yyval.a_expr);
1980 yyval.a_expr->Identifier = "?";
1981 yyval.a_expr->expr_type = A1TC_REFERENCE;
1982 yyval.a_expr->meta_type = AMT_VALUE;
1983 yyval.a_expr->value = yyvsp[0].a_value;
1984 ;
1985 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00001986case 75:
1987#line 888 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001988{
1989 asn1p_ref_t *ref;
1990 yyval.a_expr = asn1p_expr_new(yylineno);
1991 checkmem(yyval.a_expr);
1992 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1993 yyval.a_expr->expr_type = A1TC_REFERENCE;
1994 yyval.a_expr->meta_type = AMT_VALUE;
1995 ref = asn1p_ref_new(yylineno);
1996 asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
1997 yyval.a_expr->value = asn1p_value_fromref(ref, 0);
1998 ;
1999 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002000case 76:
2001#line 899 "asn1p_y.y"
2002{
2003 yyval.a_expr = asn1p_expr_new(yylineno);
2004 yyval.a_expr->expr_type = A1TC_VALUESET;
2005 yyval.a_expr->meta_type = AMT_VALUESET;
2006 yyval.a_expr->constraints = yyvsp[0].a_constr;
2007 ;
2008 break;}
2009case 77:
2010#line 922 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002011{ yyval.a_expr = asn1p_expr_new(yylineno); ;
2012 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002013case 78:
2014#line 923 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002015{ yyval.a_expr = yyvsp[0].a_expr; ;
2016 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002017case 79:
2018#line 926 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002019{
2020 yyval.a_expr = asn1p_expr_new(yylineno);
2021 checkmem(yyval.a_expr);
2022 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2023 ;
2024 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002025case 80:
2026#line 931 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002027{
2028 yyval.a_expr = yyvsp[-2].a_expr;
2029 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2030 ;
2031 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002032case 81:
2033#line 938 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002034{
2035 yyval.a_expr = yyvsp[-1].a_expr;
2036 assert(yyval.a_expr->Identifier == 0);
2037 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2038 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2039 yyval.a_expr->marker = yyvsp[0].a_marker;
2040 ;
2041 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002042case 82:
2043#line 945 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002044{
2045 yyval.a_expr = yyvsp[-1].a_expr;
2046 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2047 yyval.a_expr->marker = yyvsp[0].a_marker;
2048 _fixup_anonymous_identifier(yyval.a_expr);
2049 ;
2050 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002051case 83:
2052#line 951 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002053{
2054 yyval.a_expr = asn1p_expr_new(yylineno);
2055 checkmem(yyval.a_expr);
2056 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2057 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
2058 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2059 ;
2060 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002061case 84:
2062#line 958 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002063{
2064 yyval.a_expr = yyvsp[0].a_expr;
2065 ;
2066 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002067case 85:
2068#line 964 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002069{
2070 yyval.a_expr = asn1p_expr_new(yylineno);
2071 checkmem(yyval.a_expr);
2072 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2073 ;
2074 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002075case 86:
2076#line 969 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002077{
2078 yyval.a_expr = yyvsp[-2].a_expr;
2079 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2080 ;
2081 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002082case 87:
2083#line 976 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002084{
2085 yyval.a_expr = yyvsp[0].a_expr;
2086 assert(yyval.a_expr->Identifier == 0);
2087 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2088 ;
2089 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002090case 88:
2091#line 981 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002092{
2093 yyval.a_expr = yyvsp[0].a_expr;
2094 ;
2095 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002096case 89:
2097#line 984 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002098{
2099 yyval.a_expr = yyvsp[0].a_expr;
2100 _fixup_anonymous_identifier(yyval.a_expr);
2101 ;
2102 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002103case 90:
2104#line 991 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002105{
2106 yyval.a_expr = yyvsp[-2].a_expr;
2107 checkmem(yyval.a_expr);
2108 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2109 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2110 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
2111 ;
2112 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002113case 91:
2114#line 1001 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002115{ yyval.a_int = 0; ;
2116 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002117case 92:
2118#line 1002 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002119{ yyval.a_int = 1; ;
2120 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002121case 93:
2122#line 1006 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002123{
2124 yyval.a_expr = asn1p_expr_new(yylineno);
2125 checkmem(yyval.a_expr);
2126 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2127 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2128 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2129 ;
2130 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002131case 94:
2132#line 1013 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002133{
2134 yyval.a_expr = yyvsp[-2].a_expr;
2135 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2136 ;
2137 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002138case 95:
2139#line 1023 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002140{
2141 yyval.a_expr = asn1p_expr_new(yylineno);
2142 checkmem(yyval.a_expr);
2143 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2144 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2145 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2146 yyval.a_expr->marker = yyvsp[0].a_marker;
2147 ;
2148 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002149case 96:
2150#line 1033 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002151{
2152 yyval.a_expr = asn1p_expr_new(yylineno);
2153 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2154 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2155 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2156 yyval.a_expr->unique = yyvsp[-1].a_int;
2157 yyval.a_expr->marker = yyvsp[0].a_marker;
2158 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
2159 ;
2160 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002161case 97:
2162#line 1044 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002163{
2164 yyval.a_expr = asn1p_expr_new(yylineno);
2165 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2166 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2167 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2168 yyval.a_expr->reference = yyvsp[-1].a_ref;
2169 yyval.a_expr->marker = yyvsp[0].a_marker;
2170 ;
2171 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002172case 98:
2173#line 1054 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002174{
2175 yyval.a_expr = asn1p_expr_new(yylineno);
2176 checkmem(yyval.a_expr);
2177 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2178 yyval.a_expr->reference = yyvsp[-1].a_ref;
2179 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2180 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2181 yyval.a_expr->marker = yyvsp[0].a_marker;
2182 ;
2183 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002184case 99:
2185#line 1065 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002186{
2187 yyval.a_expr = asn1p_expr_new(yylineno);
2188 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2189 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2190 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2191 yyval.a_expr->reference = yyvsp[-1].a_ref;
2192 yyval.a_expr->marker = yyvsp[0].a_marker;
2193 ;
2194 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002195case 100:
2196#line 1075 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002197{
2198 yyval.a_expr = asn1p_expr_new(yylineno);
2199 checkmem(yyval.a_expr);
2200 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2201 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2202 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2203 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
2204 yyval.a_expr->marker = yyvsp[0].a_marker;
2205 ;
2206 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002207case 101:
2208#line 1086 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002209{
2210 yyval.a_expr = asn1p_expr_new(yylineno);
2211 checkmem(yyval.a_expr);
2212 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2213 yyval.a_expr->reference = yyvsp[-1].a_ref;
2214 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2215 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2216 yyval.a_expr->marker = yyvsp[0].a_marker;
2217 ;
2218 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002219case 102:
2220#line 1098 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002221{ yyval.a_wsynt = 0; ;
2222 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002223case 103:
2224#line 1099 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002225{
2226 yyval.a_wsynt = yyvsp[0].a_wsynt;
2227 ;
2228 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002229case 104:
2230#line 1106 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002231{ asn1p_lexer_hack_enable_with_syntax(); ;
2232 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002233case 105:
2234#line 1108 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002235{
2236 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2237 ;
2238 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002239case 106:
2240#line 1114 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002241{
2242 yyval.a_wsynt = asn1p_wsyntx_new();
2243 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
2244 ;
2245 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002246case 107:
2247#line 1118 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002248{
2249 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2250 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
2251 ;
2252 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002253case 108:
2254#line 1125 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002255{
2256 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2257 yyval.a_wchunk->type = WC_WHITESPACE;
2258 ;
2259 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002260case 109:
2261#line 1129 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002262{
2263 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_str, strlen(yyvsp[0].tv_str), 0);
2264 ;
2265 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002266case 110:
2267#line 1132 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002268{
2269 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].a_refcomp.name, strlen(yyvsp[0].a_refcomp.name), 0);
2270 yyval.a_wchunk->type = WC_FIELD;
2271 ;
2272 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002273case 111:
2274#line 1136 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002275{
2276 yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
2277 ;
2278 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002279case 112:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002280#line 1142 "asn1p_y.y"
2281{
2282 yyval.a_expr = asn1p_expr_new(yylineno);
2283 checkmem(yyval.a_expr);
2284 yyval.a_expr->Identifier = strdup("...");
2285 checkmem(yyval.a_expr->Identifier);
2286 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2287 yyval.a_expr->meta_type = AMT_TYPE;
2288 ;
2289 break;}
2290case 113:
2291#line 1150 "asn1p_y.y"
2292{
2293 yyval.a_expr = asn1p_expr_new(yylineno);
2294 checkmem(yyval.a_expr);
2295 yyval.a_expr->Identifier = strdup("...");
2296 checkmem(yyval.a_expr->Identifier);
2297 yyval.a_expr->value = yyvsp[0].a_value;
2298 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2299 yyval.a_expr->meta_type = AMT_TYPE;
2300 ;
2301 break;}
2302case 114:
2303#line 1159 "asn1p_y.y"
2304{
2305 yyval.a_expr = asn1p_expr_new(yylineno);
2306 checkmem(yyval.a_expr);
2307 yyval.a_expr->Identifier = strdup("...");
2308 yyval.a_expr->value = yyvsp[0].a_value;
2309 checkmem(yyval.a_expr->Identifier);
2310 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2311 yyval.a_expr->meta_type = AMT_TYPE;
2312 ;
2313 break;}
2314case 115:
2315#line 1171 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002316{
2317 yyval.a_expr = yyvsp[-1].a_expr;
2318 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002319 /*
2320 * Outer constraint for SEQUENCE OF and SET OF applies
2321 * to the inner type.
2322 */
Lev Walkina00d6b32006-03-21 03:40:38 +00002323 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2324 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2325 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2326 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002327 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002328 if(yyval.a_expr->constraints) {
2329 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002330 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002331 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002332 }
2333 }
Lev Walkina00d6b32006-03-21 03:40:38 +00002334 ;
2335 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002336case 116:
2337#line 1193 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002338{
2339 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
Lev Walkinfb872bd2006-03-18 06:53:11 +00002340 asn1p_as_pointer = 0;
Lev Walkina00d6b32006-03-21 03:40:38 +00002341 ;
2342 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002343case 117:
2344#line 1200 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002345{
2346 yyval.a_expr = yyvsp[0].a_expr;
2347 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
Lev Walkinfb872bd2006-03-18 06:53:11 +00002348
Lev Walkina00d6b32006-03-21 03:40:38 +00002349 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2350 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
Lev Walkinef625402005-09-05 05:17:57 +00002351 fprintf(stderr,
2352 "INFO: Directive <ASN1C:RepresentAsPointer> "
2353 "applied to %s at line %d\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00002354 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2355 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
Lev Walkinef625402005-09-05 05:17:57 +00002356 : "member",
Lev Walkina00d6b32006-03-21 03:40:38 +00002357 yyval.a_expr->_lineno
Lev Walkinef625402005-09-05 05:17:57 +00002358 );
2359 }
Lev Walkina00d6b32006-03-21 03:40:38 +00002360 ;
2361 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002362case 118:
2363#line 1219 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002364{
2365 yyval.a_expr = yyvsp[0].a_expr;
2366 ;
2367 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002368case 119:
2369#line 1222 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002370{
2371 yyval.a_expr = yyvsp[-1].a_expr;
2372 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2373 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2374 yyval.a_expr->meta_type = AMT_TYPE;
2375 ;
2376 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002377case 120:
2378#line 1228 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002379{
2380 yyval.a_expr = yyvsp[-1].a_expr;
2381 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2382 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2383 yyval.a_expr->meta_type = AMT_TYPE;
2384 ;
2385 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002386case 121:
2387#line 1234 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002388{
2389 yyval.a_expr = yyvsp[-1].a_expr;
2390 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2391 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2392 yyval.a_expr->meta_type = AMT_TYPE;
2393 ;
2394 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002395case 122:
2396#line 1240 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002397{
2398 yyval.a_expr = asn1p_expr_new(yylineno);
2399 checkmem(yyval.a_expr);
2400 yyval.a_expr->constraints = yyvsp[-4].a_constr;
2401 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2402 yyval.a_expr->meta_type = AMT_TYPE;
2403 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
2404 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
2405 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2406 ;
2407 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002408case 123:
2409#line 1250 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002410{
2411 yyval.a_expr = asn1p_expr_new(yylineno);
2412 checkmem(yyval.a_expr);
2413 yyval.a_expr->constraints = yyvsp[-4].a_constr;
2414 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2415 yyval.a_expr->meta_type = AMT_TYPE;
2416 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
2417 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
2418 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2419 ;
2420 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002421case 124:
2422#line 1260 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002423{
2424 yyval.a_expr = asn1p_expr_new(yylineno);
2425 checkmem(yyval.a_expr);
2426 yyval.a_expr->expr_type = ASN_TYPE_ANY;
2427 yyval.a_expr->meta_type = AMT_TYPE;
2428 ;
2429 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002430case 125:
2431#line 1266 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002432{
Lev Walkin070a52d2004-08-22 03:19:54 +00002433 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002434 yyval.a_expr = asn1p_expr_new(yylineno);
2435 checkmem(yyval.a_expr);
2436 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2437 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2438 yyvsp[0].tv_str, RLT_lowercase);
Lev Walkin070a52d2004-08-22 03:19:54 +00002439 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002440 yyval.a_expr->expr_type = ASN_TYPE_ANY;
2441 yyval.a_expr->meta_type = AMT_TYPE;
2442 ;
2443 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002444case 126:
2445#line 1277 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002446{
2447 yyval.a_expr = asn1p_expr_new(yylineno);
2448 checkmem(yyval.a_expr);
2449 yyval.a_expr->reference = yyvsp[0].a_ref;
2450 yyval.a_expr->expr_type = A1TC_INSTANCE;
2451 yyval.a_expr->meta_type = AMT_TYPE;
2452 ;
2453 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002454case 127:
2455#line 1292 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002456{
Lev Walkinf15320b2004-06-03 03:38:44 +00002457 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002458 yyval.a_ref = asn1p_ref_new(yylineno);
2459 checkmem(yyval.a_ref);
2460 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00002461 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002462 free(yyvsp[0].tv_str);
2463 ;
2464 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002465case 128:
2466#line 1300 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002467{
Lev Walkinf15320b2004-06-03 03:38:44 +00002468 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002469 yyval.a_ref = asn1p_ref_new(yylineno);
2470 checkmem(yyval.a_ref);
2471 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00002472 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002473 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2474 checkmem(ret == 0);
2475 free(yyvsp[-2].tv_str);
2476 ;
2477 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002478case 129:
2479#line 1310 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002480{
Lev Walkin9d542d22006-03-14 16:31:37 +00002481 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002482 yyval.a_ref = asn1p_ref_new(yylineno);
2483 checkmem(yyval.a_ref);
2484 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00002485 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002486 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00002487 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002488 free(yyvsp[-2].tv_str);
2489 ;
2490 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002491case 130:
2492#line 1320 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002493{
Lev Walkin9d542d22006-03-14 16:31:37 +00002494 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002495 yyval.a_ref = asn1p_ref_new(yylineno);
2496 checkmem(yyval.a_ref);
2497 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00002498 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002499 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkin9d542d22006-03-14 16:31:37 +00002500 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002501 free(yyvsp[-2].tv_str);
2502 ;
2503 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002504case 131:
2505#line 1330 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002506{
Lev Walkinf15320b2004-06-03 03:38:44 +00002507 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002508 yyval.a_ref = asn1p_ref_new(yylineno);
2509 checkmem(yyval.a_ref);
2510 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2511 free(yyvsp[0].tv_str);
Lev Walkin9c974182004-09-15 11:59:51 +00002512 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002513 ;
2514 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002515case 132:
2516#line 1338 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002517{
Lev Walkin9c974182004-09-15 11:59:51 +00002518 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002519 yyval.a_ref = yyvsp[0].a_ref;
2520 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2521 free(yyvsp[-2].tv_str);
Lev Walkinf15320b2004-06-03 03:38:44 +00002522 checkmem(ret == 0);
2523 /*
2524 * Move the last element infront.
2525 */
2526 {
2527 struct asn1p_ref_component_s tmp_comp;
Lev Walkina00d6b32006-03-21 03:40:38 +00002528 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2529 memmove(&yyval.a_ref->components[1],
2530 &yyval.a_ref->components[0],
2531 sizeof(yyval.a_ref->components[0])
2532 * (yyval.a_ref->comp_count - 1));
2533 yyval.a_ref->components[0] = tmp_comp;
Lev Walkinf15320b2004-06-03 03:38:44 +00002534 }
Lev Walkina00d6b32006-03-21 03:40:38 +00002535 ;
2536 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002537case 133:
2538#line 1360 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002539{
Lev Walkinf15320b2004-06-03 03:38:44 +00002540 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002541 yyval.a_ref = asn1p_ref_new(yylineno);
2542 checkmem(yyval.a_ref);
2543 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2544 free(yyvsp[0].a_refcomp.name);
Lev Walkinf15320b2004-06-03 03:38:44 +00002545 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002546 ;
2547 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002548case 134:
2549#line 1368 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002550{
Lev Walkinf15320b2004-06-03 03:38:44 +00002551 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002552 yyval.a_ref = yyvsp[-2].a_ref;
2553 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2554 free(yyvsp[0].a_refcomp.name);
Lev Walkinf15320b2004-06-03 03:38:44 +00002555 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002556 ;
2557 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002558case 136:
2559#line 1381 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002560{
2561 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2562 yyval.a_refcomp.name = yyvsp[0].tv_str;
2563 ;
2564 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002565case 137:
2566#line 1386 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002567{
2568 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2569 yyval.a_refcomp.name = yyvsp[0].tv_str;
2570 ;
2571 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002572case 138:
2573#line 1395 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002574{
2575 yyval.a_ref = asn1p_ref_new(yylineno);
2576 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2577 ;
2578 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002579case 139:
2580#line 1399 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002581{
2582 yyval.a_ref = yyval.a_ref;
2583 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2584 ;
2585 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002586case 140:
2587#line 1403 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002588{
2589 yyval.a_ref = yyval.a_ref;
2590 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
2591 ;
2592 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002593case 141:
2594#line 1410 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002595{
2596 yyval.a_ref = asn1p_ref_new(yylineno);
2597 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2598 ;
2599 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002600case 142:
2601#line 1430 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002602{
2603 yyval.a_expr = yyvsp[-2].a_expr;
2604 assert(yyval.a_expr->Identifier == NULL);
2605 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2606 yyval.a_expr->meta_type = AMT_VALUE;
2607 yyval.a_expr->value = yyvsp[0].a_value;
2608 ;
2609 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002610case 145:
2611#line 1442 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002612{
2613 yyval.a_value = asn1p_value_fromint(0);
2614 checkmem(yyval.a_value);
2615 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2616 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2617 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2618 ;
2619 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002620case 146:
2621#line 1449 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002622{ asn1p_lexer_hack_push_opaque_state(); ;
2623 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002624case 147:
2625#line 1449 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002626{
2627 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2628 checkmem(yyval.a_value);
2629 yyval.a_value->type = ATV_UNPARSED;
2630 ;
2631 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002632case 148:
2633#line 1454 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002634{
2635 yyval.a_value = asn1p_value_fromint(0);
2636 checkmem(yyval.a_value);
2637 yyval.a_value->type = ATV_NULL;
2638 ;
2639 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002640case 149:
2641#line 1462 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002642{
2643 yyval.a_value = asn1p_value_fromint(0);
2644 checkmem(yyval.a_value);
2645 yyval.a_value->type = ATV_FALSE;
2646 ;
2647 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002648case 150:
2649#line 1467 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002650{
2651 yyval.a_value = asn1p_value_fromint(0);
2652 checkmem(yyval.a_value);
2653 yyval.a_value->type = ATV_TRUE;
2654 ;
2655 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002656case 151:
2657#line 1472 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002658{
2659 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2660 checkmem(yyval.a_value);
2661 ;
2662 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002663case 152:
2664#line 1476 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002665{
2666 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2667 checkmem(yyval.a_value);
2668 ;
2669 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002670case 153:
2671#line 1480 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002672{
2673 yyval.a_value = yyval.a_value;
2674 ;
2675 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002676case 154:
2677#line 1483 "asn1p_y.y"
Lev Walkin0c0bca62006-03-21 04:48:15 +00002678{
2679 yyval.a_value = yyvsp[0].a_value;
2680 ;
2681 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002682case 155:
2683#line 1489 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002684{
Lev Walkinf15320b2004-06-03 03:38:44 +00002685 asn1p_ref_t *ref;
2686 int ret;
2687 ref = asn1p_ref_new(yylineno);
2688 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00002689 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00002690 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002691 yyval.a_value = asn1p_value_fromref(ref, 0);
2692 checkmem(yyval.a_value);
2693 free(yyvsp[0].tv_str);
2694 ;
2695 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002696case 156:
2697#line 1500 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002698{
Lev Walkinf15320b2004-06-03 03:38:44 +00002699 asn1p_ref_t *ref;
2700 int ret;
2701 ref = asn1p_ref_new(yylineno);
2702 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00002703 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00002704 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002705 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00002706 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002707 yyval.a_value = asn1p_value_fromref(ref, 0);
2708 checkmem(yyval.a_value);
2709 free(yyvsp[-2].tv_str);
2710 free(yyvsp[0].tv_str);
2711 ;
2712 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002713case 157:
2714#line 1518 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002715{
2716 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2717 checkmem(yyval.a_value);
2718 ;
2719 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002720case 158:
2721#line 1522 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002722{
2723 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
2724 checkmem(yyval.a_value);
2725 yyval.a_value->type = ATV_TUPLE;
2726 ;
2727 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002728case 159:
2729#line 1527 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002730{
2731 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
2732 checkmem(yyval.a_value);
2733 yyval.a_value->type = ATV_QUADRUPLE;
2734 ;
2735 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002736case 160:
2737#line 1561 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002738{
2739 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
2740 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2741 checkmem(yyval.tv_opaque.buf);
2742 yyval.tv_opaque.buf[0] = '{';
2743 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2744 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2745 free(yyvsp[0].tv_opaque.buf);
2746 ;
2747 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002748case 161:
2749#line 1570 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002750{
2751 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
Lev Walkinf15320b2004-06-03 03:38:44 +00002752 char *p = malloc(newsize + 1);
2753 checkmem(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00002754 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2755 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00002756 p[newsize] = '\0';
Lev Walkina00d6b32006-03-21 03:40:38 +00002757 free(yyvsp[-1].tv_opaque.buf);
2758 free(yyvsp[0].tv_opaque.buf);
2759 yyval.tv_opaque.buf = p;
2760 yyval.tv_opaque.len = newsize;
2761 ;
2762 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002763case 162:
2764#line 1585 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002765{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2766 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002767case 163:
2768#line 1586 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002769{ yyval.a_type = ASN_BASIC_NULL; ;
2770 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002771case 164:
2772#line 1587 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002773{ yyval.a_type = ASN_BASIC_REAL; ;
2774 break;}
Lev Walkina00d6b32006-03-21 03:40:38 +00002775case 165:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002776#line 1588 "asn1p_y.y"
2777{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002778 break;}
2779case 166:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002780#line 1589 "asn1p_y.y"
2781{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002782 break;}
2783case 167:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002784#line 1590 "asn1p_y.y"
2785{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002786 break;}
2787case 168:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002788#line 1591 "asn1p_y.y"
2789{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002790 break;}
2791case 169:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002792#line 1592 "asn1p_y.y"
2793{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002794 break;}
2795case 170:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002796#line 1593 "asn1p_y.y"
2797{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002798 break;}
2799case 171:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002800#line 1594 "asn1p_y.y"
2801{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002802 break;}
2803case 172:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002804#line 1595 "asn1p_y.y"
2805{ yyval.a_type = ASN_BASIC_UTCTime; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002806 break;}
2807case 173:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002808#line 1596 "asn1p_y.y"
2809{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002810 break;}
2811case 174:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002812#line 1597 "asn1p_y.y"
2813{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkin0c0bca62006-03-21 04:48:15 +00002814 break;}
2815case 175:
Lev Walkin5045dfa2006-03-21 09:41:28 +00002816#line 1604 "asn1p_y.y"
2817{ yyval.a_type = ASN_BASIC_INTEGER; ;
2818 break;}
2819case 176:
2820#line 1605 "asn1p_y.y"
2821{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2822 break;}
2823case 177:
2824#line 1606 "asn1p_y.y"
2825{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2826 break;}
2827case 178:
2828#line 1610 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002829{
2830 yyval.a_expr = asn1p_expr_new(yylineno);
2831 checkmem(yyval.a_expr);
2832 yyval.a_expr->expr_type = yyvsp[0].a_type;
2833 yyval.a_expr->meta_type = AMT_TYPE;
2834 ;
2835 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002836case 179:
2837#line 1616 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002838{
2839 if(yyvsp[0].a_expr) {
2840 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinf15320b2004-06-03 03:38:44 +00002841 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002842 yyval.a_expr = asn1p_expr_new(yylineno);
2843 checkmem(yyval.a_expr);
Lev Walkinf15320b2004-06-03 03:38:44 +00002844 }
Lev Walkina00d6b32006-03-21 03:40:38 +00002845 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2846 yyval.a_expr->meta_type = AMT_TYPE;
2847 ;
2848 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002849case 180:
2850#line 1629 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002851{ yyval.a_type = ASN_STRING_BMPString; ;
2852 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002853case 181:
2854#line 1630 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002855{
2856 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00002857 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkina00d6b32006-03-21 03:40:38 +00002858 ;
2859 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002860case 182:
2861#line 1634 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002862{
2863 yyval.a_type = ASN_STRING_GraphicString;
Lev Walkin9c974182004-09-15 11:59:51 +00002864 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkina00d6b32006-03-21 03:40:38 +00002865 ;
2866 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002867case 183:
2868#line 1638 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002869{ yyval.a_type = ASN_STRING_IA5String; ;
2870 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002871case 184:
2872#line 1639 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002873{ yyval.a_type = ASN_STRING_ISO646String; ;
2874 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002875case 185:
2876#line 1640 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002877{ yyval.a_type = ASN_STRING_NumericString; ;
2878 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002879case 186:
2880#line 1641 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002881{ yyval.a_type = ASN_STRING_PrintableString; ;
2882 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002883case 187:
2884#line 1642 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002885{
2886 yyval.a_type = ASN_STRING_T61String;
Lev Walkin9c974182004-09-15 11:59:51 +00002887 fprintf(stderr, "WARNING: T61String is not fully supported\n");
Lev Walkina00d6b32006-03-21 03:40:38 +00002888 ;
2889 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002890case 188:
2891#line 1646 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002892{ yyval.a_type = ASN_STRING_TeletexString; ;
2893 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002894case 189:
2895#line 1647 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002896{ yyval.a_type = ASN_STRING_UniversalString; ;
2897 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002898case 190:
2899#line 1648 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002900{ yyval.a_type = ASN_STRING_UTF8String; ;
2901 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002902case 191:
2903#line 1649 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002904{
2905 yyval.a_type = ASN_STRING_VideotexString;
Lev Walkin9c974182004-09-15 11:59:51 +00002906 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
Lev Walkina00d6b32006-03-21 03:40:38 +00002907 ;
2908 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002909case 192:
2910#line 1653 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002911{ yyval.a_type = ASN_STRING_VisibleString; ;
2912 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002913case 193:
2914#line 1654 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002915{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2916 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002917case 199:
2918#line 1666 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002919{ yyval.a_constr = 0; ;
2920 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002921case 200:
2922#line 1667 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002923{
2924 yyval.a_constr = yyvsp[0].a_constr;
2925 ;
2926 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002927case 201:
2928#line 1673 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002929{
2930 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
2931 ;
2932 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002933case 202:
2934#line 1676 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002935{
Lev Walkinf15320b2004-06-03 03:38:44 +00002936 /*
2937 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00002938 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00002939 */
Lev Walkina00d6b32006-03-21 03:40:38 +00002940 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
2941 ;
2942 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002943case 203:
2944#line 1686 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002945{
2946 yyval.a_constr = yyvsp[-1].a_constr;
2947 ;
2948 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002949case 204:
2950#line 1689 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002951{
2952 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
2953 ;
2954 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002955case 205:
2956#line 1695 "asn1p_y.y"
2957{
2958 yyval.a_constr = asn1p_constraint_new(yylineno);
2959 yyval.a_constr->type = ACT_EL_EXT;
2960 ;
2961 break;}
2962case 206:
2963#line 1699 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002964{
2965 yyval.a_constr = yyvsp[0].a_constr;
2966 ;
2967 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002968case 207:
2969#line 1702 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002970{
Lev Walkinf15320b2004-06-03 03:38:44 +00002971 asn1p_constraint_t *ct;
2972 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002973 ct->type = ACT_EL_EXT;
Lev Walkina00d6b32006-03-21 03:40:38 +00002974 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
2975 ;
2976 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002977case 208:
2978#line 1708 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002979{
Lev Walkinf15320b2004-06-03 03:38:44 +00002980 asn1p_constraint_t *ct;
2981 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002982 ct->type = ACT_EL_EXT;
Lev Walkina00d6b32006-03-21 03:40:38 +00002983 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
2984 ct = yyval.a_constr;
2985 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
2986 ;
2987 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002988case 209:
2989#line 1719 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002990{
2991 yyval.a_constr = yyvsp[0].a_constr;
2992 ;
2993 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00002994case 210:
2995#line 1722 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002996{
2997 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2998 ;
2999 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003000case 211:
3001#line 1725 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003002{
3003 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3004 ;
3005 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003006case 212:
3007#line 1728 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003008{
3009 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3010 ;
3011 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003012case 213:
3013#line 1731 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003014{
3015 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3016 ;
3017 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003018case 214:
3019#line 1737 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003020{
Lev Walkinf15320b2004-06-03 03:38:44 +00003021 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003022 yyval.a_constr = asn1p_constraint_new(yylineno);
3023 checkmem(yyval.a_constr);
3024 yyval.a_constr->type = yyvsp[-3].a_ctype;
3025 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003026 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003027 ;
3028 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003029case 215:
3030#line 1745 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003031{
Lev Walkinf59d0752004-08-18 04:59:12 +00003032 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003033 yyval.a_constr = asn1p_constraint_new(yylineno);
3034 checkmem(yyval.a_constr);
3035 yyval.a_constr->type = ACT_CA_SET;
3036 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkinf59d0752004-08-18 04:59:12 +00003037 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003038 ;
3039 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003040case 216:
3041#line 1753 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003042{
3043 yyval.a_constr = asn1p_constraint_new(yylineno);
3044 checkmem(yyval.a_constr);
3045 yyval.a_constr->type = ACT_EL_VALUE;
3046 yyval.a_constr->value = yyvsp[0].a_value;
3047 ;
3048 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003049case 217:
3050#line 1759 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003051{
3052 yyval.a_constr = asn1p_constraint_new(yylineno);
3053 checkmem(yyval.a_constr);
3054 yyval.a_constr->type = ACT_EL_TYPE;
3055 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
3056 ;
3057 break;}
Lev Walkina00d6b32006-03-21 03:40:38 +00003058case 218:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003059#line 1765 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003060{
Lev Walkin5045dfa2006-03-21 09:41:28 +00003061 yyval.a_constr = asn1p_constraint_new(yylineno);
3062 checkmem(yyval.a_constr);
3063 yyval.a_constr->type = yyvsp[-1].a_ctype;
3064 yyval.a_constr->range_start = yyvsp[-2].a_value;
3065 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkina00d6b32006-03-21 03:40:38 +00003066 ;
3067 break;}
3068case 219:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003069#line 1772 "asn1p_y.y"
3070{
3071 yyval.a_constr = asn1p_constraint_new(yylineno);
3072 checkmem(yyval.a_constr);
3073 yyval.a_constr->type = yyvsp[-1].a_ctype;
3074 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3075 yyval.a_constr->range_stop = yyvsp[0].a_value;
3076 yyval.a_constr->range_start->type = ATV_MIN;
3077 ;
3078 break;}
3079case 220:
3080#line 1780 "asn1p_y.y"
3081{
3082 yyval.a_constr = asn1p_constraint_new(yylineno);
3083 checkmem(yyval.a_constr);
3084 yyval.a_constr->type = yyvsp[-1].a_ctype;
3085 yyval.a_constr->range_start = yyvsp[-2].a_value;
3086 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3087 yyval.a_constr->range_stop->type = ATV_MAX;
3088 ;
3089 break;}
3090case 221:
3091#line 1788 "asn1p_y.y"
3092{
3093 yyval.a_constr = asn1p_constraint_new(yylineno);
3094 checkmem(yyval.a_constr);
3095 yyval.a_constr->type = yyvsp[-1].a_ctype;
3096 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3097 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3098 yyval.a_constr->range_start->type = ATV_MIN;
3099 yyval.a_constr->range_stop->type = ATV_MAX;
3100 ;
3101 break;}
3102case 222:
3103#line 1797 "asn1p_y.y"
Lev Walkin0c0bca62006-03-21 04:48:15 +00003104{
3105 yyval.a_constr = yyvsp[0].a_constr;
3106 ;
Lev Walkina00d6b32006-03-21 03:40:38 +00003107 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003108case 223:
3109#line 1800 "asn1p_y.y"
3110{
3111 yyval.a_constr = yyvsp[0].a_constr;
3112 ;
3113 break;}
3114case 224:
3115#line 1804 "asn1p_y.y"
Lev Walkin0c0bca62006-03-21 04:48:15 +00003116{ asn1p_lexer_hack_push_opaque_state(); ;
3117 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003118case 225:
3119#line 1804 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003120{
3121 yyval.a_constr = asn1p_constraint_new(yylineno);
3122 checkmem(yyval.a_constr);
3123 yyval.a_constr->type = ACT_CT_CTDBY;
3124 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3125 checkmem(yyval.a_constr->value);
3126 yyval.a_constr->value->type = ATV_UNPARSED;
3127 ;
3128 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003129case 226:
3130#line 1815 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003131{ yyval.a_ctype = ACT_EL_RANGE; ;
3132 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003133case 227:
3134#line 1816 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003135{ yyval.a_ctype = ACT_EL_RLRANGE; ;
3136 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003137case 228:
3138#line 1817 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003139{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3140 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003141case 229:
3142#line 1818 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003143{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3144 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003145case 230:
3146#line 1822 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003147{
3148 yyval.a_ctype = ACT_CT_SIZE;
3149 ;
3150 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003151case 231:
3152#line 1825 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003153{
3154 yyval.a_ctype = ACT_CT_FROM;
3155 ;
3156 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003157case 232:
3158#line 1831 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003159{
3160 yyval.a_value = asn1p_value_fromint(0);
3161 checkmem(yyval.a_value);
3162 yyval.a_value->type = ATV_FALSE;
3163 ;
3164 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003165case 233:
3166#line 1836 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003167{
3168 yyval.a_value = asn1p_value_fromint(1);
3169 checkmem(yyval.a_value);
3170 yyval.a_value->type = ATV_TRUE;
3171 ;
3172 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003173case 234:
3174#line 1841 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003175{
3176 yyval.a_value = yyvsp[0].a_value;
3177 ;
3178 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003179case 235:
3180#line 1844 "asn1p_y.y"
Lev Walkin0c0bca62006-03-21 04:48:15 +00003181{
3182 yyval.a_value = yyvsp[0].a_value;
3183 ;
3184 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003185case 236:
3186#line 1847 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003187{
Lev Walkinf15320b2004-06-03 03:38:44 +00003188 asn1p_ref_t *ref;
3189 int ret;
3190 ref = asn1p_ref_new(yylineno);
3191 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003192 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003193 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003194 yyval.a_value = asn1p_value_fromref(ref, 0);
3195 checkmem(yyval.a_value);
3196 free(yyvsp[0].tv_str);
3197 ;
3198 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003199case 237:
3200#line 1861 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003201{
Lev Walkinc8092cb2005-02-18 16:34:21 +00003202 asn1p_ref_t *ref;
3203 int ret;
3204 ref = asn1p_ref_new(yylineno);
3205 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003206 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003207 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003208 yyval.a_value = asn1p_value_fromref(ref, 0);
3209 checkmem(yyval.a_value);
3210 free(yyvsp[0].tv_str);
3211 ;
3212 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003213case 238:
3214#line 1875 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003215{
3216 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
3217 ;
3218 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003219case 239:
3220#line 1878 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003221{
3222 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
3223 ;
3224 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003225case 240:
3226#line 1884 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003227{
3228 yyval.a_constr = yyvsp[0].a_constr;
3229 ;
3230 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003231case 241:
3232#line 1887 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003233{
3234 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3235 ;
3236 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003237case 242:
3238#line 1893 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003239{
3240 yyval.a_constr = asn1p_constraint_new(yylineno);
3241 checkmem(yyval.a_constr);
3242 yyval.a_constr->type = ACT_EL_EXT;
3243 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
3244 ;
3245 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003246case 243:
3247#line 1899 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003248{
3249 yyval.a_constr = asn1p_constraint_new(yylineno);
3250 checkmem(yyval.a_constr);
3251 yyval.a_constr->type = ACT_EL_VALUE;
3252 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3253 yyval.a_constr->presence = yyvsp[0].a_pres;
3254 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
3255 ;
3256 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003257case 244:
3258#line 1913 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003259{ yyval.a_pres = ACPRES_DEFAULT; ;
3260 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003261case 245:
3262#line 1914 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003263{ yyval.a_pres = yyvsp[0].a_pres; ;
3264 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003265case 246:
3266#line 1918 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003267{
3268 yyval.a_pres = ACPRES_PRESENT;
3269 ;
3270 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003271case 247:
3272#line 1921 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003273{
3274 yyval.a_pres = ACPRES_ABSENT;
3275 ;
3276 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003277case 248:
3278#line 1924 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003279{
3280 yyval.a_pres = ACPRES_OPTIONAL;
3281 ;
3282 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003283case 249:
3284#line 1930 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003285{
3286 yyval.a_constr = yyvsp[0].a_constr;
3287 ;
3288 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003289case 250:
3290#line 1933 "asn1p_y.y"
Lev Walkin0c0bca62006-03-21 04:48:15 +00003291{
3292 yyval.a_constr = yyvsp[0].a_constr;
3293 ;
3294 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003295case 251:
3296#line 1942 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003297{
Lev Walkinf15320b2004-06-03 03:38:44 +00003298 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3299 asn1p_constraint_t *ct;
3300 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003301 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003302 checkmem(ret == 0);
3303 ct = asn1p_constraint_new(yylineno);
Lev Walkina00d6b32006-03-21 03:40:38 +00003304 checkmem(yyval.a_constr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003305 ct->type = ACT_EL_VALUE;
3306 ct->value = asn1p_value_fromref(ref, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003307 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
3308 ;
3309 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003310case 252:
3311#line 1957 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003312{
3313 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
3314 ;
3315 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003316case 253:
3317#line 1963 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003318{
3319 yyval.a_constr = asn1p_constraint_new(yylineno);
3320 checkmem(yyval.a_constr);
3321 yyval.a_constr->type = ACT_EL_VALUE;
3322 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3323 ;
3324 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003325case 254:
3326#line 1969 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003327{
Lev Walkinf15320b2004-06-03 03:38:44 +00003328 asn1p_constraint_t *ct;
3329 ct = asn1p_constraint_new(yylineno);
3330 checkmem(ct);
3331 ct->type = ACT_EL_VALUE;
Lev Walkina00d6b32006-03-21 03:40:38 +00003332 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3333 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
3334 ;
3335 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003336case 255:
3337#line 1983 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003338{
3339 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
Lev Walkinf15320b2004-06-03 03:38:44 +00003340 int ret;
3341 *p = '@';
Lev Walkina00d6b32006-03-21 03:40:38 +00003342 strcpy(p + 1, yyvsp[0].tv_str);
3343 yyval.a_ref = asn1p_ref_new(yylineno);
3344 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003345 checkmem(ret == 0);
3346 free(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00003347 free(yyvsp[0].tv_str);
3348 ;
3349 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003350case 256:
3351#line 1994 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003352{
3353 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
Lev Walkinf15320b2004-06-03 03:38:44 +00003354 int ret;
3355 p[0] = '@';
3356 p[1] = '.';
Lev Walkina00d6b32006-03-21 03:40:38 +00003357 strcpy(p + 2, yyvsp[0].tv_str);
3358 yyval.a_ref = asn1p_ref_new(yylineno);
3359 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003360 checkmem(ret == 0);
3361 free(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00003362 free(yyvsp[0].tv_str);
3363 ;
3364 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003365case 257:
3366#line 2010 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003367{
3368 yyval.tv_str = yyvsp[0].tv_str;
3369 ;
3370 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003371case 258:
3372#line 2013 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003373{
3374 int l1 = strlen(yyvsp[-2].tv_str);
3375 int l3 = strlen(yyvsp[0].tv_str);
3376 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3377 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3378 yyval.tv_str[l1] = '.';
3379 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3380 yyval.tv_str[l1 + 1 + l3] = '\0';
3381 ;
3382 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003383case 259:
3384#line 2031 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003385{
3386 yyval.a_marker.flags = EM_NOMARK;
3387 yyval.a_marker.default_value = 0;
3388 ;
3389 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003390case 260:
3391#line 2035 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003392{ yyval.a_marker = yyvsp[0].a_marker; ;
3393 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003394case 261:
3395#line 2039 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003396{
3397 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
3398 yyval.a_marker.default_value = 0;
3399 ;
3400 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003401case 262:
3402#line 2043 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003403{
3404 yyval.a_marker.flags = EM_DEFAULT;
3405 yyval.a_marker.default_value = yyvsp[0].a_value;
3406 ;
3407 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003408case 263:
3409#line 2066 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003410{
3411 yyval.a_expr = asn1p_expr_new(yylineno);
3412 checkmem(yyval.a_expr);
3413 ;
3414 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003415case 264:
3416#line 2070 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003417{
3418 yyval.a_expr = yyvsp[-1].a_expr;
3419 ;
3420 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003421case 265:
3422#line 2076 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003423{
3424 yyval.a_expr = asn1p_expr_new(yylineno);
3425 checkmem(yyval.a_expr);
3426 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3427 ;
3428 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003429case 266:
3430#line 2081 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003431{
3432 yyval.a_expr = yyvsp[-2].a_expr;
3433 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3434 ;
3435 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003436case 267:
3437#line 2088 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003438{
3439 yyval.a_expr = asn1p_expr_new(yylineno);
3440 checkmem(yyval.a_expr);
3441 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3442 yyval.a_expr->meta_type = AMT_VALUE;
3443 yyval.a_expr->Identifier = yyvsp[0].tv_str;
3444 ;
3445 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003446case 268:
3447#line 2095 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003448{
3449 yyval.a_expr = asn1p_expr_new(yylineno);
3450 checkmem(yyval.a_expr);
3451 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3452 yyval.a_expr->meta_type = AMT_VALUE;
3453 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3454 yyval.a_expr->value = yyvsp[-1].a_value;
3455 ;
3456 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003457case 269:
3458#line 2103 "asn1p_y.y"
Lev Walkin0c0bca62006-03-21 04:48:15 +00003459{
3460 yyval.a_expr = asn1p_expr_new(yylineno);
3461 checkmem(yyval.a_expr);
3462 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3463 yyval.a_expr->meta_type = AMT_VALUE;
3464 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3465 yyval.a_expr->value = yyvsp[-1].a_value;
3466 ;
3467 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003468case 270:
3469#line 2111 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003470{
3471 yyval.a_expr = asn1p_expr_new(yylineno);
3472 checkmem(yyval.a_expr);
3473 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3474 yyval.a_expr->meta_type = AMT_VALUE;
3475 yyval.a_expr->value = yyvsp[0].a_value;
3476 ;
3477 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003478case 271:
3479#line 2118 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003480{
3481 yyval.a_expr = asn1p_expr_new(yylineno);
3482 checkmem(yyval.a_expr);
3483 yyval.a_expr->Identifier = strdup("...");
3484 checkmem(yyval.a_expr->Identifier);
3485 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3486 yyval.a_expr->meta_type = AMT_VALUE;
3487 ;
3488 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003489case 272:
3490#line 2129 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003491{
3492 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3493 checkmem(yyval.a_value);
3494 ;
3495 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003496case 273:
3497#line 2133 "asn1p_y.y"
Lev Walkin0c0bca62006-03-21 04:48:15 +00003498{
3499 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3500 checkmem(yyval.a_value);
3501 ;
Lev Walkina00d6b32006-03-21 03:40:38 +00003502 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003503case 274:
3504#line 2164 "asn1p_y.y"
Lev Walkin0c0bca62006-03-21 04:48:15 +00003505{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
Lev Walkina00d6b32006-03-21 03:40:38 +00003506 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003507case 275:
3508#line 2165 "asn1p_y.y"
Lev Walkin0c0bca62006-03-21 04:48:15 +00003509{ yyval.a_tag = yyvsp[0].a_tag; ;
3510 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003511case 276:
3512#line 2169 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003513{
3514 yyval.a_tag = yyvsp[-1].a_tag;
3515 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
3516 ;
3517 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003518case 277:
3519#line 2176 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003520{
3521 yyval.a_tag = yyvsp[-2].a_tag;
3522 yyval.a_tag.tag_value = yyvsp[-1].a_int;
3523 ;
3524 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003525case 278:
3526#line 2182 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003527{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
3528 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003529case 279:
3530#line 2183 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003531{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
3532 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003533case 280:
3534#line 2184 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003535{ yyval.a_tag.tag_class = TC_APPLICATION; ;
3536 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003537case 281:
3538#line 2185 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003539{ yyval.a_tag.tag_class = TC_PRIVATE; ;
3540 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003541case 282:
3542#line 2189 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003543{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3544 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003545case 283:
3546#line 2190 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003547{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3548 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003549case 284:
3550#line 2191 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003551{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3552 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003553case 285:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003554#line 2195 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003555{
Lev Walkin5045dfa2006-03-21 09:41:28 +00003556 checkmem(yyvsp[0].tv_str);
Lev Walkina00d6b32006-03-21 03:40:38 +00003557 yyval.tv_str = yyvsp[0].tv_str;
3558 ;
3559 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003560case 286:
Lev Walkin557f27d2006-03-21 07:46:48 +00003561#line 2199 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003562{
3563 checkmem(yyvsp[0].tv_str);
3564 yyval.tv_str = yyvsp[0].tv_str;
3565 ;
3566 break;}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003567case 287:
3568#line 2207 "asn1p_y.y"
3569{
3570 checkmem(yyvsp[0].tv_str);
3571 yyval.tv_str = yyvsp[0].tv_str;
3572 ;
3573 break;}
3574case 288:
3575#line 2214 "asn1p_y.y"
3576{ yyval.tv_str = 0; ;
3577 break;}
3578case 289:
3579#line 2215 "asn1p_y.y"
3580{
3581 yyval.tv_str = yyvsp[0].tv_str;
3582 ;
3583 break;}
3584case 290:
3585#line 2221 "asn1p_y.y"
3586{
3587 checkmem(yyvsp[0].tv_str);
3588 yyval.tv_str = yyvsp[0].tv_str;
3589 ;
3590 break;}
Lev Walkina00d6b32006-03-21 03:40:38 +00003591}
3592 /* the action file gets copied in in place of this dollarsign */
3593#line 543 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00003594
3595 yyvsp -= yylen;
3596 yyssp -= yylen;
Lev Walkina00d6b32006-03-21 03:40:38 +00003597#ifdef YYLSP_NEEDED
3598 yylsp -= yylen;
3599#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003600
Lev Walkina00d6b32006-03-21 03:40:38 +00003601#if YYDEBUG != 0
3602 if (yydebug)
3603 {
3604 short *ssp1 = yyss - 1;
3605 fprintf (stderr, "state stack now");
3606 while (ssp1 != yyssp)
3607 fprintf (stderr, " %d", *++ssp1);
3608 fprintf (stderr, "\n");
3609 }
3610#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003611
3612 *++yyvsp = yyval;
3613
Lev Walkina00d6b32006-03-21 03:40:38 +00003614#ifdef YYLSP_NEEDED
3615 yylsp++;
3616 if (yylen == 0)
3617 {
3618 yylsp->first_line = yylloc.first_line;
3619 yylsp->first_column = yylloc.first_column;
3620 yylsp->last_line = (yylsp-1)->last_line;
3621 yylsp->last_column = (yylsp-1)->last_column;
3622 yylsp->text = 0;
3623 }
3624 else
3625 {
3626 yylsp->last_line = (yylsp+yylen-1)->last_line;
3627 yylsp->last_column = (yylsp+yylen-1)->last_column;
3628 }
3629#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003630
Lev Walkina00d6b32006-03-21 03:40:38 +00003631 /* Now "shift" the result of the reduction.
3632 Determine what state that goes to,
3633 based on the state we popped back to
3634 and the rule number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003635
3636 yyn = yyr1[yyn];
3637
Lev Walkina00d6b32006-03-21 03:40:38 +00003638 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3639 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003640 yystate = yytable[yystate];
3641 else
Lev Walkina00d6b32006-03-21 03:40:38 +00003642 yystate = yydefgoto[yyn - YYNTBASE];
Lev Walkinf15320b2004-06-03 03:38:44 +00003643
3644 goto yynewstate;
3645
Lev Walkina00d6b32006-03-21 03:40:38 +00003646yyerrlab: /* here on detecting error */
Lev Walkinf15320b2004-06-03 03:38:44 +00003647
Lev Walkina00d6b32006-03-21 03:40:38 +00003648 if (! yyerrstatus)
3649 /* If not already recovering from an error, report this error. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003650 {
3651 ++yynerrs;
Lev Walkina00d6b32006-03-21 03:40:38 +00003652
3653#ifdef YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003654 yyn = yypact[yystate];
3655
Lev Walkina00d6b32006-03-21 03:40:38 +00003656 if (yyn > YYFLAG && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003657 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003658 int size = 0;
3659 char *msg;
3660 int x, count;
Lev Walkinf15320b2004-06-03 03:38:44 +00003661
Lev Walkina00d6b32006-03-21 03:40:38 +00003662 count = 0;
3663 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3664 for (x = (yyn < 0 ? -yyn : 0);
3665 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
3666 if (yycheck[x + yyn] == x)
3667 size += strlen(yytname[x]) + 15, count++;
3668 msg = (char *) malloc(size + 15);
3669 if (msg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003670 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003671 strcpy(msg, "parse error");
3672
3673 if (count < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003674 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003675 count = 0;
3676 for (x = (yyn < 0 ? -yyn : 0);
3677 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
3678 if (yycheck[x + yyn] == x)
3679 {
3680 strcat(msg, count == 0 ? ", expecting `" : " or `");
3681 strcat(msg, yytname[x]);
3682 strcat(msg, "'");
3683 count++;
3684 }
Lev Walkinf15320b2004-06-03 03:38:44 +00003685 }
Lev Walkina00d6b32006-03-21 03:40:38 +00003686 yyerror(msg);
3687 free(msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003688 }
3689 else
Lev Walkina00d6b32006-03-21 03:40:38 +00003690 yyerror ("parse error; also virtual memory exceeded");
Lev Walkinf15320b2004-06-03 03:38:44 +00003691 }
3692 else
3693#endif /* YYERROR_VERBOSE */
Lev Walkina00d6b32006-03-21 03:40:38 +00003694 yyerror("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003695 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003696
Lev Walkina00d6b32006-03-21 03:40:38 +00003697 goto yyerrlab1;
3698yyerrlab1: /* here on error raised explicitly by an action */
Lev Walkinf15320b2004-06-03 03:38:44 +00003699
3700 if (yyerrstatus == 3)
3701 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003702 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003703
Lev Walkina00d6b32006-03-21 03:40:38 +00003704 /* return failure if at end of input */
3705 if (yychar == YYEOF)
Lev Walkin1004aa92004-09-08 00:28:11 +00003706 YYABORT;
Lev Walkinf15320b2004-06-03 03:38:44 +00003707
Lev Walkina00d6b32006-03-21 03:40:38 +00003708#if YYDEBUG != 0
3709 if (yydebug)
3710 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3711#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003712
Lev Walkina00d6b32006-03-21 03:40:38 +00003713 yychar = YYEMPTY;
Lev Walkinf15320b2004-06-03 03:38:44 +00003714 }
3715
Lev Walkina00d6b32006-03-21 03:40:38 +00003716 /* Else will try to reuse lookahead token
3717 after shifting the error token. */
3718
3719 yyerrstatus = 3; /* Each real token shifted decrements this */
3720
3721 goto yyerrhandle;
3722
3723yyerrdefault: /* current state does not do anything special for the error token. */
3724
3725#if 0
3726 /* This is wrong; only states that explicitly want error tokens
3727 should shift them. */
3728 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3729 if (yyn) goto yydefault;
3730#endif
3731
3732yyerrpop: /* pop the current state because it cannot handle the error token */
3733
3734 if (yyssp == yyss) YYABORT;
3735 yyvsp--;
3736 yystate = *--yyssp;
3737#ifdef YYLSP_NEEDED
3738 yylsp--;
3739#endif
3740
3741#if YYDEBUG != 0
3742 if (yydebug)
3743 {
3744 short *ssp1 = yyss - 1;
3745 fprintf (stderr, "Error: state stack now");
3746 while (ssp1 != yyssp)
3747 fprintf (stderr, " %d", *++ssp1);
3748 fprintf (stderr, "\n");
3749 }
3750#endif
3751
3752yyerrhandle:
3753
3754 yyn = yypact[yystate];
3755 if (yyn == YYFLAG)
3756 goto yyerrdefault;
3757
3758 yyn += YYTERROR;
3759 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3760 goto yyerrdefault;
3761
3762 yyn = yytable[yyn];
3763 if (yyn < 0)
3764 {
3765 if (yyn == YYFLAG)
3766 goto yyerrpop;
3767 yyn = -yyn;
3768 goto yyreduce;
3769 }
3770 else if (yyn == 0)
3771 goto yyerrpop;
3772
Lev Walkinf15320b2004-06-03 03:38:44 +00003773 if (yyn == YYFINAL)
3774 YYACCEPT;
3775
Lev Walkina00d6b32006-03-21 03:40:38 +00003776#if YYDEBUG != 0
3777 if (yydebug)
3778 fprintf(stderr, "Shifting error token, ");
3779#endif
3780
Lev Walkinf15320b2004-06-03 03:38:44 +00003781 *++yyvsp = yylval;
Lev Walkina00d6b32006-03-21 03:40:38 +00003782#ifdef YYLSP_NEEDED
3783 *++yylsp = yylloc;
3784#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003785
3786 yystate = yyn;
3787 goto yynewstate;
3788
Lev Walkina00d6b32006-03-21 03:40:38 +00003789 yyacceptlab:
3790 /* YYACCEPT comes here. */
3791 if (yyfree_stacks)
Lev Walkinfb872bd2006-03-18 06:53:11 +00003792 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003793 free (yyss);
3794 free (yyvs);
3795#ifdef YYLSP_NEEDED
3796 free (yyls);
Lev Walkinfb872bd2006-03-18 06:53:11 +00003797#endif
Lev Walkina00d6b32006-03-21 03:40:38 +00003798 }
3799 return 0;
3800
3801 yyabortlab:
3802 /* YYABORT comes here. */
3803 if (yyfree_stacks)
3804 {
3805 free (yyss);
3806 free (yyvs);
3807#ifdef YYLSP_NEEDED
3808 free (yyls);
3809#endif
3810 }
3811 return 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003812}
Lev Walkin5045dfa2006-03-21 09:41:28 +00003813#line 2227 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00003814
3815
3816
3817/*
3818 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3819 */
3820static asn1p_value_t *
3821_convert_bitstring2binary(char *str, int base) {
3822 asn1p_value_t *val;
3823 int slen;
3824 int memlen;
3825 int baselen;
3826 int bits;
3827 uint8_t *binary_vector;
3828 uint8_t *bv_ptr;
3829 uint8_t cur_val;
3830
3831 assert(str);
3832 assert(str[0] == '\'');
3833
3834 switch(base) {
3835 case 'B':
3836 baselen = 1;
3837 break;
3838 case 'H':
3839 baselen = 4;
3840 break;
3841 default:
3842 assert(base == 'B' || base == 'H');
3843 errno = EINVAL;
3844 return NULL;
3845 }
3846
3847 slen = strlen(str);
3848 assert(str[slen - 1] == base);
3849 assert(str[slen - 2] == '\'');
3850
3851 memlen = slen / (8 / baselen); /* Conservative estimate */
3852
3853 bv_ptr = binary_vector = malloc(memlen + 1);
3854 if(bv_ptr == NULL)
3855 /* ENOMEM */
3856 return NULL;
3857
3858 cur_val = 0;
3859 bits = 0;
3860 while(*(++str) != '\'') {
3861 switch(baselen) {
3862 case 1:
3863 switch(*str) {
3864 case '1':
3865 cur_val |= 1 << (7 - (bits % 8));
3866 case '0':
3867 break;
3868 default:
3869 assert(!"_y UNREACH1");
3870 case ' ': case '\r': case '\n':
3871 continue;
3872 }
3873 break;
3874 case 4:
3875 switch(*str) {
3876 case '0': case '1': case '2': case '3': case '4':
3877 case '5': case '6': case '7': case '8': case '9':
3878 cur_val |= (*str - '0') << (4 - (bits % 8));
3879 break;
3880 case 'A': case 'B': case 'C':
3881 case 'D': case 'E': case 'F':
3882 cur_val |= ((*str - 'A') + 10)
3883 << (4 - (bits % 8));
3884 break;
3885 default:
3886 assert(!"_y UNREACH2");
3887 case ' ': case '\r': case '\n':
3888 continue;
3889 }
3890 break;
3891 }
3892
3893 bits += baselen;
3894 if((bits % 8) == 0) {
3895 *bv_ptr++ = cur_val;
3896 cur_val = 0;
3897 }
3898 }
3899
3900 *bv_ptr = cur_val;
3901 assert((bv_ptr - binary_vector) <= memlen);
3902
3903 val = asn1p_value_frombits(binary_vector, bits, 0);
3904 if(val == NULL) {
3905 free(binary_vector);
3906 }
3907
3908 return val;
3909}
3910
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003911/*
3912 * For unnamed types (used in old X.208 compliant modules)
3913 * generate some sort of interim names, to not to force human being to fix
3914 * the specification's compliance to modern ASN.1 standards.
3915 */
3916static void
3917_fixup_anonymous_identifier(asn1p_expr_t *expr) {
3918 char *p;
3919 assert(expr->Identifier == 0);
3920
3921 /*
3922 * Try to figure out the type name
3923 * without going too much into details
3924 */
3925 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
3926 if(expr->reference && expr->reference->comp_count > 0)
3927 expr->Identifier = expr->reference->components[0].name;
3928
3929 fprintf(stderr,
3930 "WARNING: Line %d: expected lower-case member identifier, "
3931 "found an unnamed %s.\n"
3932 "WARNING: Obsolete X.208 syntax detected, "
3933 "please give the member a name.\n",
3934 yylineno, expr->Identifier ? expr->Identifier : "type");
3935
3936 if(!expr->Identifier)
3937 expr->Identifier = "unnamed";
3938 expr->Identifier = strdup(expr->Identifier);
3939 assert(expr->Identifier);
3940 /* Make a lowercase identifier from the type name */
3941 for(p = expr->Identifier; *p; p++) {
3942 switch(*p) {
3943 case 'A' ... 'Z': *p += 32; break;
3944 case ' ': *p = '_'; break;
3945 case '-': *p = '_'; break;
3946 }
3947 }
3948 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
3949 "Name clash may occur later.\n",
3950 expr->Identifier);
3951}
3952
Lev Walkinf15320b2004-06-03 03:38:44 +00003953int
3954yyerror(const char *msg) {
Lev Walkin9d542d22006-03-14 16:31:37 +00003955 extern char *asn1p_text;
Lev Walkinf15320b2004-06-03 03:38:44 +00003956 fprintf(stderr,
3957 "ASN.1 grammar parse error "
3958 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00003959 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003960 return -1;
3961}
3962