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