blob: 353c4fa44a77eafad15de87f78b27393157fa9f1 [file] [log] [blame]
vlmfa67ddc2004-06-03 03:38:44 +00001
vlm6a02a8a2004-09-08 00:28:11 +00002/* A Bison parser, made from asn1p_y.y
3 by GNU Bison version 1.28 */
vlmfa67ddc2004-06-03 03:38:44 +00004
vlm6a02a8a2004-09-08 00:28:11 +00005#define YYBISON 1 /* Identify Bison output. */
vlmfa67ddc2004-06-03 03:38:44 +00006
7#define yyparse asn1p_parse
vlm6a02a8a2004-09-08 00:28:11 +00008#define yylex asn1p_lex
vlmfa67ddc2004-06-03 03:38:44 +00009#define yyerror asn1p_error
vlm6a02a8a2004-09-08 00:28:11 +000010#define yylval asn1p_lval
11#define yychar asn1p_char
vlmfa67ddc2004-06-03 03:38:44 +000012#define yydebug asn1p_debug
13#define yynerrs asn1p_nerrs
vlm6a02a8a2004-09-08 00:28:11 +000014#define TOK_PPEQ 257
15#define TOK_opaque 258
16#define TOK_bstring 259
17#define TOK_cstring 260
18#define TOK_hstring 261
19#define TOK_identifier 262
20#define TOK_number 263
21#define TOK_number_negative 264
22#define TOK_typereference 265
23#define TOK_capitalreference 266
24#define TOK_typefieldreference 267
25#define TOK_valuefieldreference 268
26#define TOK_ABSENT 269
27#define TOK_ABSTRACT_SYNTAX 270
28#define TOK_ALL 271
29#define TOK_ANY 272
30#define TOK_APPLICATION 273
31#define TOK_AUTOMATIC 274
32#define TOK_BEGIN 275
33#define TOK_BIT 276
34#define TOK_BMPString 277
35#define TOK_BOOLEAN 278
36#define TOK_BY 279
37#define TOK_CHARACTER 280
38#define TOK_CHOICE 281
39#define TOK_CLASS 282
40#define TOK_COMPONENT 283
41#define TOK_COMPONENTS 284
42#define TOK_CONSTRAINED 285
43#define TOK_CONTAINING 286
44#define TOK_DEFAULT 287
45#define TOK_DEFINITIONS 288
46#define TOK_DEFINED 289
47#define TOK_EMBEDDED 290
48#define TOK_ENCODED 291
49#define TOK_ENCODING_CONTROL 292
50#define TOK_END 293
51#define TOK_ENUMERATED 294
52#define TOK_EXPLICIT 295
53#define TOK_EXPORTS 296
54#define TOK_EXTENSIBILITY 297
55#define TOK_EXTERNAL 298
56#define TOK_FALSE 299
57#define TOK_FROM 300
58#define TOK_GeneralizedTime 301
59#define TOK_GeneralString 302
60#define TOK_GraphicString 303
61#define TOK_IA5String 304
62#define TOK_IDENTIFIER 305
63#define TOK_IMPLICIT 306
64#define TOK_IMPLIED 307
65#define TOK_IMPORTS 308
66#define TOK_INCLUDES 309
67#define TOK_INSTANCE 310
68#define TOK_INSTRUCTIONS 311
69#define TOK_INTEGER 312
70#define TOK_ISO646String 313
71#define TOK_MAX 314
72#define TOK_MIN 315
73#define TOK_MINUS_INFINITY 316
74#define TOK_NULL 317
75#define TOK_NumericString 318
76#define TOK_OBJECT 319
77#define TOK_ObjectDescriptor 320
78#define TOK_OCTET 321
79#define TOK_OF 322
80#define TOK_OPTIONAL 323
81#define TOK_PATTERN 324
82#define TOK_PDV 325
83#define TOK_PLUS_INFINITY 326
84#define TOK_PRESENT 327
85#define TOK_PrintableString 328
86#define TOK_PRIVATE 329
87#define TOK_REAL 330
88#define TOK_RELATIVE_OID 331
89#define TOK_SEQUENCE 332
90#define TOK_SET 333
91#define TOK_SIZE 334
92#define TOK_STRING 335
93#define TOK_SYNTAX 336
94#define TOK_T61String 337
95#define TOK_TAGS 338
96#define TOK_TeletexString 339
97#define TOK_TRUE 340
98#define TOK_TYPE_IDENTIFIER 341
99#define TOK_UNIQUE 342
100#define TOK_UNIVERSAL 343
101#define TOK_UniversalString 344
102#define TOK_UTCTime 345
103#define TOK_UTF8String 346
104#define TOK_VideotexString 347
105#define TOK_VisibleString 348
106#define TOK_WITH 349
107#define TOK_EXCEPT 350
108#define TOK_INTERSECTION 351
109#define TOK_UNION 352
110#define TOK_TwoDots 353
111#define TOK_ThreeDots 354
vlmfa67ddc2004-06-03 03:38:44 +0000112
113#line 1 "asn1p_y.y"
114
115
116#include <stdlib.h>
117#include <stdio.h>
118#include <string.h>
119#include <errno.h>
120#include <assert.h>
121
122#include "asn1parser.h"
123
124#define YYPARSE_PARAM param
125#define YYERROR_VERBOSE
126
127int yylex(void);
128int yyerror(const char *msg);
129void asn1p_lexer_hack_push_opaque_state(void);
130void asn1p_lexer_hack_enable_with_syntax(void);
vlm9283dbe2004-08-18 04:59:12 +0000131void asn1p_lexer_hack_push_encoding_control(void);
vlmfa67ddc2004-06-03 03:38:44 +0000132#define yylineno asn1p_lineno
133extern int asn1p_lineno;
134
135
136static asn1p_value_t *
137 _convert_bitstring2binary(char *str, int base);
138
vlm6a02a8a2004-09-08 00:28:11 +0000139#define checkmem(ptr) do { \
140 if(!(ptr)) \
141 return yyerror("Memory failure"); \
vlmfa67ddc2004-06-03 03:38:44 +0000142 } while(0)
143
144#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
145 if(arg1->type != constr_type) { \
146 int __ret; \
147 root = asn1p_constraint_new(yylineno); \
148 checkmem(root); \
149 root->type = constr_type; \
150 __ret = asn1p_constraint_insert(root, \
151 arg1); \
152 checkmem(__ret == 0); \
153 } else { \
154 root = arg1; \
155 } \
156 if(arg2) { \
157 int __ret \
158 = asn1p_constraint_insert(root, arg2); \
159 checkmem(__ret == 0); \
160 } \
161 } while(0)
162
163
vlm9283dbe2004-08-18 04:59:12 +0000164#line 58 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +0000165typedef union {
166 asn1p_t *a_grammar;
167 asn1p_module_flags_e a_module_flags;
168 asn1p_module_t *a_module;
169 asn1p_expr_type_e a_type; /* ASN.1 Type */
170 asn1p_expr_t *a_expr; /* Constructed collection */
171 asn1p_constraint_t *a_constr; /* Constraint */
172 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
173 asn1p_xports_t *a_xports; /* IMports/EXports */
174 asn1p_oid_t *a_oid; /* Object Identifier */
175 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
176 struct asn1p_type_tag_s a_tag; /* A tag */
177 asn1p_ref_t *a_ref; /* Reference to custom type */
178 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
179 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
180 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
181 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
182 struct asn1p_param_s a_parg; /* A parameter argument */
183 asn1p_paramlist_t *a_plist; /* A pargs list */
vlmc94e28f2004-09-15 11:59:51 +0000184 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
vlmfa67ddc2004-06-03 03:38:44 +0000185 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
vlmec6acd42004-09-29 13:18:09 +0000186 asn1c_integer_t a_int;
vlmfa67ddc2004-06-03 03:38:44 +0000187 char *tv_str;
188 struct {
189 char *buf;
190 int len;
191 } tv_opaque;
192 struct {
193 char *name;
194 struct asn1p_type_tag_s tag;
195 } tv_nametag;
vlm6a02a8a2004-09-08 00:28:11 +0000196} YYSTYPE;
197#include <stdio.h>
198
199#ifndef __cplusplus
200#ifndef __STDC__
201#define const
202#endif
vlmfa67ddc2004-06-03 03:38:44 +0000203#endif
204
205
206
vlme1e6ed82005-03-24 14:26:38 +0000207#define YYFINAL 437
vlm6a02a8a2004-09-08 00:28:11 +0000208#define YYFLAG -32768
vlm2728a8d2005-01-23 09:51:44 +0000209#define YYNTBASE 116
vlmfa67ddc2004-06-03 03:38:44 +0000210
vlme1e6ed82005-03-24 14:26:38 +0000211#define YYTRANSLATE(x) ((unsigned)(x) <= 354 ? yytranslate[x] : 220)
vlmfa67ddc2004-06-03 03:38:44 +0000212
vlm6a02a8a2004-09-08 00:28:11 +0000213static const char yytranslate[] = { 0,
214 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
215 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
216 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2728a8d2005-01-23 09:51:44 +0000217 2, 2, 110, 2, 2, 2, 2, 2, 2, 105,
218 106, 2, 2, 108, 2, 111, 2, 2, 2, 2,
219 2, 2, 2, 2, 2, 2, 2, 109, 107, 112,
220 2, 2, 2, 113, 2, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000221 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
222 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2728a8d2005-01-23 09:51:44 +0000223 114, 2, 115, 97, 2, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000224 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
225 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2728a8d2005-01-23 09:51:44 +0000226 2, 2, 103, 99, 104, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000227 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
228 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
229 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
230 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
231 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
232 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
233 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
234 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
235 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
236 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
237 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
238 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
239 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
240 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
241 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
242 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
243 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
244 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
245 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
246 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
247 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
248 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
vlm2728a8d2005-01-23 09:51:44 +0000249 98, 100, 101, 102
vlm6a02a8a2004-09-08 00:28:11 +0000250};
vlmfa67ddc2004-06-03 03:38:44 +0000251
vlm6a02a8a2004-09-08 00:28:11 +0000252#if YYDEBUG != 0
253static const short yyprhs[] = { 0,
254 0, 2, 4, 7, 16, 17, 19, 23, 26, 28,
255 31, 33, 38, 40, 41, 43, 45, 48, 51, 54,
256 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
257 79, 81, 82, 86, 88, 92, 95, 97, 100, 105,
vlm0aa86902004-10-12 23:26:53 +0000258 107, 111, 113, 117, 119, 123, 127, 130, 132, 136,
259 138, 142, 144, 151, 153, 155, 156, 158, 160, 164,
260 166, 168, 173, 177, 181, 188, 190, 194, 196, 200,
vlm4053ca52005-02-18 16:34:21 +0000261 204, 208, 210, 214, 216, 218, 219, 221, 223, 227,
262 231, 235, 237, 239, 243, 246, 248, 254, 255, 257,
263 259, 263, 266, 271, 276, 277, 279, 280, 287, 289,
vlm5e2c4b92005-03-20 11:12:40 +0000264 292, 294, 296, 298, 302, 306, 310, 312, 317, 322,
265 327, 334, 341, 343, 348, 353, 355, 359, 361, 365,
266 369, 373, 375, 379, 381, 385, 387, 389, 391, 393,
267 398, 402, 403, 407, 409, 411, 413, 415, 417, 419,
vlme1e6ed82005-03-24 14:26:38 +0000268 421, 423, 425, 429, 431, 437, 447, 449, 452, 454,
269 456, 458, 460, 463, 466, 468, 470, 473, 476, 478,
270 480, 482, 484, 486, 489, 491, 494, 496, 498, 500,
271 502, 504, 506, 508, 510, 512, 514, 516, 518, 520,
272 522, 524, 526, 528, 530, 532, 533, 535, 537, 542,
273 546, 551, 553, 557, 563, 565, 569, 573, 577, 581,
274 586, 590, 592, 594, 598, 602, 606, 610, 612, 614,
275 615, 621, 623, 626, 629, 633, 635, 637, 639, 641,
276 643, 645, 647, 649, 655, 657, 661, 663, 667, 668,
277 670, 672, 674, 676, 678, 680, 684, 689, 691, 695,
278 698, 702, 704, 708, 709, 711, 713, 716, 719, 723,
279 725, 729, 731, 736, 741, 743, 745, 747, 749, 750,
280 752, 755, 760, 761, 763, 765, 767, 768, 770, 772,
281 774, 776, 778, 779, 781
vlm6a02a8a2004-09-08 00:28:11 +0000282};
vlmfa67ddc2004-06-03 03:38:44 +0000283
vlm2728a8d2005-01-23 09:51:44 +0000284static const short yyrhs[] = { 117,
vlme1e6ed82005-03-24 14:26:38 +0000285 0, 118, 0, 117, 118, 0, 216, 119, 34, 123,
vlm2728a8d2005-01-23 09:51:44 +0000286 3, 21, 126, 39, 0, 0, 120, 0, 103, 121,
287 104, 0, 103, 104, 0, 122, 0, 121, 122, 0,
vlme1e6ed82005-03-24 14:26:38 +0000288 219, 0, 219, 105, 9, 106, 0, 9, 0, 0,
vlm2728a8d2005-01-23 09:51:44 +0000289 124, 0, 125, 0, 124, 125, 0, 41, 84, 0,
vlm6a02a8a2004-09-08 00:28:11 +0000290 52, 84, 0, 20, 84, 0, 43, 53, 0, 12,
vlm2728a8d2005-01-23 09:51:44 +0000291 57, 0, 0, 127, 0, 128, 0, 127, 128, 0,
292 130, 0, 135, 0, 143, 0, 170, 0, 138, 0,
vlme1e6ed82005-03-24 14:26:38 +0000293 0, 38, 12, 129, 0, 179, 0, 54, 131, 107,
vlm2728a8d2005-01-23 09:51:44 +0000294 0, 54, 46, 0, 132, 0, 131, 132, 0, 133,
vlme1e6ed82005-03-24 14:26:38 +0000295 46, 216, 119, 0, 134, 0, 133, 108, 134, 0,
296 216, 0, 216, 103, 104, 0, 219, 0, 42, 136,
vlm2728a8d2005-01-23 09:51:44 +0000297 107, 0, 42, 17, 107, 0, 42, 107, 0, 137,
vlme1e6ed82005-03-24 14:26:38 +0000298 0, 136, 108, 137, 0, 216, 0, 216, 103, 104,
299 0, 219, 0, 216, 139, 3, 103, 140, 104, 0,
300 165, 0, 176, 0, 0, 141, 0, 142, 0, 141,
301 108, 142, 0, 102, 0, 187, 0, 216, 3, 211,
302 87, 0, 216, 3, 163, 0, 216, 3, 153, 0,
303 216, 103, 144, 104, 3, 163, 0, 145, 0, 144,
304 108, 145, 0, 216, 0, 216, 109, 219, 0, 216,
305 109, 216, 0, 176, 109, 219, 0, 147, 0, 146,
306 108, 147, 0, 163, 0, 219, 0, 0, 149, 0,
307 150, 0, 149, 108, 150, 0, 219, 163, 205, 0,
vlm4053ca52005-02-18 16:34:21 +0000308 30, 68, 163, 0, 162, 0, 152, 0, 151, 108,
vlme1e6ed82005-03-24 14:26:38 +0000309 152, 0, 219, 163, 0, 162, 0, 28, 103, 155,
vlm4053ca52005-02-18 16:34:21 +0000310 104, 157, 0, 0, 88, 0, 156, 0, 155, 108,
vlme1e6ed82005-03-24 14:26:38 +0000311 156, 0, 168, 205, 0, 168, 163, 154, 205, 0,
312 168, 168, 154, 205, 0, 0, 158, 0, 0, 95,
vlm4053ca52005-02-18 16:34:21 +0000313 82, 103, 159, 160, 104, 0, 161, 0, 160, 161,
314 0, 4, 0, 168, 0, 102, 0, 102, 110, 173,
vlme1e6ed82005-03-24 14:26:38 +0000315 0, 102, 110, 210, 0, 211, 164, 183, 0, 178,
vlm5e2c4b92005-03-20 11:12:40 +0000316 0, 27, 103, 151, 104, 0, 78, 103, 148, 104,
vlme1e6ed82005-03-24 14:26:38 +0000317 0, 79, 103, 148, 104, 0, 78, 183, 68, 218,
318 211, 164, 0, 79, 183, 68, 218, 211, 164, 0,
319 18, 0, 18, 35, 25, 219, 0, 216, 103, 146,
vlm5e2c4b92005-03-20 11:12:40 +0000320 104, 0, 165, 0, 56, 68, 165, 0, 11, 0,
vlme1e6ed82005-03-24 14:26:38 +0000321 11, 111, 216, 0, 217, 111, 216, 0, 11, 111,
322 219, 0, 217, 0, 217, 111, 166, 0, 167, 0,
vlm5e2c4b92005-03-20 11:12:40 +0000323 166, 111, 167, 0, 169, 0, 169, 0, 13, 0,
vlme1e6ed82005-03-24 14:26:38 +0000324 14, 0, 219, 139, 3, 171, 0, 219, 109, 171,
325 0, 0, 103, 172, 175, 0, 63, 0, 45, 0,
326 86, 0, 5, 0, 7, 0, 174, 0, 210, 0,
327 173, 0, 219, 0, 216, 111, 219, 0, 6, 0,
328 103, 9, 108, 9, 104, 0, 103, 9, 108, 9,
329 108, 9, 108, 9, 104, 0, 4, 0, 175, 4,
330 0, 24, 0, 63, 0, 76, 0, 177, 0, 67,
331 81, 0, 65, 51, 0, 77, 0, 44, 0, 36,
332 71, 0, 26, 81, 0, 91, 0, 47, 0, 179,
333 0, 58, 0, 40, 0, 22, 81, 0, 176, 0,
334 177, 207, 0, 23, 0, 48, 0, 49, 0, 50,
335 0, 59, 0, 64, 0, 74, 0, 83, 0, 85,
336 0, 90, 0, 92, 0, 93, 0, 94, 0, 66,
337 0, 99, 0, 100, 0, 97, 0, 98, 0, 96,
338 0, 0, 184, 0, 185, 0, 80, 105, 186, 106,
339 0, 105, 186, 106, 0, 185, 105, 186, 106, 0,
340 187, 0, 187, 108, 102, 0, 187, 108, 102, 108,
341 187, 0, 188, 0, 17, 96, 188, 0, 187, 180,
342 188, 0, 187, 181, 188, 0, 188, 182, 188, 0,
343 191, 105, 186, 106, 0, 105, 186, 106, 0, 192,
344 0, 193, 0, 192, 190, 192, 0, 61, 190, 192,
345 0, 192, 190, 60, 0, 61, 190, 60, 0, 199,
346 0, 194, 0, 0, 31, 25, 103, 189, 175, 0,
347 101, 0, 101, 112, 0, 112, 101, 0, 112, 101,
348 112, 0, 80, 0, 46, 0, 45, 0, 86, 0,
349 210, 0, 174, 0, 219, 0, 216, 0, 95, 30,
350 103, 195, 104, 0, 196, 0, 195, 108, 196, 0,
351 102, 0, 219, 183, 197, 0, 0, 198, 0, 73,
352 0, 15, 0, 69, 0, 200, 0, 201, 0, 103,
353 216, 104, 0, 200, 103, 202, 104, 0, 203, 0,
354 202, 108, 203, 0, 113, 204, 0, 113, 111, 204,
355 0, 219, 0, 204, 111, 219, 0, 0, 206, 0,
356 69, 0, 33, 171, 0, 103, 104, 0, 103, 208,
357 104, 0, 209, 0, 208, 108, 209, 0, 219, 0,
358 219, 105, 210, 106, 0, 219, 105, 173, 106, 0,
359 210, 0, 102, 0, 9, 0, 10, 0, 0, 212,
360 0, 213, 215, 0, 114, 214, 9, 115, 0, 0,
361 89, 0, 19, 0, 75, 0, 0, 52, 0, 41,
362 0, 11, 0, 12, 0, 12, 0, 0, 219, 0,
363 8, 0
vlm6a02a8a2004-09-08 00:28:11 +0000364};
vlmfa67ddc2004-06-03 03:38:44 +0000365
366#endif
367
vlm6a02a8a2004-09-08 00:28:11 +0000368#if YYDEBUG != 0
369static const short yyrline[] = { 0,
vlme1e6ed82005-03-24 14:26:38 +0000370 303, 309, 315, 331, 356, 358, 361, 365, 370, 377,
371 385, 390, 394, 403, 405, 413, 417, 425, 429, 432,
372 435, 439, 459, 461, 469, 473, 505, 509, 518, 525,
373 538, 545, 547, 559, 572, 579, 584, 590, 596, 605,
374 611, 617, 624, 630, 638, 642, 645, 652, 658, 664,
375 671, 677, 686, 696, 704, 712, 714, 724, 727, 731,
376 734, 746, 758, 764, 780, 789, 799, 809, 814, 821,
377 828, 838, 844, 850, 854, 877, 879, 881, 887, 893,
378 900, 907, 912, 918, 924, 930, 935, 945, 947, 950,
379 958, 964, 973, 979, 996, 998, 1003, 1007, 1012, 1017,
380 1023, 1027, 1038, 1047, 1056, 1067, 1089, 1093, 1099, 1105,
381 1111, 1121, 1131, 1137, 1151, 1175, 1182, 1196, 1205, 1215,
382 1225, 1235, 1243, 1264, 1273, 1282, 1283, 1285, 1292, 1304,
383 1314, 1322, 1322, 1327, 1332, 1337, 1342, 1346, 1350, 1353,
384 1356, 1361, 1373, 1390, 1395, 1405, 1421, 1431, 1445, 1447,
385 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457,
386 1458, 1464, 1466, 1467, 1470, 1477, 1489, 1491, 1495, 1499,
387 1500, 1501, 1502, 1503, 1507, 1508, 1509, 1510, 1514, 1515,
388 1522, 1522, 1523, 1523, 1524, 1526, 1528, 1533, 1537, 1546,
389 1550, 1555, 1559, 1565, 1575, 1579, 1582, 1585, 1588, 1593,
390 1602, 1610, 1616, 1622, 1629, 1637, 1645, 1654, 1657, 1660,
391 1661, 1671, 1673, 1674, 1675, 1678, 1682, 1687, 1693, 1698,
392 1701, 1704, 1717, 1731, 1737, 1741, 1746, 1752, 1764, 1766,
393 1769, 1773, 1776, 1781, 1785, 1793, 1808, 1814, 1821, 1834,
394 1846, 1861, 1865, 1882, 1887, 1890, 1895, 1917, 1922, 1927,
395 1933, 1939, 1947, 1955, 1963, 1970, 1980, 1985, 2015, 2017,
396 2020, 2027, 2033, 2035, 2036, 2037, 2040, 2042, 2043, 2046,
397 2051, 2058, 2065, 2067, 2071
vlm6a02a8a2004-09-08 00:28:11 +0000398};
399#endif
400
401
402#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
403
404static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
405"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
406"TOK_number_negative","TOK_typereference","TOK_capitalreference","TOK_typefieldreference",
407"TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY",
408"TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN",
409"TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS",
410"TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED",
411"TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL","TOK_END","TOK_ENUMERATED",
412"TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE",
413"TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString","TOK_GraphicString","TOK_IA5String",
414"TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE",
415"TOK_INSTRUCTIONS","TOK_INTEGER","TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY",
416"TOK_NULL","TOK_NumericString","TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET",
417"TOK_OF","TOK_OPTIONAL","TOK_PATTERN","TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT",
418"TOK_PrintableString","TOK_PRIVATE","TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE",
419"TOK_SET","TOK_SIZE","TOK_STRING","TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString",
420"TOK_TRUE","TOK_TYPE_IDENTIFIER","TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString",
421"TOK_UTCTime","TOK_UTF8String","TOK_VideotexString","TOK_VisibleString","TOK_WITH",
422"TOK_EXCEPT","'^'","TOK_INTERSECTION","'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots",
vlm2728a8d2005-01-23 09:51:44 +0000423"'{'","'}'","'('","')'","';'","','","':'","'!'","'.'","'<'","'@'","'['","']'",
vlm6a02a8a2004-09-08 00:28:11 +0000424"ParsedGrammar","ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
425"ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags",
426"ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody",
427"ModuleSpecificationBody","ModuleSpecificationElement","@1","ImportsDefinition",
428"ImportsBundleSet","ImportsBundle","ImportsList","ImportsElement","ExportsDefinition",
429"ExportsBody","ExportsElement","ValueSetDefinition","DefinedTypeRef","optValueSetBody",
430"ValueSetBody","ValueSetElement","DataTypeReference","ParameterArgumentList",
vlm0aa86902004-10-12 23:26:53 +0000431"ParameterArgumentName","ActualParameterList","ActualParameter","optComponentTypeLists",
432"ComponentTypeLists","ComponentType","AlternativeTypeLists","AlternativeType",
433"ClassDeclaration","optUnique","ClassFieldList","ClassField","optWithSyntax",
434"WithSyntax","@2","WithSyntaxFormat","WithSyntaxFormatToken","ExtensionAndException",
435"Type","TypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList",
436"ComplexTypeReferenceElement","ClassFieldIdentifier","ClassFieldName","ValueDefinition",
vlme1e6ed82005-03-24 14:26:38 +0000437"Value","@3","DefinedValue","RestrictedCharacterStringValue","Opaque","BasicTypeId",
438"BasicTypeId_UniverationCompatible","BasicType","BasicString","Union","Intersection",
439"Except","optConstraints","Constraints","SetOfConstraints","ElementSetSpecs",
440"ElementSetSpec","ConstraintSubtypeElement","@4","ConstraintRangeSpec","ConstraintSpec",
441"SingleValue","ContainedSubtype","WithComponents","WithComponentsList","WithComponentsElement",
442"optPresenceConstraint","PresenceConstraint","TableConstraint","SimpleTableConstraint",
443"ComponentRelationConstraint","AtNotationList","AtNotationElement","ComponentIdList",
444"optMarker","Marker","UniverationDefinition","UniverationList","UniverationElement",
445"SignedNumber","optTag","Tag","TagTypeValue","TagClass","TagPlicit","TypeRefName",
446"ObjectClassReference","optIdentifier","Identifier", NULL
vlm6a02a8a2004-09-08 00:28:11 +0000447};
448#endif
449
450static const short yyr1[] = { 0,
vlm2728a8d2005-01-23 09:51:44 +0000451 116, 117, 117, 118, 119, 119, 120, 120, 121, 121,
452 122, 122, 122, 123, 123, 124, 124, 125, 125, 125,
453 125, 125, 126, 126, 127, 127, 128, 128, 128, 128,
454 128, 129, 128, 128, 130, 130, 131, 131, 132, 133,
455 133, 134, 134, 134, 135, 135, 135, 136, 136, 137,
456 137, 137, 138, 139, 139, 140, 140, 141, 141, 142,
457 142, 143, 143, 143, 143, 144, 144, 145, 145, 145,
vlm4053ca52005-02-18 16:34:21 +0000458 145, 146, 146, 147, 147, 148, 148, 149, 149, 150,
459 150, 150, 151, 151, 152, 152, 153, 154, 154, 155,
460 155, 156, 156, 156, 157, 157, 159, 158, 160, 160,
461 161, 161, 162, 162, 162, 163, 164, 164, 164, 164,
vlm5e2c4b92005-03-20 11:12:40 +0000462 164, 164, 164, 164, 164, 164, 164, 165, 165, 165,
463 165, 165, 165, 166, 166, 167, 168, 169, 169, 170,
464 171, 172, 171, 171, 171, 171, 171, 171, 171, 171,
vlme1e6ed82005-03-24 14:26:38 +0000465 171, 173, 173, 174, 174, 174, 175, 175, 176, 176,
466 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
467 176, 177, 177, 177, 178, 178, 179, 179, 179, 179,
468 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
469 180, 180, 181, 181, 182, 183, 183, 184, 184, 185,
470 185, 186, 186, 186, 187, 187, 187, 187, 187, 188,
471 188, 188, 188, 188, 188, 188, 188, 188, 188, 189,
472 188, 190, 190, 190, 190, 191, 191, 192, 192, 192,
473 192, 192, 193, 194, 195, 195, 196, 196, 197, 197,
474 198, 198, 198, 199, 199, 200, 201, 202, 202, 203,
475 203, 204, 204, 205, 205, 206, 206, 207, 207, 208,
476 208, 209, 209, 209, 209, 209, 210, 210, 211, 211,
477 212, 213, 214, 214, 214, 214, 215, 215, 215, 216,
478 216, 217, 218, 218, 219
vlm6a02a8a2004-09-08 00:28:11 +0000479};
480
481static const short yyr2[] = { 0,
482 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
483 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
484 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
485 1, 0, 3, 1, 3, 2, 1, 2, 4, 1,
vlm0aa86902004-10-12 23:26:53 +0000486 3, 1, 3, 1, 3, 3, 2, 1, 3, 1,
487 3, 1, 6, 1, 1, 0, 1, 1, 3, 1,
488 1, 4, 3, 3, 6, 1, 3, 1, 3, 3,
vlm4053ca52005-02-18 16:34:21 +0000489 3, 1, 3, 1, 1, 0, 1, 1, 3, 3,
490 3, 1, 1, 3, 2, 1, 5, 0, 1, 1,
491 3, 2, 4, 4, 0, 1, 0, 6, 1, 2,
vlm5e2c4b92005-03-20 11:12:40 +0000492 1, 1, 1, 3, 3, 3, 1, 4, 4, 4,
493 6, 6, 1, 4, 4, 1, 3, 1, 3, 3,
494 3, 1, 3, 1, 3, 1, 1, 1, 1, 4,
495 3, 0, 3, 1, 1, 1, 1, 1, 1, 1,
vlme1e6ed82005-03-24 14:26:38 +0000496 1, 1, 3, 1, 5, 9, 1, 2, 1, 1,
497 1, 1, 2, 2, 1, 1, 2, 2, 1, 1,
498 1, 1, 1, 2, 1, 2, 1, 1, 1, 1,
vlm6a02a8a2004-09-08 00:28:11 +0000499 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
vlme1e6ed82005-03-24 14:26:38 +0000500 1, 1, 1, 1, 1, 0, 1, 1, 4, 3,
501 4, 1, 3, 5, 1, 3, 3, 3, 3, 4,
502 3, 1, 1, 3, 3, 3, 3, 1, 1, 0,
503 5, 1, 2, 2, 3, 1, 1, 1, 1, 1,
504 1, 1, 1, 5, 1, 3, 1, 3, 0, 1,
505 1, 1, 1, 1, 1, 3, 4, 1, 3, 2,
506 3, 1, 3, 0, 1, 1, 2, 2, 3, 1,
507 3, 1, 4, 4, 1, 1, 1, 1, 0, 1,
508 2, 4, 0, 1, 1, 1, 0, 1, 1, 1,
509 1, 1, 0, 1, 1
vlm6a02a8a2004-09-08 00:28:11 +0000510};
511
512static const short yydefact[] = { 0,
vlme1e6ed82005-03-24 14:26:38 +0000513 270, 271, 1, 2, 5, 3, 0, 0, 6, 275,
vlm6a02a8a2004-09-08 00:28:11 +0000514 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
515 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
vlme1e6ed82005-03-24 14:26:38 +0000516 18, 21, 19, 0, 17, 12, 23, 167, 0, 0,
517 168, 169, 170, 0, 171, 172, 180, 173, 174, 175,
518 176, 177, 178, 179, 0, 24, 25, 27, 28, 31,
vlm0aa86902004-10-12 23:26:53 +0000519 29, 30, 34, 0, 0, 32, 0, 47, 0, 48,
520 50, 52, 36, 0, 37, 0, 40, 42, 44, 4,
vlme1e6ed82005-03-24 14:26:38 +0000521 26, 259, 118, 272, 0, 149, 0, 0, 163, 156,
522 160, 162, 150, 0, 0, 151, 155, 159, 0, 0,
523 54, 55, 152, 161, 122, 0, 33, 46, 45, 0,
524 0, 35, 38, 0, 0, 0, 0, 263, 64, 63,
525 0, 260, 267, 0, 164, 158, 157, 154, 153, 0,
vlm5e2c4b92005-03-20 11:12:40 +0000526 66, 0, 68, 0, 0, 0, 49, 51, 5, 41,
vlme1e6ed82005-03-24 14:26:38 +0000527 43, 0, 265, 266, 264, 0, 118, 272, 113, 0,
528 0, 186, 186, 62, 186, 116, 165, 152, 107, 0,
529 269, 268, 261, 119, 121, 0, 0, 0, 0, 56,
530 128, 129, 123, 124, 126, 120, 137, 144, 138, 257,
531 258, 135, 134, 136, 132, 130, 141, 139, 140, 0,
532 142, 39, 0, 90, 259, 127, 0, 0, 0, 0,
533 0, 76, 0, 0, 187, 188, 76, 0, 106, 0,
534 166, 259, 259, 67, 71, 70, 69, 0, 0, 218,
535 217, 0, 216, 219, 0, 60, 0, 0, 0, 57,
536 58, 221, 61, 195, 0, 202, 203, 209, 208, 234,
537 235, 220, 223, 222, 0, 0, 0, 0, 0, 95,
538 0, 0, 246, 88, 88, 92, 245, 0, 262, 0,
539 103, 0, 83, 86, 259, 117, 0, 0, 0, 77,
540 78, 82, 259, 0, 192, 273, 0, 0, 273, 256,
541 248, 0, 250, 255, 252, 0, 72, 74, 75, 65,
542 0, 0, 212, 0, 0, 0, 0, 0, 53, 0,
543 183, 184, 181, 182, 0, 0, 185, 0, 0, 0,
544 0, 125, 0, 147, 133, 143, 131, 0, 87, 96,
545 91, 247, 89, 244, 244, 114, 0, 108, 0, 85,
546 0, 259, 109, 0, 244, 190, 0, 259, 274, 0,
547 110, 259, 249, 0, 0, 115, 259, 196, 210, 213,
548 214, 207, 0, 205, 0, 236, 201, 59, 197, 198,
549 199, 0, 206, 204, 0, 0, 238, 0, 148, 0,
550 93, 94, 104, 105, 142, 84, 189, 81, 79, 80,
551 193, 0, 191, 0, 251, 0, 0, 73, 0, 215,
552 227, 0, 225, 186, 200, 0, 240, 242, 237, 0,
553 145, 0, 97, 0, 111, 112, 254, 253, 211, 224,
554 0, 229, 241, 0, 239, 0, 0, 194, 226, 232,
555 233, 231, 228, 230, 243, 0, 101, 0, 99, 102,
556 0, 98, 100, 146, 0, 0, 0
vlm6a02a8a2004-09-08 00:28:11 +0000557};
558
vlme1e6ed82005-03-24 14:26:38 +0000559static const short yydefgoto[] = { 435,
vlm6a02a8a2004-09-08 00:28:11 +0000560 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
vlm5e2c4b92005-03-20 11:12:40 +0000561 56, 57, 107, 58, 74, 75, 76, 77, 59, 69,
vlme1e6ed82005-03-24 14:26:38 +0000562 70, 60, 100, 229, 230, 231, 61, 130, 131, 286,
563 287, 269, 270, 271, 262, 263, 119, 324, 193, 194,
564 319, 320, 417, 428, 429, 272, 288, 155, 156, 173,
565 174, 195, 196, 62, 186, 247, 187, 232, 315, 157,
566 103, 159, 104, 305, 306, 308, 204, 205, 206, 274,
567 275, 234, 389, 295, 235, 236, 237, 238, 392, 393,
568 423, 424, 239, 240, 241, 366, 367, 397, 256, 257,
569 211, 282, 283, 242, 258, 122, 123, 146, 163, 243,
570 105, 338, 244
vlm6a02a8a2004-09-08 00:28:11 +0000571};
572
vlme1e6ed82005-03-24 14:26:38 +0000573static const short yypact[] = { 203,
574-32768,-32768, 203,-32768, -62,-32768, 39, 24,-32768,-32768,
575-32768,-32768, 43,-32768, -31, 138,-32768,-32768, 75, 50,
576 30, 38, 112, 87, 170, 138,-32768, 76,-32768,-32768,
577-32768,-32768,-32768, 187,-32768,-32768, 490,-32768, 213, 9,
578-32768,-32768,-32768, 155,-32768,-32768,-32768,-32768,-32768,-32768,
579-32768,-32768,-32768,-32768, 172, 490,-32768,-32768,-32768,-32768,
580-32768,-32768,-32768, 361, 719,-32768, 121,-32768, 149,-32768,
581 143,-32768,-32768, 27,-32768, -22,-32768, 148,-32768,-32768,
582-32768, -10, 123,-32768, 173,-32768, 177, 202,-32768,-32768,
583-32768,-32768,-32768, 229, 200,-32768,-32768,-32768, 794, 284,
584-32768,-32768,-32768,-32768, 179, 285,-32768,-32768,-32768, 186,
585 198,-32768,-32768, 203, 186, 201, 205, 10,-32768,-32768,
586 567,-32768, 54, 186,-32768,-32768,-32768,-32768,-32768, -21,
587-32768, 194, 195, 206, 272, 460,-32768,-32768, -62,-32768,
588-32768, 247,-32768,-32768,-32768, 297, 8, 207, 276, 210,
589 244, 104, 107,-32768, -40,-32768,-32768, 212,-32768, 214,
590-32768,-32768,-32768,-32768,-32768, 315, 794, 311, 186, 221,
591-32768,-32768, 219,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
592-32768,-32768,-32768,-32768, 312,-32768,-32768,-32768,-32768, 220,
593 216,-32768, -15,-32768, 31,-32768, 217, 308, 7, 259,
594 230, 58, 283, 266,-32768, 231, 58, 271,-32768, 53,
595-32768, 6, 227,-32768,-32768,-32768,-32768, 246, 320,-32768,
596-32768, 68,-32768,-32768, 316,-32768, 238, 283, 243, 241,
597-32768,-32768, 199, 254, 248, 68,-32768,-32768,-32768, 249,
598-32768,-32768,-32768,-32768, 247, 251, 347, 311, 460, 260,
599 247, 460,-32768, 268, 268,-32768,-32768, 644,-32768, 311,
600 250, -3,-32768,-32768, 227,-32768, 283, 286, 253, 257,
601-32768,-32768, 227, 256, 78, 311, 283, 262, 311,-32768,
602-32768, 85,-32768,-32768, 263, 98,-32768,-32768,-32768,-32768,
603 450, 264, 258, 270, 67, 273, 275, 269,-32768, 221,
604-32768,-32768,-32768,-32768, 450, 450,-32768, 450, 283, 88,
605 261,-32768, 368,-32768, 376,-32768,-32768, 299,-32768,-32768,
606-32768,-32768,-32768, 1, 1,-32768, 267,-32768, 7,-32768,
607 287, 227,-32768, 58, 1,-32768, 280, 227,-32768, 288,
608-32768, 227,-32768, 70, 267,-32768, 6,-32768,-32768,-32768,
609 278,-32768, 312,-32768, 47,-32768,-32768,-32768,-32768,-32768,
610-32768, 289,-32768,-32768, 17, 116,-32768, 131,-32768, 293,
611-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
612 291, 644,-32768, 644,-32768, 296, 300,-32768, 347,-32768,
613-32768, 136,-32768, -40,-32768, 311, 281,-32768,-32768, 261,
614-32768, 382,-32768, 283,-32768,-32768,-32768,-32768, 376,-32768,
615 47, 95, 281, 311,-32768, 295, 209, 199,-32768,-32768,
616-32768,-32768,-32768,-32768,-32768, 403,-32768, 55,-32768,-32768,
617 309,-32768,-32768,-32768, 414, 415,-32768
vlm6a02a8a2004-09-08 00:28:11 +0000618};
619
620static const short yypgoto[] = {-32768,
vlme1e6ed82005-03-24 14:26:38 +0000621-32768, 413, 279,-32768,-32768, 404,-32768,-32768, 395,-32768,
622-32768, 366,-32768,-32768,-32768, 349,-32768, 314,-32768,-32768,
623 321,-32768, 365,-32768,-32768, 132,-32768,-32768, 274,-32768,
624 86, 232,-32768, 100,-32768, 111,-32768, 181,-32768, 191,
625-32768,-32768,-32768,-32768, 15, -187, -77, -228, -54,-32768,
626 204, -191, -122,-32768, -206,-32768, -291, -108, 56, -42,
627 -120,-32768, -6,-32768,-32768,-32768, -146,-32768,-32768, -196,
628 -168, -87,-32768, 211,-32768, -268,-32768,-32768,-32768, 37,
629-32768,-32768,-32768,-32768,-32768,-32768, 57, 77, -233,-32768,
630-32768,-32768, 106, -128, -79,-32768,-32768,-32768,-32768, 16,
631-32768, 184, -7
vlm6a02a8a2004-09-08 00:28:11 +0000632};
633
634
vlme1e6ed82005-03-24 14:26:38 +0000635#define YYLAST 888
vlm6a02a8a2004-09-08 00:28:11 +0000636
637
638static const short yytable[] = { 15,
vlme1e6ed82005-03-24 14:26:38 +0000639 158, 233, 121, 255, 120, 15, 208, 189, 209, 101,
640 101, 264, 175, 10, 10, 5, 10, 117, 5, 1,
641 2, 102, 102, 114, 10, 67, 354, 188, 143, 65,
642 63, 298, 72, 252, 10, 373, 79, 1, 2, 201,
643 7, 364, 317, 171, 172, 322, 10, 11, 65, 63,
644 10, 11, 64, 386, 10, 71, 132, 16, 427, 78,
645 10, 180, 181, 252, 203, 10, 79, 171, 172, 253,
646 331, 64, 178, 19, 10, 180, 181, 10, 180, 181,
647 340, 284, 166, 28, 144, 115, 167, 268, 250, 78,
648 371, 372, 251, 178, 161, 10, 180, 181, 145, 253,
649 328, 380, 72, 118, 329, 162, 29, 79, 261, 420,
650 -270, 220, 362, 30, 133, 68, 165, 254, 124, 118,
651 189, 31, 175, 189, 132, 71, 352, 396, 191, 139,
652 78, 233, 220, 112, -244, 290, 160, 158, -244, 164,
653 188, 264, 12, 188, 118, 266, 17, 363, 391, 20,
654 176, 190, 224, 405, 280, 406, 281, 21, 432, 261,
655 215, 217, 10, 421, 32, 1, 2, 422, 293, 353,
656 33, 280, 34, 224, 301, 302, 303, 304, 22, 294,
657 23, 36, 133, 201, 216, 337, 201, 330, 343, 24,
658 353, 265, 344, 10, 273, 335, 1, 2, 374, 273,
659 73, 346, 285, 348, 289, 347, 202, 37, 203, 207,
660 80, 203, 427, 1, 2, 284, 387, 359, 360, 399,
661 361, 171, 172, 400, 66, 430, 178, 108, 10, 180,
662 181, 1, 2, 124, 401, 418, 430, 218, 402, 410,
663 316, 191, 297, 411, 191, 111, 246, 412, 1, 2,
664 116, 219, 326, 125, 378, 109, 110, 126, 382, 171,
665 172, 158, 384, 158, 190, 220, 221, 190, 339, 83,
666 84, 339, 127, 160, 10, 180, 181, 1, 2, 128,
667 129, 222, 1, 2, 171, 172, 134, 136, 178, 135,
668 10, 180, 181, 1, 2, 301, 302, 303, 304, 218,
669 223, 138, 168, 169, 141, 197, 224, 142, 170, -271,
670 198, 200, 199, 219, 210, 225, 212, 213, 10, 375,
671 246, 265, 226, 227, 249, 228, 273, 220, 221, 245,
672 248, 259, 260, 276, 267, 277, 285, 375, 279, 289,
673 118, 291, 190, 222, 292, 296, 299, 394, 300, 307,
674 314, 311, 309, 332, 318, 323, 333, 398, 313, 327,
675 190, 336, 223, 82, 334, 341, 349, 345, 224, 350,
676 351, 83, 84, 365, 357, 355, 368, 225, 356, 369,
677 370, 381, 85, 38, 86, 227, 87, 228, 398, 390,
678 416, 414, 377, 383, 395, 403, 88, 160, 404, 160,
679 89, 407, 426, 394, 90, 408, 425, 91, 41, 42,
680 43, 431, 434, 436, 437, 6, 18, 192, 92, 45,
681 35, 81, 113, 93, 46, 94, 47, 95, 140, 106,
682 137, 358, 388, 379, 48, 325, 96, 97, 278, 376,
683 214, 321, 433, 49, 409, 50, 310, 419, 312, 385,
684 51, 98, 52, 53, 54, 178, 415, 10, 180, 181,
685 1, 2, 342, 99, 177, 178, 179, 10, 180, 181,
686 1, 2, 413, 0, 0, 0, 0, 0, 0, 0,
687 219, 0, 0, 0, 0, 0, 0, 0, 0, 0,
688 0, 0, 0, 0, 220, 221, 0, 10, 0, 0,
689 1, 2, 0, 0, 182, 0, 0, 0, 0, 0,
690 222, 0, 38, 0, 0, 0, 0, 0, 0, 0,
691 0, 0, 183, 0, 0, 0, 0, 39, 0, 223,
692 0, 40, 0, 0, 0, 224, 0, 41, 42, 43,
693 0, 0, 0, 44, 225, 184, 0, 0, 45, 0,
694 0, 0, 227, 46, 228, 47, 0, 0, 0, 0,
695 0, 0, 185, 48, 0, 0, 0, 0, 0, 0,
696 0, 0, 49, 0, 50, 0, 0, 147, 148, 51,
697 0, 52, 53, 54, 149, 0, 0, 0, 85, 38,
698 86, 0, 87, 150, 0, 0, 0, 0, 0, 0,
699 0, 0, 88, 0, 0, 0, 89, 0, 0, 0,
700 90, 0, 0, 91, 41, 42, 43, 0, 0, 0,
701 0, 0, 151, 0, 92, 45, 0, 0, 0, 93,
702 46, 94, 47, 95, 0, 0, 0, 0, 0, 0,
703 48, 0, 96, 97, 152, 153, 0, 0, 0, 49,
704 0, 50, 0, 154, 147, 148, 51, 98, 52, 53,
vlm6611add2005-03-20 14:28:32 +0000705 54, 149, 0, 0, 0, 85, 38, 86, 0, 87,
706 150, 0, 0, 0, 0, 0, 0, 0, 0, 88,
707 0, 0, 0, 89, 0, 0, 0, 90, 0, 0,
708 91, 41, 42, 43, 0, 0, 0, 0, 0, 151,
709 0, 92, 45, 0, 0, 0, 93, 46, 94, 47,
710 95, 0, 0, 0, 0, 0, 0, 48, 0, 96,
vlme1e6ed82005-03-24 14:26:38 +0000711 97, 152, 153, 0, 0, 0, 49, 0, 50, 83,
712 84, 0, 0, 51, 98, 52, 53, 54, 0, 0,
713 85, 38, 86, 0, 87, 0, 0, 0, 0, 0,
714 0, 0, 0, 0, 88, 0, 0, 0, 89, 0,
715 0, 0, 90, 0, 0, 91, 41, 42, 43, 0,
716 0, 0, 0, 0, 0, 0, 92, 45, 0, 0,
717 0, 93, 46, 94, 47, 95, 0, 0, 0, 0,
718 0, 0, 48, 0, 96, 97, 0, 0, 0, 0,
719 0, 49, 0, 50, 1, 2, 0, 0, 51, 98,
720 52, 53, 54, 0, 0, 85, 38, 86, 0, 87,
721 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,
722 0, 0, 0, 89, 0, 0, 0, 90, 0, 0,
723 91, 41, 42, 43, 0, 0, 0, 0, 0, 0,
724 0, 92, 45, 0, 0, 0, 93, 46, 94, 47,
725 95, 0, 0, 0, 0, 0, 0, 48, 0, 96,
726 97, 0, 0, 0, 0, 0, 49, 0, 50, 0,
727 0, 0, 0, 51, 98, 52, 53, 54
vlm6a02a8a2004-09-08 00:28:11 +0000728};
729
730static const short yycheck[] = { 7,
vlme1e6ed82005-03-24 14:26:38 +0000731 121, 170, 82, 195, 82, 13, 153, 136, 155, 64,
732 65, 199, 135, 8, 8, 0, 8, 28, 3, 11,
733 12, 64, 65, 46, 8, 17, 295, 136, 19, 37,
734 37, 228, 40, 33, 8, 327, 44, 11, 12, 80,
735 103, 310, 249, 13, 14, 252, 8, 9, 56, 56,
736 8, 9, 37, 345, 8, 40, 99, 34, 4, 44,
737 8, 9, 10, 33, 105, 8, 74, 13, 14, 69,
738 267, 56, 6, 105, 8, 9, 10, 8, 9, 10,
739 277, 210, 104, 9, 75, 108, 108, 30, 104, 74,
740 324, 325, 108, 6, 41, 8, 9, 10, 89, 69,
741 104, 335, 110, 114, 108, 52, 57, 115, 102, 15,
742 103, 45, 309, 84, 99, 107, 124, 195, 111, 114,
743 249, 84, 245, 252, 167, 110, 60, 111, 136, 114,
744 115, 300, 45, 107, 104, 213, 121, 258, 108, 124,
745 249, 329, 104, 252, 114, 200, 104, 60, 102, 12,
746 135, 136, 86, 382, 102, 384, 104, 20, 104, 102,
747 168, 169, 8, 69, 53, 11, 12, 73, 101, 103,
748 84, 102, 3, 86, 97, 98, 99, 100, 41, 112,
749 43, 106, 167, 80, 169, 108, 80, 265, 104, 52,
750 103, 199, 108, 8, 202, 273, 11, 12, 327, 207,
751 46, 104, 210, 291, 212, 108, 103, 21, 105, 103,
752 39, 105, 4, 11, 12, 344, 345, 305, 306, 104,
753 308, 13, 14, 108, 12, 417, 6, 107, 8, 9,
754 10, 11, 12, 111, 104, 404, 428, 17, 108, 104,
755 248, 249, 227, 108, 252, 103, 9, 394, 11, 12,
756 103, 31, 260, 81, 332, 107, 108, 81, 338, 13,
757 14, 382, 342, 384, 249, 45, 46, 252, 276, 11,
758 12, 279, 71, 258, 8, 9, 10, 11, 12, 51,
759 81, 61, 11, 12, 13, 14, 3, 3, 6, 111,
760 8, 9, 10, 11, 12, 97, 98, 99, 100, 17,
761 80, 104, 109, 109, 104, 9, 86, 103, 103, 103,
762 35, 68, 103, 31, 103, 95, 103, 3, 8, 327,
763 9, 329, 102, 103, 109, 105, 334, 45, 46, 111,
764 111, 115, 25, 68, 105, 105, 344, 345, 68, 347,
765 114, 96, 327, 61, 25, 30, 104, 355, 108, 96,
766 4, 103, 105, 68, 95, 88, 104, 365, 108, 110,
767 345, 106, 80, 3, 108, 104, 103, 105, 86, 112,
768 101, 11, 12, 113, 106, 103, 9, 95, 104, 4,
769 82, 102, 22, 23, 24, 103, 26, 105, 396, 112,
770 9, 111, 106, 106, 106, 103, 36, 382, 108, 384,
771 40, 106, 108, 411, 44, 106, 414, 47, 48, 49,
772 50, 9, 104, 0, 0, 3, 13, 139, 58, 59,
773 26, 56, 74, 63, 64, 65, 66, 67, 115, 65,
774 110, 300, 347, 334, 74, 255, 76, 77, 207, 329,
775 167, 251, 428, 83, 389, 85, 236, 411, 245, 344,
776 90, 91, 92, 93, 94, 6, 400, 8, 9, 10,
777 11, 12, 279, 103, 5, 6, 7, 8, 9, 10,
778 11, 12, 396, -1, -1, -1, -1, -1, -1, -1,
779 31, -1, -1, -1, -1, -1, -1, -1, -1, -1,
780 -1, -1, -1, -1, 45, 46, -1, 8, -1, -1,
781 11, 12, -1, -1, 45, -1, -1, -1, -1, -1,
782 61, -1, 23, -1, -1, -1, -1, -1, -1, -1,
783 -1, -1, 63, -1, -1, -1, -1, 38, -1, 80,
784 -1, 42, -1, -1, -1, 86, -1, 48, 49, 50,
785 -1, -1, -1, 54, 95, 86, -1, -1, 59, -1,
786 -1, -1, 103, 64, 105, 66, -1, -1, -1, -1,
787 -1, -1, 103, 74, -1, -1, -1, -1, -1, -1,
788 -1, -1, 83, -1, 85, -1, -1, 11, 12, 90,
789 -1, 92, 93, 94, 18, -1, -1, -1, 22, 23,
790 24, -1, 26, 27, -1, -1, -1, -1, -1, -1,
791 -1, -1, 36, -1, -1, -1, 40, -1, -1, -1,
792 44, -1, -1, 47, 48, 49, 50, -1, -1, -1,
793 -1, -1, 56, -1, 58, 59, -1, -1, -1, 63,
794 64, 65, 66, 67, -1, -1, -1, -1, -1, -1,
795 74, -1, 76, 77, 78, 79, -1, -1, -1, 83,
796 -1, 85, -1, 87, 11, 12, 90, 91, 92, 93,
vlm6611add2005-03-20 14:28:32 +0000797 94, 18, -1, -1, -1, 22, 23, 24, -1, 26,
798 27, -1, -1, -1, -1, -1, -1, -1, -1, 36,
799 -1, -1, -1, 40, -1, -1, -1, 44, -1, -1,
800 47, 48, 49, 50, -1, -1, -1, -1, -1, 56,
801 -1, 58, 59, -1, -1, -1, 63, 64, 65, 66,
802 67, -1, -1, -1, -1, -1, -1, 74, -1, 76,
vlme1e6ed82005-03-24 14:26:38 +0000803 77, 78, 79, -1, -1, -1, 83, -1, 85, 11,
804 12, -1, -1, 90, 91, 92, 93, 94, -1, -1,
805 22, 23, 24, -1, 26, -1, -1, -1, -1, -1,
806 -1, -1, -1, -1, 36, -1, -1, -1, 40, -1,
807 -1, -1, 44, -1, -1, 47, 48, 49, 50, -1,
808 -1, -1, -1, -1, -1, -1, 58, 59, -1, -1,
809 -1, 63, 64, 65, 66, 67, -1, -1, -1, -1,
810 -1, -1, 74, -1, 76, 77, -1, -1, -1, -1,
811 -1, 83, -1, 85, 11, 12, -1, -1, 90, 91,
812 92, 93, 94, -1, -1, 22, 23, 24, -1, 26,
813 -1, -1, -1, -1, -1, -1, -1, -1, -1, 36,
814 -1, -1, -1, 40, -1, -1, -1, 44, -1, -1,
815 47, 48, 49, 50, -1, -1, -1, -1, -1, -1,
816 -1, 58, 59, -1, -1, -1, 63, 64, 65, 66,
817 67, -1, -1, -1, -1, -1, -1, 74, -1, 76,
818 77, -1, -1, -1, -1, -1, 83, -1, 85, -1,
819 -1, -1, -1, 90, 91, 92, 93, 94
vlm6a02a8a2004-09-08 00:28:11 +0000820};
821/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
822#line 3 "/usr/share/bison.simple"
823/* This file comes from bison-1.28. */
824
825/* Skeleton output parser for bison,
826 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
827
828 This program is free software; you can redistribute it and/or modify
829 it under the terms of the GNU General Public License as published by
830 the Free Software Foundation; either version 2, or (at your option)
831 any later version.
832
833 This program is distributed in the hope that it will be useful,
834 but WITHOUT ANY WARRANTY; without even the implied warranty of
835 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
836 GNU General Public License for more details.
837
838 You should have received a copy of the GNU General Public License
839 along with this program; if not, write to the Free Software
840 Foundation, Inc., 59 Temple Place - Suite 330,
841 Boston, MA 02111-1307, USA. */
842
843/* As a special exception, when this file is copied by Bison into a
844 Bison output file, you may use that output file without restriction.
845 This special exception was added by the Free Software Foundation
846 in version 1.24 of Bison. */
847
848/* This is the parser code that is written into each bison parser
849 when the %semantic_parser declaration is not specified in the grammar.
850 It was written by Richard Stallman by simplifying the hairy parser
851 used when %semantic_parser is specified. */
852
853#ifndef YYSTACK_USE_ALLOCA
854#ifdef alloca
855#define YYSTACK_USE_ALLOCA
856#else /* alloca not defined */
857#ifdef __GNUC__
858#define YYSTACK_USE_ALLOCA
859#define alloca __builtin_alloca
860#else /* not GNU C. */
861#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
862#define YYSTACK_USE_ALLOCA
863#include <alloca.h>
864#else /* not sparc */
865/* We think this test detects Watcom and Microsoft C. */
866/* This used to test MSDOS, but that is a bad idea
867 since that symbol is in the user namespace. */
868#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
869#if 0 /* No need for malloc.h, which pollutes the namespace;
870 instead, just don't use alloca. */
871#include <malloc.h>
872#endif
873#else /* not MSDOS, or __TURBOC__ */
874#if defined(_AIX)
875/* I don't know what this was needed for, but it pollutes the namespace.
876 So I turned it off. rms, 2 May 1997. */
877/* #include <malloc.h> */
878 #pragma alloca
879#define YYSTACK_USE_ALLOCA
880#else /* not MSDOS, or __TURBOC__, or _AIX */
881#if 0
882#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
883 and on HPUX 10. Eventually we can turn this on. */
884#define YYSTACK_USE_ALLOCA
885#define alloca __builtin_alloca
886#endif /* __hpux */
887#endif
888#endif /* not _AIX */
889#endif /* not MSDOS, or __TURBOC__ */
890#endif /* not sparc */
891#endif /* not GNU C */
892#endif /* alloca not defined */
893#endif /* YYSTACK_USE_ALLOCA not defined */
894
895#ifdef YYSTACK_USE_ALLOCA
896#define YYSTACK_ALLOC alloca
vlmfa67ddc2004-06-03 03:38:44 +0000897#else
vlm6a02a8a2004-09-08 00:28:11 +0000898#define YYSTACK_ALLOC malloc
vlmfa67ddc2004-06-03 03:38:44 +0000899#endif
900
vlm6a02a8a2004-09-08 00:28:11 +0000901/* Note: there must be only one dollar sign in this file.
902 It is replaced by the list of actions, each action
903 as one case of the switch. */
vlmfa67ddc2004-06-03 03:38:44 +0000904
905#define yyerrok (yyerrstatus = 0)
906#define yyclearin (yychar = YYEMPTY)
907#define YYEMPTY -2
908#define YYEOF 0
909#define YYACCEPT goto yyacceptlab
vlm6a02a8a2004-09-08 00:28:11 +0000910#define YYABORT goto yyabortlab
vlmfa67ddc2004-06-03 03:38:44 +0000911#define YYERROR goto yyerrlab1
vlm6a02a8a2004-09-08 00:28:11 +0000912/* Like YYERROR except do call yyerror.
913 This remains here temporarily to ease the
914 transition to the new meaning of YYERROR, for GCC.
vlmfa67ddc2004-06-03 03:38:44 +0000915 Once GCC version 2 has supplanted version 1, this can go. */
916#define YYFAIL goto yyerrlab
917#define YYRECOVERING() (!!yyerrstatus)
vlm6a02a8a2004-09-08 00:28:11 +0000918#define YYBACKUP(token, value) \
vlmfa67ddc2004-06-03 03:38:44 +0000919do \
920 if (yychar == YYEMPTY && yylen == 1) \
vlm6a02a8a2004-09-08 00:28:11 +0000921 { yychar = (token), yylval = (value); \
vlmfa67ddc2004-06-03 03:38:44 +0000922 yychar1 = YYTRANSLATE (yychar); \
923 YYPOPSTACK; \
924 goto yybackup; \
925 } \
926 else \
vlm6a02a8a2004-09-08 00:28:11 +0000927 { yyerror ("syntax error: cannot back up"); YYERROR; } \
vlmfa67ddc2004-06-03 03:38:44 +0000928while (0)
929
930#define YYTERROR 1
931#define YYERRCODE 256
932
vlm6a02a8a2004-09-08 00:28:11 +0000933#ifndef YYPURE
934#define YYLEX yylex()
vlmfa67ddc2004-06-03 03:38:44 +0000935#endif
936
vlm6a02a8a2004-09-08 00:28:11 +0000937#ifdef YYPURE
938#ifdef YYLSP_NEEDED
939#ifdef YYLEX_PARAM
940#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
941#else
942#define YYLEX yylex(&yylval, &yylloc)
943#endif
944#else /* not YYLSP_NEEDED */
945#ifdef YYLEX_PARAM
946#define YYLEX yylex(&yylval, YYLEX_PARAM)
947#else
948#define YYLEX yylex(&yylval)
949#endif
950#endif /* not YYLSP_NEEDED */
951#endif
vlmfa67ddc2004-06-03 03:38:44 +0000952
vlm6a02a8a2004-09-08 00:28:11 +0000953/* If nonreentrant, generate the variables here */
vlmfa67ddc2004-06-03 03:38:44 +0000954
vlm6a02a8a2004-09-08 00:28:11 +0000955#ifndef YYPURE
vlmfa67ddc2004-06-03 03:38:44 +0000956
vlm6a02a8a2004-09-08 00:28:11 +0000957int yychar; /* the lookahead symbol */
958YYSTYPE yylval; /* the semantic value of the */
959 /* lookahead symbol */
vlmfa67ddc2004-06-03 03:38:44 +0000960
vlm6a02a8a2004-09-08 00:28:11 +0000961#ifdef YYLSP_NEEDED
962YYLTYPE yylloc; /* location data for the lookahead */
963 /* symbol */
964#endif
vlmfa67ddc2004-06-03 03:38:44 +0000965
vlm6a02a8a2004-09-08 00:28:11 +0000966int yynerrs; /* number of parse errors so far */
967#endif /* not YYPURE */
968
969#if YYDEBUG != 0
970int yydebug; /* nonzero means print parse trace */
971/* Since this is uninitialized, it does not stop multiple parsers
972 from coexisting. */
973#endif
974
975/* YYINITDEPTH indicates the initial size of the parser's stacks */
976
vlmfa67ddc2004-06-03 03:38:44 +0000977#ifndef YYINITDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000978#define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +0000979#endif
980
vlm6a02a8a2004-09-08 00:28:11 +0000981/* YYMAXDEPTH is the maximum size the stacks can grow to
982 (effective only if the built-in stack extension method is used). */
vlmfa67ddc2004-06-03 03:38:44 +0000983
984#if YYMAXDEPTH == 0
vlm6a02a8a2004-09-08 00:28:11 +0000985#undef YYMAXDEPTH
vlmfa67ddc2004-06-03 03:38:44 +0000986#endif
987
988#ifndef YYMAXDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000989#define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +0000990#endif
991
vlm6a02a8a2004-09-08 00:28:11 +0000992/* Define __yy_memcpy. Note that the size argument
993 should be passed with type unsigned int, because that is what the non-GCC
994 definitions require. With GCC, __builtin_memcpy takes an arg
995 of type size_t, but it can handle unsigned int. */
vlmfa67ddc2004-06-03 03:38:44 +0000996
vlm6a02a8a2004-09-08 00:28:11 +0000997#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
998#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
999#else /* not GNU C or C++ */
1000#ifndef __cplusplus
vlmfa67ddc2004-06-03 03:38:44 +00001001
vlm6a02a8a2004-09-08 00:28:11 +00001002/* This is the most reliable way to avoid incompatibilities
1003 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +00001004static void
vlm6a02a8a2004-09-08 00:28:11 +00001005__yy_memcpy (to, from, count)
1006 char *to;
1007 char *from;
1008 unsigned int count;
vlm80103492004-09-07 10:39:09 +00001009{
vlm6a02a8a2004-09-08 00:28:11 +00001010 register char *f = from;
1011 register char *t = to;
1012 register int i = count;
vlm80103492004-09-07 10:39:09 +00001013
vlm6a02a8a2004-09-08 00:28:11 +00001014 while (i-- > 0)
1015 *t++ = *f++;
vlm80103492004-09-07 10:39:09 +00001016}
vlm80103492004-09-07 10:39:09 +00001017
vlm6a02a8a2004-09-08 00:28:11 +00001018#else /* __cplusplus */
vlm80103492004-09-07 10:39:09 +00001019
vlm6a02a8a2004-09-08 00:28:11 +00001020/* This is the most reliable way to avoid incompatibilities
1021 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +00001022static void
vlm6a02a8a2004-09-08 00:28:11 +00001023__yy_memcpy (char *to, char *from, unsigned int count)
vlm80103492004-09-07 10:39:09 +00001024{
vlm6a02a8a2004-09-08 00:28:11 +00001025 register char *t = to;
1026 register char *f = from;
1027 register int i = count;
vlm80103492004-09-07 10:39:09 +00001028
vlm6a02a8a2004-09-08 00:28:11 +00001029 while (i-- > 0)
1030 *t++ = *f++;
vlm044f7442004-09-04 04:49:21 +00001031}
vlm044f7442004-09-04 04:49:21 +00001032
vlm6a02a8a2004-09-08 00:28:11 +00001033#endif
1034#endif
vlmfa67ddc2004-06-03 03:38:44 +00001035
vlm6a02a8a2004-09-08 00:28:11 +00001036#line 217 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00001037
1038/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1039 into yyparse. The argument should have type void *.
1040 It should actually point to an object.
1041 Grammar actions can access the variable by casting it
1042 to the proper pointer type. */
1043
1044#ifdef YYPARSE_PARAM
vlm6a02a8a2004-09-08 00:28:11 +00001045#ifdef __cplusplus
1046#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1047#define YYPARSE_PARAM_DECL
1048#else /* not __cplusplus */
1049#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1050#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1051#endif /* not __cplusplus */
1052#else /* not YYPARSE_PARAM */
1053#define YYPARSE_PARAM_ARG
1054#define YYPARSE_PARAM_DECL
1055#endif /* not YYPARSE_PARAM */
vlmfa67ddc2004-06-03 03:38:44 +00001056
1057/* Prevent warning if -Wstrict-prototypes. */
1058#ifdef __GNUC__
vlm6a02a8a2004-09-08 00:28:11 +00001059#ifdef YYPARSE_PARAM
vlmfa67ddc2004-06-03 03:38:44 +00001060int yyparse (void *);
vlm6a02a8a2004-09-08 00:28:11 +00001061#else
vlmfa67ddc2004-06-03 03:38:44 +00001062int yyparse (void);
vlm6a02a8a2004-09-08 00:28:11 +00001063#endif
vlm39e5ed72004-09-05 10:40:41 +00001064#endif
vlm80103492004-09-07 10:39:09 +00001065
vlmfa67ddc2004-06-03 03:38:44 +00001066int
vlm6a02a8a2004-09-08 00:28:11 +00001067yyparse(YYPARSE_PARAM_ARG)
vlmfa67ddc2004-06-03 03:38:44 +00001068 YYPARSE_PARAM_DECL
1069{
1070 register int yystate;
1071 register int yyn;
1072 register short *yyssp;
1073 register YYSTYPE *yyvsp;
vlm6a02a8a2004-09-08 00:28:11 +00001074 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1075 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
vlmfa67ddc2004-06-03 03:38:44 +00001076
vlm6a02a8a2004-09-08 00:28:11 +00001077 short yyssa[YYINITDEPTH]; /* the state stack */
1078 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
vlmfa67ddc2004-06-03 03:38:44 +00001079
vlm6a02a8a2004-09-08 00:28:11 +00001080 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1081 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
vlmfa67ddc2004-06-03 03:38:44 +00001082
vlm6a02a8a2004-09-08 00:28:11 +00001083#ifdef YYLSP_NEEDED
1084 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1085 YYLTYPE *yyls = yylsa;
1086 YYLTYPE *yylsp;
1087
1088#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1089#else
vlmfa67ddc2004-06-03 03:38:44 +00001090#define YYPOPSTACK (yyvsp--, yyssp--)
vlm6a02a8a2004-09-08 00:28:11 +00001091#endif
vlmfa67ddc2004-06-03 03:38:44 +00001092
vlm6a02a8a2004-09-08 00:28:11 +00001093 int yystacksize = YYINITDEPTH;
1094 int yyfree_stacks = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001095
vlm6a02a8a2004-09-08 00:28:11 +00001096#ifdef YYPURE
1097 int yychar;
1098 YYSTYPE yylval;
1099 int yynerrs;
1100#ifdef YYLSP_NEEDED
1101 YYLTYPE yylloc;
1102#endif
1103#endif
vlmfa67ddc2004-06-03 03:38:44 +00001104
vlm6a02a8a2004-09-08 00:28:11 +00001105 YYSTYPE yyval; /* the variable used to return */
1106 /* semantic values from the action */
1107 /* routines */
vlmfa67ddc2004-06-03 03:38:44 +00001108
1109 int yylen;
1110
vlm6a02a8a2004-09-08 00:28:11 +00001111#if YYDEBUG != 0
1112 if (yydebug)
1113 fprintf(stderr, "Starting parse\n");
1114#endif
vlmfa67ddc2004-06-03 03:38:44 +00001115
1116 yystate = 0;
1117 yyerrstatus = 0;
1118 yynerrs = 0;
1119 yychar = YYEMPTY; /* Cause a token to be read. */
1120
1121 /* Initialize stack pointers.
1122 Waste one element of value and location stack
1123 so that they stay on the same level as the state stack.
1124 The wasted elements are never initialized. */
1125
vlm6a02a8a2004-09-08 00:28:11 +00001126 yyssp = yyss - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001127 yyvsp = yyvs;
vlm6a02a8a2004-09-08 00:28:11 +00001128#ifdef YYLSP_NEEDED
1129 yylsp = yyls;
1130#endif
vlmfa67ddc2004-06-03 03:38:44 +00001131
vlm6a02a8a2004-09-08 00:28:11 +00001132/* Push a new state, which is found in yystate . */
1133/* In all cases, when you get here, the value and location stacks
1134 have just been pushed. so pushing a state here evens the stacks. */
1135yynewstate:
vlmfa67ddc2004-06-03 03:38:44 +00001136
vlm6a02a8a2004-09-08 00:28:11 +00001137 *++yyssp = yystate;
vlmfa67ddc2004-06-03 03:38:44 +00001138
1139 if (yyssp >= yyss + yystacksize - 1)
1140 {
vlm6a02a8a2004-09-08 00:28:11 +00001141 /* Give user a chance to reallocate the stack */
1142 /* Use copies of these so that the &'s don't force the real ones into memory. */
1143 YYSTYPE *yyvs1 = yyvs;
1144 short *yyss1 = yyss;
1145#ifdef YYLSP_NEEDED
1146 YYLTYPE *yyls1 = yyls;
1147#endif
1148
vlmfa67ddc2004-06-03 03:38:44 +00001149 /* Get the current used size of the three stacks, in elements. */
vlm6a02a8a2004-09-08 00:28:11 +00001150 int size = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001151
1152#ifdef yyoverflow
vlm6a02a8a2004-09-08 00:28:11 +00001153 /* Each stack pointer address is followed by the size of
1154 the data in use in that stack, in bytes. */
1155#ifdef YYLSP_NEEDED
1156 /* This used to be a conditional around just the two extra args,
1157 but that might be undefined if yyoverflow is a macro. */
1158 yyoverflow("parser stack overflow",
1159 &yyss1, size * sizeof (*yyssp),
1160 &yyvs1, size * sizeof (*yyvsp),
1161 &yyls1, size * sizeof (*yylsp),
1162 &yystacksize);
1163#else
1164 yyoverflow("parser stack overflow",
1165 &yyss1, size * sizeof (*yyssp),
1166 &yyvs1, size * sizeof (*yyvsp),
1167 &yystacksize);
1168#endif
vlmfa67ddc2004-06-03 03:38:44 +00001169
vlm6a02a8a2004-09-08 00:28:11 +00001170 yyss = yyss1; yyvs = yyvs1;
1171#ifdef YYLSP_NEEDED
1172 yyls = yyls1;
1173#endif
vlmfa67ddc2004-06-03 03:38:44 +00001174#else /* no yyoverflow */
1175 /* Extend the stack our own way. */
1176 if (yystacksize >= YYMAXDEPTH)
vlm6a02a8a2004-09-08 00:28:11 +00001177 {
1178 yyerror("parser stack overflow");
1179 if (yyfree_stacks)
1180 {
1181 free (yyss);
1182 free (yyvs);
1183#ifdef YYLSP_NEEDED
1184 free (yyls);
1185#endif
1186 }
1187 return 2;
1188 }
vlmfa67ddc2004-06-03 03:38:44 +00001189 yystacksize *= 2;
1190 if (yystacksize > YYMAXDEPTH)
1191 yystacksize = YYMAXDEPTH;
vlm6a02a8a2004-09-08 00:28:11 +00001192#ifndef YYSTACK_USE_ALLOCA
1193 yyfree_stacks = 1;
1194#endif
1195 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1196 __yy_memcpy ((char *)yyss, (char *)yyss1,
1197 size * (unsigned int) sizeof (*yyssp));
1198 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1199 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1200 size * (unsigned int) sizeof (*yyvsp));
1201#ifdef YYLSP_NEEDED
1202 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1203 __yy_memcpy ((char *)yyls, (char *)yyls1,
1204 size * (unsigned int) sizeof (*yylsp));
1205#endif
vlmfa67ddc2004-06-03 03:38:44 +00001206#endif /* no yyoverflow */
1207
vlm6a02a8a2004-09-08 00:28:11 +00001208 yyssp = yyss + size - 1;
1209 yyvsp = yyvs + size - 1;
1210#ifdef YYLSP_NEEDED
1211 yylsp = yyls + size - 1;
1212#endif
vlmfa67ddc2004-06-03 03:38:44 +00001213
vlm6a02a8a2004-09-08 00:28:11 +00001214#if YYDEBUG != 0
1215 if (yydebug)
1216 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1217#endif
vlmfa67ddc2004-06-03 03:38:44 +00001218
1219 if (yyssp >= yyss + yystacksize - 1)
1220 YYABORT;
1221 }
1222
vlm6a02a8a2004-09-08 00:28:11 +00001223#if YYDEBUG != 0
1224 if (yydebug)
1225 fprintf(stderr, "Entering state %d\n", yystate);
1226#endif
vlmfa67ddc2004-06-03 03:38:44 +00001227
1228 goto yybackup;
vlm6a02a8a2004-09-08 00:28:11 +00001229 yybackup:
vlmfa67ddc2004-06-03 03:38:44 +00001230
1231/* Do appropriate processing given the current state. */
1232/* Read a lookahead token if we need one and don't already have one. */
1233/* yyresume: */
1234
1235 /* First try to decide what to do without reference to lookahead token. */
1236
1237 yyn = yypact[yystate];
vlm6a02a8a2004-09-08 00:28:11 +00001238 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001239 goto yydefault;
1240
1241 /* Not known => get a lookahead token if don't already have one. */
1242
1243 /* yychar is either YYEMPTY or YYEOF
1244 or a valid token in external form. */
1245
1246 if (yychar == YYEMPTY)
1247 {
vlm6a02a8a2004-09-08 00:28:11 +00001248#if YYDEBUG != 0
1249 if (yydebug)
1250 fprintf(stderr, "Reading a token: ");
1251#endif
vlmfa67ddc2004-06-03 03:38:44 +00001252 yychar = YYLEX;
1253 }
1254
vlm6a02a8a2004-09-08 00:28:11 +00001255 /* Convert token to internal form (in yychar1) for indexing tables with */
vlmfa67ddc2004-06-03 03:38:44 +00001256
vlm6a02a8a2004-09-08 00:28:11 +00001257 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001258 {
1259 yychar1 = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001260 yychar = YYEOF; /* Don't call YYLEX any more */
vlmfa67ddc2004-06-03 03:38:44 +00001261
vlm6a02a8a2004-09-08 00:28:11 +00001262#if YYDEBUG != 0
1263 if (yydebug)
1264 fprintf(stderr, "Now at end of input.\n");
1265#endif
vlmfa67ddc2004-06-03 03:38:44 +00001266 }
1267 else
1268 {
vlm6a02a8a2004-09-08 00:28:11 +00001269 yychar1 = YYTRANSLATE(yychar);
vlmfa67ddc2004-06-03 03:38:44 +00001270
vlm6a02a8a2004-09-08 00:28:11 +00001271#if YYDEBUG != 0
1272 if (yydebug)
1273 {
1274 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1275 /* Give the individual parser a way to print the precise meaning
1276 of a token, for further debugging info. */
1277#ifdef YYPRINT
1278 YYPRINT (stderr, yychar, yylval);
1279#endif
1280 fprintf (stderr, ")\n");
1281 }
1282#endif
vlmfa67ddc2004-06-03 03:38:44 +00001283 }
1284
1285 yyn += yychar1;
vlm6a02a8a2004-09-08 00:28:11 +00001286 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001287 goto yydefault;
vlm6a02a8a2004-09-08 00:28:11 +00001288
vlmfa67ddc2004-06-03 03:38:44 +00001289 yyn = yytable[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001290
1291 /* yyn is what to do for this token type in this state.
1292 Negative => reduce, -yyn is rule number.
1293 Positive => shift, yyn is new state.
1294 New state is final state => don't bother to shift,
1295 just return success.
1296 0, or most negative number => error. */
1297
1298 if (yyn < 0)
vlmfa67ddc2004-06-03 03:38:44 +00001299 {
vlm6a02a8a2004-09-08 00:28:11 +00001300 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001301 goto yyerrlab;
1302 yyn = -yyn;
1303 goto yyreduce;
1304 }
vlm6a02a8a2004-09-08 00:28:11 +00001305 else if (yyn == 0)
1306 goto yyerrlab;
vlmfa67ddc2004-06-03 03:38:44 +00001307
1308 if (yyn == YYFINAL)
1309 YYACCEPT;
1310
1311 /* Shift the lookahead token. */
vlm6a02a8a2004-09-08 00:28:11 +00001312
1313#if YYDEBUG != 0
1314 if (yydebug)
1315 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1316#endif
vlmfa67ddc2004-06-03 03:38:44 +00001317
1318 /* Discard the token being shifted unless it is eof. */
1319 if (yychar != YYEOF)
1320 yychar = YYEMPTY;
1321
1322 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00001323#ifdef YYLSP_NEEDED
1324 *++yylsp = yylloc;
1325#endif
vlmfa67ddc2004-06-03 03:38:44 +00001326
vlm6a02a8a2004-09-08 00:28:11 +00001327 /* count tokens shifted since error; after three, turn off error status. */
1328 if (yyerrstatus) yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001329
1330 yystate = yyn;
1331 goto yynewstate;
1332
vlm6a02a8a2004-09-08 00:28:11 +00001333/* Do the default action for the current state. */
vlm80103492004-09-07 10:39:09 +00001334yydefault:
vlm6a02a8a2004-09-08 00:28:11 +00001335
vlmfa67ddc2004-06-03 03:38:44 +00001336 yyn = yydefact[yystate];
1337 if (yyn == 0)
1338 goto yyerrlab;
1339
vlm6a02a8a2004-09-08 00:28:11 +00001340/* Do a reduction. yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001341yyreduce:
1342 yylen = yyr2[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001343 if (yylen > 0)
1344 yyval = yyvsp[1-yylen]; /* implement default value of the action */
vlmfa67ddc2004-06-03 03:38:44 +00001345
vlm6a02a8a2004-09-08 00:28:11 +00001346#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00001347 if (yydebug)
1348 {
vlm6a02a8a2004-09-08 00:28:11 +00001349 int i;
vlmfa67ddc2004-06-03 03:38:44 +00001350
vlm6a02a8a2004-09-08 00:28:11 +00001351 fprintf (stderr, "Reducing via rule %d (line %d), ",
1352 yyn, yyrline[yyn]);
vlmfa67ddc2004-06-03 03:38:44 +00001353
1354 /* Print the symbols being reduced, and their result. */
vlm6a02a8a2004-09-08 00:28:11 +00001355 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1356 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1357 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
vlmfa67ddc2004-06-03 03:38:44 +00001358 }
1359#endif
vlm80103492004-09-07 10:39:09 +00001360
vlm6a02a8a2004-09-08 00:28:11 +00001361
1362 switch (yyn) {
1363
1364case 1:
vlme1e6ed82005-03-24 14:26:38 +00001365#line 304 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001366{
1367 *(void **)param = yyvsp[0].a_grammar;
1368 ;
1369 break;}
1370case 2:
vlme1e6ed82005-03-24 14:26:38 +00001371#line 310 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001372{
vlmfa67ddc2004-06-03 03:38:44 +00001373 yyval.a_grammar = asn1p_new();
1374 checkmem(yyval.a_grammar);
1375 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001376 ;
1377 break;}
1378case 3:
vlme1e6ed82005-03-24 14:26:38 +00001379#line 315 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001380{
vlmfa67ddc2004-06-03 03:38:44 +00001381 yyval.a_grammar = yyvsp[-1].a_grammar;
1382 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001383 ;
1384 break;}
1385case 4:
vlme1e6ed82005-03-24 14:26:38 +00001386#line 336 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001387{
vlmfa67ddc2004-06-03 03:38:44 +00001388
1389 if(yyvsp[-1].a_module) {
1390 yyval.a_module = yyvsp[-1].a_module;
1391 } else {
1392 /* There's a chance that a module is just plain empty */
1393 yyval.a_module = asn1p_module_new();
1394 }
1395 checkmem(yyval.a_module);
1396
1397 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1398 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1399 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001400 ;
1401 break;}
1402case 5:
vlme1e6ed82005-03-24 14:26:38 +00001403#line 357 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001404{ yyval.a_oid = 0; ;
1405 break;}
1406case 6:
vlme1e6ed82005-03-24 14:26:38 +00001407#line 358 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001408{ yyval.a_oid = yyvsp[0].a_oid; ;
1409 break;}
1410case 7:
vlme1e6ed82005-03-24 14:26:38 +00001411#line 362 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001412{
vlmfa67ddc2004-06-03 03:38:44 +00001413 yyval.a_oid = yyvsp[-1].a_oid;
vlm6a02a8a2004-09-08 00:28:11 +00001414 ;
1415 break;}
1416case 8:
vlme1e6ed82005-03-24 14:26:38 +00001417#line 365 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001418{
vlmfa67ddc2004-06-03 03:38:44 +00001419 yyval.a_oid = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001420 ;
1421 break;}
1422case 9:
vlme1e6ed82005-03-24 14:26:38 +00001423#line 371 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001424{
vlmfa67ddc2004-06-03 03:38:44 +00001425 yyval.a_oid = asn1p_oid_new();
1426 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1427 if(yyvsp[0].a_oid_arc.name)
1428 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001429 ;
1430 break;}
1431case 10:
vlme1e6ed82005-03-24 14:26:38 +00001432#line 377 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001433{
vlmfa67ddc2004-06-03 03:38:44 +00001434 yyval.a_oid = yyvsp[-1].a_oid;
1435 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1436 if(yyvsp[0].a_oid_arc.name)
1437 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001438 ;
1439 break;}
1440case 11:
vlme1e6ed82005-03-24 14:26:38 +00001441#line 386 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001442{ /* iso */
vlmfa67ddc2004-06-03 03:38:44 +00001443 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1444 yyval.a_oid_arc.number = -1;
vlm6a02a8a2004-09-08 00:28:11 +00001445 ;
1446 break;}
1447case 12:
vlme1e6ed82005-03-24 14:26:38 +00001448#line 390 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001449{ /* iso(1) */
vlmfa67ddc2004-06-03 03:38:44 +00001450 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1451 yyval.a_oid_arc.number = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001452 ;
1453 break;}
1454case 13:
vlme1e6ed82005-03-24 14:26:38 +00001455#line 394 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001456{ /* 1 */
vlmfa67ddc2004-06-03 03:38:44 +00001457 yyval.a_oid_arc.name = 0;
1458 yyval.a_oid_arc.number = yyvsp[0].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001459 ;
1460 break;}
1461case 14:
vlme1e6ed82005-03-24 14:26:38 +00001462#line 404 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001463{ yyval.a_module_flags = MSF_NOFLAGS; ;
1464 break;}
1465case 15:
vlme1e6ed82005-03-24 14:26:38 +00001466#line 405 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001467{
vlmfa67ddc2004-06-03 03:38:44 +00001468 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001469 ;
1470 break;}
1471case 16:
vlme1e6ed82005-03-24 14:26:38 +00001472#line 414 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001473{
vlmfa67ddc2004-06-03 03:38:44 +00001474 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001475 ;
1476 break;}
1477case 17:
vlme1e6ed82005-03-24 14:26:38 +00001478#line 417 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001479{
vlmfa67ddc2004-06-03 03:38:44 +00001480 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001481 ;
1482 break;}
1483case 18:
vlme1e6ed82005-03-24 14:26:38 +00001484#line 426 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001485{
vlmfa67ddc2004-06-03 03:38:44 +00001486 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001487 ;
1488 break;}
1489case 19:
vlme1e6ed82005-03-24 14:26:38 +00001490#line 429 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001491{
vlmfa67ddc2004-06-03 03:38:44 +00001492 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001493 ;
1494 break;}
1495case 20:
vlme1e6ed82005-03-24 14:26:38 +00001496#line 432 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001497{
vlmfa67ddc2004-06-03 03:38:44 +00001498 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001499 ;
1500 break;}
1501case 21:
vlme1e6ed82005-03-24 14:26:38 +00001502#line 435 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001503{
vlmfa67ddc2004-06-03 03:38:44 +00001504 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
vlm6a02a8a2004-09-08 00:28:11 +00001505 ;
1506 break;}
1507case 22:
vlme1e6ed82005-03-24 14:26:38 +00001508#line 439 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001509{
vlm9283dbe2004-08-18 04:59:12 +00001510 /* X.680Amd1 specifies TAG and XER */
1511 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1512 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1513 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1514 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1515 } else {
1516 fprintf(stderr,
1517 "WARNING: %s INSTRUCTIONS at line %d: "
1518 "Unrecognized encoding reference\n",
1519 yyvsp[-1].tv_str, yylineno);
1520 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1521 }
1522 free(yyvsp[-1].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00001523 ;
1524 break;}
1525case 23:
vlme1e6ed82005-03-24 14:26:38 +00001526#line 460 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001527{ yyval.a_module = 0; ;
1528 break;}
1529case 24:
vlme1e6ed82005-03-24 14:26:38 +00001530#line 461 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001531{
vlmfa67ddc2004-06-03 03:38:44 +00001532 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001533 ;
1534 break;}
1535case 25:
vlme1e6ed82005-03-24 14:26:38 +00001536#line 470 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001537{
vlm9283dbe2004-08-18 04:59:12 +00001538 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001539 ;
1540 break;}
1541case 26:
vlme1e6ed82005-03-24 14:26:38 +00001542#line 473 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001543{
vlmfa67ddc2004-06-03 03:38:44 +00001544 yyval.a_module = yyvsp[-1].a_module;
1545
vlm9283dbe2004-08-18 04:59:12 +00001546 /* Behave well when one of them is skipped. */
1547 if(!(yyvsp[-1].a_module)) {
1548 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1549 break;
1550 }
1551
vlmfa67ddc2004-06-03 03:38:44 +00001552#ifdef MY_IMPORT
1553#error MY_IMPORT DEFINED ELSEWHERE!
1554#endif
1555#define MY_IMPORT(foo,field) do { \
vlm97ed7152004-08-13 12:31:09 +00001556 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
vlmfa67ddc2004-06-03 03:38:44 +00001557 TQ_ADD(&(yyval.a_module->foo), \
1558 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1559 field); \
vlm97ed7152004-08-13 12:31:09 +00001560 } \
1561 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1562 } while(0)
vlmfa67ddc2004-06-03 03:38:44 +00001563
1564 MY_IMPORT(imports, xp_next);
1565 MY_IMPORT(exports, xp_next);
1566 MY_IMPORT(members, next);
1567#undef MY_IMPORT
1568
vlm6a02a8a2004-09-08 00:28:11 +00001569 ;
1570 break;}
1571case 27:
vlme1e6ed82005-03-24 14:26:38 +00001572#line 506 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001573{
vlmfa67ddc2004-06-03 03:38:44 +00001574 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001575 ;
1576 break;}
1577case 28:
vlme1e6ed82005-03-24 14:26:38 +00001578#line 509 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001579{
vlmfa67ddc2004-06-03 03:38:44 +00001580 yyval.a_module = asn1p_module_new();
1581 checkmem(yyval.a_module);
1582 if(yyvsp[0].a_xports) {
1583 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1584 } else {
1585 /* "EXPORTS ALL;" ? */
1586 }
vlm6a02a8a2004-09-08 00:28:11 +00001587 ;
1588 break;}
1589case 29:
vlme1e6ed82005-03-24 14:26:38 +00001590#line 518 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001591{
vlmfa67ddc2004-06-03 03:38:44 +00001592 yyval.a_module = asn1p_module_new();
1593 checkmem(yyval.a_module);
1594 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1595 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1596 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001597 ;
1598 break;}
1599case 30:
vlme1e6ed82005-03-24 14:26:38 +00001600#line 525 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001601{
vlm9283dbe2004-08-18 04:59:12 +00001602 yyval.a_module = asn1p_module_new();
1603 checkmem(yyval.a_module);
1604 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1605 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1606 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001607 ;
1608 break;}
1609case 31:
vlme1e6ed82005-03-24 14:26:38 +00001610#line 538 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001611{
vlm9283dbe2004-08-18 04:59:12 +00001612 yyval.a_module = asn1p_module_new();
1613 checkmem(yyval.a_module);
1614 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1615 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1616 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001617 ;
1618 break;}
1619case 32:
vlme1e6ed82005-03-24 14:26:38 +00001620#line 546 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001621{ asn1p_lexer_hack_push_encoding_control(); ;
1622 break;}
1623case 33:
vlme1e6ed82005-03-24 14:26:38 +00001624#line 547 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001625{
vlm9283dbe2004-08-18 04:59:12 +00001626 fprintf(stderr,
1627 "WARNING: ENCODING-CONTROL %s "
1628 "specification at line %d ignored\n",
1629 yyvsp[-1].tv_str, yylineno);
1630 free(yyvsp[-1].tv_str);
1631 yyval.a_module = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001632 ;
1633 break;}
1634case 34:
vlme1e6ed82005-03-24 14:26:38 +00001635#line 559 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001636{
vlmfa67ddc2004-06-03 03:38:44 +00001637 return yyerror(
1638 "Attempt to redefine a standard basic type, "
1639 "use -ftypesXY to switch back "
1640 "to older version of ASN.1 standard");
vlm6a02a8a2004-09-08 00:28:11 +00001641 ;
1642 break;}
1643case 35:
vlme1e6ed82005-03-24 14:26:38 +00001644#line 573 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001645{
vlmfa67ddc2004-06-03 03:38:44 +00001646 yyval.a_module = yyvsp[-1].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001647 ;
1648 break;}
1649case 36:
vlme1e6ed82005-03-24 14:26:38 +00001650#line 579 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001651{
vlmfa67ddc2004-06-03 03:38:44 +00001652 return yyerror("Empty IMPORTS list");
vlm6a02a8a2004-09-08 00:28:11 +00001653 ;
1654 break;}
1655case 37:
vlme1e6ed82005-03-24 14:26:38 +00001656#line 585 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001657{
vlmfa67ddc2004-06-03 03:38:44 +00001658 yyval.a_module = asn1p_module_new();
1659 checkmem(yyval.a_module);
1660 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001661 ;
1662 break;}
1663case 38:
vlme1e6ed82005-03-24 14:26:38 +00001664#line 590 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001665{
vlmfa67ddc2004-06-03 03:38:44 +00001666 yyval.a_module = yyvsp[-1].a_module;
1667 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001668 ;
1669 break;}
1670case 39:
vlme1e6ed82005-03-24 14:26:38 +00001671#line 597 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001672{
vlmfa67ddc2004-06-03 03:38:44 +00001673 yyval.a_xports = yyvsp[-3].a_xports;
1674 yyval.a_xports->from = yyvsp[-1].tv_str;
1675 yyval.a_xports->from_oid = yyvsp[0].a_oid;
1676 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001677 ;
1678 break;}
1679case 40:
vlme1e6ed82005-03-24 14:26:38 +00001680#line 606 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001681{
vlmfa67ddc2004-06-03 03:38:44 +00001682 yyval.a_xports = asn1p_xports_new();
1683 checkmem(yyval.a_xports);
1684 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001685 ;
1686 break;}
1687case 41:
vlme1e6ed82005-03-24 14:26:38 +00001688#line 611 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001689{
vlmfa67ddc2004-06-03 03:38:44 +00001690 yyval.a_xports = yyvsp[-2].a_xports;
1691 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001692 ;
1693 break;}
1694case 42:
vlme1e6ed82005-03-24 14:26:38 +00001695#line 618 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001696{
vlmfa67ddc2004-06-03 03:38:44 +00001697 yyval.a_expr = asn1p_expr_new(yylineno);
1698 checkmem(yyval.a_expr);
1699 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1700 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm6a02a8a2004-09-08 00:28:11 +00001701 ;
1702 break;}
1703case 43:
vlme1e6ed82005-03-24 14:26:38 +00001704#line 624 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001705{ /* Completely equivalent to above */
1706 yyval.a_expr = asn1p_expr_new(yylineno);
1707 checkmem(yyval.a_expr);
1708 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1709 yyval.a_expr->expr_type = A1TC_REFERENCE;
1710 ;
1711 break;}
1712case 44:
vlme1e6ed82005-03-24 14:26:38 +00001713#line 630 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001714{
vlmfa67ddc2004-06-03 03:38:44 +00001715 yyval.a_expr = asn1p_expr_new(yylineno);
1716 checkmem(yyval.a_expr);
1717 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1718 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm6a02a8a2004-09-08 00:28:11 +00001719 ;
1720 break;}
vlm0aa86902004-10-12 23:26:53 +00001721case 45:
vlme1e6ed82005-03-24 14:26:38 +00001722#line 639 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001723{
vlmfa67ddc2004-06-03 03:38:44 +00001724 yyval.a_xports = yyvsp[-1].a_xports;
vlm6a02a8a2004-09-08 00:28:11 +00001725 ;
1726 break;}
vlm0aa86902004-10-12 23:26:53 +00001727case 46:
vlme1e6ed82005-03-24 14:26:38 +00001728#line 642 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001729{
vlmfa67ddc2004-06-03 03:38:44 +00001730 yyval.a_xports = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001731 ;
1732 break;}
vlm0aa86902004-10-12 23:26:53 +00001733case 47:
vlme1e6ed82005-03-24 14:26:38 +00001734#line 645 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001735{
vlmfa67ddc2004-06-03 03:38:44 +00001736 /* Empty EXPORTS clause effectively prohibits export. */
1737 yyval.a_xports = asn1p_xports_new();
1738 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001739 ;
1740 break;}
vlm0aa86902004-10-12 23:26:53 +00001741case 48:
vlme1e6ed82005-03-24 14:26:38 +00001742#line 653 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001743{
vlmfa67ddc2004-06-03 03:38:44 +00001744 yyval.a_xports = asn1p_xports_new();
1745 assert(yyval.a_xports);
1746 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001747 ;
1748 break;}
vlm0aa86902004-10-12 23:26:53 +00001749case 49:
vlme1e6ed82005-03-24 14:26:38 +00001750#line 658 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001751{
vlmfa67ddc2004-06-03 03:38:44 +00001752 yyval.a_xports = yyvsp[-2].a_xports;
1753 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001754 ;
1755 break;}
vlm6a02a8a2004-09-08 00:28:11 +00001756case 50:
vlme1e6ed82005-03-24 14:26:38 +00001757#line 665 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001758{
vlmfa67ddc2004-06-03 03:38:44 +00001759 yyval.a_expr = asn1p_expr_new(yylineno);
1760 checkmem(yyval.a_expr);
1761 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1762 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
vlm6a02a8a2004-09-08 00:28:11 +00001763 ;
1764 break;}
1765case 51:
vlme1e6ed82005-03-24 14:26:38 +00001766#line 671 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001767{
1768 yyval.a_expr = asn1p_expr_new(yylineno);
1769 checkmem(yyval.a_expr);
1770 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1771 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1772 ;
1773 break;}
1774case 52:
vlme1e6ed82005-03-24 14:26:38 +00001775#line 677 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001776{
1777 yyval.a_expr = asn1p_expr_new(yylineno);
1778 checkmem(yyval.a_expr);
1779 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1780 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1781 ;
1782 break;}
1783case 53:
vlme1e6ed82005-03-24 14:26:38 +00001784#line 687 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001785{
vlmfa67ddc2004-06-03 03:38:44 +00001786 yyval.a_expr = yyvsp[-4].a_expr;
1787 assert(yyval.a_expr->Identifier == 0);
1788 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1789 yyval.a_expr->meta_type = AMT_VALUESET;
1790 // take care of optValueSetBody
vlm6a02a8a2004-09-08 00:28:11 +00001791 ;
1792 break;}
vlm0aa86902004-10-12 23:26:53 +00001793case 54:
vlme1e6ed82005-03-24 14:26:38 +00001794#line 697 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001795{
vlmfa67ddc2004-06-03 03:38:44 +00001796 yyval.a_expr = asn1p_expr_new(yylineno);
1797 checkmem(yyval.a_expr);
1798 yyval.a_expr->reference = yyvsp[0].a_ref;
1799 yyval.a_expr->expr_type = A1TC_REFERENCE;
1800 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00001801 ;
1802 break;}
vlm0aa86902004-10-12 23:26:53 +00001803case 55:
vlme1e6ed82005-03-24 14:26:38 +00001804#line 704 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001805{
vlmfa67ddc2004-06-03 03:38:44 +00001806 yyval.a_expr = asn1p_expr_new(yylineno);
1807 checkmem(yyval.a_expr);
1808 yyval.a_expr->expr_type = yyvsp[0].a_type;
1809 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001810 ;
1811 break;}
vlm6a02a8a2004-09-08 00:28:11 +00001812case 56:
vlme1e6ed82005-03-24 14:26:38 +00001813#line 713 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001814{ ;
vlm6a02a8a2004-09-08 00:28:11 +00001815 break;}
1816case 57:
vlme1e6ed82005-03-24 14:26:38 +00001817#line 714 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001818{
1819 ;
1820 break;}
1821case 58:
vlme1e6ed82005-03-24 14:26:38 +00001822#line 725 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001823{
1824 ;
1825 break;}
1826case 59:
vlme1e6ed82005-03-24 14:26:38 +00001827#line 727 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001828{
1829 ;
1830 break;}
1831case 60:
vlme1e6ed82005-03-24 14:26:38 +00001832#line 732 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001833{
1834 ;
1835 break;}
1836case 61:
vlme1e6ed82005-03-24 14:26:38 +00001837#line 734 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001838{
1839 ;
1840 break;}
1841case 62:
vlme1e6ed82005-03-24 14:26:38 +00001842#line 750 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001843{
vlmfa67ddc2004-06-03 03:38:44 +00001844 yyval.a_expr = asn1p_expr_new(yylineno);
1845 checkmem(yyval.a_expr);
1846 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1847 yyval.a_expr->tag = yyvsp[-1].a_tag;
1848 yyval.a_expr->expr_type = A1TC_TYPEID;
1849 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001850 ;
1851 break;}
vlm0aa86902004-10-12 23:26:53 +00001852case 63:
vlme1e6ed82005-03-24 14:26:38 +00001853#line 758 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001854{
vlmfa67ddc2004-06-03 03:38:44 +00001855 yyval.a_expr = yyvsp[0].a_expr;
vlmfce48a42004-09-14 02:36:39 +00001856 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00001857 assert(yyval.a_expr->expr_type);
1858 assert(yyval.a_expr->meta_type);
vlm6a02a8a2004-09-08 00:28:11 +00001859 ;
1860 break;}
vlm0aa86902004-10-12 23:26:53 +00001861case 64:
vlme1e6ed82005-03-24 14:26:38 +00001862#line 764 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001863{
vlmfa67ddc2004-06-03 03:38:44 +00001864 yyval.a_expr = yyvsp[0].a_expr;
1865 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1866 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1867 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm6a02a8a2004-09-08 00:28:11 +00001868 ;
1869 break;}
vlm0aa86902004-10-12 23:26:53 +00001870case 65:
vlme1e6ed82005-03-24 14:26:38 +00001871#line 780 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001872{
vlmfa67ddc2004-06-03 03:38:44 +00001873 yyval.a_expr = yyvsp[0].a_expr;
1874 assert(yyval.a_expr->Identifier == 0);
1875 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1876 yyval.a_expr->params = yyvsp[-3].a_plist;
1877 yyval.a_expr->meta_type = AMT_PARAMTYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001878 ;
1879 break;}
vlm0aa86902004-10-12 23:26:53 +00001880case 66:
vlme1e6ed82005-03-24 14:26:38 +00001881#line 790 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001882{
vlmfa67ddc2004-06-03 03:38:44 +00001883 int ret;
1884 yyval.a_plist = asn1p_paramlist_new(yylineno);
1885 checkmem(yyval.a_plist);
1886 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1887 checkmem(ret == 0);
1888 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1889 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001890 ;
1891 break;}
vlm0aa86902004-10-12 23:26:53 +00001892case 67:
vlme1e6ed82005-03-24 14:26:38 +00001893#line 799 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001894{
vlmfa67ddc2004-06-03 03:38:44 +00001895 int ret;
1896 yyval.a_plist = yyvsp[-2].a_plist;
1897 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1898 checkmem(ret == 0);
1899 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1900 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001901 ;
1902 break;}
vlm0aa86902004-10-12 23:26:53 +00001903case 68:
vlme1e6ed82005-03-24 14:26:38 +00001904#line 810 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001905{
vlmfa67ddc2004-06-03 03:38:44 +00001906 yyval.a_parg.governor = NULL;
1907 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001908 ;
1909 break;}
vlm0aa86902004-10-12 23:26:53 +00001910case 69:
vlme1e6ed82005-03-24 14:26:38 +00001911#line 814 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001912{
vlmfa67ddc2004-06-03 03:38:44 +00001913 int ret;
1914 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1915 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1916 checkmem(ret == 0);
1917 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001918 ;
1919 break;}
vlm0aa86902004-10-12 23:26:53 +00001920case 70:
vlme1e6ed82005-03-24 14:26:38 +00001921#line 821 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001922{
vlmfa67ddc2004-06-03 03:38:44 +00001923 int ret;
1924 yyval.a_parg.governor = asn1p_ref_new(yylineno);
vlm4053ca52005-02-18 16:34:21 +00001925 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1926 checkmem(ret == 0);
1927 yyval.a_parg.argument = yyvsp[0].tv_str;
1928 ;
1929 break;}
1930case 71:
vlme1e6ed82005-03-24 14:26:38 +00001931#line 828 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00001932{
1933 int ret;
1934 yyval.a_parg.governor = asn1p_ref_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00001935 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1936 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1937 checkmem(ret == 0);
1938 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001939 ;
1940 break;}
vlm4053ca52005-02-18 16:34:21 +00001941case 72:
vlme1e6ed82005-03-24 14:26:38 +00001942#line 839 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001943{
vlmfa67ddc2004-06-03 03:38:44 +00001944 yyval.a_expr = asn1p_expr_new(yylineno);
1945 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001946 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1947 ;
1948 break;}
vlm4053ca52005-02-18 16:34:21 +00001949case 73:
vlme1e6ed82005-03-24 14:26:38 +00001950#line 844 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001951{
vlmfa67ddc2004-06-03 03:38:44 +00001952 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001953 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1954 ;
1955 break;}
vlm4053ca52005-02-18 16:34:21 +00001956case 74:
vlme1e6ed82005-03-24 14:26:38 +00001957#line 851 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001958{
vlmfa67ddc2004-06-03 03:38:44 +00001959 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001960 ;
1961 break;}
vlm4053ca52005-02-18 16:34:21 +00001962case 75:
vlme1e6ed82005-03-24 14:26:38 +00001963#line 854 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001964{
vlmfa67ddc2004-06-03 03:38:44 +00001965 yyval.a_expr = asn1p_expr_new(yylineno);
1966 checkmem(yyval.a_expr);
1967 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1968 yyval.a_expr->expr_type = A1TC_REFERENCE;
1969 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00001970 ;
1971 break;}
vlm4053ca52005-02-18 16:34:21 +00001972case 76:
vlme1e6ed82005-03-24 14:26:38 +00001973#line 878 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001974{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1975 break;}
vlm4053ca52005-02-18 16:34:21 +00001976case 77:
vlme1e6ed82005-03-24 14:26:38 +00001977#line 879 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001978{ yyval.a_expr = yyvsp[0].a_expr; ;
1979 break;}
vlm4053ca52005-02-18 16:34:21 +00001980case 78:
vlme1e6ed82005-03-24 14:26:38 +00001981#line 882 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001982{
vlmfa67ddc2004-06-03 03:38:44 +00001983 yyval.a_expr = asn1p_expr_new(yylineno);
1984 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001985 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1986 ;
1987 break;}
vlm4053ca52005-02-18 16:34:21 +00001988case 79:
vlme1e6ed82005-03-24 14:26:38 +00001989#line 887 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001990{
vlmfa67ddc2004-06-03 03:38:44 +00001991 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001992 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1993 ;
1994 break;}
vlm4053ca52005-02-18 16:34:21 +00001995case 80:
vlme1e6ed82005-03-24 14:26:38 +00001996#line 894 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001997{
vlmec8f6812004-08-22 03:19:54 +00001998 yyval.a_expr = yyvsp[-1].a_expr;
1999 assert(yyval.a_expr->Identifier == 0);
vlmfce48a42004-09-14 02:36:39 +00002000 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmec8f6812004-08-22 03:19:54 +00002001 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00002002 ;
2003 break;}
vlm4053ca52005-02-18 16:34:21 +00002004case 81:
vlme1e6ed82005-03-24 14:26:38 +00002005#line 900 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002006{
vlmec8f6812004-08-22 03:19:54 +00002007 yyval.a_expr = asn1p_expr_new(yylineno);
2008 checkmem(yyval.a_expr);
2009 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2010 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
vlm6a02a8a2004-09-08 00:28:11 +00002011 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2012 ;
2013 break;}
vlm4053ca52005-02-18 16:34:21 +00002014case 82:
vlme1e6ed82005-03-24 14:26:38 +00002015#line 907 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002016{
vlmec8f6812004-08-22 03:19:54 +00002017 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002018 ;
2019 break;}
vlm4053ca52005-02-18 16:34:21 +00002020case 83:
vlme1e6ed82005-03-24 14:26:38 +00002021#line 913 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002022{
vlmec8f6812004-08-22 03:19:54 +00002023 yyval.a_expr = asn1p_expr_new(yylineno);
2024 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00002025 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2026 ;
2027 break;}
vlm4053ca52005-02-18 16:34:21 +00002028case 84:
vlme1e6ed82005-03-24 14:26:38 +00002029#line 918 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002030{
vlmec8f6812004-08-22 03:19:54 +00002031 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002032 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2033 ;
2034 break;}
vlm4053ca52005-02-18 16:34:21 +00002035case 85:
vlme1e6ed82005-03-24 14:26:38 +00002036#line 925 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002037{
vlmec8f6812004-08-22 03:19:54 +00002038 yyval.a_expr = yyvsp[0].a_expr;
2039 assert(yyval.a_expr->Identifier == 0);
vlmfce48a42004-09-14 02:36:39 +00002040 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002041 ;
2042 break;}
vlm4053ca52005-02-18 16:34:21 +00002043case 86:
vlme1e6ed82005-03-24 14:26:38 +00002044#line 930 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002045{
vlmec8f6812004-08-22 03:19:54 +00002046 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002047 ;
2048 break;}
vlm4053ca52005-02-18 16:34:21 +00002049case 87:
vlme1e6ed82005-03-24 14:26:38 +00002050#line 936 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002051{
vlmfa67ddc2004-06-03 03:38:44 +00002052 yyval.a_expr = yyvsp[-2].a_expr;
2053 checkmem(yyval.a_expr);
2054 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2055 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2056 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm6a02a8a2004-09-08 00:28:11 +00002057 ;
2058 break;}
vlm4053ca52005-02-18 16:34:21 +00002059case 88:
vlme1e6ed82005-03-24 14:26:38 +00002060#line 946 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002061{ yyval.a_int = 0; ;
2062 break;}
vlm4053ca52005-02-18 16:34:21 +00002063case 89:
vlme1e6ed82005-03-24 14:26:38 +00002064#line 947 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002065{ yyval.a_int = 1; ;
2066 break;}
vlm4053ca52005-02-18 16:34:21 +00002067case 90:
vlme1e6ed82005-03-24 14:26:38 +00002068#line 951 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002069{
vlmfa67ddc2004-06-03 03:38:44 +00002070 yyval.a_expr = asn1p_expr_new(yylineno);
2071 checkmem(yyval.a_expr);
2072 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2073 yyval.a_expr->meta_type = AMT_OBJECT;
vlm6a02a8a2004-09-08 00:28:11 +00002074 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2075 ;
2076 break;}
vlm4053ca52005-02-18 16:34:21 +00002077case 91:
vlme1e6ed82005-03-24 14:26:38 +00002078#line 958 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002079{
vlmfa67ddc2004-06-03 03:38:44 +00002080 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002081 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2082 ;
2083 break;}
vlm4053ca52005-02-18 16:34:21 +00002084case 92:
vlme1e6ed82005-03-24 14:26:38 +00002085#line 965 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002086{
vlmfa67ddc2004-06-03 03:38:44 +00002087 yyval.a_expr = asn1p_expr_new(yylineno);
2088 checkmem(yyval.a_expr);
2089 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2090 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2091 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2092 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00002093 ;
2094 break;}
vlm4053ca52005-02-18 16:34:21 +00002095case 93:
vlme1e6ed82005-03-24 14:26:38 +00002096#line 973 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002097{
vlmec8f6812004-08-22 03:19:54 +00002098 yyval.a_expr = yyvsp[-2].a_expr;
2099 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
vlmbde35d42004-11-24 17:43:29 +00002100 yyval.a_expr->marker = yyvsp[0].a_marker;
2101 yyval.a_expr->unique = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00002102 ;
2103 break;}
vlm4053ca52005-02-18 16:34:21 +00002104case 94:
vlme1e6ed82005-03-24 14:26:38 +00002105#line 979 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002106{
vlmfa67ddc2004-06-03 03:38:44 +00002107 int ret;
2108 yyval.a_expr = asn1p_expr_new(yylineno);
2109 checkmem(yyval.a_expr);
2110 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2111 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2112 checkmem(yyval.a_expr->reference);
2113 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2114 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2115 checkmem(ret == 0);
2116 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2117 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
vlmbde35d42004-11-24 17:43:29 +00002118 yyval.a_expr->marker = yyvsp[0].a_marker;
2119 yyval.a_expr->unique = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00002120 ;
2121 break;}
vlm4053ca52005-02-18 16:34:21 +00002122case 95:
vlme1e6ed82005-03-24 14:26:38 +00002123#line 997 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002124{ yyval.a_wsynt = 0; ;
2125 break;}
vlm4053ca52005-02-18 16:34:21 +00002126case 96:
vlme1e6ed82005-03-24 14:26:38 +00002127#line 998 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002128{
vlmfa67ddc2004-06-03 03:38:44 +00002129 yyval.a_wsynt = yyvsp[0].a_wsynt;
vlm6a02a8a2004-09-08 00:28:11 +00002130 ;
2131 break;}
vlm4053ca52005-02-18 16:34:21 +00002132case 97:
vlme1e6ed82005-03-24 14:26:38 +00002133#line 1005 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002134{ asn1p_lexer_hack_enable_with_syntax(); ;
2135 break;}
vlm4053ca52005-02-18 16:34:21 +00002136case 98:
vlme1e6ed82005-03-24 14:26:38 +00002137#line 1007 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002138{
vlmfa67ddc2004-06-03 03:38:44 +00002139 yyval.a_wsynt = yyvsp[-1].a_wsynt;
vlm6a02a8a2004-09-08 00:28:11 +00002140 ;
2141 break;}
vlm4053ca52005-02-18 16:34:21 +00002142case 99:
vlme1e6ed82005-03-24 14:26:38 +00002143#line 1013 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002144{
vlmfa67ddc2004-06-03 03:38:44 +00002145 yyval.a_wsynt = asn1p_wsyntx_new();
2146 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002147 ;
2148 break;}
vlm4053ca52005-02-18 16:34:21 +00002149case 100:
vlme1e6ed82005-03-24 14:26:38 +00002150#line 1017 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002151{
vlmfa67ddc2004-06-03 03:38:44 +00002152 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2153 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002154 ;
2155 break;}
vlm4053ca52005-02-18 16:34:21 +00002156case 101:
vlme1e6ed82005-03-24 14:26:38 +00002157#line 1024 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002158{
vlmfa67ddc2004-06-03 03:38:44 +00002159 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002160 ;
2161 break;}
vlm4053ca52005-02-18 16:34:21 +00002162case 102:
vlme1e6ed82005-03-24 14:26:38 +00002163#line 1027 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002164{
vlmfa67ddc2004-06-03 03:38:44 +00002165 asn1p_ref_t *ref;
2166 int ret;
2167 ref = asn1p_ref_new(yylineno);
2168 checkmem(ref);
2169 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2170 checkmem(ret == 0);
2171 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002172 ;
2173 break;}
vlm0aa86902004-10-12 23:26:53 +00002174case 103:
vlme1e6ed82005-03-24 14:26:38 +00002175#line 1039 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00002176{
2177 yyval.a_expr = asn1p_expr_new(yylineno);
2178 checkmem(yyval.a_expr);
2179 yyval.a_expr->Identifier = strdup("...");
2180 checkmem(yyval.a_expr->Identifier);
vlm0aa86902004-10-12 23:26:53 +00002181 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2182 yyval.a_expr->meta_type = AMT_TYPE;
2183 ;
2184 break;}
2185case 104:
vlme1e6ed82005-03-24 14:26:38 +00002186#line 1047 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00002187{
2188 yyval.a_expr = asn1p_expr_new(yylineno);
2189 checkmem(yyval.a_expr);
2190 yyval.a_expr->Identifier = strdup("...");
2191 checkmem(yyval.a_expr->Identifier);
2192 yyval.a_expr->value = yyvsp[0].a_value;
2193 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2194 yyval.a_expr->meta_type = AMT_TYPE;
2195 ;
2196 break;}
2197case 105:
vlme1e6ed82005-03-24 14:26:38 +00002198#line 1056 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00002199{
2200 yyval.a_expr = asn1p_expr_new(yylineno);
2201 checkmem(yyval.a_expr);
2202 yyval.a_expr->Identifier = strdup("...");
vlm5f0128b2004-08-20 13:25:29 +00002203 yyval.a_expr->value = yyvsp[0].a_value;
2204 checkmem(yyval.a_expr->Identifier);
2205 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2206 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002207 ;
2208 break;}
vlm4053ca52005-02-18 16:34:21 +00002209case 106:
vlme1e6ed82005-03-24 14:26:38 +00002210#line 1068 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002211{
vlmec8f6812004-08-22 03:19:54 +00002212 yyval.a_expr = yyvsp[-1].a_expr;
vlmfce48a42004-09-14 02:36:39 +00002213 yyval.a_expr->tag = yyvsp[-2].a_tag;
vlmec8f6812004-08-22 03:19:54 +00002214 /*
2215 * Outer constraint for SEQUENCE OF and SET OF applies
2216 * to the inner type.
2217 */
2218 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2219 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2220 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2221 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2222 } else {
2223 if(yyval.a_expr->constraints) {
vlmfce48a42004-09-14 02:36:39 +00002224 assert(!yyvsp[-1].a_expr);
vlmec8f6812004-08-22 03:19:54 +00002225 } else {
2226 yyval.a_expr->constraints = yyvsp[0].a_constr;
2227 }
2228 }
vlm6a02a8a2004-09-08 00:28:11 +00002229 ;
2230 break;}
vlm4053ca52005-02-18 16:34:21 +00002231case 107:
vlme1e6ed82005-03-24 14:26:38 +00002232#line 1090 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002233{
vlm5f0128b2004-08-20 13:25:29 +00002234 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002235 ;
2236 break;}
vlm4053ca52005-02-18 16:34:21 +00002237case 108:
vlme1e6ed82005-03-24 14:26:38 +00002238#line 1093 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002239{
vlm5e2c4b92005-03-20 11:12:40 +00002240 yyval.a_expr = yyvsp[-1].a_expr;
2241 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2242 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
vlmfa67ddc2004-06-03 03:38:44 +00002243 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002244 ;
2245 break;}
vlm4053ca52005-02-18 16:34:21 +00002246case 109:
vlme1e6ed82005-03-24 14:26:38 +00002247#line 1099 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002248{
vlmec8f6812004-08-22 03:19:54 +00002249 yyval.a_expr = yyvsp[-1].a_expr;
2250 assert(yyval.a_expr->expr_type == A1TC_INVALID);
vlm5e2c4b92005-03-20 11:12:40 +00002251 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
vlmec8f6812004-08-22 03:19:54 +00002252 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002253 ;
2254 break;}
vlm4053ca52005-02-18 16:34:21 +00002255case 110:
vlme1e6ed82005-03-24 14:26:38 +00002256#line 1105 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002257{
vlmec8f6812004-08-22 03:19:54 +00002258 yyval.a_expr = yyvsp[-1].a_expr;
2259 assert(yyval.a_expr->expr_type == A1TC_INVALID);
vlm5e2c4b92005-03-20 11:12:40 +00002260 yyval.a_expr->expr_type = ASN_CONSTR_SET;
vlmec8f6812004-08-22 03:19:54 +00002261 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002262 ;
2263 break;}
vlm4053ca52005-02-18 16:34:21 +00002264case 111:
vlme1e6ed82005-03-24 14:26:38 +00002265#line 1111 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002266{
vlm39e5ed72004-09-05 10:40:41 +00002267 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002268 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002269 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002270 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2271 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002272 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002273 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002274 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2275 ;
2276 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002277case 112:
vlme1e6ed82005-03-24 14:26:38 +00002278#line 1121 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002279{
vlm39e5ed72004-09-05 10:40:41 +00002280 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002281 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002282 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002283 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2284 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002285 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002286 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002287 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2288 ;
2289 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002290case 113:
vlme1e6ed82005-03-24 14:26:38 +00002291#line 1131 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002292{
vlm39e5ed72004-09-05 10:40:41 +00002293 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002294 checkmem(yyval.a_expr);
vlm044f7442004-09-04 04:49:21 +00002295 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002296 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002297 ;
2298 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002299case 114:
vlme1e6ed82005-03-24 14:26:38 +00002300#line 1137 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002301{
vlmec8f6812004-08-22 03:19:54 +00002302 int ret;
vlm39e5ed72004-09-05 10:40:41 +00002303 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002304 checkmem(yyval.a_expr);
2305 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2306 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2307 yyvsp[0].tv_str, RLT_lowercase);
2308 checkmem(ret == 0);
vlm044f7442004-09-04 04:49:21 +00002309 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002310 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002311 ;
2312 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002313case 115:
vlme1e6ed82005-03-24 14:26:38 +00002314#line 1151 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002315{
vlmfa67ddc2004-06-03 03:38:44 +00002316 int ret;
2317 yyval.a_expr = yyvsp[-1].a_expr;
2318 assert(yyval.a_expr->expr_type == 0);
2319 assert(yyval.a_expr->meta_type == 0);
2320 assert(yyval.a_expr->reference == 0);
2321 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2322 checkmem(yyval.a_expr->reference);
2323 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2324 checkmem(ret == 0);
2325 free(yyvsp[-3].tv_str);
2326 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2327 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002328 ;
2329 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002330case 116:
vlme1e6ed82005-03-24 14:26:38 +00002331#line 1175 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002332{
vlmfa67ddc2004-06-03 03:38:44 +00002333 yyval.a_expr = asn1p_expr_new(yylineno);
2334 checkmem(yyval.a_expr);
2335 yyval.a_expr->reference = yyvsp[0].a_ref;
2336 yyval.a_expr->expr_type = A1TC_REFERENCE;
2337 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00002338 ;
2339 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002340case 117:
vlme1e6ed82005-03-24 14:26:38 +00002341#line 1182 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002342{
vlmfa67ddc2004-06-03 03:38:44 +00002343 yyval.a_expr = asn1p_expr_new(yylineno);
2344 checkmem(yyval.a_expr);
2345 yyval.a_expr->reference = yyvsp[0].a_ref;
2346 yyval.a_expr->expr_type = A1TC_INSTANCE;
2347 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002348 ;
2349 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002350case 118:
vlme1e6ed82005-03-24 14:26:38 +00002351#line 1197 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002352{
vlmfa67ddc2004-06-03 03:38:44 +00002353 int ret;
2354 yyval.a_ref = asn1p_ref_new(yylineno);
2355 checkmem(yyval.a_ref);
2356 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2357 checkmem(ret == 0);
2358 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002359 ;
2360 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002361case 119:
vlme1e6ed82005-03-24 14:26:38 +00002362#line 1205 "asn1p_y.y"
vlm5e2c4b92005-03-20 11:12:40 +00002363{
2364 int ret;
2365 yyval.a_ref = asn1p_ref_new(yylineno);
2366 checkmem(yyval.a_ref);
2367 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2368 checkmem(ret == 0);
2369 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2370 checkmem(ret == 0);
2371 free(yyvsp[-2].tv_str);
2372 ;
2373 break;}
vlm0aa86902004-10-12 23:26:53 +00002374case 120:
vlme1e6ed82005-03-24 14:26:38 +00002375#line 1215 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002376{
vlmfa67ddc2004-06-03 03:38:44 +00002377 int ret;
2378 yyval.a_ref = asn1p_ref_new(yylineno);
2379 checkmem(yyval.a_ref);
2380 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2381 checkmem(ret == 0);
vlmc94e28f2004-09-15 11:59:51 +00002382 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
vlmfa67ddc2004-06-03 03:38:44 +00002383 checkmem(ret == 0);
2384 free(yyvsp[-2].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002385 ;
2386 break;}
vlm0aa86902004-10-12 23:26:53 +00002387case 121:
vlme1e6ed82005-03-24 14:26:38 +00002388#line 1225 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002389{
vlmfa67ddc2004-06-03 03:38:44 +00002390 int ret;
2391 yyval.a_ref = asn1p_ref_new(yylineno);
2392 checkmem(yyval.a_ref);
vlmc94e28f2004-09-15 11:59:51 +00002393 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2394 checkmem(ret == 0);
2395 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2396 checkmem(ret == 0);
2397 free(yyvsp[-2].tv_str);
2398 ;
2399 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002400case 122:
vlme1e6ed82005-03-24 14:26:38 +00002401#line 1235 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002402{
2403 int ret;
2404 yyval.a_ref = asn1p_ref_new(yylineno);
2405 checkmem(yyval.a_ref);
vlmfa67ddc2004-06-03 03:38:44 +00002406 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2407 free(yyvsp[0].tv_str);
2408 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002409 ;
2410 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002411case 123:
vlme1e6ed82005-03-24 14:26:38 +00002412#line 1243 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002413{
vlmfa67ddc2004-06-03 03:38:44 +00002414 int ret;
2415 yyval.a_ref = yyvsp[0].a_ref;
2416 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2417 free(yyvsp[-2].tv_str);
2418 checkmem(ret == 0);
2419 /*
2420 * Move the last element infront.
2421 */
2422 {
2423 struct asn1p_ref_component_s tmp_comp;
2424 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2425 memmove(&yyval.a_ref->components[1],
2426 &yyval.a_ref->components[0],
2427 sizeof(yyval.a_ref->components[0])
2428 * (yyval.a_ref->comp_count - 1));
2429 yyval.a_ref->components[0] = tmp_comp;
2430 }
vlm6a02a8a2004-09-08 00:28:11 +00002431 ;
2432 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002433case 124:
vlme1e6ed82005-03-24 14:26:38 +00002434#line 1265 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002435{
vlmfa67ddc2004-06-03 03:38:44 +00002436 int ret;
2437 yyval.a_ref = asn1p_ref_new(yylineno);
2438 checkmem(yyval.a_ref);
2439 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2440 free(yyvsp[0].a_refcomp.name);
2441 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002442 ;
2443 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002444case 125:
vlme1e6ed82005-03-24 14:26:38 +00002445#line 1273 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002446{
vlmfa67ddc2004-06-03 03:38:44 +00002447 int ret;
2448 yyval.a_ref = yyvsp[-2].a_ref;
2449 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2450 free(yyvsp[0].a_refcomp.name);
2451 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002452 ;
2453 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002454case 128:
vlme1e6ed82005-03-24 14:26:38 +00002455#line 1287 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002456{
vlmfa67ddc2004-06-03 03:38:44 +00002457 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2458 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002459 ;
2460 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002461case 129:
vlme1e6ed82005-03-24 14:26:38 +00002462#line 1292 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002463{
vlmfa67ddc2004-06-03 03:38:44 +00002464 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2465 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002466 ;
2467 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002468case 130:
vlme1e6ed82005-03-24 14:26:38 +00002469#line 1305 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002470{
vlmfa67ddc2004-06-03 03:38:44 +00002471 yyval.a_expr = yyvsp[-2].a_expr;
2472 assert(yyval.a_expr->Identifier == NULL);
2473 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2474 yyval.a_expr->meta_type = AMT_VALUE;
2475 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002476 ;
2477 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002478case 131:
vlme1e6ed82005-03-24 14:26:38 +00002479#line 1315 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002480{
2481 yyval.a_value = asn1p_value_fromint(0);
2482 checkmem(yyval.a_value);
2483 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2484 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2485 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2486 ;
2487 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002488case 132:
vlme1e6ed82005-03-24 14:26:38 +00002489#line 1322 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002490{ asn1p_lexer_hack_push_opaque_state(); ;
2491 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002492case 133:
vlme1e6ed82005-03-24 14:26:38 +00002493#line 1322 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002494{
vlmfa67ddc2004-06-03 03:38:44 +00002495 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2496 checkmem(yyval.a_value);
2497 yyval.a_value->type = ATV_UNPARSED;
vlm6a02a8a2004-09-08 00:28:11 +00002498 ;
2499 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002500case 134:
vlme1e6ed82005-03-24 14:26:38 +00002501#line 1327 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002502{
2503 yyval.a_value = asn1p_value_fromint(0);
2504 checkmem(yyval.a_value);
2505 yyval.a_value->type = ATV_NULL;
2506 ;
2507 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002508case 135:
vlme1e6ed82005-03-24 14:26:38 +00002509#line 1332 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002510{
2511 yyval.a_value = asn1p_value_fromint(0);
2512 checkmem(yyval.a_value);
2513 yyval.a_value->type = ATV_FALSE;
2514 ;
2515 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002516case 136:
vlme1e6ed82005-03-24 14:26:38 +00002517#line 1337 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002518{
2519 yyval.a_value = asn1p_value_fromint(0);
2520 checkmem(yyval.a_value);
2521 yyval.a_value->type = ATV_TRUE;
2522 ;
2523 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002524case 137:
vlme1e6ed82005-03-24 14:26:38 +00002525#line 1342 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002526{
vlmfa67ddc2004-06-03 03:38:44 +00002527 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2528 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002529 ;
2530 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002531case 138:
vlme1e6ed82005-03-24 14:26:38 +00002532#line 1346 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002533{
vlmfa67ddc2004-06-03 03:38:44 +00002534 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2535 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002536 ;
2537 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002538case 139:
vlme1e6ed82005-03-24 14:26:38 +00002539#line 1350 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002540{
vlme1e6ed82005-03-24 14:26:38 +00002541 yyval.a_value = yyval.a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002542 ;
2543 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002544case 140:
vlma6a12e32005-03-20 12:58:00 +00002545#line 1353 "asn1p_y.y"
vlm5e2c4b92005-03-20 11:12:40 +00002546{
2547 yyval.a_value = yyvsp[0].a_value;
2548 ;
2549 break;}
vlm0aa86902004-10-12 23:26:53 +00002550case 141:
vlma6a12e32005-03-20 12:58:00 +00002551#line 1356 "asn1p_y.y"
vlm151c0b22004-09-22 16:03:36 +00002552{
2553 yyval.a_value = yyvsp[0].a_value;
2554 ;
2555 break;}
vlm0aa86902004-10-12 23:26:53 +00002556case 142:
vlma6a12e32005-03-20 12:58:00 +00002557#line 1362 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00002558{
vlmfa67ddc2004-06-03 03:38:44 +00002559 asn1p_ref_t *ref;
2560 int ret;
2561 ref = asn1p_ref_new(yylineno);
2562 checkmem(ref);
2563 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2564 checkmem(ret == 0);
2565 yyval.a_value = asn1p_value_fromref(ref, 0);
2566 checkmem(yyval.a_value);
2567 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002568 ;
2569 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002570case 143:
vlma6a12e32005-03-20 12:58:00 +00002571#line 1373 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002572{
vlmfa67ddc2004-06-03 03:38:44 +00002573 asn1p_ref_t *ref;
2574 int ret;
2575 ref = asn1p_ref_new(yylineno);
2576 checkmem(ref);
2577 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2578 checkmem(ret == 0);
2579 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2580 checkmem(ret == 0);
2581 yyval.a_value = asn1p_value_fromref(ref, 0);
2582 checkmem(yyval.a_value);
2583 free(yyvsp[-2].tv_str);
2584 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002585 ;
2586 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002587case 144:
vlme1e6ed82005-03-24 14:26:38 +00002588#line 1391 "asn1p_y.y"
2589{
2590 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2591 checkmem(yyval.a_value);
2592 ;
2593 break;}
2594case 145:
2595#line 1395 "asn1p_y.y"
2596{
2597 asn1c_integer_t v = (yyvsp[-3].a_int << 4) + yyvsp[-1].a_int;
2598 if(yyvsp[-3].a_int > 7) return yyerror("X.680:2003, #37.14 "
2599 "mandates 0..7 range for Tuple's TableColumn");
2600 if(yyvsp[-1].a_int > 15) return yyerror("X.680:2003, #37.14 "
2601 "mandates 0..15 range for Tuple's TableRow");
2602 yyval.a_value = asn1p_value_fromint(v);
2603 checkmem(yyval.a_value);
2604 yyval.a_value->type = ATV_TUPLE;
2605 ;
2606 break;}
2607case 146:
2608#line 1405 "asn1p_y.y"
2609{
2610 asn1c_integer_t v = (yyvsp[-7].a_int << 24) | (yyvsp[-5].a_int << 16) | (yyvsp[-3].a_int << 8) | yyvsp[-1].a_int;
2611 if(yyvsp[-7].a_int > 127) return yyerror("X.680:2003, #37.12 "
2612 "mandates 0..127 range for Quadruple's Group");
2613 if(yyvsp[-5].a_int > 255) return yyerror("X.680:2003, #37.12 "
2614 "mandates 0..255 range for Quadruple's Plane");
2615 if(yyvsp[-3].a_int > 255) return yyerror("X.680:2003, #37.12 "
2616 "mandates 0..255 range for Quadruple's Row");
2617 if(yyvsp[-1].a_int > 255) return yyerror("X.680:2003, #37.12 "
2618 "mandates 0..255 range for Quadruple's Cell");
2619 yyval.a_value = asn1p_value_fromint(v);
2620 checkmem(yyval.a_value);
2621 yyval.a_value->type = ATV_QUADRUPLE;
2622 ;
2623 break;}
2624case 147:
2625#line 1422 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002626{
vlm6611add2005-03-20 14:28:32 +00002627 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
vlmfa67ddc2004-06-03 03:38:44 +00002628 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2629 checkmem(yyval.tv_opaque.buf);
2630 yyval.tv_opaque.buf[0] = '{';
vlm6611add2005-03-20 14:28:32 +00002631 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
vlmfa67ddc2004-06-03 03:38:44 +00002632 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2633 free(yyvsp[0].tv_opaque.buf);
vlm6a02a8a2004-09-08 00:28:11 +00002634 ;
2635 break;}
vlme1e6ed82005-03-24 14:26:38 +00002636case 148:
2637#line 1431 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002638{
vlmfa67ddc2004-06-03 03:38:44 +00002639 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2640 char *p = malloc(newsize + 1);
2641 checkmem(p);
2642 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2643 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2644 p[newsize] = '\0';
2645 free(yyvsp[-1].tv_opaque.buf);
2646 free(yyvsp[0].tv_opaque.buf);
2647 yyval.tv_opaque.buf = p;
2648 yyval.tv_opaque.len = newsize;
vlm6a02a8a2004-09-08 00:28:11 +00002649 ;
2650 break;}
vlme1e6ed82005-03-24 14:26:38 +00002651case 149:
2652#line 1446 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002653{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2654 break;}
vlme1e6ed82005-03-24 14:26:38 +00002655case 150:
2656#line 1447 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002657{ yyval.a_type = ASN_BASIC_NULL; ;
2658 break;}
vlme1e6ed82005-03-24 14:26:38 +00002659case 151:
2660#line 1448 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002661{ yyval.a_type = ASN_BASIC_REAL; ;
2662 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002663case 152:
vlme1e6ed82005-03-24 14:26:38 +00002664#line 1449 "asn1p_y.y"
2665{ yyval.a_type = yyvsp[0].a_type; ;
vlm6a02a8a2004-09-08 00:28:11 +00002666 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002667case 153:
vlme1e6ed82005-03-24 14:26:38 +00002668#line 1450 "asn1p_y.y"
2669{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
vlm6a02a8a2004-09-08 00:28:11 +00002670 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002671case 154:
vlme1e6ed82005-03-24 14:26:38 +00002672#line 1451 "asn1p_y.y"
2673{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
vlm6a02a8a2004-09-08 00:28:11 +00002674 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002675case 155:
vlme1e6ed82005-03-24 14:26:38 +00002676#line 1452 "asn1p_y.y"
2677{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
vlm6a02a8a2004-09-08 00:28:11 +00002678 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002679case 156:
vlme1e6ed82005-03-24 14:26:38 +00002680#line 1453 "asn1p_y.y"
2681{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
vlm6a02a8a2004-09-08 00:28:11 +00002682 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002683case 157:
vlme1e6ed82005-03-24 14:26:38 +00002684#line 1454 "asn1p_y.y"
2685{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
vlm6a02a8a2004-09-08 00:28:11 +00002686 break;}
vlm5e2c4b92005-03-20 11:12:40 +00002687case 158:
vlme1e6ed82005-03-24 14:26:38 +00002688#line 1455 "asn1p_y.y"
2689{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
vlm5e2c4b92005-03-20 11:12:40 +00002690 break;}
vlm4053ca52005-02-18 16:34:21 +00002691case 159:
vlme1e6ed82005-03-24 14:26:38 +00002692#line 1456 "asn1p_y.y"
2693{ yyval.a_type = ASN_BASIC_UTCTime; ;
vlm6a02a8a2004-09-08 00:28:11 +00002694 break;}
vlm4053ca52005-02-18 16:34:21 +00002695case 160:
vlme1e6ed82005-03-24 14:26:38 +00002696#line 1457 "asn1p_y.y"
2697{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
vlm6a02a8a2004-09-08 00:28:11 +00002698 break;}
vlm4053ca52005-02-18 16:34:21 +00002699case 161:
vlme1e6ed82005-03-24 14:26:38 +00002700#line 1458 "asn1p_y.y"
2701{ yyval.a_type = yyvsp[0].a_type; ;
vlm6a02a8a2004-09-08 00:28:11 +00002702 break;}
vlm4053ca52005-02-18 16:34:21 +00002703case 162:
vlme1e6ed82005-03-24 14:26:38 +00002704#line 1465 "asn1p_y.y"
2705{ yyval.a_type = ASN_BASIC_INTEGER; ;
2706 break;}
2707case 163:
2708#line 1466 "asn1p_y.y"
2709{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2710 break;}
2711case 164:
2712#line 1467 "asn1p_y.y"
2713{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2714 break;}
2715case 165:
2716#line 1471 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002717{
vlm39e5ed72004-09-05 10:40:41 +00002718 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002719 checkmem(yyval.a_expr);
2720 yyval.a_expr->expr_type = yyvsp[0].a_type;
2721 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002722 ;
2723 break;}
vlme1e6ed82005-03-24 14:26:38 +00002724case 166:
2725#line 1477 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002726{
vlmfa67ddc2004-06-03 03:38:44 +00002727 if(yyvsp[0].a_expr) {
2728 yyval.a_expr = yyvsp[0].a_expr;
2729 } else {
vlm39e5ed72004-09-05 10:40:41 +00002730 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002731 checkmem(yyval.a_expr);
2732 }
2733 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2734 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002735 ;
2736 break;}
vlme1e6ed82005-03-24 14:26:38 +00002737case 167:
2738#line 1490 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002739{ yyval.a_type = ASN_STRING_BMPString; ;
2740 break;}
vlme1e6ed82005-03-24 14:26:38 +00002741case 168:
2742#line 1491 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002743{
vlmfa67ddc2004-06-03 03:38:44 +00002744 yyval.a_type = ASN_STRING_GeneralString;
vlmc94e28f2004-09-15 11:59:51 +00002745 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002746 ;
2747 break;}
vlme1e6ed82005-03-24 14:26:38 +00002748case 169:
2749#line 1495 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002750{
vlmc94e28f2004-09-15 11:59:51 +00002751 yyval.a_type = ASN_STRING_GraphicString;
2752 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002753 ;
2754 break;}
vlme1e6ed82005-03-24 14:26:38 +00002755case 170:
2756#line 1499 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002757{ yyval.a_type = ASN_STRING_IA5String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002758 break;}
vlme1e6ed82005-03-24 14:26:38 +00002759case 171:
2760#line 1500 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002761{ yyval.a_type = ASN_STRING_ISO646String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002762 break;}
vlme1e6ed82005-03-24 14:26:38 +00002763case 172:
2764#line 1501 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002765{ yyval.a_type = ASN_STRING_NumericString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002766 break;}
vlme1e6ed82005-03-24 14:26:38 +00002767case 173:
2768#line 1502 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002769{ yyval.a_type = ASN_STRING_PrintableString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002770 break;}
vlme1e6ed82005-03-24 14:26:38 +00002771case 174:
2772#line 1503 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002773{
2774 yyval.a_type = ASN_STRING_T61String;
2775 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2776 ;
vlm6a02a8a2004-09-08 00:28:11 +00002777 break;}
vlme1e6ed82005-03-24 14:26:38 +00002778case 175:
2779#line 1507 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002780{ yyval.a_type = ASN_STRING_TeletexString; ;
2781 break;}
vlme1e6ed82005-03-24 14:26:38 +00002782case 176:
2783#line 1508 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002784{ yyval.a_type = ASN_STRING_UniversalString; ;
2785 break;}
vlme1e6ed82005-03-24 14:26:38 +00002786case 177:
2787#line 1509 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002788{ yyval.a_type = ASN_STRING_UTF8String; ;
2789 break;}
vlme1e6ed82005-03-24 14:26:38 +00002790case 178:
2791#line 1510 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002792{
2793 yyval.a_type = ASN_STRING_VideotexString;
2794 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2795 ;
2796 break;}
vlme1e6ed82005-03-24 14:26:38 +00002797case 179:
2798#line 1514 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002799{ yyval.a_type = ASN_STRING_VisibleString; ;
2800 break;}
vlme1e6ed82005-03-24 14:26:38 +00002801case 180:
2802#line 1515 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002803{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2804 break;}
vlme1e6ed82005-03-24 14:26:38 +00002805case 186:
2806#line 1527 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002807{ yyval.a_constr = 0; ;
2808 break;}
vlme1e6ed82005-03-24 14:26:38 +00002809case 187:
2810#line 1528 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002811{
vlm39e5ed72004-09-05 10:40:41 +00002812 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002813 ;
2814 break;}
vlme1e6ed82005-03-24 14:26:38 +00002815case 188:
2816#line 1534 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002817{
vlm39e5ed72004-09-05 10:40:41 +00002818 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002819 ;
2820 break;}
vlme1e6ed82005-03-24 14:26:38 +00002821case 189:
2822#line 1537 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002823{
vlmfa67ddc2004-06-03 03:38:44 +00002824 /*
2825 * This is a special case, for compatibility purposes.
vlm9283dbe2004-08-18 04:59:12 +00002826 * It goes without parentheses.
vlmfa67ddc2004-06-03 03:38:44 +00002827 */
vlm5f0128b2004-08-20 13:25:29 +00002828 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002829 ;
2830 break;}
vlme1e6ed82005-03-24 14:26:38 +00002831case 190:
2832#line 1547 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002833{
vlmfa67ddc2004-06-03 03:38:44 +00002834 yyval.a_constr = yyvsp[-1].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002835 ;
2836 break;}
vlme1e6ed82005-03-24 14:26:38 +00002837case 191:
2838#line 1550 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002839{
vlm9283dbe2004-08-18 04:59:12 +00002840 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002841 ;
2842 break;}
vlme1e6ed82005-03-24 14:26:38 +00002843case 192:
2844#line 1556 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002845{
vlmfa67ddc2004-06-03 03:38:44 +00002846 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002847 ;
2848 break;}
vlme1e6ed82005-03-24 14:26:38 +00002849case 193:
2850#line 1559 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002851{
vlmfa67ddc2004-06-03 03:38:44 +00002852 asn1p_constraint_t *ct;
2853 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002854 ct->type = ACT_EL_EXT;
2855 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00002856 ;
2857 break;}
vlme1e6ed82005-03-24 14:26:38 +00002858case 194:
2859#line 1565 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002860{
vlmfa67ddc2004-06-03 03:38:44 +00002861 asn1p_constraint_t *ct;
2862 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002863 ct->type = ACT_EL_EXT;
2864 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
vlm6f5eb0b2004-08-13 12:35:09 +00002865 ct = yyval.a_constr;
2866 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002867 ;
2868 break;}
vlme1e6ed82005-03-24 14:26:38 +00002869case 195:
2870#line 1576 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002871{
vlm9283dbe2004-08-18 04:59:12 +00002872 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002873 ;
2874 break;}
vlme1e6ed82005-03-24 14:26:38 +00002875case 196:
2876#line 1579 "asn1p_y.y"
2877{
2878 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2879 ;
2880 break;}
2881case 197:
2882#line 1582 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002883{
vlmfa67ddc2004-06-03 03:38:44 +00002884 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002885 ;
2886 break;}
vlme1e6ed82005-03-24 14:26:38 +00002887case 198:
2888#line 1585 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002889{
vlmfa67ddc2004-06-03 03:38:44 +00002890 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002891 ;
2892 break;}
vlme1e6ed82005-03-24 14:26:38 +00002893case 199:
2894#line 1588 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002895{
vlmfa67ddc2004-06-03 03:38:44 +00002896 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002897 ;
2898 break;}
vlme1e6ed82005-03-24 14:26:38 +00002899case 200:
2900#line 1594 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002901{
vlmfa67ddc2004-06-03 03:38:44 +00002902 int ret;
2903 yyval.a_constr = asn1p_constraint_new(yylineno);
2904 checkmem(yyval.a_constr);
2905 yyval.a_constr->type = yyvsp[-3].a_ctype;
2906 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2907 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002908 ;
2909 break;}
vlme1e6ed82005-03-24 14:26:38 +00002910case 201:
2911#line 1602 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002912{
vlm9283dbe2004-08-18 04:59:12 +00002913 int ret;
2914 yyval.a_constr = asn1p_constraint_new(yylineno);
2915 checkmem(yyval.a_constr);
2916 yyval.a_constr->type = ACT_CA_SET;
2917 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2918 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002919 ;
2920 break;}
vlme1e6ed82005-03-24 14:26:38 +00002921case 202:
2922#line 1610 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002923{
vlm9283dbe2004-08-18 04:59:12 +00002924 yyval.a_constr = asn1p_constraint_new(yylineno);
2925 checkmem(yyval.a_constr);
2926 yyval.a_constr->type = ACT_EL_VALUE;
2927 yyval.a_constr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002928 ;
2929 break;}
vlme1e6ed82005-03-24 14:26:38 +00002930case 203:
2931#line 1616 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002932{
vlm0aa86902004-10-12 23:26:53 +00002933 yyval.a_constr = asn1p_constraint_new(yylineno);
2934 checkmem(yyval.a_constr);
vlma6a12e32005-03-20 12:58:00 +00002935 yyval.a_constr->type = ACT_EL_TYPE;
2936 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
vlmc94e28f2004-09-15 11:59:51 +00002937 ;
2938 break;}
vlmc94e28f2004-09-15 11:59:51 +00002939case 204:
vlme1e6ed82005-03-24 14:26:38 +00002940#line 1622 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00002941{
vlme1e6ed82005-03-24 14:26:38 +00002942 yyval.a_constr = asn1p_constraint_new(yylineno);
2943 checkmem(yyval.a_constr);
2944 yyval.a_constr->type = yyvsp[-1].a_ctype;
2945 yyval.a_constr->range_start = yyvsp[-2].a_value;
2946 yyval.a_constr->range_stop = yyvsp[0].a_value;
vlm4053ca52005-02-18 16:34:21 +00002947 ;
vlm0aa86902004-10-12 23:26:53 +00002948 break;}
2949case 205:
vlme1e6ed82005-03-24 14:26:38 +00002950#line 1629 "asn1p_y.y"
2951{
2952 yyval.a_constr = asn1p_constraint_new(yylineno);
2953 checkmem(yyval.a_constr);
2954 yyval.a_constr->type = yyvsp[-1].a_ctype;
2955 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2956 yyval.a_constr->range_stop = yyvsp[0].a_value;
2957 yyval.a_constr->range_start->type = ATV_MIN;
2958 ;
2959 break;}
2960case 206:
2961#line 1637 "asn1p_y.y"
2962{
2963 yyval.a_constr = asn1p_constraint_new(yylineno);
2964 checkmem(yyval.a_constr);
2965 yyval.a_constr->type = yyvsp[-1].a_ctype;
2966 yyval.a_constr->range_start = yyvsp[-2].a_value;
2967 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2968 yyval.a_constr->range_stop->type = ATV_MAX;
2969 ;
2970 break;}
2971case 207:
2972#line 1645 "asn1p_y.y"
2973{
2974 yyval.a_constr = asn1p_constraint_new(yylineno);
2975 checkmem(yyval.a_constr);
2976 yyval.a_constr->type = yyvsp[-1].a_ctype;
2977 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2978 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2979 yyval.a_constr->range_start->type = ATV_MIN;
2980 yyval.a_constr->range_stop->type = ATV_MAX;
2981 ;
2982 break;}
2983case 208:
2984#line 1654 "asn1p_y.y"
vlma6a12e32005-03-20 12:58:00 +00002985{
2986 yyval.a_constr = yyvsp[0].a_constr;
2987 ;
vlm0aa86902004-10-12 23:26:53 +00002988 break;}
vlme1e6ed82005-03-24 14:26:38 +00002989case 209:
2990#line 1657 "asn1p_y.y"
2991{
2992 yyval.a_constr = yyvsp[0].a_constr;
2993 ;
2994 break;}
2995case 210:
2996#line 1661 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00002997{ asn1p_lexer_hack_push_opaque_state(); ;
vlm0aa86902004-10-12 23:26:53 +00002998 break;}
vlme1e6ed82005-03-24 14:26:38 +00002999case 211:
3000#line 1661 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003001{
3002 yyval.a_constr = asn1p_constraint_new(yylineno);
3003 checkmem(yyval.a_constr);
3004 yyval.a_constr->type = ACT_CT_CTDBY;
3005 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3006 checkmem(yyval.a_constr->value);
3007 yyval.a_constr->value->type = ATV_UNPARSED;
3008 ;
vlm0aa86902004-10-12 23:26:53 +00003009 break;}
vlme1e6ed82005-03-24 14:26:38 +00003010case 212:
3011#line 1672 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003012{ yyval.a_ctype = ACT_EL_RANGE; ;
vlm4053ca52005-02-18 16:34:21 +00003013 break;}
vlme1e6ed82005-03-24 14:26:38 +00003014case 213:
3015#line 1673 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003016{ yyval.a_ctype = ACT_EL_RLRANGE; ;
vlma6a12e32005-03-20 12:58:00 +00003017 break;}
vlme1e6ed82005-03-24 14:26:38 +00003018case 214:
3019#line 1674 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003020{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3021 break;}
vlme1e6ed82005-03-24 14:26:38 +00003022case 215:
3023#line 1675 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003024{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3025 break;}
vlme1e6ed82005-03-24 14:26:38 +00003026case 216:
3027#line 1679 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003028{
vlm39e5ed72004-09-05 10:40:41 +00003029 yyval.a_ctype = ACT_CT_SIZE;
vlm6a02a8a2004-09-08 00:28:11 +00003030 ;
3031 break;}
vlme1e6ed82005-03-24 14:26:38 +00003032case 217:
3033#line 1682 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003034{
vlm39e5ed72004-09-05 10:40:41 +00003035 yyval.a_ctype = ACT_CT_FROM;
vlm6a02a8a2004-09-08 00:28:11 +00003036 ;
3037 break;}
vlme1e6ed82005-03-24 14:26:38 +00003038case 218:
3039#line 1688 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003040{
3041 yyval.a_value = asn1p_value_fromint(0);
3042 checkmem(yyval.a_value);
3043 yyval.a_value->type = ATV_FALSE;
3044 ;
3045 break;}
vlme1e6ed82005-03-24 14:26:38 +00003046case 219:
3047#line 1693 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003048{
3049 yyval.a_value = asn1p_value_fromint(1);
3050 checkmem(yyval.a_value);
3051 yyval.a_value->type = ATV_TRUE;
3052 ;
3053 break;}
vlme1e6ed82005-03-24 14:26:38 +00003054case 220:
3055#line 1698 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003056{
vlmfa67ddc2004-06-03 03:38:44 +00003057 yyval.a_value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00003058 ;
3059 break;}
vlme1e6ed82005-03-24 14:26:38 +00003060case 221:
3061#line 1701 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003062{
vlme1e6ed82005-03-24 14:26:38 +00003063 yyval.a_value = yyvsp[0].a_value;
vlm4053ca52005-02-18 16:34:21 +00003064 ;
3065 break;}
vlme1e6ed82005-03-24 14:26:38 +00003066case 222:
3067#line 1704 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003068{
vlmfa67ddc2004-06-03 03:38:44 +00003069 asn1p_ref_t *ref;
3070 int ret;
3071 ref = asn1p_ref_new(yylineno);
3072 checkmem(ref);
3073 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3074 checkmem(ret == 0);
3075 yyval.a_value = asn1p_value_fromref(ref, 0);
3076 checkmem(yyval.a_value);
3077 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003078 ;
3079 break;}
vlme1e6ed82005-03-24 14:26:38 +00003080case 223:
3081#line 1718 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003082{
vlm4053ca52005-02-18 16:34:21 +00003083 asn1p_ref_t *ref;
3084 int ret;
3085 ref = asn1p_ref_new(yylineno);
3086 checkmem(ref);
3087 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3088 checkmem(ret == 0);
3089 yyval.a_value = asn1p_value_fromref(ref, 0);
vlmfa67ddc2004-06-03 03:38:44 +00003090 checkmem(yyval.a_value);
vlm4053ca52005-02-18 16:34:21 +00003091 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003092 ;
3093 break;}
vlme1e6ed82005-03-24 14:26:38 +00003094case 224:
3095#line 1732 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003096{
vlmfa67ddc2004-06-03 03:38:44 +00003097 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003098 ;
3099 break;}
vlme1e6ed82005-03-24 14:26:38 +00003100case 225:
3101#line 1738 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003102{
vlmfa67ddc2004-06-03 03:38:44 +00003103 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00003104 ;
3105 break;}
vlme1e6ed82005-03-24 14:26:38 +00003106case 226:
3107#line 1741 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003108{
vlmfa67ddc2004-06-03 03:38:44 +00003109 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003110 ;
3111 break;}
vlme1e6ed82005-03-24 14:26:38 +00003112case 227:
3113#line 1747 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003114{
vlmfa67ddc2004-06-03 03:38:44 +00003115 yyval.a_constr = asn1p_constraint_new(yylineno);
3116 checkmem(yyval.a_constr);
3117 yyval.a_constr->type = ACT_EL_EXT;
vlm6a02a8a2004-09-08 00:28:11 +00003118 ;
3119 break;}
vlme1e6ed82005-03-24 14:26:38 +00003120case 228:
3121#line 1752 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003122{
vlmfa67ddc2004-06-03 03:38:44 +00003123 yyval.a_constr = asn1p_constraint_new(yylineno);
3124 checkmem(yyval.a_constr);
3125 yyval.a_constr->type = ACT_EL_VALUE;
3126 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3127 yyval.a_constr->presence = yyvsp[0].a_pres;
vlm6a02a8a2004-09-08 00:28:11 +00003128 ;
3129 break;}
vlme1e6ed82005-03-24 14:26:38 +00003130case 229:
3131#line 1765 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003132{ yyval.a_pres = ACPRES_DEFAULT; ;
3133 break;}
vlme1e6ed82005-03-24 14:26:38 +00003134case 230:
3135#line 1766 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003136{ yyval.a_pres = yyvsp[0].a_pres; ;
3137 break;}
vlme1e6ed82005-03-24 14:26:38 +00003138case 231:
3139#line 1770 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003140{
vlmfa67ddc2004-06-03 03:38:44 +00003141 yyval.a_pres = ACPRES_PRESENT;
vlm6a02a8a2004-09-08 00:28:11 +00003142 ;
3143 break;}
vlme1e6ed82005-03-24 14:26:38 +00003144case 232:
3145#line 1773 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003146{
vlmfa67ddc2004-06-03 03:38:44 +00003147 yyval.a_pres = ACPRES_ABSENT;
vlm6a02a8a2004-09-08 00:28:11 +00003148 ;
3149 break;}
vlme1e6ed82005-03-24 14:26:38 +00003150case 233:
3151#line 1776 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003152{
vlmfa67ddc2004-06-03 03:38:44 +00003153 yyval.a_pres = ACPRES_OPTIONAL;
vlm6a02a8a2004-09-08 00:28:11 +00003154 ;
3155 break;}
vlme1e6ed82005-03-24 14:26:38 +00003156case 234:
3157#line 1782 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003158{
3159 yyval.a_constr = yyvsp[0].a_constr;
3160 ;
3161 break;}
vlme1e6ed82005-03-24 14:26:38 +00003162case 235:
3163#line 1785 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003164{
3165 yyval.a_constr = yyvsp[0].a_constr;
3166 ;
3167 break;}
vlme1e6ed82005-03-24 14:26:38 +00003168case 236:
3169#line 1794 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003170{
vlmfa67ddc2004-06-03 03:38:44 +00003171 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3172 asn1p_constraint_t *ct;
3173 int ret;
3174 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3175 checkmem(ret == 0);
3176 ct = asn1p_constraint_new(yylineno);
3177 checkmem(yyval.a_constr);
3178 ct->type = ACT_EL_VALUE;
3179 ct->value = asn1p_value_fromref(ref, 0);
3180 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003181 ;
3182 break;}
vlme1e6ed82005-03-24 14:26:38 +00003183case 237:
3184#line 1809 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003185{
vlmfa67ddc2004-06-03 03:38:44 +00003186 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003187 ;
3188 break;}
vlme1e6ed82005-03-24 14:26:38 +00003189case 238:
3190#line 1815 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003191{
vlmfa67ddc2004-06-03 03:38:44 +00003192 yyval.a_constr = asn1p_constraint_new(yylineno);
3193 checkmem(yyval.a_constr);
3194 yyval.a_constr->type = ACT_EL_VALUE;
3195 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003196 ;
3197 break;}
vlme1e6ed82005-03-24 14:26:38 +00003198case 239:
3199#line 1821 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003200{
vlmfa67ddc2004-06-03 03:38:44 +00003201 asn1p_constraint_t *ct;
3202 ct = asn1p_constraint_new(yylineno);
3203 checkmem(ct);
3204 ct->type = ACT_EL_VALUE;
3205 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3206 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00003207 ;
3208 break;}
vlme1e6ed82005-03-24 14:26:38 +00003209case 240:
3210#line 1835 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003211{
vlmfa67ddc2004-06-03 03:38:44 +00003212 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3213 int ret;
3214 *p = '@';
3215 strcpy(p + 1, yyvsp[0].tv_str);
3216 yyval.a_ref = asn1p_ref_new(yylineno);
3217 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3218 checkmem(ret == 0);
3219 free(p);
3220 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003221 ;
3222 break;}
vlme1e6ed82005-03-24 14:26:38 +00003223case 241:
3224#line 1846 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003225{
vlmfa67ddc2004-06-03 03:38:44 +00003226 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3227 int ret;
3228 p[0] = '@';
3229 p[1] = '.';
3230 strcpy(p + 2, yyvsp[0].tv_str);
3231 yyval.a_ref = asn1p_ref_new(yylineno);
3232 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3233 checkmem(ret == 0);
3234 free(p);
3235 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003236 ;
3237 break;}
vlme1e6ed82005-03-24 14:26:38 +00003238case 242:
3239#line 1862 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003240{
vlmfa67ddc2004-06-03 03:38:44 +00003241 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003242 ;
3243 break;}
vlme1e6ed82005-03-24 14:26:38 +00003244case 243:
3245#line 1865 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003246{
vlmfa67ddc2004-06-03 03:38:44 +00003247 int l1 = strlen(yyvsp[-2].tv_str);
3248 int l3 = strlen(yyvsp[0].tv_str);
3249 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3250 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3251 yyval.tv_str[l1] = '.';
3252 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3253 yyval.tv_str[l1 + 1 + l3] = '\0';
vlm6a02a8a2004-09-08 00:28:11 +00003254 ;
3255 break;}
vlme1e6ed82005-03-24 14:26:38 +00003256case 244:
3257#line 1883 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003258{
vlmc94e28f2004-09-15 11:59:51 +00003259 yyval.a_marker.flags = EM_NOMARK;
3260 yyval.a_marker.default_value = 0;
vlm6a02a8a2004-09-08 00:28:11 +00003261 ;
3262 break;}
vlme1e6ed82005-03-24 14:26:38 +00003263case 245:
3264#line 1887 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003265{ yyval.a_marker = yyvsp[0].a_marker; ;
vlma2374a02004-09-14 02:44:07 +00003266 break;}
vlme1e6ed82005-03-24 14:26:38 +00003267case 246:
3268#line 1891 "asn1p_y.y"
vlma2374a02004-09-14 02:44:07 +00003269{
vlmc94e28f2004-09-15 11:59:51 +00003270 yyval.a_marker.flags = EM_OPTIONAL;
3271 yyval.a_marker.default_value = 0;
vlma2374a02004-09-14 02:44:07 +00003272 ;
3273 break;}
vlme1e6ed82005-03-24 14:26:38 +00003274case 247:
3275#line 1895 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003276{
3277 yyval.a_marker.flags = EM_DEFAULT;
3278 yyval.a_marker.default_value = yyvsp[0].a_value;
3279 ;
3280 break;}
vlme1e6ed82005-03-24 14:26:38 +00003281case 248:
3282#line 1918 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003283{
vlm39e5ed72004-09-05 10:40:41 +00003284 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003285 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003286 ;
3287 break;}
vlme1e6ed82005-03-24 14:26:38 +00003288case 249:
3289#line 1922 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003290{
vlmfa67ddc2004-06-03 03:38:44 +00003291 yyval.a_expr = yyvsp[-1].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00003292 ;
3293 break;}
vlme1e6ed82005-03-24 14:26:38 +00003294case 250:
3295#line 1928 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003296{
vlm39e5ed72004-09-05 10:40:41 +00003297 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003298 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003299 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3300 ;
3301 break;}
vlme1e6ed82005-03-24 14:26:38 +00003302case 251:
3303#line 1933 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003304{
vlmfa67ddc2004-06-03 03:38:44 +00003305 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00003306 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3307 ;
3308 break;}
vlme1e6ed82005-03-24 14:26:38 +00003309case 252:
3310#line 1940 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003311{
vlm39e5ed72004-09-05 10:40:41 +00003312 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003313 checkmem(yyval.a_expr);
3314 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3315 yyval.a_expr->meta_type = AMT_VALUE;
3316 yyval.a_expr->Identifier = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003317 ;
3318 break;}
vlme1e6ed82005-03-24 14:26:38 +00003319case 253:
3320#line 1947 "asn1p_y.y"
vlma6a12e32005-03-20 12:58:00 +00003321{
3322 yyval.a_expr = asn1p_expr_new(yylineno);
3323 checkmem(yyval.a_expr);
3324 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3325 yyval.a_expr->meta_type = AMT_VALUE;
3326 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3327 yyval.a_expr->value = yyvsp[-1].a_value;
3328 ;
3329 break;}
vlme1e6ed82005-03-24 14:26:38 +00003330case 254:
3331#line 1955 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003332{
vlm39e5ed72004-09-05 10:40:41 +00003333 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003334 checkmem(yyval.a_expr);
3335 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3336 yyval.a_expr->meta_type = AMT_VALUE;
vlm6611add2005-03-20 14:28:32 +00003337 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3338 yyval.a_expr->value = yyvsp[-1].a_value;
3339 ;
3340 break;}
vlme1e6ed82005-03-24 14:26:38 +00003341case 255:
3342#line 1963 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003343{
3344 yyval.a_expr = asn1p_expr_new(yylineno);
3345 checkmem(yyval.a_expr);
3346 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3347 yyval.a_expr->meta_type = AMT_VALUE;
vlmfa67ddc2004-06-03 03:38:44 +00003348 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00003349 ;
3350 break;}
vlme1e6ed82005-03-24 14:26:38 +00003351case 256:
3352#line 1970 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003353{
vlm39e5ed72004-09-05 10:40:41 +00003354 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003355 checkmem(yyval.a_expr);
3356 yyval.a_expr->Identifier = strdup("...");
3357 checkmem(yyval.a_expr->Identifier);
3358 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3359 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00003360 ;
3361 break;}
vlme1e6ed82005-03-24 14:26:38 +00003362case 257:
3363#line 1981 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003364{
3365 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3366 checkmem(yyval.a_value);
3367 ;
vlm4053ca52005-02-18 16:34:21 +00003368 break;}
vlme1e6ed82005-03-24 14:26:38 +00003369case 258:
3370#line 1985 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003371{
3372 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3373 checkmem(yyval.a_value);
3374 ;
vlma6a12e32005-03-20 12:58:00 +00003375 break;}
vlme1e6ed82005-03-24 14:26:38 +00003376case 259:
3377#line 2016 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003378{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3379 break;}
vlme1e6ed82005-03-24 14:26:38 +00003380case 260:
3381#line 2017 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003382{ yyval.a_tag = yyvsp[0].a_tag; ;
3383 break;}
vlme1e6ed82005-03-24 14:26:38 +00003384case 261:
3385#line 2021 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003386{
vlm2728a8d2005-01-23 09:51:44 +00003387 yyval.a_tag = yyvsp[-1].a_tag;
3388 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
vlm6a02a8a2004-09-08 00:28:11 +00003389 ;
3390 break;}
vlme1e6ed82005-03-24 14:26:38 +00003391case 262:
3392#line 2028 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003393{
vlm2728a8d2005-01-23 09:51:44 +00003394 yyval.a_tag = yyvsp[-2].a_tag;
3395 yyval.a_tag.tag_value = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00003396 ;
3397 break;}
vlme1e6ed82005-03-24 14:26:38 +00003398case 263:
3399#line 2034 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003400{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
vlm6a02a8a2004-09-08 00:28:11 +00003401 break;}
vlme1e6ed82005-03-24 14:26:38 +00003402case 264:
3403#line 2035 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003404{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
vlm151c0b22004-09-22 16:03:36 +00003405 break;}
vlme1e6ed82005-03-24 14:26:38 +00003406case 265:
3407#line 2036 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003408{ yyval.a_tag.tag_class = TC_APPLICATION; ;
vlm0aa86902004-10-12 23:26:53 +00003409 break;}
vlme1e6ed82005-03-24 14:26:38 +00003410case 266:
3411#line 2037 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003412{ yyval.a_tag.tag_class = TC_PRIVATE; ;
3413 break;}
vlme1e6ed82005-03-24 14:26:38 +00003414case 267:
3415#line 2041 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003416{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3417 break;}
vlme1e6ed82005-03-24 14:26:38 +00003418case 268:
3419#line 2042 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003420{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
vlm0aa86902004-10-12 23:26:53 +00003421 break;}
vlme1e6ed82005-03-24 14:26:38 +00003422case 269:
3423#line 2043 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003424{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
vlm0aa86902004-10-12 23:26:53 +00003425 break;}
vlm6611add2005-03-20 14:28:32 +00003426case 270:
vlme1e6ed82005-03-24 14:26:38 +00003427#line 2047 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003428{
vlme1e6ed82005-03-24 14:26:38 +00003429 checkmem(yyvsp[0].tv_str);
vlm6611add2005-03-20 14:28:32 +00003430 yyval.tv_str = yyvsp[0].tv_str;
3431 ;
3432 break;}
3433case 271:
vlme1e6ed82005-03-24 14:26:38 +00003434#line 2051 "asn1p_y.y"
3435{
3436 checkmem(yyvsp[0].tv_str);
3437 yyval.tv_str = yyvsp[0].tv_str;
3438 ;
3439 break;}
3440case 272:
3441#line 2059 "asn1p_y.y"
3442{
3443 checkmem(yyvsp[0].tv_str);
3444 yyval.tv_str = yyvsp[0].tv_str;
3445 ;
3446 break;}
3447case 273:
3448#line 2066 "asn1p_y.y"
3449{ yyval.tv_str = 0; ;
3450 break;}
3451case 274:
3452#line 2067 "asn1p_y.y"
3453{
3454 yyval.tv_str = yyvsp[0].tv_str;
3455 ;
3456 break;}
3457case 275:
3458#line 2072 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003459{
vlm39e5ed72004-09-05 10:40:41 +00003460 checkmem(yyvsp[0].tv_str);
3461 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003462 ;
3463 break;}
vlm6a02a8a2004-09-08 00:28:11 +00003464}
3465 /* the action file gets copied in in place of this dollarsign */
3466#line 543 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00003467
3468 yyvsp -= yylen;
3469 yyssp -= yylen;
vlm6a02a8a2004-09-08 00:28:11 +00003470#ifdef YYLSP_NEEDED
3471 yylsp -= yylen;
3472#endif
vlmfa67ddc2004-06-03 03:38:44 +00003473
vlm6a02a8a2004-09-08 00:28:11 +00003474#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00003475 if (yydebug)
3476 {
vlm6a02a8a2004-09-08 00:28:11 +00003477 short *ssp1 = yyss - 1;
3478 fprintf (stderr, "state stack now");
3479 while (ssp1 != yyssp)
3480 fprintf (stderr, " %d", *++ssp1);
3481 fprintf (stderr, "\n");
vlmfa67ddc2004-06-03 03:38:44 +00003482 }
3483#endif
3484
3485 *++yyvsp = yyval;
3486
vlm6a02a8a2004-09-08 00:28:11 +00003487#ifdef YYLSP_NEEDED
3488 yylsp++;
3489 if (yylen == 0)
3490 {
3491 yylsp->first_line = yylloc.first_line;
3492 yylsp->first_column = yylloc.first_column;
3493 yylsp->last_line = (yylsp-1)->last_line;
3494 yylsp->last_column = (yylsp-1)->last_column;
3495 yylsp->text = 0;
3496 }
3497 else
3498 {
3499 yylsp->last_line = (yylsp+yylen-1)->last_line;
3500 yylsp->last_column = (yylsp+yylen-1)->last_column;
3501 }
3502#endif
vlmfa67ddc2004-06-03 03:38:44 +00003503
vlm6a02a8a2004-09-08 00:28:11 +00003504 /* Now "shift" the result of the reduction.
3505 Determine what state that goes to,
3506 based on the state we popped back to
3507 and the rule number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00003508
3509 yyn = yyr1[yyn];
3510
vlm6a02a8a2004-09-08 00:28:11 +00003511 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3512 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00003513 yystate = yytable[yystate];
3514 else
vlm6a02a8a2004-09-08 00:28:11 +00003515 yystate = yydefgoto[yyn - YYNTBASE];
vlmfa67ddc2004-06-03 03:38:44 +00003516
3517 goto yynewstate;
3518
vlm6a02a8a2004-09-08 00:28:11 +00003519yyerrlab: /* here on detecting error */
vlmfa67ddc2004-06-03 03:38:44 +00003520
vlm6a02a8a2004-09-08 00:28:11 +00003521 if (! yyerrstatus)
3522 /* If not already recovering from an error, report this error. */
vlmfa67ddc2004-06-03 03:38:44 +00003523 {
3524 ++yynerrs;
vlm6a02a8a2004-09-08 00:28:11 +00003525
3526#ifdef YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00003527 yyn = yypact[yystate];
3528
vlm6a02a8a2004-09-08 00:28:11 +00003529 if (yyn > YYFLAG && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00003530 {
vlm6a02a8a2004-09-08 00:28:11 +00003531 int size = 0;
3532 char *msg;
3533 int x, count;
vlmfa67ddc2004-06-03 03:38:44 +00003534
vlm6a02a8a2004-09-08 00:28:11 +00003535 count = 0;
3536 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3537 for (x = (yyn < 0 ? -yyn : 0);
3538 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3539 if (yycheck[x + yyn] == x)
3540 size += strlen(yytname[x]) + 15, count++;
3541 msg = (char *) malloc(size + 15);
3542 if (msg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00003543 {
vlm6a02a8a2004-09-08 00:28:11 +00003544 strcpy(msg, "parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003545
vlm6a02a8a2004-09-08 00:28:11 +00003546 if (count < 5)
vlmfa67ddc2004-06-03 03:38:44 +00003547 {
vlm6a02a8a2004-09-08 00:28:11 +00003548 count = 0;
3549 for (x = (yyn < 0 ? -yyn : 0);
3550 x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
3551 if (yycheck[x + yyn] == x)
vlmfa67ddc2004-06-03 03:38:44 +00003552 {
vlm6a02a8a2004-09-08 00:28:11 +00003553 strcat(msg, count == 0 ? ", expecting `" : " or `");
3554 strcat(msg, yytname[x]);
3555 strcat(msg, "'");
3556 count++;
vlmfa67ddc2004-06-03 03:38:44 +00003557 }
3558 }
vlm6a02a8a2004-09-08 00:28:11 +00003559 yyerror(msg);
3560 free(msg);
vlmfa67ddc2004-06-03 03:38:44 +00003561 }
3562 else
vlm6a02a8a2004-09-08 00:28:11 +00003563 yyerror ("parse error; also virtual memory exceeded");
vlmfa67ddc2004-06-03 03:38:44 +00003564 }
3565 else
3566#endif /* YYERROR_VERBOSE */
vlm6a02a8a2004-09-08 00:28:11 +00003567 yyerror("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003568 }
vlm6a02a8a2004-09-08 00:28:11 +00003569
vlmfa67ddc2004-06-03 03:38:44 +00003570 goto yyerrlab1;
vlm6a02a8a2004-09-08 00:28:11 +00003571yyerrlab1: /* here on error raised explicitly by an action */
vlmfa67ddc2004-06-03 03:38:44 +00003572
3573 if (yyerrstatus == 3)
3574 {
vlm6a02a8a2004-09-08 00:28:11 +00003575 /* if just tried and failed to reuse lookahead token after an error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00003576
vlm6a02a8a2004-09-08 00:28:11 +00003577 /* return failure if at end of input */
vlmfa67ddc2004-06-03 03:38:44 +00003578 if (yychar == YYEOF)
vlm6a02a8a2004-09-08 00:28:11 +00003579 YYABORT;
vlmfa67ddc2004-06-03 03:38:44 +00003580
vlm6a02a8a2004-09-08 00:28:11 +00003581#if YYDEBUG != 0
3582 if (yydebug)
3583 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3584#endif
3585
vlmfa67ddc2004-06-03 03:38:44 +00003586 yychar = YYEMPTY;
3587 }
3588
vlm6a02a8a2004-09-08 00:28:11 +00003589 /* Else will try to reuse lookahead token
3590 after shifting the error token. */
vlmfa67ddc2004-06-03 03:38:44 +00003591
vlm6a02a8a2004-09-08 00:28:11 +00003592 yyerrstatus = 3; /* Each real token shifted decrements this */
vlmfa67ddc2004-06-03 03:38:44 +00003593
vlm6a02a8a2004-09-08 00:28:11 +00003594 goto yyerrhandle;
vlm80103492004-09-07 10:39:09 +00003595
vlm6a02a8a2004-09-08 00:28:11 +00003596yyerrdefault: /* current state does not do anything special for the error token. */
vlm80103492004-09-07 10:39:09 +00003597
vlm6a02a8a2004-09-08 00:28:11 +00003598#if 0
3599 /* This is wrong; only states that explicitly want error tokens
3600 should shift them. */
3601 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3602 if (yyn) goto yydefault;
vlm39e5ed72004-09-05 10:40:41 +00003603#endif
vlm6a02a8a2004-09-08 00:28:11 +00003604
3605yyerrpop: /* pop the current state because it cannot handle the error token */
3606
3607 if (yyssp == yyss) YYABORT;
3608 yyvsp--;
3609 yystate = *--yyssp;
3610#ifdef YYLSP_NEEDED
3611 yylsp--;
3612#endif
3613
3614#if YYDEBUG != 0
3615 if (yydebug)
3616 {
3617 short *ssp1 = yyss - 1;
3618 fprintf (stderr, "Error: state stack now");
3619 while (ssp1 != yyssp)
3620 fprintf (stderr, " %d", *++ssp1);
3621 fprintf (stderr, "\n");
vlm39e5ed72004-09-05 10:40:41 +00003622 }
vlm6a02a8a2004-09-08 00:28:11 +00003623#endif
3624
3625yyerrhandle:
3626
3627 yyn = yypact[yystate];
3628 if (yyn == YYFLAG)
3629 goto yyerrdefault;
3630
3631 yyn += YYTERROR;
3632 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3633 goto yyerrdefault;
3634
3635 yyn = yytable[yyn];
3636 if (yyn < 0)
3637 {
3638 if (yyn == YYFLAG)
3639 goto yyerrpop;
3640 yyn = -yyn;
3641 goto yyreduce;
3642 }
3643 else if (yyn == 0)
3644 goto yyerrpop;
vlmfa67ddc2004-06-03 03:38:44 +00003645
3646 if (yyn == YYFINAL)
3647 YYACCEPT;
3648
vlm6a02a8a2004-09-08 00:28:11 +00003649#if YYDEBUG != 0
3650 if (yydebug)
3651 fprintf(stderr, "Shifting error token, ");
3652#endif
vlmfa67ddc2004-06-03 03:38:44 +00003653
3654 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00003655#ifdef YYLSP_NEEDED
3656 *++yylsp = yylloc;
3657#endif
vlmfa67ddc2004-06-03 03:38:44 +00003658
3659 yystate = yyn;
3660 goto yynewstate;
3661
vlm6a02a8a2004-09-08 00:28:11 +00003662 yyacceptlab:
3663 /* YYACCEPT comes here. */
3664 if (yyfree_stacks)
3665 {
3666 free (yyss);
3667 free (yyvs);
3668#ifdef YYLSP_NEEDED
3669 free (yyls);
vlm044f7442004-09-04 04:49:21 +00003670#endif
vlm6a02a8a2004-09-08 00:28:11 +00003671 }
3672 return 0;
vlm80103492004-09-07 10:39:09 +00003673
vlm6a02a8a2004-09-08 00:28:11 +00003674 yyabortlab:
3675 /* YYABORT comes here. */
3676 if (yyfree_stacks)
3677 {
3678 free (yyss);
3679 free (yyvs);
3680#ifdef YYLSP_NEEDED
3681 free (yyls);
vlm80103492004-09-07 10:39:09 +00003682#endif
vlm6a02a8a2004-09-08 00:28:11 +00003683 }
3684 return 1;
vlmfa67ddc2004-06-03 03:38:44 +00003685}
vlme1e6ed82005-03-24 14:26:38 +00003686#line 2078 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00003687
3688
3689
3690/*
3691 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3692 */
3693static asn1p_value_t *
3694_convert_bitstring2binary(char *str, int base) {
3695 asn1p_value_t *val;
3696 int slen;
3697 int memlen;
3698 int baselen;
3699 int bits;
3700 uint8_t *binary_vector;
3701 uint8_t *bv_ptr;
3702 uint8_t cur_val;
3703
3704 assert(str);
3705 assert(str[0] == '\'');
3706
3707 switch(base) {
3708 case 'B':
3709 baselen = 1;
3710 break;
3711 case 'H':
3712 baselen = 4;
3713 break;
3714 default:
3715 assert(base == 'B' || base == 'H');
3716 errno = EINVAL;
3717 return NULL;
3718 }
3719
3720 slen = strlen(str);
3721 assert(str[slen - 1] == base);
3722 assert(str[slen - 2] == '\'');
3723
3724 memlen = slen / (8 / baselen); /* Conservative estimate */
3725
3726 bv_ptr = binary_vector = malloc(memlen + 1);
3727 if(bv_ptr == NULL)
3728 /* ENOMEM */
3729 return NULL;
3730
3731 cur_val = 0;
3732 bits = 0;
3733 while(*(++str) != '\'') {
3734 switch(baselen) {
3735 case 1:
3736 switch(*str) {
3737 case '1':
3738 cur_val |= 1 << (7 - (bits % 8));
3739 case '0':
3740 break;
3741 default:
3742 assert(!"_y UNREACH1");
3743 case ' ': case '\r': case '\n':
3744 continue;
3745 }
3746 break;
3747 case 4:
3748 switch(*str) {
3749 case '0': case '1': case '2': case '3': case '4':
3750 case '5': case '6': case '7': case '8': case '9':
3751 cur_val |= (*str - '0') << (4 - (bits % 8));
3752 break;
3753 case 'A': case 'B': case 'C':
3754 case 'D': case 'E': case 'F':
3755 cur_val |= ((*str - 'A') + 10)
3756 << (4 - (bits % 8));
3757 break;
3758 default:
3759 assert(!"_y UNREACH2");
3760 case ' ': case '\r': case '\n':
3761 continue;
3762 }
3763 break;
3764 }
3765
3766 bits += baselen;
3767 if((bits % 8) == 0) {
3768 *bv_ptr++ = cur_val;
3769 cur_val = 0;
3770 }
3771 }
3772
3773 *bv_ptr = cur_val;
3774 assert((bv_ptr - binary_vector) <= memlen);
3775
3776 val = asn1p_value_frombits(binary_vector, bits, 0);
3777 if(val == NULL) {
3778 free(binary_vector);
3779 }
3780
3781 return val;
3782}
3783
3784extern char *asn1p_text;
3785
3786int
3787yyerror(const char *msg) {
3788 fprintf(stderr,
3789 "ASN.1 grammar parse error "
3790 "near line %d (token \"%s\"): %s\n",
vlm39e5ed72004-09-05 10:40:41 +00003791 yylineno, asn1p_text, msg);
vlmfa67ddc2004-06-03 03:38:44 +00003792 return -1;
3793}
3794
3795