blob: f1d4ad4eccf3bd8a2a338fe9c071f2581bb7e676 [file] [log] [blame]
Lev Walkin418298d2006-07-13 08:24:20 +00001/* A Bison parser, made from asn1p_y.y, by GNU bison 1.75. */
Lev Walkinf15320b2004-06-03 03:38:44 +00002
Lev Walkin418298d2006-07-13 08:24:20 +00003/* Skeleton parser for Yacc-like parsing with Bison,
4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
Lev Walkinf15320b2004-06-03 03:38:44 +00005
Lev Walkin418298d2006-07-13 08:24:20 +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.
Lev Walkinf15320b2004-06-03 03:38:44 +000010
Lev Walkin418298d2006-07-13 08:24:20 +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. */
Lev Walkinf15320b2004-06-03 03:38:44 +000047#define yyparse asn1p_parse
Lev Walkin418298d2006-07-13 08:24:20 +000048#define yylex asn1p_lex
Lev Walkinf15320b2004-06-03 03:38:44 +000049#define yyerror asn1p_error
Lev Walkin418298d2006-07-13 08:24:20 +000050#define yylval asn1p_lval
51#define yychar asn1p_char
Lev Walkinf15320b2004-06-03 03:38:44 +000052#define yydebug asn1p_debug
53#define yynerrs asn1p_nerrs
Lev Walkinf15320b2004-06-03 03:38:44 +000054
Lev Walkin418298d2006-07-13 08:24:20 +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_whitespace = 259,
64 TOK_opaque = 260,
65 TOK_bstring = 261,
66 TOK_cstring = 262,
67 TOK_hstring = 263,
68 TOK_identifier = 264,
69 TOK_number = 265,
Lev Walkinadf863f2006-09-05 16:18:34 +000070 TOK_number_negative = 266,
71 TOK_realnumber = 267,
72 TOK_tuple = 268,
73 TOK_quadruple = 269,
74 TOK_typereference = 270,
75 TOK_capitalreference = 271,
76 TOK_typefieldreference = 272,
77 TOK_valuefieldreference = 273,
78 TOK_Literal = 274,
79 TOK_ABSENT = 275,
80 TOK_ABSTRACT_SYNTAX = 276,
81 TOK_ALL = 277,
82 TOK_ANY = 278,
83 TOK_APPLICATION = 279,
84 TOK_AUTOMATIC = 280,
85 TOK_BEGIN = 281,
86 TOK_BIT = 282,
87 TOK_BMPString = 283,
88 TOK_BOOLEAN = 284,
89 TOK_BY = 285,
90 TOK_CHARACTER = 286,
91 TOK_CHOICE = 287,
92 TOK_CLASS = 288,
93 TOK_COMPONENT = 289,
94 TOK_COMPONENTS = 290,
95 TOK_CONSTRAINED = 291,
96 TOK_CONTAINING = 292,
97 TOK_DEFAULT = 293,
98 TOK_DEFINITIONS = 294,
99 TOK_DEFINED = 295,
100 TOK_EMBEDDED = 296,
101 TOK_ENCODED = 297,
102 TOK_ENCODING_CONTROL = 298,
103 TOK_END = 299,
104 TOK_ENUMERATED = 300,
105 TOK_EXPLICIT = 301,
106 TOK_EXPORTS = 302,
107 TOK_EXTENSIBILITY = 303,
108 TOK_EXTERNAL = 304,
109 TOK_FALSE = 305,
110 TOK_FROM = 306,
111 TOK_GeneralizedTime = 307,
112 TOK_GeneralString = 308,
113 TOK_GraphicString = 309,
114 TOK_IA5String = 310,
115 TOK_IDENTIFIER = 311,
116 TOK_IMPLICIT = 312,
117 TOK_IMPLIED = 313,
118 TOK_IMPORTS = 314,
119 TOK_INCLUDES = 315,
120 TOK_INSTANCE = 316,
121 TOK_INSTRUCTIONS = 317,
122 TOK_INTEGER = 318,
123 TOK_ISO646String = 319,
124 TOK_MAX = 320,
125 TOK_MIN = 321,
126 TOK_MINUS_INFINITY = 322,
127 TOK_NULL = 323,
128 TOK_NumericString = 324,
129 TOK_OBJECT = 325,
130 TOK_ObjectDescriptor = 326,
131 TOK_OCTET = 327,
132 TOK_OF = 328,
133 TOK_OPTIONAL = 329,
134 TOK_PATTERN = 330,
135 TOK_PDV = 331,
136 TOK_PLUS_INFINITY = 332,
137 TOK_PRESENT = 333,
138 TOK_PrintableString = 334,
139 TOK_PRIVATE = 335,
140 TOK_REAL = 336,
141 TOK_RELATIVE_OID = 337,
142 TOK_SEQUENCE = 338,
143 TOK_SET = 339,
144 TOK_SIZE = 340,
145 TOK_STRING = 341,
146 TOK_SYNTAX = 342,
147 TOK_T61String = 343,
148 TOK_TAGS = 344,
149 TOK_TeletexString = 345,
150 TOK_TRUE = 346,
151 TOK_TYPE_IDENTIFIER = 347,
152 TOK_UNIQUE = 348,
153 TOK_UNIVERSAL = 349,
154 TOK_UniversalString = 350,
155 TOK_UTCTime = 351,
156 TOK_UTF8String = 352,
157 TOK_VideotexString = 353,
158 TOK_VisibleString = 354,
159 TOK_WITH = 355,
160 TOK_EXCEPT = 356,
161 TOK_INTERSECTION = 357,
162 TOK_UNION = 358,
163 TOK_TwoDots = 359,
164 TOK_ThreeDots = 360
Lev Walkin418298d2006-07-13 08:24:20 +0000165 };
166#endif
167#define TOK_PPEQ 258
168#define TOK_whitespace 259
169#define TOK_opaque 260
170#define TOK_bstring 261
171#define TOK_cstring 262
172#define TOK_hstring 263
173#define TOK_identifier 264
174#define TOK_number 265
Lev Walkinadf863f2006-09-05 16:18:34 +0000175#define TOK_number_negative 266
176#define TOK_realnumber 267
177#define TOK_tuple 268
178#define TOK_quadruple 269
179#define TOK_typereference 270
180#define TOK_capitalreference 271
181#define TOK_typefieldreference 272
182#define TOK_valuefieldreference 273
183#define TOK_Literal 274
184#define TOK_ABSENT 275
185#define TOK_ABSTRACT_SYNTAX 276
186#define TOK_ALL 277
187#define TOK_ANY 278
188#define TOK_APPLICATION 279
189#define TOK_AUTOMATIC 280
190#define TOK_BEGIN 281
191#define TOK_BIT 282
192#define TOK_BMPString 283
193#define TOK_BOOLEAN 284
194#define TOK_BY 285
195#define TOK_CHARACTER 286
196#define TOK_CHOICE 287
197#define TOK_CLASS 288
198#define TOK_COMPONENT 289
199#define TOK_COMPONENTS 290
200#define TOK_CONSTRAINED 291
201#define TOK_CONTAINING 292
202#define TOK_DEFAULT 293
203#define TOK_DEFINITIONS 294
204#define TOK_DEFINED 295
205#define TOK_EMBEDDED 296
206#define TOK_ENCODED 297
207#define TOK_ENCODING_CONTROL 298
208#define TOK_END 299
209#define TOK_ENUMERATED 300
210#define TOK_EXPLICIT 301
211#define TOK_EXPORTS 302
212#define TOK_EXTENSIBILITY 303
213#define TOK_EXTERNAL 304
214#define TOK_FALSE 305
215#define TOK_FROM 306
216#define TOK_GeneralizedTime 307
217#define TOK_GeneralString 308
218#define TOK_GraphicString 309
219#define TOK_IA5String 310
220#define TOK_IDENTIFIER 311
221#define TOK_IMPLICIT 312
222#define TOK_IMPLIED 313
223#define TOK_IMPORTS 314
224#define TOK_INCLUDES 315
225#define TOK_INSTANCE 316
226#define TOK_INSTRUCTIONS 317
227#define TOK_INTEGER 318
228#define TOK_ISO646String 319
229#define TOK_MAX 320
230#define TOK_MIN 321
231#define TOK_MINUS_INFINITY 322
232#define TOK_NULL 323
233#define TOK_NumericString 324
234#define TOK_OBJECT 325
235#define TOK_ObjectDescriptor 326
236#define TOK_OCTET 327
237#define TOK_OF 328
238#define TOK_OPTIONAL 329
239#define TOK_PATTERN 330
240#define TOK_PDV 331
241#define TOK_PLUS_INFINITY 332
242#define TOK_PRESENT 333
243#define TOK_PrintableString 334
244#define TOK_PRIVATE 335
245#define TOK_REAL 336
246#define TOK_RELATIVE_OID 337
247#define TOK_SEQUENCE 338
248#define TOK_SET 339
249#define TOK_SIZE 340
250#define TOK_STRING 341
251#define TOK_SYNTAX 342
252#define TOK_T61String 343
253#define TOK_TAGS 344
254#define TOK_TeletexString 345
255#define TOK_TRUE 346
256#define TOK_TYPE_IDENTIFIER 347
257#define TOK_UNIQUE 348
258#define TOK_UNIVERSAL 349
259#define TOK_UniversalString 350
260#define TOK_UTCTime 351
261#define TOK_UTF8String 352
262#define TOK_VideotexString 353
263#define TOK_VisibleString 354
264#define TOK_WITH 355
265#define TOK_EXCEPT 356
266#define TOK_INTERSECTION 357
267#define TOK_UNION 358
268#define TOK_TwoDots 359
269#define TOK_ThreeDots 360
Lev Walkin418298d2006-07-13 08:24:20 +0000270
271
272
273
274/* Copy the first part of user declarations. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000275#line 1 "asn1p_y.y"
276
277
278#include <stdlib.h>
279#include <stdio.h>
280#include <string.h>
281#include <errno.h>
282#include <assert.h>
283
284#include "asn1parser.h"
285
286#define YYPARSE_PARAM param
Lev Walkin4a4bdf72005-06-07 21:43:32 +0000287#define YYPARSE_PARAM_TYPE void **
Lev Walkinf15320b2004-06-03 03:38:44 +0000288#define YYERROR_VERBOSE
289
290int yylex(void);
291int yyerror(const char *msg);
Lev Walkin4a4bdf72005-06-07 21:43:32 +0000292#ifdef YYBYACC
293int yyparse(void **param); /* byacc does not produce a prototype */
294#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000295void asn1p_lexer_hack_push_opaque_state(void);
296void asn1p_lexer_hack_enable_with_syntax(void);
Lev Walkinf59d0752004-08-18 04:59:12 +0000297void asn1p_lexer_hack_push_encoding_control(void);
Lev Walkinf15320b2004-06-03 03:38:44 +0000298#define yylineno asn1p_lineno
299extern int asn1p_lineno;
300
Lev Walkinb36317c2005-08-12 10:09:10 +0000301/*
Lev Walkinef625402005-09-05 05:17:57 +0000302 * Process directives as <ASN1C:RepresentAsPointer>
Lev Walkin4696c742005-08-22 12:23:54 +0000303 */
304extern int asn1p_as_pointer;
Lev Walkin4696c742005-08-22 12:23:54 +0000305
306/*
Lev Walkinb36317c2005-08-12 10:09:10 +0000307 * This temporary variable is used to solve the shortcomings of 1-lookahead
308 * parser.
309 */
310static struct AssignedIdentifier *saved_aid;
Lev Walkinf15320b2004-06-03 03:38:44 +0000311
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000312static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
313static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
Lev Walkinf15320b2004-06-03 03:38:44 +0000314
Lev Walkina9532f42006-09-17 04:52:50 +0000315static asn1p_module_t *currentModule;
316#define NEW_EXPR() (asn1p_expr_new(yylineno, currentModule))
317
Lev Walkinb36317c2005-08-12 10:09:10 +0000318#define checkmem(ptr) do { \
319 if(!(ptr)) \
320 return yyerror("Memory failure"); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000321 } while(0)
322
Lev Walkinb36317c2005-08-12 10:09:10 +0000323#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
324 if(arg1->type != constr_type) { \
325 int __ret; \
326 root = asn1p_constraint_new(yylineno); \
327 checkmem(root); \
328 root->type = constr_type; \
329 __ret = asn1p_constraint_insert(root, \
330 arg1); \
331 checkmem(__ret == 0); \
332 } else { \
333 root = arg1; \
334 } \
335 if(arg2) { \
336 int __ret \
337 = asn1p_constraint_insert(root, arg2); \
338 checkmem(__ret == 0); \
339 } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000340 } while(0)
341
Lev Walkin866bd7f2006-09-14 10:35:20 +0000342#ifdef AL_IMPORT
343#error AL_IMPORT DEFINED ELSEWHERE!
344#endif
345#define AL_IMPORT(to,where,from,field) do { \
346 if(!(from)) break; \
347 while(TQ_FIRST(&((from)->where))) { \
348 TQ_ADD(&((to)->where), \
349 TQ_REMOVE(&((from)->where), field), \
350 field); \
351 } \
352 assert(TQ_FIRST(&((from)->where)) == 0); \
353 } while(0)
354
Lev Walkinf15320b2004-06-03 03:38:44 +0000355
Lev Walkin418298d2006-07-13 08:24:20 +0000356
357/* Enabling traces. */
358#ifndef YYDEBUG
359# define YYDEBUG 0
360#endif
361
362/* Enabling verbose error messages. */
363#ifdef YYERROR_VERBOSE
364# undef YYERROR_VERBOSE
365# define YYERROR_VERBOSE 1
366#else
367# define YYERROR_VERBOSE 0
368#endif
369
370#ifndef YYSTYPE
Lev Walkina9532f42006-09-17 04:52:50 +0000371#line 88 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +0000372typedef union {
Lev Walkinf15320b2004-06-03 03:38:44 +0000373 asn1p_t *a_grammar;
374 asn1p_module_flags_e a_module_flags;
375 asn1p_module_t *a_module;
376 asn1p_expr_type_e a_type; /* ASN.1 Type */
377 asn1p_expr_t *a_expr; /* Constructed collection */
378 asn1p_constraint_t *a_constr; /* Constraint */
379 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
380 asn1p_xports_t *a_xports; /* IMports/EXports */
Lev Walkinb36317c2005-08-12 10:09:10 +0000381 struct AssignedIdentifier a_aid; /* Assigned Identifier */
Lev Walkinf15320b2004-06-03 03:38:44 +0000382 asn1p_oid_t *a_oid; /* Object Identifier */
383 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
384 struct asn1p_type_tag_s a_tag; /* A tag */
385 asn1p_ref_t *a_ref; /* Reference to custom type */
386 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
387 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
388 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
389 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
390 struct asn1p_param_s a_parg; /* A parameter argument */
391 asn1p_paramlist_t *a_plist; /* A pargs list */
Lev Walkin9c974182004-09-15 11:59:51 +0000392 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
Lev Walkinf15320b2004-06-03 03:38:44 +0000393 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
Lev Walkind21c5052004-09-29 13:18:09 +0000394 asn1c_integer_t a_int;
Lev Walkinadf863f2006-09-05 16:18:34 +0000395 double a_dbl;
Lev Walkinf15320b2004-06-03 03:38:44 +0000396 char *tv_str;
397 struct {
398 char *buf;
399 int len;
400 } tv_opaque;
401 struct {
402 char *name;
403 struct asn1p_type_tag_s tag;
404 } tv_nametag;
Lev Walkin418298d2006-07-13 08:24:20 +0000405} yystype;
406/* Line 193 of /usr/local/share/bison/yacc.c. */
Lev Walkina9532f42006-09-17 04:52:50 +0000407#line 408 "asn1p_y.c"
Lev Walkin418298d2006-07-13 08:24:20 +0000408# define YYSTYPE yystype
409# define YYSTYPE_IS_TRIVIAL 1
Lev Walkinf15320b2004-06-03 03:38:44 +0000410#endif
411
Lev Walkin418298d2006-07-13 08:24:20 +0000412#ifndef YYLTYPE
413typedef struct yyltype
414{
415 int first_line;
416 int first_column;
417 int last_line;
418 int last_column;
419} yyltype;
420# define YYLTYPE yyltype
421# define YYLTYPE_IS_TRIVIAL 1
422#endif
423
424/* Copy the second part of user declarations. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000425
426
Lev Walkin418298d2006-07-13 08:24:20 +0000427/* Line 213 of /usr/local/share/bison/yacc.c. */
Lev Walkina9532f42006-09-17 04:52:50 +0000428#line 429 "asn1p_y.c"
Lev Walkinf15320b2004-06-03 03:38:44 +0000429
Lev Walkin418298d2006-07-13 08:24:20 +0000430#if ! defined (yyoverflow) || YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +0000431
Lev Walkin418298d2006-07-13 08:24:20 +0000432/* The parser invokes alloca or malloc; define the necessary symbols. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000433
Lev Walkin418298d2006-07-13 08:24:20 +0000434# if YYSTACK_USE_ALLOCA
435# define YYSTACK_ALLOC alloca
436# else
437# ifndef YYSTACK_USE_ALLOCA
438# if defined (alloca) || defined (_ALLOCA_H)
439# define YYSTACK_ALLOC alloca
440# else
441# ifdef __GNUC__
442# define YYSTACK_ALLOC __builtin_alloca
443# endif
444# endif
445# endif
446# endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000447
Lev Walkin418298d2006-07-13 08:24:20 +0000448# ifdef YYSTACK_ALLOC
449 /* Pacify GCC's `empty if-body' warning. */
450# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
451# else
452# if defined (__STDC__) || defined (__cplusplus)
453# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
454# define YYSIZE_T size_t
455# endif
456# define YYSTACK_ALLOC malloc
457# define YYSTACK_FREE free
458# endif
459#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
460
461
462#if (! defined (yyoverflow) \
463 && (! defined (__cplusplus) \
464 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
465
466/* A type that is properly aligned for any stack member. */
467union yyalloc
468{
469 short yyss;
470 YYSTYPE yyvs;
471 };
472
473/* The size of the maximum gap between one aligned stack and the next. */
474# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
475
476/* The size of an array large to enough to hold all stacks, each with
477 N elements. */
478# define YYSTACK_BYTES(N) \
479 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
480 + YYSTACK_GAP_MAX)
481
482/* Copy COUNT objects from FROM to TO. The source and destination do
483 not overlap. */
484# ifndef YYCOPY
485# if 1 < __GNUC__
486# define YYCOPY(To, From, Count) \
487 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
488# else
489# define YYCOPY(To, From, Count) \
490 do \
491 { \
492 register YYSIZE_T yyi; \
493 for (yyi = 0; yyi < (Count); yyi++) \
494 (To)[yyi] = (From)[yyi]; \
495 } \
496 while (0)
497# endif
498# endif
499
500/* Relocate STACK from its old location to the new one. The
501 local variables YYSIZE and YYSTACKSIZE give the old and new number of
502 elements in the stack, and YYPTR gives the new location of the
503 stack. Advance YYPTR to a properly aligned location for the next
504 stack. */
505# define YYSTACK_RELOCATE(Stack) \
506 do \
507 { \
508 YYSIZE_T yynewbytes; \
509 YYCOPY (&yyptr->Stack, Stack, yysize); \
510 Stack = &yyptr->Stack; \
511 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
512 yyptr += yynewbytes / sizeof (*yyptr); \
513 } \
514 while (0)
Lev Walkinf15320b2004-06-03 03:38:44 +0000515
516#endif
517
Lev Walkin418298d2006-07-13 08:24:20 +0000518#if defined (__STDC__) || defined (__cplusplus)
519 typedef signed char yysigned_char;
Lev Walkinf15320b2004-06-03 03:38:44 +0000520#else
Lev Walkin418298d2006-07-13 08:24:20 +0000521 typedef short yysigned_char;
Lev Walkinf15320b2004-06-03 03:38:44 +0000522#endif
523
Lev Walkin418298d2006-07-13 08:24:20 +0000524/* YYFINAL -- State number of the termination state. */
525#define YYFINAL 7
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000526#define YYLAST 805
Lev Walkin418298d2006-07-13 08:24:20 +0000527
528/* YYNTOKENS -- Number of terminals. */
Lev Walkinadf863f2006-09-05 16:18:34 +0000529#define YYNTOKENS 121
Lev Walkin418298d2006-07-13 08:24:20 +0000530/* YYNNTS -- Number of nonterminals. */
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000531#define YYNNTS 122
Lev Walkin418298d2006-07-13 08:24:20 +0000532/* YYNRULES -- Number of rules. */
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000533#define YYNRULES 312
Lev Walkin418298d2006-07-13 08:24:20 +0000534/* YYNRULES -- Number of states. */
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000535#define YYNSTATES 470
Lev Walkin418298d2006-07-13 08:24:20 +0000536
537/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
538#define YYUNDEFTOK 2
Lev Walkinadf863f2006-09-05 16:18:34 +0000539#define YYMAXUTOK 360
Lev Walkin418298d2006-07-13 08:24:20 +0000540
541#define YYTRANSLATE(X) \
542 ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
543
544/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
545static const unsigned char yytranslate[] =
546{
547 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
548 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
549 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinadf863f2006-09-05 16:18:34 +0000550 2, 2, 2, 117, 2, 2, 2, 2, 2, 2,
551 110, 111, 2, 2, 113, 2, 118, 2, 2, 2,
552 2, 2, 2, 2, 2, 2, 2, 2, 114, 112,
553 119, 2, 2, 2, 120, 2, 2, 2, 2, 2,
Lev Walkin418298d2006-07-13 08:24:20 +0000554 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
555 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinadf863f2006-09-05 16:18:34 +0000556 2, 115, 2, 116, 102, 2, 2, 2, 2, 2,
Lev Walkin418298d2006-07-13 08:24:20 +0000557 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
558 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinadf863f2006-09-05 16:18:34 +0000559 2, 2, 2, 108, 104, 109, 2, 2, 2, 2,
Lev Walkin418298d2006-07-13 08:24:20 +0000560 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
561 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
562 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
563 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
564 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
565 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
566 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
567 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
568 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
569 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
570 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
571 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
572 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
573 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
574 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
575 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
576 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
577 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
578 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
579 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
580 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
581 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
Lev Walkinadf863f2006-09-05 16:18:34 +0000582 95, 96, 97, 98, 99, 100, 101, 103, 105, 106,
583 107
Lev Walkin418298d2006-07-13 08:24:20 +0000584};
585
586#if YYDEBUG
587/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
588 YYRHS. */
589static const unsigned short yyprhs[] =
590{
Lev Walkina9532f42006-09-17 04:52:50 +0000591 0, 0, 3, 5, 7, 10, 11, 21, 22, 24,
592 28, 31, 33, 36, 38, 43, 45, 46, 48, 50,
593 53, 56, 59, 62, 65, 68, 69, 71, 75, 77,
594 80, 82, 84, 86, 87, 91, 93, 94, 96, 100,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000595 103, 104, 106, 108, 111, 112, 114, 119, 121, 125,
596 127, 131, 133, 134, 136, 140, 144, 147, 149, 153,
597 155, 159, 161, 165, 170, 172, 174, 179, 183, 187,
598 194, 201, 203, 207, 209, 213, 217, 221, 225, 227,
599 231, 233, 235, 237, 239, 240, 242, 244, 248, 252,
600 255, 259, 261, 263, 267, 270, 272, 274, 280, 281,
601 283, 285, 289, 292, 297, 301, 305, 309, 313, 317,
602 318, 320, 321, 328, 330, 333, 335, 337, 339, 343,
603 345, 349, 353, 357, 358, 361, 363, 368, 373, 378,
604 385, 392, 394, 399, 403, 405, 409, 413, 417, 419,
605 423, 425, 429, 431, 433, 435, 437, 441, 445, 447,
606 452, 454, 456, 460, 461, 465, 467, 469, 471, 473,
607 475, 477, 479, 481, 485, 487, 489, 491, 493, 496,
608 498, 500, 502, 504, 507, 510, 512, 514, 517, 520,
609 522, 524, 526, 528, 530, 533, 535, 538, 540, 542,
610 544, 546, 548, 550, 552, 554, 556, 558, 560, 562,
Lev Walkinc6ab03c2006-10-21 05:54:49 +0000611 564, 566, 568, 570, 572, 574, 575, 577, 579, 581,
612 586, 590, 595, 597, 599, 603, 609, 611, 613, 617,
613 619, 623, 625, 629, 631, 635, 640, 644, 646, 648,
614 652, 656, 660, 664, 666, 668, 671, 674, 676, 678,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000615 680, 682, 684, 686, 688, 690, 692, 694, 696, 700,
616 706, 708, 712, 714, 718, 719, 721, 723, 725, 727,
617 729, 731, 733, 734, 740, 743, 745, 748, 751, 755,
618 757, 759, 763, 768, 770, 774, 777, 781, 783, 787,
619 788, 790, 792, 795, 798, 802, 804, 808, 810, 815,
620 820, 822, 824, 826, 828, 830, 832, 833, 835, 838,
621 843, 844, 846, 848, 850, 851, 853, 855, 857, 859,
622 861, 862, 864
Lev Walkin418298d2006-07-13 08:24:20 +0000623};
624
625/* YYRHS -- A `-1'-separated list of the rules' RHS. */
626static const short yyrhs[] =
627{
Lev Walkinadf863f2006-09-05 16:18:34 +0000628 122, 0, -1, 123, -1, 124, -1, 123, 124, -1,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000629 -1, 239, 125, 126, 39, 130, 3, 26, 133, 44,
Lev Walkina9532f42006-09-17 04:52:50 +0000630 -1, -1, 127, -1, 108, 128, 109, -1, 108, 109,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000631 -1, 129, -1, 128, 129, -1, 242, -1, 242, 110,
Lev Walkina9532f42006-09-17 04:52:50 +0000632 10, 111, -1, 10, -1, -1, 131, -1, 132, -1,
633 131, 132, -1, 46, 89, -1, 57, 89, -1, 25,
634 89, -1, 48, 58, -1, 16, 62, -1, -1, 134,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000635 -1, 146, 138, 135, -1, 136, -1, 135, 136, -1,
636 153, -1, 183, -1, 151, -1, -1, 43, 16, 137,
637 -1, 193, -1, -1, 139, -1, 59, 140, 112, -1,
638 59, 51, -1, -1, 141, -1, 143, -1, 141, 143,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000639 -1, -1, 127, -1, 144, 51, 239, 142, -1, 145,
640 -1, 144, 113, 145, -1, 239, -1, 239, 108, 109,
641 -1, 242, -1, -1, 147, -1, 47, 148, 112, -1,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000642 47, 22, 112, -1, 47, 112, -1, 149, -1, 148,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000643 113, 149, -1, 239, -1, 239, 108, 109, -1, 242,
644 -1, 108, 200, 109, -1, 239, 152, 3, 150, -1,
645 192, -1, 177, -1, 177, 108, 156, 109, -1, 239,
646 3, 173, -1, 239, 3, 163, -1, 239, 108, 154,
647 109, 3, 173, -1, 239, 108, 154, 109, 3, 163,
648 -1, 155, -1, 154, 113, 155, -1, 239, -1, 239,
649 114, 242, -1, 239, 114, 239, -1, 190, 114, 242,
650 -1, 190, 114, 239, -1, 157, -1, 156, 113, 157,
651 -1, 173, -1, 186, -1, 242, -1, 150, -1, -1,
652 159, -1, 160, -1, 159, 113, 160, -1, 242, 173,
653 227, -1, 173, 227, -1, 35, 73, 173, -1, 172,
654 -1, 162, -1, 161, 113, 162, -1, 242, 173, -1,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000655 172, -1, 173, -1, 33, 108, 165, 109, 167, -1,
656 -1, 93, -1, 166, -1, 165, 113, 166, -1, 17,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000657 227, -1, 18, 173, 164, 227, -1, 18, 181, 227,
658 -1, 18, 182, 227, -1, 17, 181, 227, -1, 17,
659 173, 227, -1, 17, 182, 227, -1, -1, 168, -1,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000660 -1, 100, 87, 108, 169, 170, 109, -1, 171, -1,
661 170, 171, -1, 4, -1, 19, -1, 180, -1, 115,
662 170, 116, -1, 107, -1, 107, 117, 187, -1, 107,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000663 117, 232, -1, 234, 175, 196, -1, -1, 174, 176,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000664 -1, 152, -1, 32, 108, 161, 109, -1, 83, 108,
665 158, 109, -1, 84, 108, 158, 109, -1, 83, 196,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000666 73, 241, 234, 175, -1, 84, 196, 73, 241, 234,
667 175, -1, 23, -1, 23, 40, 30, 242, -1, 61,
668 73, 177, -1, 15, -1, 15, 118, 239, -1, 240,
669 118, 239, -1, 15, 118, 242, -1, 240, -1, 240,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000670 118, 178, -1, 179, -1, 178, 118, 179, -1, 180,
671 -1, 17, -1, 18, -1, 17, -1, 181, 118, 17,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000672 -1, 181, 118, 18, -1, 16, -1, 242, 173, 3,
673 184, -1, 186, -1, 187, -1, 242, 114, 184, -1,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000674 -1, 108, 185, 189, -1, 68, -1, 50, -1, 91,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000675 -1, 6, -1, 8, -1, 188, -1, 232, -1, 242,
676 -1, 239, 118, 242, -1, 7, -1, 13, -1, 14,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000677 -1, 5, -1, 189, 5, -1, 29, -1, 68, -1,
678 81, -1, 191, -1, 72, 86, -1, 70, 56, -1,
679 82, -1, 49, -1, 41, 76, -1, 31, 86, -1,
680 96, -1, 52, -1, 193, -1, 63, -1, 45, -1,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000681 27, 86, -1, 190, -1, 191, 229, -1, 28, -1,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000682 53, -1, 54, -1, 55, -1, 64, -1, 69, -1,
683 79, -1, 88, -1, 90, -1, 95, -1, 97, -1,
684 98, -1, 99, -1, 71, -1, 104, -1, 105, -1,
Lev Walkinc6ab03c2006-10-21 05:54:49 +0000685 102, -1, 103, -1, -1, 197, -1, 198, -1, 199,
686 -1, 85, 110, 200, 111, -1, 110, 200, 111, -1,
687 199, 110, 200, 111, -1, 107, -1, 201, -1, 201,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000688 113, 107, -1, 201, 113, 107, 113, 201, -1, 216,
Lev Walkinc6ab03c2006-10-21 05:54:49 +0000689 -1, 202, -1, 22, 101, 205, -1, 203, -1, 202,
690 194, 203, -1, 204, -1, 203, 195, 204, -1, 205,
691 -1, 205, 101, 205, -1, 207, 110, 200, 111, -1,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000692 110, 200, 111, -1, 208, -1, 210, -1, 208, 220,
693 208, -1, 66, 220, 208, -1, 208, 220, 65, -1,
694 66, 220, 65, -1, 211, -1, 206, -1, 75, 7,
695 -1, 75, 242, -1, 85, -1, 51, -1, 50, -1,
696 91, -1, 233, -1, 188, -1, 209, -1, 242, -1,
697 6, -1, 8, -1, 239, -1, 100, 34, 199, -1,
698 100, 35, 108, 212, 109, -1, 213, -1, 212, 113,
699 213, -1, 107, -1, 242, 196, 214, -1, -1, 215,
700 -1, 78, -1, 20, -1, 74, -1, 217, -1, 221,
701 -1, 219, -1, -1, 36, 30, 108, 218, 189, -1,
702 37, 173, -1, 106, -1, 106, 119, -1, 119, 106,
703 -1, 119, 106, 119, -1, 222, -1, 223, -1, 108,
704 239, 109, -1, 222, 108, 224, 109, -1, 225, -1,
705 224, 113, 225, -1, 120, 226, -1, 120, 118, 226,
706 -1, 242, -1, 226, 118, 242, -1, -1, 228, -1,
707 74, -1, 38, 184, -1, 108, 109, -1, 108, 230,
708 109, -1, 231, -1, 230, 113, 231, -1, 242, -1,
709 242, 110, 232, 111, -1, 242, 110, 187, 111, -1,
710 232, -1, 107, -1, 10, -1, 11, -1, 232, -1,
711 12, -1, -1, 235, -1, 236, 238, -1, 115, 237,
712 10, 116, -1, -1, 94, -1, 24, -1, 80, -1,
713 -1, 57, -1, 46, -1, 15, -1, 16, -1, 16,
714 -1, -1, 242, -1, 9, -1
Lev Walkin418298d2006-07-13 08:24:20 +0000715};
716
717/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
718static const unsigned short yyrline[] =
719{
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000720 0, 355, 355, 361, 367, 384, 383, 412, 414, 417,
721 421, 426, 433, 441, 446, 450, 459, 461, 469, 473,
722 481, 485, 488, 491, 495, 515, 517, 525, 534, 538,
723 553, 561, 574, 582, 581, 595, 607, 609, 611, 622,
724 627, 629, 631, 637, 643, 645, 648, 659, 665, 671,
725 678, 684, 693, 695, 706, 710, 713, 720, 726, 732,
726 739, 745, 754, 756, 766, 780, 790, 806, 816, 832,
727 838, 845, 855, 865, 870, 877, 884, 892, 902, 908,
728 914, 918, 926, 937, 959, 961, 963, 969, 975, 983,
729 989, 996, 1001, 1007, 1013, 1019, 1022, 1028, 1038, 1040,
730 1043, 1051, 1058, 1071, 1082, 1092, 1103, 1113, 1124, 1135,
731 1137, 1144, 1142, 1151, 1156, 1162, 1167, 1170, 1174, 1179,
732 1188, 1197, 1208, 1230, 1237, 1256, 1260, 1266, 1272, 1278,
733 1288, 1298, 1304, 1315, 1329, 1338, 1348, 1358, 1368, 1376,
734 1397, 1406, 1415, 1417, 1424, 1431, 1437, 1441, 1447, 1467,
735 1477, 1479, 1480, 1487, 1487, 1492, 1499, 1505, 1510, 1514,
736 1518, 1521, 1526, 1538, 1555, 1560, 1565, 1572, 1582, 1596,
737 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607,
738 1608, 1609, 1615, 1617, 1618, 1621, 1628, 1640, 1642, 1646,
739 1650, 1651, 1652, 1653, 1654, 1658, 1659, 1660, 1661, 1665,
740 1666, 1673, 1673, 1674, 1674, 1676, 1678, 1683, 1687, 1691,
741 1700, 1704, 1709, 1714, 1717, 1723, 1731, 1736, 1738, 1743,
742 1745, 1750, 1752, 1758, 1760, 1765, 1774, 1782, 1788, 1794,
743 1801, 1809, 1817, 1826, 1829, 1834, 1840, 1850, 1854, 1859,
744 1865, 1870, 1871, 1872, 1873, 1886, 1891, 1897, 1911, 1915,
745 1920, 1924, 1929, 1936, 1949, 1951, 1954, 1958, 1961, 1968,
746 1970, 1971, 1976, 1974, 1986, 1994, 1996, 1997, 1998, 2000,
747 2004, 2012, 2027, 2033, 2040, 2053, 2065, 2080, 2084, 2101,
748 2106, 2109, 2114, 2136, 2141, 2146, 2152, 2158, 2166, 2174,
749 2182, 2189, 2199, 2204, 2210, 2212, 2242, 2244, 2247, 2254,
750 2260, 2262, 2263, 2264, 2267, 2269, 2270, 2273, 2278, 2285,
751 2292, 2294, 2299
Lev Walkin418298d2006-07-13 08:24:20 +0000752};
753#endif
754
755#if YYDEBUG || YYERROR_VERBOSE
756/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
757 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
758static const char *const yytname[] =
759{
760 "$end", "error", "$undefined", "TOK_PPEQ", "TOK_whitespace", "TOK_opaque",
761 "TOK_bstring", "TOK_cstring", "TOK_hstring", "TOK_identifier",
Lev Walkinadf863f2006-09-05 16:18:34 +0000762 "TOK_number", "TOK_number_negative", "TOK_realnumber", "TOK_tuple",
763 "TOK_quadruple", "TOK_typereference", "TOK_capitalreference",
764 "TOK_typefieldreference", "TOK_valuefieldreference", "TOK_Literal",
765 "TOK_ABSENT", "TOK_ABSTRACT_SYNTAX", "TOK_ALL", "TOK_ANY",
766 "TOK_APPLICATION", "TOK_AUTOMATIC", "TOK_BEGIN", "TOK_BIT",
767 "TOK_BMPString", "TOK_BOOLEAN", "TOK_BY", "TOK_CHARACTER", "TOK_CHOICE",
768 "TOK_CLASS", "TOK_COMPONENT", "TOK_COMPONENTS", "TOK_CONSTRAINED",
769 "TOK_CONTAINING", "TOK_DEFAULT", "TOK_DEFINITIONS", "TOK_DEFINED",
770 "TOK_EMBEDDED", "TOK_ENCODED", "TOK_ENCODING_CONTROL", "TOK_END",
771 "TOK_ENUMERATED", "TOK_EXPLICIT", "TOK_EXPORTS", "TOK_EXTENSIBILITY",
772 "TOK_EXTERNAL", "TOK_FALSE", "TOK_FROM", "TOK_GeneralizedTime",
773 "TOK_GeneralString", "TOK_GraphicString", "TOK_IA5String",
774 "TOK_IDENTIFIER", "TOK_IMPLICIT", "TOK_IMPLIED", "TOK_IMPORTS",
775 "TOK_INCLUDES", "TOK_INSTANCE", "TOK_INSTRUCTIONS", "TOK_INTEGER",
776 "TOK_ISO646String", "TOK_MAX", "TOK_MIN", "TOK_MINUS_INFINITY",
777 "TOK_NULL", "TOK_NumericString", "TOK_OBJECT", "TOK_ObjectDescriptor",
778 "TOK_OCTET", "TOK_OF", "TOK_OPTIONAL", "TOK_PATTERN", "TOK_PDV",
779 "TOK_PLUS_INFINITY", "TOK_PRESENT", "TOK_PrintableString",
780 "TOK_PRIVATE", "TOK_REAL", "TOK_RELATIVE_OID", "TOK_SEQUENCE",
781 "TOK_SET", "TOK_SIZE", "TOK_STRING", "TOK_SYNTAX", "TOK_T61String",
782 "TOK_TAGS", "TOK_TeletexString", "TOK_TRUE", "TOK_TYPE_IDENTIFIER",
783 "TOK_UNIQUE", "TOK_UNIVERSAL", "TOK_UniversalString", "TOK_UTCTime",
784 "TOK_UTF8String", "TOK_VideotexString", "TOK_VisibleString", "TOK_WITH",
785 "TOK_EXCEPT", "'^'", "TOK_INTERSECTION", "'|'", "TOK_UNION",
786 "TOK_TwoDots", "TOK_ThreeDots", "'{'", "'}'", "'('", "')'", "';'",
787 "','", "':'", "'['", "']'", "'!'", "'.'", "'<'", "'@'", "$accept",
Lev Walkina9532f42006-09-17 04:52:50 +0000788 "ParsedGrammar", "ModuleList", "ModuleDefinition", "@1",
Lev Walkinadf863f2006-09-05 16:18:34 +0000789 "optObjectIdentifier", "ObjectIdentifier", "ObjectIdentifierBody",
Lev Walkin866bd7f2006-09-14 10:35:20 +0000790 "ObjectIdentifierElement", "optModuleDefinitionFlags",
791 "ModuleDefinitionFlags", "ModuleDefinitionFlag", "optModuleBody",
Lev Walkina9532f42006-09-17 04:52:50 +0000792 "ModuleBody", "AssignmentList", "Assignment", "@2", "optImports",
Lev Walkin4a4543f2006-10-13 12:37:39 +0000793 "ImportsDefinition", "optImportsBundleSet", "ImportsBundleSet",
794 "AssignedIdentifier", "ImportsBundle", "ImportsList", "ImportsElement",
795 "optExports", "ExportsDefinition", "ExportsBody", "ExportsElement",
796 "ValueSet", "ValueSetTypeAssignment", "DefinedType",
797 "DataTypeReference", "ParameterArgumentList", "ParameterArgumentName",
798 "ActualParameterList", "ActualParameter", "optComponentTypeLists",
799 "ComponentTypeLists", "ComponentType", "AlternativeTypeLists",
800 "AlternativeType", "ObjectClass", "optUnique", "FieldSpec",
801 "ClassField", "optWithSyntax", "WithSyntax", "@3", "WithSyntaxList",
802 "WithSyntaxToken", "ExtensionAndException", "Type",
803 "NSTD_IndirectMarker", "TypeDeclaration", "TypeDeclarationSet",
804 "ComplexTypeReference", "ComplexTypeReferenceAmpList",
805 "ComplexTypeReferenceElement", "PrimitiveFieldReference", "FieldName",
Lev Walkinc6ab03c2006-10-21 05:54:49 +0000806 "DefinedObjectClass", "ValueAssignment", "Value", "@4", "SimpleValue",
Lev Walkin4a4543f2006-10-13 12:37:39 +0000807 "DefinedValue", "RestrictedCharacterStringValue", "Opaque",
808 "BasicTypeId", "BasicTypeId_UniverationCompatible", "BasicType",
809 "BasicString", "UnionMark", "IntersectionMark", "optConstraints",
810 "Constraint", "SubtypeConstraint", "SetOfConstraints",
811 "ElementSetSpecs", "ElementSetSpec", "Unions", "Intersections",
Lev Walkin5c541f12006-10-18 18:40:14 +0000812 "IntersectionElements", "ConstraintSubtypeElement", "PatternConstraint",
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000813 "ConstraintSpec", "SingleValue", "BitStringValue", "ContainedSubtype",
Lev Walkin5c541f12006-10-18 18:40:14 +0000814 "InnerTypeConstraint", "WithComponentsList", "WithComponentsElement",
815 "optPresenceConstraint", "PresenceConstraint", "GeneralConstraint",
816 "UserDefinedConstraint", "@5", "ContentsConstraint",
817 "ConstraintRangeSpec", "TableConstraint", "SimpleTableConstraint",
818 "ComponentRelationConstraint", "AtNotationList", "AtNotationElement",
819 "ComponentIdList", "optMarker", "Marker", "UniverationDefinition",
820 "UniverationList", "UniverationElement", "SignedNumber", "RealValue",
821 "optTag", "Tag", "TagTypeValue", "TagClass", "TagPlicit", "TypeRefName",
Lev Walkinadf863f2006-09-05 16:18:34 +0000822 "ObjectClassReference", "optIdentifier", "Identifier", 0
Lev Walkin418298d2006-07-13 08:24:20 +0000823};
824#endif
825
826# ifdef YYPRINT
827/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
828 token YYLEX-NUM. */
829static const unsigned short yytoknum[] =
830{
831 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
832 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
833 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
834 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
835 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
836 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
837 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
838 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
839 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
840 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
Lev Walkinadf863f2006-09-05 16:18:34 +0000841 355, 356, 94, 357, 124, 358, 359, 360, 123, 125,
842 40, 41, 59, 44, 58, 91, 93, 33, 46, 60,
843 64
Lev Walkin418298d2006-07-13 08:24:20 +0000844};
845# endif
846
847/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
848static const unsigned char yyr1[] =
849{
Lev Walkina9532f42006-09-17 04:52:50 +0000850 0, 121, 122, 123, 123, 125, 124, 126, 126, 127,
851 127, 128, 128, 129, 129, 129, 130, 130, 131, 131,
852 132, 132, 132, 132, 132, 133, 133, 134, 135, 135,
853 136, 136, 136, 137, 136, 136, 138, 138, 139, 139,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000854 140, 140, 141, 141, 142, 142, 143, 144, 144, 145,
855 145, 145, 146, 146, 147, 147, 147, 148, 148, 149,
856 149, 149, 150, 151, 152, 152, 152, 153, 153, 153,
857 153, 154, 154, 155, 155, 155, 155, 155, 156, 156,
858 157, 157, 157, 157, 158, 158, 159, 159, 160, 160,
859 160, 160, 161, 161, 162, 162, 162, 163, 164, 164,
860 165, 165, 166, 166, 166, 166, 166, 166, 166, 167,
861 167, 169, 168, 170, 170, 171, 171, 171, 171, 172,
862 172, 172, 173, 174, 175, 176, 176, 176, 176, 176,
863 176, 176, 176, 176, 177, 177, 177, 177, 177, 177,
864 178, 178, 179, 180, 180, 181, 181, 181, 182, 183,
865 184, 184, 184, 185, 184, 184, 186, 186, 186, 186,
866 186, 186, 187, 187, 188, 188, 188, 189, 189, 190,
867 190, 190, 190, 190, 190, 190, 190, 190, 190, 190,
868 190, 190, 191, 191, 191, 192, 192, 193, 193, 193,
869 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
Lev Walkinc6ab03c2006-10-21 05:54:49 +0000870 193, 194, 194, 195, 195, 196, 196, 197, 198, 198,
871 199, 199, 200, 200, 200, 200, 200, 201, 201, 202,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000872 202, 203, 203, 204, 204, 205, 205, 205, 205, 205,
Lev Walkin5c541f12006-10-18 18:40:14 +0000873 205, 205, 205, 205, 205, 206, 206, 207, 207, 208,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000874 208, 208, 208, 208, 208, 209, 209, 210, 211, 211,
875 212, 212, 213, 213, 214, 214, 215, 215, 215, 216,
876 216, 216, 218, 217, 219, 220, 220, 220, 220, 221,
877 221, 222, 223, 224, 224, 225, 225, 226, 226, 227,
878 227, 228, 228, 229, 229, 230, 230, 231, 231, 231,
879 231, 231, 232, 232, 233, 233, 234, 234, 235, 236,
880 237, 237, 237, 237, 238, 238, 238, 239, 239, 240,
881 241, 241, 242
Lev Walkin418298d2006-07-13 08:24:20 +0000882};
883
884/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
885static const unsigned char yyr2[] =
886{
Lev Walkina9532f42006-09-17 04:52:50 +0000887 0, 2, 1, 1, 2, 0, 9, 0, 1, 3,
888 2, 1, 2, 1, 4, 1, 0, 1, 1, 2,
889 2, 2, 2, 2, 2, 0, 1, 3, 1, 2,
890 1, 1, 1, 0, 3, 1, 0, 1, 3, 2,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000891 0, 1, 1, 2, 0, 1, 4, 1, 3, 1,
892 3, 1, 0, 1, 3, 3, 2, 1, 3, 1,
893 3, 1, 3, 4, 1, 1, 4, 3, 3, 6,
894 6, 1, 3, 1, 3, 3, 3, 3, 1, 3,
895 1, 1, 1, 1, 0, 1, 1, 3, 3, 2,
896 3, 1, 1, 3, 2, 1, 1, 5, 0, 1,
897 1, 3, 2, 4, 3, 3, 3, 3, 3, 0,
898 1, 0, 6, 1, 2, 1, 1, 1, 3, 1,
899 3, 3, 3, 0, 2, 1, 4, 4, 4, 6,
900 6, 1, 4, 3, 1, 3, 3, 3, 1, 3,
901 1, 3, 1, 1, 1, 1, 3, 3, 1, 4,
902 1, 1, 3, 0, 3, 1, 1, 1, 1, 1,
903 1, 1, 1, 3, 1, 1, 1, 1, 2, 1,
904 1, 1, 1, 2, 2, 1, 1, 2, 2, 1,
905 1, 1, 1, 1, 2, 1, 2, 1, 1, 1,
Lev Walkin418298d2006-07-13 08:24:20 +0000906 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkinc6ab03c2006-10-21 05:54:49 +0000907 1, 1, 1, 1, 1, 0, 1, 1, 1, 4,
908 3, 4, 1, 1, 3, 5, 1, 1, 3, 1,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000909 3, 1, 3, 1, 3, 4, 3, 1, 1, 3,
Lev Walkin5c541f12006-10-18 18:40:14 +0000910 3, 3, 3, 1, 1, 2, 2, 1, 1, 1,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000911 1, 1, 1, 1, 1, 1, 1, 1, 3, 5,
912 1, 3, 1, 3, 0, 1, 1, 1, 1, 1,
913 1, 1, 0, 5, 2, 1, 2, 2, 3, 1,
914 1, 3, 4, 1, 3, 2, 3, 1, 3, 0,
915 1, 1, 2, 2, 3, 1, 3, 1, 4, 4,
916 1, 1, 1, 1, 1, 1, 0, 1, 2, 4,
917 0, 1, 1, 1, 0, 1, 1, 1, 1, 1,
918 0, 1, 1
Lev Walkin418298d2006-07-13 08:24:20 +0000919};
920
921/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
922 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
923 means the default is an error. */
924static const unsigned short yydefact[] =
925{
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000926 0, 307, 308, 0, 2, 3, 5, 1, 4, 7,
927 0, 0, 8, 312, 15, 10, 0, 11, 13, 16,
Lev Walkina9532f42006-09-17 04:52:50 +0000928 9, 12, 0, 0, 0, 0, 0, 0, 0, 17,
929 18, 0, 24, 22, 20, 23, 21, 0, 19, 14,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000930 52, 0, 0, 26, 36, 53, 0, 56, 0, 57,
931 59, 61, 6, 40, 0, 37, 55, 54, 0, 0,
932 39, 0, 41, 42, 0, 47, 49, 51, 187, 0,
933 188, 189, 190, 191, 192, 200, 193, 194, 195, 196,
934 197, 198, 199, 27, 28, 32, 30, 31, 35, 0,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000935 296, 58, 60, 38, 43, 0, 0, 0, 33, 29,
936 296, 134, 309, 0, 169, 0, 0, 183, 176, 180,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000937 182, 170, 0, 0, 171, 175, 179, 0, 0, 65,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000938 185, 172, 64, 181, 138, 300, 0, 123, 297, 304,
Lev Walkinc6ab03c2006-10-21 05:54:49 +0000939 44, 48, 50, 34, 0, 68, 67, 0, 184, 178,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000940 177, 174, 173, 0, 71, 0, 172, 73, 0, 296,
941 0, 186, 0, 302, 303, 301, 0, 0, 0, 205,
942 306, 305, 298, 45, 46, 0, 135, 137, 0, 0,
943 0, 0, 0, 63, 158, 164, 159, 292, 293, 165,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000944 166, 156, 157, 83, 0, 78, 80, 81, 160, 161,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000945 82, 291, 283, 0, 285, 290, 287, 143, 144, 139,
Lev Walkinc6ab03c2006-10-21 05:54:49 +0000946 140, 142, 136, 0, 155, 153, 149, 150, 151, 0,
947 162, 131, 0, 0, 205, 205, 125, 124, 0, 0,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000948 122, 206, 207, 208, 296, 296, 0, 100, 296, 72,
949 77, 76, 75, 74, 245, 246, 295, 0, 0, 296,
950 239, 238, 0, 0, 237, 240, 0, 212, 0, 0,
951 242, 0, 213, 217, 219, 221, 223, 234, 0, 227,
952 243, 228, 233, 216, 259, 261, 260, 269, 270, 294,
953 241, 247, 244, 66, 296, 284, 0, 0, 0, 299,
954 0, 0, 0, 0, 296, 0, 296, 0, 296, 0,
955 0, 0, 0, 148, 145, 0, 281, 279, 279, 279,
956 102, 280, 98, 279, 279, 109, 0, 70, 69, 0,
957 0, 264, 265, 0, 0, 235, 236, 0, 0, 0,
958 0, 62, 0, 201, 202, 0, 203, 204, 0, 0,
959 0, 0, 0, 79, 286, 0, 0, 162, 141, 167,
960 154, 163, 152, 0, 119, 0, 92, 95, 96, 296,
961 133, 0, 0, 85, 86, 91, 279, 296, 310, 0,
962 310, 0, 210, 0, 282, 107, 0, 106, 108, 99,
963 279, 104, 105, 0, 97, 110, 101, 218, 262, 266,
964 267, 232, 230, 248, 0, 271, 226, 214, 220, 222,
965 224, 0, 231, 229, 0, 0, 273, 289, 288, 168,
966 132, 0, 126, 296, 94, 296, 127, 296, 89, 279,
967 296, 311, 128, 296, 209, 211, 146, 147, 103, 0,
968 0, 268, 252, 0, 250, 205, 0, 225, 0, 275,
969 277, 272, 0, 120, 121, 93, 90, 87, 88, 123,
970 123, 111, 263, 249, 0, 254, 215, 276, 0, 274,
971 129, 130, 0, 251, 257, 258, 256, 253, 255, 278,
972 115, 116, 0, 0, 113, 117, 0, 112, 114, 118
Lev Walkin418298d2006-07-13 08:24:20 +0000973};
974
975/* YYDEFGOTO[NTERM-NUM]. */
976static const short yydefgoto[] =
977{
Lev Walkina9532f42006-09-17 04:52:50 +0000978 -1, 3, 4, 5, 9, 11, 12, 16, 17, 28,
Lev Walkinc6ab03c2006-10-21 05:54:49 +0000979 29, 30, 42, 43, 83, 84, 133, 54, 55, 61,
980 62, 164, 63, 64, 65, 44, 45, 48, 49, 183,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000981 85, 118, 86, 143, 144, 184, 185, 352, 353, 354,
982 345, 346, 135, 370, 226, 227, 374, 375, 452, 463,
983 464, 355, 356, 158, 159, 217, 119, 199, 200, 465,
984 298, 299, 87, 206, 280, 207, 208, 250, 340, 120,
985 121, 122, 123, 325, 328, 220, 221, 222, 223, 251,
986 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
987 262, 423, 424, 457, 458, 263, 264, 420, 265, 314,
988 266, 267, 268, 395, 396, 429, 300, 301, 151, 193,
989 194, 269, 270, 127, 128, 129, 156, 162, 271, 124,
990 410, 272
Lev Walkin418298d2006-07-13 08:24:20 +0000991};
992
993/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
994 STATE-NUM. */
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000995#define YYPACT_NINF -287
Lev Walkin418298d2006-07-13 08:24:20 +0000996static const short yypact[] =
997{
Lev Walkin1c8d5aa2006-10-27 05:37:39 +0000998 80, -287, -287, 24, 80, -287, -287, -287, -287, -57,
999 7, 17, -287, -287, -287, -287, 44, -287, -42, 240,
1000 -287, -287, 77, 42, 61, 119, 107, 129, 168, 240,
1001 -287, 114, -287, -287, -287, -287, -287, 205, -287, -287,
1002 82, 68, 190, -287, 178, -287, 140, -287, 98, -287,
1003 191, -287, -287, 198, 538, -287, -287, -287, 232, 184,
1004 -287, 202, 232, -287, 69, -287, 209, -287, -287, 304,
1005 -287, -287, -287, -287, -287, -287, -287, -287, -287, -287,
1006 -287, -287, -287, 538, -287, -287, -287, -287, -287, 274,
1007 207, -287, -287, -287, -287, 80, 232, 223, -287, -287,
1008 9, 218, -287, 255, -287, 261, 273, -287, -287, -287,
1009 -287, -287, 295, 266, -287, -287, -287, 706, 351, 249,
1010 -287, 250, -287, -287, 241, 79, 357, -287, -287, 186,
1011 -57, -287, -287, -287, 253, -287, -287, 232, -287, -287,
1012 -287, -287, -287, 145, -287, 251, -287, 252, 259, 101,
1013 16, -287, 291, -287, -287, -287, 353, 213, 630, -16,
1014 -287, -287, -287, -287, -287, 243, -287, -287, 365, 706,
1015 232, 232, 413, -287, -287, -287, -287, -287, -287, -287,
1016 -287, -287, -287, -287, 146, -287, -287, -287, -287, -287,
1017 -287, -287, -287, 166, -287, -287, 265, -287, -287, 258,
1018 -287, -287, -287, 262, -287, -287, -287, -287, -287, 263,
1019 269, 337, 271, 312, 85, 130, -287, -287, 270, 413,
1020 -287, -287, -287, 276, 81, 48, 171, -287, 9, -287,
1021 -287, -287, -287, -287, -287, -287, -287, 286, 358, 207,
1022 -287, -287, -17, 23, -287, -287, 234, -287, 80, 413,
1023 -287, 280, 277, 206, 210, -287, 293, -287, 282, -17,
1024 -287, -287, -287, -287, -287, -287, -287, 287, -287, -287,
1025 -287, -287, -287, -287, 101, -287, 71, 235, 307, -287,
1026 391, 389, 213, 369, 51, 315, 70, 327, 70, 328,
1027 413, 292, 413, -287, -287, 213, -287, -27, -19, -27,
1028 -287, -287, 309, -19, -27, 305, 243, -287, -287, 564,
1029 296, -287, 288, 302, 192, -287, -287, 299, 303, 301,
1030 306, -287, 308, -287, -287, 564, -287, -287, 564, 564,
1031 413, 446, 294, -287, -287, 319, 320, -287, -287, -287,
1032 407, -287, -287, 389, 316, 182, -287, -287, -287, 207,
1033 -287, 340, 323, 324, -287, -287, -27, 207, 389, 330,
1034 389, 325, -287, 329, -287, -287, 317, -287, -287, -287,
1035 -27, -287, -287, 354, -287, -287, -287, -287, -287, -287,
1036 297, -287, -287, 276, 76, -287, -287, 331, 210, -287,
1037 -287, 332, -287, -287, -1, 183, -287, -287, -287, -287,
1038 -287, 235, -287, 51, -287, 207, -287, 6, -287, -27,
1039 207, -287, -287, 207, -287, -287, -287, -287, -287, 334,
1040 391, -287, -287, 185, -287, -16, 459, -287, 389, 333,
1041 -287, -287, 294, -287, -287, -287, -287, -287, -287, -287,
1042 -287, -287, 407, -287, 76, 161, -287, 333, 389, -287,
1043 -287, -287, 57, -287, -287, -287, -287, -287, -287, -287,
1044 -287, -287, 57, 19, -287, -287, 53, -287, -287, -287
Lev Walkin418298d2006-07-13 08:24:20 +00001045};
1046
1047/* YYPGOTO[NTERM-NUM]. */
1048static const short yypgoto[] =
1049{
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001050 -287, -287, -287, 441, -287, -287, 318, -287, 430, -287,
1051 -287, 418, -287, -287, -287, 378, -287, -287, -287, -287,
1052 -287, -287, 400, -287, 380, -287, -287, -287, 419, 335,
1053 -287, 322, -287, -287, 313, -287, 204, 196, -287, 78,
1054 -287, 83, 264, -287, -287, 181, -287, -287, -287, 27,
1055 -277, -270, -87, -287, -100, -287, 208, -287, 212, -148,
1056 272, 275, -287, -65, -287, -142, -265, -139, 74, -51,
1057 67, -287, -5, -287, -287, -213, -287, -287, 174, -199,
1058 73, -287, 170, 173, -165, -287, -287, -286, -287, -287,
1059 -287, -287, 58, -287, -287, -287, -287, -287, -287, 244,
1060 -287, -287, -287, -287, 75, 84, -264, -287, -287, -287,
1061 229, -128, -287, -222, -287, -287, -287, -287, 5, -287,
1062 148, -10
Lev Walkin418298d2006-07-13 08:24:20 +00001063};
1064
1065/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
1066 positive, shift that token. If negative, reduce the rule which
1067 number is the opposite. If zero, do what YYDEFACT says.
1068 If YYTABLE_NINF, parse error. */
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001069#define YYTABLE_NINF -280
Lev Walkin418298d2006-07-13 08:24:20 +00001070static const short yytable[] =
1071{
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001072 18, 287, 289, 126, 201, 6, 18, 187, 13, 6,
1073 188, 295, 335, 136, 347, 13, 13, 14, 188, 295,
1074 291, 189, 195, 460, 7, 13, 177, 178, 382, 189,
1075 315, 51, 13, 365, 367, 368, 197, 198, 461, 371,
1076 372, 351, 134, 67, 90, 393, 50, 296, 51, 88,
1077 320, 10, 67, 13, 14, 296, 19, 460, 66, 89,
1078 13, 460, 186, 50, 293, 294, 145, 66, 22, 218,
1079 197, 198, 461, 90, 197, 198, 461, 13, 88, 13,
1080 13, 177, 178, 1, 2, 13, 67, 31, 89, 312,
1081 46, 361, 408, 363, 219, 1, 2, 293, 294, 366,
1082 130, 66, 313, 153, 32, 351, 418, 174, 175, 176,
1083 13, 177, 178, 344, 179, 180, 15, 428, 145, 295,
1084 95, 125, 147, 191, 125, 192, -25, 167, 467, 41,
1085 201, 391, 187, 347, 462, 188, 433, 297, 302, 190,
1086 196, 308, 166, 188, 377, 438, 189, 210, 195, 336,
1087 33, 181, 311, 20, 189, 296, 188, 202, 344, 154,
1088 231, 233, 209, 125, 390, 35, 125, 189, 462, 469,
1089 218, 37, 462, 155, 147, 230, 232, 344, 191, -84,
1090 47, 454, 96, 422, 146, 125, 468, 186, 439, 468,
1091 -279, 440, 182, 286, -279, 219, 125, 348, 234, 175,
1092 235, 13, 177, 178, 236, 179, 180, 13, 34, 172,
1093 57, 58, 445, 1, 2, 218, 125, 342, 36, 174,
1094 175, 176, 13, 177, 178, 39, 179, 180, 1, 2,
1095 364, 40, 160, 316, 52, 455, 146, 53, 288, 456,
1096 219, 13, 240, 161, 13, 177, 178, 1, 2, 60,
1097 1, 2, 56, 319, 168, 273, 23, 381, 169, 274,
1098 224, 225, 404, 181, 190, 24, 196, 337, 317, 318,
1099 409, 341, 210, 434, 349, 275, 357, 100, 357, 276,
1100 305, 204, 209, 245, 306, 210, 25, 209, 26, 101,
1101 102, 402, 431, 92, 443, 403, 432, 27, 444, 59,
1102 209, 103, 68, 104, 182, 105, 1, 2, 197, 198,
1103 323, 324, 326, 327, 93, 106, 348, 97, 436, 107,
1104 98, 205, 125, 108, 197, 198, 109, 70, 71, 72,
1105 101, 102, 132, 400, 416, 417, 137, 110, 73, 450,
1106 451, 138, 111, 74, 112, 75, 113, 139, 411, 140,
1107 411, 141, 142, 76, 148, 114, 115, 149, 150, 152,
1108 157, 165, 77, 203, 78, 170, 171, 172, 228, 79,
1109 116, 80, 81, 82, 425, 277, 278, 283, 279, 284,
1110 290, 281, 117, 282, 430, 285, 292, 309, 310, 321,
1111 322, 337, 330, 349, 329, 332, 339, 357, 13, 343,
1112 358, 360, 369, 362, 378, 373, 209, 379, 380, 219,
1113 385, 384, 399, 405, 394, 387, 421, 386, 430, 234,
1114 175, 235, 13, 177, 178, 236, 179, 180, 1, 2,
1115 397, 398, 406, 401, 425, 237, 414, 407, 459, 412,
1116 415, 419, 441, 427, 426, 8, 21, 38, 163, 238,
1117 239, 448, 234, 175, 235, 13, 177, 178, 236, 179,
1118 180, 99, 94, 240, 241, 234, 175, 235, 13, 177,
1119 178, 236, 179, 180, 1, 2, 131, 91, 333, 242,
1120 216, 237, 229, 173, 359, 437, 435, 376, 243, 466,
1121 338, 383, 307, 350, 442, 388, 240, 303, 244, 446,
1122 304, 389, 453, 331, 245, 334, 0, 449, 413, 240,
1123 241, 392, 447, 246, 0, 0, 0, 0, 0, 0,
1124 247, 248, 0, 249, 0, 242, 0, 0, 0, 0,
1125 0, 0, 0, 0, 243, 0, 0, 245, 0, 0,
1126 0, 0, 0, 0, 244, 0, 0, 13, 0, 0,
1127 245, 0, 0, 1, 2, 0, 0, 0, 0, 246,
1128 0, 0, 0, 0, 0, 0, 68, 0, 0, 249,
1129 234, 175, 235, 13, 177, 178, 236, 179, 180, 1,
1130 2, 69, 0, 0, 0, 0, 0, 0, 0, 0,
1131 0, 70, 71, 72, 0, 0, 0, 0, 0, 0,
1132 0, 0, 73, 0, 0, 0, 0, 74, 0, 75,
1133 0, 0, 0, 0, 240, 241, 0, 76, 0, 0,
1134 0, 0, 0, 0, 0, 0, 77, 0, 78, 0,
1135 242, 0, 0, 79, 0, 80, 81, 82, 0, 243,
1136 0, 0, 0, 0, 0, 101, 102, 0, 0, 244,
1137 0, 0, 0, 211, 0, 245, 0, 103, 68, 104,
1138 0, 105, 212, 0, 246, 0, 0, 0, 0, 0,
1139 0, 106, 0, 0, 249, 107, 0, 0, 0, 108,
Lev Walkin5c541f12006-10-18 18:40:14 +00001140 0, 0, 109, 70, 71, 72, 0, 0, 0, 0,
Lev Walkinc6ab03c2006-10-21 05:54:49 +00001141 0, 213, 0, 110, 73, 0, 0, 0, 111, 74,
Lev Walkin5c541f12006-10-18 18:40:14 +00001142 112, 75, 113, 0, 0, 0, 0, 0, 0, 76,
Lev Walkinc6ab03c2006-10-21 05:54:49 +00001143 0, 114, 115, 214, 215, 0, 0, 0, 77, 0,
1144 78, 1, 2, 0, 0, 79, 116, 80, 81, 82,
Lev Walkin5c541f12006-10-18 18:40:14 +00001145 0, 0, 0, 103, 68, 104, 0, 105, 0, 0,
1146 0, 0, 0, 0, 0, 0, 0, 106, 0, 0,
1147 0, 107, 0, 0, 0, 108, 0, 0, 109, 70,
1148 71, 72, 0, 0, 0, 0, 0, 0, 0, 110,
1149 73, 0, 0, 0, 111, 74, 112, 75, 113, 0,
1150 0, 0, 0, 0, 0, 76, 0, 114, 115, 0,
Lev Walkinc6ab03c2006-10-21 05:54:49 +00001151 0, 0, 0, 0, 77, 0, 78, 0, 0, 0,
1152 0, 79, 116, 80, 81, 82
Lev Walkin418298d2006-07-13 08:24:20 +00001153};
1154
1155static const short yycheck[] =
1156{
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001157 10, 214, 215, 90, 152, 0, 16, 149, 9, 4,
1158 149, 38, 277, 100, 284, 9, 9, 10, 157, 38,
1159 219, 149, 150, 4, 0, 9, 10, 11, 314, 157,
1160 7, 41, 9, 297, 298, 299, 17, 18, 19, 303,
1161 304, 35, 33, 53, 54, 331, 41, 74, 58, 54,
1162 249, 108, 62, 9, 10, 74, 39, 4, 53, 54,
1163 9, 4, 149, 58, 16, 17, 117, 62, 110, 85,
1164 17, 18, 19, 83, 17, 18, 19, 9, 83, 9,
1165 9, 10, 11, 15, 16, 9, 96, 10, 83, 106,
1166 22, 290, 356, 292, 110, 15, 16, 16, 17, 118,
1167 95, 96, 119, 24, 62, 35, 370, 6, 7, 8,
1168 9, 10, 11, 107, 13, 14, 109, 118, 169, 38,
1169 51, 115, 117, 107, 115, 109, 44, 137, 109, 47,
1170 278, 330, 274, 403, 115, 274, 401, 224, 225, 149,
1171 150, 228, 137, 282, 309, 409, 274, 157, 276, 277,
1172 89, 50, 239, 109, 282, 74, 295, 152, 107, 80,
1173 170, 171, 157, 115, 329, 58, 115, 295, 115, 116,
1174 85, 3, 115, 94, 169, 170, 171, 107, 107, 109,
1175 112, 20, 113, 107, 117, 115, 463, 274, 410, 466,
1176 109, 413, 91, 108, 113, 110, 115, 284, 6, 7,
1177 8, 9, 10, 11, 12, 13, 14, 9, 89, 108,
1178 112, 113, 425, 15, 16, 85, 115, 282, 89, 6,
1179 7, 8, 9, 10, 11, 111, 13, 14, 15, 16,
1180 295, 26, 46, 243, 44, 74, 169, 59, 108, 78,
1181 110, 9, 50, 57, 9, 10, 11, 15, 16, 51,
1182 15, 16, 112, 248, 109, 109, 16, 65, 113, 113,
1183 17, 18, 349, 50, 274, 25, 276, 277, 34, 35,
1184 357, 281, 282, 401, 284, 109, 286, 3, 288, 113,
1185 109, 68, 277, 91, 113, 295, 46, 282, 48, 15,
1186 16, 109, 109, 109, 109, 113, 113, 57, 113, 108,
1187 295, 27, 28, 29, 91, 31, 15, 16, 17, 18,
1188 104, 105, 102, 103, 112, 41, 403, 108, 405, 45,
1189 16, 108, 115, 49, 17, 18, 52, 53, 54, 55,
1190 15, 16, 109, 343, 17, 18, 118, 63, 64, 439,
1191 440, 86, 68, 69, 70, 71, 72, 86, 358, 76,
1192 360, 56, 86, 79, 3, 81, 82, 108, 108, 118,
1193 3, 108, 88, 10, 90, 114, 114, 108, 3, 95,
1194 96, 97, 98, 99, 384, 110, 118, 40, 116, 108,
1195 110, 118, 108, 114, 394, 73, 110, 101, 30, 109,
1196 113, 401, 110, 403, 101, 108, 5, 407, 9, 30,
1197 73, 73, 93, 111, 108, 100, 401, 119, 106, 110,
1198 109, 108, 5, 73, 120, 107, 119, 111, 428, 6,
1199 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
1200 111, 111, 109, 117, 444, 22, 111, 113, 448, 109,
1201 111, 87, 108, 111, 113, 4, 16, 29, 130, 36,
1202 37, 118, 6, 7, 8, 9, 10, 11, 12, 13,
1203 14, 83, 62, 50, 51, 6, 7, 8, 9, 10,
1204 11, 12, 13, 14, 15, 16, 96, 58, 274, 66,
1205 158, 22, 169, 148, 288, 407, 403, 306, 75, 462,
1206 278, 317, 228, 285, 420, 325, 50, 225, 85, 426,
1207 225, 328, 444, 259, 91, 276, -1, 432, 360, 50,
1208 51, 65, 428, 100, -1, -1, -1, -1, -1, -1,
1209 107, 108, -1, 110, -1, 66, -1, -1, -1, -1,
1210 -1, -1, -1, -1, 75, -1, -1, 91, -1, -1,
1211 -1, -1, -1, -1, 85, -1, -1, 9, -1, -1,
1212 91, -1, -1, 15, 16, -1, -1, -1, -1, 100,
1213 -1, -1, -1, -1, -1, -1, 28, -1, -1, 110,
1214 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
1215 16, 43, -1, -1, -1, -1, -1, -1, -1, -1,
1216 -1, 53, 54, 55, -1, -1, -1, -1, -1, -1,
1217 -1, -1, 64, -1, -1, -1, -1, 69, -1, 71,
1218 -1, -1, -1, -1, 50, 51, -1, 79, -1, -1,
1219 -1, -1, -1, -1, -1, -1, 88, -1, 90, -1,
1220 66, -1, -1, 95, -1, 97, 98, 99, -1, 75,
1221 -1, -1, -1, -1, -1, 15, 16, -1, -1, 85,
1222 -1, -1, -1, 23, -1, 91, -1, 27, 28, 29,
1223 -1, 31, 32, -1, 100, -1, -1, -1, -1, -1,
1224 -1, 41, -1, -1, 110, 45, -1, -1, -1, 49,
Lev Walkin5c541f12006-10-18 18:40:14 +00001225 -1, -1, 52, 53, 54, 55, -1, -1, -1, -1,
1226 -1, 61, -1, 63, 64, -1, -1, -1, 68, 69,
1227 70, 71, 72, -1, -1, -1, -1, -1, -1, 79,
1228 -1, 81, 82, 83, 84, -1, -1, -1, 88, -1,
1229 90, 15, 16, -1, -1, 95, 96, 97, 98, 99,
1230 -1, -1, -1, 27, 28, 29, -1, 31, -1, -1,
1231 -1, -1, -1, -1, -1, -1, -1, 41, -1, -1,
1232 -1, 45, -1, -1, -1, 49, -1, -1, 52, 53,
1233 54, 55, -1, -1, -1, -1, -1, -1, -1, 63,
1234 64, -1, -1, -1, 68, 69, 70, 71, 72, -1,
1235 -1, -1, -1, -1, -1, 79, -1, 81, 82, -1,
Lev Walkinc6ab03c2006-10-21 05:54:49 +00001236 -1, -1, -1, -1, 88, -1, 90, -1, -1, -1,
1237 -1, 95, 96, 97, 98, 99
Lev Walkin418298d2006-07-13 08:24:20 +00001238};
1239
1240/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1241 symbol of state STATE-NUM. */
1242static const unsigned char yystos[] =
1243{
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001244 0, 15, 16, 122, 123, 124, 239, 0, 124, 125,
1245 108, 126, 127, 9, 10, 109, 128, 129, 242, 39,
Lev Walkina9532f42006-09-17 04:52:50 +00001246 109, 129, 110, 16, 25, 46, 48, 57, 130, 131,
1247 132, 10, 62, 89, 89, 58, 89, 3, 132, 111,
Lev Walkin4a4543f2006-10-13 12:37:39 +00001248 26, 47, 133, 134, 146, 147, 22, 112, 148, 149,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001249 239, 242, 44, 59, 138, 139, 112, 112, 113, 108,
1250 51, 140, 141, 143, 144, 145, 239, 242, 28, 43,
Lev Walkin4a4543f2006-10-13 12:37:39 +00001251 53, 54, 55, 64, 69, 71, 79, 88, 90, 95,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001252 97, 98, 99, 135, 136, 151, 153, 183, 193, 239,
1253 242, 149, 109, 112, 143, 51, 113, 108, 16, 136,
Lev Walkin4a4543f2006-10-13 12:37:39 +00001254 3, 15, 16, 27, 29, 31, 41, 45, 49, 52,
1255 63, 68, 70, 72, 81, 82, 96, 108, 152, 177,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001256 190, 191, 192, 193, 240, 115, 173, 234, 235, 236,
1257 239, 145, 109, 137, 33, 163, 173, 118, 86, 86,
1258 76, 56, 86, 154, 155, 190, 191, 239, 3, 108,
1259 108, 229, 118, 24, 80, 94, 237, 3, 174, 175,
1260 46, 57, 238, 127, 142, 108, 239, 242, 109, 113,
Lev Walkin4a4543f2006-10-13 12:37:39 +00001261 114, 114, 108, 150, 6, 7, 8, 10, 11, 13,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001262 14, 50, 91, 150, 156, 157, 173, 186, 188, 232,
1263 242, 107, 109, 230, 231, 232, 242, 17, 18, 178,
1264 179, 180, 239, 10, 68, 108, 184, 186, 187, 239,
1265 242, 23, 32, 61, 83, 84, 152, 176, 85, 110,
Lev Walkinc6ab03c2006-10-21 05:54:49 +00001266 196, 197, 198, 199, 17, 18, 165, 166, 3, 155,
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001267 239, 242, 239, 242, 6, 8, 12, 22, 36, 37,
1268 50, 51, 66, 75, 85, 91, 100, 107, 108, 110,
1269 188, 200, 201, 202, 203, 204, 205, 206, 207, 208,
1270 209, 210, 211, 216, 217, 219, 221, 222, 223, 232,
1271 233, 239, 242, 109, 113, 109, 113, 110, 118, 116,
1272 185, 118, 114, 40, 108, 73, 108, 196, 108, 196,
1273 110, 200, 110, 16, 17, 38, 74, 173, 181, 182,
1274 227, 228, 173, 181, 182, 109, 113, 163, 173, 101,
1275 30, 173, 106, 119, 220, 7, 242, 34, 35, 239,
1276 200, 109, 113, 104, 105, 194, 102, 103, 195, 101,
1277 110, 220, 108, 157, 231, 187, 232, 242, 179, 5,
1278 189, 242, 184, 30, 107, 161, 162, 172, 173, 242,
1279 177, 35, 158, 159, 160, 172, 173, 242, 73, 158,
1280 73, 200, 111, 200, 184, 227, 118, 227, 227, 93,
1281 164, 227, 227, 100, 167, 168, 166, 205, 108, 119,
1282 106, 65, 208, 199, 108, 109, 111, 107, 203, 204,
1283 205, 200, 65, 208, 120, 224, 225, 111, 111, 5,
1284 242, 117, 109, 113, 173, 73, 109, 113, 227, 173,
1285 241, 242, 109, 241, 111, 111, 17, 18, 227, 87,
1286 218, 119, 107, 212, 213, 242, 113, 111, 118, 226,
1287 242, 109, 113, 187, 232, 162, 173, 160, 227, 234,
1288 234, 108, 189, 109, 113, 196, 201, 226, 118, 225,
1289 175, 175, 169, 213, 20, 74, 78, 214, 215, 242,
1290 4, 19, 115, 170, 171, 180, 170, 109, 171, 116
Lev Walkin418298d2006-07-13 08:24:20 +00001291};
1292
1293#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1294# define YYSIZE_T __SIZE_TYPE__
1295#endif
1296#if ! defined (YYSIZE_T) && defined (size_t)
1297# define YYSIZE_T size_t
1298#endif
1299#if ! defined (YYSIZE_T)
1300# if defined (__STDC__) || defined (__cplusplus)
1301# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1302# define YYSIZE_T size_t
1303# endif
1304#endif
1305#if ! defined (YYSIZE_T)
1306# define YYSIZE_T unsigned int
1307#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001308
1309#define yyerrok (yyerrstatus = 0)
1310#define yyclearin (yychar = YYEMPTY)
Lev Walkina00d6b32006-03-21 03:40:38 +00001311#define YYEMPTY -2
Lev Walkinf15320b2004-06-03 03:38:44 +00001312#define YYEOF 0
Lev Walkin418298d2006-07-13 08:24:20 +00001313
Lev Walkinf15320b2004-06-03 03:38:44 +00001314#define YYACCEPT goto yyacceptlab
Lev Walkin418298d2006-07-13 08:24:20 +00001315#define YYABORT goto yyabortlab
Lev Walkina00d6b32006-03-21 03:40:38 +00001316#define YYERROR goto yyerrlab1
Lev Walkin418298d2006-07-13 08:24:20 +00001317
1318/* Like YYERROR except do call yyerror. This remains here temporarily
1319 to ease the transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +00001320 Once GCC version 2 has supplanted version 1, this can go. */
Lev Walkin418298d2006-07-13 08:24:20 +00001321
Lev Walkinf15320b2004-06-03 03:38:44 +00001322#define YYFAIL goto yyerrlab
Lev Walkin418298d2006-07-13 08:24:20 +00001323
Lev Walkinf15320b2004-06-03 03:38:44 +00001324#define YYRECOVERING() (!!yyerrstatus)
Lev Walkin418298d2006-07-13 08:24:20 +00001325
1326#define YYBACKUP(Token, Value) \
Lev Walkinf15320b2004-06-03 03:38:44 +00001327do \
1328 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin418298d2006-07-13 08:24:20 +00001329 { \
1330 yychar = (Token); \
1331 yylval = (Value); \
Lev Walkina00d6b32006-03-21 03:40:38 +00001332 yychar1 = YYTRANSLATE (yychar); \
Lev Walkinf15320b2004-06-03 03:38:44 +00001333 YYPOPSTACK; \
1334 goto yybackup; \
1335 } \
1336 else \
Lev Walkin418298d2006-07-13 08:24:20 +00001337 { \
1338 yyerror ("syntax error: cannot back up"); \
1339 YYERROR; \
1340 } \
Lev Walkinf15320b2004-06-03 03:38:44 +00001341while (0)
1342
1343#define YYTERROR 1
1344#define YYERRCODE 256
1345
Lev Walkin418298d2006-07-13 08:24:20 +00001346/* YYLLOC_DEFAULT -- Compute the default location (before the actions
1347 are run). */
1348
1349#ifndef YYLLOC_DEFAULT
1350# define YYLLOC_DEFAULT(Current, Rhs, N) \
1351 Current.first_line = Rhs[1].first_line; \
1352 Current.first_column = Rhs[1].first_column; \
1353 Current.last_line = Rhs[N].last_line; \
1354 Current.last_column = Rhs[N].last_column;
Lev Walkinf15320b2004-06-03 03:38:44 +00001355#endif
1356
Lev Walkin418298d2006-07-13 08:24:20 +00001357/* YYLEX -- calling `yylex' with the right arguments. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001358
Lev Walkin418298d2006-07-13 08:24:20 +00001359#define YYLEX yylex ()
Lev Walkinfb872bd2006-03-18 06:53:11 +00001360
Lev Walkin418298d2006-07-13 08:24:20 +00001361/* Enable debugging if requested. */
1362#if YYDEBUG
Lev Walkinfb872bd2006-03-18 06:53:11 +00001363
Lev Walkin418298d2006-07-13 08:24:20 +00001364# ifndef YYFPRINTF
1365# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1366# define YYFPRINTF fprintf
1367# endif
Lev Walkinfb872bd2006-03-18 06:53:11 +00001368
Lev Walkin418298d2006-07-13 08:24:20 +00001369# define YYDPRINTF(Args) \
1370do { \
1371 if (yydebug) \
1372 YYFPRINTF Args; \
1373} while (0)
1374# define YYDSYMPRINT(Args) \
1375do { \
1376 if (yydebug) \
1377 yysymprint Args; \
1378} while (0)
1379/* Nonzero means print parse trace. It is left uninitialized so that
1380 multiple parsers can coexist. */
1381int yydebug;
1382#else /* !YYDEBUG */
1383# define YYDPRINTF(Args)
1384# define YYDSYMPRINT(Args)
1385#endif /* !YYDEBUG */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001386
Lev Walkin418298d2006-07-13 08:24:20 +00001387/* YYINITDEPTH -- initial size of the parser's stacks. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001388#ifndef YYINITDEPTH
Lev Walkin418298d2006-07-13 08:24:20 +00001389# define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +00001390#endif
1391
Lev Walkin418298d2006-07-13 08:24:20 +00001392/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1393 if the built-in stack extension method is used).
1394
1395 Do not make this value too large; the results are undefined if
1396 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
1397 evaluated with infinite-precision integer arithmetic. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001398
Lev Walkina00d6b32006-03-21 03:40:38 +00001399#if YYMAXDEPTH == 0
Lev Walkin418298d2006-07-13 08:24:20 +00001400# undef YYMAXDEPTH
Lev Walkina00d6b32006-03-21 03:40:38 +00001401#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001402
1403#ifndef YYMAXDEPTH
Lev Walkin418298d2006-07-13 08:24:20 +00001404# define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +00001405#endif
Lev Walkin418298d2006-07-13 08:24:20 +00001406
Lev Walkinf15320b2004-06-03 03:38:44 +00001407
Lev Walkinf15320b2004-06-03 03:38:44 +00001408
Lev Walkin418298d2006-07-13 08:24:20 +00001409#if YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00001410
Lev Walkin418298d2006-07-13 08:24:20 +00001411# ifndef yystrlen
1412# if defined (__GLIBC__) && defined (_STRING_H)
1413# define yystrlen strlen
1414# else
1415/* Return the length of YYSTR. */
1416static YYSIZE_T
1417# if defined (__STDC__) || defined (__cplusplus)
1418yystrlen (const char *yystr)
1419# else
1420yystrlen (yystr)
1421 const char *yystr;
1422# endif
Lev Walkina00d6b32006-03-21 03:40:38 +00001423{
Lev Walkin418298d2006-07-13 08:24:20 +00001424 register const char *yys = yystr;
Lev Walkina00d6b32006-03-21 03:40:38 +00001425
Lev Walkin418298d2006-07-13 08:24:20 +00001426 while (*yys++ != '\0')
1427 continue;
1428
1429 return yys - yystr - 1;
1430}
1431# endif
1432# endif
1433
1434# ifndef yystpcpy
1435# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1436# define yystpcpy stpcpy
1437# else
1438/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1439 YYDEST. */
1440static char *
1441# if defined (__STDC__) || defined (__cplusplus)
1442yystpcpy (char *yydest, const char *yysrc)
1443# else
1444yystpcpy (yydest, yysrc)
1445 char *yydest;
1446 const char *yysrc;
1447# endif
1448{
1449 register char *yyd = yydest;
1450 register const char *yys = yysrc;
1451
1452 while ((*yyd++ = *yys++) != '\0')
1453 continue;
1454
1455 return yyd - 1;
1456}
1457# endif
1458# endif
1459
1460#endif /* !YYERROR_VERBOSE */
1461
1462
1463
1464#if YYDEBUG
1465/*-----------------------------.
1466| Print this symbol on YYOUT. |
1467`-----------------------------*/
1468
1469static void
1470#if defined (__STDC__) || defined (__cplusplus)
1471yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue)
1472#else
1473yysymprint (yyout, yytype, yyvalue)
1474 FILE* yyout;
1475 int yytype;
1476 YYSTYPE yyvalue;
1477#endif
1478{
1479 /* Pacify ``unused variable'' warnings. */
1480 (void) yyvalue;
1481
1482 if (yytype < YYNTOKENS)
1483 {
1484 YYFPRINTF (yyout, "token %s (", yytname[yytype]);
1485# ifdef YYPRINT
1486 YYPRINT (yyout, yytoknum[yytype], yyvalue);
1487# endif
1488 }
1489 else
1490 YYFPRINTF (yyout, "nterm %s (", yytname[yytype]);
1491
1492 switch (yytype)
1493 {
1494 default:
1495 break;
1496 }
1497 YYFPRINTF (yyout, ")");
1498}
1499#endif /* YYDEBUG. */
1500
1501
1502/*-----------------------------------------------.
1503| Release the memory associated to this symbol. |
1504`-----------------------------------------------*/
1505
1506static void
1507#if defined (__STDC__) || defined (__cplusplus)
1508yydestruct (int yytype, YYSTYPE yyvalue)
1509#else
1510yydestruct (yytype, yyvalue)
1511 int yytype;
1512 YYSTYPE yyvalue;
1513#endif
1514{
1515 /* Pacify ``unused variable'' warnings. */
1516 (void) yyvalue;
1517
1518 switch (yytype)
1519 {
1520 default:
1521 break;
1522 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001523}
1524
Lev Walkinfb872bd2006-03-18 06:53:11 +00001525
1526
Lev Walkina00d6b32006-03-21 03:40:38 +00001527/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1528 into yyparse. The argument should have type void *.
1529 It should actually point to an object.
1530 Grammar actions can access the variable by casting it
1531 to the proper pointer type. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001532
1533#ifdef YYPARSE_PARAM
Lev Walkin418298d2006-07-13 08:24:20 +00001534# if defined (__STDC__) || defined (__cplusplus)
1535# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1536# define YYPARSE_PARAM_DECL
1537# else
1538# define YYPARSE_PARAM_ARG YYPARSE_PARAM
1539# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1540# endif
1541#else /* !YYPARSE_PARAM */
1542# define YYPARSE_PARAM_ARG
1543# define YYPARSE_PARAM_DECL
1544#endif /* !YYPARSE_PARAM */
Lev Walkina00d6b32006-03-21 03:40:38 +00001545
1546/* Prevent warning if -Wstrict-prototypes. */
1547#ifdef __GNUC__
Lev Walkin418298d2006-07-13 08:24:20 +00001548# ifdef YYPARSE_PARAM
Lev Walkina00d6b32006-03-21 03:40:38 +00001549int yyparse (void *);
Lev Walkin418298d2006-07-13 08:24:20 +00001550# else
Lev Walkinf15320b2004-06-03 03:38:44 +00001551int yyparse (void);
Lev Walkin418298d2006-07-13 08:24:20 +00001552# endif
Lev Walkinfb872bd2006-03-18 06:53:11 +00001553#endif
Lev Walkin418298d2006-07-13 08:24:20 +00001554
1555
1556/* The lookahead symbol. */
1557int yychar;
1558
1559/* The semantic value of the lookahead symbol. */
1560YYSTYPE yylval;
1561
1562/* Number of parse errors so far. */
1563int yynerrs;
1564
Lev Walkinfb872bd2006-03-18 06:53:11 +00001565
Lev Walkinfb872bd2006-03-18 06:53:11 +00001566int
Lev Walkin418298d2006-07-13 08:24:20 +00001567yyparse (YYPARSE_PARAM_ARG)
Lev Walkina00d6b32006-03-21 03:40:38 +00001568 YYPARSE_PARAM_DECL
Lev Walkinfb872bd2006-03-18 06:53:11 +00001569{
Lev Walkin418298d2006-07-13 08:24:20 +00001570
Lev Walkina00d6b32006-03-21 03:40:38 +00001571 register int yystate;
1572 register int yyn;
Lev Walkin418298d2006-07-13 08:24:20 +00001573 int yyresult;
1574 /* Number of tokens to shift before error messages enabled. */
1575 int yyerrstatus;
1576 /* Lookahead token as an internal (translated) token number. */
1577 int yychar1 = 0;
1578
1579 /* Three stacks and their tools:
1580 `yyss': related to states,
1581 `yyvs': related to semantic values,
1582 `yyls': related to locations.
1583
1584 Refer to the stacks thru separate pointers, to allow yyoverflow
1585 to reallocate them elsewhere. */
1586
1587 /* The state stack. */
1588 short yyssa[YYINITDEPTH];
1589 short *yyss = yyssa;
Lev Walkina00d6b32006-03-21 03:40:38 +00001590 register short *yyssp;
Lev Walkin418298d2006-07-13 08:24:20 +00001591
1592 /* The semantic value stack. */
1593 YYSTYPE yyvsa[YYINITDEPTH];
1594 YYSTYPE *yyvs = yyvsa;
Lev Walkina00d6b32006-03-21 03:40:38 +00001595 register YYSTYPE *yyvsp;
Lev Walkinfb872bd2006-03-18 06:53:11 +00001596
Lev Walkinfb872bd2006-03-18 06:53:11 +00001597
Lev Walkinfb872bd2006-03-18 06:53:11 +00001598
Lev Walkinf15320b2004-06-03 03:38:44 +00001599#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkinf15320b2004-06-03 03:38:44 +00001600
Lev Walkin418298d2006-07-13 08:24:20 +00001601 YYSIZE_T yystacksize = YYINITDEPTH;
Lev Walkinf15320b2004-06-03 03:38:44 +00001602
Lev Walkin418298d2006-07-13 08:24:20 +00001603 /* The variables used to return semantic value and location from the
1604 action routines. */
1605 YYSTYPE yyval;
Lev Walkinf15320b2004-06-03 03:38:44 +00001606
Lev Walkinf15320b2004-06-03 03:38:44 +00001607
Lev Walkin418298d2006-07-13 08:24:20 +00001608 /* When reducing, the number of symbols on the RHS of the reduced
1609 rule. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001610 int yylen;
1611
Lev Walkin418298d2006-07-13 08:24:20 +00001612 YYDPRINTF ((stderr, "Starting parse\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001613
1614 yystate = 0;
1615 yyerrstatus = 0;
1616 yynerrs = 0;
1617 yychar = YYEMPTY; /* Cause a token to be read. */
1618
1619 /* Initialize stack pointers.
1620 Waste one element of value and location stack
1621 so that they stay on the same level as the state stack.
1622 The wasted elements are never initialized. */
1623
Lev Walkin418298d2006-07-13 08:24:20 +00001624 yyssp = yyss;
Lev Walkinf15320b2004-06-03 03:38:44 +00001625 yyvsp = yyvs;
Lev Walkinf15320b2004-06-03 03:38:44 +00001626
Lev Walkin418298d2006-07-13 08:24:20 +00001627 goto yysetstate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001628
Lev Walkin418298d2006-07-13 08:24:20 +00001629/*------------------------------------------------------------.
1630| yynewstate -- Push a new state, which is found in yystate. |
1631`------------------------------------------------------------*/
1632 yynewstate:
1633 /* In all cases, when you get here, the value and location stacks
1634 have just been pushed. so pushing a state here evens the stacks.
1635 */
1636 yyssp++;
1637
1638 yysetstate:
1639 *yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001640
Lev Walkina00d6b32006-03-21 03:40:38 +00001641 if (yyssp >= yyss + yystacksize - 1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001642 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001643 /* Get the current used size of the three stacks, in elements. */
Lev Walkin418298d2006-07-13 08:24:20 +00001644 YYSIZE_T yysize = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001645
1646#ifdef yyoverflow
Lev Walkin418298d2006-07-13 08:24:20 +00001647 {
1648 /* Give user a chance to reallocate the stack. Use copies of
1649 these so that the &'s don't force the real ones into
1650 memory. */
1651 YYSTYPE *yyvs1 = yyvs;
1652 short *yyss1 = yyss;
Lev Walkinf15320b2004-06-03 03:38:44 +00001653
Lev Walkin418298d2006-07-13 08:24:20 +00001654
1655 /* Each stack pointer address is followed by the size of the
1656 data in use in that stack, in bytes. This used to be a
1657 conditional around just the two extra args, but that might
1658 be undefined if yyoverflow is a macro. */
1659 yyoverflow ("parser stack overflow",
1660 &yyss1, yysize * sizeof (*yyssp),
1661 &yyvs1, yysize * sizeof (*yyvsp),
1662
1663 &yystacksize);
1664
1665 yyss = yyss1;
1666 yyvs = yyvs1;
1667 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001668#else /* no yyoverflow */
Lev Walkin418298d2006-07-13 08:24:20 +00001669# ifndef YYSTACK_RELOCATE
1670 goto yyoverflowlab;
1671# else
Lev Walkinf15320b2004-06-03 03:38:44 +00001672 /* Extend the stack our own way. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001673 if (yystacksize >= YYMAXDEPTH)
Lev Walkin418298d2006-07-13 08:24:20 +00001674 goto yyoverflowlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001675 yystacksize *= 2;
Lev Walkina00d6b32006-03-21 03:40:38 +00001676 if (yystacksize > YYMAXDEPTH)
Lev Walkinf15320b2004-06-03 03:38:44 +00001677 yystacksize = YYMAXDEPTH;
Lev Walkin418298d2006-07-13 08:24:20 +00001678
1679 {
1680 short *yyss1 = yyss;
1681 union yyalloc *yyptr =
1682 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1683 if (! yyptr)
1684 goto yyoverflowlab;
1685 YYSTACK_RELOCATE (yyss);
1686 YYSTACK_RELOCATE (yyvs);
1687
1688# undef YYSTACK_RELOCATE
1689 if (yyss1 != yyssa)
1690 YYSTACK_FREE (yyss1);
1691 }
1692# endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001693#endif /* no yyoverflow */
1694
Lev Walkin418298d2006-07-13 08:24:20 +00001695 yyssp = yyss + yysize - 1;
1696 yyvsp = yyvs + yysize - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001697
Lev Walkin418298d2006-07-13 08:24:20 +00001698
1699 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1700 (unsigned long int) yystacksize));
Lev Walkinf15320b2004-06-03 03:38:44 +00001701
Lev Walkina00d6b32006-03-21 03:40:38 +00001702 if (yyssp >= yyss + yystacksize - 1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001703 YYABORT;
1704 }
1705
Lev Walkin418298d2006-07-13 08:24:20 +00001706 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Lev Walkinf15320b2004-06-03 03:38:44 +00001707
1708 goto yybackup;
Lev Walkin418298d2006-07-13 08:24:20 +00001709
1710/*-----------.
1711| yybackup. |
1712`-----------*/
1713yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001714
1715/* Do appropriate processing given the current state. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001716/* Read a lookahead token if we need one and don't already have one. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001717/* yyresume: */
1718
Lev Walkina00d6b32006-03-21 03:40:38 +00001719 /* First try to decide what to do without reference to lookahead token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001720
1721 yyn = yypact[yystate];
Lev Walkin418298d2006-07-13 08:24:20 +00001722 if (yyn == YYPACT_NINF)
Lev Walkinf15320b2004-06-03 03:38:44 +00001723 goto yydefault;
1724
Lev Walkina00d6b32006-03-21 03:40:38 +00001725 /* Not known => get a lookahead token if don't already have one. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001726
Lev Walkina00d6b32006-03-21 03:40:38 +00001727 /* yychar is either YYEMPTY or YYEOF
1728 or a valid token in external form. */
1729
Lev Walkinf15320b2004-06-03 03:38:44 +00001730 if (yychar == YYEMPTY)
1731 {
Lev Walkin418298d2006-07-13 08:24:20 +00001732 YYDPRINTF ((stderr, "Reading a token: "));
Lev Walkinf15320b2004-06-03 03:38:44 +00001733 yychar = YYLEX;
1734 }
1735
Lev Walkin418298d2006-07-13 08:24:20 +00001736 /* Convert token to internal form (in yychar1) for indexing tables with. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001737
Lev Walkin418298d2006-07-13 08:24:20 +00001738 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001739 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001740 yychar1 = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00001741 yychar = YYEOF; /* Don't call YYLEX any more. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001742
Lev Walkin418298d2006-07-13 08:24:20 +00001743 YYDPRINTF ((stderr, "Now at end of input.\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001744 }
1745 else
1746 {
Lev Walkin418298d2006-07-13 08:24:20 +00001747 yychar1 = YYTRANSLATE (yychar);
Lev Walkina00d6b32006-03-21 03:40:38 +00001748
Lev Walkin418298d2006-07-13 08:24:20 +00001749 /* We have to keep this `#if YYDEBUG', since we use variables
1750 which are defined only if `YYDEBUG' is set. */
1751 YYDPRINTF ((stderr, "Next token is "));
1752 YYDSYMPRINT ((stderr, yychar1, yylval));
1753 YYDPRINTF ((stderr, "\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001754 }
1755
Lev Walkin418298d2006-07-13 08:24:20 +00001756 /* If the proper action on seeing token YYCHAR1 is to reduce or to
1757 detect an error, take that action. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001758 yyn += yychar1;
Lev Walkin418298d2006-07-13 08:24:20 +00001759 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001760 goto yydefault;
Lev Walkinf15320b2004-06-03 03:38:44 +00001761 yyn = yytable[yyn];
Lev Walkin418298d2006-07-13 08:24:20 +00001762 if (yyn <= 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001763 {
Lev Walkin418298d2006-07-13 08:24:20 +00001764 if (yyn == 0 || yyn == YYTABLE_NINF)
Lev Walkinf15320b2004-06-03 03:38:44 +00001765 goto yyerrlab;
1766 yyn = -yyn;
1767 goto yyreduce;
1768 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001769
1770 if (yyn == YYFINAL)
1771 YYACCEPT;
1772
Lev Walkina00d6b32006-03-21 03:40:38 +00001773 /* Shift the lookahead token. */
Lev Walkin418298d2006-07-13 08:24:20 +00001774 YYDPRINTF ((stderr, "Shifting token %d (%s), ",
1775 yychar, yytname[yychar1]));
Lev Walkinf15320b2004-06-03 03:38:44 +00001776
1777 /* Discard the token being shifted unless it is eof. */
1778 if (yychar != YYEOF)
1779 yychar = YYEMPTY;
1780
1781 *++yyvsp = yylval;
Lev Walkinf15320b2004-06-03 03:38:44 +00001782
Lev Walkin418298d2006-07-13 08:24:20 +00001783
1784 /* Count tokens shifted since error; after three, turn off error
1785 status. */
1786 if (yyerrstatus)
1787 yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001788
1789 yystate = yyn;
1790 goto yynewstate;
1791
Lev Walkina00d6b32006-03-21 03:40:38 +00001792
Lev Walkin418298d2006-07-13 08:24:20 +00001793/*-----------------------------------------------------------.
1794| yydefault -- do the default action for the current state. |
1795`-----------------------------------------------------------*/
1796yydefault:
Lev Walkinf15320b2004-06-03 03:38:44 +00001797 yyn = yydefact[yystate];
1798 if (yyn == 0)
1799 goto yyerrlab;
Lev Walkin418298d2006-07-13 08:24:20 +00001800 goto yyreduce;
Lev Walkinf15320b2004-06-03 03:38:44 +00001801
Lev Walkin418298d2006-07-13 08:24:20 +00001802
1803/*-----------------------------.
1804| yyreduce -- Do a reduction. |
1805`-----------------------------*/
Lev Walkinf15320b2004-06-03 03:38:44 +00001806yyreduce:
Lev Walkin418298d2006-07-13 08:24:20 +00001807 /* yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001808 yylen = yyr2[yyn];
Lev Walkinf15320b2004-06-03 03:38:44 +00001809
Lev Walkin418298d2006-07-13 08:24:20 +00001810 /* If YYLEN is nonzero, implement the default value of the action:
1811 `$$ = $1'.
1812
1813 Otherwise, the following line sets YYVAL to garbage.
1814 This behavior is undocumented and Bison
1815 users should not rely upon it. Assigning to YYVAL
1816 unconditionally makes the parser a bit smaller, and it avoids a
1817 GCC warning that YYVAL may be used uninitialized. */
1818 yyval = yyvsp[1-yylen];
1819
1820
1821
1822#if YYDEBUG
1823 /* We have to keep this `#if YYDEBUG', since we use variables which
1824 are defined only if `YYDEBUG' is set. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001825 if (yydebug)
Lev Walkinf15320b2004-06-03 03:38:44 +00001826 {
Lev Walkin418298d2006-07-13 08:24:20 +00001827 int yyi;
Lev Walkina00d6b32006-03-21 03:40:38 +00001828
Lev Walkin418298d2006-07-13 08:24:20 +00001829 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
1830 yyn - 1, yyrline[yyn]);
Lev Walkina00d6b32006-03-21 03:40:38 +00001831
1832 /* Print the symbols being reduced, and their result. */
Lev Walkin418298d2006-07-13 08:24:20 +00001833 for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
1834 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
1835 YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkina00d6b32006-03-21 03:40:38 +00001836 }
1837#endif
Lev Walkin418298d2006-07-13 08:24:20 +00001838 switch (yyn)
1839 {
1840 case 2:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001841#line 356 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001842 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001843 *(void **)param = yyvsp[0].a_grammar;
Lev Walkin418298d2006-07-13 08:24:20 +00001844 }
1845 break;
1846
1847 case 3:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001848#line 362 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001849 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001850 yyval.a_grammar = asn1p_new();
1851 checkmem(yyval.a_grammar);
1852 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin418298d2006-07-13 08:24:20 +00001853 }
1854 break;
1855
1856 case 4:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001857#line 367 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001858 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001859 yyval.a_grammar = yyvsp[-1].a_grammar;
1860 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin418298d2006-07-13 08:24:20 +00001861 }
1862 break;
1863
1864 case 5:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001865#line 384 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00001866 { currentModule = asn1p_module_new(); }
1867 break;
1868
1869 case 6:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001870#line 389 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001871 {
Lev Walkinfb872bd2006-03-18 06:53:11 +00001872
Lev Walkina9532f42006-09-17 04:52:50 +00001873 yyval.a_module = currentModule;
1874
Lev Walkina00d6b32006-03-21 03:40:38 +00001875 if(yyvsp[-1].a_module) {
Lev Walkina9532f42006-09-17 04:52:50 +00001876 asn1p_module_t tmp = *(yyval.a_module);
1877 *(yyval.a_module) = *(yyvsp[-1].a_module);
1878 *(yyvsp[-1].a_module) = tmp;
1879 asn1p_module_free(yyvsp[-1].a_module);
Lev Walkinf15320b2004-06-03 03:38:44 +00001880 } else {
1881 /* There's a chance that a module is just plain empty */
Lev Walkinf15320b2004-06-03 03:38:44 +00001882 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001883
Lev Walkina9532f42006-09-17 04:52:50 +00001884 yyval.a_module->ModuleName = yyvsp[-8].tv_str;
Lev Walkina00d6b32006-03-21 03:40:38 +00001885 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1886 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001887 }
1888 break;
1889
Lev Walkina9532f42006-09-17 04:52:50 +00001890 case 7:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001891#line 413 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001892 { yyval.a_oid = 0; }
1893 break;
1894
Lev Walkina9532f42006-09-17 04:52:50 +00001895 case 8:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001896#line 414 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001897 { yyval.a_oid = yyvsp[0].a_oid; }
1898 break;
1899
Lev Walkina9532f42006-09-17 04:52:50 +00001900 case 9:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001901#line 418 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001902 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001903 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin418298d2006-07-13 08:24:20 +00001904 }
1905 break;
1906
Lev Walkina9532f42006-09-17 04:52:50 +00001907 case 10:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001908#line 421 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001909 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001910 yyval.a_oid = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00001911 }
1912 break;
1913
Lev Walkina9532f42006-09-17 04:52:50 +00001914 case 11:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001915#line 427 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001916 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001917 yyval.a_oid = asn1p_oid_new();
1918 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1919 if(yyvsp[0].a_oid_arc.name)
1920 free(yyvsp[0].a_oid_arc.name);
Lev Walkin418298d2006-07-13 08:24:20 +00001921 }
1922 break;
1923
Lev Walkina9532f42006-09-17 04:52:50 +00001924 case 12:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001925#line 433 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001926 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001927 yyval.a_oid = yyvsp[-1].a_oid;
1928 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1929 if(yyvsp[0].a_oid_arc.name)
1930 free(yyvsp[0].a_oid_arc.name);
Lev Walkin418298d2006-07-13 08:24:20 +00001931 }
1932 break;
1933
Lev Walkina9532f42006-09-17 04:52:50 +00001934 case 13:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001935#line 442 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001936 { /* iso */
Lev Walkina00d6b32006-03-21 03:40:38 +00001937 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1938 yyval.a_oid_arc.number = -1;
Lev Walkin418298d2006-07-13 08:24:20 +00001939 }
1940 break;
1941
Lev Walkina9532f42006-09-17 04:52:50 +00001942 case 14:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001943#line 446 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001944 { /* iso(1) */
Lev Walkina00d6b32006-03-21 03:40:38 +00001945 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1946 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkin418298d2006-07-13 08:24:20 +00001947 }
1948 break;
1949
Lev Walkina9532f42006-09-17 04:52:50 +00001950 case 15:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001951#line 450 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001952 { /* 1 */
Lev Walkina00d6b32006-03-21 03:40:38 +00001953 yyval.a_oid_arc.name = 0;
1954 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin418298d2006-07-13 08:24:20 +00001955 }
1956 break;
1957
Lev Walkina9532f42006-09-17 04:52:50 +00001958 case 16:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001959#line 460 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001960 { yyval.a_module_flags = MSF_NOFLAGS; }
1961 break;
1962
Lev Walkin418298d2006-07-13 08:24:20 +00001963 case 17:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001964#line 461 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001965 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001966 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001967 }
1968 break;
1969
1970 case 18:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001971#line 470 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00001972 {
1973 yyval.a_module_flags = yyvsp[0].a_module_flags;
1974 }
1975 break;
1976
1977 case 19:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001978#line 473 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001979 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001980 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001981 }
1982 break;
1983
Lev Walkina9532f42006-09-17 04:52:50 +00001984 case 20:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001985#line 482 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001986 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001987 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin418298d2006-07-13 08:24:20 +00001988 }
1989 break;
1990
Lev Walkina9532f42006-09-17 04:52:50 +00001991 case 21:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001992#line 485 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001993 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001994 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin418298d2006-07-13 08:24:20 +00001995 }
1996 break;
1997
Lev Walkina9532f42006-09-17 04:52:50 +00001998 case 22:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00001999#line 488 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002000 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002001 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin418298d2006-07-13 08:24:20 +00002002 }
2003 break;
2004
Lev Walkina9532f42006-09-17 04:52:50 +00002005 case 23:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002006#line 491 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002007 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002008 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin418298d2006-07-13 08:24:20 +00002009 }
2010 break;
2011
Lev Walkina9532f42006-09-17 04:52:50 +00002012 case 24:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002013#line 495 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002014 {
Lev Walkinf59d0752004-08-18 04:59:12 +00002015 /* X.680Amd1 specifies TAG and XER */
Lev Walkina00d6b32006-03-21 03:40:38 +00002016 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
2017 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
2018 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
2019 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
Lev Walkinf59d0752004-08-18 04:59:12 +00002020 } else {
2021 fprintf(stderr,
2022 "WARNING: %s INSTRUCTIONS at line %d: "
2023 "Unrecognized encoding reference\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00002024 yyvsp[-1].tv_str, yylineno);
2025 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
Lev Walkinf59d0752004-08-18 04:59:12 +00002026 }
Lev Walkina00d6b32006-03-21 03:40:38 +00002027 free(yyvsp[-1].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00002028 }
2029 break;
2030
Lev Walkina9532f42006-09-17 04:52:50 +00002031 case 25:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002032#line 516 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002033 { yyval.a_module = 0; }
2034 break;
2035
Lev Walkina9532f42006-09-17 04:52:50 +00002036 case 26:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002037#line 517 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002038 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002039 yyval.a_module = yyvsp[0].a_module;
Lev Walkin418298d2006-07-13 08:24:20 +00002040 }
2041 break;
2042
Lev Walkina9532f42006-09-17 04:52:50 +00002043 case 27:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002044#line 526 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002045 {
Lev Walkin866bd7f2006-09-14 10:35:20 +00002046 yyval.a_module = asn1p_module_new();
2047 AL_IMPORT(yyval.a_module, exports, yyvsp[-2].a_module, xp_next);
2048 AL_IMPORT(yyval.a_module, imports, yyvsp[-1].a_module, xp_next);
2049 AL_IMPORT(yyval.a_module, members, yyvsp[0].a_module, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002050 }
2051 break;
2052
Lev Walkina9532f42006-09-17 04:52:50 +00002053 case 28:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002054#line 535 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002055 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002056 yyval.a_module = yyvsp[0].a_module;
Lev Walkin418298d2006-07-13 08:24:20 +00002057 }
2058 break;
2059
Lev Walkina9532f42006-09-17 04:52:50 +00002060 case 29:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002061#line 538 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002062 {
2063 if(yyvsp[-1].a_module) {
2064 yyval.a_module = yyvsp[-1].a_module;
2065 } else {
2066 yyval.a_module = yyvsp[0].a_module;
2067 break;
2068 }
2069 AL_IMPORT(yyval.a_module, members, yyvsp[0].a_module, next);
2070 }
2071 break;
2072
Lev Walkin418298d2006-07-13 08:24:20 +00002073 case 30:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002074#line 554 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002075 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002076 yyval.a_module = asn1p_module_new();
2077 checkmem(yyval.a_module);
2078 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2079 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2080 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002081 }
2082 break;
2083
2084 case 31:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002085#line 561 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002086 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002087 yyval.a_module = asn1p_module_new();
2088 checkmem(yyval.a_module);
2089 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2090 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2091 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002092 }
2093 break;
2094
2095 case 32:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002096#line 574 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002097 {
2098 yyval.a_module = asn1p_module_new();
2099 checkmem(yyval.a_module);
2100 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2101 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2102 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
2103 }
Lev Walkin418298d2006-07-13 08:24:20 +00002104 break;
2105
Lev Walkin866bd7f2006-09-14 10:35:20 +00002106 case 33:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002107#line 582 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002108 { asn1p_lexer_hack_push_encoding_control(); }
2109 break;
2110
2111 case 34:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002112#line 583 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002113 {
Lev Walkinf59d0752004-08-18 04:59:12 +00002114 fprintf(stderr,
2115 "WARNING: ENCODING-CONTROL %s "
2116 "specification at line %d ignored\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00002117 yyvsp[-1].tv_str, yylineno);
2118 free(yyvsp[-1].tv_str);
2119 yyval.a_module = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002120 }
2121 break;
2122
Lev Walkina9532f42006-09-17 04:52:50 +00002123 case 35:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002124#line 595 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002125 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002126 return yyerror(
Lev Walkin70853052005-11-26 11:21:55 +00002127 "Attempt to redefine a standard basic string type, "
2128 "please comment out or remove this type redefinition.");
Lev Walkin418298d2006-07-13 08:24:20 +00002129 }
2130 break;
2131
Lev Walkina9532f42006-09-17 04:52:50 +00002132 case 36:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002133#line 608 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002134 { yyval.a_module = 0; }
2135 break;
2136
Lev Walkina9532f42006-09-17 04:52:50 +00002137 case 38:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002138#line 612 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002139 {
Lev Walkinb36317c2005-08-12 10:09:10 +00002140 if(!saved_aid && 0)
2141 return yyerror("Unterminated IMPORTS FROM, "
2142 "expected semicolon ';'");
2143 saved_aid = 0;
Lev Walkina00d6b32006-03-21 03:40:38 +00002144 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin418298d2006-07-13 08:24:20 +00002145 }
2146 break;
2147
Lev Walkina9532f42006-09-17 04:52:50 +00002148 case 39:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002149#line 622 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002150 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002151 return yyerror("Empty IMPORTS list");
Lev Walkin418298d2006-07-13 08:24:20 +00002152 }
2153 break;
2154
Lev Walkina9532f42006-09-17 04:52:50 +00002155 case 40:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002156#line 628 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002157 { yyval.a_module = asn1p_module_new(); }
2158 break;
2159
2160 case 42:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002161#line 632 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002162 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002163 yyval.a_module = asn1p_module_new();
2164 checkmem(yyval.a_module);
2165 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin418298d2006-07-13 08:24:20 +00002166 }
2167 break;
2168
Lev Walkin4a4543f2006-10-13 12:37:39 +00002169 case 43:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002170#line 637 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002171 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002172 yyval.a_module = yyvsp[-1].a_module;
2173 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin418298d2006-07-13 08:24:20 +00002174 }
2175 break;
2176
Lev Walkin4a4543f2006-10-13 12:37:39 +00002177 case 44:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002178#line 644 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002179 { memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); }
2180 break;
2181
Lev Walkin4a4543f2006-10-13 12:37:39 +00002182 case 45:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002183#line 645 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002184 { yyval.a_aid.oid = yyvsp[0].a_oid; }
2185 break;
2186
Lev Walkin4a4543f2006-10-13 12:37:39 +00002187 case 46:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002188#line 649 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002189 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002190 yyval.a_xports = yyvsp[-3].a_xports;
2191 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
2192 yyval.a_xports->identifier = yyvsp[0].a_aid;
Lev Walkinb36317c2005-08-12 10:09:10 +00002193 /* This stupid thing is used for look-back hack. */
Lev Walkina00d6b32006-03-21 03:40:38 +00002194 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
2195 checkmem(yyval.a_xports);
Lev Walkin418298d2006-07-13 08:24:20 +00002196 }
2197 break;
2198
Lev Walkin4a4543f2006-10-13 12:37:39 +00002199 case 47:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002200#line 660 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002201 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002202 yyval.a_xports = asn1p_xports_new();
2203 checkmem(yyval.a_xports);
2204 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002205 }
2206 break;
2207
Lev Walkin4a4543f2006-10-13 12:37:39 +00002208 case 48:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002209#line 665 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002210 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002211 yyval.a_xports = yyvsp[-2].a_xports;
2212 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002213 }
2214 break;
2215
Lev Walkina9532f42006-09-17 04:52:50 +00002216 case 49:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002217#line 672 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002218 {
Lev Walkina9532f42006-09-17 04:52:50 +00002219 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002220 checkmem(yyval.a_expr);
2221 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2222 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin418298d2006-07-13 08:24:20 +00002223 }
2224 break;
2225
Lev Walkina9532f42006-09-17 04:52:50 +00002226 case 50:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002227#line 678 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002228 { /* Completely equivalent to above */
2229 yyval.a_expr = NEW_EXPR();
2230 checkmem(yyval.a_expr);
2231 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2232 yyval.a_expr->expr_type = A1TC_REFERENCE;
2233 }
Lev Walkin866bd7f2006-09-14 10:35:20 +00002234 break;
2235
Lev Walkina9532f42006-09-17 04:52:50 +00002236 case 51:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002237#line 684 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002238 {
2239 yyval.a_expr = NEW_EXPR();
2240 checkmem(yyval.a_expr);
2241 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2242 yyval.a_expr->expr_type = A1TC_REFERENCE;
2243 }
2244 break;
2245
2246 case 52:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002247#line 694 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002248 { yyval.a_module = 0; }
2249 break;
2250
2251 case 53:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002252#line 695 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002253 {
2254 yyval.a_module = asn1p_module_new();
2255 checkmem(yyval.a_module);
2256 if(yyvsp[0].a_xports) {
2257 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
2258 } else {
2259 /* "EXPORTS ALL;" */
2260 }
2261 }
2262 break;
2263
Lev Walkin4a4543f2006-10-13 12:37:39 +00002264 case 54:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002265#line 707 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002266 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002267 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin418298d2006-07-13 08:24:20 +00002268 }
2269 break;
2270
Lev Walkin4a4543f2006-10-13 12:37:39 +00002271 case 55:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002272#line 710 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002273 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002274 yyval.a_xports = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002275 }
2276 break;
2277
Lev Walkin4a4543f2006-10-13 12:37:39 +00002278 case 56:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002279#line 713 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002280 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002281 /* Empty EXPORTS clause effectively prohibits export. */
Lev Walkina00d6b32006-03-21 03:40:38 +00002282 yyval.a_xports = asn1p_xports_new();
2283 checkmem(yyval.a_xports);
Lev Walkin418298d2006-07-13 08:24:20 +00002284 }
2285 break;
2286
Lev Walkin4a4543f2006-10-13 12:37:39 +00002287 case 57:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002288#line 721 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002289 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002290 yyval.a_xports = asn1p_xports_new();
2291 assert(yyval.a_xports);
2292 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002293 }
2294 break;
2295
Lev Walkin4a4543f2006-10-13 12:37:39 +00002296 case 58:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002297#line 726 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002298 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002299 yyval.a_xports = yyvsp[-2].a_xports;
2300 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002301 }
2302 break;
2303
Lev Walkina9532f42006-09-17 04:52:50 +00002304 case 59:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002305#line 733 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002306 {
Lev Walkina9532f42006-09-17 04:52:50 +00002307 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002308 checkmem(yyval.a_expr);
2309 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2310 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin418298d2006-07-13 08:24:20 +00002311 }
2312 break;
2313
Lev Walkina9532f42006-09-17 04:52:50 +00002314 case 60:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002315#line 739 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002316 {
2317 yyval.a_expr = NEW_EXPR();
2318 checkmem(yyval.a_expr);
2319 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2320 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
2321 }
Lev Walkin418298d2006-07-13 08:24:20 +00002322 break;
2323
Lev Walkina9532f42006-09-17 04:52:50 +00002324 case 61:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002325#line 745 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002326 {
2327 yyval.a_expr = NEW_EXPR();
2328 checkmem(yyval.a_expr);
2329 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2330 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
2331 }
2332 break;
2333
2334 case 62:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002335#line 754 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002336 { yyval.a_constr = yyvsp[-1].a_constr; }
2337 break;
2338
2339 case 63:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002340#line 757 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002341 {
Lev Walkin557f27d2006-03-21 07:46:48 +00002342 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkina00d6b32006-03-21 03:40:38 +00002343 assert(yyval.a_expr->Identifier == 0);
Lev Walkin557f27d2006-03-21 07:46:48 +00002344 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
Lev Walkina00d6b32006-03-21 03:40:38 +00002345 yyval.a_expr->meta_type = AMT_VALUESET;
Lev Walkin557f27d2006-03-21 07:46:48 +00002346 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00002347 }
2348 break;
2349
Lev Walkin4a4543f2006-10-13 12:37:39 +00002350 case 64:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002351#line 767 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002352 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00002353 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002354 }
2355 break;
2356
Lev Walkin4a4543f2006-10-13 12:37:39 +00002357 case 65:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002358#line 780 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002359 {
Lev Walkina9532f42006-09-17 04:52:50 +00002360 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002361 checkmem(yyval.a_expr);
2362 yyval.a_expr->reference = yyvsp[0].a_ref;
2363 yyval.a_expr->expr_type = A1TC_REFERENCE;
2364 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin418298d2006-07-13 08:24:20 +00002365 }
2366 break;
2367
Lev Walkin4a4543f2006-10-13 12:37:39 +00002368 case 66:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002369#line 790 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002370 {
Lev Walkina9532f42006-09-17 04:52:50 +00002371 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002372 checkmem(yyval.a_expr);
Lev Walkin0c0bca62006-03-21 04:48:15 +00002373 yyval.a_expr->reference = yyvsp[-3].a_ref;
2374 yyval.a_expr->rhs_pspecs = yyvsp[-1].a_expr;
2375 yyval.a_expr->expr_type = A1TC_REFERENCE;
2376 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin418298d2006-07-13 08:24:20 +00002377 }
2378 break;
2379
Lev Walkin4a4543f2006-10-13 12:37:39 +00002380 case 67:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002381#line 810 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002382 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002383 yyval.a_expr = yyvsp[0].a_expr;
2384 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2385 assert(yyval.a_expr->expr_type);
2386 assert(yyval.a_expr->meta_type);
Lev Walkin418298d2006-07-13 08:24:20 +00002387 }
2388 break;
2389
Lev Walkin4a4543f2006-10-13 12:37:39 +00002390 case 68:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002391#line 816 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002392 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002393 yyval.a_expr = yyvsp[0].a_expr;
2394 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2395 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2396 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin418298d2006-07-13 08:24:20 +00002397 }
2398 break;
2399
Lev Walkina9532f42006-09-17 04:52:50 +00002400 case 69:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002401#line 832 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002402 {
2403 yyval.a_expr = yyvsp[0].a_expr;
2404 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2405 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
2406 }
2407 break;
2408
2409 case 70:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002410#line 838 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002411 {
2412 yyval.a_expr = yyvsp[0].a_expr;
2413 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2414 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
2415 }
2416 break;
2417
2418 case 71:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002419#line 846 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002420 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002421 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002422 yyval.a_plist = asn1p_paramlist_new(yylineno);
2423 checkmem(yyval.a_plist);
2424 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
Lev Walkinf15320b2004-06-03 03:38:44 +00002425 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002426 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2427 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin418298d2006-07-13 08:24:20 +00002428 }
2429 break;
2430
Lev Walkin4a4543f2006-10-13 12:37:39 +00002431 case 72:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002432#line 855 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002433 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002434 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002435 yyval.a_plist = yyvsp[-2].a_plist;
2436 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
Lev Walkinf15320b2004-06-03 03:38:44 +00002437 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002438 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2439 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin418298d2006-07-13 08:24:20 +00002440 }
2441 break;
2442
Lev Walkin4a4543f2006-10-13 12:37:39 +00002443 case 73:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002444#line 866 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002445 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002446 yyval.a_parg.governor = NULL;
2447 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002448 }
2449 break;
2450
Lev Walkin866bd7f2006-09-14 10:35:20 +00002451 case 74:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002452#line 870 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002453 {
2454 int ret;
2455 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkin4a4543f2006-10-13 12:37:39 +00002456 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
Lev Walkin866bd7f2006-09-14 10:35:20 +00002457 checkmem(ret == 0);
2458 yyval.a_parg.argument = yyvsp[0].tv_str;
2459 }
2460 break;
2461
2462 case 75:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002463#line 877 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002464 {
2465 int ret;
2466 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2467 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
2468 checkmem(ret == 0);
2469 yyval.a_parg.argument = yyvsp[0].tv_str;
2470 }
2471 break;
2472
2473 case 76:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002474#line 884 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002475 {
Lev Walkina9532f42006-09-17 04:52:50 +00002476 int ret;
2477 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2478 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2479 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2480 checkmem(ret == 0);
2481 yyval.a_parg.argument = yyvsp[0].tv_str;
2482 }
2483 break;
2484
Lev Walkin4a4543f2006-10-13 12:37:39 +00002485 case 77:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002486#line 892 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002487 {
2488 int ret;
2489 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2490 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2491 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2492 checkmem(ret == 0);
2493 yyval.a_parg.argument = yyvsp[0].tv_str;
2494 }
2495 break;
2496
2497 case 78:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002498#line 903 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002499 {
2500 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002501 checkmem(yyval.a_expr);
2502 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002503 }
2504 break;
2505
Lev Walkin4a4543f2006-10-13 12:37:39 +00002506 case 79:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002507#line 908 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002508 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002509 yyval.a_expr = yyvsp[-2].a_expr;
2510 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002511 }
2512 break;
2513
Lev Walkin4a4543f2006-10-13 12:37:39 +00002514 case 80:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002515#line 915 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002516 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002517 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002518 }
2519 break;
2520
Lev Walkin4a4543f2006-10-13 12:37:39 +00002521 case 81:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002522#line 918 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002523 {
Lev Walkina9532f42006-09-17 04:52:50 +00002524 yyval.a_expr = NEW_EXPR();
Lev Walkin0c0bca62006-03-21 04:48:15 +00002525 checkmem(yyval.a_expr);
2526 yyval.a_expr->Identifier = "?";
2527 yyval.a_expr->expr_type = A1TC_REFERENCE;
2528 yyval.a_expr->meta_type = AMT_VALUE;
2529 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00002530 }
2531 break;
2532
Lev Walkin4a4543f2006-10-13 12:37:39 +00002533 case 82:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002534#line 926 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002535 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002536 asn1p_ref_t *ref;
Lev Walkina9532f42006-09-17 04:52:50 +00002537 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002538 checkmem(yyval.a_expr);
2539 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2540 yyval.a_expr->expr_type = A1TC_REFERENCE;
2541 yyval.a_expr->meta_type = AMT_VALUE;
2542 ref = asn1p_ref_new(yylineno);
2543 asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2544 yyval.a_expr->value = asn1p_value_fromref(ref, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00002545 }
2546 break;
2547
Lev Walkin4a4543f2006-10-13 12:37:39 +00002548 case 83:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002549#line 937 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002550 {
Lev Walkina9532f42006-09-17 04:52:50 +00002551 yyval.a_expr = NEW_EXPR();
Lev Walkin5045dfa2006-03-21 09:41:28 +00002552 yyval.a_expr->expr_type = A1TC_VALUESET;
2553 yyval.a_expr->meta_type = AMT_VALUESET;
2554 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00002555 }
2556 break;
2557
Lev Walkin4a4543f2006-10-13 12:37:39 +00002558 case 84:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002559#line 960 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002560 { yyval.a_expr = NEW_EXPR(); }
Lev Walkin418298d2006-07-13 08:24:20 +00002561 break;
2562
Lev Walkin4a4543f2006-10-13 12:37:39 +00002563 case 85:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002564#line 961 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002565 { yyval.a_expr = yyvsp[0].a_expr; }
2566 break;
2567
Lev Walkin4a4543f2006-10-13 12:37:39 +00002568 case 86:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002569#line 964 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002570 {
Lev Walkina9532f42006-09-17 04:52:50 +00002571 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002572 checkmem(yyval.a_expr);
2573 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002574 }
2575 break;
2576
Lev Walkin4a4543f2006-10-13 12:37:39 +00002577 case 87:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002578#line 969 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002579 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002580 yyval.a_expr = yyvsp[-2].a_expr;
2581 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002582 }
2583 break;
2584
Lev Walkin4a4543f2006-10-13 12:37:39 +00002585 case 88:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002586#line 976 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002587 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002588 yyval.a_expr = yyvsp[-1].a_expr;
2589 assert(yyval.a_expr->Identifier == 0);
2590 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2591 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2592 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002593 }
2594 break;
2595
Lev Walkin4a4543f2006-10-13 12:37:39 +00002596 case 89:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002597#line 983 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002598 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002599 yyval.a_expr = yyvsp[-1].a_expr;
2600 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2601 yyval.a_expr->marker = yyvsp[0].a_marker;
2602 _fixup_anonymous_identifier(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002603 }
2604 break;
2605
Lev Walkin4a4543f2006-10-13 12:37:39 +00002606 case 90:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002607#line 989 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002608 {
Lev Walkina9532f42006-09-17 04:52:50 +00002609 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002610 checkmem(yyval.a_expr);
2611 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2612 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
2613 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002614 }
2615 break;
2616
Lev Walkin4a4543f2006-10-13 12:37:39 +00002617 case 91:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002618#line 996 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002619 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002620 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002621 }
2622 break;
2623
Lev Walkin4a4543f2006-10-13 12:37:39 +00002624 case 92:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002625#line 1002 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002626 {
Lev Walkina9532f42006-09-17 04:52:50 +00002627 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002628 checkmem(yyval.a_expr);
2629 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002630 }
2631 break;
2632
Lev Walkin4a4543f2006-10-13 12:37:39 +00002633 case 93:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002634#line 1007 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002635 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002636 yyval.a_expr = yyvsp[-2].a_expr;
2637 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002638 }
2639 break;
2640
Lev Walkin4a4543f2006-10-13 12:37:39 +00002641 case 94:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002642#line 1014 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002643 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002644 yyval.a_expr = yyvsp[0].a_expr;
2645 assert(yyval.a_expr->Identifier == 0);
2646 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002647 }
2648 break;
2649
Lev Walkin4a4543f2006-10-13 12:37:39 +00002650 case 95:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002651#line 1019 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002652 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002653 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002654 }
2655 break;
2656
Lev Walkin4a4543f2006-10-13 12:37:39 +00002657 case 96:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002658#line 1022 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002659 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002660 yyval.a_expr = yyvsp[0].a_expr;
2661 _fixup_anonymous_identifier(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002662 }
2663 break;
2664
Lev Walkin4a4543f2006-10-13 12:37:39 +00002665 case 97:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002666#line 1029 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002667 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002668 yyval.a_expr = yyvsp[-2].a_expr;
2669 checkmem(yyval.a_expr);
2670 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2671 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2672 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin418298d2006-07-13 08:24:20 +00002673 }
2674 break;
2675
Lev Walkin4a4543f2006-10-13 12:37:39 +00002676 case 98:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002677#line 1039 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002678 { yyval.a_int = 0; }
2679 break;
2680
Lev Walkin4a4543f2006-10-13 12:37:39 +00002681 case 99:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002682#line 1040 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002683 { yyval.a_int = 1; }
2684 break;
2685
Lev Walkin4a4543f2006-10-13 12:37:39 +00002686 case 100:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002687#line 1044 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002688 {
Lev Walkina9532f42006-09-17 04:52:50 +00002689 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002690 checkmem(yyval.a_expr);
2691 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2692 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2693 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002694 }
2695 break;
2696
Lev Walkin4a4543f2006-10-13 12:37:39 +00002697 case 101:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002698#line 1051 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002699 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002700 yyval.a_expr = yyvsp[-2].a_expr;
2701 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002702 }
2703 break;
2704
Lev Walkin4a4543f2006-10-13 12:37:39 +00002705 case 102:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002706#line 1061 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002707 {
Lev Walkina9532f42006-09-17 04:52:50 +00002708 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002709 checkmem(yyval.a_expr);
2710 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2711 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2712 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2713 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002714 }
2715 break;
2716
Lev Walkin4a4543f2006-10-13 12:37:39 +00002717 case 103:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002718#line 1071 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002719 {
Lev Walkina9532f42006-09-17 04:52:50 +00002720 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002721 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2722 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2723 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2724 yyval.a_expr->unique = yyvsp[-1].a_int;
2725 yyval.a_expr->marker = yyvsp[0].a_marker;
2726 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002727 }
2728 break;
2729
Lev Walkin4a4543f2006-10-13 12:37:39 +00002730 case 104:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002731#line 1082 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002732 {
Lev Walkina9532f42006-09-17 04:52:50 +00002733 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002734 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2735 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2736 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2737 yyval.a_expr->reference = yyvsp[-1].a_ref;
2738 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002739 }
2740 break;
2741
Lev Walkin4a4543f2006-10-13 12:37:39 +00002742 case 105:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002743#line 1092 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002744 {
Lev Walkina9532f42006-09-17 04:52:50 +00002745 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002746 checkmem(yyval.a_expr);
2747 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2748 yyval.a_expr->reference = yyvsp[-1].a_ref;
2749 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2750 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2751 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002752 }
2753 break;
2754
Lev Walkin4a4543f2006-10-13 12:37:39 +00002755 case 106:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002756#line 1103 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002757 {
Lev Walkina9532f42006-09-17 04:52:50 +00002758 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002759 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2760 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2761 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2762 yyval.a_expr->reference = yyvsp[-1].a_ref;
2763 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002764 }
2765 break;
2766
Lev Walkin4a4543f2006-10-13 12:37:39 +00002767 case 107:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002768#line 1113 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002769 {
Lev Walkina9532f42006-09-17 04:52:50 +00002770 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002771 checkmem(yyval.a_expr);
2772 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2773 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2774 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2775 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
2776 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002777 }
2778 break;
2779
Lev Walkin4a4543f2006-10-13 12:37:39 +00002780 case 108:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002781#line 1124 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002782 {
Lev Walkina9532f42006-09-17 04:52:50 +00002783 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002784 checkmem(yyval.a_expr);
2785 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2786 yyval.a_expr->reference = yyvsp[-1].a_ref;
2787 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2788 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2789 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002790 }
2791 break;
2792
Lev Walkin4a4543f2006-10-13 12:37:39 +00002793 case 109:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002794#line 1136 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002795 { yyval.a_wsynt = 0; }
2796 break;
2797
Lev Walkin4a4543f2006-10-13 12:37:39 +00002798 case 110:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002799#line 1137 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002800 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002801 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin418298d2006-07-13 08:24:20 +00002802 }
2803 break;
2804
Lev Walkin4a4543f2006-10-13 12:37:39 +00002805 case 111:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002806#line 1144 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002807 { asn1p_lexer_hack_enable_with_syntax(); }
2808 break;
2809
Lev Walkin4a4543f2006-10-13 12:37:39 +00002810 case 112:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002811#line 1146 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002812 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002813 yyval.a_wsynt = yyvsp[-1].a_wsynt;
Lev Walkin418298d2006-07-13 08:24:20 +00002814 }
2815 break;
2816
Lev Walkin4a4543f2006-10-13 12:37:39 +00002817 case 113:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002818#line 1152 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002819 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002820 yyval.a_wsynt = asn1p_wsyntx_new();
2821 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002822 }
2823 break;
2824
Lev Walkin4a4543f2006-10-13 12:37:39 +00002825 case 114:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002826#line 1156 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002827 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002828 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2829 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002830 }
2831 break;
2832
Lev Walkin4a4543f2006-10-13 12:37:39 +00002833 case 115:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002834#line 1163 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002835 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002836 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_opaque.buf, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002837 yyval.a_wchunk->type = WC_WHITESPACE;
Lev Walkin418298d2006-07-13 08:24:20 +00002838 }
2839 break;
2840
Lev Walkin4a4543f2006-10-13 12:37:39 +00002841 case 116:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002842#line 1167 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002843 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002844 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_str, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00002845 }
2846 break;
2847
Lev Walkin4a4543f2006-10-13 12:37:39 +00002848 case 117:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002849#line 1170 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002850 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002851 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].a_refcomp.name, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002852 yyval.a_wchunk->type = WC_FIELD;
Lev Walkin418298d2006-07-13 08:24:20 +00002853 }
2854 break;
2855
Lev Walkin4a4543f2006-10-13 12:37:39 +00002856 case 118:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002857#line 1174 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002858 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002859 yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
Lev Walkin418298d2006-07-13 08:24:20 +00002860 }
2861 break;
2862
Lev Walkina9532f42006-09-17 04:52:50 +00002863 case 119:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002864#line 1180 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002865 {
2866 yyval.a_expr = NEW_EXPR();
Lev Walkin866bd7f2006-09-14 10:35:20 +00002867 checkmem(yyval.a_expr);
2868 yyval.a_expr->Identifier = strdup("...");
Lev Walkin866bd7f2006-09-14 10:35:20 +00002869 checkmem(yyval.a_expr->Identifier);
2870 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2871 yyval.a_expr->meta_type = AMT_TYPE;
2872 }
2873 break;
2874
Lev Walkina9532f42006-09-17 04:52:50 +00002875 case 120:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002876#line 1188 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002877 {
2878 yyval.a_expr = NEW_EXPR();
2879 checkmem(yyval.a_expr);
2880 yyval.a_expr->Identifier = strdup("...");
2881 checkmem(yyval.a_expr->Identifier);
2882 yyval.a_expr->value = yyvsp[0].a_value;
2883 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2884 yyval.a_expr->meta_type = AMT_TYPE;
2885 }
2886 break;
2887
2888 case 121:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002889#line 1197 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002890 {
2891 yyval.a_expr = NEW_EXPR();
2892 checkmem(yyval.a_expr);
2893 yyval.a_expr->Identifier = strdup("...");
2894 yyval.a_expr->value = yyvsp[0].a_value;
2895 checkmem(yyval.a_expr->Identifier);
2896 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2897 yyval.a_expr->meta_type = AMT_TYPE;
2898 }
2899 break;
2900
2901 case 122:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002902#line 1209 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002903 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002904 yyval.a_expr = yyvsp[-1].a_expr;
2905 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002906 /*
2907 * Outer constraint for SEQUENCE OF and SET OF applies
2908 * to the inner type.
2909 */
Lev Walkina00d6b32006-03-21 03:40:38 +00002910 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2911 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2912 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2913 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002914 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002915 if(yyval.a_expr->constraints) {
2916 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002917 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002918 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002919 }
2920 }
Lev Walkin418298d2006-07-13 08:24:20 +00002921 }
2922 break;
2923
Lev Walkin4a4543f2006-10-13 12:37:39 +00002924 case 123:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002925#line 1231 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002926 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002927 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
Lev Walkinfb872bd2006-03-18 06:53:11 +00002928 asn1p_as_pointer = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002929 }
2930 break;
2931
Lev Walkin4a4543f2006-10-13 12:37:39 +00002932 case 124:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002933#line 1238 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002934 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002935 yyval.a_expr = yyvsp[0].a_expr;
2936 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
Lev Walkinfb872bd2006-03-18 06:53:11 +00002937
Lev Walkina00d6b32006-03-21 03:40:38 +00002938 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2939 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
Lev Walkinef625402005-09-05 05:17:57 +00002940 fprintf(stderr,
2941 "INFO: Directive <ASN1C:RepresentAsPointer> "
2942 "applied to %s at line %d\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00002943 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2944 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
Lev Walkinef625402005-09-05 05:17:57 +00002945 : "member",
Lev Walkina00d6b32006-03-21 03:40:38 +00002946 yyval.a_expr->_lineno
Lev Walkinef625402005-09-05 05:17:57 +00002947 );
2948 }
Lev Walkin418298d2006-07-13 08:24:20 +00002949 }
2950 break;
2951
Lev Walkin4a4543f2006-10-13 12:37:39 +00002952 case 125:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002953#line 1257 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002954 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002955 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002956 }
2957 break;
2958
Lev Walkin4a4543f2006-10-13 12:37:39 +00002959 case 126:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002960#line 1260 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002961 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002962 yyval.a_expr = yyvsp[-1].a_expr;
2963 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2964 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2965 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002966 }
2967 break;
2968
Lev Walkin4a4543f2006-10-13 12:37:39 +00002969 case 127:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002970#line 1266 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002971 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002972 yyval.a_expr = yyvsp[-1].a_expr;
2973 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2974 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2975 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002976 }
2977 break;
2978
Lev Walkin4a4543f2006-10-13 12:37:39 +00002979 case 128:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002980#line 1272 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002981 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002982 yyval.a_expr = yyvsp[-1].a_expr;
2983 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2984 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2985 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002986 }
2987 break;
2988
Lev Walkin4a4543f2006-10-13 12:37:39 +00002989 case 129:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00002990#line 1278 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002991 {
Lev Walkina9532f42006-09-17 04:52:50 +00002992 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002993 checkmem(yyval.a_expr);
2994 yyval.a_expr->constraints = yyvsp[-4].a_constr;
2995 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2996 yyval.a_expr->meta_type = AMT_TYPE;
2997 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
2998 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
2999 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00003000 }
3001 break;
3002
Lev Walkin4a4543f2006-10-13 12:37:39 +00003003 case 130:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003004#line 1288 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003005 {
Lev Walkina9532f42006-09-17 04:52:50 +00003006 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003007 checkmem(yyval.a_expr);
3008 yyval.a_expr->constraints = yyvsp[-4].a_constr;
3009 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
3010 yyval.a_expr->meta_type = AMT_TYPE;
3011 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
3012 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
3013 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00003014 }
3015 break;
3016
Lev Walkin4a4543f2006-10-13 12:37:39 +00003017 case 131:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003018#line 1298 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003019 {
Lev Walkina9532f42006-09-17 04:52:50 +00003020 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003021 checkmem(yyval.a_expr);
3022 yyval.a_expr->expr_type = ASN_TYPE_ANY;
3023 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003024 }
3025 break;
3026
Lev Walkin4a4543f2006-10-13 12:37:39 +00003027 case 132:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003028#line 1304 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003029 {
Lev Walkin070a52d2004-08-22 03:19:54 +00003030 int ret;
Lev Walkina9532f42006-09-17 04:52:50 +00003031 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003032 checkmem(yyval.a_expr);
3033 yyval.a_expr->reference = asn1p_ref_new(yylineno);
3034 ret = asn1p_ref_add_component(yyval.a_expr->reference,
3035 yyvsp[0].tv_str, RLT_lowercase);
Lev Walkin070a52d2004-08-22 03:19:54 +00003036 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003037 yyval.a_expr->expr_type = ASN_TYPE_ANY;
3038 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003039 }
3040 break;
3041
Lev Walkin4a4543f2006-10-13 12:37:39 +00003042 case 133:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003043#line 1315 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003044 {
Lev Walkina9532f42006-09-17 04:52:50 +00003045 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003046 checkmem(yyval.a_expr);
3047 yyval.a_expr->reference = yyvsp[0].a_ref;
3048 yyval.a_expr->expr_type = A1TC_INSTANCE;
3049 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003050 }
3051 break;
3052
Lev Walkin4a4543f2006-10-13 12:37:39 +00003053 case 134:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003054#line 1330 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003055 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003056 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003057 yyval.a_ref = asn1p_ref_new(yylineno);
3058 checkmem(yyval.a_ref);
3059 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00003060 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003061 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003062 }
3063 break;
3064
Lev Walkina9532f42006-09-17 04:52:50 +00003065 case 135:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003066#line 1338 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003067 {
3068 int ret;
3069 yyval.a_ref = asn1p_ref_new(yylineno);
3070 checkmem(yyval.a_ref);
3071 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
3072 checkmem(ret == 0);
3073 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3074 checkmem(ret == 0);
3075 free(yyvsp[-2].tv_str);
3076 }
3077 break;
3078
3079 case 136:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003080#line 1348 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003081 {
3082 int ret;
3083 yyval.a_ref = asn1p_ref_new(yylineno);
3084 checkmem(yyval.a_ref);
3085 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
3086 checkmem(ret == 0);
3087 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3088 checkmem(ret == 0);
3089 free(yyvsp[-2].tv_str);
3090 }
3091 break;
3092
3093 case 137:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003094#line 1358 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003095 {
Lev Walkin9d542d22006-03-14 16:31:37 +00003096 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003097 yyval.a_ref = asn1p_ref_new(yylineno);
3098 checkmem(yyval.a_ref);
3099 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00003100 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003101 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkin9d542d22006-03-14 16:31:37 +00003102 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003103 free(yyvsp[-2].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003104 }
3105 break;
3106
Lev Walkin4a4543f2006-10-13 12:37:39 +00003107 case 138:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003108#line 1368 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003109 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003110 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003111 yyval.a_ref = asn1p_ref_new(yylineno);
3112 checkmem(yyval.a_ref);
3113 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
3114 free(yyvsp[0].tv_str);
Lev Walkin9c974182004-09-15 11:59:51 +00003115 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003116 }
3117 break;
3118
Lev Walkin4a4543f2006-10-13 12:37:39 +00003119 case 139:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003120#line 1376 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003121 {
Lev Walkin9c974182004-09-15 11:59:51 +00003122 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003123 yyval.a_ref = yyvsp[0].a_ref;
3124 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
3125 free(yyvsp[-2].tv_str);
Lev Walkinf15320b2004-06-03 03:38:44 +00003126 checkmem(ret == 0);
3127 /*
3128 * Move the last element infront.
3129 */
3130 {
3131 struct asn1p_ref_component_s tmp_comp;
Lev Walkina00d6b32006-03-21 03:40:38 +00003132 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
3133 memmove(&yyval.a_ref->components[1],
3134 &yyval.a_ref->components[0],
3135 sizeof(yyval.a_ref->components[0])
3136 * (yyval.a_ref->comp_count - 1));
3137 yyval.a_ref->components[0] = tmp_comp;
Lev Walkinf15320b2004-06-03 03:38:44 +00003138 }
Lev Walkin418298d2006-07-13 08:24:20 +00003139 }
3140 break;
3141
Lev Walkin4a4543f2006-10-13 12:37:39 +00003142 case 140:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003143#line 1398 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003144 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003145 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003146 yyval.a_ref = asn1p_ref_new(yylineno);
3147 checkmem(yyval.a_ref);
3148 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
3149 free(yyvsp[0].a_refcomp.name);
Lev Walkinf15320b2004-06-03 03:38:44 +00003150 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003151 }
3152 break;
3153
Lev Walkin4a4543f2006-10-13 12:37:39 +00003154 case 141:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003155#line 1406 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003156 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003157 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003158 yyval.a_ref = yyvsp[-2].a_ref;
3159 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
3160 free(yyvsp[0].a_refcomp.name);
Lev Walkinf15320b2004-06-03 03:38:44 +00003161 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003162 }
3163 break;
3164
Lev Walkin4a4543f2006-10-13 12:37:39 +00003165 case 143:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003166#line 1419 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003167 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003168 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
3169 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00003170 }
3171 break;
3172
Lev Walkin4a4543f2006-10-13 12:37:39 +00003173 case 144:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003174#line 1424 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003175 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003176 yyval.a_refcomp.lex_type = RLT_Amplowercase;
3177 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00003178 }
3179 break;
3180
Lev Walkin4a4543f2006-10-13 12:37:39 +00003181 case 145:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003182#line 1433 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003183 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003184 yyval.a_ref = asn1p_ref_new(yylineno);
3185 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003186 }
3187 break;
3188
Lev Walkin4a4543f2006-10-13 12:37:39 +00003189 case 146:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003190#line 1437 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003191 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003192 yyval.a_ref = yyval.a_ref;
3193 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003194 }
3195 break;
3196
Lev Walkin4a4543f2006-10-13 12:37:39 +00003197 case 147:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003198#line 1441 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003199 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003200 yyval.a_ref = yyval.a_ref;
3201 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003202 }
3203 break;
3204
Lev Walkin4a4543f2006-10-13 12:37:39 +00003205 case 148:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003206#line 1448 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003207 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003208 yyval.a_ref = asn1p_ref_new(yylineno);
3209 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
Lev Walkin418298d2006-07-13 08:24:20 +00003210 }
3211 break;
3212
Lev Walkin4a4543f2006-10-13 12:37:39 +00003213 case 149:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003214#line 1468 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003215 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003216 yyval.a_expr = yyvsp[-2].a_expr;
3217 assert(yyval.a_expr->Identifier == NULL);
3218 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3219 yyval.a_expr->meta_type = AMT_VALUE;
3220 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003221 }
3222 break;
3223
Lev Walkin4a4543f2006-10-13 12:37:39 +00003224 case 152:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003225#line 1480 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003226 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003227 yyval.a_value = asn1p_value_fromint(0);
3228 checkmem(yyval.a_value);
3229 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
3230 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
3231 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003232 }
3233 break;
3234
Lev Walkin4a4543f2006-10-13 12:37:39 +00003235 case 153:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003236#line 1487 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003237 { asn1p_lexer_hack_push_opaque_state(); }
3238 break;
3239
Lev Walkin4a4543f2006-10-13 12:37:39 +00003240 case 154:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003241#line 1487 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003242 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003243 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3244 checkmem(yyval.a_value);
3245 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin418298d2006-07-13 08:24:20 +00003246 }
3247 break;
3248
Lev Walkin4a4543f2006-10-13 12:37:39 +00003249 case 155:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003250#line 1492 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003251 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003252 yyval.a_value = asn1p_value_fromint(0);
3253 checkmem(yyval.a_value);
3254 yyval.a_value->type = ATV_NULL;
Lev Walkin418298d2006-07-13 08:24:20 +00003255 }
3256 break;
3257
Lev Walkin4a4543f2006-10-13 12:37:39 +00003258 case 156:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003259#line 1500 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003260 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003261 yyval.a_value = asn1p_value_fromint(0);
3262 checkmem(yyval.a_value);
3263 yyval.a_value->type = ATV_FALSE;
Lev Walkin418298d2006-07-13 08:24:20 +00003264 }
3265 break;
3266
Lev Walkin4a4543f2006-10-13 12:37:39 +00003267 case 157:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003268#line 1505 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003269 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003270 yyval.a_value = asn1p_value_fromint(0);
3271 checkmem(yyval.a_value);
3272 yyval.a_value->type = ATV_TRUE;
Lev Walkin418298d2006-07-13 08:24:20 +00003273 }
3274 break;
3275
Lev Walkin4a4543f2006-10-13 12:37:39 +00003276 case 158:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003277#line 1510 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003278 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003279 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
3280 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003281 }
3282 break;
3283
Lev Walkin4a4543f2006-10-13 12:37:39 +00003284 case 159:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003285#line 1514 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003286 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003287 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
3288 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003289 }
3290 break;
3291
Lev Walkin4a4543f2006-10-13 12:37:39 +00003292 case 160:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003293#line 1518 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003294 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003295 yyval.a_value = yyval.a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003296 }
3297 break;
3298
Lev Walkin4a4543f2006-10-13 12:37:39 +00003299 case 161:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003300#line 1521 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003301 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00003302 yyval.a_value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003303 }
3304 break;
3305
Lev Walkin4a4543f2006-10-13 12:37:39 +00003306 case 162:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003307#line 1527 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003308 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003309 asn1p_ref_t *ref;
3310 int ret;
3311 ref = asn1p_ref_new(yylineno);
3312 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003313 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003314 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003315 yyval.a_value = asn1p_value_fromref(ref, 0);
3316 checkmem(yyval.a_value);
3317 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003318 }
3319 break;
3320
Lev Walkin4a4543f2006-10-13 12:37:39 +00003321 case 163:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003322#line 1538 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003323 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003324 asn1p_ref_t *ref;
3325 int ret;
3326 ref = asn1p_ref_new(yylineno);
3327 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003328 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00003329 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003330 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003331 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003332 yyval.a_value = asn1p_value_fromref(ref, 0);
3333 checkmem(yyval.a_value);
3334 free(yyvsp[-2].tv_str);
3335 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003336 }
3337 break;
3338
Lev Walkin4a4543f2006-10-13 12:37:39 +00003339 case 164:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003340#line 1556 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003341 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003342 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3343 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003344 }
3345 break;
3346
Lev Walkin4a4543f2006-10-13 12:37:39 +00003347 case 165:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003348#line 1560 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003349 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003350 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3351 checkmem(yyval.a_value);
3352 yyval.a_value->type = ATV_TUPLE;
Lev Walkin418298d2006-07-13 08:24:20 +00003353 }
3354 break;
3355
Lev Walkin4a4543f2006-10-13 12:37:39 +00003356 case 166:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003357#line 1565 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003358 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003359 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3360 checkmem(yyval.a_value);
3361 yyval.a_value->type = ATV_QUADRUPLE;
Lev Walkin418298d2006-07-13 08:24:20 +00003362 }
3363 break;
3364
Lev Walkin4a4543f2006-10-13 12:37:39 +00003365 case 167:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003366#line 1573 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003367 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003368 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
3369 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
3370 checkmem(yyval.tv_opaque.buf);
3371 yyval.tv_opaque.buf[0] = '{';
3372 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
3373 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
3374 free(yyvsp[0].tv_opaque.buf);
Lev Walkin418298d2006-07-13 08:24:20 +00003375 }
3376 break;
3377
Lev Walkin4a4543f2006-10-13 12:37:39 +00003378 case 168:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003379#line 1582 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003380 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003381 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
Lev Walkinf15320b2004-06-03 03:38:44 +00003382 char *p = malloc(newsize + 1);
3383 checkmem(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00003384 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
3385 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00003386 p[newsize] = '\0';
Lev Walkina00d6b32006-03-21 03:40:38 +00003387 free(yyvsp[-1].tv_opaque.buf);
3388 free(yyvsp[0].tv_opaque.buf);
3389 yyval.tv_opaque.buf = p;
3390 yyval.tv_opaque.len = newsize;
Lev Walkin418298d2006-07-13 08:24:20 +00003391 }
3392 break;
3393
Lev Walkin4a4543f2006-10-13 12:37:39 +00003394 case 169:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003395#line 1597 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003396 { yyval.a_type = ASN_BASIC_BOOLEAN; }
3397 break;
3398
Lev Walkin4a4543f2006-10-13 12:37:39 +00003399 case 170:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003400#line 1598 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003401 { yyval.a_type = ASN_BASIC_NULL; }
3402 break;
3403
Lev Walkin4a4543f2006-10-13 12:37:39 +00003404 case 171:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003405#line 1599 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003406 { yyval.a_type = ASN_BASIC_REAL; }
3407 break;
3408
Lev Walkin418298d2006-07-13 08:24:20 +00003409 case 172:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003410#line 1600 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003411 { yyval.a_type = yyvsp[0].a_type; }
Lev Walkin418298d2006-07-13 08:24:20 +00003412 break;
3413
3414 case 173:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003415#line 1601 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003416 { yyval.a_type = ASN_BASIC_OCTET_STRING; }
Lev Walkin418298d2006-07-13 08:24:20 +00003417 break;
3418
3419 case 174:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003420#line 1602 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003421 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
Lev Walkin418298d2006-07-13 08:24:20 +00003422 break;
3423
3424 case 175:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003425#line 1603 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003426 { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
Lev Walkin418298d2006-07-13 08:24:20 +00003427 break;
3428
3429 case 176:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003430#line 1604 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003431 { yyval.a_type = ASN_BASIC_EXTERNAL; }
Lev Walkin418298d2006-07-13 08:24:20 +00003432 break;
3433
3434 case 177:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003435#line 1605 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003436 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
Lev Walkin418298d2006-07-13 08:24:20 +00003437 break;
3438
3439 case 178:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003440#line 1606 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003441 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
Lev Walkin418298d2006-07-13 08:24:20 +00003442 break;
3443
3444 case 179:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003445#line 1607 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003446 { yyval.a_type = ASN_BASIC_UTCTime; }
Lev Walkin866bd7f2006-09-14 10:35:20 +00003447 break;
3448
3449 case 180:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003450#line 1608 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003451 { yyval.a_type = ASN_BASIC_GeneralizedTime; }
Lev Walkin866bd7f2006-09-14 10:35:20 +00003452 break;
3453
3454 case 181:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003455#line 1609 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003456 { yyval.a_type = yyvsp[0].a_type; }
Lev Walkin866bd7f2006-09-14 10:35:20 +00003457 break;
3458
3459 case 182:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003460#line 1616 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003461 { yyval.a_type = ASN_BASIC_INTEGER; }
Lev Walkina9532f42006-09-17 04:52:50 +00003462 break;
3463
3464 case 183:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003465#line 1617 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003466 { yyval.a_type = ASN_BASIC_ENUMERATED; }
3467 break;
3468
3469 case 184:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003470#line 1618 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003471 { yyval.a_type = ASN_BASIC_BIT_STRING; }
3472 break;
3473
3474 case 185:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003475#line 1622 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003476 {
Lev Walkina9532f42006-09-17 04:52:50 +00003477 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003478 checkmem(yyval.a_expr);
3479 yyval.a_expr->expr_type = yyvsp[0].a_type;
3480 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003481 }
3482 break;
3483
Lev Walkin4a4543f2006-10-13 12:37:39 +00003484 case 186:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003485#line 1628 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003486 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003487 if(yyvsp[0].a_expr) {
3488 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinf15320b2004-06-03 03:38:44 +00003489 } else {
Lev Walkina9532f42006-09-17 04:52:50 +00003490 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003491 checkmem(yyval.a_expr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003492 }
Lev Walkina00d6b32006-03-21 03:40:38 +00003493 yyval.a_expr->expr_type = yyvsp[-1].a_type;
3494 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003495 }
3496 break;
3497
Lev Walkin4a4543f2006-10-13 12:37:39 +00003498 case 187:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003499#line 1641 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003500 { yyval.a_type = ASN_STRING_BMPString; }
3501 break;
3502
Lev Walkin4a4543f2006-10-13 12:37:39 +00003503 case 188:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003504#line 1642 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003505 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003506 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00003507 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003508 }
3509 break;
3510
Lev Walkin4a4543f2006-10-13 12:37:39 +00003511 case 189:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003512#line 1646 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003513 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003514 yyval.a_type = ASN_STRING_GraphicString;
Lev Walkin9c974182004-09-15 11:59:51 +00003515 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003516 }
3517 break;
3518
Lev Walkin4a4543f2006-10-13 12:37:39 +00003519 case 190:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003520#line 1650 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003521 { yyval.a_type = ASN_STRING_IA5String; }
3522 break;
3523
Lev Walkin4a4543f2006-10-13 12:37:39 +00003524 case 191:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003525#line 1651 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003526 { yyval.a_type = ASN_STRING_ISO646String; }
3527 break;
3528
Lev Walkin4a4543f2006-10-13 12:37:39 +00003529 case 192:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003530#line 1652 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003531 { yyval.a_type = ASN_STRING_NumericString; }
3532 break;
3533
Lev Walkin4a4543f2006-10-13 12:37:39 +00003534 case 193:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003535#line 1653 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003536 { yyval.a_type = ASN_STRING_PrintableString; }
3537 break;
3538
Lev Walkin4a4543f2006-10-13 12:37:39 +00003539 case 194:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003540#line 1654 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003541 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003542 yyval.a_type = ASN_STRING_T61String;
Lev Walkin9c974182004-09-15 11:59:51 +00003543 fprintf(stderr, "WARNING: T61String is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003544 }
3545 break;
3546
Lev Walkin4a4543f2006-10-13 12:37:39 +00003547 case 195:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003548#line 1658 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003549 { yyval.a_type = ASN_STRING_TeletexString; }
3550 break;
3551
Lev Walkin4a4543f2006-10-13 12:37:39 +00003552 case 196:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003553#line 1659 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003554 { yyval.a_type = ASN_STRING_UniversalString; }
3555 break;
3556
Lev Walkin4a4543f2006-10-13 12:37:39 +00003557 case 197:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003558#line 1660 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003559 { yyval.a_type = ASN_STRING_UTF8String; }
3560 break;
3561
Lev Walkin4a4543f2006-10-13 12:37:39 +00003562 case 198:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003563#line 1661 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003564 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003565 yyval.a_type = ASN_STRING_VideotexString;
Lev Walkin9c974182004-09-15 11:59:51 +00003566 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003567 }
3568 break;
3569
Lev Walkin4a4543f2006-10-13 12:37:39 +00003570 case 199:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003571#line 1665 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003572 { yyval.a_type = ASN_STRING_VisibleString; }
3573 break;
3574
Lev Walkin4a4543f2006-10-13 12:37:39 +00003575 case 200:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003576#line 1666 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003577 { yyval.a_type = ASN_STRING_ObjectDescriptor; }
3578 break;
3579
Lev Walkin4a4543f2006-10-13 12:37:39 +00003580 case 205:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003581#line 1677 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003582 { yyval.a_constr = 0; }
3583 break;
3584
Lev Walkin4a4543f2006-10-13 12:37:39 +00003585 case 206:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003586#line 1678 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003587 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003588 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003589 }
3590 break;
3591
Lev Walkin4a4543f2006-10-13 12:37:39 +00003592 case 208:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003593#line 1688 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003594 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003595 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003596 }
3597 break;
3598
Lev Walkinc6ab03c2006-10-21 05:54:49 +00003599 case 209:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003600#line 1691 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003601 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003602 /*
3603 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00003604 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00003605 */
Lev Walkina00d6b32006-03-21 03:40:38 +00003606 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003607 }
3608 break;
3609
Lev Walkinc6ab03c2006-10-21 05:54:49 +00003610 case 210:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003611#line 1701 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003612 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003613 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003614 }
3615 break;
3616
Lev Walkinc6ab03c2006-10-21 05:54:49 +00003617 case 211:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003618#line 1704 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003619 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003620 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003621 }
3622 break;
3623
Lev Walkinc6ab03c2006-10-21 05:54:49 +00003624 case 212:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003625#line 1710 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003626 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00003627 yyval.a_constr = asn1p_constraint_new(yylineno);
3628 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin418298d2006-07-13 08:24:20 +00003629 }
3630 break;
3631
Lev Walkinc6ab03c2006-10-21 05:54:49 +00003632 case 213:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003633#line 1714 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003634 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003635 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003636 }
3637 break;
3638
Lev Walkinc6ab03c2006-10-21 05:54:49 +00003639 case 214:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003640#line 1717 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003641 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003642 asn1p_constraint_t *ct;
3643 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003644 ct->type = ACT_EL_EXT;
Lev Walkina00d6b32006-03-21 03:40:38 +00003645 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin418298d2006-07-13 08:24:20 +00003646 }
3647 break;
3648
Lev Walkinc6ab03c2006-10-21 05:54:49 +00003649 case 215:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003650#line 1723 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003651 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003652 asn1p_constraint_t *ct;
3653 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003654 ct->type = ACT_EL_EXT;
Lev Walkina00d6b32006-03-21 03:40:38 +00003655 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
3656 ct = yyval.a_constr;
3657 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003658 }
3659 break;
3660
Lev Walkinc6ab03c2006-10-21 05:54:49 +00003661 case 216:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003662#line 1731 "asn1p_y.y"
Lev Walkinc6ab03c2006-10-21 05:54:49 +00003663 {
3664 yyval.a_constr = yyvsp[0].a_constr;
3665 }
3666 break;
3667
Lev Walkin4a4543f2006-10-13 12:37:39 +00003668 case 218:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003669#line 1738 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003670 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003671 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003672 }
3673 break;
3674
Lev Walkin4a4543f2006-10-13 12:37:39 +00003675 case 220:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003676#line 1745 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003677 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003678 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003679 }
3680 break;
3681
Lev Walkin4a4543f2006-10-13 12:37:39 +00003682 case 222:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003683#line 1752 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003684 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003685 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003686 }
3687 break;
3688
Lev Walkin4a4543f2006-10-13 12:37:39 +00003689 case 224:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003690#line 1760 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003691 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003692 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003693 }
3694 break;
3695
Lev Walkin4a4543f2006-10-13 12:37:39 +00003696 case 225:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003697#line 1766 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003698 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003699 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003700 yyval.a_constr = asn1p_constraint_new(yylineno);
3701 checkmem(yyval.a_constr);
3702 yyval.a_constr->type = yyvsp[-3].a_ctype;
3703 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003704 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003705 }
3706 break;
3707
Lev Walkin4a4543f2006-10-13 12:37:39 +00003708 case 226:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003709#line 1774 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003710 {
Lev Walkinf59d0752004-08-18 04:59:12 +00003711 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003712 yyval.a_constr = asn1p_constraint_new(yylineno);
3713 checkmem(yyval.a_constr);
3714 yyval.a_constr->type = ACT_CA_SET;
3715 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkinf59d0752004-08-18 04:59:12 +00003716 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003717 }
3718 break;
3719
Lev Walkin4a4543f2006-10-13 12:37:39 +00003720 case 227:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003721#line 1782 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003722 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003723 yyval.a_constr = asn1p_constraint_new(yylineno);
3724 checkmem(yyval.a_constr);
3725 yyval.a_constr->type = ACT_EL_VALUE;
3726 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003727 }
3728 break;
3729
Lev Walkin4a4543f2006-10-13 12:37:39 +00003730 case 228:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003731#line 1788 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003732 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003733 yyval.a_constr = asn1p_constraint_new(yylineno);
3734 checkmem(yyval.a_constr);
3735 yyval.a_constr->type = ACT_EL_TYPE;
3736 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003737 }
3738 break;
3739
Lev Walkinf1727152006-09-21 01:50:37 +00003740 case 229:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003741#line 1794 "asn1p_y.y"
Lev Walkinf1727152006-09-21 01:50:37 +00003742 {
3743 yyval.a_constr = asn1p_constraint_new(yylineno);
3744 checkmem(yyval.a_constr);
3745 yyval.a_constr->type = yyvsp[-1].a_ctype;
3746 yyval.a_constr->range_start = yyvsp[-2].a_value;
Lev Walkin4a4543f2006-10-13 12:37:39 +00003747 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkinf1727152006-09-21 01:50:37 +00003748 }
3749 break;
3750
3751 case 230:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003752#line 1801 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003753 {
3754 yyval.a_constr = asn1p_constraint_new(yylineno);
3755 checkmem(yyval.a_constr);
3756 yyval.a_constr->type = yyvsp[-1].a_ctype;
3757 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3758 yyval.a_constr->range_stop = yyvsp[0].a_value;
3759 yyval.a_constr->range_start->type = ATV_MIN;
3760 }
3761 break;
3762
3763 case 231:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003764#line 1809 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003765 {
3766 yyval.a_constr = asn1p_constraint_new(yylineno);
3767 checkmem(yyval.a_constr);
3768 yyval.a_constr->type = yyvsp[-1].a_ctype;
3769 yyval.a_constr->range_start = yyvsp[-2].a_value;
3770 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3771 yyval.a_constr->range_stop->type = ATV_MAX;
3772 }
3773 break;
3774
3775 case 232:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003776#line 1817 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00003777 {
3778 yyval.a_constr = asn1p_constraint_new(yylineno);
3779 checkmem(yyval.a_constr);
3780 yyval.a_constr->type = yyvsp[-1].a_ctype;
3781 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3782 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3783 yyval.a_constr->range_start->type = ATV_MIN;
3784 yyval.a_constr->range_stop->type = ATV_MAX;
3785 }
3786 break;
3787
Lev Walkin4a4543f2006-10-13 12:37:39 +00003788 case 233:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003789#line 1826 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00003790 {
3791 yyval.a_constr = yyvsp[0].a_constr;
3792 }
3793 break;
3794
Lev Walkin4a4543f2006-10-13 12:37:39 +00003795 case 234:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003796#line 1829 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003797 {
Lev Walkin5c541f12006-10-18 18:40:14 +00003798 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003799 }
3800 break;
3801
Lev Walkin4a4543f2006-10-13 12:37:39 +00003802 case 235:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003803#line 1835 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003804 {
Lev Walkin5c541f12006-10-18 18:40:14 +00003805 yyval.a_constr = asn1p_constraint_new(yylineno);
3806 yyval.a_constr->type = ACT_CT_PATTERN;
3807 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003808 }
3809 break;
3810
Lev Walkin4a4543f2006-10-13 12:37:39 +00003811 case 236:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003812#line 1840 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003813 {
Lev Walkin5c541f12006-10-18 18:40:14 +00003814 asn1p_ref_t *ref;
3815 yyval.a_constr = asn1p_constraint_new(yylineno);
3816 yyval.a_constr->type = ACT_CT_PATTERN;
3817 ref = asn1p_ref_new(yylineno);
3818 asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3819 yyval.a_constr->value = asn1p_value_fromref(ref, 0);
3820 }
3821 break;
3822
3823 case 237:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003824#line 1851 "asn1p_y.y"
Lev Walkin5c541f12006-10-18 18:40:14 +00003825 {
3826 yyval.a_ctype = ACT_CT_SIZE;
3827 }
3828 break;
3829
3830 case 238:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003831#line 1854 "asn1p_y.y"
Lev Walkin5c541f12006-10-18 18:40:14 +00003832 {
3833 yyval.a_ctype = ACT_CT_FROM;
3834 }
3835 break;
3836
3837 case 239:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003838#line 1860 "asn1p_y.y"
Lev Walkin5c541f12006-10-18 18:40:14 +00003839 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003840 yyval.a_value = asn1p_value_fromint(0);
3841 checkmem(yyval.a_value);
3842 yyval.a_value->type = ATV_FALSE;
Lev Walkin418298d2006-07-13 08:24:20 +00003843 }
3844 break;
3845
Lev Walkin5c541f12006-10-18 18:40:14 +00003846 case 240:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003847#line 1865 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003848 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003849 yyval.a_value = asn1p_value_fromint(1);
3850 checkmem(yyval.a_value);
3851 yyval.a_value->type = ATV_TRUE;
Lev Walkin418298d2006-07-13 08:24:20 +00003852 }
3853 break;
3854
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003855 case 244:
3856#line 1873 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003857 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003858 asn1p_ref_t *ref;
3859 int ret;
3860 ref = asn1p_ref_new(yylineno);
3861 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003862 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003863 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003864 yyval.a_value = asn1p_value_fromref(ref, 0);
3865 checkmem(yyval.a_value);
3866 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003867 }
3868 break;
3869
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003870 case 245:
3871#line 1887 "asn1p_y.y"
3872 {
3873 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
3874 checkmem(yyval.a_value);
3875 }
3876 break;
3877
3878 case 246:
3879#line 1891 "asn1p_y.y"
3880 {
3881 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
3882 checkmem(yyval.a_value);
3883 }
3884 break;
3885
3886 case 247:
3887#line 1898 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003888 {
Lev Walkinc8092cb2005-02-18 16:34:21 +00003889 asn1p_ref_t *ref;
3890 int ret;
3891 ref = asn1p_ref_new(yylineno);
3892 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003893 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003894 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003895 yyval.a_value = asn1p_value_fromref(ref, 0);
3896 checkmem(yyval.a_value);
3897 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003898 }
3899 break;
3900
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003901 case 248:
3902#line 1912 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003903 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003904 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003905 }
3906 break;
3907
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003908 case 249:
3909#line 1915 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003910 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003911 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003912 }
3913 break;
3914
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003915 case 250:
3916#line 1921 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003917 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003918 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003919 }
3920 break;
3921
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003922 case 251:
3923#line 1924 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003924 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003925 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003926 }
3927 break;
3928
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003929 case 252:
3930#line 1930 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003931 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003932 yyval.a_constr = asn1p_constraint_new(yylineno);
3933 checkmem(yyval.a_constr);
3934 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin418298d2006-07-13 08:24:20 +00003935 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 1);
3936 }
3937 break;
3938
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003939 case 253:
3940#line 1936 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003941 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003942 yyval.a_constr = asn1p_constraint_new(yylineno);
3943 checkmem(yyval.a_constr);
3944 yyval.a_constr->type = ACT_EL_VALUE;
3945 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3946 yyval.a_constr->presence = yyvsp[0].a_pres;
3947 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003948 }
3949 break;
3950
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003951 case 254:
3952#line 1950 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003953 { yyval.a_pres = ACPRES_DEFAULT; }
3954 break;
3955
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003956 case 255:
3957#line 1951 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003958 { yyval.a_pres = yyvsp[0].a_pres; }
3959 break;
3960
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003961 case 256:
3962#line 1955 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003963 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003964 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin418298d2006-07-13 08:24:20 +00003965 }
3966 break;
3967
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003968 case 257:
3969#line 1958 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003970 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003971 yyval.a_pres = ACPRES_ABSENT;
Lev Walkin418298d2006-07-13 08:24:20 +00003972 }
3973 break;
3974
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003975 case 258:
3976#line 1961 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003977 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003978 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkin418298d2006-07-13 08:24:20 +00003979 }
3980 break;
3981
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003982 case 262:
3983#line 1976 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00003984 { asn1p_lexer_hack_push_opaque_state(); }
3985 break;
3986
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003987 case 263:
3988#line 1976 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003989 {
Lev Walkina9532f42006-09-17 04:52:50 +00003990 yyval.a_constr = asn1p_constraint_new(yylineno);
3991 checkmem(yyval.a_constr);
3992 yyval.a_constr->type = ACT_CT_CTDBY;
3993 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3994 checkmem(yyval.a_constr->value);
3995 yyval.a_constr->value->type = ATV_UNPARSED;
Lev Walkin418298d2006-07-13 08:24:20 +00003996 }
3997 break;
3998
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00003999 case 264:
4000#line 1987 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00004001 {
4002 yyval.a_constr = asn1p_constraint_new(yylineno);
4003 yyval.a_constr->type = ACT_CT_CTNG;
4004 yyval.a_constr->value = asn1p_value_fromtype(yyvsp[0].a_expr);
4005 }
4006 break;
4007
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004008 case 265:
4009#line 1995 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00004010 { yyval.a_ctype = ACT_EL_RANGE; }
4011 break;
4012
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004013 case 266:
4014#line 1996 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00004015 { yyval.a_ctype = ACT_EL_RLRANGE; }
4016 break;
4017
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004018 case 267:
4019#line 1997 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00004020 { yyval.a_ctype = ACT_EL_LLRANGE; }
4021 break;
4022
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004023 case 268:
4024#line 1998 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00004025 { yyval.a_ctype = ACT_EL_ULRANGE; }
4026 break;
4027
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004028 case 269:
4029#line 2001 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004030 {
4031 yyval.a_constr = yyvsp[0].a_constr;
4032 }
4033 break;
4034
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004035 case 270:
4036#line 2004 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004037 {
4038 yyval.a_constr = yyvsp[0].a_constr;
4039 }
4040 break;
4041
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004042 case 271:
4043#line 2013 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004044 {
Lev Walkinf15320b2004-06-03 03:38:44 +00004045 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
4046 asn1p_constraint_t *ct;
4047 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00004048 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00004049 checkmem(ret == 0);
4050 ct = asn1p_constraint_new(yylineno);
Lev Walkina00d6b32006-03-21 03:40:38 +00004051 checkmem(yyval.a_constr);
Lev Walkinf15320b2004-06-03 03:38:44 +00004052 ct->type = ACT_EL_VALUE;
4053 ct->value = asn1p_value_fromref(ref, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00004054 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00004055 }
4056 break;
4057
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004058 case 272:
4059#line 2028 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004060 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004061 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00004062 }
4063 break;
4064
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004065 case 273:
4066#line 2034 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004067 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004068 yyval.a_constr = asn1p_constraint_new(yylineno);
4069 checkmem(yyval.a_constr);
4070 yyval.a_constr->type = ACT_EL_VALUE;
4071 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00004072 }
4073 break;
4074
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004075 case 274:
4076#line 2040 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004077 {
Lev Walkinf15320b2004-06-03 03:38:44 +00004078 asn1p_constraint_t *ct;
4079 ct = asn1p_constraint_new(yylineno);
4080 checkmem(ct);
4081 ct->type = ACT_EL_VALUE;
Lev Walkina00d6b32006-03-21 03:40:38 +00004082 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
4083 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin418298d2006-07-13 08:24:20 +00004084 }
4085 break;
4086
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004087 case 275:
4088#line 2054 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004089 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004090 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
Lev Walkinf15320b2004-06-03 03:38:44 +00004091 int ret;
4092 *p = '@';
Lev Walkina00d6b32006-03-21 03:40:38 +00004093 strcpy(p + 1, yyvsp[0].tv_str);
4094 yyval.a_ref = asn1p_ref_new(yylineno);
4095 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00004096 checkmem(ret == 0);
4097 free(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00004098 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00004099 }
4100 break;
4101
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004102 case 276:
4103#line 2065 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004104 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004105 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
Lev Walkinf15320b2004-06-03 03:38:44 +00004106 int ret;
4107 p[0] = '@';
4108 p[1] = '.';
Lev Walkina00d6b32006-03-21 03:40:38 +00004109 strcpy(p + 2, yyvsp[0].tv_str);
4110 yyval.a_ref = asn1p_ref_new(yylineno);
4111 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00004112 checkmem(ret == 0);
4113 free(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00004114 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00004115 }
4116 break;
4117
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004118 case 277:
4119#line 2081 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004120 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004121 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004122 }
4123 break;
4124
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004125 case 278:
4126#line 2084 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004127 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004128 int l1 = strlen(yyvsp[-2].tv_str);
4129 int l3 = strlen(yyvsp[0].tv_str);
4130 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
4131 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
4132 yyval.tv_str[l1] = '.';
4133 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
4134 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin418298d2006-07-13 08:24:20 +00004135 }
4136 break;
4137
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004138 case 279:
4139#line 2102 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004140 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004141 yyval.a_marker.flags = EM_NOMARK;
4142 yyval.a_marker.default_value = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00004143 }
4144 break;
4145
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004146 case 280:
4147#line 2106 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004148 { yyval.a_marker = yyvsp[0].a_marker; }
4149 break;
4150
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004151 case 281:
4152#line 2110 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004153 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004154 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
4155 yyval.a_marker.default_value = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00004156 }
4157 break;
4158
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004159 case 282:
4160#line 2114 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004161 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004162 yyval.a_marker.flags = EM_DEFAULT;
4163 yyval.a_marker.default_value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004164 }
4165 break;
4166
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004167 case 283:
4168#line 2137 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004169 {
Lev Walkina9532f42006-09-17 04:52:50 +00004170 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004171 checkmem(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004172 }
4173 break;
4174
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004175 case 284:
4176#line 2141 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004177 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004178 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00004179 }
4180 break;
4181
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004182 case 285:
4183#line 2147 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004184 {
Lev Walkina9532f42006-09-17 04:52:50 +00004185 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004186 checkmem(yyval.a_expr);
4187 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004188 }
4189 break;
4190
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004191 case 286:
4192#line 2152 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004193 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004194 yyval.a_expr = yyvsp[-2].a_expr;
4195 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004196 }
4197 break;
4198
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004199 case 287:
4200#line 2159 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004201 {
Lev Walkina9532f42006-09-17 04:52:50 +00004202 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004203 checkmem(yyval.a_expr);
4204 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4205 yyval.a_expr->meta_type = AMT_VALUE;
4206 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004207 }
4208 break;
4209
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004210 case 288:
4211#line 2166 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004212 {
4213 yyval.a_expr = NEW_EXPR();
4214 checkmem(yyval.a_expr);
4215 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4216 yyval.a_expr->meta_type = AMT_VALUE;
4217 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4218 yyval.a_expr->value = yyvsp[-1].a_value;
4219 }
4220 break;
4221
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004222 case 289:
4223#line 2174 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004224 {
4225 yyval.a_expr = NEW_EXPR();
4226 checkmem(yyval.a_expr);
4227 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4228 yyval.a_expr->meta_type = AMT_VALUE;
4229 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4230 yyval.a_expr->value = yyvsp[-1].a_value;
4231 }
4232 break;
4233
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004234 case 290:
4235#line 2182 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004236 {
Lev Walkina9532f42006-09-17 04:52:50 +00004237 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004238 checkmem(yyval.a_expr);
4239 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4240 yyval.a_expr->meta_type = AMT_VALUE;
4241 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004242 }
4243 break;
4244
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004245 case 291:
4246#line 2189 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004247 {
Lev Walkina9532f42006-09-17 04:52:50 +00004248 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004249 checkmem(yyval.a_expr);
4250 yyval.a_expr->Identifier = strdup("...");
4251 checkmem(yyval.a_expr->Identifier);
4252 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
4253 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin418298d2006-07-13 08:24:20 +00004254 }
4255 break;
4256
Lev Walkin5c541f12006-10-18 18:40:14 +00004257 case 292:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004258#line 2200 "asn1p_y.y"
4259 {
4260 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4261 checkmem(yyval.a_value);
4262 }
4263 break;
4264
4265 case 293:
4266#line 2204 "asn1p_y.y"
4267 {
4268 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4269 checkmem(yyval.a_value);
4270 }
4271 break;
4272
4273 case 295:
4274#line 2212 "asn1p_y.y"
Lev Walkinadf863f2006-09-05 16:18:34 +00004275 {
4276 yyval.a_value = asn1p_value_fromdouble(yyvsp[0].a_dbl);
4277 checkmem(yyval.a_value);
4278 }
Lev Walkin418298d2006-07-13 08:24:20 +00004279 break;
4280
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004281 case 296:
4282#line 2243 "asn1p_y.y"
Lev Walkinadf863f2006-09-05 16:18:34 +00004283 { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); }
4284 break;
4285
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004286 case 297:
4287#line 2244 "asn1p_y.y"
Lev Walkinadf863f2006-09-05 16:18:34 +00004288 { yyval.a_tag = yyvsp[0].a_tag; }
4289 break;
4290
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004291 case 298:
4292#line 2248 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004293 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004294 yyval.a_tag = yyvsp[-1].a_tag;
4295 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin418298d2006-07-13 08:24:20 +00004296 }
4297 break;
4298
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004299 case 299:
4300#line 2255 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004301 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004302 yyval.a_tag = yyvsp[-2].a_tag;
4303 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin418298d2006-07-13 08:24:20 +00004304 }
4305 break;
4306
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004307 case 300:
4308#line 2261 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004309 { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; }
4310 break;
4311
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004312 case 301:
4313#line 2262 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004314 { yyval.a_tag.tag_class = TC_UNIVERSAL; }
Lev Walkin418298d2006-07-13 08:24:20 +00004315 break;
4316
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004317 case 302:
4318#line 2263 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004319 { yyval.a_tag.tag_class = TC_APPLICATION; }
Lev Walkin418298d2006-07-13 08:24:20 +00004320 break;
4321
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004322 case 303:
4323#line 2264 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004324 { yyval.a_tag.tag_class = TC_PRIVATE; }
Lev Walkin418298d2006-07-13 08:24:20 +00004325 break;
4326
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004327 case 304:
4328#line 2268 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004329 { yyval.a_tag.tag_mode = TM_DEFAULT; }
Lev Walkin418298d2006-07-13 08:24:20 +00004330 break;
4331
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004332 case 305:
4333#line 2269 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004334 { yyval.a_tag.tag_mode = TM_IMPLICIT; }
Lev Walkin418298d2006-07-13 08:24:20 +00004335 break;
4336
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004337 case 306:
4338#line 2270 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004339 { yyval.a_tag.tag_mode = TM_EXPLICIT; }
Lev Walkin866bd7f2006-09-14 10:35:20 +00004340 break;
4341
Lev Walkin5c541f12006-10-18 18:40:14 +00004342 case 307:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004343#line 2274 "asn1p_y.y"
4344 {
4345 checkmem(yyvsp[0].tv_str);
4346 yyval.tv_str = yyvsp[0].tv_str;
4347 }
Lev Walkin5c541f12006-10-18 18:40:14 +00004348 break;
4349
4350 case 308:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004351#line 2278 "asn1p_y.y"
Lev Walkin5c541f12006-10-18 18:40:14 +00004352 {
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004353 checkmem(yyvsp[0].tv_str);
Lev Walkin5c541f12006-10-18 18:40:14 +00004354 yyval.tv_str = yyvsp[0].tv_str;
4355 }
4356 break;
4357
4358 case 309:
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004359#line 2286 "asn1p_y.y"
4360 {
4361 checkmem(yyvsp[0].tv_str);
4362 yyval.tv_str = yyvsp[0].tv_str;
4363 }
4364 break;
4365
4366 case 310:
4367#line 2293 "asn1p_y.y"
4368 { yyval.tv_str = 0; }
4369 break;
4370
4371 case 311:
4372#line 2294 "asn1p_y.y"
4373 {
4374 yyval.tv_str = yyvsp[0].tv_str;
4375 }
4376 break;
4377
4378 case 312:
4379#line 2300 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00004380 {
4381 checkmem(yyvsp[0].tv_str);
4382 yyval.tv_str = yyvsp[0].tv_str;
4383 }
4384 break;
4385
Lev Walkin418298d2006-07-13 08:24:20 +00004386
4387 }
4388
4389/* Line 1016 of /usr/local/share/bison/yacc.c. */
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004390#line 4391 "asn1p_y.c"
Lev Walkinf15320b2004-06-03 03:38:44 +00004391
4392 yyvsp -= yylen;
4393 yyssp -= yylen;
Lev Walkinf15320b2004-06-03 03:38:44 +00004394
Lev Walkin418298d2006-07-13 08:24:20 +00004395
4396#if YYDEBUG
Lev Walkina00d6b32006-03-21 03:40:38 +00004397 if (yydebug)
4398 {
Lev Walkin418298d2006-07-13 08:24:20 +00004399 short *yyssp1 = yyss - 1;
4400 YYFPRINTF (stderr, "state stack now");
4401 while (yyssp1 != yyssp)
4402 YYFPRINTF (stderr, " %d", *++yyssp1);
4403 YYFPRINTF (stderr, "\n");
Lev Walkina00d6b32006-03-21 03:40:38 +00004404 }
4405#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00004406
4407 *++yyvsp = yyval;
4408
Lev Walkinf15320b2004-06-03 03:38:44 +00004409
Lev Walkin418298d2006-07-13 08:24:20 +00004410 /* Now `shift' the result of the reduction. Determine what state
4411 that goes to, based on the state we popped back to and the rule
4412 number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00004413
4414 yyn = yyr1[yyn];
4415
Lev Walkin418298d2006-07-13 08:24:20 +00004416 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
4417 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00004418 yystate = yytable[yystate];
4419 else
Lev Walkin418298d2006-07-13 08:24:20 +00004420 yystate = yydefgoto[yyn - YYNTOKENS];
Lev Walkinf15320b2004-06-03 03:38:44 +00004421
4422 goto yynewstate;
4423
Lev Walkinf15320b2004-06-03 03:38:44 +00004424
Lev Walkin418298d2006-07-13 08:24:20 +00004425/*------------------------------------.
4426| yyerrlab -- here on detecting error |
4427`------------------------------------*/
4428yyerrlab:
4429 /* If not already recovering from an error, report this error. */
4430 if (!yyerrstatus)
Lev Walkinf15320b2004-06-03 03:38:44 +00004431 {
4432 ++yynerrs;
Lev Walkin418298d2006-07-13 08:24:20 +00004433#if YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00004434 yyn = yypact[yystate];
4435
Lev Walkin418298d2006-07-13 08:24:20 +00004436 if (YYPACT_NINF < yyn && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00004437 {
Lev Walkin418298d2006-07-13 08:24:20 +00004438 YYSIZE_T yysize = 0;
4439 int yytype = YYTRANSLATE (yychar);
4440 char *yymsg;
4441 int yyx, yycount;
Lev Walkinf15320b2004-06-03 03:38:44 +00004442
Lev Walkin418298d2006-07-13 08:24:20 +00004443 yycount = 0;
4444 /* Start YYX at -YYN if negative to avoid negative indexes in
4445 YYCHECK. */
4446 for (yyx = yyn < 0 ? -yyn : 0;
4447 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
4448 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
4449 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
4450 yysize += yystrlen ("parse error, unexpected ") + 1;
4451 yysize += yystrlen (yytname[yytype]);
4452 yymsg = (char *) YYSTACK_ALLOC (yysize);
4453 if (yymsg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00004454 {
Lev Walkin418298d2006-07-13 08:24:20 +00004455 char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
4456 yyp = yystpcpy (yyp, yytname[yytype]);
Lev Walkina00d6b32006-03-21 03:40:38 +00004457
Lev Walkin418298d2006-07-13 08:24:20 +00004458 if (yycount < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00004459 {
Lev Walkin418298d2006-07-13 08:24:20 +00004460 yycount = 0;
4461 for (yyx = yyn < 0 ? -yyn : 0;
4462 yyx < (int) (sizeof (yytname) / sizeof (char *));
4463 yyx++)
4464 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
Lev Walkina00d6b32006-03-21 03:40:38 +00004465 {
Lev Walkin418298d2006-07-13 08:24:20 +00004466 const char *yyq = ! yycount ? ", expecting " : " or ";
4467 yyp = yystpcpy (yyp, yyq);
4468 yyp = yystpcpy (yyp, yytname[yyx]);
4469 yycount++;
Lev Walkina00d6b32006-03-21 03:40:38 +00004470 }
Lev Walkinf15320b2004-06-03 03:38:44 +00004471 }
Lev Walkin418298d2006-07-13 08:24:20 +00004472 yyerror (yymsg);
4473 YYSTACK_FREE (yymsg);
Lev Walkinf15320b2004-06-03 03:38:44 +00004474 }
4475 else
Lev Walkin418298d2006-07-13 08:24:20 +00004476 yyerror ("parse error; also virtual memory exhausted");
Lev Walkinf15320b2004-06-03 03:38:44 +00004477 }
4478 else
4479#endif /* YYERROR_VERBOSE */
Lev Walkin418298d2006-07-13 08:24:20 +00004480 yyerror ("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00004481 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004482 goto yyerrlab1;
Lev Walkinf15320b2004-06-03 03:38:44 +00004483
Lev Walkin418298d2006-07-13 08:24:20 +00004484
4485/*----------------------------------------------------.
4486| yyerrlab1 -- error raised explicitly by an action. |
4487`----------------------------------------------------*/
4488yyerrlab1:
Lev Walkinf15320b2004-06-03 03:38:44 +00004489 if (yyerrstatus == 3)
4490 {
Lev Walkin418298d2006-07-13 08:24:20 +00004491 /* If just tried and failed to reuse lookahead token after an
4492 error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00004493
Lev Walkin418298d2006-07-13 08:24:20 +00004494 /* Return failure if at end of input. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004495 if (yychar == YYEOF)
Lev Walkin418298d2006-07-13 08:24:20 +00004496 {
4497 /* Pop the error token. */
4498 YYPOPSTACK;
4499 /* Pop the rest of the stack. */
4500 while (yyssp > yyss)
4501 {
4502 YYDPRINTF ((stderr, "Error: popping "));
4503 YYDSYMPRINT ((stderr,
4504 yystos[*yyssp],
4505 *yyvsp));
4506 YYDPRINTF ((stderr, "\n"));
4507 yydestruct (yystos[*yyssp], *yyvsp);
4508 YYPOPSTACK;
4509 }
4510 YYABORT;
4511 }
Lev Walkinf15320b2004-06-03 03:38:44 +00004512
Lev Walkin418298d2006-07-13 08:24:20 +00004513 YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
4514 yychar, yytname[yychar1]));
4515 yydestruct (yychar1, yylval);
Lev Walkina00d6b32006-03-21 03:40:38 +00004516 yychar = YYEMPTY;
Lev Walkinf15320b2004-06-03 03:38:44 +00004517 }
4518
Lev Walkin418298d2006-07-13 08:24:20 +00004519 /* Else will try to reuse lookahead token after shifting the error
4520 token. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004521
Lev Walkin418298d2006-07-13 08:24:20 +00004522 yyerrstatus = 3; /* Each real token shifted decrements this. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004523
Lev Walkin418298d2006-07-13 08:24:20 +00004524 for (;;)
Lev Walkina00d6b32006-03-21 03:40:38 +00004525 {
Lev Walkin418298d2006-07-13 08:24:20 +00004526 yyn = yypact[yystate];
4527 if (yyn != YYPACT_NINF)
4528 {
4529 yyn += YYTERROR;
4530 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
4531 {
4532 yyn = yytable[yyn];
4533 if (0 < yyn)
4534 break;
4535 }
4536 }
4537
4538 /* Pop the current state because it cannot handle the error token. */
4539 if (yyssp == yyss)
4540 YYABORT;
4541
4542 YYDPRINTF ((stderr, "Error: popping "));
4543 YYDSYMPRINT ((stderr,
4544 yystos[*yyssp], *yyvsp));
4545 YYDPRINTF ((stderr, "\n"));
4546
4547 yydestruct (yystos[yystate], *yyvsp);
4548 yyvsp--;
4549 yystate = *--yyssp;
4550
4551
4552#if YYDEBUG
4553 if (yydebug)
4554 {
4555 short *yyssp1 = yyss - 1;
4556 YYFPRINTF (stderr, "Error: state stack now");
4557 while (yyssp1 != yyssp)
4558 YYFPRINTF (stderr, " %d", *++yyssp1);
4559 YYFPRINTF (stderr, "\n");
4560 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004561#endif
Lev Walkina00d6b32006-03-21 03:40:38 +00004562 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004563
Lev Walkinf15320b2004-06-03 03:38:44 +00004564 if (yyn == YYFINAL)
4565 YYACCEPT;
4566
Lev Walkin418298d2006-07-13 08:24:20 +00004567 YYDPRINTF ((stderr, "Shifting error token, "));
Lev Walkina00d6b32006-03-21 03:40:38 +00004568
Lev Walkinf15320b2004-06-03 03:38:44 +00004569 *++yyvsp = yylval;
Lev Walkin418298d2006-07-13 08:24:20 +00004570
Lev Walkinf15320b2004-06-03 03:38:44 +00004571
4572 yystate = yyn;
4573 goto yynewstate;
4574
Lev Walkina00d6b32006-03-21 03:40:38 +00004575
Lev Walkin418298d2006-07-13 08:24:20 +00004576/*-------------------------------------.
4577| yyacceptlab -- YYACCEPT comes here. |
4578`-------------------------------------*/
4579yyacceptlab:
4580 yyresult = 0;
4581 goto yyreturn;
4582
4583/*-----------------------------------.
4584| yyabortlab -- YYABORT comes here. |
4585`-----------------------------------*/
4586yyabortlab:
4587 yyresult = 1;
4588 goto yyreturn;
4589
4590#ifndef yyoverflow
4591/*----------------------------------------------.
4592| yyoverflowlab -- parser overflow comes here. |
4593`----------------------------------------------*/
4594yyoverflowlab:
4595 yyerror ("parser stack overflow");
4596 yyresult = 2;
4597 /* Fall through. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004598#endif
Lev Walkin418298d2006-07-13 08:24:20 +00004599
4600yyreturn:
4601#ifndef yyoverflow
4602 if (yyss != yyssa)
4603 YYSTACK_FREE (yyss);
4604#endif
4605 return yyresult;
Lev Walkinf15320b2004-06-03 03:38:44 +00004606}
Lev Walkin418298d2006-07-13 08:24:20 +00004607
4608
Lev Walkin1c8d5aa2006-10-27 05:37:39 +00004609#line 2306 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00004610
4611
4612
4613/*
4614 * Convert Xstring ('0101'B or '5'H) to the binary vector.
4615 */
4616static asn1p_value_t *
4617_convert_bitstring2binary(char *str, int base) {
4618 asn1p_value_t *val;
4619 int slen;
4620 int memlen;
4621 int baselen;
4622 int bits;
4623 uint8_t *binary_vector;
4624 uint8_t *bv_ptr;
4625 uint8_t cur_val;
4626
4627 assert(str);
4628 assert(str[0] == '\'');
4629
4630 switch(base) {
4631 case 'B':
4632 baselen = 1;
4633 break;
4634 case 'H':
4635 baselen = 4;
4636 break;
4637 default:
4638 assert(base == 'B' || base == 'H');
4639 errno = EINVAL;
4640 return NULL;
4641 }
4642
4643 slen = strlen(str);
4644 assert(str[slen - 1] == base);
4645 assert(str[slen - 2] == '\'');
4646
4647 memlen = slen / (8 / baselen); /* Conservative estimate */
4648
4649 bv_ptr = binary_vector = malloc(memlen + 1);
4650 if(bv_ptr == NULL)
4651 /* ENOMEM */
4652 return NULL;
4653
4654 cur_val = 0;
4655 bits = 0;
4656 while(*(++str) != '\'') {
4657 switch(baselen) {
4658 case 1:
4659 switch(*str) {
4660 case '1':
4661 cur_val |= 1 << (7 - (bits % 8));
4662 case '0':
4663 break;
4664 default:
4665 assert(!"_y UNREACH1");
4666 case ' ': case '\r': case '\n':
4667 continue;
4668 }
4669 break;
4670 case 4:
4671 switch(*str) {
4672 case '0': case '1': case '2': case '3': case '4':
4673 case '5': case '6': case '7': case '8': case '9':
4674 cur_val |= (*str - '0') << (4 - (bits % 8));
4675 break;
4676 case 'A': case 'B': case 'C':
4677 case 'D': case 'E': case 'F':
4678 cur_val |= ((*str - 'A') + 10)
4679 << (4 - (bits % 8));
4680 break;
4681 default:
4682 assert(!"_y UNREACH2");
4683 case ' ': case '\r': case '\n':
4684 continue;
4685 }
4686 break;
4687 }
4688
4689 bits += baselen;
4690 if((bits % 8) == 0) {
4691 *bv_ptr++ = cur_val;
4692 cur_val = 0;
4693 }
4694 }
4695
4696 *bv_ptr = cur_val;
4697 assert((bv_ptr - binary_vector) <= memlen);
4698
4699 val = asn1p_value_frombits(binary_vector, bits, 0);
4700 if(val == NULL) {
4701 free(binary_vector);
4702 }
4703
4704 return val;
4705}
4706
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00004707/*
4708 * For unnamed types (used in old X.208 compliant modules)
4709 * generate some sort of interim names, to not to force human being to fix
4710 * the specification's compliance to modern ASN.1 standards.
4711 */
4712static void
4713_fixup_anonymous_identifier(asn1p_expr_t *expr) {
4714 char *p;
4715 assert(expr->Identifier == 0);
4716
4717 /*
4718 * Try to figure out the type name
4719 * without going too much into details
4720 */
4721 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
4722 if(expr->reference && expr->reference->comp_count > 0)
4723 expr->Identifier = expr->reference->components[0].name;
4724
4725 fprintf(stderr,
4726 "WARNING: Line %d: expected lower-case member identifier, "
4727 "found an unnamed %s.\n"
4728 "WARNING: Obsolete X.208 syntax detected, "
4729 "please give the member a name.\n",
4730 yylineno, expr->Identifier ? expr->Identifier : "type");
4731
4732 if(!expr->Identifier)
4733 expr->Identifier = "unnamed";
4734 expr->Identifier = strdup(expr->Identifier);
4735 assert(expr->Identifier);
4736 /* Make a lowercase identifier from the type name */
4737 for(p = expr->Identifier; *p; p++) {
4738 switch(*p) {
4739 case 'A' ... 'Z': *p += 32; break;
4740 case ' ': *p = '_'; break;
4741 case '-': *p = '_'; break;
4742 }
4743 }
4744 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
4745 "Name clash may occur later.\n",
4746 expr->Identifier);
4747}
4748
Lev Walkinf15320b2004-06-03 03:38:44 +00004749int
4750yyerror(const char *msg) {
Lev Walkin9d542d22006-03-14 16:31:37 +00004751 extern char *asn1p_text;
Lev Walkinf15320b2004-06-03 03:38:44 +00004752 fprintf(stderr,
4753 "ASN.1 grammar parse error "
4754 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00004755 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00004756 return -1;
4757}
4758
Lev Walkin418298d2006-07-13 08:24:20 +00004759