blob: 95195962f5cc708c500124869c1989a7c7cc4b9a [file] [log] [blame]
Lev Walkin418298d2006-07-13 08:24:20 +00001/* A Bison parser, made from asn1p_y.y, by GNU bison 1.75. */
Lev Walkinf15320b2004-06-03 03:38:44 +00002
Lev Walkin418298d2006-07-13 08:24:20 +00003/* Skeleton parser for Yacc-like parsing with Bison,
4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
Lev Walkinf15320b2004-06-03 03:38:44 +00005
Lev Walkin418298d2006-07-13 08:24:20 +00006 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
Lev Walkinf15320b2004-06-03 03:38:44 +000010
Lev Walkin418298d2006-07-13 08:24:20 +000011 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
20
21/* As a special exception, when this file is copied by Bison into a
22 Bison output file, you may use that output file without restriction.
23 This special exception was added by the Free Software Foundation
24 in version 1.24 of Bison. */
25
26/* Written by Richard Stallman by simplifying the original so called
27 ``semantic'' parser. */
28
29/* All symbols defined below should begin with yy or YY, to avoid
30 infringing on user name space. This should be done even for local
31 variables, as they might otherwise be expanded by user macros.
32 There are some unavoidable exceptions within include files to
33 define necessary library symbols; they are noted "INFRINGES ON
34 USER NAME SPACE" below. */
35
36/* Identify Bison output. */
37#define YYBISON 1
38
39/* Pure parsers. */
40#define YYPURE 0
41
42/* Using locations. */
43#define YYLSP_NEEDED 0
44
45/* If NAME_PREFIX is specified substitute the variables and functions
46 names. */
Lev Walkinf15320b2004-06-03 03:38:44 +000047#define yyparse asn1p_parse
Lev Walkin418298d2006-07-13 08:24:20 +000048#define yylex asn1p_lex
Lev Walkinf15320b2004-06-03 03:38:44 +000049#define yyerror asn1p_error
Lev Walkin418298d2006-07-13 08:24:20 +000050#define yylval asn1p_lval
51#define yychar asn1p_char
Lev Walkinf15320b2004-06-03 03:38:44 +000052#define yydebug asn1p_debug
53#define yynerrs asn1p_nerrs
Lev Walkinf15320b2004-06-03 03:38:44 +000054
Lev Walkin418298d2006-07-13 08:24:20 +000055
56/* Tokens. */
57#ifndef YYTOKENTYPE
58# define YYTOKENTYPE
59 /* Put the tokens into the symbol table, so that GDB and other debuggers
60 know about them. */
61 enum yytokentype {
62 TOK_PPEQ = 258,
63 TOK_whitespace = 259,
64 TOK_opaque = 260,
65 TOK_bstring = 261,
66 TOK_cstring = 262,
67 TOK_hstring = 263,
68 TOK_identifier = 264,
69 TOK_number = 265,
Lev Walkinadf863f2006-09-05 16:18:34 +000070 TOK_number_negative = 266,
71 TOK_realnumber = 267,
72 TOK_tuple = 268,
73 TOK_quadruple = 269,
74 TOK_typereference = 270,
75 TOK_capitalreference = 271,
76 TOK_typefieldreference = 272,
77 TOK_valuefieldreference = 273,
78 TOK_Literal = 274,
79 TOK_ABSENT = 275,
80 TOK_ABSTRACT_SYNTAX = 276,
81 TOK_ALL = 277,
82 TOK_ANY = 278,
83 TOK_APPLICATION = 279,
84 TOK_AUTOMATIC = 280,
85 TOK_BEGIN = 281,
86 TOK_BIT = 282,
87 TOK_BMPString = 283,
88 TOK_BOOLEAN = 284,
89 TOK_BY = 285,
90 TOK_CHARACTER = 286,
91 TOK_CHOICE = 287,
92 TOK_CLASS = 288,
93 TOK_COMPONENT = 289,
94 TOK_COMPONENTS = 290,
95 TOK_CONSTRAINED = 291,
96 TOK_CONTAINING = 292,
97 TOK_DEFAULT = 293,
98 TOK_DEFINITIONS = 294,
99 TOK_DEFINED = 295,
100 TOK_EMBEDDED = 296,
101 TOK_ENCODED = 297,
102 TOK_ENCODING_CONTROL = 298,
103 TOK_END = 299,
104 TOK_ENUMERATED = 300,
105 TOK_EXPLICIT = 301,
106 TOK_EXPORTS = 302,
107 TOK_EXTENSIBILITY = 303,
108 TOK_EXTERNAL = 304,
109 TOK_FALSE = 305,
110 TOK_FROM = 306,
111 TOK_GeneralizedTime = 307,
112 TOK_GeneralString = 308,
113 TOK_GraphicString = 309,
114 TOK_IA5String = 310,
115 TOK_IDENTIFIER = 311,
116 TOK_IMPLICIT = 312,
117 TOK_IMPLIED = 313,
118 TOK_IMPORTS = 314,
119 TOK_INCLUDES = 315,
120 TOK_INSTANCE = 316,
121 TOK_INSTRUCTIONS = 317,
122 TOK_INTEGER = 318,
123 TOK_ISO646String = 319,
124 TOK_MAX = 320,
125 TOK_MIN = 321,
126 TOK_MINUS_INFINITY = 322,
127 TOK_NULL = 323,
128 TOK_NumericString = 324,
129 TOK_OBJECT = 325,
130 TOK_ObjectDescriptor = 326,
131 TOK_OCTET = 327,
132 TOK_OF = 328,
133 TOK_OPTIONAL = 329,
134 TOK_PATTERN = 330,
135 TOK_PDV = 331,
136 TOK_PLUS_INFINITY = 332,
137 TOK_PRESENT = 333,
138 TOK_PrintableString = 334,
139 TOK_PRIVATE = 335,
140 TOK_REAL = 336,
141 TOK_RELATIVE_OID = 337,
142 TOK_SEQUENCE = 338,
143 TOK_SET = 339,
144 TOK_SIZE = 340,
145 TOK_STRING = 341,
146 TOK_SYNTAX = 342,
147 TOK_T61String = 343,
148 TOK_TAGS = 344,
149 TOK_TeletexString = 345,
150 TOK_TRUE = 346,
151 TOK_TYPE_IDENTIFIER = 347,
152 TOK_UNIQUE = 348,
153 TOK_UNIVERSAL = 349,
154 TOK_UniversalString = 350,
155 TOK_UTCTime = 351,
156 TOK_UTF8String = 352,
157 TOK_VideotexString = 353,
158 TOK_VisibleString = 354,
159 TOK_WITH = 355,
160 TOK_EXCEPT = 356,
161 TOK_INTERSECTION = 357,
162 TOK_UNION = 358,
163 TOK_TwoDots = 359,
164 TOK_ThreeDots = 360
Lev Walkin418298d2006-07-13 08:24:20 +0000165 };
166#endif
167#define TOK_PPEQ 258
168#define TOK_whitespace 259
169#define TOK_opaque 260
170#define TOK_bstring 261
171#define TOK_cstring 262
172#define TOK_hstring 263
173#define TOK_identifier 264
174#define TOK_number 265
Lev Walkinadf863f2006-09-05 16:18:34 +0000175#define TOK_number_negative 266
176#define TOK_realnumber 267
177#define TOK_tuple 268
178#define TOK_quadruple 269
179#define TOK_typereference 270
180#define TOK_capitalreference 271
181#define TOK_typefieldreference 272
182#define TOK_valuefieldreference 273
183#define TOK_Literal 274
184#define TOK_ABSENT 275
185#define TOK_ABSTRACT_SYNTAX 276
186#define TOK_ALL 277
187#define TOK_ANY 278
188#define TOK_APPLICATION 279
189#define TOK_AUTOMATIC 280
190#define TOK_BEGIN 281
191#define TOK_BIT 282
192#define TOK_BMPString 283
193#define TOK_BOOLEAN 284
194#define TOK_BY 285
195#define TOK_CHARACTER 286
196#define TOK_CHOICE 287
197#define TOK_CLASS 288
198#define TOK_COMPONENT 289
199#define TOK_COMPONENTS 290
200#define TOK_CONSTRAINED 291
201#define TOK_CONTAINING 292
202#define TOK_DEFAULT 293
203#define TOK_DEFINITIONS 294
204#define TOK_DEFINED 295
205#define TOK_EMBEDDED 296
206#define TOK_ENCODED 297
207#define TOK_ENCODING_CONTROL 298
208#define TOK_END 299
209#define TOK_ENUMERATED 300
210#define TOK_EXPLICIT 301
211#define TOK_EXPORTS 302
212#define TOK_EXTENSIBILITY 303
213#define TOK_EXTERNAL 304
214#define TOK_FALSE 305
215#define TOK_FROM 306
216#define TOK_GeneralizedTime 307
217#define TOK_GeneralString 308
218#define TOK_GraphicString 309
219#define TOK_IA5String 310
220#define TOK_IDENTIFIER 311
221#define TOK_IMPLICIT 312
222#define TOK_IMPLIED 313
223#define TOK_IMPORTS 314
224#define TOK_INCLUDES 315
225#define TOK_INSTANCE 316
226#define TOK_INSTRUCTIONS 317
227#define TOK_INTEGER 318
228#define TOK_ISO646String 319
229#define TOK_MAX 320
230#define TOK_MIN 321
231#define TOK_MINUS_INFINITY 322
232#define TOK_NULL 323
233#define TOK_NumericString 324
234#define TOK_OBJECT 325
235#define TOK_ObjectDescriptor 326
236#define TOK_OCTET 327
237#define TOK_OF 328
238#define TOK_OPTIONAL 329
239#define TOK_PATTERN 330
240#define TOK_PDV 331
241#define TOK_PLUS_INFINITY 332
242#define TOK_PRESENT 333
243#define TOK_PrintableString 334
244#define TOK_PRIVATE 335
245#define TOK_REAL 336
246#define TOK_RELATIVE_OID 337
247#define TOK_SEQUENCE 338
248#define TOK_SET 339
249#define TOK_SIZE 340
250#define TOK_STRING 341
251#define TOK_SYNTAX 342
252#define TOK_T61String 343
253#define TOK_TAGS 344
254#define TOK_TeletexString 345
255#define TOK_TRUE 346
256#define TOK_TYPE_IDENTIFIER 347
257#define TOK_UNIQUE 348
258#define TOK_UNIVERSAL 349
259#define TOK_UniversalString 350
260#define TOK_UTCTime 351
261#define TOK_UTF8String 352
262#define TOK_VideotexString 353
263#define TOK_VisibleString 354
264#define TOK_WITH 355
265#define TOK_EXCEPT 356
266#define TOK_INTERSECTION 357
267#define TOK_UNION 358
268#define TOK_TwoDots 359
269#define TOK_ThreeDots 360
Lev Walkin418298d2006-07-13 08:24:20 +0000270
271
272
273
274/* Copy the first part of user declarations. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000275#line 1 "asn1p_y.y"
276
277
278#include <stdlib.h>
279#include <stdio.h>
280#include <string.h>
281#include <errno.h>
282#include <assert.h>
283
284#include "asn1parser.h"
285
286#define YYPARSE_PARAM param
Lev Walkin4a4bdf72005-06-07 21:43:32 +0000287#define YYPARSE_PARAM_TYPE void **
Lev Walkinf15320b2004-06-03 03:38:44 +0000288#define YYERROR_VERBOSE
289
290int yylex(void);
291int yyerror(const char *msg);
Lev Walkin4a4bdf72005-06-07 21:43:32 +0000292#ifdef YYBYACC
293int yyparse(void **param); /* byacc does not produce a prototype */
294#endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000295void asn1p_lexer_hack_push_opaque_state(void);
296void asn1p_lexer_hack_enable_with_syntax(void);
Lev Walkinf59d0752004-08-18 04:59:12 +0000297void asn1p_lexer_hack_push_encoding_control(void);
Lev Walkinf15320b2004-06-03 03:38:44 +0000298#define yylineno asn1p_lineno
299extern int asn1p_lineno;
300
Lev Walkinb36317c2005-08-12 10:09:10 +0000301/*
Lev Walkinef625402005-09-05 05:17:57 +0000302 * Process directives as <ASN1C:RepresentAsPointer>
Lev Walkin4696c742005-08-22 12:23:54 +0000303 */
304extern int asn1p_as_pointer;
Lev Walkin4696c742005-08-22 12:23:54 +0000305
306/*
Lev Walkinb36317c2005-08-12 10:09:10 +0000307 * This temporary variable is used to solve the shortcomings of 1-lookahead
308 * parser.
309 */
310static struct AssignedIdentifier *saved_aid;
Lev Walkinf15320b2004-06-03 03:38:44 +0000311
Lev Walkin2e9bd5c2005-08-13 09:07:11 +0000312static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
313static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
Lev Walkinf15320b2004-06-03 03:38:44 +0000314
Lev Walkina9532f42006-09-17 04:52:50 +0000315static asn1p_module_t *currentModule;
316#define NEW_EXPR() (asn1p_expr_new(yylineno, currentModule))
317
Lev Walkinb36317c2005-08-12 10:09:10 +0000318#define checkmem(ptr) do { \
319 if(!(ptr)) \
320 return yyerror("Memory failure"); \
Lev Walkinf15320b2004-06-03 03:38:44 +0000321 } while(0)
322
Lev Walkinb36317c2005-08-12 10:09:10 +0000323#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
324 if(arg1->type != constr_type) { \
325 int __ret; \
326 root = asn1p_constraint_new(yylineno); \
327 checkmem(root); \
328 root->type = constr_type; \
329 __ret = asn1p_constraint_insert(root, \
330 arg1); \
331 checkmem(__ret == 0); \
332 } else { \
333 root = arg1; \
334 } \
335 if(arg2) { \
336 int __ret \
337 = asn1p_constraint_insert(root, arg2); \
338 checkmem(__ret == 0); \
339 } \
Lev Walkinf15320b2004-06-03 03:38:44 +0000340 } while(0)
341
Lev Walkin866bd7f2006-09-14 10:35:20 +0000342#ifdef AL_IMPORT
343#error AL_IMPORT DEFINED ELSEWHERE!
344#endif
345#define AL_IMPORT(to,where,from,field) do { \
346 if(!(from)) break; \
347 while(TQ_FIRST(&((from)->where))) { \
348 TQ_ADD(&((to)->where), \
349 TQ_REMOVE(&((from)->where), field), \
350 field); \
351 } \
352 assert(TQ_FIRST(&((from)->where)) == 0); \
353 } while(0)
354
Lev Walkinf15320b2004-06-03 03:38:44 +0000355
Lev Walkin418298d2006-07-13 08:24:20 +0000356
357/* Enabling traces. */
358#ifndef YYDEBUG
359# define YYDEBUG 0
360#endif
361
362/* Enabling verbose error messages. */
363#ifdef YYERROR_VERBOSE
364# undef YYERROR_VERBOSE
365# define YYERROR_VERBOSE 1
366#else
367# define YYERROR_VERBOSE 0
368#endif
369
370#ifndef YYSTYPE
Lev Walkina9532f42006-09-17 04:52:50 +0000371#line 88 "asn1p_y.y"
Lev Walkina00d6b32006-03-21 03:40:38 +0000372typedef union {
Lev Walkinf15320b2004-06-03 03:38:44 +0000373 asn1p_t *a_grammar;
374 asn1p_module_flags_e a_module_flags;
375 asn1p_module_t *a_module;
376 asn1p_expr_type_e a_type; /* ASN.1 Type */
377 asn1p_expr_t *a_expr; /* Constructed collection */
378 asn1p_constraint_t *a_constr; /* Constraint */
379 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
380 asn1p_xports_t *a_xports; /* IMports/EXports */
Lev Walkinb36317c2005-08-12 10:09:10 +0000381 struct AssignedIdentifier a_aid; /* Assigned Identifier */
Lev Walkinf15320b2004-06-03 03:38:44 +0000382 asn1p_oid_t *a_oid; /* Object Identifier */
383 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
384 struct asn1p_type_tag_s a_tag; /* A tag */
385 asn1p_ref_t *a_ref; /* Reference to custom type */
386 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
387 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
388 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
389 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
390 struct asn1p_param_s a_parg; /* A parameter argument */
391 asn1p_paramlist_t *a_plist; /* A pargs list */
Lev Walkin9c974182004-09-15 11:59:51 +0000392 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
Lev Walkinf15320b2004-06-03 03:38:44 +0000393 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
Lev Walkind21c5052004-09-29 13:18:09 +0000394 asn1c_integer_t a_int;
Lev Walkinadf863f2006-09-05 16:18:34 +0000395 double a_dbl;
Lev Walkinf15320b2004-06-03 03:38:44 +0000396 char *tv_str;
397 struct {
398 char *buf;
399 int len;
400 } tv_opaque;
401 struct {
402 char *name;
403 struct asn1p_type_tag_s tag;
404 } tv_nametag;
Lev Walkin418298d2006-07-13 08:24:20 +0000405} yystype;
406/* Line 193 of /usr/local/share/bison/yacc.c. */
Lev Walkina9532f42006-09-17 04:52:50 +0000407#line 408 "asn1p_y.c"
Lev Walkin418298d2006-07-13 08:24:20 +0000408# define YYSTYPE yystype
409# define YYSTYPE_IS_TRIVIAL 1
Lev Walkinf15320b2004-06-03 03:38:44 +0000410#endif
411
Lev Walkin418298d2006-07-13 08:24:20 +0000412#ifndef YYLTYPE
413typedef struct yyltype
414{
415 int first_line;
416 int first_column;
417 int last_line;
418 int last_column;
419} yyltype;
420# define YYLTYPE yyltype
421# define YYLTYPE_IS_TRIVIAL 1
422#endif
423
424/* Copy the second part of user declarations. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000425
426
Lev Walkin418298d2006-07-13 08:24:20 +0000427/* Line 213 of /usr/local/share/bison/yacc.c. */
Lev Walkina9532f42006-09-17 04:52:50 +0000428#line 429 "asn1p_y.c"
Lev Walkinf15320b2004-06-03 03:38:44 +0000429
Lev Walkin418298d2006-07-13 08:24:20 +0000430#if ! defined (yyoverflow) || YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +0000431
Lev Walkin418298d2006-07-13 08:24:20 +0000432/* The parser invokes alloca or malloc; define the necessary symbols. */
Lev Walkinf15320b2004-06-03 03:38:44 +0000433
Lev Walkin418298d2006-07-13 08:24:20 +0000434# if YYSTACK_USE_ALLOCA
435# define YYSTACK_ALLOC alloca
436# else
437# ifndef YYSTACK_USE_ALLOCA
438# if defined (alloca) || defined (_ALLOCA_H)
439# define YYSTACK_ALLOC alloca
440# else
441# ifdef __GNUC__
442# define YYSTACK_ALLOC __builtin_alloca
443# endif
444# endif
445# endif
446# endif
Lev Walkinf15320b2004-06-03 03:38:44 +0000447
Lev Walkin418298d2006-07-13 08:24:20 +0000448# ifdef YYSTACK_ALLOC
449 /* Pacify GCC's `empty if-body' warning. */
450# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
451# else
452# if defined (__STDC__) || defined (__cplusplus)
453# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
454# define YYSIZE_T size_t
455# endif
456# define YYSTACK_ALLOC malloc
457# define YYSTACK_FREE free
458# endif
459#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
460
461
462#if (! defined (yyoverflow) \
463 && (! defined (__cplusplus) \
464 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
465
466/* A type that is properly aligned for any stack member. */
467union yyalloc
468{
469 short yyss;
470 YYSTYPE yyvs;
471 };
472
473/* The size of the maximum gap between one aligned stack and the next. */
474# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
475
476/* The size of an array large to enough to hold all stacks, each with
477 N elements. */
478# define YYSTACK_BYTES(N) \
479 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
480 + YYSTACK_GAP_MAX)
481
482/* Copy COUNT objects from FROM to TO. The source and destination do
483 not overlap. */
484# ifndef YYCOPY
485# if 1 < __GNUC__
486# define YYCOPY(To, From, Count) \
487 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
488# else
489# define YYCOPY(To, From, Count) \
490 do \
491 { \
492 register YYSIZE_T yyi; \
493 for (yyi = 0; yyi < (Count); yyi++) \
494 (To)[yyi] = (From)[yyi]; \
495 } \
496 while (0)
497# endif
498# endif
499
500/* Relocate STACK from its old location to the new one. The
501 local variables YYSIZE and YYSTACKSIZE give the old and new number of
502 elements in the stack, and YYPTR gives the new location of the
503 stack. Advance YYPTR to a properly aligned location for the next
504 stack. */
505# define YYSTACK_RELOCATE(Stack) \
506 do \
507 { \
508 YYSIZE_T yynewbytes; \
509 YYCOPY (&yyptr->Stack, Stack, yysize); \
510 Stack = &yyptr->Stack; \
511 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
512 yyptr += yynewbytes / sizeof (*yyptr); \
513 } \
514 while (0)
Lev Walkinf15320b2004-06-03 03:38:44 +0000515
516#endif
517
Lev Walkin418298d2006-07-13 08:24:20 +0000518#if defined (__STDC__) || defined (__cplusplus)
519 typedef signed char yysigned_char;
Lev Walkinf15320b2004-06-03 03:38:44 +0000520#else
Lev Walkin418298d2006-07-13 08:24:20 +0000521 typedef short yysigned_char;
Lev Walkinf15320b2004-06-03 03:38:44 +0000522#endif
523
Lev Walkin418298d2006-07-13 08:24:20 +0000524/* YYFINAL -- State number of the termination state. */
525#define YYFINAL 7
Lev Walkina9532f42006-09-17 04:52:50 +0000526#define YYLAST 834
Lev Walkin418298d2006-07-13 08:24:20 +0000527
528/* YYNTOKENS -- Number of terminals. */
Lev Walkinadf863f2006-09-05 16:18:34 +0000529#define YYNTOKENS 121
Lev Walkin418298d2006-07-13 08:24:20 +0000530/* YYNNTS -- Number of nonterminals. */
Lev Walkina9532f42006-09-17 04:52:50 +0000531#define YYNNTS 117
Lev Walkin418298d2006-07-13 08:24:20 +0000532/* YYNRULES -- Number of rules. */
Lev Walkina9532f42006-09-17 04:52:50 +0000533#define YYNRULES 302
Lev Walkin418298d2006-07-13 08:24:20 +0000534/* YYNRULES -- Number of states. */
Lev Walkina9532f42006-09-17 04:52:50 +0000535#define YYNSTATES 462
Lev Walkin418298d2006-07-13 08:24:20 +0000536
537/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
538#define YYUNDEFTOK 2
Lev Walkinadf863f2006-09-05 16:18:34 +0000539#define YYMAXUTOK 360
Lev Walkin418298d2006-07-13 08:24:20 +0000540
541#define YYTRANSLATE(X) \
542 ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
543
544/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
545static const unsigned char yytranslate[] =
546{
547 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
548 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
549 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinadf863f2006-09-05 16:18:34 +0000550 2, 2, 2, 117, 2, 2, 2, 2, 2, 2,
551 110, 111, 2, 2, 113, 2, 118, 2, 2, 2,
552 2, 2, 2, 2, 2, 2, 2, 2, 114, 112,
553 119, 2, 2, 2, 120, 2, 2, 2, 2, 2,
Lev Walkin418298d2006-07-13 08:24:20 +0000554 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
555 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinadf863f2006-09-05 16:18:34 +0000556 2, 115, 2, 116, 102, 2, 2, 2, 2, 2,
Lev Walkin418298d2006-07-13 08:24:20 +0000557 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
558 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinadf863f2006-09-05 16:18:34 +0000559 2, 2, 2, 108, 104, 109, 2, 2, 2, 2,
Lev Walkin418298d2006-07-13 08:24:20 +0000560 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
561 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
562 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
563 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
564 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
565 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
566 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
567 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
568 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
569 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
570 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
571 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
572 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
573 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
574 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
575 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
576 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
577 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
578 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
579 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
580 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
581 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
Lev Walkinadf863f2006-09-05 16:18:34 +0000582 95, 96, 97, 98, 99, 100, 101, 103, 105, 106,
583 107
Lev Walkin418298d2006-07-13 08:24:20 +0000584};
585
586#if YYDEBUG
587/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
588 YYRHS. */
589static const unsigned short yyprhs[] =
590{
Lev Walkina9532f42006-09-17 04:52:50 +0000591 0, 0, 3, 5, 7, 10, 11, 21, 22, 24,
592 28, 31, 33, 36, 38, 43, 45, 46, 48, 50,
593 53, 56, 59, 62, 65, 68, 69, 71, 75, 77,
594 80, 82, 84, 86, 87, 91, 93, 94, 96, 100,
595 103, 105, 108, 109, 111, 116, 118, 122, 124, 128,
596 130, 131, 133, 137, 141, 144, 146, 150, 152, 156,
597 158, 162, 167, 169, 171, 176, 180, 184, 191, 198,
598 200, 204, 206, 210, 214, 218, 222, 224, 228, 230,
599 232, 234, 236, 237, 239, 241, 245, 249, 252, 256,
600 258, 260, 264, 267, 269, 271, 277, 278, 280, 282,
601 286, 289, 294, 298, 302, 306, 310, 314, 315, 317,
602 318, 325, 327, 330, 332, 334, 336, 340, 342, 346,
603 350, 354, 355, 358, 360, 365, 370, 375, 382, 389,
604 391, 396, 400, 402, 406, 410, 414, 416, 420, 422,
605 426, 428, 430, 432, 434, 438, 442, 444, 449, 451,
606 453, 457, 458, 462, 464, 466, 468, 470, 472, 474,
607 476, 478, 482, 484, 486, 488, 490, 493, 495, 497,
608 499, 501, 504, 507, 509, 511, 514, 517, 519, 521,
609 523, 525, 527, 530, 532, 535, 537, 539, 541, 543,
Lev Walkin418298d2006-07-13 08:24:20 +0000610 545, 547, 549, 551, 553, 555, 557, 559, 561, 563,
Lev Walkina9532f42006-09-17 04:52:50 +0000611 565, 567, 569, 571, 573, 574, 576, 578, 582, 584,
612 589, 593, 598, 600, 602, 606, 612, 614, 618, 622,
613 626, 630, 635, 639, 641, 643, 647, 651, 655, 659,
614 661, 663, 665, 667, 669, 671, 673, 675, 677, 681,
615 687, 689, 693, 695, 699, 700, 702, 704, 706, 708,
616 710, 712, 714, 715, 721, 724, 726, 729, 732, 736,
617 738, 740, 744, 749, 751, 755, 758, 762, 764, 768,
618 769, 771, 773, 776, 779, 783, 785, 789, 791, 796,
619 801, 803, 805, 807, 809, 811, 813, 814, 816, 819,
620 824, 825, 827, 829, 831, 832, 834, 836, 838, 840,
621 842, 843, 845
Lev Walkin418298d2006-07-13 08:24:20 +0000622};
623
624/* YYRHS -- A `-1'-separated list of the rules' RHS. */
625static const short yyrhs[] =
626{
Lev Walkinadf863f2006-09-05 16:18:34 +0000627 122, 0, -1, 123, -1, 124, -1, 123, 124, -1,
Lev Walkina9532f42006-09-17 04:52:50 +0000628 -1, 234, 125, 126, 39, 130, 3, 26, 133, 44,
629 -1, -1, 127, -1, 108, 128, 109, -1, 108, 109,
630 -1, 129, -1, 128, 129, -1, 237, -1, 237, 110,
631 10, 111, -1, 10, -1, -1, 131, -1, 132, -1,
632 131, 132, -1, 46, 89, -1, 57, 89, -1, 25,
633 89, -1, 48, 58, -1, 16, 62, -1, -1, 134,
634 -1, 145, 138, 135, -1, 136, -1, 135, 136, -1,
635 152, -1, 182, -1, 150, -1, -1, 43, 16, 137,
636 -1, 192, -1, -1, 139, -1, 59, 140, 112, -1,
637 59, 51, -1, 142, -1, 140, 142, -1, -1, 127,
638 -1, 143, 51, 234, 141, -1, 144, -1, 143, 113,
639 144, -1, 234, -1, 234, 108, 109, -1, 237, -1,
640 -1, 146, -1, 47, 147, 112, -1, 47, 22, 112,
641 -1, 47, 112, -1, 148, -1, 147, 113, 148, -1,
642 234, -1, 234, 108, 109, -1, 237, -1, 108, 200,
643 109, -1, 234, 151, 3, 149, -1, 191, -1, 176,
644 -1, 176, 108, 155, 109, -1, 234, 3, 172, -1,
645 234, 3, 162, -1, 234, 108, 153, 109, 3, 172,
646 -1, 234, 108, 153, 109, 3, 162, -1, 154, -1,
647 153, 113, 154, -1, 234, -1, 234, 114, 237, -1,
648 234, 114, 234, -1, 189, 114, 237, -1, 189, 114,
649 234, -1, 156, -1, 155, 113, 156, -1, 172, -1,
650 185, -1, 237, -1, 149, -1, -1, 158, -1, 159,
651 -1, 158, 113, 159, -1, 237, 172, 222, -1, 172,
652 222, -1, 35, 73, 172, -1, 171, -1, 161, -1,
653 160, 113, 161, -1, 237, 172, -1, 171, -1, 172,
654 -1, 33, 108, 164, 109, 166, -1, -1, 93, -1,
655 165, -1, 164, 113, 165, -1, 17, 222, -1, 18,
656 172, 163, 222, -1, 18, 180, 222, -1, 18, 181,
657 222, -1, 17, 180, 222, -1, 17, 172, 222, -1,
658 17, 181, 222, -1, -1, 167, -1, -1, 100, 87,
659 108, 168, 169, 109, -1, 170, -1, 169, 170, -1,
660 4, -1, 19, -1, 179, -1, 115, 169, 116, -1,
661 107, -1, 107, 117, 186, -1, 107, 117, 227, -1,
662 229, 174, 196, -1, -1, 173, 175, -1, 151, -1,
663 32, 108, 160, 109, -1, 83, 108, 157, 109, -1,
664 84, 108, 157, 109, -1, 83, 196, 73, 236, 229,
665 174, -1, 84, 196, 73, 236, 229, 174, -1, 23,
666 -1, 23, 40, 30, 237, -1, 61, 73, 176, -1,
667 15, -1, 15, 118, 234, -1, 235, 118, 234, -1,
668 15, 118, 237, -1, 235, -1, 235, 118, 177, -1,
669 178, -1, 177, 118, 178, -1, 179, -1, 17, -1,
670 18, -1, 17, -1, 180, 118, 17, -1, 180, 118,
671 18, -1, 16, -1, 237, 151, 3, 183, -1, 185,
672 -1, 186, -1, 237, 114, 183, -1, -1, 108, 184,
673 188, -1, 68, -1, 50, -1, 91, -1, 6, -1,
674 8, -1, 187, -1, 227, -1, 237, -1, 234, 118,
675 237, -1, 7, -1, 13, -1, 14, -1, 5, -1,
676 188, 5, -1, 29, -1, 68, -1, 81, -1, 190,
677 -1, 72, 86, -1, 70, 56, -1, 82, -1, 49,
678 -1, 41, 76, -1, 31, 86, -1, 96, -1, 52,
679 -1, 192, -1, 63, -1, 45, -1, 27, 86, -1,
680 189, -1, 190, 224, -1, 28, -1, 53, -1, 54,
681 -1, 55, -1, 64, -1, 69, -1, 79, -1, 88,
682 -1, 90, -1, 95, -1, 97, -1, 98, -1, 99,
683 -1, 71, -1, 104, -1, 105, -1, 102, -1, 103,
684 -1, 101, -1, -1, 197, -1, 198, -1, 110, 211,
685 111, -1, 199, -1, 85, 110, 200, 111, -1, 110,
686 200, 111, -1, 199, 110, 200, 111, -1, 107, -1,
687 201, -1, 201, 113, 107, -1, 201, 113, 107, 113,
688 201, -1, 202, -1, 22, 101, 202, -1, 201, 193,
689 202, -1, 201, 194, 202, -1, 202, 195, 202, -1,
690 203, 110, 200, 111, -1, 110, 200, 111, -1, 204,
691 -1, 205, -1, 204, 215, 204, -1, 66, 215, 204,
692 -1, 204, 215, 65, -1, 66, 215, 65, -1, 206,
693 -1, 85, -1, 51, -1, 50, -1, 91, -1, 228,
694 -1, 187, -1, 237, -1, 234, -1, 100, 34, 199,
695 -1, 100, 35, 108, 207, 109, -1, 208, -1, 207,
696 113, 208, -1, 107, -1, 237, 196, 209, -1, -1,
697 210, -1, 78, -1, 20, -1, 74, -1, 212, -1,
698 216, -1, 214, -1, -1, 36, 30, 108, 213, 188,
699 -1, 37, 172, -1, 106, -1, 106, 119, -1, 119,
700 106, -1, 119, 106, 119, -1, 217, -1, 218, -1,
701 108, 234, 109, -1, 217, 108, 219, 109, -1, 220,
702 -1, 219, 113, 220, -1, 120, 221, -1, 120, 118,
703 221, -1, 237, -1, 221, 118, 237, -1, -1, 223,
704 -1, 74, -1, 38, 183, -1, 108, 109, -1, 108,
705 225, 109, -1, 226, -1, 225, 113, 226, -1, 237,
706 -1, 237, 110, 227, 111, -1, 237, 110, 186, 111,
707 -1, 227, -1, 107, -1, 10, -1, 11, -1, 227,
708 -1, 12, -1, -1, 230, -1, 231, 233, -1, 115,
709 232, 10, 116, -1, -1, 94, -1, 24, -1, 80,
710 -1, -1, 57, -1, 46, -1, 15, -1, 16, -1,
711 16, -1, -1, 237, -1, 9, -1
Lev Walkin418298d2006-07-13 08:24:20 +0000712};
713
714/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
715static const unsigned short yyrline[] =
716{
Lev Walkina9532f42006-09-17 04:52:50 +0000717 0, 349, 349, 355, 361, 378, 377, 406, 408, 411,
718 415, 420, 427, 435, 440, 444, 453, 455, 463, 467,
719 475, 479, 482, 485, 489, 509, 511, 519, 528, 532,
720 547, 555, 568, 576, 575, 589, 601, 603, 605, 616,
721 621, 627, 633, 635, 638, 649, 655, 661, 668, 674,
722 683, 685, 696, 700, 703, 710, 716, 722, 729, 735,
723 744, 746, 756, 770, 780, 796, 806, 822, 828, 835,
724 845, 855, 860, 867, 874, 882, 892, 898, 904, 908,
725 916, 927, 949, 951, 953, 959, 965, 973, 979, 986,
726 991, 997, 1003, 1009, 1012, 1018, 1028, 1030, 1033, 1041,
727 1048, 1061, 1072, 1082, 1093, 1103, 1114, 1125, 1127, 1134,
728 1132, 1141, 1146, 1152, 1157, 1160, 1164, 1169, 1178, 1187,
729 1198, 1220, 1227, 1246, 1250, 1256, 1262, 1268, 1278, 1288,
730 1294, 1305, 1319, 1328, 1338, 1348, 1358, 1366, 1387, 1396,
731 1405, 1407, 1414, 1421, 1427, 1431, 1437, 1457, 1467, 1469,
732 1470, 1477, 1477, 1482, 1489, 1495, 1500, 1504, 1508, 1511,
733 1516, 1528, 1545, 1550, 1555, 1588, 1598, 1612, 1614, 1615,
734 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625,
735 1631, 1633, 1634, 1637, 1644, 1656, 1658, 1662, 1666, 1667,
736 1668, 1669, 1670, 1674, 1675, 1676, 1677, 1681, 1682, 1689,
737 1689, 1690, 1690, 1691, 1693, 1695, 1700, 1702, 1707, 1711,
738 1720, 1724, 1729, 1734, 1737, 1743, 1753, 1757, 1760, 1763,
739 1766, 1771, 1780, 1788, 1794, 1800, 1807, 1815, 1823, 1832,
740 1837, 1841, 1846, 1852, 1857, 1858, 1859, 1872, 1886, 1890,
741 1895, 1899, 1904, 1911, 1924, 1926, 1929, 1933, 1936, 1943,
742 1945, 1946, 1951, 1949, 1961, 1969, 1971, 1972, 1973, 1975,
743 1979, 1987, 2002, 2008, 2015, 2028, 2040, 2055, 2059, 2076,
744 2081, 2084, 2089, 2111, 2116, 2121, 2127, 2133, 2141, 2149,
745 2157, 2164, 2174, 2179, 2185, 2187, 2217, 2219, 2222, 2229,
746 2235, 2237, 2238, 2239, 2242, 2244, 2245, 2248, 2253, 2260,
747 2267, 2269, 2274
Lev Walkin418298d2006-07-13 08:24:20 +0000748};
749#endif
750
751#if YYDEBUG || YYERROR_VERBOSE
752/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
753 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
754static const char *const yytname[] =
755{
756 "$end", "error", "$undefined", "TOK_PPEQ", "TOK_whitespace", "TOK_opaque",
757 "TOK_bstring", "TOK_cstring", "TOK_hstring", "TOK_identifier",
Lev Walkinadf863f2006-09-05 16:18:34 +0000758 "TOK_number", "TOK_number_negative", "TOK_realnumber", "TOK_tuple",
759 "TOK_quadruple", "TOK_typereference", "TOK_capitalreference",
760 "TOK_typefieldreference", "TOK_valuefieldreference", "TOK_Literal",
761 "TOK_ABSENT", "TOK_ABSTRACT_SYNTAX", "TOK_ALL", "TOK_ANY",
762 "TOK_APPLICATION", "TOK_AUTOMATIC", "TOK_BEGIN", "TOK_BIT",
763 "TOK_BMPString", "TOK_BOOLEAN", "TOK_BY", "TOK_CHARACTER", "TOK_CHOICE",
764 "TOK_CLASS", "TOK_COMPONENT", "TOK_COMPONENTS", "TOK_CONSTRAINED",
765 "TOK_CONTAINING", "TOK_DEFAULT", "TOK_DEFINITIONS", "TOK_DEFINED",
766 "TOK_EMBEDDED", "TOK_ENCODED", "TOK_ENCODING_CONTROL", "TOK_END",
767 "TOK_ENUMERATED", "TOK_EXPLICIT", "TOK_EXPORTS", "TOK_EXTENSIBILITY",
768 "TOK_EXTERNAL", "TOK_FALSE", "TOK_FROM", "TOK_GeneralizedTime",
769 "TOK_GeneralString", "TOK_GraphicString", "TOK_IA5String",
770 "TOK_IDENTIFIER", "TOK_IMPLICIT", "TOK_IMPLIED", "TOK_IMPORTS",
771 "TOK_INCLUDES", "TOK_INSTANCE", "TOK_INSTRUCTIONS", "TOK_INTEGER",
772 "TOK_ISO646String", "TOK_MAX", "TOK_MIN", "TOK_MINUS_INFINITY",
773 "TOK_NULL", "TOK_NumericString", "TOK_OBJECT", "TOK_ObjectDescriptor",
774 "TOK_OCTET", "TOK_OF", "TOK_OPTIONAL", "TOK_PATTERN", "TOK_PDV",
775 "TOK_PLUS_INFINITY", "TOK_PRESENT", "TOK_PrintableString",
776 "TOK_PRIVATE", "TOK_REAL", "TOK_RELATIVE_OID", "TOK_SEQUENCE",
777 "TOK_SET", "TOK_SIZE", "TOK_STRING", "TOK_SYNTAX", "TOK_T61String",
778 "TOK_TAGS", "TOK_TeletexString", "TOK_TRUE", "TOK_TYPE_IDENTIFIER",
779 "TOK_UNIQUE", "TOK_UNIVERSAL", "TOK_UniversalString", "TOK_UTCTime",
780 "TOK_UTF8String", "TOK_VideotexString", "TOK_VisibleString", "TOK_WITH",
781 "TOK_EXCEPT", "'^'", "TOK_INTERSECTION", "'|'", "TOK_UNION",
782 "TOK_TwoDots", "TOK_ThreeDots", "'{'", "'}'", "'('", "')'", "';'",
783 "','", "':'", "'['", "']'", "'!'", "'.'", "'<'", "'@'", "$accept",
Lev Walkina9532f42006-09-17 04:52:50 +0000784 "ParsedGrammar", "ModuleList", "ModuleDefinition", "@1",
Lev Walkinadf863f2006-09-05 16:18:34 +0000785 "optObjectIdentifier", "ObjectIdentifier", "ObjectIdentifierBody",
Lev Walkin866bd7f2006-09-14 10:35:20 +0000786 "ObjectIdentifierElement", "optModuleDefinitionFlags",
787 "ModuleDefinitionFlags", "ModuleDefinitionFlag", "optModuleBody",
Lev Walkina9532f42006-09-17 04:52:50 +0000788 "ModuleBody", "AssignmentList", "Assignment", "@2", "optImports",
Lev Walkin866bd7f2006-09-14 10:35:20 +0000789 "ImportsDefinition", "ImportsBundleSet", "AssignedIdentifier",
790 "ImportsBundle", "ImportsList", "ImportsElement", "optExports",
791 "ExportsDefinition", "ExportsBody", "ExportsElement", "ValueSet",
792 "ValueSetTypeAssignment", "DefinedType", "DataTypeReference",
793 "ParameterArgumentList", "ParameterArgumentName", "ActualParameterList",
794 "ActualParameter", "optComponentTypeLists", "ComponentTypeLists",
795 "ComponentType", "AlternativeTypeLists", "AlternativeType",
796 "ObjectClass", "optUnique", "FieldSpec", "ClassField", "optWithSyntax",
Lev Walkina9532f42006-09-17 04:52:50 +0000797 "WithSyntax", "@3", "WithSyntaxList", "WithSyntaxToken",
Lev Walkin866bd7f2006-09-14 10:35:20 +0000798 "ExtensionAndException", "Type", "NSTD_IndirectMarker",
799 "TypeDeclaration", "TypeDeclarationSet", "ComplexTypeReference",
800 "ComplexTypeReferenceAmpList", "ComplexTypeReferenceElement",
801 "PrimitiveFieldReference", "FieldName", "DefinedObjectClass",
Lev Walkina9532f42006-09-17 04:52:50 +0000802 "ValueDefinition", "Value", "@4", "SimpleValue", "DefinedValue",
Lev Walkin866bd7f2006-09-14 10:35:20 +0000803 "RestrictedCharacterStringValue", "Opaque", "BasicTypeId",
804 "BasicTypeId_UniverationCompatible", "BasicType", "BasicString",
Lev Walkina9532f42006-09-17 04:52:50 +0000805 "Union", "Intersection", "Except", "optConstraints", "Constraint",
806 "SubtypeConstraint", "SetOfConstraints", "ElementSetSpecs",
807 "ElementSetSpec", "ConstraintSubtypeElement", "ConstraintSpec",
808 "SingleValue", "ContainedSubtype", "InnerTypeConstraint",
809 "WithComponentsList", "WithComponentsElement", "optPresenceConstraint",
810 "PresenceConstraint", "GeneralConstraint", "UserDefinedConstraint",
811 "@5", "ContentsConstraint", "ConstraintRangeSpec", "TableConstraint",
Lev Walkin418298d2006-07-13 08:24:20 +0000812 "SimpleTableConstraint", "ComponentRelationConstraint",
813 "AtNotationList", "AtNotationElement", "ComponentIdList", "optMarker",
814 "Marker", "UniverationDefinition", "UniverationList",
Lev Walkinadf863f2006-09-05 16:18:34 +0000815 "UniverationElement", "SignedNumber", "RealValue", "optTag", "Tag",
816 "TagTypeValue", "TagClass", "TagPlicit", "TypeRefName",
817 "ObjectClassReference", "optIdentifier", "Identifier", 0
Lev Walkin418298d2006-07-13 08:24:20 +0000818};
819#endif
820
821# ifdef YYPRINT
822/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
823 token YYLEX-NUM. */
824static const unsigned short yytoknum[] =
825{
826 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
827 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
828 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
829 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
830 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
831 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
832 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
833 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
834 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
835 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
Lev Walkinadf863f2006-09-05 16:18:34 +0000836 355, 356, 94, 357, 124, 358, 359, 360, 123, 125,
837 40, 41, 59, 44, 58, 91, 93, 33, 46, 60,
838 64
Lev Walkin418298d2006-07-13 08:24:20 +0000839};
840# endif
841
842/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
843static const unsigned char yyr1[] =
844{
Lev Walkina9532f42006-09-17 04:52:50 +0000845 0, 121, 122, 123, 123, 125, 124, 126, 126, 127,
846 127, 128, 128, 129, 129, 129, 130, 130, 131, 131,
847 132, 132, 132, 132, 132, 133, 133, 134, 135, 135,
848 136, 136, 136, 137, 136, 136, 138, 138, 139, 139,
849 140, 140, 141, 141, 142, 143, 143, 144, 144, 144,
850 145, 145, 146, 146, 146, 147, 147, 148, 148, 148,
851 149, 150, 151, 151, 151, 152, 152, 152, 152, 153,
852 153, 154, 154, 154, 154, 154, 155, 155, 156, 156,
853 156, 156, 157, 157, 158, 158, 159, 159, 159, 159,
854 160, 160, 161, 161, 161, 162, 163, 163, 164, 164,
855 165, 165, 165, 165, 165, 165, 165, 166, 166, 168,
856 167, 169, 169, 170, 170, 170, 170, 171, 171, 171,
857 172, 173, 174, 175, 175, 175, 175, 175, 175, 175,
858 175, 175, 176, 176, 176, 176, 176, 176, 177, 177,
859 178, 179, 179, 180, 180, 180, 181, 182, 183, 183,
860 183, 184, 183, 183, 185, 185, 185, 185, 185, 185,
861 186, 186, 187, 187, 187, 188, 188, 189, 189, 189,
862 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
863 190, 190, 190, 191, 191, 192, 192, 192, 192, 192,
864 192, 192, 192, 192, 192, 192, 192, 192, 192, 193,
865 193, 194, 194, 195, 196, 196, 197, 197, 198, 198,
866 199, 199, 200, 200, 200, 200, 201, 201, 201, 201,
867 201, 202, 202, 202, 202, 202, 202, 202, 202, 202,
868 203, 203, 204, 204, 204, 204, 204, 205, 206, 206,
869 207, 207, 208, 208, 209, 209, 210, 210, 210, 211,
870 211, 211, 213, 212, 214, 215, 215, 215, 215, 216,
871 216, 217, 218, 219, 219, 220, 220, 221, 221, 222,
872 222, 223, 223, 224, 224, 225, 225, 226, 226, 226,
873 226, 226, 227, 227, 228, 228, 229, 229, 230, 231,
874 232, 232, 232, 232, 233, 233, 233, 234, 234, 235,
875 236, 236, 237
Lev Walkin418298d2006-07-13 08:24:20 +0000876};
877
878/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
879static const unsigned char yyr2[] =
880{
Lev Walkina9532f42006-09-17 04:52:50 +0000881 0, 2, 1, 1, 2, 0, 9, 0, 1, 3,
882 2, 1, 2, 1, 4, 1, 0, 1, 1, 2,
883 2, 2, 2, 2, 2, 0, 1, 3, 1, 2,
884 1, 1, 1, 0, 3, 1, 0, 1, 3, 2,
885 1, 2, 0, 1, 4, 1, 3, 1, 3, 1,
886 0, 1, 3, 3, 2, 1, 3, 1, 3, 1,
887 3, 4, 1, 1, 4, 3, 3, 6, 6, 1,
888 3, 1, 3, 3, 3, 3, 1, 3, 1, 1,
889 1, 1, 0, 1, 1, 3, 3, 2, 3, 1,
890 1, 3, 2, 1, 1, 5, 0, 1, 1, 3,
891 2, 4, 3, 3, 3, 3, 3, 0, 1, 0,
892 6, 1, 2, 1, 1, 1, 3, 1, 3, 3,
893 3, 0, 2, 1, 4, 4, 4, 6, 6, 1,
894 4, 3, 1, 3, 3, 3, 1, 3, 1, 3,
895 1, 1, 1, 1, 3, 3, 1, 4, 1, 1,
896 3, 0, 3, 1, 1, 1, 1, 1, 1, 1,
897 1, 3, 1, 1, 1, 1, 2, 1, 1, 1,
898 1, 2, 2, 1, 1, 2, 2, 1, 1, 1,
899 1, 1, 2, 1, 2, 1, 1, 1, 1, 1,
Lev Walkin418298d2006-07-13 08:24:20 +0000900 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkina9532f42006-09-17 04:52:50 +0000901 1, 1, 1, 1, 0, 1, 1, 3, 1, 4,
902 3, 4, 1, 1, 3, 5, 1, 3, 3, 3,
903 3, 4, 3, 1, 1, 3, 3, 3, 3, 1,
904 1, 1, 1, 1, 1, 1, 1, 1, 3, 5,
905 1, 3, 1, 3, 0, 1, 1, 1, 1, 1,
906 1, 1, 0, 5, 2, 1, 2, 2, 3, 1,
907 1, 3, 4, 1, 3, 2, 3, 1, 3, 0,
908 1, 1, 2, 2, 3, 1, 3, 1, 4, 4,
909 1, 1, 1, 1, 1, 1, 0, 1, 2, 4,
910 0, 1, 1, 1, 0, 1, 1, 1, 1, 1,
911 0, 1, 1
Lev Walkin418298d2006-07-13 08:24:20 +0000912};
913
914/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
915 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
916 means the default is an error. */
917static const unsigned short yydefact[] =
918{
Lev Walkina9532f42006-09-17 04:52:50 +0000919 0, 297, 298, 0, 2, 3, 5, 1, 4, 7,
920 0, 0, 8, 302, 15, 10, 0, 11, 13, 16,
921 9, 12, 0, 0, 0, 0, 0, 0, 0, 17,
922 18, 0, 24, 22, 20, 23, 21, 0, 19, 14,
923 50, 0, 0, 26, 36, 51, 0, 54, 0, 55,
924 57, 59, 6, 0, 0, 37, 53, 52, 0, 0,
925 39, 0, 40, 0, 45, 47, 49, 185, 0, 186,
926 187, 188, 189, 190, 198, 191, 192, 193, 194, 195,
927 196, 197, 27, 28, 32, 30, 31, 35, 0, 0,
928 56, 58, 38, 41, 0, 0, 0, 33, 29, 286,
929 132, 299, 0, 167, 0, 0, 181, 174, 178, 180,
930 168, 0, 0, 169, 173, 177, 0, 0, 63, 183,
931 170, 62, 179, 136, 0, 42, 46, 48, 34, 0,
932 290, 66, 65, 121, 287, 294, 0, 182, 176, 175,
933 172, 171, 0, 69, 0, 170, 71, 0, 286, 0,
934 184, 0, 0, 43, 44, 0, 292, 293, 291, 0,
935 0, 204, 296, 295, 288, 133, 135, 0, 0, 0,
936 0, 0, 61, 156, 162, 157, 282, 283, 163, 164,
937 154, 155, 81, 0, 76, 78, 79, 158, 159, 80,
938 281, 273, 0, 275, 280, 277, 141, 142, 137, 138,
939 140, 134, 153, 151, 147, 148, 149, 0, 160, 286,
940 286, 0, 98, 0, 129, 0, 0, 204, 204, 123,
941 122, 0, 0, 120, 205, 206, 208, 286, 70, 75,
942 74, 73, 72, 285, 0, 232, 231, 0, 230, 233,
943 0, 212, 0, 235, 0, 213, 216, 0, 223, 224,
944 229, 284, 234, 237, 236, 64, 286, 274, 0, 0,
945 0, 0, 0, 0, 146, 143, 0, 271, 269, 269,
946 269, 100, 270, 96, 269, 269, 107, 0, 289, 0,
947 286, 0, 286, 0, 286, 0, 0, 0, 286, 0,
948 0, 0, 249, 251, 250, 259, 260, 0, 68, 67,
949 0, 255, 0, 0, 0, 0, 0, 60, 201, 202,
950 199, 200, 0, 0, 0, 203, 0, 0, 0, 77,
951 276, 0, 0, 160, 139, 165, 152, 161, 150, 272,
952 105, 0, 104, 106, 97, 269, 102, 103, 0, 95,
953 108, 99, 0, 117, 0, 90, 93, 94, 286, 131,
954 0, 0, 83, 84, 89, 269, 286, 300, 0, 300,
955 0, 0, 254, 0, 210, 207, 0, 0, 217, 256,
956 257, 228, 226, 0, 238, 0, 222, 214, 218, 219,
957 220, 0, 227, 225, 279, 278, 166, 144, 145, 101,
958 0, 130, 0, 124, 286, 92, 286, 125, 286, 87,
959 269, 286, 301, 126, 286, 209, 252, 261, 0, 0,
960 263, 211, 258, 242, 0, 240, 204, 0, 221, 109,
961 118, 119, 91, 88, 85, 86, 121, 121, 0, 0,
962 265, 267, 262, 0, 239, 0, 244, 215, 0, 127,
963 128, 253, 266, 0, 264, 241, 247, 248, 246, 243,
964 245, 113, 114, 0, 0, 111, 115, 268, 0, 110,
965 112, 116
Lev Walkin418298d2006-07-13 08:24:20 +0000966};
967
968/* YYDEFGOTO[NTERM-NUM]. */
969static const short yydefgoto[] =
970{
Lev Walkina9532f42006-09-17 04:52:50 +0000971 -1, 3, 4, 5, 9, 11, 12, 16, 17, 28,
972 29, 30, 42, 43, 82, 83, 128, 54, 55, 61,
973 154, 62, 63, 64, 44, 45, 48, 49, 182, 84,
974 117, 85, 142, 143, 183, 184, 351, 352, 353, 344,
975 345, 131, 335, 211, 212, 339, 340, 438, 454, 455,
976 354, 355, 160, 161, 220, 118, 198, 199, 456, 269,
977 270, 86, 204, 261, 205, 206, 243, 326, 119, 120,
978 121, 122, 313, 314, 316, 223, 224, 225, 226, 290,
979 245, 246, 247, 248, 249, 250, 414, 415, 449, 450,
980 291, 292, 428, 293, 303, 294, 295, 296, 409, 410,
981 430, 271, 272, 150, 192, 193, 251, 252, 133, 134,
982 135, 159, 164, 253, 123, 401, 254
Lev Walkin418298d2006-07-13 08:24:20 +0000983};
984
985/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
986 STATE-NUM. */
Lev Walkina9532f42006-09-17 04:52:50 +0000987#define YYPACT_NINF -345
Lev Walkin418298d2006-07-13 08:24:20 +0000988static const short yypact[] =
989{
Lev Walkina9532f42006-09-17 04:52:50 +0000990 179, -345, -345, 94, 179, -345, -345, -345, -345, -87,
991 25, 118, -345, -345, -345, -345, 64, -345, 37, 234,
992 -345, -345, 106, 123, 107, 113, 164, 165, 260, 234,
993 -345, 157, -345, -345, -345, -345, -345, 247, -345, -345,
994 177, 60, 235, -345, 239, -345, 175, -345, -72, -345,
995 198, -345, -345, 147, 506, -345, -345, -345, 246, 199,
996 -345, 21, -345, 100, -345, 205, -345, -345, 299, -345,
997 -345, -345, -345, -345, -345, -345, -345, -345, -345, -345,
998 -345, -345, 506, -345, -345, -345, -345, -345, 273, 659,
999 -345, -345, -345, -345, 179, 246, 212, -345, -345, 16,
1000 242, -345, 237, -345, 254, 270, -345, -345, -345, -345,
1001 -345, 306, 278, -345, -345, -345, 735, 376, 272, -345,
1002 275, -345, -345, 267, 383, -87, -345, -345, -345, 281,
1003 87, -345, -345, -345, -345, 14, 246, -345, -345, -345,
1004 -345, -345, 36, -345, 276, -345, 277, 284, 91, 77,
1005 -345, 341, 201, -345, -345, 214, -345, -345, -345, 377,
1006 583, 108, -345, -345, -345, -345, -345, 391, 735, 246,
1007 246, 435, -345, -345, -345, -345, -345, -345, -345, -345,
1008 -345, -345, -345, 134, -345, -345, -345, -345, -345, -345,
1009 -345, -345, 186, -345, -345, 285, -345, -345, 289, -345,
1010 -345, -345, -345, -345, -345, -345, -345, 290, 282, 162,
1011 76, 211, -345, 293, 370, 303, 340, -52, 95, -345,
1012 -345, 304, 390, -345, -345, -345, 305, 16, -345, -345,
1013 -345, -345, -345, -345, 315, -345, -345, 114, -345, -345,
1014 210, -345, 435, -345, 308, 181, 317, 310, 114, -345,
1015 -345, -345, -345, -345, -345, -345, 91, -345, 97, 301,
1016 279, 416, 413, 201, -345, -345, 201, -345, -13, 74,
1017 -13, -345, -345, 330, 74, -13, 324, 214, -345, 398,
1018 61, 323, 68, 356, 68, 357, 435, 401, 319, 179,
1019 321, 325, -345, -345, -345, 327, -345, 435, -345, -345,
1020 497, 318, 332, 216, 329, 335, 342, -345, -345, -345,
1021 -345, -345, 345, 497, 497, -345, 497, 435, 228, -345,
1022 -345, 343, 344, -345, -345, -345, 453, -345, -345, -345,
1023 -345, 349, -345, -345, -345, -13, -345, -345, 373, -345,
1024 -345, -345, 413, 352, 220, -345, -345, -345, 319, -345,
1025 397, 362, 359, -345, -345, -13, 319, 413, 364, 413,
1026 365, 369, -345, 371, -345, -345, 358, 368, -345, -345,
1027 363, -345, -345, 435, 305, 8, -345, 374, -345, -345,
1028 -345, 372, -345, -345, -345, -345, -345, -345, -345, -345,
1029 380, -345, 301, -345, 61, -345, 319, -345, 43, -345,
1030 -13, 319, -345, -345, 319, -345, -345, -345, -5, 221,
1031 -345, -345, -345, -345, 222, -345, 108, 452, -345, -345,
1032 -345, -345, -345, -345, -345, -345, -345, -345, 416, 413,
1033 366, -345, -345, 358, -345, 8, 6, 271, 49, -345,
1034 -345, 453, 366, 413, -345, -345, -345, -345, -345, -345,
1035 -345, -345, -345, 49, 46, -345, -345, -345, 28, -345,
1036 -345, -345
Lev Walkin418298d2006-07-13 08:24:20 +00001037};
1038
1039/* YYPGOTO[NTERM-NUM]. */
1040static const short yypgoto[] =
1041{
Lev Walkina9532f42006-09-17 04:52:50 +00001042 -345, -345, -345, 485, -345, -345, 367, -345, 475, -345,
1043 -345, 464, -345, -345, -345, 412, -345, -345, -345, -345,
1044 -345, 434, -345, 404, -345, -345, -345, 438, 378, -345,
1045 -79, -345, -345, 337, -345, 258, 232, -345, 119, -345,
1046 125, 296, -345, -345, 250, -345, -345, -345, 71, -344,
1047 -271, -91, -345, -49, -345, 248, -345, 268, -132, 320,
1048 322, -345, 85, -345, -135, -252, -136, 103, -89, -78,
1049 -345, -43, -345, -345, -345, -215, -345, -345, 229, -151,
1050 121, -126, -345, -84, -345, -345, -345, 101, -345, -345,
1051 -345, -345, -345, -345, 291, -345, -345, -345, -345, 111,
1052 112, -246, -345, -345, -345, 288, -134, -345, -51, -345,
1053 -345, -345, -345, 1, -345, 191, -10
Lev Walkin418298d2006-07-13 08:24:20 +00001054};
1055
1056/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
1057 positive, shift that token. If negative, reduce the rule which
1058 number is the opposite. If zero, do what YYDEFACT says.
1059 If YYTABLE_NINF, parse error. */
Lev Walkina9532f42006-09-17 04:52:50 +00001060#define YYTABLE_NINF -270
Lev Walkin418298d2006-07-13 08:24:20 +00001061static const short yytable[] =
1062{
Lev Walkina9532f42006-09-17 04:52:50 +00001063 18, 6, 283, 285, 13, 6, 18, 321, 132, 346,
1064 124, 87, 187, 186, 188, 194, 187, 13, 188, 200,
1065 244, 10, 330, 332, 333, 266, 446, 144, 336, 337,
1066 13, 51, 451, 221, 13, 14, 1, 2, 145, 87,
1067 57, 58, 50, 66, 89, 196, 197, 452, 51, 129,
1068 451, 66, 13, 451, 65, 88, 282, 185, 222, 50,
1069 162, 267, 65, 196, 197, 452, 196, 197, 452, 13,
1070 13, 163, 89, 13, 14, 1, 2, 13, 350, 144,
1071 447, 219, 46, 88, 448, 66, 13, 176, 177, 389,
1072 145, 306, 264, 265, 7, 125, 65, 173, 174, 175,
1073 13, 176, 177, 350, 178, 179, 13, 176, 177, 399,
1074 460, 156, 266, 429, 460, 413, 31, 146, 268, 273,
1075 187, 186, 188, 346, 194, 322, 166, 187, 200, 188,
1076 187, 130, 188, 92, 15, 360, 299, 165, 189, 195,
1077 420, 180, 208, 453, 461, 167, 367, 22, 267, 168,
1078 343, 94, 201, 207, 425, 459, 13, 19, 130, 230,
1079 232, 453, 1, 2, 453, 185, 381, 157, 343, 146,
1080 229, 231, 47, 20, 368, 343, 130, -82, 264, 265,
1081 221, 158, 181, 130, 190, 32, 191, 378, 379, 347,
1082 380, 130, 331, 221, 1, 2, 33, 362, 60, 171,
1083 266, 436, 34, 284, 190, 222, 130, 173, 174, 175,
1084 13, 176, 177, 95, 178, 179, 1, 2, 222, 372,
1085 301, -25, 35, 174, 41, 13, 176, 177, 233, 178,
1086 179, 209, 210, 302, 383, 174, 267, 13, 176, 177,
1087 233, 178, 179, 255, 304, 305, 189, 256, 195, 323,
1088 23, 180, 327, 208, 36, 13, 208, 395, 421, 24,
1089 207, 1, 2, 37, 207, 400, 235, 207, 39, 202,
1090 348, -269, 356, 40, 356, -269, 99, 130, 235, 52,
1091 25, 371, 26, 308, 309, 310, 311, 56, 100, 101,
1092 363, 27, 181, 382, 312, 257, 196, 197, 53, 258,
1093 102, 67, 103, 347, 104, 423, 59, 239, 91, 203,
1094 13, 176, 177, 96, 105, 97, 1, 2, 106, 239,
1095 276, 127, 107, 137, 277, 108, 69, 70, 71, 393,
1096 432, 434, 391, 394, 433, 435, 109, 72, 100, 101,
1097 138, 110, 73, 111, 74, 112, 139, 402, 328, 402,
1098 426, 329, 75, 427, 113, 114, 1, 2, 196, 197,
1099 136, 76, 140, 77, 141, 416, 387, 388, 78, 115,
1100 79, 80, 81, 308, 309, 310, 311, 439, 440, 147,
1101 148, 116, 323, 149, 348, 151, 152, 213, 356, 155,
1102 169, 170, 171, 207, 227, 259, 263, 174, 431, 13,
1103 176, 177, 233, 178, 179, 1, 2, 260, 262, 278,
1104 279, 280, 234, 281, 286, 297, 300, 307, 315, 431,
1105 317, 325, 13, 334, 338, 416, 287, 288, 342, 357,
1106 359, 361, 364, 457, 130, 366, 365, 369, 370, 373,
1107 235, 236, 174, 375, 13, 176, 177, 233, 178, 179,
1108 1, 2, 377, 376, 384, 385, 237, 234, 386, 174,
1109 390, 13, 176, 177, 233, 178, 179, 1, 2, 392,
1110 396, 397, 398, 403, 234, 238, 405, 406, 408, 411,
1111 407, 239, 412, 418, 443, 235, 236, 417, 419, 8,
1112 240, 21, 153, 38, 98, 93, 90, 241, 289, 126,
1113 242, 237, 235, 236, 174, 228, 13, 176, 177, 233,
1114 178, 179, 1, 2, 319, 13, 358, 424, 237, 422,
1115 238, 1, 2, 298, 458, 172, 239, 341, 324, 349,
1116 274, 441, 275, 374, 67, 240, 445, 238, 437, 318,
1117 0, 442, 241, 239, 444, 242, 320, 235, 236, 68,
1118 404, 0, 240, 0, 0, 0, 0, 0, 0, 69,
1119 70, 71, 242, 237, 0, 0, 0, 0, 0, 0,
1120 72, 0, 0, 0, 0, 73, 0, 74, 0, 0,
1121 0, 0, 238, 0, 0, 75, 0, 0, 239, 0,
1122 0, 0, 0, 0, 76, 0, 77, 240, 100, 101,
1123 0, 78, 0, 79, 80, 81, 214, 242, 0, 0,
1124 102, 67, 103, 0, 104, 215, 0, 0, 0, 0,
1125 0, 0, 0, 0, 105, 0, 0, 0, 106, 0,
1126 0, 0, 107, 0, 0, 108, 69, 70, 71, 0,
1127 0, 0, 0, 0, 216, 0, 109, 72, 0, 0,
1128 0, 110, 73, 111, 74, 112, 0, 0, 0, 0,
1129 0, 0, 75, 0, 113, 114, 217, 218, 0, 0,
1130 0, 76, 0, 77, 100, 101, 0, 0, 78, 115,
1131 79, 80, 81, 0, 0, 0, 102, 67, 103, 0,
1132 104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1133 105, 0, 0, 0, 106, 0, 0, 0, 107, 0,
1134 0, 108, 69, 70, 71, 0, 0, 0, 0, 0,
1135 0, 0, 109, 72, 0, 0, 0, 110, 73, 111,
1136 74, 112, 0, 0, 0, 0, 0, 0, 75, 0,
1137 113, 114, 0, 0, 0, 0, 0, 76, 0, 77,
1138 1, 2, 0, 0, 78, 115, 79, 80, 81, 0,
1139 0, 0, 102, 67, 103, 0, 104, 0, 0, 0,
1140 0, 0, 0, 0, 0, 0, 105, 0, 0, 0,
1141 106, 0, 0, 0, 107, 0, 0, 108, 69, 70,
1142 71, 0, 0, 0, 0, 0, 0, 0, 109, 72,
1143 0, 0, 0, 110, 73, 111, 74, 112, 0, 0,
1144 0, 0, 0, 0, 75, 0, 113, 114, 0, 0,
1145 0, 0, 0, 76, 0, 77, 0, 0, 0, 0,
1146 78, 115, 79, 80, 81
Lev Walkin418298d2006-07-13 08:24:20 +00001147};
1148
1149static const short yycheck[] =
1150{
Lev Walkina9532f42006-09-17 04:52:50 +00001151 10, 0, 217, 218, 9, 4, 16, 259, 99, 280,
1152 89, 54, 148, 148, 148, 149, 152, 9, 152, 151,
1153 171, 108, 268, 269, 270, 38, 20, 116, 274, 275,
1154 9, 41, 4, 85, 9, 10, 15, 16, 116, 82,
1155 112, 113, 41, 53, 54, 17, 18, 19, 58, 33,
1156 4, 61, 9, 4, 53, 54, 108, 148, 110, 58,
1157 46, 74, 61, 17, 18, 19, 17, 18, 19, 9,
1158 9, 57, 82, 9, 10, 15, 16, 9, 35, 168,
1159 74, 160, 22, 82, 78, 95, 9, 10, 11, 335,
1160 168, 242, 16, 17, 0, 94, 95, 6, 7, 8,
1161 9, 10, 11, 35, 13, 14, 9, 10, 11, 355,
1162 454, 24, 38, 118, 458, 107, 10, 116, 209, 210,
1163 256, 256, 256, 394, 258, 259, 136, 263, 260, 263,
1164 266, 115, 266, 112, 109, 286, 227, 136, 148, 149,
1165 392, 50, 152, 115, 116, 109, 297, 110, 74, 113,
1166 107, 51, 151, 152, 400, 109, 9, 39, 115, 169,
1167 170, 115, 15, 16, 115, 256, 317, 80, 107, 168,
1168 169, 170, 112, 109, 300, 107, 115, 109, 16, 17,
1169 85, 94, 91, 115, 107, 62, 109, 313, 314, 280,
1170 316, 115, 118, 85, 15, 16, 89, 288, 51, 108,
1171 38, 416, 89, 108, 107, 110, 115, 6, 7, 8,
1172 9, 10, 11, 113, 13, 14, 15, 16, 110, 303,
1173 106, 44, 58, 7, 47, 9, 10, 11, 12, 13,
1174 14, 17, 18, 119, 318, 7, 74, 9, 10, 11,
1175 12, 13, 14, 109, 34, 35, 256, 113, 258, 259,
1176 16, 50, 262, 263, 89, 9, 266, 348, 392, 25,
1177 259, 15, 16, 3, 263, 356, 50, 266, 111, 68,
1178 280, 109, 282, 26, 284, 113, 3, 115, 50, 44,
1179 46, 65, 48, 102, 103, 104, 105, 112, 15, 16,
1180 289, 57, 91, 65, 113, 109, 17, 18, 59, 113,
1181 27, 28, 29, 394, 31, 396, 108, 91, 109, 108,
1182 9, 10, 11, 108, 41, 16, 15, 16, 45, 91,
1183 109, 109, 49, 86, 113, 52, 53, 54, 55, 109,
1184 109, 109, 342, 113, 113, 113, 63, 64, 15, 16,
1185 86, 68, 69, 70, 71, 72, 76, 357, 263, 359,
1186 401, 266, 79, 404, 81, 82, 15, 16, 17, 18,
1187 118, 88, 56, 90, 86, 375, 17, 18, 95, 96,
1188 97, 98, 99, 102, 103, 104, 105, 426, 427, 3,
1189 108, 108, 392, 108, 394, 118, 3, 10, 398, 108,
1190 114, 114, 108, 392, 3, 110, 114, 7, 408, 9,
1191 10, 11, 12, 13, 14, 15, 16, 118, 118, 116,
1192 40, 108, 22, 73, 110, 110, 101, 109, 101, 429,
1193 110, 5, 9, 93, 100, 435, 36, 37, 30, 73,
1194 73, 30, 111, 443, 115, 108, 111, 119, 106, 110,
1195 50, 51, 7, 108, 9, 10, 11, 12, 13, 14,
1196 15, 16, 107, 111, 111, 111, 66, 22, 5, 7,
1197 87, 9, 10, 11, 12, 13, 14, 15, 16, 117,
1198 73, 109, 113, 109, 22, 85, 111, 108, 120, 111,
1199 109, 91, 119, 111, 118, 50, 51, 113, 108, 4,
1200 100, 16, 125, 29, 82, 61, 58, 107, 108, 95,
1201 110, 66, 50, 51, 7, 168, 9, 10, 11, 12,
1202 13, 14, 15, 16, 256, 9, 284, 398, 66, 394,
1203 85, 15, 16, 227, 453, 147, 91, 277, 260, 281,
1204 210, 428, 210, 304, 28, 100, 435, 85, 417, 248,
1205 -1, 429, 107, 91, 433, 110, 258, 50, 51, 43,
1206 359, -1, 100, -1, -1, -1, -1, -1, -1, 53,
1207 54, 55, 110, 66, -1, -1, -1, -1, -1, -1,
1208 64, -1, -1, -1, -1, 69, -1, 71, -1, -1,
1209 -1, -1, 85, -1, -1, 79, -1, -1, 91, -1,
1210 -1, -1, -1, -1, 88, -1, 90, 100, 15, 16,
1211 -1, 95, -1, 97, 98, 99, 23, 110, -1, -1,
1212 27, 28, 29, -1, 31, 32, -1, -1, -1, -1,
1213 -1, -1, -1, -1, 41, -1, -1, -1, 45, -1,
1214 -1, -1, 49, -1, -1, 52, 53, 54, 55, -1,
1215 -1, -1, -1, -1, 61, -1, 63, 64, -1, -1,
1216 -1, 68, 69, 70, 71, 72, -1, -1, -1, -1,
1217 -1, -1, 79, -1, 81, 82, 83, 84, -1, -1,
1218 -1, 88, -1, 90, 15, 16, -1, -1, 95, 96,
1219 97, 98, 99, -1, -1, -1, 27, 28, 29, -1,
1220 31, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1221 41, -1, -1, -1, 45, -1, -1, -1, 49, -1,
1222 -1, 52, 53, 54, 55, -1, -1, -1, -1, -1,
1223 -1, -1, 63, 64, -1, -1, -1, 68, 69, 70,
1224 71, 72, -1, -1, -1, -1, -1, -1, 79, -1,
1225 81, 82, -1, -1, -1, -1, -1, 88, -1, 90,
1226 15, 16, -1, -1, 95, 96, 97, 98, 99, -1,
1227 -1, -1, 27, 28, 29, -1, 31, -1, -1, -1,
1228 -1, -1, -1, -1, -1, -1, 41, -1, -1, -1,
Lev Walkin866bd7f2006-09-14 10:35:20 +00001229 45, -1, -1, -1, 49, -1, -1, 52, 53, 54,
Lev Walkina9532f42006-09-17 04:52:50 +00001230 55, -1, -1, -1, -1, -1, -1, -1, 63, 64,
Lev Walkin866bd7f2006-09-14 10:35:20 +00001231 -1, -1, -1, 68, 69, 70, 71, 72, -1, -1,
Lev Walkina9532f42006-09-17 04:52:50 +00001232 -1, -1, -1, -1, 79, -1, 81, 82, -1, -1,
1233 -1, -1, -1, 88, -1, 90, -1, -1, -1, -1,
1234 95, 96, 97, 98, 99
Lev Walkin418298d2006-07-13 08:24:20 +00001235};
1236
1237/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1238 symbol of state STATE-NUM. */
1239static const unsigned char yystos[] =
1240{
Lev Walkina9532f42006-09-17 04:52:50 +00001241 0, 15, 16, 122, 123, 124, 234, 0, 124, 125,
1242 108, 126, 127, 9, 10, 109, 128, 129, 237, 39,
1243 109, 129, 110, 16, 25, 46, 48, 57, 130, 131,
1244 132, 10, 62, 89, 89, 58, 89, 3, 132, 111,
1245 26, 47, 133, 134, 145, 146, 22, 112, 147, 148,
1246 234, 237, 44, 59, 138, 139, 112, 112, 113, 108,
1247 51, 140, 142, 143, 144, 234, 237, 28, 43, 53,
1248 54, 55, 64, 69, 71, 79, 88, 90, 95, 97,
1249 98, 99, 135, 136, 150, 152, 182, 192, 234, 237,
1250 148, 109, 112, 142, 51, 113, 108, 16, 136, 3,
1251 15, 16, 27, 29, 31, 41, 45, 49, 52, 63,
1252 68, 70, 72, 81, 82, 96, 108, 151, 176, 189,
1253 190, 191, 192, 235, 151, 234, 144, 109, 137, 33,
1254 115, 162, 172, 229, 230, 231, 118, 86, 86, 76,
1255 56, 86, 153, 154, 189, 190, 234, 3, 108, 108,
1256 224, 118, 3, 127, 141, 108, 24, 80, 94, 232,
1257 173, 174, 46, 57, 233, 234, 237, 109, 113, 114,
1258 114, 108, 149, 6, 7, 8, 10, 11, 13, 14,
1259 50, 91, 149, 155, 156, 172, 185, 187, 227, 237,
1260 107, 109, 225, 226, 227, 237, 17, 18, 177, 178,
1261 179, 234, 68, 108, 183, 185, 186, 234, 237, 17,
1262 18, 164, 165, 10, 23, 32, 61, 83, 84, 151,
1263 175, 85, 110, 196, 197, 198, 199, 3, 154, 234,
1264 237, 234, 237, 12, 22, 50, 51, 66, 85, 91,
1265 100, 107, 110, 187, 200, 201, 202, 203, 204, 205,
1266 206, 227, 228, 234, 237, 109, 113, 109, 113, 110,
1267 118, 184, 118, 114, 16, 17, 38, 74, 172, 180,
1268 181, 222, 223, 172, 180, 181, 109, 113, 116, 40,
1269 108, 73, 108, 196, 108, 196, 110, 36, 37, 108,
1270 200, 211, 212, 214, 216, 217, 218, 110, 162, 172,
1271 101, 106, 119, 215, 34, 35, 200, 109, 102, 103,
1272 104, 105, 113, 193, 194, 101, 195, 110, 215, 156,
1273 226, 186, 227, 237, 178, 5, 188, 237, 183, 183,
1274 222, 118, 222, 222, 93, 163, 222, 222, 100, 166,
1275 167, 165, 30, 107, 160, 161, 171, 172, 237, 176,
1276 35, 157, 158, 159, 171, 172, 237, 73, 157, 73,
1277 200, 30, 172, 234, 111, 111, 108, 200, 202, 119,
1278 106, 65, 204, 110, 199, 108, 111, 107, 202, 202,
1279 202, 200, 65, 204, 111, 111, 5, 17, 18, 222,
1280 87, 237, 117, 109, 113, 172, 73, 109, 113, 222,
1281 172, 236, 237, 109, 236, 111, 108, 109, 120, 219,
1282 220, 111, 119, 107, 207, 208, 237, 113, 111, 108,
1283 186, 227, 161, 172, 159, 222, 229, 229, 213, 118,
1284 221, 237, 109, 113, 109, 113, 196, 201, 168, 174,
1285 174, 188, 221, 118, 220, 208, 20, 74, 78, 209,
1286 210, 4, 19, 115, 169, 170, 179, 237, 169, 109,
1287 170, 116
Lev Walkin418298d2006-07-13 08:24:20 +00001288};
1289
1290#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1291# define YYSIZE_T __SIZE_TYPE__
1292#endif
1293#if ! defined (YYSIZE_T) && defined (size_t)
1294# define YYSIZE_T size_t
1295#endif
1296#if ! defined (YYSIZE_T)
1297# if defined (__STDC__) || defined (__cplusplus)
1298# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1299# define YYSIZE_T size_t
1300# endif
1301#endif
1302#if ! defined (YYSIZE_T)
1303# define YYSIZE_T unsigned int
1304#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001305
1306#define yyerrok (yyerrstatus = 0)
1307#define yyclearin (yychar = YYEMPTY)
Lev Walkina00d6b32006-03-21 03:40:38 +00001308#define YYEMPTY -2
Lev Walkinf15320b2004-06-03 03:38:44 +00001309#define YYEOF 0
Lev Walkin418298d2006-07-13 08:24:20 +00001310
Lev Walkinf15320b2004-06-03 03:38:44 +00001311#define YYACCEPT goto yyacceptlab
Lev Walkin418298d2006-07-13 08:24:20 +00001312#define YYABORT goto yyabortlab
Lev Walkina00d6b32006-03-21 03:40:38 +00001313#define YYERROR goto yyerrlab1
Lev Walkin418298d2006-07-13 08:24:20 +00001314
1315/* Like YYERROR except do call yyerror. This remains here temporarily
1316 to ease the transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +00001317 Once GCC version 2 has supplanted version 1, this can go. */
Lev Walkin418298d2006-07-13 08:24:20 +00001318
Lev Walkinf15320b2004-06-03 03:38:44 +00001319#define YYFAIL goto yyerrlab
Lev Walkin418298d2006-07-13 08:24:20 +00001320
Lev Walkinf15320b2004-06-03 03:38:44 +00001321#define YYRECOVERING() (!!yyerrstatus)
Lev Walkin418298d2006-07-13 08:24:20 +00001322
1323#define YYBACKUP(Token, Value) \
Lev Walkinf15320b2004-06-03 03:38:44 +00001324do \
1325 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin418298d2006-07-13 08:24:20 +00001326 { \
1327 yychar = (Token); \
1328 yylval = (Value); \
Lev Walkina00d6b32006-03-21 03:40:38 +00001329 yychar1 = YYTRANSLATE (yychar); \
Lev Walkinf15320b2004-06-03 03:38:44 +00001330 YYPOPSTACK; \
1331 goto yybackup; \
1332 } \
1333 else \
Lev Walkin418298d2006-07-13 08:24:20 +00001334 { \
1335 yyerror ("syntax error: cannot back up"); \
1336 YYERROR; \
1337 } \
Lev Walkinf15320b2004-06-03 03:38:44 +00001338while (0)
1339
1340#define YYTERROR 1
1341#define YYERRCODE 256
1342
Lev Walkin418298d2006-07-13 08:24:20 +00001343/* YYLLOC_DEFAULT -- Compute the default location (before the actions
1344 are run). */
1345
1346#ifndef YYLLOC_DEFAULT
1347# define YYLLOC_DEFAULT(Current, Rhs, N) \
1348 Current.first_line = Rhs[1].first_line; \
1349 Current.first_column = Rhs[1].first_column; \
1350 Current.last_line = Rhs[N].last_line; \
1351 Current.last_column = Rhs[N].last_column;
Lev Walkinf15320b2004-06-03 03:38:44 +00001352#endif
1353
Lev Walkin418298d2006-07-13 08:24:20 +00001354/* YYLEX -- calling `yylex' with the right arguments. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001355
Lev Walkin418298d2006-07-13 08:24:20 +00001356#define YYLEX yylex ()
Lev Walkinfb872bd2006-03-18 06:53:11 +00001357
Lev Walkin418298d2006-07-13 08:24:20 +00001358/* Enable debugging if requested. */
1359#if YYDEBUG
Lev Walkinfb872bd2006-03-18 06:53:11 +00001360
Lev Walkin418298d2006-07-13 08:24:20 +00001361# ifndef YYFPRINTF
1362# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1363# define YYFPRINTF fprintf
1364# endif
Lev Walkinfb872bd2006-03-18 06:53:11 +00001365
Lev Walkin418298d2006-07-13 08:24:20 +00001366# define YYDPRINTF(Args) \
1367do { \
1368 if (yydebug) \
1369 YYFPRINTF Args; \
1370} while (0)
1371# define YYDSYMPRINT(Args) \
1372do { \
1373 if (yydebug) \
1374 yysymprint Args; \
1375} while (0)
1376/* Nonzero means print parse trace. It is left uninitialized so that
1377 multiple parsers can coexist. */
1378int yydebug;
1379#else /* !YYDEBUG */
1380# define YYDPRINTF(Args)
1381# define YYDSYMPRINT(Args)
1382#endif /* !YYDEBUG */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001383
Lev Walkin418298d2006-07-13 08:24:20 +00001384/* YYINITDEPTH -- initial size of the parser's stacks. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001385#ifndef YYINITDEPTH
Lev Walkin418298d2006-07-13 08:24:20 +00001386# define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +00001387#endif
1388
Lev Walkin418298d2006-07-13 08:24:20 +00001389/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1390 if the built-in stack extension method is used).
1391
1392 Do not make this value too large; the results are undefined if
1393 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
1394 evaluated with infinite-precision integer arithmetic. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001395
Lev Walkina00d6b32006-03-21 03:40:38 +00001396#if YYMAXDEPTH == 0
Lev Walkin418298d2006-07-13 08:24:20 +00001397# undef YYMAXDEPTH
Lev Walkina00d6b32006-03-21 03:40:38 +00001398#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001399
1400#ifndef YYMAXDEPTH
Lev Walkin418298d2006-07-13 08:24:20 +00001401# define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +00001402#endif
Lev Walkin418298d2006-07-13 08:24:20 +00001403
Lev Walkinf15320b2004-06-03 03:38:44 +00001404
Lev Walkinf15320b2004-06-03 03:38:44 +00001405
Lev Walkin418298d2006-07-13 08:24:20 +00001406#if YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00001407
Lev Walkin418298d2006-07-13 08:24:20 +00001408# ifndef yystrlen
1409# if defined (__GLIBC__) && defined (_STRING_H)
1410# define yystrlen strlen
1411# else
1412/* Return the length of YYSTR. */
1413static YYSIZE_T
1414# if defined (__STDC__) || defined (__cplusplus)
1415yystrlen (const char *yystr)
1416# else
1417yystrlen (yystr)
1418 const char *yystr;
1419# endif
Lev Walkina00d6b32006-03-21 03:40:38 +00001420{
Lev Walkin418298d2006-07-13 08:24:20 +00001421 register const char *yys = yystr;
Lev Walkina00d6b32006-03-21 03:40:38 +00001422
Lev Walkin418298d2006-07-13 08:24:20 +00001423 while (*yys++ != '\0')
1424 continue;
1425
1426 return yys - yystr - 1;
1427}
1428# endif
1429# endif
1430
1431# ifndef yystpcpy
1432# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1433# define yystpcpy stpcpy
1434# else
1435/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1436 YYDEST. */
1437static char *
1438# if defined (__STDC__) || defined (__cplusplus)
1439yystpcpy (char *yydest, const char *yysrc)
1440# else
1441yystpcpy (yydest, yysrc)
1442 char *yydest;
1443 const char *yysrc;
1444# endif
1445{
1446 register char *yyd = yydest;
1447 register const char *yys = yysrc;
1448
1449 while ((*yyd++ = *yys++) != '\0')
1450 continue;
1451
1452 return yyd - 1;
1453}
1454# endif
1455# endif
1456
1457#endif /* !YYERROR_VERBOSE */
1458
1459
1460
1461#if YYDEBUG
1462/*-----------------------------.
1463| Print this symbol on YYOUT. |
1464`-----------------------------*/
1465
1466static void
1467#if defined (__STDC__) || defined (__cplusplus)
1468yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue)
1469#else
1470yysymprint (yyout, yytype, yyvalue)
1471 FILE* yyout;
1472 int yytype;
1473 YYSTYPE yyvalue;
1474#endif
1475{
1476 /* Pacify ``unused variable'' warnings. */
1477 (void) yyvalue;
1478
1479 if (yytype < YYNTOKENS)
1480 {
1481 YYFPRINTF (yyout, "token %s (", yytname[yytype]);
1482# ifdef YYPRINT
1483 YYPRINT (yyout, yytoknum[yytype], yyvalue);
1484# endif
1485 }
1486 else
1487 YYFPRINTF (yyout, "nterm %s (", yytname[yytype]);
1488
1489 switch (yytype)
1490 {
1491 default:
1492 break;
1493 }
1494 YYFPRINTF (yyout, ")");
1495}
1496#endif /* YYDEBUG. */
1497
1498
1499/*-----------------------------------------------.
1500| Release the memory associated to this symbol. |
1501`-----------------------------------------------*/
1502
1503static void
1504#if defined (__STDC__) || defined (__cplusplus)
1505yydestruct (int yytype, YYSTYPE yyvalue)
1506#else
1507yydestruct (yytype, yyvalue)
1508 int yytype;
1509 YYSTYPE yyvalue;
1510#endif
1511{
1512 /* Pacify ``unused variable'' warnings. */
1513 (void) yyvalue;
1514
1515 switch (yytype)
1516 {
1517 default:
1518 break;
1519 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001520}
1521
Lev Walkinfb872bd2006-03-18 06:53:11 +00001522
1523
Lev Walkina00d6b32006-03-21 03:40:38 +00001524/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1525 into yyparse. The argument should have type void *.
1526 It should actually point to an object.
1527 Grammar actions can access the variable by casting it
1528 to the proper pointer type. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001529
1530#ifdef YYPARSE_PARAM
Lev Walkin418298d2006-07-13 08:24:20 +00001531# if defined (__STDC__) || defined (__cplusplus)
1532# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1533# define YYPARSE_PARAM_DECL
1534# else
1535# define YYPARSE_PARAM_ARG YYPARSE_PARAM
1536# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1537# endif
1538#else /* !YYPARSE_PARAM */
1539# define YYPARSE_PARAM_ARG
1540# define YYPARSE_PARAM_DECL
1541#endif /* !YYPARSE_PARAM */
Lev Walkina00d6b32006-03-21 03:40:38 +00001542
1543/* Prevent warning if -Wstrict-prototypes. */
1544#ifdef __GNUC__
Lev Walkin418298d2006-07-13 08:24:20 +00001545# ifdef YYPARSE_PARAM
Lev Walkina00d6b32006-03-21 03:40:38 +00001546int yyparse (void *);
Lev Walkin418298d2006-07-13 08:24:20 +00001547# else
Lev Walkinf15320b2004-06-03 03:38:44 +00001548int yyparse (void);
Lev Walkin418298d2006-07-13 08:24:20 +00001549# endif
Lev Walkinfb872bd2006-03-18 06:53:11 +00001550#endif
Lev Walkin418298d2006-07-13 08:24:20 +00001551
1552
1553/* The lookahead symbol. */
1554int yychar;
1555
1556/* The semantic value of the lookahead symbol. */
1557YYSTYPE yylval;
1558
1559/* Number of parse errors so far. */
1560int yynerrs;
1561
Lev Walkinfb872bd2006-03-18 06:53:11 +00001562
Lev Walkinfb872bd2006-03-18 06:53:11 +00001563int
Lev Walkin418298d2006-07-13 08:24:20 +00001564yyparse (YYPARSE_PARAM_ARG)
Lev Walkina00d6b32006-03-21 03:40:38 +00001565 YYPARSE_PARAM_DECL
Lev Walkinfb872bd2006-03-18 06:53:11 +00001566{
Lev Walkin418298d2006-07-13 08:24:20 +00001567
Lev Walkina00d6b32006-03-21 03:40:38 +00001568 register int yystate;
1569 register int yyn;
Lev Walkin418298d2006-07-13 08:24:20 +00001570 int yyresult;
1571 /* Number of tokens to shift before error messages enabled. */
1572 int yyerrstatus;
1573 /* Lookahead token as an internal (translated) token number. */
1574 int yychar1 = 0;
1575
1576 /* Three stacks and their tools:
1577 `yyss': related to states,
1578 `yyvs': related to semantic values,
1579 `yyls': related to locations.
1580
1581 Refer to the stacks thru separate pointers, to allow yyoverflow
1582 to reallocate them elsewhere. */
1583
1584 /* The state stack. */
1585 short yyssa[YYINITDEPTH];
1586 short *yyss = yyssa;
Lev Walkina00d6b32006-03-21 03:40:38 +00001587 register short *yyssp;
Lev Walkin418298d2006-07-13 08:24:20 +00001588
1589 /* The semantic value stack. */
1590 YYSTYPE yyvsa[YYINITDEPTH];
1591 YYSTYPE *yyvs = yyvsa;
Lev Walkina00d6b32006-03-21 03:40:38 +00001592 register YYSTYPE *yyvsp;
Lev Walkinfb872bd2006-03-18 06:53:11 +00001593
Lev Walkinfb872bd2006-03-18 06:53:11 +00001594
Lev Walkinfb872bd2006-03-18 06:53:11 +00001595
Lev Walkinf15320b2004-06-03 03:38:44 +00001596#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkinf15320b2004-06-03 03:38:44 +00001597
Lev Walkin418298d2006-07-13 08:24:20 +00001598 YYSIZE_T yystacksize = YYINITDEPTH;
Lev Walkinf15320b2004-06-03 03:38:44 +00001599
Lev Walkin418298d2006-07-13 08:24:20 +00001600 /* The variables used to return semantic value and location from the
1601 action routines. */
1602 YYSTYPE yyval;
Lev Walkinf15320b2004-06-03 03:38:44 +00001603
Lev Walkinf15320b2004-06-03 03:38:44 +00001604
Lev Walkin418298d2006-07-13 08:24:20 +00001605 /* When reducing, the number of symbols on the RHS of the reduced
1606 rule. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001607 int yylen;
1608
Lev Walkin418298d2006-07-13 08:24:20 +00001609 YYDPRINTF ((stderr, "Starting parse\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001610
1611 yystate = 0;
1612 yyerrstatus = 0;
1613 yynerrs = 0;
1614 yychar = YYEMPTY; /* Cause a token to be read. */
1615
1616 /* Initialize stack pointers.
1617 Waste one element of value and location stack
1618 so that they stay on the same level as the state stack.
1619 The wasted elements are never initialized. */
1620
Lev Walkin418298d2006-07-13 08:24:20 +00001621 yyssp = yyss;
Lev Walkinf15320b2004-06-03 03:38:44 +00001622 yyvsp = yyvs;
Lev Walkinf15320b2004-06-03 03:38:44 +00001623
Lev Walkin418298d2006-07-13 08:24:20 +00001624 goto yysetstate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001625
Lev Walkin418298d2006-07-13 08:24:20 +00001626/*------------------------------------------------------------.
1627| yynewstate -- Push a new state, which is found in yystate. |
1628`------------------------------------------------------------*/
1629 yynewstate:
1630 /* In all cases, when you get here, the value and location stacks
1631 have just been pushed. so pushing a state here evens the stacks.
1632 */
1633 yyssp++;
1634
1635 yysetstate:
1636 *yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001637
Lev Walkina00d6b32006-03-21 03:40:38 +00001638 if (yyssp >= yyss + yystacksize - 1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001639 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001640 /* Get the current used size of the three stacks, in elements. */
Lev Walkin418298d2006-07-13 08:24:20 +00001641 YYSIZE_T yysize = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001642
1643#ifdef yyoverflow
Lev Walkin418298d2006-07-13 08:24:20 +00001644 {
1645 /* Give user a chance to reallocate the stack. Use copies of
1646 these so that the &'s don't force the real ones into
1647 memory. */
1648 YYSTYPE *yyvs1 = yyvs;
1649 short *yyss1 = yyss;
Lev Walkinf15320b2004-06-03 03:38:44 +00001650
Lev Walkin418298d2006-07-13 08:24:20 +00001651
1652 /* Each stack pointer address is followed by the size of the
1653 data in use in that stack, in bytes. This used to be a
1654 conditional around just the two extra args, but that might
1655 be undefined if yyoverflow is a macro. */
1656 yyoverflow ("parser stack overflow",
1657 &yyss1, yysize * sizeof (*yyssp),
1658 &yyvs1, yysize * sizeof (*yyvsp),
1659
1660 &yystacksize);
1661
1662 yyss = yyss1;
1663 yyvs = yyvs1;
1664 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001665#else /* no yyoverflow */
Lev Walkin418298d2006-07-13 08:24:20 +00001666# ifndef YYSTACK_RELOCATE
1667 goto yyoverflowlab;
1668# else
Lev Walkinf15320b2004-06-03 03:38:44 +00001669 /* Extend the stack our own way. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001670 if (yystacksize >= YYMAXDEPTH)
Lev Walkin418298d2006-07-13 08:24:20 +00001671 goto yyoverflowlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001672 yystacksize *= 2;
Lev Walkina00d6b32006-03-21 03:40:38 +00001673 if (yystacksize > YYMAXDEPTH)
Lev Walkinf15320b2004-06-03 03:38:44 +00001674 yystacksize = YYMAXDEPTH;
Lev Walkin418298d2006-07-13 08:24:20 +00001675
1676 {
1677 short *yyss1 = yyss;
1678 union yyalloc *yyptr =
1679 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1680 if (! yyptr)
1681 goto yyoverflowlab;
1682 YYSTACK_RELOCATE (yyss);
1683 YYSTACK_RELOCATE (yyvs);
1684
1685# undef YYSTACK_RELOCATE
1686 if (yyss1 != yyssa)
1687 YYSTACK_FREE (yyss1);
1688 }
1689# endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001690#endif /* no yyoverflow */
1691
Lev Walkin418298d2006-07-13 08:24:20 +00001692 yyssp = yyss + yysize - 1;
1693 yyvsp = yyvs + yysize - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001694
Lev Walkin418298d2006-07-13 08:24:20 +00001695
1696 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1697 (unsigned long int) yystacksize));
Lev Walkinf15320b2004-06-03 03:38:44 +00001698
Lev Walkina00d6b32006-03-21 03:40:38 +00001699 if (yyssp >= yyss + yystacksize - 1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001700 YYABORT;
1701 }
1702
Lev Walkin418298d2006-07-13 08:24:20 +00001703 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Lev Walkinf15320b2004-06-03 03:38:44 +00001704
1705 goto yybackup;
Lev Walkin418298d2006-07-13 08:24:20 +00001706
1707/*-----------.
1708| yybackup. |
1709`-----------*/
1710yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001711
1712/* Do appropriate processing given the current state. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001713/* Read a lookahead token if we need one and don't already have one. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001714/* yyresume: */
1715
Lev Walkina00d6b32006-03-21 03:40:38 +00001716 /* First try to decide what to do without reference to lookahead token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001717
1718 yyn = yypact[yystate];
Lev Walkin418298d2006-07-13 08:24:20 +00001719 if (yyn == YYPACT_NINF)
Lev Walkinf15320b2004-06-03 03:38:44 +00001720 goto yydefault;
1721
Lev Walkina00d6b32006-03-21 03:40:38 +00001722 /* Not known => get a lookahead token if don't already have one. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001723
Lev Walkina00d6b32006-03-21 03:40:38 +00001724 /* yychar is either YYEMPTY or YYEOF
1725 or a valid token in external form. */
1726
Lev Walkinf15320b2004-06-03 03:38:44 +00001727 if (yychar == YYEMPTY)
1728 {
Lev Walkin418298d2006-07-13 08:24:20 +00001729 YYDPRINTF ((stderr, "Reading a token: "));
Lev Walkinf15320b2004-06-03 03:38:44 +00001730 yychar = YYLEX;
1731 }
1732
Lev Walkin418298d2006-07-13 08:24:20 +00001733 /* Convert token to internal form (in yychar1) for indexing tables with. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001734
Lev Walkin418298d2006-07-13 08:24:20 +00001735 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001736 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001737 yychar1 = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00001738 yychar = YYEOF; /* Don't call YYLEX any more. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001739
Lev Walkin418298d2006-07-13 08:24:20 +00001740 YYDPRINTF ((stderr, "Now at end of input.\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001741 }
1742 else
1743 {
Lev Walkin418298d2006-07-13 08:24:20 +00001744 yychar1 = YYTRANSLATE (yychar);
Lev Walkina00d6b32006-03-21 03:40:38 +00001745
Lev Walkin418298d2006-07-13 08:24:20 +00001746 /* We have to keep this `#if YYDEBUG', since we use variables
1747 which are defined only if `YYDEBUG' is set. */
1748 YYDPRINTF ((stderr, "Next token is "));
1749 YYDSYMPRINT ((stderr, yychar1, yylval));
1750 YYDPRINTF ((stderr, "\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001751 }
1752
Lev Walkin418298d2006-07-13 08:24:20 +00001753 /* If the proper action on seeing token YYCHAR1 is to reduce or to
1754 detect an error, take that action. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001755 yyn += yychar1;
Lev Walkin418298d2006-07-13 08:24:20 +00001756 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001757 goto yydefault;
Lev Walkinf15320b2004-06-03 03:38:44 +00001758 yyn = yytable[yyn];
Lev Walkin418298d2006-07-13 08:24:20 +00001759 if (yyn <= 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001760 {
Lev Walkin418298d2006-07-13 08:24:20 +00001761 if (yyn == 0 || yyn == YYTABLE_NINF)
Lev Walkinf15320b2004-06-03 03:38:44 +00001762 goto yyerrlab;
1763 yyn = -yyn;
1764 goto yyreduce;
1765 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001766
1767 if (yyn == YYFINAL)
1768 YYACCEPT;
1769
Lev Walkina00d6b32006-03-21 03:40:38 +00001770 /* Shift the lookahead token. */
Lev Walkin418298d2006-07-13 08:24:20 +00001771 YYDPRINTF ((stderr, "Shifting token %d (%s), ",
1772 yychar, yytname[yychar1]));
Lev Walkinf15320b2004-06-03 03:38:44 +00001773
1774 /* Discard the token being shifted unless it is eof. */
1775 if (yychar != YYEOF)
1776 yychar = YYEMPTY;
1777
1778 *++yyvsp = yylval;
Lev Walkinf15320b2004-06-03 03:38:44 +00001779
Lev Walkin418298d2006-07-13 08:24:20 +00001780
1781 /* Count tokens shifted since error; after three, turn off error
1782 status. */
1783 if (yyerrstatus)
1784 yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001785
1786 yystate = yyn;
1787 goto yynewstate;
1788
Lev Walkina00d6b32006-03-21 03:40:38 +00001789
Lev Walkin418298d2006-07-13 08:24:20 +00001790/*-----------------------------------------------------------.
1791| yydefault -- do the default action for the current state. |
1792`-----------------------------------------------------------*/
1793yydefault:
Lev Walkinf15320b2004-06-03 03:38:44 +00001794 yyn = yydefact[yystate];
1795 if (yyn == 0)
1796 goto yyerrlab;
Lev Walkin418298d2006-07-13 08:24:20 +00001797 goto yyreduce;
Lev Walkinf15320b2004-06-03 03:38:44 +00001798
Lev Walkin418298d2006-07-13 08:24:20 +00001799
1800/*-----------------------------.
1801| yyreduce -- Do a reduction. |
1802`-----------------------------*/
Lev Walkinf15320b2004-06-03 03:38:44 +00001803yyreduce:
Lev Walkin418298d2006-07-13 08:24:20 +00001804 /* yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001805 yylen = yyr2[yyn];
Lev Walkinf15320b2004-06-03 03:38:44 +00001806
Lev Walkin418298d2006-07-13 08:24:20 +00001807 /* If YYLEN is nonzero, implement the default value of the action:
1808 `$$ = $1'.
1809
1810 Otherwise, the following line sets YYVAL to garbage.
1811 This behavior is undocumented and Bison
1812 users should not rely upon it. Assigning to YYVAL
1813 unconditionally makes the parser a bit smaller, and it avoids a
1814 GCC warning that YYVAL may be used uninitialized. */
1815 yyval = yyvsp[1-yylen];
1816
1817
1818
1819#if YYDEBUG
1820 /* We have to keep this `#if YYDEBUG', since we use variables which
1821 are defined only if `YYDEBUG' is set. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001822 if (yydebug)
Lev Walkinf15320b2004-06-03 03:38:44 +00001823 {
Lev Walkin418298d2006-07-13 08:24:20 +00001824 int yyi;
Lev Walkina00d6b32006-03-21 03:40:38 +00001825
Lev Walkin418298d2006-07-13 08:24:20 +00001826 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
1827 yyn - 1, yyrline[yyn]);
Lev Walkina00d6b32006-03-21 03:40:38 +00001828
1829 /* Print the symbols being reduced, and their result. */
Lev Walkin418298d2006-07-13 08:24:20 +00001830 for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
1831 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
1832 YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkina00d6b32006-03-21 03:40:38 +00001833 }
1834#endif
Lev Walkin418298d2006-07-13 08:24:20 +00001835 switch (yyn)
1836 {
1837 case 2:
Lev Walkina9532f42006-09-17 04:52:50 +00001838#line 350 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001839 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001840 *(void **)param = yyvsp[0].a_grammar;
Lev Walkin418298d2006-07-13 08:24:20 +00001841 }
1842 break;
1843
1844 case 3:
Lev Walkina9532f42006-09-17 04:52:50 +00001845#line 356 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001846 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001847 yyval.a_grammar = asn1p_new();
1848 checkmem(yyval.a_grammar);
1849 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin418298d2006-07-13 08:24:20 +00001850 }
1851 break;
1852
1853 case 4:
Lev Walkina9532f42006-09-17 04:52:50 +00001854#line 361 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001855 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001856 yyval.a_grammar = yyvsp[-1].a_grammar;
1857 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin418298d2006-07-13 08:24:20 +00001858 }
1859 break;
1860
1861 case 5:
Lev Walkina9532f42006-09-17 04:52:50 +00001862#line 378 "asn1p_y.y"
1863 { currentModule = asn1p_module_new(); }
1864 break;
1865
1866 case 6:
1867#line 383 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001868 {
Lev Walkinfb872bd2006-03-18 06:53:11 +00001869
Lev Walkina9532f42006-09-17 04:52:50 +00001870 yyval.a_module = currentModule;
1871
Lev Walkina00d6b32006-03-21 03:40:38 +00001872 if(yyvsp[-1].a_module) {
Lev Walkina9532f42006-09-17 04:52:50 +00001873 asn1p_module_t tmp = *(yyval.a_module);
1874 *(yyval.a_module) = *(yyvsp[-1].a_module);
1875 *(yyvsp[-1].a_module) = tmp;
1876 asn1p_module_free(yyvsp[-1].a_module);
Lev Walkinf15320b2004-06-03 03:38:44 +00001877 } else {
1878 /* There's a chance that a module is just plain empty */
Lev Walkinf15320b2004-06-03 03:38:44 +00001879 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001880
Lev Walkina9532f42006-09-17 04:52:50 +00001881 yyval.a_module->ModuleName = yyvsp[-8].tv_str;
Lev Walkina00d6b32006-03-21 03:40:38 +00001882 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1883 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001884 }
1885 break;
1886
Lev Walkina9532f42006-09-17 04:52:50 +00001887 case 7:
1888#line 407 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001889 { yyval.a_oid = 0; }
1890 break;
1891
Lev Walkina9532f42006-09-17 04:52:50 +00001892 case 8:
1893#line 408 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001894 { yyval.a_oid = yyvsp[0].a_oid; }
1895 break;
1896
Lev Walkina9532f42006-09-17 04:52:50 +00001897 case 9:
1898#line 412 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001899 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001900 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin418298d2006-07-13 08:24:20 +00001901 }
1902 break;
1903
Lev Walkina9532f42006-09-17 04:52:50 +00001904 case 10:
1905#line 415 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001906 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001907 yyval.a_oid = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00001908 }
1909 break;
1910
Lev Walkina9532f42006-09-17 04:52:50 +00001911 case 11:
1912#line 421 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001913 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001914 yyval.a_oid = asn1p_oid_new();
1915 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1916 if(yyvsp[0].a_oid_arc.name)
1917 free(yyvsp[0].a_oid_arc.name);
Lev Walkin418298d2006-07-13 08:24:20 +00001918 }
1919 break;
1920
Lev Walkina9532f42006-09-17 04:52:50 +00001921 case 12:
1922#line 427 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001923 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001924 yyval.a_oid = yyvsp[-1].a_oid;
1925 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1926 if(yyvsp[0].a_oid_arc.name)
1927 free(yyvsp[0].a_oid_arc.name);
Lev Walkin418298d2006-07-13 08:24:20 +00001928 }
1929 break;
1930
Lev Walkina9532f42006-09-17 04:52:50 +00001931 case 13:
1932#line 436 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001933 { /* iso */
Lev Walkina00d6b32006-03-21 03:40:38 +00001934 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1935 yyval.a_oid_arc.number = -1;
Lev Walkin418298d2006-07-13 08:24:20 +00001936 }
1937 break;
1938
Lev Walkina9532f42006-09-17 04:52:50 +00001939 case 14:
1940#line 440 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001941 { /* iso(1) */
Lev Walkina00d6b32006-03-21 03:40:38 +00001942 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1943 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkin418298d2006-07-13 08:24:20 +00001944 }
1945 break;
1946
Lev Walkina9532f42006-09-17 04:52:50 +00001947 case 15:
1948#line 444 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001949 { /* 1 */
Lev Walkina00d6b32006-03-21 03:40:38 +00001950 yyval.a_oid_arc.name = 0;
1951 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin418298d2006-07-13 08:24:20 +00001952 }
1953 break;
1954
Lev Walkina9532f42006-09-17 04:52:50 +00001955 case 16:
1956#line 454 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001957 { yyval.a_module_flags = MSF_NOFLAGS; }
1958 break;
1959
Lev Walkin418298d2006-07-13 08:24:20 +00001960 case 17:
Lev Walkina9532f42006-09-17 04:52:50 +00001961#line 455 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001962 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001963 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001964 }
1965 break;
1966
1967 case 18:
Lev Walkina9532f42006-09-17 04:52:50 +00001968#line 464 "asn1p_y.y"
1969 {
1970 yyval.a_module_flags = yyvsp[0].a_module_flags;
1971 }
1972 break;
1973
1974 case 19:
1975#line 467 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001976 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001977 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001978 }
1979 break;
1980
Lev Walkina9532f42006-09-17 04:52:50 +00001981 case 20:
1982#line 476 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001983 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001984 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin418298d2006-07-13 08:24:20 +00001985 }
1986 break;
1987
Lev Walkina9532f42006-09-17 04:52:50 +00001988 case 21:
1989#line 479 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001990 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001991 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin418298d2006-07-13 08:24:20 +00001992 }
1993 break;
1994
Lev Walkina9532f42006-09-17 04:52:50 +00001995 case 22:
1996#line 482 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001997 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001998 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin418298d2006-07-13 08:24:20 +00001999 }
2000 break;
2001
Lev Walkina9532f42006-09-17 04:52:50 +00002002 case 23:
2003#line 485 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002004 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002005 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin418298d2006-07-13 08:24:20 +00002006 }
2007 break;
2008
Lev Walkina9532f42006-09-17 04:52:50 +00002009 case 24:
2010#line 489 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002011 {
Lev Walkinf59d0752004-08-18 04:59:12 +00002012 /* X.680Amd1 specifies TAG and XER */
Lev Walkina00d6b32006-03-21 03:40:38 +00002013 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
2014 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
2015 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
2016 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
Lev Walkinf59d0752004-08-18 04:59:12 +00002017 } else {
2018 fprintf(stderr,
2019 "WARNING: %s INSTRUCTIONS at line %d: "
2020 "Unrecognized encoding reference\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00002021 yyvsp[-1].tv_str, yylineno);
2022 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
Lev Walkinf59d0752004-08-18 04:59:12 +00002023 }
Lev Walkina00d6b32006-03-21 03:40:38 +00002024 free(yyvsp[-1].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00002025 }
2026 break;
2027
Lev Walkina9532f42006-09-17 04:52:50 +00002028 case 25:
2029#line 510 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002030 { yyval.a_module = 0; }
2031 break;
2032
Lev Walkina9532f42006-09-17 04:52:50 +00002033 case 26:
2034#line 511 "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
Lev Walkina9532f42006-09-17 04:52:50 +00002040 case 27:
2041#line 520 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002042 {
Lev Walkin866bd7f2006-09-14 10:35:20 +00002043 yyval.a_module = asn1p_module_new();
2044 AL_IMPORT(yyval.a_module, exports, yyvsp[-2].a_module, xp_next);
2045 AL_IMPORT(yyval.a_module, imports, yyvsp[-1].a_module, xp_next);
2046 AL_IMPORT(yyval.a_module, members, yyvsp[0].a_module, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002047 }
2048 break;
2049
Lev Walkina9532f42006-09-17 04:52:50 +00002050 case 28:
2051#line 529 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002052 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002053 yyval.a_module = yyvsp[0].a_module;
Lev Walkin418298d2006-07-13 08:24:20 +00002054 }
2055 break;
2056
Lev Walkina9532f42006-09-17 04:52:50 +00002057 case 29:
2058#line 532 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002059 {
2060 if(yyvsp[-1].a_module) {
2061 yyval.a_module = yyvsp[-1].a_module;
2062 } else {
2063 yyval.a_module = yyvsp[0].a_module;
2064 break;
2065 }
2066 AL_IMPORT(yyval.a_module, members, yyvsp[0].a_module, next);
2067 }
2068 break;
2069
Lev Walkin418298d2006-07-13 08:24:20 +00002070 case 30:
Lev Walkina9532f42006-09-17 04:52:50 +00002071#line 548 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002072 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002073 yyval.a_module = asn1p_module_new();
2074 checkmem(yyval.a_module);
2075 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2076 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2077 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002078 }
2079 break;
2080
2081 case 31:
Lev Walkina9532f42006-09-17 04:52:50 +00002082#line 555 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002083 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002084 yyval.a_module = asn1p_module_new();
2085 checkmem(yyval.a_module);
2086 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2087 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2088 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002089 }
2090 break;
2091
2092 case 32:
Lev Walkina9532f42006-09-17 04:52:50 +00002093#line 568 "asn1p_y.y"
2094 {
2095 yyval.a_module = asn1p_module_new();
2096 checkmem(yyval.a_module);
2097 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2098 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2099 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
2100 }
Lev Walkin418298d2006-07-13 08:24:20 +00002101 break;
2102
Lev Walkin866bd7f2006-09-14 10:35:20 +00002103 case 33:
Lev Walkina9532f42006-09-17 04:52:50 +00002104#line 576 "asn1p_y.y"
2105 { asn1p_lexer_hack_push_encoding_control(); }
2106 break;
2107
2108 case 34:
2109#line 577 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002110 {
Lev Walkinf59d0752004-08-18 04:59:12 +00002111 fprintf(stderr,
2112 "WARNING: ENCODING-CONTROL %s "
2113 "specification at line %d ignored\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00002114 yyvsp[-1].tv_str, yylineno);
2115 free(yyvsp[-1].tv_str);
2116 yyval.a_module = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002117 }
2118 break;
2119
Lev Walkina9532f42006-09-17 04:52:50 +00002120 case 35:
2121#line 589 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002122 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002123 return yyerror(
Lev Walkin70853052005-11-26 11:21:55 +00002124 "Attempt to redefine a standard basic string type, "
2125 "please comment out or remove this type redefinition.");
Lev Walkin418298d2006-07-13 08:24:20 +00002126 }
2127 break;
2128
Lev Walkina9532f42006-09-17 04:52:50 +00002129 case 36:
2130#line 602 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002131 { yyval.a_module = 0; }
2132 break;
2133
Lev Walkina9532f42006-09-17 04:52:50 +00002134 case 38:
2135#line 606 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002136 {
Lev Walkinb36317c2005-08-12 10:09:10 +00002137 if(!saved_aid && 0)
2138 return yyerror("Unterminated IMPORTS FROM, "
2139 "expected semicolon ';'");
2140 saved_aid = 0;
Lev Walkina00d6b32006-03-21 03:40:38 +00002141 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin418298d2006-07-13 08:24:20 +00002142 }
2143 break;
2144
Lev Walkina9532f42006-09-17 04:52:50 +00002145 case 39:
2146#line 616 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002147 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002148 return yyerror("Empty IMPORTS list");
Lev Walkin418298d2006-07-13 08:24:20 +00002149 }
2150 break;
2151
Lev Walkina9532f42006-09-17 04:52:50 +00002152 case 40:
2153#line 622 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002154 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002155 yyval.a_module = asn1p_module_new();
2156 checkmem(yyval.a_module);
2157 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin418298d2006-07-13 08:24:20 +00002158 }
2159 break;
2160
Lev Walkina9532f42006-09-17 04:52:50 +00002161 case 41:
2162#line 627 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002163 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002164 yyval.a_module = yyvsp[-1].a_module;
2165 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin418298d2006-07-13 08:24:20 +00002166 }
2167 break;
2168
Lev Walkina9532f42006-09-17 04:52:50 +00002169 case 42:
2170#line 634 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002171 { memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); }
2172 break;
2173
Lev Walkina9532f42006-09-17 04:52:50 +00002174 case 43:
2175#line 635 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002176 { yyval.a_aid.oid = yyvsp[0].a_oid; }
2177 break;
2178
Lev Walkina9532f42006-09-17 04:52:50 +00002179 case 44:
2180#line 639 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002181 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002182 yyval.a_xports = yyvsp[-3].a_xports;
2183 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
2184 yyval.a_xports->identifier = yyvsp[0].a_aid;
Lev Walkinb36317c2005-08-12 10:09:10 +00002185 /* This stupid thing is used for look-back hack. */
Lev Walkina00d6b32006-03-21 03:40:38 +00002186 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
2187 checkmem(yyval.a_xports);
Lev Walkin418298d2006-07-13 08:24:20 +00002188 }
2189 break;
2190
Lev Walkina9532f42006-09-17 04:52:50 +00002191 case 45:
2192#line 650 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002193 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002194 yyval.a_xports = asn1p_xports_new();
2195 checkmem(yyval.a_xports);
2196 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002197 }
2198 break;
2199
Lev Walkina9532f42006-09-17 04:52:50 +00002200 case 46:
2201#line 655 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002202 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002203 yyval.a_xports = yyvsp[-2].a_xports;
2204 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002205 }
2206 break;
2207
Lev Walkina9532f42006-09-17 04:52:50 +00002208 case 47:
2209#line 662 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002210 {
Lev Walkina9532f42006-09-17 04:52:50 +00002211 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002212 checkmem(yyval.a_expr);
2213 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2214 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin418298d2006-07-13 08:24:20 +00002215 }
2216 break;
2217
Lev Walkina9532f42006-09-17 04:52:50 +00002218 case 48:
2219#line 668 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002220 { /* Completely equivalent to above */
Lev Walkina9532f42006-09-17 04:52:50 +00002221 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002222 checkmem(yyval.a_expr);
2223 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2224 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin418298d2006-07-13 08:24:20 +00002225 }
2226 break;
2227
Lev Walkina9532f42006-09-17 04:52:50 +00002228 case 49:
2229#line 674 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002230 {
Lev Walkina9532f42006-09-17 04:52:50 +00002231 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002232 checkmem(yyval.a_expr);
2233 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2234 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin418298d2006-07-13 08:24:20 +00002235 }
2236 break;
2237
Lev Walkina9532f42006-09-17 04:52:50 +00002238 case 50:
2239#line 684 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002240 { yyval.a_module = 0; }
2241 break;
2242
Lev Walkina9532f42006-09-17 04:52:50 +00002243 case 51:
2244#line 685 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002245 {
2246 yyval.a_module = asn1p_module_new();
2247 checkmem(yyval.a_module);
2248 if(yyvsp[0].a_xports) {
2249 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
2250 } else {
2251 /* "EXPORTS ALL;" */
2252 }
2253 }
2254 break;
2255
Lev Walkina9532f42006-09-17 04:52:50 +00002256 case 52:
2257#line 697 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002258 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002259 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin418298d2006-07-13 08:24:20 +00002260 }
2261 break;
2262
Lev Walkina9532f42006-09-17 04:52:50 +00002263 case 53:
2264#line 700 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002265 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002266 yyval.a_xports = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002267 }
2268 break;
2269
Lev Walkina9532f42006-09-17 04:52:50 +00002270 case 54:
2271#line 703 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002272 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002273 /* Empty EXPORTS clause effectively prohibits export. */
Lev Walkina00d6b32006-03-21 03:40:38 +00002274 yyval.a_xports = asn1p_xports_new();
2275 checkmem(yyval.a_xports);
Lev Walkin418298d2006-07-13 08:24:20 +00002276 }
2277 break;
2278
Lev Walkina9532f42006-09-17 04:52:50 +00002279 case 55:
2280#line 711 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002281 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002282 yyval.a_xports = asn1p_xports_new();
2283 assert(yyval.a_xports);
2284 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002285 }
2286 break;
2287
Lev Walkina9532f42006-09-17 04:52:50 +00002288 case 56:
2289#line 716 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002290 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002291 yyval.a_xports = yyvsp[-2].a_xports;
2292 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002293 }
2294 break;
2295
Lev Walkina9532f42006-09-17 04:52:50 +00002296 case 57:
2297#line 723 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002298 {
Lev Walkina9532f42006-09-17 04:52:50 +00002299 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002300 checkmem(yyval.a_expr);
2301 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2302 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin418298d2006-07-13 08:24:20 +00002303 }
2304 break;
2305
Lev Walkina9532f42006-09-17 04:52:50 +00002306 case 58:
2307#line 729 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002308 {
Lev Walkina9532f42006-09-17 04:52:50 +00002309 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002310 checkmem(yyval.a_expr);
2311 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2312 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin418298d2006-07-13 08:24:20 +00002313 }
2314 break;
2315
Lev Walkina9532f42006-09-17 04:52:50 +00002316 case 59:
2317#line 735 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002318 {
Lev Walkina9532f42006-09-17 04:52:50 +00002319 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002320 checkmem(yyval.a_expr);
2321 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2322 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin418298d2006-07-13 08:24:20 +00002323 }
2324 break;
2325
Lev Walkina9532f42006-09-17 04:52:50 +00002326 case 60:
2327#line 744 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002328 { yyval.a_constr = yyvsp[-1].a_constr; }
2329 break;
2330
Lev Walkina9532f42006-09-17 04:52:50 +00002331 case 61:
2332#line 747 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002333 {
Lev Walkin557f27d2006-03-21 07:46:48 +00002334 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkina00d6b32006-03-21 03:40:38 +00002335 assert(yyval.a_expr->Identifier == 0);
Lev Walkin557f27d2006-03-21 07:46:48 +00002336 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
Lev Walkina00d6b32006-03-21 03:40:38 +00002337 yyval.a_expr->meta_type = AMT_VALUESET;
Lev Walkin557f27d2006-03-21 07:46:48 +00002338 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00002339 }
2340 break;
2341
Lev Walkina9532f42006-09-17 04:52:50 +00002342 case 62:
2343#line 757 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002344 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00002345 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002346 }
2347 break;
2348
Lev Walkina9532f42006-09-17 04:52:50 +00002349 case 63:
2350#line 770 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002351 {
Lev Walkina9532f42006-09-17 04:52:50 +00002352 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002353 checkmem(yyval.a_expr);
2354 yyval.a_expr->reference = yyvsp[0].a_ref;
2355 yyval.a_expr->expr_type = A1TC_REFERENCE;
2356 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin418298d2006-07-13 08:24:20 +00002357 }
2358 break;
2359
Lev Walkina9532f42006-09-17 04:52:50 +00002360 case 64:
2361#line 780 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002362 {
Lev Walkina9532f42006-09-17 04:52:50 +00002363 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002364 checkmem(yyval.a_expr);
Lev Walkin0c0bca62006-03-21 04:48:15 +00002365 yyval.a_expr->reference = yyvsp[-3].a_ref;
2366 yyval.a_expr->rhs_pspecs = yyvsp[-1].a_expr;
2367 yyval.a_expr->expr_type = A1TC_REFERENCE;
2368 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin418298d2006-07-13 08:24:20 +00002369 }
2370 break;
2371
Lev Walkina9532f42006-09-17 04:52:50 +00002372 case 65:
2373#line 800 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002374 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002375 yyval.a_expr = yyvsp[0].a_expr;
2376 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2377 assert(yyval.a_expr->expr_type);
2378 assert(yyval.a_expr->meta_type);
Lev Walkin418298d2006-07-13 08:24:20 +00002379 }
2380 break;
2381
Lev Walkina9532f42006-09-17 04:52:50 +00002382 case 66:
2383#line 806 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002384 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002385 yyval.a_expr = yyvsp[0].a_expr;
2386 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2387 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2388 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin418298d2006-07-13 08:24:20 +00002389 }
2390 break;
2391
Lev Walkin866bd7f2006-09-14 10:35:20 +00002392 case 67:
Lev Walkina9532f42006-09-17 04:52:50 +00002393#line 822 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002394 {
2395 yyval.a_expr = yyvsp[0].a_expr;
2396 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2397 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
2398 }
2399 break;
2400
2401 case 68:
Lev Walkina9532f42006-09-17 04:52:50 +00002402#line 828 "asn1p_y.y"
2403 {
2404 yyval.a_expr = yyvsp[0].a_expr;
2405 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2406 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
2407 }
2408 break;
2409
2410 case 69:
2411#line 836 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002412 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002413 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002414 yyval.a_plist = asn1p_paramlist_new(yylineno);
2415 checkmem(yyval.a_plist);
2416 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 +00002417 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002418 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2419 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin418298d2006-07-13 08:24:20 +00002420 }
2421 break;
2422
Lev Walkina9532f42006-09-17 04:52:50 +00002423 case 70:
2424#line 845 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002425 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002426 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002427 yyval.a_plist = yyvsp[-2].a_plist;
2428 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 +00002429 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002430 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2431 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin418298d2006-07-13 08:24:20 +00002432 }
2433 break;
2434
Lev Walkina9532f42006-09-17 04:52:50 +00002435 case 71:
2436#line 856 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002437 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002438 yyval.a_parg.governor = NULL;
2439 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002440 }
2441 break;
2442
Lev Walkin418298d2006-07-13 08:24:20 +00002443 case 72:
Lev Walkina9532f42006-09-17 04:52:50 +00002444#line 860 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002445 {
2446 int ret;
2447 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2448 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
2449 checkmem(ret == 0);
2450 yyval.a_parg.argument = yyvsp[0].tv_str;
2451 }
2452 break;
2453
2454 case 73:
Lev Walkina9532f42006-09-17 04:52:50 +00002455#line 867 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002456 {
2457 int ret;
2458 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkina9532f42006-09-17 04:52:50 +00002459 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
Lev Walkin866bd7f2006-09-14 10:35:20 +00002460 checkmem(ret == 0);
2461 yyval.a_parg.argument = yyvsp[0].tv_str;
2462 }
2463 break;
2464
2465 case 74:
Lev Walkina9532f42006-09-17 04:52:50 +00002466#line 874 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002467 {
2468 int ret;
2469 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2470 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2471 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2472 checkmem(ret == 0);
2473 yyval.a_parg.argument = yyvsp[0].tv_str;
2474 }
2475 break;
2476
2477 case 75:
2478#line 882 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002479 {
Lev Walkina9532f42006-09-17 04:52:50 +00002480 int ret;
2481 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2482 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2483 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2484 checkmem(ret == 0);
2485 yyval.a_parg.argument = yyvsp[0].tv_str;
2486 }
2487 break;
2488
2489 case 76:
2490#line 893 "asn1p_y.y"
2491 {
2492 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002493 checkmem(yyval.a_expr);
2494 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002495 }
2496 break;
2497
Lev Walkina9532f42006-09-17 04:52:50 +00002498 case 77:
2499#line 898 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002500 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002501 yyval.a_expr = yyvsp[-2].a_expr;
2502 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002503 }
2504 break;
2505
Lev Walkina9532f42006-09-17 04:52:50 +00002506 case 78:
2507#line 905 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002508 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002509 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002510 }
2511 break;
2512
Lev Walkina9532f42006-09-17 04:52:50 +00002513 case 79:
2514#line 908 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002515 {
Lev Walkina9532f42006-09-17 04:52:50 +00002516 yyval.a_expr = NEW_EXPR();
Lev Walkin0c0bca62006-03-21 04:48:15 +00002517 checkmem(yyval.a_expr);
2518 yyval.a_expr->Identifier = "?";
2519 yyval.a_expr->expr_type = A1TC_REFERENCE;
2520 yyval.a_expr->meta_type = AMT_VALUE;
2521 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00002522 }
2523 break;
2524
Lev Walkina9532f42006-09-17 04:52:50 +00002525 case 80:
2526#line 916 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002527 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002528 asn1p_ref_t *ref;
Lev Walkina9532f42006-09-17 04:52:50 +00002529 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002530 checkmem(yyval.a_expr);
2531 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2532 yyval.a_expr->expr_type = A1TC_REFERENCE;
2533 yyval.a_expr->meta_type = AMT_VALUE;
2534 ref = asn1p_ref_new(yylineno);
2535 asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2536 yyval.a_expr->value = asn1p_value_fromref(ref, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00002537 }
2538 break;
2539
Lev Walkina9532f42006-09-17 04:52:50 +00002540 case 81:
2541#line 927 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002542 {
Lev Walkina9532f42006-09-17 04:52:50 +00002543 yyval.a_expr = NEW_EXPR();
Lev Walkin5045dfa2006-03-21 09:41:28 +00002544 yyval.a_expr->expr_type = A1TC_VALUESET;
2545 yyval.a_expr->meta_type = AMT_VALUESET;
2546 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00002547 }
2548 break;
2549
Lev Walkin866bd7f2006-09-14 10:35:20 +00002550 case 82:
Lev Walkina9532f42006-09-17 04:52:50 +00002551#line 950 "asn1p_y.y"
2552 { yyval.a_expr = NEW_EXPR(); }
Lev Walkin418298d2006-07-13 08:24:20 +00002553 break;
2554
Lev Walkin866bd7f2006-09-14 10:35:20 +00002555 case 83:
Lev Walkina9532f42006-09-17 04:52:50 +00002556#line 951 "asn1p_y.y"
2557 { yyval.a_expr = yyvsp[0].a_expr; }
2558 break;
2559
2560 case 84:
2561#line 954 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002562 {
Lev Walkina9532f42006-09-17 04:52:50 +00002563 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002564 checkmem(yyval.a_expr);
2565 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002566 }
2567 break;
2568
Lev Walkina9532f42006-09-17 04:52:50 +00002569 case 85:
2570#line 959 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002571 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002572 yyval.a_expr = yyvsp[-2].a_expr;
2573 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002574 }
2575 break;
2576
Lev Walkina9532f42006-09-17 04:52:50 +00002577 case 86:
2578#line 966 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002579 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002580 yyval.a_expr = yyvsp[-1].a_expr;
2581 assert(yyval.a_expr->Identifier == 0);
2582 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2583 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2584 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002585 }
2586 break;
2587
Lev Walkina9532f42006-09-17 04:52:50 +00002588 case 87:
2589#line 973 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002590 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002591 yyval.a_expr = yyvsp[-1].a_expr;
2592 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2593 yyval.a_expr->marker = yyvsp[0].a_marker;
2594 _fixup_anonymous_identifier(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002595 }
2596 break;
2597
Lev Walkina9532f42006-09-17 04:52:50 +00002598 case 88:
2599#line 979 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002600 {
Lev Walkina9532f42006-09-17 04:52:50 +00002601 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002602 checkmem(yyval.a_expr);
2603 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2604 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
2605 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002606 }
2607 break;
2608
Lev Walkina9532f42006-09-17 04:52:50 +00002609 case 89:
2610#line 986 "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;
Lev Walkin418298d2006-07-13 08:24:20 +00002613 }
2614 break;
2615
Lev Walkina9532f42006-09-17 04:52:50 +00002616 case 90:
2617#line 992 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002618 {
Lev Walkina9532f42006-09-17 04:52:50 +00002619 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002620 checkmem(yyval.a_expr);
2621 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002622 }
2623 break;
2624
Lev Walkina9532f42006-09-17 04:52:50 +00002625 case 91:
2626#line 997 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002627 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002628 yyval.a_expr = yyvsp[-2].a_expr;
2629 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002630 }
2631 break;
2632
Lev Walkina9532f42006-09-17 04:52:50 +00002633 case 92:
2634#line 1004 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002635 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002636 yyval.a_expr = yyvsp[0].a_expr;
2637 assert(yyval.a_expr->Identifier == 0);
2638 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002639 }
2640 break;
2641
Lev Walkina9532f42006-09-17 04:52:50 +00002642 case 93:
2643#line 1009 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002644 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002645 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002646 }
2647 break;
2648
Lev Walkina9532f42006-09-17 04:52:50 +00002649 case 94:
2650#line 1012 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002651 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002652 yyval.a_expr = yyvsp[0].a_expr;
2653 _fixup_anonymous_identifier(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002654 }
2655 break;
2656
Lev Walkina9532f42006-09-17 04:52:50 +00002657 case 95:
2658#line 1019 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002659 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002660 yyval.a_expr = yyvsp[-2].a_expr;
2661 checkmem(yyval.a_expr);
2662 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2663 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2664 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin418298d2006-07-13 08:24:20 +00002665 }
2666 break;
2667
Lev Walkina9532f42006-09-17 04:52:50 +00002668 case 96:
2669#line 1029 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002670 { yyval.a_int = 0; }
2671 break;
2672
Lev Walkina9532f42006-09-17 04:52:50 +00002673 case 97:
2674#line 1030 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002675 { yyval.a_int = 1; }
2676 break;
2677
Lev Walkina9532f42006-09-17 04:52:50 +00002678 case 98:
2679#line 1034 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002680 {
Lev Walkina9532f42006-09-17 04:52:50 +00002681 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002682 checkmem(yyval.a_expr);
2683 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2684 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2685 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002686 }
2687 break;
2688
Lev Walkina9532f42006-09-17 04:52:50 +00002689 case 99:
2690#line 1041 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002691 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002692 yyval.a_expr = yyvsp[-2].a_expr;
2693 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002694 }
2695 break;
2696
Lev Walkina9532f42006-09-17 04:52:50 +00002697 case 100:
2698#line 1051 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002699 {
Lev Walkina9532f42006-09-17 04:52:50 +00002700 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002701 checkmem(yyval.a_expr);
2702 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2703 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2704 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2705 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002706 }
2707 break;
2708
Lev Walkina9532f42006-09-17 04:52:50 +00002709 case 101:
2710#line 1061 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002711 {
Lev Walkina9532f42006-09-17 04:52:50 +00002712 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002713 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2714 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2715 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2716 yyval.a_expr->unique = yyvsp[-1].a_int;
2717 yyval.a_expr->marker = yyvsp[0].a_marker;
2718 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002719 }
2720 break;
2721
Lev Walkina9532f42006-09-17 04:52:50 +00002722 case 102:
2723#line 1072 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002724 {
Lev Walkina9532f42006-09-17 04:52:50 +00002725 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002726 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2727 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2728 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2729 yyval.a_expr->reference = yyvsp[-1].a_ref;
2730 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002731 }
2732 break;
2733
Lev Walkina9532f42006-09-17 04:52:50 +00002734 case 103:
2735#line 1082 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002736 {
Lev Walkina9532f42006-09-17 04:52:50 +00002737 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002738 checkmem(yyval.a_expr);
2739 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2740 yyval.a_expr->reference = yyvsp[-1].a_ref;
2741 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2742 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2743 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002744 }
2745 break;
2746
Lev Walkina9532f42006-09-17 04:52:50 +00002747 case 104:
2748#line 1093 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002749 {
Lev Walkina9532f42006-09-17 04:52:50 +00002750 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002751 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2752 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2753 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2754 yyval.a_expr->reference = yyvsp[-1].a_ref;
2755 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002756 }
2757 break;
2758
Lev Walkina9532f42006-09-17 04:52:50 +00002759 case 105:
2760#line 1103 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002761 {
Lev Walkina9532f42006-09-17 04:52:50 +00002762 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002763 checkmem(yyval.a_expr);
2764 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2765 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2766 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2767 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
2768 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002769 }
2770 break;
2771
Lev Walkina9532f42006-09-17 04:52:50 +00002772 case 106:
2773#line 1114 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002774 {
Lev Walkina9532f42006-09-17 04:52:50 +00002775 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002776 checkmem(yyval.a_expr);
2777 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2778 yyval.a_expr->reference = yyvsp[-1].a_ref;
2779 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2780 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2781 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002782 }
2783 break;
2784
Lev Walkina9532f42006-09-17 04:52:50 +00002785 case 107:
2786#line 1126 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002787 { yyval.a_wsynt = 0; }
2788 break;
2789
Lev Walkina9532f42006-09-17 04:52:50 +00002790 case 108:
2791#line 1127 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002792 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002793 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin418298d2006-07-13 08:24:20 +00002794 }
2795 break;
2796
Lev Walkina9532f42006-09-17 04:52:50 +00002797 case 109:
2798#line 1134 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002799 { asn1p_lexer_hack_enable_with_syntax(); }
2800 break;
2801
Lev Walkina9532f42006-09-17 04:52:50 +00002802 case 110:
2803#line 1136 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002804 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002805 yyval.a_wsynt = yyvsp[-1].a_wsynt;
Lev Walkin418298d2006-07-13 08:24:20 +00002806 }
2807 break;
2808
Lev Walkina9532f42006-09-17 04:52:50 +00002809 case 111:
2810#line 1142 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002811 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002812 yyval.a_wsynt = asn1p_wsyntx_new();
2813 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002814 }
2815 break;
2816
Lev Walkina9532f42006-09-17 04:52:50 +00002817 case 112:
2818#line 1146 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002819 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002820 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2821 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002822 }
2823 break;
2824
Lev Walkina9532f42006-09-17 04:52:50 +00002825 case 113:
2826#line 1153 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002827 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002828 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_opaque.buf, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002829 yyval.a_wchunk->type = WC_WHITESPACE;
Lev Walkin418298d2006-07-13 08:24:20 +00002830 }
2831 break;
2832
Lev Walkina9532f42006-09-17 04:52:50 +00002833 case 114:
2834#line 1157 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002835 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002836 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_str, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00002837 }
2838 break;
2839
Lev Walkina9532f42006-09-17 04:52:50 +00002840 case 115:
2841#line 1160 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002842 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002843 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].a_refcomp.name, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002844 yyval.a_wchunk->type = WC_FIELD;
Lev Walkin418298d2006-07-13 08:24:20 +00002845 }
2846 break;
2847
Lev Walkina9532f42006-09-17 04:52:50 +00002848 case 116:
2849#line 1164 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002850 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002851 yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
Lev Walkin418298d2006-07-13 08:24:20 +00002852 }
2853 break;
2854
Lev Walkin866bd7f2006-09-14 10:35:20 +00002855 case 117:
Lev Walkina9532f42006-09-17 04:52:50 +00002856#line 1170 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002857 {
Lev Walkina9532f42006-09-17 04:52:50 +00002858 yyval.a_expr = NEW_EXPR();
Lev Walkin866bd7f2006-09-14 10:35:20 +00002859 checkmem(yyval.a_expr);
2860 yyval.a_expr->Identifier = strdup("...");
2861 checkmem(yyval.a_expr->Identifier);
Lev Walkin866bd7f2006-09-14 10:35:20 +00002862 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2863 yyval.a_expr->meta_type = AMT_TYPE;
2864 }
2865 break;
2866
2867 case 118:
Lev Walkina9532f42006-09-17 04:52:50 +00002868#line 1178 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002869 {
Lev Walkina9532f42006-09-17 04:52:50 +00002870 yyval.a_expr = NEW_EXPR();
2871 checkmem(yyval.a_expr);
2872 yyval.a_expr->Identifier = strdup("...");
2873 checkmem(yyval.a_expr->Identifier);
2874 yyval.a_expr->value = yyvsp[0].a_value;
2875 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2876 yyval.a_expr->meta_type = AMT_TYPE;
2877 }
2878 break;
2879
2880 case 119:
2881#line 1187 "asn1p_y.y"
2882 {
2883 yyval.a_expr = NEW_EXPR();
Lev Walkin866bd7f2006-09-14 10:35:20 +00002884 checkmem(yyval.a_expr);
2885 yyval.a_expr->Identifier = strdup("...");
2886 yyval.a_expr->value = yyvsp[0].a_value;
2887 checkmem(yyval.a_expr->Identifier);
2888 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2889 yyval.a_expr->meta_type = AMT_TYPE;
2890 }
2891 break;
2892
Lev Walkina9532f42006-09-17 04:52:50 +00002893 case 120:
2894#line 1199 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002895 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002896 yyval.a_expr = yyvsp[-1].a_expr;
2897 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002898 /*
2899 * Outer constraint for SEQUENCE OF and SET OF applies
2900 * to the inner type.
2901 */
Lev Walkina00d6b32006-03-21 03:40:38 +00002902 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2903 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2904 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2905 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002906 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002907 if(yyval.a_expr->constraints) {
2908 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002909 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002910 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002911 }
2912 }
Lev Walkin418298d2006-07-13 08:24:20 +00002913 }
2914 break;
2915
Lev Walkina9532f42006-09-17 04:52:50 +00002916 case 121:
2917#line 1221 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002918 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002919 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
Lev Walkinfb872bd2006-03-18 06:53:11 +00002920 asn1p_as_pointer = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002921 }
2922 break;
2923
Lev Walkina9532f42006-09-17 04:52:50 +00002924 case 122:
2925#line 1228 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002926 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002927 yyval.a_expr = yyvsp[0].a_expr;
2928 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
Lev Walkinfb872bd2006-03-18 06:53:11 +00002929
Lev Walkina00d6b32006-03-21 03:40:38 +00002930 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2931 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
Lev Walkinef625402005-09-05 05:17:57 +00002932 fprintf(stderr,
2933 "INFO: Directive <ASN1C:RepresentAsPointer> "
2934 "applied to %s at line %d\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00002935 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2936 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
Lev Walkinef625402005-09-05 05:17:57 +00002937 : "member",
Lev Walkina00d6b32006-03-21 03:40:38 +00002938 yyval.a_expr->_lineno
Lev Walkinef625402005-09-05 05:17:57 +00002939 );
2940 }
Lev Walkin418298d2006-07-13 08:24:20 +00002941 }
2942 break;
2943
Lev Walkina9532f42006-09-17 04:52:50 +00002944 case 123:
2945#line 1247 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002946 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002947 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002948 }
2949 break;
2950
Lev Walkina9532f42006-09-17 04:52:50 +00002951 case 124:
2952#line 1250 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002953 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002954 yyval.a_expr = yyvsp[-1].a_expr;
2955 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2956 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2957 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002958 }
2959 break;
2960
Lev Walkina9532f42006-09-17 04:52:50 +00002961 case 125:
2962#line 1256 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002963 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002964 yyval.a_expr = yyvsp[-1].a_expr;
2965 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2966 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2967 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002968 }
2969 break;
2970
Lev Walkina9532f42006-09-17 04:52:50 +00002971 case 126:
2972#line 1262 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002973 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002974 yyval.a_expr = yyvsp[-1].a_expr;
2975 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2976 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2977 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002978 }
2979 break;
2980
Lev Walkina9532f42006-09-17 04:52:50 +00002981 case 127:
2982#line 1268 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002983 {
Lev Walkina9532f42006-09-17 04:52:50 +00002984 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002985 checkmem(yyval.a_expr);
2986 yyval.a_expr->constraints = yyvsp[-4].a_constr;
2987 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2988 yyval.a_expr->meta_type = AMT_TYPE;
2989 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
2990 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
2991 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002992 }
2993 break;
2994
Lev Walkina9532f42006-09-17 04:52:50 +00002995 case 128:
2996#line 1278 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002997 {
Lev Walkina9532f42006-09-17 04:52:50 +00002998 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002999 checkmem(yyval.a_expr);
3000 yyval.a_expr->constraints = yyvsp[-4].a_constr;
3001 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
3002 yyval.a_expr->meta_type = AMT_TYPE;
3003 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
3004 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
3005 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00003006 }
3007 break;
3008
Lev Walkina9532f42006-09-17 04:52:50 +00003009 case 129:
3010#line 1288 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003011 {
Lev Walkina9532f42006-09-17 04:52:50 +00003012 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003013 checkmem(yyval.a_expr);
3014 yyval.a_expr->expr_type = ASN_TYPE_ANY;
3015 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003016 }
3017 break;
3018
Lev Walkina9532f42006-09-17 04:52:50 +00003019 case 130:
3020#line 1294 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003021 {
Lev Walkin070a52d2004-08-22 03:19:54 +00003022 int ret;
Lev Walkina9532f42006-09-17 04:52:50 +00003023 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003024 checkmem(yyval.a_expr);
3025 yyval.a_expr->reference = asn1p_ref_new(yylineno);
3026 ret = asn1p_ref_add_component(yyval.a_expr->reference,
3027 yyvsp[0].tv_str, RLT_lowercase);
Lev Walkin070a52d2004-08-22 03:19:54 +00003028 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003029 yyval.a_expr->expr_type = ASN_TYPE_ANY;
3030 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003031 }
3032 break;
3033
Lev Walkina9532f42006-09-17 04:52:50 +00003034 case 131:
3035#line 1305 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003036 {
Lev Walkina9532f42006-09-17 04:52:50 +00003037 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003038 checkmem(yyval.a_expr);
3039 yyval.a_expr->reference = yyvsp[0].a_ref;
3040 yyval.a_expr->expr_type = A1TC_INSTANCE;
3041 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003042 }
3043 break;
3044
Lev Walkina9532f42006-09-17 04:52:50 +00003045 case 132:
3046#line 1320 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003047 {
Lev Walkinf15320b2004-06-03 03:38:44 +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[0].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00003052 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003053 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003054 }
3055 break;
3056
Lev Walkin866bd7f2006-09-14 10:35:20 +00003057 case 133:
Lev Walkina9532f42006-09-17 04:52:50 +00003058#line 1328 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003059 {
Lev Walkin9d542d22006-03-14 16:31:37 +00003060 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003061 yyval.a_ref = asn1p_ref_new(yylineno);
3062 checkmem(yyval.a_ref);
3063 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00003064 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003065 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00003066 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003067 free(yyvsp[-2].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003068 }
3069 break;
3070
Lev Walkin866bd7f2006-09-14 10:35:20 +00003071 case 134:
Lev Walkina9532f42006-09-17 04:52:50 +00003072#line 1338 "asn1p_y.y"
3073 {
3074 int ret;
3075 yyval.a_ref = asn1p_ref_new(yylineno);
3076 checkmem(yyval.a_ref);
3077 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
3078 checkmem(ret == 0);
3079 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3080 checkmem(ret == 0);
3081 free(yyvsp[-2].tv_str);
3082 }
3083 break;
3084
3085 case 135:
3086#line 1348 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003087 {
Lev Walkin9d542d22006-03-14 16:31:37 +00003088 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003089 yyval.a_ref = asn1p_ref_new(yylineno);
3090 checkmem(yyval.a_ref);
3091 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00003092 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003093 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkin9d542d22006-03-14 16:31:37 +00003094 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003095 free(yyvsp[-2].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003096 }
3097 break;
3098
Lev Walkina9532f42006-09-17 04:52:50 +00003099 case 136:
3100#line 1358 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003101 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003102 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003103 yyval.a_ref = asn1p_ref_new(yylineno);
3104 checkmem(yyval.a_ref);
3105 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
3106 free(yyvsp[0].tv_str);
Lev Walkin9c974182004-09-15 11:59:51 +00003107 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003108 }
3109 break;
3110
Lev Walkina9532f42006-09-17 04:52:50 +00003111 case 137:
3112#line 1366 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003113 {
Lev Walkin9c974182004-09-15 11:59:51 +00003114 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003115 yyval.a_ref = yyvsp[0].a_ref;
3116 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
3117 free(yyvsp[-2].tv_str);
Lev Walkinf15320b2004-06-03 03:38:44 +00003118 checkmem(ret == 0);
3119 /*
3120 * Move the last element infront.
3121 */
3122 {
3123 struct asn1p_ref_component_s tmp_comp;
Lev Walkina00d6b32006-03-21 03:40:38 +00003124 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
3125 memmove(&yyval.a_ref->components[1],
3126 &yyval.a_ref->components[0],
3127 sizeof(yyval.a_ref->components[0])
3128 * (yyval.a_ref->comp_count - 1));
3129 yyval.a_ref->components[0] = tmp_comp;
Lev Walkinf15320b2004-06-03 03:38:44 +00003130 }
Lev Walkin418298d2006-07-13 08:24:20 +00003131 }
3132 break;
3133
Lev Walkina9532f42006-09-17 04:52:50 +00003134 case 138:
3135#line 1388 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003136 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003137 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003138 yyval.a_ref = asn1p_ref_new(yylineno);
3139 checkmem(yyval.a_ref);
3140 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
3141 free(yyvsp[0].a_refcomp.name);
Lev Walkinf15320b2004-06-03 03:38:44 +00003142 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003143 }
3144 break;
3145
Lev Walkina9532f42006-09-17 04:52:50 +00003146 case 139:
3147#line 1396 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003148 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003149 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003150 yyval.a_ref = yyvsp[-2].a_ref;
3151 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
3152 free(yyvsp[0].a_refcomp.name);
Lev Walkinf15320b2004-06-03 03:38:44 +00003153 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003154 }
3155 break;
3156
Lev Walkina9532f42006-09-17 04:52:50 +00003157 case 141:
3158#line 1409 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003159 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003160 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
3161 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00003162 }
3163 break;
3164
Lev Walkina9532f42006-09-17 04:52:50 +00003165 case 142:
3166#line 1414 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003167 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003168 yyval.a_refcomp.lex_type = RLT_Amplowercase;
3169 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00003170 }
3171 break;
3172
Lev Walkina9532f42006-09-17 04:52:50 +00003173 case 143:
3174#line 1423 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003175 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003176 yyval.a_ref = asn1p_ref_new(yylineno);
3177 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003178 }
3179 break;
3180
Lev Walkina9532f42006-09-17 04:52:50 +00003181 case 144:
3182#line 1427 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003183 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003184 yyval.a_ref = yyval.a_ref;
3185 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003186 }
3187 break;
3188
Lev Walkina9532f42006-09-17 04:52:50 +00003189 case 145:
3190#line 1431 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003191 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003192 yyval.a_ref = yyval.a_ref;
3193 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003194 }
3195 break;
3196
Lev Walkina9532f42006-09-17 04:52:50 +00003197 case 146:
3198#line 1438 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003199 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003200 yyval.a_ref = asn1p_ref_new(yylineno);
3201 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
Lev Walkin418298d2006-07-13 08:24:20 +00003202 }
3203 break;
3204
Lev Walkina9532f42006-09-17 04:52:50 +00003205 case 147:
3206#line 1458 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003207 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003208 yyval.a_expr = yyvsp[-2].a_expr;
3209 assert(yyval.a_expr->Identifier == NULL);
3210 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3211 yyval.a_expr->meta_type = AMT_VALUE;
3212 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003213 }
3214 break;
3215
Lev Walkina9532f42006-09-17 04:52:50 +00003216 case 150:
3217#line 1470 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003218 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003219 yyval.a_value = asn1p_value_fromint(0);
3220 checkmem(yyval.a_value);
3221 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
3222 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
3223 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003224 }
3225 break;
3226
Lev Walkina9532f42006-09-17 04:52:50 +00003227 case 151:
3228#line 1477 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003229 { asn1p_lexer_hack_push_opaque_state(); }
3230 break;
3231
Lev Walkina9532f42006-09-17 04:52:50 +00003232 case 152:
3233#line 1477 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003234 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003235 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3236 checkmem(yyval.a_value);
3237 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin418298d2006-07-13 08:24:20 +00003238 }
3239 break;
3240
Lev Walkina9532f42006-09-17 04:52:50 +00003241 case 153:
3242#line 1482 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003243 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003244 yyval.a_value = asn1p_value_fromint(0);
3245 checkmem(yyval.a_value);
3246 yyval.a_value->type = ATV_NULL;
Lev Walkin418298d2006-07-13 08:24:20 +00003247 }
3248 break;
3249
Lev Walkina9532f42006-09-17 04:52:50 +00003250 case 154:
3251#line 1490 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003252 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003253 yyval.a_value = asn1p_value_fromint(0);
3254 checkmem(yyval.a_value);
3255 yyval.a_value->type = ATV_FALSE;
Lev Walkin418298d2006-07-13 08:24:20 +00003256 }
3257 break;
3258
Lev Walkina9532f42006-09-17 04:52:50 +00003259 case 155:
3260#line 1495 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003261 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003262 yyval.a_value = asn1p_value_fromint(0);
3263 checkmem(yyval.a_value);
3264 yyval.a_value->type = ATV_TRUE;
Lev Walkin418298d2006-07-13 08:24:20 +00003265 }
3266 break;
3267
Lev Walkina9532f42006-09-17 04:52:50 +00003268 case 156:
3269#line 1500 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003270 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003271 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
3272 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003273 }
3274 break;
3275
Lev Walkina9532f42006-09-17 04:52:50 +00003276 case 157:
3277#line 1504 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003278 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003279 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
3280 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003281 }
3282 break;
3283
Lev Walkina9532f42006-09-17 04:52:50 +00003284 case 158:
3285#line 1508 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003286 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003287 yyval.a_value = yyval.a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003288 }
3289 break;
3290
Lev Walkina9532f42006-09-17 04:52:50 +00003291 case 159:
3292#line 1511 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003293 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00003294 yyval.a_value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003295 }
3296 break;
3297
Lev Walkina9532f42006-09-17 04:52:50 +00003298 case 160:
3299#line 1517 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003300 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003301 asn1p_ref_t *ref;
3302 int ret;
3303 ref = asn1p_ref_new(yylineno);
3304 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003305 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003306 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003307 yyval.a_value = asn1p_value_fromref(ref, 0);
3308 checkmem(yyval.a_value);
3309 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003310 }
3311 break;
3312
Lev Walkina9532f42006-09-17 04:52:50 +00003313 case 161:
3314#line 1528 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003315 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003316 asn1p_ref_t *ref;
3317 int ret;
3318 ref = asn1p_ref_new(yylineno);
3319 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003320 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00003321 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003322 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003323 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003324 yyval.a_value = asn1p_value_fromref(ref, 0);
3325 checkmem(yyval.a_value);
3326 free(yyvsp[-2].tv_str);
3327 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003328 }
3329 break;
3330
Lev Walkina9532f42006-09-17 04:52:50 +00003331 case 162:
3332#line 1546 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003333 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003334 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3335 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003336 }
3337 break;
3338
Lev Walkina9532f42006-09-17 04:52:50 +00003339 case 163:
3340#line 1550 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003341 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003342 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3343 checkmem(yyval.a_value);
3344 yyval.a_value->type = ATV_TUPLE;
Lev Walkin418298d2006-07-13 08:24:20 +00003345 }
3346 break;
3347
Lev Walkina9532f42006-09-17 04:52:50 +00003348 case 164:
3349#line 1555 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003350 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003351 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3352 checkmem(yyval.a_value);
3353 yyval.a_value->type = ATV_QUADRUPLE;
Lev Walkin418298d2006-07-13 08:24:20 +00003354 }
3355 break;
3356
Lev Walkina9532f42006-09-17 04:52:50 +00003357 case 165:
3358#line 1589 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003359 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003360 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
3361 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
3362 checkmem(yyval.tv_opaque.buf);
3363 yyval.tv_opaque.buf[0] = '{';
3364 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
3365 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
3366 free(yyvsp[0].tv_opaque.buf);
Lev Walkin418298d2006-07-13 08:24:20 +00003367 }
3368 break;
3369
Lev Walkina9532f42006-09-17 04:52:50 +00003370 case 166:
3371#line 1598 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003372 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003373 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
Lev Walkinf15320b2004-06-03 03:38:44 +00003374 char *p = malloc(newsize + 1);
3375 checkmem(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00003376 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
3377 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00003378 p[newsize] = '\0';
Lev Walkina00d6b32006-03-21 03:40:38 +00003379 free(yyvsp[-1].tv_opaque.buf);
3380 free(yyvsp[0].tv_opaque.buf);
3381 yyval.tv_opaque.buf = p;
3382 yyval.tv_opaque.len = newsize;
Lev Walkin418298d2006-07-13 08:24:20 +00003383 }
3384 break;
3385
Lev Walkina9532f42006-09-17 04:52:50 +00003386 case 167:
3387#line 1613 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003388 { yyval.a_type = ASN_BASIC_BOOLEAN; }
3389 break;
3390
Lev Walkina9532f42006-09-17 04:52:50 +00003391 case 168:
3392#line 1614 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003393 { yyval.a_type = ASN_BASIC_NULL; }
3394 break;
3395
Lev Walkina9532f42006-09-17 04:52:50 +00003396 case 169:
3397#line 1615 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003398 { yyval.a_type = ASN_BASIC_REAL; }
3399 break;
3400
Lev Walkin418298d2006-07-13 08:24:20 +00003401 case 170:
Lev Walkina9532f42006-09-17 04:52:50 +00003402#line 1616 "asn1p_y.y"
3403 { yyval.a_type = yyvsp[0].a_type; }
Lev Walkin418298d2006-07-13 08:24:20 +00003404 break;
3405
3406 case 171:
Lev Walkina9532f42006-09-17 04:52:50 +00003407#line 1617 "asn1p_y.y"
3408 { yyval.a_type = ASN_BASIC_OCTET_STRING; }
Lev Walkin418298d2006-07-13 08:24:20 +00003409 break;
3410
3411 case 172:
Lev Walkina9532f42006-09-17 04:52:50 +00003412#line 1618 "asn1p_y.y"
3413 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
Lev Walkin418298d2006-07-13 08:24:20 +00003414 break;
3415
3416 case 173:
Lev Walkina9532f42006-09-17 04:52:50 +00003417#line 1619 "asn1p_y.y"
3418 { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
Lev Walkin418298d2006-07-13 08:24:20 +00003419 break;
3420
3421 case 174:
Lev Walkina9532f42006-09-17 04:52:50 +00003422#line 1620 "asn1p_y.y"
3423 { yyval.a_type = ASN_BASIC_EXTERNAL; }
Lev Walkin418298d2006-07-13 08:24:20 +00003424 break;
3425
3426 case 175:
Lev Walkina9532f42006-09-17 04:52:50 +00003427#line 1621 "asn1p_y.y"
3428 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
Lev Walkin418298d2006-07-13 08:24:20 +00003429 break;
3430
3431 case 176:
Lev Walkina9532f42006-09-17 04:52:50 +00003432#line 1622 "asn1p_y.y"
3433 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
Lev Walkin418298d2006-07-13 08:24:20 +00003434 break;
3435
3436 case 177:
Lev Walkina9532f42006-09-17 04:52:50 +00003437#line 1623 "asn1p_y.y"
3438 { yyval.a_type = ASN_BASIC_UTCTime; }
Lev Walkin418298d2006-07-13 08:24:20 +00003439 break;
3440
3441 case 178:
Lev Walkina9532f42006-09-17 04:52:50 +00003442#line 1624 "asn1p_y.y"
3443 { yyval.a_type = ASN_BASIC_GeneralizedTime; }
Lev Walkin418298d2006-07-13 08:24:20 +00003444 break;
3445
3446 case 179:
Lev Walkina9532f42006-09-17 04:52:50 +00003447#line 1625 "asn1p_y.y"
3448 { yyval.a_type = yyvsp[0].a_type; }
Lev Walkin866bd7f2006-09-14 10:35:20 +00003449 break;
3450
3451 case 180:
Lev Walkina9532f42006-09-17 04:52:50 +00003452#line 1632 "asn1p_y.y"
3453 { yyval.a_type = ASN_BASIC_INTEGER; }
Lev Walkin866bd7f2006-09-14 10:35:20 +00003454 break;
3455
3456 case 181:
Lev Walkina9532f42006-09-17 04:52:50 +00003457#line 1633 "asn1p_y.y"
3458 { yyval.a_type = ASN_BASIC_ENUMERATED; }
Lev Walkin866bd7f2006-09-14 10:35:20 +00003459 break;
3460
3461 case 182:
Lev Walkina9532f42006-09-17 04:52:50 +00003462#line 1634 "asn1p_y.y"
3463 { yyval.a_type = ASN_BASIC_BIT_STRING; }
3464 break;
3465
3466 case 183:
3467#line 1638 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003468 {
Lev Walkina9532f42006-09-17 04:52:50 +00003469 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003470 checkmem(yyval.a_expr);
3471 yyval.a_expr->expr_type = yyvsp[0].a_type;
3472 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003473 }
3474 break;
3475
Lev Walkina9532f42006-09-17 04:52:50 +00003476 case 184:
3477#line 1644 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003478 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003479 if(yyvsp[0].a_expr) {
3480 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinf15320b2004-06-03 03:38:44 +00003481 } else {
Lev Walkina9532f42006-09-17 04:52:50 +00003482 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003483 checkmem(yyval.a_expr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003484 }
Lev Walkina00d6b32006-03-21 03:40:38 +00003485 yyval.a_expr->expr_type = yyvsp[-1].a_type;
3486 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003487 }
3488 break;
3489
Lev Walkina9532f42006-09-17 04:52:50 +00003490 case 185:
3491#line 1657 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003492 { yyval.a_type = ASN_STRING_BMPString; }
3493 break;
3494
Lev Walkina9532f42006-09-17 04:52:50 +00003495 case 186:
3496#line 1658 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003497 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003498 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00003499 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003500 }
3501 break;
3502
Lev Walkina9532f42006-09-17 04:52:50 +00003503 case 187:
3504#line 1662 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003505 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003506 yyval.a_type = ASN_STRING_GraphicString;
Lev Walkin9c974182004-09-15 11:59:51 +00003507 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003508 }
3509 break;
3510
Lev Walkina9532f42006-09-17 04:52:50 +00003511 case 188:
3512#line 1666 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003513 { yyval.a_type = ASN_STRING_IA5String; }
3514 break;
3515
Lev Walkina9532f42006-09-17 04:52:50 +00003516 case 189:
3517#line 1667 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003518 { yyval.a_type = ASN_STRING_ISO646String; }
3519 break;
3520
Lev Walkina9532f42006-09-17 04:52:50 +00003521 case 190:
3522#line 1668 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003523 { yyval.a_type = ASN_STRING_NumericString; }
3524 break;
3525
Lev Walkina9532f42006-09-17 04:52:50 +00003526 case 191:
3527#line 1669 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003528 { yyval.a_type = ASN_STRING_PrintableString; }
3529 break;
3530
Lev Walkina9532f42006-09-17 04:52:50 +00003531 case 192:
3532#line 1670 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003533 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003534 yyval.a_type = ASN_STRING_T61String;
Lev Walkin9c974182004-09-15 11:59:51 +00003535 fprintf(stderr, "WARNING: T61String is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003536 }
3537 break;
3538
Lev Walkina9532f42006-09-17 04:52:50 +00003539 case 193:
3540#line 1674 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003541 { yyval.a_type = ASN_STRING_TeletexString; }
3542 break;
3543
Lev Walkina9532f42006-09-17 04:52:50 +00003544 case 194:
3545#line 1675 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003546 { yyval.a_type = ASN_STRING_UniversalString; }
3547 break;
3548
Lev Walkina9532f42006-09-17 04:52:50 +00003549 case 195:
3550#line 1676 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003551 { yyval.a_type = ASN_STRING_UTF8String; }
3552 break;
3553
Lev Walkina9532f42006-09-17 04:52:50 +00003554 case 196:
3555#line 1677 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003556 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003557 yyval.a_type = ASN_STRING_VideotexString;
Lev Walkin9c974182004-09-15 11:59:51 +00003558 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003559 }
3560 break;
3561
Lev Walkina9532f42006-09-17 04:52:50 +00003562 case 197:
3563#line 1681 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003564 { yyval.a_type = ASN_STRING_VisibleString; }
3565 break;
3566
Lev Walkina9532f42006-09-17 04:52:50 +00003567 case 198:
3568#line 1682 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003569 { yyval.a_type = ASN_STRING_ObjectDescriptor; }
3570 break;
3571
Lev Walkina9532f42006-09-17 04:52:50 +00003572 case 204:
3573#line 1694 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003574 { yyval.a_constr = 0; }
3575 break;
3576
Lev Walkina9532f42006-09-17 04:52:50 +00003577 case 205:
3578#line 1695 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003579 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003580 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003581 }
3582 break;
3583
Lev Walkina9532f42006-09-17 04:52:50 +00003584 case 207:
3585#line 1702 "asn1p_y.y"
3586 {
3587 yyval.a_constr = yyvsp[-1].a_constr;
3588 }
3589 break;
3590
3591 case 208:
3592#line 1708 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003593 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003594 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003595 }
3596 break;
3597
Lev Walkina9532f42006-09-17 04:52:50 +00003598 case 209:
3599#line 1711 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003600 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003601 /*
3602 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00003603 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00003604 */
Lev Walkina00d6b32006-03-21 03:40:38 +00003605 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003606 }
3607 break;
3608
Lev Walkina9532f42006-09-17 04:52:50 +00003609 case 210:
3610#line 1721 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003611 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003612 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003613 }
3614 break;
3615
Lev Walkina9532f42006-09-17 04:52:50 +00003616 case 211:
3617#line 1724 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003618 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003619 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003620 }
3621 break;
3622
Lev Walkina9532f42006-09-17 04:52:50 +00003623 case 212:
3624#line 1730 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003625 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00003626 yyval.a_constr = asn1p_constraint_new(yylineno);
3627 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin418298d2006-07-13 08:24:20 +00003628 }
3629 break;
3630
Lev Walkina9532f42006-09-17 04:52:50 +00003631 case 213:
3632#line 1734 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003633 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003634 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003635 }
3636 break;
3637
Lev Walkina9532f42006-09-17 04:52:50 +00003638 case 214:
3639#line 1737 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003640 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003641 asn1p_constraint_t *ct;
3642 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003643 ct->type = ACT_EL_EXT;
Lev Walkina00d6b32006-03-21 03:40:38 +00003644 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin418298d2006-07-13 08:24:20 +00003645 }
3646 break;
3647
Lev Walkina9532f42006-09-17 04:52:50 +00003648 case 215:
3649#line 1743 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003650 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003651 asn1p_constraint_t *ct;
3652 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003653 ct->type = ACT_EL_EXT;
Lev Walkina00d6b32006-03-21 03:40:38 +00003654 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
3655 ct = yyval.a_constr;
3656 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003657 }
3658 break;
3659
Lev Walkina9532f42006-09-17 04:52:50 +00003660 case 216:
3661#line 1754 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003662 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003663 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003664 }
3665 break;
3666
Lev Walkina9532f42006-09-17 04:52:50 +00003667 case 217:
3668#line 1757 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003669 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003670 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003671 }
3672 break;
3673
Lev Walkina9532f42006-09-17 04:52:50 +00003674 case 218:
3675#line 1760 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003676 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003677 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003678 }
3679 break;
3680
Lev Walkina9532f42006-09-17 04:52:50 +00003681 case 219:
3682#line 1763 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003683 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003684 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003685 }
3686 break;
3687
Lev Walkina9532f42006-09-17 04:52:50 +00003688 case 220:
3689#line 1766 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003690 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003691 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003692 }
3693 break;
3694
Lev Walkina9532f42006-09-17 04:52:50 +00003695 case 221:
3696#line 1772 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003697 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003698 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003699 yyval.a_constr = asn1p_constraint_new(yylineno);
3700 checkmem(yyval.a_constr);
3701 yyval.a_constr->type = yyvsp[-3].a_ctype;
3702 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003703 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003704 }
3705 break;
3706
Lev Walkina9532f42006-09-17 04:52:50 +00003707 case 222:
3708#line 1780 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003709 {
Lev Walkinf59d0752004-08-18 04:59:12 +00003710 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003711 yyval.a_constr = asn1p_constraint_new(yylineno);
3712 checkmem(yyval.a_constr);
3713 yyval.a_constr->type = ACT_CA_SET;
3714 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkinf59d0752004-08-18 04:59:12 +00003715 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003716 }
3717 break;
3718
Lev Walkina9532f42006-09-17 04:52:50 +00003719 case 223:
3720#line 1788 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003721 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003722 yyval.a_constr = asn1p_constraint_new(yylineno);
3723 checkmem(yyval.a_constr);
3724 yyval.a_constr->type = ACT_EL_VALUE;
3725 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003726 }
3727 break;
3728
Lev Walkina9532f42006-09-17 04:52:50 +00003729 case 224:
3730#line 1794 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003731 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003732 yyval.a_constr = asn1p_constraint_new(yylineno);
3733 checkmem(yyval.a_constr);
3734 yyval.a_constr->type = ACT_EL_TYPE;
3735 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003736 }
3737 break;
3738
Lev Walkin866bd7f2006-09-14 10:35:20 +00003739 case 225:
Lev Walkina9532f42006-09-17 04:52:50 +00003740#line 1800 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00003741 {
3742 yyval.a_constr = asn1p_constraint_new(yylineno);
3743 checkmem(yyval.a_constr);
3744 yyval.a_constr->type = yyvsp[-1].a_ctype;
Lev Walkina9532f42006-09-17 04:52:50 +00003745 yyval.a_constr->range_start = yyvsp[-2].a_value;
3746 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkin866bd7f2006-09-14 10:35:20 +00003747 }
3748 break;
3749
3750 case 226:
Lev Walkina9532f42006-09-17 04:52:50 +00003751#line 1807 "asn1p_y.y"
Lev Walkinadf863f2006-09-05 16:18:34 +00003752 {
Lev Walkina9532f42006-09-17 04:52:50 +00003753 yyval.a_constr = asn1p_constraint_new(yylineno);
3754 checkmem(yyval.a_constr);
3755 yyval.a_constr->type = yyvsp[-1].a_ctype;
3756 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3757 yyval.a_constr->range_stop = yyvsp[0].a_value;
3758 yyval.a_constr->range_start->type = ATV_MIN;
Lev Walkinadf863f2006-09-05 16:18:34 +00003759 }
3760 break;
3761
Lev Walkin866bd7f2006-09-14 10:35:20 +00003762 case 227:
Lev Walkina9532f42006-09-17 04:52:50 +00003763#line 1815 "asn1p_y.y"
3764 {
3765 yyval.a_constr = asn1p_constraint_new(yylineno);
3766 checkmem(yyval.a_constr);
3767 yyval.a_constr->type = yyvsp[-1].a_ctype;
3768 yyval.a_constr->range_start = yyvsp[-2].a_value;
3769 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3770 yyval.a_constr->range_stop->type = ATV_MAX;
3771 }
3772 break;
3773
3774 case 228:
3775#line 1823 "asn1p_y.y"
3776 {
3777 yyval.a_constr = asn1p_constraint_new(yylineno);
3778 checkmem(yyval.a_constr);
3779 yyval.a_constr->type = yyvsp[-1].a_ctype;
3780 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3781 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3782 yyval.a_constr->range_start->type = ATV_MIN;
3783 yyval.a_constr->range_stop->type = ATV_MAX;
3784 }
3785 break;
3786
3787 case 229:
3788#line 1832 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00003789 {
3790 yyval.a_constr = yyvsp[0].a_constr;
3791 }
3792 break;
3793
Lev Walkin866bd7f2006-09-14 10:35:20 +00003794 case 230:
Lev Walkina9532f42006-09-17 04:52:50 +00003795#line 1838 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003796 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003797 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin418298d2006-07-13 08:24:20 +00003798 }
3799 break;
3800
Lev Walkina9532f42006-09-17 04:52:50 +00003801 case 231:
3802#line 1841 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003803 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003804 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin418298d2006-07-13 08:24:20 +00003805 }
3806 break;
3807
Lev Walkina9532f42006-09-17 04:52:50 +00003808 case 232:
3809#line 1847 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003810 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003811 yyval.a_value = asn1p_value_fromint(0);
3812 checkmem(yyval.a_value);
3813 yyval.a_value->type = ATV_FALSE;
Lev Walkin418298d2006-07-13 08:24:20 +00003814 }
3815 break;
3816
Lev Walkina9532f42006-09-17 04:52:50 +00003817 case 233:
3818#line 1852 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003819 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003820 yyval.a_value = asn1p_value_fromint(1);
3821 checkmem(yyval.a_value);
3822 yyval.a_value->type = ATV_TRUE;
Lev Walkin418298d2006-07-13 08:24:20 +00003823 }
3824 break;
3825
Lev Walkina9532f42006-09-17 04:52:50 +00003826 case 236:
3827#line 1859 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003828 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003829 asn1p_ref_t *ref;
3830 int ret;
3831 ref = asn1p_ref_new(yylineno);
3832 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003833 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003834 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003835 yyval.a_value = asn1p_value_fromref(ref, 0);
3836 checkmem(yyval.a_value);
3837 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003838 }
3839 break;
3840
Lev Walkina9532f42006-09-17 04:52:50 +00003841 case 237:
3842#line 1873 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003843 {
Lev Walkinc8092cb2005-02-18 16:34:21 +00003844 asn1p_ref_t *ref;
3845 int ret;
3846 ref = asn1p_ref_new(yylineno);
3847 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003848 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003849 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003850 yyval.a_value = asn1p_value_fromref(ref, 0);
3851 checkmem(yyval.a_value);
3852 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003853 }
3854 break;
3855
Lev Walkina9532f42006-09-17 04:52:50 +00003856 case 238:
3857#line 1887 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003858 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003859 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003860 }
3861 break;
3862
Lev Walkina9532f42006-09-17 04:52:50 +00003863 case 239:
3864#line 1890 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003865 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003866 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003867 }
3868 break;
3869
Lev Walkina9532f42006-09-17 04:52:50 +00003870 case 240:
3871#line 1896 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003872 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003873 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003874 }
3875 break;
3876
Lev Walkina9532f42006-09-17 04:52:50 +00003877 case 241:
3878#line 1899 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003879 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003880 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003881 }
3882 break;
3883
Lev Walkina9532f42006-09-17 04:52:50 +00003884 case 242:
3885#line 1905 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003886 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003887 yyval.a_constr = asn1p_constraint_new(yylineno);
3888 checkmem(yyval.a_constr);
3889 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin418298d2006-07-13 08:24:20 +00003890 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 1);
3891 }
3892 break;
3893
Lev Walkina9532f42006-09-17 04:52:50 +00003894 case 243:
3895#line 1911 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003896 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003897 yyval.a_constr = asn1p_constraint_new(yylineno);
3898 checkmem(yyval.a_constr);
3899 yyval.a_constr->type = ACT_EL_VALUE;
3900 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3901 yyval.a_constr->presence = yyvsp[0].a_pres;
3902 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003903 }
3904 break;
3905
Lev Walkina9532f42006-09-17 04:52:50 +00003906 case 244:
3907#line 1925 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003908 { yyval.a_pres = ACPRES_DEFAULT; }
3909 break;
3910
Lev Walkina9532f42006-09-17 04:52:50 +00003911 case 245:
3912#line 1926 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003913 { yyval.a_pres = yyvsp[0].a_pres; }
3914 break;
3915
Lev Walkina9532f42006-09-17 04:52:50 +00003916 case 246:
3917#line 1930 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003918 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003919 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin418298d2006-07-13 08:24:20 +00003920 }
3921 break;
3922
Lev Walkina9532f42006-09-17 04:52:50 +00003923 case 247:
3924#line 1933 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003925 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003926 yyval.a_pres = ACPRES_ABSENT;
Lev Walkin418298d2006-07-13 08:24:20 +00003927 }
3928 break;
3929
Lev Walkina9532f42006-09-17 04:52:50 +00003930 case 248:
3931#line 1936 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003932 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003933 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkin418298d2006-07-13 08:24:20 +00003934 }
3935 break;
3936
Lev Walkina9532f42006-09-17 04:52:50 +00003937 case 252:
3938#line 1951 "asn1p_y.y"
3939 { asn1p_lexer_hack_push_opaque_state(); }
3940 break;
3941
Lev Walkin866bd7f2006-09-14 10:35:20 +00003942 case 253:
Lev Walkina9532f42006-09-17 04:52:50 +00003943#line 1951 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003944 {
Lev Walkina9532f42006-09-17 04:52:50 +00003945 yyval.a_constr = asn1p_constraint_new(yylineno);
3946 checkmem(yyval.a_constr);
3947 yyval.a_constr->type = ACT_CT_CTDBY;
3948 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3949 checkmem(yyval.a_constr->value);
3950 yyval.a_constr->value->type = ATV_UNPARSED;
Lev Walkin418298d2006-07-13 08:24:20 +00003951 }
3952 break;
3953
Lev Walkin866bd7f2006-09-14 10:35:20 +00003954 case 254:
Lev Walkina9532f42006-09-17 04:52:50 +00003955#line 1962 "asn1p_y.y"
3956 {
3957 yyval.a_constr = asn1p_constraint_new(yylineno);
3958 yyval.a_constr->type = ACT_CT_CTNG;
3959 yyval.a_constr->value = asn1p_value_fromtype(yyvsp[0].a_expr);
3960 }
3961 break;
3962
3963 case 255:
3964#line 1970 "asn1p_y.y"
3965 { yyval.a_ctype = ACT_EL_RANGE; }
3966 break;
3967
3968 case 256:
3969#line 1971 "asn1p_y.y"
3970 { yyval.a_ctype = ACT_EL_RLRANGE; }
3971 break;
3972
3973 case 257:
3974#line 1972 "asn1p_y.y"
3975 { yyval.a_ctype = ACT_EL_LLRANGE; }
3976 break;
3977
3978 case 258:
3979#line 1973 "asn1p_y.y"
3980 { yyval.a_ctype = ACT_EL_ULRANGE; }
3981 break;
3982
3983 case 259:
3984#line 1976 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003985 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00003986 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003987 }
3988 break;
3989
Lev Walkina9532f42006-09-17 04:52:50 +00003990 case 260:
3991#line 1979 "asn1p_y.y"
3992 {
3993 yyval.a_constr = yyvsp[0].a_constr;
3994 }
3995 break;
3996
3997 case 261:
3998#line 1988 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003999 {
Lev Walkinf15320b2004-06-03 03:38:44 +00004000 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
4001 asn1p_constraint_t *ct;
4002 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00004003 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00004004 checkmem(ret == 0);
4005 ct = asn1p_constraint_new(yylineno);
Lev Walkina00d6b32006-03-21 03:40:38 +00004006 checkmem(yyval.a_constr);
Lev Walkinf15320b2004-06-03 03:38:44 +00004007 ct->type = ACT_EL_VALUE;
4008 ct->value = asn1p_value_fromref(ref, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00004009 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00004010 }
4011 break;
4012
Lev Walkina9532f42006-09-17 04:52:50 +00004013 case 262:
4014#line 2003 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004015 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004016 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00004017 }
4018 break;
4019
Lev Walkina9532f42006-09-17 04:52:50 +00004020 case 263:
4021#line 2009 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004022 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004023 yyval.a_constr = asn1p_constraint_new(yylineno);
4024 checkmem(yyval.a_constr);
4025 yyval.a_constr->type = ACT_EL_VALUE;
4026 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00004027 }
4028 break;
4029
Lev Walkina9532f42006-09-17 04:52:50 +00004030 case 264:
4031#line 2015 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004032 {
Lev Walkinf15320b2004-06-03 03:38:44 +00004033 asn1p_constraint_t *ct;
4034 ct = asn1p_constraint_new(yylineno);
4035 checkmem(ct);
4036 ct->type = ACT_EL_VALUE;
Lev Walkina00d6b32006-03-21 03:40:38 +00004037 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
4038 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin418298d2006-07-13 08:24:20 +00004039 }
4040 break;
4041
Lev Walkina9532f42006-09-17 04:52:50 +00004042 case 265:
4043#line 2029 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004044 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004045 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
Lev Walkinf15320b2004-06-03 03:38:44 +00004046 int ret;
4047 *p = '@';
Lev Walkina00d6b32006-03-21 03:40:38 +00004048 strcpy(p + 1, yyvsp[0].tv_str);
4049 yyval.a_ref = asn1p_ref_new(yylineno);
4050 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00004051 checkmem(ret == 0);
4052 free(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00004053 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00004054 }
4055 break;
4056
Lev Walkina9532f42006-09-17 04:52:50 +00004057 case 266:
4058#line 2040 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004059 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004060 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
Lev Walkinf15320b2004-06-03 03:38:44 +00004061 int ret;
4062 p[0] = '@';
4063 p[1] = '.';
Lev Walkina00d6b32006-03-21 03:40:38 +00004064 strcpy(p + 2, yyvsp[0].tv_str);
4065 yyval.a_ref = asn1p_ref_new(yylineno);
4066 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00004067 checkmem(ret == 0);
4068 free(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00004069 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00004070 }
4071 break;
4072
Lev Walkina9532f42006-09-17 04:52:50 +00004073 case 267:
4074#line 2056 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004075 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004076 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004077 }
4078 break;
4079
Lev Walkina9532f42006-09-17 04:52:50 +00004080 case 268:
4081#line 2059 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004082 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004083 int l1 = strlen(yyvsp[-2].tv_str);
4084 int l3 = strlen(yyvsp[0].tv_str);
4085 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
4086 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
4087 yyval.tv_str[l1] = '.';
4088 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
4089 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin418298d2006-07-13 08:24:20 +00004090 }
4091 break;
4092
Lev Walkina9532f42006-09-17 04:52:50 +00004093 case 269:
4094#line 2077 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004095 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004096 yyval.a_marker.flags = EM_NOMARK;
4097 yyval.a_marker.default_value = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00004098 }
4099 break;
4100
Lev Walkina9532f42006-09-17 04:52:50 +00004101 case 270:
4102#line 2081 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004103 { yyval.a_marker = yyvsp[0].a_marker; }
4104 break;
4105
Lev Walkina9532f42006-09-17 04:52:50 +00004106 case 271:
4107#line 2085 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004108 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004109 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
4110 yyval.a_marker.default_value = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00004111 }
4112 break;
4113
Lev Walkina9532f42006-09-17 04:52:50 +00004114 case 272:
4115#line 2089 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004116 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004117 yyval.a_marker.flags = EM_DEFAULT;
4118 yyval.a_marker.default_value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004119 }
4120 break;
4121
Lev Walkina9532f42006-09-17 04:52:50 +00004122 case 273:
4123#line 2112 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004124 {
Lev Walkina9532f42006-09-17 04:52:50 +00004125 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004126 checkmem(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004127 }
4128 break;
4129
Lev Walkina9532f42006-09-17 04:52:50 +00004130 case 274:
4131#line 2116 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004132 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004133 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00004134 }
4135 break;
4136
Lev Walkina9532f42006-09-17 04:52:50 +00004137 case 275:
4138#line 2122 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004139 {
Lev Walkina9532f42006-09-17 04:52:50 +00004140 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004141 checkmem(yyval.a_expr);
4142 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004143 }
4144 break;
4145
Lev Walkina9532f42006-09-17 04:52:50 +00004146 case 276:
4147#line 2127 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004148 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004149 yyval.a_expr = yyvsp[-2].a_expr;
4150 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004151 }
4152 break;
4153
Lev Walkina9532f42006-09-17 04:52:50 +00004154 case 277:
4155#line 2134 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004156 {
Lev Walkina9532f42006-09-17 04:52:50 +00004157 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004158 checkmem(yyval.a_expr);
4159 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4160 yyval.a_expr->meta_type = AMT_VALUE;
4161 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004162 }
4163 break;
4164
Lev Walkina9532f42006-09-17 04:52:50 +00004165 case 278:
4166#line 2141 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004167 {
Lev Walkina9532f42006-09-17 04:52:50 +00004168 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004169 checkmem(yyval.a_expr);
4170 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4171 yyval.a_expr->meta_type = AMT_VALUE;
4172 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4173 yyval.a_expr->value = yyvsp[-1].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004174 }
4175 break;
4176
Lev Walkina9532f42006-09-17 04:52:50 +00004177 case 279:
4178#line 2149 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004179 {
Lev Walkina9532f42006-09-17 04:52:50 +00004180 yyval.a_expr = NEW_EXPR();
Lev Walkin0c0bca62006-03-21 04:48:15 +00004181 checkmem(yyval.a_expr);
4182 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4183 yyval.a_expr->meta_type = AMT_VALUE;
4184 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4185 yyval.a_expr->value = yyvsp[-1].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004186 }
4187 break;
4188
Lev Walkina9532f42006-09-17 04:52:50 +00004189 case 280:
4190#line 2157 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004191 {
Lev Walkina9532f42006-09-17 04:52:50 +00004192 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004193 checkmem(yyval.a_expr);
4194 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4195 yyval.a_expr->meta_type = AMT_VALUE;
4196 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004197 }
4198 break;
4199
Lev Walkina9532f42006-09-17 04:52:50 +00004200 case 281:
4201#line 2164 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004202 {
Lev Walkina9532f42006-09-17 04:52:50 +00004203 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004204 checkmem(yyval.a_expr);
4205 yyval.a_expr->Identifier = strdup("...");
4206 checkmem(yyval.a_expr->Identifier);
4207 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
4208 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin418298d2006-07-13 08:24:20 +00004209 }
4210 break;
4211
Lev Walkina9532f42006-09-17 04:52:50 +00004212 case 282:
4213#line 2175 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00004214 {
4215 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4216 checkmem(yyval.a_value);
4217 }
4218 break;
4219
Lev Walkina9532f42006-09-17 04:52:50 +00004220 case 283:
4221#line 2179 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00004222 {
4223 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4224 checkmem(yyval.a_value);
4225 }
4226 break;
4227
Lev Walkina9532f42006-09-17 04:52:50 +00004228 case 285:
4229#line 2187 "asn1p_y.y"
Lev Walkinadf863f2006-09-05 16:18:34 +00004230 {
4231 yyval.a_value = asn1p_value_fromdouble(yyvsp[0].a_dbl);
4232 checkmem(yyval.a_value);
4233 }
Lev Walkin418298d2006-07-13 08:24:20 +00004234 break;
4235
Lev Walkina9532f42006-09-17 04:52:50 +00004236 case 286:
4237#line 2218 "asn1p_y.y"
Lev Walkinadf863f2006-09-05 16:18:34 +00004238 { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); }
4239 break;
4240
Lev Walkina9532f42006-09-17 04:52:50 +00004241 case 287:
4242#line 2219 "asn1p_y.y"
Lev Walkinadf863f2006-09-05 16:18:34 +00004243 { yyval.a_tag = yyvsp[0].a_tag; }
4244 break;
4245
Lev Walkina9532f42006-09-17 04:52:50 +00004246 case 288:
4247#line 2223 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004248 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004249 yyval.a_tag = yyvsp[-1].a_tag;
4250 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin418298d2006-07-13 08:24:20 +00004251 }
4252 break;
4253
Lev Walkina9532f42006-09-17 04:52:50 +00004254 case 289:
4255#line 2230 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004256 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004257 yyval.a_tag = yyvsp[-2].a_tag;
4258 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin418298d2006-07-13 08:24:20 +00004259 }
4260 break;
4261
Lev Walkina9532f42006-09-17 04:52:50 +00004262 case 290:
4263#line 2236 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004264 { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; }
4265 break;
4266
Lev Walkina9532f42006-09-17 04:52:50 +00004267 case 291:
4268#line 2237 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004269 { yyval.a_tag.tag_class = TC_UNIVERSAL; }
4270 break;
4271
Lev Walkina9532f42006-09-17 04:52:50 +00004272 case 292:
4273#line 2238 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004274 { yyval.a_tag.tag_class = TC_APPLICATION; }
4275 break;
4276
Lev Walkina9532f42006-09-17 04:52:50 +00004277 case 293:
4278#line 2239 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004279 { yyval.a_tag.tag_class = TC_PRIVATE; }
4280 break;
4281
Lev Walkina9532f42006-09-17 04:52:50 +00004282 case 294:
4283#line 2243 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004284 { yyval.a_tag.tag_mode = TM_DEFAULT; }
4285 break;
4286
Lev Walkina9532f42006-09-17 04:52:50 +00004287 case 295:
4288#line 2244 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004289 { yyval.a_tag.tag_mode = TM_IMPLICIT; }
4290 break;
4291
Lev Walkina9532f42006-09-17 04:52:50 +00004292 case 296:
4293#line 2245 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004294 { yyval.a_tag.tag_mode = TM_EXPLICIT; }
4295 break;
4296
Lev Walkina9532f42006-09-17 04:52:50 +00004297 case 297:
4298#line 2249 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00004299 {
4300 checkmem(yyvsp[0].tv_str);
4301 yyval.tv_str = yyvsp[0].tv_str;
4302 }
Lev Walkinadf863f2006-09-05 16:18:34 +00004303 break;
4304
Lev Walkina9532f42006-09-17 04:52:50 +00004305 case 298:
4306#line 2253 "asn1p_y.y"
Lev Walkinadf863f2006-09-05 16:18:34 +00004307 {
Lev Walkin866bd7f2006-09-14 10:35:20 +00004308 checkmem(yyvsp[0].tv_str);
Lev Walkinadf863f2006-09-05 16:18:34 +00004309 yyval.tv_str = yyvsp[0].tv_str;
4310 }
4311 break;
4312
Lev Walkina9532f42006-09-17 04:52:50 +00004313 case 299:
4314#line 2261 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004315 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00004316 checkmem(yyvsp[0].tv_str);
4317 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004318 }
4319 break;
4320
Lev Walkina9532f42006-09-17 04:52:50 +00004321 case 300:
4322#line 2268 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00004323 { yyval.tv_str = 0; }
4324 break;
4325
Lev Walkina9532f42006-09-17 04:52:50 +00004326 case 301:
4327#line 2269 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00004328 {
4329 yyval.tv_str = yyvsp[0].tv_str;
4330 }
4331 break;
4332
Lev Walkina9532f42006-09-17 04:52:50 +00004333 case 302:
4334#line 2275 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00004335 {
4336 checkmem(yyvsp[0].tv_str);
4337 yyval.tv_str = yyvsp[0].tv_str;
4338 }
4339 break;
4340
Lev Walkin418298d2006-07-13 08:24:20 +00004341
4342 }
4343
4344/* Line 1016 of /usr/local/share/bison/yacc.c. */
Lev Walkina9532f42006-09-17 04:52:50 +00004345#line 4346 "asn1p_y.c"
Lev Walkinf15320b2004-06-03 03:38:44 +00004346
4347 yyvsp -= yylen;
4348 yyssp -= yylen;
Lev Walkinf15320b2004-06-03 03:38:44 +00004349
Lev Walkin418298d2006-07-13 08:24:20 +00004350
4351#if YYDEBUG
Lev Walkina00d6b32006-03-21 03:40:38 +00004352 if (yydebug)
4353 {
Lev Walkin418298d2006-07-13 08:24:20 +00004354 short *yyssp1 = yyss - 1;
4355 YYFPRINTF (stderr, "state stack now");
4356 while (yyssp1 != yyssp)
4357 YYFPRINTF (stderr, " %d", *++yyssp1);
4358 YYFPRINTF (stderr, "\n");
Lev Walkina00d6b32006-03-21 03:40:38 +00004359 }
4360#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00004361
4362 *++yyvsp = yyval;
4363
Lev Walkinf15320b2004-06-03 03:38:44 +00004364
Lev Walkin418298d2006-07-13 08:24:20 +00004365 /* Now `shift' the result of the reduction. Determine what state
4366 that goes to, based on the state we popped back to and the rule
4367 number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00004368
4369 yyn = yyr1[yyn];
4370
Lev Walkin418298d2006-07-13 08:24:20 +00004371 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
4372 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00004373 yystate = yytable[yystate];
4374 else
Lev Walkin418298d2006-07-13 08:24:20 +00004375 yystate = yydefgoto[yyn - YYNTOKENS];
Lev Walkinf15320b2004-06-03 03:38:44 +00004376
4377 goto yynewstate;
4378
Lev Walkinf15320b2004-06-03 03:38:44 +00004379
Lev Walkin418298d2006-07-13 08:24:20 +00004380/*------------------------------------.
4381| yyerrlab -- here on detecting error |
4382`------------------------------------*/
4383yyerrlab:
4384 /* If not already recovering from an error, report this error. */
4385 if (!yyerrstatus)
Lev Walkinf15320b2004-06-03 03:38:44 +00004386 {
4387 ++yynerrs;
Lev Walkin418298d2006-07-13 08:24:20 +00004388#if YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00004389 yyn = yypact[yystate];
4390
Lev Walkin418298d2006-07-13 08:24:20 +00004391 if (YYPACT_NINF < yyn && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00004392 {
Lev Walkin418298d2006-07-13 08:24:20 +00004393 YYSIZE_T yysize = 0;
4394 int yytype = YYTRANSLATE (yychar);
4395 char *yymsg;
4396 int yyx, yycount;
Lev Walkinf15320b2004-06-03 03:38:44 +00004397
Lev Walkin418298d2006-07-13 08:24:20 +00004398 yycount = 0;
4399 /* Start YYX at -YYN if negative to avoid negative indexes in
4400 YYCHECK. */
4401 for (yyx = yyn < 0 ? -yyn : 0;
4402 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
4403 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
4404 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
4405 yysize += yystrlen ("parse error, unexpected ") + 1;
4406 yysize += yystrlen (yytname[yytype]);
4407 yymsg = (char *) YYSTACK_ALLOC (yysize);
4408 if (yymsg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00004409 {
Lev Walkin418298d2006-07-13 08:24:20 +00004410 char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
4411 yyp = yystpcpy (yyp, yytname[yytype]);
Lev Walkina00d6b32006-03-21 03:40:38 +00004412
Lev Walkin418298d2006-07-13 08:24:20 +00004413 if (yycount < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00004414 {
Lev Walkin418298d2006-07-13 08:24:20 +00004415 yycount = 0;
4416 for (yyx = yyn < 0 ? -yyn : 0;
4417 yyx < (int) (sizeof (yytname) / sizeof (char *));
4418 yyx++)
4419 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
Lev Walkina00d6b32006-03-21 03:40:38 +00004420 {
Lev Walkin418298d2006-07-13 08:24:20 +00004421 const char *yyq = ! yycount ? ", expecting " : " or ";
4422 yyp = yystpcpy (yyp, yyq);
4423 yyp = yystpcpy (yyp, yytname[yyx]);
4424 yycount++;
Lev Walkina00d6b32006-03-21 03:40:38 +00004425 }
Lev Walkinf15320b2004-06-03 03:38:44 +00004426 }
Lev Walkin418298d2006-07-13 08:24:20 +00004427 yyerror (yymsg);
4428 YYSTACK_FREE (yymsg);
Lev Walkinf15320b2004-06-03 03:38:44 +00004429 }
4430 else
Lev Walkin418298d2006-07-13 08:24:20 +00004431 yyerror ("parse error; also virtual memory exhausted");
Lev Walkinf15320b2004-06-03 03:38:44 +00004432 }
4433 else
4434#endif /* YYERROR_VERBOSE */
Lev Walkin418298d2006-07-13 08:24:20 +00004435 yyerror ("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00004436 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004437 goto yyerrlab1;
Lev Walkinf15320b2004-06-03 03:38:44 +00004438
Lev Walkin418298d2006-07-13 08:24:20 +00004439
4440/*----------------------------------------------------.
4441| yyerrlab1 -- error raised explicitly by an action. |
4442`----------------------------------------------------*/
4443yyerrlab1:
Lev Walkinf15320b2004-06-03 03:38:44 +00004444 if (yyerrstatus == 3)
4445 {
Lev Walkin418298d2006-07-13 08:24:20 +00004446 /* If just tried and failed to reuse lookahead token after an
4447 error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00004448
Lev Walkin418298d2006-07-13 08:24:20 +00004449 /* Return failure if at end of input. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004450 if (yychar == YYEOF)
Lev Walkin418298d2006-07-13 08:24:20 +00004451 {
4452 /* Pop the error token. */
4453 YYPOPSTACK;
4454 /* Pop the rest of the stack. */
4455 while (yyssp > yyss)
4456 {
4457 YYDPRINTF ((stderr, "Error: popping "));
4458 YYDSYMPRINT ((stderr,
4459 yystos[*yyssp],
4460 *yyvsp));
4461 YYDPRINTF ((stderr, "\n"));
4462 yydestruct (yystos[*yyssp], *yyvsp);
4463 YYPOPSTACK;
4464 }
4465 YYABORT;
4466 }
Lev Walkinf15320b2004-06-03 03:38:44 +00004467
Lev Walkin418298d2006-07-13 08:24:20 +00004468 YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
4469 yychar, yytname[yychar1]));
4470 yydestruct (yychar1, yylval);
Lev Walkina00d6b32006-03-21 03:40:38 +00004471 yychar = YYEMPTY;
Lev Walkinf15320b2004-06-03 03:38:44 +00004472 }
4473
Lev Walkin418298d2006-07-13 08:24:20 +00004474 /* Else will try to reuse lookahead token after shifting the error
4475 token. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004476
Lev Walkin418298d2006-07-13 08:24:20 +00004477 yyerrstatus = 3; /* Each real token shifted decrements this. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004478
Lev Walkin418298d2006-07-13 08:24:20 +00004479 for (;;)
Lev Walkina00d6b32006-03-21 03:40:38 +00004480 {
Lev Walkin418298d2006-07-13 08:24:20 +00004481 yyn = yypact[yystate];
4482 if (yyn != YYPACT_NINF)
4483 {
4484 yyn += YYTERROR;
4485 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
4486 {
4487 yyn = yytable[yyn];
4488 if (0 < yyn)
4489 break;
4490 }
4491 }
4492
4493 /* Pop the current state because it cannot handle the error token. */
4494 if (yyssp == yyss)
4495 YYABORT;
4496
4497 YYDPRINTF ((stderr, "Error: popping "));
4498 YYDSYMPRINT ((stderr,
4499 yystos[*yyssp], *yyvsp));
4500 YYDPRINTF ((stderr, "\n"));
4501
4502 yydestruct (yystos[yystate], *yyvsp);
4503 yyvsp--;
4504 yystate = *--yyssp;
4505
4506
4507#if YYDEBUG
4508 if (yydebug)
4509 {
4510 short *yyssp1 = yyss - 1;
4511 YYFPRINTF (stderr, "Error: state stack now");
4512 while (yyssp1 != yyssp)
4513 YYFPRINTF (stderr, " %d", *++yyssp1);
4514 YYFPRINTF (stderr, "\n");
4515 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004516#endif
Lev Walkina00d6b32006-03-21 03:40:38 +00004517 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004518
Lev Walkinf15320b2004-06-03 03:38:44 +00004519 if (yyn == YYFINAL)
4520 YYACCEPT;
4521
Lev Walkin418298d2006-07-13 08:24:20 +00004522 YYDPRINTF ((stderr, "Shifting error token, "));
Lev Walkina00d6b32006-03-21 03:40:38 +00004523
Lev Walkinf15320b2004-06-03 03:38:44 +00004524 *++yyvsp = yylval;
Lev Walkin418298d2006-07-13 08:24:20 +00004525
Lev Walkinf15320b2004-06-03 03:38:44 +00004526
4527 yystate = yyn;
4528 goto yynewstate;
4529
Lev Walkina00d6b32006-03-21 03:40:38 +00004530
Lev Walkin418298d2006-07-13 08:24:20 +00004531/*-------------------------------------.
4532| yyacceptlab -- YYACCEPT comes here. |
4533`-------------------------------------*/
4534yyacceptlab:
4535 yyresult = 0;
4536 goto yyreturn;
4537
4538/*-----------------------------------.
4539| yyabortlab -- YYABORT comes here. |
4540`-----------------------------------*/
4541yyabortlab:
4542 yyresult = 1;
4543 goto yyreturn;
4544
4545#ifndef yyoverflow
4546/*----------------------------------------------.
4547| yyoverflowlab -- parser overflow comes here. |
4548`----------------------------------------------*/
4549yyoverflowlab:
4550 yyerror ("parser stack overflow");
4551 yyresult = 2;
4552 /* Fall through. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004553#endif
Lev Walkin418298d2006-07-13 08:24:20 +00004554
4555yyreturn:
4556#ifndef yyoverflow
4557 if (yyss != yyssa)
4558 YYSTACK_FREE (yyss);
4559#endif
4560 return yyresult;
Lev Walkinf15320b2004-06-03 03:38:44 +00004561}
Lev Walkin418298d2006-07-13 08:24:20 +00004562
4563
Lev Walkina9532f42006-09-17 04:52:50 +00004564#line 2281 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00004565
4566
4567
4568/*
4569 * Convert Xstring ('0101'B or '5'H) to the binary vector.
4570 */
4571static asn1p_value_t *
4572_convert_bitstring2binary(char *str, int base) {
4573 asn1p_value_t *val;
4574 int slen;
4575 int memlen;
4576 int baselen;
4577 int bits;
4578 uint8_t *binary_vector;
4579 uint8_t *bv_ptr;
4580 uint8_t cur_val;
4581
4582 assert(str);
4583 assert(str[0] == '\'');
4584
4585 switch(base) {
4586 case 'B':
4587 baselen = 1;
4588 break;
4589 case 'H':
4590 baselen = 4;
4591 break;
4592 default:
4593 assert(base == 'B' || base == 'H');
4594 errno = EINVAL;
4595 return NULL;
4596 }
4597
4598 slen = strlen(str);
4599 assert(str[slen - 1] == base);
4600 assert(str[slen - 2] == '\'');
4601
4602 memlen = slen / (8 / baselen); /* Conservative estimate */
4603
4604 bv_ptr = binary_vector = malloc(memlen + 1);
4605 if(bv_ptr == NULL)
4606 /* ENOMEM */
4607 return NULL;
4608
4609 cur_val = 0;
4610 bits = 0;
4611 while(*(++str) != '\'') {
4612 switch(baselen) {
4613 case 1:
4614 switch(*str) {
4615 case '1':
4616 cur_val |= 1 << (7 - (bits % 8));
4617 case '0':
4618 break;
4619 default:
4620 assert(!"_y UNREACH1");
4621 case ' ': case '\r': case '\n':
4622 continue;
4623 }
4624 break;
4625 case 4:
4626 switch(*str) {
4627 case '0': case '1': case '2': case '3': case '4':
4628 case '5': case '6': case '7': case '8': case '9':
4629 cur_val |= (*str - '0') << (4 - (bits % 8));
4630 break;
4631 case 'A': case 'B': case 'C':
4632 case 'D': case 'E': case 'F':
4633 cur_val |= ((*str - 'A') + 10)
4634 << (4 - (bits % 8));
4635 break;
4636 default:
4637 assert(!"_y UNREACH2");
4638 case ' ': case '\r': case '\n':
4639 continue;
4640 }
4641 break;
4642 }
4643
4644 bits += baselen;
4645 if((bits % 8) == 0) {
4646 *bv_ptr++ = cur_val;
4647 cur_val = 0;
4648 }
4649 }
4650
4651 *bv_ptr = cur_val;
4652 assert((bv_ptr - binary_vector) <= memlen);
4653
4654 val = asn1p_value_frombits(binary_vector, bits, 0);
4655 if(val == NULL) {
4656 free(binary_vector);
4657 }
4658
4659 return val;
4660}
4661
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00004662/*
4663 * For unnamed types (used in old X.208 compliant modules)
4664 * generate some sort of interim names, to not to force human being to fix
4665 * the specification's compliance to modern ASN.1 standards.
4666 */
4667static void
4668_fixup_anonymous_identifier(asn1p_expr_t *expr) {
4669 char *p;
4670 assert(expr->Identifier == 0);
4671
4672 /*
4673 * Try to figure out the type name
4674 * without going too much into details
4675 */
4676 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
4677 if(expr->reference && expr->reference->comp_count > 0)
4678 expr->Identifier = expr->reference->components[0].name;
4679
4680 fprintf(stderr,
4681 "WARNING: Line %d: expected lower-case member identifier, "
4682 "found an unnamed %s.\n"
4683 "WARNING: Obsolete X.208 syntax detected, "
4684 "please give the member a name.\n",
4685 yylineno, expr->Identifier ? expr->Identifier : "type");
4686
4687 if(!expr->Identifier)
4688 expr->Identifier = "unnamed";
4689 expr->Identifier = strdup(expr->Identifier);
4690 assert(expr->Identifier);
4691 /* Make a lowercase identifier from the type name */
4692 for(p = expr->Identifier; *p; p++) {
4693 switch(*p) {
4694 case 'A' ... 'Z': *p += 32; break;
4695 case ' ': *p = '_'; break;
4696 case '-': *p = '_'; break;
4697 }
4698 }
4699 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
4700 "Name clash may occur later.\n",
4701 expr->Identifier);
4702}
4703
Lev Walkinf15320b2004-06-03 03:38:44 +00004704int
4705yyerror(const char *msg) {
Lev Walkin9d542d22006-03-14 16:31:37 +00004706 extern char *asn1p_text;
Lev Walkinf15320b2004-06-03 03:38:44 +00004707 fprintf(stderr,
4708 "ASN.1 grammar parse error "
4709 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00004710 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00004711 return -1;
4712}
4713
Lev Walkin418298d2006-07-13 08:24:20 +00004714