blob: f74538fbb2e5dad7d23b7302b31b2ba8eef9774b [file] [log] [blame]
Lev Walkinf15320b2004-06-03 03:38:44 +00001
Lev Walkin1004aa92004-09-08 00:28:11 +00002/* A Bison parser, made from asn1p_y.y
3 by GNU Bison version 1.28 */
Lev Walkinf15320b2004-06-03 03:38:44 +00004
Lev Walkin1004aa92004-09-08 00:28:11 +00005#define YYBISON 1 /* Identify Bison output. */
Lev Walkinf15320b2004-06-03 03:38:44 +00006
7#define yyparse asn1p_parse
Lev Walkin1004aa92004-09-08 00:28:11 +00008#define yylex asn1p_lex
Lev Walkinf15320b2004-06-03 03:38:44 +00009#define yyerror asn1p_error
Lev Walkin1004aa92004-09-08 00:28:11 +000010#define yylval asn1p_lval
11#define yychar asn1p_char
Lev Walkinf15320b2004-06-03 03:38:44 +000012#define yydebug asn1p_debug
13#define yynerrs asn1p_nerrs
Lev Walkin1004aa92004-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
Lev Walkind9574ae2005-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
Lev Walkinf15320b2004-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
Lev Walkin4a4bdf72005-06-07 21:43:32 +0000127#define YYPARSE_PARAM_TYPE void **
Lev Walkinf15320b2004-06-03 03:38:44 +0000128#define YYERROR_VERBOSE
129
130int yylex(void);
131int yyerror(const char *msg);
Lev Walkin4a4bdf72005-06-07 21:43:32 +0000132#ifdef YYBYACC
133int yyparse(void **param); /* byacc does not produce a prototype */
134#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000135void asn1p_lexer_hack_push_opaque_state(void);
136void asn1p_lexer_hack_enable_with_syntax(void);
Lev Walkinf59d0752004-08-18 04:59:12 +0000137void asn1p_lexer_hack_push_encoding_control(void);
Lev Walkinf15320b2004-06-03 03:38:44 +0000138#define yylineno asn1p_lineno
139extern int asn1p_lineno;
140
Lev Walkinb36317c2005-08-12 10:09:10 +0000141/*
Lev Walkin4696c742005-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/*
Lev Walkinb36317c2005-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;
Lev Walkinf15320b2004-06-03 03:38:44 +0000153
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000154static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
155static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
Lev Walkinf15320b2004-06-03 03:38:44 +0000156
Lev Walkinb36317c2005-08-12 10:09:10 +0000157#define checkmem(ptr) do { \
158 if(!(ptr)) \
159 return yyerror("Memory failure"); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000160 } while(0)
161
Lev Walkinb36317c2005-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 } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000179 } while(0)
180
181
Lev Walkin4696c742005-08-22 12:23:54 +0000182#line 74 "asn1p_y.y"
Lev Walkinf15320b2004-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 */
Lev Walkinb36317c2005-08-12 10:09:10 +0000192 struct AssignedIdentifier a_aid; /* Assigned Identifier */
Lev Walkinf15320b2004-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 */
Lev Walkin9c974182004-09-15 11:59:51 +0000203 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
Lev Walkinf15320b2004-06-03 03:38:44 +0000204 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
Lev Walkind21c5052004-09-29 13:18:09 +0000205 asn1c_integer_t a_int;
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +0000215} YYSTYPE;
216#include <stdio.h>
217
218#ifndef __cplusplus
219#ifndef __STDC__
220#define const
221#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000222#endif
223
224
225
Lev Walkin4696c742005-08-22 12:23:54 +0000226#define YYFINAL 434
Lev Walkin1004aa92004-09-08 00:28:11 +0000227#define YYFLAG -32768
Lev Walkind9574ae2005-03-24 16:22:35 +0000228#define YYNTBASE 118
Lev Walkinf15320b2004-06-03 03:38:44 +0000229
Lev Walkin4696c742005-08-22 12:23:54 +0000230#define YYTRANSLATE(x) ((unsigned)(x) <= 356 ? yytranslate[x] : 226)
Lev Walkinf15320b2004-06-03 03:38:44 +0000231
Lev Walkin1004aa92004-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,
Lev Walkind9574ae2005-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,
Lev Walkin1004aa92004-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,
Lev Walkind9574ae2005-03-24 16:22:35 +0000242 116, 2, 117, 99, 2, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-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,
Lev Walkind9574ae2005-03-24 16:22:35 +0000245 2, 2, 105, 101, 106, 2, 2, 2, 2, 2,
Lev Walkin1004aa92004-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,
Lev Walkind9574ae2005-03-24 16:22:35 +0000268 97, 98, 100, 102, 103, 104
Lev Walkin1004aa92004-09-08 00:28:11 +0000269};
Lev Walkinf15320b2004-06-03 03:38:44 +0000270
Lev Walkin1004aa92004-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,
Lev Walkinb36317c2005-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,
Lev Walkin2e9bd5c2005-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,
Lev Walkin4696c742005-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,
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000290 488, 490, 492, 494, 496, 498, 500, 502, 504, 506,
Lev Walkin4696c742005-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
Lev Walkin1004aa92004-09-08 00:28:11 +0000301};
Lev Walkinf15320b2004-06-03 03:38:44 +0000302
Lev Walkind9574ae2005-03-24 16:22:35 +0000303static const short yyrhs[] = { 119,
Lev Walkin4696c742005-08-22 12:23:54 +0000304 0, 120, 0, 119, 120, 0, 222, 121, 36, 125,
Lev Walkind9574ae2005-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,
Lev Walkin4696c742005-08-22 12:23:54 +0000307 225, 0, 225, 107, 9, 108, 0, 9, 0, 0,
Lev Walkind9574ae2005-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,
Lev Walkin4696c742005-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,
Lev Walkinb36317c2005-08-12 10:09:10 +0000313 0, 56, 48, 0, 135, 0, 133, 135, 0, 0,
Lev Walkin4696c742005-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,
Lev Walkinb36317c2005-08-12 10:09:10 +0000316 0, 44, 139, 109, 0, 44, 19, 109, 0, 44,
Lev Walkin4696c742005-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,
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000328 0, 164, 0, 30, 105, 156, 106, 158, 0, 0,
Lev Walkin4696c742005-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,
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000331 0, 0, 159, 0, 0, 97, 84, 105, 160, 161,
Lev Walkin4696c742005-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,
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000350 0, 46, 0, 38, 73, 0, 28, 83, 0, 93,
Lev Walkin4696c742005-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,
Lev Walkin2e9bd5c2005-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,
Lev Walkin4696c742005-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,
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000366 103, 0, 114, 103, 114, 0, 82, 0, 48, 0,
Lev Walkin4696c742005-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,
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000380 21, 0, 77, 0, 0, 54, 0, 43, 0, 13,
Lev Walkin4696c742005-08-22 12:23:54 +0000381 0, 14, 0, 14, 0, 0, 225, 0, 8, 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000382};
Lev Walkinf15320b2004-06-03 03:38:44 +0000383
384#endif
385
Lev Walkin1004aa92004-09-08 00:28:11 +0000386#if YYDEBUG != 0
387static const short yyrline[] = { 0,
Lev Walkin4696c742005-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
Lev Walkin1004aa92004-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",
Lev Walkind9574ae2005-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",
Lev Walkinb36317c2005-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",
Lev Walkin4696c742005-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
Lev Walkin1004aa92004-09-08 00:28:11 +0000466};
467#endif
468
469static const short yyr1[] = { 0,
Lev Walkind9574ae2005-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,
Lev Walkinb36317c2005-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,
Lev Walkin2e9bd5c2005-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,
Lev Walkin4696c742005-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
Lev Walkin1004aa92004-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,
Lev Walkinb36317c2005-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,
Lev Walkin2e9bd5c2005-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,
Lev Walkin4696c742005-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,
Lev Walkin1004aa92004-09-08 00:28:11 +0000518 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin4696c742005-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
Lev Walkin1004aa92004-09-08 00:28:11 +0000529};
530
531static const short yydefact[] = { 0,
Lev Walkin4696c742005-08-22 12:23:54 +0000532 275, 276, 1, 2, 5, 3, 0, 0, 6, 280,
Lev Walkin1004aa92004-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,
Lev Walkin4696c742005-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,
Lev Walkinb36317c2005-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,
Lev Walkin4696c742005-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,
Lev Walkinb36317c2005-08-12 10:09:10 +0000545 63, 0, 65, 0, 0, 0, 51, 53, 39, 43,
Lev Walkin4696c742005-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
Lev Walkin1004aa92004-09-08 00:28:11 +0000576};
577
Lev Walkin4696c742005-08-22 12:23:54 +0000578static const short yydefgoto[] = { 432,
Lev Walkin1004aa92004-09-08 00:28:11 +0000579 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
Lev Walkin4696c742005-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
Lev Walkin1004aa92004-09-08 00:28:11 +0000590};
591
Lev Walkin4696c742005-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,
Lev Walkin1e448d32005-03-24 14:26:38 +0000610-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
Lev Walkin4696c742005-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,
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000632-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
Lev Walkin4696c742005-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
Lev Walkin1004aa92004-09-08 00:28:11 +0000637};
638
639static const short yypgoto[] = {-32768,
Lev Walkin4696c742005-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
Lev Walkin1004aa92004-09-08 00:28:11 +0000651};
652
653
Lev Walkin4696c742005-08-22 12:23:54 +0000654#define YYLAST 745
Lev Walkin1004aa92004-09-08 00:28:11 +0000655
656
657static const short yytable[] = { 15,
Lev Walkin4696c742005-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
Lev Walkin1004aa92004-09-08 00:28:11 +0000733};
734
735static const short yycheck[] = { 7,
Lev Walkin4696c742005-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
Lev Walkin1004aa92004-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
Lev Walkinf15320b2004-06-03 03:38:44 +0000888#else
Lev Walkin1004aa92004-09-08 00:28:11 +0000889#define YYSTACK_ALLOC malloc
Lev Walkinf15320b2004-06-03 03:38:44 +0000890#endif
891
Lev Walkin1004aa92004-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. */
Lev Walkinf15320b2004-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
Lev Walkin1004aa92004-09-08 00:28:11 +0000901#define YYABORT goto yyabortlab
Lev Walkinf15320b2004-06-03 03:38:44 +0000902#define YYERROR goto yyerrlab1
Lev Walkin1004aa92004-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.
Lev Walkinf15320b2004-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)
Lev Walkin1004aa92004-09-08 00:28:11 +0000909#define YYBACKUP(token, value) \
Lev Walkinf15320b2004-06-03 03:38:44 +0000910do \
911 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin1004aa92004-09-08 00:28:11 +0000912 { yychar = (token), yylval = (value); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000913 yychar1 = YYTRANSLATE (yychar); \
914 YYPOPSTACK; \
915 goto yybackup; \
916 } \
917 else \
Lev Walkin1004aa92004-09-08 00:28:11 +0000918 { yyerror ("syntax error: cannot back up"); YYERROR; } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000919while (0)
920
921#define YYTERROR 1
922#define YYERRCODE 256
923
Lev Walkin1004aa92004-09-08 00:28:11 +0000924#ifndef YYPURE
925#define YYLEX yylex()
Lev Walkinf15320b2004-06-03 03:38:44 +0000926#endif
927
Lev Walkin1004aa92004-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
Lev Walkinf15320b2004-06-03 03:38:44 +0000943
Lev Walkin1004aa92004-09-08 00:28:11 +0000944/* If nonreentrant, generate the variables here */
Lev Walkinf15320b2004-06-03 03:38:44 +0000945
Lev Walkin1004aa92004-09-08 00:28:11 +0000946#ifndef YYPURE
Lev Walkinf15320b2004-06-03 03:38:44 +0000947
Lev Walkin1004aa92004-09-08 00:28:11 +0000948int yychar; /* the lookahead symbol */
949YYSTYPE yylval; /* the semantic value of the */
950 /* lookahead symbol */
Lev Walkinf15320b2004-06-03 03:38:44 +0000951
Lev Walkin1004aa92004-09-08 00:28:11 +0000952#ifdef YYLSP_NEEDED
953YYLTYPE yylloc; /* location data for the lookahead */
954 /* symbol */
955#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000956
Lev Walkin1004aa92004-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
Lev Walkinf15320b2004-06-03 03:38:44 +0000968#ifndef YYINITDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000969#define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +0000970#endif
971
Lev Walkin1004aa92004-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). */
Lev Walkinf15320b2004-06-03 03:38:44 +0000974
975#if YYMAXDEPTH == 0
Lev Walkin1004aa92004-09-08 00:28:11 +0000976#undef YYMAXDEPTH
Lev Walkinf15320b2004-06-03 03:38:44 +0000977#endif
978
979#ifndef YYMAXDEPTH
Lev Walkin1004aa92004-09-08 00:28:11 +0000980#define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +0000981#endif
982
Lev Walkin1004aa92004-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. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000987
Lev Walkin1004aa92004-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
Lev Walkinf15320b2004-06-03 03:38:44 +0000992
Lev Walkin1004aa92004-09-08 00:28:11 +0000993/* This is the most reliable way to avoid incompatibilities
994 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +0000995static void
Lev Walkin1004aa92004-09-08 00:28:11 +0000996__yy_memcpy (to, from, count)
997 char *to;
998 char *from;
999 unsigned int count;
Lev Walkin459ab022004-09-07 10:39:09 +00001000{
Lev Walkin1004aa92004-09-08 00:28:11 +00001001 register char *f = from;
1002 register char *t = to;
1003 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001004
Lev Walkin1004aa92004-09-08 00:28:11 +00001005 while (i-- > 0)
1006 *t++ = *f++;
Lev Walkin459ab022004-09-07 10:39:09 +00001007}
Lev Walkin459ab022004-09-07 10:39:09 +00001008
Lev Walkin1004aa92004-09-08 00:28:11 +00001009#else /* __cplusplus */
Lev Walkin459ab022004-09-07 10:39:09 +00001010
Lev Walkin1004aa92004-09-08 00:28:11 +00001011/* This is the most reliable way to avoid incompatibilities
1012 in available built-in functions on various systems. */
Lev Walkin459ab022004-09-07 10:39:09 +00001013static void
Lev Walkin1004aa92004-09-08 00:28:11 +00001014__yy_memcpy (char *to, char *from, unsigned int count)
Lev Walkin459ab022004-09-07 10:39:09 +00001015{
Lev Walkin1004aa92004-09-08 00:28:11 +00001016 register char *t = to;
1017 register char *f = from;
1018 register int i = count;
Lev Walkin459ab022004-09-07 10:39:09 +00001019
Lev Walkin1004aa92004-09-08 00:28:11 +00001020 while (i-- > 0)
1021 *t++ = *f++;
Lev Walkin609ccbb2004-09-04 04:49:21 +00001022}
Lev Walkin609ccbb2004-09-04 04:49:21 +00001023
Lev Walkin1004aa92004-09-08 00:28:11 +00001024#endif
1025#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001026
Lev Walkin1004aa92004-09-08 00:28:11 +00001027#line 217 "/usr/share/bison.simple"
Lev Walkinf15320b2004-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
Lev Walkin1004aa92004-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 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001047
1048/* Prevent warning if -Wstrict-prototypes. */
1049#ifdef __GNUC__
Lev Walkin1004aa92004-09-08 00:28:11 +00001050#ifdef YYPARSE_PARAM
Lev Walkinf15320b2004-06-03 03:38:44 +00001051int yyparse (void *);
Lev Walkin1004aa92004-09-08 00:28:11 +00001052#else
Lev Walkinf15320b2004-06-03 03:38:44 +00001053int yyparse (void);
Lev Walkin1004aa92004-09-08 00:28:11 +00001054#endif
Lev Walkinceb20e72004-09-05 10:40:41 +00001055#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001056
Lev Walkinf15320b2004-06-03 03:38:44 +00001057int
Lev Walkin1004aa92004-09-08 00:28:11 +00001058yyparse(YYPARSE_PARAM_ARG)
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-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 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001067
Lev Walkin1004aa92004-09-08 00:28:11 +00001068 short yyssa[YYINITDEPTH]; /* the state stack */
1069 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
Lev Walkinf15320b2004-06-03 03:38:44 +00001070
Lev Walkin1004aa92004-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 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001073
Lev Walkin1004aa92004-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
Lev Walkinf15320b2004-06-03 03:38:44 +00001081#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkin1004aa92004-09-08 00:28:11 +00001082#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001083
Lev Walkin1004aa92004-09-08 00:28:11 +00001084 int yystacksize = YYINITDEPTH;
1085 int yyfree_stacks = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001086
Lev Walkin1004aa92004-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
Lev Walkinf15320b2004-06-03 03:38:44 +00001095
Lev Walkin1004aa92004-09-08 00:28:11 +00001096 YYSTYPE yyval; /* the variable used to return */
1097 /* semantic values from the action */
1098 /* routines */
Lev Walkinf15320b2004-06-03 03:38:44 +00001099
1100 int yylen;
1101
Lev Walkin1004aa92004-09-08 00:28:11 +00001102#if YYDEBUG != 0
1103 if (yydebug)
1104 fprintf(stderr, "Starting parse\n");
1105#endif
Lev Walkinf15320b2004-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
Lev Walkin1004aa92004-09-08 00:28:11 +00001117 yyssp = yyss - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001118 yyvsp = yyvs;
Lev Walkin1004aa92004-09-08 00:28:11 +00001119#ifdef YYLSP_NEEDED
1120 yylsp = yyls;
1121#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001122
Lev Walkin1004aa92004-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:
Lev Walkinf15320b2004-06-03 03:38:44 +00001127
Lev Walkin1004aa92004-09-08 00:28:11 +00001128 *++yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001129
1130 if (yyssp >= yyss + yystacksize - 1)
1131 {
Lev Walkin1004aa92004-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
Lev Walkinf15320b2004-06-03 03:38:44 +00001140 /* Get the current used size of the three stacks, in elements. */
Lev Walkin1004aa92004-09-08 00:28:11 +00001141 int size = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001142
1143#ifdef yyoverflow
Lev Walkin1004aa92004-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
Lev Walkinf15320b2004-06-03 03:38:44 +00001160
Lev Walkin1004aa92004-09-08 00:28:11 +00001161 yyss = yyss1; yyvs = yyvs1;
1162#ifdef YYLSP_NEEDED
1163 yyls = yyls1;
1164#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001165#else /* no yyoverflow */
1166 /* Extend the stack our own way. */
1167 if (yystacksize >= YYMAXDEPTH)
Lev Walkin1004aa92004-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 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001180 yystacksize *= 2;
1181 if (yystacksize > YYMAXDEPTH)
1182 yystacksize = YYMAXDEPTH;
Lev Walkin1004aa92004-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
Lev Walkinf15320b2004-06-03 03:38:44 +00001197#endif /* no yyoverflow */
1198
Lev Walkin1004aa92004-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
Lev Walkinf15320b2004-06-03 03:38:44 +00001204
Lev Walkin1004aa92004-09-08 00:28:11 +00001205#if YYDEBUG != 0
1206 if (yydebug)
1207 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1208#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001209
1210 if (yyssp >= yyss + yystacksize - 1)
1211 YYABORT;
1212 }
1213
Lev Walkin1004aa92004-09-08 00:28:11 +00001214#if YYDEBUG != 0
1215 if (yydebug)
1216 fprintf(stderr, "Entering state %d\n", yystate);
1217#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001218
1219 goto yybackup;
Lev Walkin1004aa92004-09-08 00:28:11 +00001220 yybackup:
Lev Walkinf15320b2004-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];
Lev Walkin1004aa92004-09-08 00:28:11 +00001229 if (yyn == YYFLAG)
Lev Walkinf15320b2004-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 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001239#if YYDEBUG != 0
1240 if (yydebug)
1241 fprintf(stderr, "Reading a token: ");
1242#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001243 yychar = YYLEX;
1244 }
1245
Lev Walkin1004aa92004-09-08 00:28:11 +00001246 /* Convert token to internal form (in yychar1) for indexing tables with */
Lev Walkinf15320b2004-06-03 03:38:44 +00001247
Lev Walkin1004aa92004-09-08 00:28:11 +00001248 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001249 {
1250 yychar1 = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001251 yychar = YYEOF; /* Don't call YYLEX any more */
Lev Walkinf15320b2004-06-03 03:38:44 +00001252
Lev Walkin1004aa92004-09-08 00:28:11 +00001253#if YYDEBUG != 0
1254 if (yydebug)
1255 fprintf(stderr, "Now at end of input.\n");
1256#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001257 }
1258 else
1259 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001260 yychar1 = YYTRANSLATE(yychar);
Lev Walkinf15320b2004-06-03 03:38:44 +00001261
Lev Walkin1004aa92004-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
Lev Walkinf15320b2004-06-03 03:38:44 +00001274 }
1275
1276 yyn += yychar1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001277 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001278 goto yydefault;
Lev Walkin1004aa92004-09-08 00:28:11 +00001279
Lev Walkinf15320b2004-06-03 03:38:44 +00001280 yyn = yytable[yyn];
Lev Walkin1004aa92004-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)
Lev Walkinf15320b2004-06-03 03:38:44 +00001290 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001291 if (yyn == YYFLAG)
Lev Walkinf15320b2004-06-03 03:38:44 +00001292 goto yyerrlab;
1293 yyn = -yyn;
1294 goto yyreduce;
1295 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001296 else if (yyn == 0)
1297 goto yyerrlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001298
1299 if (yyn == YYFINAL)
1300 YYACCEPT;
1301
1302 /* Shift the lookahead token. */
Lev Walkin1004aa92004-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
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00001314#ifdef YYLSP_NEEDED
1315 *++yylsp = yylloc;
1316#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001317
Lev Walkin1004aa92004-09-08 00:28:11 +00001318 /* count tokens shifted since error; after three, turn off error status. */
1319 if (yyerrstatus) yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001320
1321 yystate = yyn;
1322 goto yynewstate;
1323
Lev Walkin1004aa92004-09-08 00:28:11 +00001324/* Do the default action for the current state. */
Lev Walkin459ab022004-09-07 10:39:09 +00001325yydefault:
Lev Walkin1004aa92004-09-08 00:28:11 +00001326
Lev Walkinf15320b2004-06-03 03:38:44 +00001327 yyn = yydefact[yystate];
1328 if (yyn == 0)
1329 goto yyerrlab;
1330
Lev Walkin1004aa92004-09-08 00:28:11 +00001331/* Do a reduction. yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001332yyreduce:
1333 yylen = yyr2[yyn];
Lev Walkin1004aa92004-09-08 00:28:11 +00001334 if (yylen > 0)
1335 yyval = yyvsp[1-yylen]; /* implement default value of the action */
Lev Walkinf15320b2004-06-03 03:38:44 +00001336
Lev Walkin1004aa92004-09-08 00:28:11 +00001337#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00001338 if (yydebug)
1339 {
Lev Walkin1004aa92004-09-08 00:28:11 +00001340 int i;
Lev Walkinf15320b2004-06-03 03:38:44 +00001341
Lev Walkin1004aa92004-09-08 00:28:11 +00001342 fprintf (stderr, "Reducing via rule %d (line %d), ",
1343 yyn, yyrline[yyn]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001344
1345 /* Print the symbols being reduced, and their result. */
Lev Walkin1004aa92004-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]]);
Lev Walkinf15320b2004-06-03 03:38:44 +00001349 }
1350#endif
Lev Walkin459ab022004-09-07 10:39:09 +00001351
Lev Walkin1004aa92004-09-08 00:28:11 +00001352
1353 switch (yyn) {
1354
1355case 1:
Lev Walkin4696c742005-08-22 12:23:54 +00001356#line 322 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001357{
1358 *(void **)param = yyvsp[0].a_grammar;
1359 ;
1360 break;}
1361case 2:
Lev Walkin4696c742005-08-22 12:23:54 +00001362#line 328 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001363{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001367 ;
1368 break;}
1369case 3:
Lev Walkin4696c742005-08-22 12:23:54 +00001370#line 333 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001371{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001374 ;
1375 break;}
1376case 4:
Lev Walkin4696c742005-08-22 12:23:54 +00001377#line 354 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001378{
Lev Walkinf15320b2004-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
Lev Walkinb36317c2005-08-12 10:09:10 +00001388 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00001391 ;
1392 break;}
1393case 5:
Lev Walkin4696c742005-08-22 12:23:54 +00001394#line 375 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001395{ yyval.a_oid = 0; ;
1396 break;}
1397case 6:
Lev Walkin4696c742005-08-22 12:23:54 +00001398#line 376 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001399{ yyval.a_oid = yyvsp[0].a_oid; ;
1400 break;}
1401case 7:
Lev Walkin4696c742005-08-22 12:23:54 +00001402#line 380 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001403{
Lev Walkinf15320b2004-06-03 03:38:44 +00001404 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin1004aa92004-09-08 00:28:11 +00001405 ;
1406 break;}
1407case 8:
Lev Walkin4696c742005-08-22 12:23:54 +00001408#line 383 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001409{
Lev Walkinf15320b2004-06-03 03:38:44 +00001410 yyval.a_oid = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001411 ;
1412 break;}
1413case 9:
Lev Walkin4696c742005-08-22 12:23:54 +00001414#line 389 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001415{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001420 ;
1421 break;}
1422case 10:
Lev Walkin4696c742005-08-22 12:23:54 +00001423#line 395 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001424{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001429 ;
1430 break;}
1431case 11:
Lev Walkin4696c742005-08-22 12:23:54 +00001432#line 404 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001433{ /* iso */
Lev Walkinf15320b2004-06-03 03:38:44 +00001434 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1435 yyval.a_oid_arc.number = -1;
Lev Walkin1004aa92004-09-08 00:28:11 +00001436 ;
1437 break;}
1438case 12:
Lev Walkin4696c742005-08-22 12:23:54 +00001439#line 408 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001440{ /* iso(1) */
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00001443 ;
1444 break;}
1445case 13:
Lev Walkin4696c742005-08-22 12:23:54 +00001446#line 412 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001447{ /* 1 */
Lev Walkinf15320b2004-06-03 03:38:44 +00001448 yyval.a_oid_arc.name = 0;
1449 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00001450 ;
1451 break;}
1452case 14:
Lev Walkin4696c742005-08-22 12:23:54 +00001453#line 422 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001454{ yyval.a_module_flags = MSF_NOFLAGS; ;
1455 break;}
1456case 15:
Lev Walkin4696c742005-08-22 12:23:54 +00001457#line 423 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001458{
Lev Walkinf15320b2004-06-03 03:38:44 +00001459 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001460 ;
1461 break;}
1462case 16:
Lev Walkin4696c742005-08-22 12:23:54 +00001463#line 432 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001464{
Lev Walkinf15320b2004-06-03 03:38:44 +00001465 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001466 ;
1467 break;}
1468case 17:
Lev Walkin4696c742005-08-22 12:23:54 +00001469#line 435 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001470{
Lev Walkinf15320b2004-06-03 03:38:44 +00001471 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin1004aa92004-09-08 00:28:11 +00001472 ;
1473 break;}
1474case 18:
Lev Walkin4696c742005-08-22 12:23:54 +00001475#line 444 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001476{
Lev Walkinf15320b2004-06-03 03:38:44 +00001477 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001478 ;
1479 break;}
1480case 19:
Lev Walkin4696c742005-08-22 12:23:54 +00001481#line 447 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001482{
Lev Walkinf15320b2004-06-03 03:38:44 +00001483 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001484 ;
1485 break;}
1486case 20:
Lev Walkin4696c742005-08-22 12:23:54 +00001487#line 450 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001488{
Lev Walkinf15320b2004-06-03 03:38:44 +00001489 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin1004aa92004-09-08 00:28:11 +00001490 ;
1491 break;}
1492case 21:
Lev Walkin4696c742005-08-22 12:23:54 +00001493#line 453 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001494{
Lev Walkinf15320b2004-06-03 03:38:44 +00001495 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin1004aa92004-09-08 00:28:11 +00001496 ;
1497 break;}
1498case 22:
Lev Walkin4696c742005-08-22 12:23:54 +00001499#line 457 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001500{
Lev Walkinf59d0752004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001514 ;
1515 break;}
1516case 23:
Lev Walkin4696c742005-08-22 12:23:54 +00001517#line 478 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001518{ yyval.a_module = 0; ;
1519 break;}
1520case 24:
Lev Walkin4696c742005-08-22 12:23:54 +00001521#line 479 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001522{
Lev Walkinf15320b2004-06-03 03:38:44 +00001523 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001524 ;
1525 break;}
1526case 25:
Lev Walkin4696c742005-08-22 12:23:54 +00001527#line 488 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001528{
Lev Walkinf59d0752004-08-18 04:59:12 +00001529 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001530 ;
1531 break;}
1532case 26:
Lev Walkin4696c742005-08-22 12:23:54 +00001533#line 491 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001534{
Lev Walkinf15320b2004-06-03 03:38:44 +00001535 yyval.a_module = yyvsp[-1].a_module;
1536
Lev Walkinf59d0752004-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
Lev Walkinf15320b2004-06-03 03:38:44 +00001543#ifdef MY_IMPORT
1544#error MY_IMPORT DEFINED ELSEWHERE!
1545#endif
1546#define MY_IMPORT(foo,field) do { \
Lev Walkinbc55d232004-08-13 12:31:09 +00001547 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
Lev Walkinf15320b2004-06-03 03:38:44 +00001548 TQ_ADD(&(yyval.a_module->foo), \
1549 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1550 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00001551 } \
1552 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1553 } while(0)
Lev Walkinf15320b2004-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
Lev Walkin1004aa92004-09-08 00:28:11 +00001560 ;
1561 break;}
1562case 27:
Lev Walkin4696c742005-08-22 12:23:54 +00001563#line 524 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001564{
Lev Walkinf15320b2004-06-03 03:38:44 +00001565 yyval.a_module = yyvsp[0].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001566 ;
1567 break;}
1568case 28:
Lev Walkin4696c742005-08-22 12:23:54 +00001569#line 527 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001570{
Lev Walkinf15320b2004-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 }
Lev Walkin1004aa92004-09-08 00:28:11 +00001578 ;
1579 break;}
1580case 29:
Lev Walkin4696c742005-08-22 12:23:54 +00001581#line 536 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001582{
Lev Walkinf59d0752004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001588 ;
1589 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001590case 30:
Lev Walkin4696c742005-08-22 12:23:54 +00001591#line 543 "asn1p_y.y"
Lev Walkinb36317c2005-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;}
Lev Walkin1004aa92004-09-08 00:28:11 +00001600case 31:
Lev Walkin4696c742005-08-22 12:23:54 +00001601#line 556 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001602{
Lev Walkinf59d0752004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001608 ;
1609 break;}
1610case 32:
Lev Walkin4696c742005-08-22 12:23:54 +00001611#line 564 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001612{ asn1p_lexer_hack_push_encoding_control(); ;
1613 break;}
1614case 33:
Lev Walkin4696c742005-08-22 12:23:54 +00001615#line 565 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001616{
Lev Walkinf59d0752004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00001623 ;
1624 break;}
1625case 34:
Lev Walkin4696c742005-08-22 12:23:54 +00001626#line 577 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001627{
Lev Walkinf15320b2004-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");
Lev Walkin1004aa92004-09-08 00:28:11 +00001632 ;
1633 break;}
1634case 35:
Lev Walkin4696c742005-08-22 12:23:54 +00001635#line 591 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001636{
Lev Walkinb36317c2005-08-12 10:09:10 +00001637 if(!saved_aid && 0)
1638 return yyerror("Unterminated IMPORTS FROM, "
1639 "expected semicolon ';'");
1640 saved_aid = 0;
Lev Walkinf15320b2004-06-03 03:38:44 +00001641 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin1004aa92004-09-08 00:28:11 +00001642 ;
1643 break;}
1644case 36:
Lev Walkin4696c742005-08-22 12:23:54 +00001645#line 601 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001646{
Lev Walkinf15320b2004-06-03 03:38:44 +00001647 return yyerror("Empty IMPORTS list");
Lev Walkin1004aa92004-09-08 00:28:11 +00001648 ;
1649 break;}
1650case 37:
Lev Walkin4696c742005-08-22 12:23:54 +00001651#line 607 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001652{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001656 ;
1657 break;}
1658case 38:
Lev Walkin4696c742005-08-22 12:23:54 +00001659#line 612 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001660{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001663 ;
1664 break;}
1665case 39:
Lev Walkin4696c742005-08-22 12:23:54 +00001666#line 619 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001667{ memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
1668 break;}
1669case 40:
Lev Walkin4696c742005-08-22 12:23:54 +00001670#line 620 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001671{ yyval.a_aid.oid = yyvsp[0].a_oid; ;
1672 break;}
1673case 41:
Lev Walkin4696c742005-08-22 12:23:54 +00001674#line 624 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001675{
Lev Walkinf15320b2004-06-03 03:38:44 +00001676 yyval.a_xports = yyvsp[-3].a_xports;
Lev Walkinb36317c2005-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);
Lev Walkinf15320b2004-06-03 03:38:44 +00001681 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001682 ;
1683 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001684case 42:
Lev Walkin4696c742005-08-22 12:23:54 +00001685#line 635 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001686{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001690 ;
1691 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001692case 43:
Lev Walkin4696c742005-08-22 12:23:54 +00001693#line 640 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001694{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001697 ;
1698 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001699case 44:
Lev Walkin4696c742005-08-22 12:23:54 +00001700#line 647 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001701{
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00001706 ;
1707 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001708case 45:
Lev Walkin4696c742005-08-22 12:23:54 +00001709#line 653 "asn1p_y.y"
Lev Walkinb36317c2005-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:
Lev Walkin4696c742005-08-22 12:23:54 +00001718#line 659 "asn1p_y.y"
Lev Walkinb36317c2005-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:
Lev Walkin4696c742005-08-22 12:23:54 +00001727#line 668 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001728{
Lev Walkinf15320b2004-06-03 03:38:44 +00001729 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin1004aa92004-09-08 00:28:11 +00001730 ;
1731 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001732case 48:
Lev Walkin4696c742005-08-22 12:23:54 +00001733#line 671 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001734{
Lev Walkinf15320b2004-06-03 03:38:44 +00001735 yyval.a_xports = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00001736 ;
1737 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001738case 49:
Lev Walkin4696c742005-08-22 12:23:54 +00001739#line 674 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001740{
Lev Walkinf15320b2004-06-03 03:38:44 +00001741 /* Empty EXPORTS clause effectively prohibits export. */
1742 yyval.a_xports = asn1p_xports_new();
1743 checkmem(yyval.a_xports);
Lev Walkin1004aa92004-09-08 00:28:11 +00001744 ;
1745 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001746case 50:
Lev Walkin4696c742005-08-22 12:23:54 +00001747#line 682 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001748{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001752 ;
1753 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001754case 51:
Lev Walkin4696c742005-08-22 12:23:54 +00001755#line 687 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001756{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001759 ;
1760 break;}
Lev Walkin144db9b2004-10-12 23:26:53 +00001761case 52:
Lev Walkin4696c742005-08-22 12:23:54 +00001762#line 694 "asn1p_y.y"
Lev Walkin144db9b2004-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:
Lev Walkin4696c742005-08-22 12:23:54 +00001771#line 700 "asn1p_y.y"
Lev Walkinb36317c2005-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 ;
Lev Walkin8ea99482005-03-31 21:48:13 +00001778 break;}
1779case 54:
Lev Walkin4696c742005-08-22 12:23:54 +00001780#line 706 "asn1p_y.y"
Lev Walkinb36317c2005-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:
Lev Walkin4696c742005-08-22 12:23:54 +00001789#line 717 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00001790{ asn1p_lexer_hack_push_opaque_state(); ;
1791 break;}
1792case 56:
Lev Walkin4696c742005-08-22 12:23:54 +00001793#line 717 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001794{
Lev Walkinf15320b2004-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;
Lev Walkin8ea99482005-03-31 21:48:13 +00001799 // take care of ValueSet body
Lev Walkin1004aa92004-09-08 00:28:11 +00001800 ;
1801 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001802case 57:
Lev Walkin4696c742005-08-22 12:23:54 +00001803#line 727 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001804{
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00001810 ;
1811 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001812case 58:
Lev Walkin4696c742005-08-22 12:23:54 +00001813#line 734 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001814{
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00001819 ;
1820 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001821case 59:
Lev Walkin4696c742005-08-22 12:23:54 +00001822#line 752 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001823{
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00001830 ;
1831 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001832case 60:
Lev Walkin4696c742005-08-22 12:23:54 +00001833#line 760 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001834{
Lev Walkinf15320b2004-06-03 03:38:44 +00001835 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00001836 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinf15320b2004-06-03 03:38:44 +00001837 assert(yyval.a_expr->expr_type);
1838 assert(yyval.a_expr->meta_type);
Lev Walkin1004aa92004-09-08 00:28:11 +00001839 ;
1840 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001841case 61:
Lev Walkin4696c742005-08-22 12:23:54 +00001842#line 766 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001843{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001848 ;
1849 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001850case 62:
Lev Walkin4696c742005-08-22 12:23:54 +00001851#line 782 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001852{
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00001858 ;
1859 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001860case 63:
Lev Walkin4696c742005-08-22 12:23:54 +00001861#line 792 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001862{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001870 ;
1871 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001872case 64:
Lev Walkin4696c742005-08-22 12:23:54 +00001873#line 801 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001874{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00001881 ;
1882 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001883case 65:
Lev Walkin4696c742005-08-22 12:23:54 +00001884#line 812 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001885{
Lev Walkinf15320b2004-06-03 03:38:44 +00001886 yyval.a_parg.governor = NULL;
1887 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00001888 ;
1889 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00001890case 66:
Lev Walkin4696c742005-08-22 12:23:54 +00001891#line 816 "asn1p_y.y"
Lev Walkinb36317c2005-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:
Lev Walkin4696c742005-08-22 12:23:54 +00001901#line 823 "asn1p_y.y"
Lev Walkinb36317c2005-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:
Lev Walkin4696c742005-08-22 12:23:54 +00001911#line 830 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00001912{
1913 int ret;
1914 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00001919 ;
1920 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001921case 69:
Lev Walkin4696c742005-08-22 12:23:54 +00001922#line 841 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001923{
Lev Walkinf15320b2004-06-03 03:38:44 +00001924 yyval.a_expr = asn1p_expr_new(yylineno);
1925 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001926 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1927 ;
1928 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001929case 70:
Lev Walkin4696c742005-08-22 12:23:54 +00001930#line 846 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001931{
Lev Walkinf15320b2004-06-03 03:38:44 +00001932 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001933 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1934 ;
1935 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001936case 71:
Lev Walkin4696c742005-08-22 12:23:54 +00001937#line 853 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001938{
Lev Walkinf15320b2004-06-03 03:38:44 +00001939 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001940 ;
1941 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001942case 72:
Lev Walkin4696c742005-08-22 12:23:54 +00001943#line 856 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001944{
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00001950 ;
1951 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001952case 73:
Lev Walkin4696c742005-08-22 12:23:54 +00001953#line 880 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001954{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1955 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001956case 74:
Lev Walkin4696c742005-08-22 12:23:54 +00001957#line 881 "asn1p_y.y"
Lev Walkin144db9b2004-10-12 23:26:53 +00001958{ yyval.a_expr = yyvsp[0].a_expr; ;
1959 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001960case 75:
Lev Walkin4696c742005-08-22 12:23:54 +00001961#line 884 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001962{
Lev Walkinf15320b2004-06-03 03:38:44 +00001963 yyval.a_expr = asn1p_expr_new(yylineno);
1964 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00001965 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1966 ;
1967 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001968case 76:
Lev Walkin4696c742005-08-22 12:23:54 +00001969#line 889 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001970{
Lev Walkinf15320b2004-06-03 03:38:44 +00001971 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001972 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1973 ;
1974 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001975case 77:
Lev Walkin4696c742005-08-22 12:23:54 +00001976#line 896 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001977{
Lev Walkin070a52d2004-08-22 03:19:54 +00001978 yyval.a_expr = yyvsp[-1].a_expr;
1979 assert(yyval.a_expr->Identifier == 0);
Lev Walkinaf120f72004-09-14 02:36:39 +00001980 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkin070a52d2004-08-22 03:19:54 +00001981 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin1004aa92004-09-08 00:28:11 +00001982 ;
1983 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001984case 78:
Lev Walkin4696c742005-08-22 12:23:54 +00001985#line 902 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001986{
Lev Walkin070a52d2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00001991 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1992 ;
1993 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00001994case 79:
Lev Walkin4696c742005-08-22 12:23:54 +00001995#line 909 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00001996{
Lev Walkin070a52d2004-08-22 03:19:54 +00001997 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00001998 ;
1999 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002000case 80:
Lev Walkin4696c742005-08-22 12:23:54 +00002001#line 912 "asn1p_y.y"
Lev Walkin2e9bd5c2005-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:
Lev Walkin4696c742005-08-22 12:23:54 +00002009#line 920 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002010{
Lev Walkin070a52d2004-08-22 03:19:54 +00002011 yyval.a_expr = asn1p_expr_new(yylineno);
2012 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002013 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2014 ;
2015 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002016case 82:
Lev Walkin4696c742005-08-22 12:23:54 +00002017#line 925 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002018{
Lev Walkin070a52d2004-08-22 03:19:54 +00002019 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002020 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2021 ;
2022 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002023case 83:
Lev Walkin4696c742005-08-22 12:23:54 +00002024#line 932 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002025{
Lev Walkin070a52d2004-08-22 03:19:54 +00002026 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002027 assert(yyval.a_expr->Identifier == 0);
2028 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002029 ;
2030 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002031case 84:
Lev Walkin4696c742005-08-22 12:23:54 +00002032#line 937 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002033{
2034 yyval.a_expr = yyvsp[0].a_expr;
2035 ;
2036 break;}
2037case 85:
Lev Walkin4696c742005-08-22 12:23:54 +00002038#line 940 "asn1p_y.y"
Lev Walkin2e9bd5c2005-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:
Lev Walkin4696c742005-08-22 12:23:54 +00002045#line 947 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002046{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00002052 ;
2053 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002054case 87:
Lev Walkin4696c742005-08-22 12:23:54 +00002055#line 957 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002056{ yyval.a_int = 0; ;
2057 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002058case 88:
Lev Walkin4696c742005-08-22 12:23:54 +00002059#line 958 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002060{ yyval.a_int = 1; ;
2061 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002062case 89:
Lev Walkin4696c742005-08-22 12:23:54 +00002063#line 962 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002064{
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00002069 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2070 ;
2071 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002072case 90:
Lev Walkin4696c742005-08-22 12:23:54 +00002073#line 969 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002074{
Lev Walkinf15320b2004-06-03 03:38:44 +00002075 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002076 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2077 ;
2078 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002079case 91:
Lev Walkin4696c742005-08-22 12:23:54 +00002080#line 976 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002081{
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00002088 ;
2089 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002090case 92:
Lev Walkin4696c742005-08-22 12:23:54 +00002091#line 984 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002092{
Lev Walkin070a52d2004-08-22 03:19:54 +00002093 yyval.a_expr = yyvsp[-2].a_expr;
2094 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002095 yyval.a_expr->marker = yyvsp[0].a_marker;
2096 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002097 ;
2098 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002099case 93:
Lev Walkin4696c742005-08-22 12:23:54 +00002100#line 990 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002101{
Lev Walkinf15320b2004-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;
Lev Walkinb7c45ca2004-11-24 17:43:29 +00002113 yyval.a_expr->marker = yyvsp[0].a_marker;
2114 yyval.a_expr->unique = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00002115 ;
2116 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002117case 94:
Lev Walkin4696c742005-08-22 12:23:54 +00002118#line 1008 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002119{ yyval.a_wsynt = 0; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002120 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002121case 95:
Lev Walkin4696c742005-08-22 12:23:54 +00002122#line 1009 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002123{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002124 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin1004aa92004-09-08 00:28:11 +00002125 ;
2126 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002127case 96:
Lev Walkin4696c742005-08-22 12:23:54 +00002128#line 1016 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002129{ asn1p_lexer_hack_enable_with_syntax(); ;
2130 break;}
2131case 97:
Lev Walkin4696c742005-08-22 12:23:54 +00002132#line 1018 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002133{
2134 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2135 ;
2136 break;}
2137case 98:
Lev Walkin4696c742005-08-22 12:23:54 +00002138#line 1024 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002139{
Lev Walkinf15320b2004-06-03 03:38:44 +00002140 yyval.a_wsynt = asn1p_wsyntx_new();
2141 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin1004aa92004-09-08 00:28:11 +00002142 ;
2143 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002144case 99:
Lev Walkin4696c742005-08-22 12:23:54 +00002145#line 1028 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002146{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00002149 ;
2150 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002151case 100:
Lev Walkin4696c742005-08-22 12:23:54 +00002152#line 1035 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002153{
Lev Walkinf15320b2004-06-03 03:38:44 +00002154 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002155 ;
2156 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002157case 101:
Lev Walkin4696c742005-08-22 12:23:54 +00002158#line 1038 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002159{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00002167 ;
2168 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002169case 102:
Lev Walkin4696c742005-08-22 12:23:54 +00002170#line 1050 "asn1p_y.y"
Lev Walkinb36317c2005-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("...");
Lev Walkinb36317c2005-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:
Lev Walkin4696c742005-08-22 12:23:54 +00002181#line 1058 "asn1p_y.y"
Lev Walkin2e9bd5c2005-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:
Lev Walkin4696c742005-08-22 12:23:54 +00002193#line 1067 "asn1p_y.y"
Lev Walkin2e9bd5c2005-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:
Lev Walkin4696c742005-08-22 12:23:54 +00002205#line 1079 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002206{
Lev Walkin070a52d2004-08-22 03:19:54 +00002207 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkinaf120f72004-09-14 02:36:39 +00002208 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-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) {
Lev Walkinaf120f72004-09-14 02:36:39 +00002219 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002220 } else {
2221 yyval.a_expr->constraints = yyvsp[0].a_constr;
2222 }
2223 }
Lev Walkin4696c742005-08-22 12:23:54 +00002224 asn1p_last_type = yyval.a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002225 ;
2226 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002227case 106:
Lev Walkin4696c742005-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"
Lev Walkin1004aa92004-09-08 00:28:11 +00002233{
Lev Walkind2ea1de2004-08-20 13:25:29 +00002234 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002235 ;
2236 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002237case 108:
2238#line 1107 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002239{
Lev Walkin4696c742005-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;
Lev Walkinc7d939d2005-03-20 11:12:40 +00002251 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2252 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
Lev Walkinf15320b2004-06-03 03:38:44 +00002253 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002254 ;
2255 break;}
Lev Walkin4696c742005-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"
Lev Walkin1004aa92004-09-08 00:28:11 +00002262{
Lev Walkin4696c742005-08-22 12:23:54 +00002263 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002264 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002265 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
Lev Walkin070a52d2004-08-22 03:19:54 +00002266 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002267 ;
2268 break;}
Lev Walkin4696c742005-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"
Lev Walkin1004aa92004-09-08 00:28:11 +00002275{
Lev Walkin4696c742005-08-22 12:23:54 +00002276 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002277 assert(yyval.a_expr->expr_type == A1TC_INVALID);
Lev Walkinc7d939d2005-03-20 11:12:40 +00002278 yyval.a_expr->expr_type = ASN_CONSTR_SET;
Lev Walkin070a52d2004-08-22 03:19:54 +00002279 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002280 ;
2281 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002282case 115:
2283#line 1128 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002284{
Lev Walkinceb20e72004-09-05 10:40:41 +00002285 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002286 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002287 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002288 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2289 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002290 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002291 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002292 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2293 ;
2294 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002295case 116:
2296#line 1138 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002297{
Lev Walkinceb20e72004-09-05 10:40:41 +00002298 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002299 checkmem(yyval.a_expr);
Lev Walkin83cac2f2004-09-22 16:03:36 +00002300 yyval.a_expr->constraints = yyvsp[-4].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002301 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2302 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin83cac2f2004-09-22 16:03:36 +00002303 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
Lev Walkinec208e62004-09-14 02:44:07 +00002304 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
Lev Walkin1004aa92004-09-08 00:28:11 +00002305 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2306 ;
2307 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002308case 117:
2309#line 1148 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002310{
Lev Walkinceb20e72004-09-05 10:40:41 +00002311 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-08-22 03:19:54 +00002312 checkmem(yyval.a_expr);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002313 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002314 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002315 ;
2316 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002317case 118:
2318#line 1154 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002319{
Lev Walkin070a52d2004-08-22 03:19:54 +00002320 int ret;
Lev Walkinceb20e72004-09-05 10:40:41 +00002321 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkin070a52d2004-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);
Lev Walkin609ccbb2004-09-04 04:49:21 +00002327 yyval.a_expr->expr_type = ASN_TYPE_ANY;
Lev Walkin070a52d2004-08-22 03:19:54 +00002328 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin1004aa92004-09-08 00:28:11 +00002329 ;
2330 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002331case 119:
2332#line 1168 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002333{
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00002346 ;
2347 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002348case 120:
2349#line 1192 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002350{
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00002356 ;
2357 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002358case 121:
2359#line 1199 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002360{
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00002366 ;
2367 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002368case 122:
2369#line 1214 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002370{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00002377 ;
2378 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002379case 123:
2380#line 1222 "asn1p_y.y"
Lev Walkin2e9bd5c2005-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;}
Lev Walkin4696c742005-08-22 12:23:54 +00002392case 124:
2393#line 1232 "asn1p_y.y"
Lev Walkin2e9bd5c2005-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;}
Lev Walkin4696c742005-08-22 12:23:54 +00002405case 125:
2406#line 1242 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002407{
Lev Walkinf15320b2004-06-03 03:38:44 +00002408 int ret;
2409 yyval.a_ref = asn1p_ref_new(yylineno);
2410 checkmem(yyval.a_ref);
Lev Walkin9c974182004-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;}
Lev Walkin4696c742005-08-22 12:23:54 +00002418case 126:
2419#line 1252 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002420{
2421 int ret;
2422 yyval.a_ref = asn1p_ref_new(yylineno);
2423 checkmem(yyval.a_ref);
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00002427 ;
2428 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002429case 127:
2430#line 1260 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002431{
Lev Walkinf15320b2004-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 }
Lev Walkin1004aa92004-09-08 00:28:11 +00002449 ;
2450 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002451case 128:
2452#line 1282 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002453{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00002460 ;
2461 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002462case 129:
2463#line 1290 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002464{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00002470 ;
2471 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002472case 132:
2473#line 1304 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002474{
Lev Walkinf15320b2004-06-03 03:38:44 +00002475 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2476 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002477 ;
2478 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002479case 133:
2480#line 1309 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002481{
Lev Walkinf15320b2004-06-03 03:38:44 +00002482 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2483 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00002484 ;
2485 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002486case 134:
2487#line 1322 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002488{
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00002494 ;
2495 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002496case 135:
2497#line 1332 "asn1p_y.y"
Lev Walkin9c974182004-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;}
Lev Walkin4696c742005-08-22 12:23:54 +00002506case 136:
2507#line 1339 "asn1p_y.y"
Lev Walkincbad2512005-03-24 16:27:02 +00002508{ asn1p_lexer_hack_push_opaque_state(); ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002509 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002510case 137:
2511#line 1339 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002512{
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00002516 ;
2517 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002518case 138:
2519#line 1344 "asn1p_y.y"
Lev Walkin9c974182004-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;}
Lev Walkin4696c742005-08-22 12:23:54 +00002526case 139:
2527#line 1349 "asn1p_y.y"
Lev Walkin9c974182004-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;}
Lev Walkin4696c742005-08-22 12:23:54 +00002534case 140:
2535#line 1354 "asn1p_y.y"
Lev Walkin9c974182004-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;}
Lev Walkin4696c742005-08-22 12:23:54 +00002542case 141:
2543#line 1359 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002544{
Lev Walkinf15320b2004-06-03 03:38:44 +00002545 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2546 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002547 ;
2548 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002549case 142:
2550#line 1363 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002551{
Lev Walkinf15320b2004-06-03 03:38:44 +00002552 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2553 checkmem(yyval.a_value);
Lev Walkin1004aa92004-09-08 00:28:11 +00002554 ;
2555 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002556case 143:
2557#line 1367 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002558{
Lev Walkin1e448d32005-03-24 14:26:38 +00002559 yyval.a_value = yyval.a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00002560 ;
2561 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002562case 144:
2563#line 1370 "asn1p_y.y"
Lev Walkinc8092cb2005-02-18 16:34:21 +00002564{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002565 yyval.a_value = yyvsp[0].a_value;
2566 ;
2567 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002568case 145:
2569#line 1373 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002570{
2571 yyval.a_value = yyvsp[0].a_value;
2572 ;
2573 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002574case 146:
2575#line 1379 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002576{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00002586 ;
2587 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002588case 147:
2589#line 1390 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002590{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00002603 ;
2604 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002605case 148:
2606#line 1408 "asn1p_y.y"
Lev Walkin1e448d32005-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;}
Lev Walkin4696c742005-08-22 12:23:54 +00002612case 149:
2613#line 1412 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002614{
Lev Walkind9574ae2005-03-24 16:22:35 +00002615 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002616 checkmem(yyval.a_value);
2617 yyval.a_value->type = ATV_TUPLE;
2618 ;
2619 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002620case 150:
2621#line 1417 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002622{
Lev Walkind9574ae2005-03-24 16:22:35 +00002623 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
Lev Walkin1e448d32005-03-24 14:26:38 +00002624 checkmem(yyval.a_value);
2625 yyval.a_value->type = ATV_QUADRUPLE;
2626 ;
2627 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002628case 151:
2629#line 1451 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002630{
Lev Walkin1893ddf2005-03-20 14:28:32 +00002631 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
Lev Walkinf15320b2004-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] = '{';
Lev Walkin1893ddf2005-03-20 14:28:32 +00002635 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00002636 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2637 free(yyvsp[0].tv_opaque.buf);
Lev Walkin1004aa92004-09-08 00:28:11 +00002638 ;
2639 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002640case 152:
2641#line 1460 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002642{
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00002653 ;
2654 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002655case 153:
2656#line 1475 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002657{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2658 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002659case 154:
2660#line 1476 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002661{ yyval.a_type = ASN_BASIC_NULL; ;
2662 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002663case 155:
2664#line 1477 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002665{ yyval.a_type = ASN_BASIC_REAL; ;
2666 break;}
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002667case 156:
Lev Walkin4696c742005-08-22 12:23:54 +00002668#line 1478 "asn1p_y.y"
2669{ yyval.a_type = yyvsp[0].a_type; ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002670 break;}
2671case 157:
Lev Walkin4696c742005-08-22 12:23:54 +00002672#line 1479 "asn1p_y.y"
2673{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002674 break;}
2675case 158:
Lev Walkin4696c742005-08-22 12:23:54 +00002676#line 1480 "asn1p_y.y"
2677{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002678 break;}
2679case 159:
Lev Walkin4696c742005-08-22 12:23:54 +00002680#line 1481 "asn1p_y.y"
2681{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
Lev Walkin1e448d32005-03-24 14:26:38 +00002682 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00002683case 160:
Lev Walkin4696c742005-08-22 12:23:54 +00002684#line 1482 "asn1p_y.y"
2685{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
Lev Walkinb36317c2005-08-12 10:09:10 +00002686 break;}
2687case 161:
Lev Walkin4696c742005-08-22 12:23:54 +00002688#line 1483 "asn1p_y.y"
2689{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
Lev Walkinb36317c2005-08-12 10:09:10 +00002690 break;}
2691case 162:
Lev Walkin4696c742005-08-22 12:23:54 +00002692#line 1484 "asn1p_y.y"
2693{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002694 break;}
2695case 163:
Lev Walkin4696c742005-08-22 12:23:54 +00002696#line 1485 "asn1p_y.y"
2697{ yyval.a_type = ASN_BASIC_UTCTime; ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002698 break;}
2699case 164:
2700#line 1486 "asn1p_y.y"
Lev Walkin4696c742005-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"
Lev Walkin1004aa92004-09-08 00:28:11 +00002721{
Lev Walkinceb20e72004-09-05 10:40:41 +00002722 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00002726 ;
2727 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002728case 170:
2729#line 1506 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002730{
Lev Walkinf15320b2004-06-03 03:38:44 +00002731 if(yyvsp[0].a_expr) {
2732 yyval.a_expr = yyvsp[0].a_expr;
2733 } else {
Lev Walkinceb20e72004-09-05 10:40:41 +00002734 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00002739 ;
2740 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002741case 171:
2742#line 1519 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002743{ yyval.a_type = ASN_STRING_BMPString; ;
2744 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002745case 172:
2746#line 1520 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002747{
Lev Walkinf15320b2004-06-03 03:38:44 +00002748 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00002749 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002750 ;
2751 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002752case 173:
2753#line 1524 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002754{
Lev Walkin9c974182004-09-15 11:59:51 +00002755 yyval.a_type = ASN_STRING_GraphicString;
2756 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin1004aa92004-09-08 00:28:11 +00002757 ;
2758 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002759case 174:
2760#line 1528 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002761{ yyval.a_type = ASN_STRING_IA5String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002762 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002763case 175:
2764#line 1529 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002765{ yyval.a_type = ASN_STRING_ISO646String; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002766 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002767case 176:
2768#line 1530 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002769{ yyval.a_type = ASN_STRING_NumericString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002770 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002771case 177:
2772#line 1531 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002773{ yyval.a_type = ASN_STRING_PrintableString; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002774 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002775case 178:
2776#line 1532 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002777{
2778 yyval.a_type = ASN_STRING_T61String;
2779 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2780 ;
Lev Walkin1004aa92004-09-08 00:28:11 +00002781 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002782case 179:
2783#line 1536 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002784{ yyval.a_type = ASN_STRING_TeletexString; ;
2785 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002786case 180:
2787#line 1537 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002788{ yyval.a_type = ASN_STRING_UniversalString; ;
2789 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002790case 181:
2791#line 1538 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002792{ yyval.a_type = ASN_STRING_UTF8String; ;
2793 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002794case 182:
2795#line 1539 "asn1p_y.y"
Lev Walkin9c974182004-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;}
Lev Walkin4696c742005-08-22 12:23:54 +00002801case 183:
2802#line 1543 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002803{ yyval.a_type = ASN_STRING_VisibleString; ;
2804 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002805case 184:
2806#line 1544 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002807{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2808 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002809case 190:
2810#line 1556 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002811{ yyval.a_constr = 0; ;
2812 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002813case 191:
2814#line 1557 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002815{
Lev Walkinceb20e72004-09-05 10:40:41 +00002816 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002817 ;
2818 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002819case 192:
2820#line 1563 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002821{
Lev Walkinceb20e72004-09-05 10:40:41 +00002822 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002823 ;
2824 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002825case 193:
2826#line 1566 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002827{
Lev Walkinf15320b2004-06-03 03:38:44 +00002828 /*
2829 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00002830 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00002831 */
Lev Walkind2ea1de2004-08-20 13:25:29 +00002832 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00002833 ;
2834 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002835case 194:
2836#line 1576 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002837{
Lev Walkinf15320b2004-06-03 03:38:44 +00002838 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002839 ;
2840 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002841case 195:
2842#line 1579 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002843{
Lev Walkinf59d0752004-08-18 04:59:12 +00002844 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002845 ;
2846 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002847case 196:
2848#line 1585 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002849{
Lev Walkinf15320b2004-06-03 03:38:44 +00002850 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002851 ;
2852 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002853case 197:
2854#line 1588 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002855{
Lev Walkinf15320b2004-06-03 03:38:44 +00002856 asn1p_constraint_t *ct;
2857 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00002860 ;
2861 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002862case 198:
2863#line 1594 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002864{
Lev Walkinf15320b2004-06-03 03:38:44 +00002865 asn1p_constraint_t *ct;
2866 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-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);
Lev Walkinb4fcdd22004-08-13 12:35:09 +00002869 ct = yyval.a_constr;
2870 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002871 ;
2872 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002873case 199:
2874#line 1605 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002875{
Lev Walkinf59d0752004-08-18 04:59:12 +00002876 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin1004aa92004-09-08 00:28:11 +00002877 ;
2878 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002879case 200:
2880#line 1608 "asn1p_y.y"
Lev Walkin1e448d32005-03-24 14:26:38 +00002881{
2882 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2883 ;
2884 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002885case 201:
2886#line 1611 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002887{
Lev Walkinf15320b2004-06-03 03:38:44 +00002888 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002889 ;
2890 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002891case 202:
2892#line 1614 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002893{
Lev Walkinf15320b2004-06-03 03:38:44 +00002894 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002895 ;
2896 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002897case 203:
2898#line 1617 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002899{
Lev Walkinf15320b2004-06-03 03:38:44 +00002900 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00002901 ;
2902 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002903case 204:
2904#line 1623 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002905{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00002912 ;
2913 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002914case 205:
2915#line 1631 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002916{
Lev Walkinf59d0752004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00002923 ;
2924 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002925case 206:
2926#line 1639 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00002927{
Lev Walkinf59d0752004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00002932 ;
2933 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00002934case 207:
2935#line 1645 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00002936{
Lev Walkin144db9b2004-10-12 23:26:53 +00002937 yyval.a_constr = asn1p_constraint_new(yylineno);
2938 checkmem(yyval.a_constr);
Lev Walkinff7dd142005-03-20 12:58:00 +00002939 yyval.a_constr->type = ACT_EL_TYPE;
2940 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin9c974182004-09-15 11:59:51 +00002941 ;
2942 break;}
Lev Walkinb36317c2005-08-12 10:09:10 +00002943case 208:
Lev Walkin4696c742005-08-22 12:23:54 +00002944#line 1651 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002945{
Lev Walkin4696c742005-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;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002951 ;
2952 break;}
2953case 209:
Lev Walkin4696c742005-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 ;
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00002963 break;}
2964case 210:
Lev Walkin4696c742005-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"
Lev Walkin1893ddf2005-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 ;
Lev Walkin144db9b2004-10-12 23:26:53 +00003013 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003014case 216:
3015#line 1701 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003016{ yyval.a_ctype = ACT_EL_RANGE; ;
Lev Walkinc8092cb2005-02-18 16:34:21 +00003017 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003018case 217:
3019#line 1702 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003020{ yyval.a_ctype = ACT_EL_RLRANGE; ;
Lev Walkinff7dd142005-03-20 12:58:00 +00003021 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003022case 218:
3023#line 1703 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003024{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3025 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003026case 219:
3027#line 1704 "asn1p_y.y"
Lev Walkin1893ddf2005-03-20 14:28:32 +00003028{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3029 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003030case 220:
3031#line 1708 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003032{
Lev Walkinceb20e72004-09-05 10:40:41 +00003033 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin1004aa92004-09-08 00:28:11 +00003034 ;
3035 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003036case 221:
3037#line 1711 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003038{
Lev Walkinceb20e72004-09-05 10:40:41 +00003039 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin1004aa92004-09-08 00:28:11 +00003040 ;
3041 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003042case 222:
3043#line 1717 "asn1p_y.y"
Lev Walkinc8092cb2005-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;}
Lev Walkin4696c742005-08-22 12:23:54 +00003050case 223:
3051#line 1722 "asn1p_y.y"
Lev Walkinc8092cb2005-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;}
Lev Walkin4696c742005-08-22 12:23:54 +00003058case 224:
3059#line 1727 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003060{
3061 yyval.a_value = yyvsp[0].a_value;
3062 ;
3063 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003064case 225:
3065#line 1730 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003066{
3067 yyval.a_value = yyvsp[0].a_value;
3068 ;
3069 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003070case 226:
3071#line 1733 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003072{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00003082 ;
3083 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003084case 227:
3085#line 1747 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003086{
Lev Walkinc8092cb2005-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);
Lev Walkinf15320b2004-06-03 03:38:44 +00003094 checkmem(yyval.a_value);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003095 free(yyvsp[0].tv_str);
Lev Walkin1004aa92004-09-08 00:28:11 +00003096 ;
3097 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003098case 228:
3099#line 1761 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003100{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003101 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003102 ;
3103 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003104case 229:
3105#line 1764 "asn1p_y.y"
Lev Walkine596bf02005-03-28 15:01:27 +00003106{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003107 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkine596bf02005-03-28 15:01:27 +00003108 ;
3109 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003110case 230:
3111#line 1770 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003112{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003113 yyval.a_constr = yyvsp[0].a_constr;
3114 ;
3115 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003116case 231:
3117#line 1773 "asn1p_y.y"
Lev Walkin2e9bd5c2005-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;}
Lev Walkin4696c742005-08-22 12:23:54 +00003122case 232:
3123#line 1779 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003124{
Lev Walkinf15320b2004-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;
Lev Walkine596bf02005-03-28 15:01:27 +00003128 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
Lev Walkin1004aa92004-09-08 00:28:11 +00003129 ;
3130 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003131case 233:
3132#line 1785 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003133{
Lev Walkinf15320b2004-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;
Lev Walkine596bf02005-03-28 15:01:27 +00003139 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003140 ;
3141 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003142case 234:
3143#line 1799 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003144{ yyval.a_pres = ACPRES_DEFAULT; ;
3145 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003146case 235:
3147#line 1800 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003148{ yyval.a_pres = yyvsp[0].a_pres; ;
3149 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003150case 236:
3151#line 1804 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003152{
Lev Walkinf15320b2004-06-03 03:38:44 +00003153 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin1004aa92004-09-08 00:28:11 +00003154 ;
3155 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003156case 237:
3157#line 1807 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00003158{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003159 yyval.a_pres = ACPRES_ABSENT;
Lev Walkinb36317c2005-08-12 10:09:10 +00003160 ;
3161 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003162case 238:
3163#line 1810 "asn1p_y.y"
Lev Walkinb36317c2005-08-12 10:09:10 +00003164{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003165 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkinb36317c2005-08-12 10:09:10 +00003166 ;
3167 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003168case 239:
3169#line 1816 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003170{
3171 yyval.a_constr = yyvsp[0].a_constr;
3172 ;
3173 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003174case 240:
3175#line 1819 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003176{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003177 yyval.a_constr = yyvsp[0].a_constr;
3178 ;
3179 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003180case 241:
3181#line 1828 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003182{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00003193 ;
3194 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003195case 242:
3196#line 1843 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003197{
Lev Walkinf15320b2004-06-03 03:38:44 +00003198 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003199 ;
3200 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003201case 243:
3202#line 1849 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003203{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00003208 ;
3209 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003210case 244:
3211#line 1855 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003212{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00003219 ;
3220 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003221case 245:
3222#line 1869 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003223{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00003233 ;
3234 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003235case 246:
3236#line 1880 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003237{
Lev Walkinf15320b2004-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);
Lev Walkin1004aa92004-09-08 00:28:11 +00003248 ;
3249 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003250case 247:
3251#line 1896 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003252{
Lev Walkinf15320b2004-06-03 03:38:44 +00003253 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003254 ;
3255 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003256case 248:
3257#line 1899 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003258{
Lev Walkinf15320b2004-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';
Lev Walkin1004aa92004-09-08 00:28:11 +00003266 ;
3267 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003268case 249:
3269#line 1917 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003270{
Lev Walkin9c974182004-09-15 11:59:51 +00003271 yyval.a_marker.flags = EM_NOMARK;
3272 yyval.a_marker.default_value = 0;
Lev Walkin1004aa92004-09-08 00:28:11 +00003273 ;
3274 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003275case 250:
3276#line 1921 "asn1p_y.y"
Lev Walkin9c974182004-09-15 11:59:51 +00003277{ yyval.a_marker = yyvsp[0].a_marker; ;
Lev Walkinec208e62004-09-14 02:44:07 +00003278 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003279case 251:
3280#line 1925 "asn1p_y.y"
Lev Walkinec208e62004-09-14 02:44:07 +00003281{
Lev Walkin9c974182004-09-15 11:59:51 +00003282 yyval.a_marker.flags = EM_OPTIONAL;
3283 yyval.a_marker.default_value = 0;
Lev Walkinec208e62004-09-14 02:44:07 +00003284 ;
3285 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003286case 252:
3287#line 1929 "asn1p_y.y"
Lev Walkin9c974182004-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;}
Lev Walkin4696c742005-08-22 12:23:54 +00003293case 253:
3294#line 1952 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003295{
Lev Walkinceb20e72004-09-05 10:40:41 +00003296 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003297 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003298 ;
3299 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003300case 254:
3301#line 1956 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003302{
Lev Walkine596bf02005-03-28 15:01:27 +00003303 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin1004aa92004-09-08 00:28:11 +00003304 ;
3305 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003306case 255:
3307#line 1962 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003308{
Lev Walkine596bf02005-03-28 15:01:27 +00003309 yyval.a_expr = asn1p_expr_new(yylineno);
3310 checkmem(yyval.a_expr);
Lev Walkin1004aa92004-09-08 00:28:11 +00003311 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3312 ;
3313 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003314case 256:
3315#line 1967 "asn1p_y.y"
Lev Walkine596bf02005-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;}
Lev Walkin4696c742005-08-22 12:23:54 +00003321case 257:
3322#line 1974 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003323{
Lev Walkinceb20e72004-09-05 10:40:41 +00003324 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00003329 ;
3330 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003331case 258:
3332#line 1981 "asn1p_y.y"
Lev Walkin2e9bd5c2005-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;}
Lev Walkin4696c742005-08-22 12:23:54 +00003342case 259:
3343#line 1989 "asn1p_y.y"
Lev Walkin2e9bd5c2005-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;}
Lev Walkin4696c742005-08-22 12:23:54 +00003353case 260:
3354#line 1997 "asn1p_y.y"
Lev Walkin1893ddf2005-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;
Lev Walkinf15320b2004-06-03 03:38:44 +00003360 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin1004aa92004-09-08 00:28:11 +00003361 ;
3362 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003363case 261:
3364#line 2004 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003365{
Lev Walkinceb20e72004-09-05 10:40:41 +00003366 yyval.a_expr = asn1p_expr_new(yylineno);
Lev Walkinf15320b2004-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00003372 ;
3373 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003374case 262:
3375#line 2015 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003376{
3377 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3378 checkmem(yyval.a_value);
3379 ;
Lev Walkinb36317c2005-08-12 10:09:10 +00003380 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003381case 263:
3382#line 2019 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003383{
3384 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3385 checkmem(yyval.a_value);
3386 ;
Lev Walkinb36317c2005-08-12 10:09:10 +00003387 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003388case 264:
3389#line 2050 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003390{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3391 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003392case 265:
3393#line 2051 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003394{ yyval.a_tag = yyvsp[0].a_tag; ;
3395 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003396case 266:
3397#line 2055 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003398{
Lev Walkinc603f102005-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;
Lev Walkin1004aa92004-09-08 00:28:11 +00003401 ;
3402 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003403case 267:
3404#line 2062 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003405{
Lev Walkinc603f102005-01-23 09:51:44 +00003406 yyval.a_tag = yyvsp[-2].a_tag;
3407 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin1004aa92004-09-08 00:28:11 +00003408 ;
3409 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003410case 268:
3411#line 2068 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003412{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
Lev Walkin1004aa92004-09-08 00:28:11 +00003413 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003414case 269:
3415#line 2069 "asn1p_y.y"
Lev Walkinc603f102005-01-23 09:51:44 +00003416{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
Lev Walkin83cac2f2004-09-22 16:03:36 +00003417 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003418case 270:
Lev Walkin4696c742005-08-22 12:23:54 +00003419#line 2070 "asn1p_y.y"
3420{ yyval.a_tag.tag_class = TC_APPLICATION; ;
Lev Walkin1e448d32005-03-24 14:26:38 +00003421 break;}
Lev Walkin8ea99482005-03-31 21:48:13 +00003422case 271:
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003423#line 2071 "asn1p_y.y"
Lev Walkin4696c742005-08-22 12:23:54 +00003424{ yyval.a_tag.tag_class = TC_PRIVATE; ;
Lev Walkinb36317c2005-08-12 10:09:10 +00003425 break;}
3426case 272:
Lev Walkin4696c742005-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"
Lev Walkinb36317c2005-08-12 10:09:10 +00003440{
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003441 checkmem(yyvsp[0].tv_str);
Lev Walkinb36317c2005-08-12 10:09:10 +00003442 yyval.tv_str = yyvsp[0].tv_str;
3443 ;
3444 break;}
Lev Walkin4696c742005-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"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003461{ yyval.tv_str = 0; ;
3462 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003463case 279:
3464#line 2101 "asn1p_y.y"
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00003465{
3466 yyval.tv_str = yyvsp[0].tv_str;
3467 ;
3468 break;}
Lev Walkin4696c742005-08-22 12:23:54 +00003469case 280:
3470#line 2107 "asn1p_y.y"
Lev Walkin1004aa92004-09-08 00:28:11 +00003471{
Lev Walkinceb20e72004-09-05 10:40:41 +00003472 checkmem(yyvsp[0].tv_str);
3473 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin1004aa92004-09-08 00:28:11 +00003474 ;
3475 break;}
Lev Walkin1004aa92004-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"
Lev Walkinf15320b2004-06-03 03:38:44 +00003479
3480 yyvsp -= yylen;
3481 yyssp -= yylen;
Lev Walkin1004aa92004-09-08 00:28:11 +00003482#ifdef YYLSP_NEEDED
3483 yylsp -= yylen;
3484#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003485
Lev Walkin1004aa92004-09-08 00:28:11 +00003486#if YYDEBUG != 0
Lev Walkinf15320b2004-06-03 03:38:44 +00003487 if (yydebug)
3488 {
Lev Walkin1004aa92004-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");
Lev Walkinf15320b2004-06-03 03:38:44 +00003494 }
3495#endif
3496
3497 *++yyvsp = yyval;
3498
Lev Walkin1004aa92004-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
Lev Walkinf15320b2004-06-03 03:38:44 +00003515
Lev Walkin1004aa92004-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. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003520
3521 yyn = yyr1[yyn];
3522
Lev Walkin1004aa92004-09-08 00:28:11 +00003523 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3524 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00003525 yystate = yytable[yystate];
3526 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003527 yystate = yydefgoto[yyn - YYNTBASE];
Lev Walkinf15320b2004-06-03 03:38:44 +00003528
3529 goto yynewstate;
3530
Lev Walkin1004aa92004-09-08 00:28:11 +00003531yyerrlab: /* here on detecting error */
Lev Walkinf15320b2004-06-03 03:38:44 +00003532
Lev Walkin1004aa92004-09-08 00:28:11 +00003533 if (! yyerrstatus)
3534 /* If not already recovering from an error, report this error. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003535 {
3536 ++yynerrs;
Lev Walkin1004aa92004-09-08 00:28:11 +00003537
3538#ifdef YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00003539 yyn = yypact[yystate];
3540
Lev Walkin1004aa92004-09-08 00:28:11 +00003541 if (yyn > YYFLAG && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00003542 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003543 int size = 0;
3544 char *msg;
3545 int x, count;
Lev Walkinf15320b2004-06-03 03:38:44 +00003546
Lev Walkin1004aa92004-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);
Lev Walkin4a4bdf72005-06-07 21:43:32 +00003550 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
Lev Walkin1004aa92004-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)
Lev Walkinf15320b2004-06-03 03:38:44 +00003555 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003556 strcpy(msg, "parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003557
Lev Walkin1004aa92004-09-08 00:28:11 +00003558 if (count < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00003559 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003560 count = 0;
3561 for (x = (yyn < 0 ? -yyn : 0);
Lev Walkin4a4bdf72005-06-07 21:43:32 +00003562 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
Lev Walkin1004aa92004-09-08 00:28:11 +00003563 if (yycheck[x + yyn] == x)
Lev Walkinf15320b2004-06-03 03:38:44 +00003564 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003565 strcat(msg, count == 0 ? ", expecting `" : " or `");
3566 strcat(msg, yytname[x]);
3567 strcat(msg, "'");
3568 count++;
Lev Walkinf15320b2004-06-03 03:38:44 +00003569 }
3570 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003571 yyerror(msg);
3572 free(msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003573 }
3574 else
Lev Walkin1004aa92004-09-08 00:28:11 +00003575 yyerror ("parse error; also virtual memory exceeded");
Lev Walkinf15320b2004-06-03 03:38:44 +00003576 }
3577 else
3578#endif /* YYERROR_VERBOSE */
Lev Walkin1004aa92004-09-08 00:28:11 +00003579 yyerror("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00003580 }
Lev Walkin1004aa92004-09-08 00:28:11 +00003581
Lev Walkinf15320b2004-06-03 03:38:44 +00003582 goto yyerrlab1;
Lev Walkin1004aa92004-09-08 00:28:11 +00003583yyerrlab1: /* here on error raised explicitly by an action */
Lev Walkinf15320b2004-06-03 03:38:44 +00003584
3585 if (yyerrstatus == 3)
3586 {
Lev Walkin1004aa92004-09-08 00:28:11 +00003587 /* if just tried and failed to reuse lookahead token after an error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003588
Lev Walkin1004aa92004-09-08 00:28:11 +00003589 /* return failure if at end of input */
Lev Walkinf15320b2004-06-03 03:38:44 +00003590 if (yychar == YYEOF)
Lev Walkin1004aa92004-09-08 00:28:11 +00003591 YYABORT;
Lev Walkinf15320b2004-06-03 03:38:44 +00003592
Lev Walkin1004aa92004-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
Lev Walkinf15320b2004-06-03 03:38:44 +00003598 yychar = YYEMPTY;
3599 }
3600
Lev Walkin1004aa92004-09-08 00:28:11 +00003601 /* Else will try to reuse lookahead token
3602 after shifting the error token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00003603
Lev Walkin1004aa92004-09-08 00:28:11 +00003604 yyerrstatus = 3; /* Each real token shifted decrements this */
Lev Walkinf15320b2004-06-03 03:38:44 +00003605
Lev Walkin1004aa92004-09-08 00:28:11 +00003606 goto yyerrhandle;
Lev Walkin459ab022004-09-07 10:39:09 +00003607
Lev Walkin1004aa92004-09-08 00:28:11 +00003608yyerrdefault: /* current state does not do anything special for the error token. */
Lev Walkin459ab022004-09-07 10:39:09 +00003609
Lev Walkin1004aa92004-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;
Lev Walkinceb20e72004-09-05 10:40:41 +00003615#endif
Lev Walkin1004aa92004-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");
Lev Walkinceb20e72004-09-05 10:40:41 +00003634 }
Lev Walkin1004aa92004-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;
Lev Walkinf15320b2004-06-03 03:38:44 +00003657
3658 if (yyn == YYFINAL)
3659 YYACCEPT;
3660
Lev Walkin1004aa92004-09-08 00:28:11 +00003661#if YYDEBUG != 0
3662 if (yydebug)
3663 fprintf(stderr, "Shifting error token, ");
3664#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003665
3666 *++yyvsp = yylval;
Lev Walkin1004aa92004-09-08 00:28:11 +00003667#ifdef YYLSP_NEEDED
3668 *++yylsp = yylloc;
3669#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00003670
3671 yystate = yyn;
3672 goto yynewstate;
3673
Lev Walkin1004aa92004-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);
Lev Walkin609ccbb2004-09-04 04:49:21 +00003682#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003683 }
3684 return 0;
Lev Walkin459ab022004-09-07 10:39:09 +00003685
Lev Walkin1004aa92004-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);
Lev Walkin459ab022004-09-07 10:39:09 +00003694#endif
Lev Walkin1004aa92004-09-08 00:28:11 +00003695 }
3696 return 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00003697}
Lev Walkin4696c742005-08-22 12:23:54 +00003698#line 2113 "asn1p_y.y"
Lev Walkinf15320b2004-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
Lev Walkin2e9bd5c2005-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
Lev Walkin4696c742005-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
Lev Walkinf15320b2004-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",
Lev Walkinceb20e72004-09-05 10:40:41 +00003861 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00003862 return -1;
3863}
3864
3865