blob: e0c84aa5b9f4dc9398c727906a31dc79c0c42a0c [file] [log] [blame]
vlm80103492004-09-07 10:39:09 +00001/* A Bison parser, made from asn1p_y.y, by GNU bison 1.75. */
vlmfa67ddc2004-06-03 03:38:44 +00002
vlm80103492004-09-07 10:39:09 +00003/* Skeleton parser for Yacc-like parsing with Bison,
4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
vlmfa67ddc2004-06-03 03:38:44 +00005
vlm80103492004-09-07 10:39:09 +00006 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
vlmfa67ddc2004-06-03 03:38:44 +000010
vlm80103492004-09-07 10:39:09 +000011 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
20
21/* As a special exception, when this file is copied by Bison into a
22 Bison output file, you may use that output file without restriction.
23 This special exception was added by the Free Software Foundation
24 in version 1.24 of Bison. */
25
26/* Written by Richard Stallman by simplifying the original so called
27 ``semantic'' parser. */
28
29/* All symbols defined below should begin with yy or YY, to avoid
30 infringing on user name space. This should be done even for local
31 variables, as they might otherwise be expanded by user macros.
32 There are some unavoidable exceptions within include files to
33 define necessary library symbols; they are noted "INFRINGES ON
34 USER NAME SPACE" below. */
35
36/* Identify Bison output. */
37#define YYBISON 1
38
39/* Pure parsers. */
40#define YYPURE 0
41
42/* Using locations. */
43#define YYLSP_NEEDED 0
44
45/* If NAME_PREFIX is specified substitute the variables and functions
46 names. */
vlmfa67ddc2004-06-03 03:38:44 +000047#define yyparse asn1p_parse
vlm80103492004-09-07 10:39:09 +000048#define yylex asn1p_lex
vlmfa67ddc2004-06-03 03:38:44 +000049#define yyerror asn1p_error
vlm80103492004-09-07 10:39:09 +000050#define yylval asn1p_lval
51#define yychar asn1p_char
vlmfa67ddc2004-06-03 03:38:44 +000052#define yydebug asn1p_debug
53#define yynerrs asn1p_nerrs
vlmfa67ddc2004-06-03 03:38:44 +000054
vlm80103492004-09-07 10:39:09 +000055
56/* Tokens. */
57#ifndef YYTOKENTYPE
58# define YYTOKENTYPE
59 /* Put the tokens into the symbol table, so that GDB and other debuggers
60 know about them. */
61 enum yytokentype {
62 TOK_PPEQ = 258,
63 TOK_opaque = 259,
64 TOK_bstring = 260,
65 TOK_cstring = 261,
66 TOK_hstring = 262,
67 TOK_identifier = 263,
68 TOK_number = 264,
69 TOK_number_negative = 265,
70 TOK_typereference = 266,
71 TOK_capitalreference = 267,
72 TOK_typefieldreference = 268,
73 TOK_valuefieldreference = 269,
74 TOK_ABSENT = 270,
75 TOK_ABSTRACT_SYNTAX = 271,
76 TOK_ALL = 272,
77 TOK_ANY = 273,
78 TOK_APPLICATION = 274,
79 TOK_AUTOMATIC = 275,
80 TOK_BEGIN = 276,
81 TOK_BIT = 277,
82 TOK_BMPString = 278,
83 TOK_BOOLEAN = 279,
84 TOK_BY = 280,
85 TOK_CHARACTER = 281,
86 TOK_CHOICE = 282,
87 TOK_CLASS = 283,
88 TOK_COMPONENT = 284,
89 TOK_COMPONENTS = 285,
90 TOK_CONSTRAINED = 286,
91 TOK_CONTAINING = 287,
92 TOK_DEFAULT = 288,
93 TOK_DEFINITIONS = 289,
94 TOK_DEFINED = 290,
95 TOK_EMBEDDED = 291,
96 TOK_ENCODED = 292,
97 TOK_ENCODING_CONTROL = 293,
98 TOK_END = 294,
99 TOK_ENUMERATED = 295,
100 TOK_EXPLICIT = 296,
101 TOK_EXPORTS = 297,
102 TOK_EXTENSIBILITY = 298,
103 TOK_EXTERNAL = 299,
104 TOK_FALSE = 300,
105 TOK_FROM = 301,
106 TOK_GeneralizedTime = 302,
107 TOK_GeneralString = 303,
108 TOK_GraphicString = 304,
109 TOK_IA5String = 305,
110 TOK_IDENTIFIER = 306,
111 TOK_IMPLICIT = 307,
112 TOK_IMPLIED = 308,
113 TOK_IMPORTS = 309,
114 TOK_INCLUDES = 310,
115 TOK_INSTANCE = 311,
116 TOK_INSTRUCTIONS = 312,
117 TOK_INTEGER = 313,
118 TOK_ISO646String = 314,
119 TOK_MAX = 315,
120 TOK_MIN = 316,
121 TOK_MINUS_INFINITY = 317,
122 TOK_NULL = 318,
123 TOK_NumericString = 319,
124 TOK_OBJECT = 320,
125 TOK_ObjectDescriptor = 321,
126 TOK_OCTET = 322,
127 TOK_OF = 323,
128 TOK_OPTIONAL = 324,
129 TOK_PATTERN = 325,
130 TOK_PDV = 326,
131 TOK_PLUS_INFINITY = 327,
132 TOK_PRESENT = 328,
133 TOK_PrintableString = 329,
134 TOK_PRIVATE = 330,
135 TOK_REAL = 331,
136 TOK_RELATIVE_OID = 332,
137 TOK_SEQUENCE = 333,
138 TOK_SET = 334,
139 TOK_SIZE = 335,
140 TOK_STRING = 336,
141 TOK_SYNTAX = 337,
142 TOK_T61String = 338,
143 TOK_TAGS = 339,
144 TOK_TeletexString = 340,
145 TOK_TRUE = 341,
146 TOK_TYPE_IDENTIFIER = 342,
147 TOK_UNIQUE = 343,
148 TOK_UNIVERSAL = 344,
149 TOK_UniversalString = 345,
150 TOK_UTCTime = 346,
151 TOK_UTF8String = 347,
152 TOK_VideotexString = 348,
153 TOK_VisibleString = 349,
154 TOK_WITH = 350,
155 TOK_EXCEPT = 351,
156 TOK_INTERSECTION = 352,
157 TOK_UNION = 353,
158 TOK_TwoDots = 354,
159 TOK_ThreeDots = 355,
160 TOK_tag = 356
161 };
162#endif
163#define TOK_PPEQ 258
164#define TOK_opaque 259
165#define TOK_bstring 260
166#define TOK_cstring 261
167#define TOK_hstring 262
168#define TOK_identifier 263
169#define TOK_number 264
170#define TOK_number_negative 265
171#define TOK_typereference 266
172#define TOK_capitalreference 267
173#define TOK_typefieldreference 268
174#define TOK_valuefieldreference 269
175#define TOK_ABSENT 270
176#define TOK_ABSTRACT_SYNTAX 271
177#define TOK_ALL 272
178#define TOK_ANY 273
179#define TOK_APPLICATION 274
180#define TOK_AUTOMATIC 275
181#define TOK_BEGIN 276
182#define TOK_BIT 277
183#define TOK_BMPString 278
184#define TOK_BOOLEAN 279
185#define TOK_BY 280
186#define TOK_CHARACTER 281
187#define TOK_CHOICE 282
188#define TOK_CLASS 283
189#define TOK_COMPONENT 284
190#define TOK_COMPONENTS 285
191#define TOK_CONSTRAINED 286
192#define TOK_CONTAINING 287
193#define TOK_DEFAULT 288
194#define TOK_DEFINITIONS 289
195#define TOK_DEFINED 290
196#define TOK_EMBEDDED 291
197#define TOK_ENCODED 292
198#define TOK_ENCODING_CONTROL 293
199#define TOK_END 294
200#define TOK_ENUMERATED 295
201#define TOK_EXPLICIT 296
202#define TOK_EXPORTS 297
203#define TOK_EXTENSIBILITY 298
204#define TOK_EXTERNAL 299
205#define TOK_FALSE 300
206#define TOK_FROM 301
207#define TOK_GeneralizedTime 302
208#define TOK_GeneralString 303
209#define TOK_GraphicString 304
210#define TOK_IA5String 305
211#define TOK_IDENTIFIER 306
212#define TOK_IMPLICIT 307
213#define TOK_IMPLIED 308
214#define TOK_IMPORTS 309
215#define TOK_INCLUDES 310
216#define TOK_INSTANCE 311
217#define TOK_INSTRUCTIONS 312
218#define TOK_INTEGER 313
219#define TOK_ISO646String 314
220#define TOK_MAX 315
221#define TOK_MIN 316
222#define TOK_MINUS_INFINITY 317
223#define TOK_NULL 318
224#define TOK_NumericString 319
225#define TOK_OBJECT 320
226#define TOK_ObjectDescriptor 321
227#define TOK_OCTET 322
228#define TOK_OF 323
229#define TOK_OPTIONAL 324
230#define TOK_PATTERN 325
231#define TOK_PDV 326
232#define TOK_PLUS_INFINITY 327
233#define TOK_PRESENT 328
234#define TOK_PrintableString 329
235#define TOK_PRIVATE 330
236#define TOK_REAL 331
237#define TOK_RELATIVE_OID 332
238#define TOK_SEQUENCE 333
239#define TOK_SET 334
240#define TOK_SIZE 335
241#define TOK_STRING 336
242#define TOK_SYNTAX 337
243#define TOK_T61String 338
244#define TOK_TAGS 339
245#define TOK_TeletexString 340
246#define TOK_TRUE 341
247#define TOK_TYPE_IDENTIFIER 342
248#define TOK_UNIQUE 343
249#define TOK_UNIVERSAL 344
250#define TOK_UniversalString 345
251#define TOK_UTCTime 346
252#define TOK_UTF8String 347
253#define TOK_VideotexString 348
254#define TOK_VisibleString 349
255#define TOK_WITH 350
256#define TOK_EXCEPT 351
257#define TOK_INTERSECTION 352
258#define TOK_UNION 353
259#define TOK_TwoDots 354
260#define TOK_ThreeDots 355
261#define TOK_tag 356
262
263
264
265
266/* Copy the first part of user declarations. */
vlmfa67ddc2004-06-03 03:38:44 +0000267#line 1 "asn1p_y.y"
268
269
270#include <stdlib.h>
271#include <stdio.h>
272#include <string.h>
273#include <errno.h>
274#include <assert.h>
275
276#include "asn1parser.h"
277
278#define YYPARSE_PARAM param
279#define YYERROR_VERBOSE
280
281int yylex(void);
282int yyerror(const char *msg);
283void asn1p_lexer_hack_push_opaque_state(void);
284void asn1p_lexer_hack_enable_with_syntax(void);
vlm9283dbe2004-08-18 04:59:12 +0000285void asn1p_lexer_hack_push_encoding_control(void);
vlmfa67ddc2004-06-03 03:38:44 +0000286#define yylineno asn1p_lineno
287extern int asn1p_lineno;
288
289
290static asn1p_value_t *
291 _convert_bitstring2binary(char *str, int base);
292
293#define checkmem(ptr) do { \
294 if(!(ptr)) \
295 return yyerror("Memory failure"); \
296 } while(0)
297
298#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
299 if(arg1->type != constr_type) { \
300 int __ret; \
301 root = asn1p_constraint_new(yylineno); \
302 checkmem(root); \
303 root->type = constr_type; \
304 __ret = asn1p_constraint_insert(root, \
305 arg1); \
306 checkmem(__ret == 0); \
307 } else { \
308 root = arg1; \
309 } \
310 if(arg2) { \
311 int __ret \
312 = asn1p_constraint_insert(root, arg2); \
313 checkmem(__ret == 0); \
314 } \
315 } while(0)
316
317
vlm80103492004-09-07 10:39:09 +0000318
319/* Enabling traces. */
320#ifndef YYDEBUG
321# define YYDEBUG 0
322#endif
323
324/* Enabling verbose error messages. */
325#ifdef YYERROR_VERBOSE
326# undef YYERROR_VERBOSE
327# define YYERROR_VERBOSE 1
328#else
329# define YYERROR_VERBOSE 0
330#endif
331
332#ifndef YYSTYPE
vlm9283dbe2004-08-18 04:59:12 +0000333#line 58 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +0000334typedef union {
335 asn1p_t *a_grammar;
336 asn1p_module_flags_e a_module_flags;
337 asn1p_module_t *a_module;
338 asn1p_expr_type_e a_type; /* ASN.1 Type */
339 asn1p_expr_t *a_expr; /* Constructed collection */
340 asn1p_constraint_t *a_constr; /* Constraint */
341 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
342 asn1p_xports_t *a_xports; /* IMports/EXports */
343 asn1p_oid_t *a_oid; /* Object Identifier */
344 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
345 struct asn1p_type_tag_s a_tag; /* A tag */
346 asn1p_ref_t *a_ref; /* Reference to custom type */
347 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
348 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
349 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
350 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
351 struct asn1p_param_s a_parg; /* A parameter argument */
352 asn1p_paramlist_t *a_plist; /* A pargs list */
353 enum asn1p_expr_marker_e a_marker; /* OPTIONAL/DEFAULT */
354 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
355 asn1_integer_t a_int;
356 char *tv_str;
357 struct {
358 char *buf;
359 int len;
360 } tv_opaque;
361 struct {
362 char *name;
363 struct asn1p_type_tag_s tag;
364 } tv_nametag;
vlm80103492004-09-07 10:39:09 +0000365} yystype;
366/* Line 193 of /usr/local/share/bison/yacc.c. */
367#line 368 "asn1p_y.c"
368# define YYSTYPE yystype
369# define YYSTYPE_IS_TRIVIAL 1
vlmfa67ddc2004-06-03 03:38:44 +0000370#endif
371
vlm80103492004-09-07 10:39:09 +0000372#ifndef YYLTYPE
373typedef struct yyltype
374{
375 int first_line;
376 int first_column;
377 int last_line;
378 int last_column;
379} yyltype;
380# define YYLTYPE yyltype
381# define YYLTYPE_IS_TRIVIAL 1
382#endif
383
384/* Copy the second part of user declarations. */
vlmfa67ddc2004-06-03 03:38:44 +0000385
386
vlm80103492004-09-07 10:39:09 +0000387/* Line 213 of /usr/local/share/bison/yacc.c. */
388#line 389 "asn1p_y.c"
vlmfa67ddc2004-06-03 03:38:44 +0000389
vlm80103492004-09-07 10:39:09 +0000390#if ! defined (yyoverflow) || YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +0000391
vlm80103492004-09-07 10:39:09 +0000392/* The parser invokes alloca or malloc; define the necessary symbols. */
vlmfa67ddc2004-06-03 03:38:44 +0000393
vlm80103492004-09-07 10:39:09 +0000394# if YYSTACK_USE_ALLOCA
395# define YYSTACK_ALLOC alloca
396# else
397# ifndef YYSTACK_USE_ALLOCA
398# if defined (alloca) || defined (_ALLOCA_H)
399# define YYSTACK_ALLOC alloca
400# else
401# ifdef __GNUC__
402# define YYSTACK_ALLOC __builtin_alloca
403# endif
404# endif
405# endif
406# endif
vlmfa67ddc2004-06-03 03:38:44 +0000407
vlm80103492004-09-07 10:39:09 +0000408# ifdef YYSTACK_ALLOC
409 /* Pacify GCC's `empty if-body' warning. */
410# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
411# else
412# if defined (__STDC__) || defined (__cplusplus)
413# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
414# define YYSIZE_T size_t
415# endif
416# define YYSTACK_ALLOC malloc
417# define YYSTACK_FREE free
418# endif
419#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
420
421
422#if (! defined (yyoverflow) \
423 && (! defined (__cplusplus) \
424 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
425
426/* A type that is properly aligned for any stack member. */
427union yyalloc
428{
429 short yyss;
430 YYSTYPE yyvs;
431 };
432
433/* The size of the maximum gap between one aligned stack and the next. */
434# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
435
436/* The size of an array large to enough to hold all stacks, each with
437 N elements. */
438# define YYSTACK_BYTES(N) \
439 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
440 + YYSTACK_GAP_MAX)
441
442/* Copy COUNT objects from FROM to TO. The source and destination do
443 not overlap. */
444# ifndef YYCOPY
445# if 1 < __GNUC__
446# define YYCOPY(To, From, Count) \
447 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
448# else
449# define YYCOPY(To, From, Count) \
450 do \
451 { \
452 register YYSIZE_T yyi; \
453 for (yyi = 0; yyi < (Count); yyi++) \
454 (To)[yyi] = (From)[yyi]; \
455 } \
456 while (0)
457# endif
458# endif
459
460/* Relocate STACK from its old location to the new one. The
461 local variables YYSIZE and YYSTACKSIZE give the old and new number of
462 elements in the stack, and YYPTR gives the new location of the
463 stack. Advance YYPTR to a properly aligned location for the next
464 stack. */
465# define YYSTACK_RELOCATE(Stack) \
466 do \
467 { \
468 YYSIZE_T yynewbytes; \
469 YYCOPY (&yyptr->Stack, Stack, yysize); \
470 Stack = &yyptr->Stack; \
471 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
472 yyptr += yynewbytes / sizeof (*yyptr); \
473 } \
474 while (0)
vlmfa67ddc2004-06-03 03:38:44 +0000475
476#endif
477
vlm80103492004-09-07 10:39:09 +0000478#if defined (__STDC__) || defined (__cplusplus)
479 typedef signed char yysigned_char;
vlmfa67ddc2004-06-03 03:38:44 +0000480#else
vlm80103492004-09-07 10:39:09 +0000481 typedef short yysigned_char;
vlmfa67ddc2004-06-03 03:38:44 +0000482#endif
483
vlm80103492004-09-07 10:39:09 +0000484/* YYFINAL -- State number of the termination state. */
485#define YYFINAL 7
486#define YYLAST 820
487
488/* YYNTOKENS -- Number of terminals. */
489#define YYNTOKENS 115
490/* YYNNTS -- Number of nonterminals. */
491#define YYNNTS 100
492/* YYNRULES -- Number of rules. */
493#define YYNRULES 256
494/* YYNRULES -- Number of states. */
495#define YYNSTATES 396
496
497/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
498#define YYUNDEFTOK 2
499#define YYMAXUTOK 356
500
501#define YYTRANSLATE(X) \
502 ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
503
504/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
505static const unsigned char yytranslate[] =
506{
507 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
508 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
509 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
510 2, 2, 2, 111, 2, 2, 2, 2, 2, 2,
511 106, 107, 2, 2, 109, 2, 112, 2, 2, 2,
512 2, 2, 2, 2, 2, 2, 2, 2, 110, 108,
513 113, 2, 2, 2, 114, 2, 2, 2, 2, 2,
514 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
515 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
516 2, 2, 2, 2, 97, 2, 2, 2, 2, 2,
517 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
518 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
519 2, 2, 2, 104, 99, 105, 2, 2, 2, 2,
520 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
521 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
522 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
523 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
524 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
525 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
526 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
527 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
528 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
529 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
530 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
531 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
532 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
533 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
534 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
535 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
536 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
537 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
538 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
539 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
540 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
541 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
542 95, 96, 98, 100, 101, 102, 103
543};
544
545#if YYDEBUG
546/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
547 YYRHS. */
548static const unsigned short yyprhs[] =
549{
550 0, 0, 3, 5, 7, 10, 19, 20, 22, 26,
551 29, 31, 34, 36, 41, 43, 44, 46, 48, 51,
552 54, 57, 60, 63, 66, 67, 69, 71, 74, 76,
553 78, 80, 82, 84, 85, 89, 91, 95, 98, 100,
554 103, 108, 110, 114, 116, 118, 122, 126, 129, 131,
555 135, 137, 139, 146, 148, 150, 151, 153, 155, 159,
556 161, 163, 168, 173, 177, 184, 186, 190, 192, 196,
557 200, 202, 206, 208, 210, 212, 216, 220, 224, 226,
558 228, 232, 235, 237, 243, 244, 246, 248, 252, 255,
559 260, 265, 266, 268, 269, 276, 278, 281, 283, 285,
560 287, 291, 295, 298, 300, 302, 307, 312, 317, 322,
561 327, 329, 334, 339, 341, 345, 347, 351, 355, 357,
562 361, 363, 367, 369, 371, 373, 375, 380, 381, 385,
563 387, 389, 391, 393, 395, 397, 401, 403, 406, 408,
564 410, 412, 414, 417, 420, 422, 424, 427, 430, 432,
565 434, 436, 438, 441, 443, 446, 448, 450, 452, 454,
566 456, 458, 460, 462, 464, 466, 468, 470, 472, 474,
567 476, 478, 480, 482, 484, 485, 487, 489, 494, 498,
568 503, 505, 509, 515, 517, 521, 525, 529, 534, 538,
569 540, 544, 548, 552, 556, 558, 560, 562, 565, 568,
570 572, 574, 576, 578, 580, 582, 584, 586, 592, 594,
571 598, 600, 604, 605, 607, 609, 611, 613, 615, 617,
572 621, 626, 628, 632, 635, 639, 641, 645, 646, 648,
573 650, 653, 655, 657, 658, 662, 665, 669, 671, 675,
574 677, 682, 687, 689, 691, 693, 695, 696, 698, 700,
575 703, 706, 708, 710, 712, 714, 716
576};
577
578/* YYRHS -- A `-1'-separated list of the rules' RHS. */
579static const short yyrhs[] =
580{
581 116, 0, -1, 117, -1, 118, -1, 117, 118, -1,
582 211, 119, 34, 123, 3, 21, 126, 39, -1, -1,
583 120, -1, 104, 121, 105, -1, 104, 105, -1, 122,
584 -1, 121, 122, -1, 213, -1, 213, 106, 9, 107,
585 -1, 9, -1, -1, 124, -1, 125, -1, 124, 125,
586 -1, 41, 84, -1, 52, 84, -1, 20, 84, -1,
587 43, 53, -1, 12, 57, -1, -1, 127, -1, 128,
588 -1, 127, 128, -1, 130, -1, 135, -1, 143, -1,
589 169, -1, 138, -1, -1, 38, 12, 129, -1, 177,
590 -1, 54, 131, 108, -1, 54, 46, -1, 132, -1,
591 131, 132, -1, 133, 46, 211, 119, -1, 134, -1,
592 133, 109, 134, -1, 211, -1, 213, -1, 42, 136,
593 108, -1, 42, 17, 108, -1, 42, 108, -1, 137,
594 -1, 136, 109, 137, -1, 211, -1, 213, -1, 211,
595 139, 3, 104, 140, 105, -1, 164, -1, 174, -1,
596 -1, 141, -1, 142, -1, 141, 109, 142, -1, 102,
597 -1, 185, -1, 211, 3, 209, 87, -1, 211, 3,
598 209, 162, -1, 211, 3, 152, -1, 211, 104, 144,
599 105, 3, 162, -1, 145, -1, 144, 109, 145, -1,
600 211, -1, 211, 110, 213, -1, 174, 110, 213, -1,
601 147, -1, 146, 109, 147, -1, 162, -1, 213, -1,
602 149, -1, 148, 109, 149, -1, 214, 162, 201, -1,
603 30, 68, 162, -1, 161, -1, 151, -1, 150, 109,
604 151, -1, 214, 162, -1, 161, -1, 28, 104, 154,
605 105, 156, -1, -1, 88, -1, 155, -1, 154, 109,
606 155, -1, 167, 201, -1, 167, 162, 201, 153, -1,
607 167, 167, 201, 153, -1, -1, 157, -1, -1, 95,
608 82, 104, 158, 159, 105, -1, 160, -1, 159, 160,
609 -1, 4, -1, 167, -1, 102, -1, 102, 111, 172,
610 -1, 102, 111, 208, -1, 163, 181, -1, 176, -1,
611 177, -1, 27, 104, 150, 105, -1, 78, 104, 148,
612 105, -1, 79, 104, 148, 105, -1, 78, 181, 68,
613 163, -1, 79, 181, 68, 163, -1, 18, -1, 18,
614 35, 25, 213, -1, 211, 104, 146, 105, -1, 164,
615 -1, 56, 68, 164, -1, 11, -1, 11, 112, 211,
616 -1, 11, 112, 213, -1, 212, -1, 212, 112, 165,
617 -1, 166, -1, 165, 112, 166, -1, 168, -1, 168,
618 -1, 13, -1, 14, -1, 213, 139, 3, 170, -1,
619 -1, 104, 171, 173, -1, 5, -1, 7, -1, 6,
620 -1, 208, -1, 172, -1, 213, -1, 211, 112, 213,
621 -1, 4, -1, 173, 4, -1, 24, -1, 63, -1,
622 76, -1, 175, -1, 67, 81, -1, 65, 51, -1,
623 77, -1, 44, -1, 36, 71, -1, 26, 81, -1,
624 91, -1, 47, -1, 58, -1, 40, -1, 22, 81,
625 -1, 174, -1, 175, 205, -1, 23, -1, 48, -1,
626 49, -1, 50, -1, 59, -1, 64, -1, 74, -1,
627 83, -1, 85, -1, 90, -1, 92, -1, 93, -1,
628 94, -1, 66, -1, 99, -1, 100, -1, 97, -1,
629 98, -1, 96, -1, -1, 182, -1, 183, -1, 80,
630 106, 184, 107, -1, 106, 184, 107, -1, 183, 106,
631 184, 107, -1, 185, -1, 185, 109, 102, -1, 185,
632 109, 102, 109, 185, -1, 186, -1, 185, 178, 186,
633 -1, 185, 179, 186, -1, 186, 180, 186, -1, 188,
634 106, 184, 107, -1, 106, 184, 107, -1, 189, -1,
635 189, 187, 189, -1, 61, 187, 189, -1, 189, 187,
636 60, -1, 61, 187, 60, -1, 195, -1, 190, -1,
637 101, -1, 101, 113, -1, 113, 101, -1, 113, 101,
638 113, -1, 80, -1, 46, -1, 208, -1, 213, -1,
639 6, -1, 45, -1, 86, -1, 95, 30, 104, 191,
640 105, -1, 192, -1, 191, 109, 192, -1, 102, -1,
641 213, 181, 193, -1, -1, 194, -1, 73, -1, 15,
642 -1, 69, -1, 196, -1, 197, -1, 104, 211, 105,
643 -1, 196, 104, 198, 105, -1, 199, -1, 198, 109,
644 199, -1, 114, 200, -1, 114, 112, 200, -1, 213,
645 -1, 200, 112, 213, -1, -1, 202, -1, 69, -1,
646 33, 203, -1, 189, -1, 174, -1, -1, 104, 204,
647 173, -1, 104, 105, -1, 104, 206, 105, -1, 207,
648 -1, 206, 109, 207, -1, 213, -1, 213, 106, 208,
649 107, -1, 213, 106, 172, 107, -1, 208, -1, 102,
650 -1, 9, -1, 10, -1, -1, 210, -1, 103, -1,
651 103, 52, -1, 103, 41, -1, 11, -1, 12, -1,
652 12, -1, 8, -1, 213, -1, 213, 210, -1
653};
654
655/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
656static const unsigned short yyrline[] =
657{
658 0, 300, 300, 306, 312, 328, 353, 355, 358, 362,
659 367, 374, 382, 387, 391, 400, 402, 410, 414, 422,
660 426, 429, 432, 436, 456, 458, 466, 470, 502, 506,
661 515, 522, 535, 543, 542, 556, 569, 576, 581, 587,
662 593, 602, 608, 614, 621, 629, 633, 636, 643, 649,
663 655, 662, 671, 681, 689, 697, 699, 709, 712, 716,
664 719, 731, 743, 750, 766, 775, 785, 795, 800, 807,
665 817, 823, 829, 833, 845, 851, 857, 865, 872, 877,
666 883, 889, 896, 901, 911, 913, 916, 924, 930, 939,
667 945, 962, 964, 971, 969, 978, 983, 989, 993, 1004,
668 1013, 1022, 1033, 1054, 1058, 1064, 1070, 1076, 1082, 1090,
669 1098, 1104, 1118, 1142, 1149, 1163, 1172, 1182, 1192, 1200,
670 1221, 1230, 1239, 1240, 1242, 1249, 1261, 1272, 1271, 1278,
671 1282, 1286, 1290, 1293, 1298, 1310, 1326, 1337, 1351, 1353,
672 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363,
673 1369, 1371, 1372, 1375, 1382, 1394, 1396, 1400, 1404, 1405,
674 1406, 1407, 1408, 1412, 1413, 1414, 1415, 1419, 1420, 1427,
675 1427, 1428, 1428, 1429, 1431, 1433, 1438, 1442, 1451, 1455,
676 1460, 1464, 1470, 1480, 1484, 1487, 1490, 1495, 1504, 1512,
677 1518, 1525, 1533, 1541, 1550, 1553, 1558, 1560, 1561, 1562,
678 1565, 1569, 1574, 1578, 1589, 1594, 1599, 1606, 1612, 1616,
679 1621, 1627, 1639, 1641, 1644, 1648, 1651, 1656, 1660, 1668,
680 1683, 1689, 1696, 1709, 1721, 1736, 1740, 1757, 1759, 1762,
681 1766, 1772, 1775, 1777, 1777, 1797, 1802, 1807, 1813, 1819,
682 1827, 1835, 1843, 1850, 1860, 1865, 1895, 1897, 1900, 1905,
683 1909, 1915, 1920, 1927, 1934, 1941, 1946
684};
685#endif
686
687#if YYDEBUG || YYERROR_VERBOSE
688/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
689 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
690static const char *const yytname[] =
691{
692 "$end", "error", "$undefined", "TOK_PPEQ", "TOK_opaque", "TOK_bstring",
693 "TOK_cstring", "TOK_hstring", "TOK_identifier", "TOK_number",
694 "TOK_number_negative", "TOK_typereference", "TOK_capitalreference",
695 "TOK_typefieldreference", "TOK_valuefieldreference", "TOK_ABSENT",
696 "TOK_ABSTRACT_SYNTAX", "TOK_ALL", "TOK_ANY", "TOK_APPLICATION",
697 "TOK_AUTOMATIC", "TOK_BEGIN", "TOK_BIT", "TOK_BMPString", "TOK_BOOLEAN",
698 "TOK_BY", "TOK_CHARACTER", "TOK_CHOICE", "TOK_CLASS", "TOK_COMPONENT",
699 "TOK_COMPONENTS", "TOK_CONSTRAINED", "TOK_CONTAINING", "TOK_DEFAULT",
700 "TOK_DEFINITIONS", "TOK_DEFINED", "TOK_EMBEDDED", "TOK_ENCODED",
701 "TOK_ENCODING_CONTROL", "TOK_END", "TOK_ENUMERATED", "TOK_EXPLICIT",
702 "TOK_EXPORTS", "TOK_EXTENSIBILITY", "TOK_EXTERNAL", "TOK_FALSE",
703 "TOK_FROM", "TOK_GeneralizedTime", "TOK_GeneralString",
704 "TOK_GraphicString", "TOK_IA5String", "TOK_IDENTIFIER", "TOK_IMPLICIT",
705 "TOK_IMPLIED", "TOK_IMPORTS", "TOK_INCLUDES", "TOK_INSTANCE",
706 "TOK_INSTRUCTIONS", "TOK_INTEGER", "TOK_ISO646String", "TOK_MAX",
707 "TOK_MIN", "TOK_MINUS_INFINITY", "TOK_NULL", "TOK_NumericString",
708 "TOK_OBJECT", "TOK_ObjectDescriptor", "TOK_OCTET", "TOK_OF",
709 "TOK_OPTIONAL", "TOK_PATTERN", "TOK_PDV", "TOK_PLUS_INFINITY",
710 "TOK_PRESENT", "TOK_PrintableString", "TOK_PRIVATE", "TOK_REAL",
711 "TOK_RELATIVE_OID", "TOK_SEQUENCE", "TOK_SET", "TOK_SIZE", "TOK_STRING",
712 "TOK_SYNTAX", "TOK_T61String", "TOK_TAGS", "TOK_TeletexString",
713 "TOK_TRUE", "TOK_TYPE_IDENTIFIER", "TOK_UNIQUE", "TOK_UNIVERSAL",
714 "TOK_UniversalString", "TOK_UTCTime", "TOK_UTF8String",
715 "TOK_VideotexString", "TOK_VisibleString", "TOK_WITH", "TOK_EXCEPT",
716 "'^'", "TOK_INTERSECTION", "'|'", "TOK_UNION", "TOK_TwoDots",
717 "TOK_ThreeDots", "TOK_tag", "'{'", "'}'", "'('", "')'", "';'", "','",
718 "':'", "'!'", "'.'", "'<'", "'@'", "$accept", "ParsedGrammar",
719 "ModuleList", "ModuleSpecification", "optObjectIdentifier",
720 "ObjectIdentifier", "ObjectIdentifierBody", "ObjectIdentifierElement",
721 "optModuleSpecificationFlags", "ModuleSpecificationFlags",
722 "ModuleSpecificationFlag", "optModuleSpecificationBody",
723 "ModuleSpecificationBody", "ModuleSpecificationElement", "@1",
724 "ImportsDefinition", "ImportsBundleSet", "ImportsBundle", "ImportsList",
725 "ImportsElement", "ExportsDefinition", "ExportsBody", "ExportsElement",
726 "ValueSetDefinition", "DefinedTypeRef", "optValueSetBody",
727 "ValueSetBody", "ValueSetElement", "DataTypeReference",
728 "ParameterArgumentList", "ParameterArgumentName", "ActualParameterList",
729 "ActualParameter", "ComponentTypeLists", "ComponentType",
730 "AlternativeTypeLists", "AlternativeType", "ClassDeclaration",
731 "optUnique", "ClassFieldList", "ClassField", "optWithSyntax",
732 "WithSyntax", "@2", "WithSyntaxFormat", "WithSyntaxFormatToken",
733 "ExtensionAndException", "Type", "TypeDeclaration",
734 "ComplexTypeReference", "ComplexTypeReferenceAmpList",
735 "ComplexTypeReferenceElement", "ClassFieldIdentifier", "ClassFieldName",
736 "ValueDefinition", "InlineOrDefinedValue", "@3", "DefinedValue",
737 "Opaque", "BasicTypeId", "BasicTypeId_UniverationCompatible",
738 "BasicType", "BasicString", "Union", "Intersection", "Except",
739 "optConstraints", "Constraints", "SetOfConstraints", "ElementSetSpecs",
740 "ElementSetSpec", "ConstraintSubtypeElement", "ConstraintRangeSpec",
741 "ConstraintSpec", "ConstraintValue", "WithComponents",
742 "WithComponentsList", "WithComponentsElement", "optPresenceConstraint",
743 "PresenceConstraint", "TableConstraint", "SimpleTableConstraint",
744 "ComponentRelationConstraint", "AtNotationList", "AtNotationElement",
745 "ComponentIdList", "optMarker", "Marker", "DefaultValue", "@4",
746 "UniverationDefinition", "UniverationList", "UniverationElement",
747 "SignedNumber", "optTag", "Tag", "TypeRefName", "ObjectClassReference",
748 "Identifier", "TaggedIdentifier", 0
749};
750#endif
751
752# ifdef YYPRINT
753/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
754 token YYLEX-NUM. */
755static const unsigned short yytoknum[] =
756{
757 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
758 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
759 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
760 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
761 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
762 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
763 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
764 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
765 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
766 345, 346, 347, 348, 349, 350, 351, 94, 352, 124,
767 353, 354, 355, 356, 123, 125, 40, 41, 59, 44,
768 58, 33, 46, 60, 64
769};
770# endif
771
772/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
773static const unsigned char yyr1[] =
774{
775 0, 115, 116, 117, 117, 118, 119, 119, 120, 120,
776 121, 121, 122, 122, 122, 123, 123, 124, 124, 125,
777 125, 125, 125, 125, 126, 126, 127, 127, 128, 128,
778 128, 128, 128, 129, 128, 128, 130, 130, 131, 131,
779 132, 133, 133, 134, 134, 135, 135, 135, 136, 136,
780 137, 137, 138, 139, 139, 140, 140, 141, 141, 142,
781 142, 143, 143, 143, 143, 144, 144, 145, 145, 145,
782 146, 146, 147, 147, 148, 148, 149, 149, 149, 150,
783 150, 151, 151, 152, 153, 153, 154, 154, 155, 155,
784 155, 156, 156, 158, 157, 159, 159, 160, 160, 161,
785 161, 161, 162, 163, 163, 163, 163, 163, 163, 163,
786 163, 163, 163, 163, 163, 164, 164, 164, 164, 164,
787 165, 165, 166, 167, 168, 168, 169, 171, 170, 170,
788 170, 170, 170, 170, 172, 172, 173, 173, 174, 174,
789 174, 174, 174, 174, 174, 174, 174, 174, 174, 174,
790 175, 175, 175, 176, 176, 177, 177, 177, 177, 177,
791 177, 177, 177, 177, 177, 177, 177, 177, 177, 178,
792 178, 179, 179, 180, 181, 181, 182, 182, 183, 183,
793 184, 184, 184, 185, 185, 185, 185, 186, 186, 186,
794 186, 186, 186, 186, 186, 186, 187, 187, 187, 187,
795 188, 188, 189, 189, 189, 189, 189, 190, 191, 191,
796 192, 192, 193, 193, 194, 194, 194, 195, 195, 196,
797 197, 198, 198, 199, 199, 200, 200, 201, 201, 202,
798 202, 203, 203, 204, 203, 205, 205, 206, 206, 207,
799 207, 207, 207, 207, 208, 208, 209, 209, 210, 210,
800 210, 211, 211, 212, 213, 214, 214
801};
802
803/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
804static const unsigned char yyr2[] =
805{
806 0, 2, 1, 1, 2, 8, 0, 1, 3, 2,
807 1, 2, 1, 4, 1, 0, 1, 1, 2, 2,
808 2, 2, 2, 2, 0, 1, 1, 2, 1, 1,
809 1, 1, 1, 0, 3, 1, 3, 2, 1, 2,
810 4, 1, 3, 1, 1, 3, 3, 2, 1, 3,
811 1, 1, 6, 1, 1, 0, 1, 1, 3, 1,
812 1, 4, 4, 3, 6, 1, 3, 1, 3, 3,
813 1, 3, 1, 1, 1, 3, 3, 3, 1, 1,
814 3, 2, 1, 5, 0, 1, 1, 3, 2, 4,
815 4, 0, 1, 0, 6, 1, 2, 1, 1, 1,
816 3, 3, 2, 1, 1, 4, 4, 4, 4, 4,
817 1, 4, 4, 1, 3, 1, 3, 3, 1, 3,
818 1, 3, 1, 1, 1, 1, 4, 0, 3, 1,
819 1, 1, 1, 1, 1, 3, 1, 2, 1, 1,
820 1, 1, 2, 2, 1, 1, 2, 2, 1, 1,
821 1, 1, 2, 1, 2, 1, 1, 1, 1, 1,
822 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
823 1, 1, 1, 1, 0, 1, 1, 4, 3, 4,
824 1, 3, 5, 1, 3, 3, 3, 4, 3, 1,
825 3, 3, 3, 3, 1, 1, 1, 2, 2, 3,
826 1, 1, 1, 1, 1, 1, 1, 5, 1, 3,
827 1, 3, 0, 1, 1, 1, 1, 1, 1, 3,
828 4, 1, 3, 2, 3, 1, 3, 0, 1, 1,
829 2, 1, 1, 0, 3, 2, 3, 1, 3, 1,
830 4, 4, 1, 1, 1, 1, 0, 1, 1, 2,
831 2, 1, 1, 1, 1, 1, 2
832};
833
834/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
835 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
836 means the default is an error. */
837static const unsigned short yydefact[] =
838{
839 0, 251, 252, 0, 2, 3, 6, 1, 4, 0,
840 0, 7, 254, 14, 9, 0, 10, 12, 15, 8,
841 11, 0, 0, 0, 0, 0, 0, 0, 16, 17,
842 0, 23, 21, 19, 22, 20, 0, 18, 13, 24,
843 155, 0, 0, 156, 157, 158, 0, 159, 160, 168,
844 161, 162, 163, 164, 165, 166, 167, 0, 25, 26,
845 28, 29, 32, 30, 31, 35, 0, 0, 33, 0,
846 47, 0, 48, 50, 51, 37, 0, 38, 0, 41,
847 43, 44, 5, 27, 246, 115, 253, 0, 138, 0,
848 0, 151, 145, 149, 150, 139, 0, 0, 140, 144,
849 148, 0, 0, 53, 54, 141, 118, 0, 34, 46,
850 45, 0, 36, 39, 0, 0, 0, 248, 63, 0,
851 247, 0, 152, 147, 146, 143, 142, 0, 65, 0,
852 67, 0, 0, 0, 49, 6, 42, 0, 250, 249,
853 115, 253, 110, 0, 0, 174, 174, 61, 62, 174,
854 113, 153, 141, 103, 104, 0, 116, 117, 0, 0,
855 0, 0, 55, 124, 125, 119, 120, 122, 129, 131,
856 130, 244, 245, 127, 126, 133, 132, 0, 134, 40,
857 0, 86, 227, 123, 0, 0, 0, 0, 0, 0,
858 0, 175, 176, 0, 0, 102, 0, 154, 0, 0,
859 66, 69, 68, 204, 205, 201, 0, 200, 206, 0,
860 59, 0, 0, 0, 56, 57, 60, 183, 0, 189,
861 195, 194, 217, 218, 202, 203, 0, 0, 0, 91,
862 0, 0, 229, 227, 227, 88, 228, 0, 99, 0,
863 79, 82, 255, 0, 114, 0, 0, 0, 74, 78,
864 0, 0, 180, 0, 0, 0, 0, 243, 235, 0,
865 237, 242, 239, 0, 70, 72, 73, 64, 196, 0,
866 0, 0, 0, 0, 52, 0, 171, 172, 169, 170,
867 0, 0, 173, 0, 0, 0, 0, 121, 136, 128,
868 135, 0, 83, 92, 87, 233, 232, 231, 230, 84,
869 84, 111, 0, 105, 0, 256, 81, 0, 0, 106,
870 0, 227, 178, 0, 108, 0, 107, 109, 236, 0,
871 0, 112, 0, 197, 198, 193, 191, 0, 219, 188,
872 58, 184, 185, 186, 0, 192, 190, 0, 0, 221,
873 137, 0, 0, 85, 89, 90, 100, 101, 80, 177,
874 77, 75, 76, 181, 179, 238, 0, 0, 71, 199,
875 210, 0, 208, 174, 187, 0, 223, 225, 220, 0,
876 93, 234, 0, 241, 240, 207, 0, 212, 224, 0,
877 222, 0, 182, 209, 215, 216, 214, 211, 213, 226,
878 97, 0, 95, 98, 94, 96
879};
880
881/* YYDEFGOTO[NTERM-NUM]. */
882static const short yydefgoto[] =
883{
884 -1, 3, 4, 5, 10, 11, 15, 16, 27, 28,
885 29, 57, 58, 59, 108, 60, 76, 77, 78, 79,
886 61, 71, 72, 62, 102, 213, 214, 215, 63, 127,
887 128, 263, 264, 247, 248, 239, 240, 118, 344, 180,
888 181, 292, 293, 381, 391, 392, 249, 265, 149, 150,
889 165, 166, 182, 183, 64, 174, 227, 175, 289, 151,
890 152, 153, 154, 280, 281, 283, 190, 191, 192, 251,
891 252, 217, 270, 218, 219, 220, 361, 362, 387, 388,
892 221, 222, 223, 338, 339, 366, 235, 236, 298, 342,
893 197, 259, 260, 224, 119, 120, 155, 106, 225, 250
894};
895
896/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
897 STATE-NUM. */
898#define YYPACT_NINF -255
899static const short yypact[] =
900{
901 89, -255, -255, 64, 89, -255, -25, -255, -255, 33,
902 79, -255, -255, -255, -255, 52, -255, -8, 180, -255,
903 -255, 147, 91, 77, 80, 119, 96, 183, 180, -255,
904 120, -255, -255, -255, -255, -255, 177, -255, -255, 414,
905 -255, 205, 28, -255, -255, -255, 131, -255, -255, -255,
906 -255, -255, -255, -255, -255, -255, -255, 196, 414, -255,
907 -255, -255, -255, -255, -255, -255, 182, 712, -255, 142,
908 -255, 32, -255, -255, -255, -255, 13, -255, -12, -255,
909 -255, -255, -255, -255, 1, 141, -255, 188, -255, 206,
910 201, -255, -255, -255, -255, -255, 237, 208, -255, -255,
911 -255, 729, 287, -255, -255, -255, 185, 296, -255, -255,
912 -255, 249, -255, -255, 89, 249, 210, 76, -255, 575,
913 -255, 249, -255, -255, -255, -255, -255, -2, -255, 202,
914 207, 211, 133, 78, -255, -25, -255, 133, -255, -255,
915 -41, 215, 274, 216, 254, 110, 127, -255, -255, -28,
916 -255, -255, 223, -255, -255, 225, -255, -255, 327, 729,
917 323, 323, 246, -255, -255, 221, -255, -255, -255, -255,
918 -255, -255, -255, -255, -255, -255, -255, 224, -255, -255,
919 92, -255, 498, -255, 312, 6, 259, 232, -3, 49,
920 271, -255, 234, -3, 275, -255, 60, -255, 353, 652,
921 -255, -255, -255, -255, -255, -255, -20, -255, -255, 315,
922 -255, 89, 49, 241, 233, -255, 144, 251, 245, -20,
923 -255, -255, 250, -255, -255, -255, 133, 349, 323, 260,
924 133, 258, -255, -13, -13, -255, -255, 323, 247, 94,
925 -255, -255, 256, 652, -255, 49, 289, 104, -255, -255,
926 652, 253, 139, 652, 49, 125, 652, -255, -255, 174,
927 -255, -255, 257, 176, -255, -255, -255, -255, 255, 265,
928 160, 268, 264, 267, -255, 246, -255, -255, -255, -255,
929 49, 49, -255, 49, 49, 165, 269, -255, -255, 369,
930 -255, 299, -255, -255, -255, -255, -255, -255, -255, 290,
931 290, -255, 266, -255, 6, -255, -255, 277, 652, -255,
932 -3, -13, -255, 280, -255, 278, -255, -255, -255, 65,
933 266, -255, 353, -255, 273, -255, -255, 20, -255, -255,
934 -255, -255, -255, -255, 281, -255, -255, 15, 191, -255,
935 -255, 283, 349, -255, -255, -255, -255, -255, -255, -255,
936 -255, -255, -255, 282, -255, -255, 285, 288, -255, -255,
937 -255, 199, -255, -28, -255, 323, 284, -255, -255, 269,
938 -255, 369, 49, -255, -255, -255, 20, 23, 284, 323,
939 -255, 146, 144, -255, -255, -255, -255, -255, -255, -255,
940 -255, 18, -255, -255, -255, -255
941};
942
943/* YYPGOTO[NTERM-NUM]. */
944static const short yypgoto[] =
945{
946 -255, -255, -255, 386, 263, -255, -255, 379, -255, -255,
947 371, -255, -255, 346, -255, -255, -255, 329, -255, 291,
948 -255, -255, 297, -255, 340, -255, -255, 135, -255, -255,
949 262, -255, 93, 220, 113, -255, 124, -255, 114, -255,
950 194, -255, -255, -255, -255, 42, -172, -117, -209, -55,
951 -255, 209, -179, -106, -255, -255, -255, -254, 97, -50,
952 -48, -255, -4, -255, -255, -255, -139, -255, -255, -96,
953 -161, -18, 222, -255, -140, -255, -255, 58, -255, -255,
954 -255, -255, -255, -255, 71, 83, -157, -255, -255, -255,
955 -255, -255, 123, -124, -255, 212, 4, -255, -9, -170
956};
957
958/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
959 positive, shift that token. If negative, reduce the rule which
960 number is the opposite. If zero, do what YYDEFACT says.
961 If YYTABLE_NINF, parse error. */
962#define YYTABLE_NINF -253
963static const short yytable[] =
964{
965 17, 216, 148, 234, 6, 12, 17, 194, 6, 176,
966 195, 103, 103, 241, 12, 243, 104, 104, 105, 105,
967 231, 12, 390, 12, 1, 2, 167, 246, 12, 116,
968 67, 163, 164, 74, 114, 65, 12, 81, 384, 1,
969 2, 12, 13, 66, 314, 69, 73, 317, 346, 67,
970 80, 129, 187, 105, 65, 203, 232, 12, 171, 172,
971 12, 13, 66, -251, 7, 233, 356, 81, 12, 171,
972 172, 121, 261, 12, 171, 172, 299, 300, 189, 9,
973 80, 268, 267, 168, 169, 170, 12, 171, 172, 1,
974 2, 297, 385, 269, 204, 205, 386, 115, 21, 238,
975 1, 2, 74, 158, 117, 130, 81, 159, 238, 129,
976 206, 105, 157, 18, 216, 73, 273, 138, 135, 80,
977 167, 112, 360, 394, 178, 156, 306, 365, 139, 207,
978 326, 244, 241, 311, 243, 208, 70, 177, 14, 12,
979 110, 111, 1, 2, 209, 336, 163, 164, 31, 307,
980 390, 201, 202, 211, 352, 212, 30, 19, 315, 163,
981 164, 32, 257, 130, 33, 258, 203, 257, 12, 171,
982 172, 203, 34, 12, 171, 172, 242, 75, 347, 242,
983 35, 296, 173, 105, 242, 84, 36, 262, 334, 266,
984 187, 350, 22, 85, 86, 261, 357, 229, 39, 303,
985 23, 230, 393, 304, 87, 204, 88, 187, 89, 309,
986 204, 382, 393, 310, 188, 272, 189, 68, 90, 290,
987 325, 24, 91, 25, 377, 335, 92, 38, 301, 93,
988 316, 193, 26, 189, 310, 82, 276, 277, 278, 279,
989 94, 276, 277, 278, 279, 95, 208, 96, 313, 97,
990 109, 208, 203, 121, 12, 171, 172, 12, 98, 99,
991 1, 2, 331, 332, 203, 333, 12, 171, 172, 122,
992 85, 86, 124, 100, 12, 171, 172, 1, 2, 318,
993 87, 321, 88, 319, 89, 322, 101, 123, 125, 126,
994 131, 204, 205, 178, 90, 242, 368, 132, 91, 133,
995 369, 242, 92, 204, 375, 93, 177, 206, 376, 184,
996 262, 178, 160, 266, 137, 162, 94, 161, 363, -252,
997 185, 95, 186, 96, 177, 97, 207, 196, 367, 198,
998 199, 12, 208, 226, 98, 99, 228, 237, 245, 253,
999 254, 209, 275, 256, 208, 271, 274, 282, 210, 100,
1000 211, 284, 212, 288, 286, 291, 367, 308, 302, 117,
1001 312, 12, 295, 320, 140, 141, 324, 363, 323, 328,
1002 389, 142, 327, 340, 329, 87, 40, 88, 343, 89,
1003 143, 341, 353, 337, 349, 354, 359, 370, 364, 90,
1004 8, 372, 373, 91, 20, 374, 379, 92, 179, 37,
1005 93, 43, 44, 45, 83, 113, 136, 107, 134, 144,
1006 330, 94, 47, 255, 345, 358, 95, 48, 96, 49,
1007 97, 200, 12, 351, 294, 1, 2, 50, 348, 98,
1008 99, 145, 146, 395, 383, 287, 51, 40, 52, 371,
1009 380, 285, 355, 53, 100, 54, 55, 56, 378, 0,
1010 0, 0, 41, 0, 305, 0, 42, 0, 0, 0,
1011 0, 0, 43, 44, 45, 0, 0, 0, 46, 0,
1012 0, 0, 0, 47, 0, 0, 0, 0, 48, 0,
1013 49, 0, 0, 0, 0, 0, 0, 0, 50, 0,
1014 0, 0, 0, 0, 0, 0, 0, 51, 0, 52,
1015 0, 0, 0, 0, 53, 0, 54, 55, 56, 140,
1016 141, 163, 164, 0, 0, 0, 142, 0, 0, 0,
1017 87, 40, 88, 0, 89, 143, 0, 0, 0, 0,
1018 0, 231, 0, 0, 90, 0, 0, 0, 91, 0,
1019 0, 0, 92, 0, 0, 93, 43, 44, 45, 0,
1020 0, 0, 0, 0, 144, 0, 94, 47, 0, 0,
1021 0, 95, 48, 96, 49, 97, 0, 232, 0, 0,
1022 0, 0, 50, 0, 98, 99, 145, 146, 0, 0,
1023 0, 51, 0, 52, 0, 0, 140, 141, 53, 100,
1024 54, 55, 56, 142, 0, 0, 0, 87, 40, 88,
1025 0, 89, 143, 0, 0, 0, 0, 0, 0, 0,
1026 0, 90, 0, 0, 0, 91, 0, 0, 0, 92,
1027 0, 0, 93, 43, 44, 45, 0, 0, 0, 0,
1028 0, 144, 0, 94, 47, 0, 0, 0, 95, 48,
1029 96, 49, 97, 0, 0, 0, 0, 0, 0, 50,
1030 0, 98, 99, 145, 146, 0, 0, 0, 51, 0,
1031 52, 0, 147, 140, 141, 53, 100, 54, 55, 56,
1032 142, 0, 0, 0, 87, 40, 88, 0, 89, 143,
1033 0, 0, 0, 0, 0, 0, 0, 0, 90, 0,
1034 0, 0, 91, 0, 0, 0, 92, 0, 0, 93,
1035 43, 44, 45, 0, 0, 0, 0, 0, 144, 0,
1036 94, 47, 0, 0, 0, 95, 48, 96, 49, 97,
1037 0, 0, 0, 85, 86, 0, 50, 0, 98, 99,
1038 145, 146, 0, 0, 87, 51, 88, 52, 89, 0,
1039 1, 2, 53, 100, 54, 55, 56, 0, 90, 0,
1040 0, 87, 91, 88, 0, 89, 92, 0, 0, 93,
1041 0, 0, 0, 0, 0, 90, 0, 0, 0, 91,
1042 94, 0, 0, 92, 0, 95, 93, 96, 0, 97,
1043 0, 0, 0, 0, 0, 0, 0, 94, 98, 99,
1044 0, 0, 95, 0, 96, 0, 97, 0, 0, 0,
1045 0, 0, 0, 100, 0, 98, 99, 0, 0, 0,
1046 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1047 100
1048};
1049
1050static const short yycheck[] =
1051{
1052 9, 162, 119, 182, 0, 8, 15, 146, 4, 133,
1053 149, 66, 67, 185, 8, 185, 66, 67, 66, 67,
1054 33, 8, 4, 8, 11, 12, 132, 30, 8, 28,
1055 39, 13, 14, 42, 46, 39, 8, 46, 15, 11,
1056 12, 8, 9, 39, 253, 17, 42, 256, 302, 58,
1057 46, 101, 80, 101, 58, 6, 69, 8, 9, 10,
1058 8, 9, 58, 104, 0, 182, 320, 76, 8, 9,
1059 10, 112, 196, 8, 9, 10, 233, 234, 106, 104,
1060 76, 101, 199, 5, 6, 7, 8, 9, 10, 11,
1061 12, 231, 69, 113, 45, 46, 73, 109, 106, 102,
1062 11, 12, 111, 105, 103, 101, 115, 109, 102, 159,
1063 61, 159, 121, 34, 275, 111, 212, 41, 114, 115,
1064 226, 108, 102, 105, 133, 121, 243, 112, 52, 80,
1065 270, 186, 304, 250, 304, 86, 108, 133, 105, 8,
1066 108, 109, 11, 12, 95, 285, 13, 14, 57, 245,
1067 4, 160, 161, 104, 311, 106, 9, 105, 254, 13,
1068 14, 84, 102, 159, 84, 105, 6, 102, 8, 9,
1069 10, 6, 53, 8, 9, 10, 185, 46, 302, 188,
1070 84, 231, 104, 231, 193, 3, 3, 196, 284, 198,
1071 80, 308, 12, 11, 12, 319, 320, 105, 21, 105,
1072 20, 109, 381, 109, 22, 45, 24, 80, 26, 105,
1073 45, 372, 391, 109, 104, 211, 106, 12, 36, 228,
1074 60, 41, 40, 43, 363, 60, 44, 107, 237, 47,
1075 105, 104, 52, 106, 109, 39, 97, 98, 99, 100,
1076 58, 97, 98, 99, 100, 63, 86, 65, 109, 67,
1077 108, 86, 6, 112, 8, 9, 10, 8, 76, 77,
1078 11, 12, 280, 281, 6, 283, 8, 9, 10, 81,
1079 11, 12, 71, 91, 8, 9, 10, 11, 12, 105,
1080 22, 105, 24, 109, 26, 109, 104, 81, 51, 81,
1081 3, 45, 46, 302, 36, 304, 105, 112, 40, 3,
1082 109, 310, 44, 45, 105, 47, 302, 61, 109, 35,
1083 319, 320, 110, 322, 104, 104, 58, 110, 327, 104,
1084 104, 63, 68, 65, 320, 67, 80, 104, 337, 104,
1085 3, 8, 86, 112, 76, 77, 112, 25, 106, 68,
1086 106, 95, 109, 68, 86, 30, 105, 96, 102, 91,
1087 104, 106, 106, 4, 104, 95, 365, 68, 111, 103,
1088 107, 8, 104, 106, 11, 12, 101, 376, 113, 105,
1089 379, 18, 104, 4, 107, 22, 23, 24, 88, 26,
1090 27, 82, 102, 114, 107, 107, 113, 104, 107, 36,
1091 4, 109, 107, 40, 15, 107, 112, 44, 135, 28,
1092 47, 48, 49, 50, 58, 76, 115, 67, 111, 56,
1093 275, 58, 59, 193, 300, 322, 63, 64, 65, 66,
1094 67, 159, 8, 310, 230, 11, 12, 74, 304, 76,
1095 77, 78, 79, 391, 376, 226, 83, 23, 85, 342,
1096 369, 219, 319, 90, 91, 92, 93, 94, 365, -1,
1097 -1, -1, 38, -1, 242, -1, 42, -1, -1, -1,
1098 -1, -1, 48, 49, 50, -1, -1, -1, 54, -1,
1099 -1, -1, -1, 59, -1, -1, -1, -1, 64, -1,
1100 66, -1, -1, -1, -1, -1, -1, -1, 74, -1,
1101 -1, -1, -1, -1, -1, -1, -1, 83, -1, 85,
1102 -1, -1, -1, -1, 90, -1, 92, 93, 94, 11,
1103 12, 13, 14, -1, -1, -1, 18, -1, -1, -1,
1104 22, 23, 24, -1, 26, 27, -1, -1, -1, -1,
1105 -1, 33, -1, -1, 36, -1, -1, -1, 40, -1,
1106 -1, -1, 44, -1, -1, 47, 48, 49, 50, -1,
1107 -1, -1, -1, -1, 56, -1, 58, 59, -1, -1,
1108 -1, 63, 64, 65, 66, 67, -1, 69, -1, -1,
1109 -1, -1, 74, -1, 76, 77, 78, 79, -1, -1,
1110 -1, 83, -1, 85, -1, -1, 11, 12, 90, 91,
1111 92, 93, 94, 18, -1, -1, -1, 22, 23, 24,
1112 -1, 26, 27, -1, -1, -1, -1, -1, -1, -1,
1113 -1, 36, -1, -1, -1, 40, -1, -1, -1, 44,
1114 -1, -1, 47, 48, 49, 50, -1, -1, -1, -1,
1115 -1, 56, -1, 58, 59, -1, -1, -1, 63, 64,
1116 65, 66, 67, -1, -1, -1, -1, -1, -1, 74,
1117 -1, 76, 77, 78, 79, -1, -1, -1, 83, -1,
1118 85, -1, 87, 11, 12, 90, 91, 92, 93, 94,
1119 18, -1, -1, -1, 22, 23, 24, -1, 26, 27,
1120 -1, -1, -1, -1, -1, -1, -1, -1, 36, -1,
1121 -1, -1, 40, -1, -1, -1, 44, -1, -1, 47,
1122 48, 49, 50, -1, -1, -1, -1, -1, 56, -1,
1123 58, 59, -1, -1, -1, 63, 64, 65, 66, 67,
1124 -1, -1, -1, 11, 12, -1, 74, -1, 76, 77,
1125 78, 79, -1, -1, 22, 83, 24, 85, 26, -1,
1126 11, 12, 90, 91, 92, 93, 94, -1, 36, -1,
1127 -1, 22, 40, 24, -1, 26, 44, -1, -1, 47,
1128 -1, -1, -1, -1, -1, 36, -1, -1, -1, 40,
1129 58, -1, -1, 44, -1, 63, 47, 65, -1, 67,
1130 -1, -1, -1, -1, -1, -1, -1, 58, 76, 77,
1131 -1, -1, 63, -1, 65, -1, 67, -1, -1, -1,
1132 -1, -1, -1, 91, -1, 76, 77, -1, -1, -1,
1133 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1134 91
1135};
1136
1137/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1138 symbol of state STATE-NUM. */
1139static const unsigned char yystos[] =
1140{
1141 0, 11, 12, 116, 117, 118, 211, 0, 118, 104,
1142 119, 120, 8, 9, 105, 121, 122, 213, 34, 105,
1143 122, 106, 12, 20, 41, 43, 52, 123, 124, 125,
1144 9, 57, 84, 84, 53, 84, 3, 125, 107, 21,
1145 23, 38, 42, 48, 49, 50, 54, 59, 64, 66,
1146 74, 83, 85, 90, 92, 93, 94, 126, 127, 128,
1147 130, 135, 138, 143, 169, 177, 211, 213, 12, 17,
1148 108, 136, 137, 211, 213, 46, 131, 132, 133, 134,
1149 211, 213, 39, 128, 3, 11, 12, 22, 24, 26,
1150 36, 40, 44, 47, 58, 63, 65, 67, 76, 77,
1151 91, 104, 139, 164, 174, 175, 212, 139, 129, 108,
1152 108, 109, 108, 132, 46, 109, 28, 103, 152, 209,
1153 210, 112, 81, 81, 71, 51, 81, 144, 145, 174,
1154 211, 3, 112, 3, 137, 211, 134, 104, 41, 52,
1155 11, 12, 18, 27, 56, 78, 79, 87, 162, 163,
1156 164, 174, 175, 176, 177, 211, 211, 213, 105, 109,
1157 110, 110, 104, 13, 14, 165, 166, 168, 5, 6,
1158 7, 9, 10, 104, 170, 172, 208, 211, 213, 119,
1159 154, 155, 167, 168, 35, 104, 68, 80, 104, 106,
1160 181, 182, 183, 104, 181, 181, 104, 205, 104, 3,
1161 145, 213, 213, 6, 45, 46, 61, 80, 86, 95,
1162 102, 104, 106, 140, 141, 142, 185, 186, 188, 189,
1163 190, 195, 196, 197, 208, 213, 112, 171, 112, 105,
1164 109, 33, 69, 162, 167, 201, 202, 25, 102, 150,
1165 151, 161, 213, 214, 164, 106, 30, 148, 149, 161,
1166 214, 184, 185, 68, 106, 148, 68, 102, 105, 206,
1167 207, 208, 213, 146, 147, 162, 213, 162, 101, 113,
1168 187, 30, 211, 184, 105, 109, 97, 98, 99, 100,
1169 178, 179, 96, 180, 106, 187, 104, 166, 4, 173,
1170 213, 95, 156, 157, 155, 104, 174, 189, 203, 201,
1171 201, 213, 111, 105, 109, 210, 162, 184, 68, 105,
1172 109, 162, 107, 109, 163, 184, 105, 163, 105, 109,
1173 106, 105, 109, 113, 101, 60, 189, 104, 105, 107,
1174 142, 186, 186, 186, 184, 60, 189, 114, 198, 199,
1175 4, 82, 204, 88, 153, 153, 172, 208, 151, 107,
1176 162, 149, 201, 102, 107, 207, 172, 208, 147, 113,
1177 102, 191, 192, 213, 107, 112, 200, 213, 105, 109,
1178 104, 173, 109, 107, 107, 105, 109, 181, 200, 112,
1179 199, 158, 185, 192, 15, 69, 73, 193, 194, 213,
1180 4, 159, 160, 167, 105, 160
1181};
1182
1183#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1184# define YYSIZE_T __SIZE_TYPE__
1185#endif
1186#if ! defined (YYSIZE_T) && defined (size_t)
1187# define YYSIZE_T size_t
1188#endif
1189#if ! defined (YYSIZE_T)
1190# if defined (__STDC__) || defined (__cplusplus)
1191# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1192# define YYSIZE_T size_t
1193# endif
1194#endif
1195#if ! defined (YYSIZE_T)
1196# define YYSIZE_T unsigned int
1197#endif
vlmfa67ddc2004-06-03 03:38:44 +00001198
1199#define yyerrok (yyerrstatus = 0)
1200#define yyclearin (yychar = YYEMPTY)
1201#define YYEMPTY -2
1202#define YYEOF 0
vlm80103492004-09-07 10:39:09 +00001203
vlmfa67ddc2004-06-03 03:38:44 +00001204#define YYACCEPT goto yyacceptlab
vlm80103492004-09-07 10:39:09 +00001205#define YYABORT goto yyabortlab
vlmfa67ddc2004-06-03 03:38:44 +00001206#define YYERROR goto yyerrlab1
vlm80103492004-09-07 10:39:09 +00001207
1208/* Like YYERROR except do call yyerror. This remains here temporarily
1209 to ease the transition to the new meaning of YYERROR, for GCC.
vlmfa67ddc2004-06-03 03:38:44 +00001210 Once GCC version 2 has supplanted version 1, this can go. */
vlm80103492004-09-07 10:39:09 +00001211
vlmfa67ddc2004-06-03 03:38:44 +00001212#define YYFAIL goto yyerrlab
vlm80103492004-09-07 10:39:09 +00001213
vlmfa67ddc2004-06-03 03:38:44 +00001214#define YYRECOVERING() (!!yyerrstatus)
vlm80103492004-09-07 10:39:09 +00001215
1216#define YYBACKUP(Token, Value) \
vlmfa67ddc2004-06-03 03:38:44 +00001217do \
1218 if (yychar == YYEMPTY && yylen == 1) \
vlm80103492004-09-07 10:39:09 +00001219 { \
1220 yychar = (Token); \
1221 yylval = (Value); \
vlmfa67ddc2004-06-03 03:38:44 +00001222 yychar1 = YYTRANSLATE (yychar); \
1223 YYPOPSTACK; \
1224 goto yybackup; \
1225 } \
1226 else \
vlm80103492004-09-07 10:39:09 +00001227 { \
1228 yyerror ("syntax error: cannot back up"); \
1229 YYERROR; \
1230 } \
vlmfa67ddc2004-06-03 03:38:44 +00001231while (0)
1232
1233#define YYTERROR 1
1234#define YYERRCODE 256
1235
vlm80103492004-09-07 10:39:09 +00001236/* YYLLOC_DEFAULT -- Compute the default location (before the actions
1237 are run). */
1238
1239#ifndef YYLLOC_DEFAULT
1240# define YYLLOC_DEFAULT(Current, Rhs, N) \
1241 Current.first_line = Rhs[1].first_line; \
1242 Current.first_column = Rhs[1].first_column; \
1243 Current.last_line = Rhs[N].last_line; \
1244 Current.last_column = Rhs[N].last_column;
vlmfa67ddc2004-06-03 03:38:44 +00001245#endif
1246
vlm80103492004-09-07 10:39:09 +00001247/* YYLEX -- calling `yylex' with the right arguments. */
vlmfa67ddc2004-06-03 03:38:44 +00001248
vlm80103492004-09-07 10:39:09 +00001249#define YYLEX yylex ()
vlmfa67ddc2004-06-03 03:38:44 +00001250
vlm80103492004-09-07 10:39:09 +00001251/* Enable debugging if requested. */
1252#if YYDEBUG
vlmfa67ddc2004-06-03 03:38:44 +00001253
vlm80103492004-09-07 10:39:09 +00001254# ifndef YYFPRINTF
1255# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1256# define YYFPRINTF fprintf
1257# endif
vlmfa67ddc2004-06-03 03:38:44 +00001258
vlm80103492004-09-07 10:39:09 +00001259# define YYDPRINTF(Args) \
1260do { \
1261 if (yydebug) \
1262 YYFPRINTF Args; \
1263} while (0)
1264# define YYDSYMPRINT(Args) \
1265do { \
1266 if (yydebug) \
1267 yysymprint Args; \
1268} while (0)
1269/* Nonzero means print parse trace. It is left uninitialized so that
1270 multiple parsers can coexist. */
1271int yydebug;
1272#else /* !YYDEBUG */
1273# define YYDPRINTF(Args)
1274# define YYDSYMPRINT(Args)
1275#endif /* !YYDEBUG */
vlmfa67ddc2004-06-03 03:38:44 +00001276
vlm80103492004-09-07 10:39:09 +00001277/* YYINITDEPTH -- initial size of the parser's stacks. */
vlmfa67ddc2004-06-03 03:38:44 +00001278#ifndef YYINITDEPTH
vlm80103492004-09-07 10:39:09 +00001279# define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +00001280#endif
1281
vlm80103492004-09-07 10:39:09 +00001282/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1283 if the built-in stack extension method is used).
1284
1285 Do not make this value too large; the results are undefined if
1286 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
1287 evaluated with infinite-precision integer arithmetic. */
vlmfa67ddc2004-06-03 03:38:44 +00001288
1289#if YYMAXDEPTH == 0
vlm80103492004-09-07 10:39:09 +00001290# undef YYMAXDEPTH
vlmfa67ddc2004-06-03 03:38:44 +00001291#endif
1292
1293#ifndef YYMAXDEPTH
vlm80103492004-09-07 10:39:09 +00001294# define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +00001295#endif
vlm80103492004-09-07 10:39:09 +00001296
vlmfa67ddc2004-06-03 03:38:44 +00001297
vlmfa67ddc2004-06-03 03:38:44 +00001298
vlm80103492004-09-07 10:39:09 +00001299#if YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00001300
vlm80103492004-09-07 10:39:09 +00001301# ifndef yystrlen
1302# if defined (__GLIBC__) && defined (_STRING_H)
1303# define yystrlen strlen
1304# else
1305/* Return the length of YYSTR. */
1306static YYSIZE_T
1307# if defined (__STDC__) || defined (__cplusplus)
1308yystrlen (const char *yystr)
1309# else
1310yystrlen (yystr)
1311 const char *yystr;
1312# endif
vlm044f7442004-09-04 04:49:21 +00001313{
vlm80103492004-09-07 10:39:09 +00001314 register const char *yys = yystr;
vlm044f7442004-09-04 04:49:21 +00001315
vlm80103492004-09-07 10:39:09 +00001316 while (*yys++ != '\0')
1317 continue;
1318
1319 return yys - yystr - 1;
1320}
1321# endif
1322# endif
1323
1324# ifndef yystpcpy
1325# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1326# define yystpcpy stpcpy
1327# else
1328/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1329 YYDEST. */
1330static char *
1331# if defined (__STDC__) || defined (__cplusplus)
1332yystpcpy (char *yydest, const char *yysrc)
1333# else
1334yystpcpy (yydest, yysrc)
1335 char *yydest;
1336 const char *yysrc;
1337# endif
1338{
1339 register char *yyd = yydest;
1340 register const char *yys = yysrc;
1341
1342 while ((*yyd++ = *yys++) != '\0')
1343 continue;
1344
1345 return yyd - 1;
1346}
1347# endif
1348# endif
1349
1350#endif /* !YYERROR_VERBOSE */
1351
1352
1353
1354#if YYDEBUG
1355/*-----------------------------.
1356| Print this symbol on YYOUT. |
1357`-----------------------------*/
1358
1359static void
1360#if defined (__STDC__) || defined (__cplusplus)
1361yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue)
1362#else
1363yysymprint (yyout, yytype, yyvalue)
1364 FILE* yyout;
1365 int yytype;
1366 YYSTYPE yyvalue;
1367#endif
1368{
1369 /* Pacify ``unused variable'' warnings. */
1370 (void) yyvalue;
1371
1372 if (yytype < YYNTOKENS)
1373 {
1374 YYFPRINTF (yyout, "token %s (", yytname[yytype]);
1375# ifdef YYPRINT
1376 YYPRINT (yyout, yytoknum[yytype], yyvalue);
1377# endif
1378 }
1379 else
1380 YYFPRINTF (yyout, "nterm %s (", yytname[yytype]);
1381
1382 switch (yytype)
1383 {
1384 default:
1385 break;
1386 }
1387 YYFPRINTF (yyout, ")");
1388}
1389#endif /* YYDEBUG. */
1390
1391
1392/*-----------------------------------------------.
1393| Release the memory associated to this symbol. |
1394`-----------------------------------------------*/
1395
1396static void
1397#if defined (__STDC__) || defined (__cplusplus)
1398yydestruct (int yytype, YYSTYPE yyvalue)
1399#else
1400yydestruct (yytype, yyvalue)
1401 int yytype;
1402 YYSTYPE yyvalue;
1403#endif
1404{
1405 /* Pacify ``unused variable'' warnings. */
1406 (void) yyvalue;
1407
1408 switch (yytype)
1409 {
1410 default:
1411 break;
1412 }
vlm044f7442004-09-04 04:49:21 +00001413}
vlm044f7442004-09-04 04:49:21 +00001414
vlmfa67ddc2004-06-03 03:38:44 +00001415
vlmfa67ddc2004-06-03 03:38:44 +00001416
1417/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1418 into yyparse. The argument should have type void *.
1419 It should actually point to an object.
1420 Grammar actions can access the variable by casting it
1421 to the proper pointer type. */
1422
1423#ifdef YYPARSE_PARAM
vlm80103492004-09-07 10:39:09 +00001424# if defined (__STDC__) || defined (__cplusplus)
1425# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1426# define YYPARSE_PARAM_DECL
1427# else
1428# define YYPARSE_PARAM_ARG YYPARSE_PARAM
1429# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1430# endif
1431#else /* !YYPARSE_PARAM */
1432# define YYPARSE_PARAM_ARG
1433# define YYPARSE_PARAM_DECL
1434#endif /* !YYPARSE_PARAM */
vlmfa67ddc2004-06-03 03:38:44 +00001435
1436/* Prevent warning if -Wstrict-prototypes. */
1437#ifdef __GNUC__
vlm80103492004-09-07 10:39:09 +00001438# ifdef YYPARSE_PARAM
vlmfa67ddc2004-06-03 03:38:44 +00001439int yyparse (void *);
vlm80103492004-09-07 10:39:09 +00001440# else
vlmfa67ddc2004-06-03 03:38:44 +00001441int yyparse (void);
vlm80103492004-09-07 10:39:09 +00001442# endif
vlm39e5ed72004-09-05 10:40:41 +00001443#endif
vlm80103492004-09-07 10:39:09 +00001444
1445
1446/* The lookahead symbol. */
1447int yychar;
1448
1449/* The semantic value of the lookahead symbol. */
1450YYSTYPE yylval;
1451
1452/* Number of parse errors so far. */
1453int yynerrs;
1454
vlm044f7442004-09-04 04:49:21 +00001455
vlmfa67ddc2004-06-03 03:38:44 +00001456int
vlm80103492004-09-07 10:39:09 +00001457yyparse (YYPARSE_PARAM_ARG)
vlmfa67ddc2004-06-03 03:38:44 +00001458 YYPARSE_PARAM_DECL
1459{
vlm80103492004-09-07 10:39:09 +00001460
vlmfa67ddc2004-06-03 03:38:44 +00001461 register int yystate;
1462 register int yyn;
vlm80103492004-09-07 10:39:09 +00001463 int yyresult;
1464 /* Number of tokens to shift before error messages enabled. */
1465 int yyerrstatus;
1466 /* Lookahead token as an internal (translated) token number. */
1467 int yychar1 = 0;
1468
1469 /* Three stacks and their tools:
1470 `yyss': related to states,
1471 `yyvs': related to semantic values,
1472 `yyls': related to locations.
1473
1474 Refer to the stacks thru separate pointers, to allow yyoverflow
1475 to reallocate them elsewhere. */
1476
1477 /* The state stack. */
1478 short yyssa[YYINITDEPTH];
1479 short *yyss = yyssa;
vlmfa67ddc2004-06-03 03:38:44 +00001480 register short *yyssp;
vlm80103492004-09-07 10:39:09 +00001481
1482 /* The semantic value stack. */
1483 YYSTYPE yyvsa[YYINITDEPTH];
1484 YYSTYPE *yyvs = yyvsa;
vlmfa67ddc2004-06-03 03:38:44 +00001485 register YYSTYPE *yyvsp;
vlmfa67ddc2004-06-03 03:38:44 +00001486
vlmfa67ddc2004-06-03 03:38:44 +00001487
vlmfa67ddc2004-06-03 03:38:44 +00001488
vlmfa67ddc2004-06-03 03:38:44 +00001489#define YYPOPSTACK (yyvsp--, yyssp--)
vlmfa67ddc2004-06-03 03:38:44 +00001490
vlm80103492004-09-07 10:39:09 +00001491 YYSIZE_T yystacksize = YYINITDEPTH;
vlmfa67ddc2004-06-03 03:38:44 +00001492
vlm80103492004-09-07 10:39:09 +00001493 /* The variables used to return semantic value and location from the
1494 action routines. */
1495 YYSTYPE yyval;
vlmfa67ddc2004-06-03 03:38:44 +00001496
vlmfa67ddc2004-06-03 03:38:44 +00001497
vlm80103492004-09-07 10:39:09 +00001498 /* When reducing, the number of symbols on the RHS of the reduced
1499 rule. */
vlmfa67ddc2004-06-03 03:38:44 +00001500 int yylen;
1501
vlm80103492004-09-07 10:39:09 +00001502 YYDPRINTF ((stderr, "Starting parse\n"));
vlmfa67ddc2004-06-03 03:38:44 +00001503
1504 yystate = 0;
1505 yyerrstatus = 0;
1506 yynerrs = 0;
1507 yychar = YYEMPTY; /* Cause a token to be read. */
1508
1509 /* Initialize stack pointers.
1510 Waste one element of value and location stack
1511 so that they stay on the same level as the state stack.
1512 The wasted elements are never initialized. */
1513
vlm80103492004-09-07 10:39:09 +00001514 yyssp = yyss;
vlmfa67ddc2004-06-03 03:38:44 +00001515 yyvsp = yyvs;
vlmfa67ddc2004-06-03 03:38:44 +00001516
vlm80103492004-09-07 10:39:09 +00001517 goto yysetstate;
vlmfa67ddc2004-06-03 03:38:44 +00001518
vlm80103492004-09-07 10:39:09 +00001519/*------------------------------------------------------------.
1520| yynewstate -- Push a new state, which is found in yystate. |
1521`------------------------------------------------------------*/
1522 yynewstate:
1523 /* In all cases, when you get here, the value and location stacks
1524 have just been pushed. so pushing a state here evens the stacks.
1525 */
1526 yyssp++;
1527
1528 yysetstate:
1529 *yyssp = yystate;
vlmfa67ddc2004-06-03 03:38:44 +00001530
1531 if (yyssp >= yyss + yystacksize - 1)
1532 {
vlmfa67ddc2004-06-03 03:38:44 +00001533 /* Get the current used size of the three stacks, in elements. */
vlm80103492004-09-07 10:39:09 +00001534 YYSIZE_T yysize = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001535
1536#ifdef yyoverflow
vlm80103492004-09-07 10:39:09 +00001537 {
1538 /* Give user a chance to reallocate the stack. Use copies of
1539 these so that the &'s don't force the real ones into
1540 memory. */
1541 YYSTYPE *yyvs1 = yyvs;
1542 short *yyss1 = yyss;
vlmfa67ddc2004-06-03 03:38:44 +00001543
vlm80103492004-09-07 10:39:09 +00001544
1545 /* Each stack pointer address is followed by the size of the
1546 data in use in that stack, in bytes. This used to be a
1547 conditional around just the two extra args, but that might
1548 be undefined if yyoverflow is a macro. */
1549 yyoverflow ("parser stack overflow",
1550 &yyss1, yysize * sizeof (*yyssp),
1551 &yyvs1, yysize * sizeof (*yyvsp),
1552
1553 &yystacksize);
1554
1555 yyss = yyss1;
1556 yyvs = yyvs1;
1557 }
vlmfa67ddc2004-06-03 03:38:44 +00001558#else /* no yyoverflow */
vlm80103492004-09-07 10:39:09 +00001559# ifndef YYSTACK_RELOCATE
1560 goto yyoverflowlab;
1561# else
vlmfa67ddc2004-06-03 03:38:44 +00001562 /* Extend the stack our own way. */
1563 if (yystacksize >= YYMAXDEPTH)
vlm80103492004-09-07 10:39:09 +00001564 goto yyoverflowlab;
vlmfa67ddc2004-06-03 03:38:44 +00001565 yystacksize *= 2;
1566 if (yystacksize > YYMAXDEPTH)
1567 yystacksize = YYMAXDEPTH;
vlm80103492004-09-07 10:39:09 +00001568
1569 {
1570 short *yyss1 = yyss;
1571 union yyalloc *yyptr =
1572 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1573 if (! yyptr)
1574 goto yyoverflowlab;
1575 YYSTACK_RELOCATE (yyss);
1576 YYSTACK_RELOCATE (yyvs);
1577
1578# undef YYSTACK_RELOCATE
1579 if (yyss1 != yyssa)
1580 YYSTACK_FREE (yyss1);
1581 }
1582# endif
vlmfa67ddc2004-06-03 03:38:44 +00001583#endif /* no yyoverflow */
1584
vlm80103492004-09-07 10:39:09 +00001585 yyssp = yyss + yysize - 1;
1586 yyvsp = yyvs + yysize - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001587
vlm80103492004-09-07 10:39:09 +00001588
1589 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1590 (unsigned long int) yystacksize));
vlmfa67ddc2004-06-03 03:38:44 +00001591
1592 if (yyssp >= yyss + yystacksize - 1)
1593 YYABORT;
1594 }
1595
vlm80103492004-09-07 10:39:09 +00001596 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
vlmfa67ddc2004-06-03 03:38:44 +00001597
1598 goto yybackup;
vlm80103492004-09-07 10:39:09 +00001599
1600/*-----------.
1601| yybackup. |
1602`-----------*/
1603yybackup:
vlmfa67ddc2004-06-03 03:38:44 +00001604
1605/* Do appropriate processing given the current state. */
1606/* Read a lookahead token if we need one and don't already have one. */
1607/* yyresume: */
1608
1609 /* First try to decide what to do without reference to lookahead token. */
1610
1611 yyn = yypact[yystate];
vlm80103492004-09-07 10:39:09 +00001612 if (yyn == YYPACT_NINF)
vlmfa67ddc2004-06-03 03:38:44 +00001613 goto yydefault;
1614
1615 /* Not known => get a lookahead token if don't already have one. */
1616
1617 /* yychar is either YYEMPTY or YYEOF
1618 or a valid token in external form. */
1619
1620 if (yychar == YYEMPTY)
1621 {
vlm80103492004-09-07 10:39:09 +00001622 YYDPRINTF ((stderr, "Reading a token: "));
vlmfa67ddc2004-06-03 03:38:44 +00001623 yychar = YYLEX;
1624 }
1625
vlm80103492004-09-07 10:39:09 +00001626 /* Convert token to internal form (in yychar1) for indexing tables with. */
vlmfa67ddc2004-06-03 03:38:44 +00001627
vlm80103492004-09-07 10:39:09 +00001628 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001629 {
1630 yychar1 = 0;
vlm80103492004-09-07 10:39:09 +00001631 yychar = YYEOF; /* Don't call YYLEX any more. */
vlmfa67ddc2004-06-03 03:38:44 +00001632
vlm80103492004-09-07 10:39:09 +00001633 YYDPRINTF ((stderr, "Now at end of input.\n"));
vlmfa67ddc2004-06-03 03:38:44 +00001634 }
1635 else
1636 {
vlm80103492004-09-07 10:39:09 +00001637 yychar1 = YYTRANSLATE (yychar);
vlmfa67ddc2004-06-03 03:38:44 +00001638
vlm80103492004-09-07 10:39:09 +00001639 /* We have to keep this `#if YYDEBUG', since we use variables
1640 which are defined only if `YYDEBUG' is set. */
1641 YYDPRINTF ((stderr, "Next token is "));
1642 YYDSYMPRINT ((stderr, yychar1, yylval));
1643 YYDPRINTF ((stderr, "\n"));
vlmfa67ddc2004-06-03 03:38:44 +00001644 }
1645
vlm80103492004-09-07 10:39:09 +00001646 /* If the proper action on seeing token YYCHAR1 is to reduce or to
1647 detect an error, take that action. */
vlmfa67ddc2004-06-03 03:38:44 +00001648 yyn += yychar1;
vlm80103492004-09-07 10:39:09 +00001649 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001650 goto yydefault;
vlmfa67ddc2004-06-03 03:38:44 +00001651 yyn = yytable[yyn];
vlm80103492004-09-07 10:39:09 +00001652 if (yyn <= 0)
vlmfa67ddc2004-06-03 03:38:44 +00001653 {
vlm80103492004-09-07 10:39:09 +00001654 if (yyn == 0 || yyn == YYTABLE_NINF)
vlmfa67ddc2004-06-03 03:38:44 +00001655 goto yyerrlab;
1656 yyn = -yyn;
1657 goto yyreduce;
1658 }
vlmfa67ddc2004-06-03 03:38:44 +00001659
1660 if (yyn == YYFINAL)
1661 YYACCEPT;
1662
1663 /* Shift the lookahead token. */
vlm80103492004-09-07 10:39:09 +00001664 YYDPRINTF ((stderr, "Shifting token %d (%s), ",
1665 yychar, yytname[yychar1]));
vlmfa67ddc2004-06-03 03:38:44 +00001666
1667 /* Discard the token being shifted unless it is eof. */
1668 if (yychar != YYEOF)
1669 yychar = YYEMPTY;
1670
1671 *++yyvsp = yylval;
vlmfa67ddc2004-06-03 03:38:44 +00001672
vlm80103492004-09-07 10:39:09 +00001673
1674 /* Count tokens shifted since error; after three, turn off error
1675 status. */
1676 if (yyerrstatus)
1677 yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001678
1679 yystate = yyn;
1680 goto yynewstate;
1681
vlm39e5ed72004-09-05 10:40:41 +00001682
vlm80103492004-09-07 10:39:09 +00001683/*-----------------------------------------------------------.
1684| yydefault -- do the default action for the current state. |
1685`-----------------------------------------------------------*/
1686yydefault:
vlmfa67ddc2004-06-03 03:38:44 +00001687 yyn = yydefact[yystate];
1688 if (yyn == 0)
1689 goto yyerrlab;
vlm80103492004-09-07 10:39:09 +00001690 goto yyreduce;
vlmfa67ddc2004-06-03 03:38:44 +00001691
vlm80103492004-09-07 10:39:09 +00001692
1693/*-----------------------------.
1694| yyreduce -- Do a reduction. |
1695`-----------------------------*/
vlmfa67ddc2004-06-03 03:38:44 +00001696yyreduce:
vlm80103492004-09-07 10:39:09 +00001697 /* yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001698 yylen = yyr2[yyn];
vlmfa67ddc2004-06-03 03:38:44 +00001699
vlm80103492004-09-07 10:39:09 +00001700 /* If YYLEN is nonzero, implement the default value of the action:
1701 `$$ = $1'.
1702
1703 Otherwise, the following line sets YYVAL to garbage.
1704 This behavior is undocumented and Bison
1705 users should not rely upon it. Assigning to YYVAL
1706 unconditionally makes the parser a bit smaller, and it avoids a
1707 GCC warning that YYVAL may be used uninitialized. */
1708 yyval = yyvsp[1-yylen];
1709
1710
1711
1712#if YYDEBUG
1713 /* We have to keep this `#if YYDEBUG', since we use variables which
1714 are defined only if `YYDEBUG' is set. */
vlmfa67ddc2004-06-03 03:38:44 +00001715 if (yydebug)
1716 {
vlm80103492004-09-07 10:39:09 +00001717 int yyi;
vlmfa67ddc2004-06-03 03:38:44 +00001718
vlm80103492004-09-07 10:39:09 +00001719 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
1720 yyn - 1, yyrline[yyn]);
vlmfa67ddc2004-06-03 03:38:44 +00001721
1722 /* Print the symbols being reduced, and their result. */
vlm80103492004-09-07 10:39:09 +00001723 for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
1724 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
1725 YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
vlmfa67ddc2004-06-03 03:38:44 +00001726 }
1727#endif
vlm80103492004-09-07 10:39:09 +00001728 switch (yyn)
1729 {
1730 case 2:
vlm39e5ed72004-09-05 10:40:41 +00001731#line 301 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001732 {
vlm39e5ed72004-09-05 10:40:41 +00001733 *(void **)param = yyvsp[0].a_grammar;
vlm80103492004-09-07 10:39:09 +00001734 }
1735 break;
1736
1737 case 3:
vlm39e5ed72004-09-05 10:40:41 +00001738#line 307 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001739 {
vlmfa67ddc2004-06-03 03:38:44 +00001740 yyval.a_grammar = asn1p_new();
1741 checkmem(yyval.a_grammar);
1742 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm80103492004-09-07 10:39:09 +00001743 }
1744 break;
1745
1746 case 4:
vlm39e5ed72004-09-05 10:40:41 +00001747#line 312 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001748 {
vlmfa67ddc2004-06-03 03:38:44 +00001749 yyval.a_grammar = yyvsp[-1].a_grammar;
1750 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm80103492004-09-07 10:39:09 +00001751 }
1752 break;
1753
1754 case 5:
vlm39e5ed72004-09-05 10:40:41 +00001755#line 333 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001756 {
vlmfa67ddc2004-06-03 03:38:44 +00001757
1758 if(yyvsp[-1].a_module) {
1759 yyval.a_module = yyvsp[-1].a_module;
1760 } else {
1761 /* There's a chance that a module is just plain empty */
1762 yyval.a_module = asn1p_module_new();
1763 }
1764 checkmem(yyval.a_module);
1765
1766 yyval.a_module->Identifier = yyvsp[-7].tv_str;
1767 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1768 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
vlm80103492004-09-07 10:39:09 +00001769 }
1770 break;
1771
1772 case 6:
vlm39e5ed72004-09-05 10:40:41 +00001773#line 354 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001774 { yyval.a_oid = 0; }
1775 break;
1776
1777 case 7:
vlm39e5ed72004-09-05 10:40:41 +00001778#line 355 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001779 { yyval.a_oid = yyvsp[0].a_oid; }
1780 break;
1781
1782 case 8:
vlm39e5ed72004-09-05 10:40:41 +00001783#line 359 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001784 {
vlmfa67ddc2004-06-03 03:38:44 +00001785 yyval.a_oid = yyvsp[-1].a_oid;
vlm80103492004-09-07 10:39:09 +00001786 }
1787 break;
1788
1789 case 9:
vlm39e5ed72004-09-05 10:40:41 +00001790#line 362 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001791 {
vlmfa67ddc2004-06-03 03:38:44 +00001792 yyval.a_oid = 0;
vlm80103492004-09-07 10:39:09 +00001793 }
1794 break;
1795
1796 case 10:
vlm39e5ed72004-09-05 10:40:41 +00001797#line 368 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001798 {
vlmfa67ddc2004-06-03 03:38:44 +00001799 yyval.a_oid = asn1p_oid_new();
1800 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1801 if(yyvsp[0].a_oid_arc.name)
1802 free(yyvsp[0].a_oid_arc.name);
vlm80103492004-09-07 10:39:09 +00001803 }
1804 break;
1805
1806 case 11:
vlm39e5ed72004-09-05 10:40:41 +00001807#line 374 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001808 {
vlmfa67ddc2004-06-03 03:38:44 +00001809 yyval.a_oid = yyvsp[-1].a_oid;
1810 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1811 if(yyvsp[0].a_oid_arc.name)
1812 free(yyvsp[0].a_oid_arc.name);
vlm80103492004-09-07 10:39:09 +00001813 }
1814 break;
1815
1816 case 12:
vlm39e5ed72004-09-05 10:40:41 +00001817#line 383 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001818 { /* iso */
vlmfa67ddc2004-06-03 03:38:44 +00001819 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1820 yyval.a_oid_arc.number = -1;
vlm80103492004-09-07 10:39:09 +00001821 }
1822 break;
1823
1824 case 13:
vlm39e5ed72004-09-05 10:40:41 +00001825#line 387 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001826 { /* iso(1) */
vlmfa67ddc2004-06-03 03:38:44 +00001827 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1828 yyval.a_oid_arc.number = yyvsp[-1].a_int;
vlm80103492004-09-07 10:39:09 +00001829 }
1830 break;
1831
1832 case 14:
vlm39e5ed72004-09-05 10:40:41 +00001833#line 391 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001834 { /* 1 */
vlmfa67ddc2004-06-03 03:38:44 +00001835 yyval.a_oid_arc.name = 0;
1836 yyval.a_oid_arc.number = yyvsp[0].a_int;
vlm80103492004-09-07 10:39:09 +00001837 }
1838 break;
1839
1840 case 15:
vlm39e5ed72004-09-05 10:40:41 +00001841#line 401 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001842 { yyval.a_module_flags = MSF_NOFLAGS; }
1843 break;
1844
1845 case 16:
vlm39e5ed72004-09-05 10:40:41 +00001846#line 402 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001847 {
vlmfa67ddc2004-06-03 03:38:44 +00001848 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm80103492004-09-07 10:39:09 +00001849 }
1850 break;
1851
1852 case 17:
vlm39e5ed72004-09-05 10:40:41 +00001853#line 411 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001854 {
vlmfa67ddc2004-06-03 03:38:44 +00001855 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm80103492004-09-07 10:39:09 +00001856 }
1857 break;
1858
1859 case 18:
vlm39e5ed72004-09-05 10:40:41 +00001860#line 414 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001861 {
vlmfa67ddc2004-06-03 03:38:44 +00001862 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
vlm80103492004-09-07 10:39:09 +00001863 }
1864 break;
1865
1866 case 19:
vlm39e5ed72004-09-05 10:40:41 +00001867#line 423 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001868 {
vlmfa67ddc2004-06-03 03:38:44 +00001869 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
vlm80103492004-09-07 10:39:09 +00001870 }
1871 break;
1872
1873 case 20:
vlm39e5ed72004-09-05 10:40:41 +00001874#line 426 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001875 {
vlmfa67ddc2004-06-03 03:38:44 +00001876 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
vlm80103492004-09-07 10:39:09 +00001877 }
1878 break;
1879
1880 case 21:
vlm39e5ed72004-09-05 10:40:41 +00001881#line 429 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001882 {
vlmfa67ddc2004-06-03 03:38:44 +00001883 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
vlm80103492004-09-07 10:39:09 +00001884 }
1885 break;
1886
1887 case 22:
vlm39e5ed72004-09-05 10:40:41 +00001888#line 432 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001889 {
vlmfa67ddc2004-06-03 03:38:44 +00001890 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
vlm80103492004-09-07 10:39:09 +00001891 }
1892 break;
1893
1894 case 23:
vlm39e5ed72004-09-05 10:40:41 +00001895#line 436 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001896 {
vlm9283dbe2004-08-18 04:59:12 +00001897 /* X.680Amd1 specifies TAG and XER */
1898 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1899 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1900 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1901 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
1902 } else {
1903 fprintf(stderr,
1904 "WARNING: %s INSTRUCTIONS at line %d: "
1905 "Unrecognized encoding reference\n",
1906 yyvsp[-1].tv_str, yylineno);
1907 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
1908 }
1909 free(yyvsp[-1].tv_str);
vlm80103492004-09-07 10:39:09 +00001910 }
1911 break;
1912
1913 case 24:
vlm39e5ed72004-09-05 10:40:41 +00001914#line 457 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001915 { yyval.a_module = 0; }
1916 break;
1917
1918 case 25:
vlm39e5ed72004-09-05 10:40:41 +00001919#line 458 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001920 {
vlmfa67ddc2004-06-03 03:38:44 +00001921 yyval.a_module = yyvsp[0].a_module;
vlm80103492004-09-07 10:39:09 +00001922 }
1923 break;
1924
1925 case 26:
vlm39e5ed72004-09-05 10:40:41 +00001926#line 467 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001927 {
vlm9283dbe2004-08-18 04:59:12 +00001928 yyval.a_module = yyvsp[0].a_module;
vlm80103492004-09-07 10:39:09 +00001929 }
1930 break;
1931
1932 case 27:
vlm39e5ed72004-09-05 10:40:41 +00001933#line 470 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001934 {
vlmfa67ddc2004-06-03 03:38:44 +00001935 yyval.a_module = yyvsp[-1].a_module;
1936
vlm9283dbe2004-08-18 04:59:12 +00001937 /* Behave well when one of them is skipped. */
1938 if(!(yyvsp[-1].a_module)) {
1939 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
1940 break;
1941 }
1942
vlmfa67ddc2004-06-03 03:38:44 +00001943#ifdef MY_IMPORT
1944#error MY_IMPORT DEFINED ELSEWHERE!
1945#endif
1946#define MY_IMPORT(foo,field) do { \
vlm97ed7152004-08-13 12:31:09 +00001947 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
vlmfa67ddc2004-06-03 03:38:44 +00001948 TQ_ADD(&(yyval.a_module->foo), \
1949 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
1950 field); \
vlm97ed7152004-08-13 12:31:09 +00001951 } \
1952 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
1953 } while(0)
vlmfa67ddc2004-06-03 03:38:44 +00001954
1955 MY_IMPORT(imports, xp_next);
1956 MY_IMPORT(exports, xp_next);
1957 MY_IMPORT(members, next);
1958#undef MY_IMPORT
1959
vlm80103492004-09-07 10:39:09 +00001960 }
1961 break;
1962
1963 case 28:
vlm39e5ed72004-09-05 10:40:41 +00001964#line 503 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001965 {
vlmfa67ddc2004-06-03 03:38:44 +00001966 yyval.a_module = yyvsp[0].a_module;
vlm80103492004-09-07 10:39:09 +00001967 }
1968 break;
1969
1970 case 29:
vlm39e5ed72004-09-05 10:40:41 +00001971#line 506 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001972 {
vlmfa67ddc2004-06-03 03:38:44 +00001973 yyval.a_module = asn1p_module_new();
1974 checkmem(yyval.a_module);
1975 if(yyvsp[0].a_xports) {
1976 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
1977 } else {
1978 /* "EXPORTS ALL;" ? */
1979 }
vlm80103492004-09-07 10:39:09 +00001980 }
1981 break;
1982
1983 case 30:
vlm39e5ed72004-09-05 10:40:41 +00001984#line 515 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001985 {
vlmfa67ddc2004-06-03 03:38:44 +00001986 yyval.a_module = asn1p_module_new();
1987 checkmem(yyval.a_module);
1988 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
1989 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
1990 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00001991 }
1992 break;
1993
1994 case 31:
vlm39e5ed72004-09-05 10:40:41 +00001995#line 522 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00001996 {
vlm9283dbe2004-08-18 04:59:12 +00001997 yyval.a_module = asn1p_module_new();
1998 checkmem(yyval.a_module);
1999 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2000 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2001 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002002 }
2003 break;
2004
2005 case 32:
vlm39e5ed72004-09-05 10:40:41 +00002006#line 535 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002007 {
vlm9283dbe2004-08-18 04:59:12 +00002008 yyval.a_module = asn1p_module_new();
2009 checkmem(yyval.a_module);
2010 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2011 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2012 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002013 }
2014 break;
2015
2016 case 33:
vlm39e5ed72004-09-05 10:40:41 +00002017#line 543 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002018 { asn1p_lexer_hack_push_encoding_control(); }
2019 break;
2020
2021 case 34:
vlm39e5ed72004-09-05 10:40:41 +00002022#line 544 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002023 {
vlm9283dbe2004-08-18 04:59:12 +00002024 fprintf(stderr,
2025 "WARNING: ENCODING-CONTROL %s "
2026 "specification at line %d ignored\n",
2027 yyvsp[-1].tv_str, yylineno);
2028 free(yyvsp[-1].tv_str);
2029 yyval.a_module = 0;
vlm80103492004-09-07 10:39:09 +00002030 }
2031 break;
2032
2033 case 35:
vlm39e5ed72004-09-05 10:40:41 +00002034#line 556 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002035 {
vlmfa67ddc2004-06-03 03:38:44 +00002036 return yyerror(
2037 "Attempt to redefine a standard basic type, "
2038 "use -ftypesXY to switch back "
2039 "to older version of ASN.1 standard");
vlm80103492004-09-07 10:39:09 +00002040 }
2041 break;
2042
2043 case 36:
vlm39e5ed72004-09-05 10:40:41 +00002044#line 570 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002045 {
vlmfa67ddc2004-06-03 03:38:44 +00002046 yyval.a_module = yyvsp[-1].a_module;
vlm80103492004-09-07 10:39:09 +00002047 }
2048 break;
2049
2050 case 37:
vlm39e5ed72004-09-05 10:40:41 +00002051#line 576 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002052 {
vlmfa67ddc2004-06-03 03:38:44 +00002053 return yyerror("Empty IMPORTS list");
vlm80103492004-09-07 10:39:09 +00002054 }
2055 break;
2056
2057 case 38:
vlm39e5ed72004-09-05 10:40:41 +00002058#line 582 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002059 {
vlmfa67ddc2004-06-03 03:38:44 +00002060 yyval.a_module = asn1p_module_new();
2061 checkmem(yyval.a_module);
2062 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm80103492004-09-07 10:39:09 +00002063 }
2064 break;
2065
2066 case 39:
vlm39e5ed72004-09-05 10:40:41 +00002067#line 587 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002068 {
vlmfa67ddc2004-06-03 03:38:44 +00002069 yyval.a_module = yyvsp[-1].a_module;
2070 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm80103492004-09-07 10:39:09 +00002071 }
2072 break;
2073
2074 case 40:
vlm39e5ed72004-09-05 10:40:41 +00002075#line 594 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002076 {
vlmfa67ddc2004-06-03 03:38:44 +00002077 yyval.a_xports = yyvsp[-3].a_xports;
2078 yyval.a_xports->from = yyvsp[-1].tv_str;
2079 yyval.a_xports->from_oid = yyvsp[0].a_oid;
2080 checkmem(yyval.a_xports);
vlm80103492004-09-07 10:39:09 +00002081 }
2082 break;
2083
2084 case 41:
vlm39e5ed72004-09-05 10:40:41 +00002085#line 603 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002086 {
vlmfa67ddc2004-06-03 03:38:44 +00002087 yyval.a_xports = asn1p_xports_new();
2088 checkmem(yyval.a_xports);
2089 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002090 }
2091 break;
2092
2093 case 42:
vlm39e5ed72004-09-05 10:40:41 +00002094#line 608 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002095 {
vlmfa67ddc2004-06-03 03:38:44 +00002096 yyval.a_xports = yyvsp[-2].a_xports;
2097 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002098 }
2099 break;
2100
2101 case 43:
vlm39e5ed72004-09-05 10:40:41 +00002102#line 615 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002103 {
vlmfa67ddc2004-06-03 03:38:44 +00002104 yyval.a_expr = asn1p_expr_new(yylineno);
2105 checkmem(yyval.a_expr);
2106 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2107 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm80103492004-09-07 10:39:09 +00002108 }
2109 break;
2110
2111 case 44:
vlm39e5ed72004-09-05 10:40:41 +00002112#line 621 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002113 {
vlmfa67ddc2004-06-03 03:38:44 +00002114 yyval.a_expr = asn1p_expr_new(yylineno);
2115 checkmem(yyval.a_expr);
2116 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2117 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm80103492004-09-07 10:39:09 +00002118 }
2119 break;
2120
2121 case 45:
vlm39e5ed72004-09-05 10:40:41 +00002122#line 630 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002123 {
vlmfa67ddc2004-06-03 03:38:44 +00002124 yyval.a_xports = yyvsp[-1].a_xports;
vlm80103492004-09-07 10:39:09 +00002125 }
2126 break;
2127
2128 case 46:
vlm39e5ed72004-09-05 10:40:41 +00002129#line 633 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002130 {
vlmfa67ddc2004-06-03 03:38:44 +00002131 yyval.a_xports = 0;
vlm80103492004-09-07 10:39:09 +00002132 }
2133 break;
2134
2135 case 47:
vlm39e5ed72004-09-05 10:40:41 +00002136#line 636 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002137 {
vlmfa67ddc2004-06-03 03:38:44 +00002138 /* Empty EXPORTS clause effectively prohibits export. */
2139 yyval.a_xports = asn1p_xports_new();
2140 checkmem(yyval.a_xports);
vlm80103492004-09-07 10:39:09 +00002141 }
2142 break;
2143
2144 case 48:
vlm39e5ed72004-09-05 10:40:41 +00002145#line 644 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002146 {
vlmfa67ddc2004-06-03 03:38:44 +00002147 yyval.a_xports = asn1p_xports_new();
2148 assert(yyval.a_xports);
2149 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002150 }
2151 break;
2152
2153 case 49:
vlm39e5ed72004-09-05 10:40:41 +00002154#line 649 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002155 {
vlmfa67ddc2004-06-03 03:38:44 +00002156 yyval.a_xports = yyvsp[-2].a_xports;
2157 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002158 }
2159 break;
2160
2161 case 50:
vlm39e5ed72004-09-05 10:40:41 +00002162#line 656 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002163 {
vlmfa67ddc2004-06-03 03:38:44 +00002164 yyval.a_expr = asn1p_expr_new(yylineno);
2165 checkmem(yyval.a_expr);
2166 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2167 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
vlm80103492004-09-07 10:39:09 +00002168 }
2169 break;
2170
2171 case 51:
vlm39e5ed72004-09-05 10:40:41 +00002172#line 662 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002173 {
vlmfa67ddc2004-06-03 03:38:44 +00002174 yyval.a_expr = asn1p_expr_new(yylineno);
2175 checkmem(yyval.a_expr);
2176 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2177 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
vlm80103492004-09-07 10:39:09 +00002178 }
2179 break;
2180
2181 case 52:
vlm39e5ed72004-09-05 10:40:41 +00002182#line 672 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002183 {
vlmfa67ddc2004-06-03 03:38:44 +00002184 yyval.a_expr = yyvsp[-4].a_expr;
2185 assert(yyval.a_expr->Identifier == 0);
2186 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2187 yyval.a_expr->meta_type = AMT_VALUESET;
2188 // take care of optValueSetBody
vlm80103492004-09-07 10:39:09 +00002189 }
2190 break;
2191
2192 case 53:
vlm39e5ed72004-09-05 10:40:41 +00002193#line 682 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002194 {
vlmfa67ddc2004-06-03 03:38:44 +00002195 yyval.a_expr = asn1p_expr_new(yylineno);
2196 checkmem(yyval.a_expr);
2197 yyval.a_expr->reference = yyvsp[0].a_ref;
2198 yyval.a_expr->expr_type = A1TC_REFERENCE;
2199 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm80103492004-09-07 10:39:09 +00002200 }
2201 break;
2202
2203 case 54:
vlm39e5ed72004-09-05 10:40:41 +00002204#line 689 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002205 {
vlmfa67ddc2004-06-03 03:38:44 +00002206 yyval.a_expr = asn1p_expr_new(yylineno);
2207 checkmem(yyval.a_expr);
2208 yyval.a_expr->expr_type = yyvsp[0].a_type;
2209 yyval.a_expr->meta_type = AMT_TYPE;
vlm80103492004-09-07 10:39:09 +00002210 }
2211 break;
2212
2213 case 55:
vlm39e5ed72004-09-05 10:40:41 +00002214#line 698 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002215 { }
2216 break;
2217
2218 case 56:
vlm39e5ed72004-09-05 10:40:41 +00002219#line 699 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002220 {
2221 }
2222 break;
2223
2224 case 57:
vlm39e5ed72004-09-05 10:40:41 +00002225#line 710 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002226 {
2227 }
2228 break;
2229
2230 case 58:
vlm39e5ed72004-09-05 10:40:41 +00002231#line 712 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002232 {
2233 }
2234 break;
2235
2236 case 59:
vlm39e5ed72004-09-05 10:40:41 +00002237#line 717 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002238 {
2239 }
2240 break;
2241
2242 case 60:
vlm39e5ed72004-09-05 10:40:41 +00002243#line 719 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002244 {
2245 }
2246 break;
2247
2248 case 61:
vlm39e5ed72004-09-05 10:40:41 +00002249#line 735 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002250 {
vlmfa67ddc2004-06-03 03:38:44 +00002251 yyval.a_expr = asn1p_expr_new(yylineno);
2252 checkmem(yyval.a_expr);
2253 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2254 yyval.a_expr->tag = yyvsp[-1].a_tag;
2255 yyval.a_expr->expr_type = A1TC_TYPEID;
2256 yyval.a_expr->meta_type = AMT_TYPE;
vlm80103492004-09-07 10:39:09 +00002257 }
2258 break;
2259
2260 case 62:
vlm39e5ed72004-09-05 10:40:41 +00002261#line 743 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002262 {
vlmfa67ddc2004-06-03 03:38:44 +00002263 yyval.a_expr = yyvsp[0].a_expr;
2264 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2265 yyval.a_expr->tag = yyvsp[-1].a_tag;
2266 assert(yyval.a_expr->expr_type);
2267 assert(yyval.a_expr->meta_type);
vlm80103492004-09-07 10:39:09 +00002268 }
2269 break;
2270
2271 case 63:
vlm39e5ed72004-09-05 10:40:41 +00002272#line 750 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002273 {
vlmfa67ddc2004-06-03 03:38:44 +00002274 yyval.a_expr = yyvsp[0].a_expr;
2275 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2276 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2277 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm80103492004-09-07 10:39:09 +00002278 }
2279 break;
2280
2281 case 64:
vlm39e5ed72004-09-05 10:40:41 +00002282#line 766 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002283 {
vlmfa67ddc2004-06-03 03:38:44 +00002284 yyval.a_expr = yyvsp[0].a_expr;
2285 assert(yyval.a_expr->Identifier == 0);
2286 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2287 yyval.a_expr->params = yyvsp[-3].a_plist;
2288 yyval.a_expr->meta_type = AMT_PARAMTYPE;
vlm80103492004-09-07 10:39:09 +00002289 }
2290 break;
2291
2292 case 65:
vlm39e5ed72004-09-05 10:40:41 +00002293#line 776 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002294 {
vlmfa67ddc2004-06-03 03:38:44 +00002295 int ret;
2296 yyval.a_plist = asn1p_paramlist_new(yylineno);
2297 checkmem(yyval.a_plist);
2298 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
2299 checkmem(ret == 0);
2300 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2301 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm80103492004-09-07 10:39:09 +00002302 }
2303 break;
2304
2305 case 66:
vlm39e5ed72004-09-05 10:40:41 +00002306#line 785 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002307 {
vlmfa67ddc2004-06-03 03:38:44 +00002308 int ret;
2309 yyval.a_plist = yyvsp[-2].a_plist;
2310 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
2311 checkmem(ret == 0);
2312 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2313 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm80103492004-09-07 10:39:09 +00002314 }
2315 break;
2316
2317 case 67:
vlm39e5ed72004-09-05 10:40:41 +00002318#line 796 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002319 {
vlmfa67ddc2004-06-03 03:38:44 +00002320 yyval.a_parg.governor = NULL;
2321 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm80103492004-09-07 10:39:09 +00002322 }
2323 break;
2324
2325 case 68:
vlm39e5ed72004-09-05 10:40:41 +00002326#line 800 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002327 {
vlmfa67ddc2004-06-03 03:38:44 +00002328 int ret;
2329 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2330 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
2331 checkmem(ret == 0);
2332 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm80103492004-09-07 10:39:09 +00002333 }
2334 break;
2335
2336 case 69:
vlm39e5ed72004-09-05 10:40:41 +00002337#line 807 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002338 {
vlmfa67ddc2004-06-03 03:38:44 +00002339 int ret;
2340 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2341 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2342 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2343 checkmem(ret == 0);
2344 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm80103492004-09-07 10:39:09 +00002345 }
2346 break;
2347
2348 case 70:
vlm39e5ed72004-09-05 10:40:41 +00002349#line 818 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002350 {
vlmfa67ddc2004-06-03 03:38:44 +00002351 yyval.a_expr = asn1p_expr_new(yylineno);
2352 checkmem(yyval.a_expr);
2353 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002354 }
2355 break;
2356
2357 case 71:
vlm39e5ed72004-09-05 10:40:41 +00002358#line 823 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002359 {
vlmfa67ddc2004-06-03 03:38:44 +00002360 yyval.a_expr = yyvsp[-2].a_expr;
2361 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002362 }
2363 break;
2364
2365 case 72:
vlm39e5ed72004-09-05 10:40:41 +00002366#line 830 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002367 {
vlmfa67ddc2004-06-03 03:38:44 +00002368 yyval.a_expr = yyvsp[0].a_expr;
vlm80103492004-09-07 10:39:09 +00002369 }
2370 break;
2371
2372 case 73:
vlm39e5ed72004-09-05 10:40:41 +00002373#line 833 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002374 {
vlmfa67ddc2004-06-03 03:38:44 +00002375 yyval.a_expr = asn1p_expr_new(yylineno);
2376 checkmem(yyval.a_expr);
2377 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2378 yyval.a_expr->expr_type = A1TC_REFERENCE;
2379 yyval.a_expr->meta_type = AMT_VALUE;
vlm80103492004-09-07 10:39:09 +00002380 }
2381 break;
2382
2383 case 74:
vlm39e5ed72004-09-05 10:40:41 +00002384#line 846 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002385 {
vlmfa67ddc2004-06-03 03:38:44 +00002386 yyval.a_expr = asn1p_expr_new(yylineno);
2387 checkmem(yyval.a_expr);
2388 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002389 }
2390 break;
2391
2392 case 75:
vlm39e5ed72004-09-05 10:40:41 +00002393#line 851 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002394 {
vlmfa67ddc2004-06-03 03:38:44 +00002395 yyval.a_expr = yyvsp[-2].a_expr;
2396 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002397 }
2398 break;
2399
2400 case 76:
vlm39e5ed72004-09-05 10:40:41 +00002401#line 858 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002402 {
vlmec8f6812004-08-22 03:19:54 +00002403 yyval.a_expr = yyvsp[-1].a_expr;
2404 assert(yyval.a_expr->Identifier == 0);
2405 yyval.a_expr->Identifier = yyvsp[-2].tv_nametag.name;
2406 yyval.a_expr->tag = yyvsp[-2].tv_nametag.tag;
2407 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm80103492004-09-07 10:39:09 +00002408 }
2409 break;
2410
2411 case 77:
vlm39e5ed72004-09-05 10:40:41 +00002412#line 865 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002413 {
vlmec8f6812004-08-22 03:19:54 +00002414 yyval.a_expr = asn1p_expr_new(yylineno);
2415 checkmem(yyval.a_expr);
2416 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2417 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
2418 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002419 }
2420 break;
2421
2422 case 78:
vlm39e5ed72004-09-05 10:40:41 +00002423#line 872 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002424 {
vlmec8f6812004-08-22 03:19:54 +00002425 yyval.a_expr = yyvsp[0].a_expr;
vlm80103492004-09-07 10:39:09 +00002426 }
2427 break;
2428
2429 case 79:
vlm39e5ed72004-09-05 10:40:41 +00002430#line 878 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002431 {
vlmec8f6812004-08-22 03:19:54 +00002432 yyval.a_expr = asn1p_expr_new(yylineno);
2433 checkmem(yyval.a_expr);
2434 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002435 }
2436 break;
2437
2438 case 80:
vlm39e5ed72004-09-05 10:40:41 +00002439#line 883 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002440 {
vlmec8f6812004-08-22 03:19:54 +00002441 yyval.a_expr = yyvsp[-2].a_expr;
2442 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002443 }
2444 break;
2445
2446 case 81:
vlm39e5ed72004-09-05 10:40:41 +00002447#line 890 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002448 {
vlmec8f6812004-08-22 03:19:54 +00002449 yyval.a_expr = yyvsp[0].a_expr;
2450 assert(yyval.a_expr->Identifier == 0);
2451 yyval.a_expr->Identifier = yyvsp[-1].tv_nametag.name;
2452 yyval.a_expr->tag = yyvsp[-1].tv_nametag.tag;
vlm80103492004-09-07 10:39:09 +00002453 }
2454 break;
2455
2456 case 82:
vlm39e5ed72004-09-05 10:40:41 +00002457#line 896 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002458 {
vlmec8f6812004-08-22 03:19:54 +00002459 yyval.a_expr = yyvsp[0].a_expr;
vlm80103492004-09-07 10:39:09 +00002460 }
2461 break;
2462
2463 case 83:
vlm39e5ed72004-09-05 10:40:41 +00002464#line 902 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002465 {
vlmfa67ddc2004-06-03 03:38:44 +00002466 yyval.a_expr = yyvsp[-2].a_expr;
2467 checkmem(yyval.a_expr);
2468 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2469 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2470 assert(yyval.a_expr->meta_type == AMT_OBJECT);
vlm80103492004-09-07 10:39:09 +00002471 }
2472 break;
2473
2474 case 84:
vlm39e5ed72004-09-05 10:40:41 +00002475#line 912 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002476 { yyval.a_int = 0; }
2477 break;
2478
2479 case 85:
vlm39e5ed72004-09-05 10:40:41 +00002480#line 913 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002481 { yyval.a_int = 1; }
2482 break;
2483
2484 case 86:
vlm39e5ed72004-09-05 10:40:41 +00002485#line 917 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002486 {
vlmfa67ddc2004-06-03 03:38:44 +00002487 yyval.a_expr = asn1p_expr_new(yylineno);
2488 checkmem(yyval.a_expr);
2489 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2490 yyval.a_expr->meta_type = AMT_OBJECT;
2491 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002492 }
2493 break;
2494
2495 case 87:
vlm39e5ed72004-09-05 10:40:41 +00002496#line 924 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002497 {
vlmfa67ddc2004-06-03 03:38:44 +00002498 yyval.a_expr = yyvsp[-2].a_expr;
2499 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002500 }
2501 break;
2502
2503 case 88:
vlm39e5ed72004-09-05 10:40:41 +00002504#line 931 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002505 {
vlmfa67ddc2004-06-03 03:38:44 +00002506 yyval.a_expr = asn1p_expr_new(yylineno);
2507 checkmem(yyval.a_expr);
2508 yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
2509 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2510 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2511 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm80103492004-09-07 10:39:09 +00002512 }
2513 break;
2514
2515 case 89:
vlm39e5ed72004-09-05 10:40:41 +00002516#line 939 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002517 {
vlmec8f6812004-08-22 03:19:54 +00002518 yyval.a_expr = yyvsp[-2].a_expr;
2519 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2520 yyval.a_expr->marker = yyvsp[-1].a_marker;
vlmfa67ddc2004-06-03 03:38:44 +00002521 yyval.a_expr->unique = yyvsp[0].a_int;
vlm80103492004-09-07 10:39:09 +00002522 }
2523 break;
2524
2525 case 90:
vlm39e5ed72004-09-05 10:40:41 +00002526#line 945 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002527 {
vlmfa67ddc2004-06-03 03:38:44 +00002528 int ret;
2529 yyval.a_expr = asn1p_expr_new(yylineno);
2530 checkmem(yyval.a_expr);
2531 yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
2532 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2533 checkmem(yyval.a_expr->reference);
2534 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2535 yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
2536 checkmem(ret == 0);
2537 yyval.a_expr->expr_type = A1TC_CLASSFIELD;
2538 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2539 yyval.a_expr->marker = yyvsp[-1].a_marker;
2540 yyval.a_expr->unique = yyvsp[0].a_int;
vlm80103492004-09-07 10:39:09 +00002541 }
2542 break;
2543
2544 case 91:
vlm39e5ed72004-09-05 10:40:41 +00002545#line 963 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002546 { yyval.a_wsynt = 0; }
2547 break;
2548
2549 case 92:
vlm39e5ed72004-09-05 10:40:41 +00002550#line 964 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002551 {
vlmfa67ddc2004-06-03 03:38:44 +00002552 yyval.a_wsynt = yyvsp[0].a_wsynt;
vlm80103492004-09-07 10:39:09 +00002553 }
2554 break;
2555
2556 case 93:
vlm39e5ed72004-09-05 10:40:41 +00002557#line 971 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002558 { asn1p_lexer_hack_enable_with_syntax(); }
2559 break;
2560
2561 case 94:
vlm39e5ed72004-09-05 10:40:41 +00002562#line 973 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002563 {
vlmfa67ddc2004-06-03 03:38:44 +00002564 yyval.a_wsynt = yyvsp[-1].a_wsynt;
vlm80103492004-09-07 10:39:09 +00002565 }
2566 break;
2567
2568 case 95:
vlm39e5ed72004-09-05 10:40:41 +00002569#line 979 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002570 {
vlmfa67ddc2004-06-03 03:38:44 +00002571 yyval.a_wsynt = asn1p_wsyntx_new();
2572 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm80103492004-09-07 10:39:09 +00002573 }
2574 break;
2575
2576 case 96:
vlm39e5ed72004-09-05 10:40:41 +00002577#line 983 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002578 {
vlmfa67ddc2004-06-03 03:38:44 +00002579 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2580 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm80103492004-09-07 10:39:09 +00002581 }
2582 break;
2583
2584 case 97:
vlm39e5ed72004-09-05 10:40:41 +00002585#line 990 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002586 {
vlmfa67ddc2004-06-03 03:38:44 +00002587 yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
vlm80103492004-09-07 10:39:09 +00002588 }
2589 break;
2590
2591 case 98:
vlm39e5ed72004-09-05 10:40:41 +00002592#line 993 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002593 {
vlmfa67ddc2004-06-03 03:38:44 +00002594 asn1p_ref_t *ref;
2595 int ret;
2596 ref = asn1p_ref_new(yylineno);
2597 checkmem(ref);
2598 ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2599 checkmem(ret == 0);
2600 yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
vlm80103492004-09-07 10:39:09 +00002601 }
2602 break;
2603
2604 case 99:
vlm39e5ed72004-09-05 10:40:41 +00002605#line 1005 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002606 {
vlm39e5ed72004-09-05 10:40:41 +00002607 yyval.a_expr = asn1p_expr_new(yylineno);
vlm9283dbe2004-08-18 04:59:12 +00002608 checkmem(yyval.a_expr);
2609 yyval.a_expr->Identifier = strdup("...");
2610 checkmem(yyval.a_expr->Identifier);
vlm9283dbe2004-08-18 04:59:12 +00002611 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2612 yyval.a_expr->meta_type = AMT_TYPE;
vlm80103492004-09-07 10:39:09 +00002613 }
2614 break;
2615
2616 case 100:
vlm39e5ed72004-09-05 10:40:41 +00002617#line 1013 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002618 {
vlm39e5ed72004-09-05 10:40:41 +00002619 yyval.a_expr = asn1p_expr_new(yylineno);
vlm9283dbe2004-08-18 04:59:12 +00002620 checkmem(yyval.a_expr);
2621 yyval.a_expr->Identifier = strdup("...");
vlm9283dbe2004-08-18 04:59:12 +00002622 checkmem(yyval.a_expr->Identifier);
vlm5f0128b2004-08-20 13:25:29 +00002623 yyval.a_expr->value = yyvsp[0].a_value;
vlm9283dbe2004-08-18 04:59:12 +00002624 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2625 yyval.a_expr->meta_type = AMT_TYPE;
vlm80103492004-09-07 10:39:09 +00002626 }
2627 break;
2628
2629 case 101:
vlm39e5ed72004-09-05 10:40:41 +00002630#line 1022 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002631 {
vlm39e5ed72004-09-05 10:40:41 +00002632 yyval.a_expr = asn1p_expr_new(yylineno);
vlm5f0128b2004-08-20 13:25:29 +00002633 checkmem(yyval.a_expr);
2634 yyval.a_expr->Identifier = strdup("...");
2635 yyval.a_expr->value = yyvsp[0].a_value;
2636 checkmem(yyval.a_expr->Identifier);
2637 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2638 yyval.a_expr->meta_type = AMT_TYPE;
vlm80103492004-09-07 10:39:09 +00002639 }
2640 break;
2641
2642 case 102:
vlm39e5ed72004-09-05 10:40:41 +00002643#line 1034 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002644 {
vlmec8f6812004-08-22 03:19:54 +00002645 yyval.a_expr = yyvsp[-1].a_expr;
2646 /*
2647 * Outer constraint for SEQUENCE OF and SET OF applies
2648 * to the inner type.
2649 */
2650 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2651 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2652 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2653 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
2654 } else {
2655 if(yyval.a_expr->constraints) {
2656 assert(!yyvsp[0].a_constr);
2657 } else {
2658 yyval.a_expr->constraints = yyvsp[0].a_constr;
2659 }
2660 }
vlm80103492004-09-07 10:39:09 +00002661 }
2662 break;
2663
2664 case 103:
vlm39e5ed72004-09-05 10:40:41 +00002665#line 1055 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002666 {
vlm5f0128b2004-08-20 13:25:29 +00002667 yyval.a_expr = yyvsp[0].a_expr;
vlm80103492004-09-07 10:39:09 +00002668 }
2669 break;
2670
2671 case 104:
vlm39e5ed72004-09-05 10:40:41 +00002672#line 1058 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002673 {
vlmfa67ddc2004-06-03 03:38:44 +00002674 yyval.a_expr = asn1p_expr_new(yylineno);
2675 checkmem(yyval.a_expr);
2676 yyval.a_expr->expr_type = yyvsp[0].a_type;
2677 yyval.a_expr->meta_type = AMT_TYPE;
vlm80103492004-09-07 10:39:09 +00002678 }
2679 break;
2680
2681 case 105:
vlm39e5ed72004-09-05 10:40:41 +00002682#line 1064 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002683 {
vlmec8f6812004-08-22 03:19:54 +00002684 yyval.a_expr = yyvsp[-1].a_expr;
2685 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2686 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2687 yyval.a_expr->meta_type = AMT_TYPE;
vlm80103492004-09-07 10:39:09 +00002688 }
2689 break;
2690
2691 case 106:
vlm39e5ed72004-09-05 10:40:41 +00002692#line 1070 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002693 {
vlmec8f6812004-08-22 03:19:54 +00002694 yyval.a_expr = yyvsp[-1].a_expr;
2695 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2696 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2697 yyval.a_expr->meta_type = AMT_TYPE;
vlm80103492004-09-07 10:39:09 +00002698 }
2699 break;
2700
2701 case 107:
vlm39e5ed72004-09-05 10:40:41 +00002702#line 1076 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002703 {
vlmec8f6812004-08-22 03:19:54 +00002704 yyval.a_expr = yyvsp[-1].a_expr;
2705 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2706 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2707 yyval.a_expr->meta_type = AMT_TYPE;
vlm80103492004-09-07 10:39:09 +00002708 }
2709 break;
2710
2711 case 108:
vlm39e5ed72004-09-05 10:40:41 +00002712#line 1082 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002713 {
vlm39e5ed72004-09-05 10:40:41 +00002714 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002715 checkmem(yyval.a_expr);
2716 yyval.a_expr->constraints = yyvsp[-2].a_constr;
2717 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2718 yyval.a_expr->meta_type = AMT_TYPE;
2719 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002720 }
2721 break;
2722
2723 case 109:
vlm39e5ed72004-09-05 10:40:41 +00002724#line 1090 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002725 {
vlm39e5ed72004-09-05 10:40:41 +00002726 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002727 checkmem(yyval.a_expr);
2728 yyval.a_expr->constraints = yyvsp[-2].a_constr;
2729 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2730 yyval.a_expr->meta_type = AMT_TYPE;
2731 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00002732 }
2733 break;
2734
2735 case 110:
vlm39e5ed72004-09-05 10:40:41 +00002736#line 1098 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002737 {
vlm39e5ed72004-09-05 10:40:41 +00002738 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002739 checkmem(yyval.a_expr);
vlm044f7442004-09-04 04:49:21 +00002740 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002741 yyval.a_expr->meta_type = AMT_TYPE;
vlm80103492004-09-07 10:39:09 +00002742 }
2743 break;
2744
2745 case 111:
vlm39e5ed72004-09-05 10:40:41 +00002746#line 1104 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002747 {
vlmec8f6812004-08-22 03:19:54 +00002748 int ret;
vlm39e5ed72004-09-05 10:40:41 +00002749 yyval.a_expr = asn1p_expr_new(yylineno);
vlmec8f6812004-08-22 03:19:54 +00002750 checkmem(yyval.a_expr);
2751 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2752 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2753 yyvsp[0].tv_str, RLT_lowercase);
2754 checkmem(ret == 0);
vlm044f7442004-09-04 04:49:21 +00002755 yyval.a_expr->expr_type = ASN_TYPE_ANY;
vlmec8f6812004-08-22 03:19:54 +00002756 yyval.a_expr->meta_type = AMT_TYPE;
vlm80103492004-09-07 10:39:09 +00002757 }
2758 break;
2759
2760 case 112:
vlm39e5ed72004-09-05 10:40:41 +00002761#line 1118 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002762 {
vlmfa67ddc2004-06-03 03:38:44 +00002763 int ret;
2764 yyval.a_expr = yyvsp[-1].a_expr;
2765 assert(yyval.a_expr->expr_type == 0);
2766 assert(yyval.a_expr->meta_type == 0);
2767 assert(yyval.a_expr->reference == 0);
2768 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2769 checkmem(yyval.a_expr->reference);
2770 ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
2771 checkmem(ret == 0);
2772 free(yyvsp[-3].tv_str);
2773 yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
2774 yyval.a_expr->meta_type = AMT_TYPE;
vlm80103492004-09-07 10:39:09 +00002775 }
2776 break;
2777
2778 case 113:
vlm39e5ed72004-09-05 10:40:41 +00002779#line 1142 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002780 {
vlmfa67ddc2004-06-03 03:38:44 +00002781 yyval.a_expr = asn1p_expr_new(yylineno);
2782 checkmem(yyval.a_expr);
2783 yyval.a_expr->reference = yyvsp[0].a_ref;
2784 yyval.a_expr->expr_type = A1TC_REFERENCE;
2785 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm80103492004-09-07 10:39:09 +00002786 }
2787 break;
2788
2789 case 114:
vlm39e5ed72004-09-05 10:40:41 +00002790#line 1149 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002791 {
vlmfa67ddc2004-06-03 03:38:44 +00002792 yyval.a_expr = asn1p_expr_new(yylineno);
2793 checkmem(yyval.a_expr);
2794 yyval.a_expr->reference = yyvsp[0].a_ref;
2795 yyval.a_expr->expr_type = A1TC_INSTANCE;
2796 yyval.a_expr->meta_type = AMT_TYPE;
vlm80103492004-09-07 10:39:09 +00002797 }
2798 break;
2799
2800 case 115:
vlm39e5ed72004-09-05 10:40:41 +00002801#line 1164 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002802 {
vlmfa67ddc2004-06-03 03:38:44 +00002803 int ret;
2804 yyval.a_ref = asn1p_ref_new(yylineno);
2805 checkmem(yyval.a_ref);
2806 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2807 checkmem(ret == 0);
2808 free(yyvsp[0].tv_str);
vlm80103492004-09-07 10:39:09 +00002809 }
2810 break;
2811
2812 case 116:
vlm39e5ed72004-09-05 10:40:41 +00002813#line 1172 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002814 {
vlmfa67ddc2004-06-03 03:38:44 +00002815 int ret;
2816 yyval.a_ref = asn1p_ref_new(yylineno);
2817 checkmem(yyval.a_ref);
2818 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2819 checkmem(ret == 0);
2820 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
2821 checkmem(ret == 0);
2822 free(yyvsp[-2].tv_str);
vlm80103492004-09-07 10:39:09 +00002823 }
2824 break;
2825
2826 case 117:
vlm39e5ed72004-09-05 10:40:41 +00002827#line 1182 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002828 {
vlmfa67ddc2004-06-03 03:38:44 +00002829 int ret;
2830 yyval.a_ref = asn1p_ref_new(yylineno);
2831 checkmem(yyval.a_ref);
2832 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
2833 checkmem(ret == 0);
2834 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
2835 checkmem(ret == 0);
2836 free(yyvsp[-2].tv_str);
vlm80103492004-09-07 10:39:09 +00002837 }
2838 break;
2839
2840 case 118:
vlm39e5ed72004-09-05 10:40:41 +00002841#line 1192 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002842 {
vlmfa67ddc2004-06-03 03:38:44 +00002843 int ret;
2844 yyval.a_ref = asn1p_ref_new(yylineno);
2845 checkmem(yyval.a_ref);
2846 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
2847 free(yyvsp[0].tv_str);
2848 checkmem(ret == 0);
vlm80103492004-09-07 10:39:09 +00002849 }
2850 break;
2851
2852 case 119:
vlm39e5ed72004-09-05 10:40:41 +00002853#line 1200 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002854 {
vlmfa67ddc2004-06-03 03:38:44 +00002855 int ret;
2856 yyval.a_ref = yyvsp[0].a_ref;
2857 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
2858 free(yyvsp[-2].tv_str);
2859 checkmem(ret == 0);
2860 /*
2861 * Move the last element infront.
2862 */
2863 {
2864 struct asn1p_ref_component_s tmp_comp;
2865 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
2866 memmove(&yyval.a_ref->components[1],
2867 &yyval.a_ref->components[0],
2868 sizeof(yyval.a_ref->components[0])
2869 * (yyval.a_ref->comp_count - 1));
2870 yyval.a_ref->components[0] = tmp_comp;
2871 }
vlm80103492004-09-07 10:39:09 +00002872 }
2873 break;
2874
2875 case 120:
vlm39e5ed72004-09-05 10:40:41 +00002876#line 1222 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002877 {
vlmfa67ddc2004-06-03 03:38:44 +00002878 int ret;
2879 yyval.a_ref = asn1p_ref_new(yylineno);
2880 checkmem(yyval.a_ref);
2881 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2882 free(yyvsp[0].a_refcomp.name);
2883 checkmem(ret == 0);
vlm80103492004-09-07 10:39:09 +00002884 }
2885 break;
2886
2887 case 121:
vlm39e5ed72004-09-05 10:40:41 +00002888#line 1230 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002889 {
vlmfa67ddc2004-06-03 03:38:44 +00002890 int ret;
2891 yyval.a_ref = yyvsp[-2].a_ref;
2892 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
2893 free(yyvsp[0].a_refcomp.name);
2894 checkmem(ret == 0);
vlm80103492004-09-07 10:39:09 +00002895 }
2896 break;
2897
2898 case 124:
vlm39e5ed72004-09-05 10:40:41 +00002899#line 1244 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002900 {
vlmfa67ddc2004-06-03 03:38:44 +00002901 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
2902 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm80103492004-09-07 10:39:09 +00002903 }
2904 break;
2905
2906 case 125:
vlm39e5ed72004-09-05 10:40:41 +00002907#line 1249 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002908 {
vlmfa67ddc2004-06-03 03:38:44 +00002909 yyval.a_refcomp.lex_type = RLT_Amplowercase;
2910 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm80103492004-09-07 10:39:09 +00002911 }
2912 break;
2913
2914 case 126:
vlm39e5ed72004-09-05 10:40:41 +00002915#line 1262 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002916 {
vlmfa67ddc2004-06-03 03:38:44 +00002917 yyval.a_expr = yyvsp[-2].a_expr;
2918 assert(yyval.a_expr->Identifier == NULL);
2919 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2920 yyval.a_expr->meta_type = AMT_VALUE;
2921 yyval.a_expr->value = yyvsp[0].a_value;
vlm80103492004-09-07 10:39:09 +00002922 }
2923 break;
2924
2925 case 127:
vlm39e5ed72004-09-05 10:40:41 +00002926#line 1272 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002927 { asn1p_lexer_hack_push_opaque_state(); }
2928 break;
2929
2930 case 128:
vlm39e5ed72004-09-05 10:40:41 +00002931#line 1273 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002932 {
vlmfa67ddc2004-06-03 03:38:44 +00002933 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2934 checkmem(yyval.a_value);
2935 yyval.a_value->type = ATV_UNPARSED;
vlm80103492004-09-07 10:39:09 +00002936 }
2937 break;
2938
2939 case 129:
vlm39e5ed72004-09-05 10:40:41 +00002940#line 1278 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002941 {
vlmfa67ddc2004-06-03 03:38:44 +00002942 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
2943 checkmem(yyval.a_value);
vlm80103492004-09-07 10:39:09 +00002944 }
2945 break;
2946
2947 case 130:
vlm39e5ed72004-09-05 10:40:41 +00002948#line 1282 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002949 {
vlmfa67ddc2004-06-03 03:38:44 +00002950 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
2951 checkmem(yyval.a_value);
vlm80103492004-09-07 10:39:09 +00002952 }
2953 break;
2954
2955 case 131:
vlm39e5ed72004-09-05 10:40:41 +00002956#line 1286 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002957 {
vlmfa67ddc2004-06-03 03:38:44 +00002958 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
2959 checkmem(yyval.a_value);
vlm80103492004-09-07 10:39:09 +00002960 }
2961 break;
2962
2963 case 132:
vlm39e5ed72004-09-05 10:40:41 +00002964#line 1290 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002965 {
vlmfa67ddc2004-06-03 03:38:44 +00002966 yyval.a_value = yyvsp[0].a_value;
vlm80103492004-09-07 10:39:09 +00002967 }
2968 break;
2969
2970 case 133:
vlm39e5ed72004-09-05 10:40:41 +00002971#line 1293 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002972 {
vlm5f0128b2004-08-20 13:25:29 +00002973 yyval.a_value = yyvsp[0].a_value;
vlm80103492004-09-07 10:39:09 +00002974 }
2975 break;
2976
2977 case 134:
vlm39e5ed72004-09-05 10:40:41 +00002978#line 1299 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002979 {
vlmfa67ddc2004-06-03 03:38:44 +00002980 asn1p_ref_t *ref;
2981 int ret;
2982 ref = asn1p_ref_new(yylineno);
2983 checkmem(ref);
2984 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2985 checkmem(ret == 0);
2986 yyval.a_value = asn1p_value_fromref(ref, 0);
2987 checkmem(yyval.a_value);
2988 free(yyvsp[0].tv_str);
vlm80103492004-09-07 10:39:09 +00002989 }
2990 break;
2991
2992 case 135:
vlm39e5ed72004-09-05 10:40:41 +00002993#line 1310 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00002994 {
vlmfa67ddc2004-06-03 03:38:44 +00002995 asn1p_ref_t *ref;
2996 int ret;
2997 ref = asn1p_ref_new(yylineno);
2998 checkmem(ref);
2999 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
3000 checkmem(ret == 0);
3001 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3002 checkmem(ret == 0);
3003 yyval.a_value = asn1p_value_fromref(ref, 0);
3004 checkmem(yyval.a_value);
3005 free(yyvsp[-2].tv_str);
3006 free(yyvsp[0].tv_str);
vlm80103492004-09-07 10:39:09 +00003007 }
3008 break;
3009
3010 case 136:
vlm39e5ed72004-09-05 10:40:41 +00003011#line 1327 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003012 {
vlmfa67ddc2004-06-03 03:38:44 +00003013 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
3014 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
3015 checkmem(yyval.tv_opaque.buf);
3016 yyval.tv_opaque.buf[0] = '{';
3017 yyval.tv_opaque.buf[1] = ' ';
3018 memcpy(yyval.tv_opaque.buf + 2, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
3019 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
3020 free(yyvsp[0].tv_opaque.buf);
vlm80103492004-09-07 10:39:09 +00003021 }
3022 break;
3023
3024 case 137:
vlm39e5ed72004-09-05 10:40:41 +00003025#line 1337 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003026 {
vlmfa67ddc2004-06-03 03:38:44 +00003027 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
3028 char *p = malloc(newsize + 1);
3029 checkmem(p);
3030 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
3031 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
3032 p[newsize] = '\0';
3033 free(yyvsp[-1].tv_opaque.buf);
3034 free(yyvsp[0].tv_opaque.buf);
3035 yyval.tv_opaque.buf = p;
3036 yyval.tv_opaque.len = newsize;
vlm80103492004-09-07 10:39:09 +00003037 }
3038 break;
3039
3040 case 138:
vlm39e5ed72004-09-05 10:40:41 +00003041#line 1352 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003042 { yyval.a_type = ASN_BASIC_BOOLEAN; }
3043 break;
3044
3045 case 139:
vlm39e5ed72004-09-05 10:40:41 +00003046#line 1353 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003047 { yyval.a_type = ASN_BASIC_NULL; }
3048 break;
3049
3050 case 140:
vlm044f7442004-09-04 04:49:21 +00003051#line 1354 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003052 { yyval.a_type = ASN_BASIC_REAL; }
3053 break;
3054
3055 case 141:
vlm39e5ed72004-09-05 10:40:41 +00003056#line 1355 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003057 { yyval.a_type = yyvsp[0].a_type; }
3058 break;
3059
3060 case 142:
vlm39e5ed72004-09-05 10:40:41 +00003061#line 1356 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003062 { yyval.a_type = ASN_BASIC_OCTET_STRING; }
3063 break;
3064
3065 case 143:
vlm39e5ed72004-09-05 10:40:41 +00003066#line 1357 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003067 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
3068 break;
3069
3070 case 144:
vlm39e5ed72004-09-05 10:40:41 +00003071#line 1358 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003072 { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
3073 break;
3074
3075 case 145:
vlm39e5ed72004-09-05 10:40:41 +00003076#line 1359 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003077 { yyval.a_type = ASN_BASIC_EXTERNAL; }
3078 break;
3079
3080 case 146:
vlm39e5ed72004-09-05 10:40:41 +00003081#line 1360 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003082 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
3083 break;
3084
3085 case 147:
vlm39e5ed72004-09-05 10:40:41 +00003086#line 1361 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003087 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
3088 break;
3089
3090 case 148:
vlm39e5ed72004-09-05 10:40:41 +00003091#line 1362 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003092 { yyval.a_type = ASN_BASIC_UTCTime; }
3093 break;
3094
3095 case 149:
vlm39e5ed72004-09-05 10:40:41 +00003096#line 1363 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003097 { yyval.a_type = ASN_BASIC_GeneralizedTime; }
3098 break;
3099
3100 case 150:
vlm39e5ed72004-09-05 10:40:41 +00003101#line 1370 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003102 { yyval.a_type = ASN_BASIC_INTEGER; }
3103 break;
3104
3105 case 151:
vlm39e5ed72004-09-05 10:40:41 +00003106#line 1371 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003107 { yyval.a_type = ASN_BASIC_ENUMERATED; }
3108 break;
3109
3110 case 152:
vlm39e5ed72004-09-05 10:40:41 +00003111#line 1372 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003112 { yyval.a_type = ASN_BASIC_BIT_STRING; }
3113 break;
3114
3115 case 153:
vlm39e5ed72004-09-05 10:40:41 +00003116#line 1376 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003117 {
vlm39e5ed72004-09-05 10:40:41 +00003118 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003119 checkmem(yyval.a_expr);
3120 yyval.a_expr->expr_type = yyvsp[0].a_type;
3121 yyval.a_expr->meta_type = AMT_TYPE;
vlm80103492004-09-07 10:39:09 +00003122 }
3123 break;
3124
3125 case 154:
vlm39e5ed72004-09-05 10:40:41 +00003126#line 1382 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003127 {
vlmfa67ddc2004-06-03 03:38:44 +00003128 if(yyvsp[0].a_expr) {
3129 yyval.a_expr = yyvsp[0].a_expr;
3130 } else {
vlm39e5ed72004-09-05 10:40:41 +00003131 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003132 checkmem(yyval.a_expr);
3133 }
3134 yyval.a_expr->expr_type = yyvsp[-1].a_type;
3135 yyval.a_expr->meta_type = AMT_TYPE;
vlm80103492004-09-07 10:39:09 +00003136 }
3137 break;
3138
3139 case 155:
vlm39e5ed72004-09-05 10:40:41 +00003140#line 1395 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003141 { yyval.a_type = ASN_STRING_BMPString; }
3142 break;
3143
3144 case 156:
vlm39e5ed72004-09-05 10:40:41 +00003145#line 1396 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003146 {
vlmfa67ddc2004-06-03 03:38:44 +00003147 yyval.a_type = ASN_STRING_GeneralString;
vlm80103492004-09-07 10:39:09 +00003148 fprintf(stderr, "WARNING: GeneralString is not fully supported");
3149 }
3150 break;
3151
3152 case 157:
vlm39e5ed72004-09-05 10:40:41 +00003153#line 1400 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003154 {
vlmfa67ddc2004-06-03 03:38:44 +00003155 yyval.a_type = ASN_STRING_GraphicString;
vlm80103492004-09-07 10:39:09 +00003156 fprintf(stderr, "WARNING: GraphicString is not fully supported");
3157 }
3158 break;
3159
3160 case 158:
vlm39e5ed72004-09-05 10:40:41 +00003161#line 1404 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003162 { yyval.a_type = ASN_STRING_IA5String; }
3163 break;
3164
3165 case 159:
vlm39e5ed72004-09-05 10:40:41 +00003166#line 1405 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003167 { yyval.a_type = ASN_STRING_ISO646String; }
3168 break;
3169
3170 case 160:
vlm39e5ed72004-09-05 10:40:41 +00003171#line 1406 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003172 { yyval.a_type = ASN_STRING_NumericString; }
3173 break;
3174
3175 case 161:
vlm39e5ed72004-09-05 10:40:41 +00003176#line 1407 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003177 { yyval.a_type = ASN_STRING_PrintableString; }
3178 break;
3179
3180 case 162:
vlm39e5ed72004-09-05 10:40:41 +00003181#line 1408 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003182 {
vlmfa67ddc2004-06-03 03:38:44 +00003183 yyval.a_type = ASN_STRING_T61String;
vlm80103492004-09-07 10:39:09 +00003184 fprintf(stderr, "WARNING: T61String is not fully supported");
3185 }
3186 break;
3187
3188 case 163:
vlm39e5ed72004-09-05 10:40:41 +00003189#line 1412 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003190 { yyval.a_type = ASN_STRING_TeletexString; }
3191 break;
3192
3193 case 164:
vlm39e5ed72004-09-05 10:40:41 +00003194#line 1413 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003195 { yyval.a_type = ASN_STRING_UniversalString; }
3196 break;
3197
3198 case 165:
vlm39e5ed72004-09-05 10:40:41 +00003199#line 1414 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003200 { yyval.a_type = ASN_STRING_UTF8String; }
3201 break;
3202
3203 case 166:
vlm39e5ed72004-09-05 10:40:41 +00003204#line 1415 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003205 {
vlmfa67ddc2004-06-03 03:38:44 +00003206 yyval.a_type = ASN_STRING_VideotexString;
vlm80103492004-09-07 10:39:09 +00003207 fprintf(stderr, "WARNING: VideotexString is not fully supported");
3208 }
3209 break;
3210
3211 case 167:
vlm39e5ed72004-09-05 10:40:41 +00003212#line 1419 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003213 { yyval.a_type = ASN_STRING_VisibleString; }
3214 break;
3215
3216 case 168:
vlm044f7442004-09-04 04:49:21 +00003217#line 1420 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003218 { yyval.a_type = ASN_STRING_ObjectDescriptor; }
3219 break;
3220
3221 case 174:
vlm39e5ed72004-09-05 10:40:41 +00003222#line 1432 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003223 { yyval.a_constr = 0; }
3224 break;
3225
3226 case 175:
vlm39e5ed72004-09-05 10:40:41 +00003227#line 1433 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003228 {
vlm39e5ed72004-09-05 10:40:41 +00003229 yyval.a_constr = yyvsp[0].a_constr;
vlm80103492004-09-07 10:39:09 +00003230 }
3231 break;
3232
3233 case 176:
vlm39e5ed72004-09-05 10:40:41 +00003234#line 1439 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003235 {
vlm39e5ed72004-09-05 10:40:41 +00003236 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
vlm80103492004-09-07 10:39:09 +00003237 }
3238 break;
3239
3240 case 177:
vlm39e5ed72004-09-05 10:40:41 +00003241#line 1442 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003242 {
vlmfa67ddc2004-06-03 03:38:44 +00003243 /*
3244 * This is a special case, for compatibility purposes.
vlm9283dbe2004-08-18 04:59:12 +00003245 * It goes without parentheses.
vlmfa67ddc2004-06-03 03:38:44 +00003246 */
vlm5f0128b2004-08-20 13:25:29 +00003247 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
vlm80103492004-09-07 10:39:09 +00003248 }
3249 break;
3250
3251 case 178:
vlm39e5ed72004-09-05 10:40:41 +00003252#line 1452 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003253 {
vlmfa67ddc2004-06-03 03:38:44 +00003254 yyval.a_constr = yyvsp[-1].a_constr;
vlm80103492004-09-07 10:39:09 +00003255 }
3256 break;
3257
3258 case 179:
vlm39e5ed72004-09-05 10:40:41 +00003259#line 1455 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003260 {
vlm9283dbe2004-08-18 04:59:12 +00003261 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm80103492004-09-07 10:39:09 +00003262 }
3263 break;
3264
3265 case 180:
vlm39e5ed72004-09-05 10:40:41 +00003266#line 1461 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003267 {
vlmfa67ddc2004-06-03 03:38:44 +00003268 yyval.a_constr = yyvsp[0].a_constr;
vlm80103492004-09-07 10:39:09 +00003269 }
3270 break;
3271
3272 case 181:
vlm39e5ed72004-09-05 10:40:41 +00003273#line 1464 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003274 {
vlmfa67ddc2004-06-03 03:38:44 +00003275 asn1p_constraint_t *ct;
3276 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003277 ct->type = ACT_EL_EXT;
3278 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm80103492004-09-07 10:39:09 +00003279 }
3280 break;
3281
3282 case 182:
vlm39e5ed72004-09-05 10:40:41 +00003283#line 1470 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003284 {
vlmfa67ddc2004-06-03 03:38:44 +00003285 asn1p_constraint_t *ct;
3286 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003287 ct->type = ACT_EL_EXT;
3288 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
vlm6f5eb0b2004-08-13 12:35:09 +00003289 ct = yyval.a_constr;
3290 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
vlm80103492004-09-07 10:39:09 +00003291 }
3292 break;
3293
3294 case 183:
vlm39e5ed72004-09-05 10:40:41 +00003295#line 1481 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003296 {
vlm9283dbe2004-08-18 04:59:12 +00003297 yyval.a_constr = yyvsp[0].a_constr;
vlm80103492004-09-07 10:39:09 +00003298 }
3299 break;
3300
3301 case 184:
vlm39e5ed72004-09-05 10:40:41 +00003302#line 1484 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003303 {
vlmfa67ddc2004-06-03 03:38:44 +00003304 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm80103492004-09-07 10:39:09 +00003305 }
3306 break;
3307
3308 case 185:
vlm39e5ed72004-09-05 10:40:41 +00003309#line 1487 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003310 {
vlmfa67ddc2004-06-03 03:38:44 +00003311 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm80103492004-09-07 10:39:09 +00003312 }
3313 break;
3314
3315 case 186:
vlm39e5ed72004-09-05 10:40:41 +00003316#line 1490 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003317 {
vlmfa67ddc2004-06-03 03:38:44 +00003318 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm80103492004-09-07 10:39:09 +00003319 }
3320 break;
3321
3322 case 187:
vlm39e5ed72004-09-05 10:40:41 +00003323#line 1496 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003324 {
vlmfa67ddc2004-06-03 03:38:44 +00003325 int ret;
3326 yyval.a_constr = asn1p_constraint_new(yylineno);
3327 checkmem(yyval.a_constr);
3328 yyval.a_constr->type = yyvsp[-3].a_ctype;
3329 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
3330 checkmem(ret == 0);
vlm80103492004-09-07 10:39:09 +00003331 }
3332 break;
3333
3334 case 188:
vlm39e5ed72004-09-05 10:40:41 +00003335#line 1504 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003336 {
vlm9283dbe2004-08-18 04:59:12 +00003337 int ret;
3338 yyval.a_constr = asn1p_constraint_new(yylineno);
3339 checkmem(yyval.a_constr);
3340 yyval.a_constr->type = ACT_CA_SET;
3341 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
3342 checkmem(ret == 0);
vlm80103492004-09-07 10:39:09 +00003343 }
3344 break;
3345
3346 case 189:
vlm39e5ed72004-09-05 10:40:41 +00003347#line 1512 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003348 {
vlm9283dbe2004-08-18 04:59:12 +00003349 yyval.a_constr = asn1p_constraint_new(yylineno);
3350 checkmem(yyval.a_constr);
3351 yyval.a_constr->type = ACT_EL_VALUE;
3352 yyval.a_constr->value = yyvsp[0].a_value;
vlm80103492004-09-07 10:39:09 +00003353 }
3354 break;
3355
3356 case 190:
vlm39e5ed72004-09-05 10:40:41 +00003357#line 1518 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003358 {
vlm5f0128b2004-08-20 13:25:29 +00003359 yyval.a_constr = asn1p_constraint_new(yylineno);
3360 checkmem(yyval.a_constr);
3361 yyval.a_constr->type = yyvsp[-1].a_ctype;
vlmec8f6812004-08-22 03:19:54 +00003362 yyval.a_constr->range_start = yyvsp[-2].a_value;
3363 yyval.a_constr->range_stop = yyvsp[0].a_value;
vlm80103492004-09-07 10:39:09 +00003364 }
3365 break;
3366
3367 case 191:
vlm39e5ed72004-09-05 10:40:41 +00003368#line 1525 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003369 {
vlmec8f6812004-08-22 03:19:54 +00003370 yyval.a_constr = asn1p_constraint_new(yylineno);
3371 checkmem(yyval.a_constr);
3372 yyval.a_constr->type = yyvsp[-1].a_ctype;
3373 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3374 yyval.a_constr->range_stop = yyvsp[0].a_value;
3375 yyval.a_constr->range_start->type = ATV_MIN;
vlm80103492004-09-07 10:39:09 +00003376 }
3377 break;
3378
3379 case 192:
vlm39e5ed72004-09-05 10:40:41 +00003380#line 1533 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003381 {
vlmec8f6812004-08-22 03:19:54 +00003382 yyval.a_constr = asn1p_constraint_new(yylineno);
3383 checkmem(yyval.a_constr);
3384 yyval.a_constr->type = yyvsp[-1].a_ctype;
3385 yyval.a_constr->range_start = yyvsp[-2].a_value;
3386 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3387 yyval.a_constr->range_stop->type = ATV_MAX;
vlm80103492004-09-07 10:39:09 +00003388 }
3389 break;
3390
3391 case 193:
vlm39e5ed72004-09-05 10:40:41 +00003392#line 1541 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003393 {
vlmec8f6812004-08-22 03:19:54 +00003394 yyval.a_constr = asn1p_constraint_new(yylineno);
3395 checkmem(yyval.a_constr);
3396 yyval.a_constr->type = yyvsp[-1].a_ctype;
3397 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3398 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3399 yyval.a_constr->range_start->type = ATV_MIN;
3400 yyval.a_constr->range_stop->type = ATV_MAX;
vlm80103492004-09-07 10:39:09 +00003401 }
3402 break;
3403
3404 case 194:
vlm39e5ed72004-09-05 10:40:41 +00003405#line 1550 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003406 {
vlm5f0128b2004-08-20 13:25:29 +00003407 yyval.a_constr = yyvsp[0].a_constr;
vlm80103492004-09-07 10:39:09 +00003408 }
3409 break;
3410
3411 case 195:
vlm044f7442004-09-04 04:49:21 +00003412#line 1553 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003413 {
vlm39e5ed72004-09-05 10:40:41 +00003414 yyval.a_constr = yyvsp[0].a_constr;
vlm80103492004-09-07 10:39:09 +00003415 }
3416 break;
3417
3418 case 196:
vlm39e5ed72004-09-05 10:40:41 +00003419#line 1559 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003420 { yyval.a_ctype = ACT_EL_RANGE; }
3421 break;
3422
3423 case 197:
vlm39e5ed72004-09-05 10:40:41 +00003424#line 1560 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003425 { yyval.a_ctype = ACT_EL_RLRANGE; }
3426 break;
3427
3428 case 198:
vlm39e5ed72004-09-05 10:40:41 +00003429#line 1561 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003430 { yyval.a_ctype = ACT_EL_LLRANGE; }
3431 break;
3432
3433 case 199:
vlm39e5ed72004-09-05 10:40:41 +00003434#line 1562 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003435 { yyval.a_ctype = ACT_EL_ULRANGE; }
3436 break;
3437
3438 case 200:
vlm39e5ed72004-09-05 10:40:41 +00003439#line 1566 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003440 {
vlm39e5ed72004-09-05 10:40:41 +00003441 yyval.a_ctype = ACT_CT_SIZE;
vlm80103492004-09-07 10:39:09 +00003442 }
3443 break;
3444
3445 case 201:
vlm39e5ed72004-09-05 10:40:41 +00003446#line 1569 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003447 {
vlm39e5ed72004-09-05 10:40:41 +00003448 yyval.a_ctype = ACT_CT_FROM;
vlm80103492004-09-07 10:39:09 +00003449 }
3450 break;
3451
3452 case 202:
vlm39e5ed72004-09-05 10:40:41 +00003453#line 1575 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003454 {
vlmfa67ddc2004-06-03 03:38:44 +00003455 yyval.a_value = yyvsp[0].a_value;
vlm80103492004-09-07 10:39:09 +00003456 }
3457 break;
3458
3459 case 203:
vlm39e5ed72004-09-05 10:40:41 +00003460#line 1578 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003461 {
vlmfa67ddc2004-06-03 03:38:44 +00003462 asn1p_ref_t *ref;
3463 int ret;
3464 ref = asn1p_ref_new(yylineno);
3465 checkmem(ref);
3466 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3467 checkmem(ret == 0);
3468 yyval.a_value = asn1p_value_fromref(ref, 0);
3469 checkmem(yyval.a_value);
3470 free(yyvsp[0].tv_str);
vlm80103492004-09-07 10:39:09 +00003471 }
3472 break;
3473
3474 case 204:
vlm39e5ed72004-09-05 10:40:41 +00003475#line 1589 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003476 {
vlmfa67ddc2004-06-03 03:38:44 +00003477 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3478 checkmem(yyval.a_value);
vlm80103492004-09-07 10:39:09 +00003479 }
3480 break;
3481
3482 case 205:
vlm39e5ed72004-09-05 10:40:41 +00003483#line 1594 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003484 {
vlmfa67ddc2004-06-03 03:38:44 +00003485 yyval.a_value = asn1p_value_fromint(0);
3486 checkmem(yyval.a_value);
3487 yyval.a_value->type = ATV_FALSE;
vlm80103492004-09-07 10:39:09 +00003488 }
3489 break;
3490
3491 case 206:
vlm39e5ed72004-09-05 10:40:41 +00003492#line 1599 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003493 {
vlmfa67ddc2004-06-03 03:38:44 +00003494 yyval.a_value = asn1p_value_fromint(1);
3495 checkmem(yyval.a_value);
3496 yyval.a_value->type = ATV_TRUE;
vlm80103492004-09-07 10:39:09 +00003497 }
3498 break;
3499
3500 case 207:
vlm39e5ed72004-09-05 10:40:41 +00003501#line 1607 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003502 {
vlmfa67ddc2004-06-03 03:38:44 +00003503 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
vlm80103492004-09-07 10:39:09 +00003504 }
3505 break;
3506
3507 case 208:
vlm39e5ed72004-09-05 10:40:41 +00003508#line 1613 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003509 {
vlmfa67ddc2004-06-03 03:38:44 +00003510 yyval.a_constr = yyvsp[0].a_constr;
vlm80103492004-09-07 10:39:09 +00003511 }
3512 break;
3513
3514 case 209:
vlm39e5ed72004-09-05 10:40:41 +00003515#line 1616 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003516 {
vlmfa67ddc2004-06-03 03:38:44 +00003517 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm80103492004-09-07 10:39:09 +00003518 }
3519 break;
3520
3521 case 210:
vlm39e5ed72004-09-05 10:40:41 +00003522#line 1622 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003523 {
vlmfa67ddc2004-06-03 03:38:44 +00003524 yyval.a_constr = asn1p_constraint_new(yylineno);
3525 checkmem(yyval.a_constr);
3526 yyval.a_constr->type = ACT_EL_EXT;
vlm80103492004-09-07 10:39:09 +00003527 }
3528 break;
3529
3530 case 211:
vlm39e5ed72004-09-05 10:40:41 +00003531#line 1627 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003532 {
vlmfa67ddc2004-06-03 03:38:44 +00003533 yyval.a_constr = asn1p_constraint_new(yylineno);
3534 checkmem(yyval.a_constr);
3535 yyval.a_constr->type = ACT_EL_VALUE;
3536 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3537 yyval.a_constr->presence = yyvsp[0].a_pres;
vlm80103492004-09-07 10:39:09 +00003538 }
3539 break;
3540
3541 case 212:
vlm39e5ed72004-09-05 10:40:41 +00003542#line 1640 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003543 { yyval.a_pres = ACPRES_DEFAULT; }
3544 break;
3545
3546 case 213:
vlm39e5ed72004-09-05 10:40:41 +00003547#line 1641 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003548 { yyval.a_pres = yyvsp[0].a_pres; }
3549 break;
3550
3551 case 214:
vlm39e5ed72004-09-05 10:40:41 +00003552#line 1645 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003553 {
vlmfa67ddc2004-06-03 03:38:44 +00003554 yyval.a_pres = ACPRES_PRESENT;
vlm80103492004-09-07 10:39:09 +00003555 }
3556 break;
3557
3558 case 215:
vlm39e5ed72004-09-05 10:40:41 +00003559#line 1648 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003560 {
vlmfa67ddc2004-06-03 03:38:44 +00003561 yyval.a_pres = ACPRES_ABSENT;
vlm80103492004-09-07 10:39:09 +00003562 }
3563 break;
3564
3565 case 216:
vlm39e5ed72004-09-05 10:40:41 +00003566#line 1651 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003567 {
vlmfa67ddc2004-06-03 03:38:44 +00003568 yyval.a_pres = ACPRES_OPTIONAL;
vlm80103492004-09-07 10:39:09 +00003569 }
3570 break;
3571
3572 case 217:
vlm39e5ed72004-09-05 10:40:41 +00003573#line 1657 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003574 {
vlm5f0128b2004-08-20 13:25:29 +00003575 yyval.a_constr = yyvsp[0].a_constr;
vlm80103492004-09-07 10:39:09 +00003576 }
3577 break;
3578
3579 case 218:
vlm39e5ed72004-09-05 10:40:41 +00003580#line 1660 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003581 {
vlm5f0128b2004-08-20 13:25:29 +00003582 yyval.a_constr = yyvsp[0].a_constr;
vlm80103492004-09-07 10:39:09 +00003583 }
3584 break;
3585
3586 case 219:
vlm39e5ed72004-09-05 10:40:41 +00003587#line 1669 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003588 {
vlmfa67ddc2004-06-03 03:38:44 +00003589 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3590 asn1p_constraint_t *ct;
3591 int ret;
3592 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
3593 checkmem(ret == 0);
3594 ct = asn1p_constraint_new(yylineno);
3595 checkmem(yyval.a_constr);
3596 ct->type = ACT_EL_VALUE;
3597 ct->value = asn1p_value_fromref(ref, 0);
3598 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
vlm80103492004-09-07 10:39:09 +00003599 }
3600 break;
3601
3602 case 220:
vlm39e5ed72004-09-05 10:40:41 +00003603#line 1684 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003604 {
vlmfa67ddc2004-06-03 03:38:44 +00003605 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm80103492004-09-07 10:39:09 +00003606 }
3607 break;
3608
3609 case 221:
vlm39e5ed72004-09-05 10:40:41 +00003610#line 1690 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003611 {
vlmfa67ddc2004-06-03 03:38:44 +00003612 yyval.a_constr = asn1p_constraint_new(yylineno);
3613 checkmem(yyval.a_constr);
3614 yyval.a_constr->type = ACT_EL_VALUE;
3615 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
vlm80103492004-09-07 10:39:09 +00003616 }
3617 break;
3618
3619 case 222:
vlm39e5ed72004-09-05 10:40:41 +00003620#line 1696 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003621 {
vlmfa67ddc2004-06-03 03:38:44 +00003622 asn1p_constraint_t *ct;
3623 ct = asn1p_constraint_new(yylineno);
3624 checkmem(ct);
3625 ct->type = ACT_EL_VALUE;
3626 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3627 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm80103492004-09-07 10:39:09 +00003628 }
3629 break;
3630
3631 case 223:
vlm39e5ed72004-09-05 10:40:41 +00003632#line 1710 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003633 {
vlmfa67ddc2004-06-03 03:38:44 +00003634 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
3635 int ret;
3636 *p = '@';
3637 strcpy(p + 1, yyvsp[0].tv_str);
3638 yyval.a_ref = asn1p_ref_new(yylineno);
3639 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3640 checkmem(ret == 0);
3641 free(p);
3642 free(yyvsp[0].tv_str);
vlm80103492004-09-07 10:39:09 +00003643 }
3644 break;
3645
3646 case 224:
vlm39e5ed72004-09-05 10:40:41 +00003647#line 1721 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003648 {
vlmfa67ddc2004-06-03 03:38:44 +00003649 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
3650 int ret;
3651 p[0] = '@';
3652 p[1] = '.';
3653 strcpy(p + 2, yyvsp[0].tv_str);
3654 yyval.a_ref = asn1p_ref_new(yylineno);
3655 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
3656 checkmem(ret == 0);
3657 free(p);
3658 free(yyvsp[0].tv_str);
vlm80103492004-09-07 10:39:09 +00003659 }
3660 break;
3661
3662 case 225:
vlm39e5ed72004-09-05 10:40:41 +00003663#line 1737 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003664 {
vlmfa67ddc2004-06-03 03:38:44 +00003665 yyval.tv_str = yyvsp[0].tv_str;
vlm80103492004-09-07 10:39:09 +00003666 }
3667 break;
3668
3669 case 226:
vlm39e5ed72004-09-05 10:40:41 +00003670#line 1740 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003671 {
vlmfa67ddc2004-06-03 03:38:44 +00003672 int l1 = strlen(yyvsp[-2].tv_str);
3673 int l3 = strlen(yyvsp[0].tv_str);
3674 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
3675 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
3676 yyval.tv_str[l1] = '.';
3677 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
3678 yyval.tv_str[l1 + 1 + l3] = '\0';
vlm80103492004-09-07 10:39:09 +00003679 }
3680 break;
3681
3682 case 227:
vlm39e5ed72004-09-05 10:40:41 +00003683#line 1758 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003684 { yyval.a_marker = EM_NOMARK; }
3685 break;
3686
3687 case 228:
vlm39e5ed72004-09-05 10:40:41 +00003688#line 1759 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003689 { yyval.a_marker = yyvsp[0].a_marker; }
3690 break;
3691
3692 case 229:
vlm39e5ed72004-09-05 10:40:41 +00003693#line 1763 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003694 {
vlmfa67ddc2004-06-03 03:38:44 +00003695 yyval.a_marker = EM_OPTIONAL;
vlm80103492004-09-07 10:39:09 +00003696 }
3697 break;
3698
3699 case 230:
vlm39e5ed72004-09-05 10:40:41 +00003700#line 1766 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003701 {
vlmfa67ddc2004-06-03 03:38:44 +00003702 yyval.a_marker = EM_DEFAULT;
3703 /* FIXME: store DefaultValue somewhere */
vlm80103492004-09-07 10:39:09 +00003704 }
3705 break;
3706
3707 case 231:
vlm39e5ed72004-09-05 10:40:41 +00003708#line 1773 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003709 {
3710 }
3711 break;
3712
3713 case 232:
vlm39e5ed72004-09-05 10:40:41 +00003714#line 1775 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003715 {
3716 }
3717 break;
3718
3719 case 233:
vlm39e5ed72004-09-05 10:40:41 +00003720#line 1777 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003721 { asn1p_lexer_hack_push_opaque_state(); }
3722 break;
3723
3724 case 234:
vlm39e5ed72004-09-05 10:40:41 +00003725#line 1777 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003726 {
3727 }
3728 break;
3729
3730 case 235:
vlm39e5ed72004-09-05 10:40:41 +00003731#line 1798 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003732 {
vlm39e5ed72004-09-05 10:40:41 +00003733 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003734 checkmem(yyval.a_expr);
vlm80103492004-09-07 10:39:09 +00003735 }
3736 break;
3737
3738 case 236:
vlm39e5ed72004-09-05 10:40:41 +00003739#line 1802 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003740 {
vlmfa67ddc2004-06-03 03:38:44 +00003741 yyval.a_expr = yyvsp[-1].a_expr;
vlm80103492004-09-07 10:39:09 +00003742 }
3743 break;
3744
3745 case 237:
vlm39e5ed72004-09-05 10:40:41 +00003746#line 1808 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003747 {
vlm39e5ed72004-09-05 10:40:41 +00003748 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003749 checkmem(yyval.a_expr);
3750 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00003751 }
3752 break;
3753
3754 case 238:
vlm39e5ed72004-09-05 10:40:41 +00003755#line 1813 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003756 {
vlmfa67ddc2004-06-03 03:38:44 +00003757 yyval.a_expr = yyvsp[-2].a_expr;
3758 TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
vlm80103492004-09-07 10:39:09 +00003759 }
3760 break;
3761
3762 case 239:
vlm39e5ed72004-09-05 10:40:41 +00003763#line 1820 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003764 {
vlm39e5ed72004-09-05 10:40:41 +00003765 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003766 checkmem(yyval.a_expr);
3767 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3768 yyval.a_expr->meta_type = AMT_VALUE;
3769 yyval.a_expr->Identifier = yyvsp[0].tv_str;
vlm80103492004-09-07 10:39:09 +00003770 }
3771 break;
3772
3773 case 240:
vlm39e5ed72004-09-05 10:40:41 +00003774#line 1827 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003775 {
vlm39e5ed72004-09-05 10:40:41 +00003776 yyval.a_expr = asn1p_expr_new(yylineno);
vlm5f0128b2004-08-20 13:25:29 +00003777 checkmem(yyval.a_expr);
3778 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3779 yyval.a_expr->meta_type = AMT_VALUE;
3780 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3781 yyval.a_expr->value = yyvsp[-1].a_value;
vlm80103492004-09-07 10:39:09 +00003782 }
3783 break;
3784
3785 case 241:
vlm39e5ed72004-09-05 10:40:41 +00003786#line 1835 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003787 {
vlm39e5ed72004-09-05 10:40:41 +00003788 yyval.a_expr = asn1p_expr_new(yylineno);
vlm5f0128b2004-08-20 13:25:29 +00003789 checkmem(yyval.a_expr);
3790 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3791 yyval.a_expr->meta_type = AMT_VALUE;
3792 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3793 yyval.a_expr->value = yyvsp[-1].a_value;
vlm80103492004-09-07 10:39:09 +00003794 }
3795 break;
3796
3797 case 242:
vlm39e5ed72004-09-05 10:40:41 +00003798#line 1843 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003799 {
vlm39e5ed72004-09-05 10:40:41 +00003800 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003801 checkmem(yyval.a_expr);
3802 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
3803 yyval.a_expr->meta_type = AMT_VALUE;
3804 yyval.a_expr->value = yyvsp[0].a_value;
vlm80103492004-09-07 10:39:09 +00003805 }
3806 break;
3807
3808 case 243:
vlm39e5ed72004-09-05 10:40:41 +00003809#line 1850 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003810 {
vlm39e5ed72004-09-05 10:40:41 +00003811 yyval.a_expr = asn1p_expr_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003812 checkmem(yyval.a_expr);
3813 yyval.a_expr->Identifier = strdup("...");
3814 checkmem(yyval.a_expr->Identifier);
3815 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
3816 yyval.a_expr->meta_type = AMT_VALUE;
vlm80103492004-09-07 10:39:09 +00003817 }
3818 break;
3819
3820 case 244:
vlm39e5ed72004-09-05 10:40:41 +00003821#line 1861 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003822 {
vlmec8f6812004-08-22 03:19:54 +00003823 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3824 checkmem(yyval.a_value);
vlm80103492004-09-07 10:39:09 +00003825 }
3826 break;
3827
3828 case 245:
vlm39e5ed72004-09-05 10:40:41 +00003829#line 1865 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003830 {
vlmec8f6812004-08-22 03:19:54 +00003831 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3832 checkmem(yyval.a_value);
vlm80103492004-09-07 10:39:09 +00003833 }
3834 break;
3835
3836 case 246:
vlm39e5ed72004-09-05 10:40:41 +00003837#line 1896 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003838 { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); }
3839 break;
3840
3841 case 247:
vlm39e5ed72004-09-05 10:40:41 +00003842#line 1897 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003843 { yyval.a_tag = yyvsp[0].a_tag; }
3844 break;
3845
3846 case 248:
vlm39e5ed72004-09-05 10:40:41 +00003847#line 1901 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003848 {
vlmfa67ddc2004-06-03 03:38:44 +00003849 yyval.a_tag = yyvsp[0].a_tag;
3850 yyval.a_tag.tag_mode = TM_DEFAULT;
vlm80103492004-09-07 10:39:09 +00003851 }
3852 break;
3853
3854 case 249:
vlm39e5ed72004-09-05 10:40:41 +00003855#line 1905 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003856 {
vlmfa67ddc2004-06-03 03:38:44 +00003857 yyval.a_tag = yyvsp[-1].a_tag;
3858 yyval.a_tag.tag_mode = TM_IMPLICIT;
vlm80103492004-09-07 10:39:09 +00003859 }
3860 break;
3861
3862 case 250:
vlm39e5ed72004-09-05 10:40:41 +00003863#line 1909 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003864 {
vlmfa67ddc2004-06-03 03:38:44 +00003865 yyval.a_tag = yyvsp[-1].a_tag;
3866 yyval.a_tag.tag_mode = TM_EXPLICIT;
vlm80103492004-09-07 10:39:09 +00003867 }
3868 break;
3869
3870 case 251:
vlm39e5ed72004-09-05 10:40:41 +00003871#line 1916 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003872 {
vlm5f0128b2004-08-20 13:25:29 +00003873 checkmem(yyvsp[0].tv_str);
3874 yyval.tv_str = yyvsp[0].tv_str;
vlm80103492004-09-07 10:39:09 +00003875 }
3876 break;
3877
3878 case 252:
vlm044f7442004-09-04 04:49:21 +00003879#line 1920 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003880 {
vlm39e5ed72004-09-05 10:40:41 +00003881 checkmem(yyvsp[0].tv_str);
3882 yyval.tv_str = yyvsp[0].tv_str;
vlm80103492004-09-07 10:39:09 +00003883 }
3884 break;
3885
3886 case 253:
vlm39e5ed72004-09-05 10:40:41 +00003887#line 1928 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003888 {
vlm39e5ed72004-09-05 10:40:41 +00003889 checkmem(yyvsp[0].tv_str);
3890 yyval.tv_str = yyvsp[0].tv_str;
vlm80103492004-09-07 10:39:09 +00003891 }
3892 break;
3893
3894 case 254:
vlm39e5ed72004-09-05 10:40:41 +00003895#line 1935 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003896 {
vlm39e5ed72004-09-05 10:40:41 +00003897 checkmem(yyvsp[0].tv_str);
3898 yyval.tv_str = yyvsp[0].tv_str;
vlm80103492004-09-07 10:39:09 +00003899 }
3900 break;
3901
3902 case 255:
vlm39e5ed72004-09-05 10:40:41 +00003903#line 1942 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003904 {
vlmfa67ddc2004-06-03 03:38:44 +00003905 memset(&yyval.tv_nametag, 0, sizeof(yyval.tv_nametag));
3906 yyval.tv_nametag.name = yyvsp[0].tv_str;
vlm80103492004-09-07 10:39:09 +00003907 }
3908 break;
3909
3910 case 256:
vlm39e5ed72004-09-05 10:40:41 +00003911#line 1946 "asn1p_y.y"
vlm80103492004-09-07 10:39:09 +00003912 {
vlmfa67ddc2004-06-03 03:38:44 +00003913 yyval.tv_nametag.name = yyvsp[-1].tv_str;
3914 yyval.tv_nametag.tag = yyvsp[0].a_tag;
vlm80103492004-09-07 10:39:09 +00003915 }
3916 break;
3917
3918
3919 }
3920
3921/* Line 1016 of /usr/local/share/bison/yacc.c. */
3922#line 3923 "asn1p_y.c"
vlmfa67ddc2004-06-03 03:38:44 +00003923
3924 yyvsp -= yylen;
3925 yyssp -= yylen;
vlmfa67ddc2004-06-03 03:38:44 +00003926
vlm80103492004-09-07 10:39:09 +00003927
3928#if YYDEBUG
vlmfa67ddc2004-06-03 03:38:44 +00003929 if (yydebug)
3930 {
vlm80103492004-09-07 10:39:09 +00003931 short *yyssp1 = yyss - 1;
3932 YYFPRINTF (stderr, "state stack now");
3933 while (yyssp1 != yyssp)
3934 YYFPRINTF (stderr, " %d", *++yyssp1);
3935 YYFPRINTF (stderr, "\n");
vlmfa67ddc2004-06-03 03:38:44 +00003936 }
3937#endif
3938
3939 *++yyvsp = yyval;
3940
vlmfa67ddc2004-06-03 03:38:44 +00003941
vlm80103492004-09-07 10:39:09 +00003942 /* Now `shift' the result of the reduction. Determine what state
3943 that goes to, based on the state we popped back to and the rule
3944 number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00003945
3946 yyn = yyr1[yyn];
3947
vlm80103492004-09-07 10:39:09 +00003948 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
3949 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00003950 yystate = yytable[yystate];
3951 else
vlm80103492004-09-07 10:39:09 +00003952 yystate = yydefgoto[yyn - YYNTOKENS];
vlmfa67ddc2004-06-03 03:38:44 +00003953
3954 goto yynewstate;
3955
vlmfa67ddc2004-06-03 03:38:44 +00003956
vlm80103492004-09-07 10:39:09 +00003957/*------------------------------------.
3958| yyerrlab -- here on detecting error |
3959`------------------------------------*/
3960yyerrlab:
3961 /* If not already recovering from an error, report this error. */
3962 if (!yyerrstatus)
vlmfa67ddc2004-06-03 03:38:44 +00003963 {
3964 ++yynerrs;
vlm80103492004-09-07 10:39:09 +00003965#if YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00003966 yyn = yypact[yystate];
3967
vlm80103492004-09-07 10:39:09 +00003968 if (YYPACT_NINF < yyn && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00003969 {
vlm80103492004-09-07 10:39:09 +00003970 YYSIZE_T yysize = 0;
3971 int yytype = YYTRANSLATE (yychar);
3972 char *yymsg;
3973 int yyx, yycount;
vlmfa67ddc2004-06-03 03:38:44 +00003974
vlm80103492004-09-07 10:39:09 +00003975 yycount = 0;
3976 /* Start YYX at -YYN if negative to avoid negative indexes in
3977 YYCHECK. */
3978 for (yyx = yyn < 0 ? -yyn : 0;
3979 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
3980 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
3981 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
3982 yysize += yystrlen ("parse error, unexpected ") + 1;
3983 yysize += yystrlen (yytname[yytype]);
3984 yymsg = (char *) YYSTACK_ALLOC (yysize);
3985 if (yymsg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00003986 {
vlm80103492004-09-07 10:39:09 +00003987 char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
3988 yyp = yystpcpy (yyp, yytname[yytype]);
vlmfa67ddc2004-06-03 03:38:44 +00003989
vlm80103492004-09-07 10:39:09 +00003990 if (yycount < 5)
vlmfa67ddc2004-06-03 03:38:44 +00003991 {
vlm80103492004-09-07 10:39:09 +00003992 yycount = 0;
3993 for (yyx = yyn < 0 ? -yyn : 0;
3994 yyx < (int) (sizeof (yytname) / sizeof (char *));
3995 yyx++)
3996 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
vlmfa67ddc2004-06-03 03:38:44 +00003997 {
vlm80103492004-09-07 10:39:09 +00003998 const char *yyq = ! yycount ? ", expecting " : " or ";
3999 yyp = yystpcpy (yyp, yyq);
4000 yyp = yystpcpy (yyp, yytname[yyx]);
4001 yycount++;
vlmfa67ddc2004-06-03 03:38:44 +00004002 }
4003 }
vlm80103492004-09-07 10:39:09 +00004004 yyerror (yymsg);
4005 YYSTACK_FREE (yymsg);
vlmfa67ddc2004-06-03 03:38:44 +00004006 }
4007 else
vlm80103492004-09-07 10:39:09 +00004008 yyerror ("parse error; also virtual memory exhausted");
vlmfa67ddc2004-06-03 03:38:44 +00004009 }
4010 else
4011#endif /* YYERROR_VERBOSE */
vlm80103492004-09-07 10:39:09 +00004012 yyerror ("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00004013 }
vlmfa67ddc2004-06-03 03:38:44 +00004014 goto yyerrlab1;
vlmfa67ddc2004-06-03 03:38:44 +00004015
vlm80103492004-09-07 10:39:09 +00004016
4017/*----------------------------------------------------.
4018| yyerrlab1 -- error raised explicitly by an action. |
4019`----------------------------------------------------*/
4020yyerrlab1:
vlmfa67ddc2004-06-03 03:38:44 +00004021 if (yyerrstatus == 3)
4022 {
vlm80103492004-09-07 10:39:09 +00004023 /* If just tried and failed to reuse lookahead token after an
4024 error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00004025
vlm80103492004-09-07 10:39:09 +00004026 /* Return failure if at end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00004027 if (yychar == YYEOF)
vlm80103492004-09-07 10:39:09 +00004028 {
4029 /* Pop the error token. */
4030 YYPOPSTACK;
4031 /* Pop the rest of the stack. */
4032 while (yyssp > yyss)
4033 {
4034 YYDPRINTF ((stderr, "Error: popping "));
4035 YYDSYMPRINT ((stderr,
4036 yystos[*yyssp],
4037 *yyvsp));
4038 YYDPRINTF ((stderr, "\n"));
4039 yydestruct (yystos[*yyssp], *yyvsp);
4040 YYPOPSTACK;
4041 }
4042 YYABORT;
4043 }
vlmfa67ddc2004-06-03 03:38:44 +00004044
vlm80103492004-09-07 10:39:09 +00004045 YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
4046 yychar, yytname[yychar1]));
4047 yydestruct (yychar1, yylval);
vlmfa67ddc2004-06-03 03:38:44 +00004048 yychar = YYEMPTY;
4049 }
4050
vlm80103492004-09-07 10:39:09 +00004051 /* Else will try to reuse lookahead token after shifting the error
4052 token. */
vlmfa67ddc2004-06-03 03:38:44 +00004053
vlm80103492004-09-07 10:39:09 +00004054 yyerrstatus = 3; /* Each real token shifted decrements this. */
vlmfa67ddc2004-06-03 03:38:44 +00004055
vlm80103492004-09-07 10:39:09 +00004056 for (;;)
vlm39e5ed72004-09-05 10:40:41 +00004057 {
vlm80103492004-09-07 10:39:09 +00004058 yyn = yypact[yystate];
4059 if (yyn != YYPACT_NINF)
4060 {
4061 yyn += YYTERROR;
4062 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
4063 {
4064 yyn = yytable[yyn];
4065 if (0 < yyn)
4066 break;
4067 }
4068 }
4069
4070 /* Pop the current state because it cannot handle the error token. */
4071 if (yyssp == yyss)
4072 YYABORT;
4073
4074 YYDPRINTF ((stderr, "Error: popping "));
4075 YYDSYMPRINT ((stderr,
4076 yystos[*yyssp], *yyvsp));
4077 YYDPRINTF ((stderr, "\n"));
4078
4079 yydestruct (yystos[yystate], *yyvsp);
4080 yyvsp--;
4081 yystate = *--yyssp;
4082
4083
4084#if YYDEBUG
4085 if (yydebug)
4086 {
4087 short *yyssp1 = yyss - 1;
4088 YYFPRINTF (stderr, "Error: state stack now");
4089 while (yyssp1 != yyssp)
4090 YYFPRINTF (stderr, " %d", *++yyssp1);
4091 YYFPRINTF (stderr, "\n");
4092 }
vlm39e5ed72004-09-05 10:40:41 +00004093#endif
vlm39e5ed72004-09-05 10:40:41 +00004094 }
vlmfa67ddc2004-06-03 03:38:44 +00004095
4096 if (yyn == YYFINAL)
4097 YYACCEPT;
4098
vlm80103492004-09-07 10:39:09 +00004099 YYDPRINTF ((stderr, "Shifting error token, "));
vlmfa67ddc2004-06-03 03:38:44 +00004100
4101 *++yyvsp = yylval;
vlm80103492004-09-07 10:39:09 +00004102
vlmfa67ddc2004-06-03 03:38:44 +00004103
4104 yystate = yyn;
4105 goto yynewstate;
4106
vlm044f7442004-09-04 04:49:21 +00004107
vlm80103492004-09-07 10:39:09 +00004108/*-------------------------------------.
4109| yyacceptlab -- YYACCEPT comes here. |
4110`-------------------------------------*/
4111yyacceptlab:
4112 yyresult = 0;
4113 goto yyreturn;
4114
4115/*-----------------------------------.
4116| yyabortlab -- YYABORT comes here. |
4117`-----------------------------------*/
4118yyabortlab:
4119 yyresult = 1;
4120 goto yyreturn;
4121
4122#ifndef yyoverflow
4123/*----------------------------------------------.
4124| yyoverflowlab -- parser overflow comes here. |
4125`----------------------------------------------*/
4126yyoverflowlab:
4127 yyerror ("parser stack overflow");
4128 yyresult = 2;
4129 /* Fall through. */
vlm044f7442004-09-04 04:49:21 +00004130#endif
vlm80103492004-09-07 10:39:09 +00004131
4132yyreturn:
4133#ifndef yyoverflow
4134 if (yyss != yyssa)
4135 YYSTACK_FREE (yyss);
4136#endif
4137 return yyresult;
vlmfa67ddc2004-06-03 03:38:44 +00004138}
vlm80103492004-09-07 10:39:09 +00004139
4140
vlm39e5ed72004-09-05 10:40:41 +00004141#line 1953 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00004142
4143
4144
4145/*
4146 * Convert Xstring ('0101'B or '5'H) to the binary vector.
4147 */
4148static asn1p_value_t *
4149_convert_bitstring2binary(char *str, int base) {
4150 asn1p_value_t *val;
4151 int slen;
4152 int memlen;
4153 int baselen;
4154 int bits;
4155 uint8_t *binary_vector;
4156 uint8_t *bv_ptr;
4157 uint8_t cur_val;
4158
4159 assert(str);
4160 assert(str[0] == '\'');
4161
4162 switch(base) {
4163 case 'B':
4164 baselen = 1;
4165 break;
4166 case 'H':
4167 baselen = 4;
4168 break;
4169 default:
4170 assert(base == 'B' || base == 'H');
4171 errno = EINVAL;
4172 return NULL;
4173 }
4174
4175 slen = strlen(str);
4176 assert(str[slen - 1] == base);
4177 assert(str[slen - 2] == '\'');
4178
4179 memlen = slen / (8 / baselen); /* Conservative estimate */
4180
4181 bv_ptr = binary_vector = malloc(memlen + 1);
4182 if(bv_ptr == NULL)
4183 /* ENOMEM */
4184 return NULL;
4185
4186 cur_val = 0;
4187 bits = 0;
4188 while(*(++str) != '\'') {
4189 switch(baselen) {
4190 case 1:
4191 switch(*str) {
4192 case '1':
4193 cur_val |= 1 << (7 - (bits % 8));
4194 case '0':
4195 break;
4196 default:
4197 assert(!"_y UNREACH1");
4198 case ' ': case '\r': case '\n':
4199 continue;
4200 }
4201 break;
4202 case 4:
4203 switch(*str) {
4204 case '0': case '1': case '2': case '3': case '4':
4205 case '5': case '6': case '7': case '8': case '9':
4206 cur_val |= (*str - '0') << (4 - (bits % 8));
4207 break;
4208 case 'A': case 'B': case 'C':
4209 case 'D': case 'E': case 'F':
4210 cur_val |= ((*str - 'A') + 10)
4211 << (4 - (bits % 8));
4212 break;
4213 default:
4214 assert(!"_y UNREACH2");
4215 case ' ': case '\r': case '\n':
4216 continue;
4217 }
4218 break;
4219 }
4220
4221 bits += baselen;
4222 if((bits % 8) == 0) {
4223 *bv_ptr++ = cur_val;
4224 cur_val = 0;
4225 }
4226 }
4227
4228 *bv_ptr = cur_val;
4229 assert((bv_ptr - binary_vector) <= memlen);
4230
4231 val = asn1p_value_frombits(binary_vector, bits, 0);
4232 if(val == NULL) {
4233 free(binary_vector);
4234 }
4235
4236 return val;
4237}
4238
4239extern char *asn1p_text;
4240
4241int
4242yyerror(const char *msg) {
4243 fprintf(stderr,
4244 "ASN.1 grammar parse error "
4245 "near line %d (token \"%s\"): %s\n",
vlm39e5ed72004-09-05 10:40:41 +00004246 yylineno, asn1p_text, msg);
vlmfa67ddc2004-06-03 03:38:44 +00004247 return -1;
4248}
4249
4250
vlm80103492004-09-07 10:39:09 +00004251