blob: 709611c10f4eeb4824df4e01273d8e5958e6353c [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 Walkin4a4543f2006-10-13 12:37:39 +0000526#define YYLAST 824
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 Walkin4a4543f2006-10-13 12:37:39 +0000531#define YYNNTS 120
Lev Walkin418298d2006-07-13 08:24:20 +0000532/* YYNRULES -- Number of rules. */
Lev Walkin4a4543f2006-10-13 12:37:39 +0000533#define YYNRULES 306
Lev Walkin418298d2006-07-13 08:24:20 +0000534/* YYNRULES -- Number of states. */
Lev Walkin4a4543f2006-10-13 12:37:39 +0000535#define YYNSTATES 465
Lev Walkin418298d2006-07-13 08:24:20 +0000536
537/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
538#define YYUNDEFTOK 2
Lev Walkinadf863f2006-09-05 16:18:34 +0000539#define YYMAXUTOK 360
Lev Walkin418298d2006-07-13 08:24:20 +0000540
541#define YYTRANSLATE(X) \
542 ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
543
544/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
545static const unsigned char yytranslate[] =
546{
547 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
548 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
549 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinadf863f2006-09-05 16:18:34 +0000550 2, 2, 2, 117, 2, 2, 2, 2, 2, 2,
551 110, 111, 2, 2, 113, 2, 118, 2, 2, 2,
552 2, 2, 2, 2, 2, 2, 2, 2, 114, 112,
553 119, 2, 2, 2, 120, 2, 2, 2, 2, 2,
Lev Walkin418298d2006-07-13 08:24:20 +0000554 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
555 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinadf863f2006-09-05 16:18:34 +0000556 2, 115, 2, 116, 102, 2, 2, 2, 2, 2,
Lev Walkin418298d2006-07-13 08:24:20 +0000557 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
558 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Lev Walkinadf863f2006-09-05 16:18:34 +0000559 2, 2, 2, 108, 104, 109, 2, 2, 2, 2,
Lev Walkin418298d2006-07-13 08:24:20 +0000560 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
561 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
562 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
563 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
564 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
565 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
566 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
567 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
568 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
569 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
570 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
571 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
572 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
573 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
574 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
575 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
576 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
577 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
578 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
579 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
580 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
581 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
Lev Walkinadf863f2006-09-05 16:18:34 +0000582 95, 96, 97, 98, 99, 100, 101, 103, 105, 106,
583 107
Lev Walkin418298d2006-07-13 08:24:20 +0000584};
585
586#if YYDEBUG
587/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
588 YYRHS. */
589static const unsigned short yyprhs[] =
590{
Lev Walkina9532f42006-09-17 04:52:50 +0000591 0, 0, 3, 5, 7, 10, 11, 21, 22, 24,
592 28, 31, 33, 36, 38, 43, 45, 46, 48, 50,
593 53, 56, 59, 62, 65, 68, 69, 71, 75, 77,
594 80, 82, 84, 86, 87, 91, 93, 94, 96, 100,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000595 103, 104, 106, 108, 111, 112, 114, 119, 121, 125,
596 127, 131, 133, 134, 136, 140, 144, 147, 149, 153,
597 155, 159, 161, 165, 170, 172, 174, 179, 183, 187,
598 194, 201, 203, 207, 209, 213, 217, 221, 225, 227,
599 231, 233, 235, 237, 239, 240, 242, 244, 248, 252,
600 255, 259, 261, 263, 267, 270, 272, 274, 280, 281,
601 283, 285, 289, 292, 297, 301, 305, 309, 313, 317,
602 318, 320, 321, 328, 330, 333, 335, 337, 339, 343,
603 345, 349, 353, 357, 358, 361, 363, 368, 373, 378,
604 385, 392, 394, 399, 403, 405, 409, 413, 417, 419,
605 423, 425, 429, 431, 433, 435, 437, 441, 445, 447,
606 452, 454, 456, 460, 461, 465, 467, 469, 471, 473,
607 475, 477, 479, 481, 485, 487, 489, 491, 493, 496,
608 498, 500, 502, 504, 507, 510, 512, 514, 517, 520,
609 522, 524, 526, 528, 530, 533, 535, 538, 540, 542,
610 544, 546, 548, 550, 552, 554, 556, 558, 560, 562,
611 564, 566, 568, 570, 572, 574, 575, 577, 579, 583,
612 585, 590, 594, 599, 601, 603, 607, 613, 615, 619,
613 621, 625, 627, 631, 633, 637, 642, 646, 648, 650,
614 654, 658, 662, 666, 668, 670, 672, 674, 676, 678,
615 680, 682, 684, 688, 694, 696, 700, 702, 706, 707,
616 709, 711, 713, 715, 717, 719, 721, 722, 728, 731,
617 733, 736, 739, 743, 745, 747, 751, 756, 758, 762,
618 765, 769, 771, 775, 776, 778, 780, 783, 786, 790,
619 792, 796, 798, 803, 808, 810, 812, 814, 816, 818,
620 820, 821, 823, 826, 831, 832, 834, 836, 838, 839,
621 841, 843, 845, 847, 849, 850, 852
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 Walkin4a4543f2006-10-13 12:37:39 +0000628 -1, 237, 125, 126, 39, 130, 3, 26, 133, 44,
Lev Walkina9532f42006-09-17 04:52:50 +0000629 -1, -1, 127, -1, 108, 128, 109, -1, 108, 109,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000630 -1, 129, -1, 128, 129, -1, 240, -1, 240, 110,
Lev Walkina9532f42006-09-17 04:52:50 +0000631 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,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000634 -1, 146, 138, 135, -1, 136, -1, 135, 136, -1,
635 153, -1, 183, -1, 151, -1, -1, 43, 16, 137,
636 -1, 193, -1, -1, 139, -1, 59, 140, 112, -1,
637 59, 51, -1, -1, 141, -1, 143, -1, 141, 143,
638 -1, -1, 127, -1, 144, 51, 237, 142, -1, 145,
639 -1, 144, 113, 145, -1, 237, -1, 237, 108, 109,
640 -1, 240, -1, -1, 147, -1, 47, 148, 112, -1,
641 47, 22, 112, -1, 47, 112, -1, 149, -1, 148,
642 113, 149, -1, 237, -1, 237, 108, 109, -1, 240,
643 -1, 108, 200, 109, -1, 237, 152, 3, 150, -1,
644 192, -1, 177, -1, 177, 108, 156, 109, -1, 237,
645 3, 173, -1, 237, 3, 163, -1, 237, 108, 154,
646 109, 3, 173, -1, 237, 108, 154, 109, 3, 163,
647 -1, 155, -1, 154, 113, 155, -1, 237, -1, 237,
648 114, 240, -1, 237, 114, 237, -1, 190, 114, 240,
649 -1, 190, 114, 237, -1, 157, -1, 156, 113, 157,
650 -1, 173, -1, 186, -1, 240, -1, 150, -1, -1,
651 159, -1, 160, -1, 159, 113, 160, -1, 240, 173,
652 225, -1, 173, 225, -1, 35, 73, 173, -1, 172,
653 -1, 162, -1, 161, 113, 162, -1, 240, 173, -1,
654 172, -1, 173, -1, 33, 108, 165, 109, 167, -1,
655 -1, 93, -1, 166, -1, 165, 113, 166, -1, 17,
656 225, -1, 18, 173, 164, 225, -1, 18, 181, 225,
657 -1, 18, 182, 225, -1, 17, 181, 225, -1, 17,
658 173, 225, -1, 17, 182, 225, -1, -1, 168, -1,
659 -1, 100, 87, 108, 169, 170, 109, -1, 171, -1,
660 170, 171, -1, 4, -1, 19, -1, 180, -1, 115,
661 170, 116, -1, 107, -1, 107, 117, 187, -1, 107,
662 117, 230, -1, 232, 175, 196, -1, -1, 174, 176,
663 -1, 152, -1, 32, 108, 161, 109, -1, 83, 108,
664 158, 109, -1, 84, 108, 158, 109, -1, 83, 196,
665 73, 239, 232, 175, -1, 84, 196, 73, 239, 232,
666 175, -1, 23, -1, 23, 40, 30, 240, -1, 61,
667 73, 177, -1, 15, -1, 15, 118, 237, -1, 238,
668 118, 237, -1, 15, 118, 240, -1, 238, -1, 238,
669 118, 178, -1, 179, -1, 178, 118, 179, -1, 180,
670 -1, 17, -1, 18, -1, 17, -1, 181, 118, 17,
671 -1, 181, 118, 18, -1, 16, -1, 240, 152, 3,
672 184, -1, 186, -1, 187, -1, 240, 114, 184, -1,
673 -1, 108, 185, 189, -1, 68, -1, 50, -1, 91,
674 -1, 6, -1, 8, -1, 188, -1, 230, -1, 240,
675 -1, 237, 118, 240, -1, 7, -1, 13, -1, 14,
676 -1, 5, -1, 189, 5, -1, 29, -1, 68, -1,
677 81, -1, 191, -1, 72, 86, -1, 70, 56, -1,
678 82, -1, 49, -1, 41, 76, -1, 31, 86, -1,
679 96, -1, 52, -1, 193, -1, 63, -1, 45, -1,
680 27, 86, -1, 190, -1, 191, 227, -1, 28, -1,
681 53, -1, 54, -1, 55, -1, 64, -1, 69, -1,
682 79, -1, 88, -1, 90, -1, 95, -1, 97, -1,
683 98, -1, 99, -1, 71, -1, 104, -1, 105, -1,
684 102, -1, 103, -1, -1, 197, -1, 198, -1, 110,
685 214, 111, -1, 199, -1, 85, 110, 200, 111, -1,
686 110, 200, 111, -1, 199, 110, 200, 111, -1, 107,
687 -1, 201, -1, 201, 113, 107, -1, 201, 113, 107,
688 113, 201, -1, 202, -1, 22, 101, 205, -1, 203,
689 -1, 202, 194, 203, -1, 204, -1, 203, 195, 204,
690 -1, 205, -1, 205, 101, 205, -1, 206, 110, 200,
691 111, -1, 110, 200, 111, -1, 207, -1, 208, -1,
692 207, 218, 207, -1, 66, 218, 207, -1, 207, 218,
693 65, -1, 66, 218, 65, -1, 209, -1, 85, -1,
694 51, -1, 50, -1, 91, -1, 231, -1, 188, -1,
695 240, -1, 237, -1, 100, 34, 199, -1, 100, 35,
696 108, 210, 109, -1, 211, -1, 210, 113, 211, -1,
697 107, -1, 240, 196, 212, -1, -1, 213, -1, 78,
698 -1, 20, -1, 74, -1, 215, -1, 219, -1, 217,
699 -1, -1, 36, 30, 108, 216, 189, -1, 37, 173,
700 -1, 106, -1, 106, 119, -1, 119, 106, -1, 119,
701 106, 119, -1, 220, -1, 221, -1, 108, 237, 109,
702 -1, 220, 108, 222, 109, -1, 223, -1, 222, 113,
703 223, -1, 120, 224, -1, 120, 118, 224, -1, 240,
704 -1, 224, 118, 240, -1, -1, 226, -1, 74, -1,
705 38, 184, -1, 108, 109, -1, 108, 228, 109, -1,
706 229, -1, 228, 113, 229, -1, 240, -1, 240, 110,
707 230, 111, -1, 240, 110, 187, 111, -1, 230, -1,
708 107, -1, 10, -1, 11, -1, 230, -1, 12, -1,
709 -1, 233, -1, 234, 236, -1, 115, 235, 10, 116,
710 -1, -1, 94, -1, 24, -1, 80, -1, -1, 57,
711 -1, 46, -1, 15, -1, 16, -1, 16, -1, -1,
712 240, -1, 9, -1
Lev Walkin418298d2006-07-13 08:24:20 +0000713};
714
715/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
716static const unsigned short yyrline[] =
717{
Lev Walkin4a4543f2006-10-13 12:37:39 +0000718 0, 353, 353, 359, 365, 382, 381, 410, 412, 415,
719 419, 424, 431, 439, 444, 448, 457, 459, 467, 471,
720 479, 483, 486, 489, 493, 513, 515, 523, 532, 536,
721 551, 559, 572, 580, 579, 593, 605, 607, 609, 620,
722 625, 627, 629, 635, 641, 643, 646, 657, 663, 669,
723 676, 682, 691, 693, 704, 708, 711, 718, 724, 730,
724 737, 743, 752, 754, 764, 778, 788, 804, 814, 830,
725 836, 843, 853, 863, 868, 875, 882, 890, 900, 906,
726 912, 916, 924, 935, 957, 959, 961, 967, 973, 981,
727 987, 994, 999, 1005, 1011, 1017, 1020, 1026, 1036, 1038,
728 1041, 1049, 1056, 1069, 1080, 1090, 1101, 1111, 1122, 1133,
729 1135, 1142, 1140, 1149, 1154, 1160, 1165, 1168, 1172, 1177,
730 1186, 1195, 1206, 1228, 1235, 1254, 1258, 1264, 1270, 1276,
731 1286, 1296, 1302, 1313, 1327, 1336, 1346, 1356, 1366, 1374,
732 1395, 1404, 1413, 1415, 1422, 1429, 1435, 1439, 1445, 1465,
733 1475, 1477, 1478, 1485, 1485, 1490, 1497, 1503, 1508, 1512,
734 1516, 1519, 1524, 1536, 1553, 1558, 1563, 1596, 1606, 1620,
735 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631,
736 1632, 1633, 1639, 1641, 1642, 1645, 1652, 1664, 1666, 1670,
737 1674, 1675, 1676, 1677, 1678, 1682, 1683, 1684, 1685, 1689,
738 1690, 1697, 1697, 1698, 1698, 1700, 1702, 1707, 1709, 1714,
739 1718, 1727, 1731, 1736, 1741, 1744, 1750, 1760, 1762, 1767,
740 1769, 1774, 1776, 1782, 1784, 1789, 1798, 1806, 1812, 1818,
741 1825, 1833, 1841, 1850, 1855, 1859, 1864, 1870, 1875, 1876,
742 1877, 1890, 1904, 1908, 1913, 1917, 1922, 1929, 1942, 1944,
743 1947, 1951, 1954, 1961, 1963, 1964, 1969, 1967, 1979, 1987,
744 1989, 1990, 1991, 1993, 1997, 2005, 2020, 2026, 2033, 2046,
745 2058, 2073, 2077, 2094, 2099, 2102, 2107, 2129, 2134, 2139,
746 2145, 2151, 2159, 2167, 2175, 2182, 2192, 2197, 2203, 2205,
747 2235, 2237, 2240, 2247, 2253, 2255, 2256, 2257, 2260, 2262,
748 2263, 2266, 2271, 2278, 2285, 2287, 2292
Lev Walkin418298d2006-07-13 08:24:20 +0000749};
750#endif
751
752#if YYDEBUG || YYERROR_VERBOSE
753/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
754 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
755static const char *const yytname[] =
756{
757 "$end", "error", "$undefined", "TOK_PPEQ", "TOK_whitespace", "TOK_opaque",
758 "TOK_bstring", "TOK_cstring", "TOK_hstring", "TOK_identifier",
Lev Walkinadf863f2006-09-05 16:18:34 +0000759 "TOK_number", "TOK_number_negative", "TOK_realnumber", "TOK_tuple",
760 "TOK_quadruple", "TOK_typereference", "TOK_capitalreference",
761 "TOK_typefieldreference", "TOK_valuefieldreference", "TOK_Literal",
762 "TOK_ABSENT", "TOK_ABSTRACT_SYNTAX", "TOK_ALL", "TOK_ANY",
763 "TOK_APPLICATION", "TOK_AUTOMATIC", "TOK_BEGIN", "TOK_BIT",
764 "TOK_BMPString", "TOK_BOOLEAN", "TOK_BY", "TOK_CHARACTER", "TOK_CHOICE",
765 "TOK_CLASS", "TOK_COMPONENT", "TOK_COMPONENTS", "TOK_CONSTRAINED",
766 "TOK_CONTAINING", "TOK_DEFAULT", "TOK_DEFINITIONS", "TOK_DEFINED",
767 "TOK_EMBEDDED", "TOK_ENCODED", "TOK_ENCODING_CONTROL", "TOK_END",
768 "TOK_ENUMERATED", "TOK_EXPLICIT", "TOK_EXPORTS", "TOK_EXTENSIBILITY",
769 "TOK_EXTERNAL", "TOK_FALSE", "TOK_FROM", "TOK_GeneralizedTime",
770 "TOK_GeneralString", "TOK_GraphicString", "TOK_IA5String",
771 "TOK_IDENTIFIER", "TOK_IMPLICIT", "TOK_IMPLIED", "TOK_IMPORTS",
772 "TOK_INCLUDES", "TOK_INSTANCE", "TOK_INSTRUCTIONS", "TOK_INTEGER",
773 "TOK_ISO646String", "TOK_MAX", "TOK_MIN", "TOK_MINUS_INFINITY",
774 "TOK_NULL", "TOK_NumericString", "TOK_OBJECT", "TOK_ObjectDescriptor",
775 "TOK_OCTET", "TOK_OF", "TOK_OPTIONAL", "TOK_PATTERN", "TOK_PDV",
776 "TOK_PLUS_INFINITY", "TOK_PRESENT", "TOK_PrintableString",
777 "TOK_PRIVATE", "TOK_REAL", "TOK_RELATIVE_OID", "TOK_SEQUENCE",
778 "TOK_SET", "TOK_SIZE", "TOK_STRING", "TOK_SYNTAX", "TOK_T61String",
779 "TOK_TAGS", "TOK_TeletexString", "TOK_TRUE", "TOK_TYPE_IDENTIFIER",
780 "TOK_UNIQUE", "TOK_UNIVERSAL", "TOK_UniversalString", "TOK_UTCTime",
781 "TOK_UTF8String", "TOK_VideotexString", "TOK_VisibleString", "TOK_WITH",
782 "TOK_EXCEPT", "'^'", "TOK_INTERSECTION", "'|'", "TOK_UNION",
783 "TOK_TwoDots", "TOK_ThreeDots", "'{'", "'}'", "'('", "')'", "';'",
784 "','", "':'", "'['", "']'", "'!'", "'.'", "'<'", "'@'", "$accept",
Lev Walkina9532f42006-09-17 04:52:50 +0000785 "ParsedGrammar", "ModuleList", "ModuleDefinition", "@1",
Lev Walkinadf863f2006-09-05 16:18:34 +0000786 "optObjectIdentifier", "ObjectIdentifier", "ObjectIdentifierBody",
Lev Walkin866bd7f2006-09-14 10:35:20 +0000787 "ObjectIdentifierElement", "optModuleDefinitionFlags",
788 "ModuleDefinitionFlags", "ModuleDefinitionFlag", "optModuleBody",
Lev Walkina9532f42006-09-17 04:52:50 +0000789 "ModuleBody", "AssignmentList", "Assignment", "@2", "optImports",
Lev Walkin4a4543f2006-10-13 12:37:39 +0000790 "ImportsDefinition", "optImportsBundleSet", "ImportsBundleSet",
791 "AssignedIdentifier", "ImportsBundle", "ImportsList", "ImportsElement",
792 "optExports", "ExportsDefinition", "ExportsBody", "ExportsElement",
793 "ValueSet", "ValueSetTypeAssignment", "DefinedType",
794 "DataTypeReference", "ParameterArgumentList", "ParameterArgumentName",
795 "ActualParameterList", "ActualParameter", "optComponentTypeLists",
796 "ComponentTypeLists", "ComponentType", "AlternativeTypeLists",
797 "AlternativeType", "ObjectClass", "optUnique", "FieldSpec",
798 "ClassField", "optWithSyntax", "WithSyntax", "@3", "WithSyntaxList",
799 "WithSyntaxToken", "ExtensionAndException", "Type",
800 "NSTD_IndirectMarker", "TypeDeclaration", "TypeDeclarationSet",
801 "ComplexTypeReference", "ComplexTypeReferenceAmpList",
802 "ComplexTypeReferenceElement", "PrimitiveFieldReference", "FieldName",
803 "DefinedObjectClass", "ValueDefinition", "Value", "@4", "SimpleValue",
804 "DefinedValue", "RestrictedCharacterStringValue", "Opaque",
805 "BasicTypeId", "BasicTypeId_UniverationCompatible", "BasicType",
806 "BasicString", "UnionMark", "IntersectionMark", "optConstraints",
807 "Constraint", "SubtypeConstraint", "SetOfConstraints",
808 "ElementSetSpecs", "ElementSetSpec", "Unions", "Intersections",
809 "IntersectionElements", "ConstraintSubtypeElement", "ConstraintSpec",
810 "SingleValue", "ContainedSubtype", "InnerTypeConstraint",
811 "WithComponentsList", "WithComponentsElement", "optPresenceConstraint",
812 "PresenceConstraint", "GeneralConstraint", "UserDefinedConstraint",
813 "@5", "ContentsConstraint", "ConstraintRangeSpec", "TableConstraint",
Lev Walkin418298d2006-07-13 08:24:20 +0000814 "SimpleTableConstraint", "ComponentRelationConstraint",
815 "AtNotationList", "AtNotationElement", "ComponentIdList", "optMarker",
816 "Marker", "UniverationDefinition", "UniverationList",
Lev Walkinadf863f2006-09-05 16:18:34 +0000817 "UniverationElement", "SignedNumber", "RealValue", "optTag", "Tag",
818 "TagTypeValue", "TagClass", "TagPlicit", "TypeRefName",
819 "ObjectClassReference", "optIdentifier", "Identifier", 0
Lev Walkin418298d2006-07-13 08:24:20 +0000820};
821#endif
822
823# ifdef YYPRINT
824/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
825 token YYLEX-NUM. */
826static const unsigned short yytoknum[] =
827{
828 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
829 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
830 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
831 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
832 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
833 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
834 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
835 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
836 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
837 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
Lev Walkinadf863f2006-09-05 16:18:34 +0000838 355, 356, 94, 357, 124, 358, 359, 360, 123, 125,
839 40, 41, 59, 44, 58, 91, 93, 33, 46, 60,
840 64
Lev Walkin418298d2006-07-13 08:24:20 +0000841};
842# endif
843
844/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
845static const unsigned char yyr1[] =
846{
Lev Walkina9532f42006-09-17 04:52:50 +0000847 0, 121, 122, 123, 123, 125, 124, 126, 126, 127,
848 127, 128, 128, 129, 129, 129, 130, 130, 131, 131,
849 132, 132, 132, 132, 132, 133, 133, 134, 135, 135,
850 136, 136, 136, 137, 136, 136, 138, 138, 139, 139,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000851 140, 140, 141, 141, 142, 142, 143, 144, 144, 145,
852 145, 145, 146, 146, 147, 147, 147, 148, 148, 149,
853 149, 149, 150, 151, 152, 152, 152, 153, 153, 153,
854 153, 154, 154, 155, 155, 155, 155, 155, 156, 156,
855 157, 157, 157, 157, 158, 158, 159, 159, 160, 160,
856 160, 160, 161, 161, 162, 162, 162, 163, 164, 164,
857 165, 165, 166, 166, 166, 166, 166, 166, 166, 167,
858 167, 169, 168, 170, 170, 171, 171, 171, 171, 172,
859 172, 172, 173, 174, 175, 176, 176, 176, 176, 176,
860 176, 176, 176, 176, 177, 177, 177, 177, 177, 177,
861 178, 178, 179, 180, 180, 181, 181, 181, 182, 183,
862 184, 184, 184, 185, 184, 184, 186, 186, 186, 186,
863 186, 186, 187, 187, 188, 188, 188, 189, 189, 190,
864 190, 190, 190, 190, 190, 190, 190, 190, 190, 190,
865 190, 190, 191, 191, 191, 192, 192, 193, 193, 193,
866 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
Lev Walkinf1727152006-09-21 01:50:37 +0000867 193, 194, 194, 195, 195, 196, 196, 197, 197, 198,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000868 198, 199, 199, 200, 200, 200, 200, 201, 201, 202,
869 202, 203, 203, 204, 204, 205, 205, 205, 205, 205,
870 205, 205, 205, 205, 206, 206, 207, 207, 207, 207,
871 207, 208, 209, 209, 210, 210, 211, 211, 212, 212,
872 213, 213, 213, 214, 214, 214, 216, 215, 217, 218,
873 218, 218, 218, 219, 219, 220, 221, 222, 222, 223,
Lev Walkinf1727152006-09-21 01:50:37 +0000874 223, 224, 224, 225, 225, 226, 226, 227, 227, 228,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000875 228, 229, 229, 229, 229, 229, 230, 230, 231, 231,
876 232, 232, 233, 234, 235, 235, 235, 235, 236, 236,
877 236, 237, 237, 238, 239, 239, 240
Lev Walkin418298d2006-07-13 08:24:20 +0000878};
879
880/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
881static const unsigned char yyr2[] =
882{
Lev Walkina9532f42006-09-17 04:52:50 +0000883 0, 2, 1, 1, 2, 0, 9, 0, 1, 3,
884 2, 1, 2, 1, 4, 1, 0, 1, 1, 2,
885 2, 2, 2, 2, 2, 0, 1, 3, 1, 2,
886 1, 1, 1, 0, 3, 1, 0, 1, 3, 2,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000887 0, 1, 1, 2, 0, 1, 4, 1, 3, 1,
888 3, 1, 0, 1, 3, 3, 2, 1, 3, 1,
889 3, 1, 3, 4, 1, 1, 4, 3, 3, 6,
890 6, 1, 3, 1, 3, 3, 3, 3, 1, 3,
891 1, 1, 1, 1, 0, 1, 1, 3, 3, 2,
892 3, 1, 1, 3, 2, 1, 1, 5, 0, 1,
893 1, 3, 2, 4, 3, 3, 3, 3, 3, 0,
894 1, 0, 6, 1, 2, 1, 1, 1, 3, 1,
895 3, 3, 3, 0, 2, 1, 4, 4, 4, 6,
896 6, 1, 4, 3, 1, 3, 3, 3, 1, 3,
897 1, 3, 1, 1, 1, 1, 3, 3, 1, 4,
898 1, 1, 3, 0, 3, 1, 1, 1, 1, 1,
899 1, 1, 1, 3, 1, 1, 1, 1, 2, 1,
900 1, 1, 1, 2, 2, 1, 1, 2, 2, 1,
901 1, 1, 1, 1, 2, 1, 2, 1, 1, 1,
Lev Walkin418298d2006-07-13 08:24:20 +0000902 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000903 1, 1, 1, 1, 1, 0, 1, 1, 3, 1,
904 4, 3, 4, 1, 1, 3, 5, 1, 3, 1,
905 3, 1, 3, 1, 3, 4, 3, 1, 1, 3,
906 3, 3, 3, 1, 1, 1, 1, 1, 1, 1,
907 1, 1, 3, 5, 1, 3, 1, 3, 0, 1,
908 1, 1, 1, 1, 1, 1, 0, 5, 2, 1,
909 2, 2, 3, 1, 1, 3, 4, 1, 3, 2,
910 3, 1, 3, 0, 1, 1, 2, 2, 3, 1,
911 3, 1, 4, 4, 1, 1, 1, 1, 1, 1,
912 0, 1, 2, 4, 0, 1, 1, 1, 0, 1,
913 1, 1, 1, 1, 0, 1, 1
Lev Walkin418298d2006-07-13 08:24:20 +0000914};
915
916/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
917 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
918 means the default is an error. */
919static const unsigned short yydefact[] =
920{
Lev Walkin4a4543f2006-10-13 12:37:39 +0000921 0, 301, 302, 0, 2, 3, 5, 1, 4, 7,
922 0, 0, 8, 306, 15, 10, 0, 11, 13, 16,
Lev Walkina9532f42006-09-17 04:52:50 +0000923 9, 12, 0, 0, 0, 0, 0, 0, 0, 17,
924 18, 0, 24, 22, 20, 23, 21, 0, 19, 14,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000925 52, 0, 0, 26, 36, 53, 0, 56, 0, 57,
926 59, 61, 6, 40, 0, 37, 55, 54, 0, 0,
927 39, 0, 41, 42, 0, 47, 49, 51, 187, 0,
928 188, 189, 190, 191, 192, 200, 193, 194, 195, 196,
929 197, 198, 199, 27, 28, 32, 30, 31, 35, 0,
930 0, 58, 60, 38, 43, 0, 0, 0, 33, 29,
931 290, 134, 303, 0, 169, 0, 0, 183, 176, 180,
932 182, 170, 0, 0, 171, 175, 179, 0, 0, 65,
933 185, 172, 64, 181, 138, 0, 44, 48, 50, 34,
934 0, 294, 68, 67, 123, 291, 298, 0, 184, 178,
935 177, 174, 173, 0, 71, 0, 172, 73, 0, 290,
936 0, 186, 0, 0, 45, 46, 0, 296, 297, 295,
937 0, 0, 205, 300, 299, 292, 135, 137, 0, 0,
938 0, 0, 0, 63, 158, 164, 159, 286, 287, 165,
939 166, 156, 157, 83, 0, 78, 80, 81, 160, 161,
940 82, 285, 277, 0, 279, 284, 281, 143, 144, 139,
941 140, 142, 136, 155, 153, 149, 150, 151, 0, 162,
942 290, 290, 0, 100, 0, 131, 0, 0, 205, 205,
943 125, 124, 0, 0, 122, 206, 207, 209, 290, 72,
944 77, 76, 75, 74, 289, 0, 236, 235, 0, 234,
945 237, 0, 213, 0, 239, 0, 214, 217, 219, 221,
946 223, 0, 227, 228, 233, 288, 238, 241, 240, 66,
947 290, 278, 0, 0, 0, 0, 0, 0, 148, 145,
948 0, 275, 273, 273, 273, 102, 274, 98, 273, 273,
949 109, 0, 293, 0, 290, 0, 290, 0, 290, 0,
950 0, 0, 290, 0, 0, 0, 253, 255, 254, 263,
951 264, 0, 70, 69, 0, 259, 0, 0, 0, 0,
952 0, 62, 0, 201, 202, 0, 203, 204, 0, 0,
953 0, 0, 79, 280, 0, 0, 162, 141, 167, 154,
954 163, 152, 276, 107, 0, 106, 108, 99, 273, 104,
955 105, 0, 97, 110, 101, 0, 119, 0, 92, 95,
956 96, 290, 133, 0, 0, 85, 86, 91, 273, 290,
957 304, 0, 304, 0, 0, 258, 0, 211, 208, 0,
958 0, 218, 260, 261, 232, 230, 0, 242, 0, 226,
959 215, 220, 222, 224, 0, 231, 229, 283, 282, 168,
960 146, 147, 103, 0, 132, 0, 126, 290, 94, 290,
961 127, 290, 89, 273, 290, 305, 128, 290, 210, 256,
962 265, 0, 0, 267, 212, 262, 246, 0, 244, 205,
963 0, 225, 111, 120, 121, 93, 90, 87, 88, 123,
964 123, 0, 0, 269, 271, 266, 0, 243, 0, 248,
965 216, 0, 129, 130, 257, 270, 0, 268, 245, 251,
966 252, 250, 247, 249, 115, 116, 0, 0, 113, 117,
967 272, 0, 112, 114, 118
Lev Walkin418298d2006-07-13 08:24:20 +0000968};
969
970/* YYDEFGOTO[NTERM-NUM]. */
971static const short yydefgoto[] =
972{
Lev Walkina9532f42006-09-17 04:52:50 +0000973 -1, 3, 4, 5, 9, 11, 12, 16, 17, 28,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000974 29, 30, 42, 43, 83, 84, 129, 54, 55, 61,
975 62, 155, 63, 64, 65, 44, 45, 48, 49, 183,
976 85, 118, 86, 143, 144, 184, 185, 354, 355, 356,
977 347, 348, 132, 338, 212, 213, 342, 343, 441, 457,
978 458, 357, 358, 161, 162, 221, 119, 199, 200, 459,
979 273, 274, 87, 205, 265, 206, 207, 244, 329, 120,
980 121, 122, 123, 315, 318, 224, 225, 226, 227, 294,
981 246, 247, 248, 249, 250, 251, 252, 253, 254, 417,
982 418, 452, 453, 295, 296, 431, 297, 307, 298, 299,
983 300, 412, 413, 433, 275, 276, 151, 193, 194, 255,
984 256, 134, 135, 136, 160, 165, 257, 124, 404, 258
Lev Walkin418298d2006-07-13 08:24:20 +0000985};
986
987/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
988 STATE-NUM. */
Lev Walkin4a4543f2006-10-13 12:37:39 +0000989#define YYPACT_NINF -274
Lev Walkin418298d2006-07-13 08:24:20 +0000990static const short yypact[] =
991{
Lev Walkin4a4543f2006-10-13 12:37:39 +0000992 77, -274, -274, 33, 77, -274, -274, -274, -274, -52,
993 8, 107, -274, -274, -274, -274, 36, -274, 42, 267,
994 -274, -274, 149, 20, 79, 96, 132, 111, 208, 267,
995 -274, 105, -274, -274, -274, -274, -274, 220, -274, -274,
996 69, 72, 193, -274, 213, -274, 158, -274, 117, -274,
997 178, -274, -274, 183, 478, -274, -274, -274, 266, 182,
998 -274, 181, 266, -274, -28, -274, 189, -274, -274, 292,
999 -274, -274, -274, -274, -274, -274, -274, -274, -274, -274,
1000 -274, -274, -274, 478, -274, -274, -274, -274, -274, 345,
1001 631, -274, -274, -274, -274, 77, 266, 201, -274, -274,
1002 -6, 194, -274, 236, -274, 248, 268, -274, -274, -274,
1003 -274, -274, 291, 263, -274, -274, -274, 707, 348, 247,
1004 -274, 251, -274, -274, 238, 354, -52, -274, -274, -274,
1005 255, 83, -274, -274, -274, -274, 55, 266, -274, -274,
1006 -274, -274, -274, -81, -274, 252, -274, 253, 257, 58,
1007 80, -274, 310, 199, -274, -274, 241, -274, -274, -274,
1008 359, 555, 10, -274, -274, -274, -274, -274, 367, 707,
1009 266, 266, 229, -274, -274, -274, -274, -274, -274, -274,
1010 -274, -274, -274, -274, 82, -274, -274, -274, -274, -274,
1011 -274, -274, -274, 88, -274, -274, 261, -274, -274, 259,
1012 -274, -274, -274, -274, -274, -274, -274, -274, 260, 265,
1013 249, 41, 119, -274, 264, 335, 273, 309, 94, 109,
1014 -274, -274, 274, 211, -274, -274, -274, 278, -6, -274,
1015 -274, -274, -274, -274, -274, 288, -274, -274, 74, -274,
1016 -274, 282, -274, 229, -274, 283, 270, 227, 235, -274,
1017 294, 293, 74, -274, -274, -274, -274, -274, -274, -274,
1018 58, -274, 40, 289, 323, 388, 393, 199, -274, -274,
1019 199, -274, 0, 32, 0, -274, -274, 311, 32, 0,
1020 305, 241, -274, 376, 71, 327, 67, 334, 67, 337,
1021 229, 381, 297, 77, 307, 308, -274, -274, -274, 312,
1022 -274, 229, -274, -274, 459, 302, 317, 469, 315, 321,
1023 319, -274, 324, -274, -274, 459, -274, -274, 459, 459,
1024 229, 733, -274, -274, 326, 336, -274, -274, -274, 427,
1025 -274, -274, -274, -274, 328, -274, -274, -274, 0, -274,
1026 -274, 347, -274, -274, -274, 393, 322, 122, -274, -274,
1027 -274, 297, -274, 365, 339, 332, -274, -274, 0, 297,
1028 393, 340, 393, 351, 338, -274, 341, -274, -274, 331,
1029 352, -274, -274, 346, -274, -274, 229, 278, 16, -274,
1030 364, 235, -274, -274, 353, -274, -274, -274, -274, -274,
1031 -274, -274, -274, 377, -274, 289, -274, 71, -274, 297,
1032 -274, 68, -274, 0, 297, -274, -274, 297, -274, -274,
1033 -274, 12, 160, -274, -274, -274, -274, 175, -274, 10,
1034 445, -274, -274, -274, -274, -274, -274, -274, -274, -274,
1035 -274, 388, 393, 366, -274, -274, 331, -274, 16, 91,
1036 -274, 43, -274, -274, 427, 366, 393, -274, -274, -274,
1037 -274, -274, -274, -274, -274, -274, 43, 22, -274, -274,
1038 -274, 18, -274, -274, -274
Lev Walkin418298d2006-07-13 08:24:20 +00001039};
1040
1041/* YYPGOTO[NTERM-NUM]. */
1042static const short yypgoto[] =
1043{
Lev Walkin4a4543f2006-10-13 12:37:39 +00001044 -274, -274, -274, 482, -274, -274, 362, -274, 473, -274,
1045 -274, 461, -274, -274, -274, 408, -274, -274, -274, -274,
1046 -274, -274, 430, -274, 401, -274, -274, -274, 440, 355,
1047 -274, -61, -274, -274, 330, -274, 240, 214, -274, 100,
1048 -274, 108, 276, -274, -274, 226, -274, -274, -274, 52,
1049 -172, -273, -96, -274, -76, -274, 228, -274, 250, -136,
1050 301, 304, -274, 39, -274, -125, -253, -119, 85, -12,
1051 -7, -274, 21, -274, -274, -216, -274, -274, 209, -165,
1052 98, -274, 205, 204, -221, -274, -140, -274, -274, -274,
1053 86, -274, -274, -274, -274, -274, -274, 271, -274, -274,
1054 -274, -274, 90, 95, -259, -274, -274, -274, 275, -141,
1055 -274, -74, -274, -274, -274, -274, 1, -274, 166, -10
Lev Walkin418298d2006-07-13 08:24:20 +00001056};
1057
1058/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
1059 positive, shift that token. If negative, reduce the rule which
1060 number is the opposite. If zero, do what YYDEFACT says.
1061 If YYTABLE_NINF, parse error. */
Lev Walkin4a4543f2006-10-13 12:37:39 +00001062#define YYTABLE_NINF -274
Lev Walkin418298d2006-07-13 08:24:20 +00001063static const short yytable[] =
1064{
Lev Walkin4a4543f2006-10-13 12:37:39 +00001065 18, 6, 287, 289, 133, 6, 18, 245, 189, 195,
1066 324, 349, 189, 333, 335, 336, 201, 13, 14, 339,
1067 340, 13, 454, 95, 187, 13, 454, 130, 168, 125,
1068 188, 51, 169, 7, 188, 197, 198, 455, 270, 197,
1069 198, 455, 50, 67, 90, 13, 14, 454, 51, 13,
1070 177, 178, 67, 186, 66, 89, 10, 268, 269, 50,
1071 197, 198, 455, 66, 174, 175, 176, 13, 177, 178,
1072 270, 179, 180, 90, 271, 88, 13, 13, 310, 392,
1073 13, 13, 32, 371, 89, 96, 67, 1, 2, 13,
1074 177, 178, 1, 2, 46, 222, 126, 66, 383, 402,
1075 220, 163, 353, 353, 88, 145, 271, 157, 181, 131,
1076 146, 449, 164, -25, 272, 277, 41, 15, 147, 189,
1077 223, 195, 325, 416, 349, 363, 189, 167, 201, 189,
1078 432, 462, 303, 456, 464, 187, 370, 456, 166, 190,
1079 196, 188, 423, 209, 428, 20, 19, 191, 188, 182,
1080 334, 188, 22, 202, 208, 384, 131, 145, 456, 31,
1081 231, 233, 146, 158, 186, 450, 172, 375, 33, 451,
1082 147, 230, 232, 131, 346, 346, -84, 159, 346, 222,
1083 305, 386, 131, 131, 47, 34, 131, 191, 350, 192,
1084 35, 259, 13, 306, 222, 260, 365, 261, 1, 2,
1085 36, 262, 286, 439, 223, 174, 175, 176, 13, 177,
1086 178, 37, 179, 180, 1, 2, 39, 288, 175, 223,
1087 13, 177, 178, 234, 179, 180, 1, 2, 280, 57,
1088 58, 396, 281, 235, 60, 397, 175, 52, 13, 177,
1089 178, 234, 179, 180, 1, 2, 40, 291, 292, 181,
1090 190, 235, 196, 326, 424, 398, 330, 209, 210, 211,
1091 209, 236, 237, 403, 208, 268, 269, 203, 208, 435,
1092 56, 208, 53, 436, 351, 13, 359, 238, 359, 236,
1093 237, 1, 2, 23, 437, 463, 59, 270, 438, 463,
1094 182, 92, 24, 93, 366, 238, 239, 97, 13, 177,
1095 178, 350, 240, 426, 1, 2, 331, 204, 98, 332,
1096 128, 241, 137, 25, 239, 26, 308, 309, 242, 293,
1097 240, 243, 138, 271, 27, 1, 2, 197, 198, 241,
1098 429, 313, 314, 430, 139, 394, 242, 316, 317, 243,
1099 197, 198, 101, 102, 140, 390, 391, 141, 100, 142,
1100 405, 148, 405, 442, 443, 149, 152, 153, -273, 150,
1101 101, 102, -273, 156, 131, 172, 170, 171, 419, 214,
1102 228, 263, 103, 68, 104, 283, 105, 264, 266, 267,
1103 282, 284, 285, 312, 290, 326, 106, 351, 301, 304,
1104 107, 359, 311, 328, 108, 319, 208, 109, 70, 71,
1105 72, 434, 13, 320, 337, 341, 345, 360, 110, 73,
1106 362, 364, 131, 111, 74, 112, 75, 113, 367, 368,
1107 369, 372, 434, 373, 76, 376, 114, 115, 419, 378,
1108 379, 380, 389, 77, 393, 78, 460, 387, 399, 395,
1109 79, 116, 80, 81, 82, 401, 409, 388, 400, 406,
1110 410, 411, 175, 117, 13, 177, 178, 234, 179, 180,
1111 1, 2, 408, 414, 421, 415, 175, 235, 13, 177,
1112 178, 234, 179, 180, 1, 2, 175, 420, 13, 177,
1113 178, 234, 179, 180, 446, 422, 8, 13, 154, 21,
1114 38, 99, 94, 1, 2, 236, 237, 127, 91, 229,
1115 322, 427, 361, 173, 302, 425, 68, 344, 461, 236,
1116 237, 238, 278, 352, 327, 279, 444, 377, 440, 236,
1117 381, 69, 382, 321, 448, 238, 447, 445, 407, 0,
1118 239, 70, 71, 72, 374, 0, 240, 323, 0, 0,
1119 0, 0, 73, 0, 239, 241, 0, 74, 0, 75,
1120 240, 0, 0, 0, 0, 243, 0, 76, 0, 241,
1121 240, 0, 0, 0, 0, 0, 77, 0, 78, 243,
1122 101, 102, 0, 79, 0, 80, 81, 82, 215, 0,
1123 0, 0, 103, 68, 104, 0, 105, 216, 0, 0,
1124 0, 0, 0, 0, 0, 0, 106, 0, 0, 0,
1125 107, 0, 0, 0, 108, 0, 0, 109, 70, 71,
1126 72, 0, 0, 0, 0, 0, 217, 0, 110, 73,
1127 0, 0, 0, 111, 74, 112, 75, 113, 0, 0,
1128 0, 0, 0, 0, 76, 0, 114, 115, 218, 219,
1129 0, 0, 0, 77, 0, 78, 101, 102, 0, 0,
1130 79, 116, 80, 81, 82, 0, 0, 0, 103, 68,
1131 104, 0, 105, 0, 0, 0, 0, 0, 0, 0,
1132 0, 0, 106, 0, 0, 0, 107, 0, 0, 0,
1133 108, 0, 0, 109, 70, 71, 72, 0, 0, 0,
1134 0, 0, 0, 0, 110, 73, 0, 0, 0, 111,
1135 74, 112, 75, 113, 0, 0, 0, 0, 0, 0,
1136 76, 0, 114, 115, 0, 0, 0, 0, 0, 77,
1137 0, 78, 1, 2, 0, 0, 79, 116, 80, 81,
1138 82, 0, 0, 0, 103, 68, 104, 0, 105, 0,
1139 175, 0, 13, 177, 178, 234, 179, 180, 106, 0,
1140 0, 0, 107, 0, 0, 0, 108, 0, 0, 109,
1141 70, 71, 72, 0, 0, 0, 0, 0, 0, 0,
1142 110, 73, 0, 0, 0, 111, 74, 112, 75, 113,
1143 0, 0, 0, 236, 0, 0, 76, 0, 114, 115,
1144 0, 0, 0, 0, 0, 77, 0, 78, 385, 0,
1145 0, 0, 79, 116, 80, 81, 82, 0, 0, 0,
1146 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1147 0, 0, 0, 0, 240
Lev Walkin418298d2006-07-13 08:24:20 +00001148};
1149
1150static const short yycheck[] =
1151{
Lev Walkin4a4543f2006-10-13 12:37:39 +00001152 10, 0, 218, 219, 100, 4, 16, 172, 149, 150,
1153 263, 284, 153, 272, 273, 274, 152, 9, 10, 278,
1154 279, 9, 4, 51, 149, 9, 4, 33, 109, 90,
1155 149, 41, 113, 0, 153, 17, 18, 19, 38, 17,
1156 18, 19, 41, 53, 54, 9, 10, 4, 58, 9,
1157 10, 11, 62, 149, 53, 54, 108, 16, 17, 58,
1158 17, 18, 19, 62, 6, 7, 8, 9, 10, 11,
1159 38, 13, 14, 83, 74, 54, 9, 9, 243, 338,
1160 9, 9, 62, 304, 83, 113, 96, 15, 16, 9,
1161 10, 11, 15, 16, 22, 85, 95, 96, 319, 358,
1162 161, 46, 35, 35, 83, 117, 74, 24, 50, 115,
1163 117, 20, 57, 44, 210, 211, 47, 109, 117, 260,
1164 110, 262, 263, 107, 397, 290, 267, 137, 264, 270,
1165 118, 109, 228, 115, 116, 260, 301, 115, 137, 149,
1166 150, 260, 395, 153, 403, 109, 39, 107, 267, 91,
1167 118, 270, 110, 152, 153, 320, 115, 169, 115, 10,
1168 170, 171, 169, 80, 260, 74, 108, 307, 89, 78,
1169 169, 170, 171, 115, 107, 107, 109, 94, 107, 85,
1170 106, 321, 115, 115, 112, 89, 115, 107, 284, 109,
1171 58, 109, 9, 119, 85, 113, 292, 109, 15, 16,
1172 89, 113, 108, 419, 110, 6, 7, 8, 9, 10,
1173 11, 3, 13, 14, 15, 16, 111, 108, 7, 110,
1174 9, 10, 11, 12, 13, 14, 15, 16, 109, 112,
1175 113, 109, 113, 22, 51, 113, 7, 44, 9, 10,
1176 11, 12, 13, 14, 15, 16, 26, 36, 37, 50,
1177 260, 22, 262, 263, 395, 351, 266, 267, 17, 18,
1178 270, 50, 51, 359, 263, 16, 17, 68, 267, 109,
1179 112, 270, 59, 113, 284, 9, 286, 66, 288, 50,
1180 51, 15, 16, 16, 109, 457, 108, 38, 113, 461,
1181 91, 109, 25, 112, 293, 66, 85, 108, 9, 10,
1182 11, 397, 91, 399, 15, 16, 267, 108, 16, 270,
1183 109, 100, 118, 46, 85, 48, 34, 35, 107, 108,
1184 91, 110, 86, 74, 57, 15, 16, 17, 18, 100,
1185 404, 104, 105, 407, 86, 345, 107, 102, 103, 110,
1186 17, 18, 15, 16, 76, 17, 18, 56, 3, 86,
1187 360, 3, 362, 429, 430, 108, 118, 3, 109, 108,
1188 15, 16, 113, 108, 115, 108, 114, 114, 378, 10,
1189 3, 110, 27, 28, 29, 40, 31, 118, 118, 114,
1190 116, 108, 73, 113, 110, 395, 41, 397, 110, 101,
1191 45, 401, 109, 5, 49, 101, 395, 52, 53, 54,
1192 55, 411, 9, 110, 93, 100, 30, 73, 63, 64,
1193 73, 30, 115, 68, 69, 70, 71, 72, 111, 111,
1194 108, 119, 432, 106, 79, 110, 81, 82, 438, 108,
1195 111, 107, 5, 88, 87, 90, 446, 111, 73, 117,
1196 95, 96, 97, 98, 99, 113, 108, 111, 109, 109,
1197 109, 120, 7, 108, 9, 10, 11, 12, 13, 14,
1198 15, 16, 111, 111, 111, 119, 7, 22, 9, 10,
1199 11, 12, 13, 14, 15, 16, 7, 113, 9, 10,
1200 11, 12, 13, 14, 118, 108, 4, 9, 126, 16,
1201 29, 83, 62, 15, 16, 50, 51, 96, 58, 169,
1202 260, 401, 288, 148, 228, 397, 28, 281, 456, 50,
1203 51, 66, 211, 285, 264, 211, 431, 308, 420, 50,
1204 315, 43, 318, 252, 438, 66, 436, 432, 362, -1,
1205 85, 53, 54, 55, 65, -1, 91, 262, -1, -1,
1206 -1, -1, 64, -1, 85, 100, -1, 69, -1, 71,
1207 91, -1, -1, -1, -1, 110, -1, 79, -1, 100,
1208 91, -1, -1, -1, -1, -1, 88, -1, 90, 110,
1209 15, 16, -1, 95, -1, 97, 98, 99, 23, -1,
1210 -1, -1, 27, 28, 29, -1, 31, 32, -1, -1,
Lev Walkina9532f42006-09-17 04:52:50 +00001211 -1, -1, -1, -1, -1, -1, 41, -1, -1, -1,
Lev Walkin866bd7f2006-09-14 10:35:20 +00001212 45, -1, -1, -1, 49, -1, -1, 52, 53, 54,
Lev Walkin4a4543f2006-10-13 12:37:39 +00001213 55, -1, -1, -1, -1, -1, 61, -1, 63, 64,
Lev Walkin866bd7f2006-09-14 10:35:20 +00001214 -1, -1, -1, 68, 69, 70, 71, 72, -1, -1,
Lev Walkin4a4543f2006-10-13 12:37:39 +00001215 -1, -1, -1, -1, 79, -1, 81, 82, 83, 84,
Lev Walkinf1727152006-09-21 01:50:37 +00001216 -1, -1, -1, 88, -1, 90, 15, 16, -1, -1,
1217 95, 96, 97, 98, 99, -1, -1, -1, 27, 28,
1218 29, -1, 31, -1, -1, -1, -1, -1, -1, -1,
1219 -1, -1, 41, -1, -1, -1, 45, -1, -1, -1,
1220 49, -1, -1, 52, 53, 54, 55, -1, -1, -1,
1221 -1, -1, -1, -1, 63, 64, -1, -1, -1, 68,
1222 69, 70, 71, 72, -1, -1, -1, -1, -1, -1,
1223 79, -1, 81, 82, -1, -1, -1, -1, -1, 88,
Lev Walkin4a4543f2006-10-13 12:37:39 +00001224 -1, 90, 15, 16, -1, -1, 95, 96, 97, 98,
1225 99, -1, -1, -1, 27, 28, 29, -1, 31, -1,
1226 7, -1, 9, 10, 11, 12, 13, 14, 41, -1,
1227 -1, -1, 45, -1, -1, -1, 49, -1, -1, 52,
1228 53, 54, 55, -1, -1, -1, -1, -1, -1, -1,
1229 63, 64, -1, -1, -1, 68, 69, 70, 71, 72,
1230 -1, -1, -1, 50, -1, -1, 79, -1, 81, 82,
1231 -1, -1, -1, -1, -1, 88, -1, 90, 65, -1,
1232 -1, -1, 95, 96, 97, 98, 99, -1, -1, -1,
1233 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1234 -1, -1, -1, -1, 91
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 Walkin4a4543f2006-10-13 12:37:39 +00001241 0, 15, 16, 122, 123, 124, 237, 0, 124, 125,
1242 108, 126, 127, 9, 10, 109, 128, 129, 240, 39,
Lev Walkina9532f42006-09-17 04:52:50 +00001243 109, 129, 110, 16, 25, 46, 48, 57, 130, 131,
1244 132, 10, 62, 89, 89, 58, 89, 3, 132, 111,
Lev Walkin4a4543f2006-10-13 12:37:39 +00001245 26, 47, 133, 134, 146, 147, 22, 112, 148, 149,
1246 237, 240, 44, 59, 138, 139, 112, 112, 113, 108,
1247 51, 140, 141, 143, 144, 145, 237, 240, 28, 43,
1248 53, 54, 55, 64, 69, 71, 79, 88, 90, 95,
1249 97, 98, 99, 135, 136, 151, 153, 183, 193, 237,
1250 240, 149, 109, 112, 143, 51, 113, 108, 16, 136,
1251 3, 15, 16, 27, 29, 31, 41, 45, 49, 52,
1252 63, 68, 70, 72, 81, 82, 96, 108, 152, 177,
1253 190, 191, 192, 193, 238, 152, 237, 145, 109, 137,
1254 33, 115, 163, 173, 232, 233, 234, 118, 86, 86,
1255 76, 56, 86, 154, 155, 190, 191, 237, 3, 108,
1256 108, 227, 118, 3, 127, 142, 108, 24, 80, 94,
1257 235, 174, 175, 46, 57, 236, 237, 240, 109, 113,
1258 114, 114, 108, 150, 6, 7, 8, 10, 11, 13,
1259 14, 50, 91, 150, 156, 157, 173, 186, 188, 230,
1260 240, 107, 109, 228, 229, 230, 240, 17, 18, 178,
1261 179, 180, 237, 68, 108, 184, 186, 187, 237, 240,
1262 17, 18, 165, 166, 10, 23, 32, 61, 83, 84,
1263 152, 176, 85, 110, 196, 197, 198, 199, 3, 155,
1264 237, 240, 237, 240, 12, 22, 50, 51, 66, 85,
1265 91, 100, 107, 110, 188, 200, 201, 202, 203, 204,
1266 205, 206, 207, 208, 209, 230, 231, 237, 240, 109,
1267 113, 109, 113, 110, 118, 185, 118, 114, 16, 17,
1268 38, 74, 173, 181, 182, 225, 226, 173, 181, 182,
1269 109, 113, 116, 40, 108, 73, 108, 196, 108, 196,
1270 110, 36, 37, 108, 200, 214, 215, 217, 219, 220,
1271 221, 110, 163, 173, 101, 106, 119, 218, 34, 35,
1272 200, 109, 113, 104, 105, 194, 102, 103, 195, 101,
1273 110, 218, 157, 229, 187, 230, 240, 179, 5, 189,
1274 240, 184, 184, 225, 118, 225, 225, 93, 164, 225,
1275 225, 100, 167, 168, 166, 30, 107, 161, 162, 172,
1276 173, 240, 177, 35, 158, 159, 160, 172, 173, 240,
1277 73, 158, 73, 200, 30, 173, 237, 111, 111, 108,
1278 200, 205, 119, 106, 65, 207, 110, 199, 108, 111,
1279 107, 203, 204, 205, 200, 65, 207, 111, 111, 5,
1280 17, 18, 225, 87, 240, 117, 109, 113, 173, 73,
1281 109, 113, 225, 173, 239, 240, 109, 239, 111, 108,
1282 109, 120, 222, 223, 111, 119, 107, 210, 211, 240,
1283 113, 111, 108, 187, 230, 162, 173, 160, 225, 232,
1284 232, 216, 118, 224, 240, 109, 113, 109, 113, 196,
1285 201, 169, 175, 175, 189, 224, 118, 223, 211, 20,
1286 74, 78, 212, 213, 4, 19, 115, 170, 171, 180,
1287 240, 170, 109, 171, 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 Walkin4a4543f2006-10-13 12:37:39 +00001838#line 354 "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 Walkin4a4543f2006-10-13 12:37:39 +00001845#line 360 "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 Walkin4a4543f2006-10-13 12:37:39 +00001854#line 365 "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 Walkin4a4543f2006-10-13 12:37:39 +00001862#line 382 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00001863 { currentModule = asn1p_module_new(); }
1864 break;
1865
1866 case 6:
Lev Walkin4a4543f2006-10-13 12:37:39 +00001867#line 387 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00001888#line 411 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00001893#line 412 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00001898#line 416 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00001905#line 419 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00001912#line 425 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00001922#line 431 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00001932#line 440 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00001940#line 444 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00001948#line 448 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00001956#line 458 "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 Walkin4a4543f2006-10-13 12:37:39 +00001961#line 459 "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 Walkin4a4543f2006-10-13 12:37:39 +00001968#line 468 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00001969 {
1970 yyval.a_module_flags = yyvsp[0].a_module_flags;
1971 }
1972 break;
1973
1974 case 19:
Lev Walkin4a4543f2006-10-13 12:37:39 +00001975#line 471 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00001982#line 480 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00001989#line 483 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00001996#line 486 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002003#line 489 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002010#line 493 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002029#line 514 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002034#line 515 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002041#line 524 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002051#line 533 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002058#line 536 "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 Walkin4a4543f2006-10-13 12:37:39 +00002071#line 552 "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 Walkin4a4543f2006-10-13 12:37:39 +00002082#line 559 "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 Walkin4a4543f2006-10-13 12:37:39 +00002093#line 572 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002094 {
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 Walkin4a4543f2006-10-13 12:37:39 +00002104#line 580 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002105 { asn1p_lexer_hack_push_encoding_control(); }
2106 break;
2107
2108 case 34:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002109#line 581 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002121#line 593 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002130#line 606 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002135#line 610 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002146#line 620 "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:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002153#line 626 "asn1p_y.y"
2154 { yyval.a_module = asn1p_module_new(); }
2155 break;
2156
2157 case 42:
2158#line 630 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002159 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002160 yyval.a_module = asn1p_module_new();
2161 checkmem(yyval.a_module);
2162 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin418298d2006-07-13 08:24:20 +00002163 }
2164 break;
2165
Lev Walkin4a4543f2006-10-13 12:37:39 +00002166 case 43:
2167#line 635 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002168 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002169 yyval.a_module = yyvsp[-1].a_module;
2170 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin418298d2006-07-13 08:24:20 +00002171 }
2172 break;
2173
Lev Walkin4a4543f2006-10-13 12:37:39 +00002174 case 44:
2175#line 642 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002176 { memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); }
2177 break;
2178
Lev Walkin4a4543f2006-10-13 12:37:39 +00002179 case 45:
2180#line 643 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002181 { yyval.a_aid.oid = yyvsp[0].a_oid; }
2182 break;
2183
Lev Walkin4a4543f2006-10-13 12:37:39 +00002184 case 46:
2185#line 647 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002186 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002187 yyval.a_xports = yyvsp[-3].a_xports;
2188 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
2189 yyval.a_xports->identifier = yyvsp[0].a_aid;
Lev Walkinb36317c2005-08-12 10:09:10 +00002190 /* This stupid thing is used for look-back hack. */
Lev Walkina00d6b32006-03-21 03:40:38 +00002191 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
2192 checkmem(yyval.a_xports);
Lev Walkin418298d2006-07-13 08:24:20 +00002193 }
2194 break;
2195
Lev Walkin4a4543f2006-10-13 12:37:39 +00002196 case 47:
2197#line 658 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002198 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002199 yyval.a_xports = asn1p_xports_new();
2200 checkmem(yyval.a_xports);
2201 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002202 }
2203 break;
2204
Lev Walkin4a4543f2006-10-13 12:37:39 +00002205 case 48:
2206#line 663 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002207 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002208 yyval.a_xports = yyvsp[-2].a_xports;
2209 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002210 }
2211 break;
2212
Lev Walkina9532f42006-09-17 04:52:50 +00002213 case 49:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002214#line 670 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002215 {
Lev Walkina9532f42006-09-17 04:52:50 +00002216 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002217 checkmem(yyval.a_expr);
2218 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2219 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin418298d2006-07-13 08:24:20 +00002220 }
2221 break;
2222
Lev Walkina9532f42006-09-17 04:52:50 +00002223 case 50:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002224#line 676 "asn1p_y.y"
2225 { /* Completely equivalent to above */
2226 yyval.a_expr = NEW_EXPR();
2227 checkmem(yyval.a_expr);
2228 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2229 yyval.a_expr->expr_type = A1TC_REFERENCE;
2230 }
Lev Walkin866bd7f2006-09-14 10:35:20 +00002231 break;
2232
Lev Walkina9532f42006-09-17 04:52:50 +00002233 case 51:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002234#line 682 "asn1p_y.y"
2235 {
2236 yyval.a_expr = NEW_EXPR();
2237 checkmem(yyval.a_expr);
2238 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2239 yyval.a_expr->expr_type = A1TC_REFERENCE;
2240 }
2241 break;
2242
2243 case 52:
2244#line 692 "asn1p_y.y"
2245 { yyval.a_module = 0; }
2246 break;
2247
2248 case 53:
2249#line 693 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002250 {
2251 yyval.a_module = asn1p_module_new();
2252 checkmem(yyval.a_module);
2253 if(yyvsp[0].a_xports) {
2254 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
2255 } else {
2256 /* "EXPORTS ALL;" */
2257 }
2258 }
2259 break;
2260
Lev Walkin4a4543f2006-10-13 12:37:39 +00002261 case 54:
2262#line 705 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002263 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002264 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin418298d2006-07-13 08:24:20 +00002265 }
2266 break;
2267
Lev Walkin4a4543f2006-10-13 12:37:39 +00002268 case 55:
2269#line 708 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002270 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002271 yyval.a_xports = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002272 }
2273 break;
2274
Lev Walkin4a4543f2006-10-13 12:37:39 +00002275 case 56:
2276#line 711 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002277 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002278 /* Empty EXPORTS clause effectively prohibits export. */
Lev Walkina00d6b32006-03-21 03:40:38 +00002279 yyval.a_xports = asn1p_xports_new();
2280 checkmem(yyval.a_xports);
Lev Walkin418298d2006-07-13 08:24:20 +00002281 }
2282 break;
2283
Lev Walkin4a4543f2006-10-13 12:37:39 +00002284 case 57:
2285#line 719 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002286 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002287 yyval.a_xports = asn1p_xports_new();
2288 assert(yyval.a_xports);
2289 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002290 }
2291 break;
2292
Lev Walkin4a4543f2006-10-13 12:37:39 +00002293 case 58:
2294#line 724 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002295 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002296 yyval.a_xports = yyvsp[-2].a_xports;
2297 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002298 }
2299 break;
2300
Lev Walkina9532f42006-09-17 04:52:50 +00002301 case 59:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002302#line 731 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002303 {
Lev Walkina9532f42006-09-17 04:52:50 +00002304 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002305 checkmem(yyval.a_expr);
2306 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2307 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin418298d2006-07-13 08:24:20 +00002308 }
2309 break;
2310
Lev Walkina9532f42006-09-17 04:52:50 +00002311 case 60:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002312#line 737 "asn1p_y.y"
2313 {
2314 yyval.a_expr = NEW_EXPR();
2315 checkmem(yyval.a_expr);
2316 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2317 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
2318 }
Lev Walkin418298d2006-07-13 08:24:20 +00002319 break;
2320
Lev Walkina9532f42006-09-17 04:52:50 +00002321 case 61:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002322#line 743 "asn1p_y.y"
2323 {
2324 yyval.a_expr = NEW_EXPR();
2325 checkmem(yyval.a_expr);
2326 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2327 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
2328 }
2329 break;
2330
2331 case 62:
2332#line 752 "asn1p_y.y"
2333 { yyval.a_constr = yyvsp[-1].a_constr; }
2334 break;
2335
2336 case 63:
2337#line 755 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002338 {
Lev Walkin557f27d2006-03-21 07:46:48 +00002339 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkina00d6b32006-03-21 03:40:38 +00002340 assert(yyval.a_expr->Identifier == 0);
Lev Walkin557f27d2006-03-21 07:46:48 +00002341 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
Lev Walkina00d6b32006-03-21 03:40:38 +00002342 yyval.a_expr->meta_type = AMT_VALUESET;
Lev Walkin557f27d2006-03-21 07:46:48 +00002343 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00002344 }
2345 break;
2346
Lev Walkin4a4543f2006-10-13 12:37:39 +00002347 case 64:
2348#line 765 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002349 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00002350 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002351 }
2352 break;
2353
Lev Walkin4a4543f2006-10-13 12:37:39 +00002354 case 65:
2355#line 778 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002356 {
Lev Walkina9532f42006-09-17 04:52:50 +00002357 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002358 checkmem(yyval.a_expr);
2359 yyval.a_expr->reference = yyvsp[0].a_ref;
2360 yyval.a_expr->expr_type = A1TC_REFERENCE;
2361 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin418298d2006-07-13 08:24:20 +00002362 }
2363 break;
2364
Lev Walkin4a4543f2006-10-13 12:37:39 +00002365 case 66:
2366#line 788 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002367 {
Lev Walkina9532f42006-09-17 04:52:50 +00002368 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002369 checkmem(yyval.a_expr);
Lev Walkin0c0bca62006-03-21 04:48:15 +00002370 yyval.a_expr->reference = yyvsp[-3].a_ref;
2371 yyval.a_expr->rhs_pspecs = yyvsp[-1].a_expr;
2372 yyval.a_expr->expr_type = A1TC_REFERENCE;
2373 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin418298d2006-07-13 08:24:20 +00002374 }
2375 break;
2376
Lev Walkin4a4543f2006-10-13 12:37:39 +00002377 case 67:
2378#line 808 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002379 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002380 yyval.a_expr = yyvsp[0].a_expr;
2381 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2382 assert(yyval.a_expr->expr_type);
2383 assert(yyval.a_expr->meta_type);
Lev Walkin418298d2006-07-13 08:24:20 +00002384 }
2385 break;
2386
Lev Walkin4a4543f2006-10-13 12:37:39 +00002387 case 68:
2388#line 814 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002389 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002390 yyval.a_expr = yyvsp[0].a_expr;
2391 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2392 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2393 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin418298d2006-07-13 08:24:20 +00002394 }
2395 break;
2396
Lev Walkina9532f42006-09-17 04:52:50 +00002397 case 69:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002398#line 830 "asn1p_y.y"
2399 {
2400 yyval.a_expr = yyvsp[0].a_expr;
2401 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2402 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
2403 }
2404 break;
2405
2406 case 70:
2407#line 836 "asn1p_y.y"
2408 {
2409 yyval.a_expr = yyvsp[0].a_expr;
2410 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2411 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
2412 }
2413 break;
2414
2415 case 71:
2416#line 844 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002417 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002418 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002419 yyval.a_plist = asn1p_paramlist_new(yylineno);
2420 checkmem(yyval.a_plist);
2421 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 +00002422 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002423 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2424 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin418298d2006-07-13 08:24:20 +00002425 }
2426 break;
2427
Lev Walkin4a4543f2006-10-13 12:37:39 +00002428 case 72:
2429#line 853 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002430 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002431 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002432 yyval.a_plist = yyvsp[-2].a_plist;
2433 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 +00002434 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002435 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2436 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin418298d2006-07-13 08:24:20 +00002437 }
2438 break;
2439
Lev Walkin4a4543f2006-10-13 12:37:39 +00002440 case 73:
2441#line 864 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002442 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002443 yyval.a_parg.governor = NULL;
2444 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002445 }
2446 break;
2447
Lev Walkin866bd7f2006-09-14 10:35:20 +00002448 case 74:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002449#line 868 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002450 {
2451 int ret;
2452 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkin4a4543f2006-10-13 12:37:39 +00002453 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
Lev Walkin866bd7f2006-09-14 10:35:20 +00002454 checkmem(ret == 0);
2455 yyval.a_parg.argument = yyvsp[0].tv_str;
2456 }
2457 break;
2458
2459 case 75:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002460#line 875 "asn1p_y.y"
2461 {
2462 int ret;
2463 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2464 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
2465 checkmem(ret == 0);
2466 yyval.a_parg.argument = yyvsp[0].tv_str;
2467 }
2468 break;
2469
2470 case 76:
2471#line 882 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002472 {
Lev Walkina9532f42006-09-17 04:52:50 +00002473 int ret;
2474 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2475 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2476 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2477 checkmem(ret == 0);
2478 yyval.a_parg.argument = yyvsp[0].tv_str;
2479 }
2480 break;
2481
Lev Walkin4a4543f2006-10-13 12:37:39 +00002482 case 77:
2483#line 890 "asn1p_y.y"
2484 {
2485 int ret;
2486 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2487 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2488 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2489 checkmem(ret == 0);
2490 yyval.a_parg.argument = yyvsp[0].tv_str;
2491 }
2492 break;
2493
2494 case 78:
2495#line 901 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002496 {
2497 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002498 checkmem(yyval.a_expr);
2499 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002500 }
2501 break;
2502
Lev Walkin4a4543f2006-10-13 12:37:39 +00002503 case 79:
2504#line 906 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002505 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002506 yyval.a_expr = yyvsp[-2].a_expr;
2507 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002508 }
2509 break;
2510
Lev Walkin4a4543f2006-10-13 12:37:39 +00002511 case 80:
2512#line 913 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002513 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002514 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002515 }
2516 break;
2517
Lev Walkin4a4543f2006-10-13 12:37:39 +00002518 case 81:
2519#line 916 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002520 {
Lev Walkina9532f42006-09-17 04:52:50 +00002521 yyval.a_expr = NEW_EXPR();
Lev Walkin0c0bca62006-03-21 04:48:15 +00002522 checkmem(yyval.a_expr);
2523 yyval.a_expr->Identifier = "?";
2524 yyval.a_expr->expr_type = A1TC_REFERENCE;
2525 yyval.a_expr->meta_type = AMT_VALUE;
2526 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00002527 }
2528 break;
2529
Lev Walkin4a4543f2006-10-13 12:37:39 +00002530 case 82:
2531#line 924 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002532 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002533 asn1p_ref_t *ref;
Lev Walkina9532f42006-09-17 04:52:50 +00002534 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002535 checkmem(yyval.a_expr);
2536 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2537 yyval.a_expr->expr_type = A1TC_REFERENCE;
2538 yyval.a_expr->meta_type = AMT_VALUE;
2539 ref = asn1p_ref_new(yylineno);
2540 asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2541 yyval.a_expr->value = asn1p_value_fromref(ref, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00002542 }
2543 break;
2544
Lev Walkin4a4543f2006-10-13 12:37:39 +00002545 case 83:
2546#line 935 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002547 {
Lev Walkina9532f42006-09-17 04:52:50 +00002548 yyval.a_expr = NEW_EXPR();
Lev Walkin5045dfa2006-03-21 09:41:28 +00002549 yyval.a_expr->expr_type = A1TC_VALUESET;
2550 yyval.a_expr->meta_type = AMT_VALUESET;
2551 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00002552 }
2553 break;
2554
Lev Walkin4a4543f2006-10-13 12:37:39 +00002555 case 84:
2556#line 958 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002557 { yyval.a_expr = NEW_EXPR(); }
Lev Walkin418298d2006-07-13 08:24:20 +00002558 break;
2559
Lev Walkin4a4543f2006-10-13 12:37:39 +00002560 case 85:
2561#line 959 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002562 { yyval.a_expr = yyvsp[0].a_expr; }
2563 break;
2564
Lev Walkin4a4543f2006-10-13 12:37:39 +00002565 case 86:
2566#line 962 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002567 {
Lev Walkina9532f42006-09-17 04:52:50 +00002568 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002569 checkmem(yyval.a_expr);
2570 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002571 }
2572 break;
2573
Lev Walkin4a4543f2006-10-13 12:37:39 +00002574 case 87:
2575#line 967 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002576 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002577 yyval.a_expr = yyvsp[-2].a_expr;
2578 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002579 }
2580 break;
2581
Lev Walkin4a4543f2006-10-13 12:37:39 +00002582 case 88:
2583#line 974 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002584 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002585 yyval.a_expr = yyvsp[-1].a_expr;
2586 assert(yyval.a_expr->Identifier == 0);
2587 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2588 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2589 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002590 }
2591 break;
2592
Lev Walkin4a4543f2006-10-13 12:37:39 +00002593 case 89:
2594#line 981 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002595 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002596 yyval.a_expr = yyvsp[-1].a_expr;
2597 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2598 yyval.a_expr->marker = yyvsp[0].a_marker;
2599 _fixup_anonymous_identifier(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002600 }
2601 break;
2602
Lev Walkin4a4543f2006-10-13 12:37:39 +00002603 case 90:
2604#line 987 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002605 {
Lev Walkina9532f42006-09-17 04:52:50 +00002606 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002607 checkmem(yyval.a_expr);
2608 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2609 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
2610 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002611 }
2612 break;
2613
Lev Walkin4a4543f2006-10-13 12:37:39 +00002614 case 91:
2615#line 994 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002616 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002617 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002618 }
2619 break;
2620
Lev Walkin4a4543f2006-10-13 12:37:39 +00002621 case 92:
2622#line 1000 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002623 {
Lev Walkina9532f42006-09-17 04:52:50 +00002624 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002625 checkmem(yyval.a_expr);
2626 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002627 }
2628 break;
2629
Lev Walkin4a4543f2006-10-13 12:37:39 +00002630 case 93:
2631#line 1005 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002632 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002633 yyval.a_expr = yyvsp[-2].a_expr;
2634 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002635 }
2636 break;
2637
Lev Walkin4a4543f2006-10-13 12:37:39 +00002638 case 94:
2639#line 1012 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002640 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002641 yyval.a_expr = yyvsp[0].a_expr;
2642 assert(yyval.a_expr->Identifier == 0);
2643 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002644 }
2645 break;
2646
Lev Walkin4a4543f2006-10-13 12:37:39 +00002647 case 95:
2648#line 1017 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002649 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002650 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002651 }
2652 break;
2653
Lev Walkin4a4543f2006-10-13 12:37:39 +00002654 case 96:
2655#line 1020 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002656 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002657 yyval.a_expr = yyvsp[0].a_expr;
2658 _fixup_anonymous_identifier(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002659 }
2660 break;
2661
Lev Walkin4a4543f2006-10-13 12:37:39 +00002662 case 97:
2663#line 1027 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002664 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002665 yyval.a_expr = yyvsp[-2].a_expr;
2666 checkmem(yyval.a_expr);
2667 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2668 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2669 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin418298d2006-07-13 08:24:20 +00002670 }
2671 break;
2672
Lev Walkin4a4543f2006-10-13 12:37:39 +00002673 case 98:
2674#line 1037 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002675 { yyval.a_int = 0; }
2676 break;
2677
Lev Walkin4a4543f2006-10-13 12:37:39 +00002678 case 99:
2679#line 1038 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002680 { yyval.a_int = 1; }
2681 break;
2682
Lev Walkin4a4543f2006-10-13 12:37:39 +00002683 case 100:
2684#line 1042 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002685 {
Lev Walkina9532f42006-09-17 04:52:50 +00002686 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002687 checkmem(yyval.a_expr);
2688 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2689 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2690 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002691 }
2692 break;
2693
Lev Walkin4a4543f2006-10-13 12:37:39 +00002694 case 101:
2695#line 1049 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002696 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002697 yyval.a_expr = yyvsp[-2].a_expr;
2698 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002699 }
2700 break;
2701
Lev Walkin4a4543f2006-10-13 12:37:39 +00002702 case 102:
2703#line 1059 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002704 {
Lev Walkina9532f42006-09-17 04:52:50 +00002705 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002706 checkmem(yyval.a_expr);
2707 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2708 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2709 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2710 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002711 }
2712 break;
2713
Lev Walkin4a4543f2006-10-13 12:37:39 +00002714 case 103:
2715#line 1069 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002716 {
Lev Walkina9532f42006-09-17 04:52:50 +00002717 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002718 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2719 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2720 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2721 yyval.a_expr->unique = yyvsp[-1].a_int;
2722 yyval.a_expr->marker = yyvsp[0].a_marker;
2723 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002724 }
2725 break;
2726
Lev Walkin4a4543f2006-10-13 12:37:39 +00002727 case 104:
2728#line 1080 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002729 {
Lev Walkina9532f42006-09-17 04:52:50 +00002730 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002731 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2732 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2733 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2734 yyval.a_expr->reference = yyvsp[-1].a_ref;
2735 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002736 }
2737 break;
2738
Lev Walkin4a4543f2006-10-13 12:37:39 +00002739 case 105:
2740#line 1090 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002741 {
Lev Walkina9532f42006-09-17 04:52:50 +00002742 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002743 checkmem(yyval.a_expr);
2744 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2745 yyval.a_expr->reference = yyvsp[-1].a_ref;
2746 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2747 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2748 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002749 }
2750 break;
2751
Lev Walkin4a4543f2006-10-13 12:37:39 +00002752 case 106:
2753#line 1101 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002754 {
Lev Walkina9532f42006-09-17 04:52:50 +00002755 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002756 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2757 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2758 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2759 yyval.a_expr->reference = yyvsp[-1].a_ref;
2760 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002761 }
2762 break;
2763
Lev Walkin4a4543f2006-10-13 12:37:39 +00002764 case 107:
2765#line 1111 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002766 {
Lev Walkina9532f42006-09-17 04:52:50 +00002767 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002768 checkmem(yyval.a_expr);
2769 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2770 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2771 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2772 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
2773 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002774 }
2775 break;
2776
Lev Walkin4a4543f2006-10-13 12:37:39 +00002777 case 108:
2778#line 1122 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002779 {
Lev Walkina9532f42006-09-17 04:52:50 +00002780 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002781 checkmem(yyval.a_expr);
2782 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2783 yyval.a_expr->reference = yyvsp[-1].a_ref;
2784 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2785 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2786 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002787 }
2788 break;
2789
Lev Walkin4a4543f2006-10-13 12:37:39 +00002790 case 109:
2791#line 1134 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002792 { yyval.a_wsynt = 0; }
2793 break;
2794
Lev Walkin4a4543f2006-10-13 12:37:39 +00002795 case 110:
2796#line 1135 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002797 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002798 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin418298d2006-07-13 08:24:20 +00002799 }
2800 break;
2801
Lev Walkin4a4543f2006-10-13 12:37:39 +00002802 case 111:
2803#line 1142 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002804 { asn1p_lexer_hack_enable_with_syntax(); }
2805 break;
2806
Lev Walkin4a4543f2006-10-13 12:37:39 +00002807 case 112:
2808#line 1144 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002809 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002810 yyval.a_wsynt = yyvsp[-1].a_wsynt;
Lev Walkin418298d2006-07-13 08:24:20 +00002811 }
2812 break;
2813
Lev Walkin4a4543f2006-10-13 12:37:39 +00002814 case 113:
2815#line 1150 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002816 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002817 yyval.a_wsynt = asn1p_wsyntx_new();
2818 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002819 }
2820 break;
2821
Lev Walkin4a4543f2006-10-13 12:37:39 +00002822 case 114:
2823#line 1154 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002824 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002825 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2826 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002827 }
2828 break;
2829
Lev Walkin4a4543f2006-10-13 12:37:39 +00002830 case 115:
2831#line 1161 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002832 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002833 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_opaque.buf, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002834 yyval.a_wchunk->type = WC_WHITESPACE;
Lev Walkin418298d2006-07-13 08:24:20 +00002835 }
2836 break;
2837
Lev Walkin4a4543f2006-10-13 12:37:39 +00002838 case 116:
2839#line 1165 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002840 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002841 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_str, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00002842 }
2843 break;
2844
Lev Walkin4a4543f2006-10-13 12:37:39 +00002845 case 117:
2846#line 1168 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002847 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002848 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].a_refcomp.name, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002849 yyval.a_wchunk->type = WC_FIELD;
Lev Walkin418298d2006-07-13 08:24:20 +00002850 }
2851 break;
2852
Lev Walkin4a4543f2006-10-13 12:37:39 +00002853 case 118:
2854#line 1172 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002855 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002856 yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
Lev Walkin418298d2006-07-13 08:24:20 +00002857 }
2858 break;
2859
Lev Walkina9532f42006-09-17 04:52:50 +00002860 case 119:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002861#line 1178 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002862 {
2863 yyval.a_expr = NEW_EXPR();
Lev Walkin866bd7f2006-09-14 10:35:20 +00002864 checkmem(yyval.a_expr);
2865 yyval.a_expr->Identifier = strdup("...");
Lev Walkin866bd7f2006-09-14 10:35:20 +00002866 checkmem(yyval.a_expr->Identifier);
2867 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2868 yyval.a_expr->meta_type = AMT_TYPE;
2869 }
2870 break;
2871
Lev Walkina9532f42006-09-17 04:52:50 +00002872 case 120:
Lev Walkin4a4543f2006-10-13 12:37:39 +00002873#line 1186 "asn1p_y.y"
2874 {
2875 yyval.a_expr = NEW_EXPR();
2876 checkmem(yyval.a_expr);
2877 yyval.a_expr->Identifier = strdup("...");
2878 checkmem(yyval.a_expr->Identifier);
2879 yyval.a_expr->value = yyvsp[0].a_value;
2880 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2881 yyval.a_expr->meta_type = AMT_TYPE;
2882 }
2883 break;
2884
2885 case 121:
2886#line 1195 "asn1p_y.y"
2887 {
2888 yyval.a_expr = NEW_EXPR();
2889 checkmem(yyval.a_expr);
2890 yyval.a_expr->Identifier = strdup("...");
2891 yyval.a_expr->value = yyvsp[0].a_value;
2892 checkmem(yyval.a_expr->Identifier);
2893 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2894 yyval.a_expr->meta_type = AMT_TYPE;
2895 }
2896 break;
2897
2898 case 122:
2899#line 1207 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002900 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002901 yyval.a_expr = yyvsp[-1].a_expr;
2902 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002903 /*
2904 * Outer constraint for SEQUENCE OF and SET OF applies
2905 * to the inner type.
2906 */
Lev Walkina00d6b32006-03-21 03:40:38 +00002907 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2908 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2909 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2910 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002911 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002912 if(yyval.a_expr->constraints) {
2913 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002914 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002915 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002916 }
2917 }
Lev Walkin418298d2006-07-13 08:24:20 +00002918 }
2919 break;
2920
Lev Walkin4a4543f2006-10-13 12:37:39 +00002921 case 123:
2922#line 1229 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002923 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002924 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
Lev Walkinfb872bd2006-03-18 06:53:11 +00002925 asn1p_as_pointer = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002926 }
2927 break;
2928
Lev Walkin4a4543f2006-10-13 12:37:39 +00002929 case 124:
2930#line 1236 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002931 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002932 yyval.a_expr = yyvsp[0].a_expr;
2933 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
Lev Walkinfb872bd2006-03-18 06:53:11 +00002934
Lev Walkina00d6b32006-03-21 03:40:38 +00002935 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2936 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
Lev Walkinef625402005-09-05 05:17:57 +00002937 fprintf(stderr,
2938 "INFO: Directive <ASN1C:RepresentAsPointer> "
2939 "applied to %s at line %d\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00002940 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2941 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
Lev Walkinef625402005-09-05 05:17:57 +00002942 : "member",
Lev Walkina00d6b32006-03-21 03:40:38 +00002943 yyval.a_expr->_lineno
Lev Walkinef625402005-09-05 05:17:57 +00002944 );
2945 }
Lev Walkin418298d2006-07-13 08:24:20 +00002946 }
2947 break;
2948
Lev Walkin4a4543f2006-10-13 12:37:39 +00002949 case 125:
2950#line 1255 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002951 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002952 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002953 }
2954 break;
2955
Lev Walkin4a4543f2006-10-13 12:37:39 +00002956 case 126:
2957#line 1258 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002958 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002959 yyval.a_expr = yyvsp[-1].a_expr;
2960 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2961 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2962 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002963 }
2964 break;
2965
Lev Walkin4a4543f2006-10-13 12:37:39 +00002966 case 127:
2967#line 1264 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002968 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002969 yyval.a_expr = yyvsp[-1].a_expr;
2970 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2971 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2972 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002973 }
2974 break;
2975
Lev Walkin4a4543f2006-10-13 12:37:39 +00002976 case 128:
2977#line 1270 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002978 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002979 yyval.a_expr = yyvsp[-1].a_expr;
2980 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2981 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2982 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002983 }
2984 break;
2985
Lev Walkin4a4543f2006-10-13 12:37:39 +00002986 case 129:
2987#line 1276 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002988 {
Lev Walkina9532f42006-09-17 04:52:50 +00002989 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002990 checkmem(yyval.a_expr);
2991 yyval.a_expr->constraints = yyvsp[-4].a_constr;
2992 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2993 yyval.a_expr->meta_type = AMT_TYPE;
2994 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
2995 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
2996 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002997 }
2998 break;
2999
Lev Walkin4a4543f2006-10-13 12:37:39 +00003000 case 130:
3001#line 1286 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003002 {
Lev Walkina9532f42006-09-17 04:52:50 +00003003 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003004 checkmem(yyval.a_expr);
3005 yyval.a_expr->constraints = yyvsp[-4].a_constr;
3006 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
3007 yyval.a_expr->meta_type = AMT_TYPE;
3008 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
3009 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
3010 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00003011 }
3012 break;
3013
Lev Walkin4a4543f2006-10-13 12:37:39 +00003014 case 131:
3015#line 1296 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003016 {
Lev Walkina9532f42006-09-17 04:52:50 +00003017 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003018 checkmem(yyval.a_expr);
3019 yyval.a_expr->expr_type = ASN_TYPE_ANY;
3020 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003021 }
3022 break;
3023
Lev Walkin4a4543f2006-10-13 12:37:39 +00003024 case 132:
3025#line 1302 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003026 {
Lev Walkin070a52d2004-08-22 03:19:54 +00003027 int ret;
Lev Walkina9532f42006-09-17 04:52:50 +00003028 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003029 checkmem(yyval.a_expr);
3030 yyval.a_expr->reference = asn1p_ref_new(yylineno);
3031 ret = asn1p_ref_add_component(yyval.a_expr->reference,
3032 yyvsp[0].tv_str, RLT_lowercase);
Lev Walkin070a52d2004-08-22 03:19:54 +00003033 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003034 yyval.a_expr->expr_type = ASN_TYPE_ANY;
3035 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003036 }
3037 break;
3038
Lev Walkin4a4543f2006-10-13 12:37:39 +00003039 case 133:
3040#line 1313 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003041 {
Lev Walkina9532f42006-09-17 04:52:50 +00003042 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003043 checkmem(yyval.a_expr);
3044 yyval.a_expr->reference = yyvsp[0].a_ref;
3045 yyval.a_expr->expr_type = A1TC_INSTANCE;
3046 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003047 }
3048 break;
3049
Lev Walkin4a4543f2006-10-13 12:37:39 +00003050 case 134:
3051#line 1328 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003052 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003053 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003054 yyval.a_ref = asn1p_ref_new(yylineno);
3055 checkmem(yyval.a_ref);
3056 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00003057 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003058 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003059 }
3060 break;
3061
Lev Walkina9532f42006-09-17 04:52:50 +00003062 case 135:
Lev Walkin4a4543f2006-10-13 12:37:39 +00003063#line 1336 "asn1p_y.y"
3064 {
3065 int ret;
3066 yyval.a_ref = asn1p_ref_new(yylineno);
3067 checkmem(yyval.a_ref);
3068 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
3069 checkmem(ret == 0);
3070 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3071 checkmem(ret == 0);
3072 free(yyvsp[-2].tv_str);
3073 }
3074 break;
3075
3076 case 136:
3077#line 1346 "asn1p_y.y"
3078 {
3079 int ret;
3080 yyval.a_ref = asn1p_ref_new(yylineno);
3081 checkmem(yyval.a_ref);
3082 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
3083 checkmem(ret == 0);
3084 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3085 checkmem(ret == 0);
3086 free(yyvsp[-2].tv_str);
3087 }
3088 break;
3089
3090 case 137:
3091#line 1356 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003092 {
Lev Walkin9d542d22006-03-14 16:31:37 +00003093 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003094 yyval.a_ref = asn1p_ref_new(yylineno);
3095 checkmem(yyval.a_ref);
3096 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00003097 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003098 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkin9d542d22006-03-14 16:31:37 +00003099 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003100 free(yyvsp[-2].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003101 }
3102 break;
3103
Lev Walkin4a4543f2006-10-13 12:37:39 +00003104 case 138:
3105#line 1366 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003106 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003107 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003108 yyval.a_ref = asn1p_ref_new(yylineno);
3109 checkmem(yyval.a_ref);
3110 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
3111 free(yyvsp[0].tv_str);
Lev Walkin9c974182004-09-15 11:59:51 +00003112 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003113 }
3114 break;
3115
Lev Walkin4a4543f2006-10-13 12:37:39 +00003116 case 139:
3117#line 1374 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003118 {
Lev Walkin9c974182004-09-15 11:59:51 +00003119 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003120 yyval.a_ref = yyvsp[0].a_ref;
3121 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
3122 free(yyvsp[-2].tv_str);
Lev Walkinf15320b2004-06-03 03:38:44 +00003123 checkmem(ret == 0);
3124 /*
3125 * Move the last element infront.
3126 */
3127 {
3128 struct asn1p_ref_component_s tmp_comp;
Lev Walkina00d6b32006-03-21 03:40:38 +00003129 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
3130 memmove(&yyval.a_ref->components[1],
3131 &yyval.a_ref->components[0],
3132 sizeof(yyval.a_ref->components[0])
3133 * (yyval.a_ref->comp_count - 1));
3134 yyval.a_ref->components[0] = tmp_comp;
Lev Walkinf15320b2004-06-03 03:38:44 +00003135 }
Lev Walkin418298d2006-07-13 08:24:20 +00003136 }
3137 break;
3138
Lev Walkin4a4543f2006-10-13 12:37:39 +00003139 case 140:
3140#line 1396 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003141 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003142 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003143 yyval.a_ref = asn1p_ref_new(yylineno);
3144 checkmem(yyval.a_ref);
3145 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
3146 free(yyvsp[0].a_refcomp.name);
Lev Walkinf15320b2004-06-03 03:38:44 +00003147 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003148 }
3149 break;
3150
Lev Walkin4a4543f2006-10-13 12:37:39 +00003151 case 141:
3152#line 1404 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003153 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003154 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003155 yyval.a_ref = yyvsp[-2].a_ref;
3156 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
3157 free(yyvsp[0].a_refcomp.name);
Lev Walkinf15320b2004-06-03 03:38:44 +00003158 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003159 }
3160 break;
3161
Lev Walkin4a4543f2006-10-13 12:37:39 +00003162 case 143:
3163#line 1417 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003164 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003165 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
3166 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00003167 }
3168 break;
3169
Lev Walkin4a4543f2006-10-13 12:37:39 +00003170 case 144:
3171#line 1422 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003172 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003173 yyval.a_refcomp.lex_type = RLT_Amplowercase;
3174 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00003175 }
3176 break;
3177
Lev Walkin4a4543f2006-10-13 12:37:39 +00003178 case 145:
3179#line 1431 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003180 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003181 yyval.a_ref = asn1p_ref_new(yylineno);
3182 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003183 }
3184 break;
3185
Lev Walkin4a4543f2006-10-13 12:37:39 +00003186 case 146:
3187#line 1435 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003188 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003189 yyval.a_ref = yyval.a_ref;
3190 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003191 }
3192 break;
3193
Lev Walkin4a4543f2006-10-13 12:37:39 +00003194 case 147:
3195#line 1439 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003196 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003197 yyval.a_ref = yyval.a_ref;
3198 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003199 }
3200 break;
3201
Lev Walkin4a4543f2006-10-13 12:37:39 +00003202 case 148:
3203#line 1446 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003204 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003205 yyval.a_ref = asn1p_ref_new(yylineno);
3206 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
Lev Walkin418298d2006-07-13 08:24:20 +00003207 }
3208 break;
3209
Lev Walkin4a4543f2006-10-13 12:37:39 +00003210 case 149:
3211#line 1466 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003212 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003213 yyval.a_expr = yyvsp[-2].a_expr;
3214 assert(yyval.a_expr->Identifier == NULL);
3215 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3216 yyval.a_expr->meta_type = AMT_VALUE;
3217 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003218 }
3219 break;
3220
Lev Walkin4a4543f2006-10-13 12:37:39 +00003221 case 152:
3222#line 1478 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003223 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003224 yyval.a_value = asn1p_value_fromint(0);
3225 checkmem(yyval.a_value);
3226 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
3227 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
3228 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003229 }
3230 break;
3231
Lev Walkin4a4543f2006-10-13 12:37:39 +00003232 case 153:
3233#line 1485 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003234 { asn1p_lexer_hack_push_opaque_state(); }
3235 break;
3236
Lev Walkin4a4543f2006-10-13 12:37:39 +00003237 case 154:
3238#line 1485 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003239 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003240 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3241 checkmem(yyval.a_value);
3242 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin418298d2006-07-13 08:24:20 +00003243 }
3244 break;
3245
Lev Walkin4a4543f2006-10-13 12:37:39 +00003246 case 155:
3247#line 1490 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003248 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003249 yyval.a_value = asn1p_value_fromint(0);
3250 checkmem(yyval.a_value);
3251 yyval.a_value->type = ATV_NULL;
Lev Walkin418298d2006-07-13 08:24:20 +00003252 }
3253 break;
3254
Lev Walkin4a4543f2006-10-13 12:37:39 +00003255 case 156:
3256#line 1498 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003257 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003258 yyval.a_value = asn1p_value_fromint(0);
3259 checkmem(yyval.a_value);
3260 yyval.a_value->type = ATV_FALSE;
Lev Walkin418298d2006-07-13 08:24:20 +00003261 }
3262 break;
3263
Lev Walkin4a4543f2006-10-13 12:37:39 +00003264 case 157:
3265#line 1503 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003266 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003267 yyval.a_value = asn1p_value_fromint(0);
3268 checkmem(yyval.a_value);
3269 yyval.a_value->type = ATV_TRUE;
Lev Walkin418298d2006-07-13 08:24:20 +00003270 }
3271 break;
3272
Lev Walkin4a4543f2006-10-13 12:37:39 +00003273 case 158:
3274#line 1508 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003275 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003276 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
3277 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003278 }
3279 break;
3280
Lev Walkin4a4543f2006-10-13 12:37:39 +00003281 case 159:
3282#line 1512 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003283 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003284 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
3285 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003286 }
3287 break;
3288
Lev Walkin4a4543f2006-10-13 12:37:39 +00003289 case 160:
3290#line 1516 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003291 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003292 yyval.a_value = yyval.a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003293 }
3294 break;
3295
Lev Walkin4a4543f2006-10-13 12:37:39 +00003296 case 161:
3297#line 1519 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003298 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00003299 yyval.a_value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003300 }
3301 break;
3302
Lev Walkin4a4543f2006-10-13 12:37:39 +00003303 case 162:
3304#line 1525 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003305 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003306 asn1p_ref_t *ref;
3307 int ret;
3308 ref = asn1p_ref_new(yylineno);
3309 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003310 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003311 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003312 yyval.a_value = asn1p_value_fromref(ref, 0);
3313 checkmem(yyval.a_value);
3314 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003315 }
3316 break;
3317
Lev Walkin4a4543f2006-10-13 12:37:39 +00003318 case 163:
3319#line 1536 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003320 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003321 asn1p_ref_t *ref;
3322 int ret;
3323 ref = asn1p_ref_new(yylineno);
3324 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003325 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00003326 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003327 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003328 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003329 yyval.a_value = asn1p_value_fromref(ref, 0);
3330 checkmem(yyval.a_value);
3331 free(yyvsp[-2].tv_str);
3332 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003333 }
3334 break;
3335
Lev Walkin4a4543f2006-10-13 12:37:39 +00003336 case 164:
3337#line 1554 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003338 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003339 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3340 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003341 }
3342 break;
3343
Lev Walkin4a4543f2006-10-13 12:37:39 +00003344 case 165:
3345#line 1558 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003346 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003347 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3348 checkmem(yyval.a_value);
3349 yyval.a_value->type = ATV_TUPLE;
Lev Walkin418298d2006-07-13 08:24:20 +00003350 }
3351 break;
3352
Lev Walkin4a4543f2006-10-13 12:37:39 +00003353 case 166:
3354#line 1563 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003355 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003356 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3357 checkmem(yyval.a_value);
3358 yyval.a_value->type = ATV_QUADRUPLE;
Lev Walkin418298d2006-07-13 08:24:20 +00003359 }
3360 break;
3361
Lev Walkin4a4543f2006-10-13 12:37:39 +00003362 case 167:
3363#line 1597 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003364 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003365 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
3366 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
3367 checkmem(yyval.tv_opaque.buf);
3368 yyval.tv_opaque.buf[0] = '{';
3369 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
3370 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
3371 free(yyvsp[0].tv_opaque.buf);
Lev Walkin418298d2006-07-13 08:24:20 +00003372 }
3373 break;
3374
Lev Walkin4a4543f2006-10-13 12:37:39 +00003375 case 168:
3376#line 1606 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003377 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003378 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
Lev Walkinf15320b2004-06-03 03:38:44 +00003379 char *p = malloc(newsize + 1);
3380 checkmem(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00003381 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
3382 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00003383 p[newsize] = '\0';
Lev Walkina00d6b32006-03-21 03:40:38 +00003384 free(yyvsp[-1].tv_opaque.buf);
3385 free(yyvsp[0].tv_opaque.buf);
3386 yyval.tv_opaque.buf = p;
3387 yyval.tv_opaque.len = newsize;
Lev Walkin418298d2006-07-13 08:24:20 +00003388 }
3389 break;
3390
Lev Walkin4a4543f2006-10-13 12:37:39 +00003391 case 169:
3392#line 1621 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003393 { yyval.a_type = ASN_BASIC_BOOLEAN; }
3394 break;
3395
Lev Walkin4a4543f2006-10-13 12:37:39 +00003396 case 170:
3397#line 1622 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003398 { yyval.a_type = ASN_BASIC_NULL; }
3399 break;
3400
Lev Walkin4a4543f2006-10-13 12:37:39 +00003401 case 171:
3402#line 1623 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003403 { yyval.a_type = ASN_BASIC_REAL; }
3404 break;
3405
Lev Walkin418298d2006-07-13 08:24:20 +00003406 case 172:
Lev Walkin4a4543f2006-10-13 12:37:39 +00003407#line 1624 "asn1p_y.y"
3408 { yyval.a_type = yyvsp[0].a_type; }
Lev Walkin418298d2006-07-13 08:24:20 +00003409 break;
3410
3411 case 173:
Lev Walkin4a4543f2006-10-13 12:37:39 +00003412#line 1625 "asn1p_y.y"
3413 { yyval.a_type = ASN_BASIC_OCTET_STRING; }
Lev Walkin418298d2006-07-13 08:24:20 +00003414 break;
3415
3416 case 174:
Lev Walkin4a4543f2006-10-13 12:37:39 +00003417#line 1626 "asn1p_y.y"
3418 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
Lev Walkin418298d2006-07-13 08:24:20 +00003419 break;
3420
3421 case 175:
Lev Walkin4a4543f2006-10-13 12:37:39 +00003422#line 1627 "asn1p_y.y"
3423 { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
Lev Walkin418298d2006-07-13 08:24:20 +00003424 break;
3425
3426 case 176:
Lev Walkin4a4543f2006-10-13 12:37:39 +00003427#line 1628 "asn1p_y.y"
3428 { yyval.a_type = ASN_BASIC_EXTERNAL; }
Lev Walkin418298d2006-07-13 08:24:20 +00003429 break;
3430
3431 case 177:
Lev Walkin4a4543f2006-10-13 12:37:39 +00003432#line 1629 "asn1p_y.y"
3433 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
Lev Walkin418298d2006-07-13 08:24:20 +00003434 break;
3435
3436 case 178:
Lev Walkin4a4543f2006-10-13 12:37:39 +00003437#line 1630 "asn1p_y.y"
3438 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
Lev Walkin418298d2006-07-13 08:24:20 +00003439 break;
3440
3441 case 179:
Lev Walkin4a4543f2006-10-13 12:37:39 +00003442#line 1631 "asn1p_y.y"
3443 { yyval.a_type = ASN_BASIC_UTCTime; }
Lev Walkin866bd7f2006-09-14 10:35:20 +00003444 break;
3445
3446 case 180:
Lev Walkin4a4543f2006-10-13 12:37:39 +00003447#line 1632 "asn1p_y.y"
3448 { yyval.a_type = ASN_BASIC_GeneralizedTime; }
Lev Walkin866bd7f2006-09-14 10:35:20 +00003449 break;
3450
3451 case 181:
Lev Walkin4a4543f2006-10-13 12:37:39 +00003452#line 1633 "asn1p_y.y"
3453 { yyval.a_type = yyvsp[0].a_type; }
Lev Walkin866bd7f2006-09-14 10:35:20 +00003454 break;
3455
3456 case 182:
Lev Walkin4a4543f2006-10-13 12:37:39 +00003457#line 1640 "asn1p_y.y"
3458 { yyval.a_type = ASN_BASIC_INTEGER; }
Lev Walkina9532f42006-09-17 04:52:50 +00003459 break;
3460
3461 case 183:
Lev Walkinf1727152006-09-21 01:50:37 +00003462#line 1641 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003463 { yyval.a_type = ASN_BASIC_ENUMERATED; }
3464 break;
3465
3466 case 184:
3467#line 1642 "asn1p_y.y"
3468 { yyval.a_type = ASN_BASIC_BIT_STRING; }
3469 break;
3470
3471 case 185:
3472#line 1646 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003473 {
Lev Walkina9532f42006-09-17 04:52:50 +00003474 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003475 checkmem(yyval.a_expr);
3476 yyval.a_expr->expr_type = yyvsp[0].a_type;
3477 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003478 }
3479 break;
3480
Lev Walkin4a4543f2006-10-13 12:37:39 +00003481 case 186:
3482#line 1652 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003483 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003484 if(yyvsp[0].a_expr) {
3485 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinf15320b2004-06-03 03:38:44 +00003486 } else {
Lev Walkina9532f42006-09-17 04:52:50 +00003487 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003488 checkmem(yyval.a_expr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003489 }
Lev Walkina00d6b32006-03-21 03:40:38 +00003490 yyval.a_expr->expr_type = yyvsp[-1].a_type;
3491 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003492 }
3493 break;
3494
Lev Walkin4a4543f2006-10-13 12:37:39 +00003495 case 187:
3496#line 1665 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003497 { yyval.a_type = ASN_STRING_BMPString; }
3498 break;
3499
Lev Walkin4a4543f2006-10-13 12:37:39 +00003500 case 188:
3501#line 1666 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003502 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003503 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00003504 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003505 }
3506 break;
3507
Lev Walkin4a4543f2006-10-13 12:37:39 +00003508 case 189:
3509#line 1670 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003510 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003511 yyval.a_type = ASN_STRING_GraphicString;
Lev Walkin9c974182004-09-15 11:59:51 +00003512 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003513 }
3514 break;
3515
Lev Walkin4a4543f2006-10-13 12:37:39 +00003516 case 190:
3517#line 1674 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003518 { yyval.a_type = ASN_STRING_IA5String; }
3519 break;
3520
Lev Walkin4a4543f2006-10-13 12:37:39 +00003521 case 191:
3522#line 1675 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003523 { yyval.a_type = ASN_STRING_ISO646String; }
3524 break;
3525
Lev Walkin4a4543f2006-10-13 12:37:39 +00003526 case 192:
3527#line 1676 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003528 { yyval.a_type = ASN_STRING_NumericString; }
3529 break;
3530
Lev Walkin4a4543f2006-10-13 12:37:39 +00003531 case 193:
3532#line 1677 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003533 { yyval.a_type = ASN_STRING_PrintableString; }
3534 break;
3535
Lev Walkin4a4543f2006-10-13 12:37:39 +00003536 case 194:
3537#line 1678 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003538 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003539 yyval.a_type = ASN_STRING_T61String;
Lev Walkin9c974182004-09-15 11:59:51 +00003540 fprintf(stderr, "WARNING: T61String is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003541 }
3542 break;
3543
Lev Walkin4a4543f2006-10-13 12:37:39 +00003544 case 195:
3545#line 1682 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003546 { yyval.a_type = ASN_STRING_TeletexString; }
3547 break;
3548
Lev Walkin4a4543f2006-10-13 12:37:39 +00003549 case 196:
3550#line 1683 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003551 { yyval.a_type = ASN_STRING_UniversalString; }
3552 break;
3553
Lev Walkin4a4543f2006-10-13 12:37:39 +00003554 case 197:
3555#line 1684 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003556 { yyval.a_type = ASN_STRING_UTF8String; }
3557 break;
3558
Lev Walkin4a4543f2006-10-13 12:37:39 +00003559 case 198:
3560#line 1685 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003561 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003562 yyval.a_type = ASN_STRING_VideotexString;
Lev Walkin9c974182004-09-15 11:59:51 +00003563 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003564 }
3565 break;
3566
Lev Walkin4a4543f2006-10-13 12:37:39 +00003567 case 199:
3568#line 1689 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003569 { yyval.a_type = ASN_STRING_VisibleString; }
3570 break;
3571
Lev Walkin4a4543f2006-10-13 12:37:39 +00003572 case 200:
3573#line 1690 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003574 { yyval.a_type = ASN_STRING_ObjectDescriptor; }
3575 break;
3576
Lev Walkin4a4543f2006-10-13 12:37:39 +00003577 case 205:
3578#line 1701 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003579 { yyval.a_constr = 0; }
3580 break;
3581
Lev Walkin4a4543f2006-10-13 12:37:39 +00003582 case 206:
3583#line 1702 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003584 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003585 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003586 }
3587 break;
3588
Lev Walkin4a4543f2006-10-13 12:37:39 +00003589 case 208:
3590#line 1709 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00003591 {
3592 yyval.a_constr = yyvsp[-1].a_constr;
3593 }
3594 break;
3595
Lev Walkin4a4543f2006-10-13 12:37:39 +00003596 case 209:
3597#line 1715 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003598 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003599 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003600 }
3601 break;
3602
Lev Walkin4a4543f2006-10-13 12:37:39 +00003603 case 210:
3604#line 1718 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003605 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003606 /*
3607 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00003608 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00003609 */
Lev Walkina00d6b32006-03-21 03:40:38 +00003610 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003611 }
3612 break;
3613
Lev Walkin4a4543f2006-10-13 12:37:39 +00003614 case 211:
3615#line 1728 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003616 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003617 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003618 }
3619 break;
3620
Lev Walkin4a4543f2006-10-13 12:37:39 +00003621 case 212:
3622#line 1731 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003623 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003624 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003625 }
3626 break;
3627
Lev Walkin4a4543f2006-10-13 12:37:39 +00003628 case 213:
3629#line 1737 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003630 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00003631 yyval.a_constr = asn1p_constraint_new(yylineno);
3632 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin418298d2006-07-13 08:24:20 +00003633 }
3634 break;
3635
Lev Walkin4a4543f2006-10-13 12:37:39 +00003636 case 214:
3637#line 1741 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003638 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003639 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003640 }
3641 break;
3642
Lev Walkin4a4543f2006-10-13 12:37:39 +00003643 case 215:
3644#line 1744 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003645 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003646 asn1p_constraint_t *ct;
3647 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003648 ct->type = ACT_EL_EXT;
Lev Walkina00d6b32006-03-21 03:40:38 +00003649 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin418298d2006-07-13 08:24:20 +00003650 }
3651 break;
3652
Lev Walkin4a4543f2006-10-13 12:37:39 +00003653 case 216:
3654#line 1750 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003655 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003656 asn1p_constraint_t *ct;
3657 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003658 ct->type = ACT_EL_EXT;
Lev Walkina00d6b32006-03-21 03:40:38 +00003659 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
3660 ct = yyval.a_constr;
3661 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003662 }
3663 break;
3664
Lev Walkin4a4543f2006-10-13 12:37:39 +00003665 case 218:
3666#line 1762 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003667 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003668 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003669 }
3670 break;
3671
Lev Walkin4a4543f2006-10-13 12:37:39 +00003672 case 220:
3673#line 1769 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003674 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003675 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003676 }
3677 break;
3678
Lev Walkin4a4543f2006-10-13 12:37:39 +00003679 case 222:
3680#line 1776 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003681 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003682 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003683 }
3684 break;
3685
Lev Walkin4a4543f2006-10-13 12:37:39 +00003686 case 224:
3687#line 1784 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003688 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003689 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003690 }
3691 break;
3692
Lev Walkin4a4543f2006-10-13 12:37:39 +00003693 case 225:
3694#line 1790 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003695 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003696 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003697 yyval.a_constr = asn1p_constraint_new(yylineno);
3698 checkmem(yyval.a_constr);
3699 yyval.a_constr->type = yyvsp[-3].a_ctype;
3700 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003701 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003702 }
3703 break;
3704
Lev Walkin4a4543f2006-10-13 12:37:39 +00003705 case 226:
3706#line 1798 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003707 {
Lev Walkinf59d0752004-08-18 04:59:12 +00003708 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003709 yyval.a_constr = asn1p_constraint_new(yylineno);
3710 checkmem(yyval.a_constr);
3711 yyval.a_constr->type = ACT_CA_SET;
3712 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkinf59d0752004-08-18 04:59:12 +00003713 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003714 }
3715 break;
3716
Lev Walkin4a4543f2006-10-13 12:37:39 +00003717 case 227:
3718#line 1806 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003719 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003720 yyval.a_constr = asn1p_constraint_new(yylineno);
3721 checkmem(yyval.a_constr);
3722 yyval.a_constr->type = ACT_EL_VALUE;
3723 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003724 }
3725 break;
3726
Lev Walkin4a4543f2006-10-13 12:37:39 +00003727 case 228:
3728#line 1812 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003729 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003730 yyval.a_constr = asn1p_constraint_new(yylineno);
3731 checkmem(yyval.a_constr);
3732 yyval.a_constr->type = ACT_EL_TYPE;
3733 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003734 }
3735 break;
3736
Lev Walkinf1727152006-09-21 01:50:37 +00003737 case 229:
Lev Walkin4a4543f2006-10-13 12:37:39 +00003738#line 1818 "asn1p_y.y"
Lev Walkinf1727152006-09-21 01:50:37 +00003739 {
3740 yyval.a_constr = asn1p_constraint_new(yylineno);
3741 checkmem(yyval.a_constr);
3742 yyval.a_constr->type = yyvsp[-1].a_ctype;
3743 yyval.a_constr->range_start = yyvsp[-2].a_value;
Lev Walkin4a4543f2006-10-13 12:37:39 +00003744 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkinf1727152006-09-21 01:50:37 +00003745 }
3746 break;
3747
3748 case 230:
Lev Walkin4a4543f2006-10-13 12:37:39 +00003749#line 1825 "asn1p_y.y"
3750 {
3751 yyval.a_constr = asn1p_constraint_new(yylineno);
3752 checkmem(yyval.a_constr);
3753 yyval.a_constr->type = yyvsp[-1].a_ctype;
3754 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3755 yyval.a_constr->range_stop = yyvsp[0].a_value;
3756 yyval.a_constr->range_start->type = ATV_MIN;
3757 }
3758 break;
3759
3760 case 231:
3761#line 1833 "asn1p_y.y"
3762 {
3763 yyval.a_constr = asn1p_constraint_new(yylineno);
3764 checkmem(yyval.a_constr);
3765 yyval.a_constr->type = yyvsp[-1].a_ctype;
3766 yyval.a_constr->range_start = yyvsp[-2].a_value;
3767 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3768 yyval.a_constr->range_stop->type = ATV_MAX;
3769 }
3770 break;
3771
3772 case 232:
3773#line 1841 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00003774 {
3775 yyval.a_constr = asn1p_constraint_new(yylineno);
3776 checkmem(yyval.a_constr);
3777 yyval.a_constr->type = yyvsp[-1].a_ctype;
3778 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3779 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3780 yyval.a_constr->range_start->type = ATV_MIN;
3781 yyval.a_constr->range_stop->type = ATV_MAX;
3782 }
3783 break;
3784
Lev Walkin4a4543f2006-10-13 12:37:39 +00003785 case 233:
3786#line 1850 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00003787 {
3788 yyval.a_constr = yyvsp[0].a_constr;
3789 }
3790 break;
3791
Lev Walkin4a4543f2006-10-13 12:37:39 +00003792 case 234:
3793#line 1856 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003794 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003795 yyval.a_ctype = ACT_CT_SIZE;
Lev Walkin418298d2006-07-13 08:24:20 +00003796 }
3797 break;
3798
Lev Walkin4a4543f2006-10-13 12:37:39 +00003799 case 235:
3800#line 1859 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003801 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003802 yyval.a_ctype = ACT_CT_FROM;
Lev Walkin418298d2006-07-13 08:24:20 +00003803 }
3804 break;
3805
Lev Walkin4a4543f2006-10-13 12:37:39 +00003806 case 236:
3807#line 1865 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003808 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003809 yyval.a_value = asn1p_value_fromint(0);
3810 checkmem(yyval.a_value);
3811 yyval.a_value->type = ATV_FALSE;
Lev Walkin418298d2006-07-13 08:24:20 +00003812 }
3813 break;
3814
Lev Walkin4a4543f2006-10-13 12:37:39 +00003815 case 237:
3816#line 1870 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003817 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003818 yyval.a_value = asn1p_value_fromint(1);
3819 checkmem(yyval.a_value);
3820 yyval.a_value->type = ATV_TRUE;
Lev Walkin418298d2006-07-13 08:24:20 +00003821 }
3822 break;
3823
Lev Walkin4a4543f2006-10-13 12:37:39 +00003824 case 240:
3825#line 1877 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003826 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003827 asn1p_ref_t *ref;
3828 int ret;
3829 ref = asn1p_ref_new(yylineno);
3830 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003831 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003832 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003833 yyval.a_value = asn1p_value_fromref(ref, 0);
3834 checkmem(yyval.a_value);
3835 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003836 }
3837 break;
3838
Lev Walkin4a4543f2006-10-13 12:37:39 +00003839 case 241:
3840#line 1891 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003841 {
Lev Walkinc8092cb2005-02-18 16:34:21 +00003842 asn1p_ref_t *ref;
3843 int ret;
3844 ref = asn1p_ref_new(yylineno);
3845 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003846 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003847 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003848 yyval.a_value = asn1p_value_fromref(ref, 0);
3849 checkmem(yyval.a_value);
3850 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003851 }
3852 break;
3853
Lev Walkin4a4543f2006-10-13 12:37:39 +00003854 case 242:
3855#line 1905 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003856 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003857 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003858 }
3859 break;
3860
Lev Walkin4a4543f2006-10-13 12:37:39 +00003861 case 243:
3862#line 1908 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003863 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003864 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003865 }
3866 break;
3867
Lev Walkin4a4543f2006-10-13 12:37:39 +00003868 case 244:
3869#line 1914 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003870 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003871 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003872 }
3873 break;
3874
Lev Walkin4a4543f2006-10-13 12:37:39 +00003875 case 245:
3876#line 1917 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003877 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003878 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003879 }
3880 break;
3881
Lev Walkin4a4543f2006-10-13 12:37:39 +00003882 case 246:
3883#line 1923 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003884 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003885 yyval.a_constr = asn1p_constraint_new(yylineno);
3886 checkmem(yyval.a_constr);
3887 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin418298d2006-07-13 08:24:20 +00003888 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 1);
3889 }
3890 break;
3891
Lev Walkin4a4543f2006-10-13 12:37:39 +00003892 case 247:
3893#line 1929 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003894 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003895 yyval.a_constr = asn1p_constraint_new(yylineno);
3896 checkmem(yyval.a_constr);
3897 yyval.a_constr->type = ACT_EL_VALUE;
3898 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3899 yyval.a_constr->presence = yyvsp[0].a_pres;
3900 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003901 }
3902 break;
3903
Lev Walkin4a4543f2006-10-13 12:37:39 +00003904 case 248:
3905#line 1943 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003906 { yyval.a_pres = ACPRES_DEFAULT; }
3907 break;
3908
Lev Walkin4a4543f2006-10-13 12:37:39 +00003909 case 249:
3910#line 1944 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003911 { yyval.a_pres = yyvsp[0].a_pres; }
3912 break;
3913
Lev Walkin4a4543f2006-10-13 12:37:39 +00003914 case 250:
3915#line 1948 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003916 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003917 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin418298d2006-07-13 08:24:20 +00003918 }
3919 break;
3920
Lev Walkin4a4543f2006-10-13 12:37:39 +00003921 case 251:
3922#line 1951 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003923 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003924 yyval.a_pres = ACPRES_ABSENT;
Lev Walkin418298d2006-07-13 08:24:20 +00003925 }
3926 break;
3927
Lev Walkin4a4543f2006-10-13 12:37:39 +00003928 case 252:
3929#line 1954 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003930 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003931 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkin418298d2006-07-13 08:24:20 +00003932 }
3933 break;
3934
Lev Walkin4a4543f2006-10-13 12:37:39 +00003935 case 256:
3936#line 1969 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00003937 { asn1p_lexer_hack_push_opaque_state(); }
3938 break;
3939
Lev Walkin4a4543f2006-10-13 12:37:39 +00003940 case 257:
3941#line 1969 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003942 {
Lev Walkina9532f42006-09-17 04:52:50 +00003943 yyval.a_constr = asn1p_constraint_new(yylineno);
3944 checkmem(yyval.a_constr);
3945 yyval.a_constr->type = ACT_CT_CTDBY;
3946 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3947 checkmem(yyval.a_constr->value);
3948 yyval.a_constr->value->type = ATV_UNPARSED;
Lev Walkin418298d2006-07-13 08:24:20 +00003949 }
3950 break;
3951
Lev Walkin4a4543f2006-10-13 12:37:39 +00003952 case 258:
3953#line 1980 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00003954 {
3955 yyval.a_constr = asn1p_constraint_new(yylineno);
3956 yyval.a_constr->type = ACT_CT_CTNG;
3957 yyval.a_constr->value = asn1p_value_fromtype(yyvsp[0].a_expr);
3958 }
3959 break;
3960
Lev Walkin4a4543f2006-10-13 12:37:39 +00003961 case 259:
3962#line 1988 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00003963 { yyval.a_ctype = ACT_EL_RANGE; }
3964 break;
3965
Lev Walkin4a4543f2006-10-13 12:37:39 +00003966 case 260:
3967#line 1989 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00003968 { yyval.a_ctype = ACT_EL_RLRANGE; }
3969 break;
3970
Lev Walkin4a4543f2006-10-13 12:37:39 +00003971 case 261:
3972#line 1990 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00003973 { yyval.a_ctype = ACT_EL_LLRANGE; }
3974 break;
3975
Lev Walkin4a4543f2006-10-13 12:37:39 +00003976 case 262:
3977#line 1991 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00003978 { yyval.a_ctype = ACT_EL_ULRANGE; }
3979 break;
3980
Lev Walkinf1727152006-09-21 01:50:37 +00003981 case 263:
Lev Walkin4a4543f2006-10-13 12:37:39 +00003982#line 1994 "asn1p_y.y"
3983 {
3984 yyval.a_constr = yyvsp[0].a_constr;
3985 }
3986 break;
3987
3988 case 264:
3989#line 1997 "asn1p_y.y"
3990 {
3991 yyval.a_constr = yyvsp[0].a_constr;
3992 }
3993 break;
3994
3995 case 265:
3996#line 2006 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003997 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003998 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3999 asn1p_constraint_t *ct;
4000 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00004001 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00004002 checkmem(ret == 0);
4003 ct = asn1p_constraint_new(yylineno);
Lev Walkina00d6b32006-03-21 03:40:38 +00004004 checkmem(yyval.a_constr);
Lev Walkinf15320b2004-06-03 03:38:44 +00004005 ct->type = ACT_EL_VALUE;
4006 ct->value = asn1p_value_fromref(ref, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00004007 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00004008 }
4009 break;
4010
Lev Walkin4a4543f2006-10-13 12:37:39 +00004011 case 266:
4012#line 2021 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004013 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004014 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00004015 }
4016 break;
4017
Lev Walkin4a4543f2006-10-13 12:37:39 +00004018 case 267:
4019#line 2027 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004020 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004021 yyval.a_constr = asn1p_constraint_new(yylineno);
4022 checkmem(yyval.a_constr);
4023 yyval.a_constr->type = ACT_EL_VALUE;
4024 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00004025 }
4026 break;
4027
Lev Walkin4a4543f2006-10-13 12:37:39 +00004028 case 268:
4029#line 2033 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004030 {
Lev Walkinf15320b2004-06-03 03:38:44 +00004031 asn1p_constraint_t *ct;
4032 ct = asn1p_constraint_new(yylineno);
4033 checkmem(ct);
4034 ct->type = ACT_EL_VALUE;
Lev Walkina00d6b32006-03-21 03:40:38 +00004035 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
4036 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin418298d2006-07-13 08:24:20 +00004037 }
4038 break;
4039
Lev Walkin4a4543f2006-10-13 12:37:39 +00004040 case 269:
4041#line 2047 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004042 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004043 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
Lev Walkinf15320b2004-06-03 03:38:44 +00004044 int ret;
4045 *p = '@';
Lev Walkina00d6b32006-03-21 03:40:38 +00004046 strcpy(p + 1, yyvsp[0].tv_str);
4047 yyval.a_ref = asn1p_ref_new(yylineno);
4048 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00004049 checkmem(ret == 0);
4050 free(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00004051 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00004052 }
4053 break;
4054
Lev Walkin4a4543f2006-10-13 12:37:39 +00004055 case 270:
4056#line 2058 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004057 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004058 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
Lev Walkinf15320b2004-06-03 03:38:44 +00004059 int ret;
4060 p[0] = '@';
4061 p[1] = '.';
Lev Walkina00d6b32006-03-21 03:40:38 +00004062 strcpy(p + 2, yyvsp[0].tv_str);
4063 yyval.a_ref = asn1p_ref_new(yylineno);
4064 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00004065 checkmem(ret == 0);
4066 free(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00004067 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00004068 }
4069 break;
4070
Lev Walkin4a4543f2006-10-13 12:37:39 +00004071 case 271:
4072#line 2074 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004073 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004074 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004075 }
4076 break;
4077
Lev Walkin4a4543f2006-10-13 12:37:39 +00004078 case 272:
4079#line 2077 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004080 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004081 int l1 = strlen(yyvsp[-2].tv_str);
4082 int l3 = strlen(yyvsp[0].tv_str);
4083 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
4084 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
4085 yyval.tv_str[l1] = '.';
4086 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
4087 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin418298d2006-07-13 08:24:20 +00004088 }
4089 break;
4090
Lev Walkin4a4543f2006-10-13 12:37:39 +00004091 case 273:
4092#line 2095 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004093 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004094 yyval.a_marker.flags = EM_NOMARK;
4095 yyval.a_marker.default_value = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00004096 }
4097 break;
4098
Lev Walkin4a4543f2006-10-13 12:37:39 +00004099 case 274:
4100#line 2099 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004101 { yyval.a_marker = yyvsp[0].a_marker; }
4102 break;
4103
Lev Walkin4a4543f2006-10-13 12:37:39 +00004104 case 275:
4105#line 2103 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004106 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004107 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
4108 yyval.a_marker.default_value = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00004109 }
4110 break;
4111
Lev Walkin4a4543f2006-10-13 12:37:39 +00004112 case 276:
4113#line 2107 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004114 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004115 yyval.a_marker.flags = EM_DEFAULT;
4116 yyval.a_marker.default_value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004117 }
4118 break;
4119
Lev Walkin4a4543f2006-10-13 12:37:39 +00004120 case 277:
4121#line 2130 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004122 {
Lev Walkina9532f42006-09-17 04:52:50 +00004123 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004124 checkmem(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004125 }
4126 break;
4127
Lev Walkin4a4543f2006-10-13 12:37:39 +00004128 case 278:
4129#line 2134 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004130 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004131 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00004132 }
4133 break;
4134
Lev Walkin4a4543f2006-10-13 12:37:39 +00004135 case 279:
4136#line 2140 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004137 {
Lev Walkina9532f42006-09-17 04:52:50 +00004138 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004139 checkmem(yyval.a_expr);
4140 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004141 }
4142 break;
4143
Lev Walkin4a4543f2006-10-13 12:37:39 +00004144 case 280:
4145#line 2145 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004146 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004147 yyval.a_expr = yyvsp[-2].a_expr;
4148 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004149 }
4150 break;
4151
Lev Walkin4a4543f2006-10-13 12:37:39 +00004152 case 281:
4153#line 2152 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004154 {
Lev Walkina9532f42006-09-17 04:52:50 +00004155 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004156 checkmem(yyval.a_expr);
4157 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4158 yyval.a_expr->meta_type = AMT_VALUE;
4159 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004160 }
4161 break;
4162
Lev Walkinf1727152006-09-21 01:50:37 +00004163 case 282:
Lev Walkin4a4543f2006-10-13 12:37:39 +00004164#line 2159 "asn1p_y.y"
4165 {
4166 yyval.a_expr = NEW_EXPR();
4167 checkmem(yyval.a_expr);
4168 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4169 yyval.a_expr->meta_type = AMT_VALUE;
4170 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4171 yyval.a_expr->value = yyvsp[-1].a_value;
4172 }
4173 break;
4174
4175 case 283:
4176#line 2167 "asn1p_y.y"
4177 {
4178 yyval.a_expr = NEW_EXPR();
4179 checkmem(yyval.a_expr);
4180 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4181 yyval.a_expr->meta_type = AMT_VALUE;
4182 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4183 yyval.a_expr->value = yyvsp[-1].a_value;
4184 }
4185 break;
4186
4187 case 284:
4188#line 2175 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004189 {
Lev Walkina9532f42006-09-17 04:52:50 +00004190 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004191 checkmem(yyval.a_expr);
4192 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4193 yyval.a_expr->meta_type = AMT_VALUE;
4194 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004195 }
4196 break;
4197
Lev Walkin4a4543f2006-10-13 12:37:39 +00004198 case 285:
4199#line 2182 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004200 {
Lev Walkina9532f42006-09-17 04:52:50 +00004201 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004202 checkmem(yyval.a_expr);
4203 yyval.a_expr->Identifier = strdup("...");
4204 checkmem(yyval.a_expr->Identifier);
4205 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
4206 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin418298d2006-07-13 08:24:20 +00004207 }
4208 break;
4209
Lev Walkin4a4543f2006-10-13 12:37:39 +00004210 case 286:
4211#line 2193 "asn1p_y.y"
Lev Walkinf1727152006-09-21 01:50:37 +00004212 {
4213 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4214 checkmem(yyval.a_value);
4215 }
4216 break;
4217
4218 case 287:
Lev Walkin4a4543f2006-10-13 12:37:39 +00004219#line 2197 "asn1p_y.y"
4220 {
4221 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4222 checkmem(yyval.a_value);
4223 }
4224 break;
4225
4226 case 289:
4227#line 2205 "asn1p_y.y"
Lev Walkinadf863f2006-09-05 16:18:34 +00004228 {
4229 yyval.a_value = asn1p_value_fromdouble(yyvsp[0].a_dbl);
4230 checkmem(yyval.a_value);
4231 }
Lev Walkin418298d2006-07-13 08:24:20 +00004232 break;
4233
Lev Walkin4a4543f2006-10-13 12:37:39 +00004234 case 290:
4235#line 2236 "asn1p_y.y"
Lev Walkinadf863f2006-09-05 16:18:34 +00004236 { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); }
4237 break;
4238
Lev Walkin4a4543f2006-10-13 12:37:39 +00004239 case 291:
4240#line 2237 "asn1p_y.y"
Lev Walkinadf863f2006-09-05 16:18:34 +00004241 { yyval.a_tag = yyvsp[0].a_tag; }
4242 break;
4243
Lev Walkin4a4543f2006-10-13 12:37:39 +00004244 case 292:
4245#line 2241 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004246 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004247 yyval.a_tag = yyvsp[-1].a_tag;
4248 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin418298d2006-07-13 08:24:20 +00004249 }
4250 break;
4251
Lev Walkin4a4543f2006-10-13 12:37:39 +00004252 case 293:
4253#line 2248 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004254 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004255 yyval.a_tag = yyvsp[-2].a_tag;
4256 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin418298d2006-07-13 08:24:20 +00004257 }
4258 break;
4259
Lev Walkin4a4543f2006-10-13 12:37:39 +00004260 case 294:
4261#line 2254 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004262 { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; }
4263 break;
4264
Lev Walkinf1727152006-09-21 01:50:37 +00004265 case 295:
Lev Walkin4a4543f2006-10-13 12:37:39 +00004266#line 2255 "asn1p_y.y"
4267 { yyval.a_tag.tag_class = TC_UNIVERSAL; }
Lev Walkin418298d2006-07-13 08:24:20 +00004268 break;
4269
Lev Walkinf1727152006-09-21 01:50:37 +00004270 case 296:
4271#line 2256 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004272 { yyval.a_tag.tag_class = TC_APPLICATION; }
Lev Walkin418298d2006-07-13 08:24:20 +00004273 break;
4274
Lev Walkinf1727152006-09-21 01:50:37 +00004275 case 297:
4276#line 2257 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004277 { yyval.a_tag.tag_class = TC_PRIVATE; }
Lev Walkin418298d2006-07-13 08:24:20 +00004278 break;
4279
Lev Walkinf1727152006-09-21 01:50:37 +00004280 case 298:
Lev Walkin4a4543f2006-10-13 12:37:39 +00004281#line 2261 "asn1p_y.y"
4282 { yyval.a_tag.tag_mode = TM_DEFAULT; }
Lev Walkin418298d2006-07-13 08:24:20 +00004283 break;
4284
Lev Walkina9532f42006-09-17 04:52:50 +00004285 case 299:
Lev Walkinf1727152006-09-21 01:50:37 +00004286#line 2262 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004287 { yyval.a_tag.tag_mode = TM_IMPLICIT; }
Lev Walkin418298d2006-07-13 08:24:20 +00004288 break;
4289
Lev Walkina9532f42006-09-17 04:52:50 +00004290 case 300:
Lev Walkin4a4543f2006-10-13 12:37:39 +00004291#line 2263 "asn1p_y.y"
4292 { yyval.a_tag.tag_mode = TM_EXPLICIT; }
Lev Walkin866bd7f2006-09-14 10:35:20 +00004293 break;
4294
Lev Walkina9532f42006-09-17 04:52:50 +00004295 case 301:
Lev Walkin4a4543f2006-10-13 12:37:39 +00004296#line 2267 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00004297 {
Lev Walkinf1727152006-09-21 01:50:37 +00004298 checkmem(yyvsp[0].tv_str);
Lev Walkin866bd7f2006-09-14 10:35:20 +00004299 yyval.tv_str = yyvsp[0].tv_str;
4300 }
4301 break;
4302
Lev Walkina9532f42006-09-17 04:52:50 +00004303 case 302:
Lev Walkin4a4543f2006-10-13 12:37:39 +00004304#line 2271 "asn1p_y.y"
4305 {
4306 checkmem(yyvsp[0].tv_str);
4307 yyval.tv_str = yyvsp[0].tv_str;
4308 }
Lev Walkinf1727152006-09-21 01:50:37 +00004309 break;
4310
4311 case 303:
Lev Walkin4a4543f2006-10-13 12:37:39 +00004312#line 2279 "asn1p_y.y"
Lev Walkinf1727152006-09-21 01:50:37 +00004313 {
Lev Walkin4a4543f2006-10-13 12:37:39 +00004314 checkmem(yyvsp[0].tv_str);
Lev Walkinf1727152006-09-21 01:50:37 +00004315 yyval.tv_str = yyvsp[0].tv_str;
4316 }
4317 break;
4318
4319 case 304:
Lev Walkin4a4543f2006-10-13 12:37:39 +00004320#line 2286 "asn1p_y.y"
4321 { yyval.tv_str = 0; }
4322 break;
4323
4324 case 305:
4325#line 2287 "asn1p_y.y"
4326 {
4327 yyval.tv_str = yyvsp[0].tv_str;
4328 }
4329 break;
4330
4331 case 306:
4332#line 2293 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00004333 {
4334 checkmem(yyvsp[0].tv_str);
4335 yyval.tv_str = yyvsp[0].tv_str;
4336 }
4337 break;
4338
Lev Walkin418298d2006-07-13 08:24:20 +00004339
4340 }
4341
4342/* Line 1016 of /usr/local/share/bison/yacc.c. */
Lev Walkin4a4543f2006-10-13 12:37:39 +00004343#line 4344 "asn1p_y.c"
Lev Walkinf15320b2004-06-03 03:38:44 +00004344
4345 yyvsp -= yylen;
4346 yyssp -= yylen;
Lev Walkinf15320b2004-06-03 03:38:44 +00004347
Lev Walkin418298d2006-07-13 08:24:20 +00004348
4349#if YYDEBUG
Lev Walkina00d6b32006-03-21 03:40:38 +00004350 if (yydebug)
4351 {
Lev Walkin418298d2006-07-13 08:24:20 +00004352 short *yyssp1 = yyss - 1;
4353 YYFPRINTF (stderr, "state stack now");
4354 while (yyssp1 != yyssp)
4355 YYFPRINTF (stderr, " %d", *++yyssp1);
4356 YYFPRINTF (stderr, "\n");
Lev Walkina00d6b32006-03-21 03:40:38 +00004357 }
4358#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00004359
4360 *++yyvsp = yyval;
4361
Lev Walkinf15320b2004-06-03 03:38:44 +00004362
Lev Walkin418298d2006-07-13 08:24:20 +00004363 /* Now `shift' the result of the reduction. Determine what state
4364 that goes to, based on the state we popped back to and the rule
4365 number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00004366
4367 yyn = yyr1[yyn];
4368
Lev Walkin418298d2006-07-13 08:24:20 +00004369 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
4370 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00004371 yystate = yytable[yystate];
4372 else
Lev Walkin418298d2006-07-13 08:24:20 +00004373 yystate = yydefgoto[yyn - YYNTOKENS];
Lev Walkinf15320b2004-06-03 03:38:44 +00004374
4375 goto yynewstate;
4376
Lev Walkinf15320b2004-06-03 03:38:44 +00004377
Lev Walkin418298d2006-07-13 08:24:20 +00004378/*------------------------------------.
4379| yyerrlab -- here on detecting error |
4380`------------------------------------*/
4381yyerrlab:
4382 /* If not already recovering from an error, report this error. */
4383 if (!yyerrstatus)
Lev Walkinf15320b2004-06-03 03:38:44 +00004384 {
4385 ++yynerrs;
Lev Walkin418298d2006-07-13 08:24:20 +00004386#if YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00004387 yyn = yypact[yystate];
4388
Lev Walkin418298d2006-07-13 08:24:20 +00004389 if (YYPACT_NINF < yyn && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00004390 {
Lev Walkin418298d2006-07-13 08:24:20 +00004391 YYSIZE_T yysize = 0;
4392 int yytype = YYTRANSLATE (yychar);
4393 char *yymsg;
4394 int yyx, yycount;
Lev Walkinf15320b2004-06-03 03:38:44 +00004395
Lev Walkin418298d2006-07-13 08:24:20 +00004396 yycount = 0;
4397 /* Start YYX at -YYN if negative to avoid negative indexes in
4398 YYCHECK. */
4399 for (yyx = yyn < 0 ? -yyn : 0;
4400 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
4401 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
4402 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
4403 yysize += yystrlen ("parse error, unexpected ") + 1;
4404 yysize += yystrlen (yytname[yytype]);
4405 yymsg = (char *) YYSTACK_ALLOC (yysize);
4406 if (yymsg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00004407 {
Lev Walkin418298d2006-07-13 08:24:20 +00004408 char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
4409 yyp = yystpcpy (yyp, yytname[yytype]);
Lev Walkina00d6b32006-03-21 03:40:38 +00004410
Lev Walkin418298d2006-07-13 08:24:20 +00004411 if (yycount < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00004412 {
Lev Walkin418298d2006-07-13 08:24:20 +00004413 yycount = 0;
4414 for (yyx = yyn < 0 ? -yyn : 0;
4415 yyx < (int) (sizeof (yytname) / sizeof (char *));
4416 yyx++)
4417 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
Lev Walkina00d6b32006-03-21 03:40:38 +00004418 {
Lev Walkin418298d2006-07-13 08:24:20 +00004419 const char *yyq = ! yycount ? ", expecting " : " or ";
4420 yyp = yystpcpy (yyp, yyq);
4421 yyp = yystpcpy (yyp, yytname[yyx]);
4422 yycount++;
Lev Walkina00d6b32006-03-21 03:40:38 +00004423 }
Lev Walkinf15320b2004-06-03 03:38:44 +00004424 }
Lev Walkin418298d2006-07-13 08:24:20 +00004425 yyerror (yymsg);
4426 YYSTACK_FREE (yymsg);
Lev Walkinf15320b2004-06-03 03:38:44 +00004427 }
4428 else
Lev Walkin418298d2006-07-13 08:24:20 +00004429 yyerror ("parse error; also virtual memory exhausted");
Lev Walkinf15320b2004-06-03 03:38:44 +00004430 }
4431 else
4432#endif /* YYERROR_VERBOSE */
Lev Walkin418298d2006-07-13 08:24:20 +00004433 yyerror ("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00004434 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004435 goto yyerrlab1;
Lev Walkinf15320b2004-06-03 03:38:44 +00004436
Lev Walkin418298d2006-07-13 08:24:20 +00004437
4438/*----------------------------------------------------.
4439| yyerrlab1 -- error raised explicitly by an action. |
4440`----------------------------------------------------*/
4441yyerrlab1:
Lev Walkinf15320b2004-06-03 03:38:44 +00004442 if (yyerrstatus == 3)
4443 {
Lev Walkin418298d2006-07-13 08:24:20 +00004444 /* If just tried and failed to reuse lookahead token after an
4445 error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00004446
Lev Walkin418298d2006-07-13 08:24:20 +00004447 /* Return failure if at end of input. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004448 if (yychar == YYEOF)
Lev Walkin418298d2006-07-13 08:24:20 +00004449 {
4450 /* Pop the error token. */
4451 YYPOPSTACK;
4452 /* Pop the rest of the stack. */
4453 while (yyssp > yyss)
4454 {
4455 YYDPRINTF ((stderr, "Error: popping "));
4456 YYDSYMPRINT ((stderr,
4457 yystos[*yyssp],
4458 *yyvsp));
4459 YYDPRINTF ((stderr, "\n"));
4460 yydestruct (yystos[*yyssp], *yyvsp);
4461 YYPOPSTACK;
4462 }
4463 YYABORT;
4464 }
Lev Walkinf15320b2004-06-03 03:38:44 +00004465
Lev Walkin418298d2006-07-13 08:24:20 +00004466 YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
4467 yychar, yytname[yychar1]));
4468 yydestruct (yychar1, yylval);
Lev Walkina00d6b32006-03-21 03:40:38 +00004469 yychar = YYEMPTY;
Lev Walkinf15320b2004-06-03 03:38:44 +00004470 }
4471
Lev Walkin418298d2006-07-13 08:24:20 +00004472 /* Else will try to reuse lookahead token after shifting the error
4473 token. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004474
Lev Walkin418298d2006-07-13 08:24:20 +00004475 yyerrstatus = 3; /* Each real token shifted decrements this. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004476
Lev Walkin418298d2006-07-13 08:24:20 +00004477 for (;;)
Lev Walkina00d6b32006-03-21 03:40:38 +00004478 {
Lev Walkin418298d2006-07-13 08:24:20 +00004479 yyn = yypact[yystate];
4480 if (yyn != YYPACT_NINF)
4481 {
4482 yyn += YYTERROR;
4483 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
4484 {
4485 yyn = yytable[yyn];
4486 if (0 < yyn)
4487 break;
4488 }
4489 }
4490
4491 /* Pop the current state because it cannot handle the error token. */
4492 if (yyssp == yyss)
4493 YYABORT;
4494
4495 YYDPRINTF ((stderr, "Error: popping "));
4496 YYDSYMPRINT ((stderr,
4497 yystos[*yyssp], *yyvsp));
4498 YYDPRINTF ((stderr, "\n"));
4499
4500 yydestruct (yystos[yystate], *yyvsp);
4501 yyvsp--;
4502 yystate = *--yyssp;
4503
4504
4505#if YYDEBUG
4506 if (yydebug)
4507 {
4508 short *yyssp1 = yyss - 1;
4509 YYFPRINTF (stderr, "Error: state stack now");
4510 while (yyssp1 != yyssp)
4511 YYFPRINTF (stderr, " %d", *++yyssp1);
4512 YYFPRINTF (stderr, "\n");
4513 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004514#endif
Lev Walkina00d6b32006-03-21 03:40:38 +00004515 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004516
Lev Walkinf15320b2004-06-03 03:38:44 +00004517 if (yyn == YYFINAL)
4518 YYACCEPT;
4519
Lev Walkin418298d2006-07-13 08:24:20 +00004520 YYDPRINTF ((stderr, "Shifting error token, "));
Lev Walkina00d6b32006-03-21 03:40:38 +00004521
Lev Walkinf15320b2004-06-03 03:38:44 +00004522 *++yyvsp = yylval;
Lev Walkin418298d2006-07-13 08:24:20 +00004523
Lev Walkinf15320b2004-06-03 03:38:44 +00004524
4525 yystate = yyn;
4526 goto yynewstate;
4527
Lev Walkina00d6b32006-03-21 03:40:38 +00004528
Lev Walkin418298d2006-07-13 08:24:20 +00004529/*-------------------------------------.
4530| yyacceptlab -- YYACCEPT comes here. |
4531`-------------------------------------*/
4532yyacceptlab:
4533 yyresult = 0;
4534 goto yyreturn;
4535
4536/*-----------------------------------.
4537| yyabortlab -- YYABORT comes here. |
4538`-----------------------------------*/
4539yyabortlab:
4540 yyresult = 1;
4541 goto yyreturn;
4542
4543#ifndef yyoverflow
4544/*----------------------------------------------.
4545| yyoverflowlab -- parser overflow comes here. |
4546`----------------------------------------------*/
4547yyoverflowlab:
4548 yyerror ("parser stack overflow");
4549 yyresult = 2;
4550 /* Fall through. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004551#endif
Lev Walkin418298d2006-07-13 08:24:20 +00004552
4553yyreturn:
4554#ifndef yyoverflow
4555 if (yyss != yyssa)
4556 YYSTACK_FREE (yyss);
4557#endif
4558 return yyresult;
Lev Walkinf15320b2004-06-03 03:38:44 +00004559}
Lev Walkin418298d2006-07-13 08:24:20 +00004560
4561
Lev Walkin4a4543f2006-10-13 12:37:39 +00004562#line 2299 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00004563
4564
4565
4566/*
4567 * Convert Xstring ('0101'B or '5'H) to the binary vector.
4568 */
4569static asn1p_value_t *
4570_convert_bitstring2binary(char *str, int base) {
4571 asn1p_value_t *val;
4572 int slen;
4573 int memlen;
4574 int baselen;
4575 int bits;
4576 uint8_t *binary_vector;
4577 uint8_t *bv_ptr;
4578 uint8_t cur_val;
4579
4580 assert(str);
4581 assert(str[0] == '\'');
4582
4583 switch(base) {
4584 case 'B':
4585 baselen = 1;
4586 break;
4587 case 'H':
4588 baselen = 4;
4589 break;
4590 default:
4591 assert(base == 'B' || base == 'H');
4592 errno = EINVAL;
4593 return NULL;
4594 }
4595
4596 slen = strlen(str);
4597 assert(str[slen - 1] == base);
4598 assert(str[slen - 2] == '\'');
4599
4600 memlen = slen / (8 / baselen); /* Conservative estimate */
4601
4602 bv_ptr = binary_vector = malloc(memlen + 1);
4603 if(bv_ptr == NULL)
4604 /* ENOMEM */
4605 return NULL;
4606
4607 cur_val = 0;
4608 bits = 0;
4609 while(*(++str) != '\'') {
4610 switch(baselen) {
4611 case 1:
4612 switch(*str) {
4613 case '1':
4614 cur_val |= 1 << (7 - (bits % 8));
4615 case '0':
4616 break;
4617 default:
4618 assert(!"_y UNREACH1");
4619 case ' ': case '\r': case '\n':
4620 continue;
4621 }
4622 break;
4623 case 4:
4624 switch(*str) {
4625 case '0': case '1': case '2': case '3': case '4':
4626 case '5': case '6': case '7': case '8': case '9':
4627 cur_val |= (*str - '0') << (4 - (bits % 8));
4628 break;
4629 case 'A': case 'B': case 'C':
4630 case 'D': case 'E': case 'F':
4631 cur_val |= ((*str - 'A') + 10)
4632 << (4 - (bits % 8));
4633 break;
4634 default:
4635 assert(!"_y UNREACH2");
4636 case ' ': case '\r': case '\n':
4637 continue;
4638 }
4639 break;
4640 }
4641
4642 bits += baselen;
4643 if((bits % 8) == 0) {
4644 *bv_ptr++ = cur_val;
4645 cur_val = 0;
4646 }
4647 }
4648
4649 *bv_ptr = cur_val;
4650 assert((bv_ptr - binary_vector) <= memlen);
4651
4652 val = asn1p_value_frombits(binary_vector, bits, 0);
4653 if(val == NULL) {
4654 free(binary_vector);
4655 }
4656
4657 return val;
4658}
4659
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00004660/*
4661 * For unnamed types (used in old X.208 compliant modules)
4662 * generate some sort of interim names, to not to force human being to fix
4663 * the specification's compliance to modern ASN.1 standards.
4664 */
4665static void
4666_fixup_anonymous_identifier(asn1p_expr_t *expr) {
4667 char *p;
4668 assert(expr->Identifier == 0);
4669
4670 /*
4671 * Try to figure out the type name
4672 * without going too much into details
4673 */
4674 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
4675 if(expr->reference && expr->reference->comp_count > 0)
4676 expr->Identifier = expr->reference->components[0].name;
4677
4678 fprintf(stderr,
4679 "WARNING: Line %d: expected lower-case member identifier, "
4680 "found an unnamed %s.\n"
4681 "WARNING: Obsolete X.208 syntax detected, "
4682 "please give the member a name.\n",
4683 yylineno, expr->Identifier ? expr->Identifier : "type");
4684
4685 if(!expr->Identifier)
4686 expr->Identifier = "unnamed";
4687 expr->Identifier = strdup(expr->Identifier);
4688 assert(expr->Identifier);
4689 /* Make a lowercase identifier from the type name */
4690 for(p = expr->Identifier; *p; p++) {
4691 switch(*p) {
4692 case 'A' ... 'Z': *p += 32; break;
4693 case ' ': *p = '_'; break;
4694 case '-': *p = '_'; break;
4695 }
4696 }
4697 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
4698 "Name clash may occur later.\n",
4699 expr->Identifier);
4700}
4701
Lev Walkinf15320b2004-06-03 03:38:44 +00004702int
4703yyerror(const char *msg) {
Lev Walkin9d542d22006-03-14 16:31:37 +00004704 extern char *asn1p_text;
Lev Walkinf15320b2004-06-03 03:38:44 +00004705 fprintf(stderr,
4706 "ASN.1 grammar parse error "
4707 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00004708 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00004709 return -1;
4710}
4711
Lev Walkin418298d2006-07-13 08:24:20 +00004712