blob: 33d56f91dbf8906781ba8f7d1bb36b58f0402070 [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 Walkin0c0bca62006-03-21 04:48:15 +0000226#define YYFINAL 443
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 Walkin0c0bca62006-03-21 04:48:15 +0000278 135, 139, 141, 145, 147, 148, 155, 157, 159, 164,
279 168, 172, 179, 181, 185, 187, 191, 195, 199, 201,
280 205, 207, 209, 211, 212, 214, 216, 220, 224, 227,
281 231, 233, 235, 239, 242, 244, 246, 252, 253, 255,
282 257, 261, 264, 269, 273, 277, 281, 285, 289, 290,
283 292, 293, 300, 302, 305, 307, 309, 311, 315, 317,
284 321, 325, 329, 330, 333, 335, 340, 345, 350, 357,
Lev Walkina00d6b32006-03-21 03:40:38 +0000285 364, 366, 371, 375, 377, 381, 385, 389, 391, 395,
286 397, 401, 403, 405, 407, 409, 413, 417, 419, 424,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000287 426, 428, 432, 433, 437, 439, 441, 443, 445, 447,
288 449, 451, 453, 457, 459, 461, 463, 465, 468, 470,
289 472, 474, 476, 479, 482, 484, 486, 489, 492, 494,
290 496, 498, 500, 502, 505, 507, 510, 512, 514, 516,
Lev Walkina00d6b32006-03-21 03:40:38 +0000291 518, 520, 522, 524, 526, 528, 530, 532, 534, 536,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000292 538, 540, 542, 544, 546, 548, 549, 551, 553, 558,
293 562, 567, 569, 573, 579, 581, 585, 589, 593, 597,
294 602, 606, 608, 610, 614, 618, 622, 626, 628, 630,
295 631, 637, 639, 642, 645, 649, 651, 653, 655, 657,
296 659, 661, 663, 665, 669, 675, 677, 681, 683, 687,
297 688, 690, 692, 694, 696, 698, 700, 704, 709, 711,
298 715, 718, 722, 724, 728, 729, 731, 733, 736, 739,
299 743, 745, 749, 751, 756, 761, 763, 765, 767, 769,
300 770, 772, 775, 780, 781, 783, 785, 787, 788, 790,
301 792, 794, 796, 798, 799, 801
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,
312 134, 0, 140, 0, 146, 0, 176, 0, 143, 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,
319 223, 107, 108, 0, 226, 0, 0, 223, 145, 3,
320 107, 144, 182, 0, 185, 0, 170, 0, 170, 107,
321 149, 108, 0, 223, 3, 166, 0, 223, 3, 156,
322 0, 223, 107, 147, 108, 3, 166, 0, 148, 0,
323 147, 112, 148, 0, 223, 0, 223, 113, 226, 0,
324 223, 113, 223, 0, 183, 113, 226, 0, 150, 0,
325 149, 112, 150, 0, 166, 0, 179, 0, 226, 0,
326 0, 152, 0, 153, 0, 152, 112, 153, 0, 226,
327 166, 212, 0, 166, 212, 0, 34, 72, 166, 0,
328 165, 0, 155, 0, 154, 112, 155, 0, 226, 166,
329 0, 165, 0, 166, 0, 32, 107, 158, 108, 160,
330 0, 0, 92, 0, 159, 0, 158, 112, 159, 0,
331 16, 212, 0, 17, 166, 157, 212, 0, 17, 174,
332 212, 0, 17, 175, 212, 0, 16, 174, 212, 0,
333 16, 166, 212, 0, 16, 175, 212, 0, 0, 161,
334 0, 0, 99, 86, 107, 162, 163, 108, 0, 164,
335 0, 163, 164, 0, 4, 0, 18, 0, 173, 0,
336 114, 163, 115, 0, 106, 0, 106, 116, 180, 0,
337 106, 116, 217, 0, 218, 168, 190, 0, 0, 167,
338 169, 0, 145, 0, 31, 107, 154, 108, 0, 82,
339 107, 151, 108, 0, 83, 107, 151, 108, 0, 82,
340 190, 72, 225, 218, 168, 0, 83, 190, 72, 225,
341 218, 168, 0, 22, 0, 22, 39, 29, 226, 0,
342 60, 72, 170, 0, 14, 0, 14, 117, 223, 0,
343 224, 117, 223, 0, 14, 117, 226, 0, 224, 0,
344 224, 117, 171, 0, 172, 0, 171, 117, 172, 0,
Lev Walkina00d6b32006-03-21 03:40:38 +0000345 173, 0, 16, 0, 17, 0, 16, 0, 174, 117,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000346 16, 0, 174, 117, 17, 0, 15, 0, 226, 145,
347 3, 177, 0, 179, 0, 180, 0, 226, 113, 177,
348 0, 0, 107, 178, 182, 0, 67, 0, 49, 0,
349 90, 0, 6, 0, 8, 0, 181, 0, 217, 0,
350 226, 0, 223, 117, 226, 0, 7, 0, 11, 0,
351 12, 0, 5, 0, 182, 5, 0, 28, 0, 67,
352 0, 80, 0, 184, 0, 71, 85, 0, 69, 55,
353 0, 81, 0, 48, 0, 40, 75, 0, 30, 85,
354 0, 95, 0, 51, 0, 186, 0, 62, 0, 44,
355 0, 26, 85, 0, 183, 0, 184, 214, 0, 27,
356 0, 52, 0, 53, 0, 54, 0, 63, 0, 68,
357 0, 78, 0, 87, 0, 89, 0, 94, 0, 96,
358 0, 97, 0, 98, 0, 70, 0, 103, 0, 104,
359 0, 101, 0, 102, 0, 100, 0, 0, 191, 0,
360 192, 0, 84, 109, 193, 110, 0, 109, 193, 110,
361 0, 192, 109, 193, 110, 0, 194, 0, 194, 112,
362 106, 0, 194, 112, 106, 112, 194, 0, 195, 0,
363 21, 100, 195, 0, 194, 187, 195, 0, 194, 188,
364 195, 0, 195, 189, 195, 0, 198, 109, 193, 110,
365 0, 109, 193, 110, 0, 199, 0, 200, 0, 199,
366 197, 199, 0, 65, 197, 199, 0, 199, 197, 64,
367 0, 65, 197, 64, 0, 206, 0, 201, 0, 0,
368 35, 29, 107, 196, 182, 0, 105, 0, 105, 118,
369 0, 118, 105, 0, 118, 105, 118, 0, 84, 0,
370 50, 0, 49, 0, 90, 0, 217, 0, 181, 0,
371 226, 0, 223, 0, 99, 33, 192, 0, 99, 34,
372 107, 202, 108, 0, 203, 0, 202, 112, 203, 0,
373 106, 0, 226, 190, 204, 0, 0, 205, 0, 77,
374 0, 19, 0, 73, 0, 207, 0, 208, 0, 107,
375 223, 108, 0, 207, 107, 209, 108, 0, 210, 0,
376 209, 112, 210, 0, 119, 211, 0, 119, 117, 211,
377 0, 226, 0, 211, 117, 226, 0, 0, 213, 0,
378 73, 0, 37, 177, 0, 107, 108, 0, 107, 215,
379 108, 0, 216, 0, 215, 112, 216, 0, 226, 0,
380 226, 109, 217, 110, 0, 226, 109, 180, 110, 0,
381 217, 0, 106, 0, 10, 0, 13, 0, 0, 219,
382 0, 220, 222, 0, 114, 221, 10, 115, 0, 0,
383 93, 0, 23, 0, 79, 0, 0, 56, 0, 45,
384 0, 14, 0, 15, 0, 15, 0, 0, 226, 0,
385 9, 0
Lev Walkina00d6b32006-03-21 03:40:38 +0000386};
Lev Walkinf15320b2004-06-03 03:38:44 +0000387
388#endif
389
Lev Walkina00d6b32006-03-21 03:40:38 +0000390#if YYDEBUG != 0
391static const short yyrline[] = { 0,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000392 322, 328, 334, 350, 375, 377, 380, 384, 389, 396,
393 404, 409, 413, 422, 424, 432, 436, 444, 448, 451,
394 454, 458, 478, 480, 488, 492, 524, 528, 537, 544,
395 557, 564, 566, 578, 590, 601, 606, 612, 618, 620,
396 623, 634, 640, 646, 653, 659, 667, 671, 674, 681,
397 687, 693, 700, 706, 715, 717, 726, 740, 750, 766,
398 776, 792, 800, 810, 820, 825, 832, 839, 849, 855,
399 861, 865, 873, 900, 902, 904, 910, 916, 924, 930,
400 937, 942, 948, 954, 960, 963, 969, 979, 981, 984,
401 992, 999, 1012, 1023, 1033, 1044, 1054, 1065, 1076, 1078,
402 1083, 1087, 1092, 1097, 1103, 1108, 1111, 1115, 1120, 1129,
403 1138, 1149, 1171, 1178, 1197, 1201, 1207, 1213, 1219, 1229,
404 1239, 1245, 1257, 1271, 1280, 1290, 1300, 1310, 1318, 1339,
Lev Walkina00d6b32006-03-21 03:40:38 +0000405 1348, 1357, 1359, 1366, 1373, 1379, 1383, 1389, 1409, 1419,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000406 1421, 1422, 1429, 1429, 1434, 1441, 1447, 1452, 1456, 1460,
407 1463, 1468, 1480, 1497, 1502, 1507, 1540, 1550, 1564, 1566,
408 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576,
409 1577, 1583, 1585, 1586, 1589, 1596, 1608, 1610, 1614, 1618,
410 1619, 1620, 1621, 1622, 1626, 1627, 1628, 1629, 1633, 1634,
411 1641, 1641, 1642, 1642, 1643, 1645, 1647, 1652, 1656, 1665,
412 1669, 1674, 1678, 1684, 1694, 1698, 1701, 1704, 1707, 1712,
413 1721, 1729, 1735, 1741, 1748, 1756, 1764, 1773, 1776, 1779,
414 1780, 1790, 1792, 1793, 1794, 1797, 1801, 1806, 1812, 1817,
415 1820, 1823, 1836, 1850, 1854, 1859, 1863, 1868, 1875, 1888,
416 1890, 1893, 1897, 1900, 1905, 1909, 1917, 1932, 1938, 1945,
417 1958, 1970, 1985, 1989, 2006, 2011, 2014, 2019, 2041, 2046,
418 2051, 2057, 2063, 2071, 2079, 2087, 2094, 2104, 2109, 2139,
419 2141, 2144, 2151, 2157, 2159, 2160, 2161, 2164, 2166, 2167,
420 2170, 2175, 2182, 2189, 2191, 2196
Lev Walkina00d6b32006-03-21 03:40:38 +0000421};
422#endif
423
424
425#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
426
427static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
428"TOK_whitespace","TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier",
429"TOK_number","TOK_tuple","TOK_quadruple","TOK_number_negative","TOK_typereference",
430"TOK_capitalreference","TOK_typefieldreference","TOK_valuefieldreference","TOK_Literal",
431"TOK_ABSENT","TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY","TOK_APPLICATION","TOK_AUTOMATIC",
432"TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN","TOK_BY","TOK_CHARACTER",
433"TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS","TOK_CONSTRAINED",
434"TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED","TOK_EMBEDDED",
435"TOK_ENCODED","TOK_ENCODING_CONTROL","TOK_END","TOK_ENUMERATED","TOK_EXPLICIT",
436"TOK_EXPORTS","TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime",
437"TOK_GeneralString","TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT",
438"TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INSTRUCTIONS",
439"TOK_INTEGER","TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL",
440"TOK_NumericString","TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET","TOK_OF",
441"TOK_OPTIONAL","TOK_PATTERN","TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString",
442"TOK_PRIVATE","TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE",
443"TOK_STRING","TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE",
444"TOK_TYPE_IDENTIFIER","TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime",
445"TOK_UTF8String","TOK_VideotexString","TOK_VisibleString","TOK_WITH","TOK_EXCEPT",
446"'^'","TOK_INTERSECTION","'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots","'{'",
447"'}'","'('","')'","';'","','","':'","'['","']'","'!'","'.'","'<'","'@'","ParsedGrammar",
448"ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
449"ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags",
450"ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody",
451"ModuleSpecificationBody","ModuleSpecificationElement","@1","ImportsDefinition",
452"ImportsBundleSet","AssignedIdentifier","ImportsBundle","ImportsList","ImportsElement",
453"ExportsDefinition","ExportsBody","ExportsElement","ValueSetDefinition","@2",
Lev Walkin0c0bca62006-03-21 04:48:15 +0000454"DefinedType","DataTypeReference","ParameterArgumentList","ParameterArgumentName",
Lev Walkina00d6b32006-03-21 03:40:38 +0000455"Specializations","Specialization","optComponentTypeLists","ComponentTypeLists",
456"ComponentType","AlternativeTypeLists","AlternativeType","ObjectClass","optUnique",
457"FieldSpec","ClassField","optWithSyntax","WithSyntax","@3","WithSyntaxList",
458"WithSyntaxToken","ExtensionAndException","Type","NSTD_IndirectMarker","TypeDeclaration",
459"TypeDeclarationSet","ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement",
460"PrimitiveFieldReference","FieldName","DefinedObjectClass","ValueDefinition",
Lev Walkin0c0bca62006-03-21 04:48:15 +0000461"Value","@4","SimpleValue","DefinedValue","RestrictedCharacterStringValue","Opaque",
462"BasicTypeId","BasicTypeId_UniverationCompatible","BasicType","BasicString",
463"Union","Intersection","Except","optConstraints","Constraints","SetOfConstraints",
464"ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement","@5","ConstraintRangeSpec",
465"ConstraintSpec","SingleValue","ContainedSubtype","InnerTypeConstraint","WithComponentsList",
Lev Walkina00d6b32006-03-21 03:40:38 +0000466"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
467"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
468"ComponentIdList","optMarker","Marker","UniverationDefinition","UniverationList",
469"UniverationElement","SignedNumber","optTag","Tag","TagTypeValue","TagClass",
470"TagPlicit","TypeRefName","ObjectClassReference","optIdentifier","Identifier", NULL
471};
472#endif
473
474static const short yyr1[] = { 0,
475 120, 121, 121, 122, 123, 123, 124, 124, 125, 125,
476 126, 126, 126, 127, 127, 128, 128, 129, 129, 129,
477 129, 129, 130, 130, 131, 131, 132, 132, 132, 132,
478 132, 133, 132, 132, 134, 134, 135, 135, 136, 136,
479 137, 138, 138, 139, 139, 139, 140, 140, 140, 141,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000480 141, 142, 142, 142, 144, 143, 145, 145, 145, 146,
481 146, 146, 147, 147, 148, 148, 148, 148, 149, 149,
482 150, 150, 150, 151, 151, 152, 152, 153, 153, 153,
483 153, 154, 154, 155, 155, 155, 156, 157, 157, 158,
484 158, 159, 159, 159, 159, 159, 159, 159, 160, 160,
485 162, 161, 163, 163, 164, 164, 164, 164, 165, 165,
486 165, 166, 167, 168, 169, 169, 169, 169, 169, 169,
Lev Walkina00d6b32006-03-21 03:40:38 +0000487 169, 169, 169, 170, 170, 170, 170, 170, 170, 171,
488 171, 172, 173, 173, 174, 174, 174, 175, 176, 177,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000489 177, 177, 178, 177, 177, 179, 179, 179, 179, 179,
490 179, 180, 180, 181, 181, 181, 182, 182, 183, 183,
491 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
492 183, 184, 184, 184, 185, 185, 186, 186, 186, 186,
493 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
494 187, 187, 188, 188, 189, 190, 190, 191, 191, 192,
495 192, 193, 193, 193, 194, 194, 194, 194, 194, 195,
496 195, 195, 195, 195, 195, 195, 195, 195, 195, 196,
497 195, 197, 197, 197, 197, 198, 198, 199, 199, 199,
498 199, 199, 200, 201, 201, 202, 202, 203, 203, 204,
499 204, 205, 205, 205, 206, 206, 207, 208, 209, 209,
500 210, 210, 211, 211, 212, 212, 213, 213, 214, 214,
501 215, 215, 216, 216, 216, 216, 216, 217, 217, 218,
502 218, 219, 220, 221, 221, 221, 221, 222, 222, 222,
503 223, 223, 224, 225, 225, 226
Lev Walkina00d6b32006-03-21 03:40:38 +0000504};
505
506static const short yyr2[] = { 0,
507 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
508 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
509 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
510 1, 0, 3, 1, 3, 2, 1, 2, 0, 1,
511 4, 1, 3, 1, 3, 1, 3, 3, 2, 1,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000512 3, 1, 3, 1, 0, 6, 1, 1, 4, 3,
513 3, 6, 1, 3, 1, 3, 3, 3, 1, 3,
514 1, 1, 1, 0, 1, 1, 3, 3, 2, 3,
515 1, 1, 3, 2, 1, 1, 5, 0, 1, 1,
516 3, 2, 4, 3, 3, 3, 3, 3, 0, 1,
517 0, 6, 1, 2, 1, 1, 1, 3, 1, 3,
518 3, 3, 0, 2, 1, 4, 4, 4, 6, 6,
Lev Walkina00d6b32006-03-21 03:40:38 +0000519 1, 4, 3, 1, 3, 3, 3, 1, 3, 1,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000520 3, 1, 1, 1, 1, 3, 3, 1, 4, 1,
521 1, 3, 0, 3, 1, 1, 1, 1, 1, 1,
522 1, 1, 3, 1, 1, 1, 1, 2, 1, 1,
523 1, 1, 2, 2, 1, 1, 2, 2, 1, 1,
524 1, 1, 1, 2, 1, 2, 1, 1, 1, 1,
Lev Walkina00d6b32006-03-21 03:40:38 +0000525 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000526 1, 1, 1, 1, 1, 0, 1, 1, 4, 3,
527 4, 1, 3, 5, 1, 3, 3, 3, 3, 4,
528 3, 1, 1, 3, 3, 3, 3, 1, 1, 0,
529 5, 1, 2, 2, 3, 1, 1, 1, 1, 1,
530 1, 1, 1, 3, 5, 1, 3, 1, 3, 0,
531 1, 1, 1, 1, 1, 1, 3, 4, 1, 3,
532 2, 3, 1, 3, 0, 1, 1, 2, 2, 3,
533 1, 3, 1, 4, 4, 1, 1, 1, 1, 0,
534 1, 2, 4, 0, 1, 1, 1, 0, 1, 1,
535 1, 1, 1, 0, 1, 1
Lev Walkina00d6b32006-03-21 03:40:38 +0000536};
537
538static const short yydefact[] = { 0,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000539 281, 282, 1, 2, 5, 3, 0, 0, 6, 286,
Lev Walkina00d6b32006-03-21 03:40:38 +0000540 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
541 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000542 18, 21, 19, 0, 17, 12, 23, 177, 0, 0,
543 178, 179, 180, 0, 181, 182, 190, 183, 184, 185,
544 186, 187, 188, 189, 0, 24, 25, 27, 28, 31,
Lev Walkina00d6b32006-03-21 03:40:38 +0000545 29, 30, 34, 0, 0, 32, 0, 49, 0, 50,
546 52, 54, 36, 0, 37, 0, 42, 44, 46, 4,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000547 26, 270, 124, 283, 0, 159, 0, 0, 173, 166,
548 170, 172, 160, 0, 0, 161, 165, 169, 0, 0,
549 58, 175, 162, 57, 171, 128, 0, 33, 48, 47,
550 0, 0, 35, 38, 0, 0, 0, 0, 274, 61,
551 60, 113, 271, 278, 0, 174, 168, 167, 164, 163,
552 0, 63, 0, 162, 65, 0, 270, 0, 176, 0,
553 0, 51, 53, 39, 43, 45, 0, 276, 277, 275,
554 0, 0, 196, 280, 279, 272, 125, 127, 0, 0,
555 0, 0, 55, 148, 154, 149, 268, 155, 156, 269,
556 146, 147, 0, 69, 71, 72, 150, 151, 73, 267,
557 259, 0, 261, 266, 263, 133, 134, 129, 130, 132,
558 126, 145, 143, 139, 140, 141, 0, 152, 40, 41,
559 270, 270, 0, 90, 0, 121, 0, 0, 196, 196,
560 115, 114, 0, 0, 112, 197, 198, 270, 64, 68,
561 67, 66, 0, 59, 270, 260, 0, 0, 0, 0,
562 0, 0, 138, 135, 0, 257, 255, 255, 255, 92,
563 256, 88, 255, 255, 99, 0, 273, 0, 270, 0,
564 270, 0, 270, 0, 0, 0, 0, 228, 227, 0,
565 226, 229, 0, 0, 0, 231, 0, 202, 205, 0,
566 212, 213, 219, 218, 245, 246, 230, 233, 232, 0,
567 62, 157, 56, 70, 262, 0, 0, 152, 131, 144,
568 153, 142, 258, 97, 0, 96, 98, 89, 255, 94,
569 95, 0, 87, 100, 91, 0, 109, 0, 82, 85,
570 86, 270, 123, 0, 0, 75, 76, 81, 255, 270,
571 284, 0, 284, 0, 0, 0, 222, 0, 0, 0,
572 0, 0, 0, 200, 193, 194, 191, 192, 0, 0,
573 0, 195, 0, 0, 0, 0, 0, 158, 265, 264,
574 136, 137, 93, 0, 122, 0, 116, 270, 84, 270,
575 117, 270, 79, 255, 270, 285, 118, 270, 199, 206,
576 220, 223, 224, 217, 215, 234, 0, 247, 211, 203,
577 207, 208, 209, 0, 216, 214, 0, 0, 249, 201,
578 101, 110, 111, 83, 80, 77, 78, 113, 113, 0,
579 225, 238, 0, 236, 196, 0, 210, 0, 251, 253,
580 248, 0, 0, 119, 120, 221, 235, 0, 240, 204,
581 252, 0, 250, 105, 106, 0, 0, 103, 107, 237,
582 243, 244, 242, 239, 241, 254, 0, 102, 104, 108,
583 0, 0, 0
Lev Walkina00d6b32006-03-21 03:40:38 +0000584};
585
Lev Walkin0c0bca62006-03-21 04:48:15 +0000586static const short yydefgoto[] = { 441,
Lev Walkina00d6b32006-03-21 03:40:38 +0000587 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000588 56, 57, 108, 58, 74, 200, 75, 76, 77, 59,
589 69, 70, 60, 223, 100, 61, 131, 132, 173, 174,
590 315, 316, 317, 308, 309, 120, 299, 203, 204, 303,
591 304, 413, 427, 428, 318, 319, 152, 153, 212, 101,
592 188, 189, 429, 238, 239, 62, 194, 230, 195, 196,
593 266, 283, 102, 103, 104, 105, 340, 341, 343, 215,
594 216, 217, 267, 268, 269, 400, 329, 270, 271, 272,
595 273, 403, 404, 434, 435, 274, 275, 276, 388, 389,
596 409, 240, 241, 139, 182, 183, 277, 122, 123, 124,
597 151, 156, 278, 106, 365, 279
Lev Walkina00d6b32006-03-21 03:40:38 +0000598};
599
Lev Walkin0c0bca62006-03-21 04:48:15 +0000600static const short yypact[] = { 58,
601-32768,-32768, 58,-32768, -52,-32768, 11, 63,-32768,-32768,
602-32768,-32768, 19,-32768, -13, 193,-32768,-32768, 105, 92,
603 20, 71, 108, 107, 197, 193,-32768, 101,-32768,-32768,
604-32768,-32768,-32768, 212,-32768,-32768, 415,-32768, 230, 45,
605-32768,-32768,-32768, 182,-32768,-32768,-32768,-32768,-32768,-32768,
606-32768,-32768,-32768,-32768, 210, 415,-32768,-32768,-32768,-32768,
607-32768,-32768,-32768, 240, 568,-32768, 152,-32768, 139,-32768,
608 162,-32768,-32768, 47,-32768, -34,-32768, 164,-32768,-32768,
609-32768, 37, 157,-32768, 204,-32768, 211, 226,-32768,-32768,
610-32768,-32768,-32768, 251, 227,-32768,-32768,-32768, 644, 314,
611 217,-32768, 235,-32768,-32768, 202, 330,-32768,-32768,-32768,
612 200, 232,-32768,-32768, 58, 200, 253, 241, 134,-32768,
613-32768,-32768,-32768, 36, 200,-32768,-32768,-32768,-32768,-32768,
614 95,-32768, 256,-32768, 260, 272, 76, 61,-32768, 367,
615 174,-32768,-32768, -52,-32768,-32768, 288,-32768,-32768,-32768,
616 375, 492, 90,-32768,-32768,-32768,-32768,-32768, 384, 644,
617 381, 200,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
618-32768,-32768, 122,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
619-32768, 140,-32768,-32768, 289,-32768,-32768, 282,-32768,-32768,
620-32768,-32768,-32768,-32768,-32768,-32768, 283, 293,-32768,-32768,
621 98, 32, 178,-32768, 292, 373, 306, 344, 188, 216,
622-32768,-32768, 305, 353,-32768,-32768, 316, 309,-32768,-32768,
623-32768,-32768, 421,-32768, 76,-32768, 67, 395, 315, 421,
624 381, 174,-32768,-32768, 174,-32768, 21, 99, 21,-32768,
625-32768, 335, 99, 21, 329, 288,-32768, 404, 33, 268,
626 56, 362, 56, 363, 353, 336, 409,-32768,-32768, 74,
627-32768,-32768, 319, 58, 353,-32768, 331, 274, 339, 337,
628 74,-32768,-32768,-32768, 333,-32768,-32768,-32768,-32768, 353,
629-32768,-32768, 439,-32768,-32768, 338, 340,-32768,-32768, 439,
630-32768,-32768,-32768,-32768, 342,-32768,-32768,-32768, 21,-32768,
631-32768, 359,-32768,-32768,-32768, 381, 343, 214,-32768,-32768,
632-32768, 309,-32768, 377, 345, 346,-32768,-32768, 21, 309,
633 381, 347, 381, 341, 382, 349, 352, 358, 249, 355,
634 364, 357, 365,-32768,-32768,-32768,-32768,-32768, 348, 382,
635 382,-32768, 382, 353, 266, 360, 366,-32768,-32768,-32768,
636-32768,-32768,-32768, 370,-32768, 395,-32768, 33,-32768, 309,
637-32768, 34,-32768, 21, 309,-32768,-32768, 309,-32768,-32768,
638-32768,-32768, 356,-32768,-32768, 316, 31,-32768,-32768, 368,
639-32768,-32768,-32768, 372,-32768,-32768, 5, 233,-32768,-32768,
640-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 421,
641-32768,-32768, 242,-32768, 90, 353,-32768, 381, 369,-32768,
642-32768, 360, 18,-32768,-32768, 439,-32768, 31, 158, 318,
643 369, 381,-32768,-32768,-32768, 18, 35,-32768,-32768,-32768,
644-32768,-32768,-32768,-32768,-32768,-32768, 9,-32768,-32768,-32768,
645 484, 487,-32768
Lev Walkina00d6b32006-03-21 03:40:38 +0000646};
647
648static const short yypgoto[] = {-32768,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000649-32768, 485,-32768, 350,-32768, 477,-32768,-32768, 466,-32768,
650-32768, 440,-32768,-32768,-32768,-32768, 423,-32768, 379,-32768,
651-32768, 387,-32768,-32768, -19,-32768,-32768, 361,-32768, 275,
652 246,-32768, 141,-32768, 143,-32768,-32768,-32768, 259,-32768,
653-32768,-32768, 82, -277, -237, -73,-32768, -27,-32768, 265,
654-32768, 281, -109, 322, 323,-32768, -30,-32768, -122, -218,
655 -31, -225, -67, -49,-32768, 7,-32768,-32768,-32768, -207,
656-32768, 186, -87, 111, 3,-32768, 255,-32768, -238,-32768,
657-32768,-32768, 109,-32768,-32768,-32768,-32768,-32768,-32768, 116,
658 121, -220,-32768,-32768,-32768, 303, -130, -146,-32768,-32768,
659-32768,-32768, 1,-32768, 208, -7
Lev Walkina00d6b32006-03-21 03:40:38 +0000660};
661
662
Lev Walkin0c0bca62006-03-21 04:48:15 +0000663#define YYLAST 742
Lev Walkina00d6b32006-03-21 03:40:38 +0000664
665
666static const short yytable[] = { 15,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000667 5, 252, 254, 5, 290, 15, 178, 184, 121, 286,
668 178, 310, 424, 10, 176, 115, 294, 296, 297, 10,
669 11, 424, 300, 301, 186, 187, 425, 10, 11, 65,
670 190, 133, 72, 186, 187, 425, 79, 64, 424, 10,
671 71, 10, 10, 63, 78, 107, 233, 234, 65, 134,
672 186, 187, 425, 10, 7, 10, 64, 235, 1, 2,
673 1, 2, 63, 175, 10, 67, 79, 314, 118, 10,
674 167, 1, 2, 170, 78, 10, 167, 116, 353, 170,
675 154, 164, 165, 166, 10, 167, 168, 169, 170, 314,
676 375, 155, 133, 236, 178, 19, 184, 287, 363, 135,
677 16, 178, 176, 72, 178, 177, 386, 30, 79, 177,
678 134, 71, 233, 234, 28, 144, 78, 158, 12, 190,
679 310, 408, 426, 440, 171, 157, 17, 237, 242, 179,
680 185, 426, 211, 198, 235, 235, 402, 392, 307, 307,
681 191, 197, 438, 397, 281, 119, 119, 119, 426, 439,
682 119, 175, 29, 220, 222, 68, 148, 113, 31, 439,
683 135, 307, 221, -74, 32, 172, 180, 324, 181, 119,
684 236, 236, 180, 213, 416, 311, 431, 333, 327, 164,
685 165, 166, 10, 167, 168, 169, 170, 1, 2, 119,
686 10, 328, 347, 177, 33, 1, 2, 419, 214, 34,
687 177, 292, 159, 177, 293, -255, 160, 20, 10, -255,
688 36, 119, 149, 1, 2, 295, 21, 179, 398, 185,
689 288, 399, 171, 291, 198, 393, 150, 198, 197, 224,
690 432, 73, 197, 225, 433, 197, 37, 22, 359, 23,
691 192, 312, 82, 320, 66, 320, 364, 226, 24, 110,
692 111, 227, 80, 83, 84, 165, 384, 10, 167, 168,
693 169, 170, 109, 172, 332, 85, 38, 86, 112, 87,
694 117, 213, 165, 125, 10, 167, 168, 169, 170, 88,
695 193, 83, 84, 89, 311, 245, 395, 90, 126, 246,
696 91, 41, 42, 43, 251, 127, 214, 258, 355, 213,
697 128, 92, 45, 201, 202, 129, 93, 46, 94, 47,
698 95, 130, 374, 366, 258, 366, 136, 48, 140, 96,
699 97, 357, 253, 137, 214, 358, 49, 370, 50, 385,
700 186, 187, 141, 51, 98, 52, 53, 54, 262, 143,
701 411, 138, 381, 382, 412, 383, 99, 147, 288, 417,
702 312, 330, 331, 418, 320, 262, 197, 351, 352, 165,
703 146, 10, 167, 168, 169, 170, 1, 2, 161, 405,
704 414, 415, 162, 256, 335, 336, 337, 338, 163, 410,
705 1, 2, 186, 187, 205, 339, 218, 257, 165, 10,
706 10, 167, 168, 169, 170, 1, 2, 228, 229, 231,
707 410, 258, 259, 10, 167, 232, 247, 170, 1, 2,
708 405, 248, 249, 255, 436, 250, 257, 260, 335, 336,
709 337, 338, 119, 10, 280, 282, 298, 302, 1, 2,
710 258, 259, 306, 321, 323, 325, 261, 326, 342, 346,
711 334, 38, 262, 348, 354, 344, 260, 349, 360, 350,
712 369, 263, 361, 380, 367, 371, 39, 362, 356, 264,
713 40, 265, 373, 214, 378, 261, 41, 42, 43, 372,
714 377, 262, 44, 401, 379, 390, 391, 45, 387, 406,
715 263, 407, 46, 442, 47, 422, 443, 6, 264, 18,
716 265, 35, 48, 199, 145, 81, 114, 142, 322, 284,
717 394, 49, 396, 50, 305, 83, 84, 437, 51, 289,
718 52, 53, 54, 206, 313, 376, 420, 85, 38, 86,
719 219, 87, 207, 243, 244, 345, 430, 423, 421, 285,
720 368, 88, 0, 0, 0, 89, 0, 0, 0, 90,
Lev Walkina00d6b32006-03-21 03:40:38 +0000721 0, 0, 91, 41, 42, 43, 0, 0, 0, 0,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000722 0, 208, 0, 92, 45, 0, 0, 0, 93, 46,
Lev Walkina00d6b32006-03-21 03:40:38 +0000723 94, 47, 95, 0, 0, 0, 0, 0, 0, 48,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000724 0, 96, 97, 209, 210, 0, 0, 0, 49, 0,
725 50, 83, 84, 0, 0, 51, 98, 52, 53, 54,
Lev Walkina00d6b32006-03-21 03:40:38 +0000726 0, 0, 0, 85, 38, 86, 0, 87, 0, 0,
727 0, 0, 0, 0, 0, 0, 0, 88, 0, 0,
728 0, 89, 0, 0, 0, 90, 0, 0, 91, 41,
729 42, 43, 0, 0, 0, 0, 0, 0, 0, 92,
730 45, 0, 0, 0, 93, 46, 94, 47, 95, 0,
731 0, 0, 0, 0, 0, 48, 0, 96, 97, 0,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000732 0, 0, 0, 0, 49, 0, 50, 1, 2, 0,
733 0, 51, 98, 52, 53, 54, 0, 0, 0, 85,
734 38, 86, 0, 87, 0, 0, 0, 0, 0, 0,
735 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
736 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
737 0, 0, 0, 0, 0, 92, 45, 0, 0, 0,
738 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
739 0, 48, 0, 96, 97, 0, 0, 0, 0, 0,
740 49, 0, 50, 0, 0, 0, 0, 51, 98, 52,
741 53, 54
Lev Walkina00d6b32006-03-21 03:40:38 +0000742};
743
744static const short yycheck[] = { 7,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000745 0, 209, 210, 3, 230, 13, 137, 138, 82, 228,
746 141, 249, 4, 9, 137, 50, 237, 238, 239, 9,
747 10, 4, 243, 244, 16, 17, 18, 9, 10, 37,
748 140, 99, 40, 16, 17, 18, 44, 37, 4, 9,
749 40, 9, 9, 37, 44, 65, 15, 16, 56, 99,
750 16, 17, 18, 9, 107, 9, 56, 37, 14, 15,
751 14, 15, 56, 137, 9, 21, 74, 34, 32, 9,
752 10, 14, 15, 13, 74, 9, 10, 112, 299, 13,
753 45, 6, 7, 8, 9, 10, 11, 12, 13, 34,
754 329, 56, 160, 73, 225, 109, 227, 228, 319, 99,
755 38, 232, 225, 111, 235, 137, 345, 88, 116, 141,
756 160, 111, 15, 16, 10, 115, 116, 125, 108, 229,
757 358, 117, 114, 115, 49, 125, 108, 201, 202, 137,
758 138, 114, 152, 141, 37, 37, 106, 356, 106, 106,
759 140, 141, 108, 364, 218, 114, 114, 114, 114, 427,
760 114, 225, 61, 161, 162, 111, 23, 111, 88, 437,
761 160, 106, 162, 108, 57, 90, 106, 255, 108, 114,
762 73, 73, 106, 84, 400, 249, 19, 265, 105, 6,
763 7, 8, 9, 10, 11, 12, 13, 14, 15, 114,
764 9, 118, 280, 225, 88, 14, 15, 405, 109, 3,
765 232, 232, 108, 235, 235, 108, 112, 15, 9, 112,
766 110, 114, 79, 14, 15, 117, 24, 225, 365, 227,
767 228, 368, 49, 231, 232, 356, 93, 235, 228, 108,
768 73, 50, 232, 112, 77, 235, 25, 45, 312, 47,
769 67, 249, 3, 251, 15, 253, 320, 108, 56, 111,
770 112, 112, 43, 14, 15, 7, 344, 9, 10, 11,
771 12, 13, 111, 90, 264, 26, 27, 28, 107, 30,
772 107, 84, 7, 117, 9, 10, 11, 12, 13, 40,
773 107, 14, 15, 44, 358, 108, 360, 48, 85, 112,
774 51, 52, 53, 54, 107, 85, 109, 49, 306, 84,
775 75, 62, 63, 16, 17, 55, 67, 68, 69, 70,
776 71, 85, 64, 321, 49, 323, 3, 78, 117, 80,
777 81, 108, 107, 107, 109, 112, 87, 325, 89, 64,
778 16, 17, 3, 94, 95, 96, 97, 98, 90, 108,
779 108, 107, 340, 341, 112, 343, 107, 107, 356, 108,
780 358, 33, 34, 112, 362, 90, 356, 16, 17, 7,
781 108, 9, 10, 11, 12, 13, 14, 15, 113, 377,
782 398, 399, 113, 21, 101, 102, 103, 104, 107, 387,
783 14, 15, 16, 17, 10, 112, 3, 35, 7, 9,
784 9, 10, 11, 12, 13, 14, 15, 109, 117, 117,
785 408, 49, 50, 9, 10, 113, 115, 13, 14, 15,
786 418, 39, 107, 109, 422, 72, 35, 65, 101, 102,
787 103, 104, 114, 9, 109, 5, 92, 99, 14, 15,
788 49, 50, 29, 72, 72, 100, 84, 29, 100, 107,
789 110, 27, 90, 5, 86, 109, 65, 110, 72, 110,
790 110, 99, 108, 106, 108, 107, 42, 112, 116, 107,
791 46, 109, 105, 109, 108, 84, 52, 53, 54, 118,
792 107, 90, 58, 118, 110, 110, 107, 63, 119, 112,
793 99, 110, 68, 0, 70, 117, 0, 3, 107, 13,
794 109, 26, 78, 144, 116, 56, 74, 111, 253, 225,
795 358, 87, 362, 89, 246, 14, 15, 426, 94, 229,
796 96, 97, 98, 22, 250, 330, 406, 26, 27, 28,
797 160, 30, 31, 202, 202, 271, 418, 412, 408, 227,
798 323, 40, -1, -1, -1, 44, -1, -1, -1, 48,
Lev Walkina00d6b32006-03-21 03:40:38 +0000799 -1, -1, 51, 52, 53, 54, -1, -1, -1, -1,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000800 -1, 60, -1, 62, 63, -1, -1, -1, 67, 68,
Lev Walkina00d6b32006-03-21 03:40:38 +0000801 69, 70, 71, -1, -1, -1, -1, -1, -1, 78,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000802 -1, 80, 81, 82, 83, -1, -1, -1, 87, -1,
Lev Walkina00d6b32006-03-21 03:40:38 +0000803 89, 14, 15, -1, -1, 94, 95, 96, 97, 98,
804 -1, -1, -1, 26, 27, 28, -1, 30, -1, -1,
805 -1, -1, -1, -1, -1, -1, -1, 40, -1, -1,
806 -1, 44, -1, -1, -1, 48, -1, -1, 51, 52,
807 53, 54, -1, -1, -1, -1, -1, -1, -1, 62,
808 63, -1, -1, -1, 67, 68, 69, 70, 71, -1,
809 -1, -1, -1, -1, -1, 78, -1, 80, 81, -1,
Lev Walkin0c0bca62006-03-21 04:48:15 +0000810 -1, -1, -1, -1, 87, -1, 89, 14, 15, -1,
811 -1, 94, 95, 96, 97, 98, -1, -1, -1, 26,
812 27, 28, -1, 30, -1, -1, -1, -1, -1, -1,
813 -1, -1, -1, 40, -1, -1, -1, 44, -1, -1,
814 -1, 48, -1, -1, 51, 52, 53, 54, -1, -1,
815 -1, -1, -1, -1, -1, 62, 63, -1, -1, -1,
816 67, 68, 69, 70, 71, -1, -1, -1, -1, -1,
817 -1, 78, -1, 80, 81, -1, -1, -1, -1, -1,
818 87, -1, 89, -1, -1, -1, -1, 94, 95, 96,
819 97, 98
Lev Walkina00d6b32006-03-21 03:40:38 +0000820};
821/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
822#line 3 "/usr/share/bison.simple"
823/* This file comes from bison-1.28. */
824
825/* Skeleton output parser for bison,
826 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
827
828 This program is free software; you can redistribute it and/or modify
829 it under the terms of the GNU General Public License as published by
830 the Free Software Foundation; either version 2, or (at your option)
831 any later version.
832
833 This program is distributed in the hope that it will be useful,
834 but WITHOUT ANY WARRANTY; without even the implied warranty of
835 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
836 GNU General Public License for more details.
837
838 You should have received a copy of the GNU General Public License
839 along with this program; if not, write to the Free Software
840 Foundation, Inc., 59 Temple Place - Suite 330,
841 Boston, MA 02111-1307, USA. */
842
843/* As a special exception, when this file is copied by Bison into a
844 Bison output file, you may use that output file without restriction.
845 This special exception was added by the Free Software Foundation
846 in version 1.24 of Bison. */
847
848/* This is the parser code that is written into each bison parser
849 when the %semantic_parser declaration is not specified in the grammar.
850 It was written by Richard Stallman by simplifying the hairy parser
851 used when %semantic_parser is specified. */
852
853#ifndef YYSTACK_USE_ALLOCA
854#ifdef alloca
855#define YYSTACK_USE_ALLOCA
856#else /* alloca not defined */
857#ifdef __GNUC__
858#define YYSTACK_USE_ALLOCA
859#define alloca __builtin_alloca
860#else /* not GNU C. */
861#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
862#define YYSTACK_USE_ALLOCA
863#include <alloca.h>
864#else /* not sparc */
865/* We think this test detects Watcom and Microsoft C. */
866/* This used to test MSDOS, but that is a bad idea
867 since that symbol is in the user namespace. */
868#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
869#if 0 /* No need for malloc.h, which pollutes the namespace;
870 instead, just don't use alloca. */
871#include <malloc.h>
872#endif
873#else /* not MSDOS, or __TURBOC__ */
874#if defined(_AIX)
875/* I don't know what this was needed for, but it pollutes the namespace.
876 So I turned it off. rms, 2 May 1997. */
877/* #include <malloc.h> */
878 #pragma alloca
879#define YYSTACK_USE_ALLOCA
880#else /* not MSDOS, or __TURBOC__, or _AIX */
881#if 0
882#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
883 and on HPUX 10. Eventually we can turn this on. */
884#define YYSTACK_USE_ALLOCA
885#define alloca __builtin_alloca
886#endif /* __hpux */
887#endif
888#endif /* not _AIX */
889#endif /* not MSDOS, or __TURBOC__ */
890#endif /* not sparc */
891#endif /* not GNU C */
892#endif /* alloca not defined */
893#endif /* YYSTACK_USE_ALLOCA not defined */
894
895#ifdef YYSTACK_USE_ALLOCA
896#define YYSTACK_ALLOC alloca
Lev Walkinf15320b2004-06-03 03:38:44 +0000897#else
Lev Walkina00d6b32006-03-21 03:40:38 +0000898#define YYSTACK_ALLOC malloc
Lev Walkinf15320b2004-06-03 03:38:44 +0000899#endif
900
Lev Walkina00d6b32006-03-21 03:40:38 +0000901/* Note: there must be only one dollar sign in this file.
902 It is replaced by the list of actions, each action
903 as one case of the switch. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000904
905#define yyerrok (yyerrstatus = 0)
906#define yyclearin (yychar = YYEMPTY)
Lev Walkina00d6b32006-03-21 03:40:38 +0000907#define YYEMPTY -2
Lev Walkinf15320b2004-06-03 03:38:44 +0000908#define YYEOF 0
909#define YYACCEPT goto yyacceptlab
Lev Walkina00d6b32006-03-21 03:40:38 +0000910#define YYABORT goto yyabortlab
911#define YYERROR goto yyerrlab1
912/* Like YYERROR except do call yyerror.
913 This remains here temporarily to ease the
914 transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +0000915 Once GCC version 2 has supplanted version 1, this can go. */
916#define YYFAIL goto yyerrlab
917#define YYRECOVERING() (!!yyerrstatus)
Lev Walkina00d6b32006-03-21 03:40:38 +0000918#define YYBACKUP(token, value) \
Lev Walkinf15320b2004-06-03 03:38:44 +0000919do \
920 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkina00d6b32006-03-21 03:40:38 +0000921 { yychar = (token), yylval = (value); \
922 yychar1 = YYTRANSLATE (yychar); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000923 YYPOPSTACK; \
924 goto yybackup; \
925 } \
926 else \
Lev Walkina00d6b32006-03-21 03:40:38 +0000927 { yyerror ("syntax error: cannot back up"); YYERROR; } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000928while (0)
929
930#define YYTERROR 1
931#define YYERRCODE 256
932
Lev Walkina00d6b32006-03-21 03:40:38 +0000933#ifndef YYPURE
934#define YYLEX yylex()
Lev Walkinf15320b2004-06-03 03:38:44 +0000935#endif
936
Lev Walkina00d6b32006-03-21 03:40:38 +0000937#ifdef YYPURE
938#ifdef YYLSP_NEEDED
Lev Walkin1004aa92004-09-08 00:28:11 +0000939#ifdef YYLEX_PARAM
Lev Walkina00d6b32006-03-21 03:40:38 +0000940#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
Lev Walkin1004aa92004-09-08 00:28:11 +0000941#else
Lev Walkina00d6b32006-03-21 03:40:38 +0000942#define YYLEX yylex(&yylval, &yylloc)
943#endif
944#else /* not YYLSP_NEEDED */
945#ifdef YYLEX_PARAM
946#define YYLEX yylex(&yylval, YYLEX_PARAM)
947#else
948#define YYLEX yylex(&yylval)
949#endif
950#endif /* not YYLSP_NEEDED */
Lev Walkin1004aa92004-09-08 00:28:11 +0000951#endif
Lev Walkinfb872bd2006-03-18 06:53:11 +0000952
Lev Walkina00d6b32006-03-21 03:40:38 +0000953/* If nonreentrant, generate the variables here */
Lev Walkinfb872bd2006-03-18 06:53:11 +0000954
Lev Walkina00d6b32006-03-21 03:40:38 +0000955#ifndef YYPURE
Lev Walkinfb872bd2006-03-18 06:53:11 +0000956
Lev Walkina00d6b32006-03-21 03:40:38 +0000957int yychar; /* the lookahead symbol */
958YYSTYPE yylval; /* the semantic value of the */
959 /* lookahead symbol */
Lev Walkinfb872bd2006-03-18 06:53:11 +0000960
Lev Walkina00d6b32006-03-21 03:40:38 +0000961#ifdef YYLSP_NEEDED
962YYLTYPE yylloc; /* location data for the lookahead */
963 /* symbol */
Lev Walkin1004aa92004-09-08 00:28:11 +0000964#endif
Lev Walkinfb872bd2006-03-18 06:53:11 +0000965
Lev Walkina00d6b32006-03-21 03:40:38 +0000966int yynerrs; /* number of parse errors so far */
967#endif /* not YYPURE */
Lev Walkinfb872bd2006-03-18 06:53:11 +0000968
Lev Walkina00d6b32006-03-21 03:40:38 +0000969#if YYDEBUG != 0
970int yydebug; /* nonzero means print parse trace */
971/* Since this is uninitialized, it does not stop multiple parsers
972 from coexisting. */
Lev Walkin1004aa92004-09-08 00:28:11 +0000973#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000974
Lev Walkina00d6b32006-03-21 03:40:38 +0000975/* YYINITDEPTH indicates the initial size of the parser's stacks */
Lev Walkinf15320b2004-06-03 03:38:44 +0000976
Lev Walkinf15320b2004-06-03 03:38:44 +0000977#ifndef YYINITDEPTH
Lev Walkina00d6b32006-03-21 03:40:38 +0000978#define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +0000979#endif
980
Lev Walkina00d6b32006-03-21 03:40:38 +0000981/* YYMAXDEPTH is the maximum size the stacks can grow to
982 (effective only if the built-in stack extension method is used). */
Lev Walkinf15320b2004-06-03 03:38:44 +0000983
Lev Walkina00d6b32006-03-21 03:40:38 +0000984#if YYMAXDEPTH == 0
985#undef YYMAXDEPTH
986#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000987
988#ifndef YYMAXDEPTH
Lev Walkina00d6b32006-03-21 03:40:38 +0000989#define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +0000990#endif
991
Lev Walkina00d6b32006-03-21 03:40:38 +0000992/* Define __yy_memcpy. Note that the size argument
993 should be passed with type unsigned int, because that is what the non-GCC
994 definitions require. With GCC, __builtin_memcpy takes an arg
995 of type size_t, but it can handle unsigned int. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000996
Lev Walkina00d6b32006-03-21 03:40:38 +0000997#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
998#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
999#else /* not GNU C or C++ */
1000#ifndef __cplusplus
Lev Walkinf15320b2004-06-03 03:38:44 +00001001
Lev Walkina00d6b32006-03-21 03:40:38 +00001002/* This is the most reliable way to avoid incompatibilities
1003 in available built-in functions on various systems. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001004static void
Lev Walkina00d6b32006-03-21 03:40:38 +00001005__yy_memcpy (to, from, count)
1006 char *to;
1007 char *from;
1008 unsigned int count;
1009{
1010 register char *f = from;
1011 register char *t = to;
1012 register int i = count;
1013
1014 while (i-- > 0)
1015 *t++ = *f++;
1016}
1017
1018#else /* __cplusplus */
1019
1020/* This is the most reliable way to avoid incompatibilities
1021 in available built-in functions on various systems. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001022static void
Lev Walkina00d6b32006-03-21 03:40:38 +00001023__yy_memcpy (char *to, char *from, unsigned int count)
1024{
1025 register char *t = to;
1026 register char *f = from;
1027 register int i = count;
1028
1029 while (i-- > 0)
1030 *t++ = *f++;
1031}
1032
Lev Walkinfb872bd2006-03-18 06:53:11 +00001033#endif
Lev Walkinfb872bd2006-03-18 06:53:11 +00001034#endif
Lev Walkinfb872bd2006-03-18 06:53:11 +00001035
Lev Walkina00d6b32006-03-21 03:40:38 +00001036#line 217 "/usr/share/bison.simple"
Lev Walkinfb872bd2006-03-18 06:53:11 +00001037
Lev Walkina00d6b32006-03-21 03:40:38 +00001038/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1039 into yyparse. The argument should have type void *.
1040 It should actually point to an object.
1041 Grammar actions can access the variable by casting it
1042 to the proper pointer type. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001043
1044#ifdef YYPARSE_PARAM
Lev Walkina00d6b32006-03-21 03:40:38 +00001045#ifdef __cplusplus
1046#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1047#define YYPARSE_PARAM_DECL
1048#else /* not __cplusplus */
1049#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1050#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1051#endif /* not __cplusplus */
1052#else /* not YYPARSE_PARAM */
1053#define YYPARSE_PARAM_ARG
1054#define YYPARSE_PARAM_DECL
1055#endif /* not YYPARSE_PARAM */
1056
1057/* Prevent warning if -Wstrict-prototypes. */
1058#ifdef __GNUC__
1059#ifdef YYPARSE_PARAM
1060int yyparse (void *);
1061#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001062int yyparse (void);
Lev Walkinfb872bd2006-03-18 06:53:11 +00001063#endif
Lev Walkina00d6b32006-03-21 03:40:38 +00001064#endif
Lev Walkinfb872bd2006-03-18 06:53:11 +00001065
Lev Walkinfb872bd2006-03-18 06:53:11 +00001066int
Lev Walkina00d6b32006-03-21 03:40:38 +00001067yyparse(YYPARSE_PARAM_ARG)
1068 YYPARSE_PARAM_DECL
Lev Walkinfb872bd2006-03-18 06:53:11 +00001069{
Lev Walkina00d6b32006-03-21 03:40:38 +00001070 register int yystate;
1071 register int yyn;
1072 register short *yyssp;
1073 register YYSTYPE *yyvsp;
1074 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1075 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001076
Lev Walkina00d6b32006-03-21 03:40:38 +00001077 short yyssa[YYINITDEPTH]; /* the state stack */
1078 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001079
Lev Walkina00d6b32006-03-21 03:40:38 +00001080 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1081 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001082
Lev Walkina00d6b32006-03-21 03:40:38 +00001083#ifdef YYLSP_NEEDED
1084 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1085 YYLTYPE *yyls = yylsa;
1086 YYLTYPE *yylsp;
Lev Walkinfb872bd2006-03-18 06:53:11 +00001087
Lev Walkina00d6b32006-03-21 03:40:38 +00001088#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1089#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001090#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkina00d6b32006-03-21 03:40:38 +00001091#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001092
Lev Walkina00d6b32006-03-21 03:40:38 +00001093 int yystacksize = YYINITDEPTH;
1094 int yyfree_stacks = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001095
Lev Walkina00d6b32006-03-21 03:40:38 +00001096#ifdef YYPURE
1097 int yychar;
1098 YYSTYPE yylval;
1099 int yynerrs;
1100#ifdef YYLSP_NEEDED
1101 YYLTYPE yylloc;
1102#endif
1103#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001104
Lev Walkina00d6b32006-03-21 03:40:38 +00001105 YYSTYPE yyval; /* the variable used to return */
1106 /* semantic values from the action */
1107 /* routines */
Lev Walkinf15320b2004-06-03 03:38:44 +00001108
1109 int yylen;
1110
Lev Walkina00d6b32006-03-21 03:40:38 +00001111#if YYDEBUG != 0
1112 if (yydebug)
1113 fprintf(stderr, "Starting parse\n");
1114#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001115
1116 yystate = 0;
1117 yyerrstatus = 0;
1118 yynerrs = 0;
1119 yychar = YYEMPTY; /* Cause a token to be read. */
1120
1121 /* Initialize stack pointers.
1122 Waste one element of value and location stack
1123 so that they stay on the same level as the state stack.
1124 The wasted elements are never initialized. */
1125
Lev Walkina00d6b32006-03-21 03:40:38 +00001126 yyssp = yyss - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001127 yyvsp = yyvs;
Lev Walkina00d6b32006-03-21 03:40:38 +00001128#ifdef YYLSP_NEEDED
1129 yylsp = yyls;
1130#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001131
Lev Walkina00d6b32006-03-21 03:40:38 +00001132/* Push a new state, which is found in yystate . */
1133/* In all cases, when you get here, the value and location stacks
1134 have just been pushed. so pushing a state here evens the stacks. */
1135yynewstate:
Lev Walkinf15320b2004-06-03 03:38:44 +00001136
Lev Walkina00d6b32006-03-21 03:40:38 +00001137 *++yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001138
Lev Walkina00d6b32006-03-21 03:40:38 +00001139 if (yyssp >= yyss + yystacksize - 1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001140 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001141 /* Give user a chance to reallocate the stack */
1142 /* Use copies of these so that the &'s don't force the real ones into memory. */
1143 YYSTYPE *yyvs1 = yyvs;
1144 short *yyss1 = yyss;
1145#ifdef YYLSP_NEEDED
1146 YYLTYPE *yyls1 = yyls;
1147#endif
1148
Lev Walkinf15320b2004-06-03 03:38:44 +00001149 /* Get the current used size of the three stacks, in elements. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001150 int size = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001151
1152#ifdef yyoverflow
Lev Walkina00d6b32006-03-21 03:40:38 +00001153 /* Each stack pointer address is followed by the size of
1154 the data in use in that stack, in bytes. */
1155#ifdef YYLSP_NEEDED
1156 /* This used to be a conditional around just the two extra args,
1157 but that might be undefined if yyoverflow is a macro. */
1158 yyoverflow("parser stack overflow",
1159 &yyss1, size * sizeof (*yyssp),
1160 &yyvs1, size * sizeof (*yyvsp),
1161 &yyls1, size * sizeof (*yylsp),
1162 &yystacksize);
1163#else
1164 yyoverflow("parser stack overflow",
1165 &yyss1, size * sizeof (*yyssp),
1166 &yyvs1, size * sizeof (*yyvsp),
1167 &yystacksize);
1168#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001169
Lev Walkina00d6b32006-03-21 03:40:38 +00001170 yyss = yyss1; yyvs = yyvs1;
1171#ifdef YYLSP_NEEDED
1172 yyls = yyls1;
1173#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001174#else /* no yyoverflow */
1175 /* Extend the stack our own way. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001176 if (yystacksize >= YYMAXDEPTH)
1177 {
1178 yyerror("parser stack overflow");
1179 if (yyfree_stacks)
1180 {
1181 free (yyss);
1182 free (yyvs);
1183#ifdef YYLSP_NEEDED
1184 free (yyls);
1185#endif
1186 }
1187 return 2;
1188 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001189 yystacksize *= 2;
Lev Walkina00d6b32006-03-21 03:40:38 +00001190 if (yystacksize > YYMAXDEPTH)
Lev Walkinf15320b2004-06-03 03:38:44 +00001191 yystacksize = YYMAXDEPTH;
Lev Walkina00d6b32006-03-21 03:40:38 +00001192#ifndef YYSTACK_USE_ALLOCA
1193 yyfree_stacks = 1;
1194#endif
1195 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1196 __yy_memcpy ((char *)yyss, (char *)yyss1,
1197 size * (unsigned int) sizeof (*yyssp));
1198 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1199 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1200 size * (unsigned int) sizeof (*yyvsp));
1201#ifdef YYLSP_NEEDED
1202 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1203 __yy_memcpy ((char *)yyls, (char *)yyls1,
1204 size * (unsigned int) sizeof (*yylsp));
1205#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001206#endif /* no yyoverflow */
1207
Lev Walkina00d6b32006-03-21 03:40:38 +00001208 yyssp = yyss + size - 1;
1209 yyvsp = yyvs + size - 1;
1210#ifdef YYLSP_NEEDED
1211 yylsp = yyls + size - 1;
1212#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001213
Lev Walkina00d6b32006-03-21 03:40:38 +00001214#if YYDEBUG != 0
1215 if (yydebug)
1216 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1217#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001218
Lev Walkina00d6b32006-03-21 03:40:38 +00001219 if (yyssp >= yyss + yystacksize - 1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001220 YYABORT;
1221 }
1222
Lev Walkina00d6b32006-03-21 03:40:38 +00001223#if YYDEBUG != 0
1224 if (yydebug)
1225 fprintf(stderr, "Entering state %d\n", yystate);
1226#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001227
1228 goto yybackup;
Lev Walkina00d6b32006-03-21 03:40:38 +00001229 yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001230
1231/* Do appropriate processing given the current state. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001232/* Read a lookahead token if we need one and don't already have one. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001233/* yyresume: */
1234
Lev Walkina00d6b32006-03-21 03:40:38 +00001235 /* First try to decide what to do without reference to lookahead token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001236
1237 yyn = yypact[yystate];
Lev Walkina00d6b32006-03-21 03:40:38 +00001238 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001239 goto yydefault;
1240
Lev Walkina00d6b32006-03-21 03:40:38 +00001241 /* Not known => get a lookahead token if don't already have one. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001242
Lev Walkina00d6b32006-03-21 03:40:38 +00001243 /* yychar is either YYEMPTY or YYEOF
1244 or a valid token in external form. */
1245
Lev Walkinf15320b2004-06-03 03:38:44 +00001246 if (yychar == YYEMPTY)
1247 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001248#if YYDEBUG != 0
1249 if (yydebug)
1250 fprintf(stderr, "Reading a token: ");
1251#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001252 yychar = YYLEX;
1253 }
1254
Lev Walkina00d6b32006-03-21 03:40:38 +00001255 /* Convert token to internal form (in yychar1) for indexing tables with */
1256
1257 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001258 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001259 yychar1 = 0;
1260 yychar = YYEOF; /* Don't call YYLEX any more */
1261
1262#if YYDEBUG != 0
1263 if (yydebug)
1264 fprintf(stderr, "Now at end of input.\n");
1265#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001266 }
1267 else
1268 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001269 yychar1 = YYTRANSLATE(yychar);
1270
1271#if YYDEBUG != 0
1272 if (yydebug)
1273 {
1274 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1275 /* Give the individual parser a way to print the precise meaning
1276 of a token, for further debugging info. */
1277#ifdef YYPRINT
1278 YYPRINT (stderr, yychar, yylval);
1279#endif
1280 fprintf (stderr, ")\n");
1281 }
1282#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001283 }
1284
Lev Walkina00d6b32006-03-21 03:40:38 +00001285 yyn += yychar1;
1286 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001287 goto yydefault;
Lev Walkina00d6b32006-03-21 03:40:38 +00001288
Lev Walkinf15320b2004-06-03 03:38:44 +00001289 yyn = yytable[yyn];
Lev Walkina00d6b32006-03-21 03:40:38 +00001290
1291 /* yyn is what to do for this token type in this state.
1292 Negative => reduce, -yyn is rule number.
1293 Positive => shift, yyn is new state.
1294 New state is final state => don't bother to shift,
1295 just return success.
1296 0, or most negative number => error. */
1297
1298 if (yyn < 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001299 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001300 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001301 goto yyerrlab;
1302 yyn = -yyn;
1303 goto yyreduce;
1304 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001305 else if (yyn == 0)
1306 goto yyerrlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001307
1308 if (yyn == YYFINAL)
1309 YYACCEPT;
1310
Lev Walkina00d6b32006-03-21 03:40:38 +00001311 /* Shift the lookahead token. */
1312
1313#if YYDEBUG != 0
1314 if (yydebug)
1315 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1316#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001317
1318 /* Discard the token being shifted unless it is eof. */
1319 if (yychar != YYEOF)
1320 yychar = YYEMPTY;
1321
1322 *++yyvsp = yylval;
Lev Walkina00d6b32006-03-21 03:40:38 +00001323#ifdef YYLSP_NEEDED
1324 *++yylsp = yylloc;
1325#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001326
Lev Walkina00d6b32006-03-21 03:40:38 +00001327 /* count tokens shifted since error; after three, turn off error status. */
1328 if (yyerrstatus) yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001329
1330 yystate = yyn;
1331 goto yynewstate;
1332
Lev Walkina00d6b32006-03-21 03:40:38 +00001333/* Do the default action for the current state. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001334yydefault:
Lev Walkina00d6b32006-03-21 03:40:38 +00001335
Lev Walkinf15320b2004-06-03 03:38:44 +00001336 yyn = yydefact[yystate];
1337 if (yyn == 0)
1338 goto yyerrlab;
1339
Lev Walkina00d6b32006-03-21 03:40:38 +00001340/* Do a reduction. yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001341yyreduce:
1342 yylen = yyr2[yyn];
Lev Walkina00d6b32006-03-21 03:40:38 +00001343 if (yylen > 0)
1344 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Lev Walkinf15320b2004-06-03 03:38:44 +00001345
Lev Walkina00d6b32006-03-21 03:40:38 +00001346#if YYDEBUG != 0
1347 if (yydebug)
Lev Walkinf15320b2004-06-03 03:38:44 +00001348 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001349 int i;
1350
1351 fprintf (stderr, "Reducing via rule %d (line %d), ",
1352 yyn, yyrline[yyn]);
1353
1354 /* Print the symbols being reduced, and their result. */
1355 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1356 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1357 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
1358 }
1359#endif
1360
1361
1362 switch (yyn) {
1363
1364case 1:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001365#line 323 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001366{
1367 *(void **)param = yyvsp[0].a_grammar;
1368 ;
1369 break;}
1370case 2:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001371#line 329 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001372{
1373 yyval.a_grammar = asn1p_new();
1374 checkmem(yyval.a_grammar);
1375 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
1376 ;
1377 break;}
1378case 3:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001379#line 334 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001380{
1381 yyval.a_grammar = yyvsp[-1].a_grammar;
1382 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
1383 ;
1384 break;}
1385case 4:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001386#line 355 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001387{
Lev Walkinfb872bd2006-03-18 06:53:11 +00001388
Lev Walkina00d6b32006-03-21 03:40:38 +00001389 if(yyvsp[-1].a_module) {
1390 yyval.a_module = yyvsp[-1].a_module;
Lev Walkinf15320b2004-06-03 03:38:44 +00001391 } else {
1392 /* There's a chance that a module is just plain empty */
Lev Walkina00d6b32006-03-21 03:40:38 +00001393 yyval.a_module = asn1p_module_new();
Lev Walkinf15320b2004-06-03 03:38:44 +00001394 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001395 checkmem(yyval.a_module);
Lev Walkinf15320b2004-06-03 03:38:44 +00001396
Lev Walkina00d6b32006-03-21 03:40:38 +00001397 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
1398 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1399 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
1400 ;
1401 break;}
1402case 5:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001403#line 376 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001404{ yyval.a_oid = 0; ;
1405 break;}
1406case 6:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001407#line 377 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001408{ yyval.a_oid = yyvsp[0].a_oid; ;
1409 break;}
1410case 7:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001411#line 381 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001412{
1413 yyval.a_oid = yyvsp[-1].a_oid;
1414 ;
1415 break;}
1416case 8:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001417#line 384 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001418{
1419 yyval.a_oid = 0;
1420 ;
1421 break;}
1422case 9:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001423#line 390 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001424{
1425 yyval.a_oid = asn1p_oid_new();
1426 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1427 if(yyvsp[0].a_oid_arc.name)
1428 free(yyvsp[0].a_oid_arc.name);
1429 ;
1430 break;}
1431case 10:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001432#line 396 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001433{
1434 yyval.a_oid = yyvsp[-1].a_oid;
1435 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1436 if(yyvsp[0].a_oid_arc.name)
1437 free(yyvsp[0].a_oid_arc.name);
1438 ;
1439 break;}
1440case 11:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001441#line 405 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001442{ /* iso */
1443 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1444 yyval.a_oid_arc.number = -1;
1445 ;
1446 break;}
1447case 12:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001448#line 409 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001449{ /* iso(1) */
1450 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1451 yyval.a_oid_arc.number = yyvsp[-1].a_int;
1452 ;
1453 break;}
1454case 13:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001455#line 413 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001456{ /* 1 */
1457 yyval.a_oid_arc.name = 0;
1458 yyval.a_oid_arc.number = yyvsp[0].a_int;
1459 ;
1460 break;}
1461case 14:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001462#line 423 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001463{ yyval.a_module_flags = MSF_NOFLAGS; ;
1464 break;}
1465case 15:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001466#line 424 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001467{
1468 yyval.a_module_flags = yyvsp[0].a_module_flags;
1469 ;
1470 break;}
1471case 16:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001472#line 433 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001473{
1474 yyval.a_module_flags = yyvsp[0].a_module_flags;
1475 ;
1476 break;}
1477case 17:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001478#line 436 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001479{
1480 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
1481 ;
1482 break;}
1483case 18:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001484#line 445 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001485{
1486 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
1487 ;
1488 break;}
1489case 19:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001490#line 448 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001491{
1492 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
1493 ;
1494 break;}
1495case 20:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001496#line 451 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001497{
1498 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
1499 ;
1500 break;}
1501case 21:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001502#line 454 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001503{
1504 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
1505 ;
1506 break;}
1507case 22:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001508#line 458 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001509{
Lev Walkinf59d0752004-08-18 04:59:12 +00001510 /* X.680Amd1 specifies TAG and XER */
Lev Walkina00d6b32006-03-21 03:40:38 +00001511 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1512 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1513 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1514 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
Lev Walkinf59d0752004-08-18 04:59:12 +00001515 } else {
1516 fprintf(stderr,
1517 "WARNING: %s INSTRUCTIONS at line %d: "
1518 "Unrecognized encoding reference\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00001519 yyvsp[-1].tv_str, yylineno);
1520 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
Lev Walkinf59d0752004-08-18 04:59:12 +00001521 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001522 free(yyvsp[-1].tv_str);
1523 ;
1524 break;}
1525case 23:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001526#line 479 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001527{ yyval.a_module = 0; ;
1528 break;}
1529case 24:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001530#line 480 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001531{
1532 yyval.a_module = yyvsp[0].a_module;
1533 ;
1534 break;}
1535case 25:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001536#line 489 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001537{
1538 yyval.a_module = yyvsp[0].a_module;
1539 ;
1540 break;}
1541case 26:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001542#line 492 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001543{
1544 yyval.a_module = yyvsp[-1].a_module;
Lev Walkinf15320b2004-06-03 03:38:44 +00001545
Lev Walkinf59d0752004-08-18 04:59:12 +00001546 /* Behave well when one of them is skipped. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001547 if(!(yyvsp[-1].a_module)) {
1548 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
Lev Walkinf59d0752004-08-18 04:59:12 +00001549 break;
1550 }
1551
Lev Walkinf15320b2004-06-03 03:38:44 +00001552#ifdef MY_IMPORT
1553#error MY_IMPORT DEFINED ELSEWHERE!
1554#endif
1555#define MY_IMPORT(foo,field) do { \
Lev Walkina00d6b32006-03-21 03:40:38 +00001556 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
1557 TQ_ADD(&(yyval.a_module->foo), \
1558 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
Lev Walkinf15320b2004-06-03 03:38:44 +00001559 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001560 } \
Lev Walkina00d6b32006-03-21 03:40:38 +00001561 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001562 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001563
1564 MY_IMPORT(imports, xp_next);
1565 MY_IMPORT(exports, xp_next);
1566 MY_IMPORT(members, next);
1567#undef MY_IMPORT
1568
Lev Walkina00d6b32006-03-21 03:40:38 +00001569 ;
1570 break;}
1571case 27:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001572#line 525 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001573{
1574 yyval.a_module = yyvsp[0].a_module;
1575 ;
1576 break;}
1577case 28:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001578#line 528 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001579{
1580 yyval.a_module = asn1p_module_new();
1581 checkmem(yyval.a_module);
1582 if(yyvsp[0].a_xports) {
1583 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
Lev Walkinf15320b2004-06-03 03:38:44 +00001584 } else {
1585 /* "EXPORTS ALL;" ? */
1586 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001587 ;
1588 break;}
1589case 29:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001590#line 537 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001591{
1592 yyval.a_module = asn1p_module_new();
1593 checkmem(yyval.a_module);
1594 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1595 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1596 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1597 ;
1598 break;}
1599case 30:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001600#line 544 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001601{
1602 yyval.a_module = asn1p_module_new();
1603 checkmem(yyval.a_module);
1604 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1605 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1606 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1607 ;
1608 break;}
1609case 31:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001610#line 557 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001611{
1612 yyval.a_module = asn1p_module_new();
1613 checkmem(yyval.a_module);
1614 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1615 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1616 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1617 ;
1618 break;}
1619case 32:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001620#line 565 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001621{ asn1p_lexer_hack_push_encoding_control(); ;
1622 break;}
1623case 33:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001624#line 566 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001625{
Lev Walkinf59d0752004-08-18 04:59:12 +00001626 fprintf(stderr,
1627 "WARNING: ENCODING-CONTROL %s "
1628 "specification at line %d ignored\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00001629 yyvsp[-1].tv_str, yylineno);
1630 free(yyvsp[-1].tv_str);
1631 yyval.a_module = 0;
1632 ;
1633 break;}
1634case 34:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001635#line 578 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001636{
Lev Walkinf15320b2004-06-03 03:38:44 +00001637 return yyerror(
Lev Walkin70853052005-11-26 11:21:55 +00001638 "Attempt to redefine a standard basic string type, "
1639 "please comment out or remove this type redefinition.");
Lev Walkina00d6b32006-03-21 03:40:38 +00001640 ;
1641 break;}
1642case 35:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001643#line 591 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001644{
Lev Walkinb36317c2005-08-12 10:09:10 +00001645 if(!saved_aid && 0)
1646 return yyerror("Unterminated IMPORTS FROM, "
1647 "expected semicolon ';'");
1648 saved_aid = 0;
Lev Walkina00d6b32006-03-21 03:40:38 +00001649 yyval.a_module = yyvsp[-1].a_module;
1650 ;
1651 break;}
1652case 36:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001653#line 601 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001654{
Lev Walkinf15320b2004-06-03 03:38:44 +00001655 return yyerror("Empty IMPORTS list");
Lev Walkina00d6b32006-03-21 03:40:38 +00001656 ;
1657 break;}
1658case 37:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001659#line 607 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001660{
1661 yyval.a_module = asn1p_module_new();
1662 checkmem(yyval.a_module);
1663 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
1664 ;
1665 break;}
1666case 38:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001667#line 612 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001668{
1669 yyval.a_module = yyvsp[-1].a_module;
1670 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
1671 ;
1672 break;}
1673case 39:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001674#line 619 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001675{ memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
1676 break;}
1677case 40:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001678#line 620 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001679{ yyval.a_aid.oid = yyvsp[0].a_oid; ;
1680 break;}
1681case 41:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001682#line 624 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001683{
1684 yyval.a_xports = yyvsp[-3].a_xports;
1685 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
1686 yyval.a_xports->identifier = yyvsp[0].a_aid;
Lev Walkinb36317c2005-08-12 10:09:10 +00001687 /* This stupid thing is used for look-back hack. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001688 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
1689 checkmem(yyval.a_xports);
1690 ;
1691 break;}
1692case 42:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001693#line 635 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001694{
1695 yyval.a_xports = asn1p_xports_new();
1696 checkmem(yyval.a_xports);
1697 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
1698 ;
1699 break;}
1700case 43:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001701#line 640 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001702{
1703 yyval.a_xports = yyvsp[-2].a_xports;
1704 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
1705 ;
1706 break;}
1707case 44:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001708#line 647 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001709{
1710 yyval.a_expr = asn1p_expr_new(yylineno);
1711 checkmem(yyval.a_expr);
1712 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1713 yyval.a_expr->expr_type = A1TC_REFERENCE;
1714 ;
1715 break;}
1716case 45:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001717#line 653 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001718{ /* Completely equivalent to above */
1719 yyval.a_expr = asn1p_expr_new(yylineno);
1720 checkmem(yyval.a_expr);
1721 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1722 yyval.a_expr->expr_type = A1TC_REFERENCE;
1723 ;
1724 break;}
1725case 46:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001726#line 659 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001727{
1728 yyval.a_expr = asn1p_expr_new(yylineno);
1729 checkmem(yyval.a_expr);
1730 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1731 yyval.a_expr->expr_type = A1TC_REFERENCE;
1732 ;
1733 break;}
1734case 47:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001735#line 668 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001736{
1737 yyval.a_xports = yyvsp[-1].a_xports;
1738 ;
1739 break;}
1740case 48:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001741#line 671 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001742{
1743 yyval.a_xports = 0;
1744 ;
1745 break;}
1746case 49:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001747#line 674 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001748{
Lev Walkinf15320b2004-06-03 03:38:44 +00001749 /* Empty EXPORTS clause effectively prohibits export. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001750 yyval.a_xports = asn1p_xports_new();
1751 checkmem(yyval.a_xports);
1752 ;
1753 break;}
1754case 50:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001755#line 682 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001756{
1757 yyval.a_xports = asn1p_xports_new();
1758 assert(yyval.a_xports);
1759 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
1760 ;
1761 break;}
1762case 51:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001763#line 687 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001764{
1765 yyval.a_xports = yyvsp[-2].a_xports;
1766 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
1767 ;
1768 break;}
1769case 52:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001770#line 694 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001771{
1772 yyval.a_expr = asn1p_expr_new(yylineno);
1773 checkmem(yyval.a_expr);
1774 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1775 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1776 ;
1777 break;}
1778case 53:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001779#line 700 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001780{
1781 yyval.a_expr = asn1p_expr_new(yylineno);
1782 checkmem(yyval.a_expr);
1783 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1784 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1785 ;
1786 break;}
1787case 54:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001788#line 706 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001789{
1790 yyval.a_expr = asn1p_expr_new(yylineno);
1791 checkmem(yyval.a_expr);
1792 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1793 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1794 ;
1795 break;}
1796case 55:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001797#line 717 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001798{ asn1p_lexer_hack_push_opaque_state(); ;
1799 break;}
1800case 56:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001801#line 717 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001802{
1803 yyval.a_expr = yyvsp[-4].a_expr;
1804 assert(yyval.a_expr->Identifier == 0);
1805 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1806 yyval.a_expr->meta_type = AMT_VALUESET;
Lev Walkine24403d2006-03-16 22:39:56 +00001807 /* take care of ValueSet body */
Lev Walkina00d6b32006-03-21 03:40:38 +00001808 ;
1809 break;}
1810case 57:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001811#line 727 "asn1p_y.y"
1812{
1813 yyval.a_expr = yyvsp[0].a_expr;
1814 ;
1815 break;}
1816case 58:
1817#line 740 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001818{
1819 yyval.a_expr = asn1p_expr_new(yylineno);
1820 checkmem(yyval.a_expr);
1821 yyval.a_expr->reference = yyvsp[0].a_ref;
1822 yyval.a_expr->expr_type = A1TC_REFERENCE;
1823 yyval.a_expr->meta_type = AMT_TYPEREF;
1824 ;
1825 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001826case 59:
1827#line 750 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001828{
1829 yyval.a_expr = asn1p_expr_new(yylineno);
1830 checkmem(yyval.a_expr);
Lev Walkin0c0bca62006-03-21 04:48:15 +00001831 yyval.a_expr->reference = yyvsp[-3].a_ref;
1832 yyval.a_expr->rhs_pspecs = yyvsp[-1].a_expr;
1833 yyval.a_expr->expr_type = A1TC_REFERENCE;
1834 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkina00d6b32006-03-21 03:40:38 +00001835 ;
1836 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001837case 60:
1838#line 770 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001839{
1840 yyval.a_expr = yyvsp[0].a_expr;
1841 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1842 assert(yyval.a_expr->expr_type);
1843 assert(yyval.a_expr->meta_type);
1844 ;
1845 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001846case 61:
1847#line 776 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001848{
1849 yyval.a_expr = yyvsp[0].a_expr;
1850 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1851 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1852 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
1853 ;
1854 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001855case 62:
1856#line 792 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001857{
1858 yyval.a_expr = yyvsp[0].a_expr;
1859 assert(yyval.a_expr->Identifier == 0);
1860 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1861 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
1862 ;
1863 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001864case 63:
1865#line 801 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001866{
Lev Walkinf15320b2004-06-03 03:38:44 +00001867 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00001868 yyval.a_plist = asn1p_paramlist_new(yylineno);
1869 checkmem(yyval.a_plist);
1870 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 +00001871 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00001872 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1873 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
1874 ;
1875 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001876case 64:
1877#line 810 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001878{
Lev Walkinf15320b2004-06-03 03:38:44 +00001879 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00001880 yyval.a_plist = yyvsp[-2].a_plist;
1881 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 +00001882 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00001883 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1884 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
1885 ;
1886 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001887case 65:
1888#line 821 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001889{
1890 yyval.a_parg.governor = NULL;
1891 yyval.a_parg.argument = yyvsp[0].tv_str;
1892 ;
1893 break;}
Lev Walkina00d6b32006-03-21 03:40:38 +00001894case 66:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001895#line 825 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001896{
Lev Walkinb36317c2005-08-12 10:09:10 +00001897 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00001898 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1899 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
Lev Walkinb36317c2005-08-12 10:09:10 +00001900 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00001901 yyval.a_parg.argument = yyvsp[0].tv_str;
1902 ;
1903 break;}
1904case 67:
Lev Walkin0c0bca62006-03-21 04:48:15 +00001905#line 832 "asn1p_y.y"
1906{
1907 int ret;
1908 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1909 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1910 checkmem(ret == 0);
1911 yyval.a_parg.argument = yyvsp[0].tv_str;
1912 ;
1913 break;}
1914case 68:
1915#line 839 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001916{
Lev Walkinc8092cb2005-02-18 16:34:21 +00001917 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00001918 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1919 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1920 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
Lev Walkinf15320b2004-06-03 03:38:44 +00001921 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00001922 yyval.a_parg.argument = yyvsp[0].tv_str;
1923 ;
1924 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001925case 69:
1926#line 850 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001927{
1928 yyval.a_expr = asn1p_expr_new(yylineno);
1929 checkmem(yyval.a_expr);
1930 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1931 ;
1932 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001933case 70:
1934#line 855 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001935{
1936 yyval.a_expr = yyvsp[-2].a_expr;
1937 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1938 ;
1939 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001940case 71:
1941#line 862 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001942{
1943 yyval.a_expr = yyvsp[0].a_expr;
1944 ;
1945 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001946case 72:
1947#line 865 "asn1p_y.y"
1948{
1949 yyval.a_expr = asn1p_expr_new(yylineno);
1950 checkmem(yyval.a_expr);
1951 yyval.a_expr->Identifier = "?";
1952 yyval.a_expr->expr_type = A1TC_REFERENCE;
1953 yyval.a_expr->meta_type = AMT_VALUE;
1954 yyval.a_expr->value = yyvsp[0].a_value;
1955 ;
1956 break;}
1957case 73:
1958#line 873 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001959{
1960 asn1p_ref_t *ref;
1961 yyval.a_expr = asn1p_expr_new(yylineno);
1962 checkmem(yyval.a_expr);
1963 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1964 yyval.a_expr->expr_type = A1TC_REFERENCE;
1965 yyval.a_expr->meta_type = AMT_VALUE;
1966 ref = asn1p_ref_new(yylineno);
1967 asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
1968 yyval.a_expr->value = asn1p_value_fromref(ref, 0);
1969 ;
1970 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001971case 74:
1972#line 901 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001973{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1974 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001975case 75:
1976#line 902 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001977{ yyval.a_expr = yyvsp[0].a_expr; ;
1978 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001979case 76:
1980#line 905 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001981{
1982 yyval.a_expr = asn1p_expr_new(yylineno);
1983 checkmem(yyval.a_expr);
1984 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1985 ;
1986 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001987case 77:
1988#line 910 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001989{
1990 yyval.a_expr = yyvsp[-2].a_expr;
1991 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1992 ;
1993 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00001994case 78:
1995#line 917 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00001996{
1997 yyval.a_expr = yyvsp[-1].a_expr;
1998 assert(yyval.a_expr->Identifier == 0);
1999 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2000 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2001 yyval.a_expr->marker = yyvsp[0].a_marker;
2002 ;
2003 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002004case 79:
2005#line 924 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002006{
2007 yyval.a_expr = yyvsp[-1].a_expr;
2008 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2009 yyval.a_expr->marker = yyvsp[0].a_marker;
2010 _fixup_anonymous_identifier(yyval.a_expr);
2011 ;
2012 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002013case 80:
2014#line 930 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002015{
2016 yyval.a_expr = asn1p_expr_new(yylineno);
2017 checkmem(yyval.a_expr);
2018 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2019 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
2020 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2021 ;
2022 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002023case 81:
2024#line 937 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002025{
2026 yyval.a_expr = yyvsp[0].a_expr;
2027 ;
2028 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002029case 82:
2030#line 943 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002031{
2032 yyval.a_expr = asn1p_expr_new(yylineno);
2033 checkmem(yyval.a_expr);
2034 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2035 ;
2036 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002037case 83:
2038#line 948 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002039{
2040 yyval.a_expr = yyvsp[-2].a_expr;
2041 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2042 ;
2043 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002044case 84:
2045#line 955 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002046{
2047 yyval.a_expr = yyvsp[0].a_expr;
2048 assert(yyval.a_expr->Identifier == 0);
2049 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2050 ;
2051 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002052case 85:
2053#line 960 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002054{
2055 yyval.a_expr = yyvsp[0].a_expr;
2056 ;
2057 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002058case 86:
2059#line 963 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002060{
2061 yyval.a_expr = yyvsp[0].a_expr;
2062 _fixup_anonymous_identifier(yyval.a_expr);
2063 ;
2064 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002065case 87:
2066#line 970 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002067{
2068 yyval.a_expr = yyvsp[-2].a_expr;
2069 checkmem(yyval.a_expr);
2070 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2071 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2072 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
2073 ;
2074 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002075case 88:
2076#line 980 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002077{ yyval.a_int = 0; ;
2078 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002079case 89:
2080#line 981 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002081{ yyval.a_int = 1; ;
2082 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002083case 90:
2084#line 985 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002085{
2086 yyval.a_expr = asn1p_expr_new(yylineno);
2087 checkmem(yyval.a_expr);
2088 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2089 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2090 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2091 ;
2092 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002093case 91:
2094#line 992 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002095{
2096 yyval.a_expr = yyvsp[-2].a_expr;
2097 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2098 ;
2099 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002100case 92:
2101#line 1002 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002102{
2103 yyval.a_expr = asn1p_expr_new(yylineno);
2104 checkmem(yyval.a_expr);
2105 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2106 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2107 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2108 yyval.a_expr->marker = yyvsp[0].a_marker;
2109 ;
2110 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002111case 93:
2112#line 1012 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002113{
2114 yyval.a_expr = asn1p_expr_new(yylineno);
2115 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2116 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2117 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2118 yyval.a_expr->unique = yyvsp[-1].a_int;
2119 yyval.a_expr->marker = yyvsp[0].a_marker;
2120 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
2121 ;
2122 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002123case 94:
2124#line 1023 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002125{
2126 yyval.a_expr = asn1p_expr_new(yylineno);
2127 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2128 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2129 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2130 yyval.a_expr->reference = yyvsp[-1].a_ref;
2131 yyval.a_expr->marker = yyvsp[0].a_marker;
2132 ;
2133 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002134case 95:
2135#line 1033 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002136{
2137 yyval.a_expr = asn1p_expr_new(yylineno);
2138 checkmem(yyval.a_expr);
2139 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2140 yyval.a_expr->reference = yyvsp[-1].a_ref;
2141 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2142 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2143 yyval.a_expr->marker = yyvsp[0].a_marker;
2144 ;
2145 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002146case 96:
2147#line 1044 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002148{
2149 yyval.a_expr = asn1p_expr_new(yylineno);
2150 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2151 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2152 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2153 yyval.a_expr->reference = yyvsp[-1].a_ref;
2154 yyval.a_expr->marker = yyvsp[0].a_marker;
2155 ;
2156 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002157case 97:
2158#line 1054 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002159{
2160 yyval.a_expr = asn1p_expr_new(yylineno);
2161 checkmem(yyval.a_expr);
2162 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2163 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2164 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2165 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
2166 yyval.a_expr->marker = yyvsp[0].a_marker;
2167 ;
2168 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002169case 98:
2170#line 1065 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002171{
2172 yyval.a_expr = asn1p_expr_new(yylineno);
2173 checkmem(yyval.a_expr);
2174 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2175 yyval.a_expr->reference = yyvsp[-1].a_ref;
2176 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2177 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2178 yyval.a_expr->marker = yyvsp[0].a_marker;
2179 ;
2180 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002181case 99:
2182#line 1077 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002183{ yyval.a_wsynt = 0; ;
2184 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002185case 100:
2186#line 1078 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002187{
2188 yyval.a_wsynt = yyvsp[0].a_wsynt;
2189 ;
2190 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002191case 101:
2192#line 1085 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002193{ asn1p_lexer_hack_enable_with_syntax(); ;
2194 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002195case 102:
2196#line 1087 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002197{
2198 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2199 ;
2200 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002201case 103:
2202#line 1093 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002203{
2204 yyval.a_wsynt = asn1p_wsyntx_new();
2205 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
2206 ;
2207 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002208case 104:
2209#line 1097 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002210{
2211 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2212 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
2213 ;
2214 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002215case 105:
2216#line 1104 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002217{
2218 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2219 yyval.a_wchunk->type = WC_WHITESPACE;
2220 ;
2221 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002222case 106:
2223#line 1108 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002224{
2225 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_str, strlen(yyvsp[0].tv_str), 0);
2226 ;
2227 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002228case 107:
2229#line 1111 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002230{
2231 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].a_refcomp.name, strlen(yyvsp[0].a_refcomp.name), 0);
2232 yyval.a_wchunk->type = WC_FIELD;
2233 ;
2234 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002235case 108:
2236#line 1115 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002237{
2238 yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
2239 ;
2240 break;}
Lev Walkina00d6b32006-03-21 03:40:38 +00002241case 109:
Lev Walkin0c0bca62006-03-21 04:48:15 +00002242#line 1121 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002243{
2244 yyval.a_expr = asn1p_expr_new(yylineno);
2245 checkmem(yyval.a_expr);
2246 yyval.a_expr->Identifier = strdup("...");
Lev Walkina00d6b32006-03-21 03:40:38 +00002247 checkmem(yyval.a_expr->Identifier);
2248 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2249 yyval.a_expr->meta_type = AMT_TYPE;
2250 ;
2251 break;}
2252case 110:
Lev Walkin0c0bca62006-03-21 04:48:15 +00002253#line 1129 "asn1p_y.y"
2254{
2255 yyval.a_expr = asn1p_expr_new(yylineno);
2256 checkmem(yyval.a_expr);
2257 yyval.a_expr->Identifier = strdup("...");
2258 checkmem(yyval.a_expr->Identifier);
2259 yyval.a_expr->value = yyvsp[0].a_value;
2260 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2261 yyval.a_expr->meta_type = AMT_TYPE;
2262 ;
2263 break;}
2264case 111:
2265#line 1138 "asn1p_y.y"
2266{
2267 yyval.a_expr = asn1p_expr_new(yylineno);
2268 checkmem(yyval.a_expr);
2269 yyval.a_expr->Identifier = strdup("...");
2270 yyval.a_expr->value = yyvsp[0].a_value;
2271 checkmem(yyval.a_expr->Identifier);
2272 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2273 yyval.a_expr->meta_type = AMT_TYPE;
2274 ;
2275 break;}
2276case 112:
2277#line 1150 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002278{
2279 yyval.a_expr = yyvsp[-1].a_expr;
2280 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002281 /*
2282 * Outer constraint for SEQUENCE OF and SET OF applies
2283 * to the inner type.
2284 */
Lev Walkina00d6b32006-03-21 03:40:38 +00002285 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2286 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2287 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2288 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002289 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002290 if(yyval.a_expr->constraints) {
2291 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002292 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002293 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002294 }
2295 }
Lev Walkina00d6b32006-03-21 03:40:38 +00002296 ;
2297 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002298case 113:
2299#line 1172 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002300{
2301 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
Lev Walkinfb872bd2006-03-18 06:53:11 +00002302 asn1p_as_pointer = 0;
Lev Walkina00d6b32006-03-21 03:40:38 +00002303 ;
2304 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002305case 114:
2306#line 1179 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002307{
2308 yyval.a_expr = yyvsp[0].a_expr;
2309 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
Lev Walkinfb872bd2006-03-18 06:53:11 +00002310
Lev Walkina00d6b32006-03-21 03:40:38 +00002311 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2312 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
Lev Walkinef625402005-09-05 05:17:57 +00002313 fprintf(stderr,
2314 "INFO: Directive <ASN1C:RepresentAsPointer> "
2315 "applied to %s at line %d\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00002316 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2317 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
Lev Walkinef625402005-09-05 05:17:57 +00002318 : "member",
Lev Walkina00d6b32006-03-21 03:40:38 +00002319 yyval.a_expr->_lineno
Lev Walkinef625402005-09-05 05:17:57 +00002320 );
2321 }
Lev Walkina00d6b32006-03-21 03:40:38 +00002322 ;
2323 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002324case 115:
2325#line 1198 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002326{
2327 yyval.a_expr = yyvsp[0].a_expr;
2328 ;
2329 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002330case 116:
2331#line 1201 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002332{
2333 yyval.a_expr = yyvsp[-1].a_expr;
2334 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2335 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2336 yyval.a_expr->meta_type = AMT_TYPE;
2337 ;
2338 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002339case 117:
2340#line 1207 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002341{
2342 yyval.a_expr = yyvsp[-1].a_expr;
2343 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2344 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2345 yyval.a_expr->meta_type = AMT_TYPE;
2346 ;
2347 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002348case 118:
2349#line 1213 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002350{
2351 yyval.a_expr = yyvsp[-1].a_expr;
2352 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2353 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2354 yyval.a_expr->meta_type = AMT_TYPE;
2355 ;
2356 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002357case 119:
2358#line 1219 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002359{
2360 yyval.a_expr = asn1p_expr_new(yylineno);
2361 checkmem(yyval.a_expr);
2362 yyval.a_expr->constraints = yyvsp[-4].a_constr;
2363 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2364 yyval.a_expr->meta_type = AMT_TYPE;
2365 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
2366 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
2367 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2368 ;
2369 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002370case 120:
2371#line 1229 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002372{
2373 yyval.a_expr = asn1p_expr_new(yylineno);
2374 checkmem(yyval.a_expr);
2375 yyval.a_expr->constraints = yyvsp[-4].a_constr;
2376 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2377 yyval.a_expr->meta_type = AMT_TYPE;
2378 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
2379 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
2380 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2381 ;
2382 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002383case 121:
2384#line 1239 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002385{
2386 yyval.a_expr = asn1p_expr_new(yylineno);
2387 checkmem(yyval.a_expr);
2388 yyval.a_expr->expr_type = ASN_TYPE_ANY;
2389 yyval.a_expr->meta_type = AMT_TYPE;
2390 ;
2391 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002392case 122:
2393#line 1245 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002394{
Lev Walkin070a52d2004-08-22 03:19:54 +00002395 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002396 yyval.a_expr = asn1p_expr_new(yylineno);
2397 checkmem(yyval.a_expr);
2398 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2399 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2400 yyvsp[0].tv_str, RLT_lowercase);
Lev Walkin070a52d2004-08-22 03:19:54 +00002401 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002402 yyval.a_expr->expr_type = ASN_TYPE_ANY;
2403 yyval.a_expr->meta_type = AMT_TYPE;
2404 ;
2405 break;}
Lev Walkina00d6b32006-03-21 03:40:38 +00002406case 123:
2407#line 1257 "asn1p_y.y"
2408{
2409 yyval.a_expr = asn1p_expr_new(yylineno);
2410 checkmem(yyval.a_expr);
2411 yyval.a_expr->reference = yyvsp[0].a_ref;
2412 yyval.a_expr->expr_type = A1TC_INSTANCE;
2413 yyval.a_expr->meta_type = AMT_TYPE;
2414 ;
2415 break;}
2416case 124:
2417#line 1272 "asn1p_y.y"
2418{
Lev Walkinf15320b2004-06-03 03:38:44 +00002419 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002420 yyval.a_ref = asn1p_ref_new(yylineno);
2421 checkmem(yyval.a_ref);
2422 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00002423 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002424 free(yyvsp[0].tv_str);
2425 ;
2426 break;}
2427case 125:
2428#line 1280 "asn1p_y.y"
2429{
Lev Walkinf15320b2004-06-03 03:38:44 +00002430 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002431 yyval.a_ref = asn1p_ref_new(yylineno);
2432 checkmem(yyval.a_ref);
2433 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00002434 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002435 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2436 checkmem(ret == 0);
2437 free(yyvsp[-2].tv_str);
2438 ;
2439 break;}
2440case 126:
2441#line 1290 "asn1p_y.y"
2442{
Lev Walkin9d542d22006-03-14 16:31:37 +00002443 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002444 yyval.a_ref = asn1p_ref_new(yylineno);
2445 checkmem(yyval.a_ref);
2446 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00002447 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002448 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00002449 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002450 free(yyvsp[-2].tv_str);
2451 ;
2452 break;}
2453case 127:
2454#line 1300 "asn1p_y.y"
2455{
Lev Walkin9d542d22006-03-14 16:31:37 +00002456 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002457 yyval.a_ref = asn1p_ref_new(yylineno);
2458 checkmem(yyval.a_ref);
2459 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00002460 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002461 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkin9d542d22006-03-14 16:31:37 +00002462 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002463 free(yyvsp[-2].tv_str);
2464 ;
2465 break;}
2466case 128:
2467#line 1310 "asn1p_y.y"
2468{
Lev Walkinf15320b2004-06-03 03:38:44 +00002469 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002470 yyval.a_ref = asn1p_ref_new(yylineno);
2471 checkmem(yyval.a_ref);
2472 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2473 free(yyvsp[0].tv_str);
Lev Walkin9c974182004-09-15 11:59:51 +00002474 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002475 ;
2476 break;}
2477case 129:
2478#line 1318 "asn1p_y.y"
2479{
Lev Walkin9c974182004-09-15 11:59:51 +00002480 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002481 yyval.a_ref = yyvsp[0].a_ref;
2482 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2483 free(yyvsp[-2].tv_str);
Lev Walkinf15320b2004-06-03 03:38:44 +00002484 checkmem(ret == 0);
2485 /*
2486 * Move the last element infront.
2487 */
2488 {
2489 struct asn1p_ref_component_s tmp_comp;
Lev Walkina00d6b32006-03-21 03:40:38 +00002490 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2491 memmove(&yyval.a_ref->components[1],
2492 &yyval.a_ref->components[0],
2493 sizeof(yyval.a_ref->components[0])
2494 * (yyval.a_ref->comp_count - 1));
2495 yyval.a_ref->components[0] = tmp_comp;
Lev Walkinf15320b2004-06-03 03:38:44 +00002496 }
Lev Walkina00d6b32006-03-21 03:40:38 +00002497 ;
2498 break;}
2499case 130:
2500#line 1340 "asn1p_y.y"
2501{
Lev Walkinf15320b2004-06-03 03:38:44 +00002502 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002503 yyval.a_ref = asn1p_ref_new(yylineno);
2504 checkmem(yyval.a_ref);
2505 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2506 free(yyvsp[0].a_refcomp.name);
Lev Walkinf15320b2004-06-03 03:38:44 +00002507 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002508 ;
2509 break;}
2510case 131:
2511#line 1348 "asn1p_y.y"
2512{
Lev Walkinf15320b2004-06-03 03:38:44 +00002513 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002514 yyval.a_ref = yyvsp[-2].a_ref;
2515 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2516 free(yyvsp[0].a_refcomp.name);
Lev Walkinf15320b2004-06-03 03:38:44 +00002517 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002518 ;
2519 break;}
2520case 133:
2521#line 1361 "asn1p_y.y"
2522{
2523 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2524 yyval.a_refcomp.name = yyvsp[0].tv_str;
2525 ;
2526 break;}
2527case 134:
2528#line 1366 "asn1p_y.y"
2529{
2530 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2531 yyval.a_refcomp.name = yyvsp[0].tv_str;
2532 ;
2533 break;}
2534case 135:
2535#line 1375 "asn1p_y.y"
2536{
2537 yyval.a_ref = asn1p_ref_new(yylineno);
2538 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2539 ;
2540 break;}
2541case 136:
2542#line 1379 "asn1p_y.y"
2543{
2544 yyval.a_ref = yyval.a_ref;
2545 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2546 ;
2547 break;}
2548case 137:
2549#line 1383 "asn1p_y.y"
2550{
2551 yyval.a_ref = yyval.a_ref;
2552 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
2553 ;
2554 break;}
2555case 138:
2556#line 1390 "asn1p_y.y"
2557{
2558 yyval.a_ref = asn1p_ref_new(yylineno);
2559 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2560 ;
2561 break;}
2562case 139:
2563#line 1410 "asn1p_y.y"
2564{
2565 yyval.a_expr = yyvsp[-2].a_expr;
2566 assert(yyval.a_expr->Identifier == NULL);
2567 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2568 yyval.a_expr->meta_type = AMT_VALUE;
2569 yyval.a_expr->value = yyvsp[0].a_value;
2570 ;
2571 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002572case 142:
2573#line 1422 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002574{
2575 yyval.a_value = asn1p_value_fromint(0);
2576 checkmem(yyval.a_value);
2577 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2578 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2579 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2580 ;
2581 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002582case 143:
2583#line 1429 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002584{ asn1p_lexer_hack_push_opaque_state(); ;
2585 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002586case 144:
2587#line 1429 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002588{
2589 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2590 checkmem(yyval.a_value);
2591 yyval.a_value->type = ATV_UNPARSED;
2592 ;
2593 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002594case 145:
2595#line 1434 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002596{
2597 yyval.a_value = asn1p_value_fromint(0);
2598 checkmem(yyval.a_value);
2599 yyval.a_value->type = ATV_NULL;
2600 ;
2601 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002602case 146:
2603#line 1442 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002604{
2605 yyval.a_value = asn1p_value_fromint(0);
2606 checkmem(yyval.a_value);
2607 yyval.a_value->type = ATV_FALSE;
2608 ;
2609 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002610case 147:
2611#line 1447 "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_TRUE;
2616 ;
2617 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002618case 148:
2619#line 1452 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002620{
2621 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2622 checkmem(yyval.a_value);
2623 ;
2624 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002625case 149:
2626#line 1456 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002627{
2628 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2629 checkmem(yyval.a_value);
2630 ;
2631 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002632case 150:
2633#line 1460 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002634{
2635 yyval.a_value = yyval.a_value;
2636 ;
2637 break;}
Lev Walkina00d6b32006-03-21 03:40:38 +00002638case 151:
Lev Walkin0c0bca62006-03-21 04:48:15 +00002639#line 1463 "asn1p_y.y"
2640{
2641 yyval.a_value = yyvsp[0].a_value;
2642 ;
2643 break;}
2644case 152:
2645#line 1469 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002646{
Lev Walkinf15320b2004-06-03 03:38:44 +00002647 asn1p_ref_t *ref;
2648 int ret;
2649 ref = asn1p_ref_new(yylineno);
2650 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00002651 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00002652 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002653 yyval.a_value = asn1p_value_fromref(ref, 0);
2654 checkmem(yyval.a_value);
2655 free(yyvsp[0].tv_str);
2656 ;
2657 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002658case 153:
2659#line 1480 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002660{
Lev Walkinf15320b2004-06-03 03:38:44 +00002661 asn1p_ref_t *ref;
2662 int ret;
2663 ref = asn1p_ref_new(yylineno);
2664 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00002665 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00002666 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002667 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00002668 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002669 yyval.a_value = asn1p_value_fromref(ref, 0);
2670 checkmem(yyval.a_value);
2671 free(yyvsp[-2].tv_str);
2672 free(yyvsp[0].tv_str);
2673 ;
2674 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002675case 154:
2676#line 1498 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002677{
2678 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2679 checkmem(yyval.a_value);
2680 ;
2681 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002682case 155:
2683#line 1502 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002684{
2685 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
2686 checkmem(yyval.a_value);
2687 yyval.a_value->type = ATV_TUPLE;
2688 ;
2689 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002690case 156:
2691#line 1507 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002692{
2693 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
2694 checkmem(yyval.a_value);
2695 yyval.a_value->type = ATV_QUADRUPLE;
2696 ;
2697 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002698case 157:
2699#line 1541 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002700{
2701 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
2702 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2703 checkmem(yyval.tv_opaque.buf);
2704 yyval.tv_opaque.buf[0] = '{';
2705 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2706 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2707 free(yyvsp[0].tv_opaque.buf);
2708 ;
2709 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002710case 158:
2711#line 1550 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002712{
2713 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
Lev Walkinf15320b2004-06-03 03:38:44 +00002714 char *p = malloc(newsize + 1);
2715 checkmem(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00002716 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2717 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00002718 p[newsize] = '\0';
Lev Walkina00d6b32006-03-21 03:40:38 +00002719 free(yyvsp[-1].tv_opaque.buf);
2720 free(yyvsp[0].tv_opaque.buf);
2721 yyval.tv_opaque.buf = p;
2722 yyval.tv_opaque.len = newsize;
2723 ;
2724 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002725case 159:
2726#line 1565 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002727{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2728 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002729case 160:
2730#line 1566 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002731{ yyval.a_type = ASN_BASIC_NULL; ;
2732 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002733case 161:
2734#line 1567 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002735{ yyval.a_type = ASN_BASIC_REAL; ;
2736 break;}
Lev Walkina00d6b32006-03-21 03:40:38 +00002737case 162:
Lev Walkin0c0bca62006-03-21 04:48:15 +00002738#line 1568 "asn1p_y.y"
2739{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002740 break;}
2741case 163:
Lev Walkin0c0bca62006-03-21 04:48:15 +00002742#line 1569 "asn1p_y.y"
2743{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002744 break;}
2745case 164:
Lev Walkin0c0bca62006-03-21 04:48:15 +00002746#line 1570 "asn1p_y.y"
2747{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002748 break;}
2749case 165:
Lev Walkin0c0bca62006-03-21 04:48:15 +00002750#line 1571 "asn1p_y.y"
2751{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002752 break;}
2753case 166:
Lev Walkin0c0bca62006-03-21 04:48:15 +00002754#line 1572 "asn1p_y.y"
2755{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002756 break;}
2757case 167:
Lev Walkin0c0bca62006-03-21 04:48:15 +00002758#line 1573 "asn1p_y.y"
2759{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002760 break;}
2761case 168:
Lev Walkin0c0bca62006-03-21 04:48:15 +00002762#line 1574 "asn1p_y.y"
2763{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002764 break;}
2765case 169:
Lev Walkin0c0bca62006-03-21 04:48:15 +00002766#line 1575 "asn1p_y.y"
2767{ yyval.a_type = ASN_BASIC_UTCTime; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002768 break;}
2769case 170:
Lev Walkin0c0bca62006-03-21 04:48:15 +00002770#line 1576 "asn1p_y.y"
2771{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002772 break;}
2773case 171:
Lev Walkin0c0bca62006-03-21 04:48:15 +00002774#line 1577 "asn1p_y.y"
2775{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002776 break;}
2777case 172:
Lev Walkin0c0bca62006-03-21 04:48:15 +00002778#line 1584 "asn1p_y.y"
2779{ yyval.a_type = ASN_BASIC_INTEGER; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002780 break;}
2781case 173:
Lev Walkin0c0bca62006-03-21 04:48:15 +00002782#line 1585 "asn1p_y.y"
2783{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
Lev Walkina00d6b32006-03-21 03:40:38 +00002784 break;}
2785case 174:
Lev Walkin0c0bca62006-03-21 04:48:15 +00002786#line 1586 "asn1p_y.y"
2787{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2788 break;}
2789case 175:
2790#line 1590 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002791{
2792 yyval.a_expr = asn1p_expr_new(yylineno);
2793 checkmem(yyval.a_expr);
2794 yyval.a_expr->expr_type = yyvsp[0].a_type;
2795 yyval.a_expr->meta_type = AMT_TYPE;
2796 ;
2797 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002798case 176:
2799#line 1596 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002800{
2801 if(yyvsp[0].a_expr) {
2802 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinf15320b2004-06-03 03:38:44 +00002803 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002804 yyval.a_expr = asn1p_expr_new(yylineno);
2805 checkmem(yyval.a_expr);
Lev Walkinf15320b2004-06-03 03:38:44 +00002806 }
Lev Walkina00d6b32006-03-21 03:40:38 +00002807 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2808 yyval.a_expr->meta_type = AMT_TYPE;
2809 ;
2810 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002811case 177:
2812#line 1609 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002813{ yyval.a_type = ASN_STRING_BMPString; ;
2814 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002815case 178:
2816#line 1610 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002817{
2818 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00002819 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkina00d6b32006-03-21 03:40:38 +00002820 ;
2821 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002822case 179:
2823#line 1614 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002824{
2825 yyval.a_type = ASN_STRING_GraphicString;
Lev Walkin9c974182004-09-15 11:59:51 +00002826 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkina00d6b32006-03-21 03:40:38 +00002827 ;
2828 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002829case 180:
2830#line 1618 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002831{ yyval.a_type = ASN_STRING_IA5String; ;
2832 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002833case 181:
2834#line 1619 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002835{ yyval.a_type = ASN_STRING_ISO646String; ;
2836 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002837case 182:
2838#line 1620 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002839{ yyval.a_type = ASN_STRING_NumericString; ;
2840 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002841case 183:
2842#line 1621 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002843{ yyval.a_type = ASN_STRING_PrintableString; ;
2844 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002845case 184:
2846#line 1622 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002847{
2848 yyval.a_type = ASN_STRING_T61String;
Lev Walkin9c974182004-09-15 11:59:51 +00002849 fprintf(stderr, "WARNING: T61String is not fully supported\n");
Lev Walkina00d6b32006-03-21 03:40:38 +00002850 ;
2851 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002852case 185:
2853#line 1626 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002854{ yyval.a_type = ASN_STRING_TeletexString; ;
2855 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002856case 186:
2857#line 1627 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002858{ yyval.a_type = ASN_STRING_UniversalString; ;
2859 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002860case 187:
2861#line 1628 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002862{ yyval.a_type = ASN_STRING_UTF8String; ;
2863 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002864case 188:
2865#line 1629 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002866{
2867 yyval.a_type = ASN_STRING_VideotexString;
Lev Walkin9c974182004-09-15 11:59:51 +00002868 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
Lev Walkina00d6b32006-03-21 03:40:38 +00002869 ;
2870 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002871case 189:
2872#line 1633 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002873{ yyval.a_type = ASN_STRING_VisibleString; ;
2874 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002875case 190:
2876#line 1634 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002877{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2878 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002879case 196:
2880#line 1646 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002881{ yyval.a_constr = 0; ;
2882 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002883case 197:
2884#line 1647 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002885{
2886 yyval.a_constr = yyvsp[0].a_constr;
2887 ;
2888 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002889case 198:
2890#line 1653 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002891{
2892 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
2893 ;
2894 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002895case 199:
2896#line 1656 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002897{
Lev Walkinf15320b2004-06-03 03:38:44 +00002898 /*
2899 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00002900 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00002901 */
Lev Walkina00d6b32006-03-21 03:40:38 +00002902 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
2903 ;
2904 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002905case 200:
2906#line 1666 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002907{
2908 yyval.a_constr = yyvsp[-1].a_constr;
2909 ;
2910 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002911case 201:
2912#line 1669 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002913{
2914 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
2915 ;
2916 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002917case 202:
2918#line 1675 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002919{
2920 yyval.a_constr = yyvsp[0].a_constr;
2921 ;
2922 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002923case 203:
2924#line 1678 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002925{
Lev Walkinf15320b2004-06-03 03:38:44 +00002926 asn1p_constraint_t *ct;
2927 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002928 ct->type = ACT_EL_EXT;
Lev Walkina00d6b32006-03-21 03:40:38 +00002929 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
2930 ;
2931 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002932case 204:
2933#line 1684 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002934{
Lev Walkinf15320b2004-06-03 03:38:44 +00002935 asn1p_constraint_t *ct;
2936 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00002937 ct->type = ACT_EL_EXT;
Lev Walkina00d6b32006-03-21 03:40:38 +00002938 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
2939 ct = yyval.a_constr;
2940 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
2941 ;
2942 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002943case 205:
2944#line 1695 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002945{
2946 yyval.a_constr = yyvsp[0].a_constr;
2947 ;
2948 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002949case 206:
2950#line 1698 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002951{
2952 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2953 ;
2954 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002955case 207:
2956#line 1701 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002957{
2958 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
2959 ;
2960 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002961case 208:
2962#line 1704 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002963{
2964 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
2965 ;
2966 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002967case 209:
2968#line 1707 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002969{
2970 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
2971 ;
2972 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002973case 210:
2974#line 1713 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002975{
Lev Walkinf15320b2004-06-03 03:38:44 +00002976 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002977 yyval.a_constr = asn1p_constraint_new(yylineno);
2978 checkmem(yyval.a_constr);
2979 yyval.a_constr->type = yyvsp[-3].a_ctype;
2980 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkinf15320b2004-06-03 03:38:44 +00002981 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002982 ;
2983 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002984case 211:
2985#line 1721 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002986{
Lev Walkinf59d0752004-08-18 04:59:12 +00002987 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002988 yyval.a_constr = asn1p_constraint_new(yylineno);
2989 checkmem(yyval.a_constr);
2990 yyval.a_constr->type = ACT_CA_SET;
2991 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkinf59d0752004-08-18 04:59:12 +00002992 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002993 ;
2994 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00002995case 212:
2996#line 1729 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00002997{
2998 yyval.a_constr = asn1p_constraint_new(yylineno);
2999 checkmem(yyval.a_constr);
3000 yyval.a_constr->type = ACT_EL_VALUE;
3001 yyval.a_constr->value = yyvsp[0].a_value;
3002 ;
3003 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003004case 213:
3005#line 1735 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003006{
3007 yyval.a_constr = asn1p_constraint_new(yylineno);
3008 checkmem(yyval.a_constr);
3009 yyval.a_constr->type = ACT_EL_TYPE;
3010 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
3011 ;
3012 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003013case 214:
3014#line 1741 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003015{
3016 yyval.a_constr = asn1p_constraint_new(yylineno);
3017 checkmem(yyval.a_constr);
3018 yyval.a_constr->type = yyvsp[-1].a_ctype;
3019 yyval.a_constr->range_start = yyvsp[-2].a_value;
3020 yyval.a_constr->range_stop = yyvsp[0].a_value;
3021 ;
3022 break;}
Lev Walkina00d6b32006-03-21 03:40:38 +00003023case 215:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003024#line 1748 "asn1p_y.y"
3025{
3026 yyval.a_constr = asn1p_constraint_new(yylineno);
3027 checkmem(yyval.a_constr);
3028 yyval.a_constr->type = yyvsp[-1].a_ctype;
3029 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3030 yyval.a_constr->range_stop = yyvsp[0].a_value;
3031 yyval.a_constr->range_start->type = ATV_MIN;
3032 ;
3033 break;}
3034case 216:
3035#line 1756 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003036{
3037 yyval.a_constr = asn1p_constraint_new(yylineno);
3038 checkmem(yyval.a_constr);
3039 yyval.a_constr->type = yyvsp[-1].a_ctype;
3040 yyval.a_constr->range_start = yyvsp[-2].a_value;
3041 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3042 yyval.a_constr->range_stop->type = ATV_MAX;
3043 ;
3044 break;}
Lev Walkina00d6b32006-03-21 03:40:38 +00003045case 217:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003046#line 1764 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003047{
Lev Walkin0c0bca62006-03-21 04:48:15 +00003048 yyval.a_constr = asn1p_constraint_new(yylineno);
3049 checkmem(yyval.a_constr);
3050 yyval.a_constr->type = yyvsp[-1].a_ctype;
3051 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3052 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3053 yyval.a_constr->range_start->type = ATV_MIN;
3054 yyval.a_constr->range_stop->type = ATV_MAX;
Lev Walkina00d6b32006-03-21 03:40:38 +00003055 ;
3056 break;}
3057case 218:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003058#line 1773 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003059{
3060 yyval.a_constr = yyvsp[0].a_constr;
3061 ;
3062 break;}
3063case 219:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003064#line 1776 "asn1p_y.y"
3065{
3066 yyval.a_constr = yyvsp[0].a_constr;
3067 ;
Lev Walkina00d6b32006-03-21 03:40:38 +00003068 break;}
3069case 220:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003070#line 1780 "asn1p_y.y"
3071{ asn1p_lexer_hack_push_opaque_state(); ;
3072 break;}
3073case 221:
3074#line 1780 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003075{
3076 yyval.a_constr = asn1p_constraint_new(yylineno);
3077 checkmem(yyval.a_constr);
3078 yyval.a_constr->type = ACT_CT_CTDBY;
3079 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3080 checkmem(yyval.a_constr->value);
3081 yyval.a_constr->value->type = ATV_UNPARSED;
3082 ;
3083 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003084case 222:
3085#line 1791 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003086{ yyval.a_ctype = ACT_EL_RANGE; ;
3087 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003088case 223:
3089#line 1792 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003090{ yyval.a_ctype = ACT_EL_RLRANGE; ;
3091 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003092case 224:
3093#line 1793 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003094{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3095 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003096case 225:
3097#line 1794 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003098{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3099 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003100case 226:
3101#line 1798 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003102{
3103 yyval.a_ctype = ACT_CT_SIZE;
3104 ;
3105 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003106case 227:
3107#line 1801 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003108{
3109 yyval.a_ctype = ACT_CT_FROM;
3110 ;
3111 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003112case 228:
3113#line 1807 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003114{
3115 yyval.a_value = asn1p_value_fromint(0);
3116 checkmem(yyval.a_value);
3117 yyval.a_value->type = ATV_FALSE;
3118 ;
3119 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003120case 229:
3121#line 1812 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003122{
3123 yyval.a_value = asn1p_value_fromint(1);
3124 checkmem(yyval.a_value);
3125 yyval.a_value->type = ATV_TRUE;
3126 ;
3127 break;}
Lev Walkina00d6b32006-03-21 03:40:38 +00003128case 230:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003129#line 1817 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003130{
3131 yyval.a_value = yyvsp[0].a_value;
3132 ;
3133 break;}
3134case 231:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003135#line 1820 "asn1p_y.y"
3136{
3137 yyval.a_value = yyvsp[0].a_value;
3138 ;
3139 break;}
3140case 232:
3141#line 1823 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003142{
Lev Walkinf15320b2004-06-03 03:38:44 +00003143 asn1p_ref_t *ref;
3144 int ret;
3145 ref = asn1p_ref_new(yylineno);
3146 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003147 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003148 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003149 yyval.a_value = asn1p_value_fromref(ref, 0);
3150 checkmem(yyval.a_value);
3151 free(yyvsp[0].tv_str);
3152 ;
3153 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003154case 233:
3155#line 1837 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003156{
Lev Walkinc8092cb2005-02-18 16:34:21 +00003157 asn1p_ref_t *ref;
3158 int ret;
3159 ref = asn1p_ref_new(yylineno);
3160 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003161 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003162 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003163 yyval.a_value = asn1p_value_fromref(ref, 0);
3164 checkmem(yyval.a_value);
3165 free(yyvsp[0].tv_str);
3166 ;
3167 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003168case 234:
3169#line 1851 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003170{
3171 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
3172 ;
3173 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003174case 235:
3175#line 1854 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003176{
3177 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
3178 ;
3179 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003180case 236:
3181#line 1860 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003182{
3183 yyval.a_constr = yyvsp[0].a_constr;
3184 ;
3185 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003186case 237:
3187#line 1863 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003188{
3189 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3190 ;
3191 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003192case 238:
3193#line 1869 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003194{
3195 yyval.a_constr = asn1p_constraint_new(yylineno);
3196 checkmem(yyval.a_constr);
3197 yyval.a_constr->type = ACT_EL_EXT;
3198 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
3199 ;
3200 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003201case 239:
3202#line 1875 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003203{
3204 yyval.a_constr = asn1p_constraint_new(yylineno);
3205 checkmem(yyval.a_constr);
3206 yyval.a_constr->type = ACT_EL_VALUE;
3207 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3208 yyval.a_constr->presence = yyvsp[0].a_pres;
3209 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
3210 ;
3211 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003212case 240:
3213#line 1889 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003214{ yyval.a_pres = ACPRES_DEFAULT; ;
3215 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003216case 241:
3217#line 1890 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003218{ yyval.a_pres = yyvsp[0].a_pres; ;
3219 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003220case 242:
3221#line 1894 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003222{
3223 yyval.a_pres = ACPRES_PRESENT;
3224 ;
3225 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003226case 243:
3227#line 1897 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003228{
3229 yyval.a_pres = ACPRES_ABSENT;
3230 ;
3231 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003232case 244:
3233#line 1900 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003234{
3235 yyval.a_pres = ACPRES_OPTIONAL;
3236 ;
3237 break;}
Lev Walkina00d6b32006-03-21 03:40:38 +00003238case 245:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003239#line 1906 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003240{
3241 yyval.a_constr = yyvsp[0].a_constr;
3242 ;
3243 break;}
3244case 246:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003245#line 1909 "asn1p_y.y"
3246{
3247 yyval.a_constr = yyvsp[0].a_constr;
3248 ;
3249 break;}
3250case 247:
3251#line 1918 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003252{
Lev Walkinf15320b2004-06-03 03:38:44 +00003253 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3254 asn1p_constraint_t *ct;
3255 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003256 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003257 checkmem(ret == 0);
3258 ct = asn1p_constraint_new(yylineno);
Lev Walkina00d6b32006-03-21 03:40:38 +00003259 checkmem(yyval.a_constr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003260 ct->type = ACT_EL_VALUE;
3261 ct->value = asn1p_value_fromref(ref, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003262 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
3263 ;
3264 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003265case 248:
3266#line 1933 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003267{
3268 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
3269 ;
3270 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003271case 249:
3272#line 1939 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003273{
3274 yyval.a_constr = asn1p_constraint_new(yylineno);
3275 checkmem(yyval.a_constr);
3276 yyval.a_constr->type = ACT_EL_VALUE;
3277 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3278 ;
3279 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003280case 250:
3281#line 1945 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003282{
Lev Walkinf15320b2004-06-03 03:38:44 +00003283 asn1p_constraint_t *ct;
3284 ct = asn1p_constraint_new(yylineno);
3285 checkmem(ct);
3286 ct->type = ACT_EL_VALUE;
Lev Walkina00d6b32006-03-21 03:40:38 +00003287 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3288 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
3289 ;
3290 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003291case 251:
3292#line 1959 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003293{
3294 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
Lev Walkinf15320b2004-06-03 03:38:44 +00003295 int ret;
3296 *p = '@';
Lev Walkina00d6b32006-03-21 03:40:38 +00003297 strcpy(p + 1, yyvsp[0].tv_str);
3298 yyval.a_ref = asn1p_ref_new(yylineno);
3299 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003300 checkmem(ret == 0);
3301 free(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00003302 free(yyvsp[0].tv_str);
3303 ;
3304 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003305case 252:
3306#line 1970 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003307{
3308 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
Lev Walkinf15320b2004-06-03 03:38:44 +00003309 int ret;
3310 p[0] = '@';
3311 p[1] = '.';
Lev Walkina00d6b32006-03-21 03:40:38 +00003312 strcpy(p + 2, yyvsp[0].tv_str);
3313 yyval.a_ref = asn1p_ref_new(yylineno);
3314 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003315 checkmem(ret == 0);
3316 free(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00003317 free(yyvsp[0].tv_str);
3318 ;
3319 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003320case 253:
3321#line 1986 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003322{
3323 yyval.tv_str = yyvsp[0].tv_str;
3324 ;
3325 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003326case 254:
3327#line 1989 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003328{
3329 int l1 = strlen(yyvsp[-2].tv_str);
3330 int l3 = strlen(yyvsp[0].tv_str);
3331 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3332 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3333 yyval.tv_str[l1] = '.';
3334 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3335 yyval.tv_str[l1 + 1 + l3] = '\0';
3336 ;
3337 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003338case 255:
3339#line 2007 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003340{
3341 yyval.a_marker.flags = EM_NOMARK;
3342 yyval.a_marker.default_value = 0;
3343 ;
3344 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003345case 256:
3346#line 2011 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003347{ yyval.a_marker = yyvsp[0].a_marker; ;
3348 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003349case 257:
3350#line 2015 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003351{
3352 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
3353 yyval.a_marker.default_value = 0;
3354 ;
3355 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003356case 258:
3357#line 2019 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003358{
3359 yyval.a_marker.flags = EM_DEFAULT;
3360 yyval.a_marker.default_value = yyvsp[0].a_value;
3361 ;
3362 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003363case 259:
3364#line 2042 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003365{
3366 yyval.a_expr = asn1p_expr_new(yylineno);
3367 checkmem(yyval.a_expr);
3368 ;
3369 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003370case 260:
3371#line 2046 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003372{
3373 yyval.a_expr = yyvsp[-1].a_expr;
3374 ;
3375 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003376case 261:
3377#line 2052 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003378{
3379 yyval.a_expr = asn1p_expr_new(yylineno);
3380 checkmem(yyval.a_expr);
3381 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3382 ;
3383 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003384case 262:
3385#line 2057 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003386{
3387 yyval.a_expr = yyvsp[-2].a_expr;
3388 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3389 ;
3390 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003391case 263:
3392#line 2064 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003393{
3394 yyval.a_expr = asn1p_expr_new(yylineno);
3395 checkmem(yyval.a_expr);
3396 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3397 yyval.a_expr->meta_type = AMT_VALUE;
3398 yyval.a_expr->Identifier = yyvsp[0].tv_str;
3399 ;
3400 break;}
Lev Walkina00d6b32006-03-21 03:40:38 +00003401case 264:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003402#line 2071 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003403{
3404 yyval.a_expr = asn1p_expr_new(yylineno);
3405 checkmem(yyval.a_expr);
3406 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3407 yyval.a_expr->meta_type = AMT_VALUE;
3408 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3409 yyval.a_expr->value = yyvsp[-1].a_value;
3410 ;
3411 break;}
3412case 265:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003413#line 2079 "asn1p_y.y"
3414{
3415 yyval.a_expr = asn1p_expr_new(yylineno);
3416 checkmem(yyval.a_expr);
3417 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3418 yyval.a_expr->meta_type = AMT_VALUE;
3419 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3420 yyval.a_expr->value = yyvsp[-1].a_value;
3421 ;
3422 break;}
3423case 266:
3424#line 2087 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003425{
3426 yyval.a_expr = asn1p_expr_new(yylineno);
3427 checkmem(yyval.a_expr);
3428 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3429 yyval.a_expr->meta_type = AMT_VALUE;
3430 yyval.a_expr->value = yyvsp[0].a_value;
3431 ;
3432 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003433case 267:
3434#line 2094 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003435{
3436 yyval.a_expr = asn1p_expr_new(yylineno);
3437 checkmem(yyval.a_expr);
3438 yyval.a_expr->Identifier = strdup("...");
3439 checkmem(yyval.a_expr->Identifier);
3440 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3441 yyval.a_expr->meta_type = AMT_VALUE;
3442 ;
3443 break;}
Lev Walkina00d6b32006-03-21 03:40:38 +00003444case 268:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003445#line 2105 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003446{
3447 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3448 checkmem(yyval.a_value);
3449 ;
3450 break;}
3451case 269:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003452#line 2109 "asn1p_y.y"
3453{
3454 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3455 checkmem(yyval.a_value);
3456 ;
Lev Walkina00d6b32006-03-21 03:40:38 +00003457 break;}
3458case 270:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003459#line 2140 "asn1p_y.y"
3460{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
Lev Walkina00d6b32006-03-21 03:40:38 +00003461 break;}
3462case 271:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003463#line 2141 "asn1p_y.y"
3464{ yyval.a_tag = yyvsp[0].a_tag; ;
3465 break;}
3466case 272:
3467#line 2145 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003468{
3469 yyval.a_tag = yyvsp[-1].a_tag;
3470 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
3471 ;
3472 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003473case 273:
3474#line 2152 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003475{
3476 yyval.a_tag = yyvsp[-2].a_tag;
3477 yyval.a_tag.tag_value = yyvsp[-1].a_int;
3478 ;
3479 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003480case 274:
3481#line 2158 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003482{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
3483 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003484case 275:
3485#line 2159 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003486{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
3487 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003488case 276:
3489#line 2160 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003490{ yyval.a_tag.tag_class = TC_APPLICATION; ;
3491 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003492case 277:
3493#line 2161 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003494{ yyval.a_tag.tag_class = TC_PRIVATE; ;
3495 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003496case 278:
3497#line 2165 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003498{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3499 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003500case 279:
3501#line 2166 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003502{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3503 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003504case 280:
3505#line 2167 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003506{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3507 break;}
Lev Walkina00d6b32006-03-21 03:40:38 +00003508case 281:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003509#line 2171 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003510{
3511 checkmem(yyvsp[0].tv_str);
3512 yyval.tv_str = yyvsp[0].tv_str;
3513 ;
3514 break;}
3515case 282:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003516#line 2175 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003517{
3518 checkmem(yyvsp[0].tv_str);
3519 yyval.tv_str = yyvsp[0].tv_str;
3520 ;
3521 break;}
3522case 283:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003523#line 2183 "asn1p_y.y"
3524{
3525 checkmem(yyvsp[0].tv_str);
3526 yyval.tv_str = yyvsp[0].tv_str;
3527 ;
Lev Walkina00d6b32006-03-21 03:40:38 +00003528 break;}
3529case 284:
Lev Walkin0c0bca62006-03-21 04:48:15 +00003530#line 2190 "asn1p_y.y"
3531{ yyval.tv_str = 0; ;
3532 break;}
3533case 285:
3534#line 2191 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003535{
3536 yyval.tv_str = yyvsp[0].tv_str;
3537 ;
3538 break;}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003539case 286:
3540#line 2197 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +00003541{
3542 checkmem(yyvsp[0].tv_str);
3543 yyval.tv_str = yyvsp[0].tv_str;
3544 ;
3545 break;}
3546}
3547 /* the action file gets copied in in place of this dollarsign */
3548#line 543 "/usr/share/bison.simple"
Lev Walkinf15320b2004-06-03 03:38:44 +00003549
3550 yyvsp -= yylen;
3551 yyssp -= yylen;
Lev Walkina00d6b32006-03-21 03:40:38 +00003552#ifdef YYLSP_NEEDED
3553 yylsp -= yylen;
3554#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003555
Lev Walkina00d6b32006-03-21 03:40:38 +00003556#if YYDEBUG != 0
3557 if (yydebug)
3558 {
3559 short *ssp1 = yyss - 1;
3560 fprintf (stderr, "state stack now");
3561 while (ssp1 != yyssp)
3562 fprintf (stderr, " %d", *++ssp1);
3563 fprintf (stderr, "\n");
3564 }
3565#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003566
3567 *++yyvsp = yyval;
3568
Lev Walkina00d6b32006-03-21 03:40:38 +00003569#ifdef YYLSP_NEEDED
3570 yylsp++;
3571 if (yylen == 0)
3572 {
3573 yylsp->first_line = yylloc.first_line;
3574 yylsp->first_column = yylloc.first_column;
3575 yylsp->last_line = (yylsp-1)->last_line;
3576 yylsp->last_column = (yylsp-1)->last_column;
3577 yylsp->text = 0;
3578 }
3579 else
3580 {
3581 yylsp->last_line = (yylsp+yylen-1)->last_line;
3582 yylsp->last_column = (yylsp+yylen-1)->last_column;
3583 }
3584#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003585
Lev Walkina00d6b32006-03-21 03:40:38 +00003586 /* Now "shift" the result of the reduction.
3587 Determine what state that goes to,
3588 based on the state we popped back to
3589 and the rule number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003590
3591 yyn = yyr1[yyn];
3592
Lev Walkina00d6b32006-03-21 03:40:38 +00003593 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3594 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003595 yystate = yytable[yystate];
3596 else
Lev Walkina00d6b32006-03-21 03:40:38 +00003597 yystate = yydefgoto[yyn - YYNTBASE];
Lev Walkinf15320b2004-06-03 03:38:44 +00003598
3599 goto yynewstate;
3600
Lev Walkina00d6b32006-03-21 03:40:38 +00003601yyerrlab: /* here on detecting error */
Lev Walkinf15320b2004-06-03 03:38:44 +00003602
Lev Walkina00d6b32006-03-21 03:40:38 +00003603 if (! yyerrstatus)
3604 /* If not already recovering from an error, report this error. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003605 {
3606 ++yynerrs;
Lev Walkina00d6b32006-03-21 03:40:38 +00003607
3608#ifdef YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003609 yyn = yypact[yystate];
3610
Lev Walkina00d6b32006-03-21 03:40:38 +00003611 if (yyn > YYFLAG && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003612 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003613 int size = 0;
3614 char *msg;
3615 int x, count;
Lev Walkinf15320b2004-06-03 03:38:44 +00003616
Lev Walkina00d6b32006-03-21 03:40:38 +00003617 count = 0;
3618 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3619 for (x = (yyn < 0 ? -yyn : 0);
3620 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
3621 if (yycheck[x + yyn] == x)
3622 size += strlen(yytname[x]) + 15, count++;
3623 msg = (char *) malloc(size + 15);
3624 if (msg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00003625 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003626 strcpy(msg, "parse error");
3627
3628 if (count < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003629 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003630 count = 0;
3631 for (x = (yyn < 0 ? -yyn : 0);
3632 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
3633 if (yycheck[x + yyn] == x)
3634 {
3635 strcat(msg, count == 0 ? ", expecting `" : " or `");
3636 strcat(msg, yytname[x]);
3637 strcat(msg, "'");
3638 count++;
3639 }
Lev Walkinf15320b2004-06-03 03:38:44 +00003640 }
Lev Walkina00d6b32006-03-21 03:40:38 +00003641 yyerror(msg);
3642 free(msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003643 }
3644 else
Lev Walkina00d6b32006-03-21 03:40:38 +00003645 yyerror ("parse error; also virtual memory exceeded");
Lev Walkinf15320b2004-06-03 03:38:44 +00003646 }
3647 else
3648#endif /* YYERROR_VERBOSE */
Lev Walkina00d6b32006-03-21 03:40:38 +00003649 yyerror("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003650 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003651
Lev Walkina00d6b32006-03-21 03:40:38 +00003652 goto yyerrlab1;
3653yyerrlab1: /* here on error raised explicitly by an action */
Lev Walkinf15320b2004-06-03 03:38:44 +00003654
3655 if (yyerrstatus == 3)
3656 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003657 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003658
Lev Walkina00d6b32006-03-21 03:40:38 +00003659 /* return failure if at end of input */
3660 if (yychar == YYEOF)
Lev Walkin1004aa92004-09-08 00:28:11 +00003661 YYABORT;
Lev Walkinf15320b2004-06-03 03:38:44 +00003662
Lev Walkina00d6b32006-03-21 03:40:38 +00003663#if YYDEBUG != 0
3664 if (yydebug)
3665 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3666#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003667
Lev Walkina00d6b32006-03-21 03:40:38 +00003668 yychar = YYEMPTY;
Lev Walkinf15320b2004-06-03 03:38:44 +00003669 }
3670
Lev Walkina00d6b32006-03-21 03:40:38 +00003671 /* Else will try to reuse lookahead token
3672 after shifting the error token. */
3673
3674 yyerrstatus = 3; /* Each real token shifted decrements this */
3675
3676 goto yyerrhandle;
3677
3678yyerrdefault: /* current state does not do anything special for the error token. */
3679
3680#if 0
3681 /* This is wrong; only states that explicitly want error tokens
3682 should shift them. */
3683 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3684 if (yyn) goto yydefault;
3685#endif
3686
3687yyerrpop: /* pop the current state because it cannot handle the error token */
3688
3689 if (yyssp == yyss) YYABORT;
3690 yyvsp--;
3691 yystate = *--yyssp;
3692#ifdef YYLSP_NEEDED
3693 yylsp--;
3694#endif
3695
3696#if YYDEBUG != 0
3697 if (yydebug)
3698 {
3699 short *ssp1 = yyss - 1;
3700 fprintf (stderr, "Error: state stack now");
3701 while (ssp1 != yyssp)
3702 fprintf (stderr, " %d", *++ssp1);
3703 fprintf (stderr, "\n");
3704 }
3705#endif
3706
3707yyerrhandle:
3708
3709 yyn = yypact[yystate];
3710 if (yyn == YYFLAG)
3711 goto yyerrdefault;
3712
3713 yyn += YYTERROR;
3714 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3715 goto yyerrdefault;
3716
3717 yyn = yytable[yyn];
3718 if (yyn < 0)
3719 {
3720 if (yyn == YYFLAG)
3721 goto yyerrpop;
3722 yyn = -yyn;
3723 goto yyreduce;
3724 }
3725 else if (yyn == 0)
3726 goto yyerrpop;
3727
Lev Walkinf15320b2004-06-03 03:38:44 +00003728 if (yyn == YYFINAL)
3729 YYACCEPT;
3730
Lev Walkina00d6b32006-03-21 03:40:38 +00003731#if YYDEBUG != 0
3732 if (yydebug)
3733 fprintf(stderr, "Shifting error token, ");
3734#endif
3735
Lev Walkinf15320b2004-06-03 03:38:44 +00003736 *++yyvsp = yylval;
Lev Walkina00d6b32006-03-21 03:40:38 +00003737#ifdef YYLSP_NEEDED
3738 *++yylsp = yylloc;
3739#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003740
3741 yystate = yyn;
3742 goto yynewstate;
3743
Lev Walkina00d6b32006-03-21 03:40:38 +00003744 yyacceptlab:
3745 /* YYACCEPT comes here. */
3746 if (yyfree_stacks)
Lev Walkinfb872bd2006-03-18 06:53:11 +00003747 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003748 free (yyss);
3749 free (yyvs);
3750#ifdef YYLSP_NEEDED
3751 free (yyls);
Lev Walkinfb872bd2006-03-18 06:53:11 +00003752#endif
Lev Walkina00d6b32006-03-21 03:40:38 +00003753 }
3754 return 0;
3755
3756 yyabortlab:
3757 /* YYABORT comes here. */
3758 if (yyfree_stacks)
3759 {
3760 free (yyss);
3761 free (yyvs);
3762#ifdef YYLSP_NEEDED
3763 free (yyls);
3764#endif
3765 }
3766 return 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003767}
Lev Walkin0c0bca62006-03-21 04:48:15 +00003768#line 2203 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00003769
3770
3771
3772/*
3773 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3774 */
3775static asn1p_value_t *
3776_convert_bitstring2binary(char *str, int base) {
3777 asn1p_value_t *val;
3778 int slen;
3779 int memlen;
3780 int baselen;
3781 int bits;
3782 uint8_t *binary_vector;
3783 uint8_t *bv_ptr;
3784 uint8_t cur_val;
3785
3786 assert(str);
3787 assert(str[0] == '\'');
3788
3789 switch(base) {
3790 case 'B':
3791 baselen = 1;
3792 break;
3793 case 'H':
3794 baselen = 4;
3795 break;
3796 default:
3797 assert(base == 'B' || base == 'H');
3798 errno = EINVAL;
3799 return NULL;
3800 }
3801
3802 slen = strlen(str);
3803 assert(str[slen - 1] == base);
3804 assert(str[slen - 2] == '\'');
3805
3806 memlen = slen / (8 / baselen); /* Conservative estimate */
3807
3808 bv_ptr = binary_vector = malloc(memlen + 1);
3809 if(bv_ptr == NULL)
3810 /* ENOMEM */
3811 return NULL;
3812
3813 cur_val = 0;
3814 bits = 0;
3815 while(*(++str) != '\'') {
3816 switch(baselen) {
3817 case 1:
3818 switch(*str) {
3819 case '1':
3820 cur_val |= 1 << (7 - (bits % 8));
3821 case '0':
3822 break;
3823 default:
3824 assert(!"_y UNREACH1");
3825 case ' ': case '\r': case '\n':
3826 continue;
3827 }
3828 break;
3829 case 4:
3830 switch(*str) {
3831 case '0': case '1': case '2': case '3': case '4':
3832 case '5': case '6': case '7': case '8': case '9':
3833 cur_val |= (*str - '0') << (4 - (bits % 8));
3834 break;
3835 case 'A': case 'B': case 'C':
3836 case 'D': case 'E': case 'F':
3837 cur_val |= ((*str - 'A') + 10)
3838 << (4 - (bits % 8));
3839 break;
3840 default:
3841 assert(!"_y UNREACH2");
3842 case ' ': case '\r': case '\n':
3843 continue;
3844 }
3845 break;
3846 }
3847
3848 bits += baselen;
3849 if((bits % 8) == 0) {
3850 *bv_ptr++ = cur_val;
3851 cur_val = 0;
3852 }
3853 }
3854
3855 *bv_ptr = cur_val;
3856 assert((bv_ptr - binary_vector) <= memlen);
3857
3858 val = asn1p_value_frombits(binary_vector, bits, 0);
3859 if(val == NULL) {
3860 free(binary_vector);
3861 }
3862
3863 return val;
3864}
3865
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003866/*
3867 * For unnamed types (used in old X.208 compliant modules)
3868 * generate some sort of interim names, to not to force human being to fix
3869 * the specification's compliance to modern ASN.1 standards.
3870 */
3871static void
3872_fixup_anonymous_identifier(asn1p_expr_t *expr) {
3873 char *p;
3874 assert(expr->Identifier == 0);
3875
3876 /*
3877 * Try to figure out the type name
3878 * without going too much into details
3879 */
3880 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
3881 if(expr->reference && expr->reference->comp_count > 0)
3882 expr->Identifier = expr->reference->components[0].name;
3883
3884 fprintf(stderr,
3885 "WARNING: Line %d: expected lower-case member identifier, "
3886 "found an unnamed %s.\n"
3887 "WARNING: Obsolete X.208 syntax detected, "
3888 "please give the member a name.\n",
3889 yylineno, expr->Identifier ? expr->Identifier : "type");
3890
3891 if(!expr->Identifier)
3892 expr->Identifier = "unnamed";
3893 expr->Identifier = strdup(expr->Identifier);
3894 assert(expr->Identifier);
3895 /* Make a lowercase identifier from the type name */
3896 for(p = expr->Identifier; *p; p++) {
3897 switch(*p) {
3898 case 'A' ... 'Z': *p += 32; break;
3899 case ' ': *p = '_'; break;
3900 case '-': *p = '_'; break;
3901 }
3902 }
3903 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
3904 "Name clash may occur later.\n",
3905 expr->Identifier);
3906}
3907
Lev Walkinf15320b2004-06-03 03:38:44 +00003908int
3909yyerror(const char *msg) {
Lev Walkin9d542d22006-03-14 16:31:37 +00003910 extern char *asn1p_text;
Lev Walkinf15320b2004-06-03 03:38:44 +00003911 fprintf(stderr,
3912 "ASN.1 grammar parse error "
3913 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00003914 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003915 return -1;
3916}
3917