blob: 6c4e9ffaa924f09960deda1752c1563b8633f63e [file] [log] [blame]
vlmfa67ddc2004-06-03 03:38:44 +00001
vlm6a02a8a2004-09-08 00:28:11 +00002/* A Bison parser, made from asn1p_y.y
3 by GNU Bison version 1.28 */
vlmfa67ddc2004-06-03 03:38:44 +00004
vlm6a02a8a2004-09-08 00:28:11 +00005#define YYBISON 1 /* Identify Bison output. */
vlmfa67ddc2004-06-03 03:38:44 +00006
7#define yyparse asn1p_parse
vlm6a02a8a2004-09-08 00:28:11 +00008#define yylex asn1p_lex
vlmfa67ddc2004-06-03 03:38:44 +00009#define yyerror asn1p_error
vlm6a02a8a2004-09-08 00:28:11 +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
vlm6a02a8a2004-09-08 00:28:11 +000014#define TOK_PPEQ 257
15#define TOK_opaque 258
16#define TOK_bstring 259
17#define TOK_cstring 260
18#define TOK_hstring 261
19#define TOK_identifier 262
20#define TOK_number 263
vlm2c8c44d2005-03-24 16:22:35 +000021#define TOK_tuple 264
22#define TOK_quadruple 265
23#define TOK_number_negative 266
24#define TOK_typereference 267
25#define TOK_capitalreference 268
26#define TOK_typefieldreference 269
27#define TOK_valuefieldreference 270
28#define TOK_ABSENT 271
29#define TOK_ABSTRACT_SYNTAX 272
30#define TOK_ALL 273
31#define TOK_ANY 274
32#define TOK_APPLICATION 275
33#define TOK_AUTOMATIC 276
34#define TOK_BEGIN 277
35#define TOK_BIT 278
36#define TOK_BMPString 279
37#define TOK_BOOLEAN 280
38#define TOK_BY 281
39#define TOK_CHARACTER 282
40#define TOK_CHOICE 283
41#define TOK_CLASS 284
42#define TOK_COMPONENT 285
43#define TOK_COMPONENTS 286
44#define TOK_CONSTRAINED 287
45#define TOK_CONTAINING 288
46#define TOK_DEFAULT 289
47#define TOK_DEFINITIONS 290
48#define TOK_DEFINED 291
49#define TOK_EMBEDDED 292
50#define TOK_ENCODED 293
51#define TOK_ENCODING_CONTROL 294
52#define TOK_END 295
53#define TOK_ENUMERATED 296
54#define TOK_EXPLICIT 297
55#define TOK_EXPORTS 298
56#define TOK_EXTENSIBILITY 299
57#define TOK_EXTERNAL 300
58#define TOK_FALSE 301
59#define TOK_FROM 302
60#define TOK_GeneralizedTime 303
61#define TOK_GeneralString 304
62#define TOK_GraphicString 305
63#define TOK_IA5String 306
64#define TOK_IDENTIFIER 307
65#define TOK_IMPLICIT 308
66#define TOK_IMPLIED 309
67#define TOK_IMPORTS 310
68#define TOK_INCLUDES 311
69#define TOK_INSTANCE 312
70#define TOK_INSTRUCTIONS 313
71#define TOK_INTEGER 314
72#define TOK_ISO646String 315
73#define TOK_MAX 316
74#define TOK_MIN 317
75#define TOK_MINUS_INFINITY 318
76#define TOK_NULL 319
77#define TOK_NumericString 320
78#define TOK_OBJECT 321
79#define TOK_ObjectDescriptor 322
80#define TOK_OCTET 323
81#define TOK_OF 324
82#define TOK_OPTIONAL 325
83#define TOK_PATTERN 326
84#define TOK_PDV 327
85#define TOK_PLUS_INFINITY 328
86#define TOK_PRESENT 329
87#define TOK_PrintableString 330
88#define TOK_PRIVATE 331
89#define TOK_REAL 332
90#define TOK_RELATIVE_OID 333
91#define TOK_SEQUENCE 334
92#define TOK_SET 335
93#define TOK_SIZE 336
94#define TOK_STRING 337
95#define TOK_SYNTAX 338
96#define TOK_T61String 339
97#define TOK_TAGS 340
98#define TOK_TeletexString 341
99#define TOK_TRUE 342
100#define TOK_TYPE_IDENTIFIER 343
101#define TOK_UNIQUE 344
102#define TOK_UNIVERSAL 345
103#define TOK_UniversalString 346
104#define TOK_UTCTime 347
105#define TOK_UTF8String 348
106#define TOK_VideotexString 349
107#define TOK_VisibleString 350
108#define TOK_WITH 351
109#define TOK_EXCEPT 352
110#define TOK_INTERSECTION 353
111#define TOK_UNION 354
112#define TOK_TwoDots 355
113#define TOK_ThreeDots 356
vlmfa67ddc2004-06-03 03:38:44 +0000114
115#line 1 "asn1p_y.y"
116
117
118#include <stdlib.h>
119#include <stdio.h>
120#include <string.h>
121#include <errno.h>
122#include <assert.h>
123
124#include "asn1parser.h"
125
126#define YYPARSE_PARAM param
vlm03630c52005-06-07 21:43:32 +0000127#define YYPARSE_PARAM_TYPE void **
vlmfa67ddc2004-06-03 03:38:44 +0000128#define YYERROR_VERBOSE
129
130int yylex(void);
131int yyerror(const char *msg);
vlm03630c52005-06-07 21:43:32 +0000132#ifdef YYBYACC
133int yyparse(void **param); /* byacc does not produce a prototype */
134#endif
vlmfa67ddc2004-06-03 03:38:44 +0000135void asn1p_lexer_hack_push_opaque_state(void);
136void asn1p_lexer_hack_enable_with_syntax(void);
vlm9283dbe2004-08-18 04:59:12 +0000137void asn1p_lexer_hack_push_encoding_control(void);
vlmfa67ddc2004-06-03 03:38:44 +0000138#define yylineno asn1p_lineno
139extern int asn1p_lineno;
140
vlm931aeed2005-08-12 10:09:10 +0000141/*
142 * This temporary variable is used to solve the shortcomings of 1-lookahead
143 * parser.
144 */
145static struct AssignedIdentifier *saved_aid;
vlmfa67ddc2004-06-03 03:38:44 +0000146
147static asn1p_value_t *
148 _convert_bitstring2binary(char *str, int base);
149
vlm931aeed2005-08-12 10:09:10 +0000150#define checkmem(ptr) do { \
151 if(!(ptr)) \
152 return yyerror("Memory failure"); \
vlmfa67ddc2004-06-03 03:38:44 +0000153 } while(0)
154
vlm931aeed2005-08-12 10:09:10 +0000155#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
156 if(arg1->type != constr_type) { \
157 int __ret; \
158 root = asn1p_constraint_new(yylineno); \
159 checkmem(root); \
160 root->type = constr_type; \
161 __ret = asn1p_constraint_insert(root, \
162 arg1); \
163 checkmem(__ret == 0); \
164 } else { \
165 root = arg1; \
166 } \
167 if(arg2) { \
168 int __ret \
169 = asn1p_constraint_insert(root, arg2); \
170 checkmem(__ret == 0); \
171 } \
vlmfa67ddc2004-06-03 03:38:44 +0000172 } while(0)
173
174
vlm931aeed2005-08-12 10:09:10 +0000175#line 67 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +0000176typedef union {
177 asn1p_t *a_grammar;
178 asn1p_module_flags_e a_module_flags;
179 asn1p_module_t *a_module;
180 asn1p_expr_type_e a_type; /* ASN.1 Type */
181 asn1p_expr_t *a_expr; /* Constructed collection */
182 asn1p_constraint_t *a_constr; /* Constraint */
183 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
184 asn1p_xports_t *a_xports; /* IMports/EXports */
vlm931aeed2005-08-12 10:09:10 +0000185 struct AssignedIdentifier a_aid; /* Assigned Identifier */
vlmfa67ddc2004-06-03 03:38:44 +0000186 asn1p_oid_t *a_oid; /* Object Identifier */
187 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
188 struct asn1p_type_tag_s a_tag; /* A tag */
189 asn1p_ref_t *a_ref; /* Reference to custom type */
190 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
191 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
192 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
193 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
194 struct asn1p_param_s a_parg; /* A parameter argument */
195 asn1p_paramlist_t *a_plist; /* A pargs list */
vlmc94e28f2004-09-15 11:59:51 +0000196 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
vlmfa67ddc2004-06-03 03:38:44 +0000197 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
vlmec6acd42004-09-29 13:18:09 +0000198 asn1c_integer_t a_int;
vlmfa67ddc2004-06-03 03:38:44 +0000199 char *tv_str;
200 struct {
201 char *buf;
202 int len;
203 } tv_opaque;
204 struct {
205 char *name;
206 struct asn1p_type_tag_s tag;
207 } tv_nametag;
vlm6a02a8a2004-09-08 00:28:11 +0000208} YYSTYPE;
209#include <stdio.h>
210
211#ifndef __cplusplus
212#ifndef __STDC__
213#define const
214#endif
vlmfa67ddc2004-06-03 03:38:44 +0000215#endif
216
217
218
vlm931aeed2005-08-12 10:09:10 +0000219#define YYFINAL 426
vlm6a02a8a2004-09-08 00:28:11 +0000220#define YYFLAG -32768
vlm2c8c44d2005-03-24 16:22:35 +0000221#define YYNTBASE 118
vlmfa67ddc2004-06-03 03:38:44 +0000222
vlm931aeed2005-08-12 10:09:10 +0000223#define YYTRANSLATE(x) ((unsigned)(x) <= 356 ? yytranslate[x] : 221)
vlmfa67ddc2004-06-03 03:38:44 +0000224
vlm6a02a8a2004-09-08 00:28:11 +0000225static const char yytranslate[] = { 0,
226 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
227 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
228 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2c8c44d2005-03-24 16:22:35 +0000229 2, 2, 112, 2, 2, 2, 2, 2, 2, 107,
230 108, 2, 2, 110, 2, 113, 2, 2, 2, 2,
231 2, 2, 2, 2, 2, 2, 2, 111, 109, 114,
232 2, 2, 2, 115, 2, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000233 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
234 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2c8c44d2005-03-24 16:22:35 +0000235 116, 2, 117, 99, 2, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000236 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
237 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2c8c44d2005-03-24 16:22:35 +0000238 2, 2, 105, 101, 106, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000239 2, 2, 2, 2, 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 2, 2, 2, 2, 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, 2, 2, 2, 2, 2, 2, 2, 2,
246 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
247 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
248 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
249 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
250 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
251 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
252 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
253 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
254 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
255 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
256 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
257 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
258 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
259 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
260 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
vlm2c8c44d2005-03-24 16:22:35 +0000261 97, 98, 100, 102, 103, 104
vlm6a02a8a2004-09-08 00:28:11 +0000262};
vlmfa67ddc2004-06-03 03:38:44 +0000263
vlm6a02a8a2004-09-08 00:28:11 +0000264#if YYDEBUG != 0
265static const short yyprhs[] = { 0,
266 0, 2, 4, 7, 16, 17, 19, 23, 26, 28,
267 31, 33, 38, 40, 41, 43, 45, 48, 51, 54,
268 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
vlm931aeed2005-08-12 10:09:10 +0000269 79, 81, 82, 86, 88, 92, 95, 97, 100, 101,
270 103, 108, 110, 114, 116, 120, 122, 126, 130, 133,
271 135, 139, 141, 145, 147, 148, 155, 157, 159, 164,
272 168, 172, 179, 181, 185, 187, 191, 195, 199, 201,
273 205, 207, 209, 210, 212, 214, 218, 222, 226, 228,
274 230, 234, 237, 239, 245, 246, 248, 250, 254, 257,
275 262, 267, 268, 270, 271, 278, 280, 283, 285, 287,
276 289, 293, 297, 301, 303, 308, 313, 318, 325, 332,
277 334, 339, 344, 346, 350, 352, 356, 360, 364, 366,
278 370, 372, 376, 378, 380, 382, 384, 389, 393, 394,
279 398, 400, 402, 404, 406, 408, 410, 412, 414, 416,
280 420, 422, 424, 426, 428, 431, 433, 435, 437, 439,
281 442, 445, 447, 449, 452, 455, 457, 459, 461, 463,
282 465, 468, 470, 473, 475, 477, 479, 481, 483, 485,
283 487, 489, 491, 493, 495, 497, 499, 501, 503, 505,
284 507, 509, 511, 512, 514, 516, 521, 525, 530, 532,
285 536, 542, 544, 548, 552, 556, 560, 565, 569, 571,
286 573, 577, 581, 585, 589, 591, 593, 594, 600, 602,
287 605, 608, 612, 614, 616, 618, 620, 622, 624, 626,
288 628, 632, 638, 640, 644, 646, 650, 651, 653, 655,
289 657, 659, 661, 663, 667, 672, 674, 678, 681, 685,
290 687, 691, 692, 694, 696, 699, 702, 706, 708, 712,
291 714, 719, 724, 726, 728, 730, 732, 733, 735, 738,
292 743, 744, 746, 748, 750, 751, 753, 755, 757, 759,
293 761, 762, 764
vlm6a02a8a2004-09-08 00:28:11 +0000294};
vlmfa67ddc2004-06-03 03:38:44 +0000295
vlm2c8c44d2005-03-24 16:22:35 +0000296static const short yyrhs[] = { 119,
vlm931aeed2005-08-12 10:09:10 +0000297 0, 120, 0, 119, 120, 0, 217, 121, 36, 125,
vlm2c8c44d2005-03-24 16:22:35 +0000298 3, 23, 128, 41, 0, 0, 122, 0, 105, 123,
299 106, 0, 105, 106, 0, 124, 0, 123, 124, 0,
vlm931aeed2005-08-12 10:09:10 +0000300 220, 0, 220, 107, 9, 108, 0, 9, 0, 0,
vlm2c8c44d2005-03-24 16:22:35 +0000301 126, 0, 127, 0, 126, 127, 0, 43, 86, 0,
302 54, 86, 0, 22, 86, 0, 45, 55, 0, 14,
303 59, 0, 0, 129, 0, 130, 0, 129, 130, 0,
vlm931aeed2005-08-12 10:09:10 +0000304 132, 0, 138, 0, 144, 0, 171, 0, 141, 0,
305 0, 40, 14, 131, 0, 180, 0, 56, 133, 109,
306 0, 56, 48, 0, 135, 0, 133, 135, 0, 0,
307 122, 0, 136, 48, 217, 134, 0, 137, 0, 136,
308 110, 137, 0, 217, 0, 217, 105, 106, 0, 220,
309 0, 44, 139, 109, 0, 44, 19, 109, 0, 44,
310 109, 0, 140, 0, 139, 110, 140, 0, 217, 0,
311 217, 105, 106, 0, 220, 0, 0, 217, 143, 3,
312 105, 142, 176, 0, 166, 0, 177, 0, 217, 3,
313 212, 89, 0, 217, 3, 164, 0, 217, 3, 154,
314 0, 217, 105, 145, 106, 3, 164, 0, 146, 0,
315 145, 110, 146, 0, 217, 0, 217, 111, 220, 0,
316 217, 111, 217, 0, 177, 111, 220, 0, 148, 0,
317 147, 110, 148, 0, 164, 0, 220, 0, 0, 150,
318 0, 151, 0, 150, 110, 151, 0, 220, 164, 206,
319 0, 32, 70, 164, 0, 163, 0, 153, 0, 152,
320 110, 153, 0, 220, 164, 0, 163, 0, 30, 105,
321 156, 106, 158, 0, 0, 90, 0, 157, 0, 156,
322 110, 157, 0, 169, 206, 0, 169, 164, 155, 206,
323 0, 169, 169, 155, 206, 0, 0, 159, 0, 0,
324 97, 84, 105, 160, 161, 106, 0, 162, 0, 161,
325 162, 0, 4, 0, 169, 0, 104, 0, 104, 112,
326 174, 0, 104, 112, 211, 0, 212, 165, 184, 0,
327 179, 0, 29, 105, 152, 106, 0, 80, 105, 149,
328 106, 0, 81, 105, 149, 106, 0, 80, 184, 70,
329 219, 212, 165, 0, 81, 184, 70, 219, 212, 165,
330 0, 20, 0, 20, 37, 27, 220, 0, 217, 105,
331 147, 106, 0, 166, 0, 58, 70, 166, 0, 13,
332 0, 13, 113, 217, 0, 218, 113, 217, 0, 13,
333 113, 220, 0, 218, 0, 218, 113, 167, 0, 168,
334 0, 167, 113, 168, 0, 170, 0, 170, 0, 15,
335 0, 16, 0, 220, 143, 3, 172, 0, 220, 111,
336 172, 0, 0, 105, 173, 176, 0, 65, 0, 47,
337 0, 88, 0, 5, 0, 7, 0, 175, 0, 211,
338 0, 174, 0, 220, 0, 217, 113, 220, 0, 6,
339 0, 10, 0, 11, 0, 4, 0, 176, 4, 0,
340 26, 0, 65, 0, 78, 0, 178, 0, 69, 83,
341 0, 67, 53, 0, 79, 0, 46, 0, 38, 73,
342 0, 28, 83, 0, 93, 0, 49, 0, 180, 0,
343 60, 0, 42, 0, 24, 83, 0, 177, 0, 178,
344 208, 0, 25, 0, 50, 0, 51, 0, 52, 0,
345 61, 0, 66, 0, 76, 0, 85, 0, 87, 0,
346 92, 0, 94, 0, 95, 0, 96, 0, 68, 0,
347 101, 0, 102, 0, 99, 0, 100, 0, 98, 0,
348 0, 185, 0, 186, 0, 82, 107, 187, 108, 0,
349 107, 187, 108, 0, 186, 107, 187, 108, 0, 188,
350 0, 188, 110, 104, 0, 188, 110, 104, 110, 188,
351 0, 189, 0, 19, 98, 189, 0, 188, 181, 189,
352 0, 188, 182, 189, 0, 189, 183, 189, 0, 192,
353 107, 187, 108, 0, 107, 187, 108, 0, 193, 0,
354 194, 0, 193, 191, 193, 0, 63, 191, 193, 0,
355 193, 191, 62, 0, 63, 191, 62, 0, 200, 0,
356 195, 0, 0, 33, 27, 105, 190, 176, 0, 103,
357 0, 103, 114, 0, 114, 103, 0, 114, 103, 114,
358 0, 82, 0, 48, 0, 47, 0, 88, 0, 211,
359 0, 175, 0, 220, 0, 217, 0, 97, 31, 186,
360 0, 97, 32, 105, 196, 106, 0, 197, 0, 196,
361 110, 197, 0, 104, 0, 220, 184, 198, 0, 0,
362 199, 0, 75, 0, 17, 0, 71, 0, 201, 0,
363 202, 0, 105, 217, 106, 0, 201, 105, 203, 106,
364 0, 204, 0, 203, 110, 204, 0, 115, 205, 0,
365 115, 113, 205, 0, 220, 0, 205, 113, 220, 0,
366 0, 207, 0, 71, 0, 35, 172, 0, 105, 106,
367 0, 105, 209, 106, 0, 210, 0, 209, 110, 210,
368 0, 220, 0, 220, 107, 211, 108, 0, 220, 107,
369 174, 108, 0, 211, 0, 104, 0, 9, 0, 12,
370 0, 0, 213, 0, 214, 216, 0, 116, 215, 9,
371 117, 0, 0, 91, 0, 21, 0, 77, 0, 0,
372 54, 0, 43, 0, 13, 0, 14, 0, 14, 0,
373 0, 220, 0, 8, 0
vlm6a02a8a2004-09-08 00:28:11 +0000374};
vlmfa67ddc2004-06-03 03:38:44 +0000375
376#endif
377
vlm6a02a8a2004-09-08 00:28:11 +0000378#if YYDEBUG != 0
379static const short yyrline[] = { 0,
vlm931aeed2005-08-12 10:09:10 +0000380 313, 319, 325, 341, 366, 368, 371, 375, 380, 387,
381 395, 400, 404, 413, 415, 423, 427, 435, 439, 442,
382 445, 449, 469, 471, 479, 483, 515, 519, 528, 535,
383 548, 555, 557, 569, 582, 593, 598, 604, 610, 612,
384 615, 626, 632, 638, 645, 651, 659, 663, 666, 673,
385 679, 685, 692, 698, 707, 709, 718, 726, 740, 752,
386 758, 774, 783, 793, 803, 808, 815, 822, 832, 838,
387 844, 848, 871, 873, 875, 881, 887, 894, 901, 906,
388 912, 918, 924, 929, 939, 941, 944, 952, 958, 967,
389 973, 990, 992, 997, 1001, 1006, 1011, 1017, 1021, 1032,
390 1041, 1050, 1061, 1083, 1087, 1093, 1099, 1105, 1115, 1125,
391 1131, 1145, 1169, 1176, 1190, 1199, 1209, 1219, 1229, 1237,
392 1258, 1267, 1276, 1277, 1279, 1286, 1298, 1308, 1316, 1316,
393 1321, 1326, 1331, 1336, 1340, 1344, 1347, 1350, 1355, 1367,
394 1384, 1389, 1394, 1427, 1437, 1451, 1453, 1454, 1455, 1456,
395 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1470, 1472,
396 1473, 1476, 1483, 1495, 1497, 1501, 1505, 1506, 1507, 1508,
397 1509, 1513, 1514, 1515, 1516, 1520, 1521, 1528, 1528, 1529,
398 1529, 1530, 1532, 1534, 1539, 1543, 1552, 1556, 1561, 1565,
399 1571, 1581, 1585, 1588, 1591, 1594, 1599, 1608, 1616, 1622,
400 1628, 1635, 1643, 1651, 1660, 1663, 1666, 1667, 1677, 1679,
401 1680, 1681, 1684, 1688, 1693, 1699, 1704, 1707, 1710, 1723,
402 1737, 1741, 1746, 1750, 1755, 1762, 1775, 1777, 1780, 1784,
403 1787, 1792, 1796, 1804, 1819, 1825, 1832, 1845, 1857, 1872,
404 1876, 1893, 1898, 1901, 1906, 1928, 1933, 1938, 1944, 1950,
405 1958, 1966, 1974, 1981, 1991, 1996, 2026, 2028, 2031, 2038,
406 2044, 2046, 2047, 2048, 2051, 2053, 2054, 2057, 2062, 2069,
407 2076, 2078, 2083
vlm6a02a8a2004-09-08 00:28:11 +0000408};
409#endif
410
411
412#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
413
414static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
415"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
vlm2c8c44d2005-03-24 16:22:35 +0000416"TOK_tuple","TOK_quadruple","TOK_number_negative","TOK_typereference","TOK_capitalreference",
417"TOK_typefieldreference","TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX",
418"TOK_ALL","TOK_ANY","TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT",
419"TOK_BMPString","TOK_BOOLEAN","TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS",
420"TOK_COMPONENT","TOK_COMPONENTS","TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT",
421"TOK_DEFINITIONS","TOK_DEFINED","TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL",
422"TOK_END","TOK_ENUMERATED","TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY",
423"TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString",
424"TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED",
425"TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INSTRUCTIONS","TOK_INTEGER",
426"TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL","TOK_NumericString",
427"TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET","TOK_OF","TOK_OPTIONAL","TOK_PATTERN",
428"TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString","TOK_PRIVATE",
429"TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE","TOK_STRING",
430"TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE","TOK_TYPE_IDENTIFIER",
431"TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime","TOK_UTF8String",
432"TOK_VideotexString","TOK_VisibleString","TOK_WITH","TOK_EXCEPT","'^'","TOK_INTERSECTION",
433"'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots","'{'","'}'","'('","')'","';'",
434"','","':'","'!'","'.'","'<'","'@'","'['","']'","ParsedGrammar","ModuleList",
435"ModuleSpecification","optObjectIdentifier","ObjectIdentifier","ObjectIdentifierBody",
436"ObjectIdentifierElement","optModuleSpecificationFlags","ModuleSpecificationFlags",
437"ModuleSpecificationFlag","optModuleSpecificationBody","ModuleSpecificationBody",
vlm931aeed2005-08-12 10:09:10 +0000438"ModuleSpecificationElement","@1","ImportsDefinition","ImportsBundleSet","AssignedIdentifier",
439"ImportsBundle","ImportsList","ImportsElement","ExportsDefinition","ExportsBody",
440"ExportsElement","ValueSetDefinition","@2","DefinedTypeRef","DataTypeReference",
441"ParameterArgumentList","ParameterArgumentName","ActualParameterList","ActualParameter",
442"optComponentTypeLists","ComponentTypeLists","ComponentType","AlternativeTypeLists",
443"AlternativeType","ClassDeclaration","optUnique","ClassFieldList","ClassField",
444"optWithSyntax","WithSyntax","@3","WithSyntaxFormat","WithSyntaxFormatToken",
445"ExtensionAndException","Type","TypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList",
vlm0aa86902004-10-12 23:26:53 +0000446"ComplexTypeReferenceElement","ClassFieldIdentifier","ClassFieldName","ValueDefinition",
vlm7388db02005-03-31 21:48:13 +0000447"Value","@4","DefinedValue","RestrictedCharacterStringValue","Opaque","BasicTypeId",
vlme1e6ed82005-03-24 14:26:38 +0000448"BasicTypeId_UniverationCompatible","BasicType","BasicString","Union","Intersection",
449"Except","optConstraints","Constraints","SetOfConstraints","ElementSetSpecs",
vlm7388db02005-03-31 21:48:13 +0000450"ElementSetSpec","ConstraintSubtypeElement","@5","ConstraintRangeSpec","ConstraintSpec",
vlm7bbdc9f2005-03-28 15:01:27 +0000451"SingleValue","ContainedSubtype","InnerTypeConstraint","WithComponentsList",
452"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
453"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
454"ComponentIdList","optMarker","Marker","UniverationDefinition","UniverationList",
455"UniverationElement","SignedNumber","optTag","Tag","TagTypeValue","TagClass",
456"TagPlicit","TypeRefName","ObjectClassReference","optIdentifier","Identifier", NULL
vlm6a02a8a2004-09-08 00:28:11 +0000457};
458#endif
459
460static const short yyr1[] = { 0,
vlm2c8c44d2005-03-24 16:22:35 +0000461 118, 119, 119, 120, 121, 121, 122, 122, 123, 123,
462 124, 124, 124, 125, 125, 126, 126, 127, 127, 127,
463 127, 127, 128, 128, 129, 129, 130, 130, 130, 130,
vlm931aeed2005-08-12 10:09:10 +0000464 130, 131, 130, 130, 132, 132, 133, 133, 134, 134,
465 135, 136, 136, 137, 137, 137, 138, 138, 138, 139,
466 139, 140, 140, 140, 142, 141, 143, 143, 144, 144,
467 144, 144, 145, 145, 146, 146, 146, 146, 147, 147,
468 148, 148, 149, 149, 150, 150, 151, 151, 151, 152,
469 152, 153, 153, 154, 155, 155, 156, 156, 157, 157,
470 157, 158, 158, 160, 159, 161, 161, 162, 162, 163,
471 163, 163, 164, 165, 165, 165, 165, 165, 165, 165,
472 165, 165, 165, 165, 166, 166, 166, 166, 166, 166,
473 167, 167, 168, 169, 170, 170, 171, 172, 173, 172,
474 172, 172, 172, 172, 172, 172, 172, 172, 174, 174,
475 175, 175, 175, 176, 176, 177, 177, 177, 177, 177,
476 177, 177, 177, 177, 177, 177, 177, 177, 178, 178,
477 178, 179, 179, 180, 180, 180, 180, 180, 180, 180,
478 180, 180, 180, 180, 180, 180, 180, 181, 181, 182,
479 182, 183, 184, 184, 185, 185, 186, 186, 187, 187,
480 187, 188, 188, 188, 188, 188, 189, 189, 189, 189,
481 189, 189, 189, 189, 189, 189, 190, 189, 191, 191,
482 191, 191, 192, 192, 193, 193, 193, 193, 193, 194,
483 195, 195, 196, 196, 197, 197, 198, 198, 199, 199,
484 199, 200, 200, 201, 202, 203, 203, 204, 204, 205,
485 205, 206, 206, 207, 207, 208, 208, 209, 209, 210,
486 210, 210, 210, 210, 211, 211, 212, 212, 213, 214,
487 215, 215, 215, 215, 216, 216, 216, 217, 217, 218,
488 219, 219, 220
vlm6a02a8a2004-09-08 00:28:11 +0000489};
490
491static const short yyr2[] = { 0,
492 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
493 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
494 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
vlm931aeed2005-08-12 10:09:10 +0000495 1, 0, 3, 1, 3, 2, 1, 2, 0, 1,
496 4, 1, 3, 1, 3, 1, 3, 3, 2, 1,
497 3, 1, 3, 1, 0, 6, 1, 1, 4, 3,
498 3, 6, 1, 3, 1, 3, 3, 3, 1, 3,
499 1, 1, 0, 1, 1, 3, 3, 3, 1, 1,
500 3, 2, 1, 5, 0, 1, 1, 3, 2, 4,
501 4, 0, 1, 0, 6, 1, 2, 1, 1, 1,
502 3, 3, 3, 1, 4, 4, 4, 6, 6, 1,
503 4, 4, 1, 3, 1, 3, 3, 3, 1, 3,
504 1, 3, 1, 1, 1, 1, 4, 3, 0, 3,
505 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
506 1, 1, 1, 1, 2, 1, 1, 1, 1, 2,
507 2, 1, 1, 2, 2, 1, 1, 1, 1, 1,
508 2, 1, 2, 1, 1, 1, 1, 1, 1, 1,
vlm6a02a8a2004-09-08 00:28:11 +0000509 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
vlm931aeed2005-08-12 10:09:10 +0000510 1, 1, 0, 1, 1, 4, 3, 4, 1, 3,
511 5, 1, 3, 3, 3, 3, 4, 3, 1, 1,
512 3, 3, 3, 3, 1, 1, 0, 5, 1, 2,
513 2, 3, 1, 1, 1, 1, 1, 1, 1, 1,
514 3, 5, 1, 3, 1, 3, 0, 1, 1, 1,
515 1, 1, 1, 3, 4, 1, 3, 2, 3, 1,
516 3, 0, 1, 1, 2, 2, 3, 1, 3, 1,
517 4, 4, 1, 1, 1, 1, 0, 1, 2, 4,
518 0, 1, 1, 1, 0, 1, 1, 1, 1, 1,
519 0, 1, 1
vlm6a02a8a2004-09-08 00:28:11 +0000520};
521
522static const short yydefact[] = { 0,
vlm931aeed2005-08-12 10:09:10 +0000523 268, 269, 1, 2, 5, 3, 0, 0, 6, 273,
vlm6a02a8a2004-09-08 00:28:11 +0000524 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
525 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
vlm931aeed2005-08-12 10:09:10 +0000526 18, 21, 19, 0, 17, 12, 23, 164, 0, 0,
527 165, 166, 167, 0, 168, 169, 177, 170, 171, 172,
528 173, 174, 175, 176, 0, 24, 25, 27, 28, 31,
529 29, 30, 34, 0, 0, 32, 0, 49, 0, 50,
530 52, 54, 36, 0, 37, 0, 42, 44, 46, 4,
531 26, 257, 115, 270, 0, 146, 0, 0, 160, 153,
532 157, 159, 147, 0, 0, 148, 152, 156, 0, 0,
533 57, 58, 149, 158, 119, 0, 33, 48, 47, 0,
534 0, 35, 38, 0, 0, 0, 0, 261, 61, 60,
535 0, 258, 265, 0, 161, 155, 154, 151, 150, 0,
536 63, 0, 65, 0, 0, 0, 51, 53, 39, 43,
537 45, 0, 263, 264, 262, 0, 115, 270, 110, 0,
538 0, 183, 183, 59, 183, 113, 162, 149, 104, 0,
539 267, 266, 259, 116, 118, 0, 0, 0, 0, 55,
540 125, 126, 120, 121, 123, 117, 134, 141, 135, 255,
541 142, 143, 256, 132, 131, 133, 129, 127, 138, 136,
542 137, 0, 139, 40, 41, 0, 87, 257, 124, 0,
543 0, 0, 0, 0, 73, 0, 0, 184, 185, 73,
544 0, 103, 0, 163, 257, 257, 64, 68, 67, 66,
545 0, 0, 0, 0, 0, 92, 0, 0, 244, 85,
546 85, 89, 243, 0, 260, 0, 100, 0, 80, 83,
547 257, 114, 0, 0, 0, 74, 75, 79, 257, 0,
548 0, 215, 214, 0, 213, 216, 0, 0, 0, 218,
549 0, 189, 192, 0, 199, 200, 206, 205, 232, 233,
550 217, 220, 219, 271, 0, 0, 271, 254, 246, 0,
551 248, 253, 250, 0, 69, 71, 72, 62, 144, 56,
552 122, 130, 140, 128, 0, 84, 93, 88, 245, 86,
553 242, 242, 111, 0, 105, 0, 82, 0, 257, 106,
554 0, 242, 0, 0, 209, 0, 0, 0, 0, 0,
555 0, 187, 180, 181, 178, 179, 0, 0, 0, 182,
556 0, 0, 0, 0, 257, 272, 0, 107, 257, 247,
557 0, 0, 112, 257, 145, 0, 90, 91, 101, 102,
558 139, 81, 186, 78, 76, 77, 193, 207, 210, 211,
559 204, 202, 221, 0, 234, 198, 190, 194, 195, 196,
560 0, 203, 201, 0, 0, 236, 0, 188, 0, 249,
561 0, 0, 70, 94, 0, 212, 225, 0, 223, 183,
562 0, 197, 0, 238, 240, 235, 0, 108, 109, 252,
563 251, 0, 208, 222, 0, 227, 191, 239, 0, 237,
564 98, 0, 96, 99, 224, 230, 231, 229, 226, 228,
565 241, 95, 97, 0, 0, 0
vlm6a02a8a2004-09-08 00:28:11 +0000566};
567
vlm931aeed2005-08-12 10:09:10 +0000568static const short yydefgoto[] = { 424,
vlm6a02a8a2004-09-08 00:28:11 +0000569 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
vlm931aeed2005-08-12 10:09:10 +0000570 56, 57, 107, 58, 74, 195, 75, 76, 77, 59,
571 69, 70, 60, 221, 100, 61, 130, 131, 284, 285,
572 245, 246, 247, 238, 239, 119, 301, 196, 197, 296,
573 297, 402, 412, 413, 248, 286, 155, 156, 173, 174,
574 198, 199, 62, 188, 223, 189, 260, 290, 157, 103,
575 159, 104, 328, 329, 331, 207, 208, 209, 261, 262,
576 263, 385, 317, 264, 265, 266, 267, 388, 389, 419,
577 420, 268, 269, 270, 375, 376, 394, 232, 233, 214,
578 280, 281, 271, 234, 122, 123, 146, 163, 272, 105,
579 335, 273
vlm6a02a8a2004-09-08 00:28:11 +0000580};
581
vlm931aeed2005-08-12 10:09:10 +0000582static const short yypact[] = { 87,
583-32768,-32768, 87,-32768, -69,-32768, 35, 82,-32768,-32768,
584-32768,-32768, 37,-32768, -78, 156,-32768,-32768, 114, -6,
585 89, 108, 147, 125, 151, 156,-32768, 106,-32768,-32768,
586-32768,-32768,-32768, 196,-32768,-32768, 430,-32768, 213, 44,
587-32768,-32768,-32768, 56,-32768,-32768,-32768,-32768,-32768,-32768,
588-32768,-32768,-32768,-32768, 193, 430,-32768,-32768,-32768,-32768,
589-32768,-32768,-32768, 355, 659,-32768, 137,-32768, -86,-32768,
590 159,-32768,-32768, 18,-32768, -23,-32768, 161,-32768,-32768,
591-32768, 32, 168,-32768, 199,-32768, 200, 215,-32768,-32768,
592-32768,-32768,-32768, 232, 207,-32768,-32768,-32768, 734, 293,
593-32768,-32768,-32768,-32768, 187, 298,-32768,-32768,-32768, 212,
594 197,-32768,-32768, 87, 212, 203, 205, 14,-32768,-32768,
595 507,-32768, 112, 212,-32768,-32768,-32768,-32768,-32768, -8,
596-32768, 204, 218, 221, 304, 68,-32768,-32768, -69,-32768,
597-32768, 122,-32768,-32768,-32768, 302, 55, 226, 295, 233,
598 263, 58, 75,-32768, -14,-32768,-32768, 234,-32768, 235,
599-32768,-32768,-32768,-32768,-32768, 338, 734, 334, 212,-32768,
600-32768,-32768, 230,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
vlme1e6ed82005-03-24 14:26:38 +0000601-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
vlm931aeed2005-08-12 10:09:10 +0000602-32768, 236, 237,-32768,-32768, 61,-32768, 26,-32768, 238,
603 323, 7, 241, 244, 40, 239, 284,-32768, 249, 40,
604 289,-32768, 77,-32768, 6, 245,-32768,-32768,-32768,-32768,
605 356, 122, 356, 334, 68, 266, 122, 68,-32768, 274,
606 274,-32768,-32768, 584,-32768, 334, 253, 78,-32768,-32768,
607 245,-32768, 239, 296, 267, 264,-32768,-32768, 245, 277,
608 349,-32768,-32768, -20,-32768,-32768, 231, 87, 239,-32768,
609 269, 206, 280, 275, -20,-32768,-32768,-32768, 279,-32768,
610-32768,-32768,-32768, 334, 239, 282, 334,-32768,-32768, 94,
611-32768,-32768, 278, 99,-32768,-32768,-32768,-32768,-32768, 386,
612-32768, 386,-32768,-32768, 307,-32768,-32768,-32768,-32768,-32768,
613 64, 64,-32768, 228,-32768, 7,-32768, 286, 245,-32768,
614 40, 64, 265, 287, 281, 297, 181, 292, 291, 303,
615 300,-32768,-32768,-32768,-32768,-32768, 299, 265, 265,-32768,
616 265, 239, 283, 310, 245,-32768, 305,-32768, 245,-32768,
617 47, 228,-32768, 6,-32768, 306,-32768,-32768,-32768,-32768,
618-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 312,
619-32768,-32768, 249, 12,-32768,-32768, 308,-32768,-32768,-32768,
620 309,-32768,-32768, 13, 155,-32768, 584,-32768, 584,-32768,
621 311, 319,-32768,-32768, 356,-32768,-32768, 174,-32768, -14,
622 239,-32768, 334, 301,-32768,-32768, 310,-32768,-32768,-32768,
623-32768, 143, 386,-32768, 12, 17, 223, 301, 334,-32768,
624-32768, 24,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
625-32768,-32768,-32768, 410, 412,-32768
vlm6a02a8a2004-09-08 00:28:11 +0000626};
627
628static const short yypgoto[] = {-32768,
vlm931aeed2005-08-12 10:09:10 +0000629-32768, 425,-32768, 290,-32768, 417,-32768,-32768, 406,-32768,
630-32768, 379,-32768,-32768,-32768,-32768, 362,-32768, 322,-32768,
631-32768, 329,-32768,-32768, 376,-32768,-32768, 285,-32768, 101,
632 243,-32768, 135,-32768, 148,-32768, 225,-32768, 240,-32768,
633-32768,-32768,-32768, 45, -193, -77, -203, -53,-32768, 242,
634 -190, -116,-32768, -12,-32768, -277, -76, -216, -48, -120,
635-32768, 34,-32768,-32768,-32768, -151,-32768, 140, -147, 70,
636 -98,-32768, 194,-32768, -295,-32768,-32768,-32768, 57,-32768,
637-32768,-32768,-32768,-32768,-32768, 66, 72, -105,-32768,-32768,
638-32768, 127, -118, -79,-32768,-32768,-32768,-32768, 10,-32768,
639 189, -7
vlm6a02a8a2004-09-08 00:28:11 +0000640};
641
642
vlm931aeed2005-08-12 10:09:10 +0000643#define YYLAST 830
vlm6a02a8a2004-09-08 00:28:11 +0000644
645
646static const short yytable[] = { 15,
vlm931aeed2005-08-12 10:09:10 +0000647 158, 211, 121, 212, 120, 15, 292, 231, 240, 5,
648 101, 101, 5, 10, 10, 102, 102, 191, 175, 10,
649 10, 362, 109, 110, 114, 10, 349, 411, 19, 65,
650 1, 2, 72, 416, 143, 7, 79, 373, 171, 172,
651 171, 172, 10, 11, 10, 11, 64, 10, 65, 71,
652 132, 10, 29, 78, 10, 180, 1, 2, 183, 190,
653 228, 117, 67, 10, 381, 64, 79, 204, 1, 2,
654 63, 244, 177, 178, 179, 10, 180, 181, 182, 183,
655 1, 2, 315, 78, 10, 180, 115, 417, 183, 63,
656 144, 418, 206, 316, 282, 308, 229, 166, 228, 1,
657 2, 167, 72, 73, 145, 175, 191, 79, 133, 191,
658 237, 321, 240, 158, 184, 387, 165, 16, 132, 71,
659 230, 118, 28, 139, 78, 393, 112, 337, 193, 422,
660 160, -242, 185, 164, 229, -242, 171, 172, 288, 204,
661 12, 118, 17, 237, 176, 192, 411, 118, 190, 242,
662 278, 190, 68, 34, 161, 186, 204, 171, 172, -268,
663 218, 220, 205, 307, 206, 162, 226, 124, 403, 20,
664 227, 312, 187, 398, 30, 399, 133, 21, 219, 210,
665 278, 206, 279, 305, 371, 350, 178, 306, 10, 180,
666 181, 182, 183, 31, 241, 347, 348, 249, 22, 340,
667 23, 32, 249, 341, 343, 283, 356, 287, 344, 24,
668 33, 414, 294, 36, 357, 299, 293, 193, 37, 10,
669 193, 414, 282, 382, 1, 2, 66, 252, 303, 368,
670 369, 354, 370, 80, 192, 10, 180, 192, 406, 183,
671 1, 2, 361, 160, 178, 108, 10, 180, 181, 182,
672 183, 1, 2, 83, 84, 377, 158, 250, 158, 379,
673 396, 318, 319, 111, 397, 116, 336, 320, 256, 336,
674 178, 251, 10, 180, 181, 182, 183, 1, 2, 404,
675 124, 125, 126, 405, 128, 252, 253, 127, 178, 129,
676 10, 180, 181, 182, 183, 134, 351, 251, 241, 135,
677 136, 254, 138, 249, 323, 324, 325, 326, 141, 142,
678 200, 252, 253, 192, 168, 327, 1, 2, 171, 172,
679 255, 323, 324, 325, 326, 170, 256, 254, 169, 252,
680 -269, 201, 203, 283, 351, 257, 287, 202, 213, 215,
681 216, 10, 222, 258, 372, 259, 255, 225, 224, 236,
682 243, 192, 256, 274, 235, 275, 390, 82, 277, 289,
683 118, 257, 295, 300, 304, 309, 395, 83, 84, 258,
684 256, 259, 310, 311, 313, 314, 322, 330, 85, 38,
685 86, 332, 87, 334, 342, 395, 160, 338, 160, 345,
686 346, 358, 88, 353, 359, 364, 89, 390, 206, 360,
687 90, 421, 367, 91, 41, 42, 43, 366, 365, 425,
688 384, 426, 378, 409, 92, 45, 392, 391, 400, 93,
689 46, 94, 47, 95, 374, 386, 401, 6, 194, 18,
690 48, 35, 96, 97, 81, 113, 140, 10, 137, 49,
691 106, 50, 1, 2, 383, 355, 51, 98, 52, 53,
692 54, 217, 276, 352, 38, 302, 423, 363, 333, 99,
693 407, 415, 410, 291, 408, 339, 298, 380, 0, 39,
694 0, 0, 0, 40, 0, 0, 0, 0, 0, 41,
695 42, 43, 0, 0, 0, 44, 0, 0, 0, 0,
696 45, 0, 0, 0, 0, 46, 0, 47, 0, 0,
697 0, 0, 0, 0, 0, 48, 0, 0, 0, 0,
698 0, 0, 0, 0, 49, 0, 50, 0, 0, 147,
699 148, 51, 0, 52, 53, 54, 149, 0, 0, 0,
700 85, 38, 86, 0, 87, 150, 0, 0, 0, 0,
701 0, 0, 0, 0, 88, 0, 0, 0, 89, 0,
702 0, 0, 90, 0, 0, 91, 41, 42, 43, 0,
703 0, 0, 0, 0, 151, 0, 92, 45, 0, 0,
704 0, 93, 46, 94, 47, 95, 0, 0, 0, 0,
705 0, 0, 48, 0, 96, 97, 152, 153, 0, 0,
706 0, 49, 0, 50, 0, 154, 147, 148, 51, 98,
707 52, 53, 54, 149, 0, 0, 0, 85, 38, 86,
708 0, 87, 150, 0, 0, 0, 0, 0, 0, 0,
709 0, 88, 0, 0, 0, 89, 0, 0, 0, 90,
710 0, 0, 91, 41, 42, 43, 0, 0, 0, 0,
711 0, 151, 0, 92, 45, 0, 0, 0, 93, 46,
712 94, 47, 95, 0, 0, 0, 0, 0, 0, 48,
713 0, 96, 97, 152, 153, 0, 0, 0, 49, 0,
714 50, 83, 84, 0, 0, 51, 98, 52, 53, 54,
715 0, 0, 85, 38, 86, 0, 87, 0, 0, 0,
716 0, 0, 0, 0, 0, 0, 88, 0, 0, 0,
717 89, 0, 0, 0, 90, 0, 0, 91, 41, 42,
718 43, 0, 0, 0, 0, 0, 0, 0, 92, 45,
719 0, 0, 0, 93, 46, 94, 47, 95, 0, 0,
720 0, 0, 0, 0, 48, 0, 96, 97, 0, 0,
721 0, 0, 0, 49, 0, 50, 1, 2, 0, 0,
722 51, 98, 52, 53, 54, 0, 0, 85, 38, 86,
723 0, 87, 0, 0, 0, 0, 0, 0, 0, 0,
724 0, 88, 0, 0, 0, 89, 0, 0, 0, 90,
725 0, 0, 91, 41, 42, 43, 0, 0, 0, 0,
726 0, 0, 0, 92, 45, 0, 0, 0, 93, 46,
727 94, 47, 95, 0, 0, 0, 0, 0, 0, 48,
728 0, 96, 97, 0, 0, 0, 0, 0, 49, 0,
729 50, 0, 0, 0, 0, 51, 98, 52, 53, 54
vlm6a02a8a2004-09-08 00:28:11 +0000730};
731
732static const short yycheck[] = { 7,
vlm931aeed2005-08-12 10:09:10 +0000733 121, 153, 82, 155, 82, 13, 223, 198, 202, 0,
734 64, 65, 3, 8, 8, 64, 65, 136, 135, 8,
735 8, 317, 109, 110, 48, 8, 304, 4, 107, 37,
736 13, 14, 40, 17, 21, 105, 44, 333, 15, 16,
737 15, 16, 8, 9, 8, 9, 37, 8, 56, 40,
738 99, 8, 59, 44, 8, 9, 13, 14, 12, 136,
739 35, 30, 19, 8, 342, 56, 74, 82, 13, 14,
740 37, 32, 5, 6, 7, 8, 9, 10, 11, 12,
741 13, 14, 103, 74, 8, 9, 110, 71, 12, 56,
742 77, 75, 107, 114, 213, 243, 71, 106, 35, 13,
743 14, 110, 110, 48, 91, 222, 225, 115, 99, 228,
744 104, 259, 306, 234, 47, 104, 124, 36, 167, 110,
745 198, 116, 9, 114, 115, 113, 109, 275, 136, 106,
746 121, 106, 65, 124, 71, 110, 15, 16, 216, 82,
747 106, 116, 106, 104, 135, 136, 4, 116, 225, 203,
748 104, 228, 109, 3, 43, 88, 82, 15, 16, 105,
749 168, 169, 105, 241, 107, 54, 106, 113, 385, 14,
750 110, 249, 105, 377, 86, 379, 167, 22, 169, 105,
751 104, 107, 106, 106, 332, 304, 6, 110, 8, 9,
752 10, 11, 12, 86, 202, 301, 302, 205, 43, 106,
753 45, 55, 210, 110, 106, 213, 312, 215, 110, 54,
754 86, 402, 225, 108, 313, 228, 224, 225, 23, 8,
755 228, 412, 341, 342, 13, 14, 14, 47, 236, 328,
756 329, 309, 331, 41, 225, 8, 9, 228, 390, 12,
757 13, 14, 62, 234, 6, 109, 8, 9, 10, 11,
758 12, 13, 14, 13, 14, 335, 377, 19, 379, 339,
759 106, 31, 32, 105, 110, 105, 274, 258, 88, 277,
760 6, 33, 8, 9, 10, 11, 12, 13, 14, 106,
761 113, 83, 83, 110, 53, 47, 48, 73, 6, 83,
762 8, 9, 10, 11, 12, 3, 304, 33, 306, 113,
763 3, 63, 106, 311, 99, 100, 101, 102, 106, 105,
764 9, 47, 48, 304, 111, 110, 13, 14, 15, 16,
765 82, 99, 100, 101, 102, 105, 88, 63, 111, 47,
766 105, 37, 70, 341, 342, 97, 344, 105, 105, 105,
767 3, 8, 113, 105, 62, 107, 82, 111, 113, 27,
768 107, 342, 88, 70, 117, 107, 364, 3, 70, 4,
769 116, 97, 97, 90, 112, 70, 374, 13, 14, 105,
770 88, 107, 106, 110, 98, 27, 108, 98, 24, 25,
771 26, 107, 28, 105, 107, 393, 377, 106, 379, 4,
772 84, 105, 38, 108, 114, 105, 42, 405, 107, 103,
773 46, 409, 104, 49, 50, 51, 52, 108, 106, 0,
774 105, 0, 108, 113, 60, 61, 108, 110, 108, 65,
775 66, 67, 68, 69, 115, 114, 108, 3, 139, 13,
776 76, 26, 78, 79, 56, 74, 115, 8, 110, 85,
777 65, 87, 13, 14, 344, 311, 92, 93, 94, 95,
778 96, 167, 210, 306, 25, 231, 412, 318, 265, 105,
779 391, 405, 397, 222, 393, 277, 227, 341, -1, 40,
780 -1, -1, -1, 44, -1, -1, -1, -1, -1, 50,
781 51, 52, -1, -1, -1, 56, -1, -1, -1, -1,
782 61, -1, -1, -1, -1, 66, -1, 68, -1, -1,
783 -1, -1, -1, -1, -1, 76, -1, -1, -1, -1,
784 -1, -1, -1, -1, 85, -1, 87, -1, -1, 13,
785 14, 92, -1, 94, 95, 96, 20, -1, -1, -1,
786 24, 25, 26, -1, 28, 29, -1, -1, -1, -1,
787 -1, -1, -1, -1, 38, -1, -1, -1, 42, -1,
788 -1, -1, 46, -1, -1, 49, 50, 51, 52, -1,
789 -1, -1, -1, -1, 58, -1, 60, 61, -1, -1,
790 -1, 65, 66, 67, 68, 69, -1, -1, -1, -1,
791 -1, -1, 76, -1, 78, 79, 80, 81, -1, -1,
792 -1, 85, -1, 87, -1, 89, 13, 14, 92, 93,
793 94, 95, 96, 20, -1, -1, -1, 24, 25, 26,
794 -1, 28, 29, -1, -1, -1, -1, -1, -1, -1,
795 -1, 38, -1, -1, -1, 42, -1, -1, -1, 46,
796 -1, -1, 49, 50, 51, 52, -1, -1, -1, -1,
797 -1, 58, -1, 60, 61, -1, -1, -1, 65, 66,
798 67, 68, 69, -1, -1, -1, -1, -1, -1, 76,
799 -1, 78, 79, 80, 81, -1, -1, -1, 85, -1,
800 87, 13, 14, -1, -1, 92, 93, 94, 95, 96,
801 -1, -1, 24, 25, 26, -1, 28, -1, -1, -1,
802 -1, -1, -1, -1, -1, -1, 38, -1, -1, -1,
803 42, -1, -1, -1, 46, -1, -1, 49, 50, 51,
804 52, -1, -1, -1, -1, -1, -1, -1, 60, 61,
805 -1, -1, -1, 65, 66, 67, 68, 69, -1, -1,
806 -1, -1, -1, -1, 76, -1, 78, 79, -1, -1,
807 -1, -1, -1, 85, -1, 87, 13, 14, -1, -1,
808 92, 93, 94, 95, 96, -1, -1, 24, 25, 26,
809 -1, 28, -1, -1, -1, -1, -1, -1, -1, -1,
810 -1, 38, -1, -1, -1, 42, -1, -1, -1, 46,
811 -1, -1, 49, 50, 51, 52, -1, -1, -1, -1,
812 -1, -1, -1, 60, 61, -1, -1, -1, 65, 66,
813 67, 68, 69, -1, -1, -1, -1, -1, -1, 76,
814 -1, 78, 79, -1, -1, -1, -1, -1, 85, -1,
815 87, -1, -1, -1, -1, 92, 93, 94, 95, 96
vlm6a02a8a2004-09-08 00:28:11 +0000816};
817/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
818#line 3 "/usr/share/bison.simple"
819/* This file comes from bison-1.28. */
820
821/* Skeleton output parser for bison,
822 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
823
824 This program is free software; you can redistribute it and/or modify
825 it under the terms of the GNU General Public License as published by
826 the Free Software Foundation; either version 2, or (at your option)
827 any later version.
828
829 This program is distributed in the hope that it will be useful,
830 but WITHOUT ANY WARRANTY; without even the implied warranty of
831 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
832 GNU General Public License for more details.
833
834 You should have received a copy of the GNU General Public License
835 along with this program; if not, write to the Free Software
836 Foundation, Inc., 59 Temple Place - Suite 330,
837 Boston, MA 02111-1307, USA. */
838
839/* As a special exception, when this file is copied by Bison into a
840 Bison output file, you may use that output file without restriction.
841 This special exception was added by the Free Software Foundation
842 in version 1.24 of Bison. */
843
844/* This is the parser code that is written into each bison parser
845 when the %semantic_parser declaration is not specified in the grammar.
846 It was written by Richard Stallman by simplifying the hairy parser
847 used when %semantic_parser is specified. */
848
849#ifndef YYSTACK_USE_ALLOCA
850#ifdef alloca
851#define YYSTACK_USE_ALLOCA
852#else /* alloca not defined */
853#ifdef __GNUC__
854#define YYSTACK_USE_ALLOCA
855#define alloca __builtin_alloca
856#else /* not GNU C. */
857#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
858#define YYSTACK_USE_ALLOCA
859#include <alloca.h>
860#else /* not sparc */
861/* We think this test detects Watcom and Microsoft C. */
862/* This used to test MSDOS, but that is a bad idea
863 since that symbol is in the user namespace. */
864#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
865#if 0 /* No need for malloc.h, which pollutes the namespace;
866 instead, just don't use alloca. */
867#include <malloc.h>
868#endif
869#else /* not MSDOS, or __TURBOC__ */
870#if defined(_AIX)
871/* I don't know what this was needed for, but it pollutes the namespace.
872 So I turned it off. rms, 2 May 1997. */
873/* #include <malloc.h> */
874 #pragma alloca
875#define YYSTACK_USE_ALLOCA
876#else /* not MSDOS, or __TURBOC__, or _AIX */
877#if 0
878#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
879 and on HPUX 10. Eventually we can turn this on. */
880#define YYSTACK_USE_ALLOCA
881#define alloca __builtin_alloca
882#endif /* __hpux */
883#endif
884#endif /* not _AIX */
885#endif /* not MSDOS, or __TURBOC__ */
886#endif /* not sparc */
887#endif /* not GNU C */
888#endif /* alloca not defined */
889#endif /* YYSTACK_USE_ALLOCA not defined */
890
891#ifdef YYSTACK_USE_ALLOCA
892#define YYSTACK_ALLOC alloca
vlmfa67ddc2004-06-03 03:38:44 +0000893#else
vlm6a02a8a2004-09-08 00:28:11 +0000894#define YYSTACK_ALLOC malloc
vlmfa67ddc2004-06-03 03:38:44 +0000895#endif
896
vlm6a02a8a2004-09-08 00:28:11 +0000897/* Note: there must be only one dollar sign in this file.
898 It is replaced by the list of actions, each action
899 as one case of the switch. */
vlmfa67ddc2004-06-03 03:38:44 +0000900
901#define yyerrok (yyerrstatus = 0)
902#define yyclearin (yychar = YYEMPTY)
903#define YYEMPTY -2
904#define YYEOF 0
905#define YYACCEPT goto yyacceptlab
vlm6a02a8a2004-09-08 00:28:11 +0000906#define YYABORT goto yyabortlab
vlmfa67ddc2004-06-03 03:38:44 +0000907#define YYERROR goto yyerrlab1
vlm6a02a8a2004-09-08 00:28:11 +0000908/* Like YYERROR except do call yyerror.
909 This remains here temporarily to ease the
910 transition to the new meaning of YYERROR, for GCC.
vlmfa67ddc2004-06-03 03:38:44 +0000911 Once GCC version 2 has supplanted version 1, this can go. */
912#define YYFAIL goto yyerrlab
913#define YYRECOVERING() (!!yyerrstatus)
vlm6a02a8a2004-09-08 00:28:11 +0000914#define YYBACKUP(token, value) \
vlmfa67ddc2004-06-03 03:38:44 +0000915do \
916 if (yychar == YYEMPTY && yylen == 1) \
vlm6a02a8a2004-09-08 00:28:11 +0000917 { yychar = (token), yylval = (value); \
vlmfa67ddc2004-06-03 03:38:44 +0000918 yychar1 = YYTRANSLATE (yychar); \
919 YYPOPSTACK; \
920 goto yybackup; \
921 } \
922 else \
vlm6a02a8a2004-09-08 00:28:11 +0000923 { yyerror ("syntax error: cannot back up"); YYERROR; } \
vlmfa67ddc2004-06-03 03:38:44 +0000924while (0)
925
926#define YYTERROR 1
927#define YYERRCODE 256
928
vlm6a02a8a2004-09-08 00:28:11 +0000929#ifndef YYPURE
930#define YYLEX yylex()
vlmfa67ddc2004-06-03 03:38:44 +0000931#endif
932
vlm6a02a8a2004-09-08 00:28:11 +0000933#ifdef YYPURE
934#ifdef YYLSP_NEEDED
935#ifdef YYLEX_PARAM
936#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
937#else
938#define YYLEX yylex(&yylval, &yylloc)
939#endif
940#else /* not YYLSP_NEEDED */
941#ifdef YYLEX_PARAM
942#define YYLEX yylex(&yylval, YYLEX_PARAM)
943#else
944#define YYLEX yylex(&yylval)
945#endif
946#endif /* not YYLSP_NEEDED */
947#endif
vlmfa67ddc2004-06-03 03:38:44 +0000948
vlm6a02a8a2004-09-08 00:28:11 +0000949/* If nonreentrant, generate the variables here */
vlmfa67ddc2004-06-03 03:38:44 +0000950
vlm6a02a8a2004-09-08 00:28:11 +0000951#ifndef YYPURE
vlmfa67ddc2004-06-03 03:38:44 +0000952
vlm6a02a8a2004-09-08 00:28:11 +0000953int yychar; /* the lookahead symbol */
954YYSTYPE yylval; /* the semantic value of the */
955 /* lookahead symbol */
vlmfa67ddc2004-06-03 03:38:44 +0000956
vlm6a02a8a2004-09-08 00:28:11 +0000957#ifdef YYLSP_NEEDED
958YYLTYPE yylloc; /* location data for the lookahead */
959 /* symbol */
960#endif
vlmfa67ddc2004-06-03 03:38:44 +0000961
vlm6a02a8a2004-09-08 00:28:11 +0000962int yynerrs; /* number of parse errors so far */
963#endif /* not YYPURE */
964
965#if YYDEBUG != 0
966int yydebug; /* nonzero means print parse trace */
967/* Since this is uninitialized, it does not stop multiple parsers
968 from coexisting. */
969#endif
970
971/* YYINITDEPTH indicates the initial size of the parser's stacks */
972
vlmfa67ddc2004-06-03 03:38:44 +0000973#ifndef YYINITDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000974#define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +0000975#endif
976
vlm6a02a8a2004-09-08 00:28:11 +0000977/* YYMAXDEPTH is the maximum size the stacks can grow to
978 (effective only if the built-in stack extension method is used). */
vlmfa67ddc2004-06-03 03:38:44 +0000979
980#if YYMAXDEPTH == 0
vlm6a02a8a2004-09-08 00:28:11 +0000981#undef YYMAXDEPTH
vlmfa67ddc2004-06-03 03:38:44 +0000982#endif
983
984#ifndef YYMAXDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000985#define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +0000986#endif
987
vlm6a02a8a2004-09-08 00:28:11 +0000988/* Define __yy_memcpy. Note that the size argument
989 should be passed with type unsigned int, because that is what the non-GCC
990 definitions require. With GCC, __builtin_memcpy takes an arg
991 of type size_t, but it can handle unsigned int. */
vlmfa67ddc2004-06-03 03:38:44 +0000992
vlm6a02a8a2004-09-08 00:28:11 +0000993#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
994#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
995#else /* not GNU C or C++ */
996#ifndef __cplusplus
vlmfa67ddc2004-06-03 03:38:44 +0000997
vlm6a02a8a2004-09-08 00:28:11 +0000998/* This is the most reliable way to avoid incompatibilities
999 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +00001000static void
vlm6a02a8a2004-09-08 00:28:11 +00001001__yy_memcpy (to, from, count)
1002 char *to;
1003 char *from;
1004 unsigned int count;
vlm80103492004-09-07 10:39:09 +00001005{
vlm6a02a8a2004-09-08 00:28:11 +00001006 register char *f = from;
1007 register char *t = to;
1008 register int i = count;
vlm80103492004-09-07 10:39:09 +00001009
vlm6a02a8a2004-09-08 00:28:11 +00001010 while (i-- > 0)
1011 *t++ = *f++;
vlm80103492004-09-07 10:39:09 +00001012}
vlm80103492004-09-07 10:39:09 +00001013
vlm6a02a8a2004-09-08 00:28:11 +00001014#else /* __cplusplus */
vlm80103492004-09-07 10:39:09 +00001015
vlm6a02a8a2004-09-08 00:28:11 +00001016/* This is the most reliable way to avoid incompatibilities
1017 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +00001018static void
vlm6a02a8a2004-09-08 00:28:11 +00001019__yy_memcpy (char *to, char *from, unsigned int count)
vlm80103492004-09-07 10:39:09 +00001020{
vlm6a02a8a2004-09-08 00:28:11 +00001021 register char *t = to;
1022 register char *f = from;
1023 register int i = count;
vlm80103492004-09-07 10:39:09 +00001024
vlm6a02a8a2004-09-08 00:28:11 +00001025 while (i-- > 0)
1026 *t++ = *f++;
vlm044f7442004-09-04 04:49:21 +00001027}
vlm044f7442004-09-04 04:49:21 +00001028
vlm6a02a8a2004-09-08 00:28:11 +00001029#endif
1030#endif
vlmfa67ddc2004-06-03 03:38:44 +00001031
vlm6a02a8a2004-09-08 00:28:11 +00001032#line 217 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00001033
1034/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1035 into yyparse. The argument should have type void *.
1036 It should actually point to an object.
1037 Grammar actions can access the variable by casting it
1038 to the proper pointer type. */
1039
1040#ifdef YYPARSE_PARAM
vlm6a02a8a2004-09-08 00:28:11 +00001041#ifdef __cplusplus
1042#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1043#define YYPARSE_PARAM_DECL
1044#else /* not __cplusplus */
1045#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1046#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1047#endif /* not __cplusplus */
1048#else /* not YYPARSE_PARAM */
1049#define YYPARSE_PARAM_ARG
1050#define YYPARSE_PARAM_DECL
1051#endif /* not YYPARSE_PARAM */
vlmfa67ddc2004-06-03 03:38:44 +00001052
1053/* Prevent warning if -Wstrict-prototypes. */
1054#ifdef __GNUC__
vlm6a02a8a2004-09-08 00:28:11 +00001055#ifdef YYPARSE_PARAM
vlmfa67ddc2004-06-03 03:38:44 +00001056int yyparse (void *);
vlm6a02a8a2004-09-08 00:28:11 +00001057#else
vlmfa67ddc2004-06-03 03:38:44 +00001058int yyparse (void);
vlm6a02a8a2004-09-08 00:28:11 +00001059#endif
vlm39e5ed72004-09-05 10:40:41 +00001060#endif
vlm80103492004-09-07 10:39:09 +00001061
vlmfa67ddc2004-06-03 03:38:44 +00001062int
vlm6a02a8a2004-09-08 00:28:11 +00001063yyparse(YYPARSE_PARAM_ARG)
vlmfa67ddc2004-06-03 03:38:44 +00001064 YYPARSE_PARAM_DECL
1065{
1066 register int yystate;
1067 register int yyn;
1068 register short *yyssp;
1069 register YYSTYPE *yyvsp;
vlm6a02a8a2004-09-08 00:28:11 +00001070 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1071 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
vlmfa67ddc2004-06-03 03:38:44 +00001072
vlm6a02a8a2004-09-08 00:28:11 +00001073 short yyssa[YYINITDEPTH]; /* the state stack */
1074 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
vlmfa67ddc2004-06-03 03:38:44 +00001075
vlm6a02a8a2004-09-08 00:28:11 +00001076 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1077 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
vlmfa67ddc2004-06-03 03:38:44 +00001078
vlm6a02a8a2004-09-08 00:28:11 +00001079#ifdef YYLSP_NEEDED
1080 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1081 YYLTYPE *yyls = yylsa;
1082 YYLTYPE *yylsp;
1083
1084#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1085#else
vlmfa67ddc2004-06-03 03:38:44 +00001086#define YYPOPSTACK (yyvsp--, yyssp--)
vlm6a02a8a2004-09-08 00:28:11 +00001087#endif
vlmfa67ddc2004-06-03 03:38:44 +00001088
vlm6a02a8a2004-09-08 00:28:11 +00001089 int yystacksize = YYINITDEPTH;
1090 int yyfree_stacks = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001091
vlm6a02a8a2004-09-08 00:28:11 +00001092#ifdef YYPURE
1093 int yychar;
1094 YYSTYPE yylval;
1095 int yynerrs;
1096#ifdef YYLSP_NEEDED
1097 YYLTYPE yylloc;
1098#endif
1099#endif
vlmfa67ddc2004-06-03 03:38:44 +00001100
vlm6a02a8a2004-09-08 00:28:11 +00001101 YYSTYPE yyval; /* the variable used to return */
1102 /* semantic values from the action */
1103 /* routines */
vlmfa67ddc2004-06-03 03:38:44 +00001104
1105 int yylen;
1106
vlm6a02a8a2004-09-08 00:28:11 +00001107#if YYDEBUG != 0
1108 if (yydebug)
1109 fprintf(stderr, "Starting parse\n");
1110#endif
vlmfa67ddc2004-06-03 03:38:44 +00001111
1112 yystate = 0;
1113 yyerrstatus = 0;
1114 yynerrs = 0;
1115 yychar = YYEMPTY; /* Cause a token to be read. */
1116
1117 /* Initialize stack pointers.
1118 Waste one element of value and location stack
1119 so that they stay on the same level as the state stack.
1120 The wasted elements are never initialized. */
1121
vlm6a02a8a2004-09-08 00:28:11 +00001122 yyssp = yyss - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001123 yyvsp = yyvs;
vlm6a02a8a2004-09-08 00:28:11 +00001124#ifdef YYLSP_NEEDED
1125 yylsp = yyls;
1126#endif
vlmfa67ddc2004-06-03 03:38:44 +00001127
vlm6a02a8a2004-09-08 00:28:11 +00001128/* Push a new state, which is found in yystate . */
1129/* In all cases, when you get here, the value and location stacks
1130 have just been pushed. so pushing a state here evens the stacks. */
1131yynewstate:
vlmfa67ddc2004-06-03 03:38:44 +00001132
vlm6a02a8a2004-09-08 00:28:11 +00001133 *++yyssp = yystate;
vlmfa67ddc2004-06-03 03:38:44 +00001134
1135 if (yyssp >= yyss + yystacksize - 1)
1136 {
vlm6a02a8a2004-09-08 00:28:11 +00001137 /* Give user a chance to reallocate the stack */
1138 /* Use copies of these so that the &'s don't force the real ones into memory. */
1139 YYSTYPE *yyvs1 = yyvs;
1140 short *yyss1 = yyss;
1141#ifdef YYLSP_NEEDED
1142 YYLTYPE *yyls1 = yyls;
1143#endif
1144
vlmfa67ddc2004-06-03 03:38:44 +00001145 /* Get the current used size of the three stacks, in elements. */
vlm6a02a8a2004-09-08 00:28:11 +00001146 int size = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001147
1148#ifdef yyoverflow
vlm6a02a8a2004-09-08 00:28:11 +00001149 /* Each stack pointer address is followed by the size of
1150 the data in use in that stack, in bytes. */
1151#ifdef YYLSP_NEEDED
1152 /* This used to be a conditional around just the two extra args,
1153 but that might be undefined if yyoverflow is a macro. */
1154 yyoverflow("parser stack overflow",
1155 &yyss1, size * sizeof (*yyssp),
1156 &yyvs1, size * sizeof (*yyvsp),
1157 &yyls1, size * sizeof (*yylsp),
1158 &yystacksize);
1159#else
1160 yyoverflow("parser stack overflow",
1161 &yyss1, size * sizeof (*yyssp),
1162 &yyvs1, size * sizeof (*yyvsp),
1163 &yystacksize);
1164#endif
vlmfa67ddc2004-06-03 03:38:44 +00001165
vlm6a02a8a2004-09-08 00:28:11 +00001166 yyss = yyss1; yyvs = yyvs1;
1167#ifdef YYLSP_NEEDED
1168 yyls = yyls1;
1169#endif
vlmfa67ddc2004-06-03 03:38:44 +00001170#else /* no yyoverflow */
1171 /* Extend the stack our own way. */
1172 if (yystacksize >= YYMAXDEPTH)
vlm6a02a8a2004-09-08 00:28:11 +00001173 {
1174 yyerror("parser stack overflow");
1175 if (yyfree_stacks)
1176 {
1177 free (yyss);
1178 free (yyvs);
1179#ifdef YYLSP_NEEDED
1180 free (yyls);
1181#endif
1182 }
1183 return 2;
1184 }
vlmfa67ddc2004-06-03 03:38:44 +00001185 yystacksize *= 2;
1186 if (yystacksize > YYMAXDEPTH)
1187 yystacksize = YYMAXDEPTH;
vlm6a02a8a2004-09-08 00:28:11 +00001188#ifndef YYSTACK_USE_ALLOCA
1189 yyfree_stacks = 1;
1190#endif
1191 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1192 __yy_memcpy ((char *)yyss, (char *)yyss1,
1193 size * (unsigned int) sizeof (*yyssp));
1194 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1195 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1196 size * (unsigned int) sizeof (*yyvsp));
1197#ifdef YYLSP_NEEDED
1198 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1199 __yy_memcpy ((char *)yyls, (char *)yyls1,
1200 size * (unsigned int) sizeof (*yylsp));
1201#endif
vlmfa67ddc2004-06-03 03:38:44 +00001202#endif /* no yyoverflow */
1203
vlm6a02a8a2004-09-08 00:28:11 +00001204 yyssp = yyss + size - 1;
1205 yyvsp = yyvs + size - 1;
1206#ifdef YYLSP_NEEDED
1207 yylsp = yyls + size - 1;
1208#endif
vlmfa67ddc2004-06-03 03:38:44 +00001209
vlm6a02a8a2004-09-08 00:28:11 +00001210#if YYDEBUG != 0
1211 if (yydebug)
1212 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1213#endif
vlmfa67ddc2004-06-03 03:38:44 +00001214
1215 if (yyssp >= yyss + yystacksize - 1)
1216 YYABORT;
1217 }
1218
vlm6a02a8a2004-09-08 00:28:11 +00001219#if YYDEBUG != 0
1220 if (yydebug)
1221 fprintf(stderr, "Entering state %d\n", yystate);
1222#endif
vlmfa67ddc2004-06-03 03:38:44 +00001223
1224 goto yybackup;
vlm6a02a8a2004-09-08 00:28:11 +00001225 yybackup:
vlmfa67ddc2004-06-03 03:38:44 +00001226
1227/* Do appropriate processing given the current state. */
1228/* Read a lookahead token if we need one and don't already have one. */
1229/* yyresume: */
1230
1231 /* First try to decide what to do without reference to lookahead token. */
1232
1233 yyn = yypact[yystate];
vlm6a02a8a2004-09-08 00:28:11 +00001234 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001235 goto yydefault;
1236
1237 /* Not known => get a lookahead token if don't already have one. */
1238
1239 /* yychar is either YYEMPTY or YYEOF
1240 or a valid token in external form. */
1241
1242 if (yychar == YYEMPTY)
1243 {
vlm6a02a8a2004-09-08 00:28:11 +00001244#if YYDEBUG != 0
1245 if (yydebug)
1246 fprintf(stderr, "Reading a token: ");
1247#endif
vlmfa67ddc2004-06-03 03:38:44 +00001248 yychar = YYLEX;
1249 }
1250
vlm6a02a8a2004-09-08 00:28:11 +00001251 /* Convert token to internal form (in yychar1) for indexing tables with */
vlmfa67ddc2004-06-03 03:38:44 +00001252
vlm6a02a8a2004-09-08 00:28:11 +00001253 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001254 {
1255 yychar1 = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001256 yychar = YYEOF; /* Don't call YYLEX any more */
vlmfa67ddc2004-06-03 03:38:44 +00001257
vlm6a02a8a2004-09-08 00:28:11 +00001258#if YYDEBUG != 0
1259 if (yydebug)
1260 fprintf(stderr, "Now at end of input.\n");
1261#endif
vlmfa67ddc2004-06-03 03:38:44 +00001262 }
1263 else
1264 {
vlm6a02a8a2004-09-08 00:28:11 +00001265 yychar1 = YYTRANSLATE(yychar);
vlmfa67ddc2004-06-03 03:38:44 +00001266
vlm6a02a8a2004-09-08 00:28:11 +00001267#if YYDEBUG != 0
1268 if (yydebug)
1269 {
1270 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1271 /* Give the individual parser a way to print the precise meaning
1272 of a token, for further debugging info. */
1273#ifdef YYPRINT
1274 YYPRINT (stderr, yychar, yylval);
1275#endif
1276 fprintf (stderr, ")\n");
1277 }
1278#endif
vlmfa67ddc2004-06-03 03:38:44 +00001279 }
1280
1281 yyn += yychar1;
vlm6a02a8a2004-09-08 00:28:11 +00001282 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001283 goto yydefault;
vlm6a02a8a2004-09-08 00:28:11 +00001284
vlmfa67ddc2004-06-03 03:38:44 +00001285 yyn = yytable[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001286
1287 /* yyn is what to do for this token type in this state.
1288 Negative => reduce, -yyn is rule number.
1289 Positive => shift, yyn is new state.
1290 New state is final state => don't bother to shift,
1291 just return success.
1292 0, or most negative number => error. */
1293
1294 if (yyn < 0)
vlmfa67ddc2004-06-03 03:38:44 +00001295 {
vlm6a02a8a2004-09-08 00:28:11 +00001296 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001297 goto yyerrlab;
1298 yyn = -yyn;
1299 goto yyreduce;
1300 }
vlm6a02a8a2004-09-08 00:28:11 +00001301 else if (yyn == 0)
1302 goto yyerrlab;
vlmfa67ddc2004-06-03 03:38:44 +00001303
1304 if (yyn == YYFINAL)
1305 YYACCEPT;
1306
1307 /* Shift the lookahead token. */
vlm6a02a8a2004-09-08 00:28:11 +00001308
1309#if YYDEBUG != 0
1310 if (yydebug)
1311 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1312#endif
vlmfa67ddc2004-06-03 03:38:44 +00001313
1314 /* Discard the token being shifted unless it is eof. */
1315 if (yychar != YYEOF)
1316 yychar = YYEMPTY;
1317
1318 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00001319#ifdef YYLSP_NEEDED
1320 *++yylsp = yylloc;
1321#endif
vlmfa67ddc2004-06-03 03:38:44 +00001322
vlm6a02a8a2004-09-08 00:28:11 +00001323 /* count tokens shifted since error; after three, turn off error status. */
1324 if (yyerrstatus) yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001325
1326 yystate = yyn;
1327 goto yynewstate;
1328
vlm6a02a8a2004-09-08 00:28:11 +00001329/* Do the default action for the current state. */
vlm80103492004-09-07 10:39:09 +00001330yydefault:
vlm6a02a8a2004-09-08 00:28:11 +00001331
vlmfa67ddc2004-06-03 03:38:44 +00001332 yyn = yydefact[yystate];
1333 if (yyn == 0)
1334 goto yyerrlab;
1335
vlm6a02a8a2004-09-08 00:28:11 +00001336/* Do a reduction. yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001337yyreduce:
1338 yylen = yyr2[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001339 if (yylen > 0)
1340 yyval = yyvsp[1-yylen]; /* implement default value of the action */
vlmfa67ddc2004-06-03 03:38:44 +00001341
vlm6a02a8a2004-09-08 00:28:11 +00001342#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00001343 if (yydebug)
1344 {
vlm6a02a8a2004-09-08 00:28:11 +00001345 int i;
vlmfa67ddc2004-06-03 03:38:44 +00001346
vlm6a02a8a2004-09-08 00:28:11 +00001347 fprintf (stderr, "Reducing via rule %d (line %d), ",
1348 yyn, yyrline[yyn]);
vlmfa67ddc2004-06-03 03:38:44 +00001349
1350 /* Print the symbols being reduced, and their result. */
vlm6a02a8a2004-09-08 00:28:11 +00001351 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1352 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1353 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
vlmfa67ddc2004-06-03 03:38:44 +00001354 }
1355#endif
vlm80103492004-09-07 10:39:09 +00001356
vlm6a02a8a2004-09-08 00:28:11 +00001357
1358 switch (yyn) {
1359
1360case 1:
vlm931aeed2005-08-12 10:09:10 +00001361#line 314 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001362{
1363 *(void **)param = yyvsp[0].a_grammar;
1364 ;
1365 break;}
1366case 2:
vlm931aeed2005-08-12 10:09:10 +00001367#line 320 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001368{
vlmfa67ddc2004-06-03 03:38:44 +00001369 yyval.a_grammar = asn1p_new();
1370 checkmem(yyval.a_grammar);
1371 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001372 ;
1373 break;}
1374case 3:
vlm931aeed2005-08-12 10:09:10 +00001375#line 325 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001376{
vlmfa67ddc2004-06-03 03:38:44 +00001377 yyval.a_grammar = yyvsp[-1].a_grammar;
1378 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001379 ;
1380 break;}
1381case 4:
vlm931aeed2005-08-12 10:09:10 +00001382#line 346 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001383{
vlmfa67ddc2004-06-03 03:38:44 +00001384
1385 if(yyvsp[-1].a_module) {
1386 yyval.a_module = yyvsp[-1].a_module;
1387 } else {
1388 /* There's a chance that a module is just plain empty */
1389 yyval.a_module = asn1p_module_new();
1390 }
1391 checkmem(yyval.a_module);
1392
vlm931aeed2005-08-12 10:09:10 +00001393 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00001394 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1395 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001396 ;
1397 break;}
1398case 5:
vlm931aeed2005-08-12 10:09:10 +00001399#line 367 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001400{ yyval.a_oid = 0; ;
1401 break;}
1402case 6:
vlm931aeed2005-08-12 10:09:10 +00001403#line 368 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001404{ yyval.a_oid = yyvsp[0].a_oid; ;
1405 break;}
1406case 7:
vlm931aeed2005-08-12 10:09:10 +00001407#line 372 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001408{
vlmfa67ddc2004-06-03 03:38:44 +00001409 yyval.a_oid = yyvsp[-1].a_oid;
vlm6a02a8a2004-09-08 00:28:11 +00001410 ;
1411 break;}
1412case 8:
vlm931aeed2005-08-12 10:09:10 +00001413#line 375 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001414{
vlmfa67ddc2004-06-03 03:38:44 +00001415 yyval.a_oid = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001416 ;
1417 break;}
1418case 9:
vlm931aeed2005-08-12 10:09:10 +00001419#line 381 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001420{
vlmfa67ddc2004-06-03 03:38:44 +00001421 yyval.a_oid = asn1p_oid_new();
1422 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1423 if(yyvsp[0].a_oid_arc.name)
1424 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001425 ;
1426 break;}
1427case 10:
vlm931aeed2005-08-12 10:09:10 +00001428#line 387 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001429{
vlmfa67ddc2004-06-03 03:38:44 +00001430 yyval.a_oid = yyvsp[-1].a_oid;
1431 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1432 if(yyvsp[0].a_oid_arc.name)
1433 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001434 ;
1435 break;}
1436case 11:
vlm931aeed2005-08-12 10:09:10 +00001437#line 396 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001438{ /* iso */
vlmfa67ddc2004-06-03 03:38:44 +00001439 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1440 yyval.a_oid_arc.number = -1;
vlm6a02a8a2004-09-08 00:28:11 +00001441 ;
1442 break;}
1443case 12:
vlm931aeed2005-08-12 10:09:10 +00001444#line 400 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001445{ /* iso(1) */
vlmfa67ddc2004-06-03 03:38:44 +00001446 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1447 yyval.a_oid_arc.number = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001448 ;
1449 break;}
1450case 13:
vlm931aeed2005-08-12 10:09:10 +00001451#line 404 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001452{ /* 1 */
vlmfa67ddc2004-06-03 03:38:44 +00001453 yyval.a_oid_arc.name = 0;
1454 yyval.a_oid_arc.number = yyvsp[0].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001455 ;
1456 break;}
1457case 14:
vlm931aeed2005-08-12 10:09:10 +00001458#line 414 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001459{ yyval.a_module_flags = MSF_NOFLAGS; ;
1460 break;}
1461case 15:
vlm931aeed2005-08-12 10:09:10 +00001462#line 415 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001463{
vlmfa67ddc2004-06-03 03:38:44 +00001464 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001465 ;
1466 break;}
1467case 16:
vlm931aeed2005-08-12 10:09:10 +00001468#line 424 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001469{
vlmfa67ddc2004-06-03 03:38:44 +00001470 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001471 ;
1472 break;}
1473case 17:
vlm931aeed2005-08-12 10:09:10 +00001474#line 427 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001475{
vlmfa67ddc2004-06-03 03:38:44 +00001476 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001477 ;
1478 break;}
1479case 18:
vlm931aeed2005-08-12 10:09:10 +00001480#line 436 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001481{
vlmfa67ddc2004-06-03 03:38:44 +00001482 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001483 ;
1484 break;}
1485case 19:
vlm931aeed2005-08-12 10:09:10 +00001486#line 439 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001487{
vlmfa67ddc2004-06-03 03:38:44 +00001488 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001489 ;
1490 break;}
1491case 20:
vlm931aeed2005-08-12 10:09:10 +00001492#line 442 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001493{
vlmfa67ddc2004-06-03 03:38:44 +00001494 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001495 ;
1496 break;}
1497case 21:
vlm931aeed2005-08-12 10:09:10 +00001498#line 445 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001499{
vlmfa67ddc2004-06-03 03:38:44 +00001500 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
vlm6a02a8a2004-09-08 00:28:11 +00001501 ;
1502 break;}
1503case 22:
vlm931aeed2005-08-12 10:09:10 +00001504#line 449 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001505{
vlm9283dbe2004-08-18 04:59:12 +00001506 /* X.680Amd1 specifies TAG and XER */
1507 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1508 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1509 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1510 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1511 } else {
1512 fprintf(stderr,
1513 "WARNING: %s INSTRUCTIONS at line %d: "
1514 "Unrecognized encoding reference\n",
1515 yyvsp[-1].tv_str, yylineno);
1516 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1517 }
1518 free(yyvsp[-1].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00001519 ;
1520 break;}
1521case 23:
vlm931aeed2005-08-12 10:09:10 +00001522#line 470 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001523{ yyval.a_module = 0; ;
1524 break;}
1525case 24:
vlm931aeed2005-08-12 10:09:10 +00001526#line 471 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001527{
vlmfa67ddc2004-06-03 03:38:44 +00001528 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001529 ;
1530 break;}
1531case 25:
vlm931aeed2005-08-12 10:09:10 +00001532#line 480 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001533{
vlm9283dbe2004-08-18 04:59:12 +00001534 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001535 ;
1536 break;}
1537case 26:
vlm931aeed2005-08-12 10:09:10 +00001538#line 483 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001539{
vlmfa67ddc2004-06-03 03:38:44 +00001540 yyval.a_module = yyvsp[-1].a_module;
1541
vlm9283dbe2004-08-18 04:59:12 +00001542 /* Behave well when one of them is skipped. */
1543 if(!(yyvsp[-1].a_module)) {
1544 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1545 break;
1546 }
1547
vlmfa67ddc2004-06-03 03:38:44 +00001548#ifdef MY_IMPORT
1549#error MY_IMPORT DEFINED ELSEWHERE!
1550#endif
1551#define MY_IMPORT(foo,field) do { \
vlm97ed7152004-08-13 12:31:09 +00001552 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
vlmfa67ddc2004-06-03 03:38:44 +00001553 TQ_ADD(&(yyval.a_module->foo), \
1554 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1555 field); \
vlm97ed7152004-08-13 12:31:09 +00001556 } \
1557 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1558 } while(0)
vlmfa67ddc2004-06-03 03:38:44 +00001559
1560 MY_IMPORT(imports, xp_next);
1561 MY_IMPORT(exports, xp_next);
1562 MY_IMPORT(members, next);
1563#undef MY_IMPORT
1564
vlm6a02a8a2004-09-08 00:28:11 +00001565 ;
1566 break;}
1567case 27:
vlm931aeed2005-08-12 10:09:10 +00001568#line 516 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001569{
vlmfa67ddc2004-06-03 03:38:44 +00001570 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001571 ;
1572 break;}
1573case 28:
vlm931aeed2005-08-12 10:09:10 +00001574#line 519 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001575{
vlmfa67ddc2004-06-03 03:38:44 +00001576 yyval.a_module = asn1p_module_new();
1577 checkmem(yyval.a_module);
1578 if(yyvsp[0].a_xports) {
1579 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1580 } else {
1581 /* "EXPORTS ALL;" ? */
1582 }
vlm6a02a8a2004-09-08 00:28:11 +00001583 ;
1584 break;}
1585case 29:
vlm03630c52005-06-07 21:43:32 +00001586#line 528 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001587{
vlm9283dbe2004-08-18 04:59:12 +00001588 yyval.a_module = asn1p_module_new();
1589 checkmem(yyval.a_module);
1590 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1591 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1592 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001593 ;
1594 break;}
vlm931aeed2005-08-12 10:09:10 +00001595case 30:
1596#line 535 "asn1p_y.y"
1597{
1598 yyval.a_module = asn1p_module_new();
1599 checkmem(yyval.a_module);
1600 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1601 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1602 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1603 ;
1604 break;}
vlm6a02a8a2004-09-08 00:28:11 +00001605case 31:
vlm931aeed2005-08-12 10:09:10 +00001606#line 548 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001607{
vlm9283dbe2004-08-18 04:59:12 +00001608 yyval.a_module = asn1p_module_new();
1609 checkmem(yyval.a_module);
1610 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1611 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1612 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001613 ;
1614 break;}
1615case 32:
vlm931aeed2005-08-12 10:09:10 +00001616#line 556 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001617{ asn1p_lexer_hack_push_encoding_control(); ;
1618 break;}
1619case 33:
vlm931aeed2005-08-12 10:09:10 +00001620#line 557 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001621{
vlm9283dbe2004-08-18 04:59:12 +00001622 fprintf(stderr,
1623 "WARNING: ENCODING-CONTROL %s "
1624 "specification at line %d ignored\n",
1625 yyvsp[-1].tv_str, yylineno);
1626 free(yyvsp[-1].tv_str);
1627 yyval.a_module = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001628 ;
1629 break;}
1630case 34:
vlm931aeed2005-08-12 10:09:10 +00001631#line 569 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001632{
vlmfa67ddc2004-06-03 03:38:44 +00001633 return yyerror(
1634 "Attempt to redefine a standard basic type, "
1635 "use -ftypesXY to switch back "
1636 "to older version of ASN.1 standard");
vlm6a02a8a2004-09-08 00:28:11 +00001637 ;
1638 break;}
1639case 35:
vlm931aeed2005-08-12 10:09:10 +00001640#line 583 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001641{
vlm931aeed2005-08-12 10:09:10 +00001642 if(!saved_aid && 0)
1643 return yyerror("Unterminated IMPORTS FROM, "
1644 "expected semicolon ';'");
1645 saved_aid = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001646 yyval.a_module = yyvsp[-1].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001647 ;
1648 break;}
1649case 36:
vlm931aeed2005-08-12 10:09:10 +00001650#line 593 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001651{
vlmfa67ddc2004-06-03 03:38:44 +00001652 return yyerror("Empty IMPORTS list");
vlm6a02a8a2004-09-08 00:28:11 +00001653 ;
1654 break;}
1655case 37:
vlm931aeed2005-08-12 10:09:10 +00001656#line 599 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001657{
vlmfa67ddc2004-06-03 03:38:44 +00001658 yyval.a_module = asn1p_module_new();
1659 checkmem(yyval.a_module);
1660 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001661 ;
1662 break;}
1663case 38:
vlm931aeed2005-08-12 10:09:10 +00001664#line 604 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001665{
vlmfa67ddc2004-06-03 03:38:44 +00001666 yyval.a_module = yyvsp[-1].a_module;
1667 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001668 ;
1669 break;}
1670case 39:
vlm931aeed2005-08-12 10:09:10 +00001671#line 611 "asn1p_y.y"
1672{ memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
1673 break;}
1674case 40:
1675#line 612 "asn1p_y.y"
1676{ yyval.a_aid.oid = yyvsp[0].a_oid; ;
1677 break;}
1678case 41:
1679#line 616 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001680{
vlmfa67ddc2004-06-03 03:38:44 +00001681 yyval.a_xports = yyvsp[-3].a_xports;
vlm931aeed2005-08-12 10:09:10 +00001682 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
1683 yyval.a_xports->identifier = yyvsp[0].a_aid;
1684 /* This stupid thing is used for look-back hack. */
1685 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
vlmfa67ddc2004-06-03 03:38:44 +00001686 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001687 ;
1688 break;}
vlm931aeed2005-08-12 10:09:10 +00001689case 42:
1690#line 627 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001691{
vlmfa67ddc2004-06-03 03:38:44 +00001692 yyval.a_xports = asn1p_xports_new();
1693 checkmem(yyval.a_xports);
1694 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001695 ;
1696 break;}
vlm931aeed2005-08-12 10:09:10 +00001697case 43:
1698#line 632 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001699{
vlmfa67ddc2004-06-03 03:38:44 +00001700 yyval.a_xports = yyvsp[-2].a_xports;
1701 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001702 ;
1703 break;}
vlm0aa86902004-10-12 23:26:53 +00001704case 44:
vlm931aeed2005-08-12 10:09:10 +00001705#line 639 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001706{
vlmfa67ddc2004-06-03 03:38:44 +00001707 yyval.a_expr = asn1p_expr_new(yylineno);
1708 checkmem(yyval.a_expr);
1709 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1710 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm6a02a8a2004-09-08 00:28:11 +00001711 ;
1712 break;}
vlm0aa86902004-10-12 23:26:53 +00001713case 45:
vlm931aeed2005-08-12 10:09:10 +00001714#line 645 "asn1p_y.y"
1715{ /* Completely equivalent to above */
1716 yyval.a_expr = asn1p_expr_new(yylineno);
1717 checkmem(yyval.a_expr);
1718 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1719 yyval.a_expr->expr_type = A1TC_REFERENCE;
1720 ;
1721 break;}
1722case 46:
1723#line 651 "asn1p_y.y"
1724{
1725 yyval.a_expr = asn1p_expr_new(yylineno);
1726 checkmem(yyval.a_expr);
1727 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1728 yyval.a_expr->expr_type = A1TC_REFERENCE;
1729 ;
1730 break;}
1731case 47:
1732#line 660 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001733{
vlmfa67ddc2004-06-03 03:38:44 +00001734 yyval.a_xports = yyvsp[-1].a_xports;
vlm6a02a8a2004-09-08 00:28:11 +00001735 ;
1736 break;}
vlm931aeed2005-08-12 10:09:10 +00001737case 48:
1738#line 663 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001739{
vlmfa67ddc2004-06-03 03:38:44 +00001740 yyval.a_xports = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001741 ;
1742 break;}
vlm931aeed2005-08-12 10:09:10 +00001743case 49:
1744#line 666 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001745{
vlmfa67ddc2004-06-03 03:38:44 +00001746 /* Empty EXPORTS clause effectively prohibits export. */
1747 yyval.a_xports = asn1p_xports_new();
1748 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001749 ;
1750 break;}
vlm931aeed2005-08-12 10:09:10 +00001751case 50:
1752#line 674 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001753{
vlmfa67ddc2004-06-03 03:38:44 +00001754 yyval.a_xports = asn1p_xports_new();
1755 assert(yyval.a_xports);
1756 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001757 ;
1758 break;}
vlm931aeed2005-08-12 10:09:10 +00001759case 51:
1760#line 679 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001761{
vlmfa67ddc2004-06-03 03:38:44 +00001762 yyval.a_xports = yyvsp[-2].a_xports;
1763 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001764 ;
1765 break;}
vlm0aa86902004-10-12 23:26:53 +00001766case 52:
vlm931aeed2005-08-12 10:09:10 +00001767#line 686 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001768{
1769 yyval.a_expr = asn1p_expr_new(yylineno);
1770 checkmem(yyval.a_expr);
1771 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1772 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1773 ;
1774 break;}
1775case 53:
vlm931aeed2005-08-12 10:09:10 +00001776#line 692 "asn1p_y.y"
1777{
1778 yyval.a_expr = asn1p_expr_new(yylineno);
1779 checkmem(yyval.a_expr);
1780 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1781 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1782 ;
vlm7388db02005-03-31 21:48:13 +00001783 break;}
1784case 54:
vlm931aeed2005-08-12 10:09:10 +00001785#line 698 "asn1p_y.y"
1786{
1787 yyval.a_expr = asn1p_expr_new(yylineno);
1788 checkmem(yyval.a_expr);
1789 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1790 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1791 ;
1792 break;}
1793case 55:
1794#line 709 "asn1p_y.y"
1795{ asn1p_lexer_hack_push_opaque_state(); ;
1796 break;}
1797case 56:
1798#line 709 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001799{
vlmfa67ddc2004-06-03 03:38:44 +00001800 yyval.a_expr = yyvsp[-4].a_expr;
1801 assert(yyval.a_expr->Identifier == 0);
1802 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1803 yyval.a_expr->meta_type = AMT_VALUESET;
vlm7388db02005-03-31 21:48:13 +00001804 // take care of ValueSet body
vlm6a02a8a2004-09-08 00:28:11 +00001805 ;
1806 break;}
vlm931aeed2005-08-12 10:09:10 +00001807case 57:
1808#line 719 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001809{
vlmfa67ddc2004-06-03 03:38:44 +00001810 yyval.a_expr = asn1p_expr_new(yylineno);
1811 checkmem(yyval.a_expr);
1812 yyval.a_expr->reference = yyvsp[0].a_ref;
1813 yyval.a_expr->expr_type = A1TC_REFERENCE;
1814 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00001815 ;
1816 break;}
vlm931aeed2005-08-12 10:09:10 +00001817case 58:
1818#line 726 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001819{
vlmfa67ddc2004-06-03 03:38:44 +00001820 yyval.a_expr = asn1p_expr_new(yylineno);
1821 checkmem(yyval.a_expr);
1822 yyval.a_expr->expr_type = yyvsp[0].a_type;
1823 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001824 ;
1825 break;}
vlm931aeed2005-08-12 10:09:10 +00001826case 59:
1827#line 744 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001828{
vlmfa67ddc2004-06-03 03:38:44 +00001829 yyval.a_expr = asn1p_expr_new(yylineno);
1830 checkmem(yyval.a_expr);
1831 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1832 yyval.a_expr->tag = yyvsp[-1].a_tag;
1833 yyval.a_expr->expr_type = A1TC_TYPEID;
1834 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001835 ;
1836 break;}
vlm931aeed2005-08-12 10:09:10 +00001837case 60:
1838#line 752 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001839{
vlmfa67ddc2004-06-03 03:38:44 +00001840 yyval.a_expr = yyvsp[0].a_expr;
vlmfce48a42004-09-14 02:36:39 +00001841 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00001842 assert(yyval.a_expr->expr_type);
1843 assert(yyval.a_expr->meta_type);
vlm6a02a8a2004-09-08 00:28:11 +00001844 ;
1845 break;}
vlm931aeed2005-08-12 10:09:10 +00001846case 61:
1847#line 758 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001848{
vlmfa67ddc2004-06-03 03:38:44 +00001849 yyval.a_expr = yyvsp[0].a_expr;
1850 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1851 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1852 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm6a02a8a2004-09-08 00:28:11 +00001853 ;
1854 break;}
vlm931aeed2005-08-12 10:09:10 +00001855case 62:
1856#line 774 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001857{
vlmfa67ddc2004-06-03 03:38:44 +00001858 yyval.a_expr = yyvsp[0].a_expr;
1859 assert(yyval.a_expr->Identifier == 0);
1860 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1861 yyval.a_expr->params = yyvsp[-3].a_plist;
1862 yyval.a_expr->meta_type = AMT_PARAMTYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001863 ;
1864 break;}
vlm931aeed2005-08-12 10:09:10 +00001865case 63:
1866#line 784 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001867{
vlmfa67ddc2004-06-03 03:38:44 +00001868 int ret;
1869 yyval.a_plist = asn1p_paramlist_new(yylineno);
1870 checkmem(yyval.a_plist);
1871 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1872 checkmem(ret == 0);
1873 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1874 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001875 ;
1876 break;}
vlm931aeed2005-08-12 10:09:10 +00001877case 64:
1878#line 793 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001879{
vlmfa67ddc2004-06-03 03:38:44 +00001880 int ret;
1881 yyval.a_plist = yyvsp[-2].a_plist;
1882 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1883 checkmem(ret == 0);
1884 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1885 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001886 ;
1887 break;}
vlm931aeed2005-08-12 10:09:10 +00001888case 65:
1889#line 804 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001890{
vlmfa67ddc2004-06-03 03:38:44 +00001891 yyval.a_parg.governor = NULL;
1892 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001893 ;
1894 break;}
vlm7388db02005-03-31 21:48:13 +00001895case 66:
vlm931aeed2005-08-12 10:09:10 +00001896#line 808 "asn1p_y.y"
1897{
1898 int ret;
1899 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1900 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1901 checkmem(ret == 0);
1902 yyval.a_parg.argument = yyvsp[0].tv_str;
1903 ;
1904 break;}
1905case 67:
1906#line 815 "asn1p_y.y"
1907{
1908 int ret;
1909 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1910 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1911 checkmem(ret == 0);
1912 yyval.a_parg.argument = yyvsp[0].tv_str;
1913 ;
1914 break;}
1915case 68:
1916#line 822 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00001917{
1918 int ret;
1919 yyval.a_parg.governor = asn1p_ref_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00001920 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1921 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1922 checkmem(ret == 0);
1923 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001924 ;
1925 break;}
vlm931aeed2005-08-12 10:09:10 +00001926case 69:
1927#line 833 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001928{
vlmfa67ddc2004-06-03 03:38:44 +00001929 yyval.a_expr = asn1p_expr_new(yylineno);
1930 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001931 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1932 ;
1933 break;}
vlm931aeed2005-08-12 10:09:10 +00001934case 70:
1935#line 838 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001936{
vlmfa67ddc2004-06-03 03:38:44 +00001937 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001938 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1939 ;
1940 break;}
vlm931aeed2005-08-12 10:09:10 +00001941case 71:
1942#line 845 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001943{
vlmfa67ddc2004-06-03 03:38:44 +00001944 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001945 ;
1946 break;}
vlm931aeed2005-08-12 10:09:10 +00001947case 72:
1948#line 848 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001949{
vlmfa67ddc2004-06-03 03:38:44 +00001950 yyval.a_expr = asn1p_expr_new(yylineno);
1951 checkmem(yyval.a_expr);
1952 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1953 yyval.a_expr->expr_type = A1TC_REFERENCE;
1954 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00001955 ;
1956 break;}
vlm931aeed2005-08-12 10:09:10 +00001957case 73:
1958#line 872 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001959{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1960 break;}
vlm931aeed2005-08-12 10:09:10 +00001961case 74:
1962#line 873 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001963{ yyval.a_expr = yyvsp[0].a_expr; ;
1964 break;}
vlm931aeed2005-08-12 10:09:10 +00001965case 75:
1966#line 876 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001967{
vlmfa67ddc2004-06-03 03:38:44 +00001968 yyval.a_expr = asn1p_expr_new(yylineno);
1969 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001970 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1971 ;
1972 break;}
vlm931aeed2005-08-12 10:09:10 +00001973case 76:
1974#line 881 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001975{
vlmfa67ddc2004-06-03 03:38:44 +00001976 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001977 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1978 ;
1979 break;}
vlm931aeed2005-08-12 10:09:10 +00001980case 77:
1981#line 888 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001982{
vlmec8f6812004-08-22 03:19:54 +00001983 yyval.a_expr = yyvsp[-1].a_expr;
1984 assert(yyval.a_expr->Identifier == 0);
vlmfce48a42004-09-14 02:36:39 +00001985 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmec8f6812004-08-22 03:19:54 +00001986 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00001987 ;
1988 break;}
vlm931aeed2005-08-12 10:09:10 +00001989case 78:
1990#line 894 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001991{
vlmec8f6812004-08-22 03:19:54 +00001992 yyval.a_expr = asn1p_expr_new(yylineno);
1993 checkmem(yyval.a_expr);
1994 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1995 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
vlm6a02a8a2004-09-08 00:28:11 +00001996 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1997 ;
1998 break;}
vlm931aeed2005-08-12 10:09:10 +00001999case 79:
2000#line 901 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002001{
vlmec8f6812004-08-22 03:19:54 +00002002 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002003 ;
2004 break;}
vlm931aeed2005-08-12 10:09:10 +00002005case 80:
2006#line 907 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002007{
vlmec8f6812004-08-22 03:19:54 +00002008 yyval.a_expr = asn1p_expr_new(yylineno);
2009 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00002010 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2011 ;
2012 break;}
vlm931aeed2005-08-12 10:09:10 +00002013case 81:
2014#line 912 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002015{
vlmec8f6812004-08-22 03:19:54 +00002016 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002017 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2018 ;
2019 break;}
vlm931aeed2005-08-12 10:09:10 +00002020case 82:
2021#line 919 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002022{
vlmec8f6812004-08-22 03:19:54 +00002023 yyval.a_expr = yyvsp[0].a_expr;
2024 assert(yyval.a_expr->Identifier == 0);
vlmfce48a42004-09-14 02:36:39 +00002025 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002026 ;
2027 break;}
vlm931aeed2005-08-12 10:09:10 +00002028case 83:
2029#line 924 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002030{
vlmec8f6812004-08-22 03:19:54 +00002031 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002032 ;
2033 break;}
vlm931aeed2005-08-12 10:09:10 +00002034case 84:
2035#line 930 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002036{
vlmfa67ddc2004-06-03 03:38:44 +00002037 yyval.a_expr = yyvsp[-2].a_expr;
2038 checkmem(yyval.a_expr);
2039 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2040 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2041 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm6a02a8a2004-09-08 00:28:11 +00002042 ;
2043 break;}
vlm931aeed2005-08-12 10:09:10 +00002044case 85:
2045#line 940 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002046{ yyval.a_int = 0; ;
2047 break;}
vlm931aeed2005-08-12 10:09:10 +00002048case 86:
2049#line 941 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002050{ yyval.a_int = 1; ;
2051 break;}
vlm931aeed2005-08-12 10:09:10 +00002052case 87:
2053#line 945 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002054{
vlmfa67ddc2004-06-03 03:38:44 +00002055 yyval.a_expr = asn1p_expr_new(yylineno);
2056 checkmem(yyval.a_expr);
2057 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2058 yyval.a_expr->meta_type = AMT_OBJECT;
vlm6a02a8a2004-09-08 00:28:11 +00002059 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2060 ;
2061 break;}
vlm931aeed2005-08-12 10:09:10 +00002062case 88:
2063#line 952 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002064{
vlmfa67ddc2004-06-03 03:38:44 +00002065 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002066 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2067 ;
2068 break;}
vlm931aeed2005-08-12 10:09:10 +00002069case 89:
2070#line 959 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002071{
vlmfa67ddc2004-06-03 03:38:44 +00002072 yyval.a_expr = asn1p_expr_new(yylineno);
2073 checkmem(yyval.a_expr);
2074 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2075 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2076 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2077 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00002078 ;
2079 break;}
vlm931aeed2005-08-12 10:09:10 +00002080case 90:
2081#line 967 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002082{
vlmec8f6812004-08-22 03:19:54 +00002083 yyval.a_expr = yyvsp[-2].a_expr;
2084 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
vlmbde35d42004-11-24 17:43:29 +00002085 yyval.a_expr->marker = yyvsp[0].a_marker;
2086 yyval.a_expr->unique = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00002087 ;
2088 break;}
vlm931aeed2005-08-12 10:09:10 +00002089case 91:
2090#line 973 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002091{
vlmfa67ddc2004-06-03 03:38:44 +00002092 int ret;
2093 yyval.a_expr = asn1p_expr_new(yylineno);
2094 checkmem(yyval.a_expr);
2095 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2096 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2097 checkmem(yyval.a_expr->reference);
2098 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2099 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2100 checkmem(ret == 0);
2101 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2102 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
vlmbde35d42004-11-24 17:43:29 +00002103 yyval.a_expr->marker = yyvsp[0].a_marker;
2104 yyval.a_expr->unique = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00002105 ;
2106 break;}
vlm931aeed2005-08-12 10:09:10 +00002107case 92:
2108#line 991 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002109{ yyval.a_wsynt = 0; ;
2110 break;}
vlm931aeed2005-08-12 10:09:10 +00002111case 93:
2112#line 992 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002113{
vlmfa67ddc2004-06-03 03:38:44 +00002114 yyval.a_wsynt = yyvsp[0].a_wsynt;
vlm6a02a8a2004-09-08 00:28:11 +00002115 ;
2116 break;}
vlm931aeed2005-08-12 10:09:10 +00002117case 94:
2118#line 999 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002119{ asn1p_lexer_hack_enable_with_syntax(); ;
2120 break;}
vlm931aeed2005-08-12 10:09:10 +00002121case 95:
2122#line 1001 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002123{
vlmfa67ddc2004-06-03 03:38:44 +00002124 yyval.a_wsynt = yyvsp[-1].a_wsynt;
vlm6a02a8a2004-09-08 00:28:11 +00002125 ;
2126 break;}
vlm931aeed2005-08-12 10:09:10 +00002127case 96:
2128#line 1007 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002129{
vlmfa67ddc2004-06-03 03:38:44 +00002130 yyval.a_wsynt = asn1p_wsyntx_new();
2131 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002132 ;
2133 break;}
vlm931aeed2005-08-12 10:09:10 +00002134case 97:
2135#line 1011 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002136{
vlmfa67ddc2004-06-03 03:38:44 +00002137 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2138 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002139 ;
2140 break;}
vlm931aeed2005-08-12 10:09:10 +00002141case 98:
2142#line 1018 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002143{
vlmfa67ddc2004-06-03 03:38:44 +00002144 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002145 ;
2146 break;}
vlm931aeed2005-08-12 10:09:10 +00002147case 99:
2148#line 1021 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002149{
vlmfa67ddc2004-06-03 03:38:44 +00002150 asn1p_ref_t *ref;
2151 int ret;
2152 ref = asn1p_ref_new(yylineno);
2153 checkmem(ref);
2154 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2155 checkmem(ret == 0);
2156 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002157 ;
2158 break;}
vlm7388db02005-03-31 21:48:13 +00002159case 100:
vlm931aeed2005-08-12 10:09:10 +00002160#line 1033 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00002161{
2162 yyval.a_expr = asn1p_expr_new(yylineno);
2163 checkmem(yyval.a_expr);
2164 yyval.a_expr->Identifier = strdup("...");
vlm5f0128b2004-08-20 13:25:29 +00002165 checkmem(yyval.a_expr->Identifier);
2166 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2167 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002168 ;
2169 break;}
vlm7388db02005-03-31 21:48:13 +00002170case 101:
vlm931aeed2005-08-12 10:09:10 +00002171#line 1041 "asn1p_y.y"
2172{
2173 yyval.a_expr = asn1p_expr_new(yylineno);
2174 checkmem(yyval.a_expr);
2175 yyval.a_expr->Identifier = strdup("...");
2176 checkmem(yyval.a_expr->Identifier);
2177 yyval.a_expr->value = yyvsp[0].a_value;
2178 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2179 yyval.a_expr->meta_type = AMT_TYPE;
2180 ;
2181 break;}
2182case 102:
2183#line 1050 "asn1p_y.y"
2184{
2185 yyval.a_expr = asn1p_expr_new(yylineno);
2186 checkmem(yyval.a_expr);
2187 yyval.a_expr->Identifier = strdup("...");
2188 yyval.a_expr->value = yyvsp[0].a_value;
2189 checkmem(yyval.a_expr->Identifier);
2190 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2191 yyval.a_expr->meta_type = AMT_TYPE;
2192 ;
2193 break;}
2194case 103:
2195#line 1062 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002196{
vlmec8f6812004-08-22 03:19:54 +00002197 yyval.a_expr = yyvsp[-1].a_expr;
vlmfce48a42004-09-14 02:36:39 +00002198 yyval.a_expr->tag = yyvsp[-2].a_tag;
vlmec8f6812004-08-22 03:19:54 +00002199 /*
2200 * Outer constraint for SEQUENCE OF and SET OF applies
2201 * to the inner type.
2202 */
2203 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2204 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2205 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2206 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2207 } else {
2208 if(yyval.a_expr->constraints) {
vlmfce48a42004-09-14 02:36:39 +00002209 assert(!yyvsp[-1].a_expr);
vlmec8f6812004-08-22 03:19:54 +00002210 } else {
2211 yyval.a_expr->constraints = yyvsp[0].a_constr;
2212 }
2213 }
vlm6a02a8a2004-09-08 00:28:11 +00002214 ;
2215 break;}
vlm931aeed2005-08-12 10:09:10 +00002216case 104:
2217#line 1084 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002218{
vlm5f0128b2004-08-20 13:25:29 +00002219 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002220 ;
2221 break;}
vlm931aeed2005-08-12 10:09:10 +00002222case 105:
2223#line 1087 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002224{
vlm5e2c4b92005-03-20 11:12:40 +00002225 yyval.a_expr = yyvsp[-1].a_expr;
2226 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2227 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
vlmfa67ddc2004-06-03 03:38:44 +00002228 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002229 ;
2230 break;}
vlm931aeed2005-08-12 10:09:10 +00002231case 106:
2232#line 1093 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002233{
vlmec8f6812004-08-22 03:19:54 +00002234 yyval.a_expr = yyvsp[-1].a_expr;
2235 assert(yyval.a_expr->expr_type == A1TC_INVALID);
vlm5e2c4b92005-03-20 11:12:40 +00002236 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
vlmec8f6812004-08-22 03:19:54 +00002237 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002238 ;
2239 break;}
vlm931aeed2005-08-12 10:09:10 +00002240case 107:
2241#line 1099 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002242{
vlmec8f6812004-08-22 03:19:54 +00002243 yyval.a_expr = yyvsp[-1].a_expr;
2244 assert(yyval.a_expr->expr_type == A1TC_INVALID);
vlm5e2c4b92005-03-20 11:12:40 +00002245 yyval.a_expr->expr_type = ASN_CONSTR_SET;
vlmec8f6812004-08-22 03:19:54 +00002246 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002247 ;
2248 break;}
vlm931aeed2005-08-12 10:09:10 +00002249case 108:
2250#line 1105 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002251{
vlm39e5ed72004-09-05 10:40:41 +00002252 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002253 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002254 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002255 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2256 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002257 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002258 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002259 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2260 ;
2261 break;}
vlm931aeed2005-08-12 10:09:10 +00002262case 109:
2263#line 1115 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002264{
vlm39e5ed72004-09-05 10:40:41 +00002265 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002266 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002267 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002268 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2269 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002270 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002271 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002272 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2273 ;
2274 break;}
vlm931aeed2005-08-12 10:09:10 +00002275case 110:
2276#line 1125 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002277{
vlm39e5ed72004-09-05 10:40:41 +00002278 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002279 checkmem(yyval.a_expr);
vlm044f7442004-09-04 04:49:21 +00002280 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002281 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002282 ;
2283 break;}
vlm931aeed2005-08-12 10:09:10 +00002284case 111:
2285#line 1131 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002286{
vlmec8f6812004-08-22 03:19:54 +00002287 int ret;
vlm39e5ed72004-09-05 10:40:41 +00002288 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002289 checkmem(yyval.a_expr);
2290 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2291 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2292 yyvsp[0].tv_str, RLT_lowercase);
2293 checkmem(ret == 0);
vlm044f7442004-09-04 04:49:21 +00002294 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002295 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002296 ;
2297 break;}
vlm931aeed2005-08-12 10:09:10 +00002298case 112:
2299#line 1145 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002300{
vlmfa67ddc2004-06-03 03:38:44 +00002301 int ret;
2302 yyval.a_expr = yyvsp[-1].a_expr;
2303 assert(yyval.a_expr->expr_type == 0);
2304 assert(yyval.a_expr->meta_type == 0);
2305 assert(yyval.a_expr->reference == 0);
2306 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2307 checkmem(yyval.a_expr->reference);
2308 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2309 checkmem(ret == 0);
2310 free(yyvsp[-3].tv_str);
2311 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2312 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002313 ;
2314 break;}
vlm931aeed2005-08-12 10:09:10 +00002315case 113:
2316#line 1169 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002317{
vlmfa67ddc2004-06-03 03:38:44 +00002318 yyval.a_expr = asn1p_expr_new(yylineno);
2319 checkmem(yyval.a_expr);
2320 yyval.a_expr->reference = yyvsp[0].a_ref;
2321 yyval.a_expr->expr_type = A1TC_REFERENCE;
2322 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00002323 ;
2324 break;}
vlm931aeed2005-08-12 10:09:10 +00002325case 114:
2326#line 1176 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002327{
vlmfa67ddc2004-06-03 03:38:44 +00002328 yyval.a_expr = asn1p_expr_new(yylineno);
2329 checkmem(yyval.a_expr);
2330 yyval.a_expr->reference = yyvsp[0].a_ref;
2331 yyval.a_expr->expr_type = A1TC_INSTANCE;
2332 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002333 ;
2334 break;}
vlm931aeed2005-08-12 10:09:10 +00002335case 115:
2336#line 1191 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002337{
vlmfa67ddc2004-06-03 03:38:44 +00002338 int ret;
2339 yyval.a_ref = asn1p_ref_new(yylineno);
2340 checkmem(yyval.a_ref);
2341 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2342 checkmem(ret == 0);
2343 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002344 ;
2345 break;}
vlm7388db02005-03-31 21:48:13 +00002346case 116:
vlm931aeed2005-08-12 10:09:10 +00002347#line 1199 "asn1p_y.y"
2348{
2349 int ret;
2350 yyval.a_ref = asn1p_ref_new(yylineno);
2351 checkmem(yyval.a_ref);
2352 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2353 checkmem(ret == 0);
2354 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2355 checkmem(ret == 0);
2356 free(yyvsp[-2].tv_str);
2357 ;
2358 break;}
2359case 117:
2360#line 1209 "asn1p_y.y"
2361{
2362 int ret;
2363 yyval.a_ref = asn1p_ref_new(yylineno);
2364 checkmem(yyval.a_ref);
2365 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2366 checkmem(ret == 0);
2367 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2368 checkmem(ret == 0);
2369 free(yyvsp[-2].tv_str);
2370 ;
2371 break;}
2372case 118:
2373#line 1219 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002374{
vlmfa67ddc2004-06-03 03:38:44 +00002375 int ret;
2376 yyval.a_ref = asn1p_ref_new(yylineno);
2377 checkmem(yyval.a_ref);
vlmc94e28f2004-09-15 11:59:51 +00002378 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2379 checkmem(ret == 0);
2380 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2381 checkmem(ret == 0);
2382 free(yyvsp[-2].tv_str);
2383 ;
2384 break;}
vlm931aeed2005-08-12 10:09:10 +00002385case 119:
2386#line 1229 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002387{
2388 int ret;
2389 yyval.a_ref = asn1p_ref_new(yylineno);
2390 checkmem(yyval.a_ref);
vlmfa67ddc2004-06-03 03:38:44 +00002391 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2392 free(yyvsp[0].tv_str);
2393 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002394 ;
2395 break;}
vlm931aeed2005-08-12 10:09:10 +00002396case 120:
2397#line 1237 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002398{
vlmfa67ddc2004-06-03 03:38:44 +00002399 int ret;
2400 yyval.a_ref = yyvsp[0].a_ref;
2401 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2402 free(yyvsp[-2].tv_str);
2403 checkmem(ret == 0);
2404 /*
2405 * Move the last element infront.
2406 */
2407 {
2408 struct asn1p_ref_component_s tmp_comp;
2409 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2410 memmove(&yyval.a_ref->components[1],
2411 &yyval.a_ref->components[0],
2412 sizeof(yyval.a_ref->components[0])
2413 * (yyval.a_ref->comp_count - 1));
2414 yyval.a_ref->components[0] = tmp_comp;
2415 }
vlm6a02a8a2004-09-08 00:28:11 +00002416 ;
2417 break;}
vlm931aeed2005-08-12 10:09:10 +00002418case 121:
2419#line 1259 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002420{
vlmfa67ddc2004-06-03 03:38:44 +00002421 int ret;
2422 yyval.a_ref = asn1p_ref_new(yylineno);
2423 checkmem(yyval.a_ref);
2424 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2425 free(yyvsp[0].a_refcomp.name);
2426 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002427 ;
2428 break;}
vlm931aeed2005-08-12 10:09:10 +00002429case 122:
2430#line 1267 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002431{
vlmfa67ddc2004-06-03 03:38:44 +00002432 int ret;
2433 yyval.a_ref = yyvsp[-2].a_ref;
2434 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2435 free(yyvsp[0].a_refcomp.name);
2436 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002437 ;
2438 break;}
vlm931aeed2005-08-12 10:09:10 +00002439case 125:
2440#line 1281 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002441{
vlmfa67ddc2004-06-03 03:38:44 +00002442 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2443 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002444 ;
2445 break;}
vlm931aeed2005-08-12 10:09:10 +00002446case 126:
2447#line 1286 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002448{
vlmfa67ddc2004-06-03 03:38:44 +00002449 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2450 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002451 ;
2452 break;}
vlm931aeed2005-08-12 10:09:10 +00002453case 127:
2454#line 1299 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002455{
vlmfa67ddc2004-06-03 03:38:44 +00002456 yyval.a_expr = yyvsp[-2].a_expr;
2457 assert(yyval.a_expr->Identifier == NULL);
2458 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2459 yyval.a_expr->meta_type = AMT_VALUE;
2460 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002461 ;
2462 break;}
vlm931aeed2005-08-12 10:09:10 +00002463case 128:
2464#line 1309 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002465{
2466 yyval.a_value = asn1p_value_fromint(0);
2467 checkmem(yyval.a_value);
2468 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2469 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2470 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2471 ;
2472 break;}
vlm931aeed2005-08-12 10:09:10 +00002473case 129:
2474#line 1316 "asn1p_y.y"
vlmd30bc6c2005-03-24 16:27:02 +00002475{ asn1p_lexer_hack_push_opaque_state(); ;
vlm6a02a8a2004-09-08 00:28:11 +00002476 break;}
vlm931aeed2005-08-12 10:09:10 +00002477case 130:
2478#line 1316 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002479{
vlmfa67ddc2004-06-03 03:38:44 +00002480 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2481 checkmem(yyval.a_value);
2482 yyval.a_value->type = ATV_UNPARSED;
vlm6a02a8a2004-09-08 00:28:11 +00002483 ;
2484 break;}
vlm931aeed2005-08-12 10:09:10 +00002485case 131:
2486#line 1321 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002487{
2488 yyval.a_value = asn1p_value_fromint(0);
2489 checkmem(yyval.a_value);
2490 yyval.a_value->type = ATV_NULL;
2491 ;
2492 break;}
vlm931aeed2005-08-12 10:09:10 +00002493case 132:
2494#line 1326 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002495{
2496 yyval.a_value = asn1p_value_fromint(0);
2497 checkmem(yyval.a_value);
2498 yyval.a_value->type = ATV_FALSE;
2499 ;
2500 break;}
vlm931aeed2005-08-12 10:09:10 +00002501case 133:
2502#line 1331 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002503{
2504 yyval.a_value = asn1p_value_fromint(0);
2505 checkmem(yyval.a_value);
2506 yyval.a_value->type = ATV_TRUE;
2507 ;
2508 break;}
vlm931aeed2005-08-12 10:09:10 +00002509case 134:
2510#line 1336 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002511{
vlmfa67ddc2004-06-03 03:38:44 +00002512 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2513 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002514 ;
2515 break;}
vlm931aeed2005-08-12 10:09:10 +00002516case 135:
2517#line 1340 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002518{
vlmfa67ddc2004-06-03 03:38:44 +00002519 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2520 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002521 ;
2522 break;}
vlm931aeed2005-08-12 10:09:10 +00002523case 136:
2524#line 1344 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002525{
vlme1e6ed82005-03-24 14:26:38 +00002526 yyval.a_value = yyval.a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002527 ;
2528 break;}
vlm7388db02005-03-31 21:48:13 +00002529case 137:
vlm931aeed2005-08-12 10:09:10 +00002530#line 1347 "asn1p_y.y"
2531{
2532 yyval.a_value = yyvsp[0].a_value;
2533 ;
2534 break;}
2535case 138:
2536#line 1350 "asn1p_y.y"
2537{
2538 yyval.a_value = yyvsp[0].a_value;
2539 ;
2540 break;}
2541case 139:
2542#line 1356 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00002543{
vlmfa67ddc2004-06-03 03:38:44 +00002544 asn1p_ref_t *ref;
2545 int ret;
2546 ref = asn1p_ref_new(yylineno);
2547 checkmem(ref);
2548 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2549 checkmem(ret == 0);
2550 yyval.a_value = asn1p_value_fromref(ref, 0);
2551 checkmem(yyval.a_value);
2552 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002553 ;
2554 break;}
vlm931aeed2005-08-12 10:09:10 +00002555case 140:
2556#line 1367 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002557{
vlmfa67ddc2004-06-03 03:38:44 +00002558 asn1p_ref_t *ref;
2559 int ret;
2560 ref = asn1p_ref_new(yylineno);
2561 checkmem(ref);
2562 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2563 checkmem(ret == 0);
2564 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2565 checkmem(ret == 0);
2566 yyval.a_value = asn1p_value_fromref(ref, 0);
2567 checkmem(yyval.a_value);
2568 free(yyvsp[-2].tv_str);
2569 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002570 ;
2571 break;}
vlm931aeed2005-08-12 10:09:10 +00002572case 141:
2573#line 1385 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002574{
2575 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2576 checkmem(yyval.a_value);
2577 ;
2578 break;}
vlm931aeed2005-08-12 10:09:10 +00002579case 142:
2580#line 1389 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002581{
vlm2c8c44d2005-03-24 16:22:35 +00002582 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
vlme1e6ed82005-03-24 14:26:38 +00002583 checkmem(yyval.a_value);
2584 yyval.a_value->type = ATV_TUPLE;
2585 ;
2586 break;}
vlm931aeed2005-08-12 10:09:10 +00002587case 143:
2588#line 1394 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002589{
vlm2c8c44d2005-03-24 16:22:35 +00002590 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
vlme1e6ed82005-03-24 14:26:38 +00002591 checkmem(yyval.a_value);
2592 yyval.a_value->type = ATV_QUADRUPLE;
2593 ;
2594 break;}
vlm931aeed2005-08-12 10:09:10 +00002595case 144:
2596#line 1428 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002597{
vlm6611add2005-03-20 14:28:32 +00002598 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
vlmfa67ddc2004-06-03 03:38:44 +00002599 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2600 checkmem(yyval.tv_opaque.buf);
2601 yyval.tv_opaque.buf[0] = '{';
vlm6611add2005-03-20 14:28:32 +00002602 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
vlmfa67ddc2004-06-03 03:38:44 +00002603 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2604 free(yyvsp[0].tv_opaque.buf);
vlm6a02a8a2004-09-08 00:28:11 +00002605 ;
2606 break;}
vlm931aeed2005-08-12 10:09:10 +00002607case 145:
2608#line 1437 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002609{
vlmfa67ddc2004-06-03 03:38:44 +00002610 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2611 char *p = malloc(newsize + 1);
2612 checkmem(p);
2613 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2614 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2615 p[newsize] = '\0';
2616 free(yyvsp[-1].tv_opaque.buf);
2617 free(yyvsp[0].tv_opaque.buf);
2618 yyval.tv_opaque.buf = p;
2619 yyval.tv_opaque.len = newsize;
vlm6a02a8a2004-09-08 00:28:11 +00002620 ;
2621 break;}
vlm931aeed2005-08-12 10:09:10 +00002622case 146:
2623#line 1452 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002624{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2625 break;}
vlm931aeed2005-08-12 10:09:10 +00002626case 147:
2627#line 1453 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002628{ yyval.a_type = ASN_BASIC_NULL; ;
2629 break;}
vlm931aeed2005-08-12 10:09:10 +00002630case 148:
2631#line 1454 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002632{ yyval.a_type = ASN_BASIC_REAL; ;
2633 break;}
vlm7388db02005-03-31 21:48:13 +00002634case 149:
vlm931aeed2005-08-12 10:09:10 +00002635#line 1455 "asn1p_y.y"
2636{ yyval.a_type = yyvsp[0].a_type; ;
vlm6a02a8a2004-09-08 00:28:11 +00002637 break;}
vlm7388db02005-03-31 21:48:13 +00002638case 150:
vlm931aeed2005-08-12 10:09:10 +00002639#line 1456 "asn1p_y.y"
2640{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
vlm6a02a8a2004-09-08 00:28:11 +00002641 break;}
vlm7388db02005-03-31 21:48:13 +00002642case 151:
vlm931aeed2005-08-12 10:09:10 +00002643#line 1457 "asn1p_y.y"
2644{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
vlm6a02a8a2004-09-08 00:28:11 +00002645 break;}
vlm7388db02005-03-31 21:48:13 +00002646case 152:
vlm931aeed2005-08-12 10:09:10 +00002647#line 1458 "asn1p_y.y"
2648{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
vlm6a02a8a2004-09-08 00:28:11 +00002649 break;}
vlm7388db02005-03-31 21:48:13 +00002650case 153:
vlm931aeed2005-08-12 10:09:10 +00002651#line 1459 "asn1p_y.y"
2652{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
vlm5e2c4b92005-03-20 11:12:40 +00002653 break;}
vlm7388db02005-03-31 21:48:13 +00002654case 154:
vlm931aeed2005-08-12 10:09:10 +00002655#line 1460 "asn1p_y.y"
2656{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
vlm6a02a8a2004-09-08 00:28:11 +00002657 break;}
vlm7388db02005-03-31 21:48:13 +00002658case 155:
vlm931aeed2005-08-12 10:09:10 +00002659#line 1461 "asn1p_y.y"
2660{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
vlm6a02a8a2004-09-08 00:28:11 +00002661 break;}
vlm7388db02005-03-31 21:48:13 +00002662case 156:
vlm931aeed2005-08-12 10:09:10 +00002663#line 1462 "asn1p_y.y"
2664{ yyval.a_type = ASN_BASIC_UTCTime; ;
vlm6a02a8a2004-09-08 00:28:11 +00002665 break;}
vlm7388db02005-03-31 21:48:13 +00002666case 157:
vlm931aeed2005-08-12 10:09:10 +00002667#line 1463 "asn1p_y.y"
2668{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
vlme1e6ed82005-03-24 14:26:38 +00002669 break;}
vlm7388db02005-03-31 21:48:13 +00002670case 158:
vlm931aeed2005-08-12 10:09:10 +00002671#line 1464 "asn1p_y.y"
2672{ yyval.a_type = yyvsp[0].a_type; ;
vlme1e6ed82005-03-24 14:26:38 +00002673 break;}
vlm7388db02005-03-31 21:48:13 +00002674case 159:
vlm931aeed2005-08-12 10:09:10 +00002675#line 1471 "asn1p_y.y"
2676{ yyval.a_type = ASN_BASIC_INTEGER; ;
vlme1e6ed82005-03-24 14:26:38 +00002677 break;}
vlm7388db02005-03-31 21:48:13 +00002678case 160:
vlm931aeed2005-08-12 10:09:10 +00002679#line 1472 "asn1p_y.y"
2680{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2681 break;}
2682case 161:
2683#line 1473 "asn1p_y.y"
2684{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2685 break;}
2686case 162:
2687#line 1477 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002688{
vlm39e5ed72004-09-05 10:40:41 +00002689 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002690 checkmem(yyval.a_expr);
2691 yyval.a_expr->expr_type = yyvsp[0].a_type;
2692 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002693 ;
2694 break;}
vlm931aeed2005-08-12 10:09:10 +00002695case 163:
2696#line 1483 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002697{
vlmfa67ddc2004-06-03 03:38:44 +00002698 if(yyvsp[0].a_expr) {
2699 yyval.a_expr = yyvsp[0].a_expr;
2700 } else {
vlm39e5ed72004-09-05 10:40:41 +00002701 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002702 checkmem(yyval.a_expr);
2703 }
2704 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2705 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002706 ;
2707 break;}
vlm931aeed2005-08-12 10:09:10 +00002708case 164:
2709#line 1496 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002710{ yyval.a_type = ASN_STRING_BMPString; ;
2711 break;}
vlm931aeed2005-08-12 10:09:10 +00002712case 165:
2713#line 1497 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002714{
vlmfa67ddc2004-06-03 03:38:44 +00002715 yyval.a_type = ASN_STRING_GeneralString;
vlmc94e28f2004-09-15 11:59:51 +00002716 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002717 ;
2718 break;}
vlm931aeed2005-08-12 10:09:10 +00002719case 166:
2720#line 1501 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002721{
vlmc94e28f2004-09-15 11:59:51 +00002722 yyval.a_type = ASN_STRING_GraphicString;
2723 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002724 ;
2725 break;}
vlm931aeed2005-08-12 10:09:10 +00002726case 167:
2727#line 1505 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002728{ yyval.a_type = ASN_STRING_IA5String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002729 break;}
vlm931aeed2005-08-12 10:09:10 +00002730case 168:
2731#line 1506 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002732{ yyval.a_type = ASN_STRING_ISO646String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002733 break;}
vlm931aeed2005-08-12 10:09:10 +00002734case 169:
2735#line 1507 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002736{ yyval.a_type = ASN_STRING_NumericString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002737 break;}
vlm931aeed2005-08-12 10:09:10 +00002738case 170:
2739#line 1508 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002740{ yyval.a_type = ASN_STRING_PrintableString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002741 break;}
vlm931aeed2005-08-12 10:09:10 +00002742case 171:
2743#line 1509 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002744{
2745 yyval.a_type = ASN_STRING_T61String;
2746 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2747 ;
vlm6a02a8a2004-09-08 00:28:11 +00002748 break;}
vlm931aeed2005-08-12 10:09:10 +00002749case 172:
2750#line 1513 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002751{ yyval.a_type = ASN_STRING_TeletexString; ;
2752 break;}
vlm931aeed2005-08-12 10:09:10 +00002753case 173:
2754#line 1514 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002755{ yyval.a_type = ASN_STRING_UniversalString; ;
2756 break;}
vlm931aeed2005-08-12 10:09:10 +00002757case 174:
2758#line 1515 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002759{ yyval.a_type = ASN_STRING_UTF8String; ;
2760 break;}
vlm931aeed2005-08-12 10:09:10 +00002761case 175:
2762#line 1516 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002763{
2764 yyval.a_type = ASN_STRING_VideotexString;
2765 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2766 ;
2767 break;}
vlm931aeed2005-08-12 10:09:10 +00002768case 176:
2769#line 1520 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002770{ yyval.a_type = ASN_STRING_VisibleString; ;
2771 break;}
vlm931aeed2005-08-12 10:09:10 +00002772case 177:
2773#line 1521 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002774{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2775 break;}
vlm931aeed2005-08-12 10:09:10 +00002776case 183:
2777#line 1533 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002778{ yyval.a_constr = 0; ;
2779 break;}
vlm931aeed2005-08-12 10:09:10 +00002780case 184:
2781#line 1534 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002782{
vlm39e5ed72004-09-05 10:40:41 +00002783 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002784 ;
2785 break;}
vlm931aeed2005-08-12 10:09:10 +00002786case 185:
2787#line 1540 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002788{
vlm39e5ed72004-09-05 10:40:41 +00002789 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002790 ;
2791 break;}
vlm931aeed2005-08-12 10:09:10 +00002792case 186:
2793#line 1543 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002794{
vlmfa67ddc2004-06-03 03:38:44 +00002795 /*
2796 * This is a special case, for compatibility purposes.
vlm9283dbe2004-08-18 04:59:12 +00002797 * It goes without parentheses.
vlmfa67ddc2004-06-03 03:38:44 +00002798 */
vlm5f0128b2004-08-20 13:25:29 +00002799 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002800 ;
2801 break;}
vlm931aeed2005-08-12 10:09:10 +00002802case 187:
2803#line 1553 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002804{
vlmfa67ddc2004-06-03 03:38:44 +00002805 yyval.a_constr = yyvsp[-1].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002806 ;
2807 break;}
vlm931aeed2005-08-12 10:09:10 +00002808case 188:
2809#line 1556 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002810{
vlm9283dbe2004-08-18 04:59:12 +00002811 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002812 ;
2813 break;}
vlm931aeed2005-08-12 10:09:10 +00002814case 189:
2815#line 1562 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002816{
vlmfa67ddc2004-06-03 03:38:44 +00002817 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002818 ;
2819 break;}
vlm931aeed2005-08-12 10:09:10 +00002820case 190:
2821#line 1565 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002822{
vlmfa67ddc2004-06-03 03:38:44 +00002823 asn1p_constraint_t *ct;
2824 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002825 ct->type = ACT_EL_EXT;
2826 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00002827 ;
2828 break;}
vlm931aeed2005-08-12 10:09:10 +00002829case 191:
2830#line 1571 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002831{
vlmfa67ddc2004-06-03 03:38:44 +00002832 asn1p_constraint_t *ct;
2833 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002834 ct->type = ACT_EL_EXT;
2835 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
vlm6f5eb0b2004-08-13 12:35:09 +00002836 ct = yyval.a_constr;
2837 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002838 ;
2839 break;}
vlm931aeed2005-08-12 10:09:10 +00002840case 192:
2841#line 1582 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002842{
vlm9283dbe2004-08-18 04:59:12 +00002843 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002844 ;
2845 break;}
vlm931aeed2005-08-12 10:09:10 +00002846case 193:
2847#line 1585 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002848{
2849 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2850 ;
2851 break;}
vlm931aeed2005-08-12 10:09:10 +00002852case 194:
2853#line 1588 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002854{
vlmfa67ddc2004-06-03 03:38:44 +00002855 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002856 ;
2857 break;}
vlm931aeed2005-08-12 10:09:10 +00002858case 195:
2859#line 1591 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002860{
vlmfa67ddc2004-06-03 03:38:44 +00002861 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002862 ;
2863 break;}
vlm931aeed2005-08-12 10:09:10 +00002864case 196:
2865#line 1594 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002866{
vlmfa67ddc2004-06-03 03:38:44 +00002867 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002868 ;
2869 break;}
vlm931aeed2005-08-12 10:09:10 +00002870case 197:
2871#line 1600 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002872{
vlmfa67ddc2004-06-03 03:38:44 +00002873 int ret;
2874 yyval.a_constr = asn1p_constraint_new(yylineno);
2875 checkmem(yyval.a_constr);
2876 yyval.a_constr->type = yyvsp[-3].a_ctype;
2877 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2878 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002879 ;
2880 break;}
vlm931aeed2005-08-12 10:09:10 +00002881case 198:
2882#line 1608 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002883{
vlm9283dbe2004-08-18 04:59:12 +00002884 int ret;
2885 yyval.a_constr = asn1p_constraint_new(yylineno);
2886 checkmem(yyval.a_constr);
2887 yyval.a_constr->type = ACT_CA_SET;
2888 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2889 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002890 ;
2891 break;}
vlm931aeed2005-08-12 10:09:10 +00002892case 199:
2893#line 1616 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002894{
vlm9283dbe2004-08-18 04:59:12 +00002895 yyval.a_constr = asn1p_constraint_new(yylineno);
2896 checkmem(yyval.a_constr);
2897 yyval.a_constr->type = ACT_EL_VALUE;
2898 yyval.a_constr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002899 ;
2900 break;}
vlm931aeed2005-08-12 10:09:10 +00002901case 200:
2902#line 1622 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002903{
vlm0aa86902004-10-12 23:26:53 +00002904 yyval.a_constr = asn1p_constraint_new(yylineno);
2905 checkmem(yyval.a_constr);
vlma6a12e32005-03-20 12:58:00 +00002906 yyval.a_constr->type = ACT_EL_TYPE;
2907 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
vlmc94e28f2004-09-15 11:59:51 +00002908 ;
2909 break;}
vlm7388db02005-03-31 21:48:13 +00002910case 201:
vlm931aeed2005-08-12 10:09:10 +00002911#line 1628 "asn1p_y.y"
vlm7388db02005-03-31 21:48:13 +00002912{
2913 yyval.a_constr = asn1p_constraint_new(yylineno);
2914 checkmem(yyval.a_constr);
2915 yyval.a_constr->type = yyvsp[-1].a_ctype;
2916 yyval.a_constr->range_start = yyvsp[-2].a_value;
vlm931aeed2005-08-12 10:09:10 +00002917 yyval.a_constr->range_stop = yyvsp[0].a_value;
vlm7388db02005-03-31 21:48:13 +00002918 ;
2919 break;}
2920case 202:
vlm931aeed2005-08-12 10:09:10 +00002921#line 1635 "asn1p_y.y"
2922{
2923 yyval.a_constr = asn1p_constraint_new(yylineno);
2924 checkmem(yyval.a_constr);
2925 yyval.a_constr->type = yyvsp[-1].a_ctype;
2926 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2927 yyval.a_constr->range_stop = yyvsp[0].a_value;
2928 yyval.a_constr->range_start->type = ATV_MIN;
2929 ;
2930 break;}
2931case 203:
2932#line 1643 "asn1p_y.y"
2933{
2934 yyval.a_constr = asn1p_constraint_new(yylineno);
2935 checkmem(yyval.a_constr);
2936 yyval.a_constr->type = yyvsp[-1].a_ctype;
2937 yyval.a_constr->range_start = yyvsp[-2].a_value;
2938 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2939 yyval.a_constr->range_stop->type = ATV_MAX;
2940 ;
2941 break;}
2942case 204:
2943#line 1651 "asn1p_y.y"
vlm7388db02005-03-31 21:48:13 +00002944{
2945 yyval.a_constr = asn1p_constraint_new(yylineno);
2946 checkmem(yyval.a_constr);
2947 yyval.a_constr->type = yyvsp[-1].a_ctype;
2948 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2949 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2950 yyval.a_constr->range_start->type = ATV_MIN;
2951 yyval.a_constr->range_stop->type = ATV_MAX;
2952 ;
2953 break;}
vlm0aa86902004-10-12 23:26:53 +00002954case 205:
vlm931aeed2005-08-12 10:09:10 +00002955#line 1660 "asn1p_y.y"
2956{
2957 yyval.a_constr = yyvsp[0].a_constr;
2958 ;
vlm0aa86902004-10-12 23:26:53 +00002959 break;}
vlm7388db02005-03-31 21:48:13 +00002960case 206:
vlm931aeed2005-08-12 10:09:10 +00002961#line 1663 "asn1p_y.y"
2962{
2963 yyval.a_constr = yyvsp[0].a_constr;
2964 ;
2965 break;}
2966case 207:
2967#line 1667 "asn1p_y.y"
2968{ asn1p_lexer_hack_push_opaque_state(); ;
2969 break;}
2970case 208:
2971#line 1667 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00002972{
2973 yyval.a_constr = asn1p_constraint_new(yylineno);
2974 checkmem(yyval.a_constr);
2975 yyval.a_constr->type = ACT_CT_CTDBY;
2976 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2977 checkmem(yyval.a_constr->value);
2978 yyval.a_constr->value->type = ATV_UNPARSED;
2979 ;
vlm0aa86902004-10-12 23:26:53 +00002980 break;}
vlm931aeed2005-08-12 10:09:10 +00002981case 209:
2982#line 1678 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00002983{ yyval.a_ctype = ACT_EL_RANGE; ;
vlm4053ca52005-02-18 16:34:21 +00002984 break;}
vlm931aeed2005-08-12 10:09:10 +00002985case 210:
2986#line 1679 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00002987{ yyval.a_ctype = ACT_EL_RLRANGE; ;
vlma6a12e32005-03-20 12:58:00 +00002988 break;}
vlm931aeed2005-08-12 10:09:10 +00002989case 211:
2990#line 1680 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00002991{ yyval.a_ctype = ACT_EL_LLRANGE; ;
2992 break;}
vlm931aeed2005-08-12 10:09:10 +00002993case 212:
2994#line 1681 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00002995{ yyval.a_ctype = ACT_EL_ULRANGE; ;
2996 break;}
vlm931aeed2005-08-12 10:09:10 +00002997case 213:
2998#line 1685 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002999{
vlm39e5ed72004-09-05 10:40:41 +00003000 yyval.a_ctype = ACT_CT_SIZE;
vlm6a02a8a2004-09-08 00:28:11 +00003001 ;
3002 break;}
vlm931aeed2005-08-12 10:09:10 +00003003case 214:
3004#line 1688 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003005{
vlm39e5ed72004-09-05 10:40:41 +00003006 yyval.a_ctype = ACT_CT_FROM;
vlm6a02a8a2004-09-08 00:28:11 +00003007 ;
3008 break;}
vlm931aeed2005-08-12 10:09:10 +00003009case 215:
3010#line 1694 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003011{
3012 yyval.a_value = asn1p_value_fromint(0);
3013 checkmem(yyval.a_value);
3014 yyval.a_value->type = ATV_FALSE;
3015 ;
3016 break;}
vlm931aeed2005-08-12 10:09:10 +00003017case 216:
3018#line 1699 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003019{
3020 yyval.a_value = asn1p_value_fromint(1);
3021 checkmem(yyval.a_value);
3022 yyval.a_value->type = ATV_TRUE;
3023 ;
3024 break;}
vlm7388db02005-03-31 21:48:13 +00003025case 217:
vlm931aeed2005-08-12 10:09:10 +00003026#line 1704 "asn1p_y.y"
3027{
3028 yyval.a_value = yyvsp[0].a_value;
3029 ;
3030 break;}
3031case 218:
3032#line 1707 "asn1p_y.y"
3033{
3034 yyval.a_value = yyvsp[0].a_value;
3035 ;
3036 break;}
3037case 219:
3038#line 1710 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003039{
vlmfa67ddc2004-06-03 03:38:44 +00003040 asn1p_ref_t *ref;
3041 int ret;
3042 ref = asn1p_ref_new(yylineno);
3043 checkmem(ref);
3044 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3045 checkmem(ret == 0);
3046 yyval.a_value = asn1p_value_fromref(ref, 0);
3047 checkmem(yyval.a_value);
3048 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003049 ;
3050 break;}
vlm931aeed2005-08-12 10:09:10 +00003051case 220:
3052#line 1724 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003053{
vlm4053ca52005-02-18 16:34:21 +00003054 asn1p_ref_t *ref;
3055 int ret;
3056 ref = asn1p_ref_new(yylineno);
3057 checkmem(ref);
3058 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3059 checkmem(ret == 0);
3060 yyval.a_value = asn1p_value_fromref(ref, 0);
vlmfa67ddc2004-06-03 03:38:44 +00003061 checkmem(yyval.a_value);
vlm4053ca52005-02-18 16:34:21 +00003062 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003063 ;
3064 break;}
vlm931aeed2005-08-12 10:09:10 +00003065case 221:
3066#line 1738 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003067{
vlm7bbdc9f2005-03-28 15:01:27 +00003068 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003069 ;
3070 break;}
vlm931aeed2005-08-12 10:09:10 +00003071case 222:
3072#line 1741 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003073{
vlm7bbdc9f2005-03-28 15:01:27 +00003074 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003075 ;
3076 break;}
vlm931aeed2005-08-12 10:09:10 +00003077case 223:
3078#line 1747 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003079{
vlm7bbdc9f2005-03-28 15:01:27 +00003080 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00003081 ;
3082 break;}
vlm931aeed2005-08-12 10:09:10 +00003083case 224:
3084#line 1750 "asn1p_y.y"
vlm7bbdc9f2005-03-28 15:01:27 +00003085{
3086 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3087 ;
3088 break;}
vlm931aeed2005-08-12 10:09:10 +00003089case 225:
3090#line 1756 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003091{
vlmfa67ddc2004-06-03 03:38:44 +00003092 yyval.a_constr = asn1p_constraint_new(yylineno);
3093 checkmem(yyval.a_constr);
3094 yyval.a_constr->type = ACT_EL_EXT;
vlm7bbdc9f2005-03-28 15:01:27 +00003095 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003096 ;
3097 break;}
vlm931aeed2005-08-12 10:09:10 +00003098case 226:
3099#line 1762 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003100{
vlmfa67ddc2004-06-03 03:38:44 +00003101 yyval.a_constr = asn1p_constraint_new(yylineno);
3102 checkmem(yyval.a_constr);
3103 yyval.a_constr->type = ACT_EL_VALUE;
3104 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3105 yyval.a_constr->presence = yyvsp[0].a_pres;
vlm7bbdc9f2005-03-28 15:01:27 +00003106 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003107 ;
3108 break;}
vlm931aeed2005-08-12 10:09:10 +00003109case 227:
3110#line 1776 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003111{ yyval.a_pres = ACPRES_DEFAULT; ;
3112 break;}
vlm931aeed2005-08-12 10:09:10 +00003113case 228:
3114#line 1777 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003115{ yyval.a_pres = yyvsp[0].a_pres; ;
3116 break;}
vlm931aeed2005-08-12 10:09:10 +00003117case 229:
3118#line 1781 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003119{
vlmfa67ddc2004-06-03 03:38:44 +00003120 yyval.a_pres = ACPRES_PRESENT;
vlm6a02a8a2004-09-08 00:28:11 +00003121 ;
3122 break;}
vlm931aeed2005-08-12 10:09:10 +00003123case 230:
3124#line 1784 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003125{
vlmfa67ddc2004-06-03 03:38:44 +00003126 yyval.a_pres = ACPRES_ABSENT;
vlm6a02a8a2004-09-08 00:28:11 +00003127 ;
3128 break;}
vlm931aeed2005-08-12 10:09:10 +00003129case 231:
3130#line 1787 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003131{
vlmfa67ddc2004-06-03 03:38:44 +00003132 yyval.a_pres = ACPRES_OPTIONAL;
vlm6a02a8a2004-09-08 00:28:11 +00003133 ;
3134 break;}
vlm7388db02005-03-31 21:48:13 +00003135case 232:
vlm931aeed2005-08-12 10:09:10 +00003136#line 1793 "asn1p_y.y"
3137{
3138 yyval.a_constr = yyvsp[0].a_constr;
3139 ;
3140 break;}
3141case 233:
3142#line 1796 "asn1p_y.y"
3143{
3144 yyval.a_constr = yyvsp[0].a_constr;
3145 ;
3146 break;}
3147case 234:
3148#line 1805 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003149{
vlmfa67ddc2004-06-03 03:38:44 +00003150 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3151 asn1p_constraint_t *ct;
3152 int ret;
3153 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3154 checkmem(ret == 0);
3155 ct = asn1p_constraint_new(yylineno);
3156 checkmem(yyval.a_constr);
3157 ct->type = ACT_EL_VALUE;
3158 ct->value = asn1p_value_fromref(ref, 0);
3159 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003160 ;
3161 break;}
vlm931aeed2005-08-12 10:09:10 +00003162case 235:
3163#line 1820 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003164{
vlmfa67ddc2004-06-03 03:38:44 +00003165 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003166 ;
3167 break;}
vlm931aeed2005-08-12 10:09:10 +00003168case 236:
3169#line 1826 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003170{
vlmfa67ddc2004-06-03 03:38:44 +00003171 yyval.a_constr = asn1p_constraint_new(yylineno);
3172 checkmem(yyval.a_constr);
3173 yyval.a_constr->type = ACT_EL_VALUE;
3174 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003175 ;
3176 break;}
vlm931aeed2005-08-12 10:09:10 +00003177case 237:
3178#line 1832 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003179{
vlmfa67ddc2004-06-03 03:38:44 +00003180 asn1p_constraint_t *ct;
3181 ct = asn1p_constraint_new(yylineno);
3182 checkmem(ct);
3183 ct->type = ACT_EL_VALUE;
3184 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3185 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00003186 ;
3187 break;}
vlm931aeed2005-08-12 10:09:10 +00003188case 238:
3189#line 1846 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003190{
vlmfa67ddc2004-06-03 03:38:44 +00003191 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3192 int ret;
3193 *p = '@';
3194 strcpy(p + 1, yyvsp[0].tv_str);
3195 yyval.a_ref = asn1p_ref_new(yylineno);
3196 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3197 checkmem(ret == 0);
3198 free(p);
3199 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003200 ;
3201 break;}
vlm931aeed2005-08-12 10:09:10 +00003202case 239:
3203#line 1857 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003204{
vlmfa67ddc2004-06-03 03:38:44 +00003205 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3206 int ret;
3207 p[0] = '@';
3208 p[1] = '.';
3209 strcpy(p + 2, yyvsp[0].tv_str);
3210 yyval.a_ref = asn1p_ref_new(yylineno);
3211 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3212 checkmem(ret == 0);
3213 free(p);
3214 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003215 ;
3216 break;}
vlm931aeed2005-08-12 10:09:10 +00003217case 240:
3218#line 1873 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003219{
vlmfa67ddc2004-06-03 03:38:44 +00003220 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003221 ;
3222 break;}
vlm931aeed2005-08-12 10:09:10 +00003223case 241:
3224#line 1876 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003225{
vlmfa67ddc2004-06-03 03:38:44 +00003226 int l1 = strlen(yyvsp[-2].tv_str);
3227 int l3 = strlen(yyvsp[0].tv_str);
3228 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3229 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3230 yyval.tv_str[l1] = '.';
3231 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3232 yyval.tv_str[l1 + 1 + l3] = '\0';
vlm6a02a8a2004-09-08 00:28:11 +00003233 ;
3234 break;}
vlm931aeed2005-08-12 10:09:10 +00003235case 242:
3236#line 1894 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003237{
vlmc94e28f2004-09-15 11:59:51 +00003238 yyval.a_marker.flags = EM_NOMARK;
3239 yyval.a_marker.default_value = 0;
vlm6a02a8a2004-09-08 00:28:11 +00003240 ;
3241 break;}
vlm931aeed2005-08-12 10:09:10 +00003242case 243:
3243#line 1898 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003244{ yyval.a_marker = yyvsp[0].a_marker; ;
vlma2374a02004-09-14 02:44:07 +00003245 break;}
vlm931aeed2005-08-12 10:09:10 +00003246case 244:
3247#line 1902 "asn1p_y.y"
vlma2374a02004-09-14 02:44:07 +00003248{
vlmc94e28f2004-09-15 11:59:51 +00003249 yyval.a_marker.flags = EM_OPTIONAL;
3250 yyval.a_marker.default_value = 0;
vlma2374a02004-09-14 02:44:07 +00003251 ;
3252 break;}
vlm931aeed2005-08-12 10:09:10 +00003253case 245:
3254#line 1906 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003255{
3256 yyval.a_marker.flags = EM_DEFAULT;
3257 yyval.a_marker.default_value = yyvsp[0].a_value;
3258 ;
3259 break;}
vlm931aeed2005-08-12 10:09:10 +00003260case 246:
3261#line 1929 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003262{
vlm39e5ed72004-09-05 10:40:41 +00003263 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003264 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003265 ;
3266 break;}
vlm931aeed2005-08-12 10:09:10 +00003267case 247:
3268#line 1933 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003269{
vlm7bbdc9f2005-03-28 15:01:27 +00003270 yyval.a_expr = yyvsp[-1].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00003271 ;
3272 break;}
vlm931aeed2005-08-12 10:09:10 +00003273case 248:
3274#line 1939 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003275{
vlm7bbdc9f2005-03-28 15:01:27 +00003276 yyval.a_expr = asn1p_expr_new(yylineno);
3277 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003278 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3279 ;
3280 break;}
vlm931aeed2005-08-12 10:09:10 +00003281case 249:
3282#line 1944 "asn1p_y.y"
vlm7bbdc9f2005-03-28 15:01:27 +00003283{
3284 yyval.a_expr = yyvsp[-2].a_expr;
3285 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3286 ;
3287 break;}
vlm931aeed2005-08-12 10:09:10 +00003288case 250:
3289#line 1951 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003290{
vlm39e5ed72004-09-05 10:40:41 +00003291 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003292 checkmem(yyval.a_expr);
3293 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3294 yyval.a_expr->meta_type = AMT_VALUE;
3295 yyval.a_expr->Identifier = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003296 ;
3297 break;}
vlm7388db02005-03-31 21:48:13 +00003298case 251:
vlm931aeed2005-08-12 10:09:10 +00003299#line 1958 "asn1p_y.y"
3300{
3301 yyval.a_expr = asn1p_expr_new(yylineno);
3302 checkmem(yyval.a_expr);
3303 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3304 yyval.a_expr->meta_type = AMT_VALUE;
3305 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3306 yyval.a_expr->value = yyvsp[-1].a_value;
3307 ;
3308 break;}
3309case 252:
3310#line 1966 "asn1p_y.y"
3311{
3312 yyval.a_expr = asn1p_expr_new(yylineno);
3313 checkmem(yyval.a_expr);
3314 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3315 yyval.a_expr->meta_type = AMT_VALUE;
3316 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3317 yyval.a_expr->value = yyvsp[-1].a_value;
3318 ;
3319 break;}
3320case 253:
3321#line 1974 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003322{
3323 yyval.a_expr = asn1p_expr_new(yylineno);
3324 checkmem(yyval.a_expr);
3325 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3326 yyval.a_expr->meta_type = AMT_VALUE;
vlmfa67ddc2004-06-03 03:38:44 +00003327 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00003328 ;
3329 break;}
vlm931aeed2005-08-12 10:09:10 +00003330case 254:
3331#line 1981 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003332{
vlm39e5ed72004-09-05 10:40:41 +00003333 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003334 checkmem(yyval.a_expr);
3335 yyval.a_expr->Identifier = strdup("...");
3336 checkmem(yyval.a_expr->Identifier);
3337 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3338 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00003339 ;
3340 break;}
vlm7388db02005-03-31 21:48:13 +00003341case 255:
vlm931aeed2005-08-12 10:09:10 +00003342#line 1992 "asn1p_y.y"
3343{
3344 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3345 checkmem(yyval.a_value);
3346 ;
vlm6611add2005-03-20 14:28:32 +00003347 break;}
vlm7388db02005-03-31 21:48:13 +00003348case 256:
vlm931aeed2005-08-12 10:09:10 +00003349#line 1996 "asn1p_y.y"
3350{
3351 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3352 checkmem(yyval.a_value);
3353 ;
vlm7bbdc9f2005-03-28 15:01:27 +00003354 break;}
vlm7388db02005-03-31 21:48:13 +00003355case 257:
vlm931aeed2005-08-12 10:09:10 +00003356#line 2027 "asn1p_y.y"
3357{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3358 break;}
3359case 258:
3360#line 2028 "asn1p_y.y"
3361{ yyval.a_tag = yyvsp[0].a_tag; ;
3362 break;}
3363case 259:
3364#line 2032 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003365{
vlm2728a8d2005-01-23 09:51:44 +00003366 yyval.a_tag = yyvsp[-1].a_tag;
3367 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
vlm6a02a8a2004-09-08 00:28:11 +00003368 ;
3369 break;}
vlm931aeed2005-08-12 10:09:10 +00003370case 260:
3371#line 2039 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003372{
vlm2728a8d2005-01-23 09:51:44 +00003373 yyval.a_tag = yyvsp[-2].a_tag;
3374 yyval.a_tag.tag_value = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00003375 ;
3376 break;}
vlm931aeed2005-08-12 10:09:10 +00003377case 261:
3378#line 2045 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003379{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
vlm6a02a8a2004-09-08 00:28:11 +00003380 break;}
vlm931aeed2005-08-12 10:09:10 +00003381case 262:
3382#line 2046 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003383{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
vlm151c0b22004-09-22 16:03:36 +00003384 break;}
vlm931aeed2005-08-12 10:09:10 +00003385case 263:
3386#line 2047 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003387{ yyval.a_tag.tag_class = TC_APPLICATION; ;
vlm0aa86902004-10-12 23:26:53 +00003388 break;}
vlm931aeed2005-08-12 10:09:10 +00003389case 264:
3390#line 2048 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003391{ yyval.a_tag.tag_class = TC_PRIVATE; ;
3392 break;}
vlm931aeed2005-08-12 10:09:10 +00003393case 265:
3394#line 2052 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003395{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3396 break;}
vlm931aeed2005-08-12 10:09:10 +00003397case 266:
3398#line 2053 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003399{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
vlm0aa86902004-10-12 23:26:53 +00003400 break;}
vlm931aeed2005-08-12 10:09:10 +00003401case 267:
3402#line 2054 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003403{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
vlm0aa86902004-10-12 23:26:53 +00003404 break;}
vlm7388db02005-03-31 21:48:13 +00003405case 268:
vlm931aeed2005-08-12 10:09:10 +00003406#line 2058 "asn1p_y.y"
vlm7bbdc9f2005-03-28 15:01:27 +00003407{
3408 checkmem(yyvsp[0].tv_str);
3409 yyval.tv_str = yyvsp[0].tv_str;
3410 ;
vlme1e6ed82005-03-24 14:26:38 +00003411 break;}
vlm7388db02005-03-31 21:48:13 +00003412case 269:
vlm931aeed2005-08-12 10:09:10 +00003413#line 2062 "asn1p_y.y"
3414{
3415 checkmem(yyvsp[0].tv_str);
3416 yyval.tv_str = yyvsp[0].tv_str;
3417 ;
vlm7bbdc9f2005-03-28 15:01:27 +00003418 break;}
vlm7388db02005-03-31 21:48:13 +00003419case 270:
vlm931aeed2005-08-12 10:09:10 +00003420#line 2070 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00003421{
vlm931aeed2005-08-12 10:09:10 +00003422 checkmem(yyvsp[0].tv_str);
vlme1e6ed82005-03-24 14:26:38 +00003423 yyval.tv_str = yyvsp[0].tv_str;
3424 ;
3425 break;}
vlm7388db02005-03-31 21:48:13 +00003426case 271:
vlm931aeed2005-08-12 10:09:10 +00003427#line 2077 "asn1p_y.y"
3428{ yyval.tv_str = 0; ;
3429 break;}
3430case 272:
3431#line 2078 "asn1p_y.y"
3432{
3433 yyval.tv_str = yyvsp[0].tv_str;
3434 ;
3435 break;}
3436case 273:
3437#line 2084 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003438{
vlm39e5ed72004-09-05 10:40:41 +00003439 checkmem(yyvsp[0].tv_str);
3440 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003441 ;
3442 break;}
vlm6a02a8a2004-09-08 00:28:11 +00003443}
3444 /* the action file gets copied in in place of this dollarsign */
3445#line 543 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00003446
3447 yyvsp -= yylen;
3448 yyssp -= yylen;
vlm6a02a8a2004-09-08 00:28:11 +00003449#ifdef YYLSP_NEEDED
3450 yylsp -= yylen;
3451#endif
vlmfa67ddc2004-06-03 03:38:44 +00003452
vlm6a02a8a2004-09-08 00:28:11 +00003453#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00003454 if (yydebug)
3455 {
vlm6a02a8a2004-09-08 00:28:11 +00003456 short *ssp1 = yyss - 1;
3457 fprintf (stderr, "state stack now");
3458 while (ssp1 != yyssp)
3459 fprintf (stderr, " %d", *++ssp1);
3460 fprintf (stderr, "\n");
vlmfa67ddc2004-06-03 03:38:44 +00003461 }
3462#endif
3463
3464 *++yyvsp = yyval;
3465
vlm6a02a8a2004-09-08 00:28:11 +00003466#ifdef YYLSP_NEEDED
3467 yylsp++;
3468 if (yylen == 0)
3469 {
3470 yylsp->first_line = yylloc.first_line;
3471 yylsp->first_column = yylloc.first_column;
3472 yylsp->last_line = (yylsp-1)->last_line;
3473 yylsp->last_column = (yylsp-1)->last_column;
3474 yylsp->text = 0;
3475 }
3476 else
3477 {
3478 yylsp->last_line = (yylsp+yylen-1)->last_line;
3479 yylsp->last_column = (yylsp+yylen-1)->last_column;
3480 }
3481#endif
vlmfa67ddc2004-06-03 03:38:44 +00003482
vlm6a02a8a2004-09-08 00:28:11 +00003483 /* Now "shift" the result of the reduction.
3484 Determine what state that goes to,
3485 based on the state we popped back to
3486 and the rule number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00003487
3488 yyn = yyr1[yyn];
3489
vlm6a02a8a2004-09-08 00:28:11 +00003490 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3491 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00003492 yystate = yytable[yystate];
3493 else
vlm6a02a8a2004-09-08 00:28:11 +00003494 yystate = yydefgoto[yyn - YYNTBASE];
vlmfa67ddc2004-06-03 03:38:44 +00003495
3496 goto yynewstate;
3497
vlm6a02a8a2004-09-08 00:28:11 +00003498yyerrlab: /* here on detecting error */
vlmfa67ddc2004-06-03 03:38:44 +00003499
vlm6a02a8a2004-09-08 00:28:11 +00003500 if (! yyerrstatus)
3501 /* If not already recovering from an error, report this error. */
vlmfa67ddc2004-06-03 03:38:44 +00003502 {
3503 ++yynerrs;
vlm6a02a8a2004-09-08 00:28:11 +00003504
3505#ifdef YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00003506 yyn = yypact[yystate];
3507
vlm6a02a8a2004-09-08 00:28:11 +00003508 if (yyn > YYFLAG && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00003509 {
vlm6a02a8a2004-09-08 00:28:11 +00003510 int size = 0;
3511 char *msg;
3512 int x, count;
vlmfa67ddc2004-06-03 03:38:44 +00003513
vlm6a02a8a2004-09-08 00:28:11 +00003514 count = 0;
3515 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3516 for (x = (yyn < 0 ? -yyn : 0);
vlm03630c52005-06-07 21:43:32 +00003517 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
vlm6a02a8a2004-09-08 00:28:11 +00003518 if (yycheck[x + yyn] == x)
3519 size += strlen(yytname[x]) + 15, count++;
3520 msg = (char *) malloc(size + 15);
3521 if (msg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00003522 {
vlm6a02a8a2004-09-08 00:28:11 +00003523 strcpy(msg, "parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003524
vlm6a02a8a2004-09-08 00:28:11 +00003525 if (count < 5)
vlmfa67ddc2004-06-03 03:38:44 +00003526 {
vlm6a02a8a2004-09-08 00:28:11 +00003527 count = 0;
3528 for (x = (yyn < 0 ? -yyn : 0);
vlm03630c52005-06-07 21:43:32 +00003529 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
vlm6a02a8a2004-09-08 00:28:11 +00003530 if (yycheck[x + yyn] == x)
vlmfa67ddc2004-06-03 03:38:44 +00003531 {
vlm6a02a8a2004-09-08 00:28:11 +00003532 strcat(msg, count == 0 ? ", expecting `" : " or `");
3533 strcat(msg, yytname[x]);
3534 strcat(msg, "'");
3535 count++;
vlmfa67ddc2004-06-03 03:38:44 +00003536 }
3537 }
vlm6a02a8a2004-09-08 00:28:11 +00003538 yyerror(msg);
3539 free(msg);
vlmfa67ddc2004-06-03 03:38:44 +00003540 }
3541 else
vlm6a02a8a2004-09-08 00:28:11 +00003542 yyerror ("parse error; also virtual memory exceeded");
vlmfa67ddc2004-06-03 03:38:44 +00003543 }
3544 else
3545#endif /* YYERROR_VERBOSE */
vlm6a02a8a2004-09-08 00:28:11 +00003546 yyerror("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003547 }
vlm6a02a8a2004-09-08 00:28:11 +00003548
vlmfa67ddc2004-06-03 03:38:44 +00003549 goto yyerrlab1;
vlm6a02a8a2004-09-08 00:28:11 +00003550yyerrlab1: /* here on error raised explicitly by an action */
vlmfa67ddc2004-06-03 03:38:44 +00003551
3552 if (yyerrstatus == 3)
3553 {
vlm6a02a8a2004-09-08 00:28:11 +00003554 /* if just tried and failed to reuse lookahead token after an error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00003555
vlm6a02a8a2004-09-08 00:28:11 +00003556 /* return failure if at end of input */
vlmfa67ddc2004-06-03 03:38:44 +00003557 if (yychar == YYEOF)
vlm6a02a8a2004-09-08 00:28:11 +00003558 YYABORT;
vlmfa67ddc2004-06-03 03:38:44 +00003559
vlm6a02a8a2004-09-08 00:28:11 +00003560#if YYDEBUG != 0
3561 if (yydebug)
3562 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3563#endif
3564
vlmfa67ddc2004-06-03 03:38:44 +00003565 yychar = YYEMPTY;
3566 }
3567
vlm6a02a8a2004-09-08 00:28:11 +00003568 /* Else will try to reuse lookahead token
3569 after shifting the error token. */
vlmfa67ddc2004-06-03 03:38:44 +00003570
vlm6a02a8a2004-09-08 00:28:11 +00003571 yyerrstatus = 3; /* Each real token shifted decrements this */
vlmfa67ddc2004-06-03 03:38:44 +00003572
vlm6a02a8a2004-09-08 00:28:11 +00003573 goto yyerrhandle;
vlm80103492004-09-07 10:39:09 +00003574
vlm6a02a8a2004-09-08 00:28:11 +00003575yyerrdefault: /* current state does not do anything special for the error token. */
vlm80103492004-09-07 10:39:09 +00003576
vlm6a02a8a2004-09-08 00:28:11 +00003577#if 0
3578 /* This is wrong; only states that explicitly want error tokens
3579 should shift them. */
3580 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3581 if (yyn) goto yydefault;
vlm39e5ed72004-09-05 10:40:41 +00003582#endif
vlm6a02a8a2004-09-08 00:28:11 +00003583
3584yyerrpop: /* pop the current state because it cannot handle the error token */
3585
3586 if (yyssp == yyss) YYABORT;
3587 yyvsp--;
3588 yystate = *--yyssp;
3589#ifdef YYLSP_NEEDED
3590 yylsp--;
3591#endif
3592
3593#if YYDEBUG != 0
3594 if (yydebug)
3595 {
3596 short *ssp1 = yyss - 1;
3597 fprintf (stderr, "Error: state stack now");
3598 while (ssp1 != yyssp)
3599 fprintf (stderr, " %d", *++ssp1);
3600 fprintf (stderr, "\n");
vlm39e5ed72004-09-05 10:40:41 +00003601 }
vlm6a02a8a2004-09-08 00:28:11 +00003602#endif
3603
3604yyerrhandle:
3605
3606 yyn = yypact[yystate];
3607 if (yyn == YYFLAG)
3608 goto yyerrdefault;
3609
3610 yyn += YYTERROR;
3611 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3612 goto yyerrdefault;
3613
3614 yyn = yytable[yyn];
3615 if (yyn < 0)
3616 {
3617 if (yyn == YYFLAG)
3618 goto yyerrpop;
3619 yyn = -yyn;
3620 goto yyreduce;
3621 }
3622 else if (yyn == 0)
3623 goto yyerrpop;
vlmfa67ddc2004-06-03 03:38:44 +00003624
3625 if (yyn == YYFINAL)
3626 YYACCEPT;
3627
vlm6a02a8a2004-09-08 00:28:11 +00003628#if YYDEBUG != 0
3629 if (yydebug)
3630 fprintf(stderr, "Shifting error token, ");
3631#endif
vlmfa67ddc2004-06-03 03:38:44 +00003632
3633 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00003634#ifdef YYLSP_NEEDED
3635 *++yylsp = yylloc;
3636#endif
vlmfa67ddc2004-06-03 03:38:44 +00003637
3638 yystate = yyn;
3639 goto yynewstate;
3640
vlm6a02a8a2004-09-08 00:28:11 +00003641 yyacceptlab:
3642 /* YYACCEPT comes here. */
3643 if (yyfree_stacks)
3644 {
3645 free (yyss);
3646 free (yyvs);
3647#ifdef YYLSP_NEEDED
3648 free (yyls);
vlm044f7442004-09-04 04:49:21 +00003649#endif
vlm6a02a8a2004-09-08 00:28:11 +00003650 }
3651 return 0;
vlm80103492004-09-07 10:39:09 +00003652
vlm6a02a8a2004-09-08 00:28:11 +00003653 yyabortlab:
3654 /* YYABORT comes here. */
3655 if (yyfree_stacks)
3656 {
3657 free (yyss);
3658 free (yyvs);
3659#ifdef YYLSP_NEEDED
3660 free (yyls);
vlm80103492004-09-07 10:39:09 +00003661#endif
vlm6a02a8a2004-09-08 00:28:11 +00003662 }
3663 return 1;
vlmfa67ddc2004-06-03 03:38:44 +00003664}
vlm931aeed2005-08-12 10:09:10 +00003665#line 2090 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00003666
3667
3668
3669/*
3670 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3671 */
3672static asn1p_value_t *
3673_convert_bitstring2binary(char *str, int base) {
3674 asn1p_value_t *val;
3675 int slen;
3676 int memlen;
3677 int baselen;
3678 int bits;
3679 uint8_t *binary_vector;
3680 uint8_t *bv_ptr;
3681 uint8_t cur_val;
3682
3683 assert(str);
3684 assert(str[0] == '\'');
3685
3686 switch(base) {
3687 case 'B':
3688 baselen = 1;
3689 break;
3690 case 'H':
3691 baselen = 4;
3692 break;
3693 default:
3694 assert(base == 'B' || base == 'H');
3695 errno = EINVAL;
3696 return NULL;
3697 }
3698
3699 slen = strlen(str);
3700 assert(str[slen - 1] == base);
3701 assert(str[slen - 2] == '\'');
3702
3703 memlen = slen / (8 / baselen); /* Conservative estimate */
3704
3705 bv_ptr = binary_vector = malloc(memlen + 1);
3706 if(bv_ptr == NULL)
3707 /* ENOMEM */
3708 return NULL;
3709
3710 cur_val = 0;
3711 bits = 0;
3712 while(*(++str) != '\'') {
3713 switch(baselen) {
3714 case 1:
3715 switch(*str) {
3716 case '1':
3717 cur_val |= 1 << (7 - (bits % 8));
3718 case '0':
3719 break;
3720 default:
3721 assert(!"_y UNREACH1");
3722 case ' ': case '\r': case '\n':
3723 continue;
3724 }
3725 break;
3726 case 4:
3727 switch(*str) {
3728 case '0': case '1': case '2': case '3': case '4':
3729 case '5': case '6': case '7': case '8': case '9':
3730 cur_val |= (*str - '0') << (4 - (bits % 8));
3731 break;
3732 case 'A': case 'B': case 'C':
3733 case 'D': case 'E': case 'F':
3734 cur_val |= ((*str - 'A') + 10)
3735 << (4 - (bits % 8));
3736 break;
3737 default:
3738 assert(!"_y UNREACH2");
3739 case ' ': case '\r': case '\n':
3740 continue;
3741 }
3742 break;
3743 }
3744
3745 bits += baselen;
3746 if((bits % 8) == 0) {
3747 *bv_ptr++ = cur_val;
3748 cur_val = 0;
3749 }
3750 }
3751
3752 *bv_ptr = cur_val;
3753 assert((bv_ptr - binary_vector) <= memlen);
3754
3755 val = asn1p_value_frombits(binary_vector, bits, 0);
3756 if(val == NULL) {
3757 free(binary_vector);
3758 }
3759
3760 return val;
3761}
3762
3763extern char *asn1p_text;
3764
3765int
3766yyerror(const char *msg) {
3767 fprintf(stderr,
3768 "ASN.1 grammar parse error "
3769 "near line %d (token \"%s\"): %s\n",
vlm39e5ed72004-09-05 10:40:41 +00003770 yylineno, asn1p_text, msg);
vlmfa67ddc2004-06-03 03:38:44 +00003771 return -1;
3772}
3773
3774