blob: ba23ed2e66c0e1b43ac31aeba34a08c627cff5d0 [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 Walkinb36317c2005-08-12 10:09:10 +0000315#define checkmem(ptr) do { \
316 if(!(ptr)) \
317 return yyerror("Memory failure"); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000318 } while(0)
319
Lev Walkinb36317c2005-08-12 10:09:10 +0000320#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
321 if(arg1->type != constr_type) { \
322 int __ret; \
323 root = asn1p_constraint_new(yylineno); \
324 checkmem(root); \
325 root->type = constr_type; \
326 __ret = asn1p_constraint_insert(root, \
327 arg1); \
328 checkmem(__ret == 0); \
329 } else { \
330 root = arg1; \
331 } \
332 if(arg2) { \
333 int __ret \
334 = asn1p_constraint_insert(root, arg2); \
335 checkmem(__ret == 0); \
336 } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000337 } while(0)
338
339
Lev Walkin418298d2006-07-13 08:24:20 +0000340
341/* Enabling traces. */
342#ifndef YYDEBUG
343# define YYDEBUG 0
344#endif
345
346/* Enabling verbose error messages. */
347#ifdef YYERROR_VERBOSE
348# undef YYERROR_VERBOSE
349# define YYERROR_VERBOSE 1
350#else
351# define YYERROR_VERBOSE 0
352#endif
353
354#ifndef YYSTYPE
Lev Walkinef625402005-09-05 05:17:57 +0000355#line 72 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +0000356typedef union {
Lev Walkinf15320b2004-06-03 03:38:44 +0000357 asn1p_t *a_grammar;
358 asn1p_module_flags_e a_module_flags;
359 asn1p_module_t *a_module;
360 asn1p_expr_type_e a_type; /* ASN.1 Type */
361 asn1p_expr_t *a_expr; /* Constructed collection */
362 asn1p_constraint_t *a_constr; /* Constraint */
363 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
364 asn1p_xports_t *a_xports; /* IMports/EXports */
Lev Walkinb36317c2005-08-12 10:09:10 +0000365 struct AssignedIdentifier a_aid; /* Assigned Identifier */
Lev Walkinf15320b2004-06-03 03:38:44 +0000366 asn1p_oid_t *a_oid; /* Object Identifier */
367 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
368 struct asn1p_type_tag_s a_tag; /* A tag */
369 asn1p_ref_t *a_ref; /* Reference to custom type */
370 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
371 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
372 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
373 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
374 struct asn1p_param_s a_parg; /* A parameter argument */
375 asn1p_paramlist_t *a_plist; /* A pargs list */
Lev Walkin9c974182004-09-15 11:59:51 +0000376 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
Lev Walkinf15320b2004-06-03 03:38:44 +0000377 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
Lev Walkind21c5052004-09-29 13:18:09 +0000378 asn1c_integer_t a_int;
Lev Walkinadf863f2006-09-05 16:18:34 +0000379 double a_dbl;
Lev Walkinf15320b2004-06-03 03:38:44 +0000380 char *tv_str;
381 struct {
382 char *buf;
383 int len;
384 } tv_opaque;
385 struct {
386 char *name;
387 struct asn1p_type_tag_s tag;
388 } tv_nametag;
Lev Walkin418298d2006-07-13 08:24:20 +0000389} yystype;
390/* Line 193 of /usr/local/share/bison/yacc.c. */
Lev Walkinadf863f2006-09-05 16:18:34 +0000391#line 392 "asn1p_y.c"
Lev Walkin418298d2006-07-13 08:24:20 +0000392# define YYSTYPE yystype
393# define YYSTYPE_IS_TRIVIAL 1
Lev Walkinf15320b2004-06-03 03:38:44 +0000394#endif
395
Lev Walkin418298d2006-07-13 08:24:20 +0000396#ifndef YYLTYPE
397typedef struct yyltype
398{
399 int first_line;
400 int first_column;
401 int last_line;
402 int last_column;
403} yyltype;
404# define YYLTYPE yyltype
405# define YYLTYPE_IS_TRIVIAL 1
406#endif
407
408/* Copy the second part of user declarations. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000409
410
Lev Walkin418298d2006-07-13 08:24:20 +0000411/* Line 213 of /usr/local/share/bison/yacc.c. */
Lev Walkinadf863f2006-09-05 16:18:34 +0000412#line 413 "asn1p_y.c"
Lev Walkinf15320b2004-06-03 03:38:44 +0000413
Lev Walkin418298d2006-07-13 08:24:20 +0000414#if ! defined (yyoverflow) || YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +0000415
Lev Walkin418298d2006-07-13 08:24:20 +0000416/* The parser invokes alloca or malloc; define the necessary symbols. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000417
Lev Walkin418298d2006-07-13 08:24:20 +0000418# if YYSTACK_USE_ALLOCA
419# define YYSTACK_ALLOC alloca
420# else
421# ifndef YYSTACK_USE_ALLOCA
422# if defined (alloca) || defined (_ALLOCA_H)
423# define YYSTACK_ALLOC alloca
424# else
425# ifdef __GNUC__
426# define YYSTACK_ALLOC __builtin_alloca
427# endif
428# endif
429# endif
430# endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000431
Lev Walkin418298d2006-07-13 08:24:20 +0000432# ifdef YYSTACK_ALLOC
433 /* Pacify GCC's `empty if-body' warning. */
434# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
435# else
436# if defined (__STDC__) || defined (__cplusplus)
437# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
438# define YYSIZE_T size_t
439# endif
440# define YYSTACK_ALLOC malloc
441# define YYSTACK_FREE free
442# endif
443#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
444
445
446#if (! defined (yyoverflow) \
447 && (! defined (__cplusplus) \
448 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
449
450/* A type that is properly aligned for any stack member. */
451union yyalloc
452{
453 short yyss;
454 YYSTYPE yyvs;
455 };
456
457/* The size of the maximum gap between one aligned stack and the next. */
458# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
459
460/* The size of an array large to enough to hold all stacks, each with
461 N elements. */
462# define YYSTACK_BYTES(N) \
463 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
464 + YYSTACK_GAP_MAX)
465
466/* Copy COUNT objects from FROM to TO. The source and destination do
467 not overlap. */
468# ifndef YYCOPY
469# if 1 < __GNUC__
470# define YYCOPY(To, From, Count) \
471 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
472# else
473# define YYCOPY(To, From, Count) \
474 do \
475 { \
476 register YYSIZE_T yyi; \
477 for (yyi = 0; yyi < (Count); yyi++) \
478 (To)[yyi] = (From)[yyi]; \
479 } \
480 while (0)
481# endif
482# endif
483
484/* Relocate STACK from its old location to the new one. The
485 local variables YYSIZE and YYSTACKSIZE give the old and new number of
486 elements in the stack, and YYPTR gives the new location of the
487 stack. Advance YYPTR to a properly aligned location for the next
488 stack. */
489# define YYSTACK_RELOCATE(Stack) \
490 do \
491 { \
492 YYSIZE_T yynewbytes; \
493 YYCOPY (&yyptr->Stack, Stack, yysize); \
494 Stack = &yyptr->Stack; \
495 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
496 yyptr += yynewbytes / sizeof (*yyptr); \
497 } \
498 while (0)
Lev Walkinf15320b2004-06-03 03:38:44 +0000499
500#endif
501
Lev Walkin418298d2006-07-13 08:24:20 +0000502#if defined (__STDC__) || defined (__cplusplus)
503 typedef signed char yysigned_char;
Lev Walkinf15320b2004-06-03 03:38:44 +0000504#else
Lev Walkin418298d2006-07-13 08:24:20 +0000505 typedef short yysigned_char;
Lev Walkinf15320b2004-06-03 03:38:44 +0000506#endif
507
Lev Walkin418298d2006-07-13 08:24:20 +0000508/* YYFINAL -- State number of the termination state. */
509#define YYFINAL 7
Lev Walkinadf863f2006-09-05 16:18:34 +0000510#define YYLAST 803
Lev Walkin418298d2006-07-13 08:24:20 +0000511
512/* YYNTOKENS -- Number of terminals. */
Lev Walkinadf863f2006-09-05 16:18:34 +0000513#define YYNTOKENS 121
Lev Walkin418298d2006-07-13 08:24:20 +0000514/* YYNNTS -- Number of nonterminals. */
Lev Walkinadf863f2006-09-05 16:18:34 +0000515#define YYNNTS 109
Lev Walkin418298d2006-07-13 08:24:20 +0000516/* YYNRULES -- Number of rules. */
Lev Walkinadf863f2006-09-05 16:18:34 +0000517#define YYNRULES 293
Lev Walkin418298d2006-07-13 08:24:20 +0000518/* YYNRULES -- Number of states. */
Lev Walkinadf863f2006-09-05 16:18:34 +0000519#define YYNSTATES 450
Lev Walkin418298d2006-07-13 08:24:20 +0000520
521/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
522#define YYUNDEFTOK 2
Lev Walkinadf863f2006-09-05 16:18:34 +0000523#define YYMAXUTOK 360
Lev Walkin418298d2006-07-13 08:24:20 +0000524
525#define YYTRANSLATE(X) \
526 ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
527
528/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
529static const unsigned char yytranslate[] =
530{
531 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
532 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
533 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinadf863f2006-09-05 16:18:34 +0000534 2, 2, 2, 117, 2, 2, 2, 2, 2, 2,
535 110, 111, 2, 2, 113, 2, 118, 2, 2, 2,
536 2, 2, 2, 2, 2, 2, 2, 2, 114, 112,
537 119, 2, 2, 2, 120, 2, 2, 2, 2, 2,
Lev Walkin418298d2006-07-13 08:24:20 +0000538 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
539 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinadf863f2006-09-05 16:18:34 +0000540 2, 115, 2, 116, 102, 2, 2, 2, 2, 2,
Lev Walkin418298d2006-07-13 08:24:20 +0000541 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
542 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinadf863f2006-09-05 16:18:34 +0000543 2, 2, 2, 108, 104, 109, 2, 2, 2, 2,
Lev Walkin418298d2006-07-13 08:24:20 +0000544 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
545 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
546 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
547 2, 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,
550 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
551 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
552 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
553 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
554 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
555 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
556 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
557 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
558 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
559 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
560 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
561 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
562 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
563 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
564 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
565 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
Lev Walkinadf863f2006-09-05 16:18:34 +0000566 95, 96, 97, 98, 99, 100, 101, 103, 105, 106,
567 107
Lev Walkin418298d2006-07-13 08:24:20 +0000568};
569
570#if YYDEBUG
571/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
572 YYRHS. */
573static const unsigned short yyprhs[] =
574{
575 0, 0, 3, 5, 7, 10, 19, 20, 22, 26,
576 29, 31, 34, 36, 41, 43, 44, 46, 48, 51,
577 54, 57, 60, 63, 66, 67, 69, 71, 74, 76,
578 78, 80, 82, 84, 85, 89, 91, 95, 98, 100,
579 103, 104, 106, 111, 113, 117, 119, 123, 125, 129,
580 133, 136, 138, 142, 144, 148, 150, 154, 159, 161,
581 163, 168, 172, 176, 183, 190, 192, 196, 198, 202,
582 206, 210, 214, 216, 220, 222, 224, 226, 228, 229,
583 231, 233, 237, 241, 244, 248, 250, 252, 256, 259,
584 261, 263, 269, 270, 272, 274, 278, 281, 286, 290,
585 294, 298, 302, 306, 307, 309, 310, 317, 319, 322,
586 324, 326, 328, 332, 334, 338, 342, 346, 347, 350,
587 352, 357, 362, 367, 374, 381, 383, 388, 392, 394,
588 398, 402, 406, 408, 412, 414, 418, 420, 422, 424,
589 426, 430, 434, 436, 441, 443, 445, 449, 450, 454,
590 456, 458, 460, 462, 464, 466, 468, 470, 474, 476,
591 478, 480, 482, 485, 487, 489, 491, 493, 496, 499,
592 501, 503, 506, 509, 511, 513, 515, 517, 519, 522,
593 524, 527, 529, 531, 533, 535, 537, 539, 541, 543,
594 545, 547, 549, 551, 553, 555, 557, 559, 561, 563,
595 565, 566, 568, 570, 575, 579, 584, 586, 588, 592,
596 598, 600, 604, 608, 612, 616, 621, 625, 627, 629,
597 633, 637, 641, 645, 647, 649, 650, 656, 658, 661,
598 664, 668, 670, 672, 674, 676, 678, 680, 682, 684,
599 688, 694, 696, 700, 702, 706, 707, 709, 711, 713,
600 715, 717, 719, 723, 728, 730, 734, 737, 741, 743,
601 747, 748, 750, 752, 755, 758, 762, 764, 768, 770,
Lev Walkinadf863f2006-09-05 16:18:34 +0000602 775, 780, 782, 784, 786, 788, 790, 792, 793, 795,
603 798, 803, 804, 806, 808, 810, 811, 813, 815, 817,
604 819, 821, 822, 824
Lev Walkin418298d2006-07-13 08:24:20 +0000605};
606
607/* YYRHS -- A `-1'-separated list of the rules' RHS. */
608static const short yyrhs[] =
609{
Lev Walkinadf863f2006-09-05 16:18:34 +0000610 122, 0, -1, 123, -1, 124, -1, 123, 124, -1,
611 226, 125, 39, 129, 3, 26, 132, 44, -1, -1,
612 126, -1, 108, 127, 109, -1, 108, 109, -1, 128,
613 -1, 127, 128, -1, 229, -1, 229, 110, 10, 111,
614 -1, 10, -1, -1, 130, -1, 131, -1, 130, 131,
615 -1, 46, 89, -1, 57, 89, -1, 25, 89, -1,
616 48, 58, -1, 16, 62, -1, -1, 133, -1, 134,
617 -1, 133, 134, -1, 136, -1, 142, -1, 148, -1,
618 178, -1, 146, -1, -1, 43, 16, 135, -1, 188,
619 -1, 59, 137, 112, -1, 59, 51, -1, 139, -1,
620 137, 139, -1, -1, 126, -1, 140, 51, 226, 138,
621 -1, 141, -1, 140, 113, 141, -1, 226, -1, 226,
622 108, 109, -1, 229, -1, 47, 143, 112, -1, 47,
623 22, 112, -1, 47, 112, -1, 144, -1, 143, 113,
624 144, -1, 226, -1, 226, 108, 109, -1, 229, -1,
625 108, 195, 109, -1, 226, 147, 3, 145, -1, 187,
626 -1, 172, -1, 172, 108, 151, 109, -1, 226, 3,
627 168, -1, 226, 3, 158, -1, 226, 108, 149, 109,
628 3, 168, -1, 226, 108, 149, 109, 3, 158, -1,
629 150, -1, 149, 113, 150, -1, 226, -1, 226, 114,
630 229, -1, 226, 114, 226, -1, 185, 114, 229, -1,
631 185, 114, 226, -1, 152, -1, 151, 113, 152, -1,
632 168, -1, 181, -1, 229, -1, 145, -1, -1, 154,
633 -1, 155, -1, 154, 113, 155, -1, 229, 168, 214,
634 -1, 168, 214, -1, 35, 73, 168, -1, 167, -1,
635 157, -1, 156, 113, 157, -1, 229, 168, -1, 167,
636 -1, 168, -1, 33, 108, 160, 109, 162, -1, -1,
637 93, -1, 161, -1, 160, 113, 161, -1, 17, 214,
638 -1, 18, 168, 159, 214, -1, 18, 176, 214, -1,
639 18, 177, 214, -1, 17, 176, 214, -1, 17, 168,
640 214, -1, 17, 177, 214, -1, -1, 163, -1, -1,
641 100, 87, 108, 164, 165, 109, -1, 166, -1, 165,
642 166, -1, 4, -1, 19, -1, 175, -1, 115, 165,
643 116, -1, 107, -1, 107, 117, 182, -1, 107, 117,
644 219, -1, 221, 170, 192, -1, -1, 169, 171, -1,
645 147, -1, 32, 108, 156, 109, -1, 83, 108, 153,
646 109, -1, 84, 108, 153, 109, -1, 83, 192, 73,
647 228, 221, 170, -1, 84, 192, 73, 228, 221, 170,
648 -1, 23, -1, 23, 40, 30, 229, -1, 61, 73,
649 172, -1, 15, -1, 15, 118, 226, -1, 227, 118,
650 226, -1, 15, 118, 229, -1, 227, -1, 227, 118,
651 173, -1, 174, -1, 173, 118, 174, -1, 175, -1,
652 17, -1, 18, -1, 17, -1, 176, 118, 17, -1,
653 176, 118, 18, -1, 16, -1, 229, 147, 3, 179,
654 -1, 181, -1, 182, -1, 229, 114, 179, -1, -1,
655 108, 180, 184, -1, 68, -1, 50, -1, 91, -1,
656 6, -1, 8, -1, 183, -1, 219, -1, 229, -1,
657 226, 118, 229, -1, 7, -1, 13, -1, 14, -1,
658 5, -1, 184, 5, -1, 29, -1, 68, -1, 81,
659 -1, 186, -1, 72, 86, -1, 70, 56, -1, 82,
660 -1, 49, -1, 41, 76, -1, 31, 86, -1, 96,
661 -1, 52, -1, 188, -1, 63, -1, 45, -1, 27,
662 86, -1, 185, -1, 186, 216, -1, 28, -1, 53,
663 -1, 54, -1, 55, -1, 64, -1, 69, -1, 79,
664 -1, 88, -1, 90, -1, 95, -1, 97, -1, 98,
665 -1, 99, -1, 71, -1, 104, -1, 105, -1, 102,
666 -1, 103, -1, 101, -1, -1, 193, -1, 194, -1,
667 85, 110, 195, 111, -1, 110, 195, 111, -1, 194,
668 110, 195, 111, -1, 107, -1, 196, -1, 196, 113,
669 107, -1, 196, 113, 107, 113, 196, -1, 197, -1,
670 22, 101, 197, -1, 196, 189, 197, -1, 196, 190,
671 197, -1, 197, 191, 197, -1, 200, 110, 195, 111,
672 -1, 110, 195, 111, -1, 201, -1, 202, -1, 201,
673 199, 201, -1, 66, 199, 201, -1, 201, 199, 65,
674 -1, 66, 199, 65, -1, 208, -1, 203, -1, -1,
675 36, 30, 108, 198, 184, -1, 106, -1, 106, 119,
676 -1, 119, 106, -1, 119, 106, 119, -1, 85, -1,
677 51, -1, 50, -1, 91, -1, 220, -1, 183, -1,
678 229, -1, 226, -1, 100, 34, 194, -1, 100, 35,
679 108, 204, 109, -1, 205, -1, 204, 113, 205, -1,
680 107, -1, 229, 192, 206, -1, -1, 207, -1, 78,
681 -1, 20, -1, 74, -1, 209, -1, 210, -1, 108,
682 226, 109, -1, 209, 108, 211, 109, -1, 212, -1,
683 211, 113, 212, -1, 120, 213, -1, 120, 118, 213,
684 -1, 229, -1, 213, 118, 229, -1, -1, 215, -1,
685 74, -1, 38, 179, -1, 108, 109, -1, 108, 217,
686 109, -1, 218, -1, 217, 113, 218, -1, 229, -1,
687 229, 110, 219, 111, -1, 229, 110, 182, 111, -1,
688 219, -1, 107, -1, 10, -1, 11, -1, 219, -1,
689 12, -1, -1, 222, -1, 223, 225, -1, 115, 224,
690 10, 116, -1, -1, 94, -1, 24, -1, 80, -1,
691 -1, 57, -1, 46, -1, 15, -1, 16, -1, 16,
692 -1, -1, 229, -1, 9, -1
Lev Walkin418298d2006-07-13 08:24:20 +0000693};
694
695/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
696static const unsigned short yyrline[] =
697{
Lev Walkinadf863f2006-09-05 16:18:34 +0000698 0, 326, 326, 332, 338, 354, 379, 381, 384, 388,
699 393, 400, 408, 413, 417, 426, 428, 436, 440, 448,
700 452, 455, 458, 462, 482, 484, 492, 496, 528, 532,
701 541, 548, 561, 569, 568, 582, 594, 605, 610, 616,
702 622, 624, 627, 638, 644, 650, 657, 663, 671, 675,
703 678, 685, 691, 697, 704, 710, 719, 721, 731, 745,
704 755, 771, 781, 797, 803, 810, 820, 830, 835, 842,
705 849, 857, 867, 873, 879, 883, 891, 902, 924, 926,
706 928, 934, 940, 948, 954, 961, 966, 972, 978, 984,
707 987, 993, 1003, 1005, 1008, 1016, 1023, 1036, 1047, 1057,
708 1068, 1078, 1089, 1100, 1102, 1109, 1107, 1116, 1121, 1127,
709 1132, 1135, 1139, 1144, 1153, 1162, 1173, 1195, 1202, 1221,
710 1225, 1231, 1237, 1243, 1253, 1263, 1269, 1280, 1294, 1303,
711 1313, 1323, 1333, 1341, 1362, 1371, 1380, 1382, 1389, 1396,
712 1402, 1406, 1412, 1432, 1442, 1444, 1445, 1452, 1452, 1457,
713 1464, 1470, 1475, 1479, 1483, 1486, 1491, 1503, 1520, 1525,
714 1530, 1563, 1573, 1587, 1589, 1590, 1591, 1592, 1593, 1594,
715 1595, 1596, 1597, 1598, 1599, 1600, 1606, 1608, 1609, 1612,
716 1619, 1631, 1633, 1637, 1641, 1642, 1643, 1644, 1645, 1649,
717 1650, 1651, 1652, 1656, 1657, 1664, 1664, 1665, 1665, 1666,
718 1668, 1670, 1675, 1679, 1688, 1692, 1697, 1702, 1705, 1711,
719 1721, 1725, 1728, 1731, 1734, 1739, 1748, 1756, 1762, 1768,
720 1775, 1783, 1791, 1800, 1803, 1807, 1806, 1817, 1819, 1820,
721 1821, 1824, 1828, 1833, 1839, 1844, 1845, 1846, 1859, 1873,
722 1877, 1882, 1886, 1891, 1898, 1911, 1913, 1916, 1920, 1923,
723 1928, 1932, 1940, 1955, 1961, 1968, 1981, 1993, 2008, 2012,
724 2029, 2034, 2037, 2042, 2064, 2069, 2074, 2080, 2086, 2094,
725 2102, 2110, 2117, 2127, 2132, 2138, 2140, 2170, 2172, 2175,
726 2182, 2188, 2190, 2191, 2192, 2195, 2197, 2198, 2201, 2206,
727 2213, 2220, 2222, 2227
Lev Walkin418298d2006-07-13 08:24:20 +0000728};
729#endif
730
731#if YYDEBUG || YYERROR_VERBOSE
732/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
733 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
734static const char *const yytname[] =
735{
736 "$end", "error", "$undefined", "TOK_PPEQ", "TOK_whitespace", "TOK_opaque",
737 "TOK_bstring", "TOK_cstring", "TOK_hstring", "TOK_identifier",
Lev Walkinadf863f2006-09-05 16:18:34 +0000738 "TOK_number", "TOK_number_negative", "TOK_realnumber", "TOK_tuple",
739 "TOK_quadruple", "TOK_typereference", "TOK_capitalreference",
740 "TOK_typefieldreference", "TOK_valuefieldreference", "TOK_Literal",
741 "TOK_ABSENT", "TOK_ABSTRACT_SYNTAX", "TOK_ALL", "TOK_ANY",
742 "TOK_APPLICATION", "TOK_AUTOMATIC", "TOK_BEGIN", "TOK_BIT",
743 "TOK_BMPString", "TOK_BOOLEAN", "TOK_BY", "TOK_CHARACTER", "TOK_CHOICE",
744 "TOK_CLASS", "TOK_COMPONENT", "TOK_COMPONENTS", "TOK_CONSTRAINED",
745 "TOK_CONTAINING", "TOK_DEFAULT", "TOK_DEFINITIONS", "TOK_DEFINED",
746 "TOK_EMBEDDED", "TOK_ENCODED", "TOK_ENCODING_CONTROL", "TOK_END",
747 "TOK_ENUMERATED", "TOK_EXPLICIT", "TOK_EXPORTS", "TOK_EXTENSIBILITY",
748 "TOK_EXTERNAL", "TOK_FALSE", "TOK_FROM", "TOK_GeneralizedTime",
749 "TOK_GeneralString", "TOK_GraphicString", "TOK_IA5String",
750 "TOK_IDENTIFIER", "TOK_IMPLICIT", "TOK_IMPLIED", "TOK_IMPORTS",
751 "TOK_INCLUDES", "TOK_INSTANCE", "TOK_INSTRUCTIONS", "TOK_INTEGER",
752 "TOK_ISO646String", "TOK_MAX", "TOK_MIN", "TOK_MINUS_INFINITY",
753 "TOK_NULL", "TOK_NumericString", "TOK_OBJECT", "TOK_ObjectDescriptor",
754 "TOK_OCTET", "TOK_OF", "TOK_OPTIONAL", "TOK_PATTERN", "TOK_PDV",
755 "TOK_PLUS_INFINITY", "TOK_PRESENT", "TOK_PrintableString",
756 "TOK_PRIVATE", "TOK_REAL", "TOK_RELATIVE_OID", "TOK_SEQUENCE",
757 "TOK_SET", "TOK_SIZE", "TOK_STRING", "TOK_SYNTAX", "TOK_T61String",
758 "TOK_TAGS", "TOK_TeletexString", "TOK_TRUE", "TOK_TYPE_IDENTIFIER",
759 "TOK_UNIQUE", "TOK_UNIVERSAL", "TOK_UniversalString", "TOK_UTCTime",
760 "TOK_UTF8String", "TOK_VideotexString", "TOK_VisibleString", "TOK_WITH",
761 "TOK_EXCEPT", "'^'", "TOK_INTERSECTION", "'|'", "TOK_UNION",
762 "TOK_TwoDots", "TOK_ThreeDots", "'{'", "'}'", "'('", "')'", "';'",
763 "','", "':'", "'['", "']'", "'!'", "'.'", "'<'", "'@'", "$accept",
764 "ParsedGrammar", "ModuleList", "ModuleSpecification",
765 "optObjectIdentifier", "ObjectIdentifier", "ObjectIdentifierBody",
766 "ObjectIdentifierElement", "optModuleSpecificationFlags",
767 "ModuleSpecificationFlags", "ModuleSpecificationFlag",
768 "optModuleSpecificationBody", "ModuleSpecificationBody",
769 "ModuleSpecificationElement", "@1", "ImportsDefinition",
770 "ImportsBundleSet", "AssignedIdentifier", "ImportsBundle",
771 "ImportsList", "ImportsElement", "ExportsDefinition", "ExportsBody",
772 "ExportsElement", "ValueSet", "ValueSetTypeAssignment", "DefinedType",
773 "DataTypeReference", "ParameterArgumentList", "ParameterArgumentName",
774 "ActualParameterList", "ActualParameter", "optComponentTypeLists",
775 "ComponentTypeLists", "ComponentType", "AlternativeTypeLists",
776 "AlternativeType", "ObjectClass", "optUnique", "FieldSpec",
777 "ClassField", "optWithSyntax", "WithSyntax", "@2", "WithSyntaxList",
778 "WithSyntaxToken", "ExtensionAndException", "Type",
Lev Walkin418298d2006-07-13 08:24:20 +0000779 "NSTD_IndirectMarker", "TypeDeclaration", "TypeDeclarationSet",
780 "ComplexTypeReference", "ComplexTypeReferenceAmpList",
781 "ComplexTypeReferenceElement", "PrimitiveFieldReference", "FieldName",
782 "DefinedObjectClass", "ValueDefinition", "Value", "@3", "SimpleValue",
783 "DefinedValue", "RestrictedCharacterStringValue", "Opaque",
784 "BasicTypeId", "BasicTypeId_UniverationCompatible", "BasicType",
785 "BasicString", "Union", "Intersection", "Except", "optConstraints",
786 "Constraints", "SetOfConstraints", "ElementSetSpecs", "ElementSetSpec",
787 "ConstraintSubtypeElement", "@4", "ConstraintRangeSpec",
788 "ConstraintSpec", "SingleValue", "ContainedSubtype",
789 "InnerTypeConstraint", "WithComponentsList", "WithComponentsElement",
790 "optPresenceConstraint", "PresenceConstraint", "TableConstraint",
791 "SimpleTableConstraint", "ComponentRelationConstraint",
792 "AtNotationList", "AtNotationElement", "ComponentIdList", "optMarker",
793 "Marker", "UniverationDefinition", "UniverationList",
Lev Walkinadf863f2006-09-05 16:18:34 +0000794 "UniverationElement", "SignedNumber", "RealValue", "optTag", "Tag",
795 "TagTypeValue", "TagClass", "TagPlicit", "TypeRefName",
796 "ObjectClassReference", "optIdentifier", "Identifier", 0
Lev Walkin418298d2006-07-13 08:24:20 +0000797};
798#endif
799
800# ifdef YYPRINT
801/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
802 token YYLEX-NUM. */
803static const unsigned short yytoknum[] =
804{
805 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
806 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
807 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
808 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
809 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
810 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
811 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
812 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
813 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
814 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
Lev Walkinadf863f2006-09-05 16:18:34 +0000815 355, 356, 94, 357, 124, 358, 359, 360, 123, 125,
816 40, 41, 59, 44, 58, 91, 93, 33, 46, 60,
817 64
Lev Walkin418298d2006-07-13 08:24:20 +0000818};
819# endif
820
821/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
822static const unsigned char yyr1[] =
823{
Lev Walkinadf863f2006-09-05 16:18:34 +0000824 0, 121, 122, 123, 123, 124, 125, 125, 126, 126,
825 127, 127, 128, 128, 128, 129, 129, 130, 130, 131,
826 131, 131, 131, 131, 132, 132, 133, 133, 134, 134,
827 134, 134, 134, 135, 134, 134, 136, 136, 137, 137,
828 138, 138, 139, 140, 140, 141, 141, 141, 142, 142,
829 142, 143, 143, 144, 144, 144, 145, 146, 147, 147,
830 147, 148, 148, 148, 148, 149, 149, 150, 150, 150,
831 150, 150, 151, 151, 152, 152, 152, 152, 153, 153,
832 154, 154, 155, 155, 155, 155, 156, 156, 157, 157,
833 157, 158, 159, 159, 160, 160, 161, 161, 161, 161,
834 161, 161, 161, 162, 162, 164, 163, 165, 165, 166,
835 166, 166, 166, 167, 167, 167, 168, 169, 170, 171,
836 171, 171, 171, 171, 171, 171, 171, 171, 172, 172,
837 172, 172, 172, 172, 173, 173, 174, 175, 175, 176,
838 176, 176, 177, 178, 179, 179, 179, 180, 179, 179,
839 181, 181, 181, 181, 181, 181, 182, 182, 183, 183,
840 183, 184, 184, 185, 185, 185, 185, 185, 185, 185,
841 185, 185, 185, 185, 185, 185, 186, 186, 186, 187,
842 187, 188, 188, 188, 188, 188, 188, 188, 188, 188,
843 188, 188, 188, 188, 188, 189, 189, 190, 190, 191,
844 192, 192, 193, 193, 194, 194, 195, 195, 195, 195,
845 196, 196, 196, 196, 196, 197, 197, 197, 197, 197,
846 197, 197, 197, 197, 197, 198, 197, 199, 199, 199,
847 199, 200, 200, 201, 201, 201, 201, 201, 202, 203,
848 203, 204, 204, 205, 205, 206, 206, 207, 207, 207,
849 208, 208, 209, 210, 211, 211, 212, 212, 213, 213,
850 214, 214, 215, 215, 216, 216, 217, 217, 218, 218,
851 218, 218, 218, 219, 219, 220, 220, 221, 221, 222,
852 223, 224, 224, 224, 224, 225, 225, 225, 226, 226,
853 227, 228, 228, 229
Lev Walkin418298d2006-07-13 08:24:20 +0000854};
855
856/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
857static const unsigned char yyr2[] =
858{
859 0, 2, 1, 1, 2, 8, 0, 1, 3, 2,
860 1, 2, 1, 4, 1, 0, 1, 1, 2, 2,
861 2, 2, 2, 2, 0, 1, 1, 2, 1, 1,
862 1, 1, 1, 0, 3, 1, 3, 2, 1, 2,
863 0, 1, 4, 1, 3, 1, 3, 1, 3, 3,
864 2, 1, 3, 1, 3, 1, 3, 4, 1, 1,
865 4, 3, 3, 6, 6, 1, 3, 1, 3, 3,
866 3, 3, 1, 3, 1, 1, 1, 1, 0, 1,
867 1, 3, 3, 2, 3, 1, 1, 3, 2, 1,
868 1, 5, 0, 1, 1, 3, 2, 4, 3, 3,
869 3, 3, 3, 0, 1, 0, 6, 1, 2, 1,
870 1, 1, 3, 1, 3, 3, 3, 0, 2, 1,
871 4, 4, 4, 6, 6, 1, 4, 3, 1, 3,
872 3, 3, 1, 3, 1, 3, 1, 1, 1, 1,
873 3, 3, 1, 4, 1, 1, 3, 0, 3, 1,
874 1, 1, 1, 1, 1, 1, 1, 3, 1, 1,
875 1, 1, 2, 1, 1, 1, 1, 2, 2, 1,
876 1, 2, 2, 1, 1, 1, 1, 1, 2, 1,
877 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
878 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
879 0, 1, 1, 4, 3, 4, 1, 1, 3, 5,
880 1, 3, 3, 3, 3, 4, 3, 1, 1, 3,
881 3, 3, 3, 1, 1, 0, 5, 1, 2, 2,
882 3, 1, 1, 1, 1, 1, 1, 1, 1, 3,
883 5, 1, 3, 1, 3, 0, 1, 1, 1, 1,
884 1, 1, 3, 4, 1, 3, 2, 3, 1, 3,
885 0, 1, 1, 2, 2, 3, 1, 3, 1, 4,
Lev Walkinadf863f2006-09-05 16:18:34 +0000886 4, 1, 1, 1, 1, 1, 1, 0, 1, 2,
887 4, 0, 1, 1, 1, 0, 1, 1, 1, 1,
888 1, 0, 1, 1
Lev Walkin418298d2006-07-13 08:24:20 +0000889};
890
891/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
892 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
893 means the default is an error. */
894static const unsigned short yydefact[] =
895{
Lev Walkinadf863f2006-09-05 16:18:34 +0000896 0, 288, 289, 0, 2, 3, 6, 1, 4, 0,
897 0, 7, 293, 14, 9, 0, 10, 12, 15, 8,
Lev Walkin418298d2006-07-13 08:24:20 +0000898 11, 0, 0, 0, 0, 0, 0, 0, 16, 17,
899 0, 23, 21, 19, 22, 20, 0, 18, 13, 24,
900 181, 0, 0, 182, 183, 184, 0, 185, 186, 194,
901 187, 188, 189, 190, 191, 192, 193, 0, 25, 26,
902 28, 29, 32, 30, 31, 35, 0, 0, 33, 0,
903 50, 0, 51, 53, 55, 37, 0, 38, 0, 43,
Lev Walkinadf863f2006-09-05 16:18:34 +0000904 45, 47, 5, 27, 277, 128, 290, 0, 163, 0,
Lev Walkin418298d2006-07-13 08:24:20 +0000905 0, 177, 170, 174, 176, 164, 0, 0, 165, 169,
906 173, 0, 0, 59, 179, 166, 58, 175, 132, 0,
907 34, 49, 48, 0, 0, 36, 39, 0, 0, 0,
Lev Walkinadf863f2006-09-05 16:18:34 +0000908 0, 281, 62, 61, 117, 278, 285, 0, 178, 172,
909 171, 168, 167, 0, 65, 0, 166, 67, 0, 277,
Lev Walkin418298d2006-07-13 08:24:20 +0000910 0, 180, 0, 0, 52, 54, 40, 44, 46, 0,
Lev Walkinadf863f2006-09-05 16:18:34 +0000911 283, 284, 282, 0, 0, 200, 287, 286, 279, 129,
Lev Walkin418298d2006-07-13 08:24:20 +0000912 131, 0, 0, 0, 0, 0, 57, 152, 158, 153,
Lev Walkinadf863f2006-09-05 16:18:34 +0000913 273, 274, 159, 160, 150, 151, 77, 0, 72, 74,
Lev Walkin418298d2006-07-13 08:24:20 +0000914 75, 154, 155, 76, 272, 264, 0, 266, 271, 268,
915 137, 138, 133, 134, 136, 130, 149, 147, 143, 144,
Lev Walkinadf863f2006-09-05 16:18:34 +0000916 145, 0, 156, 41, 42, 277, 277, 0, 94, 0,
Lev Walkin418298d2006-07-13 08:24:20 +0000917 125, 0, 0, 200, 200, 119, 118, 0, 0, 116,
Lev Walkinadf863f2006-09-05 16:18:34 +0000918 201, 202, 277, 66, 71, 70, 69, 68, 276, 0,
919 0, 233, 232, 0, 231, 234, 0, 206, 0, 0,
920 236, 0, 207, 210, 0, 217, 218, 224, 223, 250,
921 251, 275, 235, 238, 237, 60, 277, 265, 0, 0,
922 0, 0, 0, 0, 142, 139, 0, 262, 260, 260,
923 260, 96, 261, 92, 260, 260, 103, 0, 280, 0,
924 277, 0, 277, 0, 277, 0, 0, 0, 0, 64,
925 63, 0, 0, 227, 0, 0, 0, 0, 0, 0,
926 56, 197, 198, 195, 196, 0, 0, 0, 199, 0,
927 0, 0, 0, 73, 267, 0, 0, 156, 135, 161,
928 148, 157, 146, 263, 101, 0, 100, 102, 93, 260,
929 98, 99, 0, 91, 104, 95, 0, 113, 0, 86,
930 89, 90, 277, 127, 0, 0, 79, 80, 85, 260,
931 277, 291, 0, 291, 0, 204, 0, 211, 225, 228,
932 229, 222, 220, 239, 0, 252, 216, 208, 212, 213,
933 214, 0, 221, 219, 0, 0, 254, 270, 269, 162,
934 140, 141, 97, 0, 126, 0, 120, 277, 88, 277,
935 121, 277, 83, 260, 277, 292, 122, 277, 203, 205,
936 0, 230, 243, 0, 241, 200, 0, 215, 0, 256,
937 258, 253, 0, 105, 114, 115, 87, 84, 81, 82,
938 117, 117, 226, 240, 0, 245, 209, 257, 0, 255,
939 0, 123, 124, 242, 248, 249, 247, 244, 246, 259,
940 109, 110, 0, 0, 107, 111, 0, 106, 108, 112
Lev Walkin418298d2006-07-13 08:24:20 +0000941};
942
943/* YYDEFGOTO[NTERM-NUM]. */
944static const short yydefgoto[] =
945{
946 -1, 3, 4, 5, 10, 11, 15, 16, 27, 28,
947 29, 57, 58, 59, 110, 60, 76, 204, 77, 78,
948 79, 61, 71, 72, 176, 62, 102, 63, 133, 134,
Lev Walkinadf863f2006-09-05 16:18:34 +0000949 177, 178, 345, 346, 347, 338, 339, 122, 329, 207,
950 208, 333, 334, 430, 443, 444, 348, 349, 154, 155,
951 216, 103, 192, 193, 445, 269, 270, 64, 198, 261,
952 199, 200, 240, 320, 104, 105, 106, 107, 306, 307,
953 309, 219, 220, 221, 241, 242, 243, 400, 295, 244,
954 245, 246, 247, 403, 404, 437, 438, 248, 249, 250,
955 375, 376, 409, 271, 272, 141, 186, 187, 251, 252,
956 124, 125, 126, 153, 158, 253, 108, 394, 254
Lev Walkin418298d2006-07-13 08:24:20 +0000957};
958
959/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
960 STATE-NUM. */
Lev Walkinadf863f2006-09-05 16:18:34 +0000961#define YYPACT_NINF -291
Lev Walkin418298d2006-07-13 08:24:20 +0000962static const short yypact[] =
963{
Lev Walkinadf863f2006-09-05 16:18:34 +0000964 159, -291, -291, 40, 159, -291, -39, -291, -291, 5,
965 47, -291, -291, -291, -291, 17, -291, -22, 252, -291,
966 -291, 85, 84, 51, 59, 109, 87, 190, 252, -291,
967 94, -291, -291, -291, -291, -291, 194, -291, -291, 475,
968 -291, 256, 76, -291, -291, -291, 180, -291, -291, -291,
969 -291, -291, -291, -291, -291, -291, -291, 230, 475, -291,
970 -291, -291, -291, -291, -291, -291, 332, 628, -291, 168,
971 -291, 132, -291, 174, -291, -291, 16, -291, -23, -291,
972 182, -291, -291, -291, 1, 177, -291, 221, -291, 225,
973 242, -291, -291, -291, -291, -291, 265, 237, -291, -291,
974 -291, 704, 340, 248, -291, 249, -291, -291, 240, 359,
975 -291, -291, -291, 155, 255, -291, -291, 159, 155, 257,
976 259, 26, -291, -291, -291, -291, 8, 155, -291, -291,
977 -291, -291, -291, -6, -291, 254, -291, 258, 261, 193,
978 71, -291, 323, 202, -291, -291, -39, -291, -291, 271,
979 -291, -291, -291, 360, 552, -50, -291, -291, -291, -291,
980 -291, 368, 704, 155, 155, 212, -291, -291, -291, -291,
981 -291, -291, -291, -291, -291, -291, -291, 78, -291, -291,
982 -291, -291, -291, -291, -291, -291, 133, -291, -291, 264,
983 -291, -291, 262, -291, -291, -291, -291, -291, -291, -291,
984 -291, 270, 269, -291, -291, 77, 27, 142, -291, 263,
985 335, 281, 317, 156, 184, -291, -291, 282, 212, -291,
986 -291, 283, 1, -291, -291, -291, -291, -291, -291, 290,
987 364, -291, -291, -49, -291, -291, 291, -291, 159, 212,
988 -291, 288, 211, 297, 296, -49, -291, -291, -291, 299,
989 -291, -291, -291, -291, -291, -291, 193, -291, 91, 321,
990 311, 403, 400, 202, -291, -291, 202, -291, -27, 25,
991 -27, -291, -291, 319, 25, -27, 310, 271, -291, 386,
992 37, 318, 70, 344, 70, 345, 212, 312, 212, -291,
993 -291, 450, 313, 305, 320, 226, 315, 324, 325, 322,
994 -291, -291, -291, -291, -291, 329, 450, 450, -291, 450,
995 212, 460, 330, -291, -291, 326, 327, -291, -291, -291,
996 430, -291, -291, -291, -291, 328, -291, -291, -291, -27,
997 -291, -291, 362, -291, -291, -291, 400, 334, 147, -291,
998 -291, -291, 337, -291, 380, 346, 343, -291, -291, -27,
999 337, 400, 349, 400, 365, -291, 366, -291, -291, -291,
1000 356, -291, -291, 283, 10, -291, -291, 367, -291, -291,
1001 -291, 370, -291, -291, -5, 152, -291, -291, -291, -291,
1002 -291, -291, -291, 371, -291, 321, -291, 37, -291, 337,
1003 -291, 4, -291, -27, 337, -291, -291, 337, -291, -291,
1004 403, -291, -291, 172, -291, -50, 432, -291, 400, 369,
1005 -291, -291, 330, -291, -291, -291, -291, -291, -291, -291,
1006 -291, -291, 430, -291, 10, 9, 247, 369, 400, -291,
1007 54, -291, -291, -291, -291, -291, -291, -291, -291, -291,
1008 -291, -291, 54, 57, -291, -291, 34, -291, -291, -291
Lev Walkin418298d2006-07-13 08:24:20 +00001009};
1010
1011/* YYPGOTO[NTERM-NUM]. */
1012static const short yypgoto[] =
1013{
Lev Walkinadf863f2006-09-05 16:18:34 +00001014 -291, -291, -291, 474, -291, 339, -291, 473, -291, -291,
1015 461, -291, -291, 434, -291, -291, -291, -291, 417, -291,
1016 376, -291, -291, 382, 358, -291, -46, -291, -291, 342,
1017 -291, 241, 215, -291, 111, -291, 118, 284, -291, -291,
1018 231, -291, -291, -291, 65, -290, -275, -83, -291, -67,
1019 -291, 228, -291, 251, -133, 306, 307, -291, 33, -291,
1020 -132, -249, -131, 114, -33, -17, -291, -3, -291, -291,
1021 -291, -211, -291, 219, -129, 113, -77, -291, 275, -291,
1022 -247, -291, -291, -291, 97, -291, -291, -291, -291, -291,
1023 -291, 112, 119, -252, -291, -291, -291, 268, -98, -291,
1024 -92, -291, -291, -291, -291, 20, -291, 178, -9
Lev Walkin418298d2006-07-13 08:24:20 +00001025};
1026
1027/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
1028 positive, shift that token. If negative, reduce the rule which
1029 number is the opposite. If zero, do what YYDEFACT says.
1030 If YYTABLE_NINF, parse error. */
1031#define YYTABLE_NINF -261
1032static const short yytable[] =
1033{
Lev Walkinadf863f2006-09-05 16:18:34 +00001034 17, 123, 283, 285, 12, 340, 17, 180, 181, 194,
1035 315, 266, 181, 12, 12, 13, 324, 326, 327, 12,
1036 6, 109, 330, 331, 6, 12, 12, 13, 117, 434,
1037 67, 1, 2, 74, 120, 217, 65, 81, 440, 344,
1038 7, 182, 188, 264, 265, 182, 12, 267, 362, 67,
1039 150, 190, 191, 441, 156, 65, 179, 293, 440, 66,
1040 218, 440, 73, 266, 373, 157, 80, 81, 135, 9,
1041 294, 190, 191, 441, 190, 191, 441, 382, 66, 12,
1042 12, 170, 171, 435, 136, 12, 18, 436, 21, 287,
1043 118, 1, 2, 264, 265, 30, 80, 392, 69, 267,
1044 12, 170, 171, 161, 74, 344, 151, 162, 215, 81,
1045 299, 337, 340, 408, 14, 266, 121, 402, 160, 121,
1046 152, 137, 268, 273, 180, 181, 19, 194, 115, 135,
1047 183, 189, 181, 73, 202, 181, 414, 146, 80, 290,
1048 32, 419, 121, 325, 337, 136, 31, 159, 33, 442,
1049 449, 267, 121, 448, 225, 227, 448, 354, 182, 356,
1050 188, 316, 195, 201, 12, 182, 447, 34, 182, 442,
1051 1, 2, 442, 179, 1, 2, 35, 337, 184, -78,
1052 185, 371, 137, 224, 226, 121, -260, 255, 70, 12,
1053 -260, 256, 121, 36, 425, 1, 2, 341, 184, 167,
1054 168, 169, 12, 170, 171, 38, 172, 173, 167, 168,
1055 169, 12, 170, 171, 357, 172, 173, 1, 2, 168,
1056 39, 12, 170, 171, 228, 172, 173, 1, 2, 368,
1057 369, 75, 370, 168, 229, 12, 170, 171, 228, 172,
1058 173, 217, 257, 174, 112, 113, 258, 183, 230, 189,
1059 317, 276, 174, 321, 202, 277, 386, 202, 298, 388,
1060 387, 411, 231, 232, 282, 412, 218, 393, 22, 217,
1061 196, 342, 68, 350, 82, 350, 231, 23, 233, 201,
1062 111, 423, 114, 201, 175, 424, 201, 415, 205, 206,
1063 119, 361, 284, 175, 218, 127, 322, 234, 24, 323,
1064 25, 165, 420, 235, 341, 421, 417, 128, 121, 26,
1065 197, 129, 236, 301, 302, 303, 304, 235, 130, 237,
1066 238, 131, 239, 132, 305, 296, 297, 384, 190, 191,
1067 12, 170, 171, 85, 86, 84, 1, 2, 1, 2,
1068 190, 191, 395, 138, 395, 380, 381, 85, 86, 301,
1069 302, 303, 304, 431, 432, 405, 139, 140, 142, 87,
1070 40, 88, 143, 89, 145, 410, 148, 149, 163, 165,
1071 209, 222, 164, 90, 259, 279, 317, 91, 342, 278,
1072 260, 92, 350, 263, 93, 43, 44, 45, 262, 280,
1073 281, 291, 286, 288, 292, 94, 47, 300, 308, 410,
1074 95, 48, 96, 49, 97, 201, 310, 312, 319, 12,
1075 332, 50, 328, 98, 99, 405, 336, 351, 353, 439,
1076 51, 358, 52, 355, 359, 218, 360, 53, 100, 54,
1077 55, 56, 364, 366, 365, 379, 367, 377, 378, 168,
1078 101, 12, 170, 171, 228, 172, 173, 1, 2, 383,
1079 374, 385, 121, 389, 229, 390, 391, 168, 396, 12,
1080 170, 171, 228, 172, 173, 1, 2, 168, 230, 12,
1081 170, 171, 228, 172, 173, 401, 398, 399, 8, 413,
1082 406, 407, 231, 232, 12, 203, 230, 428, 20, 37,
1083 1, 2, 83, 116, 147, 144, 166, 313, 233, 352,
1084 231, 232, 418, 40, 223, 416, 289, 446, 335, 343,
1085 231, 318, 274, 275, 422, 363, 233, 234, 41, 426,
1086 311, 433, 42, 235, 429, 372, 314, 427, 43, 44,
1087 45, 397, 236, 0, 46, 234, 0, 0, 0, 47,
1088 238, 235, 239, 0, 48, 0, 49, 0, 0, 0,
1089 236, 235, 0, 0, 50, 0, 0, 0, 238, 0,
1090 239, 0, 0, 51, 0, 52, 0, 85, 86, 0,
1091 53, 0, 54, 55, 56, 210, 0, 0, 0, 87,
1092 40, 88, 0, 89, 211, 0, 0, 0, 0, 0,
1093 0, 0, 0, 90, 0, 0, 0, 91, 0, 0,
1094 0, 92, 0, 0, 93, 43, 44, 45, 0, 0,
1095 0, 0, 0, 212, 0, 94, 47, 0, 0, 0,
1096 95, 48, 96, 49, 97, 0, 0, 0, 0, 0,
1097 0, 50, 0, 98, 99, 213, 214, 0, 0, 0,
1098 51, 0, 52, 85, 86, 0, 0, 53, 100, 54,
1099 55, 56, 0, 0, 0, 87, 40, 88, 0, 89,
1100 0, 0, 0, 0, 0, 0, 0, 0, 0, 90,
1101 0, 0, 0, 91, 0, 0, 0, 92, 0, 0,
1102 93, 43, 44, 45, 0, 0, 0, 0, 0, 0,
1103 0, 94, 47, 0, 0, 0, 95, 48, 96, 49,
1104 97, 0, 0, 0, 0, 0, 0, 50, 0, 98,
1105 99, 0, 0, 0, 0, 0, 51, 0, 52, 1,
1106 2, 0, 0, 53, 100, 54, 55, 56, 0, 0,
1107 0, 87, 40, 88, 0, 89, 0, 0, 0, 0,
1108 0, 0, 0, 0, 0, 90, 0, 0, 0, 91,
1109 0, 0, 0, 92, 0, 0, 93, 43, 44, 45,
1110 0, 0, 0, 0, 0, 0, 0, 94, 47, 0,
1111 0, 0, 95, 48, 96, 49, 97, 0, 0, 0,
1112 0, 0, 0, 50, 0, 98, 99, 0, 0, 0,
1113 0, 0, 51, 0, 52, 0, 0, 0, 0, 53,
1114 100, 54, 55, 56
Lev Walkin418298d2006-07-13 08:24:20 +00001115};
1116
1117static const short yycheck[] =
1118{
Lev Walkinadf863f2006-09-05 16:18:34 +00001119 9, 84, 213, 214, 9, 280, 15, 139, 139, 142,
1120 259, 38, 143, 9, 9, 10, 268, 269, 270, 9,
1121 0, 67, 274, 275, 4, 9, 9, 10, 51, 20,
1122 39, 15, 16, 42, 33, 85, 39, 46, 4, 35,
1123 0, 139, 140, 16, 17, 143, 9, 74, 295, 58,
1124 24, 17, 18, 19, 46, 58, 139, 106, 4, 39,
1125 110, 4, 42, 38, 311, 57, 46, 76, 101, 108,
1126 119, 17, 18, 19, 17, 18, 19, 329, 58, 9,
1127 9, 10, 11, 74, 101, 9, 39, 78, 110, 218,
1128 113, 15, 16, 16, 17, 10, 76, 349, 22, 74,
1129 9, 10, 11, 109, 113, 35, 80, 113, 154, 118,
1130 239, 107, 387, 118, 109, 38, 115, 107, 127, 115,
1131 94, 101, 205, 206, 256, 256, 109, 260, 112, 162,
1132 139, 140, 263, 113, 143, 266, 385, 117, 118, 222,
1133 89, 393, 115, 118, 107, 162, 62, 127, 89, 115,
1134 116, 74, 115, 443, 163, 164, 446, 286, 256, 288,
1135 258, 259, 142, 143, 9, 263, 109, 58, 266, 115,
1136 15, 16, 115, 256, 15, 16, 89, 107, 107, 109,
1137 109, 310, 162, 163, 164, 115, 109, 109, 112, 9,
1138 113, 113, 115, 3, 405, 15, 16, 280, 107, 6,
1139 7, 8, 9, 10, 11, 111, 13, 14, 6, 7,
1140 8, 9, 10, 11, 291, 13, 14, 15, 16, 7,
1141 26, 9, 10, 11, 12, 13, 14, 15, 16, 306,
1142 307, 51, 309, 7, 22, 9, 10, 11, 12, 13,
1143 14, 85, 109, 50, 112, 113, 113, 256, 36, 258,
1144 259, 109, 50, 262, 263, 113, 109, 266, 238, 342,
1145 113, 109, 50, 51, 108, 113, 110, 350, 16, 85,
1146 68, 280, 16, 282, 44, 284, 50, 25, 66, 259,
1147 112, 109, 108, 263, 91, 113, 266, 385, 17, 18,
1148 108, 65, 108, 91, 110, 118, 263, 85, 46, 266,
1149 48, 108, 394, 91, 387, 397, 389, 86, 115, 57,
1150 108, 86, 100, 102, 103, 104, 105, 91, 76, 107,
1151 108, 56, 110, 86, 113, 34, 35, 336, 17, 18,
1152 9, 10, 11, 15, 16, 3, 15, 16, 15, 16,
1153 17, 18, 351, 3, 353, 17, 18, 15, 16, 102,
1154 103, 104, 105, 420, 421, 364, 108, 108, 118, 27,
1155 28, 29, 3, 31, 109, 374, 109, 108, 114, 108,
1156 10, 3, 114, 41, 110, 40, 385, 45, 387, 116,
1157 118, 49, 391, 114, 52, 53, 54, 55, 118, 108,
1158 73, 101, 110, 110, 30, 63, 64, 109, 101, 408,
1159 68, 69, 70, 71, 72, 385, 110, 108, 5, 9,
1160 100, 79, 93, 81, 82, 424, 30, 73, 73, 428,
1161 88, 108, 90, 111, 119, 110, 106, 95, 96, 97,
1162 98, 99, 108, 111, 109, 5, 107, 111, 111, 7,
1163 108, 9, 10, 11, 12, 13, 14, 15, 16, 87,
1164 120, 117, 115, 73, 22, 109, 113, 7, 109, 9,
1165 10, 11, 12, 13, 14, 15, 16, 7, 36, 9,
1166 10, 11, 12, 13, 14, 119, 111, 111, 4, 108,
1167 113, 111, 50, 51, 9, 146, 36, 118, 15, 28,
1168 15, 16, 58, 76, 118, 113, 138, 256, 66, 284,
1169 50, 51, 391, 28, 162, 387, 222, 442, 277, 281,
1170 50, 260, 206, 206, 400, 296, 66, 85, 43, 406,
1171 245, 424, 47, 91, 412, 65, 258, 408, 53, 54,
1172 55, 353, 100, -1, 59, 85, -1, -1, -1, 64,
1173 108, 91, 110, -1, 69, -1, 71, -1, -1, -1,
1174 100, 91, -1, -1, 79, -1, -1, -1, 108, -1,
1175 110, -1, -1, 88, -1, 90, -1, 15, 16, -1,
1176 95, -1, 97, 98, 99, 23, -1, -1, -1, 27,
1177 28, 29, -1, 31, 32, -1, -1, -1, -1, -1,
1178 -1, -1, -1, 41, -1, -1, -1, 45, -1, -1,
1179 -1, 49, -1, -1, 52, 53, 54, 55, -1, -1,
1180 -1, -1, -1, 61, -1, 63, 64, -1, -1, -1,
1181 68, 69, 70, 71, 72, -1, -1, -1, -1, -1,
1182 -1, 79, -1, 81, 82, 83, 84, -1, -1, -1,
1183 88, -1, 90, 15, 16, -1, -1, 95, 96, 97,
1184 98, 99, -1, -1, -1, 27, 28, 29, -1, 31,
1185 -1, -1, -1, -1, -1, -1, -1, -1, -1, 41,
1186 -1, -1, -1, 45, -1, -1, -1, 49, -1, -1,
1187 52, 53, 54, 55, -1, -1, -1, -1, -1, -1,
1188 -1, 63, 64, -1, -1, -1, 68, 69, 70, 71,
1189 72, -1, -1, -1, -1, -1, -1, 79, -1, 81,
1190 82, -1, -1, -1, -1, -1, 88, -1, 90, 15,
1191 16, -1, -1, 95, 96, 97, 98, 99, -1, -1,
1192 -1, 27, 28, 29, -1, 31, -1, -1, -1, -1,
1193 -1, -1, -1, -1, -1, 41, -1, -1, -1, 45,
1194 -1, -1, -1, 49, -1, -1, 52, 53, 54, 55,
1195 -1, -1, -1, -1, -1, -1, -1, 63, 64, -1,
1196 -1, -1, 68, 69, 70, 71, 72, -1, -1, -1,
1197 -1, -1, -1, 79, -1, 81, 82, -1, -1, -1,
1198 -1, -1, 88, -1, 90, -1, -1, -1, -1, 95,
1199 96, 97, 98, 99
Lev Walkin418298d2006-07-13 08:24:20 +00001200};
1201
1202/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1203 symbol of state STATE-NUM. */
1204static const unsigned char yystos[] =
1205{
Lev Walkinadf863f2006-09-05 16:18:34 +00001206 0, 15, 16, 122, 123, 124, 226, 0, 124, 108,
1207 125, 126, 9, 10, 109, 127, 128, 229, 39, 109,
1208 128, 110, 16, 25, 46, 48, 57, 129, 130, 131,
1209 10, 62, 89, 89, 58, 89, 3, 131, 111, 26,
1210 28, 43, 47, 53, 54, 55, 59, 64, 69, 71,
1211 79, 88, 90, 95, 97, 98, 99, 132, 133, 134,
1212 136, 142, 146, 148, 178, 188, 226, 229, 16, 22,
1213 112, 143, 144, 226, 229, 51, 137, 139, 140, 141,
1214 226, 229, 44, 134, 3, 15, 16, 27, 29, 31,
1215 41, 45, 49, 52, 63, 68, 70, 72, 81, 82,
1216 96, 108, 147, 172, 185, 186, 187, 188, 227, 147,
1217 135, 112, 112, 113, 108, 112, 139, 51, 113, 108,
1218 33, 115, 158, 168, 221, 222, 223, 118, 86, 86,
1219 76, 56, 86, 149, 150, 185, 186, 226, 3, 108,
1220 108, 216, 118, 3, 144, 109, 226, 141, 109, 108,
1221 24, 80, 94, 224, 169, 170, 46, 57, 225, 226,
1222 229, 109, 113, 114, 114, 108, 145, 6, 7, 8,
1223 10, 11, 13, 14, 50, 91, 145, 151, 152, 168,
1224 181, 183, 219, 229, 107, 109, 217, 218, 219, 229,
1225 17, 18, 173, 174, 175, 226, 68, 108, 179, 181,
1226 182, 226, 229, 126, 138, 17, 18, 160, 161, 10,
1227 23, 32, 61, 83, 84, 147, 171, 85, 110, 192,
1228 193, 194, 3, 150, 226, 229, 226, 229, 12, 22,
1229 36, 50, 51, 66, 85, 91, 100, 107, 108, 110,
1230 183, 195, 196, 197, 200, 201, 202, 203, 208, 209,
1231 210, 219, 220, 226, 229, 109, 113, 109, 113, 110,
1232 118, 180, 118, 114, 16, 17, 38, 74, 168, 176,
1233 177, 214, 215, 168, 176, 177, 109, 113, 116, 40,
1234 108, 73, 108, 192, 108, 192, 110, 195, 110, 158,
1235 168, 101, 30, 106, 119, 199, 34, 35, 226, 195,
1236 109, 102, 103, 104, 105, 113, 189, 190, 101, 191,
1237 110, 199, 108, 152, 218, 182, 219, 229, 174, 5,
1238 184, 229, 179, 179, 214, 118, 214, 214, 93, 159,
1239 214, 214, 100, 162, 163, 161, 30, 107, 156, 157,
1240 167, 168, 229, 172, 35, 153, 154, 155, 167, 168,
1241 229, 73, 153, 73, 195, 111, 195, 197, 108, 119,
1242 106, 65, 201, 194, 108, 109, 111, 107, 197, 197,
1243 197, 195, 65, 201, 120, 211, 212, 111, 111, 5,
1244 17, 18, 214, 87, 229, 117, 109, 113, 168, 73,
1245 109, 113, 214, 168, 228, 229, 109, 228, 111, 111,
1246 198, 119, 107, 204, 205, 229, 113, 111, 118, 213,
1247 229, 109, 113, 108, 182, 219, 157, 168, 155, 214,
1248 221, 221, 184, 109, 113, 192, 196, 213, 118, 212,
1249 164, 170, 170, 205, 20, 74, 78, 206, 207, 229,
1250 4, 19, 115, 165, 166, 175, 165, 109, 166, 116
Lev Walkin418298d2006-07-13 08:24:20 +00001251};
1252
1253#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1254# define YYSIZE_T __SIZE_TYPE__
1255#endif
1256#if ! defined (YYSIZE_T) && defined (size_t)
1257# define YYSIZE_T size_t
1258#endif
1259#if ! defined (YYSIZE_T)
1260# if defined (__STDC__) || defined (__cplusplus)
1261# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1262# define YYSIZE_T size_t
1263# endif
1264#endif
1265#if ! defined (YYSIZE_T)
1266# define YYSIZE_T unsigned int
1267#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001268
1269#define yyerrok (yyerrstatus = 0)
1270#define yyclearin (yychar = YYEMPTY)
Lev Walkina00d6b32006-03-21 03:40:38 +00001271#define YYEMPTY -2
Lev Walkinf15320b2004-06-03 03:38:44 +00001272#define YYEOF 0
Lev Walkin418298d2006-07-13 08:24:20 +00001273
Lev Walkinf15320b2004-06-03 03:38:44 +00001274#define YYACCEPT goto yyacceptlab
Lev Walkin418298d2006-07-13 08:24:20 +00001275#define YYABORT goto yyabortlab
Lev Walkina00d6b32006-03-21 03:40:38 +00001276#define YYERROR goto yyerrlab1
Lev Walkin418298d2006-07-13 08:24:20 +00001277
1278/* Like YYERROR except do call yyerror. This remains here temporarily
1279 to ease the transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +00001280 Once GCC version 2 has supplanted version 1, this can go. */
Lev Walkin418298d2006-07-13 08:24:20 +00001281
Lev Walkinf15320b2004-06-03 03:38:44 +00001282#define YYFAIL goto yyerrlab
Lev Walkin418298d2006-07-13 08:24:20 +00001283
Lev Walkinf15320b2004-06-03 03:38:44 +00001284#define YYRECOVERING() (!!yyerrstatus)
Lev Walkin418298d2006-07-13 08:24:20 +00001285
1286#define YYBACKUP(Token, Value) \
Lev Walkinf15320b2004-06-03 03:38:44 +00001287do \
1288 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin418298d2006-07-13 08:24:20 +00001289 { \
1290 yychar = (Token); \
1291 yylval = (Value); \
Lev Walkina00d6b32006-03-21 03:40:38 +00001292 yychar1 = YYTRANSLATE (yychar); \
Lev Walkinf15320b2004-06-03 03:38:44 +00001293 YYPOPSTACK; \
1294 goto yybackup; \
1295 } \
1296 else \
Lev Walkin418298d2006-07-13 08:24:20 +00001297 { \
1298 yyerror ("syntax error: cannot back up"); \
1299 YYERROR; \
1300 } \
Lev Walkinf15320b2004-06-03 03:38:44 +00001301while (0)
1302
1303#define YYTERROR 1
1304#define YYERRCODE 256
1305
Lev Walkin418298d2006-07-13 08:24:20 +00001306/* YYLLOC_DEFAULT -- Compute the default location (before the actions
1307 are run). */
1308
1309#ifndef YYLLOC_DEFAULT
1310# define YYLLOC_DEFAULT(Current, Rhs, N) \
1311 Current.first_line = Rhs[1].first_line; \
1312 Current.first_column = Rhs[1].first_column; \
1313 Current.last_line = Rhs[N].last_line; \
1314 Current.last_column = Rhs[N].last_column;
Lev Walkinf15320b2004-06-03 03:38:44 +00001315#endif
1316
Lev Walkin418298d2006-07-13 08:24:20 +00001317/* YYLEX -- calling `yylex' with the right arguments. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001318
Lev Walkin418298d2006-07-13 08:24:20 +00001319#define YYLEX yylex ()
Lev Walkinfb872bd2006-03-18 06:53:11 +00001320
Lev Walkin418298d2006-07-13 08:24:20 +00001321/* Enable debugging if requested. */
1322#if YYDEBUG
Lev Walkinfb872bd2006-03-18 06:53:11 +00001323
Lev Walkin418298d2006-07-13 08:24:20 +00001324# ifndef YYFPRINTF
1325# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1326# define YYFPRINTF fprintf
1327# endif
Lev Walkinfb872bd2006-03-18 06:53:11 +00001328
Lev Walkin418298d2006-07-13 08:24:20 +00001329# define YYDPRINTF(Args) \
1330do { \
1331 if (yydebug) \
1332 YYFPRINTF Args; \
1333} while (0)
1334# define YYDSYMPRINT(Args) \
1335do { \
1336 if (yydebug) \
1337 yysymprint Args; \
1338} while (0)
1339/* Nonzero means print parse trace. It is left uninitialized so that
1340 multiple parsers can coexist. */
1341int yydebug;
1342#else /* !YYDEBUG */
1343# define YYDPRINTF(Args)
1344# define YYDSYMPRINT(Args)
1345#endif /* !YYDEBUG */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001346
Lev Walkin418298d2006-07-13 08:24:20 +00001347/* YYINITDEPTH -- initial size of the parser's stacks. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001348#ifndef YYINITDEPTH
Lev Walkin418298d2006-07-13 08:24:20 +00001349# define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +00001350#endif
1351
Lev Walkin418298d2006-07-13 08:24:20 +00001352/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1353 if the built-in stack extension method is used).
1354
1355 Do not make this value too large; the results are undefined if
1356 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
1357 evaluated with infinite-precision integer arithmetic. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001358
Lev Walkina00d6b32006-03-21 03:40:38 +00001359#if YYMAXDEPTH == 0
Lev Walkin418298d2006-07-13 08:24:20 +00001360# undef YYMAXDEPTH
Lev Walkina00d6b32006-03-21 03:40:38 +00001361#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001362
1363#ifndef YYMAXDEPTH
Lev Walkin418298d2006-07-13 08:24:20 +00001364# define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +00001365#endif
Lev Walkin418298d2006-07-13 08:24:20 +00001366
Lev Walkinf15320b2004-06-03 03:38:44 +00001367
Lev Walkinf15320b2004-06-03 03:38:44 +00001368
Lev Walkin418298d2006-07-13 08:24:20 +00001369#if YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00001370
Lev Walkin418298d2006-07-13 08:24:20 +00001371# ifndef yystrlen
1372# if defined (__GLIBC__) && defined (_STRING_H)
1373# define yystrlen strlen
1374# else
1375/* Return the length of YYSTR. */
1376static YYSIZE_T
1377# if defined (__STDC__) || defined (__cplusplus)
1378yystrlen (const char *yystr)
1379# else
1380yystrlen (yystr)
1381 const char *yystr;
1382# endif
Lev Walkina00d6b32006-03-21 03:40:38 +00001383{
Lev Walkin418298d2006-07-13 08:24:20 +00001384 register const char *yys = yystr;
Lev Walkina00d6b32006-03-21 03:40:38 +00001385
Lev Walkin418298d2006-07-13 08:24:20 +00001386 while (*yys++ != '\0')
1387 continue;
1388
1389 return yys - yystr - 1;
1390}
1391# endif
1392# endif
1393
1394# ifndef yystpcpy
1395# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1396# define yystpcpy stpcpy
1397# else
1398/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1399 YYDEST. */
1400static char *
1401# if defined (__STDC__) || defined (__cplusplus)
1402yystpcpy (char *yydest, const char *yysrc)
1403# else
1404yystpcpy (yydest, yysrc)
1405 char *yydest;
1406 const char *yysrc;
1407# endif
1408{
1409 register char *yyd = yydest;
1410 register const char *yys = yysrc;
1411
1412 while ((*yyd++ = *yys++) != '\0')
1413 continue;
1414
1415 return yyd - 1;
1416}
1417# endif
1418# endif
1419
1420#endif /* !YYERROR_VERBOSE */
1421
1422
1423
1424#if YYDEBUG
1425/*-----------------------------.
1426| Print this symbol on YYOUT. |
1427`-----------------------------*/
1428
1429static void
1430#if defined (__STDC__) || defined (__cplusplus)
1431yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue)
1432#else
1433yysymprint (yyout, yytype, yyvalue)
1434 FILE* yyout;
1435 int yytype;
1436 YYSTYPE yyvalue;
1437#endif
1438{
1439 /* Pacify ``unused variable'' warnings. */
1440 (void) yyvalue;
1441
1442 if (yytype < YYNTOKENS)
1443 {
1444 YYFPRINTF (yyout, "token %s (", yytname[yytype]);
1445# ifdef YYPRINT
1446 YYPRINT (yyout, yytoknum[yytype], yyvalue);
1447# endif
1448 }
1449 else
1450 YYFPRINTF (yyout, "nterm %s (", yytname[yytype]);
1451
1452 switch (yytype)
1453 {
1454 default:
1455 break;
1456 }
1457 YYFPRINTF (yyout, ")");
1458}
1459#endif /* YYDEBUG. */
1460
1461
1462/*-----------------------------------------------.
1463| Release the memory associated to this symbol. |
1464`-----------------------------------------------*/
1465
1466static void
1467#if defined (__STDC__) || defined (__cplusplus)
1468yydestruct (int yytype, YYSTYPE yyvalue)
1469#else
1470yydestruct (yytype, yyvalue)
1471 int yytype;
1472 YYSTYPE yyvalue;
1473#endif
1474{
1475 /* Pacify ``unused variable'' warnings. */
1476 (void) yyvalue;
1477
1478 switch (yytype)
1479 {
1480 default:
1481 break;
1482 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001483}
1484
Lev Walkinfb872bd2006-03-18 06:53:11 +00001485
1486
Lev Walkina00d6b32006-03-21 03:40:38 +00001487/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1488 into yyparse. The argument should have type void *.
1489 It should actually point to an object.
1490 Grammar actions can access the variable by casting it
1491 to the proper pointer type. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001492
1493#ifdef YYPARSE_PARAM
Lev Walkin418298d2006-07-13 08:24:20 +00001494# if defined (__STDC__) || defined (__cplusplus)
1495# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1496# define YYPARSE_PARAM_DECL
1497# else
1498# define YYPARSE_PARAM_ARG YYPARSE_PARAM
1499# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1500# endif
1501#else /* !YYPARSE_PARAM */
1502# define YYPARSE_PARAM_ARG
1503# define YYPARSE_PARAM_DECL
1504#endif /* !YYPARSE_PARAM */
Lev Walkina00d6b32006-03-21 03:40:38 +00001505
1506/* Prevent warning if -Wstrict-prototypes. */
1507#ifdef __GNUC__
Lev Walkin418298d2006-07-13 08:24:20 +00001508# ifdef YYPARSE_PARAM
Lev Walkina00d6b32006-03-21 03:40:38 +00001509int yyparse (void *);
Lev Walkin418298d2006-07-13 08:24:20 +00001510# else
Lev Walkinf15320b2004-06-03 03:38:44 +00001511int yyparse (void);
Lev Walkin418298d2006-07-13 08:24:20 +00001512# endif
Lev Walkinfb872bd2006-03-18 06:53:11 +00001513#endif
Lev Walkin418298d2006-07-13 08:24:20 +00001514
1515
1516/* The lookahead symbol. */
1517int yychar;
1518
1519/* The semantic value of the lookahead symbol. */
1520YYSTYPE yylval;
1521
1522/* Number of parse errors so far. */
1523int yynerrs;
1524
Lev Walkinfb872bd2006-03-18 06:53:11 +00001525
Lev Walkinfb872bd2006-03-18 06:53:11 +00001526int
Lev Walkin418298d2006-07-13 08:24:20 +00001527yyparse (YYPARSE_PARAM_ARG)
Lev Walkina00d6b32006-03-21 03:40:38 +00001528 YYPARSE_PARAM_DECL
Lev Walkinfb872bd2006-03-18 06:53:11 +00001529{
Lev Walkin418298d2006-07-13 08:24:20 +00001530
Lev Walkina00d6b32006-03-21 03:40:38 +00001531 register int yystate;
1532 register int yyn;
Lev Walkin418298d2006-07-13 08:24:20 +00001533 int yyresult;
1534 /* Number of tokens to shift before error messages enabled. */
1535 int yyerrstatus;
1536 /* Lookahead token as an internal (translated) token number. */
1537 int yychar1 = 0;
1538
1539 /* Three stacks and their tools:
1540 `yyss': related to states,
1541 `yyvs': related to semantic values,
1542 `yyls': related to locations.
1543
1544 Refer to the stacks thru separate pointers, to allow yyoverflow
1545 to reallocate them elsewhere. */
1546
1547 /* The state stack. */
1548 short yyssa[YYINITDEPTH];
1549 short *yyss = yyssa;
Lev Walkina00d6b32006-03-21 03:40:38 +00001550 register short *yyssp;
Lev Walkin418298d2006-07-13 08:24:20 +00001551
1552 /* The semantic value stack. */
1553 YYSTYPE yyvsa[YYINITDEPTH];
1554 YYSTYPE *yyvs = yyvsa;
Lev Walkina00d6b32006-03-21 03:40:38 +00001555 register YYSTYPE *yyvsp;
Lev Walkinfb872bd2006-03-18 06:53:11 +00001556
Lev Walkinfb872bd2006-03-18 06:53:11 +00001557
Lev Walkinfb872bd2006-03-18 06:53:11 +00001558
Lev Walkinf15320b2004-06-03 03:38:44 +00001559#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkinf15320b2004-06-03 03:38:44 +00001560
Lev Walkin418298d2006-07-13 08:24:20 +00001561 YYSIZE_T yystacksize = YYINITDEPTH;
Lev Walkinf15320b2004-06-03 03:38:44 +00001562
Lev Walkin418298d2006-07-13 08:24:20 +00001563 /* The variables used to return semantic value and location from the
1564 action routines. */
1565 YYSTYPE yyval;
Lev Walkinf15320b2004-06-03 03:38:44 +00001566
Lev Walkinf15320b2004-06-03 03:38:44 +00001567
Lev Walkin418298d2006-07-13 08:24:20 +00001568 /* When reducing, the number of symbols on the RHS of the reduced
1569 rule. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001570 int yylen;
1571
Lev Walkin418298d2006-07-13 08:24:20 +00001572 YYDPRINTF ((stderr, "Starting parse\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001573
1574 yystate = 0;
1575 yyerrstatus = 0;
1576 yynerrs = 0;
1577 yychar = YYEMPTY; /* Cause a token to be read. */
1578
1579 /* Initialize stack pointers.
1580 Waste one element of value and location stack
1581 so that they stay on the same level as the state stack.
1582 The wasted elements are never initialized. */
1583
Lev Walkin418298d2006-07-13 08:24:20 +00001584 yyssp = yyss;
Lev Walkinf15320b2004-06-03 03:38:44 +00001585 yyvsp = yyvs;
Lev Walkinf15320b2004-06-03 03:38:44 +00001586
Lev Walkin418298d2006-07-13 08:24:20 +00001587 goto yysetstate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001588
Lev Walkin418298d2006-07-13 08:24:20 +00001589/*------------------------------------------------------------.
1590| yynewstate -- Push a new state, which is found in yystate. |
1591`------------------------------------------------------------*/
1592 yynewstate:
1593 /* In all cases, when you get here, the value and location stacks
1594 have just been pushed. so pushing a state here evens the stacks.
1595 */
1596 yyssp++;
1597
1598 yysetstate:
1599 *yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001600
Lev Walkina00d6b32006-03-21 03:40:38 +00001601 if (yyssp >= yyss + yystacksize - 1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001602 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001603 /* Get the current used size of the three stacks, in elements. */
Lev Walkin418298d2006-07-13 08:24:20 +00001604 YYSIZE_T yysize = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001605
1606#ifdef yyoverflow
Lev Walkin418298d2006-07-13 08:24:20 +00001607 {
1608 /* Give user a chance to reallocate the stack. Use copies of
1609 these so that the &'s don't force the real ones into
1610 memory. */
1611 YYSTYPE *yyvs1 = yyvs;
1612 short *yyss1 = yyss;
Lev Walkinf15320b2004-06-03 03:38:44 +00001613
Lev Walkin418298d2006-07-13 08:24:20 +00001614
1615 /* Each stack pointer address is followed by the size of the
1616 data in use in that stack, in bytes. This used to be a
1617 conditional around just the two extra args, but that might
1618 be undefined if yyoverflow is a macro. */
1619 yyoverflow ("parser stack overflow",
1620 &yyss1, yysize * sizeof (*yyssp),
1621 &yyvs1, yysize * sizeof (*yyvsp),
1622
1623 &yystacksize);
1624
1625 yyss = yyss1;
1626 yyvs = yyvs1;
1627 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001628#else /* no yyoverflow */
Lev Walkin418298d2006-07-13 08:24:20 +00001629# ifndef YYSTACK_RELOCATE
1630 goto yyoverflowlab;
1631# else
Lev Walkinf15320b2004-06-03 03:38:44 +00001632 /* Extend the stack our own way. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001633 if (yystacksize >= YYMAXDEPTH)
Lev Walkin418298d2006-07-13 08:24:20 +00001634 goto yyoverflowlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001635 yystacksize *= 2;
Lev Walkina00d6b32006-03-21 03:40:38 +00001636 if (yystacksize > YYMAXDEPTH)
Lev Walkinf15320b2004-06-03 03:38:44 +00001637 yystacksize = YYMAXDEPTH;
Lev Walkin418298d2006-07-13 08:24:20 +00001638
1639 {
1640 short *yyss1 = yyss;
1641 union yyalloc *yyptr =
1642 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1643 if (! yyptr)
1644 goto yyoverflowlab;
1645 YYSTACK_RELOCATE (yyss);
1646 YYSTACK_RELOCATE (yyvs);
1647
1648# undef YYSTACK_RELOCATE
1649 if (yyss1 != yyssa)
1650 YYSTACK_FREE (yyss1);
1651 }
1652# endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001653#endif /* no yyoverflow */
1654
Lev Walkin418298d2006-07-13 08:24:20 +00001655 yyssp = yyss + yysize - 1;
1656 yyvsp = yyvs + yysize - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001657
Lev Walkin418298d2006-07-13 08:24:20 +00001658
1659 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1660 (unsigned long int) yystacksize));
Lev Walkinf15320b2004-06-03 03:38:44 +00001661
Lev Walkina00d6b32006-03-21 03:40:38 +00001662 if (yyssp >= yyss + yystacksize - 1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001663 YYABORT;
1664 }
1665
Lev Walkin418298d2006-07-13 08:24:20 +00001666 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Lev Walkinf15320b2004-06-03 03:38:44 +00001667
1668 goto yybackup;
Lev Walkin418298d2006-07-13 08:24:20 +00001669
1670/*-----------.
1671| yybackup. |
1672`-----------*/
1673yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001674
1675/* Do appropriate processing given the current state. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001676/* Read a lookahead token if we need one and don't already have one. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001677/* yyresume: */
1678
Lev Walkina00d6b32006-03-21 03:40:38 +00001679 /* First try to decide what to do without reference to lookahead token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001680
1681 yyn = yypact[yystate];
Lev Walkin418298d2006-07-13 08:24:20 +00001682 if (yyn == YYPACT_NINF)
Lev Walkinf15320b2004-06-03 03:38:44 +00001683 goto yydefault;
1684
Lev Walkina00d6b32006-03-21 03:40:38 +00001685 /* Not known => get a lookahead token if don't already have one. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001686
Lev Walkina00d6b32006-03-21 03:40:38 +00001687 /* yychar is either YYEMPTY or YYEOF
1688 or a valid token in external form. */
1689
Lev Walkinf15320b2004-06-03 03:38:44 +00001690 if (yychar == YYEMPTY)
1691 {
Lev Walkin418298d2006-07-13 08:24:20 +00001692 YYDPRINTF ((stderr, "Reading a token: "));
Lev Walkinf15320b2004-06-03 03:38:44 +00001693 yychar = YYLEX;
1694 }
1695
Lev Walkin418298d2006-07-13 08:24:20 +00001696 /* Convert token to internal form (in yychar1) for indexing tables with. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001697
Lev Walkin418298d2006-07-13 08:24:20 +00001698 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001699 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001700 yychar1 = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00001701 yychar = YYEOF; /* Don't call YYLEX any more. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001702
Lev Walkin418298d2006-07-13 08:24:20 +00001703 YYDPRINTF ((stderr, "Now at end of input.\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001704 }
1705 else
1706 {
Lev Walkin418298d2006-07-13 08:24:20 +00001707 yychar1 = YYTRANSLATE (yychar);
Lev Walkina00d6b32006-03-21 03:40:38 +00001708
Lev Walkin418298d2006-07-13 08:24:20 +00001709 /* We have to keep this `#if YYDEBUG', since we use variables
1710 which are defined only if `YYDEBUG' is set. */
1711 YYDPRINTF ((stderr, "Next token is "));
1712 YYDSYMPRINT ((stderr, yychar1, yylval));
1713 YYDPRINTF ((stderr, "\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001714 }
1715
Lev Walkin418298d2006-07-13 08:24:20 +00001716 /* If the proper action on seeing token YYCHAR1 is to reduce or to
1717 detect an error, take that action. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001718 yyn += yychar1;
Lev Walkin418298d2006-07-13 08:24:20 +00001719 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001720 goto yydefault;
Lev Walkinf15320b2004-06-03 03:38:44 +00001721 yyn = yytable[yyn];
Lev Walkin418298d2006-07-13 08:24:20 +00001722 if (yyn <= 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001723 {
Lev Walkin418298d2006-07-13 08:24:20 +00001724 if (yyn == 0 || yyn == YYTABLE_NINF)
Lev Walkinf15320b2004-06-03 03:38:44 +00001725 goto yyerrlab;
1726 yyn = -yyn;
1727 goto yyreduce;
1728 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001729
1730 if (yyn == YYFINAL)
1731 YYACCEPT;
1732
Lev Walkina00d6b32006-03-21 03:40:38 +00001733 /* Shift the lookahead token. */
Lev Walkin418298d2006-07-13 08:24:20 +00001734 YYDPRINTF ((stderr, "Shifting token %d (%s), ",
1735 yychar, yytname[yychar1]));
Lev Walkinf15320b2004-06-03 03:38:44 +00001736
1737 /* Discard the token being shifted unless it is eof. */
1738 if (yychar != YYEOF)
1739 yychar = YYEMPTY;
1740
1741 *++yyvsp = yylval;
Lev Walkinf15320b2004-06-03 03:38:44 +00001742
Lev Walkin418298d2006-07-13 08:24:20 +00001743
1744 /* Count tokens shifted since error; after three, turn off error
1745 status. */
1746 if (yyerrstatus)
1747 yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001748
1749 yystate = yyn;
1750 goto yynewstate;
1751
Lev Walkina00d6b32006-03-21 03:40:38 +00001752
Lev Walkin418298d2006-07-13 08:24:20 +00001753/*-----------------------------------------------------------.
1754| yydefault -- do the default action for the current state. |
1755`-----------------------------------------------------------*/
1756yydefault:
Lev Walkinf15320b2004-06-03 03:38:44 +00001757 yyn = yydefact[yystate];
1758 if (yyn == 0)
1759 goto yyerrlab;
Lev Walkin418298d2006-07-13 08:24:20 +00001760 goto yyreduce;
Lev Walkinf15320b2004-06-03 03:38:44 +00001761
Lev Walkin418298d2006-07-13 08:24:20 +00001762
1763/*-----------------------------.
1764| yyreduce -- Do a reduction. |
1765`-----------------------------*/
Lev Walkinf15320b2004-06-03 03:38:44 +00001766yyreduce:
Lev Walkin418298d2006-07-13 08:24:20 +00001767 /* yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001768 yylen = yyr2[yyn];
Lev Walkinf15320b2004-06-03 03:38:44 +00001769
Lev Walkin418298d2006-07-13 08:24:20 +00001770 /* If YYLEN is nonzero, implement the default value of the action:
1771 `$$ = $1'.
1772
1773 Otherwise, the following line sets YYVAL to garbage.
1774 This behavior is undocumented and Bison
1775 users should not rely upon it. Assigning to YYVAL
1776 unconditionally makes the parser a bit smaller, and it avoids a
1777 GCC warning that YYVAL may be used uninitialized. */
1778 yyval = yyvsp[1-yylen];
1779
1780
1781
1782#if YYDEBUG
1783 /* We have to keep this `#if YYDEBUG', since we use variables which
1784 are defined only if `YYDEBUG' is set. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001785 if (yydebug)
Lev Walkinf15320b2004-06-03 03:38:44 +00001786 {
Lev Walkin418298d2006-07-13 08:24:20 +00001787 int yyi;
Lev Walkina00d6b32006-03-21 03:40:38 +00001788
Lev Walkin418298d2006-07-13 08:24:20 +00001789 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
1790 yyn - 1, yyrline[yyn]);
Lev Walkina00d6b32006-03-21 03:40:38 +00001791
1792 /* Print the symbols being reduced, and their result. */
Lev Walkin418298d2006-07-13 08:24:20 +00001793 for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
1794 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
1795 YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkina00d6b32006-03-21 03:40:38 +00001796 }
1797#endif
Lev Walkin418298d2006-07-13 08:24:20 +00001798 switch (yyn)
1799 {
1800 case 2:
Lev Walkinadf863f2006-09-05 16:18:34 +00001801#line 327 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001802 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001803 *(void **)param = yyvsp[0].a_grammar;
Lev Walkin418298d2006-07-13 08:24:20 +00001804 }
1805 break;
1806
1807 case 3:
Lev Walkinadf863f2006-09-05 16:18:34 +00001808#line 333 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001809 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001810 yyval.a_grammar = asn1p_new();
1811 checkmem(yyval.a_grammar);
1812 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin418298d2006-07-13 08:24:20 +00001813 }
1814 break;
1815
1816 case 4:
Lev Walkinadf863f2006-09-05 16:18:34 +00001817#line 338 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001818 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001819 yyval.a_grammar = yyvsp[-1].a_grammar;
1820 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin418298d2006-07-13 08:24:20 +00001821 }
1822 break;
1823
1824 case 5:
Lev Walkinadf863f2006-09-05 16:18:34 +00001825#line 359 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001826 {
Lev Walkinfb872bd2006-03-18 06:53:11 +00001827
Lev Walkina00d6b32006-03-21 03:40:38 +00001828 if(yyvsp[-1].a_module) {
1829 yyval.a_module = yyvsp[-1].a_module;
Lev Walkinf15320b2004-06-03 03:38:44 +00001830 } else {
1831 /* There's a chance that a module is just plain empty */
Lev Walkina00d6b32006-03-21 03:40:38 +00001832 yyval.a_module = asn1p_module_new();
Lev Walkinf15320b2004-06-03 03:38:44 +00001833 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001834 checkmem(yyval.a_module);
Lev Walkinf15320b2004-06-03 03:38:44 +00001835
Lev Walkina00d6b32006-03-21 03:40:38 +00001836 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
1837 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1838 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001839 }
1840 break;
1841
1842 case 6:
Lev Walkinadf863f2006-09-05 16:18:34 +00001843#line 380 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001844 { yyval.a_oid = 0; }
1845 break;
1846
1847 case 7:
Lev Walkinadf863f2006-09-05 16:18:34 +00001848#line 381 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001849 { yyval.a_oid = yyvsp[0].a_oid; }
1850 break;
1851
1852 case 8:
Lev Walkinadf863f2006-09-05 16:18:34 +00001853#line 385 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001854 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001855 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin418298d2006-07-13 08:24:20 +00001856 }
1857 break;
1858
1859 case 9:
Lev Walkinadf863f2006-09-05 16:18:34 +00001860#line 388 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001861 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001862 yyval.a_oid = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00001863 }
1864 break;
1865
1866 case 10:
Lev Walkinadf863f2006-09-05 16:18:34 +00001867#line 394 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001868 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001869 yyval.a_oid = asn1p_oid_new();
1870 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1871 if(yyvsp[0].a_oid_arc.name)
1872 free(yyvsp[0].a_oid_arc.name);
Lev Walkin418298d2006-07-13 08:24:20 +00001873 }
1874 break;
1875
1876 case 11:
Lev Walkinadf863f2006-09-05 16:18:34 +00001877#line 400 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001878 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001879 yyval.a_oid = yyvsp[-1].a_oid;
1880 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1881 if(yyvsp[0].a_oid_arc.name)
1882 free(yyvsp[0].a_oid_arc.name);
Lev Walkin418298d2006-07-13 08:24:20 +00001883 }
1884 break;
1885
1886 case 12:
Lev Walkinadf863f2006-09-05 16:18:34 +00001887#line 409 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001888 { /* iso */
Lev Walkina00d6b32006-03-21 03:40:38 +00001889 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1890 yyval.a_oid_arc.number = -1;
Lev Walkin418298d2006-07-13 08:24:20 +00001891 }
1892 break;
1893
1894 case 13:
Lev Walkinadf863f2006-09-05 16:18:34 +00001895#line 413 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001896 { /* iso(1) */
Lev Walkina00d6b32006-03-21 03:40:38 +00001897 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1898 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkin418298d2006-07-13 08:24:20 +00001899 }
1900 break;
1901
1902 case 14:
Lev Walkinadf863f2006-09-05 16:18:34 +00001903#line 417 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001904 { /* 1 */
Lev Walkina00d6b32006-03-21 03:40:38 +00001905 yyval.a_oid_arc.name = 0;
1906 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin418298d2006-07-13 08:24:20 +00001907 }
1908 break;
1909
1910 case 15:
Lev Walkinadf863f2006-09-05 16:18:34 +00001911#line 427 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001912 { yyval.a_module_flags = MSF_NOFLAGS; }
1913 break;
1914
1915 case 16:
Lev Walkinadf863f2006-09-05 16:18:34 +00001916#line 428 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001917 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001918 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001919 }
1920 break;
1921
1922 case 17:
Lev Walkinadf863f2006-09-05 16:18:34 +00001923#line 437 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001924 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001925 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001926 }
1927 break;
1928
1929 case 18:
Lev Walkinadf863f2006-09-05 16:18:34 +00001930#line 440 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001931 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001932 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001933 }
1934 break;
1935
1936 case 19:
Lev Walkinadf863f2006-09-05 16:18:34 +00001937#line 449 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001938 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001939 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin418298d2006-07-13 08:24:20 +00001940 }
1941 break;
1942
1943 case 20:
Lev Walkinadf863f2006-09-05 16:18:34 +00001944#line 452 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001945 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001946 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin418298d2006-07-13 08:24:20 +00001947 }
1948 break;
1949
1950 case 21:
Lev Walkinadf863f2006-09-05 16:18:34 +00001951#line 455 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001952 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001953 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin418298d2006-07-13 08:24:20 +00001954 }
1955 break;
1956
1957 case 22:
Lev Walkinadf863f2006-09-05 16:18:34 +00001958#line 458 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001959 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001960 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin418298d2006-07-13 08:24:20 +00001961 }
1962 break;
1963
1964 case 23:
Lev Walkinadf863f2006-09-05 16:18:34 +00001965#line 462 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001966 {
Lev Walkinf59d0752004-08-18 04:59:12 +00001967 /* X.680Amd1 specifies TAG and XER */
Lev Walkina00d6b32006-03-21 03:40:38 +00001968 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1969 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1970 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1971 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
Lev Walkinf59d0752004-08-18 04:59:12 +00001972 } else {
1973 fprintf(stderr,
1974 "WARNING: %s INSTRUCTIONS at line %d: "
1975 "Unrecognized encoding reference\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00001976 yyvsp[-1].tv_str, yylineno);
1977 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
Lev Walkinf59d0752004-08-18 04:59:12 +00001978 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001979 free(yyvsp[-1].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00001980 }
1981 break;
1982
1983 case 24:
Lev Walkinadf863f2006-09-05 16:18:34 +00001984#line 483 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001985 { yyval.a_module = 0; }
1986 break;
1987
1988 case 25:
Lev Walkinadf863f2006-09-05 16:18:34 +00001989#line 484 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001990 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001991 yyval.a_module = yyvsp[0].a_module;
Lev Walkin418298d2006-07-13 08:24:20 +00001992 }
1993 break;
1994
1995 case 26:
Lev Walkinadf863f2006-09-05 16:18:34 +00001996#line 493 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001997 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001998 yyval.a_module = yyvsp[0].a_module;
Lev Walkin418298d2006-07-13 08:24:20 +00001999 }
2000 break;
2001
2002 case 27:
Lev Walkinadf863f2006-09-05 16:18:34 +00002003#line 496 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002004 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002005 yyval.a_module = yyvsp[-1].a_module;
Lev Walkinf15320b2004-06-03 03:38:44 +00002006
Lev Walkinf59d0752004-08-18 04:59:12 +00002007 /* Behave well when one of them is skipped. */
Lev Walkina00d6b32006-03-21 03:40:38 +00002008 if(!(yyvsp[-1].a_module)) {
2009 if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
Lev Walkinf59d0752004-08-18 04:59:12 +00002010 break;
2011 }
2012
Lev Walkinf15320b2004-06-03 03:38:44 +00002013#ifdef MY_IMPORT
2014#error MY_IMPORT DEFINED ELSEWHERE!
2015#endif
2016#define MY_IMPORT(foo,field) do { \
Lev Walkina00d6b32006-03-21 03:40:38 +00002017 while(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \
2018 TQ_ADD(&(yyval.a_module->foo), \
2019 TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \
Lev Walkinf15320b2004-06-03 03:38:44 +00002020 field); \
Lev Walkinbc55d232004-08-13 12:31:09 +00002021 } \
Lev Walkina00d6b32006-03-21 03:40:38 +00002022 assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \
Lev Walkinbc55d232004-08-13 12:31:09 +00002023 } while(0)
Lev Walkinf15320b2004-06-03 03:38:44 +00002024
2025 MY_IMPORT(imports, xp_next);
2026 MY_IMPORT(exports, xp_next);
2027 MY_IMPORT(members, next);
2028#undef MY_IMPORT
2029
Lev Walkin418298d2006-07-13 08:24:20 +00002030 }
2031 break;
2032
2033 case 28:
Lev Walkinadf863f2006-09-05 16:18:34 +00002034#line 529 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002035 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002036 yyval.a_module = yyvsp[0].a_module;
Lev Walkin418298d2006-07-13 08:24:20 +00002037 }
2038 break;
2039
2040 case 29:
Lev Walkinadf863f2006-09-05 16:18:34 +00002041#line 532 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002042 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002043 yyval.a_module = asn1p_module_new();
2044 checkmem(yyval.a_module);
2045 if(yyvsp[0].a_xports) {
2046 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
Lev Walkinf15320b2004-06-03 03:38:44 +00002047 } else {
2048 /* "EXPORTS ALL;" ? */
2049 }
Lev Walkin418298d2006-07-13 08:24:20 +00002050 }
2051 break;
2052
2053 case 30:
Lev Walkinadf863f2006-09-05 16:18:34 +00002054#line 541 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002055 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002056 yyval.a_module = asn1p_module_new();
2057 checkmem(yyval.a_module);
2058 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2059 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2060 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002061 }
2062 break;
2063
2064 case 31:
Lev Walkinadf863f2006-09-05 16:18:34 +00002065#line 548 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002066 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002067 yyval.a_module = asn1p_module_new();
2068 checkmem(yyval.a_module);
2069 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2070 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2071 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002072 }
2073 break;
2074
2075 case 32:
Lev Walkinadf863f2006-09-05 16:18:34 +00002076#line 561 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002077 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002078 yyval.a_module = asn1p_module_new();
2079 checkmem(yyval.a_module);
2080 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2081 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2082 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002083 }
2084 break;
2085
2086 case 33:
Lev Walkinadf863f2006-09-05 16:18:34 +00002087#line 569 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002088 { asn1p_lexer_hack_push_encoding_control(); }
2089 break;
2090
2091 case 34:
Lev Walkinadf863f2006-09-05 16:18:34 +00002092#line 570 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002093 {
Lev Walkinf59d0752004-08-18 04:59:12 +00002094 fprintf(stderr,
2095 "WARNING: ENCODING-CONTROL %s "
2096 "specification at line %d ignored\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00002097 yyvsp[-1].tv_str, yylineno);
2098 free(yyvsp[-1].tv_str);
2099 yyval.a_module = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002100 }
2101 break;
2102
2103 case 35:
Lev Walkinadf863f2006-09-05 16:18:34 +00002104#line 582 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002105 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002106 return yyerror(
Lev Walkin70853052005-11-26 11:21:55 +00002107 "Attempt to redefine a standard basic string type, "
2108 "please comment out or remove this type redefinition.");
Lev Walkin418298d2006-07-13 08:24:20 +00002109 }
2110 break;
2111
2112 case 36:
Lev Walkinadf863f2006-09-05 16:18:34 +00002113#line 595 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002114 {
Lev Walkinb36317c2005-08-12 10:09:10 +00002115 if(!saved_aid && 0)
2116 return yyerror("Unterminated IMPORTS FROM, "
2117 "expected semicolon ';'");
2118 saved_aid = 0;
Lev Walkina00d6b32006-03-21 03:40:38 +00002119 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin418298d2006-07-13 08:24:20 +00002120 }
2121 break;
2122
2123 case 37:
Lev Walkinadf863f2006-09-05 16:18:34 +00002124#line 605 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002125 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002126 return yyerror("Empty IMPORTS list");
Lev Walkin418298d2006-07-13 08:24:20 +00002127 }
2128 break;
2129
2130 case 38:
Lev Walkinadf863f2006-09-05 16:18:34 +00002131#line 611 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002132 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002133 yyval.a_module = asn1p_module_new();
2134 checkmem(yyval.a_module);
2135 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin418298d2006-07-13 08:24:20 +00002136 }
2137 break;
2138
2139 case 39:
Lev Walkinadf863f2006-09-05 16:18:34 +00002140#line 616 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002141 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002142 yyval.a_module = yyvsp[-1].a_module;
2143 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin418298d2006-07-13 08:24:20 +00002144 }
2145 break;
2146
2147 case 40:
Lev Walkinadf863f2006-09-05 16:18:34 +00002148#line 623 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002149 { memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); }
2150 break;
2151
2152 case 41:
Lev Walkinadf863f2006-09-05 16:18:34 +00002153#line 624 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002154 { yyval.a_aid.oid = yyvsp[0].a_oid; }
2155 break;
2156
2157 case 42:
Lev Walkinadf863f2006-09-05 16:18:34 +00002158#line 628 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002159 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002160 yyval.a_xports = yyvsp[-3].a_xports;
2161 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
2162 yyval.a_xports->identifier = yyvsp[0].a_aid;
Lev Walkinb36317c2005-08-12 10:09:10 +00002163 /* This stupid thing is used for look-back hack. */
Lev Walkina00d6b32006-03-21 03:40:38 +00002164 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
2165 checkmem(yyval.a_xports);
Lev Walkin418298d2006-07-13 08:24:20 +00002166 }
2167 break;
2168
2169 case 43:
Lev Walkinadf863f2006-09-05 16:18:34 +00002170#line 639 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002171 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002172 yyval.a_xports = asn1p_xports_new();
2173 checkmem(yyval.a_xports);
2174 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002175 }
2176 break;
2177
2178 case 44:
Lev Walkinadf863f2006-09-05 16:18:34 +00002179#line 644 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002180 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002181 yyval.a_xports = yyvsp[-2].a_xports;
2182 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002183 }
2184 break;
2185
2186 case 45:
Lev Walkinadf863f2006-09-05 16:18:34 +00002187#line 651 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002188 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002189 yyval.a_expr = asn1p_expr_new(yylineno);
2190 checkmem(yyval.a_expr);
2191 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2192 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin418298d2006-07-13 08:24:20 +00002193 }
2194 break;
2195
2196 case 46:
Lev Walkinadf863f2006-09-05 16:18:34 +00002197#line 657 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002198 { /* Completely equivalent to above */
Lev Walkina00d6b32006-03-21 03:40:38 +00002199 yyval.a_expr = asn1p_expr_new(yylineno);
2200 checkmem(yyval.a_expr);
2201 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2202 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin418298d2006-07-13 08:24:20 +00002203 }
2204 break;
2205
2206 case 47:
Lev Walkinadf863f2006-09-05 16:18:34 +00002207#line 663 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002208 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002209 yyval.a_expr = asn1p_expr_new(yylineno);
2210 checkmem(yyval.a_expr);
2211 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2212 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin418298d2006-07-13 08:24:20 +00002213 }
2214 break;
2215
2216 case 48:
Lev Walkinadf863f2006-09-05 16:18:34 +00002217#line 672 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002218 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002219 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin418298d2006-07-13 08:24:20 +00002220 }
2221 break;
2222
2223 case 49:
Lev Walkinadf863f2006-09-05 16:18:34 +00002224#line 675 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002225 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002226 yyval.a_xports = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002227 }
2228 break;
2229
2230 case 50:
Lev Walkinadf863f2006-09-05 16:18:34 +00002231#line 678 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002232 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002233 /* Empty EXPORTS clause effectively prohibits export. */
Lev Walkina00d6b32006-03-21 03:40:38 +00002234 yyval.a_xports = asn1p_xports_new();
2235 checkmem(yyval.a_xports);
Lev Walkin418298d2006-07-13 08:24:20 +00002236 }
2237 break;
2238
2239 case 51:
Lev Walkinadf863f2006-09-05 16:18:34 +00002240#line 686 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002241 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002242 yyval.a_xports = asn1p_xports_new();
2243 assert(yyval.a_xports);
2244 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002245 }
2246 break;
2247
2248 case 52:
Lev Walkinadf863f2006-09-05 16:18:34 +00002249#line 691 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002250 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002251 yyval.a_xports = yyvsp[-2].a_xports;
2252 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002253 }
2254 break;
2255
2256 case 53:
Lev Walkinadf863f2006-09-05 16:18:34 +00002257#line 698 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002258 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002259 yyval.a_expr = asn1p_expr_new(yylineno);
2260 checkmem(yyval.a_expr);
2261 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2262 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin418298d2006-07-13 08:24:20 +00002263 }
2264 break;
2265
2266 case 54:
Lev Walkinadf863f2006-09-05 16:18:34 +00002267#line 704 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002268 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002269 yyval.a_expr = asn1p_expr_new(yylineno);
2270 checkmem(yyval.a_expr);
2271 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2272 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin418298d2006-07-13 08:24:20 +00002273 }
2274 break;
2275
2276 case 55:
Lev Walkinadf863f2006-09-05 16:18:34 +00002277#line 710 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002278 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002279 yyval.a_expr = asn1p_expr_new(yylineno);
2280 checkmem(yyval.a_expr);
2281 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2282 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin418298d2006-07-13 08:24:20 +00002283 }
2284 break;
2285
2286 case 56:
Lev Walkinadf863f2006-09-05 16:18:34 +00002287#line 719 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002288 { yyval.a_constr = yyvsp[-1].a_constr; }
2289 break;
2290
2291 case 57:
Lev Walkinadf863f2006-09-05 16:18:34 +00002292#line 722 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002293 {
Lev Walkin557f27d2006-03-21 07:46:48 +00002294 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkina00d6b32006-03-21 03:40:38 +00002295 assert(yyval.a_expr->Identifier == 0);
Lev Walkin557f27d2006-03-21 07:46:48 +00002296 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
Lev Walkina00d6b32006-03-21 03:40:38 +00002297 yyval.a_expr->meta_type = AMT_VALUESET;
Lev Walkin557f27d2006-03-21 07:46:48 +00002298 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00002299 }
2300 break;
2301
2302 case 58:
Lev Walkinadf863f2006-09-05 16:18:34 +00002303#line 732 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002304 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00002305 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002306 }
2307 break;
2308
2309 case 59:
Lev Walkinadf863f2006-09-05 16:18:34 +00002310#line 745 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002311 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002312 yyval.a_expr = asn1p_expr_new(yylineno);
2313 checkmem(yyval.a_expr);
2314 yyval.a_expr->reference = yyvsp[0].a_ref;
2315 yyval.a_expr->expr_type = A1TC_REFERENCE;
2316 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin418298d2006-07-13 08:24:20 +00002317 }
2318 break;
2319
2320 case 60:
Lev Walkinadf863f2006-09-05 16:18:34 +00002321#line 755 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002322 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002323 yyval.a_expr = asn1p_expr_new(yylineno);
2324 checkmem(yyval.a_expr);
Lev Walkin0c0bca62006-03-21 04:48:15 +00002325 yyval.a_expr->reference = yyvsp[-3].a_ref;
2326 yyval.a_expr->rhs_pspecs = yyvsp[-1].a_expr;
2327 yyval.a_expr->expr_type = A1TC_REFERENCE;
2328 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin418298d2006-07-13 08:24:20 +00002329 }
2330 break;
2331
2332 case 61:
Lev Walkinadf863f2006-09-05 16:18:34 +00002333#line 775 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002334 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002335 yyval.a_expr = yyvsp[0].a_expr;
2336 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2337 assert(yyval.a_expr->expr_type);
2338 assert(yyval.a_expr->meta_type);
Lev Walkin418298d2006-07-13 08:24:20 +00002339 }
2340 break;
2341
2342 case 62:
Lev Walkinadf863f2006-09-05 16:18:34 +00002343#line 781 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002344 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002345 yyval.a_expr = yyvsp[0].a_expr;
2346 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2347 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2348 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin418298d2006-07-13 08:24:20 +00002349 }
2350 break;
2351
2352 case 63:
Lev Walkinadf863f2006-09-05 16:18:34 +00002353#line 797 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002354 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002355 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkina00d6b32006-03-21 03:40:38 +00002356 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2357 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
Lev Walkin418298d2006-07-13 08:24:20 +00002358 }
2359 break;
2360
2361 case 64:
Lev Walkinadf863f2006-09-05 16:18:34 +00002362#line 803 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002363 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00002364 yyval.a_expr = yyvsp[0].a_expr;
2365 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2366 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
Lev Walkin418298d2006-07-13 08:24:20 +00002367 }
2368 break;
2369
2370 case 65:
Lev Walkinadf863f2006-09-05 16:18:34 +00002371#line 811 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002372 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002373 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002374 yyval.a_plist = asn1p_paramlist_new(yylineno);
2375 checkmem(yyval.a_plist);
2376 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 +00002377 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002378 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2379 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin418298d2006-07-13 08:24:20 +00002380 }
2381 break;
2382
2383 case 66:
Lev Walkinadf863f2006-09-05 16:18:34 +00002384#line 820 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002385 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002386 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002387 yyval.a_plist = yyvsp[-2].a_plist;
2388 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 +00002389 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002390 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2391 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin418298d2006-07-13 08:24:20 +00002392 }
2393 break;
2394
2395 case 67:
Lev Walkinadf863f2006-09-05 16:18:34 +00002396#line 831 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002397 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002398 yyval.a_parg.governor = NULL;
2399 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002400 }
2401 break;
2402
2403 case 68:
Lev Walkinadf863f2006-09-05 16:18:34 +00002404#line 835 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002405 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00002406 int ret;
2407 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2408 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
2409 checkmem(ret == 0);
2410 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002411 }
2412 break;
2413
2414 case 69:
Lev Walkinadf863f2006-09-05 16:18:34 +00002415#line 842 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002416 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00002417 int ret;
2418 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2419 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
2420 checkmem(ret == 0);
2421 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002422 }
2423 break;
2424
2425 case 70:
Lev Walkinadf863f2006-09-05 16:18:34 +00002426#line 849 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002427 {
Lev Walkinc8092cb2005-02-18 16:34:21 +00002428 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002429 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2430 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2431 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
Lev Walkinf15320b2004-06-03 03:38:44 +00002432 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002433 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002434 }
2435 break;
2436
2437 case 71:
Lev Walkinadf863f2006-09-05 16:18:34 +00002438#line 857 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002439 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00002440 int ret;
2441 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2442 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2443 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2444 checkmem(ret == 0);
2445 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002446 }
2447 break;
2448
2449 case 72:
Lev Walkinadf863f2006-09-05 16:18:34 +00002450#line 868 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002451 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002452 yyval.a_expr = asn1p_expr_new(yylineno);
2453 checkmem(yyval.a_expr);
2454 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002455 }
2456 break;
2457
2458 case 73:
Lev Walkinadf863f2006-09-05 16:18:34 +00002459#line 873 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002460 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002461 yyval.a_expr = yyvsp[-2].a_expr;
2462 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002463 }
2464 break;
2465
2466 case 74:
Lev Walkinadf863f2006-09-05 16:18:34 +00002467#line 880 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002468 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002469 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002470 }
2471 break;
2472
2473 case 75:
Lev Walkinadf863f2006-09-05 16:18:34 +00002474#line 883 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002475 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00002476 yyval.a_expr = asn1p_expr_new(yylineno);
2477 checkmem(yyval.a_expr);
2478 yyval.a_expr->Identifier = "?";
2479 yyval.a_expr->expr_type = A1TC_REFERENCE;
2480 yyval.a_expr->meta_type = AMT_VALUE;
2481 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00002482 }
2483 break;
2484
2485 case 76:
Lev Walkinadf863f2006-09-05 16:18:34 +00002486#line 891 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002487 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002488 asn1p_ref_t *ref;
2489 yyval.a_expr = asn1p_expr_new(yylineno);
2490 checkmem(yyval.a_expr);
2491 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2492 yyval.a_expr->expr_type = A1TC_REFERENCE;
2493 yyval.a_expr->meta_type = AMT_VALUE;
2494 ref = asn1p_ref_new(yylineno);
2495 asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2496 yyval.a_expr->value = asn1p_value_fromref(ref, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00002497 }
2498 break;
2499
2500 case 77:
Lev Walkinadf863f2006-09-05 16:18:34 +00002501#line 902 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002502 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00002503 yyval.a_expr = asn1p_expr_new(yylineno);
2504 yyval.a_expr->expr_type = A1TC_VALUESET;
2505 yyval.a_expr->meta_type = AMT_VALUESET;
2506 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00002507 }
2508 break;
2509
2510 case 78:
Lev Walkinadf863f2006-09-05 16:18:34 +00002511#line 925 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002512 { yyval.a_expr = asn1p_expr_new(yylineno); }
2513 break;
2514
2515 case 79:
Lev Walkinadf863f2006-09-05 16:18:34 +00002516#line 926 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002517 { yyval.a_expr = yyvsp[0].a_expr; }
2518 break;
2519
2520 case 80:
Lev Walkinadf863f2006-09-05 16:18:34 +00002521#line 929 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002522 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002523 yyval.a_expr = asn1p_expr_new(yylineno);
2524 checkmem(yyval.a_expr);
2525 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002526 }
2527 break;
2528
2529 case 81:
Lev Walkinadf863f2006-09-05 16:18:34 +00002530#line 934 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002531 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002532 yyval.a_expr = yyvsp[-2].a_expr;
2533 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002534 }
2535 break;
2536
2537 case 82:
Lev Walkinadf863f2006-09-05 16:18:34 +00002538#line 941 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002539 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002540 yyval.a_expr = yyvsp[-1].a_expr;
2541 assert(yyval.a_expr->Identifier == 0);
2542 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2543 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2544 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002545 }
2546 break;
2547
2548 case 83:
Lev Walkinadf863f2006-09-05 16:18:34 +00002549#line 948 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002550 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002551 yyval.a_expr = yyvsp[-1].a_expr;
2552 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2553 yyval.a_expr->marker = yyvsp[0].a_marker;
2554 _fixup_anonymous_identifier(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002555 }
2556 break;
2557
2558 case 84:
Lev Walkinadf863f2006-09-05 16:18:34 +00002559#line 954 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002560 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002561 yyval.a_expr = asn1p_expr_new(yylineno);
2562 checkmem(yyval.a_expr);
2563 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2564 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
2565 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002566 }
2567 break;
2568
2569 case 85:
Lev Walkinadf863f2006-09-05 16:18:34 +00002570#line 961 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002571 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002572 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002573 }
2574 break;
2575
2576 case 86:
Lev Walkinadf863f2006-09-05 16:18:34 +00002577#line 967 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002578 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002579 yyval.a_expr = asn1p_expr_new(yylineno);
2580 checkmem(yyval.a_expr);
2581 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002582 }
2583 break;
2584
2585 case 87:
Lev Walkinadf863f2006-09-05 16:18:34 +00002586#line 972 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002587 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002588 yyval.a_expr = yyvsp[-2].a_expr;
2589 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002590 }
2591 break;
2592
2593 case 88:
Lev Walkinadf863f2006-09-05 16:18:34 +00002594#line 979 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002595 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002596 yyval.a_expr = yyvsp[0].a_expr;
2597 assert(yyval.a_expr->Identifier == 0);
2598 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002599 }
2600 break;
2601
2602 case 89:
Lev Walkinadf863f2006-09-05 16:18:34 +00002603#line 984 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002604 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002605 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002606 }
2607 break;
2608
2609 case 90:
Lev Walkinadf863f2006-09-05 16:18:34 +00002610#line 987 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002611 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002612 yyval.a_expr = yyvsp[0].a_expr;
2613 _fixup_anonymous_identifier(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002614 }
2615 break;
2616
2617 case 91:
Lev Walkinadf863f2006-09-05 16:18:34 +00002618#line 994 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002619 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002620 yyval.a_expr = yyvsp[-2].a_expr;
2621 checkmem(yyval.a_expr);
2622 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2623 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2624 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin418298d2006-07-13 08:24:20 +00002625 }
2626 break;
2627
2628 case 92:
Lev Walkinadf863f2006-09-05 16:18:34 +00002629#line 1004 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002630 { yyval.a_int = 0; }
2631 break;
2632
2633 case 93:
Lev Walkinadf863f2006-09-05 16:18:34 +00002634#line 1005 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002635 { yyval.a_int = 1; }
2636 break;
2637
2638 case 94:
Lev Walkinadf863f2006-09-05 16:18:34 +00002639#line 1009 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002640 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002641 yyval.a_expr = asn1p_expr_new(yylineno);
2642 checkmem(yyval.a_expr);
2643 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2644 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2645 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002646 }
2647 break;
2648
2649 case 95:
Lev Walkinadf863f2006-09-05 16:18:34 +00002650#line 1016 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002651 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002652 yyval.a_expr = yyvsp[-2].a_expr;
2653 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002654 }
2655 break;
2656
2657 case 96:
Lev Walkinadf863f2006-09-05 16:18:34 +00002658#line 1026 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002659 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002660 yyval.a_expr = asn1p_expr_new(yylineno);
2661 checkmem(yyval.a_expr);
2662 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2663 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2664 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2665 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002666 }
2667 break;
2668
2669 case 97:
Lev Walkinadf863f2006-09-05 16:18:34 +00002670#line 1036 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002671 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002672 yyval.a_expr = asn1p_expr_new(yylineno);
2673 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2674 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2675 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2676 yyval.a_expr->unique = yyvsp[-1].a_int;
2677 yyval.a_expr->marker = yyvsp[0].a_marker;
2678 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002679 }
2680 break;
2681
2682 case 98:
Lev Walkinadf863f2006-09-05 16:18:34 +00002683#line 1047 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002684 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002685 yyval.a_expr = asn1p_expr_new(yylineno);
2686 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2687 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2688 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2689 yyval.a_expr->reference = yyvsp[-1].a_ref;
2690 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002691 }
2692 break;
2693
2694 case 99:
Lev Walkinadf863f2006-09-05 16:18:34 +00002695#line 1057 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002696 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002697 yyval.a_expr = asn1p_expr_new(yylineno);
2698 checkmem(yyval.a_expr);
2699 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2700 yyval.a_expr->reference = yyvsp[-1].a_ref;
2701 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2702 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2703 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002704 }
2705 break;
2706
2707 case 100:
Lev Walkinadf863f2006-09-05 16:18:34 +00002708#line 1068 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002709 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002710 yyval.a_expr = asn1p_expr_new(yylineno);
2711 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2712 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2713 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2714 yyval.a_expr->reference = yyvsp[-1].a_ref;
2715 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002716 }
2717 break;
2718
2719 case 101:
Lev Walkinadf863f2006-09-05 16:18:34 +00002720#line 1078 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002721 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002722 yyval.a_expr = asn1p_expr_new(yylineno);
2723 checkmem(yyval.a_expr);
2724 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2725 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2726 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2727 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
2728 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002729 }
2730 break;
2731
2732 case 102:
Lev Walkinadf863f2006-09-05 16:18:34 +00002733#line 1089 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002734 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002735 yyval.a_expr = asn1p_expr_new(yylineno);
2736 checkmem(yyval.a_expr);
2737 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2738 yyval.a_expr->reference = yyvsp[-1].a_ref;
2739 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2740 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2741 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002742 }
2743 break;
2744
2745 case 103:
Lev Walkinadf863f2006-09-05 16:18:34 +00002746#line 1101 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002747 { yyval.a_wsynt = 0; }
2748 break;
2749
2750 case 104:
Lev Walkinadf863f2006-09-05 16:18:34 +00002751#line 1102 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002752 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002753 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin418298d2006-07-13 08:24:20 +00002754 }
2755 break;
2756
2757 case 105:
Lev Walkinadf863f2006-09-05 16:18:34 +00002758#line 1109 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002759 { asn1p_lexer_hack_enable_with_syntax(); }
2760 break;
2761
2762 case 106:
Lev Walkinadf863f2006-09-05 16:18:34 +00002763#line 1111 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002764 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002765 yyval.a_wsynt = yyvsp[-1].a_wsynt;
Lev Walkin418298d2006-07-13 08:24:20 +00002766 }
2767 break;
2768
2769 case 107:
Lev Walkinadf863f2006-09-05 16:18:34 +00002770#line 1117 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002771 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002772 yyval.a_wsynt = asn1p_wsyntx_new();
2773 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002774 }
2775 break;
2776
2777 case 108:
Lev Walkinadf863f2006-09-05 16:18:34 +00002778#line 1121 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002779 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002780 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2781 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002782 }
2783 break;
2784
2785 case 109:
Lev Walkinadf863f2006-09-05 16:18:34 +00002786#line 1128 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002787 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002788 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_opaque.buf, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002789 yyval.a_wchunk->type = WC_WHITESPACE;
Lev Walkin418298d2006-07-13 08:24:20 +00002790 }
2791 break;
2792
2793 case 110:
Lev Walkinadf863f2006-09-05 16:18:34 +00002794#line 1132 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002795 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002796 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_str, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00002797 }
2798 break;
2799
2800 case 111:
Lev Walkinadf863f2006-09-05 16:18:34 +00002801#line 1135 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002802 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002803 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].a_refcomp.name, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002804 yyval.a_wchunk->type = WC_FIELD;
Lev Walkin418298d2006-07-13 08:24:20 +00002805 }
2806 break;
2807
2808 case 112:
Lev Walkinadf863f2006-09-05 16:18:34 +00002809#line 1139 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002810 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002811 yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
Lev Walkin418298d2006-07-13 08:24:20 +00002812 }
2813 break;
2814
2815 case 113:
Lev Walkinadf863f2006-09-05 16:18:34 +00002816#line 1145 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002817 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00002818 yyval.a_expr = asn1p_expr_new(yylineno);
2819 checkmem(yyval.a_expr);
2820 yyval.a_expr->Identifier = strdup("...");
2821 checkmem(yyval.a_expr->Identifier);
2822 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2823 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002824 }
2825 break;
2826
2827 case 114:
Lev Walkinadf863f2006-09-05 16:18:34 +00002828#line 1153 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002829 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00002830 yyval.a_expr = asn1p_expr_new(yylineno);
2831 checkmem(yyval.a_expr);
2832 yyval.a_expr->Identifier = strdup("...");
2833 checkmem(yyval.a_expr->Identifier);
2834 yyval.a_expr->value = yyvsp[0].a_value;
2835 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2836 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002837 }
2838 break;
2839
2840 case 115:
Lev Walkinadf863f2006-09-05 16:18:34 +00002841#line 1162 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002842 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00002843 yyval.a_expr = asn1p_expr_new(yylineno);
2844 checkmem(yyval.a_expr);
2845 yyval.a_expr->Identifier = strdup("...");
2846 yyval.a_expr->value = yyvsp[0].a_value;
2847 checkmem(yyval.a_expr->Identifier);
2848 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2849 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002850 }
2851 break;
2852
2853 case 116:
Lev Walkinadf863f2006-09-05 16:18:34 +00002854#line 1174 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002855 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002856 yyval.a_expr = yyvsp[-1].a_expr;
2857 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002858 /*
2859 * Outer constraint for SEQUENCE OF and SET OF applies
2860 * to the inner type.
2861 */
Lev Walkina00d6b32006-03-21 03:40:38 +00002862 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2863 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2864 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2865 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002866 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002867 if(yyval.a_expr->constraints) {
2868 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002869 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002870 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002871 }
2872 }
Lev Walkin418298d2006-07-13 08:24:20 +00002873 }
2874 break;
2875
2876 case 117:
Lev Walkinadf863f2006-09-05 16:18:34 +00002877#line 1196 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002878 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002879 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
Lev Walkinfb872bd2006-03-18 06:53:11 +00002880 asn1p_as_pointer = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002881 }
2882 break;
2883
2884 case 118:
Lev Walkinadf863f2006-09-05 16:18:34 +00002885#line 1203 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002886 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002887 yyval.a_expr = yyvsp[0].a_expr;
2888 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
Lev Walkinfb872bd2006-03-18 06:53:11 +00002889
Lev Walkina00d6b32006-03-21 03:40:38 +00002890 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2891 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
Lev Walkinef625402005-09-05 05:17:57 +00002892 fprintf(stderr,
2893 "INFO: Directive <ASN1C:RepresentAsPointer> "
2894 "applied to %s at line %d\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00002895 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2896 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
Lev Walkinef625402005-09-05 05:17:57 +00002897 : "member",
Lev Walkina00d6b32006-03-21 03:40:38 +00002898 yyval.a_expr->_lineno
Lev Walkinef625402005-09-05 05:17:57 +00002899 );
2900 }
Lev Walkin418298d2006-07-13 08:24:20 +00002901 }
2902 break;
2903
2904 case 119:
Lev Walkinadf863f2006-09-05 16:18:34 +00002905#line 1222 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002906 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002907 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002908 }
2909 break;
2910
2911 case 120:
Lev Walkinadf863f2006-09-05 16:18:34 +00002912#line 1225 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002913 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002914 yyval.a_expr = yyvsp[-1].a_expr;
2915 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2916 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2917 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002918 }
2919 break;
2920
2921 case 121:
Lev Walkinadf863f2006-09-05 16:18:34 +00002922#line 1231 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002923 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002924 yyval.a_expr = yyvsp[-1].a_expr;
2925 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2926 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2927 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002928 }
2929 break;
2930
2931 case 122:
Lev Walkinadf863f2006-09-05 16:18:34 +00002932#line 1237 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002933 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002934 yyval.a_expr = yyvsp[-1].a_expr;
2935 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2936 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2937 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002938 }
2939 break;
2940
2941 case 123:
Lev Walkinadf863f2006-09-05 16:18:34 +00002942#line 1243 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002943 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002944 yyval.a_expr = asn1p_expr_new(yylineno);
2945 checkmem(yyval.a_expr);
2946 yyval.a_expr->constraints = yyvsp[-4].a_constr;
2947 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2948 yyval.a_expr->meta_type = AMT_TYPE;
2949 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
2950 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
2951 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002952 }
2953 break;
2954
2955 case 124:
Lev Walkinadf863f2006-09-05 16:18:34 +00002956#line 1253 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002957 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002958 yyval.a_expr = asn1p_expr_new(yylineno);
2959 checkmem(yyval.a_expr);
2960 yyval.a_expr->constraints = yyvsp[-4].a_constr;
2961 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2962 yyval.a_expr->meta_type = AMT_TYPE;
2963 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
2964 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
2965 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002966 }
2967 break;
2968
2969 case 125:
Lev Walkinadf863f2006-09-05 16:18:34 +00002970#line 1263 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002971 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002972 yyval.a_expr = asn1p_expr_new(yylineno);
2973 checkmem(yyval.a_expr);
2974 yyval.a_expr->expr_type = ASN_TYPE_ANY;
2975 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002976 }
2977 break;
2978
2979 case 126:
Lev Walkinadf863f2006-09-05 16:18:34 +00002980#line 1269 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002981 {
Lev Walkin070a52d2004-08-22 03:19:54 +00002982 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002983 yyval.a_expr = asn1p_expr_new(yylineno);
2984 checkmem(yyval.a_expr);
2985 yyval.a_expr->reference = asn1p_ref_new(yylineno);
2986 ret = asn1p_ref_add_component(yyval.a_expr->reference,
2987 yyvsp[0].tv_str, RLT_lowercase);
Lev Walkin070a52d2004-08-22 03:19:54 +00002988 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002989 yyval.a_expr->expr_type = ASN_TYPE_ANY;
2990 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002991 }
2992 break;
2993
2994 case 127:
Lev Walkinadf863f2006-09-05 16:18:34 +00002995#line 1280 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002996 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002997 yyval.a_expr = asn1p_expr_new(yylineno);
2998 checkmem(yyval.a_expr);
2999 yyval.a_expr->reference = yyvsp[0].a_ref;
3000 yyval.a_expr->expr_type = A1TC_INSTANCE;
3001 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003002 }
3003 break;
3004
3005 case 128:
Lev Walkinadf863f2006-09-05 16:18:34 +00003006#line 1295 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003007 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003008 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003009 yyval.a_ref = asn1p_ref_new(yylineno);
3010 checkmem(yyval.a_ref);
3011 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00003012 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003013 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003014 }
3015 break;
3016
3017 case 129:
Lev Walkinadf863f2006-09-05 16:18:34 +00003018#line 1303 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003019 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003020 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003021 yyval.a_ref = asn1p_ref_new(yylineno);
3022 checkmem(yyval.a_ref);
3023 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00003024 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003025 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3026 checkmem(ret == 0);
3027 free(yyvsp[-2].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003028 }
3029 break;
3030
3031 case 130:
Lev Walkinadf863f2006-09-05 16:18:34 +00003032#line 1313 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003033 {
Lev Walkin9d542d22006-03-14 16:31:37 +00003034 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003035 yyval.a_ref = asn1p_ref_new(yylineno);
3036 checkmem(yyval.a_ref);
3037 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00003038 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003039 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00003040 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003041 free(yyvsp[-2].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003042 }
3043 break;
3044
3045 case 131:
Lev Walkinadf863f2006-09-05 16:18:34 +00003046#line 1323 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003047 {
Lev Walkin9d542d22006-03-14 16:31:37 +00003048 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003049 yyval.a_ref = asn1p_ref_new(yylineno);
3050 checkmem(yyval.a_ref);
3051 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00003052 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003053 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkin9d542d22006-03-14 16:31:37 +00003054 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003055 free(yyvsp[-2].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003056 }
3057 break;
3058
3059 case 132:
Lev Walkinadf863f2006-09-05 16:18:34 +00003060#line 1333 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003061 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003062 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003063 yyval.a_ref = asn1p_ref_new(yylineno);
3064 checkmem(yyval.a_ref);
3065 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
3066 free(yyvsp[0].tv_str);
Lev Walkin9c974182004-09-15 11:59:51 +00003067 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003068 }
3069 break;
3070
3071 case 133:
Lev Walkinadf863f2006-09-05 16:18:34 +00003072#line 1341 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003073 {
Lev Walkin9c974182004-09-15 11:59:51 +00003074 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003075 yyval.a_ref = yyvsp[0].a_ref;
3076 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
3077 free(yyvsp[-2].tv_str);
Lev Walkinf15320b2004-06-03 03:38:44 +00003078 checkmem(ret == 0);
3079 /*
3080 * Move the last element infront.
3081 */
3082 {
3083 struct asn1p_ref_component_s tmp_comp;
Lev Walkina00d6b32006-03-21 03:40:38 +00003084 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
3085 memmove(&yyval.a_ref->components[1],
3086 &yyval.a_ref->components[0],
3087 sizeof(yyval.a_ref->components[0])
3088 * (yyval.a_ref->comp_count - 1));
3089 yyval.a_ref->components[0] = tmp_comp;
Lev Walkinf15320b2004-06-03 03:38:44 +00003090 }
Lev Walkin418298d2006-07-13 08:24:20 +00003091 }
3092 break;
3093
3094 case 134:
Lev Walkinadf863f2006-09-05 16:18:34 +00003095#line 1363 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003096 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003097 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003098 yyval.a_ref = asn1p_ref_new(yylineno);
3099 checkmem(yyval.a_ref);
3100 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
3101 free(yyvsp[0].a_refcomp.name);
Lev Walkinf15320b2004-06-03 03:38:44 +00003102 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003103 }
3104 break;
3105
3106 case 135:
Lev Walkinadf863f2006-09-05 16:18:34 +00003107#line 1371 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003108 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003109 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003110 yyval.a_ref = yyvsp[-2].a_ref;
3111 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
3112 free(yyvsp[0].a_refcomp.name);
Lev Walkinf15320b2004-06-03 03:38:44 +00003113 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003114 }
3115 break;
3116
3117 case 137:
Lev Walkinadf863f2006-09-05 16:18:34 +00003118#line 1384 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003119 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003120 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
3121 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00003122 }
3123 break;
3124
3125 case 138:
Lev Walkinadf863f2006-09-05 16:18:34 +00003126#line 1389 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003127 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003128 yyval.a_refcomp.lex_type = RLT_Amplowercase;
3129 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00003130 }
3131 break;
3132
3133 case 139:
Lev Walkinadf863f2006-09-05 16:18:34 +00003134#line 1398 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003135 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003136 yyval.a_ref = asn1p_ref_new(yylineno);
3137 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003138 }
3139 break;
3140
3141 case 140:
Lev Walkinadf863f2006-09-05 16:18:34 +00003142#line 1402 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003143 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003144 yyval.a_ref = yyval.a_ref;
3145 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003146 }
3147 break;
3148
3149 case 141:
Lev Walkinadf863f2006-09-05 16:18:34 +00003150#line 1406 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003151 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003152 yyval.a_ref = yyval.a_ref;
3153 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003154 }
3155 break;
3156
3157 case 142:
Lev Walkinadf863f2006-09-05 16:18:34 +00003158#line 1413 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003159 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003160 yyval.a_ref = asn1p_ref_new(yylineno);
3161 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
Lev Walkin418298d2006-07-13 08:24:20 +00003162 }
3163 break;
3164
3165 case 143:
Lev Walkinadf863f2006-09-05 16:18:34 +00003166#line 1433 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003167 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003168 yyval.a_expr = yyvsp[-2].a_expr;
3169 assert(yyval.a_expr->Identifier == NULL);
3170 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3171 yyval.a_expr->meta_type = AMT_VALUE;
3172 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003173 }
3174 break;
3175
3176 case 146:
Lev Walkinadf863f2006-09-05 16:18:34 +00003177#line 1445 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003178 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003179 yyval.a_value = asn1p_value_fromint(0);
3180 checkmem(yyval.a_value);
3181 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
3182 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
3183 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003184 }
3185 break;
3186
3187 case 147:
Lev Walkinadf863f2006-09-05 16:18:34 +00003188#line 1452 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003189 { asn1p_lexer_hack_push_opaque_state(); }
3190 break;
3191
3192 case 148:
Lev Walkinadf863f2006-09-05 16:18:34 +00003193#line 1452 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003194 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003195 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3196 checkmem(yyval.a_value);
3197 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin418298d2006-07-13 08:24:20 +00003198 }
3199 break;
3200
3201 case 149:
Lev Walkinadf863f2006-09-05 16:18:34 +00003202#line 1457 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003203 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003204 yyval.a_value = asn1p_value_fromint(0);
3205 checkmem(yyval.a_value);
3206 yyval.a_value->type = ATV_NULL;
Lev Walkin418298d2006-07-13 08:24:20 +00003207 }
3208 break;
3209
3210 case 150:
Lev Walkinadf863f2006-09-05 16:18:34 +00003211#line 1465 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003212 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003213 yyval.a_value = asn1p_value_fromint(0);
3214 checkmem(yyval.a_value);
3215 yyval.a_value->type = ATV_FALSE;
Lev Walkin418298d2006-07-13 08:24:20 +00003216 }
3217 break;
3218
3219 case 151:
Lev Walkinadf863f2006-09-05 16:18:34 +00003220#line 1470 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003221 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003222 yyval.a_value = asn1p_value_fromint(0);
3223 checkmem(yyval.a_value);
3224 yyval.a_value->type = ATV_TRUE;
Lev Walkin418298d2006-07-13 08:24:20 +00003225 }
3226 break;
3227
3228 case 152:
Lev Walkinadf863f2006-09-05 16:18:34 +00003229#line 1475 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003230 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003231 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
3232 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003233 }
3234 break;
3235
3236 case 153:
Lev Walkinadf863f2006-09-05 16:18:34 +00003237#line 1479 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003238 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003239 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
3240 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003241 }
3242 break;
3243
3244 case 154:
Lev Walkinadf863f2006-09-05 16:18:34 +00003245#line 1483 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003246 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003247 yyval.a_value = yyval.a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003248 }
3249 break;
3250
3251 case 155:
Lev Walkinadf863f2006-09-05 16:18:34 +00003252#line 1486 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003253 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00003254 yyval.a_value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003255 }
3256 break;
3257
3258 case 156:
Lev Walkinadf863f2006-09-05 16:18:34 +00003259#line 1492 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003260 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003261 asn1p_ref_t *ref;
3262 int ret;
3263 ref = asn1p_ref_new(yylineno);
3264 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003265 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003266 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003267 yyval.a_value = asn1p_value_fromref(ref, 0);
3268 checkmem(yyval.a_value);
3269 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003270 }
3271 break;
3272
3273 case 157:
Lev Walkinadf863f2006-09-05 16:18:34 +00003274#line 1503 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003275 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003276 asn1p_ref_t *ref;
3277 int ret;
3278 ref = asn1p_ref_new(yylineno);
3279 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003280 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00003281 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003282 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003283 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003284 yyval.a_value = asn1p_value_fromref(ref, 0);
3285 checkmem(yyval.a_value);
3286 free(yyvsp[-2].tv_str);
3287 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003288 }
3289 break;
3290
3291 case 158:
Lev Walkinadf863f2006-09-05 16:18:34 +00003292#line 1521 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003293 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003294 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3295 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003296 }
3297 break;
3298
3299 case 159:
Lev Walkinadf863f2006-09-05 16:18:34 +00003300#line 1525 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003301 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003302 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3303 checkmem(yyval.a_value);
3304 yyval.a_value->type = ATV_TUPLE;
Lev Walkin418298d2006-07-13 08:24:20 +00003305 }
3306 break;
3307
3308 case 160:
Lev Walkinadf863f2006-09-05 16:18:34 +00003309#line 1530 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003310 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003311 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3312 checkmem(yyval.a_value);
3313 yyval.a_value->type = ATV_QUADRUPLE;
Lev Walkin418298d2006-07-13 08:24:20 +00003314 }
3315 break;
3316
3317 case 161:
Lev Walkinadf863f2006-09-05 16:18:34 +00003318#line 1564 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003319 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003320 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
3321 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
3322 checkmem(yyval.tv_opaque.buf);
3323 yyval.tv_opaque.buf[0] = '{';
3324 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
3325 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
3326 free(yyvsp[0].tv_opaque.buf);
Lev Walkin418298d2006-07-13 08:24:20 +00003327 }
3328 break;
3329
3330 case 162:
Lev Walkinadf863f2006-09-05 16:18:34 +00003331#line 1573 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003332 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003333 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
Lev Walkinf15320b2004-06-03 03:38:44 +00003334 char *p = malloc(newsize + 1);
3335 checkmem(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00003336 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
3337 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00003338 p[newsize] = '\0';
Lev Walkina00d6b32006-03-21 03:40:38 +00003339 free(yyvsp[-1].tv_opaque.buf);
3340 free(yyvsp[0].tv_opaque.buf);
3341 yyval.tv_opaque.buf = p;
3342 yyval.tv_opaque.len = newsize;
Lev Walkin418298d2006-07-13 08:24:20 +00003343 }
3344 break;
3345
3346 case 163:
Lev Walkinadf863f2006-09-05 16:18:34 +00003347#line 1588 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003348 { yyval.a_type = ASN_BASIC_BOOLEAN; }
3349 break;
3350
3351 case 164:
Lev Walkinadf863f2006-09-05 16:18:34 +00003352#line 1589 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003353 { yyval.a_type = ASN_BASIC_NULL; }
3354 break;
3355
3356 case 165:
Lev Walkinadf863f2006-09-05 16:18:34 +00003357#line 1590 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003358 { yyval.a_type = ASN_BASIC_REAL; }
3359 break;
3360
3361 case 166:
Lev Walkinadf863f2006-09-05 16:18:34 +00003362#line 1591 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003363 { yyval.a_type = yyvsp[0].a_type; }
3364 break;
3365
3366 case 167:
Lev Walkinadf863f2006-09-05 16:18:34 +00003367#line 1592 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003368 { yyval.a_type = ASN_BASIC_OCTET_STRING; }
3369 break;
3370
3371 case 168:
Lev Walkinadf863f2006-09-05 16:18:34 +00003372#line 1593 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003373 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
3374 break;
3375
3376 case 169:
Lev Walkinadf863f2006-09-05 16:18:34 +00003377#line 1594 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003378 { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
3379 break;
3380
3381 case 170:
Lev Walkinadf863f2006-09-05 16:18:34 +00003382#line 1595 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003383 { yyval.a_type = ASN_BASIC_EXTERNAL; }
3384 break;
3385
3386 case 171:
Lev Walkinadf863f2006-09-05 16:18:34 +00003387#line 1596 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003388 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
3389 break;
3390
3391 case 172:
Lev Walkinadf863f2006-09-05 16:18:34 +00003392#line 1597 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003393 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
3394 break;
3395
3396 case 173:
Lev Walkinadf863f2006-09-05 16:18:34 +00003397#line 1598 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003398 { yyval.a_type = ASN_BASIC_UTCTime; }
3399 break;
3400
3401 case 174:
Lev Walkinadf863f2006-09-05 16:18:34 +00003402#line 1599 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003403 { yyval.a_type = ASN_BASIC_GeneralizedTime; }
3404 break;
3405
3406 case 175:
Lev Walkinadf863f2006-09-05 16:18:34 +00003407#line 1600 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003408 { yyval.a_type = yyvsp[0].a_type; }
3409 break;
3410
3411 case 176:
Lev Walkinadf863f2006-09-05 16:18:34 +00003412#line 1607 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003413 { yyval.a_type = ASN_BASIC_INTEGER; }
3414 break;
3415
3416 case 177:
Lev Walkinadf863f2006-09-05 16:18:34 +00003417#line 1608 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003418 { yyval.a_type = ASN_BASIC_ENUMERATED; }
3419 break;
3420
3421 case 178:
Lev Walkinadf863f2006-09-05 16:18:34 +00003422#line 1609 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003423 { yyval.a_type = ASN_BASIC_BIT_STRING; }
3424 break;
3425
3426 case 179:
Lev Walkinadf863f2006-09-05 16:18:34 +00003427#line 1613 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003428 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003429 yyval.a_expr = asn1p_expr_new(yylineno);
3430 checkmem(yyval.a_expr);
3431 yyval.a_expr->expr_type = yyvsp[0].a_type;
3432 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003433 }
3434 break;
3435
3436 case 180:
Lev Walkinadf863f2006-09-05 16:18:34 +00003437#line 1619 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003438 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003439 if(yyvsp[0].a_expr) {
3440 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinf15320b2004-06-03 03:38:44 +00003441 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00003442 yyval.a_expr = asn1p_expr_new(yylineno);
3443 checkmem(yyval.a_expr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003444 }
Lev Walkina00d6b32006-03-21 03:40:38 +00003445 yyval.a_expr->expr_type = yyvsp[-1].a_type;
3446 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003447 }
3448 break;
3449
3450 case 181:
Lev Walkinadf863f2006-09-05 16:18:34 +00003451#line 1632 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003452 { yyval.a_type = ASN_STRING_BMPString; }
3453 break;
3454
3455 case 182:
Lev Walkinadf863f2006-09-05 16:18:34 +00003456#line 1633 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003457 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003458 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00003459 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003460 }
3461 break;
3462
3463 case 183:
Lev Walkinadf863f2006-09-05 16:18:34 +00003464#line 1637 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003465 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003466 yyval.a_type = ASN_STRING_GraphicString;
Lev Walkin9c974182004-09-15 11:59:51 +00003467 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003468 }
3469 break;
3470
3471 case 184:
Lev Walkinadf863f2006-09-05 16:18:34 +00003472#line 1641 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003473 { yyval.a_type = ASN_STRING_IA5String; }
3474 break;
3475
3476 case 185:
Lev Walkinadf863f2006-09-05 16:18:34 +00003477#line 1642 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003478 { yyval.a_type = ASN_STRING_ISO646String; }
3479 break;
3480
3481 case 186:
Lev Walkinadf863f2006-09-05 16:18:34 +00003482#line 1643 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003483 { yyval.a_type = ASN_STRING_NumericString; }
3484 break;
3485
3486 case 187:
Lev Walkinadf863f2006-09-05 16:18:34 +00003487#line 1644 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003488 { yyval.a_type = ASN_STRING_PrintableString; }
3489 break;
3490
3491 case 188:
Lev Walkinadf863f2006-09-05 16:18:34 +00003492#line 1645 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003493 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003494 yyval.a_type = ASN_STRING_T61String;
Lev Walkin9c974182004-09-15 11:59:51 +00003495 fprintf(stderr, "WARNING: T61String is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003496 }
3497 break;
3498
3499 case 189:
Lev Walkinadf863f2006-09-05 16:18:34 +00003500#line 1649 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003501 { yyval.a_type = ASN_STRING_TeletexString; }
3502 break;
3503
3504 case 190:
Lev Walkinadf863f2006-09-05 16:18:34 +00003505#line 1650 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003506 { yyval.a_type = ASN_STRING_UniversalString; }
3507 break;
3508
3509 case 191:
Lev Walkinadf863f2006-09-05 16:18:34 +00003510#line 1651 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003511 { yyval.a_type = ASN_STRING_UTF8String; }
3512 break;
3513
3514 case 192:
Lev Walkinadf863f2006-09-05 16:18:34 +00003515#line 1652 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003516 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003517 yyval.a_type = ASN_STRING_VideotexString;
Lev Walkin9c974182004-09-15 11:59:51 +00003518 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003519 }
3520 break;
3521
3522 case 193:
Lev Walkinadf863f2006-09-05 16:18:34 +00003523#line 1656 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003524 { yyval.a_type = ASN_STRING_VisibleString; }
3525 break;
3526
3527 case 194:
Lev Walkinadf863f2006-09-05 16:18:34 +00003528#line 1657 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003529 { yyval.a_type = ASN_STRING_ObjectDescriptor; }
3530 break;
3531
3532 case 200:
Lev Walkinadf863f2006-09-05 16:18:34 +00003533#line 1669 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003534 { yyval.a_constr = 0; }
3535 break;
3536
3537 case 201:
Lev Walkinadf863f2006-09-05 16:18:34 +00003538#line 1670 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003539 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003540 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003541 }
3542 break;
3543
3544 case 202:
Lev Walkinadf863f2006-09-05 16:18:34 +00003545#line 1676 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003546 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003547 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003548 }
3549 break;
3550
3551 case 203:
Lev Walkinadf863f2006-09-05 16:18:34 +00003552#line 1679 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003553 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003554 /*
3555 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00003556 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00003557 */
Lev Walkina00d6b32006-03-21 03:40:38 +00003558 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003559 }
3560 break;
3561
3562 case 204:
Lev Walkinadf863f2006-09-05 16:18:34 +00003563#line 1689 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003564 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003565 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003566 }
3567 break;
3568
3569 case 205:
Lev Walkinadf863f2006-09-05 16:18:34 +00003570#line 1692 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003571 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003572 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003573 }
3574 break;
3575
3576 case 206:
Lev Walkinadf863f2006-09-05 16:18:34 +00003577#line 1698 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003578 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00003579 yyval.a_constr = asn1p_constraint_new(yylineno);
3580 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin418298d2006-07-13 08:24:20 +00003581 }
3582 break;
3583
3584 case 207:
Lev Walkinadf863f2006-09-05 16:18:34 +00003585#line 1702 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003586 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003587 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003588 }
3589 break;
3590
3591 case 208:
Lev Walkinadf863f2006-09-05 16:18:34 +00003592#line 1705 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003593 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003594 asn1p_constraint_t *ct;
3595 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003596 ct->type = ACT_EL_EXT;
Lev Walkina00d6b32006-03-21 03:40:38 +00003597 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin418298d2006-07-13 08:24:20 +00003598 }
3599 break;
3600
3601 case 209:
Lev Walkinadf863f2006-09-05 16:18:34 +00003602#line 1711 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003603 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003604 asn1p_constraint_t *ct;
3605 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003606 ct->type = ACT_EL_EXT;
Lev Walkina00d6b32006-03-21 03:40:38 +00003607 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
3608 ct = yyval.a_constr;
3609 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003610 }
3611 break;
3612
3613 case 210:
Lev Walkinadf863f2006-09-05 16:18:34 +00003614#line 1722 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003615 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003616 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003617 }
3618 break;
3619
3620 case 211:
Lev Walkinadf863f2006-09-05 16:18:34 +00003621#line 1725 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003622 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003623 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003624 }
3625 break;
3626
3627 case 212:
Lev Walkinadf863f2006-09-05 16:18:34 +00003628#line 1728 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003629 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003630 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003631 }
3632 break;
3633
3634 case 213:
Lev Walkinadf863f2006-09-05 16:18:34 +00003635#line 1731 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003636 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003637 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003638 }
3639 break;
3640
3641 case 214:
Lev Walkinadf863f2006-09-05 16:18:34 +00003642#line 1734 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003643 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003644 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003645 }
3646 break;
3647
3648 case 215:
Lev Walkinadf863f2006-09-05 16:18:34 +00003649#line 1740 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003650 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003651 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003652 yyval.a_constr = asn1p_constraint_new(yylineno);
3653 checkmem(yyval.a_constr);
3654 yyval.a_constr->type = yyvsp[-3].a_ctype;
3655 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003656 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003657 }
3658 break;
3659
3660 case 216:
Lev Walkinadf863f2006-09-05 16:18:34 +00003661#line 1748 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003662 {
Lev Walkinf59d0752004-08-18 04:59:12 +00003663 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003664 yyval.a_constr = asn1p_constraint_new(yylineno);
3665 checkmem(yyval.a_constr);
3666 yyval.a_constr->type = ACT_CA_SET;
3667 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkinf59d0752004-08-18 04:59:12 +00003668 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003669 }
3670 break;
3671
3672 case 217:
Lev Walkinadf863f2006-09-05 16:18:34 +00003673#line 1756 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003674 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003675 yyval.a_constr = asn1p_constraint_new(yylineno);
3676 checkmem(yyval.a_constr);
3677 yyval.a_constr->type = ACT_EL_VALUE;
3678 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003679 }
3680 break;
3681
3682 case 218:
Lev Walkinadf863f2006-09-05 16:18:34 +00003683#line 1762 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003684 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003685 yyval.a_constr = asn1p_constraint_new(yylineno);
3686 checkmem(yyval.a_constr);
3687 yyval.a_constr->type = ACT_EL_TYPE;
3688 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003689 }
3690 break;
3691
3692 case 219:
Lev Walkinadf863f2006-09-05 16:18:34 +00003693#line 1768 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003694 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00003695 yyval.a_constr = asn1p_constraint_new(yylineno);
3696 checkmem(yyval.a_constr);
3697 yyval.a_constr->type = yyvsp[-1].a_ctype;
3698 yyval.a_constr->range_start = yyvsp[-2].a_value;
3699 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003700 }
3701 break;
3702
3703 case 220:
Lev Walkinadf863f2006-09-05 16:18:34 +00003704#line 1775 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003705 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00003706 yyval.a_constr = asn1p_constraint_new(yylineno);
3707 checkmem(yyval.a_constr);
3708 yyval.a_constr->type = yyvsp[-1].a_ctype;
3709 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3710 yyval.a_constr->range_stop = yyvsp[0].a_value;
3711 yyval.a_constr->range_start->type = ATV_MIN;
Lev Walkin418298d2006-07-13 08:24:20 +00003712 }
3713 break;
3714
3715 case 221:
Lev Walkinadf863f2006-09-05 16:18:34 +00003716#line 1783 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003717 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00003718 yyval.a_constr = asn1p_constraint_new(yylineno);
3719 checkmem(yyval.a_constr);
3720 yyval.a_constr->type = yyvsp[-1].a_ctype;
3721 yyval.a_constr->range_start = yyvsp[-2].a_value;
3722 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3723 yyval.a_constr->range_stop->type = ATV_MAX;
Lev Walkin418298d2006-07-13 08:24:20 +00003724 }
3725 break;
3726
3727 case 222:
Lev Walkinadf863f2006-09-05 16:18:34 +00003728#line 1791 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003729 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00003730 yyval.a_constr = asn1p_constraint_new(yylineno);
3731 checkmem(yyval.a_constr);
3732 yyval.a_constr->type = yyvsp[-1].a_ctype;
3733 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3734 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3735 yyval.a_constr->range_start->type = ATV_MIN;
3736 yyval.a_constr->range_stop->type = ATV_MAX;
Lev Walkin418298d2006-07-13 08:24:20 +00003737 }
3738 break;
3739
3740 case 223:
Lev Walkin5045dfa2006-03-21 09:41:28 +00003741#line 1800 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003742 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00003743 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003744 }
3745 break;
3746
Lev Walkinadf863f2006-09-05 16:18:34 +00003747 case 224:
3748#line 1803 "asn1p_y.y"
3749 {
3750 yyval.a_constr = yyvsp[0].a_constr;
3751 }
3752 break;
3753
Lev Walkin418298d2006-07-13 08:24:20 +00003754 case 225:
Lev Walkinadf863f2006-09-05 16:18:34 +00003755#line 1807 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003756 { asn1p_lexer_hack_push_opaque_state(); }
3757 break;
3758
3759 case 226:
Lev Walkinadf863f2006-09-05 16:18:34 +00003760#line 1807 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003761 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003762 yyval.a_constr = asn1p_constraint_new(yylineno);
3763 checkmem(yyval.a_constr);
3764 yyval.a_constr->type = ACT_CT_CTDBY;
3765 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3766 checkmem(yyval.a_constr->value);
3767 yyval.a_constr->value->type = ATV_UNPARSED;
Lev Walkin418298d2006-07-13 08:24:20 +00003768 }
3769 break;
3770
3771 case 227:
Lev Walkinadf863f2006-09-05 16:18:34 +00003772#line 1818 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003773 { yyval.a_ctype = ACT_EL_RANGE; }
3774 break;
3775
3776 case 228:
Lev Walkinadf863f2006-09-05 16:18:34 +00003777#line 1819 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003778 { yyval.a_ctype = ACT_EL_RLRANGE; }
3779 break;
3780
3781 case 229:
Lev Walkinadf863f2006-09-05 16:18:34 +00003782#line 1820 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003783 { yyval.a_ctype = ACT_EL_LLRANGE; }
3784 break;
3785
3786 case 230:
Lev Walkinadf863f2006-09-05 16:18:34 +00003787#line 1821 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003788 { yyval.a_ctype = ACT_EL_ULRANGE; }
3789 break;
3790
3791 case 231:
Lev Walkinadf863f2006-09-05 16:18:34 +00003792#line 1825 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003793 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003794 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin418298d2006-07-13 08:24:20 +00003795 }
3796 break;
3797
3798 case 232:
Lev Walkinadf863f2006-09-05 16:18:34 +00003799#line 1828 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003800 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003801 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin418298d2006-07-13 08:24:20 +00003802 }
3803 break;
3804
3805 case 233:
Lev Walkinadf863f2006-09-05 16:18:34 +00003806#line 1834 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003807 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003808 yyval.a_value = asn1p_value_fromint(0);
3809 checkmem(yyval.a_value);
3810 yyval.a_value->type = ATV_FALSE;
Lev Walkin418298d2006-07-13 08:24:20 +00003811 }
3812 break;
3813
3814 case 234:
Lev Walkinadf863f2006-09-05 16:18:34 +00003815#line 1839 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003816 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003817 yyval.a_value = asn1p_value_fromint(1);
3818 checkmem(yyval.a_value);
3819 yyval.a_value->type = ATV_TRUE;
Lev Walkin418298d2006-07-13 08:24:20 +00003820 }
3821 break;
3822
Lev Walkin418298d2006-07-13 08:24:20 +00003823 case 237:
Lev Walkinadf863f2006-09-05 16:18:34 +00003824#line 1846 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003825 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003826 asn1p_ref_t *ref;
3827 int ret;
3828 ref = asn1p_ref_new(yylineno);
3829 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003830 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003831 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003832 yyval.a_value = asn1p_value_fromref(ref, 0);
3833 checkmem(yyval.a_value);
3834 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003835 }
3836 break;
3837
3838 case 238:
Lev Walkinadf863f2006-09-05 16:18:34 +00003839#line 1860 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003840 {
Lev Walkinc8092cb2005-02-18 16:34:21 +00003841 asn1p_ref_t *ref;
3842 int ret;
3843 ref = asn1p_ref_new(yylineno);
3844 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003845 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003846 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003847 yyval.a_value = asn1p_value_fromref(ref, 0);
3848 checkmem(yyval.a_value);
3849 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003850 }
3851 break;
3852
3853 case 239:
Lev Walkinadf863f2006-09-05 16:18:34 +00003854#line 1874 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003855 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003856 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003857 }
3858 break;
3859
3860 case 240:
Lev Walkinadf863f2006-09-05 16:18:34 +00003861#line 1877 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003862 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003863 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003864 }
3865 break;
3866
3867 case 241:
Lev Walkinadf863f2006-09-05 16:18:34 +00003868#line 1883 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003869 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003870 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003871 }
3872 break;
3873
3874 case 242:
Lev Walkinadf863f2006-09-05 16:18:34 +00003875#line 1886 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003876 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003877 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003878 }
3879 break;
3880
3881 case 243:
Lev Walkinadf863f2006-09-05 16:18:34 +00003882#line 1892 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003883 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003884 yyval.a_constr = asn1p_constraint_new(yylineno);
3885 checkmem(yyval.a_constr);
3886 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin418298d2006-07-13 08:24:20 +00003887 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 1);
3888 }
3889 break;
3890
3891 case 244:
Lev Walkinadf863f2006-09-05 16:18:34 +00003892#line 1898 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003893 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003894 yyval.a_constr = asn1p_constraint_new(yylineno);
3895 checkmem(yyval.a_constr);
3896 yyval.a_constr->type = ACT_EL_VALUE;
3897 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3898 yyval.a_constr->presence = yyvsp[0].a_pres;
3899 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003900 }
3901 break;
3902
3903 case 245:
Lev Walkinadf863f2006-09-05 16:18:34 +00003904#line 1912 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003905 { yyval.a_pres = ACPRES_DEFAULT; }
3906 break;
3907
3908 case 246:
Lev Walkinadf863f2006-09-05 16:18:34 +00003909#line 1913 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003910 { yyval.a_pres = yyvsp[0].a_pres; }
3911 break;
3912
3913 case 247:
Lev Walkinadf863f2006-09-05 16:18:34 +00003914#line 1917 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003915 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003916 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin418298d2006-07-13 08:24:20 +00003917 }
3918 break;
3919
3920 case 248:
Lev Walkinadf863f2006-09-05 16:18:34 +00003921#line 1920 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003922 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003923 yyval.a_pres = ACPRES_ABSENT;
Lev Walkin418298d2006-07-13 08:24:20 +00003924 }
3925 break;
3926
3927 case 249:
Lev Walkinadf863f2006-09-05 16:18:34 +00003928#line 1923 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003929 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003930 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkin418298d2006-07-13 08:24:20 +00003931 }
3932 break;
3933
3934 case 250:
Lev Walkinadf863f2006-09-05 16:18:34 +00003935#line 1929 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003936 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003937 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003938 }
3939 break;
3940
3941 case 251:
Lev Walkinadf863f2006-09-05 16:18:34 +00003942#line 1932 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003943 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00003944 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003945 }
3946 break;
3947
3948 case 252:
Lev Walkinadf863f2006-09-05 16:18:34 +00003949#line 1941 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003950 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003951 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3952 asn1p_constraint_t *ct;
3953 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003954 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00003955 checkmem(ret == 0);
3956 ct = asn1p_constraint_new(yylineno);
Lev Walkina00d6b32006-03-21 03:40:38 +00003957 checkmem(yyval.a_constr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003958 ct->type = ACT_EL_VALUE;
3959 ct->value = asn1p_value_fromref(ref, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003960 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003961 }
3962 break;
3963
3964 case 253:
Lev Walkinadf863f2006-09-05 16:18:34 +00003965#line 1956 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003966 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003967 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003968 }
3969 break;
3970
3971 case 254:
Lev Walkinadf863f2006-09-05 16:18:34 +00003972#line 1962 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003973 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003974 yyval.a_constr = asn1p_constraint_new(yylineno);
3975 checkmem(yyval.a_constr);
3976 yyval.a_constr->type = ACT_EL_VALUE;
3977 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003978 }
3979 break;
3980
3981 case 255:
Lev Walkinadf863f2006-09-05 16:18:34 +00003982#line 1968 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003983 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003984 asn1p_constraint_t *ct;
3985 ct = asn1p_constraint_new(yylineno);
3986 checkmem(ct);
3987 ct->type = ACT_EL_VALUE;
Lev Walkina00d6b32006-03-21 03:40:38 +00003988 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
3989 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin418298d2006-07-13 08:24:20 +00003990 }
3991 break;
3992
3993 case 256:
Lev Walkinadf863f2006-09-05 16:18:34 +00003994#line 1982 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003995 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003996 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
Lev Walkinf15320b2004-06-03 03:38:44 +00003997 int ret;
3998 *p = '@';
Lev Walkina00d6b32006-03-21 03:40:38 +00003999 strcpy(p + 1, yyvsp[0].tv_str);
4000 yyval.a_ref = asn1p_ref_new(yylineno);
4001 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00004002 checkmem(ret == 0);
4003 free(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00004004 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00004005 }
4006 break;
4007
4008 case 257:
Lev Walkinadf863f2006-09-05 16:18:34 +00004009#line 1993 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004010 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004011 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
Lev Walkinf15320b2004-06-03 03:38:44 +00004012 int ret;
4013 p[0] = '@';
4014 p[1] = '.';
Lev Walkina00d6b32006-03-21 03:40:38 +00004015 strcpy(p + 2, yyvsp[0].tv_str);
4016 yyval.a_ref = asn1p_ref_new(yylineno);
4017 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00004018 checkmem(ret == 0);
4019 free(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00004020 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00004021 }
4022 break;
4023
4024 case 258:
Lev Walkinadf863f2006-09-05 16:18:34 +00004025#line 2009 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004026 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004027 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004028 }
4029 break;
4030
4031 case 259:
Lev Walkinadf863f2006-09-05 16:18:34 +00004032#line 2012 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004033 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004034 int l1 = strlen(yyvsp[-2].tv_str);
4035 int l3 = strlen(yyvsp[0].tv_str);
4036 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
4037 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
4038 yyval.tv_str[l1] = '.';
4039 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
4040 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin418298d2006-07-13 08:24:20 +00004041 }
4042 break;
4043
4044 case 260:
Lev Walkinadf863f2006-09-05 16:18:34 +00004045#line 2030 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004046 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004047 yyval.a_marker.flags = EM_NOMARK;
4048 yyval.a_marker.default_value = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00004049 }
4050 break;
4051
4052 case 261:
Lev Walkinadf863f2006-09-05 16:18:34 +00004053#line 2034 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004054 { yyval.a_marker = yyvsp[0].a_marker; }
4055 break;
4056
4057 case 262:
Lev Walkinadf863f2006-09-05 16:18:34 +00004058#line 2038 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004059 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004060 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
4061 yyval.a_marker.default_value = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00004062 }
4063 break;
4064
4065 case 263:
Lev Walkinadf863f2006-09-05 16:18:34 +00004066#line 2042 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004067 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004068 yyval.a_marker.flags = EM_DEFAULT;
4069 yyval.a_marker.default_value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004070 }
4071 break;
4072
4073 case 264:
Lev Walkinadf863f2006-09-05 16:18:34 +00004074#line 2065 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004075 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004076 yyval.a_expr = asn1p_expr_new(yylineno);
4077 checkmem(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004078 }
4079 break;
4080
4081 case 265:
Lev Walkinadf863f2006-09-05 16:18:34 +00004082#line 2069 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004083 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004084 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00004085 }
4086 break;
4087
4088 case 266:
Lev Walkinadf863f2006-09-05 16:18:34 +00004089#line 2075 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004090 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004091 yyval.a_expr = asn1p_expr_new(yylineno);
4092 checkmem(yyval.a_expr);
4093 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004094 }
4095 break;
4096
4097 case 267:
Lev Walkinadf863f2006-09-05 16:18:34 +00004098#line 2080 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004099 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004100 yyval.a_expr = yyvsp[-2].a_expr;
4101 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004102 }
4103 break;
4104
4105 case 268:
Lev Walkinadf863f2006-09-05 16:18:34 +00004106#line 2087 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004107 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004108 yyval.a_expr = asn1p_expr_new(yylineno);
4109 checkmem(yyval.a_expr);
4110 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4111 yyval.a_expr->meta_type = AMT_VALUE;
4112 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004113 }
4114 break;
4115
4116 case 269:
Lev Walkinadf863f2006-09-05 16:18:34 +00004117#line 2094 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004118 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004119 yyval.a_expr = asn1p_expr_new(yylineno);
4120 checkmem(yyval.a_expr);
4121 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4122 yyval.a_expr->meta_type = AMT_VALUE;
4123 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4124 yyval.a_expr->value = yyvsp[-1].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004125 }
4126 break;
4127
4128 case 270:
Lev Walkinadf863f2006-09-05 16:18:34 +00004129#line 2102 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004130 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00004131 yyval.a_expr = asn1p_expr_new(yylineno);
4132 checkmem(yyval.a_expr);
4133 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4134 yyval.a_expr->meta_type = AMT_VALUE;
4135 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4136 yyval.a_expr->value = yyvsp[-1].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004137 }
4138 break;
4139
4140 case 271:
Lev Walkinadf863f2006-09-05 16:18:34 +00004141#line 2110 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004142 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004143 yyval.a_expr = asn1p_expr_new(yylineno);
4144 checkmem(yyval.a_expr);
4145 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4146 yyval.a_expr->meta_type = AMT_VALUE;
4147 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004148 }
4149 break;
4150
4151 case 272:
Lev Walkinadf863f2006-09-05 16:18:34 +00004152#line 2117 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004153 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004154 yyval.a_expr = asn1p_expr_new(yylineno);
4155 checkmem(yyval.a_expr);
4156 yyval.a_expr->Identifier = strdup("...");
4157 checkmem(yyval.a_expr->Identifier);
4158 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
4159 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin418298d2006-07-13 08:24:20 +00004160 }
4161 break;
4162
4163 case 273:
Lev Walkinadf863f2006-09-05 16:18:34 +00004164#line 2128 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004165 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004166 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4167 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00004168 }
4169 break;
4170
4171 case 274:
Lev Walkinadf863f2006-09-05 16:18:34 +00004172#line 2132 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004173 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00004174 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4175 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00004176 }
4177 break;
4178
Lev Walkin418298d2006-07-13 08:24:20 +00004179 case 276:
Lev Walkinadf863f2006-09-05 16:18:34 +00004180#line 2140 "asn1p_y.y"
4181 {
4182 yyval.a_value = asn1p_value_fromdouble(yyvsp[0].a_dbl);
4183 checkmem(yyval.a_value);
4184 }
Lev Walkin418298d2006-07-13 08:24:20 +00004185 break;
4186
4187 case 277:
Lev Walkinadf863f2006-09-05 16:18:34 +00004188#line 2171 "asn1p_y.y"
4189 { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); }
4190 break;
4191
4192 case 278:
4193#line 2172 "asn1p_y.y"
4194 { yyval.a_tag = yyvsp[0].a_tag; }
4195 break;
4196
4197 case 279:
4198#line 2176 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004199 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004200 yyval.a_tag = yyvsp[-1].a_tag;
4201 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin418298d2006-07-13 08:24:20 +00004202 }
4203 break;
4204
Lev Walkinadf863f2006-09-05 16:18:34 +00004205 case 280:
4206#line 2183 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004207 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004208 yyval.a_tag = yyvsp[-2].a_tag;
4209 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin418298d2006-07-13 08:24:20 +00004210 }
4211 break;
4212
Lev Walkinadf863f2006-09-05 16:18:34 +00004213 case 281:
4214#line 2189 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004215 { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; }
4216 break;
4217
Lev Walkinadf863f2006-09-05 16:18:34 +00004218 case 282:
4219#line 2190 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004220 { yyval.a_tag.tag_class = TC_UNIVERSAL; }
4221 break;
4222
Lev Walkinadf863f2006-09-05 16:18:34 +00004223 case 283:
4224#line 2191 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004225 { yyval.a_tag.tag_class = TC_APPLICATION; }
4226 break;
4227
Lev Walkinadf863f2006-09-05 16:18:34 +00004228 case 284:
4229#line 2192 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004230 { yyval.a_tag.tag_class = TC_PRIVATE; }
4231 break;
4232
Lev Walkinadf863f2006-09-05 16:18:34 +00004233 case 285:
4234#line 2196 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004235 { yyval.a_tag.tag_mode = TM_DEFAULT; }
4236 break;
4237
Lev Walkinadf863f2006-09-05 16:18:34 +00004238 case 286:
4239#line 2197 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004240 { yyval.a_tag.tag_mode = TM_IMPLICIT; }
4241 break;
4242
Lev Walkinadf863f2006-09-05 16:18:34 +00004243 case 287:
4244#line 2198 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004245 { yyval.a_tag.tag_mode = TM_EXPLICIT; }
4246 break;
4247
Lev Walkin418298d2006-07-13 08:24:20 +00004248 case 288:
Lev Walkinadf863f2006-09-05 16:18:34 +00004249#line 2202 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004250 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00004251 checkmem(yyvsp[0].tv_str);
4252 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004253 }
4254 break;
4255
4256 case 289:
Lev Walkinadf863f2006-09-05 16:18:34 +00004257#line 2206 "asn1p_y.y"
4258 {
4259 checkmem(yyvsp[0].tv_str);
4260 yyval.tv_str = yyvsp[0].tv_str;
4261 }
Lev Walkin418298d2006-07-13 08:24:20 +00004262 break;
4263
4264 case 290:
Lev Walkinadf863f2006-09-05 16:18:34 +00004265#line 2214 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004266 {
Lev Walkinadf863f2006-09-05 16:18:34 +00004267 checkmem(yyvsp[0].tv_str);
Lev Walkin5045dfa2006-03-21 09:41:28 +00004268 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004269 }
4270 break;
4271
4272 case 291:
Lev Walkin5045dfa2006-03-21 09:41:28 +00004273#line 2221 "asn1p_y.y"
Lev Walkinadf863f2006-09-05 16:18:34 +00004274 { yyval.tv_str = 0; }
4275 break;
4276
4277 case 292:
4278#line 2222 "asn1p_y.y"
4279 {
4280 yyval.tv_str = yyvsp[0].tv_str;
4281 }
4282 break;
4283
4284 case 293:
4285#line 2228 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004286 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00004287 checkmem(yyvsp[0].tv_str);
4288 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004289 }
4290 break;
4291
4292
4293 }
4294
4295/* Line 1016 of /usr/local/share/bison/yacc.c. */
Lev Walkinadf863f2006-09-05 16:18:34 +00004296#line 4297 "asn1p_y.c"
Lev Walkinf15320b2004-06-03 03:38:44 +00004297
4298 yyvsp -= yylen;
4299 yyssp -= yylen;
Lev Walkinf15320b2004-06-03 03:38:44 +00004300
Lev Walkin418298d2006-07-13 08:24:20 +00004301
4302#if YYDEBUG
Lev Walkina00d6b32006-03-21 03:40:38 +00004303 if (yydebug)
4304 {
Lev Walkin418298d2006-07-13 08:24:20 +00004305 short *yyssp1 = yyss - 1;
4306 YYFPRINTF (stderr, "state stack now");
4307 while (yyssp1 != yyssp)
4308 YYFPRINTF (stderr, " %d", *++yyssp1);
4309 YYFPRINTF (stderr, "\n");
Lev Walkina00d6b32006-03-21 03:40:38 +00004310 }
4311#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00004312
4313 *++yyvsp = yyval;
4314
Lev Walkinf15320b2004-06-03 03:38:44 +00004315
Lev Walkin418298d2006-07-13 08:24:20 +00004316 /* Now `shift' the result of the reduction. Determine what state
4317 that goes to, based on the state we popped back to and the rule
4318 number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00004319
4320 yyn = yyr1[yyn];
4321
Lev Walkin418298d2006-07-13 08:24:20 +00004322 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
4323 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00004324 yystate = yytable[yystate];
4325 else
Lev Walkin418298d2006-07-13 08:24:20 +00004326 yystate = yydefgoto[yyn - YYNTOKENS];
Lev Walkinf15320b2004-06-03 03:38:44 +00004327
4328 goto yynewstate;
4329
Lev Walkinf15320b2004-06-03 03:38:44 +00004330
Lev Walkin418298d2006-07-13 08:24:20 +00004331/*------------------------------------.
4332| yyerrlab -- here on detecting error |
4333`------------------------------------*/
4334yyerrlab:
4335 /* If not already recovering from an error, report this error. */
4336 if (!yyerrstatus)
Lev Walkinf15320b2004-06-03 03:38:44 +00004337 {
4338 ++yynerrs;
Lev Walkin418298d2006-07-13 08:24:20 +00004339#if YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00004340 yyn = yypact[yystate];
4341
Lev Walkin418298d2006-07-13 08:24:20 +00004342 if (YYPACT_NINF < yyn && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00004343 {
Lev Walkin418298d2006-07-13 08:24:20 +00004344 YYSIZE_T yysize = 0;
4345 int yytype = YYTRANSLATE (yychar);
4346 char *yymsg;
4347 int yyx, yycount;
Lev Walkinf15320b2004-06-03 03:38:44 +00004348
Lev Walkin418298d2006-07-13 08:24:20 +00004349 yycount = 0;
4350 /* Start YYX at -YYN if negative to avoid negative indexes in
4351 YYCHECK. */
4352 for (yyx = yyn < 0 ? -yyn : 0;
4353 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
4354 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
4355 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
4356 yysize += yystrlen ("parse error, unexpected ") + 1;
4357 yysize += yystrlen (yytname[yytype]);
4358 yymsg = (char *) YYSTACK_ALLOC (yysize);
4359 if (yymsg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00004360 {
Lev Walkin418298d2006-07-13 08:24:20 +00004361 char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
4362 yyp = yystpcpy (yyp, yytname[yytype]);
Lev Walkina00d6b32006-03-21 03:40:38 +00004363
Lev Walkin418298d2006-07-13 08:24:20 +00004364 if (yycount < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00004365 {
Lev Walkin418298d2006-07-13 08:24:20 +00004366 yycount = 0;
4367 for (yyx = yyn < 0 ? -yyn : 0;
4368 yyx < (int) (sizeof (yytname) / sizeof (char *));
4369 yyx++)
4370 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
Lev Walkina00d6b32006-03-21 03:40:38 +00004371 {
Lev Walkin418298d2006-07-13 08:24:20 +00004372 const char *yyq = ! yycount ? ", expecting " : " or ";
4373 yyp = yystpcpy (yyp, yyq);
4374 yyp = yystpcpy (yyp, yytname[yyx]);
4375 yycount++;
Lev Walkina00d6b32006-03-21 03:40:38 +00004376 }
Lev Walkinf15320b2004-06-03 03:38:44 +00004377 }
Lev Walkin418298d2006-07-13 08:24:20 +00004378 yyerror (yymsg);
4379 YYSTACK_FREE (yymsg);
Lev Walkinf15320b2004-06-03 03:38:44 +00004380 }
4381 else
Lev Walkin418298d2006-07-13 08:24:20 +00004382 yyerror ("parse error; also virtual memory exhausted");
Lev Walkinf15320b2004-06-03 03:38:44 +00004383 }
4384 else
4385#endif /* YYERROR_VERBOSE */
Lev Walkin418298d2006-07-13 08:24:20 +00004386 yyerror ("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00004387 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004388 goto yyerrlab1;
Lev Walkinf15320b2004-06-03 03:38:44 +00004389
Lev Walkin418298d2006-07-13 08:24:20 +00004390
4391/*----------------------------------------------------.
4392| yyerrlab1 -- error raised explicitly by an action. |
4393`----------------------------------------------------*/
4394yyerrlab1:
Lev Walkinf15320b2004-06-03 03:38:44 +00004395 if (yyerrstatus == 3)
4396 {
Lev Walkin418298d2006-07-13 08:24:20 +00004397 /* If just tried and failed to reuse lookahead token after an
4398 error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00004399
Lev Walkin418298d2006-07-13 08:24:20 +00004400 /* Return failure if at end of input. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004401 if (yychar == YYEOF)
Lev Walkin418298d2006-07-13 08:24:20 +00004402 {
4403 /* Pop the error token. */
4404 YYPOPSTACK;
4405 /* Pop the rest of the stack. */
4406 while (yyssp > yyss)
4407 {
4408 YYDPRINTF ((stderr, "Error: popping "));
4409 YYDSYMPRINT ((stderr,
4410 yystos[*yyssp],
4411 *yyvsp));
4412 YYDPRINTF ((stderr, "\n"));
4413 yydestruct (yystos[*yyssp], *yyvsp);
4414 YYPOPSTACK;
4415 }
4416 YYABORT;
4417 }
Lev Walkinf15320b2004-06-03 03:38:44 +00004418
Lev Walkin418298d2006-07-13 08:24:20 +00004419 YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
4420 yychar, yytname[yychar1]));
4421 yydestruct (yychar1, yylval);
Lev Walkina00d6b32006-03-21 03:40:38 +00004422 yychar = YYEMPTY;
Lev Walkinf15320b2004-06-03 03:38:44 +00004423 }
4424
Lev Walkin418298d2006-07-13 08:24:20 +00004425 /* Else will try to reuse lookahead token after shifting the error
4426 token. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004427
Lev Walkin418298d2006-07-13 08:24:20 +00004428 yyerrstatus = 3; /* Each real token shifted decrements this. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004429
Lev Walkin418298d2006-07-13 08:24:20 +00004430 for (;;)
Lev Walkina00d6b32006-03-21 03:40:38 +00004431 {
Lev Walkin418298d2006-07-13 08:24:20 +00004432 yyn = yypact[yystate];
4433 if (yyn != YYPACT_NINF)
4434 {
4435 yyn += YYTERROR;
4436 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
4437 {
4438 yyn = yytable[yyn];
4439 if (0 < yyn)
4440 break;
4441 }
4442 }
4443
4444 /* Pop the current state because it cannot handle the error token. */
4445 if (yyssp == yyss)
4446 YYABORT;
4447
4448 YYDPRINTF ((stderr, "Error: popping "));
4449 YYDSYMPRINT ((stderr,
4450 yystos[*yyssp], *yyvsp));
4451 YYDPRINTF ((stderr, "\n"));
4452
4453 yydestruct (yystos[yystate], *yyvsp);
4454 yyvsp--;
4455 yystate = *--yyssp;
4456
4457
4458#if YYDEBUG
4459 if (yydebug)
4460 {
4461 short *yyssp1 = yyss - 1;
4462 YYFPRINTF (stderr, "Error: state stack now");
4463 while (yyssp1 != yyssp)
4464 YYFPRINTF (stderr, " %d", *++yyssp1);
4465 YYFPRINTF (stderr, "\n");
4466 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004467#endif
Lev Walkina00d6b32006-03-21 03:40:38 +00004468 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004469
Lev Walkinf15320b2004-06-03 03:38:44 +00004470 if (yyn == YYFINAL)
4471 YYACCEPT;
4472
Lev Walkin418298d2006-07-13 08:24:20 +00004473 YYDPRINTF ((stderr, "Shifting error token, "));
Lev Walkina00d6b32006-03-21 03:40:38 +00004474
Lev Walkinf15320b2004-06-03 03:38:44 +00004475 *++yyvsp = yylval;
Lev Walkin418298d2006-07-13 08:24:20 +00004476
Lev Walkinf15320b2004-06-03 03:38:44 +00004477
4478 yystate = yyn;
4479 goto yynewstate;
4480
Lev Walkina00d6b32006-03-21 03:40:38 +00004481
Lev Walkin418298d2006-07-13 08:24:20 +00004482/*-------------------------------------.
4483| yyacceptlab -- YYACCEPT comes here. |
4484`-------------------------------------*/
4485yyacceptlab:
4486 yyresult = 0;
4487 goto yyreturn;
4488
4489/*-----------------------------------.
4490| yyabortlab -- YYABORT comes here. |
4491`-----------------------------------*/
4492yyabortlab:
4493 yyresult = 1;
4494 goto yyreturn;
4495
4496#ifndef yyoverflow
4497/*----------------------------------------------.
4498| yyoverflowlab -- parser overflow comes here. |
4499`----------------------------------------------*/
4500yyoverflowlab:
4501 yyerror ("parser stack overflow");
4502 yyresult = 2;
4503 /* Fall through. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004504#endif
Lev Walkin418298d2006-07-13 08:24:20 +00004505
4506yyreturn:
4507#ifndef yyoverflow
4508 if (yyss != yyssa)
4509 YYSTACK_FREE (yyss);
4510#endif
4511 return yyresult;
Lev Walkinf15320b2004-06-03 03:38:44 +00004512}
Lev Walkin418298d2006-07-13 08:24:20 +00004513
4514
Lev Walkinadf863f2006-09-05 16:18:34 +00004515#line 2234 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00004516
4517
4518
4519/*
4520 * Convert Xstring ('0101'B or '5'H) to the binary vector.
4521 */
4522static asn1p_value_t *
4523_convert_bitstring2binary(char *str, int base) {
4524 asn1p_value_t *val;
4525 int slen;
4526 int memlen;
4527 int baselen;
4528 int bits;
4529 uint8_t *binary_vector;
4530 uint8_t *bv_ptr;
4531 uint8_t cur_val;
4532
4533 assert(str);
4534 assert(str[0] == '\'');
4535
4536 switch(base) {
4537 case 'B':
4538 baselen = 1;
4539 break;
4540 case 'H':
4541 baselen = 4;
4542 break;
4543 default:
4544 assert(base == 'B' || base == 'H');
4545 errno = EINVAL;
4546 return NULL;
4547 }
4548
4549 slen = strlen(str);
4550 assert(str[slen - 1] == base);
4551 assert(str[slen - 2] == '\'');
4552
4553 memlen = slen / (8 / baselen); /* Conservative estimate */
4554
4555 bv_ptr = binary_vector = malloc(memlen + 1);
4556 if(bv_ptr == NULL)
4557 /* ENOMEM */
4558 return NULL;
4559
4560 cur_val = 0;
4561 bits = 0;
4562 while(*(++str) != '\'') {
4563 switch(baselen) {
4564 case 1:
4565 switch(*str) {
4566 case '1':
4567 cur_val |= 1 << (7 - (bits % 8));
4568 case '0':
4569 break;
4570 default:
4571 assert(!"_y UNREACH1");
4572 case ' ': case '\r': case '\n':
4573 continue;
4574 }
4575 break;
4576 case 4:
4577 switch(*str) {
4578 case '0': case '1': case '2': case '3': case '4':
4579 case '5': case '6': case '7': case '8': case '9':
4580 cur_val |= (*str - '0') << (4 - (bits % 8));
4581 break;
4582 case 'A': case 'B': case 'C':
4583 case 'D': case 'E': case 'F':
4584 cur_val |= ((*str - 'A') + 10)
4585 << (4 - (bits % 8));
4586 break;
4587 default:
4588 assert(!"_y UNREACH2");
4589 case ' ': case '\r': case '\n':
4590 continue;
4591 }
4592 break;
4593 }
4594
4595 bits += baselen;
4596 if((bits % 8) == 0) {
4597 *bv_ptr++ = cur_val;
4598 cur_val = 0;
4599 }
4600 }
4601
4602 *bv_ptr = cur_val;
4603 assert((bv_ptr - binary_vector) <= memlen);
4604
4605 val = asn1p_value_frombits(binary_vector, bits, 0);
4606 if(val == NULL) {
4607 free(binary_vector);
4608 }
4609
4610 return val;
4611}
4612
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00004613/*
4614 * For unnamed types (used in old X.208 compliant modules)
4615 * generate some sort of interim names, to not to force human being to fix
4616 * the specification's compliance to modern ASN.1 standards.
4617 */
4618static void
4619_fixup_anonymous_identifier(asn1p_expr_t *expr) {
4620 char *p;
4621 assert(expr->Identifier == 0);
4622
4623 /*
4624 * Try to figure out the type name
4625 * without going too much into details
4626 */
4627 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
4628 if(expr->reference && expr->reference->comp_count > 0)
4629 expr->Identifier = expr->reference->components[0].name;
4630
4631 fprintf(stderr,
4632 "WARNING: Line %d: expected lower-case member identifier, "
4633 "found an unnamed %s.\n"
4634 "WARNING: Obsolete X.208 syntax detected, "
4635 "please give the member a name.\n",
4636 yylineno, expr->Identifier ? expr->Identifier : "type");
4637
4638 if(!expr->Identifier)
4639 expr->Identifier = "unnamed";
4640 expr->Identifier = strdup(expr->Identifier);
4641 assert(expr->Identifier);
4642 /* Make a lowercase identifier from the type name */
4643 for(p = expr->Identifier; *p; p++) {
4644 switch(*p) {
4645 case 'A' ... 'Z': *p += 32; break;
4646 case ' ': *p = '_'; break;
4647 case '-': *p = '_'; break;
4648 }
4649 }
4650 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
4651 "Name clash may occur later.\n",
4652 expr->Identifier);
4653}
4654
Lev Walkinf15320b2004-06-03 03:38:44 +00004655int
4656yyerror(const char *msg) {
Lev Walkin9d542d22006-03-14 16:31:37 +00004657 extern char *asn1p_text;
Lev Walkinf15320b2004-06-03 03:38:44 +00004658 fprintf(stderr,
4659 "ASN.1 grammar parse error "
4660 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00004661 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00004662 return -1;
4663}
4664
Lev Walkin418298d2006-07-13 08:24:20 +00004665