blob: 024f520e62695eb558282804b3d1fea4f4260af6 [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
vlmdc7cf042006-03-09 08:49:26 +0000224#define YYFINAL 445
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,
284 397, 399, 401, 403, 405, 409, 413, 415, 419, 424,
285 428, 429, 433, 435, 437, 439, 441, 443, 445, 447,
286 449, 451, 455, 457, 459, 461, 463, 466, 468, 470,
287 472, 474, 477, 480, 482, 484, 487, 490, 492, 494,
288 496, 498, 500, 503, 505, 508, 510, 512, 514, 516,
289 518, 520, 522, 524, 526, 528, 530, 532, 534, 536,
290 538, 540, 542, 544, 546, 547, 549, 551, 556, 560,
291 565, 567, 571, 577, 579, 583, 587, 591, 595, 600,
292 604, 606, 608, 612, 616, 620, 624, 626, 628, 629,
293 635, 637, 640, 643, 647, 649, 651, 653, 655, 657,
294 659, 661, 663, 667, 673, 675, 679, 681, 685, 686,
295 688, 690, 692, 694, 696, 698, 702, 707, 709, 713,
296 716, 720, 722, 726, 727, 729, 731, 734, 737, 741,
297 743, 747, 749, 754, 759, 761, 763, 765, 767, 768,
298 770, 773, 778, 779, 781, 783, 785, 786, 788, 790,
299 792, 794, 796, 797, 799
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,
329 0, 16, 173, 210, 0, 15, 173, 210, 0, 16,
330 174, 210, 0, 15, 174, 210, 0, 15, 164, 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,
344 16, 0, 14, 0, 221, 113, 14, 0, 224, 143,
345 3, 176, 0, 224, 111, 176, 0, 0, 105, 177,
346 180, 0, 65, 0, 47, 0, 88, 0, 5, 0,
347 7, 0, 179, 0, 215, 0, 178, 0, 224, 0,
348 221, 113, 224, 0, 6, 0, 10, 0, 11, 0,
349 4, 0, 180, 4, 0, 26, 0, 65, 0, 78,
350 0, 182, 0, 69, 83, 0, 67, 53, 0, 79,
351 0, 46, 0, 38, 73, 0, 28, 83, 0, 93,
352 0, 49, 0, 184, 0, 60, 0, 42, 0, 24,
353 83, 0, 181, 0, 182, 212, 0, 25, 0, 50,
354 0, 51, 0, 52, 0, 61, 0, 66, 0, 76,
355 0, 85, 0, 87, 0, 92, 0, 94, 0, 95,
356 0, 96, 0, 68, 0, 101, 0, 102, 0, 99,
357 0, 100, 0, 98, 0, 0, 189, 0, 190, 0,
358 82, 107, 191, 108, 0, 107, 191, 108, 0, 190,
359 107, 191, 108, 0, 192, 0, 192, 110, 104, 0,
360 192, 110, 104, 110, 192, 0, 193, 0, 19, 98,
361 193, 0, 192, 185, 193, 0, 192, 186, 193, 0,
362 193, 187, 193, 0, 196, 107, 191, 108, 0, 107,
363 191, 108, 0, 197, 0, 198, 0, 197, 195, 197,
364 0, 63, 195, 197, 0, 197, 195, 62, 0, 63,
365 195, 62, 0, 204, 0, 199, 0, 0, 33, 27,
366 105, 194, 180, 0, 103, 0, 103, 114, 0, 114,
367 103, 0, 114, 103, 114, 0, 82, 0, 48, 0,
368 47, 0, 88, 0, 215, 0, 179, 0, 224, 0,
369 221, 0, 97, 31, 190, 0, 97, 32, 105, 200,
370 106, 0, 201, 0, 200, 110, 201, 0, 104, 0,
371 224, 188, 202, 0, 0, 203, 0, 75, 0, 17,
372 0, 71, 0, 205, 0, 206, 0, 105, 221, 106,
373 0, 205, 105, 207, 106, 0, 208, 0, 207, 110,
374 208, 0, 115, 209, 0, 115, 113, 209, 0, 224,
375 0, 209, 113, 224, 0, 0, 211, 0, 71, 0,
376 35, 176, 0, 105, 106, 0, 105, 213, 106, 0,
377 214, 0, 213, 110, 214, 0, 224, 0, 224, 107,
378 215, 108, 0, 224, 107, 178, 108, 0, 215, 0,
379 104, 0, 9, 0, 12, 0, 0, 217, 0, 218,
380 220, 0, 116, 219, 9, 117, 0, 0, 91, 0,
381 21, 0, 77, 0, 0, 54, 0, 43, 0, 13,
382 0, 14, 0, 14, 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,
398 983, 994, 1004, 1014, 1025, 1036, 1062, 1064, 1069, 1073,
399 1078, 1083, 1089, 1093, 1104, 1113, 1122, 1133, 1155, 1162,
400 1181, 1185, 1191, 1197, 1203, 1213, 1223, 1229, 1243, 1267,
401 1274, 1288, 1297, 1307, 1317, 1327, 1335, 1356, 1365, 1374,
402 1375, 1377, 1384, 1391, 1397, 1401, 1407, 1412, 1425, 1435,
403 1443, 1443, 1448, 1453, 1458, 1463, 1467, 1471, 1474, 1477,
404 1482, 1494, 1511, 1516, 1521, 1554, 1564, 1578, 1580, 1581,
405 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591,
406 1597, 1599, 1600, 1603, 1610, 1622, 1624, 1628, 1632, 1633,
407 1634, 1635, 1636, 1640, 1641, 1642, 1643, 1647, 1648, 1655,
408 1655, 1656, 1656, 1657, 1659, 1661, 1666, 1670, 1679, 1683,
409 1688, 1692, 1698, 1708, 1712, 1715, 1718, 1721, 1726, 1735,
410 1743, 1749, 1755, 1762, 1770, 1778, 1787, 1790, 1793, 1794,
411 1804, 1806, 1807, 1808, 1811, 1815, 1820, 1826, 1831, 1834,
412 1837, 1850, 1864, 1868, 1873, 1877, 1882, 1889, 1902, 1904,
413 1907, 1911, 1914, 1919, 1923, 1931, 1946, 1952, 1959, 1972,
414 1984, 1999, 2003, 2020, 2025, 2028, 2033, 2055, 2060, 2065,
415 2071, 2077, 2085, 2093, 2101, 2108, 2118, 2123, 2153, 2155,
416 2158, 2165, 2171, 2173, 2174, 2175, 2178, 2180, 2181, 2184,
417 2189, 2196, 2203, 2205, 2210
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,
485 171, 172, 172, 173, 173, 173, 174, 174, 175, 176,
486 177, 176, 176, 176, 176, 176, 176, 176, 176, 176,
487 178, 178, 179, 179, 179, 180, 180, 181, 181, 181,
488 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
489 182, 182, 182, 183, 183, 184, 184, 184, 184, 184,
490 184, 184, 184, 184, 184, 184, 184, 184, 184, 185,
491 185, 186, 186, 187, 188, 188, 189, 189, 190, 190,
492 191, 191, 191, 192, 192, 192, 192, 192, 193, 193,
493 193, 193, 193, 193, 193, 193, 193, 193, 194, 193,
494 195, 195, 195, 195, 196, 196, 197, 197, 197, 197,
495 197, 198, 199, 199, 200, 200, 201, 201, 202, 202,
496 203, 203, 203, 204, 204, 205, 206, 207, 207, 208,
497 208, 209, 209, 210, 210, 211, 211, 212, 212, 213,
498 213, 214, 214, 214, 214, 214, 215, 215, 216, 216,
499 217, 218, 219, 219, 219, 219, 220, 220, 220, 221,
500 221, 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,
517 1, 1, 1, 1, 3, 3, 1, 3, 4, 3,
518 0, 3, 1, 1, 1, 1, 1, 1, 1, 1,
519 1, 3, 1, 1, 1, 1, 2, 1, 1, 1,
520 1, 2, 2, 1, 1, 2, 2, 1, 1, 1,
521 1, 1, 2, 1, 2, 1, 1, 1, 1, 1,
vlm6a02a8a2004-09-08 00:28:11 +0000522 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
vlmdc7cf042006-03-09 08:49:26 +0000523 1, 1, 1, 1, 0, 1, 1, 4, 3, 4,
524 1, 3, 5, 1, 3, 3, 3, 3, 4, 3,
525 1, 1, 3, 3, 3, 3, 1, 1, 0, 5,
526 1, 2, 2, 3, 1, 1, 1, 1, 1, 1,
527 1, 1, 3, 5, 1, 3, 1, 3, 0, 1,
528 1, 1, 1, 1, 1, 3, 4, 1, 3, 2,
529 3, 1, 3, 0, 1, 1, 2, 2, 3, 1,
530 3, 1, 4, 4, 1, 1, 1, 1, 0, 1,
531 2, 4, 0, 1, 1, 1, 0, 1, 1, 1,
532 1, 1, 0, 1, 1
vlm6a02a8a2004-09-08 00:28:11 +0000533};
534
535static const short yydefact[] = { 0,
vlmdc7cf042006-03-09 08:49:26 +0000536 280, 281, 1, 2, 5, 3, 0, 0, 6, 285,
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,
vlmdc7cf042006-03-09 08:49:26 +0000539 18, 21, 19, 0, 17, 12, 23, 176, 0, 0,
540 177, 178, 179, 0, 180, 181, 189, 182, 183, 184,
541 185, 186, 187, 188, 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,
vlmdc7cf042006-03-09 08:49:26 +0000544 26, 269, 122, 282, 0, 158, 0, 0, 172, 165,
545 169, 171, 159, 0, 0, 160, 164, 168, 0, 0,
546 57, 58, 161, 170, 126, 0, 33, 48, 47, 0,
547 0, 35, 38, 0, 0, 0, 0, 273, 60, 59,
548 109, 270, 277, 0, 173, 167, 166, 163, 162, 0,
549 62, 0, 64, 0, 0, 0, 51, 53, 39, 43,
550 45, 0, 275, 276, 274, 0, 0, 195, 279, 278,
551 271, 123, 125, 0, 0, 0, 0, 55, 132, 133,
552 127, 128, 130, 124, 146, 153, 147, 267, 154, 155,
553 268, 144, 143, 145, 141, 139, 150, 148, 149, 0,
554 151, 40, 41, 269, 269, 0, 88, 0, 122, 282,
555 117, 0, 0, 195, 195, 110, 120, 174, 161, 111,
556 0, 0, 0, 108, 196, 197, 269, 63, 67, 66,
557 65, 0, 0, 0, 0, 0, 137, 134, 0, 256,
558 254, 254, 254, 90, 255, 0, 86, 254, 254, 97,
559 0, 272, 0, 269, 0, 269, 0, 269, 0, 0,
560 175, 269, 0, 0, 0, 227, 226, 0, 225, 228,
561 0, 0, 0, 230, 0, 201, 204, 0, 211, 212,
562 218, 217, 244, 245, 229, 232, 231, 0, 61, 156,
563 56, 129, 142, 152, 140, 257, 96, 0, 93, 95,
564 0, 87, 254, 92, 94, 0, 85, 98, 89, 0,
565 105, 0, 80, 83, 84, 269, 121, 0, 0, 73,
566 74, 79, 254, 269, 283, 0, 283, 266, 258, 0,
567 260, 265, 262, 0, 68, 70, 71, 0, 0, 0,
568 221, 0, 0, 0, 0, 0, 0, 199, 192, 193,
569 190, 191, 0, 0, 0, 194, 0, 0, 0, 0,
570 0, 157, 135, 136, 138, 91, 0, 118, 0, 112,
571 269, 82, 269, 113, 269, 77, 254, 269, 284, 114,
572 269, 259, 0, 0, 119, 269, 198, 205, 219, 222,
573 223, 216, 214, 233, 0, 246, 210, 202, 206, 207,
574 208, 0, 215, 213, 0, 0, 248, 200, 99, 106,
575 107, 151, 81, 78, 75, 76, 109, 109, 261, 0,
576 0, 69, 0, 224, 237, 0, 235, 195, 0, 209,
577 0, 250, 252, 247, 0, 0, 115, 116, 264, 263,
578 220, 234, 0, 239, 203, 251, 0, 249, 103, 0,
579 101, 104, 131, 236, 242, 243, 241, 238, 240, 253,
580 100, 102, 0, 0, 0
vlm6a02a8a2004-09-08 00:28:11 +0000581};
582
vlmdc7cf042006-03-09 08:49:26 +0000583static const short yydefgoto[] = { 443,
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,
586 69, 70, 60, 212, 100, 61, 130, 131, 314, 315,
587 299, 300, 301, 292, 293, 119, 283, 186, 187, 287,
588 288, 416, 430, 431, 302, 303, 147, 148, 196, 101,
589 161, 162, 432, 163, 222, 223, 62, 176, 214, 177,
590 254, 271, 102, 103, 200, 104, 334, 335, 337, 204,
591 205, 206, 255, 256, 257, 403, 323, 258, 259, 260,
592 261, 406, 407, 438, 439, 262, 263, 264, 386, 387,
593 412, 224, 225, 241, 310, 311, 265, 121, 122, 123,
594 146, 151, 266, 105, 358, 267
vlm6a02a8a2004-09-08 00:28:11 +0000595};
596
vlmdc7cf042006-03-09 08:49:26 +0000597static const short yypact[] = { 200,
598-32768,-32768, 200,-32768, -83,-32768, 60, 10,-32768,-32768,
599-32768,-32768, 62,-32768, -48, 157,-32768,-32768, 20, 48,
600 23, 44, 98, 89, 212, 157,-32768, 117,-32768,-32768,
601-32768,-32768,-32768, 207,-32768,-32768, 431,-32768, 226, 42,
602-32768,-32768,-32768, 126,-32768,-32768,-32768,-32768,-32768,-32768,
603-32768,-32768,-32768,-32768, 208, 431,-32768,-32768,-32768,-32768,
604-32768,-32768,-32768, 242, 591,-32768, 148,-32768, 94,-32768,
605 146,-32768,-32768, 52,-32768, -24,-32768, 160,-32768,-32768,
606-32768, 5, 156,-32768, 196,-32768, 202, 214,-32768,-32768,
607-32768,-32768,-32768, 244, 216,-32768,-32768,-32768, 666, 298,
608-32768,-32768,-32768,-32768, 193, 309,-32768,-32768,-32768, 233,
609 213,-32768,-32768, 200, 233, 218, 220, 11,-32768,-32768,
610-32768,-32768, -15, 233,-32768,-32768,-32768,-32768,-32768, -25,
611-32768, 219, 221, 228, 248, 423,-32768,-32768, -83,-32768,
612-32768, 243,-32768,-32768,-32768, 317, 516, 53,-32768,-32768,
613-32768,-32768,-32768, 328, 666, 331, 233,-32768,-32768,-32768,
614 227,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
615-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 232,
616 235,-32768,-32768, 49, 12, -19,-32768, 224, 105, 238,
617 312, 246, 282, 82, 88,-32768,-32768,-32768, 250,-32768,
618 253, 254, 361,-32768,-32768, 255, 237,-32768,-32768,-32768,
619-32768, 356, 274, 356, 331, 423, 251,-32768, 423,-32768,
620 19, -18, 19,-32768,-32768, 263, 273, -18, 19, 269,
621 243,-32768, 350, 15, 268, 8, 311, 8, 313, 39,
622-32768, 7, 361, 281, 355,-32768,-32768, 87,-32768,-32768,
623 264, 200, 361,-32768, 276, 97, 288, 290, 87,-32768,
624-32768,-32768, 291,-32768,-32768,-32768,-32768, 361,-32768,-32768,
625 391,-32768, 391,-32768,-32768,-32768,-32768, 289,-32768,-32768,
626 384,-32768, 19,-32768,-32768, 315,-32768,-32768,-32768, 331,
627 293, 36,-32768,-32768,-32768, 237,-32768, 330, 295, 292,
628-32768,-32768, 19, 237, 331, 297, 331,-32768,-32768, 63,
629-32768,-32768, 299, 122,-32768,-32768,-32768, 302, 379, 306,
630 300, 304, 172, 308, 314, 307, 310,-32768,-32768,-32768,
631-32768,-32768, 318, 379, 379,-32768, 379, 361, 266, 323,
632 332,-32768,-32768,-32768,-32768,-32768, 316,-32768, 230,-32768,
633 15,-32768, 237,-32768, 2,-32768, 19, 237,-32768,-32768,
634 237,-32768, 68, 230,-32768, 7,-32768,-32768,-32768,-32768,
635 303,-32768,-32768, 255, 6,-32768,-32768, 336,-32768,-32768,
636-32768, 333,-32768,-32768, 13, 142,-32768,-32768,-32768,-32768,
637-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 339,
638 340,-32768, 356,-32768,-32768, 144,-32768, 53, 361,-32768,
639 331, 337,-32768,-32768, 323, 190,-32768,-32768,-32768,-32768,
640 391,-32768, 6, 3, 215, 337, 331,-32768,-32768, 27,
vlme1e6ed82005-03-24 14:26:38 +0000641-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
vlmdc7cf042006-03-09 08:49:26 +0000642-32768,-32768, 425, 451,-32768
vlm6a02a8a2004-09-08 00:28:11 +0000643};
644
645static const short yypgoto[] = {-32768,
vlmdc7cf042006-03-09 08:49:26 +0000646-32768, 420,-32768, 320,-32768, 439,-32768,-32768, 427,-32768,
647-32768, 398,-32768,-32768,-32768,-32768, 381,-32768, 342,-32768,
648-32768, 352,-32768,-32768, 395,-32768,-32768, 319,-32768, 99,
649 225,-32768, 109,-32768, 118,-32768,-32768,-32768, 241,-32768,
650-32768,-32768,-32768, 43, -229, -80,-32768, -75,-32768, -103,
651-32768, 265,-32768, -253, 294, 305,-32768, -28,-32768, -270,
652 -78, -211, -3, 338,-32768, 120,-32768,-32768,-32768, -187,
653-32768, 153, -171, 71, -236,-32768, 234,-32768, -287,-32768,
654-32768,-32768, 66,-32768,-32768,-32768,-32768,-32768,-32768, 76,
655 83, -210,-32768,-32768,-32768, 132, -127, -135,-32768,-32768,
656-32768,-32768, 1,-32768, 189, -7
vlm6a02a8a2004-09-08 00:28:11 +0000657};
658
659
vlmdc7cf042006-03-09 08:49:26 +0000660#define YYLAST 762
vlm6a02a8a2004-09-08 00:28:11 +0000661
662
663static const short yytable[] = { 15,
vlmdc7cf042006-03-09 08:49:26 +0000664 5, 120, 273, 5, 294, 15, 237, 239, 179, 10,
665 277, 279, 280, 10, 10, 10, 219, 284, 285, 435,
666 10, 7, 10, 114, 1, 217, 218, 149, 28, 65,
667 429, 143, 72, 298, 117, 373, 79, 64, 150, 298,
668 71, 159, 160, 197, 78, 16, 10, 168, 65, 10,
669 171, 384, 220, 219, 1, 2, 64, 178, 19, 10,
670 67, 1, 217, 218, 1, 2, 79, 10, 11, 10,
671 11, 318, 346, 436, 78, 10, 168, 437, 390, 171,
672 154, 327, 368, 219, 155, 115, 230, 144, 179, 220,
673 231, 179, 356, 400, 278, 132, 341, 379, 380, 133,
674 381, 145, 72, 221, 227, 291, 29, 79, 30, 405,
675 71, 291, 312, -72, 139, 78, 153, 118, 291, 220,
676 118, 294, 118, 118, 152, 411, 269, 118, 181, 31,
677 118, 297, 441, 10, 202, 164, 180, 178, 1, 2,
678 178, 350, 308, 198, 309, 351, 396, 201, 209, 211,
679 68, 132, 32, 295, -254, 133, 63, 210, -254, 203,
680 112, 316, 433, 202, 118, 12, 382, 17, 362, 202,
681 20, 308, 363, 73, 33, 63, 433, 166, 21, 10,
682 168, 169, 170, 171, 226, 226, 236, 275, 203, 321,
683 276, 421, 238, 429, 203, 329, 330, 331, 332, 22,
684 322, 23, 109, 110, 159, 160, 333, 274, 181, -280,
685 24, 181, 1, 2, 34, 352, 180, 124, 246, 180,
686 424, 391, 397, 357, 36, 398, 296, 365, 304, 37,
687 304, 366, 313, 372, 317, 312, 401, 10, 168, 66,
688 10, 171, 1, 2, 82, 1, 2, 414, 80, 422,
689 111, 415, 326, 423, 83, 84, 108, 184, 185, 250,
690 1, 2, 159, 160, 116, 85, 38, 86, 124, 87,
691 295, 166, 394, 10, 168, 169, 170, 171, 125, 88,
692 83, 84, 348, 89, 126, 316, 127, 90, 159, 160,
693 91, 41, 42, 43, 324, 325, 128, 359, 129, 359,
694 134, 92, 45, 343, 344, 135, 93, 46, 94, 47,
695 95, 136, 246, 329, 330, 331, 332, 48, 138, 96,
696 97, 417, 418, 141, 142, 188, 49, 383, 50, 156,
697 207, 157, 158, 51, 98, 52, 53, 54, 10, 213,
698 232, 392, -281, 296, 215, 216, 99, 304, 233, 180,
699 234, 235, 118, 250, 240, 313, 392, 242, 317, 270,
700 243, 268, 282, -281, 180, 286, 166, 408, 10, 168,
701 169, 170, 171, 1, 2, 281, 290, 413, 319, 244,
702 305, 320, 307, 328, 166, 336, 10, 168, 169, 170,
703 171, 1, 2, 245, 342, 340, 338, 345, 347, 353,
704 354, 355, 360, 413, 349, 364, 371, 246, 247, 367,
705 369, 245, 376, 370, 203, 408, 404, 377, 375, 440,
706 389, 378, 6, 248, 444, 246, 247, 165, 166, 167,
707 10, 168, 169, 170, 171, 1, 2, 385, 10, 388,
708 410, 248, 249, 1, 2, 409, 419, 420, 250, 427,
709 445, 18, 35, 81, 113, 38, 140, 251, 182, 106,
710 249, 137, 306, 395, 402, 252, 250, 253, 393, 172,
711 39, 289, 442, 208, 40, 251, 374, 272, 228, 425,
712 41, 42, 43, 252, 199, 253, 44, 173, 434, 229,
713 428, 45, 339, 426, 399, 361, 46, 0, 47, 0,
714 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
715 174, 0, 0, 0, 0, 49, 0, 50, 0, 0,
716 0, 0, 51, 0, 52, 53, 54, 175, 189, 190,
717 0, 0, 0, 0, 0, 191, 0, 0, 0, 85,
718 38, 86, 0, 87, 192, 0, 0, 0, 0, 0,
vlm177a5b62005-09-05 05:17:57 +0000719 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
720 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
vlmdc7cf042006-03-09 08:49:26 +0000721 0, 0, 0, 193, 0, 92, 45, 0, 0, 0,
vlm177a5b62005-09-05 05:17:57 +0000722 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
vlmdc7cf042006-03-09 08:49:26 +0000723 0, 48, 0, 96, 97, 194, 195, 0, 0, 0,
vlm177a5b62005-09-05 05:17:57 +0000724 49, 0, 50, 83, 84, 0, 0, 51, 98, 52,
725 53, 54, 0, 0, 85, 38, 86, 0, 87, 0,
726 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
727 0, 0, 89, 0, 0, 0, 90, 0, 0, 91,
728 41, 42, 43, 0, 0, 0, 0, 0, 0, 0,
729 92, 45, 0, 0, 0, 93, 46, 94, 47, 95,
730 0, 0, 0, 0, 0, 0, 48, 0, 96, 97,
731 0, 0, 0, 0, 0, 49, 0, 50, 1, 2,
732 0, 0, 51, 98, 52, 53, 54, 0, 0, 85,
733 38, 86, 0, 87, 0, 0, 0, 0, 0, 0,
734 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
735 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
736 0, 0, 0, 0, 0, 92, 45, 0, 0, 0,
737 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
738 0, 48, 0, 96, 97, 0, 0, 0, 0, 0,
739 49, 0, 50, 0, 0, 0, 0, 51, 98, 52,
740 53, 54
vlm6a02a8a2004-09-08 00:28:11 +0000741};
742
743static const short yycheck[] = { 7,
vlmdc7cf042006-03-09 08:49:26 +0000744 0, 82, 214, 3, 234, 13, 194, 195, 136, 8,
745 221, 222, 223, 8, 8, 8, 35, 228, 229, 17,
746 8, 105, 8, 48, 13, 14, 15, 43, 9, 37,
747 4, 21, 40, 32, 30, 323, 44, 37, 54, 32,
748 40, 15, 16, 147, 44, 36, 8, 9, 56, 8,
749 12, 339, 71, 35, 13, 14, 56, 136, 107, 8,
750 19, 13, 14, 15, 13, 14, 74, 8, 9, 8,
751 9, 243, 283, 71, 74, 8, 9, 75, 349, 12,
752 106, 253, 319, 35, 110, 110, 106, 77, 216, 71,
753 110, 219, 303, 364, 113, 99, 268, 334, 335, 99,
754 337, 91, 110, 184, 185, 104, 59, 115, 86, 104,
755 110, 104, 240, 106, 114, 115, 124, 116, 104, 71,
756 116, 351, 116, 116, 124, 113, 207, 116, 136, 86,
757 116, 235, 106, 8, 82, 135, 136, 216, 13, 14,
758 219, 106, 104, 147, 106, 110, 357, 147, 156, 157,
759 109, 155, 55, 234, 106, 155, 37, 157, 110, 107,
760 109, 242, 416, 82, 116, 106, 338, 106, 106, 82,
761 14, 104, 110, 48, 86, 56, 430, 6, 22, 8,
762 9, 10, 11, 12, 184, 185, 105, 216, 107, 103,
763 219, 403, 105, 4, 107, 99, 100, 101, 102, 43,
764 114, 45, 109, 110, 15, 16, 110, 215, 216, 105,
765 54, 219, 13, 14, 3, 296, 216, 113, 47, 219,
766 408, 349, 358, 304, 108, 361, 234, 106, 236, 23,
767 238, 110, 240, 62, 242, 363, 364, 8, 9, 14,
768 8, 12, 13, 14, 3, 13, 14, 106, 41, 106,
769 105, 110, 252, 110, 13, 14, 109, 15, 16, 88,
770 13, 14, 15, 16, 105, 24, 25, 26, 113, 28,
771 351, 6, 353, 8, 9, 10, 11, 12, 83, 38,
772 13, 14, 290, 42, 83, 366, 73, 46, 15, 16,
773 49, 50, 51, 52, 31, 32, 53, 305, 83, 307,
774 3, 60, 61, 15, 16, 113, 65, 66, 67, 68,
775 69, 3, 47, 99, 100, 101, 102, 76, 106, 78,
776 79, 397, 398, 106, 105, 9, 85, 62, 87, 111,
777 3, 111, 105, 92, 93, 94, 95, 96, 8, 113,
778 117, 349, 105, 351, 113, 111, 105, 355, 37, 349,
779 105, 70, 116, 88, 105, 363, 364, 105, 366, 4,
780 107, 107, 90, 113, 364, 97, 6, 375, 8, 9,
781 10, 11, 12, 13, 14, 113, 27, 385, 98, 19,
782 70, 27, 70, 108, 6, 98, 8, 9, 10, 11,
783 12, 13, 14, 33, 4, 105, 107, 14, 84, 70,
784 106, 110, 106, 411, 112, 107, 103, 47, 48, 108,
785 105, 33, 106, 114, 107, 423, 114, 108, 105, 427,
786 105, 104, 3, 63, 0, 47, 48, 5, 6, 7,
787 8, 9, 10, 11, 12, 13, 14, 115, 8, 108,
788 108, 63, 82, 13, 14, 110, 108, 108, 88, 113,
789 0, 13, 26, 56, 74, 25, 115, 97, 139, 65,
790 82, 110, 238, 355, 366, 105, 88, 107, 351, 47,
791 40, 231, 430, 155, 44, 97, 324, 213, 185, 409,
792 50, 51, 52, 105, 147, 107, 56, 65, 423, 185,
793 415, 61, 259, 411, 363, 307, 66, -1, 68, -1,
794 -1, -1, -1, -1, -1, -1, 76, -1, -1, -1,
795 88, -1, -1, -1, -1, 85, -1, 87, -1, -1,
796 -1, -1, 92, -1, 94, 95, 96, 105, 13, 14,
797 -1, -1, -1, -1, -1, 20, -1, -1, -1, 24,
vlm177a5b62005-09-05 05:17:57 +0000798 25, 26, -1, 28, 29, -1, -1, -1, -1, -1,
799 -1, -1, -1, 38, -1, -1, -1, 42, -1, -1,
800 -1, 46, -1, -1, 49, 50, 51, 52, -1, -1,
801 -1, -1, -1, 58, -1, 60, 61, -1, -1, -1,
802 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
803 -1, 76, -1, 78, 79, 80, 81, -1, -1, -1,
804 85, -1, 87, 13, 14, -1, -1, 92, 93, 94,
805 95, 96, -1, -1, 24, 25, 26, -1, 28, -1,
806 -1, -1, -1, -1, -1, -1, -1, -1, 38, -1,
807 -1, -1, 42, -1, -1, -1, 46, -1, -1, 49,
808 50, 51, 52, -1, -1, -1, -1, -1, -1, -1,
809 60, 61, -1, -1, -1, 65, 66, 67, 68, 69,
810 -1, -1, -1, -1, -1, -1, 76, -1, 78, 79,
811 -1, -1, -1, -1, -1, 85, -1, 87, 13, 14,
812 -1, -1, 92, 93, 94, 95, 96, -1, -1, 24,
813 25, 26, -1, 28, -1, -1, -1, -1, -1, -1,
814 -1, -1, -1, 38, -1, -1, -1, 42, -1, -1,
815 -1, 46, -1, -1, 49, 50, 51, 52, -1, -1,
816 -1, -1, -1, -1, -1, 60, 61, -1, -1, -1,
817 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
818 -1, 76, -1, 78, 79, -1, -1, -1, -1, -1,
819 85, -1, 87, -1, -1, -1, -1, 92, 93, 94,
820 95, 96
vlm6a02a8a2004-09-08 00:28:11 +0000821};
822/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
823#line 3 "/usr/share/bison.simple"
824/* This file comes from bison-1.28. */
825
826/* Skeleton output parser for bison,
827 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
828
829 This program is free software; you can redistribute it and/or modify
830 it under the terms of the GNU General Public License as published by
831 the Free Software Foundation; either version 2, or (at your option)
832 any later version.
833
834 This program is distributed in the hope that it will be useful,
835 but WITHOUT ANY WARRANTY; without even the implied warranty of
836 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
837 GNU General Public License for more details.
838
839 You should have received a copy of the GNU General Public License
840 along with this program; if not, write to the Free Software
841 Foundation, Inc., 59 Temple Place - Suite 330,
842 Boston, MA 02111-1307, USA. */
843
844/* As a special exception, when this file is copied by Bison into a
845 Bison output file, you may use that output file without restriction.
846 This special exception was added by the Free Software Foundation
847 in version 1.24 of Bison. */
848
849/* This is the parser code that is written into each bison parser
850 when the %semantic_parser declaration is not specified in the grammar.
851 It was written by Richard Stallman by simplifying the hairy parser
852 used when %semantic_parser is specified. */
853
854#ifndef YYSTACK_USE_ALLOCA
855#ifdef alloca
856#define YYSTACK_USE_ALLOCA
857#else /* alloca not defined */
858#ifdef __GNUC__
859#define YYSTACK_USE_ALLOCA
860#define alloca __builtin_alloca
861#else /* not GNU C. */
862#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
863#define YYSTACK_USE_ALLOCA
864#include <alloca.h>
865#else /* not sparc */
866/* We think this test detects Watcom and Microsoft C. */
867/* This used to test MSDOS, but that is a bad idea
868 since that symbol is in the user namespace. */
869#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
870#if 0 /* No need for malloc.h, which pollutes the namespace;
871 instead, just don't use alloca. */
872#include <malloc.h>
873#endif
874#else /* not MSDOS, or __TURBOC__ */
875#if defined(_AIX)
876/* I don't know what this was needed for, but it pollutes the namespace.
877 So I turned it off. rms, 2 May 1997. */
878/* #include <malloc.h> */
879 #pragma alloca
880#define YYSTACK_USE_ALLOCA
881#else /* not MSDOS, or __TURBOC__, or _AIX */
882#if 0
883#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
884 and on HPUX 10. Eventually we can turn this on. */
885#define YYSTACK_USE_ALLOCA
886#define alloca __builtin_alloca
887#endif /* __hpux */
888#endif
889#endif /* not _AIX */
890#endif /* not MSDOS, or __TURBOC__ */
891#endif /* not sparc */
892#endif /* not GNU C */
893#endif /* alloca not defined */
894#endif /* YYSTACK_USE_ALLOCA not defined */
895
896#ifdef YYSTACK_USE_ALLOCA
897#define YYSTACK_ALLOC alloca
vlmfa67ddc2004-06-03 03:38:44 +0000898#else
vlm6a02a8a2004-09-08 00:28:11 +0000899#define YYSTACK_ALLOC malloc
vlmfa67ddc2004-06-03 03:38:44 +0000900#endif
901
vlm6a02a8a2004-09-08 00:28:11 +0000902/* Note: there must be only one dollar sign in this file.
903 It is replaced by the list of actions, each action
904 as one case of the switch. */
vlmfa67ddc2004-06-03 03:38:44 +0000905
906#define yyerrok (yyerrstatus = 0)
907#define yyclearin (yychar = YYEMPTY)
908#define YYEMPTY -2
909#define YYEOF 0
910#define YYACCEPT goto yyacceptlab
vlm6a02a8a2004-09-08 00:28:11 +0000911#define YYABORT goto yyabortlab
vlmfa67ddc2004-06-03 03:38:44 +0000912#define YYERROR goto yyerrlab1
vlm6a02a8a2004-09-08 00:28:11 +0000913/* Like YYERROR except do call yyerror.
914 This remains here temporarily to ease the
915 transition to the new meaning of YYERROR, for GCC.
vlmfa67ddc2004-06-03 03:38:44 +0000916 Once GCC version 2 has supplanted version 1, this can go. */
917#define YYFAIL goto yyerrlab
918#define YYRECOVERING() (!!yyerrstatus)
vlm6a02a8a2004-09-08 00:28:11 +0000919#define YYBACKUP(token, value) \
vlmfa67ddc2004-06-03 03:38:44 +0000920do \
921 if (yychar == YYEMPTY && yylen == 1) \
vlm6a02a8a2004-09-08 00:28:11 +0000922 { yychar = (token), yylval = (value); \
vlmfa67ddc2004-06-03 03:38:44 +0000923 yychar1 = YYTRANSLATE (yychar); \
924 YYPOPSTACK; \
925 goto yybackup; \
926 } \
927 else \
vlm6a02a8a2004-09-08 00:28:11 +0000928 { yyerror ("syntax error: cannot back up"); YYERROR; } \
vlmfa67ddc2004-06-03 03:38:44 +0000929while (0)
930
931#define YYTERROR 1
932#define YYERRCODE 256
933
vlm6a02a8a2004-09-08 00:28:11 +0000934#ifndef YYPURE
935#define YYLEX yylex()
vlmfa67ddc2004-06-03 03:38:44 +0000936#endif
937
vlm6a02a8a2004-09-08 00:28:11 +0000938#ifdef YYPURE
939#ifdef YYLSP_NEEDED
940#ifdef YYLEX_PARAM
941#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
942#else
943#define YYLEX yylex(&yylval, &yylloc)
944#endif
945#else /* not YYLSP_NEEDED */
946#ifdef YYLEX_PARAM
947#define YYLEX yylex(&yylval, YYLEX_PARAM)
948#else
949#define YYLEX yylex(&yylval)
950#endif
951#endif /* not YYLSP_NEEDED */
952#endif
vlmfa67ddc2004-06-03 03:38:44 +0000953
vlm6a02a8a2004-09-08 00:28:11 +0000954/* If nonreentrant, generate the variables here */
vlmfa67ddc2004-06-03 03:38:44 +0000955
vlm6a02a8a2004-09-08 00:28:11 +0000956#ifndef YYPURE
vlmfa67ddc2004-06-03 03:38:44 +0000957
vlm6a02a8a2004-09-08 00:28:11 +0000958int yychar; /* the lookahead symbol */
959YYSTYPE yylval; /* the semantic value of the */
960 /* lookahead symbol */
vlmfa67ddc2004-06-03 03:38:44 +0000961
vlm6a02a8a2004-09-08 00:28:11 +0000962#ifdef YYLSP_NEEDED
963YYLTYPE yylloc; /* location data for the lookahead */
964 /* symbol */
965#endif
vlmfa67ddc2004-06-03 03:38:44 +0000966
vlm6a02a8a2004-09-08 00:28:11 +0000967int yynerrs; /* number of parse errors so far */
968#endif /* not YYPURE */
969
970#if YYDEBUG != 0
971int yydebug; /* nonzero means print parse trace */
972/* Since this is uninitialized, it does not stop multiple parsers
973 from coexisting. */
974#endif
975
976/* YYINITDEPTH indicates the initial size of the parser's stacks */
977
vlmfa67ddc2004-06-03 03:38:44 +0000978#ifndef YYINITDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000979#define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +0000980#endif
981
vlm6a02a8a2004-09-08 00:28:11 +0000982/* YYMAXDEPTH is the maximum size the stacks can grow to
983 (effective only if the built-in stack extension method is used). */
vlmfa67ddc2004-06-03 03:38:44 +0000984
985#if YYMAXDEPTH == 0
vlm6a02a8a2004-09-08 00:28:11 +0000986#undef YYMAXDEPTH
vlmfa67ddc2004-06-03 03:38:44 +0000987#endif
988
989#ifndef YYMAXDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000990#define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +0000991#endif
992
vlm6a02a8a2004-09-08 00:28:11 +0000993/* Define __yy_memcpy. Note that the size argument
994 should be passed with type unsigned int, because that is what the non-GCC
995 definitions require. With GCC, __builtin_memcpy takes an arg
996 of type size_t, but it can handle unsigned int. */
vlmfa67ddc2004-06-03 03:38:44 +0000997
vlm6a02a8a2004-09-08 00:28:11 +0000998#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
999#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
1000#else /* not GNU C or C++ */
1001#ifndef __cplusplus
vlmfa67ddc2004-06-03 03:38:44 +00001002
vlm6a02a8a2004-09-08 00:28:11 +00001003/* This is the most reliable way to avoid incompatibilities
1004 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +00001005static void
vlm6a02a8a2004-09-08 00:28:11 +00001006__yy_memcpy (to, from, count)
1007 char *to;
1008 char *from;
1009 unsigned int count;
vlm80103492004-09-07 10:39:09 +00001010{
vlm6a02a8a2004-09-08 00:28:11 +00001011 register char *f = from;
1012 register char *t = to;
1013 register int i = count;
vlm80103492004-09-07 10:39:09 +00001014
vlm6a02a8a2004-09-08 00:28:11 +00001015 while (i-- > 0)
1016 *t++ = *f++;
vlm80103492004-09-07 10:39:09 +00001017}
vlm80103492004-09-07 10:39:09 +00001018
vlm6a02a8a2004-09-08 00:28:11 +00001019#else /* __cplusplus */
vlm80103492004-09-07 10:39:09 +00001020
vlm6a02a8a2004-09-08 00:28:11 +00001021/* This is the most reliable way to avoid incompatibilities
1022 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +00001023static void
vlm6a02a8a2004-09-08 00:28:11 +00001024__yy_memcpy (char *to, char *from, unsigned int count)
vlm80103492004-09-07 10:39:09 +00001025{
vlm6a02a8a2004-09-08 00:28:11 +00001026 register char *t = to;
1027 register char *f = from;
1028 register int i = count;
vlm80103492004-09-07 10:39:09 +00001029
vlm6a02a8a2004-09-08 00:28:11 +00001030 while (i-- > 0)
1031 *t++ = *f++;
vlm044f7442004-09-04 04:49:21 +00001032}
vlm044f7442004-09-04 04:49:21 +00001033
vlm6a02a8a2004-09-08 00:28:11 +00001034#endif
1035#endif
vlmfa67ddc2004-06-03 03:38:44 +00001036
vlm6a02a8a2004-09-08 00:28:11 +00001037#line 217 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00001038
1039/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1040 into yyparse. The argument should have type void *.
1041 It should actually point to an object.
1042 Grammar actions can access the variable by casting it
1043 to the proper pointer type. */
1044
1045#ifdef YYPARSE_PARAM
vlm6a02a8a2004-09-08 00:28:11 +00001046#ifdef __cplusplus
1047#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1048#define YYPARSE_PARAM_DECL
1049#else /* not __cplusplus */
1050#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1051#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1052#endif /* not __cplusplus */
1053#else /* not YYPARSE_PARAM */
1054#define YYPARSE_PARAM_ARG
1055#define YYPARSE_PARAM_DECL
1056#endif /* not YYPARSE_PARAM */
vlmfa67ddc2004-06-03 03:38:44 +00001057
1058/* Prevent warning if -Wstrict-prototypes. */
1059#ifdef __GNUC__
vlm6a02a8a2004-09-08 00:28:11 +00001060#ifdef YYPARSE_PARAM
vlmfa67ddc2004-06-03 03:38:44 +00001061int yyparse (void *);
vlm6a02a8a2004-09-08 00:28:11 +00001062#else
vlmfa67ddc2004-06-03 03:38:44 +00001063int yyparse (void);
vlm6a02a8a2004-09-08 00:28:11 +00001064#endif
vlm39e5ed72004-09-05 10:40:41 +00001065#endif
vlm80103492004-09-07 10:39:09 +00001066
vlmfa67ddc2004-06-03 03:38:44 +00001067int
vlm6a02a8a2004-09-08 00:28:11 +00001068yyparse(YYPARSE_PARAM_ARG)
vlmfa67ddc2004-06-03 03:38:44 +00001069 YYPARSE_PARAM_DECL
1070{
1071 register int yystate;
1072 register int yyn;
1073 register short *yyssp;
1074 register YYSTYPE *yyvsp;
vlm6a02a8a2004-09-08 00:28:11 +00001075 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1076 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
vlmfa67ddc2004-06-03 03:38:44 +00001077
vlm6a02a8a2004-09-08 00:28:11 +00001078 short yyssa[YYINITDEPTH]; /* the state stack */
1079 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
vlmfa67ddc2004-06-03 03:38:44 +00001080
vlm6a02a8a2004-09-08 00:28:11 +00001081 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1082 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
vlmfa67ddc2004-06-03 03:38:44 +00001083
vlm6a02a8a2004-09-08 00:28:11 +00001084#ifdef YYLSP_NEEDED
1085 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1086 YYLTYPE *yyls = yylsa;
1087 YYLTYPE *yylsp;
1088
1089#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1090#else
vlmfa67ddc2004-06-03 03:38:44 +00001091#define YYPOPSTACK (yyvsp--, yyssp--)
vlm6a02a8a2004-09-08 00:28:11 +00001092#endif
vlmfa67ddc2004-06-03 03:38:44 +00001093
vlm6a02a8a2004-09-08 00:28:11 +00001094 int yystacksize = YYINITDEPTH;
1095 int yyfree_stacks = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001096
vlm6a02a8a2004-09-08 00:28:11 +00001097#ifdef YYPURE
1098 int yychar;
1099 YYSTYPE yylval;
1100 int yynerrs;
1101#ifdef YYLSP_NEEDED
1102 YYLTYPE yylloc;
1103#endif
1104#endif
vlmfa67ddc2004-06-03 03:38:44 +00001105
vlm6a02a8a2004-09-08 00:28:11 +00001106 YYSTYPE yyval; /* the variable used to return */
1107 /* semantic values from the action */
1108 /* routines */
vlmfa67ddc2004-06-03 03:38:44 +00001109
1110 int yylen;
1111
vlm6a02a8a2004-09-08 00:28:11 +00001112#if YYDEBUG != 0
1113 if (yydebug)
1114 fprintf(stderr, "Starting parse\n");
1115#endif
vlmfa67ddc2004-06-03 03:38:44 +00001116
1117 yystate = 0;
1118 yyerrstatus = 0;
1119 yynerrs = 0;
1120 yychar = YYEMPTY; /* Cause a token to be read. */
1121
1122 /* Initialize stack pointers.
1123 Waste one element of value and location stack
1124 so that they stay on the same level as the state stack.
1125 The wasted elements are never initialized. */
1126
vlm6a02a8a2004-09-08 00:28:11 +00001127 yyssp = yyss - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001128 yyvsp = yyvs;
vlm6a02a8a2004-09-08 00:28:11 +00001129#ifdef YYLSP_NEEDED
1130 yylsp = yyls;
1131#endif
vlmfa67ddc2004-06-03 03:38:44 +00001132
vlm6a02a8a2004-09-08 00:28:11 +00001133/* Push a new state, which is found in yystate . */
1134/* In all cases, when you get here, the value and location stacks
1135 have just been pushed. so pushing a state here evens the stacks. */
1136yynewstate:
vlmfa67ddc2004-06-03 03:38:44 +00001137
vlm6a02a8a2004-09-08 00:28:11 +00001138 *++yyssp = yystate;
vlmfa67ddc2004-06-03 03:38:44 +00001139
1140 if (yyssp >= yyss + yystacksize - 1)
1141 {
vlm6a02a8a2004-09-08 00:28:11 +00001142 /* Give user a chance to reallocate the stack */
1143 /* Use copies of these so that the &'s don't force the real ones into memory. */
1144 YYSTYPE *yyvs1 = yyvs;
1145 short *yyss1 = yyss;
1146#ifdef YYLSP_NEEDED
1147 YYLTYPE *yyls1 = yyls;
1148#endif
1149
vlmfa67ddc2004-06-03 03:38:44 +00001150 /* Get the current used size of the three stacks, in elements. */
vlm6a02a8a2004-09-08 00:28:11 +00001151 int size = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001152
1153#ifdef yyoverflow
vlm6a02a8a2004-09-08 00:28:11 +00001154 /* Each stack pointer address is followed by the size of
1155 the data in use in that stack, in bytes. */
1156#ifdef YYLSP_NEEDED
1157 /* This used to be a conditional around just the two extra args,
1158 but that might be undefined if yyoverflow is a macro. */
1159 yyoverflow("parser stack overflow",
1160 &yyss1, size * sizeof (*yyssp),
1161 &yyvs1, size * sizeof (*yyvsp),
1162 &yyls1, size * sizeof (*yylsp),
1163 &yystacksize);
1164#else
1165 yyoverflow("parser stack overflow",
1166 &yyss1, size * sizeof (*yyssp),
1167 &yyvs1, size * sizeof (*yyvsp),
1168 &yystacksize);
1169#endif
vlmfa67ddc2004-06-03 03:38:44 +00001170
vlm6a02a8a2004-09-08 00:28:11 +00001171 yyss = yyss1; yyvs = yyvs1;
1172#ifdef YYLSP_NEEDED
1173 yyls = yyls1;
1174#endif
vlmfa67ddc2004-06-03 03:38:44 +00001175#else /* no yyoverflow */
1176 /* Extend the stack our own way. */
1177 if (yystacksize >= YYMAXDEPTH)
vlm6a02a8a2004-09-08 00:28:11 +00001178 {
1179 yyerror("parser stack overflow");
1180 if (yyfree_stacks)
1181 {
1182 free (yyss);
1183 free (yyvs);
1184#ifdef YYLSP_NEEDED
1185 free (yyls);
1186#endif
1187 }
1188 return 2;
1189 }
vlmfa67ddc2004-06-03 03:38:44 +00001190 yystacksize *= 2;
1191 if (yystacksize > YYMAXDEPTH)
1192 yystacksize = YYMAXDEPTH;
vlm6a02a8a2004-09-08 00:28:11 +00001193#ifndef YYSTACK_USE_ALLOCA
1194 yyfree_stacks = 1;
1195#endif
1196 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1197 __yy_memcpy ((char *)yyss, (char *)yyss1,
1198 size * (unsigned int) sizeof (*yyssp));
1199 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1200 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1201 size * (unsigned int) sizeof (*yyvsp));
1202#ifdef YYLSP_NEEDED
1203 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1204 __yy_memcpy ((char *)yyls, (char *)yyls1,
1205 size * (unsigned int) sizeof (*yylsp));
1206#endif
vlmfa67ddc2004-06-03 03:38:44 +00001207#endif /* no yyoverflow */
1208
vlm6a02a8a2004-09-08 00:28:11 +00001209 yyssp = yyss + size - 1;
1210 yyvsp = yyvs + size - 1;
1211#ifdef YYLSP_NEEDED
1212 yylsp = yyls + size - 1;
1213#endif
vlmfa67ddc2004-06-03 03:38:44 +00001214
vlm6a02a8a2004-09-08 00:28:11 +00001215#if YYDEBUG != 0
1216 if (yydebug)
1217 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1218#endif
vlmfa67ddc2004-06-03 03:38:44 +00001219
1220 if (yyssp >= yyss + yystacksize - 1)
1221 YYABORT;
1222 }
1223
vlm6a02a8a2004-09-08 00:28:11 +00001224#if YYDEBUG != 0
1225 if (yydebug)
1226 fprintf(stderr, "Entering state %d\n", yystate);
1227#endif
vlmfa67ddc2004-06-03 03:38:44 +00001228
1229 goto yybackup;
vlm6a02a8a2004-09-08 00:28:11 +00001230 yybackup:
vlmfa67ddc2004-06-03 03:38:44 +00001231
1232/* Do appropriate processing given the current state. */
1233/* Read a lookahead token if we need one and don't already have one. */
1234/* yyresume: */
1235
1236 /* First try to decide what to do without reference to lookahead token. */
1237
1238 yyn = yypact[yystate];
vlm6a02a8a2004-09-08 00:28:11 +00001239 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001240 goto yydefault;
1241
1242 /* Not known => get a lookahead token if don't already have one. */
1243
1244 /* yychar is either YYEMPTY or YYEOF
1245 or a valid token in external form. */
1246
1247 if (yychar == YYEMPTY)
1248 {
vlm6a02a8a2004-09-08 00:28:11 +00001249#if YYDEBUG != 0
1250 if (yydebug)
1251 fprintf(stderr, "Reading a token: ");
1252#endif
vlmfa67ddc2004-06-03 03:38:44 +00001253 yychar = YYLEX;
1254 }
1255
vlm6a02a8a2004-09-08 00:28:11 +00001256 /* Convert token to internal form (in yychar1) for indexing tables with */
vlmfa67ddc2004-06-03 03:38:44 +00001257
vlm6a02a8a2004-09-08 00:28:11 +00001258 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001259 {
1260 yychar1 = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001261 yychar = YYEOF; /* Don't call YYLEX any more */
vlmfa67ddc2004-06-03 03:38:44 +00001262
vlm6a02a8a2004-09-08 00:28:11 +00001263#if YYDEBUG != 0
1264 if (yydebug)
1265 fprintf(stderr, "Now at end of input.\n");
1266#endif
vlmfa67ddc2004-06-03 03:38:44 +00001267 }
1268 else
1269 {
vlm6a02a8a2004-09-08 00:28:11 +00001270 yychar1 = YYTRANSLATE(yychar);
vlmfa67ddc2004-06-03 03:38:44 +00001271
vlm6a02a8a2004-09-08 00:28:11 +00001272#if YYDEBUG != 0
1273 if (yydebug)
1274 {
1275 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1276 /* Give the individual parser a way to print the precise meaning
1277 of a token, for further debugging info. */
1278#ifdef YYPRINT
1279 YYPRINT (stderr, yychar, yylval);
1280#endif
1281 fprintf (stderr, ")\n");
1282 }
1283#endif
vlmfa67ddc2004-06-03 03:38:44 +00001284 }
1285
1286 yyn += yychar1;
vlm6a02a8a2004-09-08 00:28:11 +00001287 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001288 goto yydefault;
vlm6a02a8a2004-09-08 00:28:11 +00001289
vlmfa67ddc2004-06-03 03:38:44 +00001290 yyn = yytable[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001291
1292 /* yyn is what to do for this token type in this state.
1293 Negative => reduce, -yyn is rule number.
1294 Positive => shift, yyn is new state.
1295 New state is final state => don't bother to shift,
1296 just return success.
1297 0, or most negative number => error. */
1298
1299 if (yyn < 0)
vlmfa67ddc2004-06-03 03:38:44 +00001300 {
vlm6a02a8a2004-09-08 00:28:11 +00001301 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001302 goto yyerrlab;
1303 yyn = -yyn;
1304 goto yyreduce;
1305 }
vlm6a02a8a2004-09-08 00:28:11 +00001306 else if (yyn == 0)
1307 goto yyerrlab;
vlmfa67ddc2004-06-03 03:38:44 +00001308
1309 if (yyn == YYFINAL)
1310 YYACCEPT;
1311
1312 /* Shift the lookahead token. */
vlm6a02a8a2004-09-08 00:28:11 +00001313
1314#if YYDEBUG != 0
1315 if (yydebug)
1316 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1317#endif
vlmfa67ddc2004-06-03 03:38:44 +00001318
1319 /* Discard the token being shifted unless it is eof. */
1320 if (yychar != YYEOF)
1321 yychar = YYEMPTY;
1322
1323 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00001324#ifdef YYLSP_NEEDED
1325 *++yylsp = yylloc;
1326#endif
vlmfa67ddc2004-06-03 03:38:44 +00001327
vlm6a02a8a2004-09-08 00:28:11 +00001328 /* count tokens shifted since error; after three, turn off error status. */
1329 if (yyerrstatus) yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001330
1331 yystate = yyn;
1332 goto yynewstate;
1333
vlm6a02a8a2004-09-08 00:28:11 +00001334/* Do the default action for the current state. */
vlm80103492004-09-07 10:39:09 +00001335yydefault:
vlm6a02a8a2004-09-08 00:28:11 +00001336
vlmfa67ddc2004-06-03 03:38:44 +00001337 yyn = yydefact[yystate];
1338 if (yyn == 0)
1339 goto yyerrlab;
1340
vlm6a02a8a2004-09-08 00:28:11 +00001341/* Do a reduction. yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001342yyreduce:
1343 yylen = yyr2[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001344 if (yylen > 0)
1345 yyval = yyvsp[1-yylen]; /* implement default value of the action */
vlmfa67ddc2004-06-03 03:38:44 +00001346
vlm6a02a8a2004-09-08 00:28:11 +00001347#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00001348 if (yydebug)
1349 {
vlm6a02a8a2004-09-08 00:28:11 +00001350 int i;
vlmfa67ddc2004-06-03 03:38:44 +00001351
vlm6a02a8a2004-09-08 00:28:11 +00001352 fprintf (stderr, "Reducing via rule %d (line %d), ",
1353 yyn, yyrline[yyn]);
vlmfa67ddc2004-06-03 03:38:44 +00001354
1355 /* Print the symbols being reduced, and their result. */
vlm6a02a8a2004-09-08 00:28:11 +00001356 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1357 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1358 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
vlmfa67ddc2004-06-03 03:38:44 +00001359 }
1360#endif
vlm80103492004-09-07 10:39:09 +00001361
vlm6a02a8a2004-09-08 00:28:11 +00001362
1363 switch (yyn) {
1364
1365case 1:
vlmdc7cf042006-03-09 08:49:26 +00001366#line 323 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001367{
1368 *(void **)param = yyvsp[0].a_grammar;
1369 ;
1370 break;}
1371case 2:
vlmdc7cf042006-03-09 08:49:26 +00001372#line 329 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001373{
vlmfa67ddc2004-06-03 03:38:44 +00001374 yyval.a_grammar = asn1p_new();
1375 checkmem(yyval.a_grammar);
1376 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001377 ;
1378 break;}
1379case 3:
vlmdc7cf042006-03-09 08:49:26 +00001380#line 334 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001381{
vlmfa67ddc2004-06-03 03:38:44 +00001382 yyval.a_grammar = yyvsp[-1].a_grammar;
1383 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001384 ;
1385 break;}
1386case 4:
vlmdc7cf042006-03-09 08:49:26 +00001387#line 355 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001388{
vlmfa67ddc2004-06-03 03:38:44 +00001389
1390 if(yyvsp[-1].a_module) {
1391 yyval.a_module = yyvsp[-1].a_module;
1392 } else {
1393 /* There's a chance that a module is just plain empty */
1394 yyval.a_module = asn1p_module_new();
1395 }
1396 checkmem(yyval.a_module);
1397
vlm931aeed2005-08-12 10:09:10 +00001398 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00001399 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1400 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001401 ;
1402 break;}
1403case 5:
vlmdc7cf042006-03-09 08:49:26 +00001404#line 376 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001405{ yyval.a_oid = 0; ;
1406 break;}
1407case 6:
vlmdc7cf042006-03-09 08:49:26 +00001408#line 377 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001409{ yyval.a_oid = yyvsp[0].a_oid; ;
1410 break;}
1411case 7:
vlmdc7cf042006-03-09 08:49:26 +00001412#line 381 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001413{
vlmfa67ddc2004-06-03 03:38:44 +00001414 yyval.a_oid = yyvsp[-1].a_oid;
vlm6a02a8a2004-09-08 00:28:11 +00001415 ;
1416 break;}
1417case 8:
vlmdc7cf042006-03-09 08:49:26 +00001418#line 384 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001419{
vlmfa67ddc2004-06-03 03:38:44 +00001420 yyval.a_oid = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001421 ;
1422 break;}
1423case 9:
vlmdc7cf042006-03-09 08:49:26 +00001424#line 390 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001425{
vlmfa67ddc2004-06-03 03:38:44 +00001426 yyval.a_oid = asn1p_oid_new();
1427 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1428 if(yyvsp[0].a_oid_arc.name)
1429 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001430 ;
1431 break;}
1432case 10:
vlmdc7cf042006-03-09 08:49:26 +00001433#line 396 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001434{
vlmfa67ddc2004-06-03 03:38:44 +00001435 yyval.a_oid = yyvsp[-1].a_oid;
1436 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1437 if(yyvsp[0].a_oid_arc.name)
1438 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001439 ;
1440 break;}
1441case 11:
vlmdc7cf042006-03-09 08:49:26 +00001442#line 405 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001443{ /* iso */
vlmfa67ddc2004-06-03 03:38:44 +00001444 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1445 yyval.a_oid_arc.number = -1;
vlm6a02a8a2004-09-08 00:28:11 +00001446 ;
1447 break;}
1448case 12:
vlmdc7cf042006-03-09 08:49:26 +00001449#line 409 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001450{ /* iso(1) */
vlmfa67ddc2004-06-03 03:38:44 +00001451 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1452 yyval.a_oid_arc.number = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001453 ;
1454 break;}
1455case 13:
vlmdc7cf042006-03-09 08:49:26 +00001456#line 413 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001457{ /* 1 */
vlmfa67ddc2004-06-03 03:38:44 +00001458 yyval.a_oid_arc.name = 0;
1459 yyval.a_oid_arc.number = yyvsp[0].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001460 ;
1461 break;}
1462case 14:
vlmdc7cf042006-03-09 08:49:26 +00001463#line 423 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001464{ yyval.a_module_flags = MSF_NOFLAGS; ;
1465 break;}
1466case 15:
vlmdc7cf042006-03-09 08:49:26 +00001467#line 424 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001468{
vlmfa67ddc2004-06-03 03:38:44 +00001469 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001470 ;
1471 break;}
1472case 16:
vlmdc7cf042006-03-09 08:49:26 +00001473#line 433 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001474{
vlmfa67ddc2004-06-03 03:38:44 +00001475 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001476 ;
1477 break;}
1478case 17:
vlmdc7cf042006-03-09 08:49:26 +00001479#line 436 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001480{
vlmfa67ddc2004-06-03 03:38:44 +00001481 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001482 ;
1483 break;}
1484case 18:
vlmdc7cf042006-03-09 08:49:26 +00001485#line 445 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001486{
vlmfa67ddc2004-06-03 03:38:44 +00001487 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001488 ;
1489 break;}
1490case 19:
vlmdc7cf042006-03-09 08:49:26 +00001491#line 448 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001492{
vlmfa67ddc2004-06-03 03:38:44 +00001493 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001494 ;
1495 break;}
1496case 20:
vlmdc7cf042006-03-09 08:49:26 +00001497#line 451 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001498{
vlmfa67ddc2004-06-03 03:38:44 +00001499 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001500 ;
1501 break;}
1502case 21:
vlmdc7cf042006-03-09 08:49:26 +00001503#line 454 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001504{
vlmfa67ddc2004-06-03 03:38:44 +00001505 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
vlm6a02a8a2004-09-08 00:28:11 +00001506 ;
1507 break;}
1508case 22:
vlmdc7cf042006-03-09 08:49:26 +00001509#line 458 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001510{
vlm9283dbe2004-08-18 04:59:12 +00001511 /* X.680Amd1 specifies TAG and XER */
1512 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1513 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1514 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1515 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1516 } else {
1517 fprintf(stderr,
1518 "WARNING: %s INSTRUCTIONS at line %d: "
1519 "Unrecognized encoding reference\n",
1520 yyvsp[-1].tv_str, yylineno);
1521 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1522 }
1523 free(yyvsp[-1].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00001524 ;
1525 break;}
1526case 23:
vlmdc7cf042006-03-09 08:49:26 +00001527#line 479 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001528{ yyval.a_module = 0; ;
1529 break;}
1530case 24:
vlmdc7cf042006-03-09 08:49:26 +00001531#line 480 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001532{
vlmfa67ddc2004-06-03 03:38:44 +00001533 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001534 ;
1535 break;}
1536case 25:
vlmdc7cf042006-03-09 08:49:26 +00001537#line 489 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001538{
vlm9283dbe2004-08-18 04:59:12 +00001539 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001540 ;
1541 break;}
1542case 26:
vlmdc7cf042006-03-09 08:49:26 +00001543#line 492 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001544{
vlmfa67ddc2004-06-03 03:38:44 +00001545 yyval.a_module = yyvsp[-1].a_module;
1546
vlm9283dbe2004-08-18 04:59:12 +00001547 /* Behave well when one of them is skipped. */
1548 if(!(yyvsp[-1].a_module)) {
1549 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1550 break;
1551 }
1552
vlmfa67ddc2004-06-03 03:38:44 +00001553#ifdef MY_IMPORT
1554#error MY_IMPORT DEFINED ELSEWHERE!
1555#endif
1556#define MY_IMPORT(foo,field) do { \
vlm97ed7152004-08-13 12:31:09 +00001557 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
vlmfa67ddc2004-06-03 03:38:44 +00001558 TQ_ADD(&(yyval.a_module->foo), \
1559 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1560 field); \
vlm97ed7152004-08-13 12:31:09 +00001561 } \
1562 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1563 } while(0)
vlmfa67ddc2004-06-03 03:38:44 +00001564
1565 MY_IMPORT(imports, xp_next);
1566 MY_IMPORT(exports, xp_next);
1567 MY_IMPORT(members, next);
1568#undef MY_IMPORT
1569
vlm6a02a8a2004-09-08 00:28:11 +00001570 ;
1571 break;}
1572case 27:
vlmdc7cf042006-03-09 08:49:26 +00001573#line 525 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001574{
vlmfa67ddc2004-06-03 03:38:44 +00001575 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001576 ;
1577 break;}
1578case 28:
vlmdc7cf042006-03-09 08:49:26 +00001579#line 528 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001580{
vlmfa67ddc2004-06-03 03:38:44 +00001581 yyval.a_module = asn1p_module_new();
1582 checkmem(yyval.a_module);
1583 if(yyvsp[0].a_xports) {
1584 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1585 } else {
1586 /* "EXPORTS ALL;" ? */
1587 }
vlm6a02a8a2004-09-08 00:28:11 +00001588 ;
1589 break;}
1590case 29:
vlmdc7cf042006-03-09 08:49:26 +00001591#line 537 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001592{
vlm9283dbe2004-08-18 04:59:12 +00001593 yyval.a_module = asn1p_module_new();
1594 checkmem(yyval.a_module);
1595 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1596 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1597 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001598 ;
1599 break;}
vlm931aeed2005-08-12 10:09:10 +00001600case 30:
vlmdc7cf042006-03-09 08:49:26 +00001601#line 544 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001602{
1603 yyval.a_module = asn1p_module_new();
1604 checkmem(yyval.a_module);
1605 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1606 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1607 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1608 ;
1609 break;}
vlm6a02a8a2004-09-08 00:28:11 +00001610case 31:
vlmdc7cf042006-03-09 08:49:26 +00001611#line 557 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001612{
vlm9283dbe2004-08-18 04:59:12 +00001613 yyval.a_module = asn1p_module_new();
1614 checkmem(yyval.a_module);
1615 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1616 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1617 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001618 ;
1619 break;}
1620case 32:
vlmdc7cf042006-03-09 08:49:26 +00001621#line 565 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001622{ asn1p_lexer_hack_push_encoding_control(); ;
1623 break;}
1624case 33:
vlmdc7cf042006-03-09 08:49:26 +00001625#line 566 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001626{
vlm9283dbe2004-08-18 04:59:12 +00001627 fprintf(stderr,
1628 "WARNING: ENCODING-CONTROL %s "
1629 "specification at line %d ignored\n",
1630 yyvsp[-1].tv_str, yylineno);
1631 free(yyvsp[-1].tv_str);
1632 yyval.a_module = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001633 ;
1634 break;}
1635case 34:
vlmdc7cf042006-03-09 08:49:26 +00001636#line 578 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001637{
vlmfa67ddc2004-06-03 03:38:44 +00001638 return yyerror(
vlm1ac75e72005-11-26 11:21:55 +00001639 "Attempt to redefine a standard basic string type, "
1640 "please comment out or remove this type redefinition.");
vlm6a02a8a2004-09-08 00:28:11 +00001641 ;
1642 break;}
1643case 35:
vlmdc7cf042006-03-09 08:49:26 +00001644#line 591 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001645{
vlm931aeed2005-08-12 10:09:10 +00001646 if(!saved_aid && 0)
1647 return yyerror("Unterminated IMPORTS FROM, "
1648 "expected semicolon ';'");
1649 saved_aid = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001650 yyval.a_module = yyvsp[-1].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001651 ;
1652 break;}
1653case 36:
vlmdc7cf042006-03-09 08:49:26 +00001654#line 601 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001655{
vlmfa67ddc2004-06-03 03:38:44 +00001656 return yyerror("Empty IMPORTS list");
vlm6a02a8a2004-09-08 00:28:11 +00001657 ;
1658 break;}
1659case 37:
vlmdc7cf042006-03-09 08:49:26 +00001660#line 607 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001661{
vlmfa67ddc2004-06-03 03:38:44 +00001662 yyval.a_module = asn1p_module_new();
1663 checkmem(yyval.a_module);
1664 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001665 ;
1666 break;}
1667case 38:
vlmdc7cf042006-03-09 08:49:26 +00001668#line 612 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001669{
vlmfa67ddc2004-06-03 03:38:44 +00001670 yyval.a_module = yyvsp[-1].a_module;
1671 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001672 ;
1673 break;}
1674case 39:
vlmdc7cf042006-03-09 08:49:26 +00001675#line 619 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001676{ memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
1677 break;}
1678case 40:
vlmdc7cf042006-03-09 08:49:26 +00001679#line 620 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001680{ yyval.a_aid.oid = yyvsp[0].a_oid; ;
1681 break;}
1682case 41:
vlmdc7cf042006-03-09 08:49:26 +00001683#line 624 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001684{
vlmfa67ddc2004-06-03 03:38:44 +00001685 yyval.a_xports = yyvsp[-3].a_xports;
vlm931aeed2005-08-12 10:09:10 +00001686 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
1687 yyval.a_xports->identifier = yyvsp[0].a_aid;
1688 /* This stupid thing is used for look-back hack. */
1689 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
vlmfa67ddc2004-06-03 03:38:44 +00001690 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001691 ;
1692 break;}
vlm931aeed2005-08-12 10:09:10 +00001693case 42:
vlmdc7cf042006-03-09 08:49:26 +00001694#line 635 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001695{
vlmfa67ddc2004-06-03 03:38:44 +00001696 yyval.a_xports = asn1p_xports_new();
1697 checkmem(yyval.a_xports);
1698 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001699 ;
1700 break;}
vlm931aeed2005-08-12 10:09:10 +00001701case 43:
vlmdc7cf042006-03-09 08:49:26 +00001702#line 640 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001703{
vlmfa67ddc2004-06-03 03:38:44 +00001704 yyval.a_xports = yyvsp[-2].a_xports;
1705 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001706 ;
1707 break;}
vlm0aa86902004-10-12 23:26:53 +00001708case 44:
vlmdc7cf042006-03-09 08:49:26 +00001709#line 647 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001710{
vlmfa67ddc2004-06-03 03:38:44 +00001711 yyval.a_expr = asn1p_expr_new(yylineno);
1712 checkmem(yyval.a_expr);
1713 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1714 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm6a02a8a2004-09-08 00:28:11 +00001715 ;
1716 break;}
vlm0aa86902004-10-12 23:26:53 +00001717case 45:
vlmdc7cf042006-03-09 08:49:26 +00001718#line 653 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001719{ /* Completely equivalent to above */
1720 yyval.a_expr = asn1p_expr_new(yylineno);
1721 checkmem(yyval.a_expr);
1722 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1723 yyval.a_expr->expr_type = A1TC_REFERENCE;
1724 ;
1725 break;}
1726case 46:
vlmdc7cf042006-03-09 08:49:26 +00001727#line 659 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001728{
1729 yyval.a_expr = asn1p_expr_new(yylineno);
1730 checkmem(yyval.a_expr);
1731 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1732 yyval.a_expr->expr_type = A1TC_REFERENCE;
1733 ;
1734 break;}
1735case 47:
vlmdc7cf042006-03-09 08:49:26 +00001736#line 668 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001737{
vlmfa67ddc2004-06-03 03:38:44 +00001738 yyval.a_xports = yyvsp[-1].a_xports;
vlm6a02a8a2004-09-08 00:28:11 +00001739 ;
1740 break;}
vlm931aeed2005-08-12 10:09:10 +00001741case 48:
vlmdc7cf042006-03-09 08:49:26 +00001742#line 671 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001743{
vlmfa67ddc2004-06-03 03:38:44 +00001744 yyval.a_xports = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001745 ;
1746 break;}
vlm931aeed2005-08-12 10:09:10 +00001747case 49:
vlmdc7cf042006-03-09 08:49:26 +00001748#line 674 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001749{
vlmfa67ddc2004-06-03 03:38:44 +00001750 /* Empty EXPORTS clause effectively prohibits export. */
1751 yyval.a_xports = asn1p_xports_new();
1752 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001753 ;
1754 break;}
vlm931aeed2005-08-12 10:09:10 +00001755case 50:
vlmdc7cf042006-03-09 08:49:26 +00001756#line 682 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001757{
vlmfa67ddc2004-06-03 03:38:44 +00001758 yyval.a_xports = asn1p_xports_new();
1759 assert(yyval.a_xports);
1760 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001761 ;
1762 break;}
vlm931aeed2005-08-12 10:09:10 +00001763case 51:
vlmdc7cf042006-03-09 08:49:26 +00001764#line 687 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001765{
vlmfa67ddc2004-06-03 03:38:44 +00001766 yyval.a_xports = yyvsp[-2].a_xports;
1767 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001768 ;
1769 break;}
vlm0aa86902004-10-12 23:26:53 +00001770case 52:
vlmdc7cf042006-03-09 08:49:26 +00001771#line 694 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001772{
1773 yyval.a_expr = asn1p_expr_new(yylineno);
1774 checkmem(yyval.a_expr);
1775 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1776 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1777 ;
1778 break;}
1779case 53:
vlmdc7cf042006-03-09 08:49:26 +00001780#line 700 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001781{
1782 yyval.a_expr = asn1p_expr_new(yylineno);
1783 checkmem(yyval.a_expr);
1784 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1785 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1786 ;
vlm7388db02005-03-31 21:48:13 +00001787 break;}
1788case 54:
vlmdc7cf042006-03-09 08:49:26 +00001789#line 706 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001790{
1791 yyval.a_expr = asn1p_expr_new(yylineno);
1792 checkmem(yyval.a_expr);
1793 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1794 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1795 ;
1796 break;}
1797case 55:
vlmdc7cf042006-03-09 08:49:26 +00001798#line 717 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001799{ asn1p_lexer_hack_push_opaque_state(); ;
1800 break;}
1801case 56:
vlmdc7cf042006-03-09 08:49:26 +00001802#line 717 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001803{
vlmfa67ddc2004-06-03 03:38:44 +00001804 yyval.a_expr = yyvsp[-4].a_expr;
1805 assert(yyval.a_expr->Identifier == 0);
1806 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1807 yyval.a_expr->meta_type = AMT_VALUESET;
vlm7388db02005-03-31 21:48:13 +00001808 // take care of ValueSet body
vlm6a02a8a2004-09-08 00:28:11 +00001809 ;
1810 break;}
vlm931aeed2005-08-12 10:09:10 +00001811case 57:
vlmdc7cf042006-03-09 08:49:26 +00001812#line 727 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001813{
vlmfa67ddc2004-06-03 03:38:44 +00001814 yyval.a_expr = asn1p_expr_new(yylineno);
1815 checkmem(yyval.a_expr);
1816 yyval.a_expr->reference = yyvsp[0].a_ref;
1817 yyval.a_expr->expr_type = A1TC_REFERENCE;
1818 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00001819 ;
1820 break;}
vlm931aeed2005-08-12 10:09:10 +00001821case 58:
vlmdc7cf042006-03-09 08:49:26 +00001822#line 734 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001823{
vlmfa67ddc2004-06-03 03:38:44 +00001824 yyval.a_expr = asn1p_expr_new(yylineno);
1825 checkmem(yyval.a_expr);
1826 yyval.a_expr->expr_type = yyvsp[0].a_type;
1827 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001828 ;
1829 break;}
vlm931aeed2005-08-12 10:09:10 +00001830case 59:
vlmdc7cf042006-03-09 08:49:26 +00001831#line 752 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001832{
vlmfa67ddc2004-06-03 03:38:44 +00001833 yyval.a_expr = yyvsp[0].a_expr;
vlmfce48a42004-09-14 02:36:39 +00001834 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00001835 assert(yyval.a_expr->expr_type);
1836 assert(yyval.a_expr->meta_type);
vlm6a02a8a2004-09-08 00:28:11 +00001837 ;
1838 break;}
vlmdc7cf042006-03-09 08:49:26 +00001839case 60:
1840#line 758 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001841{
vlmfa67ddc2004-06-03 03:38:44 +00001842 yyval.a_expr = yyvsp[0].a_expr;
1843 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1844 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
vlmdc7cf042006-03-09 08:49:26 +00001845 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
vlm6a02a8a2004-09-08 00:28:11 +00001846 ;
1847 break;}
vlmdc7cf042006-03-09 08:49:26 +00001848case 61:
1849#line 774 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001850{
vlmfa67ddc2004-06-03 03:38:44 +00001851 yyval.a_expr = yyvsp[0].a_expr;
1852 assert(yyval.a_expr->Identifier == 0);
1853 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1854 yyval.a_expr->params = yyvsp[-3].a_plist;
1855 yyval.a_expr->meta_type = AMT_PARAMTYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001856 ;
1857 break;}
vlmdc7cf042006-03-09 08:49:26 +00001858case 62:
1859#line 784 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001860{
vlmfa67ddc2004-06-03 03:38:44 +00001861 int ret;
1862 yyval.a_plist = asn1p_paramlist_new(yylineno);
1863 checkmem(yyval.a_plist);
1864 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1865 checkmem(ret == 0);
1866 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1867 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001868 ;
1869 break;}
vlmdc7cf042006-03-09 08:49:26 +00001870case 63:
1871#line 793 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001872{
vlmfa67ddc2004-06-03 03:38:44 +00001873 int ret;
1874 yyval.a_plist = yyvsp[-2].a_plist;
1875 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1876 checkmem(ret == 0);
1877 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1878 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001879 ;
1880 break;}
vlmdc7cf042006-03-09 08:49:26 +00001881case 64:
1882#line 804 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001883{
vlmfa67ddc2004-06-03 03:38:44 +00001884 yyval.a_parg.governor = NULL;
1885 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001886 ;
1887 break;}
vlmdc7cf042006-03-09 08:49:26 +00001888case 65:
1889#line 808 "asn1p_y.y"
1890{
1891 int ret;
1892 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1893 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1894 checkmem(ret == 0);
1895 yyval.a_parg.argument = yyvsp[0].tv_str;
1896 ;
1897 break;}
vlm7388db02005-03-31 21:48:13 +00001898case 66:
vlmdc7cf042006-03-09 08:49:26 +00001899#line 815 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001900{
1901 int ret;
1902 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1903 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1904 checkmem(ret == 0);
1905 yyval.a_parg.argument = yyvsp[0].tv_str;
1906 ;
1907 break;}
1908case 67:
vlmdc7cf042006-03-09 08:49:26 +00001909#line 822 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00001910{
1911 int ret;
1912 yyval.a_parg.governor = asn1p_ref_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00001913 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1914 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1915 checkmem(ret == 0);
1916 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001917 ;
1918 break;}
vlmdc7cf042006-03-09 08:49:26 +00001919case 68:
1920#line 833 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001921{
vlmfa67ddc2004-06-03 03:38:44 +00001922 yyval.a_expr = asn1p_expr_new(yylineno);
1923 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001924 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1925 ;
1926 break;}
vlmdc7cf042006-03-09 08:49:26 +00001927case 69:
1928#line 838 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001929{
vlmfa67ddc2004-06-03 03:38:44 +00001930 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001931 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1932 ;
1933 break;}
vlmdc7cf042006-03-09 08:49:26 +00001934case 70:
1935#line 845 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001936{
vlmfa67ddc2004-06-03 03:38:44 +00001937 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001938 ;
1939 break;}
vlmdc7cf042006-03-09 08:49:26 +00001940case 71:
1941#line 848 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001942{
vlmfa67ddc2004-06-03 03:38:44 +00001943 yyval.a_expr = asn1p_expr_new(yylineno);
1944 checkmem(yyval.a_expr);
1945 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1946 yyval.a_expr->expr_type = A1TC_REFERENCE;
1947 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00001948 ;
1949 break;}
vlmdc7cf042006-03-09 08:49:26 +00001950case 72:
1951#line 872 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001952{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1953 break;}
vlmdc7cf042006-03-09 08:49:26 +00001954case 73:
1955#line 873 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001956{ yyval.a_expr = yyvsp[0].a_expr; ;
1957 break;}
vlmdc7cf042006-03-09 08:49:26 +00001958case 74:
1959#line 876 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001960{
vlmfa67ddc2004-06-03 03:38:44 +00001961 yyval.a_expr = asn1p_expr_new(yylineno);
1962 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001963 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1964 ;
1965 break;}
vlmdc7cf042006-03-09 08:49:26 +00001966case 75:
1967#line 881 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001968{
vlmfa67ddc2004-06-03 03:38:44 +00001969 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001970 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1971 ;
1972 break;}
vlmdc7cf042006-03-09 08:49:26 +00001973case 76:
1974#line 888 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001975{
vlmec8f6812004-08-22 03:19:54 +00001976 yyval.a_expr = yyvsp[-1].a_expr;
1977 assert(yyval.a_expr->Identifier == 0);
vlmfce48a42004-09-14 02:36:39 +00001978 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlm177a5b62005-09-05 05:17:57 +00001979 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
vlmec8f6812004-08-22 03:19:54 +00001980 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00001981 ;
1982 break;}
vlmdc7cf042006-03-09 08:49:26 +00001983case 77:
1984#line 895 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001985{
vlm177a5b62005-09-05 05:17:57 +00001986 yyval.a_expr = yyvsp[-1].a_expr;
1987 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
1988 yyval.a_expr->marker = yyvsp[0].a_marker;
1989 _fixup_anonymous_identifier(yyval.a_expr);
1990 ;
1991 break;}
vlmdc7cf042006-03-09 08:49:26 +00001992case 78:
1993#line 901 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00001994{
vlmec8f6812004-08-22 03:19:54 +00001995 yyval.a_expr = asn1p_expr_new(yylineno);
1996 checkmem(yyval.a_expr);
1997 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1998 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
vlm6a02a8a2004-09-08 00:28:11 +00001999 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2000 ;
2001 break;}
vlmdc7cf042006-03-09 08:49:26 +00002002case 79:
2003#line 908 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002004{
vlmec8f6812004-08-22 03:19:54 +00002005 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002006 ;
2007 break;}
vlmdc7cf042006-03-09 08:49:26 +00002008case 80:
2009#line 914 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002010{
vlmec8f6812004-08-22 03:19:54 +00002011 yyval.a_expr = asn1p_expr_new(yylineno);
2012 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00002013 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2014 ;
2015 break;}
vlmdc7cf042006-03-09 08:49:26 +00002016case 81:
2017#line 919 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002018{
vlmec8f6812004-08-22 03:19:54 +00002019 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002020 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2021 ;
2022 break;}
vlmdc7cf042006-03-09 08:49:26 +00002023case 82:
2024#line 926 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002025{
vlmec8f6812004-08-22 03:19:54 +00002026 yyval.a_expr = yyvsp[0].a_expr;
vlm5d89c3d2005-08-13 09:07:11 +00002027 assert(yyval.a_expr->Identifier == 0);
2028 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002029 ;
2030 break;}
vlmdc7cf042006-03-09 08:49:26 +00002031case 83:
2032#line 931 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002033{
2034 yyval.a_expr = yyvsp[0].a_expr;
2035 ;
2036 break;}
vlmdc7cf042006-03-09 08:49:26 +00002037case 84:
2038#line 934 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002039{
2040 yyval.a_expr = yyvsp[0].a_expr;
2041 _fixup_anonymous_identifier(yyval.a_expr);
2042 ;
2043 break;}
vlmdc7cf042006-03-09 08:49:26 +00002044case 85:
2045#line 941 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002046{
vlmfa67ddc2004-06-03 03:38:44 +00002047 yyval.a_expr = yyvsp[-2].a_expr;
2048 checkmem(yyval.a_expr);
2049 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2050 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
vlmdc7cf042006-03-09 08:49:26 +00002051 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
vlm6a02a8a2004-09-08 00:28:11 +00002052 ;
2053 break;}
vlmdc7cf042006-03-09 08:49:26 +00002054case 86:
2055#line 951 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002056{ yyval.a_int = 0; ;
2057 break;}
vlmdc7cf042006-03-09 08:49:26 +00002058case 87:
2059#line 952 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002060{ yyval.a_int = 1; ;
2061 break;}
vlmdc7cf042006-03-09 08:49:26 +00002062case 88:
2063#line 956 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002064{
vlmfa67ddc2004-06-03 03:38:44 +00002065 yyval.a_expr = asn1p_expr_new(yylineno);
2066 checkmem(yyval.a_expr);
2067 yyval.a_expr->expr_type = A1TC_CLASSDEF;
vlmdc7cf042006-03-09 08:49:26 +00002068 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2069 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2070 ;
2071 break;}
2072case 89:
2073#line 963 "asn1p_y.y"
2074{
2075 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002076 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2077 ;
2078 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002079case 90:
vlmdc7cf042006-03-09 08:49:26 +00002080#line 973 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002081{
vlmdc7cf042006-03-09 08:49:26 +00002082 yyval.a_expr = asn1p_expr_new(yylineno);
2083 checkmem(yyval.a_expr);
2084 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2085 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2086 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2087 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00002088 ;
2089 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002090case 91:
vlmdc7cf042006-03-09 08:49:26 +00002091#line 983 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002092{
vlmfa67ddc2004-06-03 03:38:44 +00002093 yyval.a_expr = asn1p_expr_new(yylineno);
vlmdc7cf042006-03-09 08:49:26 +00002094 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00002095 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
vlmdc7cf042006-03-09 08:49:26 +00002096 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2097 yyval.a_expr->unique = yyvsp[-1].a_int;
vlmfa67ddc2004-06-03 03:38:44 +00002098 yyval.a_expr->marker = yyvsp[0].a_marker;
vlmdc7cf042006-03-09 08:49:26 +00002099 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00002100 ;
2101 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002102case 92:
vlmdc7cf042006-03-09 08:49:26 +00002103#line 994 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002104{
vlmdc7cf042006-03-09 08:49:26 +00002105 yyval.a_expr = asn1p_expr_new(yylineno);
2106 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2107 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2108 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2109 yyval.a_expr->reference = yyvsp[-1].a_ref;
vlmbde35d42004-11-24 17:43:29 +00002110 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00002111 ;
2112 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002113case 93:
vlmdc7cf042006-03-09 08:49:26 +00002114#line 1004 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002115{
vlmfa67ddc2004-06-03 03:38:44 +00002116 yyval.a_expr = asn1p_expr_new(yylineno);
vlmdc7cf042006-03-09 08:49:26 +00002117 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00002118 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
vlmdc7cf042006-03-09 08:49:26 +00002119 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2120 yyval.a_expr->reference = yyvsp[-1].a_ref;
vlmbde35d42004-11-24 17:43:29 +00002121 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00002122 ;
2123 break;}
vlm931aeed2005-08-12 10:09:10 +00002124case 94:
vlmdc7cf042006-03-09 08:49:26 +00002125#line 1014 "asn1p_y.y"
2126{
2127 yyval.a_expr = asn1p_expr_new(yylineno);
2128 checkmem(yyval.a_expr);
2129 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2130 yyval.a_expr->reference = yyvsp[-1].a_ref;
2131 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2132 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2133 yyval.a_expr->marker = yyvsp[0].a_marker;
2134 ;
vlm6a02a8a2004-09-08 00:28:11 +00002135 break;}
vlm931aeed2005-08-12 10:09:10 +00002136case 95:
vlmdc7cf042006-03-09 08:49:26 +00002137#line 1025 "asn1p_y.y"
2138{
2139 yyval.a_expr = asn1p_expr_new(yylineno);
2140 checkmem(yyval.a_expr);
2141 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2142 yyval.a_expr->reference = yyvsp[-1].a_ref;
2143 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2144 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2145 yyval.a_expr->marker = yyvsp[0].a_marker;
2146 ;
2147 break;}
2148case 96:
2149#line 1036 "asn1p_y.y"
2150{
2151 yyval.a_expr = asn1p_expr_new(yylineno);
2152 checkmem(yyval.a_expr);
2153 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2154 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2155 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2156 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
2157 yyval.a_expr->marker = yyvsp[0].a_marker;
2158 ;
2159 break;}
2160case 97:
2161#line 1063 "asn1p_y.y"
2162{ yyval.a_wsynt = 0; ;
2163 break;}
2164case 98:
2165#line 1064 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002166{
vlm5d89c3d2005-08-13 09:07:11 +00002167 yyval.a_wsynt = yyvsp[0].a_wsynt;
vlm6a02a8a2004-09-08 00:28:11 +00002168 ;
2169 break;}
vlmdc7cf042006-03-09 08:49:26 +00002170case 99:
2171#line 1071 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002172{ asn1p_lexer_hack_enable_with_syntax(); ;
2173 break;}
vlmdc7cf042006-03-09 08:49:26 +00002174case 100:
2175#line 1073 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002176{
2177 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2178 ;
2179 break;}
vlmdc7cf042006-03-09 08:49:26 +00002180case 101:
2181#line 1079 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002182{
vlmfa67ddc2004-06-03 03:38:44 +00002183 yyval.a_wsynt = asn1p_wsyntx_new();
2184 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002185 ;
2186 break;}
vlmdc7cf042006-03-09 08:49:26 +00002187case 102:
2188#line 1083 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002189{
vlmfa67ddc2004-06-03 03:38:44 +00002190 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2191 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002192 ;
2193 break;}
vlmdc7cf042006-03-09 08:49:26 +00002194case 103:
2195#line 1090 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002196{
vlmfa67ddc2004-06-03 03:38:44 +00002197 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002198 ;
2199 break;}
vlmdc7cf042006-03-09 08:49:26 +00002200case 104:
2201#line 1093 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002202{
vlmfa67ddc2004-06-03 03:38:44 +00002203 asn1p_ref_t *ref;
2204 int ret;
2205 ref = asn1p_ref_new(yylineno);
2206 checkmem(ref);
2207 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2208 checkmem(ret == 0);
2209 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002210 ;
2211 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002212case 105:
vlmdc7cf042006-03-09 08:49:26 +00002213#line 1105 "asn1p_y.y"
2214{
2215 yyval.a_expr = asn1p_expr_new(yylineno);
2216 checkmem(yyval.a_expr);
2217 yyval.a_expr->Identifier = strdup("...");
2218 checkmem(yyval.a_expr->Identifier);
2219 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2220 yyval.a_expr->meta_type = AMT_TYPE;
2221 ;
2222 break;}
2223case 106:
2224#line 1113 "asn1p_y.y"
2225{
2226 yyval.a_expr = asn1p_expr_new(yylineno);
2227 checkmem(yyval.a_expr);
2228 yyval.a_expr->Identifier = strdup("...");
2229 checkmem(yyval.a_expr->Identifier);
2230 yyval.a_expr->value = yyvsp[0].a_value;
2231 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2232 yyval.a_expr->meta_type = AMT_TYPE;
2233 ;
2234 break;}
2235case 107:
2236#line 1122 "asn1p_y.y"
2237{
2238 yyval.a_expr = asn1p_expr_new(yylineno);
2239 checkmem(yyval.a_expr);
2240 yyval.a_expr->Identifier = strdup("...");
2241 yyval.a_expr->value = yyvsp[0].a_value;
2242 checkmem(yyval.a_expr->Identifier);
2243 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2244 yyval.a_expr->meta_type = AMT_TYPE;
2245 ;
2246 break;}
2247case 108:
2248#line 1134 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002249{
vlmec8f6812004-08-22 03:19:54 +00002250 yyval.a_expr = yyvsp[-1].a_expr;
vlmfce48a42004-09-14 02:36:39 +00002251 yyval.a_expr->tag = yyvsp[-2].a_tag;
vlmec8f6812004-08-22 03:19:54 +00002252 /*
2253 * Outer constraint for SEQUENCE OF and SET OF applies
2254 * to the inner type.
2255 */
2256 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2257 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2258 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2259 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2260 } else {
2261 if(yyval.a_expr->constraints) {
vlmfce48a42004-09-14 02:36:39 +00002262 assert(!yyvsp[-1].a_expr);
vlmec8f6812004-08-22 03:19:54 +00002263 } else {
2264 yyval.a_expr->constraints = yyvsp[0].a_constr;
2265 }
2266 }
vlm6a02a8a2004-09-08 00:28:11 +00002267 ;
2268 break;}
vlmdc7cf042006-03-09 08:49:26 +00002269case 109:
2270#line 1156 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00002271{
2272 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
2273 asn1p_as_pointer = 0;
2274 ;
vlm066dc102005-08-22 12:23:54 +00002275 break;}
vlmdc7cf042006-03-09 08:49:26 +00002276case 110:
2277#line 1163 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002278{
vlm5f0128b2004-08-20 13:25:29 +00002279 yyval.a_expr = yyvsp[0].a_expr;
vlm177a5b62005-09-05 05:17:57 +00002280 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
2281
2282 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2283 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
2284 fprintf(stderr,
2285 "INFO: Directive <ASN1C:RepresentAsPointer> "
2286 "applied to %s at line %d\n",
2287 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2288 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2289 : "member",
2290 yyval.a_expr->_lineno
2291 );
2292 }
vlm6a02a8a2004-09-08 00:28:11 +00002293 ;
2294 break;}
vlmdc7cf042006-03-09 08:49:26 +00002295case 111:
2296#line 1182 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002297{
vlm066dc102005-08-22 12:23:54 +00002298 yyval.a_expr = yyvsp[0].a_expr;
2299 ;
2300 break;}
vlmdc7cf042006-03-09 08:49:26 +00002301case 112:
2302#line 1185 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002303{
vlm177a5b62005-09-05 05:17:57 +00002304 yyval.a_expr = yyvsp[-1].a_expr;
vlm5e2c4b92005-03-20 11:12:40 +00002305 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2306 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
vlmfa67ddc2004-06-03 03:38:44 +00002307 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002308 ;
2309 break;}
vlmdc7cf042006-03-09 08:49:26 +00002310case 113:
2311#line 1191 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002312{
vlm177a5b62005-09-05 05:17:57 +00002313 yyval.a_expr = yyvsp[-1].a_expr;
vlmec8f6812004-08-22 03:19:54 +00002314 assert(yyval.a_expr->expr_type == A1TC_INVALID);
vlm5e2c4b92005-03-20 11:12:40 +00002315 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
vlmec8f6812004-08-22 03:19:54 +00002316 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002317 ;
2318 break;}
vlmdc7cf042006-03-09 08:49:26 +00002319case 114:
2320#line 1197 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002321{
vlm177a5b62005-09-05 05:17:57 +00002322 yyval.a_expr = yyvsp[-1].a_expr;
vlmec8f6812004-08-22 03:19:54 +00002323 assert(yyval.a_expr->expr_type == A1TC_INVALID);
vlm5e2c4b92005-03-20 11:12:40 +00002324 yyval.a_expr->expr_type = ASN_CONSTR_SET;
vlmec8f6812004-08-22 03:19:54 +00002325 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002326 ;
2327 break;}
vlmdc7cf042006-03-09 08:49:26 +00002328case 115:
2329#line 1203 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002330{
vlm39e5ed72004-09-05 10:40:41 +00002331 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002332 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002333 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002334 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2335 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002336 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002337 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002338 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2339 ;
2340 break;}
vlmdc7cf042006-03-09 08:49:26 +00002341case 116:
2342#line 1213 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002343{
vlm39e5ed72004-09-05 10:40:41 +00002344 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002345 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002346 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002347 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2348 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002349 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002350 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002351 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2352 ;
2353 break;}
vlmdc7cf042006-03-09 08:49:26 +00002354case 117:
2355#line 1223 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002356{
vlm39e5ed72004-09-05 10:40:41 +00002357 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002358 checkmem(yyval.a_expr);
vlm044f7442004-09-04 04:49:21 +00002359 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002360 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002361 ;
2362 break;}
vlmdc7cf042006-03-09 08:49:26 +00002363case 118:
2364#line 1229 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002365{
vlmec8f6812004-08-22 03:19:54 +00002366 int ret;
vlm39e5ed72004-09-05 10:40:41 +00002367 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002368 checkmem(yyval.a_expr);
2369 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2370 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2371 yyvsp[0].tv_str, RLT_lowercase);
2372 checkmem(ret == 0);
vlm044f7442004-09-04 04:49:21 +00002373 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002374 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002375 ;
2376 break;}
vlmdc7cf042006-03-09 08:49:26 +00002377case 119:
2378#line 1243 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002379{
vlmfa67ddc2004-06-03 03:38:44 +00002380 int ret;
2381 yyval.a_expr = yyvsp[-1].a_expr;
2382 assert(yyval.a_expr->expr_type == 0);
2383 assert(yyval.a_expr->meta_type == 0);
2384 assert(yyval.a_expr->reference == 0);
2385 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2386 checkmem(yyval.a_expr->reference);
2387 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2388 checkmem(ret == 0);
2389 free(yyvsp[-3].tv_str);
2390 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2391 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002392 ;
2393 break;}
vlmdc7cf042006-03-09 08:49:26 +00002394case 120:
2395#line 1267 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002396{
vlmfa67ddc2004-06-03 03:38:44 +00002397 yyval.a_expr = asn1p_expr_new(yylineno);
2398 checkmem(yyval.a_expr);
2399 yyval.a_expr->reference = yyvsp[0].a_ref;
2400 yyval.a_expr->expr_type = A1TC_REFERENCE;
2401 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00002402 ;
2403 break;}
vlmdc7cf042006-03-09 08:49:26 +00002404case 121:
2405#line 1274 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002406{
vlmfa67ddc2004-06-03 03:38:44 +00002407 yyval.a_expr = asn1p_expr_new(yylineno);
2408 checkmem(yyval.a_expr);
2409 yyval.a_expr->reference = yyvsp[0].a_ref;
2410 yyval.a_expr->expr_type = A1TC_INSTANCE;
2411 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002412 ;
2413 break;}
vlmdc7cf042006-03-09 08:49:26 +00002414case 122:
2415#line 1289 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002416{
vlmfa67ddc2004-06-03 03:38:44 +00002417 int ret;
2418 yyval.a_ref = asn1p_ref_new(yylineno);
2419 checkmem(yyval.a_ref);
2420 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2421 checkmem(ret == 0);
2422 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002423 ;
2424 break;}
vlmdc7cf042006-03-09 08:49:26 +00002425case 123:
2426#line 1297 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002427{
2428 int ret;
2429 yyval.a_ref = asn1p_ref_new(yylineno);
2430 checkmem(yyval.a_ref);
2431 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2432 checkmem(ret == 0);
2433 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2434 checkmem(ret == 0);
2435 free(yyvsp[-2].tv_str);
2436 ;
2437 break;}
vlmdc7cf042006-03-09 08:49:26 +00002438case 124:
2439#line 1307 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002440{
2441 int ret;
2442 yyval.a_ref = asn1p_ref_new(yylineno);
2443 checkmem(yyval.a_ref);
2444 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2445 checkmem(ret == 0);
2446 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2447 checkmem(ret == 0);
2448 free(yyvsp[-2].tv_str);
2449 ;
2450 break;}
vlmdc7cf042006-03-09 08:49:26 +00002451case 125:
2452#line 1317 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002453{
vlmfa67ddc2004-06-03 03:38:44 +00002454 int ret;
2455 yyval.a_ref = asn1p_ref_new(yylineno);
2456 checkmem(yyval.a_ref);
vlmc94e28f2004-09-15 11:59:51 +00002457 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2458 checkmem(ret == 0);
2459 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2460 checkmem(ret == 0);
2461 free(yyvsp[-2].tv_str);
2462 ;
2463 break;}
vlmdc7cf042006-03-09 08:49:26 +00002464case 126:
2465#line 1327 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002466{
2467 int ret;
2468 yyval.a_ref = asn1p_ref_new(yylineno);
2469 checkmem(yyval.a_ref);
vlmfa67ddc2004-06-03 03:38:44 +00002470 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2471 free(yyvsp[0].tv_str);
2472 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002473 ;
2474 break;}
vlmdc7cf042006-03-09 08:49:26 +00002475case 127:
2476#line 1335 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002477{
vlmfa67ddc2004-06-03 03:38:44 +00002478 int ret;
2479 yyval.a_ref = yyvsp[0].a_ref;
2480 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2481 free(yyvsp[-2].tv_str);
2482 checkmem(ret == 0);
2483 /*
2484 * Move the last element infront.
2485 */
2486 {
2487 struct asn1p_ref_component_s tmp_comp;
2488 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2489 memmove(&yyval.a_ref->components[1],
2490 &yyval.a_ref->components[0],
2491 sizeof(yyval.a_ref->components[0])
2492 * (yyval.a_ref->comp_count - 1));
2493 yyval.a_ref->components[0] = tmp_comp;
2494 }
vlm6a02a8a2004-09-08 00:28:11 +00002495 ;
2496 break;}
vlmdc7cf042006-03-09 08:49:26 +00002497case 128:
2498#line 1357 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002499{
vlmfa67ddc2004-06-03 03:38:44 +00002500 int ret;
2501 yyval.a_ref = asn1p_ref_new(yylineno);
2502 checkmem(yyval.a_ref);
2503 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2504 free(yyvsp[0].a_refcomp.name);
2505 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002506 ;
2507 break;}
vlmdc7cf042006-03-09 08:49:26 +00002508case 129:
2509#line 1365 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002510{
vlmfa67ddc2004-06-03 03:38:44 +00002511 int ret;
2512 yyval.a_ref = yyvsp[-2].a_ref;
2513 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2514 free(yyvsp[0].a_refcomp.name);
2515 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002516 ;
2517 break;}
vlmdc7cf042006-03-09 08:49:26 +00002518case 132:
2519#line 1379 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002520{
vlmfa67ddc2004-06-03 03:38:44 +00002521 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2522 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002523 ;
2524 break;}
vlmdc7cf042006-03-09 08:49:26 +00002525case 133:
2526#line 1384 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002527{
vlmfa67ddc2004-06-03 03:38:44 +00002528 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2529 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002530 ;
2531 break;}
vlmdc7cf042006-03-09 08:49:26 +00002532case 134:
2533#line 1393 "asn1p_y.y"
2534{
2535 yyval.a_ref = asn1p_ref_new(yylineno);
2536 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2537 ;
2538 break;}
2539case 135:
2540#line 1397 "asn1p_y.y"
2541{
2542 yyval.a_ref = yyval.a_ref;
2543 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
2544 ;
2545 break;}
2546case 136:
2547#line 1401 "asn1p_y.y"
2548{
2549 yyval.a_ref = yyval.a_ref;
2550 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
2551 ;
2552 break;}
2553case 137:
2554#line 1408 "asn1p_y.y"
2555{
2556 yyval.a_ref = asn1p_ref_new(yylineno);
2557 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2558 ;
2559 break;}
2560case 138:
2561#line 1412 "asn1p_y.y"
2562{
2563 yyval.a_ref = asn1p_ref_new(yylineno);
2564 asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_AmpUppercase);
2565 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2566 ;
2567 break;}
2568case 139:
2569#line 1426 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002570{
vlmfa67ddc2004-06-03 03:38:44 +00002571 yyval.a_expr = yyvsp[-2].a_expr;
2572 assert(yyval.a_expr->Identifier == NULL);
2573 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2574 yyval.a_expr->meta_type = AMT_VALUE;
2575 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002576 ;
2577 break;}
vlmdc7cf042006-03-09 08:49:26 +00002578case 140:
2579#line 1436 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002580{
2581 yyval.a_value = asn1p_value_fromint(0);
2582 checkmem(yyval.a_value);
2583 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2584 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2585 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2586 ;
2587 break;}
vlmdc7cf042006-03-09 08:49:26 +00002588case 141:
2589#line 1443 "asn1p_y.y"
vlmd30bc6c2005-03-24 16:27:02 +00002590{ asn1p_lexer_hack_push_opaque_state(); ;
vlm6a02a8a2004-09-08 00:28:11 +00002591 break;}
vlmdc7cf042006-03-09 08:49:26 +00002592case 142:
2593#line 1443 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002594{
vlmfa67ddc2004-06-03 03:38:44 +00002595 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2596 checkmem(yyval.a_value);
2597 yyval.a_value->type = ATV_UNPARSED;
vlm6a02a8a2004-09-08 00:28:11 +00002598 ;
2599 break;}
vlmdc7cf042006-03-09 08:49:26 +00002600case 143:
2601#line 1448 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002602{
2603 yyval.a_value = asn1p_value_fromint(0);
2604 checkmem(yyval.a_value);
2605 yyval.a_value->type = ATV_NULL;
2606 ;
2607 break;}
vlmdc7cf042006-03-09 08:49:26 +00002608case 144:
2609#line 1453 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002610{
2611 yyval.a_value = asn1p_value_fromint(0);
2612 checkmem(yyval.a_value);
2613 yyval.a_value->type = ATV_FALSE;
2614 ;
2615 break;}
vlmdc7cf042006-03-09 08:49:26 +00002616case 145:
2617#line 1458 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002618{
2619 yyval.a_value = asn1p_value_fromint(0);
2620 checkmem(yyval.a_value);
2621 yyval.a_value->type = ATV_TRUE;
2622 ;
2623 break;}
vlmdc7cf042006-03-09 08:49:26 +00002624case 146:
2625#line 1463 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002626{
vlmfa67ddc2004-06-03 03:38:44 +00002627 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2628 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002629 ;
2630 break;}
vlmdc7cf042006-03-09 08:49:26 +00002631case 147:
2632#line 1467 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002633{
vlmfa67ddc2004-06-03 03:38:44 +00002634 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2635 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002636 ;
2637 break;}
vlmdc7cf042006-03-09 08:49:26 +00002638case 148:
2639#line 1471 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002640{
vlme1e6ed82005-03-24 14:26:38 +00002641 yyval.a_value = yyval.a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002642 ;
2643 break;}
vlmdc7cf042006-03-09 08:49:26 +00002644case 149:
2645#line 1474 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00002646{
vlm5d89c3d2005-08-13 09:07:11 +00002647 yyval.a_value = yyvsp[0].a_value;
2648 ;
2649 break;}
vlmdc7cf042006-03-09 08:49:26 +00002650case 150:
2651#line 1477 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002652{
2653 yyval.a_value = yyvsp[0].a_value;
2654 ;
2655 break;}
vlmdc7cf042006-03-09 08:49:26 +00002656case 151:
2657#line 1483 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002658{
vlmfa67ddc2004-06-03 03:38:44 +00002659 asn1p_ref_t *ref;
2660 int ret;
2661 ref = asn1p_ref_new(yylineno);
2662 checkmem(ref);
2663 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2664 checkmem(ret == 0);
2665 yyval.a_value = asn1p_value_fromref(ref, 0);
2666 checkmem(yyval.a_value);
2667 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002668 ;
2669 break;}
vlmdc7cf042006-03-09 08:49:26 +00002670case 152:
2671#line 1494 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002672{
vlmfa67ddc2004-06-03 03:38:44 +00002673 asn1p_ref_t *ref;
2674 int ret;
2675 ref = asn1p_ref_new(yylineno);
2676 checkmem(ref);
2677 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2678 checkmem(ret == 0);
2679 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2680 checkmem(ret == 0);
2681 yyval.a_value = asn1p_value_fromref(ref, 0);
2682 checkmem(yyval.a_value);
2683 free(yyvsp[-2].tv_str);
2684 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002685 ;
2686 break;}
vlmdc7cf042006-03-09 08:49:26 +00002687case 153:
2688#line 1512 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002689{
2690 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2691 checkmem(yyval.a_value);
2692 ;
2693 break;}
vlmdc7cf042006-03-09 08:49:26 +00002694case 154:
2695#line 1516 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002696{
vlm2c8c44d2005-03-24 16:22:35 +00002697 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
vlme1e6ed82005-03-24 14:26:38 +00002698 checkmem(yyval.a_value);
2699 yyval.a_value->type = ATV_TUPLE;
2700 ;
2701 break;}
vlmdc7cf042006-03-09 08:49:26 +00002702case 155:
2703#line 1521 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002704{
vlm2c8c44d2005-03-24 16:22:35 +00002705 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
vlme1e6ed82005-03-24 14:26:38 +00002706 checkmem(yyval.a_value);
2707 yyval.a_value->type = ATV_QUADRUPLE;
2708 ;
2709 break;}
vlmdc7cf042006-03-09 08:49:26 +00002710case 156:
2711#line 1555 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002712{
vlm6611add2005-03-20 14:28:32 +00002713 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
vlmfa67ddc2004-06-03 03:38:44 +00002714 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2715 checkmem(yyval.tv_opaque.buf);
2716 yyval.tv_opaque.buf[0] = '{';
vlm6611add2005-03-20 14:28:32 +00002717 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
vlmfa67ddc2004-06-03 03:38:44 +00002718 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2719 free(yyvsp[0].tv_opaque.buf);
vlm6a02a8a2004-09-08 00:28:11 +00002720 ;
2721 break;}
vlmdc7cf042006-03-09 08:49:26 +00002722case 157:
2723#line 1564 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002724{
vlmfa67ddc2004-06-03 03:38:44 +00002725 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2726 char *p = malloc(newsize + 1);
2727 checkmem(p);
2728 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2729 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2730 p[newsize] = '\0';
2731 free(yyvsp[-1].tv_opaque.buf);
2732 free(yyvsp[0].tv_opaque.buf);
2733 yyval.tv_opaque.buf = p;
2734 yyval.tv_opaque.len = newsize;
vlm6a02a8a2004-09-08 00:28:11 +00002735 ;
2736 break;}
vlmdc7cf042006-03-09 08:49:26 +00002737case 158:
2738#line 1579 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002739{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2740 break;}
vlmdc7cf042006-03-09 08:49:26 +00002741case 159:
2742#line 1580 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002743{ yyval.a_type = ASN_BASIC_NULL; ;
2744 break;}
vlmdc7cf042006-03-09 08:49:26 +00002745case 160:
2746#line 1581 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002747{ yyval.a_type = ASN_BASIC_REAL; ;
2748 break;}
vlm177a5b62005-09-05 05:17:57 +00002749case 161:
vlmdc7cf042006-03-09 08:49:26 +00002750#line 1582 "asn1p_y.y"
2751{ yyval.a_type = yyvsp[0].a_type; ;
vlm066dc102005-08-22 12:23:54 +00002752 break;}
vlm177a5b62005-09-05 05:17:57 +00002753case 162:
vlmdc7cf042006-03-09 08:49:26 +00002754#line 1583 "asn1p_y.y"
2755{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
vlm066dc102005-08-22 12:23:54 +00002756 break;}
vlm177a5b62005-09-05 05:17:57 +00002757case 163:
vlmdc7cf042006-03-09 08:49:26 +00002758#line 1584 "asn1p_y.y"
2759{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
vlm066dc102005-08-22 12:23:54 +00002760 break;}
vlm177a5b62005-09-05 05:17:57 +00002761case 164:
vlmdc7cf042006-03-09 08:49:26 +00002762#line 1585 "asn1p_y.y"
2763{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
vlm066dc102005-08-22 12:23:54 +00002764 break;}
vlm177a5b62005-09-05 05:17:57 +00002765case 165:
vlmdc7cf042006-03-09 08:49:26 +00002766#line 1586 "asn1p_y.y"
2767{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
vlm066dc102005-08-22 12:23:54 +00002768 break;}
vlm177a5b62005-09-05 05:17:57 +00002769case 166:
vlmdc7cf042006-03-09 08:49:26 +00002770#line 1587 "asn1p_y.y"
2771{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
2772 break;}
2773case 167:
2774#line 1588 "asn1p_y.y"
2775{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
2776 break;}
2777case 168:
2778#line 1589 "asn1p_y.y"
2779{ yyval.a_type = ASN_BASIC_UTCTime; ;
2780 break;}
2781case 169:
2782#line 1590 "asn1p_y.y"
2783{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2784 break;}
2785case 170:
2786#line 1591 "asn1p_y.y"
2787{ yyval.a_type = yyvsp[0].a_type; ;
2788 break;}
2789case 171:
2790#line 1598 "asn1p_y.y"
2791{ yyval.a_type = ASN_BASIC_INTEGER; ;
2792 break;}
2793case 172:
2794#line 1599 "asn1p_y.y"
2795{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2796 break;}
2797case 173:
2798#line 1600 "asn1p_y.y"
2799{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2800 break;}
2801case 174:
2802#line 1604 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002803{
vlm39e5ed72004-09-05 10:40:41 +00002804 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002805 checkmem(yyval.a_expr);
2806 yyval.a_expr->expr_type = yyvsp[0].a_type;
2807 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002808 ;
2809 break;}
vlmdc7cf042006-03-09 08:49:26 +00002810case 175:
2811#line 1610 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002812{
vlmfa67ddc2004-06-03 03:38:44 +00002813 if(yyvsp[0].a_expr) {
2814 yyval.a_expr = yyvsp[0].a_expr;
2815 } else {
vlm39e5ed72004-09-05 10:40:41 +00002816 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002817 checkmem(yyval.a_expr);
2818 }
2819 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2820 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002821 ;
2822 break;}
vlmdc7cf042006-03-09 08:49:26 +00002823case 176:
2824#line 1623 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002825{ yyval.a_type = ASN_STRING_BMPString; ;
2826 break;}
vlmdc7cf042006-03-09 08:49:26 +00002827case 177:
2828#line 1624 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002829{
vlmfa67ddc2004-06-03 03:38:44 +00002830 yyval.a_type = ASN_STRING_GeneralString;
vlmc94e28f2004-09-15 11:59:51 +00002831 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002832 ;
2833 break;}
vlmdc7cf042006-03-09 08:49:26 +00002834case 178:
2835#line 1628 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002836{
vlmc94e28f2004-09-15 11:59:51 +00002837 yyval.a_type = ASN_STRING_GraphicString;
2838 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002839 ;
2840 break;}
vlmdc7cf042006-03-09 08:49:26 +00002841case 179:
2842#line 1632 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002843{ yyval.a_type = ASN_STRING_IA5String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002844 break;}
vlmdc7cf042006-03-09 08:49:26 +00002845case 180:
2846#line 1633 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002847{ yyval.a_type = ASN_STRING_ISO646String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002848 break;}
vlmdc7cf042006-03-09 08:49:26 +00002849case 181:
2850#line 1634 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002851{ yyval.a_type = ASN_STRING_NumericString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002852 break;}
vlmdc7cf042006-03-09 08:49:26 +00002853case 182:
2854#line 1635 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002855{ yyval.a_type = ASN_STRING_PrintableString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002856 break;}
vlmdc7cf042006-03-09 08:49:26 +00002857case 183:
2858#line 1636 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002859{
2860 yyval.a_type = ASN_STRING_T61String;
2861 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2862 ;
vlm6a02a8a2004-09-08 00:28:11 +00002863 break;}
vlmdc7cf042006-03-09 08:49:26 +00002864case 184:
2865#line 1640 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002866{ yyval.a_type = ASN_STRING_TeletexString; ;
2867 break;}
vlmdc7cf042006-03-09 08:49:26 +00002868case 185:
2869#line 1641 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002870{ yyval.a_type = ASN_STRING_UniversalString; ;
2871 break;}
vlmdc7cf042006-03-09 08:49:26 +00002872case 186:
2873#line 1642 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002874{ yyval.a_type = ASN_STRING_UTF8String; ;
2875 break;}
vlmdc7cf042006-03-09 08:49:26 +00002876case 187:
2877#line 1643 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002878{
2879 yyval.a_type = ASN_STRING_VideotexString;
2880 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2881 ;
2882 break;}
vlmdc7cf042006-03-09 08:49:26 +00002883case 188:
2884#line 1647 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002885{ yyval.a_type = ASN_STRING_VisibleString; ;
2886 break;}
vlmdc7cf042006-03-09 08:49:26 +00002887case 189:
2888#line 1648 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002889{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2890 break;}
vlmdc7cf042006-03-09 08:49:26 +00002891case 195:
2892#line 1660 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002893{ yyval.a_constr = 0; ;
2894 break;}
vlmdc7cf042006-03-09 08:49:26 +00002895case 196:
2896#line 1661 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002897{
vlm39e5ed72004-09-05 10:40:41 +00002898 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002899 ;
2900 break;}
vlmdc7cf042006-03-09 08:49:26 +00002901case 197:
2902#line 1667 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002903{
vlm39e5ed72004-09-05 10:40:41 +00002904 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002905 ;
2906 break;}
vlmdc7cf042006-03-09 08:49:26 +00002907case 198:
2908#line 1670 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002909{
vlmfa67ddc2004-06-03 03:38:44 +00002910 /*
2911 * This is a special case, for compatibility purposes.
vlm9283dbe2004-08-18 04:59:12 +00002912 * It goes without parentheses.
vlmfa67ddc2004-06-03 03:38:44 +00002913 */
vlm5f0128b2004-08-20 13:25:29 +00002914 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002915 ;
2916 break;}
vlmdc7cf042006-03-09 08:49:26 +00002917case 199:
2918#line 1680 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002919{
vlmfa67ddc2004-06-03 03:38:44 +00002920 yyval.a_constr = yyvsp[-1].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002921 ;
2922 break;}
vlmdc7cf042006-03-09 08:49:26 +00002923case 200:
2924#line 1683 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002925{
vlm9283dbe2004-08-18 04:59:12 +00002926 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002927 ;
2928 break;}
vlmdc7cf042006-03-09 08:49:26 +00002929case 201:
2930#line 1689 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002931{
vlmfa67ddc2004-06-03 03:38:44 +00002932 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002933 ;
2934 break;}
vlmdc7cf042006-03-09 08:49:26 +00002935case 202:
2936#line 1692 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002937{
vlmfa67ddc2004-06-03 03:38:44 +00002938 asn1p_constraint_t *ct;
2939 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002940 ct->type = ACT_EL_EXT;
2941 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00002942 ;
2943 break;}
vlmdc7cf042006-03-09 08:49:26 +00002944case 203:
2945#line 1698 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002946{
vlmfa67ddc2004-06-03 03:38:44 +00002947 asn1p_constraint_t *ct;
2948 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002949 ct->type = ACT_EL_EXT;
2950 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
vlm6f5eb0b2004-08-13 12:35:09 +00002951 ct = yyval.a_constr;
2952 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002953 ;
2954 break;}
vlmdc7cf042006-03-09 08:49:26 +00002955case 204:
2956#line 1709 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002957{
vlm9283dbe2004-08-18 04:59:12 +00002958 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002959 ;
2960 break;}
vlmdc7cf042006-03-09 08:49:26 +00002961case 205:
2962#line 1712 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002963{
2964 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2965 ;
2966 break;}
vlmdc7cf042006-03-09 08:49:26 +00002967case 206:
2968#line 1715 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002969{
vlmfa67ddc2004-06-03 03:38:44 +00002970 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002971 ;
2972 break;}
vlmdc7cf042006-03-09 08:49:26 +00002973case 207:
2974#line 1718 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002975{
vlmfa67ddc2004-06-03 03:38:44 +00002976 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002977 ;
2978 break;}
vlmdc7cf042006-03-09 08:49:26 +00002979case 208:
2980#line 1721 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002981{
vlmfa67ddc2004-06-03 03:38:44 +00002982 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002983 ;
2984 break;}
vlmdc7cf042006-03-09 08:49:26 +00002985case 209:
2986#line 1727 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002987{
vlmfa67ddc2004-06-03 03:38:44 +00002988 int ret;
2989 yyval.a_constr = asn1p_constraint_new(yylineno);
2990 checkmem(yyval.a_constr);
2991 yyval.a_constr->type = yyvsp[-3].a_ctype;
2992 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2993 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002994 ;
2995 break;}
vlmdc7cf042006-03-09 08:49:26 +00002996case 210:
2997#line 1735 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002998{
vlm9283dbe2004-08-18 04:59:12 +00002999 int ret;
3000 yyval.a_constr = asn1p_constraint_new(yylineno);
3001 checkmem(yyval.a_constr);
3002 yyval.a_constr->type = ACT_CA_SET;
3003 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
3004 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00003005 ;
3006 break;}
vlmdc7cf042006-03-09 08:49:26 +00003007case 211:
3008#line 1743 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003009{
vlm9283dbe2004-08-18 04:59:12 +00003010 yyval.a_constr = asn1p_constraint_new(yylineno);
3011 checkmem(yyval.a_constr);
3012 yyval.a_constr->type = ACT_EL_VALUE;
3013 yyval.a_constr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00003014 ;
3015 break;}
vlmdc7cf042006-03-09 08:49:26 +00003016case 212:
3017#line 1749 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003018{
vlm0aa86902004-10-12 23:26:53 +00003019 yyval.a_constr = asn1p_constraint_new(yylineno);
3020 checkmem(yyval.a_constr);
vlma6a12e32005-03-20 12:58:00 +00003021 yyval.a_constr->type = ACT_EL_TYPE;
3022 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
vlmc94e28f2004-09-15 11:59:51 +00003023 ;
3024 break;}
vlmdc7cf042006-03-09 08:49:26 +00003025case 213:
3026#line 1755 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003027{
vlm066dc102005-08-22 12:23:54 +00003028 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 = yyvsp[-2].a_value;
3032 yyval.a_constr->range_stop = yyvsp[0].a_value;
vlm5d89c3d2005-08-13 09:07:11 +00003033 ;
3034 break;}
vlmdc7cf042006-03-09 08:49:26 +00003035case 214:
3036#line 1762 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003037{
3038 yyval.a_constr = asn1p_constraint_new(yylineno);
3039 checkmem(yyval.a_constr);
3040 yyval.a_constr->type = yyvsp[-1].a_ctype;
3041 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3042 yyval.a_constr->range_stop = yyvsp[0].a_value;
3043 yyval.a_constr->range_start->type = ATV_MIN;
3044 ;
3045 break;}
vlmdc7cf042006-03-09 08:49:26 +00003046case 215:
3047#line 1770 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003048{
3049 yyval.a_constr = asn1p_constraint_new(yylineno);
3050 checkmem(yyval.a_constr);
3051 yyval.a_constr->type = yyvsp[-1].a_ctype;
3052 yyval.a_constr->range_start = yyvsp[-2].a_value;
3053 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3054 yyval.a_constr->range_stop->type = ATV_MAX;
3055 ;
3056 break;}
vlmdc7cf042006-03-09 08:49:26 +00003057case 216:
3058#line 1778 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003059{
3060 yyval.a_constr = asn1p_constraint_new(yylineno);
3061 checkmem(yyval.a_constr);
3062 yyval.a_constr->type = yyvsp[-1].a_ctype;
3063 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3064 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3065 yyval.a_constr->range_start->type = ATV_MIN;
3066 yyval.a_constr->range_stop->type = ATV_MAX;
3067 ;
3068 break;}
vlmdc7cf042006-03-09 08:49:26 +00003069case 217:
3070#line 1787 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003071{
vlm177a5b62005-09-05 05:17:57 +00003072 yyval.a_constr = yyvsp[0].a_constr;
vlm066dc102005-08-22 12:23:54 +00003073 ;
vlm5d89c3d2005-08-13 09:07:11 +00003074 break;}
vlmdc7cf042006-03-09 08:49:26 +00003075case 218:
3076#line 1790 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003077{
vlm177a5b62005-09-05 05:17:57 +00003078 yyval.a_constr = yyvsp[0].a_constr;
vlm066dc102005-08-22 12:23:54 +00003079 ;
3080 break;}
vlmdc7cf042006-03-09 08:49:26 +00003081case 219:
3082#line 1794 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003083{ asn1p_lexer_hack_push_opaque_state(); ;
3084 break;}
vlmdc7cf042006-03-09 08:49:26 +00003085case 220:
3086#line 1794 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003087{
3088 yyval.a_constr = asn1p_constraint_new(yylineno);
3089 checkmem(yyval.a_constr);
3090 yyval.a_constr->type = ACT_CT_CTDBY;
3091 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3092 checkmem(yyval.a_constr->value);
3093 yyval.a_constr->value->type = ATV_UNPARSED;
3094 ;
vlm0aa86902004-10-12 23:26:53 +00003095 break;}
vlmdc7cf042006-03-09 08:49:26 +00003096case 221:
3097#line 1805 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003098{ yyval.a_ctype = ACT_EL_RANGE; ;
vlm4053ca52005-02-18 16:34:21 +00003099 break;}
vlmdc7cf042006-03-09 08:49:26 +00003100case 222:
3101#line 1806 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003102{ yyval.a_ctype = ACT_EL_RLRANGE; ;
vlma6a12e32005-03-20 12:58:00 +00003103 break;}
vlmdc7cf042006-03-09 08:49:26 +00003104case 223:
3105#line 1807 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003106{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3107 break;}
vlmdc7cf042006-03-09 08:49:26 +00003108case 224:
3109#line 1808 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003110{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3111 break;}
vlmdc7cf042006-03-09 08:49:26 +00003112case 225:
3113#line 1812 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003114{
vlm39e5ed72004-09-05 10:40:41 +00003115 yyval.a_ctype = ACT_CT_SIZE;
vlm6a02a8a2004-09-08 00:28:11 +00003116 ;
3117 break;}
vlmdc7cf042006-03-09 08:49:26 +00003118case 226:
3119#line 1815 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003120{
vlm39e5ed72004-09-05 10:40:41 +00003121 yyval.a_ctype = ACT_CT_FROM;
vlm6a02a8a2004-09-08 00:28:11 +00003122 ;
3123 break;}
vlmdc7cf042006-03-09 08:49:26 +00003124case 227:
3125#line 1821 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003126{
3127 yyval.a_value = asn1p_value_fromint(0);
3128 checkmem(yyval.a_value);
3129 yyval.a_value->type = ATV_FALSE;
3130 ;
3131 break;}
vlmdc7cf042006-03-09 08:49:26 +00003132case 228:
3133#line 1826 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003134{
3135 yyval.a_value = asn1p_value_fromint(1);
3136 checkmem(yyval.a_value);
3137 yyval.a_value->type = ATV_TRUE;
3138 ;
3139 break;}
vlmdc7cf042006-03-09 08:49:26 +00003140case 229:
3141#line 1831 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003142{
3143 yyval.a_value = yyvsp[0].a_value;
3144 ;
3145 break;}
vlmdc7cf042006-03-09 08:49:26 +00003146case 230:
3147#line 1834 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003148{
3149 yyval.a_value = yyvsp[0].a_value;
3150 ;
3151 break;}
vlmdc7cf042006-03-09 08:49:26 +00003152case 231:
3153#line 1837 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003154{
vlmfa67ddc2004-06-03 03:38:44 +00003155 asn1p_ref_t *ref;
3156 int ret;
3157 ref = asn1p_ref_new(yylineno);
3158 checkmem(ref);
3159 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3160 checkmem(ret == 0);
3161 yyval.a_value = asn1p_value_fromref(ref, 0);
3162 checkmem(yyval.a_value);
3163 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003164 ;
3165 break;}
vlmdc7cf042006-03-09 08:49:26 +00003166case 232:
3167#line 1851 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003168{
vlm4053ca52005-02-18 16:34:21 +00003169 asn1p_ref_t *ref;
3170 int ret;
3171 ref = asn1p_ref_new(yylineno);
3172 checkmem(ref);
3173 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3174 checkmem(ret == 0);
3175 yyval.a_value = asn1p_value_fromref(ref, 0);
vlmfa67ddc2004-06-03 03:38:44 +00003176 checkmem(yyval.a_value);
vlm4053ca52005-02-18 16:34:21 +00003177 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003178 ;
3179 break;}
vlmdc7cf042006-03-09 08:49:26 +00003180case 233:
3181#line 1865 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003182{
vlm5d89c3d2005-08-13 09:07:11 +00003183 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003184 ;
3185 break;}
vlmdc7cf042006-03-09 08:49:26 +00003186case 234:
3187#line 1868 "asn1p_y.y"
vlm7bbdc9f2005-03-28 15:01:27 +00003188{
vlm5d89c3d2005-08-13 09:07:11 +00003189 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
vlm7bbdc9f2005-03-28 15:01:27 +00003190 ;
3191 break;}
vlmdc7cf042006-03-09 08:49:26 +00003192case 235:
3193#line 1874 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003194{
vlm5d89c3d2005-08-13 09:07:11 +00003195 yyval.a_constr = yyvsp[0].a_constr;
3196 ;
3197 break;}
vlmdc7cf042006-03-09 08:49:26 +00003198case 236:
3199#line 1877 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003200{
3201 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3202 ;
3203 break;}
vlmdc7cf042006-03-09 08:49:26 +00003204case 237:
3205#line 1883 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003206{
vlmfa67ddc2004-06-03 03:38:44 +00003207 yyval.a_constr = asn1p_constraint_new(yylineno);
3208 checkmem(yyval.a_constr);
3209 yyval.a_constr->type = ACT_EL_EXT;
vlm7bbdc9f2005-03-28 15:01:27 +00003210 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003211 ;
3212 break;}
vlmdc7cf042006-03-09 08:49:26 +00003213case 238:
3214#line 1889 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003215{
vlmfa67ddc2004-06-03 03:38:44 +00003216 yyval.a_constr = asn1p_constraint_new(yylineno);
3217 checkmem(yyval.a_constr);
3218 yyval.a_constr->type = ACT_EL_VALUE;
3219 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3220 yyval.a_constr->presence = yyvsp[0].a_pres;
vlm7bbdc9f2005-03-28 15:01:27 +00003221 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003222 ;
3223 break;}
vlmdc7cf042006-03-09 08:49:26 +00003224case 239:
3225#line 1903 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003226{ yyval.a_pres = ACPRES_DEFAULT; ;
3227 break;}
vlmdc7cf042006-03-09 08:49:26 +00003228case 240:
3229#line 1904 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003230{ yyval.a_pres = yyvsp[0].a_pres; ;
3231 break;}
vlmdc7cf042006-03-09 08:49:26 +00003232case 241:
3233#line 1908 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003234{
vlmfa67ddc2004-06-03 03:38:44 +00003235 yyval.a_pres = ACPRES_PRESENT;
vlm6a02a8a2004-09-08 00:28:11 +00003236 ;
3237 break;}
vlmdc7cf042006-03-09 08:49:26 +00003238case 242:
3239#line 1911 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00003240{
vlm5d89c3d2005-08-13 09:07:11 +00003241 yyval.a_pres = ACPRES_ABSENT;
vlm931aeed2005-08-12 10:09:10 +00003242 ;
3243 break;}
vlmdc7cf042006-03-09 08:49:26 +00003244case 243:
3245#line 1914 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00003246{
vlm5d89c3d2005-08-13 09:07:11 +00003247 yyval.a_pres = ACPRES_OPTIONAL;
vlm931aeed2005-08-12 10:09:10 +00003248 ;
3249 break;}
vlmdc7cf042006-03-09 08:49:26 +00003250case 244:
3251#line 1920 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003252{
3253 yyval.a_constr = yyvsp[0].a_constr;
3254 ;
3255 break;}
vlmdc7cf042006-03-09 08:49:26 +00003256case 245:
3257#line 1923 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003258{
vlm5d89c3d2005-08-13 09:07:11 +00003259 yyval.a_constr = yyvsp[0].a_constr;
3260 ;
3261 break;}
vlmdc7cf042006-03-09 08:49:26 +00003262case 246:
3263#line 1932 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003264{
vlmfa67ddc2004-06-03 03:38:44 +00003265 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3266 asn1p_constraint_t *ct;
3267 int ret;
3268 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3269 checkmem(ret == 0);
3270 ct = asn1p_constraint_new(yylineno);
3271 checkmem(yyval.a_constr);
3272 ct->type = ACT_EL_VALUE;
3273 ct->value = asn1p_value_fromref(ref, 0);
3274 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003275 ;
3276 break;}
vlmdc7cf042006-03-09 08:49:26 +00003277case 247:
3278#line 1947 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003279{
vlmfa67ddc2004-06-03 03:38:44 +00003280 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003281 ;
3282 break;}
vlmdc7cf042006-03-09 08:49:26 +00003283case 248:
3284#line 1953 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003285{
vlmfa67ddc2004-06-03 03:38:44 +00003286 yyval.a_constr = asn1p_constraint_new(yylineno);
3287 checkmem(yyval.a_constr);
3288 yyval.a_constr->type = ACT_EL_VALUE;
3289 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003290 ;
3291 break;}
vlmdc7cf042006-03-09 08:49:26 +00003292case 249:
3293#line 1959 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003294{
vlmfa67ddc2004-06-03 03:38:44 +00003295 asn1p_constraint_t *ct;
3296 ct = asn1p_constraint_new(yylineno);
3297 checkmem(ct);
3298 ct->type = ACT_EL_VALUE;
3299 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3300 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00003301 ;
3302 break;}
vlmdc7cf042006-03-09 08:49:26 +00003303case 250:
3304#line 1973 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003305{
vlmfa67ddc2004-06-03 03:38:44 +00003306 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3307 int ret;
3308 *p = '@';
3309 strcpy(p + 1, yyvsp[0].tv_str);
3310 yyval.a_ref = asn1p_ref_new(yylineno);
3311 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3312 checkmem(ret == 0);
3313 free(p);
3314 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003315 ;
3316 break;}
vlmdc7cf042006-03-09 08:49:26 +00003317case 251:
3318#line 1984 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003319{
vlmfa67ddc2004-06-03 03:38:44 +00003320 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3321 int ret;
3322 p[0] = '@';
3323 p[1] = '.';
3324 strcpy(p + 2, yyvsp[0].tv_str);
3325 yyval.a_ref = asn1p_ref_new(yylineno);
3326 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3327 checkmem(ret == 0);
3328 free(p);
3329 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003330 ;
3331 break;}
vlmdc7cf042006-03-09 08:49:26 +00003332case 252:
3333#line 2000 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003334{
vlmfa67ddc2004-06-03 03:38:44 +00003335 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003336 ;
3337 break;}
vlmdc7cf042006-03-09 08:49:26 +00003338case 253:
3339#line 2003 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003340{
vlmfa67ddc2004-06-03 03:38:44 +00003341 int l1 = strlen(yyvsp[-2].tv_str);
3342 int l3 = strlen(yyvsp[0].tv_str);
3343 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3344 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3345 yyval.tv_str[l1] = '.';
3346 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3347 yyval.tv_str[l1 + 1 + l3] = '\0';
vlm6a02a8a2004-09-08 00:28:11 +00003348 ;
3349 break;}
vlmdc7cf042006-03-09 08:49:26 +00003350case 254:
3351#line 2021 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003352{
vlmc94e28f2004-09-15 11:59:51 +00003353 yyval.a_marker.flags = EM_NOMARK;
3354 yyval.a_marker.default_value = 0;
vlm6a02a8a2004-09-08 00:28:11 +00003355 ;
3356 break;}
vlmdc7cf042006-03-09 08:49:26 +00003357case 255:
3358#line 2025 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003359{ yyval.a_marker = yyvsp[0].a_marker; ;
vlma2374a02004-09-14 02:44:07 +00003360 break;}
vlmdc7cf042006-03-09 08:49:26 +00003361case 256:
3362#line 2029 "asn1p_y.y"
vlma2374a02004-09-14 02:44:07 +00003363{
vlm1ac75e72005-11-26 11:21:55 +00003364 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
vlmc94e28f2004-09-15 11:59:51 +00003365 yyval.a_marker.default_value = 0;
vlma2374a02004-09-14 02:44:07 +00003366 ;
3367 break;}
vlmdc7cf042006-03-09 08:49:26 +00003368case 257:
3369#line 2033 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003370{
3371 yyval.a_marker.flags = EM_DEFAULT;
3372 yyval.a_marker.default_value = yyvsp[0].a_value;
3373 ;
3374 break;}
vlmdc7cf042006-03-09 08:49:26 +00003375case 258:
3376#line 2056 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003377{
vlm39e5ed72004-09-05 10:40:41 +00003378 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003379 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003380 ;
3381 break;}
vlmdc7cf042006-03-09 08:49:26 +00003382case 259:
3383#line 2060 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003384{
vlm7bbdc9f2005-03-28 15:01:27 +00003385 yyval.a_expr = yyvsp[-1].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00003386 ;
3387 break;}
vlmdc7cf042006-03-09 08:49:26 +00003388case 260:
3389#line 2066 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003390{
vlm7bbdc9f2005-03-28 15:01:27 +00003391 yyval.a_expr = asn1p_expr_new(yylineno);
3392 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003393 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3394 ;
3395 break;}
vlmdc7cf042006-03-09 08:49:26 +00003396case 261:
3397#line 2071 "asn1p_y.y"
vlm7bbdc9f2005-03-28 15:01:27 +00003398{
3399 yyval.a_expr = yyvsp[-2].a_expr;
3400 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3401 ;
3402 break;}
vlmdc7cf042006-03-09 08:49:26 +00003403case 262:
3404#line 2078 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003405{
vlm39e5ed72004-09-05 10:40:41 +00003406 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003407 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[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003411 ;
3412 break;}
vlmdc7cf042006-03-09 08:49:26 +00003413case 263:
3414#line 2085 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003415{
3416 yyval.a_expr = asn1p_expr_new(yylineno);
3417 checkmem(yyval.a_expr);
3418 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3419 yyval.a_expr->meta_type = AMT_VALUE;
3420 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3421 yyval.a_expr->value = yyvsp[-1].a_value;
3422 ;
3423 break;}
vlmdc7cf042006-03-09 08:49:26 +00003424case 264:
3425#line 2093 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003426{
3427 yyval.a_expr = asn1p_expr_new(yylineno);
3428 checkmem(yyval.a_expr);
3429 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3430 yyval.a_expr->meta_type = AMT_VALUE;
3431 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3432 yyval.a_expr->value = yyvsp[-1].a_value;
3433 ;
3434 break;}
vlmdc7cf042006-03-09 08:49:26 +00003435case 265:
3436#line 2101 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003437{
3438 yyval.a_expr = asn1p_expr_new(yylineno);
3439 checkmem(yyval.a_expr);
3440 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3441 yyval.a_expr->meta_type = AMT_VALUE;
vlmfa67ddc2004-06-03 03:38:44 +00003442 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00003443 ;
3444 break;}
vlmdc7cf042006-03-09 08:49:26 +00003445case 266:
3446#line 2108 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003447{
vlm39e5ed72004-09-05 10:40:41 +00003448 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003449 checkmem(yyval.a_expr);
3450 yyval.a_expr->Identifier = strdup("...");
3451 checkmem(yyval.a_expr->Identifier);
3452 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3453 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00003454 ;
3455 break;}
vlmdc7cf042006-03-09 08:49:26 +00003456case 267:
3457#line 2119 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003458{
3459 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3460 checkmem(yyval.a_value);
3461 ;
vlm931aeed2005-08-12 10:09:10 +00003462 break;}
vlmdc7cf042006-03-09 08:49:26 +00003463case 268:
3464#line 2123 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003465{
3466 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3467 checkmem(yyval.a_value);
3468 ;
vlm931aeed2005-08-12 10:09:10 +00003469 break;}
vlmdc7cf042006-03-09 08:49:26 +00003470case 269:
3471#line 2154 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003472{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3473 break;}
vlmdc7cf042006-03-09 08:49:26 +00003474case 270:
3475#line 2155 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003476{ yyval.a_tag = yyvsp[0].a_tag; ;
3477 break;}
vlmdc7cf042006-03-09 08:49:26 +00003478case 271:
3479#line 2159 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003480{
vlm2728a8d2005-01-23 09:51:44 +00003481 yyval.a_tag = yyvsp[-1].a_tag;
3482 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
vlm6a02a8a2004-09-08 00:28:11 +00003483 ;
3484 break;}
vlmdc7cf042006-03-09 08:49:26 +00003485case 272:
3486#line 2166 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003487{
vlm2728a8d2005-01-23 09:51:44 +00003488 yyval.a_tag = yyvsp[-2].a_tag;
3489 yyval.a_tag.tag_value = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00003490 ;
3491 break;}
vlmdc7cf042006-03-09 08:49:26 +00003492case 273:
3493#line 2172 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003494{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
vlm6a02a8a2004-09-08 00:28:11 +00003495 break;}
vlmdc7cf042006-03-09 08:49:26 +00003496case 274:
3497#line 2173 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003498{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
vlm151c0b22004-09-22 16:03:36 +00003499 break;}
vlmdc7cf042006-03-09 08:49:26 +00003500case 275:
3501#line 2174 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003502{ yyval.a_tag.tag_class = TC_APPLICATION; ;
vlme1e6ed82005-03-24 14:26:38 +00003503 break;}
vlmdc7cf042006-03-09 08:49:26 +00003504case 276:
3505#line 2175 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003506{ yyval.a_tag.tag_class = TC_PRIVATE; ;
vlm931aeed2005-08-12 10:09:10 +00003507 break;}
vlmdc7cf042006-03-09 08:49:26 +00003508case 277:
3509#line 2179 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003510{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3511 break;}
vlmdc7cf042006-03-09 08:49:26 +00003512case 278:
3513#line 2180 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003514{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3515 break;}
vlmdc7cf042006-03-09 08:49:26 +00003516case 279:
3517#line 2181 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003518{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3519 break;}
vlmdc7cf042006-03-09 08:49:26 +00003520case 280:
3521#line 2185 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00003522{
vlm5d89c3d2005-08-13 09:07:11 +00003523 checkmem(yyvsp[0].tv_str);
vlm931aeed2005-08-12 10:09:10 +00003524 yyval.tv_str = yyvsp[0].tv_str;
3525 ;
3526 break;}
vlmdc7cf042006-03-09 08:49:26 +00003527case 281:
3528#line 2189 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003529{
3530 checkmem(yyvsp[0].tv_str);
3531 yyval.tv_str = yyvsp[0].tv_str;
3532 ;
3533 break;}
vlmdc7cf042006-03-09 08:49:26 +00003534case 282:
3535#line 2197 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003536{
3537 checkmem(yyvsp[0].tv_str);
3538 yyval.tv_str = yyvsp[0].tv_str;
3539 ;
3540 break;}
vlmdc7cf042006-03-09 08:49:26 +00003541case 283:
3542#line 2204 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003543{ yyval.tv_str = 0; ;
3544 break;}
vlmdc7cf042006-03-09 08:49:26 +00003545case 284:
3546#line 2205 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003547{
3548 yyval.tv_str = yyvsp[0].tv_str;
3549 ;
3550 break;}
vlmdc7cf042006-03-09 08:49:26 +00003551case 285:
3552#line 2211 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003553{
vlm39e5ed72004-09-05 10:40:41 +00003554 checkmem(yyvsp[0].tv_str);
3555 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003556 ;
3557 break;}
vlm6a02a8a2004-09-08 00:28:11 +00003558}
3559 /* the action file gets copied in in place of this dollarsign */
3560#line 543 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00003561
3562 yyvsp -= yylen;
3563 yyssp -= yylen;
vlm6a02a8a2004-09-08 00:28:11 +00003564#ifdef YYLSP_NEEDED
3565 yylsp -= yylen;
3566#endif
vlmfa67ddc2004-06-03 03:38:44 +00003567
vlm6a02a8a2004-09-08 00:28:11 +00003568#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00003569 if (yydebug)
3570 {
vlm6a02a8a2004-09-08 00:28:11 +00003571 short *ssp1 = yyss - 1;
3572 fprintf (stderr, "state stack now");
3573 while (ssp1 != yyssp)
3574 fprintf (stderr, " %d", *++ssp1);
3575 fprintf (stderr, "\n");
vlmfa67ddc2004-06-03 03:38:44 +00003576 }
3577#endif
3578
3579 *++yyvsp = yyval;
3580
vlm6a02a8a2004-09-08 00:28:11 +00003581#ifdef YYLSP_NEEDED
3582 yylsp++;
3583 if (yylen == 0)
3584 {
3585 yylsp->first_line = yylloc.first_line;
3586 yylsp->first_column = yylloc.first_column;
3587 yylsp->last_line = (yylsp-1)->last_line;
3588 yylsp->last_column = (yylsp-1)->last_column;
3589 yylsp->text = 0;
3590 }
3591 else
3592 {
3593 yylsp->last_line = (yylsp+yylen-1)->last_line;
3594 yylsp->last_column = (yylsp+yylen-1)->last_column;
3595 }
3596#endif
vlmfa67ddc2004-06-03 03:38:44 +00003597
vlm6a02a8a2004-09-08 00:28:11 +00003598 /* Now "shift" the result of the reduction.
3599 Determine what state that goes to,
3600 based on the state we popped back to
3601 and the rule number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00003602
3603 yyn = yyr1[yyn];
3604
vlm6a02a8a2004-09-08 00:28:11 +00003605 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3606 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00003607 yystate = yytable[yystate];
3608 else
vlm6a02a8a2004-09-08 00:28:11 +00003609 yystate = yydefgoto[yyn - YYNTBASE];
vlmfa67ddc2004-06-03 03:38:44 +00003610
3611 goto yynewstate;
3612
vlm6a02a8a2004-09-08 00:28:11 +00003613yyerrlab: /* here on detecting error */
vlmfa67ddc2004-06-03 03:38:44 +00003614
vlm6a02a8a2004-09-08 00:28:11 +00003615 if (! yyerrstatus)
3616 /* If not already recovering from an error, report this error. */
vlmfa67ddc2004-06-03 03:38:44 +00003617 {
3618 ++yynerrs;
vlm6a02a8a2004-09-08 00:28:11 +00003619
3620#ifdef YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00003621 yyn = yypact[yystate];
3622
vlm6a02a8a2004-09-08 00:28:11 +00003623 if (yyn > YYFLAG && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00003624 {
vlm6a02a8a2004-09-08 00:28:11 +00003625 int size = 0;
3626 char *msg;
3627 int x, count;
vlmfa67ddc2004-06-03 03:38:44 +00003628
vlm6a02a8a2004-09-08 00:28:11 +00003629 count = 0;
3630 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3631 for (x = (yyn < 0 ? -yyn : 0);
vlm03630c52005-06-07 21:43:32 +00003632 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
vlm6a02a8a2004-09-08 00:28:11 +00003633 if (yycheck[x + yyn] == x)
3634 size += strlen(yytname[x]) + 15, count++;
3635 msg = (char *) malloc(size + 15);
3636 if (msg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00003637 {
vlm6a02a8a2004-09-08 00:28:11 +00003638 strcpy(msg, "parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003639
vlm6a02a8a2004-09-08 00:28:11 +00003640 if (count < 5)
vlmfa67ddc2004-06-03 03:38:44 +00003641 {
vlm6a02a8a2004-09-08 00:28:11 +00003642 count = 0;
3643 for (x = (yyn < 0 ? -yyn : 0);
vlm03630c52005-06-07 21:43:32 +00003644 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
vlm6a02a8a2004-09-08 00:28:11 +00003645 if (yycheck[x + yyn] == x)
vlmfa67ddc2004-06-03 03:38:44 +00003646 {
vlm6a02a8a2004-09-08 00:28:11 +00003647 strcat(msg, count == 0 ? ", expecting `" : " or `");
3648 strcat(msg, yytname[x]);
3649 strcat(msg, "'");
3650 count++;
vlmfa67ddc2004-06-03 03:38:44 +00003651 }
3652 }
vlm6a02a8a2004-09-08 00:28:11 +00003653 yyerror(msg);
3654 free(msg);
vlmfa67ddc2004-06-03 03:38:44 +00003655 }
3656 else
vlm6a02a8a2004-09-08 00:28:11 +00003657 yyerror ("parse error; also virtual memory exceeded");
vlmfa67ddc2004-06-03 03:38:44 +00003658 }
3659 else
3660#endif /* YYERROR_VERBOSE */
vlm6a02a8a2004-09-08 00:28:11 +00003661 yyerror("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003662 }
vlm6a02a8a2004-09-08 00:28:11 +00003663
vlmfa67ddc2004-06-03 03:38:44 +00003664 goto yyerrlab1;
vlm6a02a8a2004-09-08 00:28:11 +00003665yyerrlab1: /* here on error raised explicitly by an action */
vlmfa67ddc2004-06-03 03:38:44 +00003666
3667 if (yyerrstatus == 3)
3668 {
vlm6a02a8a2004-09-08 00:28:11 +00003669 /* if just tried and failed to reuse lookahead token after an error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00003670
vlm6a02a8a2004-09-08 00:28:11 +00003671 /* return failure if at end of input */
vlmfa67ddc2004-06-03 03:38:44 +00003672 if (yychar == YYEOF)
vlm6a02a8a2004-09-08 00:28:11 +00003673 YYABORT;
vlmfa67ddc2004-06-03 03:38:44 +00003674
vlm6a02a8a2004-09-08 00:28:11 +00003675#if YYDEBUG != 0
3676 if (yydebug)
3677 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3678#endif
3679
vlmfa67ddc2004-06-03 03:38:44 +00003680 yychar = YYEMPTY;
3681 }
3682
vlm6a02a8a2004-09-08 00:28:11 +00003683 /* Else will try to reuse lookahead token
3684 after shifting the error token. */
vlmfa67ddc2004-06-03 03:38:44 +00003685
vlm6a02a8a2004-09-08 00:28:11 +00003686 yyerrstatus = 3; /* Each real token shifted decrements this */
vlmfa67ddc2004-06-03 03:38:44 +00003687
vlm6a02a8a2004-09-08 00:28:11 +00003688 goto yyerrhandle;
vlm80103492004-09-07 10:39:09 +00003689
vlm6a02a8a2004-09-08 00:28:11 +00003690yyerrdefault: /* current state does not do anything special for the error token. */
vlm80103492004-09-07 10:39:09 +00003691
vlm6a02a8a2004-09-08 00:28:11 +00003692#if 0
3693 /* This is wrong; only states that explicitly want error tokens
3694 should shift them. */
3695 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3696 if (yyn) goto yydefault;
vlm39e5ed72004-09-05 10:40:41 +00003697#endif
vlm6a02a8a2004-09-08 00:28:11 +00003698
3699yyerrpop: /* pop the current state because it cannot handle the error token */
3700
3701 if (yyssp == yyss) YYABORT;
3702 yyvsp--;
3703 yystate = *--yyssp;
3704#ifdef YYLSP_NEEDED
3705 yylsp--;
3706#endif
3707
3708#if YYDEBUG != 0
3709 if (yydebug)
3710 {
3711 short *ssp1 = yyss - 1;
3712 fprintf (stderr, "Error: state stack now");
3713 while (ssp1 != yyssp)
3714 fprintf (stderr, " %d", *++ssp1);
3715 fprintf (stderr, "\n");
vlm39e5ed72004-09-05 10:40:41 +00003716 }
vlm6a02a8a2004-09-08 00:28:11 +00003717#endif
3718
3719yyerrhandle:
3720
3721 yyn = yypact[yystate];
3722 if (yyn == YYFLAG)
3723 goto yyerrdefault;
3724
3725 yyn += YYTERROR;
3726 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3727 goto yyerrdefault;
3728
3729 yyn = yytable[yyn];
3730 if (yyn < 0)
3731 {
3732 if (yyn == YYFLAG)
3733 goto yyerrpop;
3734 yyn = -yyn;
3735 goto yyreduce;
3736 }
3737 else if (yyn == 0)
3738 goto yyerrpop;
vlmfa67ddc2004-06-03 03:38:44 +00003739
3740 if (yyn == YYFINAL)
3741 YYACCEPT;
3742
vlm6a02a8a2004-09-08 00:28:11 +00003743#if YYDEBUG != 0
3744 if (yydebug)
3745 fprintf(stderr, "Shifting error token, ");
3746#endif
vlmfa67ddc2004-06-03 03:38:44 +00003747
3748 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00003749#ifdef YYLSP_NEEDED
3750 *++yylsp = yylloc;
3751#endif
vlmfa67ddc2004-06-03 03:38:44 +00003752
3753 yystate = yyn;
3754 goto yynewstate;
3755
vlm6a02a8a2004-09-08 00:28:11 +00003756 yyacceptlab:
3757 /* YYACCEPT comes here. */
3758 if (yyfree_stacks)
3759 {
3760 free (yyss);
3761 free (yyvs);
3762#ifdef YYLSP_NEEDED
3763 free (yyls);
vlm044f7442004-09-04 04:49:21 +00003764#endif
vlm6a02a8a2004-09-08 00:28:11 +00003765 }
3766 return 0;
vlm80103492004-09-07 10:39:09 +00003767
vlm6a02a8a2004-09-08 00:28:11 +00003768 yyabortlab:
3769 /* YYABORT comes here. */
3770 if (yyfree_stacks)
3771 {
3772 free (yyss);
3773 free (yyvs);
3774#ifdef YYLSP_NEEDED
3775 free (yyls);
vlm80103492004-09-07 10:39:09 +00003776#endif
vlm6a02a8a2004-09-08 00:28:11 +00003777 }
3778 return 1;
vlmfa67ddc2004-06-03 03:38:44 +00003779}
vlmdc7cf042006-03-09 08:49:26 +00003780#line 2217 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00003781
3782
3783
3784/*
3785 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3786 */
3787static asn1p_value_t *
3788_convert_bitstring2binary(char *str, int base) {
3789 asn1p_value_t *val;
3790 int slen;
3791 int memlen;
3792 int baselen;
3793 int bits;
3794 uint8_t *binary_vector;
3795 uint8_t *bv_ptr;
3796 uint8_t cur_val;
3797
3798 assert(str);
3799 assert(str[0] == '\'');
3800
3801 switch(base) {
3802 case 'B':
3803 baselen = 1;
3804 break;
3805 case 'H':
3806 baselen = 4;
3807 break;
3808 default:
3809 assert(base == 'B' || base == 'H');
3810 errno = EINVAL;
3811 return NULL;
3812 }
3813
3814 slen = strlen(str);
3815 assert(str[slen - 1] == base);
3816 assert(str[slen - 2] == '\'');
3817
3818 memlen = slen / (8 / baselen); /* Conservative estimate */
3819
3820 bv_ptr = binary_vector = malloc(memlen + 1);
3821 if(bv_ptr == NULL)
3822 /* ENOMEM */
3823 return NULL;
3824
3825 cur_val = 0;
3826 bits = 0;
3827 while(*(++str) != '\'') {
3828 switch(baselen) {
3829 case 1:
3830 switch(*str) {
3831 case '1':
3832 cur_val |= 1 << (7 - (bits % 8));
3833 case '0':
3834 break;
3835 default:
3836 assert(!"_y UNREACH1");
3837 case ' ': case '\r': case '\n':
3838 continue;
3839 }
3840 break;
3841 case 4:
3842 switch(*str) {
3843 case '0': case '1': case '2': case '3': case '4':
3844 case '5': case '6': case '7': case '8': case '9':
3845 cur_val |= (*str - '0') << (4 - (bits % 8));
3846 break;
3847 case 'A': case 'B': case 'C':
3848 case 'D': case 'E': case 'F':
3849 cur_val |= ((*str - 'A') + 10)
3850 << (4 - (bits % 8));
3851 break;
3852 default:
3853 assert(!"_y UNREACH2");
3854 case ' ': case '\r': case '\n':
3855 continue;
3856 }
3857 break;
3858 }
3859
3860 bits += baselen;
3861 if((bits % 8) == 0) {
3862 *bv_ptr++ = cur_val;
3863 cur_val = 0;
3864 }
3865 }
3866
3867 *bv_ptr = cur_val;
3868 assert((bv_ptr - binary_vector) <= memlen);
3869
3870 val = asn1p_value_frombits(binary_vector, bits, 0);
3871 if(val == NULL) {
3872 free(binary_vector);
3873 }
3874
3875 return val;
3876}
3877
vlm5d89c3d2005-08-13 09:07:11 +00003878/*
3879 * For unnamed types (used in old X.208 compliant modules)
3880 * generate some sort of interim names, to not to force human being to fix
3881 * the specification's compliance to modern ASN.1 standards.
3882 */
3883static void
3884_fixup_anonymous_identifier(asn1p_expr_t *expr) {
3885 char *p;
3886 assert(expr->Identifier == 0);
3887
3888 /*
3889 * Try to figure out the type name
3890 * without going too much into details
3891 */
3892 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
3893 if(expr->reference && expr->reference->comp_count > 0)
3894 expr->Identifier = expr->reference->components[0].name;
3895
3896 fprintf(stderr,
3897 "WARNING: Line %d: expected lower-case member identifier, "
3898 "found an unnamed %s.\n"
3899 "WARNING: Obsolete X.208 syntax detected, "
3900 "please give the member a name.\n",
3901 yylineno, expr->Identifier ? expr->Identifier : "type");
3902
3903 if(!expr->Identifier)
3904 expr->Identifier = "unnamed";
3905 expr->Identifier = strdup(expr->Identifier);
3906 assert(expr->Identifier);
3907 /* Make a lowercase identifier from the type name */
3908 for(p = expr->Identifier; *p; p++) {
3909 switch(*p) {
3910 case 'A' ... 'Z': *p += 32; break;
3911 case ' ': *p = '_'; break;
3912 case '-': *p = '_'; break;
3913 }
3914 }
3915 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
3916 "Name clash may occur later.\n",
3917 expr->Identifier);
3918}
3919
vlmfa67ddc2004-06-03 03:38:44 +00003920extern char *asn1p_text;
3921
3922int
3923yyerror(const char *msg) {
3924 fprintf(stderr,
3925 "ASN.1 grammar parse error "
3926 "near line %d (token \"%s\"): %s\n",
vlm39e5ed72004-09-05 10:40:41 +00003927 yylineno, asn1p_text, msg);
vlmfa67ddc2004-06-03 03:38:44 +00003928 return -1;
3929}
3930
3931