blob: f74538fbb2e5dad7d23b7302b31b2ba8eef9774b [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/*
vlm066dc102005-08-22 12:23:54 +0000142 * Process modifiers as <asn1c:pointer>
143 */
144extern int asn1p_as_pointer;
145static asn1p_expr_t *asn1p_last_type;
146static void apply_nonstd_mods(void);
147
148/*
vlm931aeed2005-08-12 10:09:10 +0000149 * This temporary variable is used to solve the shortcomings of 1-lookahead
150 * parser.
151 */
152static struct AssignedIdentifier *saved_aid;
vlmfa67ddc2004-06-03 03:38:44 +0000153
vlm5d89c3d2005-08-13 09:07:11 +0000154static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
155static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
vlmfa67ddc2004-06-03 03:38:44 +0000156
vlm931aeed2005-08-12 10:09:10 +0000157#define checkmem(ptr) do { \
158 if(!(ptr)) \
159 return yyerror("Memory failure"); \
vlmfa67ddc2004-06-03 03:38:44 +0000160 } while(0)
161
vlm931aeed2005-08-12 10:09:10 +0000162#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
163 if(arg1->type != constr_type) { \
164 int __ret; \
165 root = asn1p_constraint_new(yylineno); \
166 checkmem(root); \
167 root->type = constr_type; \
168 __ret = asn1p_constraint_insert(root, \
169 arg1); \
170 checkmem(__ret == 0); \
171 } else { \
172 root = arg1; \
173 } \
174 if(arg2) { \
175 int __ret \
176 = asn1p_constraint_insert(root, arg2); \
177 checkmem(__ret == 0); \
178 } \
vlmfa67ddc2004-06-03 03:38:44 +0000179 } while(0)
180
181
vlm066dc102005-08-22 12:23:54 +0000182#line 74 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +0000183typedef union {
184 asn1p_t *a_grammar;
185 asn1p_module_flags_e a_module_flags;
186 asn1p_module_t *a_module;
187 asn1p_expr_type_e a_type; /* ASN.1 Type */
188 asn1p_expr_t *a_expr; /* Constructed collection */
189 asn1p_constraint_t *a_constr; /* Constraint */
190 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
191 asn1p_xports_t *a_xports; /* IMports/EXports */
vlm931aeed2005-08-12 10:09:10 +0000192 struct AssignedIdentifier a_aid; /* Assigned Identifier */
vlmfa67ddc2004-06-03 03:38:44 +0000193 asn1p_oid_t *a_oid; /* Object Identifier */
194 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
195 struct asn1p_type_tag_s a_tag; /* A tag */
196 asn1p_ref_t *a_ref; /* Reference to custom type */
197 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
198 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
199 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
200 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
201 struct asn1p_param_s a_parg; /* A parameter argument */
202 asn1p_paramlist_t *a_plist; /* A pargs list */
vlmc94e28f2004-09-15 11:59:51 +0000203 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
vlmfa67ddc2004-06-03 03:38:44 +0000204 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
vlmec6acd42004-09-29 13:18:09 +0000205 asn1c_integer_t a_int;
vlmfa67ddc2004-06-03 03:38:44 +0000206 char *tv_str;
207 struct {
208 char *buf;
209 int len;
210 } tv_opaque;
211 struct {
212 char *name;
213 struct asn1p_type_tag_s tag;
214 } tv_nametag;
vlm6a02a8a2004-09-08 00:28:11 +0000215} YYSTYPE;
216#include <stdio.h>
217
218#ifndef __cplusplus
219#ifndef __STDC__
220#define const
221#endif
vlmfa67ddc2004-06-03 03:38:44 +0000222#endif
223
224
225
vlm066dc102005-08-22 12:23:54 +0000226#define YYFINAL 434
vlm6a02a8a2004-09-08 00:28:11 +0000227#define YYFLAG -32768
vlm2c8c44d2005-03-24 16:22:35 +0000228#define YYNTBASE 118
vlmfa67ddc2004-06-03 03:38:44 +0000229
vlm066dc102005-08-22 12:23:54 +0000230#define YYTRANSLATE(x) ((unsigned)(x) <= 356 ? yytranslate[x] : 226)
vlmfa67ddc2004-06-03 03:38:44 +0000231
vlm6a02a8a2004-09-08 00:28:11 +0000232static const char yytranslate[] = { 0,
233 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
234 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
235 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2c8c44d2005-03-24 16:22:35 +0000236 2, 2, 112, 2, 2, 2, 2, 2, 2, 107,
237 108, 2, 2, 110, 2, 113, 2, 2, 2, 2,
238 2, 2, 2, 2, 2, 2, 2, 111, 109, 114,
239 2, 2, 2, 115, 2, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000240 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
241 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2c8c44d2005-03-24 16:22:35 +0000242 116, 2, 117, 99, 2, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000243 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
244 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2c8c44d2005-03-24 16:22:35 +0000245 2, 2, 105, 101, 106, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000246 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
247 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
248 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
249 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
250 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
251 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
252 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
253 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
254 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
255 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
256 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
257 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
258 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
259 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
260 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
261 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
262 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
263 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
264 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
265 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
266 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
267 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
vlm2c8c44d2005-03-24 16:22:35 +0000268 97, 98, 100, 102, 103, 104
vlm6a02a8a2004-09-08 00:28:11 +0000269};
vlmfa67ddc2004-06-03 03:38:44 +0000270
vlm6a02a8a2004-09-08 00:28:11 +0000271#if YYDEBUG != 0
272static const short yyprhs[] = { 0,
273 0, 2, 4, 7, 16, 17, 19, 23, 26, 28,
274 31, 33, 38, 40, 41, 43, 45, 48, 51, 54,
275 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
vlm931aeed2005-08-12 10:09:10 +0000276 79, 81, 82, 86, 88, 92, 95, 97, 100, 101,
277 103, 108, 110, 114, 116, 120, 122, 126, 130, 133,
278 135, 139, 141, 145, 147, 148, 155, 157, 159, 164,
279 168, 172, 179, 181, 185, 187, 191, 195, 199, 201,
280 205, 207, 209, 210, 212, 214, 218, 222, 226, 228,
vlm5d89c3d2005-08-13 09:07:11 +0000281 231, 233, 237, 240, 242, 244, 250, 251, 253, 255,
282 259, 262, 267, 272, 273, 275, 276, 283, 285, 288,
vlm066dc102005-08-22 12:23:54 +0000283 290, 292, 294, 298, 302, 306, 307, 310, 312, 313,
284 319, 320, 326, 327, 333, 340, 347, 349, 354, 359,
285 361, 365, 367, 371, 375, 379, 381, 385, 387, 391,
286 393, 395, 397, 399, 404, 408, 409, 413, 415, 417,
287 419, 421, 423, 425, 427, 429, 431, 435, 437, 439,
288 441, 443, 446, 448, 450, 452, 454, 457, 460, 462,
289 464, 467, 470, 472, 474, 476, 478, 480, 483, 485,
vlm5d89c3d2005-08-13 09:07:11 +0000290 488, 490, 492, 494, 496, 498, 500, 502, 504, 506,
vlm066dc102005-08-22 12:23:54 +0000291 508, 510, 512, 514, 516, 518, 520, 522, 524, 526,
292 527, 529, 531, 536, 540, 545, 547, 551, 557, 559,
293 563, 567, 571, 575, 580, 584, 586, 588, 592, 596,
294 600, 604, 606, 608, 609, 615, 617, 620, 623, 627,
295 629, 631, 633, 635, 637, 639, 641, 643, 647, 653,
296 655, 659, 661, 665, 666, 668, 670, 672, 674, 676,
297 678, 682, 687, 689, 693, 696, 700, 702, 706, 707,
298 709, 711, 714, 717, 721, 723, 727, 729, 734, 739,
299 741, 743, 745, 747, 748, 750, 753, 758, 759, 761,
300 763, 765, 766, 768, 770, 772, 774, 776, 777, 779
vlm6a02a8a2004-09-08 00:28:11 +0000301};
vlmfa67ddc2004-06-03 03:38:44 +0000302
vlm2c8c44d2005-03-24 16:22:35 +0000303static const short yyrhs[] = { 119,
vlm066dc102005-08-22 12:23:54 +0000304 0, 120, 0, 119, 120, 0, 222, 121, 36, 125,
vlm2c8c44d2005-03-24 16:22:35 +0000305 3, 23, 128, 41, 0, 0, 122, 0, 105, 123,
306 106, 0, 105, 106, 0, 124, 0, 123, 124, 0,
vlm066dc102005-08-22 12:23:54 +0000307 225, 0, 225, 107, 9, 108, 0, 9, 0, 0,
vlm2c8c44d2005-03-24 16:22:35 +0000308 126, 0, 127, 0, 126, 127, 0, 43, 86, 0,
309 54, 86, 0, 22, 86, 0, 45, 55, 0, 14,
310 59, 0, 0, 129, 0, 130, 0, 129, 130, 0,
vlm066dc102005-08-22 12:23:54 +0000311 132, 0, 138, 0, 144, 0, 176, 0, 141, 0,
312 0, 40, 14, 131, 0, 185, 0, 56, 133, 109,
vlm931aeed2005-08-12 10:09:10 +0000313 0, 56, 48, 0, 135, 0, 133, 135, 0, 0,
vlm066dc102005-08-22 12:23:54 +0000314 122, 0, 136, 48, 222, 134, 0, 137, 0, 136,
315 110, 137, 0, 222, 0, 222, 105, 106, 0, 225,
vlm931aeed2005-08-12 10:09:10 +0000316 0, 44, 139, 109, 0, 44, 19, 109, 0, 44,
vlm066dc102005-08-22 12:23:54 +0000317 109, 0, 140, 0, 139, 110, 140, 0, 222, 0,
318 222, 105, 106, 0, 225, 0, 0, 222, 143, 3,
319 105, 142, 181, 0, 171, 0, 182, 0, 222, 3,
320 217, 89, 0, 222, 3, 164, 0, 222, 3, 154,
321 0, 222, 105, 145, 106, 3, 164, 0, 146, 0,
322 145, 110, 146, 0, 222, 0, 222, 111, 225, 0,
323 222, 111, 222, 0, 182, 111, 225, 0, 148, 0,
324 147, 110, 148, 0, 164, 0, 225, 0, 0, 150,
325 0, 151, 0, 150, 110, 151, 0, 225, 164, 211,
326 0, 32, 70, 164, 0, 163, 0, 164, 211, 0,
327 153, 0, 152, 110, 153, 0, 225, 164, 0, 163,
vlm5d89c3d2005-08-13 09:07:11 +0000328 0, 164, 0, 30, 105, 156, 106, 158, 0, 0,
vlm066dc102005-08-22 12:23:54 +0000329 90, 0, 157, 0, 156, 110, 157, 0, 174, 211,
330 0, 174, 164, 155, 211, 0, 174, 174, 155, 211,
vlm5d89c3d2005-08-13 09:07:11 +0000331 0, 0, 159, 0, 0, 97, 84, 105, 160, 161,
vlm066dc102005-08-22 12:23:54 +0000332 106, 0, 162, 0, 161, 162, 0, 4, 0, 174,
333 0, 104, 0, 104, 112, 179, 0, 104, 112, 216,
334 0, 217, 165, 189, 0, 0, 166, 167, 0, 184,
335 0, 0, 29, 105, 152, 168, 106, 0, 0, 80,
336 105, 149, 169, 106, 0, 0, 81, 105, 149, 170,
337 106, 0, 80, 189, 70, 224, 217, 165, 0, 81,
338 189, 70, 224, 217, 165, 0, 20, 0, 20, 37,
339 27, 225, 0, 222, 105, 147, 106, 0, 171, 0,
340 58, 70, 171, 0, 13, 0, 13, 113, 222, 0,
341 223, 113, 222, 0, 13, 113, 225, 0, 223, 0,
342 223, 113, 172, 0, 173, 0, 172, 113, 173, 0,
343 175, 0, 175, 0, 15, 0, 16, 0, 225, 143,
344 3, 177, 0, 225, 111, 177, 0, 0, 105, 178,
345 181, 0, 65, 0, 47, 0, 88, 0, 5, 0,
346 7, 0, 180, 0, 216, 0, 179, 0, 225, 0,
347 222, 113, 225, 0, 6, 0, 10, 0, 11, 0,
348 4, 0, 181, 4, 0, 26, 0, 65, 0, 78,
349 0, 183, 0, 69, 83, 0, 67, 53, 0, 79,
vlm5d89c3d2005-08-13 09:07:11 +0000350 0, 46, 0, 38, 73, 0, 28, 83, 0, 93,
vlm066dc102005-08-22 12:23:54 +0000351 0, 49, 0, 185, 0, 60, 0, 42, 0, 24,
352 83, 0, 182, 0, 183, 213, 0, 25, 0, 50,
vlm5d89c3d2005-08-13 09:07:11 +0000353 0, 51, 0, 52, 0, 61, 0, 66, 0, 76,
354 0, 85, 0, 87, 0, 92, 0, 94, 0, 95,
355 0, 96, 0, 68, 0, 101, 0, 102, 0, 99,
vlm066dc102005-08-22 12:23:54 +0000356 0, 100, 0, 98, 0, 0, 190, 0, 191, 0,
357 82, 107, 192, 108, 0, 107, 192, 108, 0, 191,
358 107, 192, 108, 0, 193, 0, 193, 110, 104, 0,
359 193, 110, 104, 110, 193, 0, 194, 0, 19, 98,
360 194, 0, 193, 186, 194, 0, 193, 187, 194, 0,
361 194, 188, 194, 0, 197, 107, 192, 108, 0, 107,
362 192, 108, 0, 198, 0, 199, 0, 198, 196, 198,
363 0, 63, 196, 198, 0, 198, 196, 62, 0, 63,
364 196, 62, 0, 205, 0, 200, 0, 0, 33, 27,
365 105, 195, 181, 0, 103, 0, 103, 114, 0, 114,
vlm5d89c3d2005-08-13 09:07:11 +0000366 103, 0, 114, 103, 114, 0, 82, 0, 48, 0,
vlm066dc102005-08-22 12:23:54 +0000367 47, 0, 88, 0, 216, 0, 180, 0, 225, 0,
368 222, 0, 97, 31, 191, 0, 97, 32, 105, 201,
369 106, 0, 202, 0, 201, 110, 202, 0, 104, 0,
370 225, 189, 203, 0, 0, 204, 0, 75, 0, 17,
371 0, 71, 0, 206, 0, 207, 0, 105, 222, 106,
372 0, 206, 105, 208, 106, 0, 209, 0, 208, 110,
373 209, 0, 115, 210, 0, 115, 113, 210, 0, 225,
374 0, 210, 113, 225, 0, 0, 212, 0, 71, 0,
375 35, 177, 0, 105, 106, 0, 105, 214, 106, 0,
376 215, 0, 214, 110, 215, 0, 225, 0, 225, 107,
377 216, 108, 0, 225, 107, 179, 108, 0, 216, 0,
378 104, 0, 9, 0, 12, 0, 0, 218, 0, 219,
379 221, 0, 116, 220, 9, 117, 0, 0, 91, 0,
vlm5d89c3d2005-08-13 09:07:11 +0000380 21, 0, 77, 0, 0, 54, 0, 43, 0, 13,
vlm066dc102005-08-22 12:23:54 +0000381 0, 14, 0, 14, 0, 0, 225, 0, 8, 0
vlm6a02a8a2004-09-08 00:28:11 +0000382};
vlmfa67ddc2004-06-03 03:38:44 +0000383
384#endif
385
vlm6a02a8a2004-09-08 00:28:11 +0000386#if YYDEBUG != 0
387static const short yyrline[] = { 0,
vlm066dc102005-08-22 12:23:54 +0000388 321, 327, 333, 349, 374, 376, 379, 383, 388, 395,
389 403, 408, 412, 421, 423, 431, 435, 443, 447, 450,
390 453, 457, 477, 479, 487, 491, 523, 527, 536, 543,
391 556, 563, 565, 577, 590, 601, 606, 612, 618, 620,
392 623, 634, 640, 646, 653, 659, 667, 671, 674, 681,
393 687, 693, 700, 706, 715, 717, 726, 734, 748, 760,
394 766, 782, 791, 801, 811, 816, 823, 830, 840, 846,
395 852, 856, 879, 881, 883, 889, 895, 902, 909, 912,
396 919, 925, 931, 937, 940, 946, 956, 958, 961, 969,
397 975, 984, 990, 1007, 1009, 1014, 1018, 1023, 1028, 1034,
398 1038, 1049, 1058, 1067, 1078, 1101, 1102, 1106, 1110, 1110,
399 1116, 1116, 1122, 1122, 1128, 1138, 1148, 1154, 1168, 1192,
400 1199, 1213, 1222, 1232, 1242, 1252, 1260, 1281, 1290, 1299,
401 1300, 1302, 1309, 1321, 1331, 1339, 1339, 1344, 1349, 1354,
402 1359, 1363, 1367, 1370, 1373, 1378, 1390, 1407, 1412, 1417,
403 1450, 1460, 1474, 1476, 1477, 1478, 1479, 1480, 1481, 1482,
404 1483, 1484, 1485, 1486, 1487, 1493, 1495, 1496, 1499, 1506,
405 1518, 1520, 1524, 1528, 1529, 1530, 1531, 1532, 1536, 1537,
406 1538, 1539, 1543, 1544, 1551, 1551, 1552, 1552, 1553, 1555,
407 1557, 1562, 1566, 1575, 1579, 1584, 1588, 1594, 1604, 1608,
408 1611, 1614, 1617, 1622, 1631, 1639, 1645, 1651, 1658, 1666,
409 1674, 1683, 1686, 1689, 1690, 1700, 1702, 1703, 1704, 1707,
410 1711, 1716, 1722, 1727, 1730, 1733, 1746, 1760, 1764, 1769,
411 1773, 1778, 1785, 1798, 1800, 1803, 1807, 1810, 1815, 1819,
412 1827, 1842, 1848, 1855, 1868, 1880, 1895, 1899, 1916, 1921,
413 1924, 1929, 1951, 1956, 1961, 1967, 1973, 1981, 1989, 1997,
414 2004, 2014, 2019, 2049, 2051, 2054, 2061, 2067, 2069, 2070,
415 2071, 2074, 2076, 2077, 2080, 2085, 2092, 2099, 2101, 2106
vlm6a02a8a2004-09-08 00:28:11 +0000416};
417#endif
418
419
420#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
421
422static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
423"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
vlm2c8c44d2005-03-24 16:22:35 +0000424"TOK_tuple","TOK_quadruple","TOK_number_negative","TOK_typereference","TOK_capitalreference",
425"TOK_typefieldreference","TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX",
426"TOK_ALL","TOK_ANY","TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT",
427"TOK_BMPString","TOK_BOOLEAN","TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS",
428"TOK_COMPONENT","TOK_COMPONENTS","TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT",
429"TOK_DEFINITIONS","TOK_DEFINED","TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL",
430"TOK_END","TOK_ENUMERATED","TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY",
431"TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString",
432"TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED",
433"TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INSTRUCTIONS","TOK_INTEGER",
434"TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL","TOK_NumericString",
435"TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET","TOK_OF","TOK_OPTIONAL","TOK_PATTERN",
436"TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString","TOK_PRIVATE",
437"TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE","TOK_STRING",
438"TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE","TOK_TYPE_IDENTIFIER",
439"TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime","TOK_UTF8String",
440"TOK_VideotexString","TOK_VisibleString","TOK_WITH","TOK_EXCEPT","'^'","TOK_INTERSECTION",
441"'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots","'{'","'}'","'('","')'","';'",
442"','","':'","'!'","'.'","'<'","'@'","'['","']'","ParsedGrammar","ModuleList",
443"ModuleSpecification","optObjectIdentifier","ObjectIdentifier","ObjectIdentifierBody",
444"ObjectIdentifierElement","optModuleSpecificationFlags","ModuleSpecificationFlags",
445"ModuleSpecificationFlag","optModuleSpecificationBody","ModuleSpecificationBody",
vlm931aeed2005-08-12 10:09:10 +0000446"ModuleSpecificationElement","@1","ImportsDefinition","ImportsBundleSet","AssignedIdentifier",
447"ImportsBundle","ImportsList","ImportsElement","ExportsDefinition","ExportsBody",
448"ExportsElement","ValueSetDefinition","@2","DefinedTypeRef","DataTypeReference",
449"ParameterArgumentList","ParameterArgumentName","ActualParameterList","ActualParameter",
450"optComponentTypeLists","ComponentTypeLists","ComponentType","AlternativeTypeLists",
451"AlternativeType","ClassDeclaration","optUnique","ClassFieldList","ClassField",
452"optWithSyntax","WithSyntax","@3","WithSyntaxFormat","WithSyntaxFormatToken",
vlm066dc102005-08-22 12:23:54 +0000453"ExtensionAndException","Type","TypeDeclaration","@4","TypeDeclarationSet","@5",
454"@6","@7","ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement",
455"ClassFieldIdentifier","ClassFieldName","ValueDefinition","Value","@8","DefinedValue",
456"RestrictedCharacterStringValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
457"BasicType","BasicString","Union","Intersection","Except","optConstraints","Constraints",
458"SetOfConstraints","ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement",
459"@9","ConstraintRangeSpec","ConstraintSpec","SingleValue","ContainedSubtype",
460"InnerTypeConstraint","WithComponentsList","WithComponentsElement","optPresenceConstraint",
461"PresenceConstraint","TableConstraint","SimpleTableConstraint","ComponentRelationConstraint",
462"AtNotationList","AtNotationElement","ComponentIdList","optMarker","Marker",
463"UniverationDefinition","UniverationList","UniverationElement","SignedNumber",
464"optTag","Tag","TagTypeValue","TagClass","TagPlicit","TypeRefName","ObjectClassReference",
465"optIdentifier","Identifier", NULL
vlm6a02a8a2004-09-08 00:28:11 +0000466};
467#endif
468
469static const short yyr1[] = { 0,
vlm2c8c44d2005-03-24 16:22:35 +0000470 118, 119, 119, 120, 121, 121, 122, 122, 123, 123,
471 124, 124, 124, 125, 125, 126, 126, 127, 127, 127,
472 127, 127, 128, 128, 129, 129, 130, 130, 130, 130,
vlm931aeed2005-08-12 10:09:10 +0000473 130, 131, 130, 130, 132, 132, 133, 133, 134, 134,
474 135, 136, 136, 137, 137, 137, 138, 138, 138, 139,
475 139, 140, 140, 140, 142, 141, 143, 143, 144, 144,
476 144, 144, 145, 145, 146, 146, 146, 146, 147, 147,
vlm5d89c3d2005-08-13 09:07:11 +0000477 148, 148, 149, 149, 150, 150, 151, 151, 151, 151,
478 152, 152, 153, 153, 153, 154, 155, 155, 156, 156,
479 157, 157, 157, 158, 158, 160, 159, 161, 161, 162,
vlm066dc102005-08-22 12:23:54 +0000480 162, 163, 163, 163, 164, 166, 165, 167, 168, 167,
481 169, 167, 170, 167, 167, 167, 167, 167, 167, 167,
482 167, 171, 171, 171, 171, 171, 171, 172, 172, 173,
483 174, 175, 175, 176, 177, 178, 177, 177, 177, 177,
484 177, 177, 177, 177, 177, 179, 179, 180, 180, 180,
485 181, 181, 182, 182, 182, 182, 182, 182, 182, 182,
486 182, 182, 182, 182, 182, 183, 183, 183, 184, 184,
487 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
488 185, 185, 185, 185, 186, 186, 187, 187, 188, 189,
489 189, 190, 190, 191, 191, 192, 192, 192, 193, 193,
490 193, 193, 193, 194, 194, 194, 194, 194, 194, 194,
491 194, 194, 194, 195, 194, 196, 196, 196, 196, 197,
492 197, 198, 198, 198, 198, 198, 199, 200, 200, 201,
493 201, 202, 202, 203, 203, 204, 204, 204, 205, 205,
494 206, 207, 208, 208, 209, 209, 210, 210, 211, 211,
495 212, 212, 213, 213, 214, 214, 215, 215, 215, 215,
496 215, 216, 216, 217, 217, 218, 219, 220, 220, 220,
497 220, 221, 221, 221, 222, 222, 223, 224, 224, 225
vlm6a02a8a2004-09-08 00:28:11 +0000498};
499
500static const short yyr2[] = { 0,
501 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
502 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
503 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
vlm931aeed2005-08-12 10:09:10 +0000504 1, 0, 3, 1, 3, 2, 1, 2, 0, 1,
505 4, 1, 3, 1, 3, 1, 3, 3, 2, 1,
506 3, 1, 3, 1, 0, 6, 1, 1, 4, 3,
507 3, 6, 1, 3, 1, 3, 3, 3, 1, 3,
vlm5d89c3d2005-08-13 09:07:11 +0000508 1, 1, 0, 1, 1, 3, 3, 3, 1, 2,
509 1, 3, 2, 1, 1, 5, 0, 1, 1, 3,
510 2, 4, 4, 0, 1, 0, 6, 1, 2, 1,
vlm066dc102005-08-22 12:23:54 +0000511 1, 1, 3, 3, 3, 0, 2, 1, 0, 5,
512 0, 5, 0, 5, 6, 6, 1, 4, 4, 1,
513 3, 1, 3, 3, 3, 1, 3, 1, 3, 1,
514 1, 1, 1, 4, 3, 0, 3, 1, 1, 1,
515 1, 1, 1, 1, 1, 1, 3, 1, 1, 1,
516 1, 2, 1, 1, 1, 1, 2, 2, 1, 1,
517 2, 2, 1, 1, 1, 1, 1, 2, 1, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000518 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
vlm066dc102005-08-22 12:23:54 +0000519 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
520 1, 1, 4, 3, 4, 1, 3, 5, 1, 3,
521 3, 3, 3, 4, 3, 1, 1, 3, 3, 3,
522 3, 1, 1, 0, 5, 1, 2, 2, 3, 1,
523 1, 1, 1, 1, 1, 1, 1, 3, 5, 1,
524 3, 1, 3, 0, 1, 1, 1, 1, 1, 1,
525 3, 4, 1, 3, 2, 3, 1, 3, 0, 1,
526 1, 2, 2, 3, 1, 3, 1, 4, 4, 1,
527 1, 1, 1, 0, 1, 2, 4, 0, 1, 1,
528 1, 0, 1, 1, 1, 1, 1, 0, 1, 1
vlm6a02a8a2004-09-08 00:28:11 +0000529};
530
531static const short yydefact[] = { 0,
vlm066dc102005-08-22 12:23:54 +0000532 275, 276, 1, 2, 5, 3, 0, 0, 6, 280,
vlm6a02a8a2004-09-08 00:28:11 +0000533 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
534 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
vlm066dc102005-08-22 12:23:54 +0000535 18, 21, 19, 0, 17, 12, 23, 171, 0, 0,
536 172, 173, 174, 0, 175, 176, 184, 177, 178, 179,
537 180, 181, 182, 183, 0, 24, 25, 27, 28, 31,
vlm931aeed2005-08-12 10:09:10 +0000538 29, 30, 34, 0, 0, 32, 0, 49, 0, 50,
539 52, 54, 36, 0, 37, 0, 42, 44, 46, 4,
vlm066dc102005-08-22 12:23:54 +0000540 26, 264, 122, 277, 0, 153, 0, 0, 167, 160,
541 164, 166, 154, 0, 0, 155, 159, 163, 0, 0,
542 57, 58, 156, 165, 126, 0, 33, 48, 47, 0,
543 0, 35, 38, 0, 0, 0, 0, 268, 61, 60,
544 106, 265, 272, 0, 168, 162, 161, 158, 157, 0,
vlm931aeed2005-08-12 10:09:10 +0000545 63, 0, 65, 0, 0, 0, 51, 53, 39, 43,
vlm066dc102005-08-22 12:23:54 +0000546 45, 0, 270, 271, 269, 0, 59, 190, 0, 274,
547 273, 266, 123, 125, 0, 0, 0, 0, 55, 132,
548 133, 127, 128, 130, 124, 141, 148, 142, 262, 149,
549 150, 263, 139, 138, 140, 136, 134, 145, 143, 144,
550 0, 146, 40, 41, 0, 89, 264, 131, 0, 0,
551 0, 105, 191, 192, 122, 277, 117, 0, 0, 190,
552 190, 107, 120, 169, 156, 108, 0, 264, 64, 68,
553 67, 66, 0, 0, 0, 0, 0, 94, 0, 0,
554 251, 87, 87, 91, 250, 106, 267, 0, 0, 0,
555 222, 221, 0, 220, 223, 0, 0, 0, 225, 0,
556 196, 199, 0, 206, 207, 213, 212, 239, 240, 224,
557 227, 226, 0, 0, 264, 0, 264, 0, 264, 0,
558 0, 170, 264, 62, 151, 56, 129, 137, 147, 135,
559 0, 86, 95, 90, 252, 88, 249, 249, 0, 0,
560 0, 216, 0, 0, 0, 0, 0, 0, 194, 187,
561 188, 185, 186, 0, 0, 0, 189, 0, 0, 0,
562 0, 0, 0, 102, 109, 81, 84, 85, 264, 121,
563 0, 111, 74, 75, 79, 249, 264, 278, 113, 278,
564 261, 253, 0, 255, 260, 257, 0, 69, 71, 72,
565 152, 0, 92, 93, 193, 200, 214, 217, 218, 211,
566 209, 228, 0, 241, 205, 197, 201, 202, 203, 0,
567 210, 208, 0, 0, 243, 195, 118, 0, 264, 0,
568 83, 264, 0, 264, 80, 249, 264, 279, 0, 264,
569 254, 0, 0, 119, 264, 96, 0, 219, 232, 0,
570 230, 190, 0, 204, 0, 245, 247, 242, 0, 103,
571 104, 146, 82, 110, 78, 112, 76, 77, 106, 114,
572 106, 256, 0, 0, 70, 0, 215, 229, 0, 234,
573 198, 246, 0, 244, 115, 116, 259, 258, 100, 0,
574 98, 101, 231, 237, 238, 236, 233, 235, 248, 97,
575 99, 0, 0, 0
vlm6a02a8a2004-09-08 00:28:11 +0000576};
577
vlm066dc102005-08-22 12:23:54 +0000578static const short yydefgoto[] = { 432,
vlm6a02a8a2004-09-08 00:28:11 +0000579 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
vlm066dc102005-08-22 12:23:54 +0000580 56, 57, 107, 58, 74, 184, 75, 76, 77, 59,
581 69, 70, 60, 213, 100, 61, 130, 131, 327, 328,
582 312, 313, 314, 305, 306, 119, 277, 185, 186, 272,
583 273, 406, 420, 421, 315, 316, 148, 149, 202, 360,
584 363, 369, 101, 162, 163, 187, 188, 62, 177, 215,
585 178, 239, 266, 102, 103, 206, 104, 295, 296, 298,
586 192, 193, 194, 240, 241, 242, 377, 284, 243, 244,
587 245, 246, 380, 381, 427, 428, 247, 248, 249, 354,
588 355, 386, 224, 225, 262, 323, 324, 250, 226, 122,
589 123, 146, 152, 251, 105, 367, 252
vlm6a02a8a2004-09-08 00:28:11 +0000590};
591
vlm066dc102005-08-22 12:23:54 +0000592static const short yypact[] = { 194,
593-32768,-32768, 194,-32768, -46,-32768, 47, 35,-32768,-32768,
594-32768,-32768, 55,-32768, -34, 133,-32768,-32768, 69, 34,
595 14, 26, 71, 53, 170, 133,-32768, 80,-32768,-32768,
596-32768,-32768,-32768, 167,-32768,-32768, 422,-32768, 208, 4,
597-32768,-32768,-32768, 66,-32768,-32768,-32768,-32768,-32768,-32768,
598-32768,-32768,-32768,-32768, 188, 422,-32768,-32768,-32768,-32768,
599-32768,-32768,-32768, 347, 574,-32768, 126,-32768, 49,-32768,
600 138,-32768,-32768, 33,-32768, -21,-32768, 146,-32768,-32768,
601-32768, -17, 140,-32768, 190,-32768, 199, 204,-32768,-32768,
602-32768,-32768,-32768, 232, 203,-32768,-32768,-32768, 649, 285,
603-32768,-32768,-32768,-32768, 176, 289,-32768,-32768,-32768, 198,
604 189,-32768,-32768, 194, 198, 191, 200, 5,-32768,-32768,
605 215,-32768, -18, 198,-32768,-32768,-32768,-32768,-32768, 28,
606-32768, 195, 196, 205, 256, 312,-32768,-32768, -46,-32768,
607-32768, 260,-32768,-32768,-32768, 299,-32768, -10, 499,-32768,
608-32768,-32768,-32768,-32768, 306, 649, 304, 198,-32768,-32768,
609-32768, 202,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
vlme1e6ed82005-03-24 14:26:38 +0000610-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
vlm066dc102005-08-22 12:23:54 +0000611 214, 217,-32768,-32768, 65,-32768, 27,-32768, 212, 209,
612 186,-32768,-32768, 223, 67, 226, 295, 229, 265, -22,
613 -13,-32768,-32768,-32768, 233,-32768, 236, 221,-32768,-32768,
614-32768,-32768, 336, 260, 336, 304, 312, 245, 260, 312,
615-32768, 253, 253,-32768,-32768,-32768,-32768, 186, 246, 318,
616-32768,-32768, 90,-32768,-32768, 235, 194, 186,-32768, 239,
617 145, 255, 242, 90,-32768,-32768,-32768, 249,-32768,-32768,
618-32768,-32768, 186, 328, 7, 266, 3, 292, 3, 293,
619 42,-32768, 2,-32768,-32768, 360,-32768, 360,-32768,-32768,
620 283,-32768,-32768,-32768,-32768,-32768, -1, -1, 261, 251,
621 269, 262, 267, 154, 273, 276, 277, 274,-32768,-32768,
622-32768,-32768,-32768, 280, 251, 251,-32768, 251, 186, 448,
623 271, 279, 304, 278, 281,-32768,-32768,-32768, 221,-32768,
624 322,-32768, 291,-32768,-32768, -1, 221, 304,-32768, 304,
625-32768,-32768, 75,-32768,-32768, 288, 108,-32768,-32768,-32768,
626-32768, 298,-32768,-32768,-32768,-32768,-32768,-32768, 290,-32768,
627-32768, 223, 11,-32768,-32768, 300,-32768,-32768,-32768, 297,
628-32768,-32768, 8, 111,-32768,-32768,-32768, 218, 7, 282,
629-32768, 221, 303, 6,-32768, -1, 221,-32768, 305, 221,
630-32768, 36, 218,-32768, 2,-32768, 336,-32768,-32768, 114,
631-32768, -10, 186,-32768, 304, 307,-32768,-32768, 271,-32768,
vlm5d89c3d2005-08-13 09:07:11 +0000632-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
vlm066dc102005-08-22 12:23:54 +0000633-32768,-32768, 310, 311,-32768, 187, 360,-32768, 11, 15,
634 201, 307, 304,-32768,-32768,-32768,-32768,-32768,-32768, 24,
635-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
636-32768, 421, 424,-32768
vlm6a02a8a2004-09-08 00:28:11 +0000637};
638
639static const short yypgoto[] = {-32768,
vlm066dc102005-08-22 12:23:54 +0000640-32768, 419,-32768, 294,-32768, 414,-32768,-32768, 402,-32768,
641-32768, 373,-32768,-32768,-32768,-32768, 357,-32768, 323,-32768,
642-32768, 327,-32768,-32768, 379,-32768,-32768, 308,-32768, 70,
643 192,-32768, 82,-32768, 89,-32768, 227,-32768, 230,-32768,
644-32768,-32768,-32768, 41, -235, -81, -370,-32768,-32768,-32768,
645-32768,-32768, -140,-32768, 241, -183, -113,-32768, -115,-32768,
646 -292, -68, -210, -24, 314,-32768, 20,-32768,-32768,-32768,
647 -193,-32768, 168, -84, 84, -112,-32768, 224,-32768, -196,
648-32768,-32768,-32768, 56,-32768,-32768,-32768,-32768,-32768,-32768,
649 81, 86, -225,-32768,-32768,-32768, 97, -133, -80,-32768,
650-32768,-32768,-32768, 21,-32768, 155, -7
vlm6a02a8a2004-09-08 00:28:11 +0000651};
652
653
vlm066dc102005-08-22 12:23:54 +0000654#define YYLAST 745
vlm6a02a8a2004-09-08 00:28:11 +0000655
656
657static const short yytable[] = { 15,
vlm066dc102005-08-22 12:23:54 +0000658 120, 121, 180, 223, 268, 15, 258, 260, 203, 10,
659 10, 10, 117, 10, 10, 10, 1, 2, 10, 307,
660 5, 164, 67, 5, 150, 143, 114, 419, 415, 65,
661 416, 424, 72, 220, 311, 151, 79, 311, 160, 161,
662 10, 160, 161, 10, 169, 1, 2, 172, 65, 10,
663 169, 333, 334, 172, 10, 11, 63, 64, 7, 190,
664 71, 220, 10, 11, 78, 390, 79, 179, 190, 221,
665 16, 190, 19, 10, 132, 63, 64, 28, 1, 2,
666 403, 144, 257, 180, 191, 425, 180, 341, 115, 426,
667 365, 259, 29, 191, 78, 145, 191, 221, 118, 30,
668 164, 270, 72, 352, 275, 222, 304, 79, -73, 304,
669 304, 31, 68, 73, 379, 310, 154, 118, 118, 133,
670 385, 118, 118, 307, 204, 32, 264, 325, 182, 430,
671 71, 132, -249, 155, 139, 78, -249, 156, 33, 321,
672 398, 112, 118, 279, 153, 321, 20, 322, 179, 210,
673 212, 179, 12, 288, 21, 165, 181, 109, 110, 167,
674 17, 10, 169, 170, 171, 172, 407, 336, 302, 207,
675 218, -275, 34, 308, 219, 22, 133, 23, 211, 124,
676 371, 329, 347, 348, 372, 349, 24, 36, 410, 37,
677 419, 167, 282, 10, 169, 170, 171, 172, 1, 2,
678 231, 160, 161, 283, 229, 10, 1, 2, 269, 182,
679 1, 2, 182, 374, 350, 340, 388, 375, 230, 408,
680 389, 66, 422, 409, 391, 10, 169, 361, 80, 172,
681 1, 2, 231, 232, 108, 366, 422, 181, 325, 404,
682 181, 235, 111, 290, 291, 292, 293, 309, 233, 317,
683 116, 317, 124, 326, 294, 330, 167, 287, 10, 169,
684 170, 171, 172, 1, 2, 285, 286, 234, 1, 2,
685 160, 161, 125, 235, 160, 161, 127, 308, 83, 84,
686 395, 126, 236, 230, 128, 129, 399, 134, 135, 401,
687 237, 136, 238, 329, 138, 357, 141, 231, 232, 290,
688 291, 292, 293, 147, 142, 157, 158, 189, 208, 159,
689 368, 10, 368, 233, 214, 228, 166, 167, 168, 10,
690 169, 170, 171, 172, 1, 2, 216, 217, 227, 253,
691 -276, 254, 234, 255, 256, 382, 118, 261, 235, 265,
692 263, 271, 276, 280, 281, 387, 289, 236, 299, 82,
693 392, 309, 297, 301, 303, 237, 317, 238, 173, 83,
694 84, 318, 320, 331, 326, 392, 332, 330, 335, 339,
695 85, 38, 86, 337, 87, 338, 174, 387, 181, 191,
696 343, 345, 344, 346, 88, 353, 356, 394, 89, 358,
697 359, 362, 90, 181, 373, 91, 41, 42, 43, 175,
698 364, 382, 376, 378, 384, 429, 92, 45, 396, 383,
699 400, 93, 46, 94, 47, 95, 176, 417, 418, 413,
700 433, 6, 48, 434, 96, 97, 18, 35, 81, 10,
701 113, 49, 183, 50, 1, 2, 137, 140, 51, 98,
702 52, 53, 54, 106, 405, 397, 38, 393, 274, 278,
703 319, 99, 342, 167, 267, 10, 169, 170, 171, 172,
704 431, 39, 205, 209, 423, 40, 411, 300, 402, 414,
705 412, 41, 42, 43, 370, 0, 0, 44, 0, 0,
706 0, 0, 45, 0, 0, 0, 0, 46, 0, 47,
707 0, 0, 0, 0, 231, 0, 0, 48, 0, 0,
708 0, 0, 0, 0, 0, 0, 49, 0, 50, 351,
709 0, 195, 196, 51, 0, 52, 53, 54, 197, 0,
710 0, 0, 85, 38, 86, 0, 87, 198, 0, 0,
711 0, 0, 0, 0, 0, 235, 88, 0, 0, 0,
712 89, 0, 0, 0, 90, 0, 0, 91, 41, 42,
713 43, 0, 0, 0, 0, 0, 199, 0, 92, 45,
714 0, 0, 0, 93, 46, 94, 47, 95, 0, 0,
715 0, 0, 0, 0, 48, 0, 96, 97, 200, 201,
716 0, 0, 0, 49, 0, 50, 83, 84, 0, 0,
717 51, 98, 52, 53, 54, 0, 0, 85, 38, 86,
718 0, 87, 0, 0, 0, 0, 0, 0, 0, 0,
719 0, 88, 0, 0, 0, 89, 0, 0, 0, 90,
720 0, 0, 91, 41, 42, 43, 0, 0, 0, 0,
721 0, 0, 0, 92, 45, 0, 0, 0, 93, 46,
722 94, 47, 95, 0, 0, 0, 0, 0, 0, 48,
723 0, 96, 97, 0, 0, 0, 0, 0, 49, 0,
724 50, 1, 2, 0, 0, 51, 98, 52, 53, 54,
725 0, 0, 85, 38, 86, 0, 87, 0, 0, 0,
726 0, 0, 0, 0, 0, 0, 88, 0, 0, 0,
727 89, 0, 0, 0, 90, 0, 0, 91, 41, 42,
728 43, 0, 0, 0, 0, 0, 0, 0, 92, 45,
729 0, 0, 0, 93, 46, 94, 47, 95, 0, 0,
730 0, 0, 0, 0, 48, 0, 96, 97, 0, 0,
731 0, 0, 0, 49, 0, 50, 0, 0, 0, 0,
732 51, 98, 52, 53, 54
vlm6a02a8a2004-09-08 00:28:11 +0000733};
734
735static const short yycheck[] = { 7,
vlm066dc102005-08-22 12:23:54 +0000736 82, 82, 136, 187, 215, 13, 200, 201, 149, 8,
737 8, 8, 30, 8, 8, 8, 13, 14, 8, 255,
738 0, 135, 19, 3, 43, 21, 48, 4, 399, 37,
739 401, 17, 40, 35, 32, 54, 44, 32, 15, 16,
740 8, 15, 16, 8, 9, 13, 14, 12, 56, 8,
741 9, 277, 278, 12, 8, 9, 37, 37, 105, 82,
742 40, 35, 8, 9, 44, 358, 74, 136, 82, 71,
743 36, 82, 107, 8, 99, 56, 56, 9, 13, 14,
744 373, 77, 105, 217, 107, 71, 220, 284, 110, 75,
745 316, 105, 59, 107, 74, 91, 107, 71, 116, 86,
746 214, 217, 110, 300, 220, 187, 104, 115, 106, 104,
747 104, 86, 109, 48, 104, 256, 124, 116, 116, 99,
748 113, 116, 116, 359, 149, 55, 208, 261, 136, 106,
749 110, 156, 106, 106, 114, 115, 110, 110, 86, 104,
750 366, 109, 116, 228, 124, 104, 14, 106, 217, 157,
751 158, 220, 106, 238, 22, 135, 136, 109, 110, 6,
752 106, 8, 9, 10, 11, 12, 377, 280, 253, 149,
753 106, 105, 3, 255, 110, 43, 156, 45, 158, 113,
754 106, 263, 295, 296, 110, 298, 54, 108, 382, 23,
755 4, 6, 103, 8, 9, 10, 11, 12, 13, 14,
756 47, 15, 16, 114, 19, 8, 13, 14, 216, 217,
757 13, 14, 220, 106, 299, 62, 106, 110, 33, 106,
758 110, 14, 406, 110, 358, 8, 9, 309, 41, 12,
759 13, 14, 47, 48, 109, 317, 420, 217, 372, 373,
760 220, 88, 105, 99, 100, 101, 102, 255, 63, 257,
761 105, 259, 113, 261, 110, 263, 6, 237, 8, 9,
762 10, 11, 12, 13, 14, 31, 32, 82, 13, 14,
763 15, 16, 83, 88, 15, 16, 73, 359, 13, 14,
764 362, 83, 97, 33, 53, 83, 367, 3, 113, 370,
765 105, 3, 107, 375, 106, 303, 106, 47, 48, 99,
766 100, 101, 102, 89, 105, 111, 111, 9, 3, 105,
767 318, 8, 320, 63, 113, 107, 5, 6, 7, 8,
768 9, 10, 11, 12, 13, 14, 113, 111, 117, 107,
769 105, 37, 82, 105, 70, 343, 116, 105, 88, 4,
770 105, 97, 90, 98, 27, 353, 108, 97, 107, 3,
771 358, 359, 98, 105, 27, 105, 364, 107, 47, 13,
772 14, 70, 70, 4, 372, 373, 84, 375, 108, 103,
773 24, 25, 26, 105, 28, 114, 65, 385, 358, 107,
774 105, 108, 106, 104, 38, 115, 108, 106, 42, 112,
775 110, 70, 46, 373, 107, 49, 50, 51, 52, 88,
776 110, 409, 105, 114, 108, 413, 60, 61, 106, 110,
777 106, 65, 66, 67, 68, 69, 105, 108, 108, 113,
778 0, 3, 76, 0, 78, 79, 13, 26, 56, 8,
779 74, 85, 139, 87, 13, 14, 110, 115, 92, 93,
780 94, 95, 96, 65, 375, 364, 25, 359, 219, 223,
781 259, 105, 285, 6, 214, 8, 9, 10, 11, 12,
782 420, 40, 149, 156, 409, 44, 383, 244, 372, 389,
783 385, 50, 51, 52, 320, -1, -1, 56, -1, -1,
784 -1, -1, 61, -1, -1, -1, -1, 66, -1, 68,
785 -1, -1, -1, -1, 47, -1, -1, 76, -1, -1,
786 -1, -1, -1, -1, -1, -1, 85, -1, 87, 62,
787 -1, 13, 14, 92, -1, 94, 95, 96, 20, -1,
788 -1, -1, 24, 25, 26, -1, 28, 29, -1, -1,
789 -1, -1, -1, -1, -1, 88, 38, -1, -1, -1,
790 42, -1, -1, -1, 46, -1, -1, 49, 50, 51,
791 52, -1, -1, -1, -1, -1, 58, -1, 60, 61,
792 -1, -1, -1, 65, 66, 67, 68, 69, -1, -1,
793 -1, -1, -1, -1, 76, -1, 78, 79, 80, 81,
794 -1, -1, -1, 85, -1, 87, 13, 14, -1, -1,
795 92, 93, 94, 95, 96, -1, -1, 24, 25, 26,
796 -1, 28, -1, -1, -1, -1, -1, -1, -1, -1,
797 -1, 38, -1, -1, -1, 42, -1, -1, -1, 46,
798 -1, -1, 49, 50, 51, 52, -1, -1, -1, -1,
799 -1, -1, -1, 60, 61, -1, -1, -1, 65, 66,
800 67, 68, 69, -1, -1, -1, -1, -1, -1, 76,
801 -1, 78, 79, -1, -1, -1, -1, -1, 85, -1,
802 87, 13, 14, -1, -1, 92, 93, 94, 95, 96,
803 -1, -1, 24, 25, 26, -1, 28, -1, -1, -1,
804 -1, -1, -1, -1, -1, -1, 38, -1, -1, -1,
805 42, -1, -1, -1, 46, -1, -1, 49, 50, 51,
806 52, -1, -1, -1, -1, -1, -1, -1, 60, 61,
807 -1, -1, -1, 65, 66, 67, 68, 69, -1, -1,
808 -1, -1, -1, -1, 76, -1, 78, 79, -1, -1,
809 -1, -1, -1, 85, -1, 87, -1, -1, -1, -1,
810 92, 93, 94, 95, 96
vlm6a02a8a2004-09-08 00:28:11 +0000811};
812/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
813#line 3 "/usr/share/bison.simple"
814/* This file comes from bison-1.28. */
815
816/* Skeleton output parser for bison,
817 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
818
819 This program is free software; you can redistribute it and/or modify
820 it under the terms of the GNU General Public License as published by
821 the Free Software Foundation; either version 2, or (at your option)
822 any later version.
823
824 This program is distributed in the hope that it will be useful,
825 but WITHOUT ANY WARRANTY; without even the implied warranty of
826 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
827 GNU General Public License for more details.
828
829 You should have received a copy of the GNU General Public License
830 along with this program; if not, write to the Free Software
831 Foundation, Inc., 59 Temple Place - Suite 330,
832 Boston, MA 02111-1307, USA. */
833
834/* As a special exception, when this file is copied by Bison into a
835 Bison output file, you may use that output file without restriction.
836 This special exception was added by the Free Software Foundation
837 in version 1.24 of Bison. */
838
839/* This is the parser code that is written into each bison parser
840 when the %semantic_parser declaration is not specified in the grammar.
841 It was written by Richard Stallman by simplifying the hairy parser
842 used when %semantic_parser is specified. */
843
844#ifndef YYSTACK_USE_ALLOCA
845#ifdef alloca
846#define YYSTACK_USE_ALLOCA
847#else /* alloca not defined */
848#ifdef __GNUC__
849#define YYSTACK_USE_ALLOCA
850#define alloca __builtin_alloca
851#else /* not GNU C. */
852#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
853#define YYSTACK_USE_ALLOCA
854#include <alloca.h>
855#else /* not sparc */
856/* We think this test detects Watcom and Microsoft C. */
857/* This used to test MSDOS, but that is a bad idea
858 since that symbol is in the user namespace. */
859#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
860#if 0 /* No need for malloc.h, which pollutes the namespace;
861 instead, just don't use alloca. */
862#include <malloc.h>
863#endif
864#else /* not MSDOS, or __TURBOC__ */
865#if defined(_AIX)
866/* I don't know what this was needed for, but it pollutes the namespace.
867 So I turned it off. rms, 2 May 1997. */
868/* #include <malloc.h> */
869 #pragma alloca
870#define YYSTACK_USE_ALLOCA
871#else /* not MSDOS, or __TURBOC__, or _AIX */
872#if 0
873#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
874 and on HPUX 10. Eventually we can turn this on. */
875#define YYSTACK_USE_ALLOCA
876#define alloca __builtin_alloca
877#endif /* __hpux */
878#endif
879#endif /* not _AIX */
880#endif /* not MSDOS, or __TURBOC__ */
881#endif /* not sparc */
882#endif /* not GNU C */
883#endif /* alloca not defined */
884#endif /* YYSTACK_USE_ALLOCA not defined */
885
886#ifdef YYSTACK_USE_ALLOCA
887#define YYSTACK_ALLOC alloca
vlmfa67ddc2004-06-03 03:38:44 +0000888#else
vlm6a02a8a2004-09-08 00:28:11 +0000889#define YYSTACK_ALLOC malloc
vlmfa67ddc2004-06-03 03:38:44 +0000890#endif
891
vlm6a02a8a2004-09-08 00:28:11 +0000892/* Note: there must be only one dollar sign in this file.
893 It is replaced by the list of actions, each action
894 as one case of the switch. */
vlmfa67ddc2004-06-03 03:38:44 +0000895
896#define yyerrok (yyerrstatus = 0)
897#define yyclearin (yychar = YYEMPTY)
898#define YYEMPTY -2
899#define YYEOF 0
900#define YYACCEPT goto yyacceptlab
vlm6a02a8a2004-09-08 00:28:11 +0000901#define YYABORT goto yyabortlab
vlmfa67ddc2004-06-03 03:38:44 +0000902#define YYERROR goto yyerrlab1
vlm6a02a8a2004-09-08 00:28:11 +0000903/* Like YYERROR except do call yyerror.
904 This remains here temporarily to ease the
905 transition to the new meaning of YYERROR, for GCC.
vlmfa67ddc2004-06-03 03:38:44 +0000906 Once GCC version 2 has supplanted version 1, this can go. */
907#define YYFAIL goto yyerrlab
908#define YYRECOVERING() (!!yyerrstatus)
vlm6a02a8a2004-09-08 00:28:11 +0000909#define YYBACKUP(token, value) \
vlmfa67ddc2004-06-03 03:38:44 +0000910do \
911 if (yychar == YYEMPTY && yylen == 1) \
vlm6a02a8a2004-09-08 00:28:11 +0000912 { yychar = (token), yylval = (value); \
vlmfa67ddc2004-06-03 03:38:44 +0000913 yychar1 = YYTRANSLATE (yychar); \
914 YYPOPSTACK; \
915 goto yybackup; \
916 } \
917 else \
vlm6a02a8a2004-09-08 00:28:11 +0000918 { yyerror ("syntax error: cannot back up"); YYERROR; } \
vlmfa67ddc2004-06-03 03:38:44 +0000919while (0)
920
921#define YYTERROR 1
922#define YYERRCODE 256
923
vlm6a02a8a2004-09-08 00:28:11 +0000924#ifndef YYPURE
925#define YYLEX yylex()
vlmfa67ddc2004-06-03 03:38:44 +0000926#endif
927
vlm6a02a8a2004-09-08 00:28:11 +0000928#ifdef YYPURE
929#ifdef YYLSP_NEEDED
930#ifdef YYLEX_PARAM
931#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
932#else
933#define YYLEX yylex(&yylval, &yylloc)
934#endif
935#else /* not YYLSP_NEEDED */
936#ifdef YYLEX_PARAM
937#define YYLEX yylex(&yylval, YYLEX_PARAM)
938#else
939#define YYLEX yylex(&yylval)
940#endif
941#endif /* not YYLSP_NEEDED */
942#endif
vlmfa67ddc2004-06-03 03:38:44 +0000943
vlm6a02a8a2004-09-08 00:28:11 +0000944/* If nonreentrant, generate the variables here */
vlmfa67ddc2004-06-03 03:38:44 +0000945
vlm6a02a8a2004-09-08 00:28:11 +0000946#ifndef YYPURE
vlmfa67ddc2004-06-03 03:38:44 +0000947
vlm6a02a8a2004-09-08 00:28:11 +0000948int yychar; /* the lookahead symbol */
949YYSTYPE yylval; /* the semantic value of the */
950 /* lookahead symbol */
vlmfa67ddc2004-06-03 03:38:44 +0000951
vlm6a02a8a2004-09-08 00:28:11 +0000952#ifdef YYLSP_NEEDED
953YYLTYPE yylloc; /* location data for the lookahead */
954 /* symbol */
955#endif
vlmfa67ddc2004-06-03 03:38:44 +0000956
vlm6a02a8a2004-09-08 00:28:11 +0000957int yynerrs; /* number of parse errors so far */
958#endif /* not YYPURE */
959
960#if YYDEBUG != 0
961int yydebug; /* nonzero means print parse trace */
962/* Since this is uninitialized, it does not stop multiple parsers
963 from coexisting. */
964#endif
965
966/* YYINITDEPTH indicates the initial size of the parser's stacks */
967
vlmfa67ddc2004-06-03 03:38:44 +0000968#ifndef YYINITDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000969#define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +0000970#endif
971
vlm6a02a8a2004-09-08 00:28:11 +0000972/* YYMAXDEPTH is the maximum size the stacks can grow to
973 (effective only if the built-in stack extension method is used). */
vlmfa67ddc2004-06-03 03:38:44 +0000974
975#if YYMAXDEPTH == 0
vlm6a02a8a2004-09-08 00:28:11 +0000976#undef YYMAXDEPTH
vlmfa67ddc2004-06-03 03:38:44 +0000977#endif
978
979#ifndef YYMAXDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000980#define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +0000981#endif
982
vlm6a02a8a2004-09-08 00:28:11 +0000983/* Define __yy_memcpy. Note that the size argument
984 should be passed with type unsigned int, because that is what the non-GCC
985 definitions require. With GCC, __builtin_memcpy takes an arg
986 of type size_t, but it can handle unsigned int. */
vlmfa67ddc2004-06-03 03:38:44 +0000987
vlm6a02a8a2004-09-08 00:28:11 +0000988#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
989#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
990#else /* not GNU C or C++ */
991#ifndef __cplusplus
vlmfa67ddc2004-06-03 03:38:44 +0000992
vlm6a02a8a2004-09-08 00:28:11 +0000993/* This is the most reliable way to avoid incompatibilities
994 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +0000995static void
vlm6a02a8a2004-09-08 00:28:11 +0000996__yy_memcpy (to, from, count)
997 char *to;
998 char *from;
999 unsigned int count;
vlm80103492004-09-07 10:39:09 +00001000{
vlm6a02a8a2004-09-08 00:28:11 +00001001 register char *f = from;
1002 register char *t = to;
1003 register int i = count;
vlm80103492004-09-07 10:39:09 +00001004
vlm6a02a8a2004-09-08 00:28:11 +00001005 while (i-- > 0)
1006 *t++ = *f++;
vlm80103492004-09-07 10:39:09 +00001007}
vlm80103492004-09-07 10:39:09 +00001008
vlm6a02a8a2004-09-08 00:28:11 +00001009#else /* __cplusplus */
vlm80103492004-09-07 10:39:09 +00001010
vlm6a02a8a2004-09-08 00:28:11 +00001011/* This is the most reliable way to avoid incompatibilities
1012 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +00001013static void
vlm6a02a8a2004-09-08 00:28:11 +00001014__yy_memcpy (char *to, char *from, unsigned int count)
vlm80103492004-09-07 10:39:09 +00001015{
vlm6a02a8a2004-09-08 00:28:11 +00001016 register char *t = to;
1017 register char *f = from;
1018 register int i = count;
vlm80103492004-09-07 10:39:09 +00001019
vlm6a02a8a2004-09-08 00:28:11 +00001020 while (i-- > 0)
1021 *t++ = *f++;
vlm044f7442004-09-04 04:49:21 +00001022}
vlm044f7442004-09-04 04:49:21 +00001023
vlm6a02a8a2004-09-08 00:28:11 +00001024#endif
1025#endif
vlmfa67ddc2004-06-03 03:38:44 +00001026
vlm6a02a8a2004-09-08 00:28:11 +00001027#line 217 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00001028
1029/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1030 into yyparse. The argument should have type void *.
1031 It should actually point to an object.
1032 Grammar actions can access the variable by casting it
1033 to the proper pointer type. */
1034
1035#ifdef YYPARSE_PARAM
vlm6a02a8a2004-09-08 00:28:11 +00001036#ifdef __cplusplus
1037#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1038#define YYPARSE_PARAM_DECL
1039#else /* not __cplusplus */
1040#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1041#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1042#endif /* not __cplusplus */
1043#else /* not YYPARSE_PARAM */
1044#define YYPARSE_PARAM_ARG
1045#define YYPARSE_PARAM_DECL
1046#endif /* not YYPARSE_PARAM */
vlmfa67ddc2004-06-03 03:38:44 +00001047
1048/* Prevent warning if -Wstrict-prototypes. */
1049#ifdef __GNUC__
vlm6a02a8a2004-09-08 00:28:11 +00001050#ifdef YYPARSE_PARAM
vlmfa67ddc2004-06-03 03:38:44 +00001051int yyparse (void *);
vlm6a02a8a2004-09-08 00:28:11 +00001052#else
vlmfa67ddc2004-06-03 03:38:44 +00001053int yyparse (void);
vlm6a02a8a2004-09-08 00:28:11 +00001054#endif
vlm39e5ed72004-09-05 10:40:41 +00001055#endif
vlm80103492004-09-07 10:39:09 +00001056
vlmfa67ddc2004-06-03 03:38:44 +00001057int
vlm6a02a8a2004-09-08 00:28:11 +00001058yyparse(YYPARSE_PARAM_ARG)
vlmfa67ddc2004-06-03 03:38:44 +00001059 YYPARSE_PARAM_DECL
1060{
1061 register int yystate;
1062 register int yyn;
1063 register short *yyssp;
1064 register YYSTYPE *yyvsp;
vlm6a02a8a2004-09-08 00:28:11 +00001065 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1066 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
vlmfa67ddc2004-06-03 03:38:44 +00001067
vlm6a02a8a2004-09-08 00:28:11 +00001068 short yyssa[YYINITDEPTH]; /* the state stack */
1069 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
vlmfa67ddc2004-06-03 03:38:44 +00001070
vlm6a02a8a2004-09-08 00:28:11 +00001071 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1072 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
vlmfa67ddc2004-06-03 03:38:44 +00001073
vlm6a02a8a2004-09-08 00:28:11 +00001074#ifdef YYLSP_NEEDED
1075 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1076 YYLTYPE *yyls = yylsa;
1077 YYLTYPE *yylsp;
1078
1079#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1080#else
vlmfa67ddc2004-06-03 03:38:44 +00001081#define YYPOPSTACK (yyvsp--, yyssp--)
vlm6a02a8a2004-09-08 00:28:11 +00001082#endif
vlmfa67ddc2004-06-03 03:38:44 +00001083
vlm6a02a8a2004-09-08 00:28:11 +00001084 int yystacksize = YYINITDEPTH;
1085 int yyfree_stacks = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001086
vlm6a02a8a2004-09-08 00:28:11 +00001087#ifdef YYPURE
1088 int yychar;
1089 YYSTYPE yylval;
1090 int yynerrs;
1091#ifdef YYLSP_NEEDED
1092 YYLTYPE yylloc;
1093#endif
1094#endif
vlmfa67ddc2004-06-03 03:38:44 +00001095
vlm6a02a8a2004-09-08 00:28:11 +00001096 YYSTYPE yyval; /* the variable used to return */
1097 /* semantic values from the action */
1098 /* routines */
vlmfa67ddc2004-06-03 03:38:44 +00001099
1100 int yylen;
1101
vlm6a02a8a2004-09-08 00:28:11 +00001102#if YYDEBUG != 0
1103 if (yydebug)
1104 fprintf(stderr, "Starting parse\n");
1105#endif
vlmfa67ddc2004-06-03 03:38:44 +00001106
1107 yystate = 0;
1108 yyerrstatus = 0;
1109 yynerrs = 0;
1110 yychar = YYEMPTY; /* Cause a token to be read. */
1111
1112 /* Initialize stack pointers.
1113 Waste one element of value and location stack
1114 so that they stay on the same level as the state stack.
1115 The wasted elements are never initialized. */
1116
vlm6a02a8a2004-09-08 00:28:11 +00001117 yyssp = yyss - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001118 yyvsp = yyvs;
vlm6a02a8a2004-09-08 00:28:11 +00001119#ifdef YYLSP_NEEDED
1120 yylsp = yyls;
1121#endif
vlmfa67ddc2004-06-03 03:38:44 +00001122
vlm6a02a8a2004-09-08 00:28:11 +00001123/* Push a new state, which is found in yystate . */
1124/* In all cases, when you get here, the value and location stacks
1125 have just been pushed. so pushing a state here evens the stacks. */
1126yynewstate:
vlmfa67ddc2004-06-03 03:38:44 +00001127
vlm6a02a8a2004-09-08 00:28:11 +00001128 *++yyssp = yystate;
vlmfa67ddc2004-06-03 03:38:44 +00001129
1130 if (yyssp >= yyss + yystacksize - 1)
1131 {
vlm6a02a8a2004-09-08 00:28:11 +00001132 /* Give user a chance to reallocate the stack */
1133 /* Use copies of these so that the &'s don't force the real ones into memory. */
1134 YYSTYPE *yyvs1 = yyvs;
1135 short *yyss1 = yyss;
1136#ifdef YYLSP_NEEDED
1137 YYLTYPE *yyls1 = yyls;
1138#endif
1139
vlmfa67ddc2004-06-03 03:38:44 +00001140 /* Get the current used size of the three stacks, in elements. */
vlm6a02a8a2004-09-08 00:28:11 +00001141 int size = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001142
1143#ifdef yyoverflow
vlm6a02a8a2004-09-08 00:28:11 +00001144 /* Each stack pointer address is followed by the size of
1145 the data in use in that stack, in bytes. */
1146#ifdef YYLSP_NEEDED
1147 /* This used to be a conditional around just the two extra args,
1148 but that might be undefined if yyoverflow is a macro. */
1149 yyoverflow("parser stack overflow",
1150 &yyss1, size * sizeof (*yyssp),
1151 &yyvs1, size * sizeof (*yyvsp),
1152 &yyls1, size * sizeof (*yylsp),
1153 &yystacksize);
1154#else
1155 yyoverflow("parser stack overflow",
1156 &yyss1, size * sizeof (*yyssp),
1157 &yyvs1, size * sizeof (*yyvsp),
1158 &yystacksize);
1159#endif
vlmfa67ddc2004-06-03 03:38:44 +00001160
vlm6a02a8a2004-09-08 00:28:11 +00001161 yyss = yyss1; yyvs = yyvs1;
1162#ifdef YYLSP_NEEDED
1163 yyls = yyls1;
1164#endif
vlmfa67ddc2004-06-03 03:38:44 +00001165#else /* no yyoverflow */
1166 /* Extend the stack our own way. */
1167 if (yystacksize >= YYMAXDEPTH)
vlm6a02a8a2004-09-08 00:28:11 +00001168 {
1169 yyerror("parser stack overflow");
1170 if (yyfree_stacks)
1171 {
1172 free (yyss);
1173 free (yyvs);
1174#ifdef YYLSP_NEEDED
1175 free (yyls);
1176#endif
1177 }
1178 return 2;
1179 }
vlmfa67ddc2004-06-03 03:38:44 +00001180 yystacksize *= 2;
1181 if (yystacksize > YYMAXDEPTH)
1182 yystacksize = YYMAXDEPTH;
vlm6a02a8a2004-09-08 00:28:11 +00001183#ifndef YYSTACK_USE_ALLOCA
1184 yyfree_stacks = 1;
1185#endif
1186 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1187 __yy_memcpy ((char *)yyss, (char *)yyss1,
1188 size * (unsigned int) sizeof (*yyssp));
1189 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1190 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1191 size * (unsigned int) sizeof (*yyvsp));
1192#ifdef YYLSP_NEEDED
1193 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1194 __yy_memcpy ((char *)yyls, (char *)yyls1,
1195 size * (unsigned int) sizeof (*yylsp));
1196#endif
vlmfa67ddc2004-06-03 03:38:44 +00001197#endif /* no yyoverflow */
1198
vlm6a02a8a2004-09-08 00:28:11 +00001199 yyssp = yyss + size - 1;
1200 yyvsp = yyvs + size - 1;
1201#ifdef YYLSP_NEEDED
1202 yylsp = yyls + size - 1;
1203#endif
vlmfa67ddc2004-06-03 03:38:44 +00001204
vlm6a02a8a2004-09-08 00:28:11 +00001205#if YYDEBUG != 0
1206 if (yydebug)
1207 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1208#endif
vlmfa67ddc2004-06-03 03:38:44 +00001209
1210 if (yyssp >= yyss + yystacksize - 1)
1211 YYABORT;
1212 }
1213
vlm6a02a8a2004-09-08 00:28:11 +00001214#if YYDEBUG != 0
1215 if (yydebug)
1216 fprintf(stderr, "Entering state %d\n", yystate);
1217#endif
vlmfa67ddc2004-06-03 03:38:44 +00001218
1219 goto yybackup;
vlm6a02a8a2004-09-08 00:28:11 +00001220 yybackup:
vlmfa67ddc2004-06-03 03:38:44 +00001221
1222/* Do appropriate processing given the current state. */
1223/* Read a lookahead token if we need one and don't already have one. */
1224/* yyresume: */
1225
1226 /* First try to decide what to do without reference to lookahead token. */
1227
1228 yyn = yypact[yystate];
vlm6a02a8a2004-09-08 00:28:11 +00001229 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001230 goto yydefault;
1231
1232 /* Not known => get a lookahead token if don't already have one. */
1233
1234 /* yychar is either YYEMPTY or YYEOF
1235 or a valid token in external form. */
1236
1237 if (yychar == YYEMPTY)
1238 {
vlm6a02a8a2004-09-08 00:28:11 +00001239#if YYDEBUG != 0
1240 if (yydebug)
1241 fprintf(stderr, "Reading a token: ");
1242#endif
vlmfa67ddc2004-06-03 03:38:44 +00001243 yychar = YYLEX;
1244 }
1245
vlm6a02a8a2004-09-08 00:28:11 +00001246 /* Convert token to internal form (in yychar1) for indexing tables with */
vlmfa67ddc2004-06-03 03:38:44 +00001247
vlm6a02a8a2004-09-08 00:28:11 +00001248 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001249 {
1250 yychar1 = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001251 yychar = YYEOF; /* Don't call YYLEX any more */
vlmfa67ddc2004-06-03 03:38:44 +00001252
vlm6a02a8a2004-09-08 00:28:11 +00001253#if YYDEBUG != 0
1254 if (yydebug)
1255 fprintf(stderr, "Now at end of input.\n");
1256#endif
vlmfa67ddc2004-06-03 03:38:44 +00001257 }
1258 else
1259 {
vlm6a02a8a2004-09-08 00:28:11 +00001260 yychar1 = YYTRANSLATE(yychar);
vlmfa67ddc2004-06-03 03:38:44 +00001261
vlm6a02a8a2004-09-08 00:28:11 +00001262#if YYDEBUG != 0
1263 if (yydebug)
1264 {
1265 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1266 /* Give the individual parser a way to print the precise meaning
1267 of a token, for further debugging info. */
1268#ifdef YYPRINT
1269 YYPRINT (stderr, yychar, yylval);
1270#endif
1271 fprintf (stderr, ")\n");
1272 }
1273#endif
vlmfa67ddc2004-06-03 03:38:44 +00001274 }
1275
1276 yyn += yychar1;
vlm6a02a8a2004-09-08 00:28:11 +00001277 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001278 goto yydefault;
vlm6a02a8a2004-09-08 00:28:11 +00001279
vlmfa67ddc2004-06-03 03:38:44 +00001280 yyn = yytable[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001281
1282 /* yyn is what to do for this token type in this state.
1283 Negative => reduce, -yyn is rule number.
1284 Positive => shift, yyn is new state.
1285 New state is final state => don't bother to shift,
1286 just return success.
1287 0, or most negative number => error. */
1288
1289 if (yyn < 0)
vlmfa67ddc2004-06-03 03:38:44 +00001290 {
vlm6a02a8a2004-09-08 00:28:11 +00001291 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001292 goto yyerrlab;
1293 yyn = -yyn;
1294 goto yyreduce;
1295 }
vlm6a02a8a2004-09-08 00:28:11 +00001296 else if (yyn == 0)
1297 goto yyerrlab;
vlmfa67ddc2004-06-03 03:38:44 +00001298
1299 if (yyn == YYFINAL)
1300 YYACCEPT;
1301
1302 /* Shift the lookahead token. */
vlm6a02a8a2004-09-08 00:28:11 +00001303
1304#if YYDEBUG != 0
1305 if (yydebug)
1306 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1307#endif
vlmfa67ddc2004-06-03 03:38:44 +00001308
1309 /* Discard the token being shifted unless it is eof. */
1310 if (yychar != YYEOF)
1311 yychar = YYEMPTY;
1312
1313 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00001314#ifdef YYLSP_NEEDED
1315 *++yylsp = yylloc;
1316#endif
vlmfa67ddc2004-06-03 03:38:44 +00001317
vlm6a02a8a2004-09-08 00:28:11 +00001318 /* count tokens shifted since error; after three, turn off error status. */
1319 if (yyerrstatus) yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001320
1321 yystate = yyn;
1322 goto yynewstate;
1323
vlm6a02a8a2004-09-08 00:28:11 +00001324/* Do the default action for the current state. */
vlm80103492004-09-07 10:39:09 +00001325yydefault:
vlm6a02a8a2004-09-08 00:28:11 +00001326
vlmfa67ddc2004-06-03 03:38:44 +00001327 yyn = yydefact[yystate];
1328 if (yyn == 0)
1329 goto yyerrlab;
1330
vlm6a02a8a2004-09-08 00:28:11 +00001331/* Do a reduction. yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001332yyreduce:
1333 yylen = yyr2[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001334 if (yylen > 0)
1335 yyval = yyvsp[1-yylen]; /* implement default value of the action */
vlmfa67ddc2004-06-03 03:38:44 +00001336
vlm6a02a8a2004-09-08 00:28:11 +00001337#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00001338 if (yydebug)
1339 {
vlm6a02a8a2004-09-08 00:28:11 +00001340 int i;
vlmfa67ddc2004-06-03 03:38:44 +00001341
vlm6a02a8a2004-09-08 00:28:11 +00001342 fprintf (stderr, "Reducing via rule %d (line %d), ",
1343 yyn, yyrline[yyn]);
vlmfa67ddc2004-06-03 03:38:44 +00001344
1345 /* Print the symbols being reduced, and their result. */
vlm6a02a8a2004-09-08 00:28:11 +00001346 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1347 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1348 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
vlmfa67ddc2004-06-03 03:38:44 +00001349 }
1350#endif
vlm80103492004-09-07 10:39:09 +00001351
vlm6a02a8a2004-09-08 00:28:11 +00001352
1353 switch (yyn) {
1354
1355case 1:
vlm066dc102005-08-22 12:23:54 +00001356#line 322 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001357{
1358 *(void **)param = yyvsp[0].a_grammar;
1359 ;
1360 break;}
1361case 2:
vlm066dc102005-08-22 12:23:54 +00001362#line 328 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001363{
vlmfa67ddc2004-06-03 03:38:44 +00001364 yyval.a_grammar = asn1p_new();
1365 checkmem(yyval.a_grammar);
1366 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001367 ;
1368 break;}
1369case 3:
vlm066dc102005-08-22 12:23:54 +00001370#line 333 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001371{
vlmfa67ddc2004-06-03 03:38:44 +00001372 yyval.a_grammar = yyvsp[-1].a_grammar;
1373 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001374 ;
1375 break;}
1376case 4:
vlm066dc102005-08-22 12:23:54 +00001377#line 354 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001378{
vlmfa67ddc2004-06-03 03:38:44 +00001379
1380 if(yyvsp[-1].a_module) {
1381 yyval.a_module = yyvsp[-1].a_module;
1382 } else {
1383 /* There's a chance that a module is just plain empty */
1384 yyval.a_module = asn1p_module_new();
1385 }
1386 checkmem(yyval.a_module);
1387
vlm931aeed2005-08-12 10:09:10 +00001388 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00001389 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1390 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001391 ;
1392 break;}
1393case 5:
vlm066dc102005-08-22 12:23:54 +00001394#line 375 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001395{ yyval.a_oid = 0; ;
1396 break;}
1397case 6:
vlm066dc102005-08-22 12:23:54 +00001398#line 376 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001399{ yyval.a_oid = yyvsp[0].a_oid; ;
1400 break;}
1401case 7:
vlm066dc102005-08-22 12:23:54 +00001402#line 380 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001403{
vlmfa67ddc2004-06-03 03:38:44 +00001404 yyval.a_oid = yyvsp[-1].a_oid;
vlm6a02a8a2004-09-08 00:28:11 +00001405 ;
1406 break;}
1407case 8:
vlm066dc102005-08-22 12:23:54 +00001408#line 383 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001409{
vlmfa67ddc2004-06-03 03:38:44 +00001410 yyval.a_oid = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001411 ;
1412 break;}
1413case 9:
vlm066dc102005-08-22 12:23:54 +00001414#line 389 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001415{
vlmfa67ddc2004-06-03 03:38:44 +00001416 yyval.a_oid = asn1p_oid_new();
1417 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1418 if(yyvsp[0].a_oid_arc.name)
1419 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001420 ;
1421 break;}
1422case 10:
vlm066dc102005-08-22 12:23:54 +00001423#line 395 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001424{
vlmfa67ddc2004-06-03 03:38:44 +00001425 yyval.a_oid = yyvsp[-1].a_oid;
1426 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1427 if(yyvsp[0].a_oid_arc.name)
1428 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001429 ;
1430 break;}
1431case 11:
vlm066dc102005-08-22 12:23:54 +00001432#line 404 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001433{ /* iso */
vlmfa67ddc2004-06-03 03:38:44 +00001434 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1435 yyval.a_oid_arc.number = -1;
vlm6a02a8a2004-09-08 00:28:11 +00001436 ;
1437 break;}
1438case 12:
vlm066dc102005-08-22 12:23:54 +00001439#line 408 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001440{ /* iso(1) */
vlmfa67ddc2004-06-03 03:38:44 +00001441 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1442 yyval.a_oid_arc.number = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001443 ;
1444 break;}
1445case 13:
vlm066dc102005-08-22 12:23:54 +00001446#line 412 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001447{ /* 1 */
vlmfa67ddc2004-06-03 03:38:44 +00001448 yyval.a_oid_arc.name = 0;
1449 yyval.a_oid_arc.number = yyvsp[0].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001450 ;
1451 break;}
1452case 14:
vlm066dc102005-08-22 12:23:54 +00001453#line 422 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001454{ yyval.a_module_flags = MSF_NOFLAGS; ;
1455 break;}
1456case 15:
vlm066dc102005-08-22 12:23:54 +00001457#line 423 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001458{
vlmfa67ddc2004-06-03 03:38:44 +00001459 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001460 ;
1461 break;}
1462case 16:
vlm066dc102005-08-22 12:23:54 +00001463#line 432 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001464{
vlmfa67ddc2004-06-03 03:38:44 +00001465 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001466 ;
1467 break;}
1468case 17:
vlm066dc102005-08-22 12:23:54 +00001469#line 435 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001470{
vlmfa67ddc2004-06-03 03:38:44 +00001471 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001472 ;
1473 break;}
1474case 18:
vlm066dc102005-08-22 12:23:54 +00001475#line 444 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001476{
vlmfa67ddc2004-06-03 03:38:44 +00001477 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001478 ;
1479 break;}
1480case 19:
vlm066dc102005-08-22 12:23:54 +00001481#line 447 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001482{
vlmfa67ddc2004-06-03 03:38:44 +00001483 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001484 ;
1485 break;}
1486case 20:
vlm066dc102005-08-22 12:23:54 +00001487#line 450 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001488{
vlmfa67ddc2004-06-03 03:38:44 +00001489 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001490 ;
1491 break;}
1492case 21:
vlm066dc102005-08-22 12:23:54 +00001493#line 453 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001494{
vlmfa67ddc2004-06-03 03:38:44 +00001495 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
vlm6a02a8a2004-09-08 00:28:11 +00001496 ;
1497 break;}
1498case 22:
vlm066dc102005-08-22 12:23:54 +00001499#line 457 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001500{
vlm9283dbe2004-08-18 04:59:12 +00001501 /* X.680Amd1 specifies TAG and XER */
1502 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1503 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1504 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1505 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1506 } else {
1507 fprintf(stderr,
1508 "WARNING: %s INSTRUCTIONS at line %d: "
1509 "Unrecognized encoding reference\n",
1510 yyvsp[-1].tv_str, yylineno);
1511 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1512 }
1513 free(yyvsp[-1].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00001514 ;
1515 break;}
1516case 23:
vlm066dc102005-08-22 12:23:54 +00001517#line 478 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001518{ yyval.a_module = 0; ;
1519 break;}
1520case 24:
vlm066dc102005-08-22 12:23:54 +00001521#line 479 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001522{
vlmfa67ddc2004-06-03 03:38:44 +00001523 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001524 ;
1525 break;}
1526case 25:
vlm066dc102005-08-22 12:23:54 +00001527#line 488 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001528{
vlm9283dbe2004-08-18 04:59:12 +00001529 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001530 ;
1531 break;}
1532case 26:
vlm066dc102005-08-22 12:23:54 +00001533#line 491 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001534{
vlmfa67ddc2004-06-03 03:38:44 +00001535 yyval.a_module = yyvsp[-1].a_module;
1536
vlm9283dbe2004-08-18 04:59:12 +00001537 /* Behave well when one of them is skipped. */
1538 if(!(yyvsp[-1].a_module)) {
1539 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1540 break;
1541 }
1542
vlmfa67ddc2004-06-03 03:38:44 +00001543#ifdef MY_IMPORT
1544#error MY_IMPORT DEFINED ELSEWHERE!
1545#endif
1546#define MY_IMPORT(foo,field) do { \
vlm97ed7152004-08-13 12:31:09 +00001547 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
vlmfa67ddc2004-06-03 03:38:44 +00001548 TQ_ADD(&(yyval.a_module->foo), \
1549 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1550 field); \
vlm97ed7152004-08-13 12:31:09 +00001551 } \
1552 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1553 } while(0)
vlmfa67ddc2004-06-03 03:38:44 +00001554
1555 MY_IMPORT(imports, xp_next);
1556 MY_IMPORT(exports, xp_next);
1557 MY_IMPORT(members, next);
1558#undef MY_IMPORT
1559
vlm6a02a8a2004-09-08 00:28:11 +00001560 ;
1561 break;}
1562case 27:
vlm066dc102005-08-22 12:23:54 +00001563#line 524 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001564{
vlmfa67ddc2004-06-03 03:38:44 +00001565 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001566 ;
1567 break;}
1568case 28:
vlm066dc102005-08-22 12:23:54 +00001569#line 527 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001570{
vlmfa67ddc2004-06-03 03:38:44 +00001571 yyval.a_module = asn1p_module_new();
1572 checkmem(yyval.a_module);
1573 if(yyvsp[0].a_xports) {
1574 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1575 } else {
1576 /* "EXPORTS ALL;" ? */
1577 }
vlm6a02a8a2004-09-08 00:28:11 +00001578 ;
1579 break;}
1580case 29:
vlm066dc102005-08-22 12:23:54 +00001581#line 536 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001582{
vlm9283dbe2004-08-18 04:59:12 +00001583 yyval.a_module = asn1p_module_new();
1584 checkmem(yyval.a_module);
1585 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1586 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1587 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001588 ;
1589 break;}
vlm931aeed2005-08-12 10:09:10 +00001590case 30:
vlm066dc102005-08-22 12:23:54 +00001591#line 543 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001592{
1593 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);
1598 ;
1599 break;}
vlm6a02a8a2004-09-08 00:28:11 +00001600case 31:
vlm066dc102005-08-22 12:23:54 +00001601#line 556 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001602{
vlm9283dbe2004-08-18 04:59:12 +00001603 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);
vlm6a02a8a2004-09-08 00:28:11 +00001608 ;
1609 break;}
1610case 32:
vlm066dc102005-08-22 12:23:54 +00001611#line 564 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001612{ asn1p_lexer_hack_push_encoding_control(); ;
1613 break;}
1614case 33:
vlm066dc102005-08-22 12:23:54 +00001615#line 565 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001616{
vlm9283dbe2004-08-18 04:59:12 +00001617 fprintf(stderr,
1618 "WARNING: ENCODING-CONTROL %s "
1619 "specification at line %d ignored\n",
1620 yyvsp[-1].tv_str, yylineno);
1621 free(yyvsp[-1].tv_str);
1622 yyval.a_module = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001623 ;
1624 break;}
1625case 34:
vlm066dc102005-08-22 12:23:54 +00001626#line 577 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001627{
vlmfa67ddc2004-06-03 03:38:44 +00001628 return yyerror(
1629 "Attempt to redefine a standard basic type, "
1630 "use -ftypesXY to switch back "
1631 "to older version of ASN.1 standard");
vlm6a02a8a2004-09-08 00:28:11 +00001632 ;
1633 break;}
1634case 35:
vlm066dc102005-08-22 12:23:54 +00001635#line 591 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001636{
vlm931aeed2005-08-12 10:09:10 +00001637 if(!saved_aid && 0)
1638 return yyerror("Unterminated IMPORTS FROM, "
1639 "expected semicolon ';'");
1640 saved_aid = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001641 yyval.a_module = yyvsp[-1].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001642 ;
1643 break;}
1644case 36:
vlm066dc102005-08-22 12:23:54 +00001645#line 601 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001646{
vlmfa67ddc2004-06-03 03:38:44 +00001647 return yyerror("Empty IMPORTS list");
vlm6a02a8a2004-09-08 00:28:11 +00001648 ;
1649 break;}
1650case 37:
vlm066dc102005-08-22 12:23:54 +00001651#line 607 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001652{
vlmfa67ddc2004-06-03 03:38:44 +00001653 yyval.a_module = asn1p_module_new();
1654 checkmem(yyval.a_module);
1655 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001656 ;
1657 break;}
1658case 38:
vlm066dc102005-08-22 12:23:54 +00001659#line 612 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001660{
vlmfa67ddc2004-06-03 03:38:44 +00001661 yyval.a_module = yyvsp[-1].a_module;
1662 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001663 ;
1664 break;}
1665case 39:
vlm066dc102005-08-22 12:23:54 +00001666#line 619 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001667{ memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
1668 break;}
1669case 40:
vlm066dc102005-08-22 12:23:54 +00001670#line 620 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001671{ yyval.a_aid.oid = yyvsp[0].a_oid; ;
1672 break;}
1673case 41:
vlm066dc102005-08-22 12:23:54 +00001674#line 624 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001675{
vlmfa67ddc2004-06-03 03:38:44 +00001676 yyval.a_xports = yyvsp[-3].a_xports;
vlm931aeed2005-08-12 10:09:10 +00001677 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
1678 yyval.a_xports->identifier = yyvsp[0].a_aid;
1679 /* This stupid thing is used for look-back hack. */
1680 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
vlmfa67ddc2004-06-03 03:38:44 +00001681 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001682 ;
1683 break;}
vlm931aeed2005-08-12 10:09:10 +00001684case 42:
vlm066dc102005-08-22 12:23:54 +00001685#line 635 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001686{
vlmfa67ddc2004-06-03 03:38:44 +00001687 yyval.a_xports = asn1p_xports_new();
1688 checkmem(yyval.a_xports);
1689 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001690 ;
1691 break;}
vlm931aeed2005-08-12 10:09:10 +00001692case 43:
vlm066dc102005-08-22 12:23:54 +00001693#line 640 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001694{
vlmfa67ddc2004-06-03 03:38:44 +00001695 yyval.a_xports = yyvsp[-2].a_xports;
1696 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001697 ;
1698 break;}
vlm0aa86902004-10-12 23:26:53 +00001699case 44:
vlm066dc102005-08-22 12:23:54 +00001700#line 647 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001701{
vlmfa67ddc2004-06-03 03:38:44 +00001702 yyval.a_expr = asn1p_expr_new(yylineno);
1703 checkmem(yyval.a_expr);
1704 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1705 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm6a02a8a2004-09-08 00:28:11 +00001706 ;
1707 break;}
vlm0aa86902004-10-12 23:26:53 +00001708case 45:
vlm066dc102005-08-22 12:23:54 +00001709#line 653 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001710{ /* Completely equivalent to above */
1711 yyval.a_expr = asn1p_expr_new(yylineno);
1712 checkmem(yyval.a_expr);
1713 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1714 yyval.a_expr->expr_type = A1TC_REFERENCE;
1715 ;
1716 break;}
1717case 46:
vlm066dc102005-08-22 12:23:54 +00001718#line 659 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001719{
1720 yyval.a_expr = asn1p_expr_new(yylineno);
1721 checkmem(yyval.a_expr);
1722 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1723 yyval.a_expr->expr_type = A1TC_REFERENCE;
1724 ;
1725 break;}
1726case 47:
vlm066dc102005-08-22 12:23:54 +00001727#line 668 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001728{
vlmfa67ddc2004-06-03 03:38:44 +00001729 yyval.a_xports = yyvsp[-1].a_xports;
vlm6a02a8a2004-09-08 00:28:11 +00001730 ;
1731 break;}
vlm931aeed2005-08-12 10:09:10 +00001732case 48:
vlm066dc102005-08-22 12:23:54 +00001733#line 671 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001734{
vlmfa67ddc2004-06-03 03:38:44 +00001735 yyval.a_xports = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001736 ;
1737 break;}
vlm931aeed2005-08-12 10:09:10 +00001738case 49:
vlm066dc102005-08-22 12:23:54 +00001739#line 674 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001740{
vlmfa67ddc2004-06-03 03:38:44 +00001741 /* Empty EXPORTS clause effectively prohibits export. */
1742 yyval.a_xports = asn1p_xports_new();
1743 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001744 ;
1745 break;}
vlm931aeed2005-08-12 10:09:10 +00001746case 50:
vlm066dc102005-08-22 12:23:54 +00001747#line 682 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001748{
vlmfa67ddc2004-06-03 03:38:44 +00001749 yyval.a_xports = asn1p_xports_new();
1750 assert(yyval.a_xports);
1751 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001752 ;
1753 break;}
vlm931aeed2005-08-12 10:09:10 +00001754case 51:
vlm066dc102005-08-22 12:23:54 +00001755#line 687 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001756{
vlmfa67ddc2004-06-03 03:38:44 +00001757 yyval.a_xports = yyvsp[-2].a_xports;
1758 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001759 ;
1760 break;}
vlm0aa86902004-10-12 23:26:53 +00001761case 52:
vlm066dc102005-08-22 12:23:54 +00001762#line 694 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001763{
1764 yyval.a_expr = asn1p_expr_new(yylineno);
1765 checkmem(yyval.a_expr);
1766 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1767 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1768 ;
1769 break;}
1770case 53:
vlm066dc102005-08-22 12:23:54 +00001771#line 700 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001772{
1773 yyval.a_expr = asn1p_expr_new(yylineno);
1774 checkmem(yyval.a_expr);
1775 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1776 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1777 ;
vlm7388db02005-03-31 21:48:13 +00001778 break;}
1779case 54:
vlm066dc102005-08-22 12:23:54 +00001780#line 706 "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[0].tv_str;
1785 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1786 ;
1787 break;}
1788case 55:
vlm066dc102005-08-22 12:23:54 +00001789#line 717 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001790{ asn1p_lexer_hack_push_opaque_state(); ;
1791 break;}
1792case 56:
vlm066dc102005-08-22 12:23:54 +00001793#line 717 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001794{
vlmfa67ddc2004-06-03 03:38:44 +00001795 yyval.a_expr = yyvsp[-4].a_expr;
1796 assert(yyval.a_expr->Identifier == 0);
1797 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1798 yyval.a_expr->meta_type = AMT_VALUESET;
vlm7388db02005-03-31 21:48:13 +00001799 // take care of ValueSet body
vlm6a02a8a2004-09-08 00:28:11 +00001800 ;
1801 break;}
vlm931aeed2005-08-12 10:09:10 +00001802case 57:
vlm066dc102005-08-22 12:23:54 +00001803#line 727 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001804{
vlmfa67ddc2004-06-03 03:38:44 +00001805 yyval.a_expr = asn1p_expr_new(yylineno);
1806 checkmem(yyval.a_expr);
1807 yyval.a_expr->reference = yyvsp[0].a_ref;
1808 yyval.a_expr->expr_type = A1TC_REFERENCE;
1809 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00001810 ;
1811 break;}
vlm931aeed2005-08-12 10:09:10 +00001812case 58:
vlm066dc102005-08-22 12:23:54 +00001813#line 734 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001814{
vlmfa67ddc2004-06-03 03:38:44 +00001815 yyval.a_expr = asn1p_expr_new(yylineno);
1816 checkmem(yyval.a_expr);
1817 yyval.a_expr->expr_type = yyvsp[0].a_type;
1818 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001819 ;
1820 break;}
vlm931aeed2005-08-12 10:09:10 +00001821case 59:
vlm066dc102005-08-22 12:23:54 +00001822#line 752 "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->Identifier = yyvsp[-3].tv_str;
1827 yyval.a_expr->tag = yyvsp[-1].a_tag;
1828 yyval.a_expr->expr_type = A1TC_TYPEID;
1829 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001830 ;
1831 break;}
vlm931aeed2005-08-12 10:09:10 +00001832case 60:
vlm066dc102005-08-22 12:23:54 +00001833#line 760 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001834{
vlmfa67ddc2004-06-03 03:38:44 +00001835 yyval.a_expr = yyvsp[0].a_expr;
vlmfce48a42004-09-14 02:36:39 +00001836 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00001837 assert(yyval.a_expr->expr_type);
1838 assert(yyval.a_expr->meta_type);
vlm6a02a8a2004-09-08 00:28:11 +00001839 ;
1840 break;}
vlm931aeed2005-08-12 10:09:10 +00001841case 61:
vlm066dc102005-08-22 12:23:54 +00001842#line 766 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001843{
vlmfa67ddc2004-06-03 03:38:44 +00001844 yyval.a_expr = yyvsp[0].a_expr;
1845 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1846 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1847 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm6a02a8a2004-09-08 00:28:11 +00001848 ;
1849 break;}
vlm931aeed2005-08-12 10:09:10 +00001850case 62:
vlm066dc102005-08-22 12:23:54 +00001851#line 782 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001852{
vlmfa67ddc2004-06-03 03:38:44 +00001853 yyval.a_expr = yyvsp[0].a_expr;
1854 assert(yyval.a_expr->Identifier == 0);
1855 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1856 yyval.a_expr->params = yyvsp[-3].a_plist;
1857 yyval.a_expr->meta_type = AMT_PARAMTYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001858 ;
1859 break;}
vlm931aeed2005-08-12 10:09:10 +00001860case 63:
vlm066dc102005-08-22 12:23:54 +00001861#line 792 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001862{
vlmfa67ddc2004-06-03 03:38:44 +00001863 int ret;
1864 yyval.a_plist = asn1p_paramlist_new(yylineno);
1865 checkmem(yyval.a_plist);
1866 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1867 checkmem(ret == 0);
1868 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1869 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001870 ;
1871 break;}
vlm931aeed2005-08-12 10:09:10 +00001872case 64:
vlm066dc102005-08-22 12:23:54 +00001873#line 801 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001874{
vlmfa67ddc2004-06-03 03:38:44 +00001875 int ret;
1876 yyval.a_plist = yyvsp[-2].a_plist;
1877 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1878 checkmem(ret == 0);
1879 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1880 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001881 ;
1882 break;}
vlm931aeed2005-08-12 10:09:10 +00001883case 65:
vlm066dc102005-08-22 12:23:54 +00001884#line 812 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001885{
vlmfa67ddc2004-06-03 03:38:44 +00001886 yyval.a_parg.governor = NULL;
1887 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001888 ;
1889 break;}
vlm7388db02005-03-31 21:48:13 +00001890case 66:
vlm066dc102005-08-22 12:23:54 +00001891#line 816 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001892{
1893 int ret;
1894 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1895 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1896 checkmem(ret == 0);
1897 yyval.a_parg.argument = yyvsp[0].tv_str;
1898 ;
1899 break;}
1900case 67:
vlm066dc102005-08-22 12:23:54 +00001901#line 823 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001902{
1903 int ret;
1904 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1905 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1906 checkmem(ret == 0);
1907 yyval.a_parg.argument = yyvsp[0].tv_str;
1908 ;
1909 break;}
1910case 68:
vlm066dc102005-08-22 12:23:54 +00001911#line 830 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00001912{
1913 int ret;
1914 yyval.a_parg.governor = asn1p_ref_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00001915 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1916 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1917 checkmem(ret == 0);
1918 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001919 ;
1920 break;}
vlm931aeed2005-08-12 10:09:10 +00001921case 69:
vlm066dc102005-08-22 12:23:54 +00001922#line 841 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001923{
vlmfa67ddc2004-06-03 03:38:44 +00001924 yyval.a_expr = asn1p_expr_new(yylineno);
1925 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001926 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1927 ;
1928 break;}
vlm931aeed2005-08-12 10:09:10 +00001929case 70:
vlm066dc102005-08-22 12:23:54 +00001930#line 846 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001931{
vlmfa67ddc2004-06-03 03:38:44 +00001932 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001933 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1934 ;
1935 break;}
vlm931aeed2005-08-12 10:09:10 +00001936case 71:
vlm066dc102005-08-22 12:23:54 +00001937#line 853 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001938{
vlmfa67ddc2004-06-03 03:38:44 +00001939 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001940 ;
1941 break;}
vlm931aeed2005-08-12 10:09:10 +00001942case 72:
vlm066dc102005-08-22 12:23:54 +00001943#line 856 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001944{
vlmfa67ddc2004-06-03 03:38:44 +00001945 yyval.a_expr = asn1p_expr_new(yylineno);
1946 checkmem(yyval.a_expr);
1947 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1948 yyval.a_expr->expr_type = A1TC_REFERENCE;
1949 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00001950 ;
1951 break;}
vlm931aeed2005-08-12 10:09:10 +00001952case 73:
vlm066dc102005-08-22 12:23:54 +00001953#line 880 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001954{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1955 break;}
vlm931aeed2005-08-12 10:09:10 +00001956case 74:
vlm066dc102005-08-22 12:23:54 +00001957#line 881 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001958{ yyval.a_expr = yyvsp[0].a_expr; ;
1959 break;}
vlm931aeed2005-08-12 10:09:10 +00001960case 75:
vlm066dc102005-08-22 12:23:54 +00001961#line 884 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001962{
vlmfa67ddc2004-06-03 03:38:44 +00001963 yyval.a_expr = asn1p_expr_new(yylineno);
1964 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001965 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1966 ;
1967 break;}
vlm931aeed2005-08-12 10:09:10 +00001968case 76:
vlm066dc102005-08-22 12:23:54 +00001969#line 889 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001970{
vlmfa67ddc2004-06-03 03:38:44 +00001971 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001972 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1973 ;
1974 break;}
vlm931aeed2005-08-12 10:09:10 +00001975case 77:
vlm066dc102005-08-22 12:23:54 +00001976#line 896 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001977{
vlmec8f6812004-08-22 03:19:54 +00001978 yyval.a_expr = yyvsp[-1].a_expr;
1979 assert(yyval.a_expr->Identifier == 0);
vlmfce48a42004-09-14 02:36:39 +00001980 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmec8f6812004-08-22 03:19:54 +00001981 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00001982 ;
1983 break;}
vlm931aeed2005-08-12 10:09:10 +00001984case 78:
vlm066dc102005-08-22 12:23:54 +00001985#line 902 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001986{
vlmec8f6812004-08-22 03:19:54 +00001987 yyval.a_expr = asn1p_expr_new(yylineno);
1988 checkmem(yyval.a_expr);
1989 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1990 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
vlm6a02a8a2004-09-08 00:28:11 +00001991 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1992 ;
1993 break;}
vlm931aeed2005-08-12 10:09:10 +00001994case 79:
vlm066dc102005-08-22 12:23:54 +00001995#line 909 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001996{
vlmec8f6812004-08-22 03:19:54 +00001997 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001998 ;
1999 break;}
vlm931aeed2005-08-12 10:09:10 +00002000case 80:
vlm066dc102005-08-22 12:23:54 +00002001#line 912 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002002{
2003 yyval.a_expr = yyvsp[-1].a_expr;
2004 yyval.a_expr->marker = yyvsp[0].a_marker;
2005 _fixup_anonymous_identifier(yyval.a_expr);
2006 ;
2007 break;}
2008case 81:
vlm066dc102005-08-22 12:23:54 +00002009#line 920 "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;}
vlm5d89c3d2005-08-13 09:07:11 +00002016case 82:
vlm066dc102005-08-22 12:23:54 +00002017#line 925 "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;}
vlm931aeed2005-08-12 10:09:10 +00002023case 83:
vlm066dc102005-08-22 12:23:54 +00002024#line 932 "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;}
vlm931aeed2005-08-12 10:09:10 +00002031case 84:
vlm066dc102005-08-22 12:23:54 +00002032#line 937 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002033{
2034 yyval.a_expr = yyvsp[0].a_expr;
2035 ;
2036 break;}
2037case 85:
vlm066dc102005-08-22 12:23:54 +00002038#line 940 "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;}
2044case 86:
vlm066dc102005-08-22 12:23:54 +00002045#line 947 "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);
2051 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm6a02a8a2004-09-08 00:28:11 +00002052 ;
2053 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002054case 87:
vlm066dc102005-08-22 12:23:54 +00002055#line 957 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002056{ yyval.a_int = 0; ;
2057 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002058case 88:
vlm066dc102005-08-22 12:23:54 +00002059#line 958 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002060{ yyval.a_int = 1; ;
2061 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002062case 89:
vlm066dc102005-08-22 12:23:54 +00002063#line 962 "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;
2068 yyval.a_expr->meta_type = AMT_OBJECT;
vlm6a02a8a2004-09-08 00:28:11 +00002069 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2070 ;
2071 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002072case 90:
vlm066dc102005-08-22 12:23:54 +00002073#line 969 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002074{
vlmfa67ddc2004-06-03 03:38:44 +00002075 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 91:
vlm066dc102005-08-22 12:23:54 +00002080#line 976 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002081{
vlmfa67ddc2004-06-03 03:38:44 +00002082 yyval.a_expr = asn1p_expr_new(yylineno);
2083 checkmem(yyval.a_expr);
2084 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2085 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2086 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
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 92:
vlm066dc102005-08-22 12:23:54 +00002091#line 984 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002092{
vlmec8f6812004-08-22 03:19:54 +00002093 yyval.a_expr = yyvsp[-2].a_expr;
2094 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
vlmbde35d42004-11-24 17:43:29 +00002095 yyval.a_expr->marker = yyvsp[0].a_marker;
2096 yyval.a_expr->unique = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00002097 ;
2098 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002099case 93:
vlm066dc102005-08-22 12:23:54 +00002100#line 990 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002101{
vlmfa67ddc2004-06-03 03:38:44 +00002102 int ret;
2103 yyval.a_expr = asn1p_expr_new(yylineno);
2104 checkmem(yyval.a_expr);
2105 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2106 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2107 checkmem(yyval.a_expr->reference);
2108 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2109 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2110 checkmem(ret == 0);
2111 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2112 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
vlmbde35d42004-11-24 17:43:29 +00002113 yyval.a_expr->marker = yyvsp[0].a_marker;
2114 yyval.a_expr->unique = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00002115 ;
2116 break;}
vlm931aeed2005-08-12 10:09:10 +00002117case 94:
vlm066dc102005-08-22 12:23:54 +00002118#line 1008 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002119{ yyval.a_wsynt = 0; ;
vlm6a02a8a2004-09-08 00:28:11 +00002120 break;}
vlm931aeed2005-08-12 10:09:10 +00002121case 95:
vlm066dc102005-08-22 12:23:54 +00002122#line 1009 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002123{
vlm5d89c3d2005-08-13 09:07:11 +00002124 yyval.a_wsynt = yyvsp[0].a_wsynt;
vlm6a02a8a2004-09-08 00:28:11 +00002125 ;
2126 break;}
vlm931aeed2005-08-12 10:09:10 +00002127case 96:
vlm066dc102005-08-22 12:23:54 +00002128#line 1016 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002129{ asn1p_lexer_hack_enable_with_syntax(); ;
2130 break;}
2131case 97:
vlm066dc102005-08-22 12:23:54 +00002132#line 1018 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002133{
2134 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2135 ;
2136 break;}
2137case 98:
vlm066dc102005-08-22 12:23:54 +00002138#line 1024 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002139{
vlmfa67ddc2004-06-03 03:38:44 +00002140 yyval.a_wsynt = asn1p_wsyntx_new();
2141 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002142 ;
2143 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002144case 99:
vlm066dc102005-08-22 12:23:54 +00002145#line 1028 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002146{
vlmfa67ddc2004-06-03 03:38:44 +00002147 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2148 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002149 ;
2150 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002151case 100:
vlm066dc102005-08-22 12:23:54 +00002152#line 1035 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002153{
vlmfa67ddc2004-06-03 03:38:44 +00002154 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002155 ;
2156 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002157case 101:
vlm066dc102005-08-22 12:23:54 +00002158#line 1038 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002159{
vlmfa67ddc2004-06-03 03:38:44 +00002160 asn1p_ref_t *ref;
2161 int ret;
2162 ref = asn1p_ref_new(yylineno);
2163 checkmem(ref);
2164 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2165 checkmem(ret == 0);
2166 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002167 ;
2168 break;}
vlm931aeed2005-08-12 10:09:10 +00002169case 102:
vlm066dc102005-08-22 12:23:54 +00002170#line 1050 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00002171{
2172 yyval.a_expr = asn1p_expr_new(yylineno);
2173 checkmem(yyval.a_expr);
2174 yyval.a_expr->Identifier = strdup("...");
vlm931aeed2005-08-12 10:09:10 +00002175 checkmem(yyval.a_expr->Identifier);
2176 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2177 yyval.a_expr->meta_type = AMT_TYPE;
2178 ;
2179 break;}
2180case 103:
vlm066dc102005-08-22 12:23:54 +00002181#line 1058 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002182{
2183 yyval.a_expr = asn1p_expr_new(yylineno);
2184 checkmem(yyval.a_expr);
2185 yyval.a_expr->Identifier = strdup("...");
2186 checkmem(yyval.a_expr->Identifier);
2187 yyval.a_expr->value = yyvsp[0].a_value;
2188 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2189 yyval.a_expr->meta_type = AMT_TYPE;
2190 ;
2191 break;}
2192case 104:
vlm066dc102005-08-22 12:23:54 +00002193#line 1067 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002194{
2195 yyval.a_expr = asn1p_expr_new(yylineno);
2196 checkmem(yyval.a_expr);
2197 yyval.a_expr->Identifier = strdup("...");
2198 yyval.a_expr->value = yyvsp[0].a_value;
2199 checkmem(yyval.a_expr->Identifier);
2200 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2201 yyval.a_expr->meta_type = AMT_TYPE;
2202 ;
2203 break;}
2204case 105:
vlm066dc102005-08-22 12:23:54 +00002205#line 1079 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002206{
vlmec8f6812004-08-22 03:19:54 +00002207 yyval.a_expr = yyvsp[-1].a_expr;
vlmfce48a42004-09-14 02:36:39 +00002208 yyval.a_expr->tag = yyvsp[-2].a_tag;
vlmec8f6812004-08-22 03:19:54 +00002209 /*
2210 * Outer constraint for SEQUENCE OF and SET OF applies
2211 * to the inner type.
2212 */
2213 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2214 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2215 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2216 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2217 } else {
2218 if(yyval.a_expr->constraints) {
vlmfce48a42004-09-14 02:36:39 +00002219 assert(!yyvsp[-1].a_expr);
vlmec8f6812004-08-22 03:19:54 +00002220 } else {
2221 yyval.a_expr->constraints = yyvsp[0].a_constr;
2222 }
2223 }
vlm066dc102005-08-22 12:23:54 +00002224 asn1p_last_type = yyval.a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002225 ;
2226 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002227case 106:
vlm066dc102005-08-22 12:23:54 +00002228#line 1102 "asn1p_y.y"
2229{apply_nonstd_mods();;
2230 break;}
2231case 107:
2232#line 1102 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002233{
vlm5f0128b2004-08-20 13:25:29 +00002234 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002235 ;
2236 break;}
vlm066dc102005-08-22 12:23:54 +00002237case 108:
2238#line 1107 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002239{
vlm066dc102005-08-22 12:23:54 +00002240 yyval.a_expr = yyvsp[0].a_expr;
2241 ;
2242 break;}
2243case 109:
2244#line 1110 "asn1p_y.y"
2245{apply_nonstd_mods();;
2246 break;}
2247case 110:
2248#line 1110 "asn1p_y.y"
2249{
2250 yyval.a_expr = yyvsp[-2].a_expr;
vlm5e2c4b92005-03-20 11:12:40 +00002251 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2252 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
vlmfa67ddc2004-06-03 03:38:44 +00002253 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002254 ;
2255 break;}
vlm066dc102005-08-22 12:23:54 +00002256case 111:
2257#line 1116 "asn1p_y.y"
2258{apply_nonstd_mods();;
2259 break;}
2260case 112:
2261#line 1116 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002262{
vlm066dc102005-08-22 12:23:54 +00002263 yyval.a_expr = yyvsp[-2].a_expr;
vlmec8f6812004-08-22 03:19:54 +00002264 assert(yyval.a_expr->expr_type == A1TC_INVALID);
vlm5e2c4b92005-03-20 11:12:40 +00002265 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
vlmec8f6812004-08-22 03:19:54 +00002266 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002267 ;
2268 break;}
vlm066dc102005-08-22 12:23:54 +00002269case 113:
2270#line 1122 "asn1p_y.y"
2271{apply_nonstd_mods();;
2272 break;}
2273case 114:
2274#line 1122 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002275{
vlm066dc102005-08-22 12:23:54 +00002276 yyval.a_expr = yyvsp[-2].a_expr;
vlmec8f6812004-08-22 03:19:54 +00002277 assert(yyval.a_expr->expr_type == A1TC_INVALID);
vlm5e2c4b92005-03-20 11:12:40 +00002278 yyval.a_expr->expr_type = ASN_CONSTR_SET;
vlmec8f6812004-08-22 03:19:54 +00002279 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002280 ;
2281 break;}
vlm066dc102005-08-22 12:23:54 +00002282case 115:
2283#line 1128 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002284{
vlm39e5ed72004-09-05 10:40:41 +00002285 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002286 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002287 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002288 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2289 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002290 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002291 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002292 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2293 ;
2294 break;}
vlm066dc102005-08-22 12:23:54 +00002295case 116:
2296#line 1138 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002297{
vlm39e5ed72004-09-05 10:40:41 +00002298 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002299 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002300 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002301 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2302 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002303 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002304 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002305 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2306 ;
2307 break;}
vlm066dc102005-08-22 12:23:54 +00002308case 117:
2309#line 1148 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002310{
vlm39e5ed72004-09-05 10:40:41 +00002311 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002312 checkmem(yyval.a_expr);
vlm044f7442004-09-04 04:49:21 +00002313 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002314 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002315 ;
2316 break;}
vlm066dc102005-08-22 12:23:54 +00002317case 118:
2318#line 1154 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002319{
vlmec8f6812004-08-22 03:19:54 +00002320 int ret;
vlm39e5ed72004-09-05 10:40:41 +00002321 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002322 checkmem(yyval.a_expr);
2323 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2324 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2325 yyvsp[0].tv_str, RLT_lowercase);
2326 checkmem(ret == 0);
vlm044f7442004-09-04 04:49:21 +00002327 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002328 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002329 ;
2330 break;}
vlm066dc102005-08-22 12:23:54 +00002331case 119:
2332#line 1168 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002333{
vlmfa67ddc2004-06-03 03:38:44 +00002334 int ret;
2335 yyval.a_expr = yyvsp[-1].a_expr;
2336 assert(yyval.a_expr->expr_type == 0);
2337 assert(yyval.a_expr->meta_type == 0);
2338 assert(yyval.a_expr->reference == 0);
2339 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2340 checkmem(yyval.a_expr->reference);
2341 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2342 checkmem(ret == 0);
2343 free(yyvsp[-3].tv_str);
2344 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2345 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002346 ;
2347 break;}
vlm066dc102005-08-22 12:23:54 +00002348case 120:
2349#line 1192 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002350{
vlmfa67ddc2004-06-03 03:38:44 +00002351 yyval.a_expr = asn1p_expr_new(yylineno);
2352 checkmem(yyval.a_expr);
2353 yyval.a_expr->reference = yyvsp[0].a_ref;
2354 yyval.a_expr->expr_type = A1TC_REFERENCE;
2355 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00002356 ;
2357 break;}
vlm066dc102005-08-22 12:23:54 +00002358case 121:
2359#line 1199 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002360{
vlmfa67ddc2004-06-03 03:38:44 +00002361 yyval.a_expr = asn1p_expr_new(yylineno);
2362 checkmem(yyval.a_expr);
2363 yyval.a_expr->reference = yyvsp[0].a_ref;
2364 yyval.a_expr->expr_type = A1TC_INSTANCE;
2365 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002366 ;
2367 break;}
vlm066dc102005-08-22 12:23:54 +00002368case 122:
2369#line 1214 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002370{
vlmfa67ddc2004-06-03 03:38:44 +00002371 int ret;
2372 yyval.a_ref = asn1p_ref_new(yylineno);
2373 checkmem(yyval.a_ref);
2374 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2375 checkmem(ret == 0);
2376 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002377 ;
2378 break;}
vlm066dc102005-08-22 12:23:54 +00002379case 123:
2380#line 1222 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002381{
2382 int ret;
2383 yyval.a_ref = asn1p_ref_new(yylineno);
2384 checkmem(yyval.a_ref);
2385 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2386 checkmem(ret == 0);
2387 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2388 checkmem(ret == 0);
2389 free(yyvsp[-2].tv_str);
2390 ;
2391 break;}
vlm066dc102005-08-22 12:23:54 +00002392case 124:
2393#line 1232 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002394{
2395 int ret;
2396 yyval.a_ref = asn1p_ref_new(yylineno);
2397 checkmem(yyval.a_ref);
2398 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2399 checkmem(ret == 0);
2400 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2401 checkmem(ret == 0);
2402 free(yyvsp[-2].tv_str);
2403 ;
2404 break;}
vlm066dc102005-08-22 12:23:54 +00002405case 125:
2406#line 1242 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002407{
vlmfa67ddc2004-06-03 03:38:44 +00002408 int ret;
2409 yyval.a_ref = asn1p_ref_new(yylineno);
2410 checkmem(yyval.a_ref);
vlmc94e28f2004-09-15 11:59:51 +00002411 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2412 checkmem(ret == 0);
2413 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2414 checkmem(ret == 0);
2415 free(yyvsp[-2].tv_str);
2416 ;
2417 break;}
vlm066dc102005-08-22 12:23:54 +00002418case 126:
2419#line 1252 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002420{
2421 int ret;
2422 yyval.a_ref = asn1p_ref_new(yylineno);
2423 checkmem(yyval.a_ref);
vlmfa67ddc2004-06-03 03:38:44 +00002424 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2425 free(yyvsp[0].tv_str);
2426 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002427 ;
2428 break;}
vlm066dc102005-08-22 12:23:54 +00002429case 127:
2430#line 1260 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002431{
vlmfa67ddc2004-06-03 03:38:44 +00002432 int ret;
2433 yyval.a_ref = yyvsp[0].a_ref;
2434 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2435 free(yyvsp[-2].tv_str);
2436 checkmem(ret == 0);
2437 /*
2438 * Move the last element infront.
2439 */
2440 {
2441 struct asn1p_ref_component_s tmp_comp;
2442 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2443 memmove(&yyval.a_ref->components[1],
2444 &yyval.a_ref->components[0],
2445 sizeof(yyval.a_ref->components[0])
2446 * (yyval.a_ref->comp_count - 1));
2447 yyval.a_ref->components[0] = tmp_comp;
2448 }
vlm6a02a8a2004-09-08 00:28:11 +00002449 ;
2450 break;}
vlm066dc102005-08-22 12:23:54 +00002451case 128:
2452#line 1282 "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);
2457 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2458 free(yyvsp[0].a_refcomp.name);
2459 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002460 ;
2461 break;}
vlm066dc102005-08-22 12:23:54 +00002462case 129:
2463#line 1290 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002464{
vlmfa67ddc2004-06-03 03:38:44 +00002465 int ret;
2466 yyval.a_ref = yyvsp[-2].a_ref;
2467 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2468 free(yyvsp[0].a_refcomp.name);
2469 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002470 ;
2471 break;}
vlm066dc102005-08-22 12:23:54 +00002472case 132:
2473#line 1304 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002474{
vlmfa67ddc2004-06-03 03:38:44 +00002475 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2476 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002477 ;
2478 break;}
vlm066dc102005-08-22 12:23:54 +00002479case 133:
2480#line 1309 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002481{
vlmfa67ddc2004-06-03 03:38:44 +00002482 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2483 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002484 ;
2485 break;}
vlm066dc102005-08-22 12:23:54 +00002486case 134:
2487#line 1322 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002488{
vlmfa67ddc2004-06-03 03:38:44 +00002489 yyval.a_expr = yyvsp[-2].a_expr;
2490 assert(yyval.a_expr->Identifier == NULL);
2491 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2492 yyval.a_expr->meta_type = AMT_VALUE;
2493 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002494 ;
2495 break;}
vlm066dc102005-08-22 12:23:54 +00002496case 135:
2497#line 1332 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002498{
2499 yyval.a_value = asn1p_value_fromint(0);
2500 checkmem(yyval.a_value);
2501 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2502 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2503 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2504 ;
2505 break;}
vlm066dc102005-08-22 12:23:54 +00002506case 136:
2507#line 1339 "asn1p_y.y"
vlmd30bc6c2005-03-24 16:27:02 +00002508{ asn1p_lexer_hack_push_opaque_state(); ;
vlm6a02a8a2004-09-08 00:28:11 +00002509 break;}
vlm066dc102005-08-22 12:23:54 +00002510case 137:
2511#line 1339 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002512{
vlmfa67ddc2004-06-03 03:38:44 +00002513 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2514 checkmem(yyval.a_value);
2515 yyval.a_value->type = ATV_UNPARSED;
vlm6a02a8a2004-09-08 00:28:11 +00002516 ;
2517 break;}
vlm066dc102005-08-22 12:23:54 +00002518case 138:
2519#line 1344 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002520{
2521 yyval.a_value = asn1p_value_fromint(0);
2522 checkmem(yyval.a_value);
2523 yyval.a_value->type = ATV_NULL;
2524 ;
2525 break;}
vlm066dc102005-08-22 12:23:54 +00002526case 139:
2527#line 1349 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002528{
2529 yyval.a_value = asn1p_value_fromint(0);
2530 checkmem(yyval.a_value);
2531 yyval.a_value->type = ATV_FALSE;
2532 ;
2533 break;}
vlm066dc102005-08-22 12:23:54 +00002534case 140:
2535#line 1354 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002536{
2537 yyval.a_value = asn1p_value_fromint(0);
2538 checkmem(yyval.a_value);
2539 yyval.a_value->type = ATV_TRUE;
2540 ;
2541 break;}
vlm066dc102005-08-22 12:23:54 +00002542case 141:
2543#line 1359 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002544{
vlmfa67ddc2004-06-03 03:38:44 +00002545 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2546 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002547 ;
2548 break;}
vlm066dc102005-08-22 12:23:54 +00002549case 142:
2550#line 1363 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002551{
vlmfa67ddc2004-06-03 03:38:44 +00002552 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2553 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002554 ;
2555 break;}
vlm066dc102005-08-22 12:23:54 +00002556case 143:
2557#line 1367 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002558{
vlme1e6ed82005-03-24 14:26:38 +00002559 yyval.a_value = yyval.a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002560 ;
2561 break;}
vlm066dc102005-08-22 12:23:54 +00002562case 144:
2563#line 1370 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00002564{
vlm5d89c3d2005-08-13 09:07:11 +00002565 yyval.a_value = yyvsp[0].a_value;
2566 ;
2567 break;}
vlm066dc102005-08-22 12:23:54 +00002568case 145:
2569#line 1373 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002570{
2571 yyval.a_value = yyvsp[0].a_value;
2572 ;
2573 break;}
vlm066dc102005-08-22 12:23:54 +00002574case 146:
2575#line 1379 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002576{
vlmfa67ddc2004-06-03 03:38:44 +00002577 asn1p_ref_t *ref;
2578 int ret;
2579 ref = asn1p_ref_new(yylineno);
2580 checkmem(ref);
2581 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2582 checkmem(ret == 0);
2583 yyval.a_value = asn1p_value_fromref(ref, 0);
2584 checkmem(yyval.a_value);
2585 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002586 ;
2587 break;}
vlm066dc102005-08-22 12:23:54 +00002588case 147:
2589#line 1390 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002590{
vlmfa67ddc2004-06-03 03:38:44 +00002591 asn1p_ref_t *ref;
2592 int ret;
2593 ref = asn1p_ref_new(yylineno);
2594 checkmem(ref);
2595 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2596 checkmem(ret == 0);
2597 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2598 checkmem(ret == 0);
2599 yyval.a_value = asn1p_value_fromref(ref, 0);
2600 checkmem(yyval.a_value);
2601 free(yyvsp[-2].tv_str);
2602 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002603 ;
2604 break;}
vlm066dc102005-08-22 12:23:54 +00002605case 148:
2606#line 1408 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002607{
2608 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2609 checkmem(yyval.a_value);
2610 ;
2611 break;}
vlm066dc102005-08-22 12:23:54 +00002612case 149:
2613#line 1412 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002614{
vlm2c8c44d2005-03-24 16:22:35 +00002615 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
vlme1e6ed82005-03-24 14:26:38 +00002616 checkmem(yyval.a_value);
2617 yyval.a_value->type = ATV_TUPLE;
2618 ;
2619 break;}
vlm066dc102005-08-22 12:23:54 +00002620case 150:
2621#line 1417 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002622{
vlm2c8c44d2005-03-24 16:22:35 +00002623 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
vlme1e6ed82005-03-24 14:26:38 +00002624 checkmem(yyval.a_value);
2625 yyval.a_value->type = ATV_QUADRUPLE;
2626 ;
2627 break;}
vlm066dc102005-08-22 12:23:54 +00002628case 151:
2629#line 1451 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002630{
vlm6611add2005-03-20 14:28:32 +00002631 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
vlmfa67ddc2004-06-03 03:38:44 +00002632 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2633 checkmem(yyval.tv_opaque.buf);
2634 yyval.tv_opaque.buf[0] = '{';
vlm6611add2005-03-20 14:28:32 +00002635 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
vlmfa67ddc2004-06-03 03:38:44 +00002636 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2637 free(yyvsp[0].tv_opaque.buf);
vlm6a02a8a2004-09-08 00:28:11 +00002638 ;
2639 break;}
vlm066dc102005-08-22 12:23:54 +00002640case 152:
2641#line 1460 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002642{
vlmfa67ddc2004-06-03 03:38:44 +00002643 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2644 char *p = malloc(newsize + 1);
2645 checkmem(p);
2646 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2647 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2648 p[newsize] = '\0';
2649 free(yyvsp[-1].tv_opaque.buf);
2650 free(yyvsp[0].tv_opaque.buf);
2651 yyval.tv_opaque.buf = p;
2652 yyval.tv_opaque.len = newsize;
vlm6a02a8a2004-09-08 00:28:11 +00002653 ;
2654 break;}
vlm066dc102005-08-22 12:23:54 +00002655case 153:
2656#line 1475 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002657{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2658 break;}
vlm066dc102005-08-22 12:23:54 +00002659case 154:
2660#line 1476 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002661{ yyval.a_type = ASN_BASIC_NULL; ;
2662 break;}
vlm066dc102005-08-22 12:23:54 +00002663case 155:
2664#line 1477 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002665{ yyval.a_type = ASN_BASIC_REAL; ;
2666 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002667case 156:
vlm066dc102005-08-22 12:23:54 +00002668#line 1478 "asn1p_y.y"
2669{ yyval.a_type = yyvsp[0].a_type; ;
vlm5d89c3d2005-08-13 09:07:11 +00002670 break;}
2671case 157:
vlm066dc102005-08-22 12:23:54 +00002672#line 1479 "asn1p_y.y"
2673{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
vlm5d89c3d2005-08-13 09:07:11 +00002674 break;}
2675case 158:
vlm066dc102005-08-22 12:23:54 +00002676#line 1480 "asn1p_y.y"
2677{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
vlm5d89c3d2005-08-13 09:07:11 +00002678 break;}
2679case 159:
vlm066dc102005-08-22 12:23:54 +00002680#line 1481 "asn1p_y.y"
2681{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
vlme1e6ed82005-03-24 14:26:38 +00002682 break;}
vlm7388db02005-03-31 21:48:13 +00002683case 160:
vlm066dc102005-08-22 12:23:54 +00002684#line 1482 "asn1p_y.y"
2685{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
vlm931aeed2005-08-12 10:09:10 +00002686 break;}
2687case 161:
vlm066dc102005-08-22 12:23:54 +00002688#line 1483 "asn1p_y.y"
2689{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
vlm931aeed2005-08-12 10:09:10 +00002690 break;}
2691case 162:
vlm066dc102005-08-22 12:23:54 +00002692#line 1484 "asn1p_y.y"
2693{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
vlm5d89c3d2005-08-13 09:07:11 +00002694 break;}
2695case 163:
vlm066dc102005-08-22 12:23:54 +00002696#line 1485 "asn1p_y.y"
2697{ yyval.a_type = ASN_BASIC_UTCTime; ;
vlm5d89c3d2005-08-13 09:07:11 +00002698 break;}
2699case 164:
2700#line 1486 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002701{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2702 break;}
2703case 165:
2704#line 1487 "asn1p_y.y"
2705{ yyval.a_type = yyvsp[0].a_type; ;
2706 break;}
2707case 166:
2708#line 1494 "asn1p_y.y"
2709{ yyval.a_type = ASN_BASIC_INTEGER; ;
2710 break;}
2711case 167:
2712#line 1495 "asn1p_y.y"
2713{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2714 break;}
2715case 168:
2716#line 1496 "asn1p_y.y"
2717{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2718 break;}
2719case 169:
2720#line 1500 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002721{
vlm39e5ed72004-09-05 10:40:41 +00002722 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002723 checkmem(yyval.a_expr);
2724 yyval.a_expr->expr_type = yyvsp[0].a_type;
2725 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002726 ;
2727 break;}
vlm066dc102005-08-22 12:23:54 +00002728case 170:
2729#line 1506 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002730{
vlmfa67ddc2004-06-03 03:38:44 +00002731 if(yyvsp[0].a_expr) {
2732 yyval.a_expr = yyvsp[0].a_expr;
2733 } else {
vlm39e5ed72004-09-05 10:40:41 +00002734 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002735 checkmem(yyval.a_expr);
2736 }
2737 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2738 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002739 ;
2740 break;}
vlm066dc102005-08-22 12:23:54 +00002741case 171:
2742#line 1519 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002743{ yyval.a_type = ASN_STRING_BMPString; ;
2744 break;}
vlm066dc102005-08-22 12:23:54 +00002745case 172:
2746#line 1520 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002747{
vlmfa67ddc2004-06-03 03:38:44 +00002748 yyval.a_type = ASN_STRING_GeneralString;
vlmc94e28f2004-09-15 11:59:51 +00002749 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002750 ;
2751 break;}
vlm066dc102005-08-22 12:23:54 +00002752case 173:
2753#line 1524 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002754{
vlmc94e28f2004-09-15 11:59:51 +00002755 yyval.a_type = ASN_STRING_GraphicString;
2756 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002757 ;
2758 break;}
vlm066dc102005-08-22 12:23:54 +00002759case 174:
2760#line 1528 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002761{ yyval.a_type = ASN_STRING_IA5String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002762 break;}
vlm066dc102005-08-22 12:23:54 +00002763case 175:
2764#line 1529 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002765{ yyval.a_type = ASN_STRING_ISO646String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002766 break;}
vlm066dc102005-08-22 12:23:54 +00002767case 176:
2768#line 1530 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002769{ yyval.a_type = ASN_STRING_NumericString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002770 break;}
vlm066dc102005-08-22 12:23:54 +00002771case 177:
2772#line 1531 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002773{ yyval.a_type = ASN_STRING_PrintableString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002774 break;}
vlm066dc102005-08-22 12:23:54 +00002775case 178:
2776#line 1532 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002777{
2778 yyval.a_type = ASN_STRING_T61String;
2779 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2780 ;
vlm6a02a8a2004-09-08 00:28:11 +00002781 break;}
vlm066dc102005-08-22 12:23:54 +00002782case 179:
2783#line 1536 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002784{ yyval.a_type = ASN_STRING_TeletexString; ;
2785 break;}
vlm066dc102005-08-22 12:23:54 +00002786case 180:
2787#line 1537 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002788{ yyval.a_type = ASN_STRING_UniversalString; ;
2789 break;}
vlm066dc102005-08-22 12:23:54 +00002790case 181:
2791#line 1538 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002792{ yyval.a_type = ASN_STRING_UTF8String; ;
2793 break;}
vlm066dc102005-08-22 12:23:54 +00002794case 182:
2795#line 1539 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002796{
2797 yyval.a_type = ASN_STRING_VideotexString;
2798 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2799 ;
2800 break;}
vlm066dc102005-08-22 12:23:54 +00002801case 183:
2802#line 1543 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002803{ yyval.a_type = ASN_STRING_VisibleString; ;
2804 break;}
vlm066dc102005-08-22 12:23:54 +00002805case 184:
2806#line 1544 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002807{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2808 break;}
vlm066dc102005-08-22 12:23:54 +00002809case 190:
2810#line 1556 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002811{ yyval.a_constr = 0; ;
2812 break;}
vlm066dc102005-08-22 12:23:54 +00002813case 191:
2814#line 1557 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002815{
vlm39e5ed72004-09-05 10:40:41 +00002816 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002817 ;
2818 break;}
vlm066dc102005-08-22 12:23:54 +00002819case 192:
2820#line 1563 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002821{
vlm39e5ed72004-09-05 10:40:41 +00002822 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002823 ;
2824 break;}
vlm066dc102005-08-22 12:23:54 +00002825case 193:
2826#line 1566 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002827{
vlmfa67ddc2004-06-03 03:38:44 +00002828 /*
2829 * This is a special case, for compatibility purposes.
vlm9283dbe2004-08-18 04:59:12 +00002830 * It goes without parentheses.
vlmfa67ddc2004-06-03 03:38:44 +00002831 */
vlm5f0128b2004-08-20 13:25:29 +00002832 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002833 ;
2834 break;}
vlm066dc102005-08-22 12:23:54 +00002835case 194:
2836#line 1576 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002837{
vlmfa67ddc2004-06-03 03:38:44 +00002838 yyval.a_constr = yyvsp[-1].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002839 ;
2840 break;}
vlm066dc102005-08-22 12:23:54 +00002841case 195:
2842#line 1579 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002843{
vlm9283dbe2004-08-18 04:59:12 +00002844 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002845 ;
2846 break;}
vlm066dc102005-08-22 12:23:54 +00002847case 196:
2848#line 1585 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002849{
vlmfa67ddc2004-06-03 03:38:44 +00002850 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002851 ;
2852 break;}
vlm066dc102005-08-22 12:23:54 +00002853case 197:
2854#line 1588 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002855{
vlmfa67ddc2004-06-03 03:38:44 +00002856 asn1p_constraint_t *ct;
2857 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002858 ct->type = ACT_EL_EXT;
2859 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00002860 ;
2861 break;}
vlm066dc102005-08-22 12:23:54 +00002862case 198:
2863#line 1594 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002864{
vlmfa67ddc2004-06-03 03:38:44 +00002865 asn1p_constraint_t *ct;
2866 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002867 ct->type = ACT_EL_EXT;
2868 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
vlm6f5eb0b2004-08-13 12:35:09 +00002869 ct = yyval.a_constr;
2870 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002871 ;
2872 break;}
vlm066dc102005-08-22 12:23:54 +00002873case 199:
2874#line 1605 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002875{
vlm9283dbe2004-08-18 04:59:12 +00002876 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002877 ;
2878 break;}
vlm066dc102005-08-22 12:23:54 +00002879case 200:
2880#line 1608 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002881{
2882 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2883 ;
2884 break;}
vlm066dc102005-08-22 12:23:54 +00002885case 201:
2886#line 1611 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002887{
vlmfa67ddc2004-06-03 03:38:44 +00002888 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002889 ;
2890 break;}
vlm066dc102005-08-22 12:23:54 +00002891case 202:
2892#line 1614 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002893{
vlmfa67ddc2004-06-03 03:38:44 +00002894 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002895 ;
2896 break;}
vlm066dc102005-08-22 12:23:54 +00002897case 203:
2898#line 1617 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002899{
vlmfa67ddc2004-06-03 03:38:44 +00002900 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002901 ;
2902 break;}
vlm066dc102005-08-22 12:23:54 +00002903case 204:
2904#line 1623 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002905{
vlmfa67ddc2004-06-03 03:38:44 +00002906 int ret;
2907 yyval.a_constr = asn1p_constraint_new(yylineno);
2908 checkmem(yyval.a_constr);
2909 yyval.a_constr->type = yyvsp[-3].a_ctype;
2910 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2911 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002912 ;
2913 break;}
vlm066dc102005-08-22 12:23:54 +00002914case 205:
2915#line 1631 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002916{
vlm9283dbe2004-08-18 04:59:12 +00002917 int ret;
2918 yyval.a_constr = asn1p_constraint_new(yylineno);
2919 checkmem(yyval.a_constr);
2920 yyval.a_constr->type = ACT_CA_SET;
2921 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2922 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002923 ;
2924 break;}
vlm066dc102005-08-22 12:23:54 +00002925case 206:
2926#line 1639 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002927{
vlm9283dbe2004-08-18 04:59:12 +00002928 yyval.a_constr = asn1p_constraint_new(yylineno);
2929 checkmem(yyval.a_constr);
2930 yyval.a_constr->type = ACT_EL_VALUE;
2931 yyval.a_constr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002932 ;
2933 break;}
vlm066dc102005-08-22 12:23:54 +00002934case 207:
2935#line 1645 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002936{
vlm0aa86902004-10-12 23:26:53 +00002937 yyval.a_constr = asn1p_constraint_new(yylineno);
2938 checkmem(yyval.a_constr);
vlma6a12e32005-03-20 12:58:00 +00002939 yyval.a_constr->type = ACT_EL_TYPE;
2940 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
vlmc94e28f2004-09-15 11:59:51 +00002941 ;
2942 break;}
vlm931aeed2005-08-12 10:09:10 +00002943case 208:
vlm066dc102005-08-22 12:23:54 +00002944#line 1651 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002945{
vlm066dc102005-08-22 12:23:54 +00002946 yyval.a_constr = asn1p_constraint_new(yylineno);
2947 checkmem(yyval.a_constr);
2948 yyval.a_constr->type = yyvsp[-1].a_ctype;
2949 yyval.a_constr->range_start = yyvsp[-2].a_value;
2950 yyval.a_constr->range_stop = yyvsp[0].a_value;
vlm5d89c3d2005-08-13 09:07:11 +00002951 ;
2952 break;}
2953case 209:
vlm066dc102005-08-22 12:23:54 +00002954#line 1658 "asn1p_y.y"
2955{
2956 yyval.a_constr = asn1p_constraint_new(yylineno);
2957 checkmem(yyval.a_constr);
2958 yyval.a_constr->type = yyvsp[-1].a_ctype;
2959 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2960 yyval.a_constr->range_stop = yyvsp[0].a_value;
2961 yyval.a_constr->range_start->type = ATV_MIN;
2962 ;
vlm5d89c3d2005-08-13 09:07:11 +00002963 break;}
2964case 210:
vlm066dc102005-08-22 12:23:54 +00002965#line 1666 "asn1p_y.y"
2966{
2967 yyval.a_constr = asn1p_constraint_new(yylineno);
2968 checkmem(yyval.a_constr);
2969 yyval.a_constr->type = yyvsp[-1].a_ctype;
2970 yyval.a_constr->range_start = yyvsp[-2].a_value;
2971 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2972 yyval.a_constr->range_stop->type = ATV_MAX;
2973 ;
2974 break;}
2975case 211:
2976#line 1674 "asn1p_y.y"
2977{
2978 yyval.a_constr = asn1p_constraint_new(yylineno);
2979 checkmem(yyval.a_constr);
2980 yyval.a_constr->type = yyvsp[-1].a_ctype;
2981 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2982 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2983 yyval.a_constr->range_start->type = ATV_MIN;
2984 yyval.a_constr->range_stop->type = ATV_MAX;
2985 ;
2986 break;}
2987case 212:
2988#line 1683 "asn1p_y.y"
2989{
2990 yyval.a_constr = yyvsp[0].a_constr;
2991 ;
2992 break;}
2993case 213:
2994#line 1686 "asn1p_y.y"
2995{
2996 yyval.a_constr = yyvsp[0].a_constr;
2997 ;
2998 break;}
2999case 214:
3000#line 1690 "asn1p_y.y"
3001{ asn1p_lexer_hack_push_opaque_state(); ;
3002 break;}
3003case 215:
3004#line 1690 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003005{
3006 yyval.a_constr = asn1p_constraint_new(yylineno);
3007 checkmem(yyval.a_constr);
3008 yyval.a_constr->type = ACT_CT_CTDBY;
3009 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3010 checkmem(yyval.a_constr->value);
3011 yyval.a_constr->value->type = ATV_UNPARSED;
3012 ;
vlm0aa86902004-10-12 23:26:53 +00003013 break;}
vlm066dc102005-08-22 12:23:54 +00003014case 216:
3015#line 1701 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003016{ yyval.a_ctype = ACT_EL_RANGE; ;
vlm4053ca52005-02-18 16:34:21 +00003017 break;}
vlm066dc102005-08-22 12:23:54 +00003018case 217:
3019#line 1702 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003020{ yyval.a_ctype = ACT_EL_RLRANGE; ;
vlma6a12e32005-03-20 12:58:00 +00003021 break;}
vlm066dc102005-08-22 12:23:54 +00003022case 218:
3023#line 1703 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003024{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3025 break;}
vlm066dc102005-08-22 12:23:54 +00003026case 219:
3027#line 1704 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003028{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3029 break;}
vlm066dc102005-08-22 12:23:54 +00003030case 220:
3031#line 1708 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003032{
vlm39e5ed72004-09-05 10:40:41 +00003033 yyval.a_ctype = ACT_CT_SIZE;
vlm6a02a8a2004-09-08 00:28:11 +00003034 ;
3035 break;}
vlm066dc102005-08-22 12:23:54 +00003036case 221:
3037#line 1711 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003038{
vlm39e5ed72004-09-05 10:40:41 +00003039 yyval.a_ctype = ACT_CT_FROM;
vlm6a02a8a2004-09-08 00:28:11 +00003040 ;
3041 break;}
vlm066dc102005-08-22 12:23:54 +00003042case 222:
3043#line 1717 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003044{
3045 yyval.a_value = asn1p_value_fromint(0);
3046 checkmem(yyval.a_value);
3047 yyval.a_value->type = ATV_FALSE;
3048 ;
3049 break;}
vlm066dc102005-08-22 12:23:54 +00003050case 223:
3051#line 1722 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003052{
3053 yyval.a_value = asn1p_value_fromint(1);
3054 checkmem(yyval.a_value);
3055 yyval.a_value->type = ATV_TRUE;
3056 ;
3057 break;}
vlm066dc102005-08-22 12:23:54 +00003058case 224:
3059#line 1727 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003060{
3061 yyval.a_value = yyvsp[0].a_value;
3062 ;
3063 break;}
vlm066dc102005-08-22 12:23:54 +00003064case 225:
3065#line 1730 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003066{
3067 yyval.a_value = yyvsp[0].a_value;
3068 ;
3069 break;}
vlm066dc102005-08-22 12:23:54 +00003070case 226:
3071#line 1733 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003072{
vlmfa67ddc2004-06-03 03:38:44 +00003073 asn1p_ref_t *ref;
3074 int ret;
3075 ref = asn1p_ref_new(yylineno);
3076 checkmem(ref);
3077 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3078 checkmem(ret == 0);
3079 yyval.a_value = asn1p_value_fromref(ref, 0);
3080 checkmem(yyval.a_value);
3081 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003082 ;
3083 break;}
vlm066dc102005-08-22 12:23:54 +00003084case 227:
3085#line 1747 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003086{
vlm4053ca52005-02-18 16:34:21 +00003087 asn1p_ref_t *ref;
3088 int ret;
3089 ref = asn1p_ref_new(yylineno);
3090 checkmem(ref);
3091 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3092 checkmem(ret == 0);
3093 yyval.a_value = asn1p_value_fromref(ref, 0);
vlmfa67ddc2004-06-03 03:38:44 +00003094 checkmem(yyval.a_value);
vlm4053ca52005-02-18 16:34:21 +00003095 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003096 ;
3097 break;}
vlm066dc102005-08-22 12:23:54 +00003098case 228:
3099#line 1761 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003100{
vlm5d89c3d2005-08-13 09:07:11 +00003101 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003102 ;
3103 break;}
vlm066dc102005-08-22 12:23:54 +00003104case 229:
3105#line 1764 "asn1p_y.y"
vlm7bbdc9f2005-03-28 15:01:27 +00003106{
vlm5d89c3d2005-08-13 09:07:11 +00003107 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
vlm7bbdc9f2005-03-28 15:01:27 +00003108 ;
3109 break;}
vlm066dc102005-08-22 12:23:54 +00003110case 230:
3111#line 1770 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003112{
vlm5d89c3d2005-08-13 09:07:11 +00003113 yyval.a_constr = yyvsp[0].a_constr;
3114 ;
3115 break;}
vlm066dc102005-08-22 12:23:54 +00003116case 231:
3117#line 1773 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003118{
3119 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3120 ;
3121 break;}
vlm066dc102005-08-22 12:23:54 +00003122case 232:
3123#line 1779 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003124{
vlmfa67ddc2004-06-03 03:38:44 +00003125 yyval.a_constr = asn1p_constraint_new(yylineno);
3126 checkmem(yyval.a_constr);
3127 yyval.a_constr->type = ACT_EL_EXT;
vlm7bbdc9f2005-03-28 15:01:27 +00003128 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003129 ;
3130 break;}
vlm066dc102005-08-22 12:23:54 +00003131case 233:
3132#line 1785 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003133{
vlmfa67ddc2004-06-03 03:38:44 +00003134 yyval.a_constr = asn1p_constraint_new(yylineno);
3135 checkmem(yyval.a_constr);
3136 yyval.a_constr->type = ACT_EL_VALUE;
3137 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3138 yyval.a_constr->presence = yyvsp[0].a_pres;
vlm7bbdc9f2005-03-28 15:01:27 +00003139 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003140 ;
3141 break;}
vlm066dc102005-08-22 12:23:54 +00003142case 234:
3143#line 1799 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003144{ yyval.a_pres = ACPRES_DEFAULT; ;
3145 break;}
vlm066dc102005-08-22 12:23:54 +00003146case 235:
3147#line 1800 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003148{ yyval.a_pres = yyvsp[0].a_pres; ;
3149 break;}
vlm066dc102005-08-22 12:23:54 +00003150case 236:
3151#line 1804 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003152{
vlmfa67ddc2004-06-03 03:38:44 +00003153 yyval.a_pres = ACPRES_PRESENT;
vlm6a02a8a2004-09-08 00:28:11 +00003154 ;
3155 break;}
vlm066dc102005-08-22 12:23:54 +00003156case 237:
3157#line 1807 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00003158{
vlm5d89c3d2005-08-13 09:07:11 +00003159 yyval.a_pres = ACPRES_ABSENT;
vlm931aeed2005-08-12 10:09:10 +00003160 ;
3161 break;}
vlm066dc102005-08-22 12:23:54 +00003162case 238:
3163#line 1810 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00003164{
vlm5d89c3d2005-08-13 09:07:11 +00003165 yyval.a_pres = ACPRES_OPTIONAL;
vlm931aeed2005-08-12 10:09:10 +00003166 ;
3167 break;}
vlm066dc102005-08-22 12:23:54 +00003168case 239:
3169#line 1816 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003170{
3171 yyval.a_constr = yyvsp[0].a_constr;
3172 ;
3173 break;}
vlm066dc102005-08-22 12:23:54 +00003174case 240:
3175#line 1819 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003176{
vlm5d89c3d2005-08-13 09:07:11 +00003177 yyval.a_constr = yyvsp[0].a_constr;
3178 ;
3179 break;}
vlm066dc102005-08-22 12:23:54 +00003180case 241:
3181#line 1828 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003182{
vlmfa67ddc2004-06-03 03:38:44 +00003183 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3184 asn1p_constraint_t *ct;
3185 int ret;
3186 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3187 checkmem(ret == 0);
3188 ct = asn1p_constraint_new(yylineno);
3189 checkmem(yyval.a_constr);
3190 ct->type = ACT_EL_VALUE;
3191 ct->value = asn1p_value_fromref(ref, 0);
3192 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003193 ;
3194 break;}
vlm066dc102005-08-22 12:23:54 +00003195case 242:
3196#line 1843 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003197{
vlmfa67ddc2004-06-03 03:38:44 +00003198 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003199 ;
3200 break;}
vlm066dc102005-08-22 12:23:54 +00003201case 243:
3202#line 1849 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003203{
vlmfa67ddc2004-06-03 03:38:44 +00003204 yyval.a_constr = asn1p_constraint_new(yylineno);
3205 checkmem(yyval.a_constr);
3206 yyval.a_constr->type = ACT_EL_VALUE;
3207 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003208 ;
3209 break;}
vlm066dc102005-08-22 12:23:54 +00003210case 244:
3211#line 1855 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003212{
vlmfa67ddc2004-06-03 03:38:44 +00003213 asn1p_constraint_t *ct;
3214 ct = asn1p_constraint_new(yylineno);
3215 checkmem(ct);
3216 ct->type = ACT_EL_VALUE;
3217 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3218 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00003219 ;
3220 break;}
vlm066dc102005-08-22 12:23:54 +00003221case 245:
3222#line 1869 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003223{
vlmfa67ddc2004-06-03 03:38:44 +00003224 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3225 int ret;
3226 *p = '@';
3227 strcpy(p + 1, yyvsp[0].tv_str);
3228 yyval.a_ref = asn1p_ref_new(yylineno);
3229 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3230 checkmem(ret == 0);
3231 free(p);
3232 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003233 ;
3234 break;}
vlm066dc102005-08-22 12:23:54 +00003235case 246:
3236#line 1880 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003237{
vlmfa67ddc2004-06-03 03:38:44 +00003238 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3239 int ret;
3240 p[0] = '@';
3241 p[1] = '.';
3242 strcpy(p + 2, yyvsp[0].tv_str);
3243 yyval.a_ref = asn1p_ref_new(yylineno);
3244 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3245 checkmem(ret == 0);
3246 free(p);
3247 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003248 ;
3249 break;}
vlm066dc102005-08-22 12:23:54 +00003250case 247:
3251#line 1896 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003252{
vlmfa67ddc2004-06-03 03:38:44 +00003253 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003254 ;
3255 break;}
vlm066dc102005-08-22 12:23:54 +00003256case 248:
3257#line 1899 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003258{
vlmfa67ddc2004-06-03 03:38:44 +00003259 int l1 = strlen(yyvsp[-2].tv_str);
3260 int l3 = strlen(yyvsp[0].tv_str);
3261 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3262 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3263 yyval.tv_str[l1] = '.';
3264 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3265 yyval.tv_str[l1 + 1 + l3] = '\0';
vlm6a02a8a2004-09-08 00:28:11 +00003266 ;
3267 break;}
vlm066dc102005-08-22 12:23:54 +00003268case 249:
3269#line 1917 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003270{
vlmc94e28f2004-09-15 11:59:51 +00003271 yyval.a_marker.flags = EM_NOMARK;
3272 yyval.a_marker.default_value = 0;
vlm6a02a8a2004-09-08 00:28:11 +00003273 ;
3274 break;}
vlm066dc102005-08-22 12:23:54 +00003275case 250:
3276#line 1921 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003277{ yyval.a_marker = yyvsp[0].a_marker; ;
vlma2374a02004-09-14 02:44:07 +00003278 break;}
vlm066dc102005-08-22 12:23:54 +00003279case 251:
3280#line 1925 "asn1p_y.y"
vlma2374a02004-09-14 02:44:07 +00003281{
vlmc94e28f2004-09-15 11:59:51 +00003282 yyval.a_marker.flags = EM_OPTIONAL;
3283 yyval.a_marker.default_value = 0;
vlma2374a02004-09-14 02:44:07 +00003284 ;
3285 break;}
vlm066dc102005-08-22 12:23:54 +00003286case 252:
3287#line 1929 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003288{
3289 yyval.a_marker.flags = EM_DEFAULT;
3290 yyval.a_marker.default_value = yyvsp[0].a_value;
3291 ;
3292 break;}
vlm066dc102005-08-22 12:23:54 +00003293case 253:
3294#line 1952 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003295{
vlm39e5ed72004-09-05 10:40:41 +00003296 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003297 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003298 ;
3299 break;}
vlm066dc102005-08-22 12:23:54 +00003300case 254:
3301#line 1956 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003302{
vlm7bbdc9f2005-03-28 15:01:27 +00003303 yyval.a_expr = yyvsp[-1].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00003304 ;
3305 break;}
vlm066dc102005-08-22 12:23:54 +00003306case 255:
3307#line 1962 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003308{
vlm7bbdc9f2005-03-28 15:01:27 +00003309 yyval.a_expr = asn1p_expr_new(yylineno);
3310 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003311 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3312 ;
3313 break;}
vlm066dc102005-08-22 12:23:54 +00003314case 256:
3315#line 1967 "asn1p_y.y"
vlm7bbdc9f2005-03-28 15:01:27 +00003316{
3317 yyval.a_expr = yyvsp[-2].a_expr;
3318 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3319 ;
3320 break;}
vlm066dc102005-08-22 12:23:54 +00003321case 257:
3322#line 1974 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003323{
vlm39e5ed72004-09-05 10:40:41 +00003324 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003325 checkmem(yyval.a_expr);
3326 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3327 yyval.a_expr->meta_type = AMT_VALUE;
3328 yyval.a_expr->Identifier = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003329 ;
3330 break;}
vlm066dc102005-08-22 12:23:54 +00003331case 258:
3332#line 1981 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003333{
3334 yyval.a_expr = asn1p_expr_new(yylineno);
3335 checkmem(yyval.a_expr);
3336 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3337 yyval.a_expr->meta_type = AMT_VALUE;
3338 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3339 yyval.a_expr->value = yyvsp[-1].a_value;
3340 ;
3341 break;}
vlm066dc102005-08-22 12:23:54 +00003342case 259:
3343#line 1989 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003344{
3345 yyval.a_expr = asn1p_expr_new(yylineno);
3346 checkmem(yyval.a_expr);
3347 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3348 yyval.a_expr->meta_type = AMT_VALUE;
3349 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3350 yyval.a_expr->value = yyvsp[-1].a_value;
3351 ;
3352 break;}
vlm066dc102005-08-22 12:23:54 +00003353case 260:
3354#line 1997 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003355{
3356 yyval.a_expr = asn1p_expr_new(yylineno);
3357 checkmem(yyval.a_expr);
3358 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3359 yyval.a_expr->meta_type = AMT_VALUE;
vlmfa67ddc2004-06-03 03:38:44 +00003360 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00003361 ;
3362 break;}
vlm066dc102005-08-22 12:23:54 +00003363case 261:
3364#line 2004 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003365{
vlm39e5ed72004-09-05 10:40:41 +00003366 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003367 checkmem(yyval.a_expr);
3368 yyval.a_expr->Identifier = strdup("...");
3369 checkmem(yyval.a_expr->Identifier);
3370 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3371 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00003372 ;
3373 break;}
vlm066dc102005-08-22 12:23:54 +00003374case 262:
3375#line 2015 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003376{
3377 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3378 checkmem(yyval.a_value);
3379 ;
vlm931aeed2005-08-12 10:09:10 +00003380 break;}
vlm066dc102005-08-22 12:23:54 +00003381case 263:
3382#line 2019 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003383{
3384 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3385 checkmem(yyval.a_value);
3386 ;
vlm931aeed2005-08-12 10:09:10 +00003387 break;}
vlm066dc102005-08-22 12:23:54 +00003388case 264:
3389#line 2050 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003390{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3391 break;}
vlm066dc102005-08-22 12:23:54 +00003392case 265:
3393#line 2051 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003394{ yyval.a_tag = yyvsp[0].a_tag; ;
3395 break;}
vlm066dc102005-08-22 12:23:54 +00003396case 266:
3397#line 2055 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003398{
vlm2728a8d2005-01-23 09:51:44 +00003399 yyval.a_tag = yyvsp[-1].a_tag;
3400 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
vlm6a02a8a2004-09-08 00:28:11 +00003401 ;
3402 break;}
vlm066dc102005-08-22 12:23:54 +00003403case 267:
3404#line 2062 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003405{
vlm2728a8d2005-01-23 09:51:44 +00003406 yyval.a_tag = yyvsp[-2].a_tag;
3407 yyval.a_tag.tag_value = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00003408 ;
3409 break;}
vlm066dc102005-08-22 12:23:54 +00003410case 268:
3411#line 2068 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003412{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
vlm6a02a8a2004-09-08 00:28:11 +00003413 break;}
vlm066dc102005-08-22 12:23:54 +00003414case 269:
3415#line 2069 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003416{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
vlm151c0b22004-09-22 16:03:36 +00003417 break;}
vlm7388db02005-03-31 21:48:13 +00003418case 270:
vlm066dc102005-08-22 12:23:54 +00003419#line 2070 "asn1p_y.y"
3420{ yyval.a_tag.tag_class = TC_APPLICATION; ;
vlme1e6ed82005-03-24 14:26:38 +00003421 break;}
vlm7388db02005-03-31 21:48:13 +00003422case 271:
vlm5d89c3d2005-08-13 09:07:11 +00003423#line 2071 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003424{ yyval.a_tag.tag_class = TC_PRIVATE; ;
vlm931aeed2005-08-12 10:09:10 +00003425 break;}
3426case 272:
vlm066dc102005-08-22 12:23:54 +00003427#line 2075 "asn1p_y.y"
3428{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3429 break;}
3430case 273:
3431#line 2076 "asn1p_y.y"
3432{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3433 break;}
3434case 274:
3435#line 2077 "asn1p_y.y"
3436{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3437 break;}
3438case 275:
3439#line 2081 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00003440{
vlm5d89c3d2005-08-13 09:07:11 +00003441 checkmem(yyvsp[0].tv_str);
vlm931aeed2005-08-12 10:09:10 +00003442 yyval.tv_str = yyvsp[0].tv_str;
3443 ;
3444 break;}
vlm066dc102005-08-22 12:23:54 +00003445case 276:
3446#line 2085 "asn1p_y.y"
3447{
3448 checkmem(yyvsp[0].tv_str);
3449 yyval.tv_str = yyvsp[0].tv_str;
3450 ;
3451 break;}
3452case 277:
3453#line 2093 "asn1p_y.y"
3454{
3455 checkmem(yyvsp[0].tv_str);
3456 yyval.tv_str = yyvsp[0].tv_str;
3457 ;
3458 break;}
3459case 278:
3460#line 2100 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003461{ yyval.tv_str = 0; ;
3462 break;}
vlm066dc102005-08-22 12:23:54 +00003463case 279:
3464#line 2101 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003465{
3466 yyval.tv_str = yyvsp[0].tv_str;
3467 ;
3468 break;}
vlm066dc102005-08-22 12:23:54 +00003469case 280:
3470#line 2107 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003471{
vlm39e5ed72004-09-05 10:40:41 +00003472 checkmem(yyvsp[0].tv_str);
3473 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003474 ;
3475 break;}
vlm6a02a8a2004-09-08 00:28:11 +00003476}
3477 /* the action file gets copied in in place of this dollarsign */
3478#line 543 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00003479
3480 yyvsp -= yylen;
3481 yyssp -= yylen;
vlm6a02a8a2004-09-08 00:28:11 +00003482#ifdef YYLSP_NEEDED
3483 yylsp -= yylen;
3484#endif
vlmfa67ddc2004-06-03 03:38:44 +00003485
vlm6a02a8a2004-09-08 00:28:11 +00003486#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00003487 if (yydebug)
3488 {
vlm6a02a8a2004-09-08 00:28:11 +00003489 short *ssp1 = yyss - 1;
3490 fprintf (stderr, "state stack now");
3491 while (ssp1 != yyssp)
3492 fprintf (stderr, " %d", *++ssp1);
3493 fprintf (stderr, "\n");
vlmfa67ddc2004-06-03 03:38:44 +00003494 }
3495#endif
3496
3497 *++yyvsp = yyval;
3498
vlm6a02a8a2004-09-08 00:28:11 +00003499#ifdef YYLSP_NEEDED
3500 yylsp++;
3501 if (yylen == 0)
3502 {
3503 yylsp->first_line = yylloc.first_line;
3504 yylsp->first_column = yylloc.first_column;
3505 yylsp->last_line = (yylsp-1)->last_line;
3506 yylsp->last_column = (yylsp-1)->last_column;
3507 yylsp->text = 0;
3508 }
3509 else
3510 {
3511 yylsp->last_line = (yylsp+yylen-1)->last_line;
3512 yylsp->last_column = (yylsp+yylen-1)->last_column;
3513 }
3514#endif
vlmfa67ddc2004-06-03 03:38:44 +00003515
vlm6a02a8a2004-09-08 00:28:11 +00003516 /* Now "shift" the result of the reduction.
3517 Determine what state that goes to,
3518 based on the state we popped back to
3519 and the rule number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00003520
3521 yyn = yyr1[yyn];
3522
vlm6a02a8a2004-09-08 00:28:11 +00003523 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3524 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00003525 yystate = yytable[yystate];
3526 else
vlm6a02a8a2004-09-08 00:28:11 +00003527 yystate = yydefgoto[yyn - YYNTBASE];
vlmfa67ddc2004-06-03 03:38:44 +00003528
3529 goto yynewstate;
3530
vlm6a02a8a2004-09-08 00:28:11 +00003531yyerrlab: /* here on detecting error */
vlmfa67ddc2004-06-03 03:38:44 +00003532
vlm6a02a8a2004-09-08 00:28:11 +00003533 if (! yyerrstatus)
3534 /* If not already recovering from an error, report this error. */
vlmfa67ddc2004-06-03 03:38:44 +00003535 {
3536 ++yynerrs;
vlm6a02a8a2004-09-08 00:28:11 +00003537
3538#ifdef YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00003539 yyn = yypact[yystate];
3540
vlm6a02a8a2004-09-08 00:28:11 +00003541 if (yyn > YYFLAG && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00003542 {
vlm6a02a8a2004-09-08 00:28:11 +00003543 int size = 0;
3544 char *msg;
3545 int x, count;
vlmfa67ddc2004-06-03 03:38:44 +00003546
vlm6a02a8a2004-09-08 00:28:11 +00003547 count = 0;
3548 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3549 for (x = (yyn < 0 ? -yyn : 0);
vlm03630c52005-06-07 21:43:32 +00003550 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
vlm6a02a8a2004-09-08 00:28:11 +00003551 if (yycheck[x + yyn] == x)
3552 size += strlen(yytname[x]) + 15, count++;
3553 msg = (char *) malloc(size + 15);
3554 if (msg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00003555 {
vlm6a02a8a2004-09-08 00:28:11 +00003556 strcpy(msg, "parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003557
vlm6a02a8a2004-09-08 00:28:11 +00003558 if (count < 5)
vlmfa67ddc2004-06-03 03:38:44 +00003559 {
vlm6a02a8a2004-09-08 00:28:11 +00003560 count = 0;
3561 for (x = (yyn < 0 ? -yyn : 0);
vlm03630c52005-06-07 21:43:32 +00003562 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
vlm6a02a8a2004-09-08 00:28:11 +00003563 if (yycheck[x + yyn] == x)
vlmfa67ddc2004-06-03 03:38:44 +00003564 {
vlm6a02a8a2004-09-08 00:28:11 +00003565 strcat(msg, count == 0 ? ", expecting `" : " or `");
3566 strcat(msg, yytname[x]);
3567 strcat(msg, "'");
3568 count++;
vlmfa67ddc2004-06-03 03:38:44 +00003569 }
3570 }
vlm6a02a8a2004-09-08 00:28:11 +00003571 yyerror(msg);
3572 free(msg);
vlmfa67ddc2004-06-03 03:38:44 +00003573 }
3574 else
vlm6a02a8a2004-09-08 00:28:11 +00003575 yyerror ("parse error; also virtual memory exceeded");
vlmfa67ddc2004-06-03 03:38:44 +00003576 }
3577 else
3578#endif /* YYERROR_VERBOSE */
vlm6a02a8a2004-09-08 00:28:11 +00003579 yyerror("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003580 }
vlm6a02a8a2004-09-08 00:28:11 +00003581
vlmfa67ddc2004-06-03 03:38:44 +00003582 goto yyerrlab1;
vlm6a02a8a2004-09-08 00:28:11 +00003583yyerrlab1: /* here on error raised explicitly by an action */
vlmfa67ddc2004-06-03 03:38:44 +00003584
3585 if (yyerrstatus == 3)
3586 {
vlm6a02a8a2004-09-08 00:28:11 +00003587 /* if just tried and failed to reuse lookahead token after an error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00003588
vlm6a02a8a2004-09-08 00:28:11 +00003589 /* return failure if at end of input */
vlmfa67ddc2004-06-03 03:38:44 +00003590 if (yychar == YYEOF)
vlm6a02a8a2004-09-08 00:28:11 +00003591 YYABORT;
vlmfa67ddc2004-06-03 03:38:44 +00003592
vlm6a02a8a2004-09-08 00:28:11 +00003593#if YYDEBUG != 0
3594 if (yydebug)
3595 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3596#endif
3597
vlmfa67ddc2004-06-03 03:38:44 +00003598 yychar = YYEMPTY;
3599 }
3600
vlm6a02a8a2004-09-08 00:28:11 +00003601 /* Else will try to reuse lookahead token
3602 after shifting the error token. */
vlmfa67ddc2004-06-03 03:38:44 +00003603
vlm6a02a8a2004-09-08 00:28:11 +00003604 yyerrstatus = 3; /* Each real token shifted decrements this */
vlmfa67ddc2004-06-03 03:38:44 +00003605
vlm6a02a8a2004-09-08 00:28:11 +00003606 goto yyerrhandle;
vlm80103492004-09-07 10:39:09 +00003607
vlm6a02a8a2004-09-08 00:28:11 +00003608yyerrdefault: /* current state does not do anything special for the error token. */
vlm80103492004-09-07 10:39:09 +00003609
vlm6a02a8a2004-09-08 00:28:11 +00003610#if 0
3611 /* This is wrong; only states that explicitly want error tokens
3612 should shift them. */
3613 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3614 if (yyn) goto yydefault;
vlm39e5ed72004-09-05 10:40:41 +00003615#endif
vlm6a02a8a2004-09-08 00:28:11 +00003616
3617yyerrpop: /* pop the current state because it cannot handle the error token */
3618
3619 if (yyssp == yyss) YYABORT;
3620 yyvsp--;
3621 yystate = *--yyssp;
3622#ifdef YYLSP_NEEDED
3623 yylsp--;
3624#endif
3625
3626#if YYDEBUG != 0
3627 if (yydebug)
3628 {
3629 short *ssp1 = yyss - 1;
3630 fprintf (stderr, "Error: state stack now");
3631 while (ssp1 != yyssp)
3632 fprintf (stderr, " %d", *++ssp1);
3633 fprintf (stderr, "\n");
vlm39e5ed72004-09-05 10:40:41 +00003634 }
vlm6a02a8a2004-09-08 00:28:11 +00003635#endif
3636
3637yyerrhandle:
3638
3639 yyn = yypact[yystate];
3640 if (yyn == YYFLAG)
3641 goto yyerrdefault;
3642
3643 yyn += YYTERROR;
3644 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3645 goto yyerrdefault;
3646
3647 yyn = yytable[yyn];
3648 if (yyn < 0)
3649 {
3650 if (yyn == YYFLAG)
3651 goto yyerrpop;
3652 yyn = -yyn;
3653 goto yyreduce;
3654 }
3655 else if (yyn == 0)
3656 goto yyerrpop;
vlmfa67ddc2004-06-03 03:38:44 +00003657
3658 if (yyn == YYFINAL)
3659 YYACCEPT;
3660
vlm6a02a8a2004-09-08 00:28:11 +00003661#if YYDEBUG != 0
3662 if (yydebug)
3663 fprintf(stderr, "Shifting error token, ");
3664#endif
vlmfa67ddc2004-06-03 03:38:44 +00003665
3666 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00003667#ifdef YYLSP_NEEDED
3668 *++yylsp = yylloc;
3669#endif
vlmfa67ddc2004-06-03 03:38:44 +00003670
3671 yystate = yyn;
3672 goto yynewstate;
3673
vlm6a02a8a2004-09-08 00:28:11 +00003674 yyacceptlab:
3675 /* YYACCEPT comes here. */
3676 if (yyfree_stacks)
3677 {
3678 free (yyss);
3679 free (yyvs);
3680#ifdef YYLSP_NEEDED
3681 free (yyls);
vlm044f7442004-09-04 04:49:21 +00003682#endif
vlm6a02a8a2004-09-08 00:28:11 +00003683 }
3684 return 0;
vlm80103492004-09-07 10:39:09 +00003685
vlm6a02a8a2004-09-08 00:28:11 +00003686 yyabortlab:
3687 /* YYABORT comes here. */
3688 if (yyfree_stacks)
3689 {
3690 free (yyss);
3691 free (yyvs);
3692#ifdef YYLSP_NEEDED
3693 free (yyls);
vlm80103492004-09-07 10:39:09 +00003694#endif
vlm6a02a8a2004-09-08 00:28:11 +00003695 }
3696 return 1;
vlmfa67ddc2004-06-03 03:38:44 +00003697}
vlm066dc102005-08-22 12:23:54 +00003698#line 2113 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00003699
3700
3701
3702/*
3703 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3704 */
3705static asn1p_value_t *
3706_convert_bitstring2binary(char *str, int base) {
3707 asn1p_value_t *val;
3708 int slen;
3709 int memlen;
3710 int baselen;
3711 int bits;
3712 uint8_t *binary_vector;
3713 uint8_t *bv_ptr;
3714 uint8_t cur_val;
3715
3716 assert(str);
3717 assert(str[0] == '\'');
3718
3719 switch(base) {
3720 case 'B':
3721 baselen = 1;
3722 break;
3723 case 'H':
3724 baselen = 4;
3725 break;
3726 default:
3727 assert(base == 'B' || base == 'H');
3728 errno = EINVAL;
3729 return NULL;
3730 }
3731
3732 slen = strlen(str);
3733 assert(str[slen - 1] == base);
3734 assert(str[slen - 2] == '\'');
3735
3736 memlen = slen / (8 / baselen); /* Conservative estimate */
3737
3738 bv_ptr = binary_vector = malloc(memlen + 1);
3739 if(bv_ptr == NULL)
3740 /* ENOMEM */
3741 return NULL;
3742
3743 cur_val = 0;
3744 bits = 0;
3745 while(*(++str) != '\'') {
3746 switch(baselen) {
3747 case 1:
3748 switch(*str) {
3749 case '1':
3750 cur_val |= 1 << (7 - (bits % 8));
3751 case '0':
3752 break;
3753 default:
3754 assert(!"_y UNREACH1");
3755 case ' ': case '\r': case '\n':
3756 continue;
3757 }
3758 break;
3759 case 4:
3760 switch(*str) {
3761 case '0': case '1': case '2': case '3': case '4':
3762 case '5': case '6': case '7': case '8': case '9':
3763 cur_val |= (*str - '0') << (4 - (bits % 8));
3764 break;
3765 case 'A': case 'B': case 'C':
3766 case 'D': case 'E': case 'F':
3767 cur_val |= ((*str - 'A') + 10)
3768 << (4 - (bits % 8));
3769 break;
3770 default:
3771 assert(!"_y UNREACH2");
3772 case ' ': case '\r': case '\n':
3773 continue;
3774 }
3775 break;
3776 }
3777
3778 bits += baselen;
3779 if((bits % 8) == 0) {
3780 *bv_ptr++ = cur_val;
3781 cur_val = 0;
3782 }
3783 }
3784
3785 *bv_ptr = cur_val;
3786 assert((bv_ptr - binary_vector) <= memlen);
3787
3788 val = asn1p_value_frombits(binary_vector, bits, 0);
3789 if(val == NULL) {
3790 free(binary_vector);
3791 }
3792
3793 return val;
3794}
3795
vlm5d89c3d2005-08-13 09:07:11 +00003796/*
3797 * For unnamed types (used in old X.208 compliant modules)
3798 * generate some sort of interim names, to not to force human being to fix
3799 * the specification's compliance to modern ASN.1 standards.
3800 */
3801static void
3802_fixup_anonymous_identifier(asn1p_expr_t *expr) {
3803 char *p;
3804 assert(expr->Identifier == 0);
3805
3806 /*
3807 * Try to figure out the type name
3808 * without going too much into details
3809 */
3810 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
3811 if(expr->reference && expr->reference->comp_count > 0)
3812 expr->Identifier = expr->reference->components[0].name;
3813
3814 fprintf(stderr,
3815 "WARNING: Line %d: expected lower-case member identifier, "
3816 "found an unnamed %s.\n"
3817 "WARNING: Obsolete X.208 syntax detected, "
3818 "please give the member a name.\n",
3819 yylineno, expr->Identifier ? expr->Identifier : "type");
3820
3821 if(!expr->Identifier)
3822 expr->Identifier = "unnamed";
3823 expr->Identifier = strdup(expr->Identifier);
3824 assert(expr->Identifier);
3825 /* Make a lowercase identifier from the type name */
3826 for(p = expr->Identifier; *p; p++) {
3827 switch(*p) {
3828 case 'A' ... 'Z': *p += 32; break;
3829 case ' ': *p = '_'; break;
3830 case '-': *p = '_'; break;
3831 }
3832 }
3833 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
3834 "Name clash may occur later.\n",
3835 expr->Identifier);
3836}
3837
vlm066dc102005-08-22 12:23:54 +00003838static void
3839apply_nonstd_mods() {
3840 if(!asn1p_as_pointer) return;
3841 asn1p_as_pointer = 0;
3842
3843 if(asn1p_last_type) {
3844 asn1p_last_type->marker.flags |= EM_INDIRECT;
3845 fprintf(stderr, "INFO: Modifier <asn1c:pointer> "
3846 "applied to \"%s\" at line %d\n",
3847 asn1p_last_type->Identifier
3848 ? asn1p_last_type->Identifier : "<anonymous>",
3849 asn1p_last_type->_lineno);
3850 asn1p_last_type = 0;
3851 }
3852}
3853
vlmfa67ddc2004-06-03 03:38:44 +00003854extern char *asn1p_text;
3855
3856int
3857yyerror(const char *msg) {
3858 fprintf(stderr,
3859 "ASN.1 grammar parse error "
3860 "near line %d (token \"%s\"): %s\n",
vlm39e5ed72004-09-05 10:40:41 +00003861 yylineno, asn1p_text, msg);
vlmfa67ddc2004-06-03 03:38:44 +00003862 return -1;
3863}
3864
3865