blob: 385ded7da7e050a89e67a1e57524baefcc0bcb44 [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/*
vlm177a5b62005-09-05 05:17:57 +0000142 * Process directives as <ASN1C:RepresentAsPointer>
vlm066dc102005-08-22 12:23:54 +0000143 */
144extern int asn1p_as_pointer;
vlm066dc102005-08-22 12:23:54 +0000145
146/*
vlm931aeed2005-08-12 10:09:10 +0000147 * This temporary variable is used to solve the shortcomings of 1-lookahead
148 * parser.
149 */
150static struct AssignedIdentifier *saved_aid;
vlmfa67ddc2004-06-03 03:38:44 +0000151
vlm5d89c3d2005-08-13 09:07:11 +0000152static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
153static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
vlmfa67ddc2004-06-03 03:38:44 +0000154
vlm931aeed2005-08-12 10:09:10 +0000155#define checkmem(ptr) do { \
156 if(!(ptr)) \
157 return yyerror("Memory failure"); \
vlmfa67ddc2004-06-03 03:38:44 +0000158 } while(0)
159
vlm931aeed2005-08-12 10:09:10 +0000160#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
161 if(arg1->type != constr_type) { \
162 int __ret; \
163 root = asn1p_constraint_new(yylineno); \
164 checkmem(root); \
165 root->type = constr_type; \
166 __ret = asn1p_constraint_insert(root, \
167 arg1); \
168 checkmem(__ret == 0); \
169 } else { \
170 root = arg1; \
171 } \
172 if(arg2) { \
173 int __ret \
174 = asn1p_constraint_insert(root, arg2); \
175 checkmem(__ret == 0); \
176 } \
vlmfa67ddc2004-06-03 03:38:44 +0000177 } while(0)
178
179
vlm177a5b62005-09-05 05:17:57 +0000180#line 72 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +0000181typedef union {
182 asn1p_t *a_grammar;
183 asn1p_module_flags_e a_module_flags;
184 asn1p_module_t *a_module;
185 asn1p_expr_type_e a_type; /* ASN.1 Type */
186 asn1p_expr_t *a_expr; /* Constructed collection */
187 asn1p_constraint_t *a_constr; /* Constraint */
188 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
189 asn1p_xports_t *a_xports; /* IMports/EXports */
vlm931aeed2005-08-12 10:09:10 +0000190 struct AssignedIdentifier a_aid; /* Assigned Identifier */
vlmfa67ddc2004-06-03 03:38:44 +0000191 asn1p_oid_t *a_oid; /* Object Identifier */
192 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
193 struct asn1p_type_tag_s a_tag; /* A tag */
194 asn1p_ref_t *a_ref; /* Reference to custom type */
195 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
196 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
197 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
198 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
199 struct asn1p_param_s a_parg; /* A parameter argument */
200 asn1p_paramlist_t *a_plist; /* A pargs list */
vlmc94e28f2004-09-15 11:59:51 +0000201 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
vlmfa67ddc2004-06-03 03:38:44 +0000202 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
vlmec6acd42004-09-29 13:18:09 +0000203 asn1c_integer_t a_int;
vlmfa67ddc2004-06-03 03:38:44 +0000204 char *tv_str;
205 struct {
206 char *buf;
207 int len;
208 } tv_opaque;
209 struct {
210 char *name;
211 struct asn1p_type_tag_s tag;
212 } tv_nametag;
vlm6a02a8a2004-09-08 00:28:11 +0000213} YYSTYPE;
214#include <stdio.h>
215
216#ifndef __cplusplus
217#ifndef __STDC__
218#define const
219#endif
vlmfa67ddc2004-06-03 03:38:44 +0000220#endif
221
222
223
vlma367d552006-03-09 09:11:53 +0000224#define YYFINAL 442
vlm6a02a8a2004-09-08 00:28:11 +0000225#define YYFLAG -32768
vlm2c8c44d2005-03-24 16:22:35 +0000226#define YYNTBASE 118
vlmfa67ddc2004-06-03 03:38:44 +0000227
vlmdc7cf042006-03-09 08:49:26 +0000228#define YYTRANSLATE(x) ((unsigned)(x) <= 356 ? yytranslate[x] : 225)
vlmfa67ddc2004-06-03 03:38:44 +0000229
vlm6a02a8a2004-09-08 00:28:11 +0000230static const char yytranslate[] = { 0,
231 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
232 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
233 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2c8c44d2005-03-24 16:22:35 +0000234 2, 2, 112, 2, 2, 2, 2, 2, 2, 107,
235 108, 2, 2, 110, 2, 113, 2, 2, 2, 2,
236 2, 2, 2, 2, 2, 2, 2, 111, 109, 114,
237 2, 2, 2, 115, 2, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000238 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
239 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2c8c44d2005-03-24 16:22:35 +0000240 116, 2, 117, 99, 2, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000241 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
242 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2c8c44d2005-03-24 16:22:35 +0000243 2, 2, 105, 101, 106, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000244 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
245 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
246 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
247 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
248 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
249 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
250 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
251 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
252 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
253 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
254 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
255 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
256 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
257 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
258 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
259 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
260 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
261 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
262 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
263 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
264 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
265 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
vlm2c8c44d2005-03-24 16:22:35 +0000266 97, 98, 100, 102, 103, 104
vlm6a02a8a2004-09-08 00:28:11 +0000267};
vlmfa67ddc2004-06-03 03:38:44 +0000268
vlm6a02a8a2004-09-08 00:28:11 +0000269#if YYDEBUG != 0
270static const short yyprhs[] = { 0,
271 0, 2, 4, 7, 16, 17, 19, 23, 26, 28,
272 31, 33, 38, 40, 41, 43, 45, 48, 51, 54,
273 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
vlm931aeed2005-08-12 10:09:10 +0000274 79, 81, 82, 86, 88, 92, 95, 97, 100, 101,
275 103, 108, 110, 114, 116, 120, 122, 126, 130, 133,
vlmdc7cf042006-03-09 08:49:26 +0000276 135, 139, 141, 145, 147, 148, 155, 157, 159, 163,
277 167, 174, 176, 180, 182, 186, 190, 194, 196, 200,
278 202, 204, 205, 207, 209, 213, 217, 220, 224, 226,
279 228, 232, 235, 237, 239, 245, 246, 248, 250, 254,
280 257, 262, 266, 270, 274, 278, 282, 283, 285, 286,
281 293, 295, 298, 300, 302, 304, 308, 312, 316, 317,
282 320, 322, 327, 332, 337, 344, 351, 353, 358, 363,
283 365, 369, 371, 375, 379, 383, 385, 389, 391, 395,
vlma367d552006-03-09 09:11:53 +0000284 397, 399, 401, 403, 405, 409, 413, 415, 420, 424,
285 425, 429, 431, 433, 435, 437, 439, 441, 443, 445,
286 447, 451, 453, 455, 457, 459, 462, 464, 466, 468,
287 470, 473, 476, 478, 480, 483, 486, 488, 490, 492,
288 494, 496, 499, 501, 504, 506, 508, 510, 512, 514,
289 516, 518, 520, 522, 524, 526, 528, 530, 532, 534,
290 536, 538, 540, 542, 543, 545, 547, 552, 556, 561,
291 563, 567, 573, 575, 579, 583, 587, 591, 596, 600,
292 602, 604, 608, 612, 616, 620, 622, 624, 625, 631,
293 633, 636, 639, 643, 645, 647, 649, 651, 653, 655,
294 657, 659, 663, 669, 671, 675, 677, 681, 682, 684,
295 686, 688, 690, 692, 694, 698, 703, 705, 709, 712,
296 716, 718, 722, 723, 725, 727, 730, 733, 737, 739,
297 743, 745, 750, 755, 757, 759, 761, 763, 764, 766,
298 769, 774, 775, 777, 779, 781, 782, 784, 786, 788,
299 790, 792, 793, 795
vlm6a02a8a2004-09-08 00:28:11 +0000300};
vlmfa67ddc2004-06-03 03:38:44 +0000301
vlm2c8c44d2005-03-24 16:22:35 +0000302static const short yyrhs[] = { 119,
vlmdc7cf042006-03-09 08:49:26 +0000303 0, 120, 0, 119, 120, 0, 221, 121, 36, 125,
vlm2c8c44d2005-03-24 16:22:35 +0000304 3, 23, 128, 41, 0, 0, 122, 0, 105, 123,
305 106, 0, 105, 106, 0, 124, 0, 123, 124, 0,
vlmdc7cf042006-03-09 08:49:26 +0000306 224, 0, 224, 107, 9, 108, 0, 9, 0, 0,
vlm2c8c44d2005-03-24 16:22:35 +0000307 126, 0, 127, 0, 126, 127, 0, 43, 86, 0,
308 54, 86, 0, 22, 86, 0, 45, 55, 0, 14,
309 59, 0, 0, 129, 0, 130, 0, 129, 130, 0,
vlmdc7cf042006-03-09 08:49:26 +0000310 132, 0, 138, 0, 144, 0, 175, 0, 141, 0,
311 0, 40, 14, 131, 0, 184, 0, 56, 133, 109,
vlm931aeed2005-08-12 10:09:10 +0000312 0, 56, 48, 0, 135, 0, 133, 135, 0, 0,
vlmdc7cf042006-03-09 08:49:26 +0000313 122, 0, 136, 48, 221, 134, 0, 137, 0, 136,
314 110, 137, 0, 221, 0, 221, 105, 106, 0, 224,
vlm931aeed2005-08-12 10:09:10 +0000315 0, 44, 139, 109, 0, 44, 19, 109, 0, 44,
vlmdc7cf042006-03-09 08:49:26 +0000316 109, 0, 140, 0, 139, 110, 140, 0, 221, 0,
317 221, 105, 106, 0, 224, 0, 0, 221, 143, 3,
318 105, 142, 180, 0, 168, 0, 181, 0, 221, 3,
319 164, 0, 221, 3, 154, 0, 221, 105, 145, 106,
320 3, 164, 0, 146, 0, 145, 110, 146, 0, 221,
321 0, 221, 111, 224, 0, 221, 111, 221, 0, 181,
322 111, 224, 0, 148, 0, 147, 110, 148, 0, 164,
323 0, 224, 0, 0, 150, 0, 151, 0, 150, 110,
324 151, 0, 224, 164, 210, 0, 164, 210, 0, 32,
325 70, 164, 0, 163, 0, 153, 0, 152, 110, 153,
326 0, 224, 164, 0, 163, 0, 164, 0, 30, 105,
327 156, 106, 158, 0, 0, 90, 0, 157, 0, 156,
328 110, 157, 0, 15, 210, 0, 16, 164, 155, 210,
vlma367d552006-03-09 09:11:53 +0000329 0, 16, 173, 210, 0, 16, 174, 210, 0, 15,
330 173, 210, 0, 15, 164, 210, 0, 15, 174, 210,
vlm5d89c3d2005-08-13 09:07:11 +0000331 0, 0, 159, 0, 0, 97, 84, 105, 160, 161,
vlm177a5b62005-09-05 05:17:57 +0000332 106, 0, 162, 0, 161, 162, 0, 4, 0, 171,
vlmdc7cf042006-03-09 08:49:26 +0000333 0, 104, 0, 104, 112, 178, 0, 104, 112, 215,
334 0, 216, 166, 188, 0, 0, 165, 167, 0, 183,
vlm177a5b62005-09-05 05:17:57 +0000335 0, 29, 105, 152, 106, 0, 80, 105, 149, 106,
vlmdc7cf042006-03-09 08:49:26 +0000336 0, 81, 105, 149, 106, 0, 80, 188, 70, 223,
337 216, 166, 0, 81, 188, 70, 223, 216, 166, 0,
338 20, 0, 20, 37, 27, 224, 0, 221, 105, 147,
vlm177a5b62005-09-05 05:17:57 +0000339 106, 0, 168, 0, 58, 70, 168, 0, 13, 0,
vlmdc7cf042006-03-09 08:49:26 +0000340 13, 113, 221, 0, 222, 113, 221, 0, 13, 113,
341 224, 0, 222, 0, 222, 113, 169, 0, 170, 0,
vlm177a5b62005-09-05 05:17:57 +0000342 169, 113, 170, 0, 172, 0, 172, 0, 15, 0,
vlmdc7cf042006-03-09 08:49:26 +0000343 16, 0, 15, 0, 173, 113, 15, 0, 173, 113,
vlma367d552006-03-09 09:11:53 +0000344 16, 0, 14, 0, 224, 143, 3, 176, 0, 224,
345 111, 176, 0, 0, 105, 177, 180, 0, 65, 0,
346 47, 0, 88, 0, 5, 0, 7, 0, 179, 0,
347 215, 0, 178, 0, 224, 0, 221, 113, 224, 0,
348 6, 0, 10, 0, 11, 0, 4, 0, 180, 4,
349 0, 26, 0, 65, 0, 78, 0, 182, 0, 69,
350 83, 0, 67, 53, 0, 79, 0, 46, 0, 38,
351 73, 0, 28, 83, 0, 93, 0, 49, 0, 184,
352 0, 60, 0, 42, 0, 24, 83, 0, 181, 0,
353 182, 212, 0, 25, 0, 50, 0, 51, 0, 52,
354 0, 61, 0, 66, 0, 76, 0, 85, 0, 87,
355 0, 92, 0, 94, 0, 95, 0, 96, 0, 68,
356 0, 101, 0, 102, 0, 99, 0, 100, 0, 98,
357 0, 0, 189, 0, 190, 0, 82, 107, 191, 108,
358 0, 107, 191, 108, 0, 190, 107, 191, 108, 0,
359 192, 0, 192, 110, 104, 0, 192, 110, 104, 110,
360 192, 0, 193, 0, 19, 98, 193, 0, 192, 185,
361 193, 0, 192, 186, 193, 0, 193, 187, 193, 0,
362 196, 107, 191, 108, 0, 107, 191, 108, 0, 197,
363 0, 198, 0, 197, 195, 197, 0, 63, 195, 197,
364 0, 197, 195, 62, 0, 63, 195, 62, 0, 204,
365 0, 199, 0, 0, 33, 27, 105, 194, 180, 0,
366 103, 0, 103, 114, 0, 114, 103, 0, 114, 103,
367 114, 0, 82, 0, 48, 0, 47, 0, 88, 0,
368 215, 0, 179, 0, 224, 0, 221, 0, 97, 31,
369 190, 0, 97, 32, 105, 200, 106, 0, 201, 0,
370 200, 110, 201, 0, 104, 0, 224, 188, 202, 0,
371 0, 203, 0, 75, 0, 17, 0, 71, 0, 205,
372 0, 206, 0, 105, 221, 106, 0, 205, 105, 207,
373 106, 0, 208, 0, 207, 110, 208, 0, 115, 209,
374 0, 115, 113, 209, 0, 224, 0, 209, 113, 224,
375 0, 0, 211, 0, 71, 0, 35, 176, 0, 105,
376 106, 0, 105, 213, 106, 0, 214, 0, 213, 110,
377 214, 0, 224, 0, 224, 107, 215, 108, 0, 224,
378 107, 178, 108, 0, 215, 0, 104, 0, 9, 0,
379 12, 0, 0, 217, 0, 218, 220, 0, 116, 219,
380 9, 117, 0, 0, 91, 0, 21, 0, 77, 0,
381 0, 54, 0, 43, 0, 13, 0, 14, 0, 14,
382 0, 0, 224, 0, 8, 0
vlm6a02a8a2004-09-08 00:28:11 +0000383};
vlmfa67ddc2004-06-03 03:38:44 +0000384
385#endif
386
vlm6a02a8a2004-09-08 00:28:11 +0000387#if YYDEBUG != 0
388static const short yyrline[] = { 0,
vlmdc7cf042006-03-09 08:49:26 +0000389 322, 328, 334, 350, 375, 377, 380, 384, 389, 396,
390 404, 409, 413, 422, 424, 432, 436, 444, 448, 451,
391 454, 458, 478, 480, 488, 492, 524, 528, 537, 544,
392 557, 564, 566, 578, 590, 601, 606, 612, 618, 620,
393 623, 634, 640, 646, 653, 659, 667, 671, 674, 681,
394 687, 693, 700, 706, 715, 717, 726, 734, 748, 758,
395 774, 783, 793, 803, 808, 815, 822, 832, 838, 844,
396 848, 871, 873, 875, 881, 887, 895, 901, 908, 913,
397 919, 925, 931, 934, 940, 950, 952, 955, 963, 970,
vlma367d552006-03-09 09:11:53 +0000398 983, 994, 1004, 1015, 1025, 1036, 1047, 1049, 1054, 1058,
399 1063, 1068, 1074, 1078, 1089, 1098, 1107, 1118, 1140, 1147,
400 1166, 1170, 1176, 1182, 1188, 1198, 1208, 1214, 1228, 1252,
401 1259, 1273, 1282, 1292, 1302, 1312, 1320, 1341, 1350, 1359,
402 1360, 1362, 1369, 1376, 1382, 1386, 1392, 1412, 1422, 1430,
403 1430, 1435, 1440, 1445, 1450, 1454, 1458, 1461, 1464, 1469,
404 1481, 1498, 1503, 1508, 1541, 1551, 1565, 1567, 1568, 1569,
405 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1584,
406 1586, 1587, 1590, 1597, 1609, 1611, 1615, 1619, 1620, 1621,
407 1622, 1623, 1627, 1628, 1629, 1630, 1634, 1635, 1642, 1642,
408 1643, 1643, 1644, 1646, 1648, 1653, 1657, 1666, 1670, 1675,
409 1679, 1685, 1695, 1699, 1702, 1705, 1708, 1713, 1722, 1730,
410 1736, 1742, 1749, 1757, 1765, 1774, 1777, 1780, 1781, 1791,
411 1793, 1794, 1795, 1798, 1802, 1807, 1813, 1818, 1821, 1824,
412 1837, 1851, 1855, 1860, 1864, 1869, 1876, 1889, 1891, 1894,
413 1898, 1901, 1906, 1910, 1918, 1933, 1939, 1946, 1959, 1971,
414 1986, 1990, 2007, 2012, 2015, 2020, 2042, 2047, 2052, 2058,
415 2064, 2072, 2080, 2088, 2095, 2105, 2110, 2140, 2142, 2145,
416 2152, 2158, 2160, 2161, 2162, 2165, 2167, 2168, 2171, 2176,
417 2183, 2190, 2192, 2197
vlm6a02a8a2004-09-08 00:28:11 +0000418};
419#endif
420
421
422#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
423
424static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
425"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
vlm2c8c44d2005-03-24 16:22:35 +0000426"TOK_tuple","TOK_quadruple","TOK_number_negative","TOK_typereference","TOK_capitalreference",
427"TOK_typefieldreference","TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX",
428"TOK_ALL","TOK_ANY","TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT",
429"TOK_BMPString","TOK_BOOLEAN","TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS",
430"TOK_COMPONENT","TOK_COMPONENTS","TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT",
431"TOK_DEFINITIONS","TOK_DEFINED","TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL",
432"TOK_END","TOK_ENUMERATED","TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY",
433"TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString",
434"TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED",
435"TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INSTRUCTIONS","TOK_INTEGER",
436"TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL","TOK_NumericString",
437"TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET","TOK_OF","TOK_OPTIONAL","TOK_PATTERN",
438"TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString","TOK_PRIVATE",
439"TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE","TOK_STRING",
440"TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE","TOK_TYPE_IDENTIFIER",
441"TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime","TOK_UTF8String",
442"TOK_VideotexString","TOK_VisibleString","TOK_WITH","TOK_EXCEPT","'^'","TOK_INTERSECTION",
443"'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots","'{'","'}'","'('","')'","';'",
444"','","':'","'!'","'.'","'<'","'@'","'['","']'","ParsedGrammar","ModuleList",
445"ModuleSpecification","optObjectIdentifier","ObjectIdentifier","ObjectIdentifierBody",
446"ObjectIdentifierElement","optModuleSpecificationFlags","ModuleSpecificationFlags",
447"ModuleSpecificationFlag","optModuleSpecificationBody","ModuleSpecificationBody",
vlm931aeed2005-08-12 10:09:10 +0000448"ModuleSpecificationElement","@1","ImportsDefinition","ImportsBundleSet","AssignedIdentifier",
449"ImportsBundle","ImportsList","ImportsElement","ExportsDefinition","ExportsBody",
450"ExportsElement","ValueSetDefinition","@2","DefinedTypeRef","DataTypeReference",
451"ParameterArgumentList","ParameterArgumentName","ActualParameterList","ActualParameter",
452"optComponentTypeLists","ComponentTypeLists","ComponentType","AlternativeTypeLists",
vlmdc7cf042006-03-09 08:49:26 +0000453"AlternativeType","ObjectClass","optUnique","FieldSpec","ClassField","optWithSyntax",
454"WithSyntax","@3","WithSyntaxFormat","WithSyntaxFormatToken","ExtensionAndException",
455"Type","NSTD_IndirectMarker","TypeDeclaration","TypeDeclarationSet","ComplexTypeReference",
456"ComplexTypeReferenceAmpList","ComplexTypeReferenceElement","ClassFieldIdentifier",
457"ClassFieldName","FieldName","DefinedObjectClass","ValueDefinition","Value",
458"@4","DefinedValue","RestrictedCharacterStringValue","Opaque","BasicTypeId",
459"BasicTypeId_UniverationCompatible","BasicType","BasicString","Union","Intersection",
460"Except","optConstraints","Constraints","SetOfConstraints","ElementSetSpecs",
461"ElementSetSpec","ConstraintSubtypeElement","@5","ConstraintRangeSpec","ConstraintSpec",
462"SingleValue","ContainedSubtype","InnerTypeConstraint","WithComponentsList",
463"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
464"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
465"ComponentIdList","optMarker","Marker","UniverationDefinition","UniverationList",
466"UniverationElement","SignedNumber","optTag","Tag","TagTypeValue","TagClass",
467"TagPlicit","TypeRefName","ObjectClassReference","optIdentifier","Identifier", NULL
vlm6a02a8a2004-09-08 00:28:11 +0000468};
469#endif
470
471static const short yyr1[] = { 0,
vlm2c8c44d2005-03-24 16:22:35 +0000472 118, 119, 119, 120, 121, 121, 122, 122, 123, 123,
473 124, 124, 124, 125, 125, 126, 126, 127, 127, 127,
474 127, 127, 128, 128, 129, 129, 130, 130, 130, 130,
vlm931aeed2005-08-12 10:09:10 +0000475 130, 131, 130, 130, 132, 132, 133, 133, 134, 134,
476 135, 136, 136, 137, 137, 137, 138, 138, 138, 139,
477 139, 140, 140, 140, 142, 141, 143, 143, 144, 144,
vlmdc7cf042006-03-09 08:49:26 +0000478 144, 145, 145, 146, 146, 146, 146, 147, 147, 148,
479 148, 149, 149, 150, 150, 151, 151, 151, 151, 152,
480 152, 153, 153, 153, 154, 155, 155, 156, 156, 157,
481 157, 157, 157, 157, 157, 157, 158, 158, 160, 159,
482 161, 161, 162, 162, 163, 163, 163, 164, 165, 166,
483 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
484 167, 168, 168, 168, 168, 168, 168, 169, 169, 170,
vlma367d552006-03-09 09:11:53 +0000485 171, 172, 172, 173, 173, 173, 174, 175, 176, 177,
486 176, 176, 176, 176, 176, 176, 176, 176, 176, 178,
487 178, 179, 179, 179, 180, 180, 181, 181, 181, 181,
488 181, 181, 181, 181, 181, 181, 181, 181, 181, 182,
489 182, 182, 183, 183, 184, 184, 184, 184, 184, 184,
490 184, 184, 184, 184, 184, 184, 184, 184, 185, 185,
491 186, 186, 187, 188, 188, 189, 189, 190, 190, 191,
492 191, 191, 192, 192, 192, 192, 192, 193, 193, 193,
493 193, 193, 193, 193, 193, 193, 193, 194, 193, 195,
494 195, 195, 195, 196, 196, 197, 197, 197, 197, 197,
495 198, 199, 199, 200, 200, 201, 201, 202, 202, 203,
496 203, 203, 204, 204, 205, 206, 207, 207, 208, 208,
497 209, 209, 210, 210, 211, 211, 212, 212, 213, 213,
498 214, 214, 214, 214, 214, 215, 215, 216, 216, 217,
499 218, 219, 219, 219, 219, 220, 220, 220, 221, 221,
500 222, 223, 223, 224
vlm6a02a8a2004-09-08 00:28:11 +0000501};
502
503static const short yyr2[] = { 0,
504 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
505 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
506 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
vlm931aeed2005-08-12 10:09:10 +0000507 1, 0, 3, 1, 3, 2, 1, 2, 0, 1,
508 4, 1, 3, 1, 3, 1, 3, 3, 2, 1,
vlmdc7cf042006-03-09 08:49:26 +0000509 3, 1, 3, 1, 0, 6, 1, 1, 3, 3,
510 6, 1, 3, 1, 3, 3, 3, 1, 3, 1,
511 1, 0, 1, 1, 3, 3, 2, 3, 1, 1,
512 3, 2, 1, 1, 5, 0, 1, 1, 3, 2,
513 4, 3, 3, 3, 3, 3, 0, 1, 0, 6,
514 1, 2, 1, 1, 1, 3, 3, 3, 0, 2,
515 1, 4, 4, 4, 6, 6, 1, 4, 4, 1,
516 3, 1, 3, 3, 3, 1, 3, 1, 3, 1,
vlma367d552006-03-09 09:11:53 +0000517 1, 1, 1, 1, 3, 3, 1, 4, 3, 0,
518 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
519 3, 1, 1, 1, 1, 2, 1, 1, 1, 1,
520 2, 2, 1, 1, 2, 2, 1, 1, 1, 1,
521 1, 2, 1, 2, 1, 1, 1, 1, 1, 1,
vlm6a02a8a2004-09-08 00:28:11 +0000522 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
vlma367d552006-03-09 09:11:53 +0000523 1, 1, 1, 0, 1, 1, 4, 3, 4, 1,
524 3, 5, 1, 3, 3, 3, 3, 4, 3, 1,
525 1, 3, 3, 3, 3, 1, 1, 0, 5, 1,
526 2, 2, 3, 1, 1, 1, 1, 1, 1, 1,
527 1, 3, 5, 1, 3, 1, 3, 0, 1, 1,
528 1, 1, 1, 1, 3, 4, 1, 3, 2, 3,
529 1, 3, 0, 1, 1, 2, 2, 3, 1, 3,
530 1, 4, 4, 1, 1, 1, 1, 0, 1, 2,
531 4, 0, 1, 1, 1, 0, 1, 1, 1, 1,
532 1, 0, 1, 1
vlm6a02a8a2004-09-08 00:28:11 +0000533};
534
535static const short yydefact[] = { 0,
vlma367d552006-03-09 09:11:53 +0000536 279, 280, 1, 2, 5, 3, 0, 0, 6, 284,
vlm6a02a8a2004-09-08 00:28:11 +0000537 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
538 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
vlma367d552006-03-09 09:11:53 +0000539 18, 21, 19, 0, 17, 12, 23, 175, 0, 0,
540 176, 177, 178, 0, 179, 180, 188, 181, 182, 183,
541 184, 185, 186, 187, 0, 24, 25, 27, 28, 31,
vlm931aeed2005-08-12 10:09:10 +0000542 29, 30, 34, 0, 0, 32, 0, 49, 0, 50,
543 52, 54, 36, 0, 37, 0, 42, 44, 46, 4,
vlma367d552006-03-09 09:11:53 +0000544 26, 268, 122, 281, 0, 157, 0, 0, 171, 164,
545 168, 170, 158, 0, 0, 159, 163, 167, 0, 0,
546 57, 58, 160, 169, 126, 0, 33, 48, 47, 0,
547 0, 35, 38, 0, 0, 0, 0, 272, 60, 59,
548 109, 269, 276, 0, 172, 166, 165, 162, 161, 0,
vlmdc7cf042006-03-09 08:49:26 +0000549 62, 0, 64, 0, 0, 0, 51, 53, 39, 43,
vlma367d552006-03-09 09:11:53 +0000550 45, 0, 274, 275, 273, 0, 0, 194, 278, 277,
551 270, 123, 125, 0, 0, 0, 0, 55, 132, 133,
552 127, 128, 130, 124, 145, 152, 146, 266, 153, 154,
553 267, 143, 142, 144, 140, 138, 149, 147, 148, 0,
554 150, 40, 41, 268, 268, 0, 88, 0, 122, 281,
555 117, 0, 0, 194, 194, 110, 120, 173, 160, 111,
556 0, 0, 0, 108, 195, 196, 268, 63, 67, 66,
557 65, 0, 0, 0, 0, 0, 137, 134, 0, 255,
558 253, 253, 253, 90, 254, 86, 253, 253, 97, 0,
559 271, 0, 268, 0, 268, 0, 268, 0, 0, 174,
560 268, 0, 0, 0, 226, 225, 0, 224, 227, 0,
561 0, 0, 229, 0, 200, 203, 0, 210, 211, 217,
562 216, 243, 244, 228, 231, 230, 0, 61, 155, 56,
563 129, 141, 151, 139, 256, 95, 0, 94, 96, 87,
564 253, 92, 93, 0, 85, 98, 89, 0, 105, 0,
565 80, 83, 84, 268, 121, 0, 0, 73, 74, 79,
566 253, 268, 282, 0, 282, 265, 257, 0, 259, 264,
567 261, 0, 68, 70, 71, 0, 0, 0, 220, 0,
568 0, 0, 0, 0, 0, 198, 191, 192, 189, 190,
569 0, 0, 0, 193, 0, 0, 0, 0, 0, 156,
570 135, 136, 91, 0, 118, 0, 112, 268, 82, 268,
571 113, 268, 77, 253, 268, 283, 114, 268, 258, 0,
572 0, 119, 268, 197, 204, 218, 221, 222, 215, 213,
573 232, 0, 245, 209, 201, 205, 206, 207, 0, 214,
574 212, 0, 0, 247, 199, 99, 106, 107, 150, 81,
575 78, 75, 76, 109, 109, 260, 0, 0, 69, 0,
576 223, 236, 0, 234, 194, 0, 208, 0, 249, 251,
577 246, 0, 0, 115, 116, 263, 262, 219, 233, 0,
578 238, 202, 250, 0, 248, 103, 0, 101, 104, 131,
579 235, 241, 242, 240, 237, 239, 252, 100, 102, 0,
580 0, 0
vlm6a02a8a2004-09-08 00:28:11 +0000581};
582
vlma367d552006-03-09 09:11:53 +0000583static const short yydefgoto[] = { 440,
vlm6a02a8a2004-09-08 00:28:11 +0000584 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
vlmdc7cf042006-03-09 08:49:26 +0000585 56, 57, 107, 58, 74, 183, 75, 76, 77, 59,
vlma367d552006-03-09 09:11:53 +0000586 69, 70, 60, 212, 100, 61, 130, 131, 312, 313,
587 297, 298, 299, 290, 291, 119, 281, 186, 187, 285,
588 286, 413, 427, 428, 300, 301, 147, 148, 196, 101,
589 161, 162, 429, 163, 222, 223, 62, 176, 214, 177,
590 253, 270, 102, 103, 200, 104, 332, 333, 335, 204,
591 205, 206, 254, 255, 256, 400, 321, 257, 258, 259,
592 260, 403, 404, 435, 436, 261, 262, 263, 383, 384,
593 409, 224, 225, 240, 308, 309, 264, 121, 122, 123,
594 146, 151, 265, 105, 355, 266
vlm6a02a8a2004-09-08 00:28:11 +0000595};
596
vlma367d552006-03-09 09:11:53 +0000597static const short yypact[] = { 258,
598-32768,-32768, 258,-32768, -19,-32768, 51, 103,-32768,-32768,
599-32768,-32768, 69,-32768, 39, 87,-32768,-32768, 143, 114,
600 73, 105, 212, 183, 277, 87,-32768, 174,-32768,-32768,
601-32768,-32768,-32768, 262,-32768,-32768, 429,-32768, 279, 42,
602-32768,-32768,-32768, 211,-32768,-32768,-32768,-32768,-32768,-32768,
603-32768,-32768,-32768,-32768, 254, 429,-32768,-32768,-32768,-32768,
604-32768,-32768,-32768, 354, 581,-32768, 188,-32768, 167,-32768,
605 213,-32768,-32768, 38,-32768, -28,-32768, 219,-32768,-32768,
606-32768, -9, 216,-32768, 251,-32768, 252, 264,-32768,-32768,
607-32768,-32768,-32768, 289, 260,-32768,-32768,-32768, 656, 341,
608-32768,-32768,-32768,-32768, 233, 345,-32768,-32768,-32768, 247,
609 243,-32768,-32768, 258, 247, 244, 246, 4,-32768,-32768,
610-32768,-32768, 59, 247,-32768,-32768,-32768,-32768,-32768, -22,
611-32768, 241, 248, 250, 301, 158,-32768,-32768, -19,-32768,
612-32768, 276,-32768,-32768,-32768, 349, 506, -54,-32768,-32768,
613-32768,-32768,-32768, 357, 656, 353, 247,-32768,-32768,-32768,
614 256,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
615-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 257,
616 253,-32768,-32768, 28, 12, 97,-32768, 255, -73, 266,
617 326, 268, 304, 106, 122,-32768,-32768,-32768, 271,-32768,
618 272, 274, 168,-32768,-32768, 280, 267,-32768,-32768,-32768,
619-32768, 380, 290, 380, 353, 158,-32768,-32768, 158,-32768,
620 62, 27, 62,-32768,-32768, 296, 27, 62, 288, 276,
621-32768, 361, 8, 298, 15, 319, 15, 320, 56,-32768,
622 7, 168, 293, 366,-32768,-32768, 135,-32768,-32768, 299,
623 258, 168,-32768, 286, 200, 297, 291, 135,-32768,-32768,
624-32768, 292,-32768,-32768,-32768,-32768, 168,-32768,-32768, 395,
625-32768, 395,-32768,-32768,-32768,-32768, 311,-32768,-32768,-32768,
626 62,-32768,-32768, 318,-32768,-32768,-32768, 353, 300, 100,
627-32768,-32768,-32768, 267,-32768, 337, 302, 306,-32768,-32768,
628 62, 267, 353, 303, 353,-32768,-32768, 141,-32768,-32768,
629 317, 147,-32768,-32768,-32768, 310, 231, 305, 312, 308,
630 186, 321, 322, 323, 327,-32768,-32768,-32768,-32768,-32768,
631 330, 231, 231,-32768, 231, 168, 278, 316, 328,-32768,
632-32768,-32768,-32768, 333,-32768, 295,-32768, 8,-32768, 267,
633-32768, 2,-32768, 62, 267,-32768,-32768, 267,-32768, 81,
634 295,-32768, 7,-32768,-32768,-32768,-32768, 331,-32768,-32768,
635 280, 31,-32768,-32768, 315,-32768,-32768,-32768, 332,-32768,
636-32768, 9, 148,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
637-32768,-32768,-32768,-32768,-32768,-32768, 336, 343,-32768, 380,
638-32768,-32768, 156,-32768, -54, 168,-32768, 353, 339,-32768,
639-32768, 316, 139,-32768,-32768,-32768,-32768, 395,-32768, 31,
640 5, 221, 339, 353,-32768,-32768, 20,-32768,-32768,-32768,
641-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 453,
642 455,-32768
vlm6a02a8a2004-09-08 00:28:11 +0000643};
644
645static const short yypgoto[] = {-32768,
vlma367d552006-03-09 09:11:53 +0000646-32768, 454,-32768, 324,-32768, 443,-32768,-32768, 432,-32768,
647-32768, 404,-32768,-32768,-32768,-32768, 387,-32768, 347,-32768,
648-32768, 355,-32768,-32768, 399,-32768,-32768, 313,-32768, 104,
649 229,-32768, 118,-32768, 123,-32768,-32768,-32768, 242,-32768,
650-32768,-32768,-32768, 47, -228, -80,-32768, -62,-32768, -138,
651-32768, 263,-32768, -344, 307, 309,-32768, -145,-32768, -317,
652 -26, -211, -68, 335,-32768, 29,-32768,-32768,-32768, -187,
653-32768, 153, -194, 71, -133,-32768, 220,-32768, -267,-32768,
654-32768,-32768, 63,-32768,-32768,-32768,-32768,-32768,-32768, 72,
655 78, -209,-32768,-32768,-32768, 127, -125, -172,-32768,-32768,
656-32768,-32768, 1,-32768, 184, -7
vlm6a02a8a2004-09-08 00:28:11 +0000657};
658
659
vlma367d552006-03-09 09:11:53 +0000660#define YYLAST 752
vlm6a02a8a2004-09-08 00:28:11 +0000661
662
663static const short yytable[] = { 15,
vlma367d552006-03-09 09:11:53 +0000664 5, 120, 272, 5, 292, 15, 236, 238, 197, 10,
665 179, 276, 278, 279, 10, 10, 10, 282, 283, 114,
666 117, 432, 10, 426, 143, 217, 218, 202, 387, 65,
667 132, -279, 72, 296, 159, 160, 79, 64, 10, 124,
668 71, 217, 218, 397, 78, 10, 296, 316, 65, 10,
669 1, 2, 203, 370, 1, 2, 64, 325, 10, 11,
670 67, 219, 219, 10, 168, 63, 79, 171, 430, 381,
671 274, 343, 339, 275, 78, 433, 10, 11, 198, 434,
672 144, 115, 430, 154, 63, 7, 132, 155, 10, 168,
673 179, 353, 171, 179, 145, 295, 219, 220, 220, 133,
674 20, 149, 72, 221, 226, 289, 118, 79, 21, 178,
675 71, 289, 150, 310, 139, 78, 153, 118, 289, 292,
676 -72, 408, 118, 118, 152, 438, 268, 118, 181, 22,
677 118, 23, 220, -253, 402, 164, 180, -253, 16, 277,
678 24, 379, 426, 118, 393, 19, 112, 201, 209, 211,
679 68, 28, 293, 159, 160, 133, 12, 210, 30, 306,
680 314, 307, 165, 166, 167, 10, 168, 169, 170, 171,
681 1, 2, 29, 166, 17, 10, 168, 169, 170, 171,
682 1, 2, 394, 365, 306, 395, 243, 202, 418, 178,
683 31, 166, 178, 10, 168, 169, 170, 171, 376, 377,
684 244, 378, 229, 202, 172, 347, 230, 273, 181, 348,
685 235, 181, 203, 349, 245, 246, 180, 421, 10, 180,
686 388, 354, 173, 1, 2, 294, 237, 302, 203, 302,
687 247, 311, 245, 315, 310, 398, 166, 319, 10, 168,
688 169, 170, 171, 1, 2, 174, 359, 369, 320, 248,
689 360, 324, 362, 411, 10, 249, 363, 412, 73, 1,
690 2, 419, 175, 244, 250, 420, 32, 293, 33, 391,
691 1, 2, 251, 249, 252, 109, 110, 245, 246, 34,
692 345, 36, 314, 166, 37, 10, 168, 169, 170, 171,
693 184, 185, 66, 247, 80, 356, 108, 356, 327, 328,
694 329, 330, 10, 168, 159, 160, 171, 1, 2, 331,
695 83, 84, 248, 1, 2, 159, 160, 111, 249, 327,
696 328, 329, 330, 116, 245, 341, 342, 250, 124, 322,
697 323, 414, 415, 125, 126, 251, 127, 252, 389, 380,
698 294, 128, 129, 134, 302, 135, 180, 136, 138, 141,
699 142, 156, 311, 389, 158, 315, 82, 188, 157, 207,
700 10, 180, 232, 216, 405, 249, 83, 84, 213, 215,
701 -280, 231, 233, 234, 410, 239, 241, 85, 38, 86,
702 242, 87, 118, 269, 284, 280, 267, 288, 303, 305,
703 317, 88, 318, 326, 334, 89, 338, 336, 340, 90,
704 410, 344, 91, 41, 42, 43, 350, 351, 357, 366,
705 368, 346, 405, 92, 45, 352, 437, 364, 93, 46,
706 94, 47, 95, 361, 406, 367, 372, 203, 373, 48,
707 382, 96, 97, 375, 374, 385, 10, 386, 49, 407,
708 50, 1, 2, 416, 401, 51, 98, 52, 53, 54,
709 417, 424, 441, 38, 442, 18, 6, 35, 99, 81,
710 113, 140, 182, 106, 137, 304, 399, 208, 39, 392,
711 390, 287, 40, 439, 371, 271, 422, 337, 41, 42,
712 43, 199, 431, 425, 44, 423, 396, 0, 358, 45,
713 0, 227, 0, 228, 46, 0, 47, 0, 0, 0,
714 0, 0, 0, 0, 48, 0, 0, 0, 0, 0,
715 0, 0, 0, 49, 0, 50, 0, 0, 189, 190,
716 51, 0, 52, 53, 54, 191, 0, 0, 0, 85,
vlmdc7cf042006-03-09 08:49:26 +0000717 38, 86, 0, 87, 192, 0, 0, 0, 0, 0,
vlm177a5b62005-09-05 05:17:57 +0000718 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
719 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
vlmdc7cf042006-03-09 08:49:26 +0000720 0, 0, 0, 193, 0, 92, 45, 0, 0, 0,
vlm177a5b62005-09-05 05:17:57 +0000721 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
vlmdc7cf042006-03-09 08:49:26 +0000722 0, 48, 0, 96, 97, 194, 195, 0, 0, 0,
vlm177a5b62005-09-05 05:17:57 +0000723 49, 0, 50, 83, 84, 0, 0, 51, 98, 52,
724 53, 54, 0, 0, 85, 38, 86, 0, 87, 0,
725 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
726 0, 0, 89, 0, 0, 0, 90, 0, 0, 91,
727 41, 42, 43, 0, 0, 0, 0, 0, 0, 0,
728 92, 45, 0, 0, 0, 93, 46, 94, 47, 95,
729 0, 0, 0, 0, 0, 0, 48, 0, 96, 97,
730 0, 0, 0, 0, 0, 49, 0, 50, 1, 2,
731 0, 0, 51, 98, 52, 53, 54, 0, 0, 85,
732 38, 86, 0, 87, 0, 0, 0, 0, 0, 0,
733 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
734 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
735 0, 0, 0, 0, 0, 92, 45, 0, 0, 0,
736 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
737 0, 48, 0, 96, 97, 0, 0, 0, 0, 0,
738 49, 0, 50, 0, 0, 0, 0, 51, 98, 52,
739 53, 54
vlm6a02a8a2004-09-08 00:28:11 +0000740};
741
742static const short yycheck[] = { 7,
vlma367d552006-03-09 09:11:53 +0000743 0, 82, 214, 3, 233, 13, 194, 195, 147, 8,
744 136, 221, 222, 223, 8, 8, 8, 227, 228, 48,
745 30, 17, 8, 4, 21, 14, 15, 82, 346, 37,
746 99, 105, 40, 32, 15, 16, 44, 37, 8, 113,
747 40, 14, 15, 361, 44, 8, 32, 242, 56, 8,
748 13, 14, 107, 321, 13, 14, 56, 252, 8, 9,
749 19, 35, 35, 8, 9, 37, 74, 12, 413, 337,
750 216, 281, 267, 219, 74, 71, 8, 9, 147, 75,
751 77, 110, 427, 106, 56, 105, 155, 110, 8, 9,
752 216, 301, 12, 219, 91, 234, 35, 71, 71, 99,
753 14, 43, 110, 184, 185, 104, 116, 115, 22, 136,
754 110, 104, 54, 239, 114, 115, 124, 116, 104, 348,
755 106, 113, 116, 116, 124, 106, 207, 116, 136, 43,
756 116, 45, 71, 106, 104, 135, 136, 110, 36, 113,
757 54, 336, 4, 116, 354, 107, 109, 147, 156, 157,
758 109, 9, 233, 15, 16, 155, 106, 157, 86, 104,
759 241, 106, 5, 6, 7, 8, 9, 10, 11, 12,
760 13, 14, 59, 6, 106, 8, 9, 10, 11, 12,
761 13, 14, 355, 317, 104, 358, 19, 82, 400, 216,
762 86, 6, 219, 8, 9, 10, 11, 12, 332, 333,
763 33, 335, 106, 82, 47, 106, 110, 215, 216, 110,
764 105, 219, 107, 294, 47, 48, 216, 405, 8, 219,
765 346, 302, 65, 13, 14, 233, 105, 235, 107, 237,
766 63, 239, 47, 241, 360, 361, 6, 103, 8, 9,
767 10, 11, 12, 13, 14, 88, 106, 62, 114, 82,
768 110, 251, 106, 106, 8, 88, 110, 110, 48, 13,
769 14, 106, 105, 33, 97, 110, 55, 348, 86, 350,
770 13, 14, 105, 88, 107, 109, 110, 47, 48, 3,
771 288, 108, 363, 6, 23, 8, 9, 10, 11, 12,
772 15, 16, 14, 63, 41, 303, 109, 305, 99, 100,
773 101, 102, 8, 9, 15, 16, 12, 13, 14, 110,
774 13, 14, 82, 13, 14, 15, 16, 105, 88, 99,
775 100, 101, 102, 105, 47, 15, 16, 97, 113, 31,
776 32, 394, 395, 83, 83, 105, 73, 107, 346, 62,
777 348, 53, 83, 3, 352, 113, 346, 3, 106, 106,
778 105, 111, 360, 361, 105, 363, 3, 9, 111, 3,
779 8, 361, 37, 111, 372, 88, 13, 14, 113, 113,
780 105, 117, 105, 70, 382, 105, 105, 24, 25, 26,
781 107, 28, 116, 4, 97, 90, 107, 27, 70, 70,
782 98, 38, 27, 108, 98, 42, 105, 107, 4, 46,
783 408, 84, 49, 50, 51, 52, 70, 106, 106, 105,
784 103, 112, 420, 60, 61, 110, 424, 108, 65, 66,
785 67, 68, 69, 107, 110, 114, 105, 107, 106, 76,
786 115, 78, 79, 104, 108, 108, 8, 105, 85, 108,
787 87, 13, 14, 108, 114, 92, 93, 94, 95, 96,
788 108, 113, 0, 25, 0, 13, 3, 26, 105, 56,
789 74, 115, 139, 65, 110, 237, 363, 155, 40, 352,
790 348, 230, 44, 427, 322, 213, 406, 258, 50, 51,
791 52, 147, 420, 412, 56, 408, 360, -1, 305, 61,
792 -1, 185, -1, 185, 66, -1, 68, -1, -1, -1,
793 -1, -1, -1, -1, 76, -1, -1, -1, -1, -1,
794 -1, -1, -1, 85, -1, 87, -1, -1, 13, 14,
795 92, -1, 94, 95, 96, 20, -1, -1, -1, 24,
vlm177a5b62005-09-05 05:17:57 +0000796 25, 26, -1, 28, 29, -1, -1, -1, -1, -1,
797 -1, -1, -1, 38, -1, -1, -1, 42, -1, -1,
798 -1, 46, -1, -1, 49, 50, 51, 52, -1, -1,
799 -1, -1, -1, 58, -1, 60, 61, -1, -1, -1,
800 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
801 -1, 76, -1, 78, 79, 80, 81, -1, -1, -1,
802 85, -1, 87, 13, 14, -1, -1, 92, 93, 94,
803 95, 96, -1, -1, 24, 25, 26, -1, 28, -1,
804 -1, -1, -1, -1, -1, -1, -1, -1, 38, -1,
805 -1, -1, 42, -1, -1, -1, 46, -1, -1, 49,
806 50, 51, 52, -1, -1, -1, -1, -1, -1, -1,
807 60, 61, -1, -1, -1, 65, 66, 67, 68, 69,
808 -1, -1, -1, -1, -1, -1, 76, -1, 78, 79,
809 -1, -1, -1, -1, -1, 85, -1, 87, 13, 14,
810 -1, -1, 92, 93, 94, 95, 96, -1, -1, 24,
811 25, 26, -1, 28, -1, -1, -1, -1, -1, -1,
812 -1, -1, -1, 38, -1, -1, -1, 42, -1, -1,
813 -1, 46, -1, -1, 49, 50, 51, 52, -1, -1,
814 -1, -1, -1, -1, -1, 60, 61, -1, -1, -1,
815 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
816 -1, 76, -1, 78, 79, -1, -1, -1, -1, -1,
817 85, -1, 87, -1, -1, -1, -1, 92, 93, 94,
818 95, 96
vlm6a02a8a2004-09-08 00:28:11 +0000819};
820/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
821#line 3 "/usr/share/bison.simple"
822/* This file comes from bison-1.28. */
823
824/* Skeleton output parser for bison,
825 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
826
827 This program is free software; you can redistribute it and/or modify
828 it under the terms of the GNU General Public License as published by
829 the Free Software Foundation; either version 2, or (at your option)
830 any later version.
831
832 This program is distributed in the hope that it will be useful,
833 but WITHOUT ANY WARRANTY; without even the implied warranty of
834 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
835 GNU General Public License for more details.
836
837 You should have received a copy of the GNU General Public License
838 along with this program; if not, write to the Free Software
839 Foundation, Inc., 59 Temple Place - Suite 330,
840 Boston, MA 02111-1307, USA. */
841
842/* As a special exception, when this file is copied by Bison into a
843 Bison output file, you may use that output file without restriction.
844 This special exception was added by the Free Software Foundation
845 in version 1.24 of Bison. */
846
847/* This is the parser code that is written into each bison parser
848 when the %semantic_parser declaration is not specified in the grammar.
849 It was written by Richard Stallman by simplifying the hairy parser
850 used when %semantic_parser is specified. */
851
852#ifndef YYSTACK_USE_ALLOCA
853#ifdef alloca
854#define YYSTACK_USE_ALLOCA
855#else /* alloca not defined */
856#ifdef __GNUC__
857#define YYSTACK_USE_ALLOCA
858#define alloca __builtin_alloca
859#else /* not GNU C. */
860#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
861#define YYSTACK_USE_ALLOCA
862#include <alloca.h>
863#else /* not sparc */
864/* We think this test detects Watcom and Microsoft C. */
865/* This used to test MSDOS, but that is a bad idea
866 since that symbol is in the user namespace. */
867#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
868#if 0 /* No need for malloc.h, which pollutes the namespace;
869 instead, just don't use alloca. */
870#include <malloc.h>
871#endif
872#else /* not MSDOS, or __TURBOC__ */
873#if defined(_AIX)
874/* I don't know what this was needed for, but it pollutes the namespace.
875 So I turned it off. rms, 2 May 1997. */
876/* #include <malloc.h> */
877 #pragma alloca
878#define YYSTACK_USE_ALLOCA
879#else /* not MSDOS, or __TURBOC__, or _AIX */
880#if 0
881#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
882 and on HPUX 10. Eventually we can turn this on. */
883#define YYSTACK_USE_ALLOCA
884#define alloca __builtin_alloca
885#endif /* __hpux */
886#endif
887#endif /* not _AIX */
888#endif /* not MSDOS, or __TURBOC__ */
889#endif /* not sparc */
890#endif /* not GNU C */
891#endif /* alloca not defined */
892#endif /* YYSTACK_USE_ALLOCA not defined */
893
894#ifdef YYSTACK_USE_ALLOCA
895#define YYSTACK_ALLOC alloca
vlmfa67ddc2004-06-03 03:38:44 +0000896#else
vlm6a02a8a2004-09-08 00:28:11 +0000897#define YYSTACK_ALLOC malloc
vlmfa67ddc2004-06-03 03:38:44 +0000898#endif
899
vlm6a02a8a2004-09-08 00:28:11 +0000900/* Note: there must be only one dollar sign in this file.
901 It is replaced by the list of actions, each action
902 as one case of the switch. */
vlmfa67ddc2004-06-03 03:38:44 +0000903
904#define yyerrok (yyerrstatus = 0)
905#define yyclearin (yychar = YYEMPTY)
906#define YYEMPTY -2
907#define YYEOF 0
908#define YYACCEPT goto yyacceptlab
vlm6a02a8a2004-09-08 00:28:11 +0000909#define YYABORT goto yyabortlab
vlmfa67ddc2004-06-03 03:38:44 +0000910#define YYERROR goto yyerrlab1
vlm6a02a8a2004-09-08 00:28:11 +0000911/* Like YYERROR except do call yyerror.
912 This remains here temporarily to ease the
913 transition to the new meaning of YYERROR, for GCC.
vlmfa67ddc2004-06-03 03:38:44 +0000914 Once GCC version 2 has supplanted version 1, this can go. */
915#define YYFAIL goto yyerrlab
916#define YYRECOVERING() (!!yyerrstatus)
vlm6a02a8a2004-09-08 00:28:11 +0000917#define YYBACKUP(token, value) \
vlmfa67ddc2004-06-03 03:38:44 +0000918do \
919 if (yychar == YYEMPTY && yylen == 1) \
vlm6a02a8a2004-09-08 00:28:11 +0000920 { yychar = (token), yylval = (value); \
vlmfa67ddc2004-06-03 03:38:44 +0000921 yychar1 = YYTRANSLATE (yychar); \
922 YYPOPSTACK; \
923 goto yybackup; \
924 } \
925 else \
vlm6a02a8a2004-09-08 00:28:11 +0000926 { yyerror ("syntax error: cannot back up"); YYERROR; } \
vlmfa67ddc2004-06-03 03:38:44 +0000927while (0)
928
929#define YYTERROR 1
930#define YYERRCODE 256
931
vlm6a02a8a2004-09-08 00:28:11 +0000932#ifndef YYPURE
933#define YYLEX yylex()
vlmfa67ddc2004-06-03 03:38:44 +0000934#endif
935
vlm6a02a8a2004-09-08 00:28:11 +0000936#ifdef YYPURE
937#ifdef YYLSP_NEEDED
938#ifdef YYLEX_PARAM
939#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
940#else
941#define YYLEX yylex(&yylval, &yylloc)
942#endif
943#else /* not YYLSP_NEEDED */
944#ifdef YYLEX_PARAM
945#define YYLEX yylex(&yylval, YYLEX_PARAM)
946#else
947#define YYLEX yylex(&yylval)
948#endif
949#endif /* not YYLSP_NEEDED */
950#endif
vlmfa67ddc2004-06-03 03:38:44 +0000951
vlm6a02a8a2004-09-08 00:28:11 +0000952/* If nonreentrant, generate the variables here */
vlmfa67ddc2004-06-03 03:38:44 +0000953
vlm6a02a8a2004-09-08 00:28:11 +0000954#ifndef YYPURE
vlmfa67ddc2004-06-03 03:38:44 +0000955
vlm6a02a8a2004-09-08 00:28:11 +0000956int yychar; /* the lookahead symbol */
957YYSTYPE yylval; /* the semantic value of the */
958 /* lookahead symbol */
vlmfa67ddc2004-06-03 03:38:44 +0000959
vlm6a02a8a2004-09-08 00:28:11 +0000960#ifdef YYLSP_NEEDED
961YYLTYPE yylloc; /* location data for the lookahead */
962 /* symbol */
963#endif
vlmfa67ddc2004-06-03 03:38:44 +0000964
vlm6a02a8a2004-09-08 00:28:11 +0000965int yynerrs; /* number of parse errors so far */
966#endif /* not YYPURE */
967
968#if YYDEBUG != 0
969int yydebug; /* nonzero means print parse trace */
970/* Since this is uninitialized, it does not stop multiple parsers
971 from coexisting. */
972#endif
973
974/* YYINITDEPTH indicates the initial size of the parser's stacks */
975
vlmfa67ddc2004-06-03 03:38:44 +0000976#ifndef YYINITDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000977#define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +0000978#endif
979
vlm6a02a8a2004-09-08 00:28:11 +0000980/* YYMAXDEPTH is the maximum size the stacks can grow to
981 (effective only if the built-in stack extension method is used). */
vlmfa67ddc2004-06-03 03:38:44 +0000982
983#if YYMAXDEPTH == 0
vlm6a02a8a2004-09-08 00:28:11 +0000984#undef YYMAXDEPTH
vlmfa67ddc2004-06-03 03:38:44 +0000985#endif
986
987#ifndef YYMAXDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000988#define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +0000989#endif
990
vlm6a02a8a2004-09-08 00:28:11 +0000991/* Define __yy_memcpy. Note that the size argument
992 should be passed with type unsigned int, because that is what the non-GCC
993 definitions require. With GCC, __builtin_memcpy takes an arg
994 of type size_t, but it can handle unsigned int. */
vlmfa67ddc2004-06-03 03:38:44 +0000995
vlm6a02a8a2004-09-08 00:28:11 +0000996#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
997#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
998#else /* not GNU C or C++ */
999#ifndef __cplusplus
vlmfa67ddc2004-06-03 03:38:44 +00001000
vlm6a02a8a2004-09-08 00:28:11 +00001001/* This is the most reliable way to avoid incompatibilities
1002 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +00001003static void
vlm6a02a8a2004-09-08 00:28:11 +00001004__yy_memcpy (to, from, count)
1005 char *to;
1006 char *from;
1007 unsigned int count;
vlm80103492004-09-07 10:39:09 +00001008{
vlm6a02a8a2004-09-08 00:28:11 +00001009 register char *f = from;
1010 register char *t = to;
1011 register int i = count;
vlm80103492004-09-07 10:39:09 +00001012
vlm6a02a8a2004-09-08 00:28:11 +00001013 while (i-- > 0)
1014 *t++ = *f++;
vlm80103492004-09-07 10:39:09 +00001015}
vlm80103492004-09-07 10:39:09 +00001016
vlm6a02a8a2004-09-08 00:28:11 +00001017#else /* __cplusplus */
vlm80103492004-09-07 10:39:09 +00001018
vlm6a02a8a2004-09-08 00:28:11 +00001019/* This is the most reliable way to avoid incompatibilities
1020 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +00001021static void
vlm6a02a8a2004-09-08 00:28:11 +00001022__yy_memcpy (char *to, char *from, unsigned int count)
vlm80103492004-09-07 10:39:09 +00001023{
vlm6a02a8a2004-09-08 00:28:11 +00001024 register char *t = to;
1025 register char *f = from;
1026 register int i = count;
vlm80103492004-09-07 10:39:09 +00001027
vlm6a02a8a2004-09-08 00:28:11 +00001028 while (i-- > 0)
1029 *t++ = *f++;
vlm044f7442004-09-04 04:49:21 +00001030}
vlm044f7442004-09-04 04:49:21 +00001031
vlm6a02a8a2004-09-08 00:28:11 +00001032#endif
1033#endif
vlmfa67ddc2004-06-03 03:38:44 +00001034
vlm6a02a8a2004-09-08 00:28:11 +00001035#line 217 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00001036
1037/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1038 into yyparse. The argument should have type void *.
1039 It should actually point to an object.
1040 Grammar actions can access the variable by casting it
1041 to the proper pointer type. */
1042
1043#ifdef YYPARSE_PARAM
vlm6a02a8a2004-09-08 00:28:11 +00001044#ifdef __cplusplus
1045#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1046#define YYPARSE_PARAM_DECL
1047#else /* not __cplusplus */
1048#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1049#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1050#endif /* not __cplusplus */
1051#else /* not YYPARSE_PARAM */
1052#define YYPARSE_PARAM_ARG
1053#define YYPARSE_PARAM_DECL
1054#endif /* not YYPARSE_PARAM */
vlmfa67ddc2004-06-03 03:38:44 +00001055
1056/* Prevent warning if -Wstrict-prototypes. */
1057#ifdef __GNUC__
vlm6a02a8a2004-09-08 00:28:11 +00001058#ifdef YYPARSE_PARAM
vlmfa67ddc2004-06-03 03:38:44 +00001059int yyparse (void *);
vlm6a02a8a2004-09-08 00:28:11 +00001060#else
vlmfa67ddc2004-06-03 03:38:44 +00001061int yyparse (void);
vlm6a02a8a2004-09-08 00:28:11 +00001062#endif
vlm39e5ed72004-09-05 10:40:41 +00001063#endif
vlm80103492004-09-07 10:39:09 +00001064
vlmfa67ddc2004-06-03 03:38:44 +00001065int
vlm6a02a8a2004-09-08 00:28:11 +00001066yyparse(YYPARSE_PARAM_ARG)
vlmfa67ddc2004-06-03 03:38:44 +00001067 YYPARSE_PARAM_DECL
1068{
1069 register int yystate;
1070 register int yyn;
1071 register short *yyssp;
1072 register YYSTYPE *yyvsp;
vlm6a02a8a2004-09-08 00:28:11 +00001073 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1074 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
vlmfa67ddc2004-06-03 03:38:44 +00001075
vlm6a02a8a2004-09-08 00:28:11 +00001076 short yyssa[YYINITDEPTH]; /* the state stack */
1077 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
vlmfa67ddc2004-06-03 03:38:44 +00001078
vlm6a02a8a2004-09-08 00:28:11 +00001079 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1080 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
vlmfa67ddc2004-06-03 03:38:44 +00001081
vlm6a02a8a2004-09-08 00:28:11 +00001082#ifdef YYLSP_NEEDED
1083 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1084 YYLTYPE *yyls = yylsa;
1085 YYLTYPE *yylsp;
1086
1087#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1088#else
vlmfa67ddc2004-06-03 03:38:44 +00001089#define YYPOPSTACK (yyvsp--, yyssp--)
vlm6a02a8a2004-09-08 00:28:11 +00001090#endif
vlmfa67ddc2004-06-03 03:38:44 +00001091
vlm6a02a8a2004-09-08 00:28:11 +00001092 int yystacksize = YYINITDEPTH;
1093 int yyfree_stacks = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001094
vlm6a02a8a2004-09-08 00:28:11 +00001095#ifdef YYPURE
1096 int yychar;
1097 YYSTYPE yylval;
1098 int yynerrs;
1099#ifdef YYLSP_NEEDED
1100 YYLTYPE yylloc;
1101#endif
1102#endif
vlmfa67ddc2004-06-03 03:38:44 +00001103
vlm6a02a8a2004-09-08 00:28:11 +00001104 YYSTYPE yyval; /* the variable used to return */
1105 /* semantic values from the action */
1106 /* routines */
vlmfa67ddc2004-06-03 03:38:44 +00001107
1108 int yylen;
1109
vlm6a02a8a2004-09-08 00:28:11 +00001110#if YYDEBUG != 0
1111 if (yydebug)
1112 fprintf(stderr, "Starting parse\n");
1113#endif
vlmfa67ddc2004-06-03 03:38:44 +00001114
1115 yystate = 0;
1116 yyerrstatus = 0;
1117 yynerrs = 0;
1118 yychar = YYEMPTY; /* Cause a token to be read. */
1119
1120 /* Initialize stack pointers.
1121 Waste one element of value and location stack
1122 so that they stay on the same level as the state stack.
1123 The wasted elements are never initialized. */
1124
vlm6a02a8a2004-09-08 00:28:11 +00001125 yyssp = yyss - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001126 yyvsp = yyvs;
vlm6a02a8a2004-09-08 00:28:11 +00001127#ifdef YYLSP_NEEDED
1128 yylsp = yyls;
1129#endif
vlmfa67ddc2004-06-03 03:38:44 +00001130
vlm6a02a8a2004-09-08 00:28:11 +00001131/* Push a new state, which is found in yystate . */
1132/* In all cases, when you get here, the value and location stacks
1133 have just been pushed. so pushing a state here evens the stacks. */
1134yynewstate:
vlmfa67ddc2004-06-03 03:38:44 +00001135
vlm6a02a8a2004-09-08 00:28:11 +00001136 *++yyssp = yystate;
vlmfa67ddc2004-06-03 03:38:44 +00001137
1138 if (yyssp >= yyss + yystacksize - 1)
1139 {
vlm6a02a8a2004-09-08 00:28:11 +00001140 /* Give user a chance to reallocate the stack */
1141 /* Use copies of these so that the &'s don't force the real ones into memory. */
1142 YYSTYPE *yyvs1 = yyvs;
1143 short *yyss1 = yyss;
1144#ifdef YYLSP_NEEDED
1145 YYLTYPE *yyls1 = yyls;
1146#endif
1147
vlmfa67ddc2004-06-03 03:38:44 +00001148 /* Get the current used size of the three stacks, in elements. */
vlm6a02a8a2004-09-08 00:28:11 +00001149 int size = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001150
1151#ifdef yyoverflow
vlm6a02a8a2004-09-08 00:28:11 +00001152 /* Each stack pointer address is followed by the size of
1153 the data in use in that stack, in bytes. */
1154#ifdef YYLSP_NEEDED
1155 /* This used to be a conditional around just the two extra args,
1156 but that might be undefined if yyoverflow is a macro. */
1157 yyoverflow("parser stack overflow",
1158 &yyss1, size * sizeof (*yyssp),
1159 &yyvs1, size * sizeof (*yyvsp),
1160 &yyls1, size * sizeof (*yylsp),
1161 &yystacksize);
1162#else
1163 yyoverflow("parser stack overflow",
1164 &yyss1, size * sizeof (*yyssp),
1165 &yyvs1, size * sizeof (*yyvsp),
1166 &yystacksize);
1167#endif
vlmfa67ddc2004-06-03 03:38:44 +00001168
vlm6a02a8a2004-09-08 00:28:11 +00001169 yyss = yyss1; yyvs = yyvs1;
1170#ifdef YYLSP_NEEDED
1171 yyls = yyls1;
1172#endif
vlmfa67ddc2004-06-03 03:38:44 +00001173#else /* no yyoverflow */
1174 /* Extend the stack our own way. */
1175 if (yystacksize >= YYMAXDEPTH)
vlm6a02a8a2004-09-08 00:28:11 +00001176 {
1177 yyerror("parser stack overflow");
1178 if (yyfree_stacks)
1179 {
1180 free (yyss);
1181 free (yyvs);
1182#ifdef YYLSP_NEEDED
1183 free (yyls);
1184#endif
1185 }
1186 return 2;
1187 }
vlmfa67ddc2004-06-03 03:38:44 +00001188 yystacksize *= 2;
1189 if (yystacksize > YYMAXDEPTH)
1190 yystacksize = YYMAXDEPTH;
vlm6a02a8a2004-09-08 00:28:11 +00001191#ifndef YYSTACK_USE_ALLOCA
1192 yyfree_stacks = 1;
1193#endif
1194 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1195 __yy_memcpy ((char *)yyss, (char *)yyss1,
1196 size * (unsigned int) sizeof (*yyssp));
1197 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1198 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1199 size * (unsigned int) sizeof (*yyvsp));
1200#ifdef YYLSP_NEEDED
1201 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1202 __yy_memcpy ((char *)yyls, (char *)yyls1,
1203 size * (unsigned int) sizeof (*yylsp));
1204#endif
vlmfa67ddc2004-06-03 03:38:44 +00001205#endif /* no yyoverflow */
1206
vlm6a02a8a2004-09-08 00:28:11 +00001207 yyssp = yyss + size - 1;
1208 yyvsp = yyvs + size - 1;
1209#ifdef YYLSP_NEEDED
1210 yylsp = yyls + size - 1;
1211#endif
vlmfa67ddc2004-06-03 03:38:44 +00001212
vlm6a02a8a2004-09-08 00:28:11 +00001213#if YYDEBUG != 0
1214 if (yydebug)
1215 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1216#endif
vlmfa67ddc2004-06-03 03:38:44 +00001217
1218 if (yyssp >= yyss + yystacksize - 1)
1219 YYABORT;
1220 }
1221
vlm6a02a8a2004-09-08 00:28:11 +00001222#if YYDEBUG != 0
1223 if (yydebug)
1224 fprintf(stderr, "Entering state %d\n", yystate);
1225#endif
vlmfa67ddc2004-06-03 03:38:44 +00001226
1227 goto yybackup;
vlm6a02a8a2004-09-08 00:28:11 +00001228 yybackup:
vlmfa67ddc2004-06-03 03:38:44 +00001229
1230/* Do appropriate processing given the current state. */
1231/* Read a lookahead token if we need one and don't already have one. */
1232/* yyresume: */
1233
1234 /* First try to decide what to do without reference to lookahead token. */
1235
1236 yyn = yypact[yystate];
vlm6a02a8a2004-09-08 00:28:11 +00001237 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001238 goto yydefault;
1239
1240 /* Not known => get a lookahead token if don't already have one. */
1241
1242 /* yychar is either YYEMPTY or YYEOF
1243 or a valid token in external form. */
1244
1245 if (yychar == YYEMPTY)
1246 {
vlm6a02a8a2004-09-08 00:28:11 +00001247#if YYDEBUG != 0
1248 if (yydebug)
1249 fprintf(stderr, "Reading a token: ");
1250#endif
vlmfa67ddc2004-06-03 03:38:44 +00001251 yychar = YYLEX;
1252 }
1253
vlm6a02a8a2004-09-08 00:28:11 +00001254 /* Convert token to internal form (in yychar1) for indexing tables with */
vlmfa67ddc2004-06-03 03:38:44 +00001255
vlm6a02a8a2004-09-08 00:28:11 +00001256 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001257 {
1258 yychar1 = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001259 yychar = YYEOF; /* Don't call YYLEX any more */
vlmfa67ddc2004-06-03 03:38:44 +00001260
vlm6a02a8a2004-09-08 00:28:11 +00001261#if YYDEBUG != 0
1262 if (yydebug)
1263 fprintf(stderr, "Now at end of input.\n");
1264#endif
vlmfa67ddc2004-06-03 03:38:44 +00001265 }
1266 else
1267 {
vlm6a02a8a2004-09-08 00:28:11 +00001268 yychar1 = YYTRANSLATE(yychar);
vlmfa67ddc2004-06-03 03:38:44 +00001269
vlm6a02a8a2004-09-08 00:28:11 +00001270#if YYDEBUG != 0
1271 if (yydebug)
1272 {
1273 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1274 /* Give the individual parser a way to print the precise meaning
1275 of a token, for further debugging info. */
1276#ifdef YYPRINT
1277 YYPRINT (stderr, yychar, yylval);
1278#endif
1279 fprintf (stderr, ")\n");
1280 }
1281#endif
vlmfa67ddc2004-06-03 03:38:44 +00001282 }
1283
1284 yyn += yychar1;
vlm6a02a8a2004-09-08 00:28:11 +00001285 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001286 goto yydefault;
vlm6a02a8a2004-09-08 00:28:11 +00001287
vlmfa67ddc2004-06-03 03:38:44 +00001288 yyn = yytable[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001289
1290 /* yyn is what to do for this token type in this state.
1291 Negative => reduce, -yyn is rule number.
1292 Positive => shift, yyn is new state.
1293 New state is final state => don't bother to shift,
1294 just return success.
1295 0, or most negative number => error. */
1296
1297 if (yyn < 0)
vlmfa67ddc2004-06-03 03:38:44 +00001298 {
vlm6a02a8a2004-09-08 00:28:11 +00001299 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001300 goto yyerrlab;
1301 yyn = -yyn;
1302 goto yyreduce;
1303 }
vlm6a02a8a2004-09-08 00:28:11 +00001304 else if (yyn == 0)
1305 goto yyerrlab;
vlmfa67ddc2004-06-03 03:38:44 +00001306
1307 if (yyn == YYFINAL)
1308 YYACCEPT;
1309
1310 /* Shift the lookahead token. */
vlm6a02a8a2004-09-08 00:28:11 +00001311
1312#if YYDEBUG != 0
1313 if (yydebug)
1314 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1315#endif
vlmfa67ddc2004-06-03 03:38:44 +00001316
1317 /* Discard the token being shifted unless it is eof. */
1318 if (yychar != YYEOF)
1319 yychar = YYEMPTY;
1320
1321 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00001322#ifdef YYLSP_NEEDED
1323 *++yylsp = yylloc;
1324#endif
vlmfa67ddc2004-06-03 03:38:44 +00001325
vlm6a02a8a2004-09-08 00:28:11 +00001326 /* count tokens shifted since error; after three, turn off error status. */
1327 if (yyerrstatus) yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001328
1329 yystate = yyn;
1330 goto yynewstate;
1331
vlm6a02a8a2004-09-08 00:28:11 +00001332/* Do the default action for the current state. */
vlm80103492004-09-07 10:39:09 +00001333yydefault:
vlm6a02a8a2004-09-08 00:28:11 +00001334
vlmfa67ddc2004-06-03 03:38:44 +00001335 yyn = yydefact[yystate];
1336 if (yyn == 0)
1337 goto yyerrlab;
1338
vlm6a02a8a2004-09-08 00:28:11 +00001339/* Do a reduction. yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001340yyreduce:
1341 yylen = yyr2[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001342 if (yylen > 0)
1343 yyval = yyvsp[1-yylen]; /* implement default value of the action */
vlmfa67ddc2004-06-03 03:38:44 +00001344
vlm6a02a8a2004-09-08 00:28:11 +00001345#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00001346 if (yydebug)
1347 {
vlm6a02a8a2004-09-08 00:28:11 +00001348 int i;
vlmfa67ddc2004-06-03 03:38:44 +00001349
vlm6a02a8a2004-09-08 00:28:11 +00001350 fprintf (stderr, "Reducing via rule %d (line %d), ",
1351 yyn, yyrline[yyn]);
vlmfa67ddc2004-06-03 03:38:44 +00001352
1353 /* Print the symbols being reduced, and their result. */
vlm6a02a8a2004-09-08 00:28:11 +00001354 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1355 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1356 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
vlmfa67ddc2004-06-03 03:38:44 +00001357 }
1358#endif
vlm80103492004-09-07 10:39:09 +00001359
vlm6a02a8a2004-09-08 00:28:11 +00001360
1361 switch (yyn) {
1362
1363case 1:
vlmdc7cf042006-03-09 08:49:26 +00001364#line 323 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001365{
1366 *(void **)param = yyvsp[0].a_grammar;
1367 ;
1368 break;}
1369case 2:
vlmdc7cf042006-03-09 08:49:26 +00001370#line 329 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001371{
vlmfa67ddc2004-06-03 03:38:44 +00001372 yyval.a_grammar = asn1p_new();
1373 checkmem(yyval.a_grammar);
1374 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001375 ;
1376 break;}
1377case 3:
vlmdc7cf042006-03-09 08:49:26 +00001378#line 334 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001379{
vlmfa67ddc2004-06-03 03:38:44 +00001380 yyval.a_grammar = yyvsp[-1].a_grammar;
1381 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001382 ;
1383 break;}
1384case 4:
vlmdc7cf042006-03-09 08:49:26 +00001385#line 355 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001386{
vlmfa67ddc2004-06-03 03:38:44 +00001387
1388 if(yyvsp[-1].a_module) {
1389 yyval.a_module = yyvsp[-1].a_module;
1390 } else {
1391 /* There's a chance that a module is just plain empty */
1392 yyval.a_module = asn1p_module_new();
1393 }
1394 checkmem(yyval.a_module);
1395
vlm931aeed2005-08-12 10:09:10 +00001396 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00001397 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1398 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001399 ;
1400 break;}
1401case 5:
vlmdc7cf042006-03-09 08:49:26 +00001402#line 376 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001403{ yyval.a_oid = 0; ;
1404 break;}
1405case 6:
vlmdc7cf042006-03-09 08:49:26 +00001406#line 377 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001407{ yyval.a_oid = yyvsp[0].a_oid; ;
1408 break;}
1409case 7:
vlmdc7cf042006-03-09 08:49:26 +00001410#line 381 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001411{
vlmfa67ddc2004-06-03 03:38:44 +00001412 yyval.a_oid = yyvsp[-1].a_oid;
vlm6a02a8a2004-09-08 00:28:11 +00001413 ;
1414 break;}
1415case 8:
vlmdc7cf042006-03-09 08:49:26 +00001416#line 384 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001417{
vlmfa67ddc2004-06-03 03:38:44 +00001418 yyval.a_oid = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001419 ;
1420 break;}
1421case 9:
vlmdc7cf042006-03-09 08:49:26 +00001422#line 390 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001423{
vlmfa67ddc2004-06-03 03:38:44 +00001424 yyval.a_oid = asn1p_oid_new();
1425 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1426 if(yyvsp[0].a_oid_arc.name)
1427 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001428 ;
1429 break;}
1430case 10:
vlmdc7cf042006-03-09 08:49:26 +00001431#line 396 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001432{
vlmfa67ddc2004-06-03 03:38:44 +00001433 yyval.a_oid = yyvsp[-1].a_oid;
1434 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1435 if(yyvsp[0].a_oid_arc.name)
1436 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001437 ;
1438 break;}
1439case 11:
vlmdc7cf042006-03-09 08:49:26 +00001440#line 405 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001441{ /* iso */
vlmfa67ddc2004-06-03 03:38:44 +00001442 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1443 yyval.a_oid_arc.number = -1;
vlm6a02a8a2004-09-08 00:28:11 +00001444 ;
1445 break;}
1446case 12:
vlmdc7cf042006-03-09 08:49:26 +00001447#line 409 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001448{ /* iso(1) */
vlmfa67ddc2004-06-03 03:38:44 +00001449 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1450 yyval.a_oid_arc.number = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001451 ;
1452 break;}
1453case 13:
vlmdc7cf042006-03-09 08:49:26 +00001454#line 413 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001455{ /* 1 */
vlmfa67ddc2004-06-03 03:38:44 +00001456 yyval.a_oid_arc.name = 0;
1457 yyval.a_oid_arc.number = yyvsp[0].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001458 ;
1459 break;}
1460case 14:
vlmdc7cf042006-03-09 08:49:26 +00001461#line 423 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001462{ yyval.a_module_flags = MSF_NOFLAGS; ;
1463 break;}
1464case 15:
vlmdc7cf042006-03-09 08:49:26 +00001465#line 424 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001466{
vlmfa67ddc2004-06-03 03:38:44 +00001467 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001468 ;
1469 break;}
1470case 16:
vlmdc7cf042006-03-09 08:49:26 +00001471#line 433 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001472{
vlmfa67ddc2004-06-03 03:38:44 +00001473 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001474 ;
1475 break;}
1476case 17:
vlmdc7cf042006-03-09 08:49:26 +00001477#line 436 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001478{
vlmfa67ddc2004-06-03 03:38:44 +00001479 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001480 ;
1481 break;}
1482case 18:
vlmdc7cf042006-03-09 08:49:26 +00001483#line 445 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001484{
vlmfa67ddc2004-06-03 03:38:44 +00001485 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001486 ;
1487 break;}
1488case 19:
vlmdc7cf042006-03-09 08:49:26 +00001489#line 448 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001490{
vlmfa67ddc2004-06-03 03:38:44 +00001491 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001492 ;
1493 break;}
1494case 20:
vlmdc7cf042006-03-09 08:49:26 +00001495#line 451 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001496{
vlmfa67ddc2004-06-03 03:38:44 +00001497 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001498 ;
1499 break;}
1500case 21:
vlmdc7cf042006-03-09 08:49:26 +00001501#line 454 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001502{
vlmfa67ddc2004-06-03 03:38:44 +00001503 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
vlm6a02a8a2004-09-08 00:28:11 +00001504 ;
1505 break;}
1506case 22:
vlmdc7cf042006-03-09 08:49:26 +00001507#line 458 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001508{
vlm9283dbe2004-08-18 04:59:12 +00001509 /* X.680Amd1 specifies TAG and XER */
1510 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1511 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1512 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1513 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1514 } else {
1515 fprintf(stderr,
1516 "WARNING: %s INSTRUCTIONS at line %d: "
1517 "Unrecognized encoding reference\n",
1518 yyvsp[-1].tv_str, yylineno);
1519 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1520 }
1521 free(yyvsp[-1].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00001522 ;
1523 break;}
1524case 23:
vlmdc7cf042006-03-09 08:49:26 +00001525#line 479 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001526{ yyval.a_module = 0; ;
1527 break;}
1528case 24:
vlmdc7cf042006-03-09 08:49:26 +00001529#line 480 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001530{
vlmfa67ddc2004-06-03 03:38:44 +00001531 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001532 ;
1533 break;}
1534case 25:
vlmdc7cf042006-03-09 08:49:26 +00001535#line 489 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001536{
vlm9283dbe2004-08-18 04:59:12 +00001537 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001538 ;
1539 break;}
1540case 26:
vlmdc7cf042006-03-09 08:49:26 +00001541#line 492 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001542{
vlmfa67ddc2004-06-03 03:38:44 +00001543 yyval.a_module = yyvsp[-1].a_module;
1544
vlm9283dbe2004-08-18 04:59:12 +00001545 /* Behave well when one of them is skipped. */
1546 if(!(yyvsp[-1].a_module)) {
1547 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1548 break;
1549 }
1550
vlmfa67ddc2004-06-03 03:38:44 +00001551#ifdef MY_IMPORT
1552#error MY_IMPORT DEFINED ELSEWHERE!
1553#endif
1554#define MY_IMPORT(foo,field) do { \
vlm97ed7152004-08-13 12:31:09 +00001555 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
vlmfa67ddc2004-06-03 03:38:44 +00001556 TQ_ADD(&(yyval.a_module->foo), \
1557 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1558 field); \
vlm97ed7152004-08-13 12:31:09 +00001559 } \
1560 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1561 } while(0)
vlmfa67ddc2004-06-03 03:38:44 +00001562
1563 MY_IMPORT(imports, xp_next);
1564 MY_IMPORT(exports, xp_next);
1565 MY_IMPORT(members, next);
1566#undef MY_IMPORT
1567
vlm6a02a8a2004-09-08 00:28:11 +00001568 ;
1569 break;}
1570case 27:
vlmdc7cf042006-03-09 08:49:26 +00001571#line 525 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001572{
vlmfa67ddc2004-06-03 03:38:44 +00001573 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001574 ;
1575 break;}
1576case 28:
vlmdc7cf042006-03-09 08:49:26 +00001577#line 528 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001578{
vlmfa67ddc2004-06-03 03:38:44 +00001579 yyval.a_module = asn1p_module_new();
1580 checkmem(yyval.a_module);
1581 if(yyvsp[0].a_xports) {
1582 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1583 } else {
1584 /* "EXPORTS ALL;" ? */
1585 }
vlm6a02a8a2004-09-08 00:28:11 +00001586 ;
1587 break;}
1588case 29:
vlmdc7cf042006-03-09 08:49:26 +00001589#line 537 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001590{
vlm9283dbe2004-08-18 04:59:12 +00001591 yyval.a_module = asn1p_module_new();
1592 checkmem(yyval.a_module);
1593 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1594 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1595 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001596 ;
1597 break;}
vlm931aeed2005-08-12 10:09:10 +00001598case 30:
vlmdc7cf042006-03-09 08:49:26 +00001599#line 544 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001600{
1601 yyval.a_module = asn1p_module_new();
1602 checkmem(yyval.a_module);
1603 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1604 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1605 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1606 ;
1607 break;}
vlm6a02a8a2004-09-08 00:28:11 +00001608case 31:
vlmdc7cf042006-03-09 08:49:26 +00001609#line 557 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001610{
vlm9283dbe2004-08-18 04:59:12 +00001611 yyval.a_module = asn1p_module_new();
1612 checkmem(yyval.a_module);
1613 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1614 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1615 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001616 ;
1617 break;}
1618case 32:
vlmdc7cf042006-03-09 08:49:26 +00001619#line 565 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001620{ asn1p_lexer_hack_push_encoding_control(); ;
1621 break;}
1622case 33:
vlmdc7cf042006-03-09 08:49:26 +00001623#line 566 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001624{
vlm9283dbe2004-08-18 04:59:12 +00001625 fprintf(stderr,
1626 "WARNING: ENCODING-CONTROL %s "
1627 "specification at line %d ignored\n",
1628 yyvsp[-1].tv_str, yylineno);
1629 free(yyvsp[-1].tv_str);
1630 yyval.a_module = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001631 ;
1632 break;}
1633case 34:
vlmdc7cf042006-03-09 08:49:26 +00001634#line 578 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001635{
vlmfa67ddc2004-06-03 03:38:44 +00001636 return yyerror(
vlm1ac75e72005-11-26 11:21:55 +00001637 "Attempt to redefine a standard basic string type, "
1638 "please comment out or remove this type redefinition.");
vlm6a02a8a2004-09-08 00:28:11 +00001639 ;
1640 break;}
1641case 35:
vlmdc7cf042006-03-09 08:49:26 +00001642#line 591 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001643{
vlm931aeed2005-08-12 10:09:10 +00001644 if(!saved_aid && 0)
1645 return yyerror("Unterminated IMPORTS FROM, "
1646 "expected semicolon ';'");
1647 saved_aid = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001648 yyval.a_module = yyvsp[-1].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001649 ;
1650 break;}
1651case 36:
vlmdc7cf042006-03-09 08:49:26 +00001652#line 601 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001653{
vlmfa67ddc2004-06-03 03:38:44 +00001654 return yyerror("Empty IMPORTS list");
vlm6a02a8a2004-09-08 00:28:11 +00001655 ;
1656 break;}
1657case 37:
vlmdc7cf042006-03-09 08:49:26 +00001658#line 607 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001659{
vlmfa67ddc2004-06-03 03:38:44 +00001660 yyval.a_module = asn1p_module_new();
1661 checkmem(yyval.a_module);
1662 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001663 ;
1664 break;}
1665case 38:
vlmdc7cf042006-03-09 08:49:26 +00001666#line 612 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001667{
vlmfa67ddc2004-06-03 03:38:44 +00001668 yyval.a_module = yyvsp[-1].a_module;
1669 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001670 ;
1671 break;}
1672case 39:
vlmdc7cf042006-03-09 08:49:26 +00001673#line 619 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001674{ memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
1675 break;}
1676case 40:
vlmdc7cf042006-03-09 08:49:26 +00001677#line 620 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001678{ yyval.a_aid.oid = yyvsp[0].a_oid; ;
1679 break;}
1680case 41:
vlmdc7cf042006-03-09 08:49:26 +00001681#line 624 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001682{
vlmfa67ddc2004-06-03 03:38:44 +00001683 yyval.a_xports = yyvsp[-3].a_xports;
vlm931aeed2005-08-12 10:09:10 +00001684 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
1685 yyval.a_xports->identifier = yyvsp[0].a_aid;
1686 /* This stupid thing is used for look-back hack. */
1687 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
vlmfa67ddc2004-06-03 03:38:44 +00001688 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001689 ;
1690 break;}
vlm931aeed2005-08-12 10:09:10 +00001691case 42:
vlmdc7cf042006-03-09 08:49:26 +00001692#line 635 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001693{
vlmfa67ddc2004-06-03 03:38:44 +00001694 yyval.a_xports = asn1p_xports_new();
1695 checkmem(yyval.a_xports);
1696 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001697 ;
1698 break;}
vlm931aeed2005-08-12 10:09:10 +00001699case 43:
vlmdc7cf042006-03-09 08:49:26 +00001700#line 640 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001701{
vlmfa67ddc2004-06-03 03:38:44 +00001702 yyval.a_xports = yyvsp[-2].a_xports;
1703 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001704 ;
1705 break;}
vlm0aa86902004-10-12 23:26:53 +00001706case 44:
vlmdc7cf042006-03-09 08:49:26 +00001707#line 647 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001708{
vlmfa67ddc2004-06-03 03:38:44 +00001709 yyval.a_expr = asn1p_expr_new(yylineno);
1710 checkmem(yyval.a_expr);
1711 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1712 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm6a02a8a2004-09-08 00:28:11 +00001713 ;
1714 break;}
vlm0aa86902004-10-12 23:26:53 +00001715case 45:
vlmdc7cf042006-03-09 08:49:26 +00001716#line 653 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001717{ /* Completely equivalent to above */
1718 yyval.a_expr = asn1p_expr_new(yylineno);
1719 checkmem(yyval.a_expr);
1720 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1721 yyval.a_expr->expr_type = A1TC_REFERENCE;
1722 ;
1723 break;}
1724case 46:
vlmdc7cf042006-03-09 08:49:26 +00001725#line 659 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001726{
1727 yyval.a_expr = asn1p_expr_new(yylineno);
1728 checkmem(yyval.a_expr);
1729 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1730 yyval.a_expr->expr_type = A1TC_REFERENCE;
1731 ;
1732 break;}
1733case 47:
vlmdc7cf042006-03-09 08:49:26 +00001734#line 668 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001735{
vlmfa67ddc2004-06-03 03:38:44 +00001736 yyval.a_xports = yyvsp[-1].a_xports;
vlm6a02a8a2004-09-08 00:28:11 +00001737 ;
1738 break;}
vlm931aeed2005-08-12 10:09:10 +00001739case 48:
vlmdc7cf042006-03-09 08:49:26 +00001740#line 671 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001741{
vlmfa67ddc2004-06-03 03:38:44 +00001742 yyval.a_xports = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001743 ;
1744 break;}
vlm931aeed2005-08-12 10:09:10 +00001745case 49:
vlmdc7cf042006-03-09 08:49:26 +00001746#line 674 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001747{
vlmfa67ddc2004-06-03 03:38:44 +00001748 /* Empty EXPORTS clause effectively prohibits export. */
1749 yyval.a_xports = asn1p_xports_new();
1750 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001751 ;
1752 break;}
vlm931aeed2005-08-12 10:09:10 +00001753case 50:
vlmdc7cf042006-03-09 08:49:26 +00001754#line 682 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001755{
vlmfa67ddc2004-06-03 03:38:44 +00001756 yyval.a_xports = asn1p_xports_new();
1757 assert(yyval.a_xports);
1758 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001759 ;
1760 break;}
vlm931aeed2005-08-12 10:09:10 +00001761case 51:
vlmdc7cf042006-03-09 08:49:26 +00001762#line 687 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001763{
vlmfa67ddc2004-06-03 03:38:44 +00001764 yyval.a_xports = yyvsp[-2].a_xports;
1765 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001766 ;
1767 break;}
vlm0aa86902004-10-12 23:26:53 +00001768case 52:
vlmdc7cf042006-03-09 08:49:26 +00001769#line 694 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001770{
1771 yyval.a_expr = asn1p_expr_new(yylineno);
1772 checkmem(yyval.a_expr);
1773 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1774 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1775 ;
1776 break;}
1777case 53:
vlmdc7cf042006-03-09 08:49:26 +00001778#line 700 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001779{
1780 yyval.a_expr = asn1p_expr_new(yylineno);
1781 checkmem(yyval.a_expr);
1782 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1783 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1784 ;
vlm7388db02005-03-31 21:48:13 +00001785 break;}
1786case 54:
vlmdc7cf042006-03-09 08:49:26 +00001787#line 706 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001788{
1789 yyval.a_expr = asn1p_expr_new(yylineno);
1790 checkmem(yyval.a_expr);
1791 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1792 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1793 ;
1794 break;}
1795case 55:
vlmdc7cf042006-03-09 08:49:26 +00001796#line 717 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001797{ asn1p_lexer_hack_push_opaque_state(); ;
1798 break;}
1799case 56:
vlmdc7cf042006-03-09 08:49:26 +00001800#line 717 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001801{
vlmfa67ddc2004-06-03 03:38:44 +00001802 yyval.a_expr = yyvsp[-4].a_expr;
1803 assert(yyval.a_expr->Identifier == 0);
1804 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1805 yyval.a_expr->meta_type = AMT_VALUESET;
vlm7388db02005-03-31 21:48:13 +00001806 // take care of ValueSet body
vlm6a02a8a2004-09-08 00:28:11 +00001807 ;
1808 break;}
vlm931aeed2005-08-12 10:09:10 +00001809case 57:
vlmdc7cf042006-03-09 08:49:26 +00001810#line 727 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001811{
vlmfa67ddc2004-06-03 03:38:44 +00001812 yyval.a_expr = asn1p_expr_new(yylineno);
1813 checkmem(yyval.a_expr);
1814 yyval.a_expr->reference = yyvsp[0].a_ref;
1815 yyval.a_expr->expr_type = A1TC_REFERENCE;
1816 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00001817 ;
1818 break;}
vlm931aeed2005-08-12 10:09:10 +00001819case 58:
vlmdc7cf042006-03-09 08:49:26 +00001820#line 734 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001821{
vlmfa67ddc2004-06-03 03:38:44 +00001822 yyval.a_expr = asn1p_expr_new(yylineno);
1823 checkmem(yyval.a_expr);
1824 yyval.a_expr->expr_type = yyvsp[0].a_type;
1825 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001826 ;
1827 break;}
vlm931aeed2005-08-12 10:09:10 +00001828case 59:
vlmdc7cf042006-03-09 08:49:26 +00001829#line 752 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001830{
vlmfa67ddc2004-06-03 03:38:44 +00001831 yyval.a_expr = yyvsp[0].a_expr;
vlmfce48a42004-09-14 02:36:39 +00001832 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00001833 assert(yyval.a_expr->expr_type);
1834 assert(yyval.a_expr->meta_type);
vlm6a02a8a2004-09-08 00:28:11 +00001835 ;
1836 break;}
vlmdc7cf042006-03-09 08:49:26 +00001837case 60:
1838#line 758 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001839{
vlmfa67ddc2004-06-03 03:38:44 +00001840 yyval.a_expr = yyvsp[0].a_expr;
1841 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1842 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
vlmdc7cf042006-03-09 08:49:26 +00001843 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
vlm6a02a8a2004-09-08 00:28:11 +00001844 ;
1845 break;}
vlmdc7cf042006-03-09 08:49:26 +00001846case 61:
1847#line 774 "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 assert(yyval.a_expr->Identifier == 0);
1851 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1852 yyval.a_expr->params = yyvsp[-3].a_plist;
1853 yyval.a_expr->meta_type = AMT_PARAMTYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001854 ;
1855 break;}
vlmdc7cf042006-03-09 08:49:26 +00001856case 62:
1857#line 784 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001858{
vlmfa67ddc2004-06-03 03:38:44 +00001859 int ret;
1860 yyval.a_plist = asn1p_paramlist_new(yylineno);
1861 checkmem(yyval.a_plist);
1862 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1863 checkmem(ret == 0);
1864 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1865 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001866 ;
1867 break;}
vlmdc7cf042006-03-09 08:49:26 +00001868case 63:
1869#line 793 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001870{
vlmfa67ddc2004-06-03 03:38:44 +00001871 int ret;
1872 yyval.a_plist = yyvsp[-2].a_plist;
1873 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1874 checkmem(ret == 0);
1875 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1876 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001877 ;
1878 break;}
vlmdc7cf042006-03-09 08:49:26 +00001879case 64:
1880#line 804 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001881{
vlmfa67ddc2004-06-03 03:38:44 +00001882 yyval.a_parg.governor = NULL;
1883 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001884 ;
1885 break;}
vlmdc7cf042006-03-09 08:49:26 +00001886case 65:
1887#line 808 "asn1p_y.y"
1888{
1889 int ret;
1890 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1891 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1892 checkmem(ret == 0);
1893 yyval.a_parg.argument = yyvsp[0].tv_str;
1894 ;
1895 break;}
vlm7388db02005-03-31 21:48:13 +00001896case 66:
vlmdc7cf042006-03-09 08:49:26 +00001897#line 815 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001898{
1899 int ret;
1900 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1901 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1902 checkmem(ret == 0);
1903 yyval.a_parg.argument = yyvsp[0].tv_str;
1904 ;
1905 break;}
1906case 67:
vlmdc7cf042006-03-09 08:49:26 +00001907#line 822 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00001908{
1909 int ret;
1910 yyval.a_parg.governor = asn1p_ref_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00001911 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1912 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1913 checkmem(ret == 0);
1914 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001915 ;
1916 break;}
vlmdc7cf042006-03-09 08:49:26 +00001917case 68:
1918#line 833 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001919{
vlmfa67ddc2004-06-03 03:38:44 +00001920 yyval.a_expr = asn1p_expr_new(yylineno);
1921 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001922 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1923 ;
1924 break;}
vlmdc7cf042006-03-09 08:49:26 +00001925case 69:
1926#line 838 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001927{
vlmfa67ddc2004-06-03 03:38:44 +00001928 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001929 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1930 ;
1931 break;}
vlmdc7cf042006-03-09 08:49:26 +00001932case 70:
1933#line 845 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001934{
vlmfa67ddc2004-06-03 03:38:44 +00001935 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001936 ;
1937 break;}
vlmdc7cf042006-03-09 08:49:26 +00001938case 71:
1939#line 848 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001940{
vlmfa67ddc2004-06-03 03:38:44 +00001941 yyval.a_expr = asn1p_expr_new(yylineno);
1942 checkmem(yyval.a_expr);
1943 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1944 yyval.a_expr->expr_type = A1TC_REFERENCE;
1945 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00001946 ;
1947 break;}
vlmdc7cf042006-03-09 08:49:26 +00001948case 72:
1949#line 872 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001950{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1951 break;}
vlmdc7cf042006-03-09 08:49:26 +00001952case 73:
1953#line 873 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001954{ yyval.a_expr = yyvsp[0].a_expr; ;
1955 break;}
vlmdc7cf042006-03-09 08:49:26 +00001956case 74:
1957#line 876 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001958{
vlmfa67ddc2004-06-03 03:38:44 +00001959 yyval.a_expr = asn1p_expr_new(yylineno);
1960 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001961 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1962 ;
1963 break;}
vlmdc7cf042006-03-09 08:49:26 +00001964case 75:
1965#line 881 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001966{
vlmfa67ddc2004-06-03 03:38:44 +00001967 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001968 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1969 ;
1970 break;}
vlmdc7cf042006-03-09 08:49:26 +00001971case 76:
1972#line 888 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001973{
vlmec8f6812004-08-22 03:19:54 +00001974 yyval.a_expr = yyvsp[-1].a_expr;
1975 assert(yyval.a_expr->Identifier == 0);
vlmfce48a42004-09-14 02:36:39 +00001976 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlm177a5b62005-09-05 05:17:57 +00001977 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
vlmec8f6812004-08-22 03:19:54 +00001978 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00001979 ;
1980 break;}
vlmdc7cf042006-03-09 08:49:26 +00001981case 77:
1982#line 895 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001983{
vlm177a5b62005-09-05 05:17:57 +00001984 yyval.a_expr = yyvsp[-1].a_expr;
1985 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
1986 yyval.a_expr->marker = yyvsp[0].a_marker;
1987 _fixup_anonymous_identifier(yyval.a_expr);
1988 ;
1989 break;}
vlmdc7cf042006-03-09 08:49:26 +00001990case 78:
1991#line 901 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00001992{
vlmec8f6812004-08-22 03:19:54 +00001993 yyval.a_expr = asn1p_expr_new(yylineno);
1994 checkmem(yyval.a_expr);
1995 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1996 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
vlm6a02a8a2004-09-08 00:28:11 +00001997 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1998 ;
1999 break;}
vlmdc7cf042006-03-09 08:49:26 +00002000case 79:
2001#line 908 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002002{
vlmec8f6812004-08-22 03:19:54 +00002003 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002004 ;
2005 break;}
vlmdc7cf042006-03-09 08:49:26 +00002006case 80:
2007#line 914 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002008{
vlmec8f6812004-08-22 03:19:54 +00002009 yyval.a_expr = asn1p_expr_new(yylineno);
2010 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00002011 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2012 ;
2013 break;}
vlmdc7cf042006-03-09 08:49:26 +00002014case 81:
2015#line 919 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002016{
vlmec8f6812004-08-22 03:19:54 +00002017 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002018 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2019 ;
2020 break;}
vlmdc7cf042006-03-09 08:49:26 +00002021case 82:
2022#line 926 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002023{
vlmec8f6812004-08-22 03:19:54 +00002024 yyval.a_expr = yyvsp[0].a_expr;
vlm5d89c3d2005-08-13 09:07:11 +00002025 assert(yyval.a_expr->Identifier == 0);
2026 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002027 ;
2028 break;}
vlmdc7cf042006-03-09 08:49:26 +00002029case 83:
2030#line 931 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002031{
2032 yyval.a_expr = yyvsp[0].a_expr;
2033 ;
2034 break;}
vlmdc7cf042006-03-09 08:49:26 +00002035case 84:
2036#line 934 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002037{
2038 yyval.a_expr = yyvsp[0].a_expr;
2039 _fixup_anonymous_identifier(yyval.a_expr);
2040 ;
2041 break;}
vlmdc7cf042006-03-09 08:49:26 +00002042case 85:
2043#line 941 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002044{
vlmfa67ddc2004-06-03 03:38:44 +00002045 yyval.a_expr = yyvsp[-2].a_expr;
2046 checkmem(yyval.a_expr);
2047 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2048 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
vlmdc7cf042006-03-09 08:49:26 +00002049 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
vlm6a02a8a2004-09-08 00:28:11 +00002050 ;
2051 break;}
vlmdc7cf042006-03-09 08:49:26 +00002052case 86:
2053#line 951 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002054{ yyval.a_int = 0; ;
2055 break;}
vlmdc7cf042006-03-09 08:49:26 +00002056case 87:
2057#line 952 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002058{ yyval.a_int = 1; ;
2059 break;}
vlmdc7cf042006-03-09 08:49:26 +00002060case 88:
2061#line 956 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002062{
vlmfa67ddc2004-06-03 03:38:44 +00002063 yyval.a_expr = asn1p_expr_new(yylineno);
2064 checkmem(yyval.a_expr);
2065 yyval.a_expr->expr_type = A1TC_CLASSDEF;
vlmdc7cf042006-03-09 08:49:26 +00002066 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2067 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2068 ;
2069 break;}
2070case 89:
2071#line 963 "asn1p_y.y"
2072{
2073 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002074 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2075 ;
2076 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002077case 90:
vlmdc7cf042006-03-09 08:49:26 +00002078#line 973 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002079{
vlmdc7cf042006-03-09 08:49:26 +00002080 yyval.a_expr = asn1p_expr_new(yylineno);
2081 checkmem(yyval.a_expr);
2082 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2083 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2084 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2085 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00002086 ;
2087 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002088case 91:
vlmdc7cf042006-03-09 08:49:26 +00002089#line 983 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002090{
vlmfa67ddc2004-06-03 03:38:44 +00002091 yyval.a_expr = asn1p_expr_new(yylineno);
vlmdc7cf042006-03-09 08:49:26 +00002092 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00002093 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
vlmdc7cf042006-03-09 08:49:26 +00002094 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2095 yyval.a_expr->unique = yyvsp[-1].a_int;
vlmfa67ddc2004-06-03 03:38:44 +00002096 yyval.a_expr->marker = yyvsp[0].a_marker;
vlmdc7cf042006-03-09 08:49:26 +00002097 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00002098 ;
2099 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002100case 92:
vlmdc7cf042006-03-09 08:49:26 +00002101#line 994 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002102{
vlmdc7cf042006-03-09 08:49:26 +00002103 yyval.a_expr = asn1p_expr_new(yylineno);
2104 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2105 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2106 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2107 yyval.a_expr->reference = yyvsp[-1].a_ref;
vlmbde35d42004-11-24 17:43:29 +00002108 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00002109 ;
2110 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002111case 93:
vlmdc7cf042006-03-09 08:49:26 +00002112#line 1004 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002113{
vlmfa67ddc2004-06-03 03:38:44 +00002114 yyval.a_expr = asn1p_expr_new(yylineno);
vlmdc7cf042006-03-09 08:49:26 +00002115 checkmem(yyval.a_expr);
2116 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2117 yyval.a_expr->reference = yyvsp[-1].a_ref;
2118 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2119 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2120 yyval.a_expr->marker = yyvsp[0].a_marker;
2121 ;
vlm6a02a8a2004-09-08 00:28:11 +00002122 break;}
vlma367d552006-03-09 09:11:53 +00002123case 94:
2124#line 1015 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002125{
2126 yyval.a_expr = asn1p_expr_new(yylineno);
vlmdc7cf042006-03-09 08:49:26 +00002127 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmdc7cf042006-03-09 08:49:26 +00002128 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
vlma367d552006-03-09 09:11:53 +00002129 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2130 yyval.a_expr->reference = yyvsp[-1].a_ref;
vlmdc7cf042006-03-09 08:49:26 +00002131 yyval.a_expr->marker = yyvsp[0].a_marker;
2132 ;
2133 break;}
vlma367d552006-03-09 09:11:53 +00002134case 95:
2135#line 1025 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002136{
2137 yyval.a_expr = asn1p_expr_new(yylineno);
2138 checkmem(yyval.a_expr);
2139 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2140 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2141 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2142 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
2143 yyval.a_expr->marker = yyvsp[0].a_marker;
2144 ;
2145 break;}
vlma367d552006-03-09 09:11:53 +00002146case 96:
2147#line 1036 "asn1p_y.y"
2148{
2149 yyval.a_expr = asn1p_expr_new(yylineno);
2150 checkmem(yyval.a_expr);
2151 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2152 yyval.a_expr->reference = yyvsp[-1].a_ref;
2153 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2154 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2155 yyval.a_expr->marker = yyvsp[0].a_marker;
2156 ;
2157 break;}
vlmdc7cf042006-03-09 08:49:26 +00002158case 97:
vlma367d552006-03-09 09:11:53 +00002159#line 1048 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002160{ yyval.a_wsynt = 0; ;
2161 break;}
2162case 98:
vlma367d552006-03-09 09:11:53 +00002163#line 1049 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002164{
vlm5d89c3d2005-08-13 09:07:11 +00002165 yyval.a_wsynt = yyvsp[0].a_wsynt;
vlm6a02a8a2004-09-08 00:28:11 +00002166 ;
2167 break;}
vlmdc7cf042006-03-09 08:49:26 +00002168case 99:
vlma367d552006-03-09 09:11:53 +00002169#line 1056 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002170{ asn1p_lexer_hack_enable_with_syntax(); ;
2171 break;}
vlmdc7cf042006-03-09 08:49:26 +00002172case 100:
vlma367d552006-03-09 09:11:53 +00002173#line 1058 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002174{
2175 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2176 ;
2177 break;}
vlmdc7cf042006-03-09 08:49:26 +00002178case 101:
vlma367d552006-03-09 09:11:53 +00002179#line 1064 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002180{
vlmfa67ddc2004-06-03 03:38:44 +00002181 yyval.a_wsynt = asn1p_wsyntx_new();
2182 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002183 ;
2184 break;}
vlmdc7cf042006-03-09 08:49:26 +00002185case 102:
vlma367d552006-03-09 09:11:53 +00002186#line 1068 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002187{
vlmfa67ddc2004-06-03 03:38:44 +00002188 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2189 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002190 ;
2191 break;}
vlmdc7cf042006-03-09 08:49:26 +00002192case 103:
vlma367d552006-03-09 09:11:53 +00002193#line 1075 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002194{
vlmfa67ddc2004-06-03 03:38:44 +00002195 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002196 ;
2197 break;}
vlmdc7cf042006-03-09 08:49:26 +00002198case 104:
vlma367d552006-03-09 09:11:53 +00002199#line 1078 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002200{
vlmfa67ddc2004-06-03 03:38:44 +00002201 asn1p_ref_t *ref;
2202 int ret;
2203 ref = asn1p_ref_new(yylineno);
2204 checkmem(ref);
2205 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2206 checkmem(ret == 0);
2207 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002208 ;
2209 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002210case 105:
vlma367d552006-03-09 09:11:53 +00002211#line 1090 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002212{
2213 yyval.a_expr = asn1p_expr_new(yylineno);
2214 checkmem(yyval.a_expr);
2215 yyval.a_expr->Identifier = strdup("...");
2216 checkmem(yyval.a_expr->Identifier);
2217 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2218 yyval.a_expr->meta_type = AMT_TYPE;
2219 ;
2220 break;}
2221case 106:
vlma367d552006-03-09 09:11:53 +00002222#line 1098 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002223{
2224 yyval.a_expr = asn1p_expr_new(yylineno);
2225 checkmem(yyval.a_expr);
2226 yyval.a_expr->Identifier = strdup("...");
2227 checkmem(yyval.a_expr->Identifier);
2228 yyval.a_expr->value = yyvsp[0].a_value;
2229 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2230 yyval.a_expr->meta_type = AMT_TYPE;
2231 ;
2232 break;}
2233case 107:
vlma367d552006-03-09 09:11:53 +00002234#line 1107 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002235{
2236 yyval.a_expr = asn1p_expr_new(yylineno);
2237 checkmem(yyval.a_expr);
2238 yyval.a_expr->Identifier = strdup("...");
2239 yyval.a_expr->value = yyvsp[0].a_value;
2240 checkmem(yyval.a_expr->Identifier);
2241 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2242 yyval.a_expr->meta_type = AMT_TYPE;
2243 ;
2244 break;}
2245case 108:
vlma367d552006-03-09 09:11:53 +00002246#line 1119 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002247{
vlmec8f6812004-08-22 03:19:54 +00002248 yyval.a_expr = yyvsp[-1].a_expr;
vlmfce48a42004-09-14 02:36:39 +00002249 yyval.a_expr->tag = yyvsp[-2].a_tag;
vlmec8f6812004-08-22 03:19:54 +00002250 /*
2251 * Outer constraint for SEQUENCE OF and SET OF applies
2252 * to the inner type.
2253 */
2254 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2255 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2256 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2257 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2258 } else {
2259 if(yyval.a_expr->constraints) {
vlmfce48a42004-09-14 02:36:39 +00002260 assert(!yyvsp[-1].a_expr);
vlmec8f6812004-08-22 03:19:54 +00002261 } else {
2262 yyval.a_expr->constraints = yyvsp[0].a_constr;
2263 }
2264 }
vlm6a02a8a2004-09-08 00:28:11 +00002265 ;
2266 break;}
vlmdc7cf042006-03-09 08:49:26 +00002267case 109:
vlma367d552006-03-09 09:11:53 +00002268#line 1141 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00002269{
2270 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
2271 asn1p_as_pointer = 0;
2272 ;
vlm066dc102005-08-22 12:23:54 +00002273 break;}
vlmdc7cf042006-03-09 08:49:26 +00002274case 110:
vlma367d552006-03-09 09:11:53 +00002275#line 1148 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002276{
vlm5f0128b2004-08-20 13:25:29 +00002277 yyval.a_expr = yyvsp[0].a_expr;
vlm177a5b62005-09-05 05:17:57 +00002278 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
2279
2280 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2281 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
2282 fprintf(stderr,
2283 "INFO: Directive <ASN1C:RepresentAsPointer> "
2284 "applied to %s at line %d\n",
2285 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2286 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2287 : "member",
2288 yyval.a_expr->_lineno
2289 );
2290 }
vlm6a02a8a2004-09-08 00:28:11 +00002291 ;
2292 break;}
vlmdc7cf042006-03-09 08:49:26 +00002293case 111:
vlma367d552006-03-09 09:11:53 +00002294#line 1167 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002295{
vlm066dc102005-08-22 12:23:54 +00002296 yyval.a_expr = yyvsp[0].a_expr;
2297 ;
2298 break;}
vlmdc7cf042006-03-09 08:49:26 +00002299case 112:
vlma367d552006-03-09 09:11:53 +00002300#line 1170 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002301{
vlm177a5b62005-09-05 05:17:57 +00002302 yyval.a_expr = yyvsp[-1].a_expr;
vlm5e2c4b92005-03-20 11:12:40 +00002303 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2304 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
vlmfa67ddc2004-06-03 03:38:44 +00002305 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002306 ;
2307 break;}
vlmdc7cf042006-03-09 08:49:26 +00002308case 113:
vlma367d552006-03-09 09:11:53 +00002309#line 1176 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002310{
vlm177a5b62005-09-05 05:17:57 +00002311 yyval.a_expr = yyvsp[-1].a_expr;
vlmec8f6812004-08-22 03:19:54 +00002312 assert(yyval.a_expr->expr_type == A1TC_INVALID);
vlm5e2c4b92005-03-20 11:12:40 +00002313 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
vlmec8f6812004-08-22 03:19:54 +00002314 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002315 ;
2316 break;}
vlmdc7cf042006-03-09 08:49:26 +00002317case 114:
vlma367d552006-03-09 09:11:53 +00002318#line 1182 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002319{
vlm177a5b62005-09-05 05:17:57 +00002320 yyval.a_expr = yyvsp[-1].a_expr;
vlmec8f6812004-08-22 03:19:54 +00002321 assert(yyval.a_expr->expr_type == A1TC_INVALID);
vlm5e2c4b92005-03-20 11:12:40 +00002322 yyval.a_expr->expr_type = ASN_CONSTR_SET;
vlmec8f6812004-08-22 03:19:54 +00002323 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002324 ;
2325 break;}
vlmdc7cf042006-03-09 08:49:26 +00002326case 115:
vlma367d552006-03-09 09:11:53 +00002327#line 1188 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002328{
vlm39e5ed72004-09-05 10:40:41 +00002329 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002330 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002331 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002332 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2333 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002334 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002335 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002336 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2337 ;
2338 break;}
vlmdc7cf042006-03-09 08:49:26 +00002339case 116:
vlma367d552006-03-09 09:11:53 +00002340#line 1198 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002341{
vlm39e5ed72004-09-05 10:40:41 +00002342 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002343 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002344 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002345 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2346 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002347 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002348 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002349 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2350 ;
2351 break;}
vlmdc7cf042006-03-09 08:49:26 +00002352case 117:
vlma367d552006-03-09 09:11:53 +00002353#line 1208 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002354{
vlm39e5ed72004-09-05 10:40:41 +00002355 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002356 checkmem(yyval.a_expr);
vlm044f7442004-09-04 04:49:21 +00002357 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002358 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002359 ;
2360 break;}
vlmdc7cf042006-03-09 08:49:26 +00002361case 118:
vlma367d552006-03-09 09:11:53 +00002362#line 1214 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002363{
vlmec8f6812004-08-22 03:19:54 +00002364 int ret;
vlm39e5ed72004-09-05 10:40:41 +00002365 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002366 checkmem(yyval.a_expr);
2367 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2368 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2369 yyvsp[0].tv_str, RLT_lowercase);
2370 checkmem(ret == 0);
vlm044f7442004-09-04 04:49:21 +00002371 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002372 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002373 ;
2374 break;}
vlmdc7cf042006-03-09 08:49:26 +00002375case 119:
vlma367d552006-03-09 09:11:53 +00002376#line 1228 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002377{
vlmfa67ddc2004-06-03 03:38:44 +00002378 int ret;
2379 yyval.a_expr = yyvsp[-1].a_expr;
2380 assert(yyval.a_expr->expr_type == 0);
2381 assert(yyval.a_expr->meta_type == 0);
2382 assert(yyval.a_expr->reference == 0);
2383 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2384 checkmem(yyval.a_expr->reference);
2385 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2386 checkmem(ret == 0);
2387 free(yyvsp[-3].tv_str);
2388 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2389 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002390 ;
2391 break;}
vlmdc7cf042006-03-09 08:49:26 +00002392case 120:
vlma367d552006-03-09 09:11:53 +00002393#line 1252 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002394{
vlmfa67ddc2004-06-03 03:38:44 +00002395 yyval.a_expr = asn1p_expr_new(yylineno);
2396 checkmem(yyval.a_expr);
2397 yyval.a_expr->reference = yyvsp[0].a_ref;
2398 yyval.a_expr->expr_type = A1TC_REFERENCE;
2399 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00002400 ;
2401 break;}
vlmdc7cf042006-03-09 08:49:26 +00002402case 121:
vlma367d552006-03-09 09:11:53 +00002403#line 1259 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002404{
vlmfa67ddc2004-06-03 03:38:44 +00002405 yyval.a_expr = asn1p_expr_new(yylineno);
2406 checkmem(yyval.a_expr);
2407 yyval.a_expr->reference = yyvsp[0].a_ref;
2408 yyval.a_expr->expr_type = A1TC_INSTANCE;
2409 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002410 ;
2411 break;}
vlmdc7cf042006-03-09 08:49:26 +00002412case 122:
vlma367d552006-03-09 09:11:53 +00002413#line 1274 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002414{
vlmfa67ddc2004-06-03 03:38:44 +00002415 int ret;
2416 yyval.a_ref = asn1p_ref_new(yylineno);
2417 checkmem(yyval.a_ref);
2418 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2419 checkmem(ret == 0);
2420 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002421 ;
2422 break;}
vlmdc7cf042006-03-09 08:49:26 +00002423case 123:
vlma367d552006-03-09 09:11:53 +00002424#line 1282 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002425{
2426 int ret;
2427 yyval.a_ref = asn1p_ref_new(yylineno);
2428 checkmem(yyval.a_ref);
2429 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2430 checkmem(ret == 0);
2431 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2432 checkmem(ret == 0);
2433 free(yyvsp[-2].tv_str);
2434 ;
2435 break;}
vlmdc7cf042006-03-09 08:49:26 +00002436case 124:
vlma367d552006-03-09 09:11:53 +00002437#line 1292 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002438{
2439 int ret;
2440 yyval.a_ref = asn1p_ref_new(yylineno);
2441 checkmem(yyval.a_ref);
2442 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2443 checkmem(ret == 0);
2444 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2445 checkmem(ret == 0);
2446 free(yyvsp[-2].tv_str);
2447 ;
2448 break;}
vlmdc7cf042006-03-09 08:49:26 +00002449case 125:
vlma367d552006-03-09 09:11:53 +00002450#line 1302 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002451{
vlmfa67ddc2004-06-03 03:38:44 +00002452 int ret;
2453 yyval.a_ref = asn1p_ref_new(yylineno);
2454 checkmem(yyval.a_ref);
vlmc94e28f2004-09-15 11:59:51 +00002455 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2456 checkmem(ret == 0);
2457 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2458 checkmem(ret == 0);
2459 free(yyvsp[-2].tv_str);
2460 ;
2461 break;}
vlmdc7cf042006-03-09 08:49:26 +00002462case 126:
vlma367d552006-03-09 09:11:53 +00002463#line 1312 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002464{
2465 int ret;
2466 yyval.a_ref = asn1p_ref_new(yylineno);
2467 checkmem(yyval.a_ref);
vlmfa67ddc2004-06-03 03:38:44 +00002468 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2469 free(yyvsp[0].tv_str);
2470 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002471 ;
2472 break;}
vlmdc7cf042006-03-09 08:49:26 +00002473case 127:
vlma367d552006-03-09 09:11:53 +00002474#line 1320 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002475{
vlmfa67ddc2004-06-03 03:38:44 +00002476 int ret;
2477 yyval.a_ref = yyvsp[0].a_ref;
2478 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2479 free(yyvsp[-2].tv_str);
2480 checkmem(ret == 0);
2481 /*
2482 * Move the last element infront.
2483 */
2484 {
2485 struct asn1p_ref_component_s tmp_comp;
2486 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2487 memmove(&yyval.a_ref->components[1],
2488 &yyval.a_ref->components[0],
2489 sizeof(yyval.a_ref->components[0])
2490 * (yyval.a_ref->comp_count - 1));
2491 yyval.a_ref->components[0] = tmp_comp;
2492 }
vlm6a02a8a2004-09-08 00:28:11 +00002493 ;
2494 break;}
vlmdc7cf042006-03-09 08:49:26 +00002495case 128:
vlma367d552006-03-09 09:11:53 +00002496#line 1342 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002497{
vlmfa67ddc2004-06-03 03:38:44 +00002498 int ret;
2499 yyval.a_ref = asn1p_ref_new(yylineno);
2500 checkmem(yyval.a_ref);
2501 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2502 free(yyvsp[0].a_refcomp.name);
2503 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002504 ;
2505 break;}
vlmdc7cf042006-03-09 08:49:26 +00002506case 129:
vlma367d552006-03-09 09:11:53 +00002507#line 1350 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002508{
vlmfa67ddc2004-06-03 03:38:44 +00002509 int ret;
2510 yyval.a_ref = yyvsp[-2].a_ref;
2511 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2512 free(yyvsp[0].a_refcomp.name);
2513 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002514 ;
2515 break;}
vlmdc7cf042006-03-09 08:49:26 +00002516case 132:
vlma367d552006-03-09 09:11:53 +00002517#line 1364 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002518{
vlmfa67ddc2004-06-03 03:38:44 +00002519 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2520 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002521 ;
2522 break;}
vlmdc7cf042006-03-09 08:49:26 +00002523case 133:
vlma367d552006-03-09 09:11:53 +00002524#line 1369 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002525{
vlmfa67ddc2004-06-03 03:38:44 +00002526 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2527 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002528 ;
2529 break;}
vlmdc7cf042006-03-09 08:49:26 +00002530case 134:
vlma367d552006-03-09 09:11:53 +00002531#line 1378 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002532{
2533 yyval.a_ref = asn1p_ref_new(yylineno);
2534 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2535 ;
2536 break;}
2537case 135:
vlma367d552006-03-09 09:11:53 +00002538#line 1382 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002539{
2540 yyval.a_ref = yyval.a_ref;
2541 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2542 ;
2543 break;}
2544case 136:
vlma367d552006-03-09 09:11:53 +00002545#line 1386 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002546{
2547 yyval.a_ref = yyval.a_ref;
2548 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
2549 ;
2550 break;}
2551case 137:
vlma367d552006-03-09 09:11:53 +00002552#line 1393 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002553{
2554 yyval.a_ref = asn1p_ref_new(yylineno);
2555 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2556 ;
2557 break;}
2558case 138:
vlma367d552006-03-09 09:11:53 +00002559#line 1413 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002560{
vlmfa67ddc2004-06-03 03:38:44 +00002561 yyval.a_expr = yyvsp[-2].a_expr;
2562 assert(yyval.a_expr->Identifier == NULL);
2563 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2564 yyval.a_expr->meta_type = AMT_VALUE;
2565 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002566 ;
2567 break;}
vlma367d552006-03-09 09:11:53 +00002568case 139:
2569#line 1423 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002570{
2571 yyval.a_value = asn1p_value_fromint(0);
2572 checkmem(yyval.a_value);
2573 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2574 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2575 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2576 ;
2577 break;}
vlma367d552006-03-09 09:11:53 +00002578case 140:
2579#line 1430 "asn1p_y.y"
vlmd30bc6c2005-03-24 16:27:02 +00002580{ asn1p_lexer_hack_push_opaque_state(); ;
vlm6a02a8a2004-09-08 00:28:11 +00002581 break;}
vlma367d552006-03-09 09:11:53 +00002582case 141:
2583#line 1430 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002584{
vlmfa67ddc2004-06-03 03:38:44 +00002585 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2586 checkmem(yyval.a_value);
2587 yyval.a_value->type = ATV_UNPARSED;
vlm6a02a8a2004-09-08 00:28:11 +00002588 ;
2589 break;}
vlma367d552006-03-09 09:11:53 +00002590case 142:
2591#line 1435 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002592{
2593 yyval.a_value = asn1p_value_fromint(0);
2594 checkmem(yyval.a_value);
2595 yyval.a_value->type = ATV_NULL;
2596 ;
2597 break;}
vlma367d552006-03-09 09:11:53 +00002598case 143:
2599#line 1440 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002600{
2601 yyval.a_value = asn1p_value_fromint(0);
2602 checkmem(yyval.a_value);
2603 yyval.a_value->type = ATV_FALSE;
2604 ;
2605 break;}
vlma367d552006-03-09 09:11:53 +00002606case 144:
2607#line 1445 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002608{
2609 yyval.a_value = asn1p_value_fromint(0);
2610 checkmem(yyval.a_value);
2611 yyval.a_value->type = ATV_TRUE;
2612 ;
2613 break;}
vlma367d552006-03-09 09:11:53 +00002614case 145:
2615#line 1450 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002616{
vlmfa67ddc2004-06-03 03:38:44 +00002617 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2618 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002619 ;
2620 break;}
vlma367d552006-03-09 09:11:53 +00002621case 146:
2622#line 1454 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002623{
vlmfa67ddc2004-06-03 03:38:44 +00002624 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2625 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002626 ;
2627 break;}
vlma367d552006-03-09 09:11:53 +00002628case 147:
2629#line 1458 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002630{
vlme1e6ed82005-03-24 14:26:38 +00002631 yyval.a_value = yyval.a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002632 ;
2633 break;}
vlma367d552006-03-09 09:11:53 +00002634case 148:
2635#line 1461 "asn1p_y.y"
2636{
2637 yyval.a_value = yyvsp[0].a_value;
2638 ;
2639 break;}
vlmdc7cf042006-03-09 08:49:26 +00002640case 149:
vlma367d552006-03-09 09:11:53 +00002641#line 1464 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00002642{
vlm5d89c3d2005-08-13 09:07:11 +00002643 yyval.a_value = yyvsp[0].a_value;
2644 ;
2645 break;}
vlmdc7cf042006-03-09 08:49:26 +00002646case 150:
vlma367d552006-03-09 09:11:53 +00002647#line 1470 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002648{
vlmfa67ddc2004-06-03 03:38:44 +00002649 asn1p_ref_t *ref;
2650 int ret;
2651 ref = asn1p_ref_new(yylineno);
2652 checkmem(ref);
2653 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2654 checkmem(ret == 0);
2655 yyval.a_value = asn1p_value_fromref(ref, 0);
2656 checkmem(yyval.a_value);
2657 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002658 ;
2659 break;}
vlma367d552006-03-09 09:11:53 +00002660case 151:
2661#line 1481 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002662{
vlmfa67ddc2004-06-03 03:38:44 +00002663 asn1p_ref_t *ref;
2664 int ret;
2665 ref = asn1p_ref_new(yylineno);
2666 checkmem(ref);
2667 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2668 checkmem(ret == 0);
2669 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2670 checkmem(ret == 0);
2671 yyval.a_value = asn1p_value_fromref(ref, 0);
2672 checkmem(yyval.a_value);
2673 free(yyvsp[-2].tv_str);
2674 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002675 ;
2676 break;}
vlma367d552006-03-09 09:11:53 +00002677case 152:
2678#line 1499 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002679{
2680 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2681 checkmem(yyval.a_value);
2682 ;
2683 break;}
vlma367d552006-03-09 09:11:53 +00002684case 153:
2685#line 1503 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002686{
vlm2c8c44d2005-03-24 16:22:35 +00002687 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
vlme1e6ed82005-03-24 14:26:38 +00002688 checkmem(yyval.a_value);
2689 yyval.a_value->type = ATV_TUPLE;
2690 ;
2691 break;}
vlma367d552006-03-09 09:11:53 +00002692case 154:
2693#line 1508 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002694{
vlm2c8c44d2005-03-24 16:22:35 +00002695 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
vlme1e6ed82005-03-24 14:26:38 +00002696 checkmem(yyval.a_value);
2697 yyval.a_value->type = ATV_QUADRUPLE;
2698 ;
2699 break;}
vlma367d552006-03-09 09:11:53 +00002700case 155:
2701#line 1542 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002702{
vlm6611add2005-03-20 14:28:32 +00002703 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
vlmfa67ddc2004-06-03 03:38:44 +00002704 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2705 checkmem(yyval.tv_opaque.buf);
2706 yyval.tv_opaque.buf[0] = '{';
vlm6611add2005-03-20 14:28:32 +00002707 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
vlmfa67ddc2004-06-03 03:38:44 +00002708 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2709 free(yyvsp[0].tv_opaque.buf);
vlm6a02a8a2004-09-08 00:28:11 +00002710 ;
2711 break;}
vlma367d552006-03-09 09:11:53 +00002712case 156:
2713#line 1551 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002714{
vlmfa67ddc2004-06-03 03:38:44 +00002715 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2716 char *p = malloc(newsize + 1);
2717 checkmem(p);
2718 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2719 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2720 p[newsize] = '\0';
2721 free(yyvsp[-1].tv_opaque.buf);
2722 free(yyvsp[0].tv_opaque.buf);
2723 yyval.tv_opaque.buf = p;
2724 yyval.tv_opaque.len = newsize;
vlm6a02a8a2004-09-08 00:28:11 +00002725 ;
2726 break;}
vlma367d552006-03-09 09:11:53 +00002727case 157:
2728#line 1566 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002729{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2730 break;}
vlma367d552006-03-09 09:11:53 +00002731case 158:
2732#line 1567 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002733{ yyval.a_type = ASN_BASIC_NULL; ;
2734 break;}
vlma367d552006-03-09 09:11:53 +00002735case 159:
2736#line 1568 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002737{ yyval.a_type = ASN_BASIC_REAL; ;
2738 break;}
vlma367d552006-03-09 09:11:53 +00002739case 160:
2740#line 1569 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002741{ yyval.a_type = yyvsp[0].a_type; ;
vlm066dc102005-08-22 12:23:54 +00002742 break;}
vlma367d552006-03-09 09:11:53 +00002743case 161:
2744#line 1570 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002745{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
vlm066dc102005-08-22 12:23:54 +00002746 break;}
vlma367d552006-03-09 09:11:53 +00002747case 162:
2748#line 1571 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002749{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
vlm066dc102005-08-22 12:23:54 +00002750 break;}
vlma367d552006-03-09 09:11:53 +00002751case 163:
2752#line 1572 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002753{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
vlm066dc102005-08-22 12:23:54 +00002754 break;}
vlma367d552006-03-09 09:11:53 +00002755case 164:
2756#line 1573 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002757{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
vlm066dc102005-08-22 12:23:54 +00002758 break;}
vlma367d552006-03-09 09:11:53 +00002759case 165:
2760#line 1574 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002761{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
2762 break;}
vlma367d552006-03-09 09:11:53 +00002763case 166:
2764#line 1575 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002765{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
2766 break;}
vlma367d552006-03-09 09:11:53 +00002767case 167:
2768#line 1576 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002769{ yyval.a_type = ASN_BASIC_UTCTime; ;
2770 break;}
vlma367d552006-03-09 09:11:53 +00002771case 168:
2772#line 1577 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002773{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2774 break;}
vlma367d552006-03-09 09:11:53 +00002775case 169:
2776#line 1578 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002777{ yyval.a_type = yyvsp[0].a_type; ;
2778 break;}
vlma367d552006-03-09 09:11:53 +00002779case 170:
2780#line 1585 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002781{ yyval.a_type = ASN_BASIC_INTEGER; ;
2782 break;}
vlma367d552006-03-09 09:11:53 +00002783case 171:
2784#line 1586 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002785{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2786 break;}
vlma367d552006-03-09 09:11:53 +00002787case 172:
2788#line 1587 "asn1p_y.y"
vlmdc7cf042006-03-09 08:49:26 +00002789{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2790 break;}
vlma367d552006-03-09 09:11:53 +00002791case 173:
2792#line 1591 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002793{
vlm39e5ed72004-09-05 10:40:41 +00002794 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002795 checkmem(yyval.a_expr);
2796 yyval.a_expr->expr_type = yyvsp[0].a_type;
2797 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002798 ;
2799 break;}
vlma367d552006-03-09 09:11:53 +00002800case 174:
2801#line 1597 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002802{
vlmfa67ddc2004-06-03 03:38:44 +00002803 if(yyvsp[0].a_expr) {
2804 yyval.a_expr = yyvsp[0].a_expr;
2805 } else {
vlm39e5ed72004-09-05 10:40:41 +00002806 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002807 checkmem(yyval.a_expr);
2808 }
2809 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2810 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002811 ;
2812 break;}
vlma367d552006-03-09 09:11:53 +00002813case 175:
2814#line 1610 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002815{ yyval.a_type = ASN_STRING_BMPString; ;
2816 break;}
vlma367d552006-03-09 09:11:53 +00002817case 176:
2818#line 1611 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002819{
vlmfa67ddc2004-06-03 03:38:44 +00002820 yyval.a_type = ASN_STRING_GeneralString;
vlmc94e28f2004-09-15 11:59:51 +00002821 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002822 ;
2823 break;}
vlma367d552006-03-09 09:11:53 +00002824case 177:
2825#line 1615 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002826{
vlmc94e28f2004-09-15 11:59:51 +00002827 yyval.a_type = ASN_STRING_GraphicString;
2828 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002829 ;
2830 break;}
vlma367d552006-03-09 09:11:53 +00002831case 178:
2832#line 1619 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002833{ yyval.a_type = ASN_STRING_IA5String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002834 break;}
vlma367d552006-03-09 09:11:53 +00002835case 179:
2836#line 1620 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002837{ yyval.a_type = ASN_STRING_ISO646String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002838 break;}
vlma367d552006-03-09 09:11:53 +00002839case 180:
2840#line 1621 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002841{ yyval.a_type = ASN_STRING_NumericString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002842 break;}
vlma367d552006-03-09 09:11:53 +00002843case 181:
2844#line 1622 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002845{ yyval.a_type = ASN_STRING_PrintableString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002846 break;}
vlma367d552006-03-09 09:11:53 +00002847case 182:
2848#line 1623 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002849{
2850 yyval.a_type = ASN_STRING_T61String;
2851 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2852 ;
vlm6a02a8a2004-09-08 00:28:11 +00002853 break;}
vlma367d552006-03-09 09:11:53 +00002854case 183:
2855#line 1627 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002856{ yyval.a_type = ASN_STRING_TeletexString; ;
2857 break;}
vlma367d552006-03-09 09:11:53 +00002858case 184:
2859#line 1628 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002860{ yyval.a_type = ASN_STRING_UniversalString; ;
2861 break;}
vlma367d552006-03-09 09:11:53 +00002862case 185:
2863#line 1629 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002864{ yyval.a_type = ASN_STRING_UTF8String; ;
2865 break;}
vlma367d552006-03-09 09:11:53 +00002866case 186:
2867#line 1630 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002868{
2869 yyval.a_type = ASN_STRING_VideotexString;
2870 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2871 ;
2872 break;}
vlma367d552006-03-09 09:11:53 +00002873case 187:
2874#line 1634 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002875{ yyval.a_type = ASN_STRING_VisibleString; ;
2876 break;}
vlma367d552006-03-09 09:11:53 +00002877case 188:
2878#line 1635 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002879{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2880 break;}
vlma367d552006-03-09 09:11:53 +00002881case 194:
2882#line 1647 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002883{ yyval.a_constr = 0; ;
2884 break;}
vlma367d552006-03-09 09:11:53 +00002885case 195:
2886#line 1648 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002887{
vlm39e5ed72004-09-05 10:40:41 +00002888 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002889 ;
2890 break;}
vlma367d552006-03-09 09:11:53 +00002891case 196:
2892#line 1654 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002893{
vlm39e5ed72004-09-05 10:40:41 +00002894 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002895 ;
2896 break;}
vlma367d552006-03-09 09:11:53 +00002897case 197:
2898#line 1657 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002899{
vlmfa67ddc2004-06-03 03:38:44 +00002900 /*
2901 * This is a special case, for compatibility purposes.
vlm9283dbe2004-08-18 04:59:12 +00002902 * It goes without parentheses.
vlmfa67ddc2004-06-03 03:38:44 +00002903 */
vlm5f0128b2004-08-20 13:25:29 +00002904 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002905 ;
2906 break;}
vlma367d552006-03-09 09:11:53 +00002907case 198:
2908#line 1667 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002909{
vlmfa67ddc2004-06-03 03:38:44 +00002910 yyval.a_constr = yyvsp[-1].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002911 ;
2912 break;}
vlma367d552006-03-09 09:11:53 +00002913case 199:
2914#line 1670 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002915{
vlm9283dbe2004-08-18 04:59:12 +00002916 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002917 ;
2918 break;}
vlma367d552006-03-09 09:11:53 +00002919case 200:
2920#line 1676 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002921{
vlmfa67ddc2004-06-03 03:38:44 +00002922 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002923 ;
2924 break;}
vlma367d552006-03-09 09:11:53 +00002925case 201:
2926#line 1679 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002927{
vlmfa67ddc2004-06-03 03:38:44 +00002928 asn1p_constraint_t *ct;
2929 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002930 ct->type = ACT_EL_EXT;
2931 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00002932 ;
2933 break;}
vlma367d552006-03-09 09:11:53 +00002934case 202:
2935#line 1685 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002936{
vlmfa67ddc2004-06-03 03:38:44 +00002937 asn1p_constraint_t *ct;
2938 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002939 ct->type = ACT_EL_EXT;
2940 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
vlm6f5eb0b2004-08-13 12:35:09 +00002941 ct = yyval.a_constr;
2942 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002943 ;
2944 break;}
vlma367d552006-03-09 09:11:53 +00002945case 203:
2946#line 1696 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002947{
vlm9283dbe2004-08-18 04:59:12 +00002948 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002949 ;
2950 break;}
vlma367d552006-03-09 09:11:53 +00002951case 204:
2952#line 1699 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002953{
2954 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2955 ;
2956 break;}
vlma367d552006-03-09 09:11:53 +00002957case 205:
2958#line 1702 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002959{
vlmfa67ddc2004-06-03 03:38:44 +00002960 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002961 ;
2962 break;}
vlma367d552006-03-09 09:11:53 +00002963case 206:
2964#line 1705 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002965{
vlmfa67ddc2004-06-03 03:38:44 +00002966 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002967 ;
2968 break;}
vlma367d552006-03-09 09:11:53 +00002969case 207:
2970#line 1708 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002971{
vlmfa67ddc2004-06-03 03:38:44 +00002972 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002973 ;
2974 break;}
vlma367d552006-03-09 09:11:53 +00002975case 208:
2976#line 1714 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002977{
vlmfa67ddc2004-06-03 03:38:44 +00002978 int ret;
2979 yyval.a_constr = asn1p_constraint_new(yylineno);
2980 checkmem(yyval.a_constr);
2981 yyval.a_constr->type = yyvsp[-3].a_ctype;
2982 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2983 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002984 ;
2985 break;}
vlma367d552006-03-09 09:11:53 +00002986case 209:
2987#line 1722 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002988{
vlm9283dbe2004-08-18 04:59:12 +00002989 int ret;
2990 yyval.a_constr = asn1p_constraint_new(yylineno);
2991 checkmem(yyval.a_constr);
2992 yyval.a_constr->type = ACT_CA_SET;
2993 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2994 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002995 ;
2996 break;}
vlma367d552006-03-09 09:11:53 +00002997case 210:
2998#line 1730 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002999{
vlm9283dbe2004-08-18 04:59:12 +00003000 yyval.a_constr = asn1p_constraint_new(yylineno);
3001 checkmem(yyval.a_constr);
3002 yyval.a_constr->type = ACT_EL_VALUE;
3003 yyval.a_constr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00003004 ;
3005 break;}
vlma367d552006-03-09 09:11:53 +00003006case 211:
3007#line 1736 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003008{
vlm0aa86902004-10-12 23:26:53 +00003009 yyval.a_constr = asn1p_constraint_new(yylineno);
3010 checkmem(yyval.a_constr);
vlma6a12e32005-03-20 12:58:00 +00003011 yyval.a_constr->type = ACT_EL_TYPE;
3012 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
vlmc94e28f2004-09-15 11:59:51 +00003013 ;
3014 break;}
vlma367d552006-03-09 09:11:53 +00003015case 212:
3016#line 1742 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003017{
vlm066dc102005-08-22 12:23:54 +00003018 yyval.a_constr = asn1p_constraint_new(yylineno);
3019 checkmem(yyval.a_constr);
3020 yyval.a_constr->type = yyvsp[-1].a_ctype;
3021 yyval.a_constr->range_start = yyvsp[-2].a_value;
3022 yyval.a_constr->range_stop = yyvsp[0].a_value;
vlm5d89c3d2005-08-13 09:07:11 +00003023 ;
3024 break;}
vlma367d552006-03-09 09:11:53 +00003025case 213:
3026#line 1749 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003027{
3028 yyval.a_constr = asn1p_constraint_new(yylineno);
3029 checkmem(yyval.a_constr);
3030 yyval.a_constr->type = yyvsp[-1].a_ctype;
3031 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3032 yyval.a_constr->range_stop = yyvsp[0].a_value;
3033 yyval.a_constr->range_start->type = ATV_MIN;
3034 ;
3035 break;}
vlma367d552006-03-09 09:11:53 +00003036case 214:
3037#line 1757 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003038{
3039 yyval.a_constr = asn1p_constraint_new(yylineno);
3040 checkmem(yyval.a_constr);
3041 yyval.a_constr->type = yyvsp[-1].a_ctype;
3042 yyval.a_constr->range_start = yyvsp[-2].a_value;
3043 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3044 yyval.a_constr->range_stop->type = ATV_MAX;
3045 ;
3046 break;}
vlma367d552006-03-09 09:11:53 +00003047case 215:
3048#line 1765 "asn1p_y.y"
3049{
3050 yyval.a_constr = asn1p_constraint_new(yylineno);
3051 checkmem(yyval.a_constr);
3052 yyval.a_constr->type = yyvsp[-1].a_ctype;
3053 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3054 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3055 yyval.a_constr->range_start->type = ATV_MIN;
3056 yyval.a_constr->range_stop->type = ATV_MAX;
3057 ;
3058 break;}
vlmdc7cf042006-03-09 08:49:26 +00003059case 216:
vlma367d552006-03-09 09:11:53 +00003060#line 1774 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003061{
vlma367d552006-03-09 09:11:53 +00003062 yyval.a_constr = yyvsp[0].a_constr;
vlm177a5b62005-09-05 05:17:57 +00003063 ;
3064 break;}
vlmdc7cf042006-03-09 08:49:26 +00003065case 217:
vlma367d552006-03-09 09:11:53 +00003066#line 1777 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003067{
vlm177a5b62005-09-05 05:17:57 +00003068 yyval.a_constr = yyvsp[0].a_constr;
vlm066dc102005-08-22 12:23:54 +00003069 ;
vlm5d89c3d2005-08-13 09:07:11 +00003070 break;}
vlmdc7cf042006-03-09 08:49:26 +00003071case 218:
vlma367d552006-03-09 09:11:53 +00003072#line 1781 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003073{ asn1p_lexer_hack_push_opaque_state(); ;
3074 break;}
vlma367d552006-03-09 09:11:53 +00003075case 219:
3076#line 1781 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003077{
3078 yyval.a_constr = asn1p_constraint_new(yylineno);
3079 checkmem(yyval.a_constr);
3080 yyval.a_constr->type = ACT_CT_CTDBY;
3081 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3082 checkmem(yyval.a_constr->value);
3083 yyval.a_constr->value->type = ATV_UNPARSED;
3084 ;
vlm0aa86902004-10-12 23:26:53 +00003085 break;}
vlma367d552006-03-09 09:11:53 +00003086case 220:
3087#line 1792 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003088{ yyval.a_ctype = ACT_EL_RANGE; ;
vlm4053ca52005-02-18 16:34:21 +00003089 break;}
vlma367d552006-03-09 09:11:53 +00003090case 221:
3091#line 1793 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003092{ yyval.a_ctype = ACT_EL_RLRANGE; ;
vlma6a12e32005-03-20 12:58:00 +00003093 break;}
vlma367d552006-03-09 09:11:53 +00003094case 222:
3095#line 1794 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003096{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3097 break;}
vlma367d552006-03-09 09:11:53 +00003098case 223:
3099#line 1795 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003100{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3101 break;}
vlma367d552006-03-09 09:11:53 +00003102case 224:
3103#line 1799 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003104{
vlm39e5ed72004-09-05 10:40:41 +00003105 yyval.a_ctype = ACT_CT_SIZE;
vlm6a02a8a2004-09-08 00:28:11 +00003106 ;
3107 break;}
vlma367d552006-03-09 09:11:53 +00003108case 225:
3109#line 1802 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003110{
vlm39e5ed72004-09-05 10:40:41 +00003111 yyval.a_ctype = ACT_CT_FROM;
vlm6a02a8a2004-09-08 00:28:11 +00003112 ;
3113 break;}
vlma367d552006-03-09 09:11:53 +00003114case 226:
3115#line 1808 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003116{
3117 yyval.a_value = asn1p_value_fromint(0);
3118 checkmem(yyval.a_value);
3119 yyval.a_value->type = ATV_FALSE;
3120 ;
3121 break;}
vlma367d552006-03-09 09:11:53 +00003122case 227:
3123#line 1813 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003124{
3125 yyval.a_value = asn1p_value_fromint(1);
3126 checkmem(yyval.a_value);
3127 yyval.a_value->type = ATV_TRUE;
3128 ;
3129 break;}
vlma367d552006-03-09 09:11:53 +00003130case 228:
3131#line 1818 "asn1p_y.y"
3132{
3133 yyval.a_value = yyvsp[0].a_value;
3134 ;
3135 break;}
vlmdc7cf042006-03-09 08:49:26 +00003136case 229:
vlma367d552006-03-09 09:11:53 +00003137#line 1821 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003138{
3139 yyval.a_value = yyvsp[0].a_value;
3140 ;
3141 break;}
vlmdc7cf042006-03-09 08:49:26 +00003142case 230:
vlma367d552006-03-09 09:11:53 +00003143#line 1824 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003144{
vlmfa67ddc2004-06-03 03:38:44 +00003145 asn1p_ref_t *ref;
3146 int ret;
3147 ref = asn1p_ref_new(yylineno);
3148 checkmem(ref);
3149 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3150 checkmem(ret == 0);
3151 yyval.a_value = asn1p_value_fromref(ref, 0);
3152 checkmem(yyval.a_value);
3153 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003154 ;
3155 break;}
vlma367d552006-03-09 09:11:53 +00003156case 231:
3157#line 1838 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003158{
vlm4053ca52005-02-18 16:34:21 +00003159 asn1p_ref_t *ref;
3160 int ret;
3161 ref = asn1p_ref_new(yylineno);
3162 checkmem(ref);
3163 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3164 checkmem(ret == 0);
3165 yyval.a_value = asn1p_value_fromref(ref, 0);
vlmfa67ddc2004-06-03 03:38:44 +00003166 checkmem(yyval.a_value);
vlm4053ca52005-02-18 16:34:21 +00003167 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003168 ;
3169 break;}
vlma367d552006-03-09 09:11:53 +00003170case 232:
3171#line 1852 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003172{
vlm5d89c3d2005-08-13 09:07:11 +00003173 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003174 ;
3175 break;}
vlma367d552006-03-09 09:11:53 +00003176case 233:
3177#line 1855 "asn1p_y.y"
vlm7bbdc9f2005-03-28 15:01:27 +00003178{
vlm5d89c3d2005-08-13 09:07:11 +00003179 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
vlm7bbdc9f2005-03-28 15:01:27 +00003180 ;
3181 break;}
vlma367d552006-03-09 09:11:53 +00003182case 234:
3183#line 1861 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003184{
vlm5d89c3d2005-08-13 09:07:11 +00003185 yyval.a_constr = yyvsp[0].a_constr;
3186 ;
3187 break;}
vlma367d552006-03-09 09:11:53 +00003188case 235:
3189#line 1864 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003190{
3191 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3192 ;
3193 break;}
vlma367d552006-03-09 09:11:53 +00003194case 236:
3195#line 1870 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003196{
vlmfa67ddc2004-06-03 03:38:44 +00003197 yyval.a_constr = asn1p_constraint_new(yylineno);
3198 checkmem(yyval.a_constr);
3199 yyval.a_constr->type = ACT_EL_EXT;
vlm7bbdc9f2005-03-28 15:01:27 +00003200 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003201 ;
3202 break;}
vlma367d552006-03-09 09:11:53 +00003203case 237:
3204#line 1876 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003205{
vlmfa67ddc2004-06-03 03:38:44 +00003206 yyval.a_constr = asn1p_constraint_new(yylineno);
3207 checkmem(yyval.a_constr);
3208 yyval.a_constr->type = ACT_EL_VALUE;
3209 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3210 yyval.a_constr->presence = yyvsp[0].a_pres;
vlm7bbdc9f2005-03-28 15:01:27 +00003211 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003212 ;
3213 break;}
vlma367d552006-03-09 09:11:53 +00003214case 238:
3215#line 1890 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003216{ yyval.a_pres = ACPRES_DEFAULT; ;
3217 break;}
vlma367d552006-03-09 09:11:53 +00003218case 239:
3219#line 1891 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003220{ yyval.a_pres = yyvsp[0].a_pres; ;
3221 break;}
vlma367d552006-03-09 09:11:53 +00003222case 240:
3223#line 1895 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003224{
vlmfa67ddc2004-06-03 03:38:44 +00003225 yyval.a_pres = ACPRES_PRESENT;
vlm6a02a8a2004-09-08 00:28:11 +00003226 ;
3227 break;}
vlma367d552006-03-09 09:11:53 +00003228case 241:
3229#line 1898 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00003230{
vlm5d89c3d2005-08-13 09:07:11 +00003231 yyval.a_pres = ACPRES_ABSENT;
vlm931aeed2005-08-12 10:09:10 +00003232 ;
3233 break;}
vlma367d552006-03-09 09:11:53 +00003234case 242:
3235#line 1901 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00003236{
vlm5d89c3d2005-08-13 09:07:11 +00003237 yyval.a_pres = ACPRES_OPTIONAL;
vlm931aeed2005-08-12 10:09:10 +00003238 ;
3239 break;}
vlma367d552006-03-09 09:11:53 +00003240case 243:
3241#line 1907 "asn1p_y.y"
3242{
3243 yyval.a_constr = yyvsp[0].a_constr;
3244 ;
3245 break;}
vlmdc7cf042006-03-09 08:49:26 +00003246case 244:
vlma367d552006-03-09 09:11:53 +00003247#line 1910 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003248{
3249 yyval.a_constr = yyvsp[0].a_constr;
3250 ;
3251 break;}
vlmdc7cf042006-03-09 08:49:26 +00003252case 245:
vlma367d552006-03-09 09:11:53 +00003253#line 1919 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003254{
vlmfa67ddc2004-06-03 03:38:44 +00003255 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3256 asn1p_constraint_t *ct;
3257 int ret;
3258 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3259 checkmem(ret == 0);
3260 ct = asn1p_constraint_new(yylineno);
3261 checkmem(yyval.a_constr);
3262 ct->type = ACT_EL_VALUE;
3263 ct->value = asn1p_value_fromref(ref, 0);
3264 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003265 ;
3266 break;}
vlma367d552006-03-09 09:11:53 +00003267case 246:
3268#line 1934 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003269{
vlmfa67ddc2004-06-03 03:38:44 +00003270 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003271 ;
3272 break;}
vlma367d552006-03-09 09:11:53 +00003273case 247:
3274#line 1940 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003275{
vlmfa67ddc2004-06-03 03:38:44 +00003276 yyval.a_constr = asn1p_constraint_new(yylineno);
3277 checkmem(yyval.a_constr);
3278 yyval.a_constr->type = ACT_EL_VALUE;
3279 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003280 ;
3281 break;}
vlma367d552006-03-09 09:11:53 +00003282case 248:
3283#line 1946 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003284{
vlmfa67ddc2004-06-03 03:38:44 +00003285 asn1p_constraint_t *ct;
3286 ct = asn1p_constraint_new(yylineno);
3287 checkmem(ct);
3288 ct->type = ACT_EL_VALUE;
3289 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3290 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00003291 ;
3292 break;}
vlma367d552006-03-09 09:11:53 +00003293case 249:
3294#line 1960 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003295{
vlmfa67ddc2004-06-03 03:38:44 +00003296 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3297 int ret;
3298 *p = '@';
3299 strcpy(p + 1, yyvsp[0].tv_str);
3300 yyval.a_ref = asn1p_ref_new(yylineno);
3301 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3302 checkmem(ret == 0);
3303 free(p);
3304 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003305 ;
3306 break;}
vlma367d552006-03-09 09:11:53 +00003307case 250:
3308#line 1971 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003309{
vlmfa67ddc2004-06-03 03:38:44 +00003310 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3311 int ret;
3312 p[0] = '@';
3313 p[1] = '.';
3314 strcpy(p + 2, yyvsp[0].tv_str);
3315 yyval.a_ref = asn1p_ref_new(yylineno);
3316 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3317 checkmem(ret == 0);
3318 free(p);
3319 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003320 ;
3321 break;}
vlma367d552006-03-09 09:11:53 +00003322case 251:
3323#line 1987 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003324{
vlmfa67ddc2004-06-03 03:38:44 +00003325 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003326 ;
3327 break;}
vlma367d552006-03-09 09:11:53 +00003328case 252:
3329#line 1990 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003330{
vlmfa67ddc2004-06-03 03:38:44 +00003331 int l1 = strlen(yyvsp[-2].tv_str);
3332 int l3 = strlen(yyvsp[0].tv_str);
3333 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3334 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3335 yyval.tv_str[l1] = '.';
3336 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3337 yyval.tv_str[l1 + 1 + l3] = '\0';
vlm6a02a8a2004-09-08 00:28:11 +00003338 ;
3339 break;}
vlma367d552006-03-09 09:11:53 +00003340case 253:
3341#line 2008 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003342{
vlmc94e28f2004-09-15 11:59:51 +00003343 yyval.a_marker.flags = EM_NOMARK;
3344 yyval.a_marker.default_value = 0;
vlm6a02a8a2004-09-08 00:28:11 +00003345 ;
3346 break;}
vlma367d552006-03-09 09:11:53 +00003347case 254:
3348#line 2012 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003349{ yyval.a_marker = yyvsp[0].a_marker; ;
vlma2374a02004-09-14 02:44:07 +00003350 break;}
vlma367d552006-03-09 09:11:53 +00003351case 255:
3352#line 2016 "asn1p_y.y"
vlma2374a02004-09-14 02:44:07 +00003353{
vlm1ac75e72005-11-26 11:21:55 +00003354 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
vlmc94e28f2004-09-15 11:59:51 +00003355 yyval.a_marker.default_value = 0;
vlma2374a02004-09-14 02:44:07 +00003356 ;
3357 break;}
vlma367d552006-03-09 09:11:53 +00003358case 256:
3359#line 2020 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003360{
3361 yyval.a_marker.flags = EM_DEFAULT;
3362 yyval.a_marker.default_value = yyvsp[0].a_value;
3363 ;
3364 break;}
vlma367d552006-03-09 09:11:53 +00003365case 257:
3366#line 2043 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003367{
vlm39e5ed72004-09-05 10:40:41 +00003368 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003369 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003370 ;
3371 break;}
vlma367d552006-03-09 09:11:53 +00003372case 258:
3373#line 2047 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003374{
vlm7bbdc9f2005-03-28 15:01:27 +00003375 yyval.a_expr = yyvsp[-1].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00003376 ;
3377 break;}
vlma367d552006-03-09 09:11:53 +00003378case 259:
3379#line 2053 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003380{
vlm7bbdc9f2005-03-28 15:01:27 +00003381 yyval.a_expr = asn1p_expr_new(yylineno);
3382 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003383 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3384 ;
3385 break;}
vlma367d552006-03-09 09:11:53 +00003386case 260:
3387#line 2058 "asn1p_y.y"
vlm7bbdc9f2005-03-28 15:01:27 +00003388{
3389 yyval.a_expr = yyvsp[-2].a_expr;
3390 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3391 ;
3392 break;}
vlma367d552006-03-09 09:11:53 +00003393case 261:
3394#line 2065 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003395{
vlm39e5ed72004-09-05 10:40:41 +00003396 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003397 checkmem(yyval.a_expr);
3398 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3399 yyval.a_expr->meta_type = AMT_VALUE;
3400 yyval.a_expr->Identifier = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003401 ;
3402 break;}
vlma367d552006-03-09 09:11:53 +00003403case 262:
3404#line 2072 "asn1p_y.y"
3405{
3406 yyval.a_expr = asn1p_expr_new(yylineno);
3407 checkmem(yyval.a_expr);
3408 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3409 yyval.a_expr->meta_type = AMT_VALUE;
3410 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3411 yyval.a_expr->value = yyvsp[-1].a_value;
3412 ;
3413 break;}
vlmdc7cf042006-03-09 08:49:26 +00003414case 263:
vlma367d552006-03-09 09:11:53 +00003415#line 2080 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003416{
3417 yyval.a_expr = asn1p_expr_new(yylineno);
3418 checkmem(yyval.a_expr);
3419 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3420 yyval.a_expr->meta_type = AMT_VALUE;
3421 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3422 yyval.a_expr->value = yyvsp[-1].a_value;
3423 ;
3424 break;}
vlmdc7cf042006-03-09 08:49:26 +00003425case 264:
vlma367d552006-03-09 09:11:53 +00003426#line 2088 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003427{
3428 yyval.a_expr = asn1p_expr_new(yylineno);
3429 checkmem(yyval.a_expr);
3430 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3431 yyval.a_expr->meta_type = AMT_VALUE;
vlmfa67ddc2004-06-03 03:38:44 +00003432 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00003433 ;
3434 break;}
vlma367d552006-03-09 09:11:53 +00003435case 265:
3436#line 2095 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003437{
vlm39e5ed72004-09-05 10:40:41 +00003438 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003439 checkmem(yyval.a_expr);
3440 yyval.a_expr->Identifier = strdup("...");
3441 checkmem(yyval.a_expr->Identifier);
3442 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3443 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00003444 ;
3445 break;}
vlma367d552006-03-09 09:11:53 +00003446case 266:
3447#line 2106 "asn1p_y.y"
3448{
3449 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3450 checkmem(yyval.a_value);
3451 ;
3452 break;}
vlmdc7cf042006-03-09 08:49:26 +00003453case 267:
vlma367d552006-03-09 09:11:53 +00003454#line 2110 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003455{
3456 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3457 checkmem(yyval.a_value);
3458 ;
vlm931aeed2005-08-12 10:09:10 +00003459 break;}
vlmdc7cf042006-03-09 08:49:26 +00003460case 268:
vlma367d552006-03-09 09:11:53 +00003461#line 2141 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003462{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3463 break;}
vlma367d552006-03-09 09:11:53 +00003464case 269:
3465#line 2142 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003466{ yyval.a_tag = yyvsp[0].a_tag; ;
3467 break;}
vlma367d552006-03-09 09:11:53 +00003468case 270:
3469#line 2146 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003470{
vlm2728a8d2005-01-23 09:51:44 +00003471 yyval.a_tag = yyvsp[-1].a_tag;
3472 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
vlm6a02a8a2004-09-08 00:28:11 +00003473 ;
3474 break;}
vlma367d552006-03-09 09:11:53 +00003475case 271:
3476#line 2153 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003477{
vlm2728a8d2005-01-23 09:51:44 +00003478 yyval.a_tag = yyvsp[-2].a_tag;
3479 yyval.a_tag.tag_value = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00003480 ;
3481 break;}
vlma367d552006-03-09 09:11:53 +00003482case 272:
3483#line 2159 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003484{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
vlm6a02a8a2004-09-08 00:28:11 +00003485 break;}
vlma367d552006-03-09 09:11:53 +00003486case 273:
3487#line 2160 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003488{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
vlm151c0b22004-09-22 16:03:36 +00003489 break;}
vlma367d552006-03-09 09:11:53 +00003490case 274:
3491#line 2161 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003492{ yyval.a_tag.tag_class = TC_APPLICATION; ;
vlme1e6ed82005-03-24 14:26:38 +00003493 break;}
vlma367d552006-03-09 09:11:53 +00003494case 275:
3495#line 2162 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003496{ yyval.a_tag.tag_class = TC_PRIVATE; ;
vlm931aeed2005-08-12 10:09:10 +00003497 break;}
vlma367d552006-03-09 09:11:53 +00003498case 276:
3499#line 2166 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003500{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3501 break;}
vlma367d552006-03-09 09:11:53 +00003502case 277:
3503#line 2167 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003504{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3505 break;}
vlma367d552006-03-09 09:11:53 +00003506case 278:
3507#line 2168 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003508{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3509 break;}
vlma367d552006-03-09 09:11:53 +00003510case 279:
3511#line 2172 "asn1p_y.y"
3512{
3513 checkmem(yyvsp[0].tv_str);
3514 yyval.tv_str = yyvsp[0].tv_str;
3515 ;
3516 break;}
vlmdc7cf042006-03-09 08:49:26 +00003517case 280:
vlma367d552006-03-09 09:11:53 +00003518#line 2176 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00003519{
vlm5d89c3d2005-08-13 09:07:11 +00003520 checkmem(yyvsp[0].tv_str);
vlm931aeed2005-08-12 10:09:10 +00003521 yyval.tv_str = yyvsp[0].tv_str;
3522 ;
3523 break;}
vlmdc7cf042006-03-09 08:49:26 +00003524case 281:
vlma367d552006-03-09 09:11:53 +00003525#line 2184 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003526{
3527 checkmem(yyvsp[0].tv_str);
3528 yyval.tv_str = yyvsp[0].tv_str;
3529 ;
3530 break;}
vlmdc7cf042006-03-09 08:49:26 +00003531case 282:
vlma367d552006-03-09 09:11:53 +00003532#line 2191 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003533{ yyval.tv_str = 0; ;
3534 break;}
vlma367d552006-03-09 09:11:53 +00003535case 283:
3536#line 2192 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003537{
3538 yyval.tv_str = yyvsp[0].tv_str;
3539 ;
3540 break;}
vlma367d552006-03-09 09:11:53 +00003541case 284:
3542#line 2198 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003543{
vlm39e5ed72004-09-05 10:40:41 +00003544 checkmem(yyvsp[0].tv_str);
3545 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003546 ;
3547 break;}
vlm6a02a8a2004-09-08 00:28:11 +00003548}
3549 /* the action file gets copied in in place of this dollarsign */
3550#line 543 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00003551
3552 yyvsp -= yylen;
3553 yyssp -= yylen;
vlm6a02a8a2004-09-08 00:28:11 +00003554#ifdef YYLSP_NEEDED
3555 yylsp -= yylen;
3556#endif
vlmfa67ddc2004-06-03 03:38:44 +00003557
vlm6a02a8a2004-09-08 00:28:11 +00003558#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00003559 if (yydebug)
3560 {
vlm6a02a8a2004-09-08 00:28:11 +00003561 short *ssp1 = yyss - 1;
3562 fprintf (stderr, "state stack now");
3563 while (ssp1 != yyssp)
3564 fprintf (stderr, " %d", *++ssp1);
3565 fprintf (stderr, "\n");
vlmfa67ddc2004-06-03 03:38:44 +00003566 }
3567#endif
3568
3569 *++yyvsp = yyval;
3570
vlm6a02a8a2004-09-08 00:28:11 +00003571#ifdef YYLSP_NEEDED
3572 yylsp++;
3573 if (yylen == 0)
3574 {
3575 yylsp->first_line = yylloc.first_line;
3576 yylsp->first_column = yylloc.first_column;
3577 yylsp->last_line = (yylsp-1)->last_line;
3578 yylsp->last_column = (yylsp-1)->last_column;
3579 yylsp->text = 0;
3580 }
3581 else
3582 {
3583 yylsp->last_line = (yylsp+yylen-1)->last_line;
3584 yylsp->last_column = (yylsp+yylen-1)->last_column;
3585 }
3586#endif
vlmfa67ddc2004-06-03 03:38:44 +00003587
vlm6a02a8a2004-09-08 00:28:11 +00003588 /* Now "shift" the result of the reduction.
3589 Determine what state that goes to,
3590 based on the state we popped back to
3591 and the rule number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00003592
3593 yyn = yyr1[yyn];
3594
vlm6a02a8a2004-09-08 00:28:11 +00003595 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3596 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00003597 yystate = yytable[yystate];
3598 else
vlm6a02a8a2004-09-08 00:28:11 +00003599 yystate = yydefgoto[yyn - YYNTBASE];
vlmfa67ddc2004-06-03 03:38:44 +00003600
3601 goto yynewstate;
3602
vlm6a02a8a2004-09-08 00:28:11 +00003603yyerrlab: /* here on detecting error */
vlmfa67ddc2004-06-03 03:38:44 +00003604
vlm6a02a8a2004-09-08 00:28:11 +00003605 if (! yyerrstatus)
3606 /* If not already recovering from an error, report this error. */
vlmfa67ddc2004-06-03 03:38:44 +00003607 {
3608 ++yynerrs;
vlm6a02a8a2004-09-08 00:28:11 +00003609
3610#ifdef YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00003611 yyn = yypact[yystate];
3612
vlm6a02a8a2004-09-08 00:28:11 +00003613 if (yyn > YYFLAG && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00003614 {
vlm6a02a8a2004-09-08 00:28:11 +00003615 int size = 0;
3616 char *msg;
3617 int x, count;
vlmfa67ddc2004-06-03 03:38:44 +00003618
vlm6a02a8a2004-09-08 00:28:11 +00003619 count = 0;
3620 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3621 for (x = (yyn < 0 ? -yyn : 0);
vlm03630c52005-06-07 21:43:32 +00003622 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
vlm6a02a8a2004-09-08 00:28:11 +00003623 if (yycheck[x + yyn] == x)
3624 size += strlen(yytname[x]) + 15, count++;
3625 msg = (char *) malloc(size + 15);
3626 if (msg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00003627 {
vlm6a02a8a2004-09-08 00:28:11 +00003628 strcpy(msg, "parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003629
vlm6a02a8a2004-09-08 00:28:11 +00003630 if (count < 5)
vlmfa67ddc2004-06-03 03:38:44 +00003631 {
vlm6a02a8a2004-09-08 00:28:11 +00003632 count = 0;
3633 for (x = (yyn < 0 ? -yyn : 0);
vlm03630c52005-06-07 21:43:32 +00003634 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
vlm6a02a8a2004-09-08 00:28:11 +00003635 if (yycheck[x + yyn] == x)
vlmfa67ddc2004-06-03 03:38:44 +00003636 {
vlm6a02a8a2004-09-08 00:28:11 +00003637 strcat(msg, count == 0 ? ", expecting `" : " or `");
3638 strcat(msg, yytname[x]);
3639 strcat(msg, "'");
3640 count++;
vlmfa67ddc2004-06-03 03:38:44 +00003641 }
3642 }
vlm6a02a8a2004-09-08 00:28:11 +00003643 yyerror(msg);
3644 free(msg);
vlmfa67ddc2004-06-03 03:38:44 +00003645 }
3646 else
vlm6a02a8a2004-09-08 00:28:11 +00003647 yyerror ("parse error; also virtual memory exceeded");
vlmfa67ddc2004-06-03 03:38:44 +00003648 }
3649 else
3650#endif /* YYERROR_VERBOSE */
vlm6a02a8a2004-09-08 00:28:11 +00003651 yyerror("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003652 }
vlm6a02a8a2004-09-08 00:28:11 +00003653
vlmfa67ddc2004-06-03 03:38:44 +00003654 goto yyerrlab1;
vlm6a02a8a2004-09-08 00:28:11 +00003655yyerrlab1: /* here on error raised explicitly by an action */
vlmfa67ddc2004-06-03 03:38:44 +00003656
3657 if (yyerrstatus == 3)
3658 {
vlm6a02a8a2004-09-08 00:28:11 +00003659 /* if just tried and failed to reuse lookahead token after an error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00003660
vlm6a02a8a2004-09-08 00:28:11 +00003661 /* return failure if at end of input */
vlmfa67ddc2004-06-03 03:38:44 +00003662 if (yychar == YYEOF)
vlm6a02a8a2004-09-08 00:28:11 +00003663 YYABORT;
vlmfa67ddc2004-06-03 03:38:44 +00003664
vlm6a02a8a2004-09-08 00:28:11 +00003665#if YYDEBUG != 0
3666 if (yydebug)
3667 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3668#endif
3669
vlmfa67ddc2004-06-03 03:38:44 +00003670 yychar = YYEMPTY;
3671 }
3672
vlm6a02a8a2004-09-08 00:28:11 +00003673 /* Else will try to reuse lookahead token
3674 after shifting the error token. */
vlmfa67ddc2004-06-03 03:38:44 +00003675
vlm6a02a8a2004-09-08 00:28:11 +00003676 yyerrstatus = 3; /* Each real token shifted decrements this */
vlmfa67ddc2004-06-03 03:38:44 +00003677
vlm6a02a8a2004-09-08 00:28:11 +00003678 goto yyerrhandle;
vlm80103492004-09-07 10:39:09 +00003679
vlm6a02a8a2004-09-08 00:28:11 +00003680yyerrdefault: /* current state does not do anything special for the error token. */
vlm80103492004-09-07 10:39:09 +00003681
vlm6a02a8a2004-09-08 00:28:11 +00003682#if 0
3683 /* This is wrong; only states that explicitly want error tokens
3684 should shift them. */
3685 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3686 if (yyn) goto yydefault;
vlm39e5ed72004-09-05 10:40:41 +00003687#endif
vlm6a02a8a2004-09-08 00:28:11 +00003688
3689yyerrpop: /* pop the current state because it cannot handle the error token */
3690
3691 if (yyssp == yyss) YYABORT;
3692 yyvsp--;
3693 yystate = *--yyssp;
3694#ifdef YYLSP_NEEDED
3695 yylsp--;
3696#endif
3697
3698#if YYDEBUG != 0
3699 if (yydebug)
3700 {
3701 short *ssp1 = yyss - 1;
3702 fprintf (stderr, "Error: state stack now");
3703 while (ssp1 != yyssp)
3704 fprintf (stderr, " %d", *++ssp1);
3705 fprintf (stderr, "\n");
vlm39e5ed72004-09-05 10:40:41 +00003706 }
vlm6a02a8a2004-09-08 00:28:11 +00003707#endif
3708
3709yyerrhandle:
3710
3711 yyn = yypact[yystate];
3712 if (yyn == YYFLAG)
3713 goto yyerrdefault;
3714
3715 yyn += YYTERROR;
3716 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3717 goto yyerrdefault;
3718
3719 yyn = yytable[yyn];
3720 if (yyn < 0)
3721 {
3722 if (yyn == YYFLAG)
3723 goto yyerrpop;
3724 yyn = -yyn;
3725 goto yyreduce;
3726 }
3727 else if (yyn == 0)
3728 goto yyerrpop;
vlmfa67ddc2004-06-03 03:38:44 +00003729
3730 if (yyn == YYFINAL)
3731 YYACCEPT;
3732
vlm6a02a8a2004-09-08 00:28:11 +00003733#if YYDEBUG != 0
3734 if (yydebug)
3735 fprintf(stderr, "Shifting error token, ");
3736#endif
vlmfa67ddc2004-06-03 03:38:44 +00003737
3738 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00003739#ifdef YYLSP_NEEDED
3740 *++yylsp = yylloc;
3741#endif
vlmfa67ddc2004-06-03 03:38:44 +00003742
3743 yystate = yyn;
3744 goto yynewstate;
3745
vlm6a02a8a2004-09-08 00:28:11 +00003746 yyacceptlab:
3747 /* YYACCEPT comes here. */
3748 if (yyfree_stacks)
3749 {
3750 free (yyss);
3751 free (yyvs);
3752#ifdef YYLSP_NEEDED
3753 free (yyls);
vlm044f7442004-09-04 04:49:21 +00003754#endif
vlm6a02a8a2004-09-08 00:28:11 +00003755 }
3756 return 0;
vlm80103492004-09-07 10:39:09 +00003757
vlm6a02a8a2004-09-08 00:28:11 +00003758 yyabortlab:
3759 /* YYABORT comes here. */
3760 if (yyfree_stacks)
3761 {
3762 free (yyss);
3763 free (yyvs);
3764#ifdef YYLSP_NEEDED
3765 free (yyls);
vlm80103492004-09-07 10:39:09 +00003766#endif
vlm6a02a8a2004-09-08 00:28:11 +00003767 }
3768 return 1;
vlmfa67ddc2004-06-03 03:38:44 +00003769}
vlma367d552006-03-09 09:11:53 +00003770#line 2204 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00003771
3772
3773
3774/*
3775 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3776 */
3777static asn1p_value_t *
3778_convert_bitstring2binary(char *str, int base) {
3779 asn1p_value_t *val;
3780 int slen;
3781 int memlen;
3782 int baselen;
3783 int bits;
3784 uint8_t *binary_vector;
3785 uint8_t *bv_ptr;
3786 uint8_t cur_val;
3787
3788 assert(str);
3789 assert(str[0] == '\'');
3790
3791 switch(base) {
3792 case 'B':
3793 baselen = 1;
3794 break;
3795 case 'H':
3796 baselen = 4;
3797 break;
3798 default:
3799 assert(base == 'B' || base == 'H');
3800 errno = EINVAL;
3801 return NULL;
3802 }
3803
3804 slen = strlen(str);
3805 assert(str[slen - 1] == base);
3806 assert(str[slen - 2] == '\'');
3807
3808 memlen = slen / (8 / baselen); /* Conservative estimate */
3809
3810 bv_ptr = binary_vector = malloc(memlen + 1);
3811 if(bv_ptr == NULL)
3812 /* ENOMEM */
3813 return NULL;
3814
3815 cur_val = 0;
3816 bits = 0;
3817 while(*(++str) != '\'') {
3818 switch(baselen) {
3819 case 1:
3820 switch(*str) {
3821 case '1':
3822 cur_val |= 1 << (7 - (bits % 8));
3823 case '0':
3824 break;
3825 default:
3826 assert(!"_y UNREACH1");
3827 case ' ': case '\r': case '\n':
3828 continue;
3829 }
3830 break;
3831 case 4:
3832 switch(*str) {
3833 case '0': case '1': case '2': case '3': case '4':
3834 case '5': case '6': case '7': case '8': case '9':
3835 cur_val |= (*str - '0') << (4 - (bits % 8));
3836 break;
3837 case 'A': case 'B': case 'C':
3838 case 'D': case 'E': case 'F':
3839 cur_val |= ((*str - 'A') + 10)
3840 << (4 - (bits % 8));
3841 break;
3842 default:
3843 assert(!"_y UNREACH2");
3844 case ' ': case '\r': case '\n':
3845 continue;
3846 }
3847 break;
3848 }
3849
3850 bits += baselen;
3851 if((bits % 8) == 0) {
3852 *bv_ptr++ = cur_val;
3853 cur_val = 0;
3854 }
3855 }
3856
3857 *bv_ptr = cur_val;
3858 assert((bv_ptr - binary_vector) <= memlen);
3859
3860 val = asn1p_value_frombits(binary_vector, bits, 0);
3861 if(val == NULL) {
3862 free(binary_vector);
3863 }
3864
3865 return val;
3866}
3867
vlm5d89c3d2005-08-13 09:07:11 +00003868/*
3869 * For unnamed types (used in old X.208 compliant modules)
3870 * generate some sort of interim names, to not to force human being to fix
3871 * the specification's compliance to modern ASN.1 standards.
3872 */
3873static void
3874_fixup_anonymous_identifier(asn1p_expr_t *expr) {
3875 char *p;
3876 assert(expr->Identifier == 0);
3877
3878 /*
3879 * Try to figure out the type name
3880 * without going too much into details
3881 */
3882 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
3883 if(expr->reference && expr->reference->comp_count > 0)
3884 expr->Identifier = expr->reference->components[0].name;
3885
3886 fprintf(stderr,
3887 "WARNING: Line %d: expected lower-case member identifier, "
3888 "found an unnamed %s.\n"
3889 "WARNING: Obsolete X.208 syntax detected, "
3890 "please give the member a name.\n",
3891 yylineno, expr->Identifier ? expr->Identifier : "type");
3892
3893 if(!expr->Identifier)
3894 expr->Identifier = "unnamed";
3895 expr->Identifier = strdup(expr->Identifier);
3896 assert(expr->Identifier);
3897 /* Make a lowercase identifier from the type name */
3898 for(p = expr->Identifier; *p; p++) {
3899 switch(*p) {
3900 case 'A' ... 'Z': *p += 32; break;
3901 case ' ': *p = '_'; break;
3902 case '-': *p = '_'; break;
3903 }
3904 }
3905 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
3906 "Name clash may occur later.\n",
3907 expr->Identifier);
3908}
3909
vlmfa67ddc2004-06-03 03:38:44 +00003910extern char *asn1p_text;
3911
3912int
3913yyerror(const char *msg) {
3914 fprintf(stderr,
3915 "ASN.1 grammar parse error "
3916 "near line %d (token \"%s\"): %s\n",
vlm39e5ed72004-09-05 10:40:41 +00003917 yylineno, asn1p_text, msg);
vlmfa67ddc2004-06-03 03:38:44 +00003918 return -1;
3919}
3920
3921