blob: 058a7c84904acd82a344a29af1509ff788cad073 [file] [log] [blame]
vlmfa67ddc2004-06-03 03:38:44 +00001
vlm6a02a8a2004-09-08 00:28:11 +00002/* A Bison parser, made from asn1p_y.y
3 by GNU Bison version 1.28 */
vlmfa67ddc2004-06-03 03:38:44 +00004
vlm6a02a8a2004-09-08 00:28:11 +00005#define YYBISON 1 /* Identify Bison output. */
vlmfa67ddc2004-06-03 03:38:44 +00006
7#define yyparse asn1p_parse
vlm6a02a8a2004-09-08 00:28:11 +00008#define yylex asn1p_lex
vlmfa67ddc2004-06-03 03:38:44 +00009#define yyerror asn1p_error
vlm6a02a8a2004-09-08 00:28:11 +000010#define yylval asn1p_lval
11#define yychar asn1p_char
vlmfa67ddc2004-06-03 03:38:44 +000012#define yydebug asn1p_debug
13#define yynerrs asn1p_nerrs
vlm6a02a8a2004-09-08 00:28:11 +000014#define TOK_PPEQ 257
15#define TOK_opaque 258
16#define TOK_bstring 259
17#define TOK_cstring 260
18#define TOK_hstring 261
19#define TOK_identifier 262
20#define TOK_number 263
vlm2c8c44d2005-03-24 16:22:35 +000021#define TOK_tuple 264
22#define TOK_quadruple 265
23#define TOK_number_negative 266
24#define TOK_typereference 267
25#define TOK_capitalreference 268
26#define TOK_typefieldreference 269
27#define TOK_valuefieldreference 270
28#define TOK_ABSENT 271
29#define TOK_ABSTRACT_SYNTAX 272
30#define TOK_ALL 273
31#define TOK_ANY 274
32#define TOK_APPLICATION 275
33#define TOK_AUTOMATIC 276
34#define TOK_BEGIN 277
35#define TOK_BIT 278
36#define TOK_BMPString 279
37#define TOK_BOOLEAN 280
38#define TOK_BY 281
39#define TOK_CHARACTER 282
40#define TOK_CHOICE 283
41#define TOK_CLASS 284
42#define TOK_COMPONENT 285
43#define TOK_COMPONENTS 286
44#define TOK_CONSTRAINED 287
45#define TOK_CONTAINING 288
46#define TOK_DEFAULT 289
47#define TOK_DEFINITIONS 290
48#define TOK_DEFINED 291
49#define TOK_EMBEDDED 292
50#define TOK_ENCODED 293
51#define TOK_ENCODING_CONTROL 294
52#define TOK_END 295
53#define TOK_ENUMERATED 296
54#define TOK_EXPLICIT 297
55#define TOK_EXPORTS 298
56#define TOK_EXTENSIBILITY 299
57#define TOK_EXTERNAL 300
58#define TOK_FALSE 301
59#define TOK_FROM 302
60#define TOK_GeneralizedTime 303
61#define TOK_GeneralString 304
62#define TOK_GraphicString 305
63#define TOK_IA5String 306
64#define TOK_IDENTIFIER 307
65#define TOK_IMPLICIT 308
66#define TOK_IMPLIED 309
67#define TOK_IMPORTS 310
68#define TOK_INCLUDES 311
69#define TOK_INSTANCE 312
70#define TOK_INSTRUCTIONS 313
71#define TOK_INTEGER 314
72#define TOK_ISO646String 315
73#define TOK_MAX 316
74#define TOK_MIN 317
75#define TOK_MINUS_INFINITY 318
76#define TOK_NULL 319
77#define TOK_NumericString 320
78#define TOK_OBJECT 321
79#define TOK_ObjectDescriptor 322
80#define TOK_OCTET 323
81#define TOK_OF 324
82#define TOK_OPTIONAL 325
83#define TOK_PATTERN 326
84#define TOK_PDV 327
85#define TOK_PLUS_INFINITY 328
86#define TOK_PRESENT 329
87#define TOK_PrintableString 330
88#define TOK_PRIVATE 331
89#define TOK_REAL 332
90#define TOK_RELATIVE_OID 333
91#define TOK_SEQUENCE 334
92#define TOK_SET 335
93#define TOK_SIZE 336
94#define TOK_STRING 337
95#define TOK_SYNTAX 338
96#define TOK_T61String 339
97#define TOK_TAGS 340
98#define TOK_TeletexString 341
99#define TOK_TRUE 342
100#define TOK_TYPE_IDENTIFIER 343
101#define TOK_UNIQUE 344
102#define TOK_UNIVERSAL 345
103#define TOK_UniversalString 346
104#define TOK_UTCTime 347
105#define TOK_UTF8String 348
106#define TOK_VideotexString 349
107#define TOK_VisibleString 350
108#define TOK_WITH 351
109#define TOK_EXCEPT 352
110#define TOK_INTERSECTION 353
111#define TOK_UNION 354
112#define TOK_TwoDots 355
113#define TOK_ThreeDots 356
vlmfa67ddc2004-06-03 03:38:44 +0000114
115#line 1 "asn1p_y.y"
116
117
118#include <stdlib.h>
119#include <stdio.h>
120#include <string.h>
121#include <errno.h>
122#include <assert.h>
123
124#include "asn1parser.h"
125
126#define YYPARSE_PARAM param
vlm03630c52005-06-07 21:43:32 +0000127#define YYPARSE_PARAM_TYPE void **
vlmfa67ddc2004-06-03 03:38:44 +0000128#define YYERROR_VERBOSE
129
130int yylex(void);
131int yyerror(const char *msg);
vlm03630c52005-06-07 21:43:32 +0000132#ifdef YYBYACC
133int yyparse(void **param); /* byacc does not produce a prototype */
134#endif
vlmfa67ddc2004-06-03 03:38:44 +0000135void asn1p_lexer_hack_push_opaque_state(void);
136void asn1p_lexer_hack_enable_with_syntax(void);
vlm9283dbe2004-08-18 04:59:12 +0000137void asn1p_lexer_hack_push_encoding_control(void);
vlmfa67ddc2004-06-03 03:38:44 +0000138#define yylineno asn1p_lineno
139extern int asn1p_lineno;
140
vlm931aeed2005-08-12 10:09:10 +0000141/*
vlm177a5b62005-09-05 05:17:57 +0000142 * Process directives as <ASN1C:RepresentAsPointer>
vlm066dc102005-08-22 12:23:54 +0000143 */
144extern int asn1p_as_pointer;
vlm066dc102005-08-22 12:23:54 +0000145
146/*
vlm931aeed2005-08-12 10:09:10 +0000147 * This temporary variable is used to solve the shortcomings of 1-lookahead
148 * parser.
149 */
150static struct AssignedIdentifier *saved_aid;
vlmfa67ddc2004-06-03 03:38:44 +0000151
vlm5d89c3d2005-08-13 09:07:11 +0000152static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
153static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
vlmfa67ddc2004-06-03 03:38:44 +0000154
vlm931aeed2005-08-12 10:09:10 +0000155#define checkmem(ptr) do { \
156 if(!(ptr)) \
157 return yyerror("Memory failure"); \
vlmfa67ddc2004-06-03 03:38:44 +0000158 } while(0)
159
vlm931aeed2005-08-12 10:09:10 +0000160#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
161 if(arg1->type != constr_type) { \
162 int __ret; \
163 root = asn1p_constraint_new(yylineno); \
164 checkmem(root); \
165 root->type = constr_type; \
166 __ret = asn1p_constraint_insert(root, \
167 arg1); \
168 checkmem(__ret == 0); \
169 } else { \
170 root = arg1; \
171 } \
172 if(arg2) { \
173 int __ret \
174 = asn1p_constraint_insert(root, arg2); \
175 checkmem(__ret == 0); \
176 } \
vlmfa67ddc2004-06-03 03:38:44 +0000177 } while(0)
178
179
vlm177a5b62005-09-05 05:17:57 +0000180#line 72 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +0000181typedef union {
182 asn1p_t *a_grammar;
183 asn1p_module_flags_e a_module_flags;
184 asn1p_module_t *a_module;
185 asn1p_expr_type_e a_type; /* ASN.1 Type */
186 asn1p_expr_t *a_expr; /* Constructed collection */
187 asn1p_constraint_t *a_constr; /* Constraint */
188 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
189 asn1p_xports_t *a_xports; /* IMports/EXports */
vlm931aeed2005-08-12 10:09:10 +0000190 struct AssignedIdentifier a_aid; /* Assigned Identifier */
vlmfa67ddc2004-06-03 03:38:44 +0000191 asn1p_oid_t *a_oid; /* Object Identifier */
192 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
193 struct asn1p_type_tag_s a_tag; /* A tag */
194 asn1p_ref_t *a_ref; /* Reference to custom type */
195 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
196 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
197 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
198 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
199 struct asn1p_param_s a_parg; /* A parameter argument */
200 asn1p_paramlist_t *a_plist; /* A pargs list */
vlmc94e28f2004-09-15 11:59:51 +0000201 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
vlmfa67ddc2004-06-03 03:38:44 +0000202 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
vlmec6acd42004-09-29 13:18:09 +0000203 asn1c_integer_t a_int;
vlmfa67ddc2004-06-03 03:38:44 +0000204 char *tv_str;
205 struct {
206 char *buf;
207 int len;
208 } tv_opaque;
209 struct {
210 char *name;
211 struct asn1p_type_tag_s tag;
212 } tv_nametag;
vlm6a02a8a2004-09-08 00:28:11 +0000213} YYSTYPE;
214#include <stdio.h>
215
216#ifndef __cplusplus
217#ifndef __STDC__
218#define const
219#endif
vlmfa67ddc2004-06-03 03:38:44 +0000220#endif
221
222
223
vlm177a5b62005-09-05 05:17:57 +0000224#define YYFINAL 431
vlm6a02a8a2004-09-08 00:28:11 +0000225#define YYFLAG -32768
vlm2c8c44d2005-03-24 16:22:35 +0000226#define YYNTBASE 118
vlmfa67ddc2004-06-03 03:38:44 +0000227
vlm177a5b62005-09-05 05:17:57 +0000228#define YYTRANSLATE(x) ((unsigned)(x) <= 356 ? yytranslate[x] : 223)
vlmfa67ddc2004-06-03 03:38:44 +0000229
vlm6a02a8a2004-09-08 00:28:11 +0000230static const char yytranslate[] = { 0,
231 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
232 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
233 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2c8c44d2005-03-24 16:22:35 +0000234 2, 2, 112, 2, 2, 2, 2, 2, 2, 107,
235 108, 2, 2, 110, 2, 113, 2, 2, 2, 2,
236 2, 2, 2, 2, 2, 2, 2, 111, 109, 114,
237 2, 2, 2, 115, 2, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000238 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
239 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2c8c44d2005-03-24 16:22:35 +0000240 116, 2, 117, 99, 2, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000241 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
242 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlm2c8c44d2005-03-24 16:22:35 +0000243 2, 2, 105, 101, 106, 2, 2, 2, 2, 2,
vlm6a02a8a2004-09-08 00:28:11 +0000244 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
245 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
246 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
247 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
248 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
249 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
250 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
251 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
252 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
253 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
254 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
255 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
256 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
257 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
258 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
259 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
260 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
261 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
262 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
263 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
264 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
265 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
vlm2c8c44d2005-03-24 16:22:35 +0000266 97, 98, 100, 102, 103, 104
vlm6a02a8a2004-09-08 00:28:11 +0000267};
vlmfa67ddc2004-06-03 03:38:44 +0000268
vlm6a02a8a2004-09-08 00:28:11 +0000269#if YYDEBUG != 0
270static const short yyprhs[] = { 0,
271 0, 2, 4, 7, 16, 17, 19, 23, 26, 28,
272 31, 33, 38, 40, 41, 43, 45, 48, 51, 54,
273 57, 60, 63, 64, 66, 68, 71, 73, 75, 77,
vlm931aeed2005-08-12 10:09:10 +0000274 79, 81, 82, 86, 88, 92, 95, 97, 100, 101,
275 103, 108, 110, 114, 116, 120, 122, 126, 130, 133,
276 135, 139, 141, 145, 147, 148, 155, 157, 159, 164,
277 168, 172, 179, 181, 185, 187, 191, 195, 199, 201,
vlm177a5b62005-09-05 05:17:57 +0000278 205, 207, 209, 210, 212, 214, 218, 222, 225, 229,
vlm5d89c3d2005-08-13 09:07:11 +0000279 231, 233, 237, 240, 242, 244, 250, 251, 253, 255,
280 259, 262, 267, 272, 273, 275, 276, 283, 285, 288,
vlm177a5b62005-09-05 05:17:57 +0000281 290, 292, 294, 298, 302, 306, 307, 310, 312, 317,
282 322, 327, 334, 341, 343, 348, 353, 355, 359, 361,
283 365, 369, 373, 375, 379, 381, 385, 387, 389, 391,
284 393, 398, 402, 403, 407, 409, 411, 413, 415, 417,
285 419, 421, 423, 425, 429, 431, 433, 435, 437, 440,
286 442, 444, 446, 448, 451, 454, 456, 458, 461, 464,
287 466, 468, 470, 472, 474, 477, 479, 482, 484, 486,
vlm5d89c3d2005-08-13 09:07:11 +0000288 488, 490, 492, 494, 496, 498, 500, 502, 504, 506,
vlm177a5b62005-09-05 05:17:57 +0000289 508, 510, 512, 514, 516, 518, 520, 521, 523, 525,
290 530, 534, 539, 541, 545, 551, 553, 557, 561, 565,
291 569, 574, 578, 580, 582, 586, 590, 594, 598, 600,
292 602, 603, 609, 611, 614, 617, 621, 623, 625, 627,
293 629, 631, 633, 635, 637, 641, 647, 649, 653, 655,
294 659, 660, 662, 664, 666, 668, 670, 672, 676, 681,
295 683, 687, 690, 694, 696, 700, 701, 703, 705, 708,
296 711, 715, 717, 721, 723, 728, 733, 735, 737, 739,
297 741, 742, 744, 747, 752, 753, 755, 757, 759, 760,
298 762, 764, 766, 768, 770, 771, 773
vlm6a02a8a2004-09-08 00:28:11 +0000299};
vlmfa67ddc2004-06-03 03:38:44 +0000300
vlm2c8c44d2005-03-24 16:22:35 +0000301static const short yyrhs[] = { 119,
vlm177a5b62005-09-05 05:17:57 +0000302 0, 120, 0, 119, 120, 0, 219, 121, 36, 125,
vlm2c8c44d2005-03-24 16:22:35 +0000303 3, 23, 128, 41, 0, 0, 122, 0, 105, 123,
304 106, 0, 105, 106, 0, 124, 0, 123, 124, 0,
vlm177a5b62005-09-05 05:17:57 +0000305 222, 0, 222, 107, 9, 108, 0, 9, 0, 0,
vlm2c8c44d2005-03-24 16:22:35 +0000306 126, 0, 127, 0, 126, 127, 0, 43, 86, 0,
307 54, 86, 0, 22, 86, 0, 45, 55, 0, 14,
308 59, 0, 0, 129, 0, 130, 0, 129, 130, 0,
vlm177a5b62005-09-05 05:17:57 +0000309 132, 0, 138, 0, 144, 0, 173, 0, 141, 0,
310 0, 40, 14, 131, 0, 182, 0, 56, 133, 109,
vlm931aeed2005-08-12 10:09:10 +0000311 0, 56, 48, 0, 135, 0, 133, 135, 0, 0,
vlm177a5b62005-09-05 05:17:57 +0000312 122, 0, 136, 48, 219, 134, 0, 137, 0, 136,
313 110, 137, 0, 219, 0, 219, 105, 106, 0, 222,
vlm931aeed2005-08-12 10:09:10 +0000314 0, 44, 139, 109, 0, 44, 19, 109, 0, 44,
vlm177a5b62005-09-05 05:17:57 +0000315 109, 0, 140, 0, 139, 110, 140, 0, 219, 0,
316 219, 105, 106, 0, 222, 0, 0, 219, 143, 3,
317 105, 142, 178, 0, 168, 0, 179, 0, 219, 3,
318 214, 89, 0, 219, 3, 164, 0, 219, 3, 154,
319 0, 219, 105, 145, 106, 3, 164, 0, 146, 0,
320 145, 110, 146, 0, 219, 0, 219, 111, 222, 0,
321 219, 111, 219, 0, 179, 111, 222, 0, 148, 0,
322 147, 110, 148, 0, 164, 0, 222, 0, 0, 150,
323 0, 151, 0, 150, 110, 151, 0, 222, 164, 208,
324 0, 164, 208, 0, 32, 70, 164, 0, 163, 0,
325 153, 0, 152, 110, 153, 0, 222, 164, 0, 163,
vlm5d89c3d2005-08-13 09:07:11 +0000326 0, 164, 0, 30, 105, 156, 106, 158, 0, 0,
vlm177a5b62005-09-05 05:17:57 +0000327 90, 0, 157, 0, 156, 110, 157, 0, 171, 208,
328 0, 171, 164, 155, 208, 0, 171, 171, 155, 208,
vlm5d89c3d2005-08-13 09:07:11 +0000329 0, 0, 159, 0, 0, 97, 84, 105, 160, 161,
vlm177a5b62005-09-05 05:17:57 +0000330 106, 0, 162, 0, 161, 162, 0, 4, 0, 171,
331 0, 104, 0, 104, 112, 176, 0, 104, 112, 213,
332 0, 214, 166, 186, 0, 0, 165, 167, 0, 181,
333 0, 29, 105, 152, 106, 0, 80, 105, 149, 106,
334 0, 81, 105, 149, 106, 0, 80, 186, 70, 221,
335 214, 166, 0, 81, 186, 70, 221, 214, 166, 0,
336 20, 0, 20, 37, 27, 222, 0, 219, 105, 147,
337 106, 0, 168, 0, 58, 70, 168, 0, 13, 0,
338 13, 113, 219, 0, 220, 113, 219, 0, 13, 113,
339 222, 0, 220, 0, 220, 113, 169, 0, 170, 0,
340 169, 113, 170, 0, 172, 0, 172, 0, 15, 0,
341 16, 0, 222, 143, 3, 174, 0, 222, 111, 174,
342 0, 0, 105, 175, 178, 0, 65, 0, 47, 0,
343 88, 0, 5, 0, 7, 0, 177, 0, 213, 0,
344 176, 0, 222, 0, 219, 113, 222, 0, 6, 0,
345 10, 0, 11, 0, 4, 0, 178, 4, 0, 26,
346 0, 65, 0, 78, 0, 180, 0, 69, 83, 0,
347 67, 53, 0, 79, 0, 46, 0, 38, 73, 0,
348 28, 83, 0, 93, 0, 49, 0, 182, 0, 60,
349 0, 42, 0, 24, 83, 0, 179, 0, 180, 210,
350 0, 25, 0, 50, 0, 51, 0, 52, 0, 61,
351 0, 66, 0, 76, 0, 85, 0, 87, 0, 92,
352 0, 94, 0, 95, 0, 96, 0, 68, 0, 101,
353 0, 102, 0, 99, 0, 100, 0, 98, 0, 0,
354 187, 0, 188, 0, 82, 107, 189, 108, 0, 107,
355 189, 108, 0, 188, 107, 189, 108, 0, 190, 0,
356 190, 110, 104, 0, 190, 110, 104, 110, 190, 0,
357 191, 0, 19, 98, 191, 0, 190, 183, 191, 0,
358 190, 184, 191, 0, 191, 185, 191, 0, 194, 107,
359 189, 108, 0, 107, 189, 108, 0, 195, 0, 196,
360 0, 195, 193, 195, 0, 63, 193, 195, 0, 195,
361 193, 62, 0, 63, 193, 62, 0, 202, 0, 197,
362 0, 0, 33, 27, 105, 192, 178, 0, 103, 0,
363 103, 114, 0, 114, 103, 0, 114, 103, 114, 0,
364 82, 0, 48, 0, 47, 0, 88, 0, 213, 0,
365 177, 0, 222, 0, 219, 0, 97, 31, 188, 0,
366 97, 32, 105, 198, 106, 0, 199, 0, 198, 110,
367 199, 0, 104, 0, 222, 186, 200, 0, 0, 201,
368 0, 75, 0, 17, 0, 71, 0, 203, 0, 204,
369 0, 105, 219, 106, 0, 203, 105, 205, 106, 0,
370 206, 0, 205, 110, 206, 0, 115, 207, 0, 115,
371 113, 207, 0, 222, 0, 207, 113, 222, 0, 0,
372 209, 0, 71, 0, 35, 174, 0, 105, 106, 0,
373 105, 211, 106, 0, 212, 0, 211, 110, 212, 0,
374 222, 0, 222, 107, 213, 108, 0, 222, 107, 176,
375 108, 0, 213, 0, 104, 0, 9, 0, 12, 0,
376 0, 215, 0, 216, 218, 0, 116, 217, 9, 117,
377 0, 0, 91, 0, 21, 0, 77, 0, 0, 54,
378 0, 43, 0, 13, 0, 14, 0, 14, 0, 0,
379 222, 0, 8, 0
vlm6a02a8a2004-09-08 00:28:11 +0000380};
vlmfa67ddc2004-06-03 03:38:44 +0000381
382#endif
383
vlm6a02a8a2004-09-08 00:28:11 +0000384#if YYDEBUG != 0
385static const short yyrline[] = { 0,
vlm177a5b62005-09-05 05:17:57 +0000386 320, 326, 332, 348, 373, 375, 378, 382, 387, 394,
387 402, 407, 411, 420, 422, 430, 434, 442, 446, 449,
388 452, 456, 476, 478, 486, 490, 522, 526, 535, 542,
vlm1ac75e72005-11-26 11:21:55 +0000389 555, 562, 564, 576, 588, 599, 604, 610, 616, 618,
390 621, 632, 638, 644, 651, 657, 665, 669, 672, 679,
391 685, 691, 698, 704, 713, 715, 724, 732, 746, 758,
392 764, 780, 789, 799, 809, 814, 821, 828, 838, 844,
393 850, 854, 877, 879, 881, 887, 893, 901, 907, 914,
394 919, 925, 931, 937, 940, 946, 956, 958, 961, 969,
395 975, 984, 990, 1007, 1009, 1014, 1018, 1023, 1028, 1034,
396 1038, 1049, 1058, 1067, 1078, 1100, 1107, 1126, 1130, 1136,
397 1142, 1148, 1158, 1168, 1174, 1188, 1212, 1219, 1233, 1242,
398 1252, 1262, 1272, 1280, 1301, 1310, 1319, 1320, 1322, 1329,
399 1341, 1351, 1359, 1359, 1364, 1369, 1374, 1379, 1383, 1387,
400 1390, 1393, 1398, 1410, 1427, 1432, 1437, 1470, 1480, 1494,
401 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505,
402 1506, 1507, 1513, 1515, 1516, 1519, 1526, 1538, 1540, 1544,
403 1548, 1549, 1550, 1551, 1552, 1556, 1557, 1558, 1559, 1563,
404 1564, 1571, 1571, 1572, 1572, 1573, 1575, 1577, 1582, 1586,
405 1595, 1599, 1604, 1608, 1614, 1624, 1628, 1631, 1634, 1637,
406 1642, 1651, 1659, 1665, 1671, 1678, 1686, 1694, 1703, 1706,
407 1709, 1710, 1720, 1722, 1723, 1724, 1727, 1731, 1736, 1742,
408 1747, 1750, 1753, 1766, 1780, 1784, 1789, 1793, 1798, 1805,
409 1818, 1820, 1823, 1827, 1830, 1835, 1839, 1847, 1862, 1868,
410 1875, 1888, 1900, 1915, 1919, 1936, 1941, 1944, 1949, 1971,
411 1976, 1981, 1987, 1993, 2001, 2009, 2017, 2024, 2034, 2039,
412 2069, 2071, 2074, 2081, 2087, 2089, 2090, 2091, 2094, 2096,
413 2097, 2100, 2105, 2112, 2119, 2121, 2126
vlm6a02a8a2004-09-08 00:28:11 +0000414};
415#endif
416
417
418#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
419
420static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
421"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
vlm2c8c44d2005-03-24 16:22:35 +0000422"TOK_tuple","TOK_quadruple","TOK_number_negative","TOK_typereference","TOK_capitalreference",
423"TOK_typefieldreference","TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX",
424"TOK_ALL","TOK_ANY","TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT",
425"TOK_BMPString","TOK_BOOLEAN","TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS",
426"TOK_COMPONENT","TOK_COMPONENTS","TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT",
427"TOK_DEFINITIONS","TOK_DEFINED","TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL",
428"TOK_END","TOK_ENUMERATED","TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY",
429"TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString",
430"TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED",
431"TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INSTRUCTIONS","TOK_INTEGER",
432"TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL","TOK_NumericString",
433"TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET","TOK_OF","TOK_OPTIONAL","TOK_PATTERN",
434"TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString","TOK_PRIVATE",
435"TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE","TOK_STRING",
436"TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE","TOK_TYPE_IDENTIFIER",
437"TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime","TOK_UTF8String",
438"TOK_VideotexString","TOK_VisibleString","TOK_WITH","TOK_EXCEPT","'^'","TOK_INTERSECTION",
439"'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots","'{'","'}'","'('","')'","';'",
440"','","':'","'!'","'.'","'<'","'@'","'['","']'","ParsedGrammar","ModuleList",
441"ModuleSpecification","optObjectIdentifier","ObjectIdentifier","ObjectIdentifierBody",
442"ObjectIdentifierElement","optModuleSpecificationFlags","ModuleSpecificationFlags",
443"ModuleSpecificationFlag","optModuleSpecificationBody","ModuleSpecificationBody",
vlm931aeed2005-08-12 10:09:10 +0000444"ModuleSpecificationElement","@1","ImportsDefinition","ImportsBundleSet","AssignedIdentifier",
445"ImportsBundle","ImportsList","ImportsElement","ExportsDefinition","ExportsBody",
446"ExportsElement","ValueSetDefinition","@2","DefinedTypeRef","DataTypeReference",
447"ParameterArgumentList","ParameterArgumentName","ActualParameterList","ActualParameter",
448"optComponentTypeLists","ComponentTypeLists","ComponentType","AlternativeTypeLists",
449"AlternativeType","ClassDeclaration","optUnique","ClassFieldList","ClassField",
450"optWithSyntax","WithSyntax","@3","WithSyntaxFormat","WithSyntaxFormatToken",
vlm177a5b62005-09-05 05:17:57 +0000451"ExtensionAndException","Type","NSTD_IndirectMarker","TypeDeclaration","TypeDeclarationSet",
452"ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement",
453"ClassFieldIdentifier","ClassFieldName","ValueDefinition","Value","@4","DefinedValue",
vlm066dc102005-08-22 12:23:54 +0000454"RestrictedCharacterStringValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
455"BasicType","BasicString","Union","Intersection","Except","optConstraints","Constraints",
456"SetOfConstraints","ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement",
vlm177a5b62005-09-05 05:17:57 +0000457"@5","ConstraintRangeSpec","ConstraintSpec","SingleValue","ContainedSubtype",
vlm066dc102005-08-22 12:23:54 +0000458"InnerTypeConstraint","WithComponentsList","WithComponentsElement","optPresenceConstraint",
459"PresenceConstraint","TableConstraint","SimpleTableConstraint","ComponentRelationConstraint",
460"AtNotationList","AtNotationElement","ComponentIdList","optMarker","Marker",
461"UniverationDefinition","UniverationList","UniverationElement","SignedNumber",
462"optTag","Tag","TagTypeValue","TagClass","TagPlicit","TypeRefName","ObjectClassReference",
463"optIdentifier","Identifier", NULL
vlm6a02a8a2004-09-08 00:28:11 +0000464};
465#endif
466
467static const short yyr1[] = { 0,
vlm2c8c44d2005-03-24 16:22:35 +0000468 118, 119, 119, 120, 121, 121, 122, 122, 123, 123,
469 124, 124, 124, 125, 125, 126, 126, 127, 127, 127,
470 127, 127, 128, 128, 129, 129, 130, 130, 130, 130,
vlm931aeed2005-08-12 10:09:10 +0000471 130, 131, 130, 130, 132, 132, 133, 133, 134, 134,
472 135, 136, 136, 137, 137, 137, 138, 138, 138, 139,
473 139, 140, 140, 140, 142, 141, 143, 143, 144, 144,
474 144, 144, 145, 145, 146, 146, 146, 146, 147, 147,
vlm5d89c3d2005-08-13 09:07:11 +0000475 148, 148, 149, 149, 150, 150, 151, 151, 151, 151,
476 152, 152, 153, 153, 153, 154, 155, 155, 156, 156,
477 157, 157, 157, 158, 158, 160, 159, 161, 161, 162,
vlm177a5b62005-09-05 05:17:57 +0000478 162, 163, 163, 163, 164, 165, 166, 167, 167, 167,
479 167, 167, 167, 167, 167, 167, 167, 167, 168, 168,
480 168, 168, 168, 168, 169, 169, 170, 171, 172, 172,
481 173, 174, 175, 174, 174, 174, 174, 174, 174, 174,
482 174, 174, 176, 176, 177, 177, 177, 178, 178, 179,
483 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
484 179, 179, 180, 180, 180, 181, 181, 182, 182, 182,
485 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
486 182, 183, 183, 184, 184, 185, 186, 186, 187, 187,
487 188, 188, 189, 189, 189, 190, 190, 190, 190, 190,
488 191, 191, 191, 191, 191, 191, 191, 191, 191, 191,
489 192, 191, 193, 193, 193, 193, 194, 194, 195, 195,
490 195, 195, 195, 196, 197, 197, 198, 198, 199, 199,
491 200, 200, 201, 201, 201, 202, 202, 203, 204, 205,
492 205, 206, 206, 207, 207, 208, 208, 209, 209, 210,
493 210, 211, 211, 212, 212, 212, 212, 212, 213, 213,
494 214, 214, 215, 216, 217, 217, 217, 217, 218, 218,
495 218, 219, 219, 220, 221, 221, 222
vlm6a02a8a2004-09-08 00:28:11 +0000496};
497
498static const short yyr2[] = { 0,
499 1, 1, 2, 8, 0, 1, 3, 2, 1, 2,
500 1, 4, 1, 0, 1, 1, 2, 2, 2, 2,
501 2, 2, 0, 1, 1, 2, 1, 1, 1, 1,
vlm931aeed2005-08-12 10:09:10 +0000502 1, 0, 3, 1, 3, 2, 1, 2, 0, 1,
503 4, 1, 3, 1, 3, 1, 3, 3, 2, 1,
504 3, 1, 3, 1, 0, 6, 1, 1, 4, 3,
505 3, 6, 1, 3, 1, 3, 3, 3, 1, 3,
vlm177a5b62005-09-05 05:17:57 +0000506 1, 1, 0, 1, 1, 3, 3, 2, 3, 1,
vlm5d89c3d2005-08-13 09:07:11 +0000507 1, 3, 2, 1, 1, 5, 0, 1, 1, 3,
508 2, 4, 4, 0, 1, 0, 6, 1, 2, 1,
vlm177a5b62005-09-05 05:17:57 +0000509 1, 1, 3, 3, 3, 0, 2, 1, 4, 4,
510 4, 6, 6, 1, 4, 4, 1, 3, 1, 3,
511 3, 3, 1, 3, 1, 3, 1, 1, 1, 1,
512 4, 3, 0, 3, 1, 1, 1, 1, 1, 1,
513 1, 1, 1, 3, 1, 1, 1, 1, 2, 1,
514 1, 1, 1, 2, 2, 1, 1, 2, 2, 1,
515 1, 1, 1, 1, 2, 1, 2, 1, 1, 1,
vlm6a02a8a2004-09-08 00:28:11 +0000516 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
vlm177a5b62005-09-05 05:17:57 +0000517 1, 1, 1, 1, 1, 1, 0, 1, 1, 4,
518 3, 4, 1, 3, 5, 1, 3, 3, 3, 3,
519 4, 3, 1, 1, 3, 3, 3, 3, 1, 1,
520 0, 5, 1, 2, 2, 3, 1, 1, 1, 1,
521 1, 1, 1, 1, 3, 5, 1, 3, 1, 3,
522 0, 1, 1, 1, 1, 1, 1, 3, 4, 1,
523 3, 2, 3, 1, 3, 0, 1, 1, 2, 2,
524 3, 1, 3, 1, 4, 4, 1, 1, 1, 1,
525 0, 1, 2, 4, 0, 1, 1, 1, 0, 1,
526 1, 1, 1, 1, 0, 1, 1
vlm6a02a8a2004-09-08 00:28:11 +0000527};
528
529static const short yydefact[] = { 0,
vlm177a5b62005-09-05 05:17:57 +0000530 272, 273, 1, 2, 5, 3, 0, 0, 6, 277,
vlm6a02a8a2004-09-08 00:28:11 +0000531 13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
532 0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
vlm177a5b62005-09-05 05:17:57 +0000533 18, 21, 19, 0, 17, 12, 23, 168, 0, 0,
534 169, 170, 171, 0, 172, 173, 181, 174, 175, 176,
535 177, 178, 179, 180, 0, 24, 25, 27, 28, 31,
vlm931aeed2005-08-12 10:09:10 +0000536 29, 30, 34, 0, 0, 32, 0, 49, 0, 50,
537 52, 54, 36, 0, 37, 0, 42, 44, 46, 4,
vlm177a5b62005-09-05 05:17:57 +0000538 26, 261, 119, 274, 0, 150, 0, 0, 164, 157,
539 161, 163, 151, 0, 0, 152, 156, 160, 0, 0,
540 57, 58, 153, 162, 123, 0, 33, 48, 47, 0,
541 0, 35, 38, 0, 0, 0, 0, 265, 61, 60,
542 106, 262, 269, 0, 165, 159, 158, 155, 154, 0,
vlm931aeed2005-08-12 10:09:10 +0000543 63, 0, 65, 0, 0, 0, 51, 53, 39, 43,
vlm177a5b62005-09-05 05:17:57 +0000544 45, 0, 267, 268, 266, 0, 59, 0, 187, 271,
545 270, 263, 120, 122, 0, 0, 0, 0, 55, 129,
546 130, 124, 125, 127, 121, 138, 145, 139, 259, 146,
547 147, 260, 136, 135, 137, 133, 131, 142, 140, 141,
548 0, 143, 40, 41, 0, 89, 261, 128, 0, 119,
549 274, 114, 0, 0, 187, 187, 107, 117, 166, 153,
550 108, 0, 0, 0, 105, 188, 189, 261, 64, 68,
vlm066dc102005-08-22 12:23:54 +0000551 67, 66, 0, 0, 0, 0, 0, 94, 0, 0,
vlm177a5b62005-09-05 05:17:57 +0000552 248, 87, 87, 91, 247, 106, 264, 0, 261, 0,
553 261, 0, 261, 0, 0, 167, 261, 0, 0, 0,
554 219, 218, 0, 217, 220, 0, 0, 0, 222, 0,
555 193, 196, 0, 203, 204, 210, 209, 236, 237, 221,
556 224, 223, 0, 62, 148, 56, 126, 134, 144, 132,
557 0, 86, 95, 90, 249, 88, 246, 246, 0, 102,
558 0, 81, 84, 85, 261, 118, 0, 0, 74, 75,
559 80, 246, 261, 275, 0, 275, 258, 250, 0, 252,
560 257, 254, 0, 69, 71, 72, 0, 0, 0, 213,
561 0, 0, 0, 0, 0, 0, 191, 184, 185, 182,
562 183, 0, 0, 0, 186, 0, 0, 0, 0, 0,
563 149, 0, 92, 93, 115, 0, 109, 261, 83, 261,
564 110, 261, 78, 246, 261, 276, 111, 261, 251, 0,
565 0, 116, 261, 190, 197, 211, 214, 215, 208, 206,
566 225, 0, 238, 202, 194, 198, 199, 200, 0, 207,
567 205, 0, 0, 240, 192, 96, 103, 104, 143, 82,
568 79, 76, 77, 106, 106, 253, 0, 0, 70, 0,
569 216, 229, 0, 227, 187, 0, 201, 0, 242, 244,
570 239, 0, 0, 112, 113, 256, 255, 212, 226, 0,
571 231, 195, 243, 0, 241, 100, 0, 98, 101, 228,
572 234, 235, 233, 230, 232, 245, 97, 99, 0, 0,
573 0
vlm6a02a8a2004-09-08 00:28:11 +0000574};
575
vlm177a5b62005-09-05 05:17:57 +0000576static const short yydefgoto[] = { 429,
vlm6a02a8a2004-09-08 00:28:11 +0000577 3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
vlm066dc102005-08-22 12:23:54 +0000578 56, 57, 107, 58, 74, 184, 75, 76, 77, 59,
vlm177a5b62005-09-05 05:17:57 +0000579 69, 70, 60, 213, 100, 61, 130, 131, 303, 304,
580 288, 289, 290, 281, 282, 119, 277, 185, 186, 272,
581 273, 403, 417, 418, 291, 292, 148, 149, 197, 101,
582 162, 163, 187, 188, 62, 177, 215, 178, 249, 266,
583 102, 103, 201, 104, 323, 324, 326, 205, 206, 207,
584 250, 251, 252, 390, 312, 253, 254, 255, 256, 393,
585 394, 424, 425, 257, 258, 259, 373, 374, 399, 224,
586 225, 236, 299, 300, 260, 226, 122, 123, 146, 152,
587 261, 105, 345, 262
vlm6a02a8a2004-09-08 00:28:11 +0000588};
589
vlm177a5b62005-09-05 05:17:57 +0000590static const short yypact[] = { 9,
591-32768,-32768, 9,-32768, -76,-32768, 47, 15,-32768,-32768,
592-32768,-32768, 55,-32768, -24, 158,-32768,-32768, 130, 95,
593 81, 97, 162, 128, 228, 158,-32768, 141,-32768,-32768,
594-32768,-32768,-32768, 213,-32768,-32768, 419,-32768, 224, 39,
595-32768,-32768,-32768, 157,-32768,-32768,-32768,-32768,-32768,-32768,
596-32768,-32768,-32768,-32768, 211, 419,-32768,-32768,-32768,-32768,
597-32768,-32768,-32768, 344, 571,-32768, 151,-32768, 79,-32768,
598 164,-32768,-32768, 46,-32768, -36,-32768, 183,-32768,-32768,
599-32768, -11, 173,-32768, 229,-32768, 235, 249,-32768,-32768,
600-32768,-32768,-32768, 270, 241,-32768,-32768,-32768, 646, 322,
601-32768,-32768,-32768,-32768, 214, 323,-32768,-32768,-32768, 168,
602 226,-32768,-32768, 9, 168, 234, 225, 4,-32768,-32768,
603 250,-32768, -22, 168,-32768,-32768,-32768,-32768,-32768, 96,
604-32768, 230, 237, 240, 295, 185,-32768,-32768, -76,-32768,
605-32768, 269,-32768,-32768,-32768, 333,-32768, 496, 0,-32768,
606-32768,-32768,-32768,-32768, 347, 646, 343, 168,-32768,-32768,
607-32768, 243,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
vlme1e6ed82005-03-24 14:26:38 +0000608-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
vlm177a5b62005-09-05 05:17:57 +0000609 246, 242,-32768,-32768, 105,-32768, 63,-32768, 244, 73,
610 255, 317, 257, 293, -34, 51,-32768,-32768,-32768, 259,
611-32768, 261, 260, 80,-32768,-32768, 264, 258,-32768,-32768,
612-32768,-32768, 369, 269, 369, 343, 185, 279, 269, 185,
613-32768, 288, 288,-32768,-32768,-32768,-32768, 350, 5, 233,
614 8, 309, 8, 310, 34,-32768, 6, 80, 283, 356,
615-32768,-32768, 27,-32768,-32768, 271, 9, 80,-32768, 276,
616 181, 289, 278, 27,-32768,-32768,-32768, 284,-32768,-32768,
617-32768,-32768, 80,-32768,-32768, 384,-32768, 384,-32768,-32768,
618 308,-32768,-32768,-32768,-32768,-32768, -9, -9, 343, 285,
619 117,-32768,-32768,-32768, 258,-32768, 328, 294, 291,-32768,
620-32768, -9, 258, 343, 296, 343,-32768,-32768, 119,-32768,
621-32768, 299, 152,-32768,-32768,-32768, 300, 231, 311, 301,
622 314, 245, 307, 313, 315, 316,-32768,-32768,-32768,-32768,
623-32768, 321, 231, 231,-32768, 231, 80, 287, 304, 318,
624-32768, 325,-32768,-32768,-32768, 292,-32768, 5,-32768, 258,
625-32768, 2,-32768, -9, 258,-32768,-32768, 258,-32768, 60,
626 292,-32768, 6,-32768,-32768,-32768,-32768, 320,-32768,-32768,
627 264, 31,-32768,-32768, 331,-32768,-32768,-32768, 327,-32768,
628-32768, 10, 160,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
629-32768,-32768,-32768,-32768,-32768,-32768, 334, 335,-32768, 369,
630-32768,-32768, 161,-32768, 0, 80,-32768, 343, 286,-32768,
631-32768, 304, 159,-32768,-32768,-32768,-32768, 384,-32768, 31,
632 129, 215, 286, 343,-32768,-32768, 20,-32768,-32768,-32768,
633-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 428, 445,
634-32768
vlm6a02a8a2004-09-08 00:28:11 +0000635};
636
637static const short yypgoto[] = {-32768,
vlm177a5b62005-09-05 05:17:57 +0000638-32768, 443,-32768, 312,-32768, 434,-32768,-32768, 422,-32768,
639-32768, 394,-32768,-32768,-32768,-32768, 378,-32768, 338,-32768,
640-32768, 345,-32768,-32768, 389,-32768,-32768, 302,-32768, 103,
641 227,-32768, 115,-32768, 123,-32768, 239,-32768, 247,-32768,
642-32768,-32768,-32768, 48, -218, -77,-32768, -64,-32768, -133,
643-32768, 253, -184, -118,-32768, -73,-32768, -266, -75, -206,
644 -72, 324,-32768, -6,-32768,-32768,-32768, -188,-32768, 155,
645 -161, 68, -49,-32768, 219,-32768, -284,-32768,-32768,-32768,
646 64,-32768,-32768,-32768,-32768,-32768,-32768, 74, 83, -212,
647-32768,-32768,-32768, 127, -116, -80,-32768,-32768,-32768,-32768,
648 1,-32768, 182, -7
vlm6a02a8a2004-09-08 00:28:11 +0000649};
650
651
vlm177a5b62005-09-05 05:17:57 +0000652#define YYLAST 742
vlm6a02a8a2004-09-08 00:28:11 +0000653
654
655static const short yytable[] = { 15,
vlm177a5b62005-09-05 05:17:57 +0000656 5, 121, 223, 5, 120, 15, 232, 234, 268, 10,
657 283, 114, 10, 10, 198, 10, 164, 10, 117, 180,
658 150, 1, 2, 416, 143, 220, 132, 360, 7, 65,
659 63, 151, 72, 287, 160, 161, 79, 64, 10, 287,
660 71, 10, 169, 371, 78, 172, 10, 203, 65, 63,
661 16, 1, 2, 10, 10, 11, 64, 67, 1, 2,
662 179, 221, 10, 11, 333, 334, 79, 10, 169, 377,
663 231, 172, 204, 115, 78, 199, 307, 160, 161, 343,
664 144, 203, 19, 132, 387, 167, 316, 10, 169, 170,
665 171, 172, 1, 2, 145, 164, 286, 220, 239, 133,
666 180, 330, 72, 180, 118, 280, 204, 79, 280, 222,
667 71, 280, 240, -73, 139, 78, 154, 118, 301, 283,
668 118, 118, 398, 118, 153, 427, 241, 242, 182, 310,
669 264, 383, 203, 221, 392, 165, 181, 297, 28, 298,
670 311, 179, 243, 270, 179, 421, 275, 68, 202, 210,
671 212, 284, 12, 29, 112, 233, 133, 204, 211, 305,
672 17, 244, 416, 297, 10, 369, 30, 245, -246, 1,
673 2, 20, -246, 160, 161, 10, 246, -272, 118, 21,
674 1, 2, 31, 408, 247, 124, 248, 109, 110, 166,
675 167, 168, 10, 169, 170, 171, 172, 1, 2, 422,
676 22, 155, 23, 423, 73, 156, 411, 339, 269, 182,
677 218, 24, 182, 33, 219, 344, 32, 181, 419, 378,
678 181, 285, 337, 293, 349, 293, 338, 302, 350, 306,
679 34, 173, 419, 301, 388, 37, 167, 66, 10, 169,
680 170, 171, 172, 1, 2, 83, 84, 315, 36, 174,
681 167, 80, 10, 169, 170, 171, 172, 352, 355, 108,
682 284, 353, 381, 240, 384, 401, 409, 385, 111, 402,
683 410, 335, 175, 366, 367, 305, 368, 241, 242, 318,
684 319, 320, 321, 160, 161, 124, 346, 116, 346, 176,
685 322, 241, 167, 243, 10, 169, 170, 171, 172, 10,
686 169, 313, 314, 172, 1, 2, 359, 1, 2, 160,
687 161, 125, 244, 318, 319, 320, 321, 126, 245, 404,
688 405, 127, 128, 129, 134, 136, 135, 246, 379, 142,
689 285, 138, 245, 241, 293, 247, 181, 248, 147, 141,
690 157, 189, 302, 379, 159, 306, 82, 158, 370, 208,
691 10, 181, 217, 228, 395, 214, 83, 84, 216, -273,
692 227, 229, 230, 235, 400, 237, 238, 85, 38, 86,
693 263, 87, 265, 118, 245, 271, 279, 276, 294, 296,
694 308, 88, 309, 317, 327, 89, 325, 331, 329, 90,
695 400, 332, 91, 41, 42, 43, 336, 340, 414, 341,
696 342, 347, 395, 92, 45, 351, 426, 354, 93, 46,
697 94, 47, 95, 204, 357, 356, 358, 362, 372, 48,
698 363, 96, 97, 364, 365, 375, 10, 430, 49, 376,
699 50, 1, 2, 391, 397, 51, 98, 52, 53, 54,
700 396, 406, 407, 38, 431, 6, 18, 35, 99, 81,
701 183, 113, 140, 106, 137, 389, 382, 209, 39, 295,
702 380, 278, 40, 412, 428, 274, 267, 361, 41, 42,
703 43, 200, 328, 420, 44, 415, 386, 348, 0, 45,
704 413, 0, 0, 0, 46, 0, 47, 0, 0, 0,
705 0, 0, 0, 0, 48, 0, 0, 0, 0, 0,
706 0, 0, 0, 49, 0, 50, 0, 0, 190, 191,
707 51, 0, 52, 53, 54, 192, 0, 0, 0, 85,
708 38, 86, 0, 87, 193, 0, 0, 0, 0, 0,
709 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
710 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
711 0, 0, 0, 194, 0, 92, 45, 0, 0, 0,
712 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
713 0, 48, 0, 96, 97, 195, 196, 0, 0, 0,
714 49, 0, 50, 83, 84, 0, 0, 51, 98, 52,
715 53, 54, 0, 0, 85, 38, 86, 0, 87, 0,
716 0, 0, 0, 0, 0, 0, 0, 0, 88, 0,
717 0, 0, 89, 0, 0, 0, 90, 0, 0, 91,
718 41, 42, 43, 0, 0, 0, 0, 0, 0, 0,
719 92, 45, 0, 0, 0, 93, 46, 94, 47, 95,
720 0, 0, 0, 0, 0, 0, 48, 0, 96, 97,
721 0, 0, 0, 0, 0, 49, 0, 50, 1, 2,
722 0, 0, 51, 98, 52, 53, 54, 0, 0, 85,
723 38, 86, 0, 87, 0, 0, 0, 0, 0, 0,
724 0, 0, 0, 88, 0, 0, 0, 89, 0, 0,
725 0, 90, 0, 0, 91, 41, 42, 43, 0, 0,
726 0, 0, 0, 0, 0, 92, 45, 0, 0, 0,
727 93, 46, 94, 47, 95, 0, 0, 0, 0, 0,
728 0, 48, 0, 96, 97, 0, 0, 0, 0, 0,
729 49, 0, 50, 0, 0, 0, 0, 51, 98, 52,
730 53, 54
vlm6a02a8a2004-09-08 00:28:11 +0000731};
732
733static const short yycheck[] = { 7,
vlm177a5b62005-09-05 05:17:57 +0000734 0, 82, 187, 3, 82, 13, 195, 196, 215, 8,
735 229, 48, 8, 8, 148, 8, 135, 8, 30, 136,
736 43, 13, 14, 4, 21, 35, 99, 312, 105, 37,
737 37, 54, 40, 32, 15, 16, 44, 37, 8, 32,
738 40, 8, 9, 328, 44, 12, 8, 82, 56, 56,
739 36, 13, 14, 8, 8, 9, 56, 19, 13, 14,
740 136, 71, 8, 9, 277, 278, 74, 8, 9, 336,
741 105, 12, 107, 110, 74, 148, 238, 15, 16, 292,
742 77, 82, 107, 156, 351, 6, 248, 8, 9, 10,
743 11, 12, 13, 14, 91, 214, 230, 35, 19, 99,
744 217, 263, 110, 220, 116, 104, 107, 115, 104, 187,
745 110, 104, 33, 106, 114, 115, 124, 116, 235, 338,
746 116, 116, 113, 116, 124, 106, 47, 48, 136, 103,
747 208, 344, 82, 71, 104, 135, 136, 104, 9, 106,
748 114, 217, 63, 217, 220, 17, 220, 109, 148, 157,
749 158, 229, 106, 59, 109, 105, 156, 107, 158, 237,
750 106, 82, 4, 104, 8, 327, 86, 88, 106, 13,
751 14, 14, 110, 15, 16, 8, 97, 105, 116, 22,
752 13, 14, 86, 390, 105, 113, 107, 109, 110, 5,
753 6, 7, 8, 9, 10, 11, 12, 13, 14, 71,
754 43, 106, 45, 75, 48, 110, 395, 285, 216, 217,
755 106, 54, 220, 86, 110, 293, 55, 217, 403, 336,
756 220, 229, 106, 231, 106, 233, 110, 235, 110, 237,
757 3, 47, 417, 350, 351, 23, 6, 14, 8, 9,
758 10, 11, 12, 13, 14, 13, 14, 247, 108, 65,
759 6, 41, 8, 9, 10, 11, 12, 106, 308, 109,
760 338, 110, 340, 33, 345, 106, 106, 348, 105, 110,
761 110, 279, 88, 323, 324, 353, 326, 47, 48, 99,
762 100, 101, 102, 15, 16, 113, 294, 105, 296, 105,
763 110, 47, 6, 63, 8, 9, 10, 11, 12, 8,
764 9, 31, 32, 12, 13, 14, 62, 13, 14, 15,
765 16, 83, 82, 99, 100, 101, 102, 83, 88, 384,
766 385, 73, 53, 83, 3, 3, 113, 97, 336, 105,
767 338, 106, 88, 47, 342, 105, 336, 107, 89, 106,
768 111, 9, 350, 351, 105, 353, 3, 111, 62, 3,
769 8, 351, 111, 37, 362, 113, 13, 14, 113, 105,
770 117, 105, 70, 105, 372, 105, 107, 24, 25, 26,
771 107, 28, 4, 116, 88, 97, 27, 90, 70, 70,
772 98, 38, 27, 108, 107, 42, 98, 4, 105, 46,
773 398, 84, 49, 50, 51, 52, 112, 70, 113, 106,
774 110, 106, 410, 60, 61, 107, 414, 108, 65, 66,
775 67, 68, 69, 107, 114, 105, 103, 105, 115, 76,
776 106, 78, 79, 108, 104, 108, 8, 0, 85, 105,
777 87, 13, 14, 114, 108, 92, 93, 94, 95, 96,
778 110, 108, 108, 25, 0, 3, 13, 26, 105, 56,
779 139, 74, 115, 65, 110, 353, 342, 156, 40, 233,
780 338, 223, 44, 396, 417, 219, 214, 313, 50, 51,
781 52, 148, 254, 410, 56, 402, 350, 296, -1, 61,
782 398, -1, -1, -1, 66, -1, 68, -1, -1, -1,
783 -1, -1, -1, -1, 76, -1, -1, -1, -1, -1,
784 -1, -1, -1, 85, -1, 87, -1, -1, 13, 14,
785 92, -1, 94, 95, 96, 20, -1, -1, -1, 24,
786 25, 26, -1, 28, 29, -1, -1, -1, -1, -1,
787 -1, -1, -1, 38, -1, -1, -1, 42, -1, -1,
788 -1, 46, -1, -1, 49, 50, 51, 52, -1, -1,
789 -1, -1, -1, 58, -1, 60, 61, -1, -1, -1,
790 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
791 -1, 76, -1, 78, 79, 80, 81, -1, -1, -1,
792 85, -1, 87, 13, 14, -1, -1, 92, 93, 94,
793 95, 96, -1, -1, 24, 25, 26, -1, 28, -1,
794 -1, -1, -1, -1, -1, -1, -1, -1, 38, -1,
795 -1, -1, 42, -1, -1, -1, 46, -1, -1, 49,
796 50, 51, 52, -1, -1, -1, -1, -1, -1, -1,
797 60, 61, -1, -1, -1, 65, 66, 67, 68, 69,
798 -1, -1, -1, -1, -1, -1, 76, -1, 78, 79,
799 -1, -1, -1, -1, -1, 85, -1, 87, 13, 14,
800 -1, -1, 92, 93, 94, 95, 96, -1, -1, 24,
801 25, 26, -1, 28, -1, -1, -1, -1, -1, -1,
802 -1, -1, -1, 38, -1, -1, -1, 42, -1, -1,
803 -1, 46, -1, -1, 49, 50, 51, 52, -1, -1,
804 -1, -1, -1, -1, -1, 60, 61, -1, -1, -1,
805 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
806 -1, 76, -1, 78, 79, -1, -1, -1, -1, -1,
807 85, -1, 87, -1, -1, -1, -1, 92, 93, 94,
808 95, 96
vlm6a02a8a2004-09-08 00:28:11 +0000809};
810/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
811#line 3 "/usr/share/bison.simple"
812/* This file comes from bison-1.28. */
813
814/* Skeleton output parser for bison,
815 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
816
817 This program is free software; you can redistribute it and/or modify
818 it under the terms of the GNU General Public License as published by
819 the Free Software Foundation; either version 2, or (at your option)
820 any later version.
821
822 This program is distributed in the hope that it will be useful,
823 but WITHOUT ANY WARRANTY; without even the implied warranty of
824 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
825 GNU General Public License for more details.
826
827 You should have received a copy of the GNU General Public License
828 along with this program; if not, write to the Free Software
829 Foundation, Inc., 59 Temple Place - Suite 330,
830 Boston, MA 02111-1307, USA. */
831
832/* As a special exception, when this file is copied by Bison into a
833 Bison output file, you may use that output file without restriction.
834 This special exception was added by the Free Software Foundation
835 in version 1.24 of Bison. */
836
837/* This is the parser code that is written into each bison parser
838 when the %semantic_parser declaration is not specified in the grammar.
839 It was written by Richard Stallman by simplifying the hairy parser
840 used when %semantic_parser is specified. */
841
842#ifndef YYSTACK_USE_ALLOCA
843#ifdef alloca
844#define YYSTACK_USE_ALLOCA
845#else /* alloca not defined */
846#ifdef __GNUC__
847#define YYSTACK_USE_ALLOCA
848#define alloca __builtin_alloca
849#else /* not GNU C. */
850#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
851#define YYSTACK_USE_ALLOCA
852#include <alloca.h>
853#else /* not sparc */
854/* We think this test detects Watcom and Microsoft C. */
855/* This used to test MSDOS, but that is a bad idea
856 since that symbol is in the user namespace. */
857#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
858#if 0 /* No need for malloc.h, which pollutes the namespace;
859 instead, just don't use alloca. */
860#include <malloc.h>
861#endif
862#else /* not MSDOS, or __TURBOC__ */
863#if defined(_AIX)
864/* I don't know what this was needed for, but it pollutes the namespace.
865 So I turned it off. rms, 2 May 1997. */
866/* #include <malloc.h> */
867 #pragma alloca
868#define YYSTACK_USE_ALLOCA
869#else /* not MSDOS, or __TURBOC__, or _AIX */
870#if 0
871#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
872 and on HPUX 10. Eventually we can turn this on. */
873#define YYSTACK_USE_ALLOCA
874#define alloca __builtin_alloca
875#endif /* __hpux */
876#endif
877#endif /* not _AIX */
878#endif /* not MSDOS, or __TURBOC__ */
879#endif /* not sparc */
880#endif /* not GNU C */
881#endif /* alloca not defined */
882#endif /* YYSTACK_USE_ALLOCA not defined */
883
884#ifdef YYSTACK_USE_ALLOCA
885#define YYSTACK_ALLOC alloca
vlmfa67ddc2004-06-03 03:38:44 +0000886#else
vlm6a02a8a2004-09-08 00:28:11 +0000887#define YYSTACK_ALLOC malloc
vlmfa67ddc2004-06-03 03:38:44 +0000888#endif
889
vlm6a02a8a2004-09-08 00:28:11 +0000890/* Note: there must be only one dollar sign in this file.
891 It is replaced by the list of actions, each action
892 as one case of the switch. */
vlmfa67ddc2004-06-03 03:38:44 +0000893
894#define yyerrok (yyerrstatus = 0)
895#define yyclearin (yychar = YYEMPTY)
896#define YYEMPTY -2
897#define YYEOF 0
898#define YYACCEPT goto yyacceptlab
vlm6a02a8a2004-09-08 00:28:11 +0000899#define YYABORT goto yyabortlab
vlmfa67ddc2004-06-03 03:38:44 +0000900#define YYERROR goto yyerrlab1
vlm6a02a8a2004-09-08 00:28:11 +0000901/* Like YYERROR except do call yyerror.
902 This remains here temporarily to ease the
903 transition to the new meaning of YYERROR, for GCC.
vlmfa67ddc2004-06-03 03:38:44 +0000904 Once GCC version 2 has supplanted version 1, this can go. */
905#define YYFAIL goto yyerrlab
906#define YYRECOVERING() (!!yyerrstatus)
vlm6a02a8a2004-09-08 00:28:11 +0000907#define YYBACKUP(token, value) \
vlmfa67ddc2004-06-03 03:38:44 +0000908do \
909 if (yychar == YYEMPTY && yylen == 1) \
vlm6a02a8a2004-09-08 00:28:11 +0000910 { yychar = (token), yylval = (value); \
vlmfa67ddc2004-06-03 03:38:44 +0000911 yychar1 = YYTRANSLATE (yychar); \
912 YYPOPSTACK; \
913 goto yybackup; \
914 } \
915 else \
vlm6a02a8a2004-09-08 00:28:11 +0000916 { yyerror ("syntax error: cannot back up"); YYERROR; } \
vlmfa67ddc2004-06-03 03:38:44 +0000917while (0)
918
919#define YYTERROR 1
920#define YYERRCODE 256
921
vlm6a02a8a2004-09-08 00:28:11 +0000922#ifndef YYPURE
923#define YYLEX yylex()
vlmfa67ddc2004-06-03 03:38:44 +0000924#endif
925
vlm6a02a8a2004-09-08 00:28:11 +0000926#ifdef YYPURE
927#ifdef YYLSP_NEEDED
928#ifdef YYLEX_PARAM
929#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
930#else
931#define YYLEX yylex(&yylval, &yylloc)
932#endif
933#else /* not YYLSP_NEEDED */
934#ifdef YYLEX_PARAM
935#define YYLEX yylex(&yylval, YYLEX_PARAM)
936#else
937#define YYLEX yylex(&yylval)
938#endif
939#endif /* not YYLSP_NEEDED */
940#endif
vlmfa67ddc2004-06-03 03:38:44 +0000941
vlm6a02a8a2004-09-08 00:28:11 +0000942/* If nonreentrant, generate the variables here */
vlmfa67ddc2004-06-03 03:38:44 +0000943
vlm6a02a8a2004-09-08 00:28:11 +0000944#ifndef YYPURE
vlmfa67ddc2004-06-03 03:38:44 +0000945
vlm6a02a8a2004-09-08 00:28:11 +0000946int yychar; /* the lookahead symbol */
947YYSTYPE yylval; /* the semantic value of the */
948 /* lookahead symbol */
vlmfa67ddc2004-06-03 03:38:44 +0000949
vlm6a02a8a2004-09-08 00:28:11 +0000950#ifdef YYLSP_NEEDED
951YYLTYPE yylloc; /* location data for the lookahead */
952 /* symbol */
953#endif
vlmfa67ddc2004-06-03 03:38:44 +0000954
vlm6a02a8a2004-09-08 00:28:11 +0000955int yynerrs; /* number of parse errors so far */
956#endif /* not YYPURE */
957
958#if YYDEBUG != 0
959int yydebug; /* nonzero means print parse trace */
960/* Since this is uninitialized, it does not stop multiple parsers
961 from coexisting. */
962#endif
963
964/* YYINITDEPTH indicates the initial size of the parser's stacks */
965
vlmfa67ddc2004-06-03 03:38:44 +0000966#ifndef YYINITDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000967#define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +0000968#endif
969
vlm6a02a8a2004-09-08 00:28:11 +0000970/* YYMAXDEPTH is the maximum size the stacks can grow to
971 (effective only if the built-in stack extension method is used). */
vlmfa67ddc2004-06-03 03:38:44 +0000972
973#if YYMAXDEPTH == 0
vlm6a02a8a2004-09-08 00:28:11 +0000974#undef YYMAXDEPTH
vlmfa67ddc2004-06-03 03:38:44 +0000975#endif
976
977#ifndef YYMAXDEPTH
vlm6a02a8a2004-09-08 00:28:11 +0000978#define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +0000979#endif
980
vlm6a02a8a2004-09-08 00:28:11 +0000981/* Define __yy_memcpy. Note that the size argument
982 should be passed with type unsigned int, because that is what the non-GCC
983 definitions require. With GCC, __builtin_memcpy takes an arg
984 of type size_t, but it can handle unsigned int. */
vlmfa67ddc2004-06-03 03:38:44 +0000985
vlm6a02a8a2004-09-08 00:28:11 +0000986#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
987#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
988#else /* not GNU C or C++ */
989#ifndef __cplusplus
vlmfa67ddc2004-06-03 03:38:44 +0000990
vlm6a02a8a2004-09-08 00:28:11 +0000991/* This is the most reliable way to avoid incompatibilities
992 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +0000993static void
vlm6a02a8a2004-09-08 00:28:11 +0000994__yy_memcpy (to, from, count)
995 char *to;
996 char *from;
997 unsigned int count;
vlm80103492004-09-07 10:39:09 +0000998{
vlm6a02a8a2004-09-08 00:28:11 +0000999 register char *f = from;
1000 register char *t = to;
1001 register int i = count;
vlm80103492004-09-07 10:39:09 +00001002
vlm6a02a8a2004-09-08 00:28:11 +00001003 while (i-- > 0)
1004 *t++ = *f++;
vlm80103492004-09-07 10:39:09 +00001005}
vlm80103492004-09-07 10:39:09 +00001006
vlm6a02a8a2004-09-08 00:28:11 +00001007#else /* __cplusplus */
vlm80103492004-09-07 10:39:09 +00001008
vlm6a02a8a2004-09-08 00:28:11 +00001009/* This is the most reliable way to avoid incompatibilities
1010 in available built-in functions on various systems. */
vlm80103492004-09-07 10:39:09 +00001011static void
vlm6a02a8a2004-09-08 00:28:11 +00001012__yy_memcpy (char *to, char *from, unsigned int count)
vlm80103492004-09-07 10:39:09 +00001013{
vlm6a02a8a2004-09-08 00:28:11 +00001014 register char *t = to;
1015 register char *f = from;
1016 register int i = count;
vlm80103492004-09-07 10:39:09 +00001017
vlm6a02a8a2004-09-08 00:28:11 +00001018 while (i-- > 0)
1019 *t++ = *f++;
vlm044f7442004-09-04 04:49:21 +00001020}
vlm044f7442004-09-04 04:49:21 +00001021
vlm6a02a8a2004-09-08 00:28:11 +00001022#endif
1023#endif
vlmfa67ddc2004-06-03 03:38:44 +00001024
vlm6a02a8a2004-09-08 00:28:11 +00001025#line 217 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00001026
1027/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1028 into yyparse. The argument should have type void *.
1029 It should actually point to an object.
1030 Grammar actions can access the variable by casting it
1031 to the proper pointer type. */
1032
1033#ifdef YYPARSE_PARAM
vlm6a02a8a2004-09-08 00:28:11 +00001034#ifdef __cplusplus
1035#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1036#define YYPARSE_PARAM_DECL
1037#else /* not __cplusplus */
1038#define YYPARSE_PARAM_ARG YYPARSE_PARAM
1039#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1040#endif /* not __cplusplus */
1041#else /* not YYPARSE_PARAM */
1042#define YYPARSE_PARAM_ARG
1043#define YYPARSE_PARAM_DECL
1044#endif /* not YYPARSE_PARAM */
vlmfa67ddc2004-06-03 03:38:44 +00001045
1046/* Prevent warning if -Wstrict-prototypes. */
1047#ifdef __GNUC__
vlm6a02a8a2004-09-08 00:28:11 +00001048#ifdef YYPARSE_PARAM
vlmfa67ddc2004-06-03 03:38:44 +00001049int yyparse (void *);
vlm6a02a8a2004-09-08 00:28:11 +00001050#else
vlmfa67ddc2004-06-03 03:38:44 +00001051int yyparse (void);
vlm6a02a8a2004-09-08 00:28:11 +00001052#endif
vlm39e5ed72004-09-05 10:40:41 +00001053#endif
vlm80103492004-09-07 10:39:09 +00001054
vlmfa67ddc2004-06-03 03:38:44 +00001055int
vlm6a02a8a2004-09-08 00:28:11 +00001056yyparse(YYPARSE_PARAM_ARG)
vlmfa67ddc2004-06-03 03:38:44 +00001057 YYPARSE_PARAM_DECL
1058{
1059 register int yystate;
1060 register int yyn;
1061 register short *yyssp;
1062 register YYSTYPE *yyvsp;
vlm6a02a8a2004-09-08 00:28:11 +00001063 int yyerrstatus; /* number of tokens to shift before error messages enabled */
1064 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
vlmfa67ddc2004-06-03 03:38:44 +00001065
vlm6a02a8a2004-09-08 00:28:11 +00001066 short yyssa[YYINITDEPTH]; /* the state stack */
1067 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
vlmfa67ddc2004-06-03 03:38:44 +00001068
vlm6a02a8a2004-09-08 00:28:11 +00001069 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
1070 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
vlmfa67ddc2004-06-03 03:38:44 +00001071
vlm6a02a8a2004-09-08 00:28:11 +00001072#ifdef YYLSP_NEEDED
1073 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
1074 YYLTYPE *yyls = yylsa;
1075 YYLTYPE *yylsp;
1076
1077#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
1078#else
vlmfa67ddc2004-06-03 03:38:44 +00001079#define YYPOPSTACK (yyvsp--, yyssp--)
vlm6a02a8a2004-09-08 00:28:11 +00001080#endif
vlmfa67ddc2004-06-03 03:38:44 +00001081
vlm6a02a8a2004-09-08 00:28:11 +00001082 int yystacksize = YYINITDEPTH;
1083 int yyfree_stacks = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001084
vlm6a02a8a2004-09-08 00:28:11 +00001085#ifdef YYPURE
1086 int yychar;
1087 YYSTYPE yylval;
1088 int yynerrs;
1089#ifdef YYLSP_NEEDED
1090 YYLTYPE yylloc;
1091#endif
1092#endif
vlmfa67ddc2004-06-03 03:38:44 +00001093
vlm6a02a8a2004-09-08 00:28:11 +00001094 YYSTYPE yyval; /* the variable used to return */
1095 /* semantic values from the action */
1096 /* routines */
vlmfa67ddc2004-06-03 03:38:44 +00001097
1098 int yylen;
1099
vlm6a02a8a2004-09-08 00:28:11 +00001100#if YYDEBUG != 0
1101 if (yydebug)
1102 fprintf(stderr, "Starting parse\n");
1103#endif
vlmfa67ddc2004-06-03 03:38:44 +00001104
1105 yystate = 0;
1106 yyerrstatus = 0;
1107 yynerrs = 0;
1108 yychar = YYEMPTY; /* Cause a token to be read. */
1109
1110 /* Initialize stack pointers.
1111 Waste one element of value and location stack
1112 so that they stay on the same level as the state stack.
1113 The wasted elements are never initialized. */
1114
vlm6a02a8a2004-09-08 00:28:11 +00001115 yyssp = yyss - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001116 yyvsp = yyvs;
vlm6a02a8a2004-09-08 00:28:11 +00001117#ifdef YYLSP_NEEDED
1118 yylsp = yyls;
1119#endif
vlmfa67ddc2004-06-03 03:38:44 +00001120
vlm6a02a8a2004-09-08 00:28:11 +00001121/* Push a new state, which is found in yystate . */
1122/* In all cases, when you get here, the value and location stacks
1123 have just been pushed. so pushing a state here evens the stacks. */
1124yynewstate:
vlmfa67ddc2004-06-03 03:38:44 +00001125
vlm6a02a8a2004-09-08 00:28:11 +00001126 *++yyssp = yystate;
vlmfa67ddc2004-06-03 03:38:44 +00001127
1128 if (yyssp >= yyss + yystacksize - 1)
1129 {
vlm6a02a8a2004-09-08 00:28:11 +00001130 /* Give user a chance to reallocate the stack */
1131 /* Use copies of these so that the &'s don't force the real ones into memory. */
1132 YYSTYPE *yyvs1 = yyvs;
1133 short *yyss1 = yyss;
1134#ifdef YYLSP_NEEDED
1135 YYLTYPE *yyls1 = yyls;
1136#endif
1137
vlmfa67ddc2004-06-03 03:38:44 +00001138 /* Get the current used size of the three stacks, in elements. */
vlm6a02a8a2004-09-08 00:28:11 +00001139 int size = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001140
1141#ifdef yyoverflow
vlm6a02a8a2004-09-08 00:28:11 +00001142 /* Each stack pointer address is followed by the size of
1143 the data in use in that stack, in bytes. */
1144#ifdef YYLSP_NEEDED
1145 /* This used to be a conditional around just the two extra args,
1146 but that might be undefined if yyoverflow is a macro. */
1147 yyoverflow("parser stack overflow",
1148 &yyss1, size * sizeof (*yyssp),
1149 &yyvs1, size * sizeof (*yyvsp),
1150 &yyls1, size * sizeof (*yylsp),
1151 &yystacksize);
1152#else
1153 yyoverflow("parser stack overflow",
1154 &yyss1, size * sizeof (*yyssp),
1155 &yyvs1, size * sizeof (*yyvsp),
1156 &yystacksize);
1157#endif
vlmfa67ddc2004-06-03 03:38:44 +00001158
vlm6a02a8a2004-09-08 00:28:11 +00001159 yyss = yyss1; yyvs = yyvs1;
1160#ifdef YYLSP_NEEDED
1161 yyls = yyls1;
1162#endif
vlmfa67ddc2004-06-03 03:38:44 +00001163#else /* no yyoverflow */
1164 /* Extend the stack our own way. */
1165 if (yystacksize >= YYMAXDEPTH)
vlm6a02a8a2004-09-08 00:28:11 +00001166 {
1167 yyerror("parser stack overflow");
1168 if (yyfree_stacks)
1169 {
1170 free (yyss);
1171 free (yyvs);
1172#ifdef YYLSP_NEEDED
1173 free (yyls);
1174#endif
1175 }
1176 return 2;
1177 }
vlmfa67ddc2004-06-03 03:38:44 +00001178 yystacksize *= 2;
1179 if (yystacksize > YYMAXDEPTH)
1180 yystacksize = YYMAXDEPTH;
vlm6a02a8a2004-09-08 00:28:11 +00001181#ifndef YYSTACK_USE_ALLOCA
1182 yyfree_stacks = 1;
1183#endif
1184 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
1185 __yy_memcpy ((char *)yyss, (char *)yyss1,
1186 size * (unsigned int) sizeof (*yyssp));
1187 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
1188 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
1189 size * (unsigned int) sizeof (*yyvsp));
1190#ifdef YYLSP_NEEDED
1191 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
1192 __yy_memcpy ((char *)yyls, (char *)yyls1,
1193 size * (unsigned int) sizeof (*yylsp));
1194#endif
vlmfa67ddc2004-06-03 03:38:44 +00001195#endif /* no yyoverflow */
1196
vlm6a02a8a2004-09-08 00:28:11 +00001197 yyssp = yyss + size - 1;
1198 yyvsp = yyvs + size - 1;
1199#ifdef YYLSP_NEEDED
1200 yylsp = yyls + size - 1;
1201#endif
vlmfa67ddc2004-06-03 03:38:44 +00001202
vlm6a02a8a2004-09-08 00:28:11 +00001203#if YYDEBUG != 0
1204 if (yydebug)
1205 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
1206#endif
vlmfa67ddc2004-06-03 03:38:44 +00001207
1208 if (yyssp >= yyss + yystacksize - 1)
1209 YYABORT;
1210 }
1211
vlm6a02a8a2004-09-08 00:28:11 +00001212#if YYDEBUG != 0
1213 if (yydebug)
1214 fprintf(stderr, "Entering state %d\n", yystate);
1215#endif
vlmfa67ddc2004-06-03 03:38:44 +00001216
1217 goto yybackup;
vlm6a02a8a2004-09-08 00:28:11 +00001218 yybackup:
vlmfa67ddc2004-06-03 03:38:44 +00001219
1220/* Do appropriate processing given the current state. */
1221/* Read a lookahead token if we need one and don't already have one. */
1222/* yyresume: */
1223
1224 /* First try to decide what to do without reference to lookahead token. */
1225
1226 yyn = yypact[yystate];
vlm6a02a8a2004-09-08 00:28:11 +00001227 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001228 goto yydefault;
1229
1230 /* Not known => get a lookahead token if don't already have one. */
1231
1232 /* yychar is either YYEMPTY or YYEOF
1233 or a valid token in external form. */
1234
1235 if (yychar == YYEMPTY)
1236 {
vlm6a02a8a2004-09-08 00:28:11 +00001237#if YYDEBUG != 0
1238 if (yydebug)
1239 fprintf(stderr, "Reading a token: ");
1240#endif
vlmfa67ddc2004-06-03 03:38:44 +00001241 yychar = YYLEX;
1242 }
1243
vlm6a02a8a2004-09-08 00:28:11 +00001244 /* Convert token to internal form (in yychar1) for indexing tables with */
vlmfa67ddc2004-06-03 03:38:44 +00001245
vlm6a02a8a2004-09-08 00:28:11 +00001246 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001247 {
1248 yychar1 = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001249 yychar = YYEOF; /* Don't call YYLEX any more */
vlmfa67ddc2004-06-03 03:38:44 +00001250
vlm6a02a8a2004-09-08 00:28:11 +00001251#if YYDEBUG != 0
1252 if (yydebug)
1253 fprintf(stderr, "Now at end of input.\n");
1254#endif
vlmfa67ddc2004-06-03 03:38:44 +00001255 }
1256 else
1257 {
vlm6a02a8a2004-09-08 00:28:11 +00001258 yychar1 = YYTRANSLATE(yychar);
vlmfa67ddc2004-06-03 03:38:44 +00001259
vlm6a02a8a2004-09-08 00:28:11 +00001260#if YYDEBUG != 0
1261 if (yydebug)
1262 {
1263 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
1264 /* Give the individual parser a way to print the precise meaning
1265 of a token, for further debugging info. */
1266#ifdef YYPRINT
1267 YYPRINT (stderr, yychar, yylval);
1268#endif
1269 fprintf (stderr, ")\n");
1270 }
1271#endif
vlmfa67ddc2004-06-03 03:38:44 +00001272 }
1273
1274 yyn += yychar1;
vlm6a02a8a2004-09-08 00:28:11 +00001275 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001276 goto yydefault;
vlm6a02a8a2004-09-08 00:28:11 +00001277
vlmfa67ddc2004-06-03 03:38:44 +00001278 yyn = yytable[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001279
1280 /* yyn is what to do for this token type in this state.
1281 Negative => reduce, -yyn is rule number.
1282 Positive => shift, yyn is new state.
1283 New state is final state => don't bother to shift,
1284 just return success.
1285 0, or most negative number => error. */
1286
1287 if (yyn < 0)
vlmfa67ddc2004-06-03 03:38:44 +00001288 {
vlm6a02a8a2004-09-08 00:28:11 +00001289 if (yyn == YYFLAG)
vlmfa67ddc2004-06-03 03:38:44 +00001290 goto yyerrlab;
1291 yyn = -yyn;
1292 goto yyreduce;
1293 }
vlm6a02a8a2004-09-08 00:28:11 +00001294 else if (yyn == 0)
1295 goto yyerrlab;
vlmfa67ddc2004-06-03 03:38:44 +00001296
1297 if (yyn == YYFINAL)
1298 YYACCEPT;
1299
1300 /* Shift the lookahead token. */
vlm6a02a8a2004-09-08 00:28:11 +00001301
1302#if YYDEBUG != 0
1303 if (yydebug)
1304 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
1305#endif
vlmfa67ddc2004-06-03 03:38:44 +00001306
1307 /* Discard the token being shifted unless it is eof. */
1308 if (yychar != YYEOF)
1309 yychar = YYEMPTY;
1310
1311 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00001312#ifdef YYLSP_NEEDED
1313 *++yylsp = yylloc;
1314#endif
vlmfa67ddc2004-06-03 03:38:44 +00001315
vlm6a02a8a2004-09-08 00:28:11 +00001316 /* count tokens shifted since error; after three, turn off error status. */
1317 if (yyerrstatus) yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001318
1319 yystate = yyn;
1320 goto yynewstate;
1321
vlm6a02a8a2004-09-08 00:28:11 +00001322/* Do the default action for the current state. */
vlm80103492004-09-07 10:39:09 +00001323yydefault:
vlm6a02a8a2004-09-08 00:28:11 +00001324
vlmfa67ddc2004-06-03 03:38:44 +00001325 yyn = yydefact[yystate];
1326 if (yyn == 0)
1327 goto yyerrlab;
1328
vlm6a02a8a2004-09-08 00:28:11 +00001329/* Do a reduction. yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001330yyreduce:
1331 yylen = yyr2[yyn];
vlm6a02a8a2004-09-08 00:28:11 +00001332 if (yylen > 0)
1333 yyval = yyvsp[1-yylen]; /* implement default value of the action */
vlmfa67ddc2004-06-03 03:38:44 +00001334
vlm6a02a8a2004-09-08 00:28:11 +00001335#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00001336 if (yydebug)
1337 {
vlm6a02a8a2004-09-08 00:28:11 +00001338 int i;
vlmfa67ddc2004-06-03 03:38:44 +00001339
vlm6a02a8a2004-09-08 00:28:11 +00001340 fprintf (stderr, "Reducing via rule %d (line %d), ",
1341 yyn, yyrline[yyn]);
vlmfa67ddc2004-06-03 03:38:44 +00001342
1343 /* Print the symbols being reduced, and their result. */
vlm6a02a8a2004-09-08 00:28:11 +00001344 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
1345 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
1346 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
vlmfa67ddc2004-06-03 03:38:44 +00001347 }
1348#endif
vlm80103492004-09-07 10:39:09 +00001349
vlm6a02a8a2004-09-08 00:28:11 +00001350
1351 switch (yyn) {
1352
1353case 1:
vlm177a5b62005-09-05 05:17:57 +00001354#line 321 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001355{
1356 *(void **)param = yyvsp[0].a_grammar;
1357 ;
1358 break;}
1359case 2:
vlm177a5b62005-09-05 05:17:57 +00001360#line 327 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001361{
vlmfa67ddc2004-06-03 03:38:44 +00001362 yyval.a_grammar = asn1p_new();
1363 checkmem(yyval.a_grammar);
1364 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001365 ;
1366 break;}
1367case 3:
vlm177a5b62005-09-05 05:17:57 +00001368#line 332 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001369{
vlmfa67ddc2004-06-03 03:38:44 +00001370 yyval.a_grammar = yyvsp[-1].a_grammar;
1371 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm6a02a8a2004-09-08 00:28:11 +00001372 ;
1373 break;}
1374case 4:
vlm177a5b62005-09-05 05:17:57 +00001375#line 353 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001376{
vlmfa67ddc2004-06-03 03:38:44 +00001377
1378 if(yyvsp[-1].a_module) {
1379 yyval.a_module = yyvsp[-1].a_module;
1380 } else {
1381 /* There's a chance that a module is just plain empty */
1382 yyval.a_module = asn1p_module_new();
1383 }
1384 checkmem(yyval.a_module);
1385
vlm931aeed2005-08-12 10:09:10 +00001386 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00001387 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1388 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001389 ;
1390 break;}
1391case 5:
vlm177a5b62005-09-05 05:17:57 +00001392#line 374 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001393{ yyval.a_oid = 0; ;
1394 break;}
1395case 6:
vlm177a5b62005-09-05 05:17:57 +00001396#line 375 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001397{ yyval.a_oid = yyvsp[0].a_oid; ;
1398 break;}
1399case 7:
vlm177a5b62005-09-05 05:17:57 +00001400#line 379 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001401{
vlmfa67ddc2004-06-03 03:38:44 +00001402 yyval.a_oid = yyvsp[-1].a_oid;
vlm6a02a8a2004-09-08 00:28:11 +00001403 ;
1404 break;}
1405case 8:
vlm177a5b62005-09-05 05:17:57 +00001406#line 382 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001407{
vlmfa67ddc2004-06-03 03:38:44 +00001408 yyval.a_oid = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001409 ;
1410 break;}
1411case 9:
vlm177a5b62005-09-05 05:17:57 +00001412#line 388 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001413{
vlmfa67ddc2004-06-03 03:38:44 +00001414 yyval.a_oid = asn1p_oid_new();
1415 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1416 if(yyvsp[0].a_oid_arc.name)
1417 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001418 ;
1419 break;}
1420case 10:
vlm177a5b62005-09-05 05:17:57 +00001421#line 394 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001422{
vlmfa67ddc2004-06-03 03:38:44 +00001423 yyval.a_oid = yyvsp[-1].a_oid;
1424 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1425 if(yyvsp[0].a_oid_arc.name)
1426 free(yyvsp[0].a_oid_arc.name);
vlm6a02a8a2004-09-08 00:28:11 +00001427 ;
1428 break;}
1429case 11:
vlm177a5b62005-09-05 05:17:57 +00001430#line 403 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001431{ /* iso */
vlmfa67ddc2004-06-03 03:38:44 +00001432 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1433 yyval.a_oid_arc.number = -1;
vlm6a02a8a2004-09-08 00:28:11 +00001434 ;
1435 break;}
1436case 12:
vlm177a5b62005-09-05 05:17:57 +00001437#line 407 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001438{ /* iso(1) */
vlmfa67ddc2004-06-03 03:38:44 +00001439 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1440 yyval.a_oid_arc.number = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001441 ;
1442 break;}
1443case 13:
vlm177a5b62005-09-05 05:17:57 +00001444#line 411 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001445{ /* 1 */
vlmfa67ddc2004-06-03 03:38:44 +00001446 yyval.a_oid_arc.name = 0;
1447 yyval.a_oid_arc.number = yyvsp[0].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00001448 ;
1449 break;}
1450case 14:
vlm177a5b62005-09-05 05:17:57 +00001451#line 421 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001452{ yyval.a_module_flags = MSF_NOFLAGS; ;
1453 break;}
1454case 15:
vlm177a5b62005-09-05 05:17:57 +00001455#line 422 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001456{
vlmfa67ddc2004-06-03 03:38:44 +00001457 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001458 ;
1459 break;}
1460case 16:
vlm177a5b62005-09-05 05:17:57 +00001461#line 431 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001462{
vlmfa67ddc2004-06-03 03:38:44 +00001463 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001464 ;
1465 break;}
1466case 17:
vlm177a5b62005-09-05 05:17:57 +00001467#line 434 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001468{
vlmfa67ddc2004-06-03 03:38:44 +00001469 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
vlm6a02a8a2004-09-08 00:28:11 +00001470 ;
1471 break;}
1472case 18:
vlm177a5b62005-09-05 05:17:57 +00001473#line 443 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001474{
vlmfa67ddc2004-06-03 03:38:44 +00001475 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001476 ;
1477 break;}
1478case 19:
vlm177a5b62005-09-05 05:17:57 +00001479#line 446 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001480{
vlmfa67ddc2004-06-03 03:38:44 +00001481 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001482 ;
1483 break;}
1484case 20:
vlm177a5b62005-09-05 05:17:57 +00001485#line 449 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001486{
vlmfa67ddc2004-06-03 03:38:44 +00001487 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
vlm6a02a8a2004-09-08 00:28:11 +00001488 ;
1489 break;}
1490case 21:
vlm177a5b62005-09-05 05:17:57 +00001491#line 452 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001492{
vlmfa67ddc2004-06-03 03:38:44 +00001493 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
vlm6a02a8a2004-09-08 00:28:11 +00001494 ;
1495 break;}
1496case 22:
vlm177a5b62005-09-05 05:17:57 +00001497#line 456 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001498{
vlm9283dbe2004-08-18 04:59:12 +00001499 /* X.680Amd1 specifies TAG and XER */
1500 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1501 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1502 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1503 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1504 } else {
1505 fprintf(stderr,
1506 "WARNING: %s INSTRUCTIONS at line %d: "
1507 "Unrecognized encoding reference\n",
1508 yyvsp[-1].tv_str, yylineno);
1509 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1510 }
1511 free(yyvsp[-1].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00001512 ;
1513 break;}
1514case 23:
vlm177a5b62005-09-05 05:17:57 +00001515#line 477 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001516{ yyval.a_module = 0; ;
1517 break;}
1518case 24:
vlm177a5b62005-09-05 05:17:57 +00001519#line 478 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001520{
vlmfa67ddc2004-06-03 03:38:44 +00001521 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001522 ;
1523 break;}
1524case 25:
vlm177a5b62005-09-05 05:17:57 +00001525#line 487 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001526{
vlm9283dbe2004-08-18 04:59:12 +00001527 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001528 ;
1529 break;}
1530case 26:
vlm177a5b62005-09-05 05:17:57 +00001531#line 490 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001532{
vlmfa67ddc2004-06-03 03:38:44 +00001533 yyval.a_module = yyvsp[-1].a_module;
1534
vlm9283dbe2004-08-18 04:59:12 +00001535 /* Behave well when one of them is skipped. */
1536 if(!(yyvsp[-1].a_module)) {
1537 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1538 break;
1539 }
1540
vlmfa67ddc2004-06-03 03:38:44 +00001541#ifdef MY_IMPORT
1542#error MY_IMPORT DEFINED ELSEWHERE!
1543#endif
1544#define MY_IMPORT(foo,field) do { \
vlm97ed7152004-08-13 12:31:09 +00001545 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
vlmfa67ddc2004-06-03 03:38:44 +00001546 TQ_ADD(&(yyval.a_module->foo), \
1547 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1548 field); \
vlm97ed7152004-08-13 12:31:09 +00001549 } \
1550 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1551 } while(0)
vlmfa67ddc2004-06-03 03:38:44 +00001552
1553 MY_IMPORT(imports, xp_next);
1554 MY_IMPORT(exports, xp_next);
1555 MY_IMPORT(members, next);
1556#undef MY_IMPORT
1557
vlm6a02a8a2004-09-08 00:28:11 +00001558 ;
1559 break;}
1560case 27:
vlm177a5b62005-09-05 05:17:57 +00001561#line 523 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001562{
vlmfa67ddc2004-06-03 03:38:44 +00001563 yyval.a_module = yyvsp[0].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001564 ;
1565 break;}
1566case 28:
vlm177a5b62005-09-05 05:17:57 +00001567#line 526 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001568{
vlmfa67ddc2004-06-03 03:38:44 +00001569 yyval.a_module = asn1p_module_new();
1570 checkmem(yyval.a_module);
1571 if(yyvsp[0].a_xports) {
1572 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1573 } else {
1574 /* "EXPORTS ALL;" ? */
1575 }
vlm6a02a8a2004-09-08 00:28:11 +00001576 ;
1577 break;}
1578case 29:
vlm177a5b62005-09-05 05:17:57 +00001579#line 535 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001580{
vlm9283dbe2004-08-18 04:59:12 +00001581 yyval.a_module = asn1p_module_new();
1582 checkmem(yyval.a_module);
1583 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1584 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1585 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001586 ;
1587 break;}
vlm931aeed2005-08-12 10:09:10 +00001588case 30:
vlm177a5b62005-09-05 05:17:57 +00001589#line 542 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001590{
1591 yyval.a_module = asn1p_module_new();
1592 checkmem(yyval.a_module);
1593 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1594 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1595 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
1596 ;
1597 break;}
vlm6a02a8a2004-09-08 00:28:11 +00001598case 31:
vlm177a5b62005-09-05 05:17:57 +00001599#line 555 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001600{
vlm9283dbe2004-08-18 04:59:12 +00001601 yyval.a_module = asn1p_module_new();
1602 checkmem(yyval.a_module);
1603 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1604 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1605 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001606 ;
1607 break;}
1608case 32:
vlm177a5b62005-09-05 05:17:57 +00001609#line 563 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001610{ asn1p_lexer_hack_push_encoding_control(); ;
1611 break;}
1612case 33:
vlm177a5b62005-09-05 05:17:57 +00001613#line 564 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001614{
vlm9283dbe2004-08-18 04:59:12 +00001615 fprintf(stderr,
1616 "WARNING: ENCODING-CONTROL %s "
1617 "specification at line %d ignored\n",
1618 yyvsp[-1].tv_str, yylineno);
1619 free(yyvsp[-1].tv_str);
1620 yyval.a_module = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001621 ;
1622 break;}
1623case 34:
vlm177a5b62005-09-05 05:17:57 +00001624#line 576 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001625{
vlmfa67ddc2004-06-03 03:38:44 +00001626 return yyerror(
vlm1ac75e72005-11-26 11:21:55 +00001627 "Attempt to redefine a standard basic string type, "
1628 "please comment out or remove this type redefinition.");
vlm6a02a8a2004-09-08 00:28:11 +00001629 ;
1630 break;}
1631case 35:
vlm1ac75e72005-11-26 11:21:55 +00001632#line 589 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001633{
vlm931aeed2005-08-12 10:09:10 +00001634 if(!saved_aid && 0)
1635 return yyerror("Unterminated IMPORTS FROM, "
1636 "expected semicolon ';'");
1637 saved_aid = 0;
vlmfa67ddc2004-06-03 03:38:44 +00001638 yyval.a_module = yyvsp[-1].a_module;
vlm6a02a8a2004-09-08 00:28:11 +00001639 ;
1640 break;}
1641case 36:
vlm1ac75e72005-11-26 11:21:55 +00001642#line 599 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001643{
vlmfa67ddc2004-06-03 03:38:44 +00001644 return yyerror("Empty IMPORTS list");
vlm6a02a8a2004-09-08 00:28:11 +00001645 ;
1646 break;}
1647case 37:
vlm1ac75e72005-11-26 11:21:55 +00001648#line 605 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001649{
vlmfa67ddc2004-06-03 03:38:44 +00001650 yyval.a_module = asn1p_module_new();
1651 checkmem(yyval.a_module);
1652 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001653 ;
1654 break;}
1655case 38:
vlm1ac75e72005-11-26 11:21:55 +00001656#line 610 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001657{
vlmfa67ddc2004-06-03 03:38:44 +00001658 yyval.a_module = yyvsp[-1].a_module;
1659 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm6a02a8a2004-09-08 00:28:11 +00001660 ;
1661 break;}
1662case 39:
vlm1ac75e72005-11-26 11:21:55 +00001663#line 617 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001664{ memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
1665 break;}
1666case 40:
vlm1ac75e72005-11-26 11:21:55 +00001667#line 618 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001668{ yyval.a_aid.oid = yyvsp[0].a_oid; ;
1669 break;}
1670case 41:
vlm1ac75e72005-11-26 11:21:55 +00001671#line 622 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001672{
vlmfa67ddc2004-06-03 03:38:44 +00001673 yyval.a_xports = yyvsp[-3].a_xports;
vlm931aeed2005-08-12 10:09:10 +00001674 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
1675 yyval.a_xports->identifier = yyvsp[0].a_aid;
1676 /* This stupid thing is used for look-back hack. */
1677 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
vlmfa67ddc2004-06-03 03:38:44 +00001678 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001679 ;
1680 break;}
vlm931aeed2005-08-12 10:09:10 +00001681case 42:
vlm1ac75e72005-11-26 11:21:55 +00001682#line 633 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001683{
vlmfa67ddc2004-06-03 03:38:44 +00001684 yyval.a_xports = asn1p_xports_new();
1685 checkmem(yyval.a_xports);
1686 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001687 ;
1688 break;}
vlm931aeed2005-08-12 10:09:10 +00001689case 43:
vlm1ac75e72005-11-26 11:21:55 +00001690#line 638 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001691{
vlmfa67ddc2004-06-03 03:38:44 +00001692 yyval.a_xports = yyvsp[-2].a_xports;
1693 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001694 ;
1695 break;}
vlm0aa86902004-10-12 23:26:53 +00001696case 44:
vlm1ac75e72005-11-26 11:21:55 +00001697#line 645 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001698{
vlmfa67ddc2004-06-03 03:38:44 +00001699 yyval.a_expr = asn1p_expr_new(yylineno);
1700 checkmem(yyval.a_expr);
1701 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1702 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm6a02a8a2004-09-08 00:28:11 +00001703 ;
1704 break;}
vlm0aa86902004-10-12 23:26:53 +00001705case 45:
vlm1ac75e72005-11-26 11:21:55 +00001706#line 651 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001707{ /* Completely equivalent to above */
1708 yyval.a_expr = asn1p_expr_new(yylineno);
1709 checkmem(yyval.a_expr);
1710 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1711 yyval.a_expr->expr_type = A1TC_REFERENCE;
1712 ;
1713 break;}
1714case 46:
vlm1ac75e72005-11-26 11:21:55 +00001715#line 657 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001716{
1717 yyval.a_expr = asn1p_expr_new(yylineno);
1718 checkmem(yyval.a_expr);
1719 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1720 yyval.a_expr->expr_type = A1TC_REFERENCE;
1721 ;
1722 break;}
1723case 47:
vlm1ac75e72005-11-26 11:21:55 +00001724#line 666 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001725{
vlmfa67ddc2004-06-03 03:38:44 +00001726 yyval.a_xports = yyvsp[-1].a_xports;
vlm6a02a8a2004-09-08 00:28:11 +00001727 ;
1728 break;}
vlm931aeed2005-08-12 10:09:10 +00001729case 48:
vlm1ac75e72005-11-26 11:21:55 +00001730#line 669 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001731{
vlmfa67ddc2004-06-03 03:38:44 +00001732 yyval.a_xports = 0;
vlm6a02a8a2004-09-08 00:28:11 +00001733 ;
1734 break;}
vlm931aeed2005-08-12 10:09:10 +00001735case 49:
vlm1ac75e72005-11-26 11:21:55 +00001736#line 672 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001737{
vlmfa67ddc2004-06-03 03:38:44 +00001738 /* Empty EXPORTS clause effectively prohibits export. */
1739 yyval.a_xports = asn1p_xports_new();
1740 checkmem(yyval.a_xports);
vlm6a02a8a2004-09-08 00:28:11 +00001741 ;
1742 break;}
vlm931aeed2005-08-12 10:09:10 +00001743case 50:
vlm1ac75e72005-11-26 11:21:55 +00001744#line 680 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001745{
vlmfa67ddc2004-06-03 03:38:44 +00001746 yyval.a_xports = asn1p_xports_new();
1747 assert(yyval.a_xports);
1748 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001749 ;
1750 break;}
vlm931aeed2005-08-12 10:09:10 +00001751case 51:
vlm1ac75e72005-11-26 11:21:55 +00001752#line 685 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001753{
vlmfa67ddc2004-06-03 03:38:44 +00001754 yyval.a_xports = yyvsp[-2].a_xports;
1755 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm6a02a8a2004-09-08 00:28:11 +00001756 ;
1757 break;}
vlm0aa86902004-10-12 23:26:53 +00001758case 52:
vlm1ac75e72005-11-26 11:21:55 +00001759#line 692 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001760{
1761 yyval.a_expr = asn1p_expr_new(yylineno);
1762 checkmem(yyval.a_expr);
1763 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1764 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1765 ;
1766 break;}
1767case 53:
vlm1ac75e72005-11-26 11:21:55 +00001768#line 698 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001769{
1770 yyval.a_expr = asn1p_expr_new(yylineno);
1771 checkmem(yyval.a_expr);
1772 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1773 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1774 ;
vlm7388db02005-03-31 21:48:13 +00001775 break;}
1776case 54:
vlm1ac75e72005-11-26 11:21:55 +00001777#line 704 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001778{
1779 yyval.a_expr = asn1p_expr_new(yylineno);
1780 checkmem(yyval.a_expr);
1781 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1782 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
1783 ;
1784 break;}
1785case 55:
vlm1ac75e72005-11-26 11:21:55 +00001786#line 715 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001787{ asn1p_lexer_hack_push_opaque_state(); ;
1788 break;}
1789case 56:
vlm1ac75e72005-11-26 11:21:55 +00001790#line 715 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001791{
vlmfa67ddc2004-06-03 03:38:44 +00001792 yyval.a_expr = yyvsp[-4].a_expr;
1793 assert(yyval.a_expr->Identifier == 0);
1794 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1795 yyval.a_expr->meta_type = AMT_VALUESET;
vlm7388db02005-03-31 21:48:13 +00001796 // take care of ValueSet body
vlm6a02a8a2004-09-08 00:28:11 +00001797 ;
1798 break;}
vlm931aeed2005-08-12 10:09:10 +00001799case 57:
vlm1ac75e72005-11-26 11:21:55 +00001800#line 725 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001801{
vlmfa67ddc2004-06-03 03:38:44 +00001802 yyval.a_expr = asn1p_expr_new(yylineno);
1803 checkmem(yyval.a_expr);
1804 yyval.a_expr->reference = yyvsp[0].a_ref;
1805 yyval.a_expr->expr_type = A1TC_REFERENCE;
1806 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00001807 ;
1808 break;}
vlm931aeed2005-08-12 10:09:10 +00001809case 58:
vlm1ac75e72005-11-26 11:21:55 +00001810#line 732 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001811{
vlmfa67ddc2004-06-03 03:38:44 +00001812 yyval.a_expr = asn1p_expr_new(yylineno);
1813 checkmem(yyval.a_expr);
1814 yyval.a_expr->expr_type = yyvsp[0].a_type;
1815 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001816 ;
1817 break;}
vlm931aeed2005-08-12 10:09:10 +00001818case 59:
vlm1ac75e72005-11-26 11:21:55 +00001819#line 750 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001820{
vlmfa67ddc2004-06-03 03:38:44 +00001821 yyval.a_expr = asn1p_expr_new(yylineno);
1822 checkmem(yyval.a_expr);
1823 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
1824 yyval.a_expr->tag = yyvsp[-1].a_tag;
1825 yyval.a_expr->expr_type = A1TC_TYPEID;
1826 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001827 ;
1828 break;}
vlm931aeed2005-08-12 10:09:10 +00001829case 60:
vlm1ac75e72005-11-26 11:21:55 +00001830#line 758 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001831{
vlmfa67ddc2004-06-03 03:38:44 +00001832 yyval.a_expr = yyvsp[0].a_expr;
vlmfce48a42004-09-14 02:36:39 +00001833 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlmfa67ddc2004-06-03 03:38:44 +00001834 assert(yyval.a_expr->expr_type);
1835 assert(yyval.a_expr->meta_type);
vlm6a02a8a2004-09-08 00:28:11 +00001836 ;
1837 break;}
vlm931aeed2005-08-12 10:09:10 +00001838case 61:
vlm1ac75e72005-11-26 11:21:55 +00001839#line 764 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001840{
vlmfa67ddc2004-06-03 03:38:44 +00001841 yyval.a_expr = yyvsp[0].a_expr;
1842 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
1843 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
1844 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm6a02a8a2004-09-08 00:28:11 +00001845 ;
1846 break;}
vlm931aeed2005-08-12 10:09:10 +00001847case 62:
vlm1ac75e72005-11-26 11:21:55 +00001848#line 780 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001849{
vlmfa67ddc2004-06-03 03:38:44 +00001850 yyval.a_expr = yyvsp[0].a_expr;
1851 assert(yyval.a_expr->Identifier == 0);
1852 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
1853 yyval.a_expr->params = yyvsp[-3].a_plist;
1854 yyval.a_expr->meta_type = AMT_PARAMTYPE;
vlm6a02a8a2004-09-08 00:28:11 +00001855 ;
1856 break;}
vlm931aeed2005-08-12 10:09:10 +00001857case 63:
vlm1ac75e72005-11-26 11:21:55 +00001858#line 790 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001859{
vlmfa67ddc2004-06-03 03:38:44 +00001860 int ret;
1861 yyval.a_plist = asn1p_paramlist_new(yylineno);
1862 checkmem(yyval.a_plist);
1863 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1864 checkmem(ret == 0);
1865 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1866 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001867 ;
1868 break;}
vlm931aeed2005-08-12 10:09:10 +00001869case 64:
vlm1ac75e72005-11-26 11:21:55 +00001870#line 799 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001871{
vlmfa67ddc2004-06-03 03:38:44 +00001872 int ret;
1873 yyval.a_plist = yyvsp[-2].a_plist;
1874 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
1875 checkmem(ret == 0);
1876 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
1877 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm6a02a8a2004-09-08 00:28:11 +00001878 ;
1879 break;}
vlm931aeed2005-08-12 10:09:10 +00001880case 65:
vlm1ac75e72005-11-26 11:21:55 +00001881#line 810 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001882{
vlmfa67ddc2004-06-03 03:38:44 +00001883 yyval.a_parg.governor = NULL;
1884 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001885 ;
1886 break;}
vlm7388db02005-03-31 21:48:13 +00001887case 66:
vlm1ac75e72005-11-26 11:21:55 +00001888#line 814 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001889{
1890 int ret;
1891 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1892 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1893 checkmem(ret == 0);
1894 yyval.a_parg.argument = yyvsp[0].tv_str;
1895 ;
1896 break;}
1897case 67:
vlm1ac75e72005-11-26 11:21:55 +00001898#line 821 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00001899{
1900 int ret;
1901 yyval.a_parg.governor = asn1p_ref_new(yylineno);
1902 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
1903 checkmem(ret == 0);
1904 yyval.a_parg.argument = yyvsp[0].tv_str;
1905 ;
1906 break;}
1907case 68:
vlm1ac75e72005-11-26 11:21:55 +00001908#line 828 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00001909{
1910 int ret;
1911 yyval.a_parg.governor = asn1p_ref_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00001912 ret = asn1p_ref_add_component(yyval.a_parg.governor,
1913 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
1914 checkmem(ret == 0);
1915 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00001916 ;
1917 break;}
vlm931aeed2005-08-12 10:09:10 +00001918case 69:
vlm1ac75e72005-11-26 11:21:55 +00001919#line 839 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001920{
vlmfa67ddc2004-06-03 03:38:44 +00001921 yyval.a_expr = asn1p_expr_new(yylineno);
1922 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001923 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1924 ;
1925 break;}
vlm931aeed2005-08-12 10:09:10 +00001926case 70:
vlm1ac75e72005-11-26 11:21:55 +00001927#line 844 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001928{
vlmfa67ddc2004-06-03 03:38:44 +00001929 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001930 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1931 ;
1932 break;}
vlm931aeed2005-08-12 10:09:10 +00001933case 71:
vlm1ac75e72005-11-26 11:21:55 +00001934#line 851 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001935{
vlmfa67ddc2004-06-03 03:38:44 +00001936 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001937 ;
1938 break;}
vlm931aeed2005-08-12 10:09:10 +00001939case 72:
vlm1ac75e72005-11-26 11:21:55 +00001940#line 854 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001941{
vlmfa67ddc2004-06-03 03:38:44 +00001942 yyval.a_expr = asn1p_expr_new(yylineno);
1943 checkmem(yyval.a_expr);
1944 yyval.a_expr->Identifier = yyvsp[0].tv_str;
1945 yyval.a_expr->expr_type = A1TC_REFERENCE;
1946 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00001947 ;
1948 break;}
vlm931aeed2005-08-12 10:09:10 +00001949case 73:
vlm1ac75e72005-11-26 11:21:55 +00001950#line 878 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001951{ yyval.a_expr = asn1p_expr_new(yylineno); ;
1952 break;}
vlm931aeed2005-08-12 10:09:10 +00001953case 74:
vlm1ac75e72005-11-26 11:21:55 +00001954#line 879 "asn1p_y.y"
vlm0aa86902004-10-12 23:26:53 +00001955{ yyval.a_expr = yyvsp[0].a_expr; ;
1956 break;}
vlm931aeed2005-08-12 10:09:10 +00001957case 75:
vlm1ac75e72005-11-26 11:21:55 +00001958#line 882 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001959{
vlmfa67ddc2004-06-03 03:38:44 +00001960 yyval.a_expr = asn1p_expr_new(yylineno);
1961 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00001962 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1963 ;
1964 break;}
vlm931aeed2005-08-12 10:09:10 +00001965case 76:
vlm1ac75e72005-11-26 11:21:55 +00001966#line 887 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001967{
vlmfa67ddc2004-06-03 03:38:44 +00001968 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00001969 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1970 ;
1971 break;}
vlm931aeed2005-08-12 10:09:10 +00001972case 77:
vlm1ac75e72005-11-26 11:21:55 +00001973#line 894 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001974{
vlmec8f6812004-08-22 03:19:54 +00001975 yyval.a_expr = yyvsp[-1].a_expr;
1976 assert(yyval.a_expr->Identifier == 0);
vlmfce48a42004-09-14 02:36:39 +00001977 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
vlm177a5b62005-09-05 05:17:57 +00001978 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
vlmec8f6812004-08-22 03:19:54 +00001979 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00001980 ;
1981 break;}
vlm931aeed2005-08-12 10:09:10 +00001982case 78:
vlm1ac75e72005-11-26 11:21:55 +00001983#line 901 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00001984{
vlm177a5b62005-09-05 05:17:57 +00001985 yyval.a_expr = yyvsp[-1].a_expr;
1986 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
1987 yyval.a_expr->marker = yyvsp[0].a_marker;
1988 _fixup_anonymous_identifier(yyval.a_expr);
1989 ;
1990 break;}
1991case 79:
vlm1ac75e72005-11-26 11:21:55 +00001992#line 907 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00001993{
vlmec8f6812004-08-22 03:19:54 +00001994 yyval.a_expr = asn1p_expr_new(yylineno);
1995 checkmem(yyval.a_expr);
1996 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
1997 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
vlm6a02a8a2004-09-08 00:28:11 +00001998 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
1999 ;
2000 break;}
vlm177a5b62005-09-05 05:17:57 +00002001case 80:
vlm1ac75e72005-11-26 11:21:55 +00002002#line 914 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002003{
vlmec8f6812004-08-22 03:19:54 +00002004 yyval.a_expr = yyvsp[0].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002005 ;
2006 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002007case 81:
vlm1ac75e72005-11-26 11:21:55 +00002008#line 920 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002009{
vlmec8f6812004-08-22 03:19:54 +00002010 yyval.a_expr = asn1p_expr_new(yylineno);
2011 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00002012 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2013 ;
2014 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002015case 82:
vlm1ac75e72005-11-26 11:21:55 +00002016#line 925 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002017{
vlmec8f6812004-08-22 03:19:54 +00002018 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002019 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2020 ;
2021 break;}
vlm931aeed2005-08-12 10:09:10 +00002022case 83:
vlm1ac75e72005-11-26 11:21:55 +00002023#line 932 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002024{
vlmec8f6812004-08-22 03:19:54 +00002025 yyval.a_expr = yyvsp[0].a_expr;
vlm5d89c3d2005-08-13 09:07:11 +00002026 assert(yyval.a_expr->Identifier == 0);
2027 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002028 ;
2029 break;}
vlm931aeed2005-08-12 10:09:10 +00002030case 84:
vlm1ac75e72005-11-26 11:21:55 +00002031#line 937 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002032{
2033 yyval.a_expr = yyvsp[0].a_expr;
2034 ;
2035 break;}
2036case 85:
vlm1ac75e72005-11-26 11:21:55 +00002037#line 940 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002038{
2039 yyval.a_expr = yyvsp[0].a_expr;
2040 _fixup_anonymous_identifier(yyval.a_expr);
2041 ;
2042 break;}
2043case 86:
vlm1ac75e72005-11-26 11:21:55 +00002044#line 947 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002045{
vlmfa67ddc2004-06-03 03:38:44 +00002046 yyval.a_expr = yyvsp[-2].a_expr;
2047 checkmem(yyval.a_expr);
2048 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2049 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2050 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm6a02a8a2004-09-08 00:28:11 +00002051 ;
2052 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002053case 87:
vlm1ac75e72005-11-26 11:21:55 +00002054#line 957 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002055{ yyval.a_int = 0; ;
2056 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002057case 88:
vlm1ac75e72005-11-26 11:21:55 +00002058#line 958 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002059{ yyval.a_int = 1; ;
2060 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002061case 89:
vlm1ac75e72005-11-26 11:21:55 +00002062#line 962 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002063{
vlmfa67ddc2004-06-03 03:38:44 +00002064 yyval.a_expr = asn1p_expr_new(yylineno);
2065 checkmem(yyval.a_expr);
2066 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2067 yyval.a_expr->meta_type = AMT_OBJECT;
vlm6a02a8a2004-09-08 00:28:11 +00002068 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2069 ;
2070 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002071case 90:
vlm1ac75e72005-11-26 11:21:55 +00002072#line 969 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002073{
vlmfa67ddc2004-06-03 03:38:44 +00002074 yyval.a_expr = yyvsp[-2].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00002075 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2076 ;
2077 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002078case 91:
vlm1ac75e72005-11-26 11:21:55 +00002079#line 976 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002080{
vlmfa67ddc2004-06-03 03:38:44 +00002081 yyval.a_expr = asn1p_expr_new(yylineno);
2082 checkmem(yyval.a_expr);
2083 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2084 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2085 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2086 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm6a02a8a2004-09-08 00:28:11 +00002087 ;
2088 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002089case 92:
vlm1ac75e72005-11-26 11:21:55 +00002090#line 984 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002091{
vlmec8f6812004-08-22 03:19:54 +00002092 yyval.a_expr = yyvsp[-2].a_expr;
2093 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
vlmbde35d42004-11-24 17:43:29 +00002094 yyval.a_expr->marker = yyvsp[0].a_marker;
2095 yyval.a_expr->unique = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00002096 ;
2097 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002098case 93:
vlm1ac75e72005-11-26 11:21:55 +00002099#line 990 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002100{
vlmfa67ddc2004-06-03 03:38:44 +00002101 int ret;
2102 yyval.a_expr = asn1p_expr_new(yylineno);
2103 checkmem(yyval.a_expr);
2104 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2105 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2106 checkmem(yyval.a_expr->reference);
2107 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2108 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2109 checkmem(ret == 0);
2110 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2111 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
vlmbde35d42004-11-24 17:43:29 +00002112 yyval.a_expr->marker = yyvsp[0].a_marker;
2113 yyval.a_expr->unique = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00002114 ;
2115 break;}
vlm931aeed2005-08-12 10:09:10 +00002116case 94:
vlm1ac75e72005-11-26 11:21:55 +00002117#line 1008 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002118{ yyval.a_wsynt = 0; ;
vlm6a02a8a2004-09-08 00:28:11 +00002119 break;}
vlm931aeed2005-08-12 10:09:10 +00002120case 95:
vlm1ac75e72005-11-26 11:21:55 +00002121#line 1009 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002122{
vlm5d89c3d2005-08-13 09:07:11 +00002123 yyval.a_wsynt = yyvsp[0].a_wsynt;
vlm6a02a8a2004-09-08 00:28:11 +00002124 ;
2125 break;}
vlm931aeed2005-08-12 10:09:10 +00002126case 96:
vlm1ac75e72005-11-26 11:21:55 +00002127#line 1016 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002128{ asn1p_lexer_hack_enable_with_syntax(); ;
2129 break;}
2130case 97:
vlm1ac75e72005-11-26 11:21:55 +00002131#line 1018 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002132{
2133 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2134 ;
2135 break;}
2136case 98:
vlm1ac75e72005-11-26 11:21:55 +00002137#line 1024 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002138{
vlmfa67ddc2004-06-03 03:38:44 +00002139 yyval.a_wsynt = asn1p_wsyntx_new();
2140 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002141 ;
2142 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002143case 99:
vlm1ac75e72005-11-26 11:21:55 +00002144#line 1028 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002145{
vlmfa67ddc2004-06-03 03:38:44 +00002146 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2147 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm6a02a8a2004-09-08 00:28:11 +00002148 ;
2149 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002150case 100:
vlm1ac75e72005-11-26 11:21:55 +00002151#line 1035 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002152{
vlmfa67ddc2004-06-03 03:38:44 +00002153 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002154 ;
2155 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002156case 101:
vlm1ac75e72005-11-26 11:21:55 +00002157#line 1038 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002158{
vlmfa67ddc2004-06-03 03:38:44 +00002159 asn1p_ref_t *ref;
2160 int ret;
2161 ref = asn1p_ref_new(yylineno);
2162 checkmem(ref);
2163 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2164 checkmem(ret == 0);
2165 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002166 ;
2167 break;}
vlm931aeed2005-08-12 10:09:10 +00002168case 102:
vlm1ac75e72005-11-26 11:21:55 +00002169#line 1050 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00002170{
2171 yyval.a_expr = asn1p_expr_new(yylineno);
2172 checkmem(yyval.a_expr);
2173 yyval.a_expr->Identifier = strdup("...");
vlm931aeed2005-08-12 10:09:10 +00002174 checkmem(yyval.a_expr->Identifier);
2175 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2176 yyval.a_expr->meta_type = AMT_TYPE;
2177 ;
2178 break;}
2179case 103:
vlm1ac75e72005-11-26 11:21:55 +00002180#line 1058 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002181{
2182 yyval.a_expr = asn1p_expr_new(yylineno);
2183 checkmem(yyval.a_expr);
2184 yyval.a_expr->Identifier = strdup("...");
2185 checkmem(yyval.a_expr->Identifier);
2186 yyval.a_expr->value = yyvsp[0].a_value;
2187 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2188 yyval.a_expr->meta_type = AMT_TYPE;
2189 ;
2190 break;}
2191case 104:
vlm1ac75e72005-11-26 11:21:55 +00002192#line 1067 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002193{
2194 yyval.a_expr = asn1p_expr_new(yylineno);
2195 checkmem(yyval.a_expr);
2196 yyval.a_expr->Identifier = strdup("...");
2197 yyval.a_expr->value = yyvsp[0].a_value;
2198 checkmem(yyval.a_expr->Identifier);
2199 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2200 yyval.a_expr->meta_type = AMT_TYPE;
2201 ;
2202 break;}
2203case 105:
vlm1ac75e72005-11-26 11:21:55 +00002204#line 1079 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002205{
vlmec8f6812004-08-22 03:19:54 +00002206 yyval.a_expr = yyvsp[-1].a_expr;
vlmfce48a42004-09-14 02:36:39 +00002207 yyval.a_expr->tag = yyvsp[-2].a_tag;
vlmec8f6812004-08-22 03:19:54 +00002208 /*
2209 * Outer constraint for SEQUENCE OF and SET OF applies
2210 * to the inner type.
2211 */
2212 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2213 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2214 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2215 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2216 } else {
2217 if(yyval.a_expr->constraints) {
vlmfce48a42004-09-14 02:36:39 +00002218 assert(!yyvsp[-1].a_expr);
vlmec8f6812004-08-22 03:19:54 +00002219 } else {
2220 yyval.a_expr->constraints = yyvsp[0].a_constr;
2221 }
2222 }
vlm6a02a8a2004-09-08 00:28:11 +00002223 ;
2224 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002225case 106:
vlm1ac75e72005-11-26 11:21:55 +00002226#line 1101 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00002227{
2228 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
2229 asn1p_as_pointer = 0;
2230 ;
vlm066dc102005-08-22 12:23:54 +00002231 break;}
2232case 107:
vlm1ac75e72005-11-26 11:21:55 +00002233#line 1108 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002234{
vlm5f0128b2004-08-20 13:25:29 +00002235 yyval.a_expr = yyvsp[0].a_expr;
vlm177a5b62005-09-05 05:17:57 +00002236 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
2237
2238 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2239 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
2240 fprintf(stderr,
2241 "INFO: Directive <ASN1C:RepresentAsPointer> "
2242 "applied to %s at line %d\n",
2243 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2244 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2245 : "member",
2246 yyval.a_expr->_lineno
2247 );
2248 }
vlm6a02a8a2004-09-08 00:28:11 +00002249 ;
2250 break;}
vlm066dc102005-08-22 12:23:54 +00002251case 108:
vlm1ac75e72005-11-26 11:21:55 +00002252#line 1127 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002253{
vlm066dc102005-08-22 12:23:54 +00002254 yyval.a_expr = yyvsp[0].a_expr;
2255 ;
2256 break;}
2257case 109:
vlm1ac75e72005-11-26 11:21:55 +00002258#line 1130 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002259{
vlm177a5b62005-09-05 05:17:57 +00002260 yyval.a_expr = yyvsp[-1].a_expr;
vlm5e2c4b92005-03-20 11:12:40 +00002261 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2262 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
vlmfa67ddc2004-06-03 03:38:44 +00002263 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002264 ;
2265 break;}
vlm177a5b62005-09-05 05:17:57 +00002266case 110:
vlm1ac75e72005-11-26 11:21:55 +00002267#line 1136 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002268{
vlm177a5b62005-09-05 05:17:57 +00002269 yyval.a_expr = yyvsp[-1].a_expr;
vlmec8f6812004-08-22 03:19:54 +00002270 assert(yyval.a_expr->expr_type == A1TC_INVALID);
vlm5e2c4b92005-03-20 11:12:40 +00002271 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
vlmec8f6812004-08-22 03:19:54 +00002272 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002273 ;
2274 break;}
vlm177a5b62005-09-05 05:17:57 +00002275case 111:
vlm1ac75e72005-11-26 11:21:55 +00002276#line 1142 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002277{
vlm177a5b62005-09-05 05:17:57 +00002278 yyval.a_expr = yyvsp[-1].a_expr;
vlmec8f6812004-08-22 03:19:54 +00002279 assert(yyval.a_expr->expr_type == A1TC_INVALID);
vlm5e2c4b92005-03-20 11:12:40 +00002280 yyval.a_expr->expr_type = ASN_CONSTR_SET;
vlmec8f6812004-08-22 03:19:54 +00002281 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002282 ;
2283 break;}
vlm177a5b62005-09-05 05:17:57 +00002284case 112:
vlm1ac75e72005-11-26 11:21:55 +00002285#line 1148 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002286{
vlm39e5ed72004-09-05 10:40:41 +00002287 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002288 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002289 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002290 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2291 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002292 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002293 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002294 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2295 ;
2296 break;}
vlm177a5b62005-09-05 05:17:57 +00002297case 113:
vlm1ac75e72005-11-26 11:21:55 +00002298#line 1158 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002299{
vlm39e5ed72004-09-05 10:40:41 +00002300 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002301 checkmem(yyval.a_expr);
vlm151c0b22004-09-22 16:03:36 +00002302 yyval.a_expr->constraints = yyvsp[-4].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002303 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2304 yyval.a_expr->meta_type = AMT_TYPE;
vlm151c0b22004-09-22 16:03:36 +00002305 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
vlma2374a02004-09-14 02:44:07 +00002306 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
vlm6a02a8a2004-09-08 00:28:11 +00002307 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
2308 ;
2309 break;}
vlm177a5b62005-09-05 05:17:57 +00002310case 114:
vlm1ac75e72005-11-26 11:21:55 +00002311#line 1168 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002312{
vlm39e5ed72004-09-05 10:40:41 +00002313 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002314 checkmem(yyval.a_expr);
vlm044f7442004-09-04 04:49:21 +00002315 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002316 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002317 ;
2318 break;}
vlm177a5b62005-09-05 05:17:57 +00002319case 115:
vlm1ac75e72005-11-26 11:21:55 +00002320#line 1174 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002321{
vlmec8f6812004-08-22 03:19:54 +00002322 int ret;
vlm39e5ed72004-09-05 10:40:41 +00002323 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002324 checkmem(yyval.a_expr);
2325 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2326 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2327 yyvsp[0].tv_str, RLT_lowercase);
2328 checkmem(ret == 0);
vlm044f7442004-09-04 04:49:21 +00002329 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002330 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002331 ;
2332 break;}
vlm177a5b62005-09-05 05:17:57 +00002333case 116:
vlm1ac75e72005-11-26 11:21:55 +00002334#line 1188 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002335{
vlmfa67ddc2004-06-03 03:38:44 +00002336 int ret;
2337 yyval.a_expr = yyvsp[-1].a_expr;
2338 assert(yyval.a_expr->expr_type == 0);
2339 assert(yyval.a_expr->meta_type == 0);
2340 assert(yyval.a_expr->reference == 0);
2341 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2342 checkmem(yyval.a_expr->reference);
2343 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2344 checkmem(ret == 0);
2345 free(yyvsp[-3].tv_str);
2346 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2347 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002348 ;
2349 break;}
vlm177a5b62005-09-05 05:17:57 +00002350case 117:
vlm1ac75e72005-11-26 11:21:55 +00002351#line 1212 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002352{
vlmfa67ddc2004-06-03 03:38:44 +00002353 yyval.a_expr = asn1p_expr_new(yylineno);
2354 checkmem(yyval.a_expr);
2355 yyval.a_expr->reference = yyvsp[0].a_ref;
2356 yyval.a_expr->expr_type = A1TC_REFERENCE;
2357 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm6a02a8a2004-09-08 00:28:11 +00002358 ;
2359 break;}
vlm177a5b62005-09-05 05:17:57 +00002360case 118:
vlm1ac75e72005-11-26 11:21:55 +00002361#line 1219 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002362{
vlmfa67ddc2004-06-03 03:38:44 +00002363 yyval.a_expr = asn1p_expr_new(yylineno);
2364 checkmem(yyval.a_expr);
2365 yyval.a_expr->reference = yyvsp[0].a_ref;
2366 yyval.a_expr->expr_type = A1TC_INSTANCE;
2367 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002368 ;
2369 break;}
vlm177a5b62005-09-05 05:17:57 +00002370case 119:
vlm1ac75e72005-11-26 11:21:55 +00002371#line 1234 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002372{
vlmfa67ddc2004-06-03 03:38:44 +00002373 int ret;
2374 yyval.a_ref = asn1p_ref_new(yylineno);
2375 checkmem(yyval.a_ref);
2376 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2377 checkmem(ret == 0);
2378 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002379 ;
2380 break;}
vlm177a5b62005-09-05 05:17:57 +00002381case 120:
vlm1ac75e72005-11-26 11:21:55 +00002382#line 1242 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002383{
2384 int ret;
2385 yyval.a_ref = asn1p_ref_new(yylineno);
2386 checkmem(yyval.a_ref);
2387 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2388 checkmem(ret == 0);
2389 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2390 checkmem(ret == 0);
2391 free(yyvsp[-2].tv_str);
2392 ;
2393 break;}
vlm177a5b62005-09-05 05:17:57 +00002394case 121:
vlm1ac75e72005-11-26 11:21:55 +00002395#line 1252 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002396{
2397 int ret;
2398 yyval.a_ref = asn1p_ref_new(yylineno);
2399 checkmem(yyval.a_ref);
2400 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2401 checkmem(ret == 0);
2402 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2403 checkmem(ret == 0);
2404 free(yyvsp[-2].tv_str);
2405 ;
2406 break;}
vlm177a5b62005-09-05 05:17:57 +00002407case 122:
vlm1ac75e72005-11-26 11:21:55 +00002408#line 1262 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002409{
vlmfa67ddc2004-06-03 03:38:44 +00002410 int ret;
2411 yyval.a_ref = asn1p_ref_new(yylineno);
2412 checkmem(yyval.a_ref);
vlmc94e28f2004-09-15 11:59:51 +00002413 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2414 checkmem(ret == 0);
2415 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2416 checkmem(ret == 0);
2417 free(yyvsp[-2].tv_str);
2418 ;
2419 break;}
vlm177a5b62005-09-05 05:17:57 +00002420case 123:
vlm1ac75e72005-11-26 11:21:55 +00002421#line 1272 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002422{
2423 int ret;
2424 yyval.a_ref = asn1p_ref_new(yylineno);
2425 checkmem(yyval.a_ref);
vlmfa67ddc2004-06-03 03:38:44 +00002426 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2427 free(yyvsp[0].tv_str);
2428 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002429 ;
2430 break;}
vlm177a5b62005-09-05 05:17:57 +00002431case 124:
vlm1ac75e72005-11-26 11:21:55 +00002432#line 1280 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002433{
vlmfa67ddc2004-06-03 03:38:44 +00002434 int ret;
2435 yyval.a_ref = yyvsp[0].a_ref;
2436 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2437 free(yyvsp[-2].tv_str);
2438 checkmem(ret == 0);
2439 /*
2440 * Move the last element infront.
2441 */
2442 {
2443 struct asn1p_ref_component_s tmp_comp;
2444 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2445 memmove(&yyval.a_ref->components[1],
2446 &yyval.a_ref->components[0],
2447 sizeof(yyval.a_ref->components[0])
2448 * (yyval.a_ref->comp_count - 1));
2449 yyval.a_ref->components[0] = tmp_comp;
2450 }
vlm6a02a8a2004-09-08 00:28:11 +00002451 ;
2452 break;}
vlm177a5b62005-09-05 05:17:57 +00002453case 125:
vlm1ac75e72005-11-26 11:21:55 +00002454#line 1302 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002455{
vlmfa67ddc2004-06-03 03:38:44 +00002456 int ret;
2457 yyval.a_ref = asn1p_ref_new(yylineno);
2458 checkmem(yyval.a_ref);
2459 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2460 free(yyvsp[0].a_refcomp.name);
2461 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002462 ;
2463 break;}
vlm177a5b62005-09-05 05:17:57 +00002464case 126:
vlm1ac75e72005-11-26 11:21:55 +00002465#line 1310 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002466{
vlmfa67ddc2004-06-03 03:38:44 +00002467 int ret;
2468 yyval.a_ref = yyvsp[-2].a_ref;
2469 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2470 free(yyvsp[0].a_refcomp.name);
2471 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002472 ;
2473 break;}
vlm177a5b62005-09-05 05:17:57 +00002474case 129:
vlm1ac75e72005-11-26 11:21:55 +00002475#line 1324 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002476{
vlmfa67ddc2004-06-03 03:38:44 +00002477 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2478 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002479 ;
2480 break;}
vlm177a5b62005-09-05 05:17:57 +00002481case 130:
vlm1ac75e72005-11-26 11:21:55 +00002482#line 1329 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002483{
vlmfa67ddc2004-06-03 03:38:44 +00002484 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2485 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00002486 ;
2487 break;}
vlm177a5b62005-09-05 05:17:57 +00002488case 131:
vlm1ac75e72005-11-26 11:21:55 +00002489#line 1342 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002490{
vlmfa67ddc2004-06-03 03:38:44 +00002491 yyval.a_expr = yyvsp[-2].a_expr;
2492 assert(yyval.a_expr->Identifier == NULL);
2493 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2494 yyval.a_expr->meta_type = AMT_VALUE;
2495 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002496 ;
2497 break;}
vlm177a5b62005-09-05 05:17:57 +00002498case 132:
vlm1ac75e72005-11-26 11:21:55 +00002499#line 1352 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002500{
2501 yyval.a_value = asn1p_value_fromint(0);
2502 checkmem(yyval.a_value);
2503 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
2504 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
2505 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
2506 ;
2507 break;}
vlm177a5b62005-09-05 05:17:57 +00002508case 133:
vlm1ac75e72005-11-26 11:21:55 +00002509#line 1359 "asn1p_y.y"
vlmd30bc6c2005-03-24 16:27:02 +00002510{ asn1p_lexer_hack_push_opaque_state(); ;
vlm6a02a8a2004-09-08 00:28:11 +00002511 break;}
vlm177a5b62005-09-05 05:17:57 +00002512case 134:
vlm1ac75e72005-11-26 11:21:55 +00002513#line 1359 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002514{
vlmfa67ddc2004-06-03 03:38:44 +00002515 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2516 checkmem(yyval.a_value);
2517 yyval.a_value->type = ATV_UNPARSED;
vlm6a02a8a2004-09-08 00:28:11 +00002518 ;
2519 break;}
vlm177a5b62005-09-05 05:17:57 +00002520case 135:
vlm1ac75e72005-11-26 11:21:55 +00002521#line 1364 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002522{
2523 yyval.a_value = asn1p_value_fromint(0);
2524 checkmem(yyval.a_value);
2525 yyval.a_value->type = ATV_NULL;
2526 ;
2527 break;}
vlm177a5b62005-09-05 05:17:57 +00002528case 136:
vlm1ac75e72005-11-26 11:21:55 +00002529#line 1369 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002530{
2531 yyval.a_value = asn1p_value_fromint(0);
2532 checkmem(yyval.a_value);
2533 yyval.a_value->type = ATV_FALSE;
2534 ;
2535 break;}
vlm177a5b62005-09-05 05:17:57 +00002536case 137:
vlm1ac75e72005-11-26 11:21:55 +00002537#line 1374 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002538{
2539 yyval.a_value = asn1p_value_fromint(0);
2540 checkmem(yyval.a_value);
2541 yyval.a_value->type = ATV_TRUE;
2542 ;
2543 break;}
vlm177a5b62005-09-05 05:17:57 +00002544case 138:
vlm1ac75e72005-11-26 11:21:55 +00002545#line 1379 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002546{
vlmfa67ddc2004-06-03 03:38:44 +00002547 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2548 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002549 ;
2550 break;}
vlm177a5b62005-09-05 05:17:57 +00002551case 139:
vlm1ac75e72005-11-26 11:21:55 +00002552#line 1383 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002553{
vlmfa67ddc2004-06-03 03:38:44 +00002554 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2555 checkmem(yyval.a_value);
vlm6a02a8a2004-09-08 00:28:11 +00002556 ;
2557 break;}
vlm177a5b62005-09-05 05:17:57 +00002558case 140:
vlm1ac75e72005-11-26 11:21:55 +00002559#line 1387 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002560{
vlme1e6ed82005-03-24 14:26:38 +00002561 yyval.a_value = yyval.a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002562 ;
2563 break;}
vlm177a5b62005-09-05 05:17:57 +00002564case 141:
vlm1ac75e72005-11-26 11:21:55 +00002565#line 1390 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00002566{
vlm5d89c3d2005-08-13 09:07:11 +00002567 yyval.a_value = yyvsp[0].a_value;
2568 ;
2569 break;}
vlm177a5b62005-09-05 05:17:57 +00002570case 142:
vlm1ac75e72005-11-26 11:21:55 +00002571#line 1393 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002572{
2573 yyval.a_value = yyvsp[0].a_value;
2574 ;
2575 break;}
vlm177a5b62005-09-05 05:17:57 +00002576case 143:
vlm1ac75e72005-11-26 11:21:55 +00002577#line 1399 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002578{
vlmfa67ddc2004-06-03 03:38:44 +00002579 asn1p_ref_t *ref;
2580 int ret;
2581 ref = asn1p_ref_new(yylineno);
2582 checkmem(ref);
2583 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2584 checkmem(ret == 0);
2585 yyval.a_value = asn1p_value_fromref(ref, 0);
2586 checkmem(yyval.a_value);
2587 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002588 ;
2589 break;}
vlm177a5b62005-09-05 05:17:57 +00002590case 144:
vlm1ac75e72005-11-26 11:21:55 +00002591#line 1410 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002592{
vlmfa67ddc2004-06-03 03:38:44 +00002593 asn1p_ref_t *ref;
2594 int ret;
2595 ref = asn1p_ref_new(yylineno);
2596 checkmem(ref);
2597 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2598 checkmem(ret == 0);
2599 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2600 checkmem(ret == 0);
2601 yyval.a_value = asn1p_value_fromref(ref, 0);
2602 checkmem(yyval.a_value);
2603 free(yyvsp[-2].tv_str);
2604 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00002605 ;
2606 break;}
vlm177a5b62005-09-05 05:17:57 +00002607case 145:
vlm1ac75e72005-11-26 11:21:55 +00002608#line 1428 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002609{
2610 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2611 checkmem(yyval.a_value);
2612 ;
2613 break;}
vlm177a5b62005-09-05 05:17:57 +00002614case 146:
vlm1ac75e72005-11-26 11:21:55 +00002615#line 1432 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002616{
vlm2c8c44d2005-03-24 16:22:35 +00002617 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
vlme1e6ed82005-03-24 14:26:38 +00002618 checkmem(yyval.a_value);
2619 yyval.a_value->type = ATV_TUPLE;
2620 ;
2621 break;}
vlm177a5b62005-09-05 05:17:57 +00002622case 147:
vlm1ac75e72005-11-26 11:21:55 +00002623#line 1437 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002624{
vlm2c8c44d2005-03-24 16:22:35 +00002625 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
vlme1e6ed82005-03-24 14:26:38 +00002626 checkmem(yyval.a_value);
2627 yyval.a_value->type = ATV_QUADRUPLE;
2628 ;
2629 break;}
vlm177a5b62005-09-05 05:17:57 +00002630case 148:
vlm1ac75e72005-11-26 11:21:55 +00002631#line 1471 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002632{
vlm6611add2005-03-20 14:28:32 +00002633 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
vlmfa67ddc2004-06-03 03:38:44 +00002634 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
2635 checkmem(yyval.tv_opaque.buf);
2636 yyval.tv_opaque.buf[0] = '{';
vlm6611add2005-03-20 14:28:32 +00002637 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
vlmfa67ddc2004-06-03 03:38:44 +00002638 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
2639 free(yyvsp[0].tv_opaque.buf);
vlm6a02a8a2004-09-08 00:28:11 +00002640 ;
2641 break;}
vlm177a5b62005-09-05 05:17:57 +00002642case 149:
vlm1ac75e72005-11-26 11:21:55 +00002643#line 1480 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002644{
vlmfa67ddc2004-06-03 03:38:44 +00002645 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
2646 char *p = malloc(newsize + 1);
2647 checkmem(p);
2648 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
2649 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
2650 p[newsize] = '\0';
2651 free(yyvsp[-1].tv_opaque.buf);
2652 free(yyvsp[0].tv_opaque.buf);
2653 yyval.tv_opaque.buf = p;
2654 yyval.tv_opaque.len = newsize;
vlm6a02a8a2004-09-08 00:28:11 +00002655 ;
2656 break;}
vlm177a5b62005-09-05 05:17:57 +00002657case 150:
vlm1ac75e72005-11-26 11:21:55 +00002658#line 1495 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002659{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
2660 break;}
vlm177a5b62005-09-05 05:17:57 +00002661case 151:
vlm1ac75e72005-11-26 11:21:55 +00002662#line 1496 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002663{ yyval.a_type = ASN_BASIC_NULL; ;
2664 break;}
vlm177a5b62005-09-05 05:17:57 +00002665case 152:
vlm1ac75e72005-11-26 11:21:55 +00002666#line 1497 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002667{ yyval.a_type = ASN_BASIC_REAL; ;
2668 break;}
vlm177a5b62005-09-05 05:17:57 +00002669case 153:
vlm1ac75e72005-11-26 11:21:55 +00002670#line 1498 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002671{ yyval.a_type = yyvsp[0].a_type; ;
vlm5d89c3d2005-08-13 09:07:11 +00002672 break;}
vlm177a5b62005-09-05 05:17:57 +00002673case 154:
vlm1ac75e72005-11-26 11:21:55 +00002674#line 1499 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002675{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
vlm5d89c3d2005-08-13 09:07:11 +00002676 break;}
vlm177a5b62005-09-05 05:17:57 +00002677case 155:
vlm1ac75e72005-11-26 11:21:55 +00002678#line 1500 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002679{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
vlm5d89c3d2005-08-13 09:07:11 +00002680 break;}
vlm177a5b62005-09-05 05:17:57 +00002681case 156:
vlm1ac75e72005-11-26 11:21:55 +00002682#line 1501 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002683{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
vlme1e6ed82005-03-24 14:26:38 +00002684 break;}
vlm177a5b62005-09-05 05:17:57 +00002685case 157:
vlm1ac75e72005-11-26 11:21:55 +00002686#line 1502 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002687{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
vlm931aeed2005-08-12 10:09:10 +00002688 break;}
vlm177a5b62005-09-05 05:17:57 +00002689case 158:
vlm1ac75e72005-11-26 11:21:55 +00002690#line 1503 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002691{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
vlm931aeed2005-08-12 10:09:10 +00002692 break;}
vlm177a5b62005-09-05 05:17:57 +00002693case 159:
vlm1ac75e72005-11-26 11:21:55 +00002694#line 1504 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002695{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
vlm5d89c3d2005-08-13 09:07:11 +00002696 break;}
vlm177a5b62005-09-05 05:17:57 +00002697case 160:
vlm1ac75e72005-11-26 11:21:55 +00002698#line 1505 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002699{ yyval.a_type = ASN_BASIC_UTCTime; ;
vlm5d89c3d2005-08-13 09:07:11 +00002700 break;}
vlm177a5b62005-09-05 05:17:57 +00002701case 161:
vlm1ac75e72005-11-26 11:21:55 +00002702#line 1506 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002703{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
2704 break;}
vlm177a5b62005-09-05 05:17:57 +00002705case 162:
vlm1ac75e72005-11-26 11:21:55 +00002706#line 1507 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002707{ yyval.a_type = yyvsp[0].a_type; ;
2708 break;}
vlm177a5b62005-09-05 05:17:57 +00002709case 163:
vlm1ac75e72005-11-26 11:21:55 +00002710#line 1514 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002711{ yyval.a_type = ASN_BASIC_INTEGER; ;
2712 break;}
vlm177a5b62005-09-05 05:17:57 +00002713case 164:
vlm1ac75e72005-11-26 11:21:55 +00002714#line 1515 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002715{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
2716 break;}
vlm177a5b62005-09-05 05:17:57 +00002717case 165:
vlm1ac75e72005-11-26 11:21:55 +00002718#line 1516 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002719{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
2720 break;}
vlm177a5b62005-09-05 05:17:57 +00002721case 166:
vlm1ac75e72005-11-26 11:21:55 +00002722#line 1520 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002723{
vlm39e5ed72004-09-05 10:40:41 +00002724 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002725 checkmem(yyval.a_expr);
2726 yyval.a_expr->expr_type = yyvsp[0].a_type;
2727 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002728 ;
2729 break;}
vlm177a5b62005-09-05 05:17:57 +00002730case 167:
vlm1ac75e72005-11-26 11:21:55 +00002731#line 1526 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002732{
vlmfa67ddc2004-06-03 03:38:44 +00002733 if(yyvsp[0].a_expr) {
2734 yyval.a_expr = yyvsp[0].a_expr;
2735 } else {
vlm39e5ed72004-09-05 10:40:41 +00002736 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002737 checkmem(yyval.a_expr);
2738 }
2739 yyval.a_expr->expr_type = yyvsp[-1].a_type;
2740 yyval.a_expr->meta_type = AMT_TYPE;
vlm6a02a8a2004-09-08 00:28:11 +00002741 ;
2742 break;}
vlm177a5b62005-09-05 05:17:57 +00002743case 168:
vlm1ac75e72005-11-26 11:21:55 +00002744#line 1539 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002745{ yyval.a_type = ASN_STRING_BMPString; ;
2746 break;}
vlm177a5b62005-09-05 05:17:57 +00002747case 169:
vlm1ac75e72005-11-26 11:21:55 +00002748#line 1540 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002749{
vlmfa67ddc2004-06-03 03:38:44 +00002750 yyval.a_type = ASN_STRING_GeneralString;
vlmc94e28f2004-09-15 11:59:51 +00002751 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002752 ;
2753 break;}
vlm177a5b62005-09-05 05:17:57 +00002754case 170:
vlm1ac75e72005-11-26 11:21:55 +00002755#line 1544 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002756{
vlmc94e28f2004-09-15 11:59:51 +00002757 yyval.a_type = ASN_STRING_GraphicString;
2758 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
vlm6a02a8a2004-09-08 00:28:11 +00002759 ;
2760 break;}
vlm177a5b62005-09-05 05:17:57 +00002761case 171:
vlm1ac75e72005-11-26 11:21:55 +00002762#line 1548 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002763{ yyval.a_type = ASN_STRING_IA5String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002764 break;}
vlm177a5b62005-09-05 05:17:57 +00002765case 172:
vlm1ac75e72005-11-26 11:21:55 +00002766#line 1549 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002767{ yyval.a_type = ASN_STRING_ISO646String; ;
vlm6a02a8a2004-09-08 00:28:11 +00002768 break;}
vlm177a5b62005-09-05 05:17:57 +00002769case 173:
vlm1ac75e72005-11-26 11:21:55 +00002770#line 1550 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002771{ yyval.a_type = ASN_STRING_NumericString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002772 break;}
vlm177a5b62005-09-05 05:17:57 +00002773case 174:
vlm1ac75e72005-11-26 11:21:55 +00002774#line 1551 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002775{ yyval.a_type = ASN_STRING_PrintableString; ;
vlm6a02a8a2004-09-08 00:28:11 +00002776 break;}
vlm177a5b62005-09-05 05:17:57 +00002777case 175:
vlm1ac75e72005-11-26 11:21:55 +00002778#line 1552 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002779{
2780 yyval.a_type = ASN_STRING_T61String;
2781 fprintf(stderr, "WARNING: T61String is not fully supported\n");
2782 ;
vlm6a02a8a2004-09-08 00:28:11 +00002783 break;}
vlm177a5b62005-09-05 05:17:57 +00002784case 176:
vlm1ac75e72005-11-26 11:21:55 +00002785#line 1556 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002786{ yyval.a_type = ASN_STRING_TeletexString; ;
2787 break;}
vlm177a5b62005-09-05 05:17:57 +00002788case 177:
vlm1ac75e72005-11-26 11:21:55 +00002789#line 1557 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002790{ yyval.a_type = ASN_STRING_UniversalString; ;
2791 break;}
vlm177a5b62005-09-05 05:17:57 +00002792case 178:
vlm1ac75e72005-11-26 11:21:55 +00002793#line 1558 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002794{ yyval.a_type = ASN_STRING_UTF8String; ;
2795 break;}
vlm177a5b62005-09-05 05:17:57 +00002796case 179:
vlm1ac75e72005-11-26 11:21:55 +00002797#line 1559 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002798{
2799 yyval.a_type = ASN_STRING_VideotexString;
2800 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
2801 ;
2802 break;}
vlm177a5b62005-09-05 05:17:57 +00002803case 180:
vlm1ac75e72005-11-26 11:21:55 +00002804#line 1563 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002805{ yyval.a_type = ASN_STRING_VisibleString; ;
2806 break;}
vlm177a5b62005-09-05 05:17:57 +00002807case 181:
vlm1ac75e72005-11-26 11:21:55 +00002808#line 1564 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002809{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
2810 break;}
vlm177a5b62005-09-05 05:17:57 +00002811case 187:
vlm1ac75e72005-11-26 11:21:55 +00002812#line 1576 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002813{ yyval.a_constr = 0; ;
2814 break;}
vlm177a5b62005-09-05 05:17:57 +00002815case 188:
vlm1ac75e72005-11-26 11:21:55 +00002816#line 1577 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002817{
vlm39e5ed72004-09-05 10:40:41 +00002818 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002819 ;
2820 break;}
vlm177a5b62005-09-05 05:17:57 +00002821case 189:
vlm1ac75e72005-11-26 11:21:55 +00002822#line 1583 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002823{
vlm39e5ed72004-09-05 10:40:41 +00002824 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002825 ;
2826 break;}
vlm177a5b62005-09-05 05:17:57 +00002827case 190:
vlm1ac75e72005-11-26 11:21:55 +00002828#line 1586 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002829{
vlmfa67ddc2004-06-03 03:38:44 +00002830 /*
2831 * This is a special case, for compatibility purposes.
vlm9283dbe2004-08-18 04:59:12 +00002832 * It goes without parentheses.
vlmfa67ddc2004-06-03 03:38:44 +00002833 */
vlm5f0128b2004-08-20 13:25:29 +00002834 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00002835 ;
2836 break;}
vlm177a5b62005-09-05 05:17:57 +00002837case 191:
vlm1ac75e72005-11-26 11:21:55 +00002838#line 1596 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002839{
vlmfa67ddc2004-06-03 03:38:44 +00002840 yyval.a_constr = yyvsp[-1].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002841 ;
2842 break;}
vlm177a5b62005-09-05 05:17:57 +00002843case 192:
vlm1ac75e72005-11-26 11:21:55 +00002844#line 1599 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002845{
vlm9283dbe2004-08-18 04:59:12 +00002846 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002847 ;
2848 break;}
vlm177a5b62005-09-05 05:17:57 +00002849case 193:
vlm1ac75e72005-11-26 11:21:55 +00002850#line 1605 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002851{
vlmfa67ddc2004-06-03 03:38:44 +00002852 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002853 ;
2854 break;}
vlm177a5b62005-09-05 05:17:57 +00002855case 194:
vlm1ac75e72005-11-26 11:21:55 +00002856#line 1608 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002857{
vlmfa67ddc2004-06-03 03:38:44 +00002858 asn1p_constraint_t *ct;
2859 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002860 ct->type = ACT_EL_EXT;
2861 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00002862 ;
2863 break;}
vlm177a5b62005-09-05 05:17:57 +00002864case 195:
vlm1ac75e72005-11-26 11:21:55 +00002865#line 1614 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002866{
vlmfa67ddc2004-06-03 03:38:44 +00002867 asn1p_constraint_t *ct;
2868 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00002869 ct->type = ACT_EL_EXT;
2870 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
vlm6f5eb0b2004-08-13 12:35:09 +00002871 ct = yyval.a_constr;
2872 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002873 ;
2874 break;}
vlm177a5b62005-09-05 05:17:57 +00002875case 196:
vlm1ac75e72005-11-26 11:21:55 +00002876#line 1625 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002877{
vlm9283dbe2004-08-18 04:59:12 +00002878 yyval.a_constr = yyvsp[0].a_constr;
vlm6a02a8a2004-09-08 00:28:11 +00002879 ;
2880 break;}
vlm177a5b62005-09-05 05:17:57 +00002881case 197:
vlm1ac75e72005-11-26 11:21:55 +00002882#line 1628 "asn1p_y.y"
vlme1e6ed82005-03-24 14:26:38 +00002883{
2884 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
2885 ;
2886 break;}
vlm177a5b62005-09-05 05:17:57 +00002887case 198:
vlm1ac75e72005-11-26 11:21:55 +00002888#line 1631 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002889{
vlmfa67ddc2004-06-03 03:38:44 +00002890 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002891 ;
2892 break;}
vlm177a5b62005-09-05 05:17:57 +00002893case 199:
vlm1ac75e72005-11-26 11:21:55 +00002894#line 1634 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002895{
vlmfa67ddc2004-06-03 03:38:44 +00002896 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002897 ;
2898 break;}
vlm177a5b62005-09-05 05:17:57 +00002899case 200:
vlm1ac75e72005-11-26 11:21:55 +00002900#line 1637 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002901{
vlmfa67ddc2004-06-03 03:38:44 +00002902 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00002903 ;
2904 break;}
vlm177a5b62005-09-05 05:17:57 +00002905case 201:
vlm1ac75e72005-11-26 11:21:55 +00002906#line 1643 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002907{
vlmfa67ddc2004-06-03 03:38:44 +00002908 int ret;
2909 yyval.a_constr = asn1p_constraint_new(yylineno);
2910 checkmem(yyval.a_constr);
2911 yyval.a_constr->type = yyvsp[-3].a_ctype;
2912 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2913 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002914 ;
2915 break;}
vlm177a5b62005-09-05 05:17:57 +00002916case 202:
vlm1ac75e72005-11-26 11:21:55 +00002917#line 1651 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002918{
vlm9283dbe2004-08-18 04:59:12 +00002919 int ret;
2920 yyval.a_constr = asn1p_constraint_new(yylineno);
2921 checkmem(yyval.a_constr);
2922 yyval.a_constr->type = ACT_CA_SET;
2923 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
2924 checkmem(ret == 0);
vlm6a02a8a2004-09-08 00:28:11 +00002925 ;
2926 break;}
vlm177a5b62005-09-05 05:17:57 +00002927case 203:
vlm1ac75e72005-11-26 11:21:55 +00002928#line 1659 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00002929{
vlm9283dbe2004-08-18 04:59:12 +00002930 yyval.a_constr = asn1p_constraint_new(yylineno);
2931 checkmem(yyval.a_constr);
2932 yyval.a_constr->type = ACT_EL_VALUE;
2933 yyval.a_constr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00002934 ;
2935 break;}
vlm177a5b62005-09-05 05:17:57 +00002936case 204:
vlm1ac75e72005-11-26 11:21:55 +00002937#line 1665 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00002938{
vlm0aa86902004-10-12 23:26:53 +00002939 yyval.a_constr = asn1p_constraint_new(yylineno);
2940 checkmem(yyval.a_constr);
vlma6a12e32005-03-20 12:58:00 +00002941 yyval.a_constr->type = ACT_EL_TYPE;
2942 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
vlmc94e28f2004-09-15 11:59:51 +00002943 ;
2944 break;}
vlm177a5b62005-09-05 05:17:57 +00002945case 205:
vlm1ac75e72005-11-26 11:21:55 +00002946#line 1671 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00002947{
vlm066dc102005-08-22 12:23:54 +00002948 yyval.a_constr = asn1p_constraint_new(yylineno);
2949 checkmem(yyval.a_constr);
2950 yyval.a_constr->type = yyvsp[-1].a_ctype;
2951 yyval.a_constr->range_start = yyvsp[-2].a_value;
2952 yyval.a_constr->range_stop = yyvsp[0].a_value;
vlm5d89c3d2005-08-13 09:07:11 +00002953 ;
2954 break;}
vlm177a5b62005-09-05 05:17:57 +00002955case 206:
vlm1ac75e72005-11-26 11:21:55 +00002956#line 1678 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00002957{
2958 yyval.a_constr = asn1p_constraint_new(yylineno);
2959 checkmem(yyval.a_constr);
2960 yyval.a_constr->type = yyvsp[-1].a_ctype;
2961 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2962 yyval.a_constr->range_stop = yyvsp[0].a_value;
2963 yyval.a_constr->range_start->type = ATV_MIN;
2964 ;
2965 break;}
2966case 207:
vlm1ac75e72005-11-26 11:21:55 +00002967#line 1686 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00002968{
2969 yyval.a_constr = asn1p_constraint_new(yylineno);
2970 checkmem(yyval.a_constr);
2971 yyval.a_constr->type = yyvsp[-1].a_ctype;
2972 yyval.a_constr->range_start = yyvsp[-2].a_value;
2973 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2974 yyval.a_constr->range_stop->type = ATV_MAX;
2975 ;
2976 break;}
2977case 208:
vlm1ac75e72005-11-26 11:21:55 +00002978#line 1694 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00002979{
2980 yyval.a_constr = asn1p_constraint_new(yylineno);
2981 checkmem(yyval.a_constr);
2982 yyval.a_constr->type = yyvsp[-1].a_ctype;
2983 yyval.a_constr->range_start = asn1p_value_fromint(-123);
2984 yyval.a_constr->range_stop = asn1p_value_fromint(321);
2985 yyval.a_constr->range_start->type = ATV_MIN;
2986 yyval.a_constr->range_stop->type = ATV_MAX;
2987 ;
2988 break;}
vlm5d89c3d2005-08-13 09:07:11 +00002989case 209:
vlm1ac75e72005-11-26 11:21:55 +00002990#line 1703 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002991{
vlm177a5b62005-09-05 05:17:57 +00002992 yyval.a_constr = yyvsp[0].a_constr;
vlm066dc102005-08-22 12:23:54 +00002993 ;
vlm5d89c3d2005-08-13 09:07:11 +00002994 break;}
2995case 210:
vlm1ac75e72005-11-26 11:21:55 +00002996#line 1706 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00002997{
vlm177a5b62005-09-05 05:17:57 +00002998 yyval.a_constr = yyvsp[0].a_constr;
vlm066dc102005-08-22 12:23:54 +00002999 ;
3000 break;}
3001case 211:
vlm1ac75e72005-11-26 11:21:55 +00003002#line 1710 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003003{ asn1p_lexer_hack_push_opaque_state(); ;
3004 break;}
vlm177a5b62005-09-05 05:17:57 +00003005case 212:
vlm1ac75e72005-11-26 11:21:55 +00003006#line 1710 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003007{
3008 yyval.a_constr = asn1p_constraint_new(yylineno);
3009 checkmem(yyval.a_constr);
3010 yyval.a_constr->type = ACT_CT_CTDBY;
3011 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3012 checkmem(yyval.a_constr->value);
3013 yyval.a_constr->value->type = ATV_UNPARSED;
3014 ;
vlm0aa86902004-10-12 23:26:53 +00003015 break;}
vlm177a5b62005-09-05 05:17:57 +00003016case 213:
vlm1ac75e72005-11-26 11:21:55 +00003017#line 1721 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003018{ yyval.a_ctype = ACT_EL_RANGE; ;
vlm4053ca52005-02-18 16:34:21 +00003019 break;}
vlm177a5b62005-09-05 05:17:57 +00003020case 214:
vlm1ac75e72005-11-26 11:21:55 +00003021#line 1722 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003022{ yyval.a_ctype = ACT_EL_RLRANGE; ;
vlma6a12e32005-03-20 12:58:00 +00003023 break;}
vlm177a5b62005-09-05 05:17:57 +00003024case 215:
vlm1ac75e72005-11-26 11:21:55 +00003025#line 1723 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003026{ yyval.a_ctype = ACT_EL_LLRANGE; ;
3027 break;}
vlm177a5b62005-09-05 05:17:57 +00003028case 216:
vlm1ac75e72005-11-26 11:21:55 +00003029#line 1724 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003030{ yyval.a_ctype = ACT_EL_ULRANGE; ;
3031 break;}
vlm177a5b62005-09-05 05:17:57 +00003032case 217:
vlm1ac75e72005-11-26 11:21:55 +00003033#line 1728 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003034{
vlm39e5ed72004-09-05 10:40:41 +00003035 yyval.a_ctype = ACT_CT_SIZE;
vlm6a02a8a2004-09-08 00:28:11 +00003036 ;
3037 break;}
vlm177a5b62005-09-05 05:17:57 +00003038case 218:
vlm1ac75e72005-11-26 11:21:55 +00003039#line 1731 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003040{
vlm39e5ed72004-09-05 10:40:41 +00003041 yyval.a_ctype = ACT_CT_FROM;
vlm6a02a8a2004-09-08 00:28:11 +00003042 ;
3043 break;}
vlm177a5b62005-09-05 05:17:57 +00003044case 219:
vlm1ac75e72005-11-26 11:21:55 +00003045#line 1737 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003046{
3047 yyval.a_value = asn1p_value_fromint(0);
3048 checkmem(yyval.a_value);
3049 yyval.a_value->type = ATV_FALSE;
3050 ;
3051 break;}
vlm177a5b62005-09-05 05:17:57 +00003052case 220:
vlm1ac75e72005-11-26 11:21:55 +00003053#line 1742 "asn1p_y.y"
vlm4053ca52005-02-18 16:34:21 +00003054{
3055 yyval.a_value = asn1p_value_fromint(1);
3056 checkmem(yyval.a_value);
3057 yyval.a_value->type = ATV_TRUE;
3058 ;
3059 break;}
vlm177a5b62005-09-05 05:17:57 +00003060case 221:
vlm1ac75e72005-11-26 11:21:55 +00003061#line 1747 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003062{
3063 yyval.a_value = yyvsp[0].a_value;
3064 ;
3065 break;}
vlm177a5b62005-09-05 05:17:57 +00003066case 222:
vlm1ac75e72005-11-26 11:21:55 +00003067#line 1750 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003068{
3069 yyval.a_value = yyvsp[0].a_value;
3070 ;
3071 break;}
vlm177a5b62005-09-05 05:17:57 +00003072case 223:
vlm1ac75e72005-11-26 11:21:55 +00003073#line 1753 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003074{
vlmfa67ddc2004-06-03 03:38:44 +00003075 asn1p_ref_t *ref;
3076 int ret;
3077 ref = asn1p_ref_new(yylineno);
3078 checkmem(ref);
3079 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3080 checkmem(ret == 0);
3081 yyval.a_value = asn1p_value_fromref(ref, 0);
3082 checkmem(yyval.a_value);
3083 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003084 ;
3085 break;}
vlm177a5b62005-09-05 05:17:57 +00003086case 224:
vlm1ac75e72005-11-26 11:21:55 +00003087#line 1767 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003088{
vlm4053ca52005-02-18 16:34:21 +00003089 asn1p_ref_t *ref;
3090 int ret;
3091 ref = asn1p_ref_new(yylineno);
3092 checkmem(ref);
3093 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3094 checkmem(ret == 0);
3095 yyval.a_value = asn1p_value_fromref(ref, 0);
vlmfa67ddc2004-06-03 03:38:44 +00003096 checkmem(yyval.a_value);
vlm4053ca52005-02-18 16:34:21 +00003097 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003098 ;
3099 break;}
vlm177a5b62005-09-05 05:17:57 +00003100case 225:
vlm1ac75e72005-11-26 11:21:55 +00003101#line 1781 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003102{
vlm5d89c3d2005-08-13 09:07:11 +00003103 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003104 ;
3105 break;}
vlm177a5b62005-09-05 05:17:57 +00003106case 226:
vlm1ac75e72005-11-26 11:21:55 +00003107#line 1784 "asn1p_y.y"
vlm7bbdc9f2005-03-28 15:01:27 +00003108{
vlm5d89c3d2005-08-13 09:07:11 +00003109 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
vlm7bbdc9f2005-03-28 15:01:27 +00003110 ;
3111 break;}
vlm177a5b62005-09-05 05:17:57 +00003112case 227:
vlm1ac75e72005-11-26 11:21:55 +00003113#line 1790 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003114{
vlm5d89c3d2005-08-13 09:07:11 +00003115 yyval.a_constr = yyvsp[0].a_constr;
3116 ;
3117 break;}
vlm177a5b62005-09-05 05:17:57 +00003118case 228:
vlm1ac75e72005-11-26 11:21:55 +00003119#line 1793 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003120{
3121 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
3122 ;
3123 break;}
vlm177a5b62005-09-05 05:17:57 +00003124case 229:
vlm1ac75e72005-11-26 11:21:55 +00003125#line 1799 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003126{
vlmfa67ddc2004-06-03 03:38:44 +00003127 yyval.a_constr = asn1p_constraint_new(yylineno);
3128 checkmem(yyval.a_constr);
3129 yyval.a_constr->type = ACT_EL_EXT;
vlm7bbdc9f2005-03-28 15:01:27 +00003130 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003131 ;
3132 break;}
vlm177a5b62005-09-05 05:17:57 +00003133case 230:
vlm1ac75e72005-11-26 11:21:55 +00003134#line 1805 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003135{
vlmfa67ddc2004-06-03 03:38:44 +00003136 yyval.a_constr = asn1p_constraint_new(yylineno);
3137 checkmem(yyval.a_constr);
3138 yyval.a_constr->type = ACT_EL_VALUE;
3139 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3140 yyval.a_constr->presence = yyvsp[0].a_pres;
vlm7bbdc9f2005-03-28 15:01:27 +00003141 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003142 ;
3143 break;}
vlm177a5b62005-09-05 05:17:57 +00003144case 231:
vlm1ac75e72005-11-26 11:21:55 +00003145#line 1819 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003146{ yyval.a_pres = ACPRES_DEFAULT; ;
3147 break;}
vlm177a5b62005-09-05 05:17:57 +00003148case 232:
vlm1ac75e72005-11-26 11:21:55 +00003149#line 1820 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003150{ yyval.a_pres = yyvsp[0].a_pres; ;
3151 break;}
vlm177a5b62005-09-05 05:17:57 +00003152case 233:
vlm1ac75e72005-11-26 11:21:55 +00003153#line 1824 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003154{
vlmfa67ddc2004-06-03 03:38:44 +00003155 yyval.a_pres = ACPRES_PRESENT;
vlm6a02a8a2004-09-08 00:28:11 +00003156 ;
3157 break;}
vlm177a5b62005-09-05 05:17:57 +00003158case 234:
vlm1ac75e72005-11-26 11:21:55 +00003159#line 1827 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00003160{
vlm5d89c3d2005-08-13 09:07:11 +00003161 yyval.a_pres = ACPRES_ABSENT;
vlm931aeed2005-08-12 10:09:10 +00003162 ;
3163 break;}
vlm177a5b62005-09-05 05:17:57 +00003164case 235:
vlm1ac75e72005-11-26 11:21:55 +00003165#line 1830 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00003166{
vlm5d89c3d2005-08-13 09:07:11 +00003167 yyval.a_pres = ACPRES_OPTIONAL;
vlm931aeed2005-08-12 10:09:10 +00003168 ;
3169 break;}
vlm177a5b62005-09-05 05:17:57 +00003170case 236:
vlm1ac75e72005-11-26 11:21:55 +00003171#line 1836 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003172{
3173 yyval.a_constr = yyvsp[0].a_constr;
3174 ;
3175 break;}
vlm177a5b62005-09-05 05:17:57 +00003176case 237:
vlm1ac75e72005-11-26 11:21:55 +00003177#line 1839 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003178{
vlm5d89c3d2005-08-13 09:07:11 +00003179 yyval.a_constr = yyvsp[0].a_constr;
3180 ;
3181 break;}
vlm177a5b62005-09-05 05:17:57 +00003182case 238:
vlm1ac75e72005-11-26 11:21:55 +00003183#line 1848 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003184{
vlmfa67ddc2004-06-03 03:38:44 +00003185 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3186 asn1p_constraint_t *ct;
3187 int ret;
3188 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3189 checkmem(ret == 0);
3190 ct = asn1p_constraint_new(yylineno);
3191 checkmem(yyval.a_constr);
3192 ct->type = ACT_EL_VALUE;
3193 ct->value = asn1p_value_fromref(ref, 0);
3194 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003195 ;
3196 break;}
vlm177a5b62005-09-05 05:17:57 +00003197case 239:
vlm1ac75e72005-11-26 11:21:55 +00003198#line 1863 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003199{
vlmfa67ddc2004-06-03 03:38:44 +00003200 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm6a02a8a2004-09-08 00:28:11 +00003201 ;
3202 break;}
vlm177a5b62005-09-05 05:17:57 +00003203case 240:
vlm1ac75e72005-11-26 11:21:55 +00003204#line 1869 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003205{
vlmfa67ddc2004-06-03 03:38:44 +00003206 yyval.a_constr = asn1p_constraint_new(yylineno);
3207 checkmem(yyval.a_constr);
3208 yyval.a_constr->type = ACT_EL_VALUE;
3209 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
vlm6a02a8a2004-09-08 00:28:11 +00003210 ;
3211 break;}
vlm177a5b62005-09-05 05:17:57 +00003212case 241:
vlm1ac75e72005-11-26 11:21:55 +00003213#line 1875 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003214{
vlmfa67ddc2004-06-03 03:38:44 +00003215 asn1p_constraint_t *ct;
3216 ct = asn1p_constraint_new(yylineno);
3217 checkmem(ct);
3218 ct->type = ACT_EL_VALUE;
3219 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3220 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm6a02a8a2004-09-08 00:28:11 +00003221 ;
3222 break;}
vlm177a5b62005-09-05 05:17:57 +00003223case 242:
vlm1ac75e72005-11-26 11:21:55 +00003224#line 1889 "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) + 2);
3227 int ret;
3228 *p = '@';
3229 strcpy(p + 1, yyvsp[0].tv_str);
3230 yyval.a_ref = asn1p_ref_new(yylineno);
3231 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3232 checkmem(ret == 0);
3233 free(p);
3234 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003235 ;
3236 break;}
vlm177a5b62005-09-05 05:17:57 +00003237case 243:
vlm1ac75e72005-11-26 11:21:55 +00003238#line 1900 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003239{
vlmfa67ddc2004-06-03 03:38:44 +00003240 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3241 int ret;
3242 p[0] = '@';
3243 p[1] = '.';
3244 strcpy(p + 2, yyvsp[0].tv_str);
3245 yyval.a_ref = asn1p_ref_new(yylineno);
3246 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3247 checkmem(ret == 0);
3248 free(p);
3249 free(yyvsp[0].tv_str);
vlm6a02a8a2004-09-08 00:28:11 +00003250 ;
3251 break;}
vlm177a5b62005-09-05 05:17:57 +00003252case 244:
vlm1ac75e72005-11-26 11:21:55 +00003253#line 1916 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003254{
vlmfa67ddc2004-06-03 03:38:44 +00003255 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003256 ;
3257 break;}
vlm177a5b62005-09-05 05:17:57 +00003258case 245:
vlm1ac75e72005-11-26 11:21:55 +00003259#line 1919 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003260{
vlmfa67ddc2004-06-03 03:38:44 +00003261 int l1 = strlen(yyvsp[-2].tv_str);
3262 int l3 = strlen(yyvsp[0].tv_str);
3263 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3264 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3265 yyval.tv_str[l1] = '.';
3266 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3267 yyval.tv_str[l1 + 1 + l3] = '\0';
vlm6a02a8a2004-09-08 00:28:11 +00003268 ;
3269 break;}
vlm177a5b62005-09-05 05:17:57 +00003270case 246:
vlm1ac75e72005-11-26 11:21:55 +00003271#line 1937 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003272{
vlmc94e28f2004-09-15 11:59:51 +00003273 yyval.a_marker.flags = EM_NOMARK;
3274 yyval.a_marker.default_value = 0;
vlm6a02a8a2004-09-08 00:28:11 +00003275 ;
3276 break;}
vlm177a5b62005-09-05 05:17:57 +00003277case 247:
vlm1ac75e72005-11-26 11:21:55 +00003278#line 1941 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003279{ yyval.a_marker = yyvsp[0].a_marker; ;
vlma2374a02004-09-14 02:44:07 +00003280 break;}
vlm177a5b62005-09-05 05:17:57 +00003281case 248:
vlm1ac75e72005-11-26 11:21:55 +00003282#line 1945 "asn1p_y.y"
vlma2374a02004-09-14 02:44:07 +00003283{
vlm1ac75e72005-11-26 11:21:55 +00003284 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
vlmc94e28f2004-09-15 11:59:51 +00003285 yyval.a_marker.default_value = 0;
vlma2374a02004-09-14 02:44:07 +00003286 ;
3287 break;}
vlm177a5b62005-09-05 05:17:57 +00003288case 249:
vlm1ac75e72005-11-26 11:21:55 +00003289#line 1949 "asn1p_y.y"
vlmc94e28f2004-09-15 11:59:51 +00003290{
3291 yyval.a_marker.flags = EM_DEFAULT;
3292 yyval.a_marker.default_value = yyvsp[0].a_value;
3293 ;
3294 break;}
vlm177a5b62005-09-05 05:17:57 +00003295case 250:
vlm1ac75e72005-11-26 11:21:55 +00003296#line 1972 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003297{
vlm39e5ed72004-09-05 10:40:41 +00003298 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003299 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003300 ;
3301 break;}
vlm177a5b62005-09-05 05:17:57 +00003302case 251:
vlm1ac75e72005-11-26 11:21:55 +00003303#line 1976 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003304{
vlm7bbdc9f2005-03-28 15:01:27 +00003305 yyval.a_expr = yyvsp[-1].a_expr;
vlm6a02a8a2004-09-08 00:28:11 +00003306 ;
3307 break;}
vlm177a5b62005-09-05 05:17:57 +00003308case 252:
vlm1ac75e72005-11-26 11:21:55 +00003309#line 1982 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003310{
vlm7bbdc9f2005-03-28 15:01:27 +00003311 yyval.a_expr = asn1p_expr_new(yylineno);
3312 checkmem(yyval.a_expr);
vlm6a02a8a2004-09-08 00:28:11 +00003313 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3314 ;
3315 break;}
vlm177a5b62005-09-05 05:17:57 +00003316case 253:
vlm1ac75e72005-11-26 11:21:55 +00003317#line 1987 "asn1p_y.y"
vlm7bbdc9f2005-03-28 15:01:27 +00003318{
3319 yyval.a_expr = yyvsp[-2].a_expr;
3320 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
3321 ;
3322 break;}
vlm177a5b62005-09-05 05:17:57 +00003323case 254:
vlm1ac75e72005-11-26 11:21:55 +00003324#line 1994 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003325{
vlm39e5ed72004-09-05 10:40:41 +00003326 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003327 checkmem(yyval.a_expr);
3328 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3329 yyval.a_expr->meta_type = AMT_VALUE;
3330 yyval.a_expr->Identifier = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003331 ;
3332 break;}
vlm177a5b62005-09-05 05:17:57 +00003333case 255:
vlm1ac75e72005-11-26 11:21:55 +00003334#line 2001 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003335{
3336 yyval.a_expr = asn1p_expr_new(yylineno);
3337 checkmem(yyval.a_expr);
3338 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3339 yyval.a_expr->meta_type = AMT_VALUE;
3340 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3341 yyval.a_expr->value = yyvsp[-1].a_value;
3342 ;
3343 break;}
vlm177a5b62005-09-05 05:17:57 +00003344case 256:
vlm1ac75e72005-11-26 11:21:55 +00003345#line 2009 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003346{
3347 yyval.a_expr = asn1p_expr_new(yylineno);
3348 checkmem(yyval.a_expr);
3349 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3350 yyval.a_expr->meta_type = AMT_VALUE;
3351 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3352 yyval.a_expr->value = yyvsp[-1].a_value;
3353 ;
3354 break;}
vlm177a5b62005-09-05 05:17:57 +00003355case 257:
vlm1ac75e72005-11-26 11:21:55 +00003356#line 2017 "asn1p_y.y"
vlm6611add2005-03-20 14:28:32 +00003357{
3358 yyval.a_expr = asn1p_expr_new(yylineno);
3359 checkmem(yyval.a_expr);
3360 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3361 yyval.a_expr->meta_type = AMT_VALUE;
vlmfa67ddc2004-06-03 03:38:44 +00003362 yyval.a_expr->value = yyvsp[0].a_value;
vlm6a02a8a2004-09-08 00:28:11 +00003363 ;
3364 break;}
vlm177a5b62005-09-05 05:17:57 +00003365case 258:
vlm1ac75e72005-11-26 11:21:55 +00003366#line 2024 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003367{
vlm39e5ed72004-09-05 10:40:41 +00003368 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003369 checkmem(yyval.a_expr);
3370 yyval.a_expr->Identifier = strdup("...");
3371 checkmem(yyval.a_expr->Identifier);
3372 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3373 yyval.a_expr->meta_type = AMT_VALUE;
vlm6a02a8a2004-09-08 00:28:11 +00003374 ;
3375 break;}
vlm177a5b62005-09-05 05:17:57 +00003376case 259:
vlm1ac75e72005-11-26 11:21:55 +00003377#line 2035 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003378{
3379 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3380 checkmem(yyval.a_value);
3381 ;
vlm931aeed2005-08-12 10:09:10 +00003382 break;}
vlm177a5b62005-09-05 05:17:57 +00003383case 260:
vlm1ac75e72005-11-26 11:21:55 +00003384#line 2039 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003385{
3386 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3387 checkmem(yyval.a_value);
3388 ;
vlm931aeed2005-08-12 10:09:10 +00003389 break;}
vlm177a5b62005-09-05 05:17:57 +00003390case 261:
vlm1ac75e72005-11-26 11:21:55 +00003391#line 2070 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003392{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
3393 break;}
vlm177a5b62005-09-05 05:17:57 +00003394case 262:
vlm1ac75e72005-11-26 11:21:55 +00003395#line 2071 "asn1p_y.y"
vlm5d89c3d2005-08-13 09:07:11 +00003396{ yyval.a_tag = yyvsp[0].a_tag; ;
3397 break;}
vlm177a5b62005-09-05 05:17:57 +00003398case 263:
vlm1ac75e72005-11-26 11:21:55 +00003399#line 2075 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003400{
vlm2728a8d2005-01-23 09:51:44 +00003401 yyval.a_tag = yyvsp[-1].a_tag;
3402 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
vlm6a02a8a2004-09-08 00:28:11 +00003403 ;
3404 break;}
vlm177a5b62005-09-05 05:17:57 +00003405case 264:
vlm1ac75e72005-11-26 11:21:55 +00003406#line 2082 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003407{
vlm2728a8d2005-01-23 09:51:44 +00003408 yyval.a_tag = yyvsp[-2].a_tag;
3409 yyval.a_tag.tag_value = yyvsp[-1].a_int;
vlm6a02a8a2004-09-08 00:28:11 +00003410 ;
3411 break;}
vlm177a5b62005-09-05 05:17:57 +00003412case 265:
vlm1ac75e72005-11-26 11:21:55 +00003413#line 2088 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003414{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
vlm6a02a8a2004-09-08 00:28:11 +00003415 break;}
vlm177a5b62005-09-05 05:17:57 +00003416case 266:
vlm1ac75e72005-11-26 11:21:55 +00003417#line 2089 "asn1p_y.y"
vlm2728a8d2005-01-23 09:51:44 +00003418{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
vlm151c0b22004-09-22 16:03:36 +00003419 break;}
vlm177a5b62005-09-05 05:17:57 +00003420case 267:
vlm1ac75e72005-11-26 11:21:55 +00003421#line 2090 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003422{ yyval.a_tag.tag_class = TC_APPLICATION; ;
vlme1e6ed82005-03-24 14:26:38 +00003423 break;}
vlm177a5b62005-09-05 05:17:57 +00003424case 268:
vlm1ac75e72005-11-26 11:21:55 +00003425#line 2091 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003426{ yyval.a_tag.tag_class = TC_PRIVATE; ;
vlm931aeed2005-08-12 10:09:10 +00003427 break;}
vlm177a5b62005-09-05 05:17:57 +00003428case 269:
vlm1ac75e72005-11-26 11:21:55 +00003429#line 2095 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003430{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
3431 break;}
vlm177a5b62005-09-05 05:17:57 +00003432case 270:
vlm1ac75e72005-11-26 11:21:55 +00003433#line 2096 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003434{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
3435 break;}
vlm177a5b62005-09-05 05:17:57 +00003436case 271:
vlm1ac75e72005-11-26 11:21:55 +00003437#line 2097 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003438{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
3439 break;}
vlm177a5b62005-09-05 05:17:57 +00003440case 272:
vlm1ac75e72005-11-26 11:21:55 +00003441#line 2101 "asn1p_y.y"
vlm931aeed2005-08-12 10:09:10 +00003442{
vlm5d89c3d2005-08-13 09:07:11 +00003443 checkmem(yyvsp[0].tv_str);
vlm931aeed2005-08-12 10:09:10 +00003444 yyval.tv_str = yyvsp[0].tv_str;
3445 ;
3446 break;}
vlm177a5b62005-09-05 05:17:57 +00003447case 273:
vlm1ac75e72005-11-26 11:21:55 +00003448#line 2105 "asn1p_y.y"
vlm066dc102005-08-22 12:23:54 +00003449{
3450 checkmem(yyvsp[0].tv_str);
3451 yyval.tv_str = yyvsp[0].tv_str;
3452 ;
3453 break;}
vlm177a5b62005-09-05 05:17:57 +00003454case 274:
vlm1ac75e72005-11-26 11:21:55 +00003455#line 2113 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003456{
3457 checkmem(yyvsp[0].tv_str);
3458 yyval.tv_str = yyvsp[0].tv_str;
3459 ;
3460 break;}
3461case 275:
vlm1ac75e72005-11-26 11:21:55 +00003462#line 2120 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003463{ yyval.tv_str = 0; ;
3464 break;}
3465case 276:
vlm1ac75e72005-11-26 11:21:55 +00003466#line 2121 "asn1p_y.y"
vlm177a5b62005-09-05 05:17:57 +00003467{
3468 yyval.tv_str = yyvsp[0].tv_str;
3469 ;
3470 break;}
vlm066dc102005-08-22 12:23:54 +00003471case 277:
vlm1ac75e72005-11-26 11:21:55 +00003472#line 2127 "asn1p_y.y"
vlm6a02a8a2004-09-08 00:28:11 +00003473{
vlm39e5ed72004-09-05 10:40:41 +00003474 checkmem(yyvsp[0].tv_str);
3475 yyval.tv_str = yyvsp[0].tv_str;
vlm6a02a8a2004-09-08 00:28:11 +00003476 ;
3477 break;}
vlm6a02a8a2004-09-08 00:28:11 +00003478}
3479 /* the action file gets copied in in place of this dollarsign */
3480#line 543 "/usr/share/bison.simple"
vlmfa67ddc2004-06-03 03:38:44 +00003481
3482 yyvsp -= yylen;
3483 yyssp -= yylen;
vlm6a02a8a2004-09-08 00:28:11 +00003484#ifdef YYLSP_NEEDED
3485 yylsp -= yylen;
3486#endif
vlmfa67ddc2004-06-03 03:38:44 +00003487
vlm6a02a8a2004-09-08 00:28:11 +00003488#if YYDEBUG != 0
vlmfa67ddc2004-06-03 03:38:44 +00003489 if (yydebug)
3490 {
vlm6a02a8a2004-09-08 00:28:11 +00003491 short *ssp1 = yyss - 1;
3492 fprintf (stderr, "state stack now");
3493 while (ssp1 != yyssp)
3494 fprintf (stderr, " %d", *++ssp1);
3495 fprintf (stderr, "\n");
vlmfa67ddc2004-06-03 03:38:44 +00003496 }
3497#endif
3498
3499 *++yyvsp = yyval;
3500
vlm6a02a8a2004-09-08 00:28:11 +00003501#ifdef YYLSP_NEEDED
3502 yylsp++;
3503 if (yylen == 0)
3504 {
3505 yylsp->first_line = yylloc.first_line;
3506 yylsp->first_column = yylloc.first_column;
3507 yylsp->last_line = (yylsp-1)->last_line;
3508 yylsp->last_column = (yylsp-1)->last_column;
3509 yylsp->text = 0;
3510 }
3511 else
3512 {
3513 yylsp->last_line = (yylsp+yylen-1)->last_line;
3514 yylsp->last_column = (yylsp+yylen-1)->last_column;
3515 }
3516#endif
vlmfa67ddc2004-06-03 03:38:44 +00003517
vlm6a02a8a2004-09-08 00:28:11 +00003518 /* Now "shift" the result of the reduction.
3519 Determine what state that goes to,
3520 based on the state we popped back to
3521 and the rule number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00003522
3523 yyn = yyr1[yyn];
3524
vlm6a02a8a2004-09-08 00:28:11 +00003525 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
3526 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00003527 yystate = yytable[yystate];
3528 else
vlm6a02a8a2004-09-08 00:28:11 +00003529 yystate = yydefgoto[yyn - YYNTBASE];
vlmfa67ddc2004-06-03 03:38:44 +00003530
3531 goto yynewstate;
3532
vlm6a02a8a2004-09-08 00:28:11 +00003533yyerrlab: /* here on detecting error */
vlmfa67ddc2004-06-03 03:38:44 +00003534
vlm6a02a8a2004-09-08 00:28:11 +00003535 if (! yyerrstatus)
3536 /* If not already recovering from an error, report this error. */
vlmfa67ddc2004-06-03 03:38:44 +00003537 {
3538 ++yynerrs;
vlm6a02a8a2004-09-08 00:28:11 +00003539
3540#ifdef YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00003541 yyn = yypact[yystate];
3542
vlm6a02a8a2004-09-08 00:28:11 +00003543 if (yyn > YYFLAG && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00003544 {
vlm6a02a8a2004-09-08 00:28:11 +00003545 int size = 0;
3546 char *msg;
3547 int x, count;
vlmfa67ddc2004-06-03 03:38:44 +00003548
vlm6a02a8a2004-09-08 00:28:11 +00003549 count = 0;
3550 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
3551 for (x = (yyn < 0 ? -yyn : 0);
vlm03630c52005-06-07 21:43:32 +00003552 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
vlm6a02a8a2004-09-08 00:28:11 +00003553 if (yycheck[x + yyn] == x)
3554 size += strlen(yytname[x]) + 15, count++;
3555 msg = (char *) malloc(size + 15);
3556 if (msg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00003557 {
vlm6a02a8a2004-09-08 00:28:11 +00003558 strcpy(msg, "parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003559
vlm6a02a8a2004-09-08 00:28:11 +00003560 if (count < 5)
vlmfa67ddc2004-06-03 03:38:44 +00003561 {
vlm6a02a8a2004-09-08 00:28:11 +00003562 count = 0;
3563 for (x = (yyn < 0 ? -yyn : 0);
vlm03630c52005-06-07 21:43:32 +00003564 x < (int)(sizeof(yytname) / sizeof(char *)); x++)
vlm6a02a8a2004-09-08 00:28:11 +00003565 if (yycheck[x + yyn] == x)
vlmfa67ddc2004-06-03 03:38:44 +00003566 {
vlm6a02a8a2004-09-08 00:28:11 +00003567 strcat(msg, count == 0 ? ", expecting `" : " or `");
3568 strcat(msg, yytname[x]);
3569 strcat(msg, "'");
3570 count++;
vlmfa67ddc2004-06-03 03:38:44 +00003571 }
3572 }
vlm6a02a8a2004-09-08 00:28:11 +00003573 yyerror(msg);
3574 free(msg);
vlmfa67ddc2004-06-03 03:38:44 +00003575 }
3576 else
vlm6a02a8a2004-09-08 00:28:11 +00003577 yyerror ("parse error; also virtual memory exceeded");
vlmfa67ddc2004-06-03 03:38:44 +00003578 }
3579 else
3580#endif /* YYERROR_VERBOSE */
vlm6a02a8a2004-09-08 00:28:11 +00003581 yyerror("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00003582 }
vlm6a02a8a2004-09-08 00:28:11 +00003583
vlmfa67ddc2004-06-03 03:38:44 +00003584 goto yyerrlab1;
vlm6a02a8a2004-09-08 00:28:11 +00003585yyerrlab1: /* here on error raised explicitly by an action */
vlmfa67ddc2004-06-03 03:38:44 +00003586
3587 if (yyerrstatus == 3)
3588 {
vlm6a02a8a2004-09-08 00:28:11 +00003589 /* if just tried and failed to reuse lookahead token after an error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00003590
vlm6a02a8a2004-09-08 00:28:11 +00003591 /* return failure if at end of input */
vlmfa67ddc2004-06-03 03:38:44 +00003592 if (yychar == YYEOF)
vlm6a02a8a2004-09-08 00:28:11 +00003593 YYABORT;
vlmfa67ddc2004-06-03 03:38:44 +00003594
vlm6a02a8a2004-09-08 00:28:11 +00003595#if YYDEBUG != 0
3596 if (yydebug)
3597 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
3598#endif
3599
vlmfa67ddc2004-06-03 03:38:44 +00003600 yychar = YYEMPTY;
3601 }
3602
vlm6a02a8a2004-09-08 00:28:11 +00003603 /* Else will try to reuse lookahead token
3604 after shifting the error token. */
vlmfa67ddc2004-06-03 03:38:44 +00003605
vlm6a02a8a2004-09-08 00:28:11 +00003606 yyerrstatus = 3; /* Each real token shifted decrements this */
vlmfa67ddc2004-06-03 03:38:44 +00003607
vlm6a02a8a2004-09-08 00:28:11 +00003608 goto yyerrhandle;
vlm80103492004-09-07 10:39:09 +00003609
vlm6a02a8a2004-09-08 00:28:11 +00003610yyerrdefault: /* current state does not do anything special for the error token. */
vlm80103492004-09-07 10:39:09 +00003611
vlm6a02a8a2004-09-08 00:28:11 +00003612#if 0
3613 /* This is wrong; only states that explicitly want error tokens
3614 should shift them. */
3615 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
3616 if (yyn) goto yydefault;
vlm39e5ed72004-09-05 10:40:41 +00003617#endif
vlm6a02a8a2004-09-08 00:28:11 +00003618
3619yyerrpop: /* pop the current state because it cannot handle the error token */
3620
3621 if (yyssp == yyss) YYABORT;
3622 yyvsp--;
3623 yystate = *--yyssp;
3624#ifdef YYLSP_NEEDED
3625 yylsp--;
3626#endif
3627
3628#if YYDEBUG != 0
3629 if (yydebug)
3630 {
3631 short *ssp1 = yyss - 1;
3632 fprintf (stderr, "Error: state stack now");
3633 while (ssp1 != yyssp)
3634 fprintf (stderr, " %d", *++ssp1);
3635 fprintf (stderr, "\n");
vlm39e5ed72004-09-05 10:40:41 +00003636 }
vlm6a02a8a2004-09-08 00:28:11 +00003637#endif
3638
3639yyerrhandle:
3640
3641 yyn = yypact[yystate];
3642 if (yyn == YYFLAG)
3643 goto yyerrdefault;
3644
3645 yyn += YYTERROR;
3646 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
3647 goto yyerrdefault;
3648
3649 yyn = yytable[yyn];
3650 if (yyn < 0)
3651 {
3652 if (yyn == YYFLAG)
3653 goto yyerrpop;
3654 yyn = -yyn;
3655 goto yyreduce;
3656 }
3657 else if (yyn == 0)
3658 goto yyerrpop;
vlmfa67ddc2004-06-03 03:38:44 +00003659
3660 if (yyn == YYFINAL)
3661 YYACCEPT;
3662
vlm6a02a8a2004-09-08 00:28:11 +00003663#if YYDEBUG != 0
3664 if (yydebug)
3665 fprintf(stderr, "Shifting error token, ");
3666#endif
vlmfa67ddc2004-06-03 03:38:44 +00003667
3668 *++yyvsp = yylval;
vlm6a02a8a2004-09-08 00:28:11 +00003669#ifdef YYLSP_NEEDED
3670 *++yylsp = yylloc;
3671#endif
vlmfa67ddc2004-06-03 03:38:44 +00003672
3673 yystate = yyn;
3674 goto yynewstate;
3675
vlm6a02a8a2004-09-08 00:28:11 +00003676 yyacceptlab:
3677 /* YYACCEPT comes here. */
3678 if (yyfree_stacks)
3679 {
3680 free (yyss);
3681 free (yyvs);
3682#ifdef YYLSP_NEEDED
3683 free (yyls);
vlm044f7442004-09-04 04:49:21 +00003684#endif
vlm6a02a8a2004-09-08 00:28:11 +00003685 }
3686 return 0;
vlm80103492004-09-07 10:39:09 +00003687
vlm6a02a8a2004-09-08 00:28:11 +00003688 yyabortlab:
3689 /* YYABORT comes here. */
3690 if (yyfree_stacks)
3691 {
3692 free (yyss);
3693 free (yyvs);
3694#ifdef YYLSP_NEEDED
3695 free (yyls);
vlm80103492004-09-07 10:39:09 +00003696#endif
vlm6a02a8a2004-09-08 00:28:11 +00003697 }
3698 return 1;
vlmfa67ddc2004-06-03 03:38:44 +00003699}
vlm1ac75e72005-11-26 11:21:55 +00003700#line 2133 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00003701
3702
3703
3704/*
3705 * Convert Xstring ('0101'B or '5'H) to the binary vector.
3706 */
3707static asn1p_value_t *
3708_convert_bitstring2binary(char *str, int base) {
3709 asn1p_value_t *val;
3710 int slen;
3711 int memlen;
3712 int baselen;
3713 int bits;
3714 uint8_t *binary_vector;
3715 uint8_t *bv_ptr;
3716 uint8_t cur_val;
3717
3718 assert(str);
3719 assert(str[0] == '\'');
3720
3721 switch(base) {
3722 case 'B':
3723 baselen = 1;
3724 break;
3725 case 'H':
3726 baselen = 4;
3727 break;
3728 default:
3729 assert(base == 'B' || base == 'H');
3730 errno = EINVAL;
3731 return NULL;
3732 }
3733
3734 slen = strlen(str);
3735 assert(str[slen - 1] == base);
3736 assert(str[slen - 2] == '\'');
3737
3738 memlen = slen / (8 / baselen); /* Conservative estimate */
3739
3740 bv_ptr = binary_vector = malloc(memlen + 1);
3741 if(bv_ptr == NULL)
3742 /* ENOMEM */
3743 return NULL;
3744
3745 cur_val = 0;
3746 bits = 0;
3747 while(*(++str) != '\'') {
3748 switch(baselen) {
3749 case 1:
3750 switch(*str) {
3751 case '1':
3752 cur_val |= 1 << (7 - (bits % 8));
3753 case '0':
3754 break;
3755 default:
3756 assert(!"_y UNREACH1");
3757 case ' ': case '\r': case '\n':
3758 continue;
3759 }
3760 break;
3761 case 4:
3762 switch(*str) {
3763 case '0': case '1': case '2': case '3': case '4':
3764 case '5': case '6': case '7': case '8': case '9':
3765 cur_val |= (*str - '0') << (4 - (bits % 8));
3766 break;
3767 case 'A': case 'B': case 'C':
3768 case 'D': case 'E': case 'F':
3769 cur_val |= ((*str - 'A') + 10)
3770 << (4 - (bits % 8));
3771 break;
3772 default:
3773 assert(!"_y UNREACH2");
3774 case ' ': case '\r': case '\n':
3775 continue;
3776 }
3777 break;
3778 }
3779
3780 bits += baselen;
3781 if((bits % 8) == 0) {
3782 *bv_ptr++ = cur_val;
3783 cur_val = 0;
3784 }
3785 }
3786
3787 *bv_ptr = cur_val;
3788 assert((bv_ptr - binary_vector) <= memlen);
3789
3790 val = asn1p_value_frombits(binary_vector, bits, 0);
3791 if(val == NULL) {
3792 free(binary_vector);
3793 }
3794
3795 return val;
3796}
3797
vlm5d89c3d2005-08-13 09:07:11 +00003798/*
3799 * For unnamed types (used in old X.208 compliant modules)
3800 * generate some sort of interim names, to not to force human being to fix
3801 * the specification's compliance to modern ASN.1 standards.
3802 */
3803static void
3804_fixup_anonymous_identifier(asn1p_expr_t *expr) {
3805 char *p;
3806 assert(expr->Identifier == 0);
3807
3808 /*
3809 * Try to figure out the type name
3810 * without going too much into details
3811 */
3812 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
3813 if(expr->reference && expr->reference->comp_count > 0)
3814 expr->Identifier = expr->reference->components[0].name;
3815
3816 fprintf(stderr,
3817 "WARNING: Line %d: expected lower-case member identifier, "
3818 "found an unnamed %s.\n"
3819 "WARNING: Obsolete X.208 syntax detected, "
3820 "please give the member a name.\n",
3821 yylineno, expr->Identifier ? expr->Identifier : "type");
3822
3823 if(!expr->Identifier)
3824 expr->Identifier = "unnamed";
3825 expr->Identifier = strdup(expr->Identifier);
3826 assert(expr->Identifier);
3827 /* Make a lowercase identifier from the type name */
3828 for(p = expr->Identifier; *p; p++) {
3829 switch(*p) {
3830 case 'A' ... 'Z': *p += 32; break;
3831 case ' ': *p = '_'; break;
3832 case '-': *p = '_'; break;
3833 }
3834 }
3835 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
3836 "Name clash may occur later.\n",
3837 expr->Identifier);
3838}
3839
vlmfa67ddc2004-06-03 03:38:44 +00003840extern char *asn1p_text;
3841
3842int
3843yyerror(const char *msg) {
3844 fprintf(stderr,
3845 "ASN.1 grammar parse error "
3846 "near line %d (token \"%s\"): %s\n",
vlm39e5ed72004-09-05 10:40:41 +00003847 yylineno, asn1p_text, msg);
vlmfa67ddc2004-06-03 03:38:44 +00003848 return -1;
3849}
3850
3851