blob: 95d451343e7349b221de5ef4340dcf76d8b24ed6 [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 Walkin5c541f12006-10-18 18:40:14 +0000526#define YYLAST 871
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 Walkin5c541f12006-10-18 18:40:14 +0000531#define YYNNTS 121
Lev Walkin418298d2006-07-13 08:24:20 +0000532/* YYNRULES -- Number of rules. */
Lev Walkin5c541f12006-10-18 18:40:14 +0000533#define YYNRULES 309
Lev Walkin418298d2006-07-13 08:24:20 +0000534/* YYNRULES -- Number of states. */
Lev Walkin5c541f12006-10-18 18:40:14 +0000535#define YYNSTATES 469
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,
Lev Walkin5c541f12006-10-18 18:40:14 +0000614 654, 658, 662, 666, 668, 670, 673, 676, 678, 680,
615 682, 684, 686, 688, 690, 692, 696, 702, 704, 708,
616 710, 714, 715, 717, 719, 721, 723, 725, 727, 729,
617 730, 736, 739, 741, 744, 747, 751, 753, 755, 759,
618 764, 766, 770, 773, 777, 779, 783, 784, 786, 788,
619 791, 794, 798, 800, 804, 806, 811, 816, 818, 820,
620 822, 824, 826, 828, 829, 831, 834, 839, 840, 842,
621 844, 846, 847, 849, 851, 853, 855, 857, 858, 860
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 Walkin5c541f12006-10-18 18:40:14 +0000628 -1, 238, 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 Walkin5c541f12006-10-18 18:40:14 +0000630 -1, 129, -1, 128, 129, -1, 241, -1, 241, 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,
Lev Walkin5c541f12006-10-18 18:40:14 +0000638 -1, -1, 127, -1, 144, 51, 238, 142, -1, 145,
639 -1, 144, 113, 145, -1, 238, -1, 238, 108, 109,
640 -1, 241, -1, -1, 147, -1, 47, 148, 112, -1,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000641 47, 22, 112, -1, 47, 112, -1, 149, -1, 148,
Lev Walkin5c541f12006-10-18 18:40:14 +0000642 113, 149, -1, 238, -1, 238, 108, 109, -1, 241,
643 -1, 108, 200, 109, -1, 238, 152, 3, 150, -1,
644 192, -1, 177, -1, 177, 108, 156, 109, -1, 238,
645 3, 173, -1, 238, 3, 163, -1, 238, 108, 154,
646 109, 3, 173, -1, 238, 108, 154, 109, 3, 163,
647 -1, 155, -1, 154, 113, 155, -1, 238, -1, 238,
648 114, 241, -1, 238, 114, 238, -1, 190, 114, 241,
649 -1, 190, 114, 238, -1, 157, -1, 156, 113, 157,
650 -1, 173, -1, 186, -1, 241, -1, 150, -1, -1,
651 159, -1, 160, -1, 159, 113, 160, -1, 241, 173,
652 226, -1, 173, 226, -1, 35, 73, 173, -1, 172,
653 -1, 162, -1, 161, 113, 162, -1, 241, 173, -1,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000654 172, -1, 173, -1, 33, 108, 165, 109, 167, -1,
655 -1, 93, -1, 166, -1, 165, 113, 166, -1, 17,
Lev Walkin5c541f12006-10-18 18:40:14 +0000656 226, -1, 18, 173, 164, 226, -1, 18, 181, 226,
657 -1, 18, 182, 226, -1, 17, 181, 226, -1, 17,
658 173, 226, -1, 17, 182, 226, -1, -1, 168, -1,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000659 -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,
Lev Walkin5c541f12006-10-18 18:40:14 +0000662 117, 231, -1, 233, 175, 196, -1, -1, 174, 176,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000663 -1, 152, -1, 32, 108, 161, 109, -1, 83, 108,
664 158, 109, -1, 84, 108, 158, 109, -1, 83, 196,
Lev Walkin5c541f12006-10-18 18:40:14 +0000665 73, 240, 233, 175, -1, 84, 196, 73, 240, 233,
666 175, -1, 23, -1, 23, 40, 30, 241, -1, 61,
667 73, 177, -1, 15, -1, 15, 118, 238, -1, 239,
668 118, 238, -1, 15, 118, 241, -1, 239, -1, 239,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000669 118, 178, -1, 179, -1, 178, 118, 179, -1, 180,
670 -1, 17, -1, 18, -1, 17, -1, 181, 118, 17,
Lev Walkin5c541f12006-10-18 18:40:14 +0000671 -1, 181, 118, 18, -1, 16, -1, 241, 152, 3,
672 184, -1, 186, -1, 187, -1, 241, 114, 184, -1,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000673 -1, 108, 185, 189, -1, 68, -1, 50, -1, 91,
Lev Walkin5c541f12006-10-18 18:40:14 +0000674 -1, 6, -1, 8, -1, 188, -1, 231, -1, 241,
675 -1, 238, 118, 241, -1, 7, -1, 13, -1, 14,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000676 -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,
Lev Walkin5c541f12006-10-18 18:40:14 +0000680 27, 86, -1, 190, -1, 191, 228, -1, 28, -1,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000681 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,
Lev Walkin5c541f12006-10-18 18:40:14 +0000685 215, 111, -1, 199, -1, 85, 110, 200, 111, -1,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000686 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,
Lev Walkin5c541f12006-10-18 18:40:14 +0000690 -1, 205, -1, 205, 101, 205, -1, 207, 110, 200,
691 111, -1, 110, 200, 111, -1, 208, -1, 209, -1,
692 208, 219, 208, -1, 66, 219, 208, -1, 208, 219,
693 65, -1, 66, 219, 65, -1, 210, -1, 206, -1,
694 75, 7, -1, 75, 241, -1, 85, -1, 51, -1,
695 50, -1, 91, -1, 232, -1, 188, -1, 241, -1,
696 238, -1, 100, 34, 199, -1, 100, 35, 108, 211,
697 109, -1, 212, -1, 211, 113, 212, -1, 107, -1,
698 241, 196, 213, -1, -1, 214, -1, 78, -1, 20,
699 -1, 74, -1, 216, -1, 220, -1, 218, -1, -1,
700 36, 30, 108, 217, 189, -1, 37, 173, -1, 106,
701 -1, 106, 119, -1, 119, 106, -1, 119, 106, 119,
702 -1, 221, -1, 222, -1, 108, 238, 109, -1, 221,
703 108, 223, 109, -1, 224, -1, 223, 113, 224, -1,
704 120, 225, -1, 120, 118, 225, -1, 241, -1, 225,
705 118, 241, -1, -1, 227, -1, 74, -1, 38, 184,
706 -1, 108, 109, -1, 108, 229, 109, -1, 230, -1,
707 229, 113, 230, -1, 241, -1, 241, 110, 231, 111,
708 -1, 241, 110, 187, 111, -1, 231, -1, 107, -1,
709 10, -1, 11, -1, 231, -1, 12, -1, -1, 234,
710 -1, 235, 237, -1, 115, 236, 10, 116, -1, -1,
711 94, -1, 24, -1, 80, -1, -1, 57, -1, 46,
712 -1, 15, -1, 16, -1, 16, -1, -1, 241, -1,
713 9, -1
Lev Walkin418298d2006-07-13 08:24:20 +0000714};
715
716/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
717static const unsigned short yyrline[] =
718{
Lev Walkin5c541f12006-10-18 18:40:14 +0000719 0, 354, 354, 360, 366, 383, 382, 411, 413, 416,
720 420, 425, 432, 440, 445, 449, 458, 460, 468, 472,
721 480, 484, 487, 490, 494, 514, 516, 524, 533, 537,
722 552, 560, 573, 581, 580, 594, 606, 608, 610, 621,
723 626, 628, 630, 636, 642, 644, 647, 658, 664, 670,
724 677, 683, 692, 694, 705, 709, 712, 719, 725, 731,
725 738, 744, 753, 755, 765, 779, 789, 805, 815, 831,
726 837, 844, 854, 864, 869, 876, 883, 891, 901, 907,
727 913, 917, 925, 936, 958, 960, 962, 968, 974, 982,
728 988, 995, 1000, 1006, 1012, 1018, 1021, 1027, 1037, 1039,
729 1042, 1050, 1057, 1070, 1081, 1091, 1102, 1112, 1123, 1134,
730 1136, 1143, 1141, 1150, 1155, 1161, 1166, 1169, 1173, 1178,
731 1187, 1196, 1207, 1229, 1236, 1255, 1259, 1265, 1271, 1277,
732 1287, 1297, 1303, 1314, 1328, 1337, 1347, 1357, 1367, 1375,
733 1396, 1405, 1414, 1416, 1423, 1430, 1436, 1440, 1446, 1466,
734 1476, 1478, 1479, 1486, 1486, 1491, 1498, 1504, 1509, 1513,
735 1517, 1520, 1525, 1537, 1554, 1559, 1564, 1597, 1607, 1621,
736 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632,
737 1633, 1634, 1640, 1642, 1643, 1646, 1653, 1665, 1667, 1671,
738 1675, 1676, 1677, 1678, 1679, 1683, 1684, 1685, 1686, 1690,
739 1691, 1698, 1698, 1699, 1699, 1701, 1703, 1708, 1710, 1715,
740 1719, 1728, 1732, 1737, 1742, 1745, 1751, 1761, 1763, 1768,
741 1770, 1775, 1777, 1783, 1785, 1790, 1799, 1807, 1813, 1819,
742 1826, 1834, 1842, 1851, 1854, 1859, 1865, 1875, 1879, 1884,
743 1890, 1895, 1896, 1897, 1910, 1924, 1928, 1933, 1937, 1942,
744 1949, 1962, 1964, 1967, 1971, 1974, 1981, 1983, 1984, 1989,
745 1987, 1999, 2007, 2009, 2010, 2011, 2013, 2017, 2025, 2040,
746 2046, 2053, 2066, 2078, 2093, 2097, 2114, 2119, 2122, 2127,
747 2149, 2154, 2159, 2165, 2171, 2179, 2187, 2195, 2202, 2212,
748 2217, 2223, 2225, 2255, 2257, 2260, 2267, 2273, 2275, 2276,
749 2277, 2280, 2282, 2283, 2286, 2291, 2298, 2305, 2307, 2312
Lev Walkin418298d2006-07-13 08:24:20 +0000750};
751#endif
752
753#if YYDEBUG || YYERROR_VERBOSE
754/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
755 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
756static const char *const yytname[] =
757{
758 "$end", "error", "$undefined", "TOK_PPEQ", "TOK_whitespace", "TOK_opaque",
759 "TOK_bstring", "TOK_cstring", "TOK_hstring", "TOK_identifier",
Lev Walkinadf863f2006-09-05 16:18:34 +0000760 "TOK_number", "TOK_number_negative", "TOK_realnumber", "TOK_tuple",
761 "TOK_quadruple", "TOK_typereference", "TOK_capitalreference",
762 "TOK_typefieldreference", "TOK_valuefieldreference", "TOK_Literal",
763 "TOK_ABSENT", "TOK_ABSTRACT_SYNTAX", "TOK_ALL", "TOK_ANY",
764 "TOK_APPLICATION", "TOK_AUTOMATIC", "TOK_BEGIN", "TOK_BIT",
765 "TOK_BMPString", "TOK_BOOLEAN", "TOK_BY", "TOK_CHARACTER", "TOK_CHOICE",
766 "TOK_CLASS", "TOK_COMPONENT", "TOK_COMPONENTS", "TOK_CONSTRAINED",
767 "TOK_CONTAINING", "TOK_DEFAULT", "TOK_DEFINITIONS", "TOK_DEFINED",
768 "TOK_EMBEDDED", "TOK_ENCODED", "TOK_ENCODING_CONTROL", "TOK_END",
769 "TOK_ENUMERATED", "TOK_EXPLICIT", "TOK_EXPORTS", "TOK_EXTENSIBILITY",
770 "TOK_EXTERNAL", "TOK_FALSE", "TOK_FROM", "TOK_GeneralizedTime",
771 "TOK_GeneralString", "TOK_GraphicString", "TOK_IA5String",
772 "TOK_IDENTIFIER", "TOK_IMPLICIT", "TOK_IMPLIED", "TOK_IMPORTS",
773 "TOK_INCLUDES", "TOK_INSTANCE", "TOK_INSTRUCTIONS", "TOK_INTEGER",
774 "TOK_ISO646String", "TOK_MAX", "TOK_MIN", "TOK_MINUS_INFINITY",
775 "TOK_NULL", "TOK_NumericString", "TOK_OBJECT", "TOK_ObjectDescriptor",
776 "TOK_OCTET", "TOK_OF", "TOK_OPTIONAL", "TOK_PATTERN", "TOK_PDV",
777 "TOK_PLUS_INFINITY", "TOK_PRESENT", "TOK_PrintableString",
778 "TOK_PRIVATE", "TOK_REAL", "TOK_RELATIVE_OID", "TOK_SEQUENCE",
779 "TOK_SET", "TOK_SIZE", "TOK_STRING", "TOK_SYNTAX", "TOK_T61String",
780 "TOK_TAGS", "TOK_TeletexString", "TOK_TRUE", "TOK_TYPE_IDENTIFIER",
781 "TOK_UNIQUE", "TOK_UNIVERSAL", "TOK_UniversalString", "TOK_UTCTime",
782 "TOK_UTF8String", "TOK_VideotexString", "TOK_VisibleString", "TOK_WITH",
783 "TOK_EXCEPT", "'^'", "TOK_INTERSECTION", "'|'", "TOK_UNION",
784 "TOK_TwoDots", "TOK_ThreeDots", "'{'", "'}'", "'('", "')'", "';'",
785 "','", "':'", "'['", "']'", "'!'", "'.'", "'<'", "'@'", "$accept",
Lev Walkina9532f42006-09-17 04:52:50 +0000786 "ParsedGrammar", "ModuleList", "ModuleDefinition", "@1",
Lev Walkinadf863f2006-09-05 16:18:34 +0000787 "optObjectIdentifier", "ObjectIdentifier", "ObjectIdentifierBody",
Lev Walkin866bd7f2006-09-14 10:35:20 +0000788 "ObjectIdentifierElement", "optModuleDefinitionFlags",
789 "ModuleDefinitionFlags", "ModuleDefinitionFlag", "optModuleBody",
Lev Walkina9532f42006-09-17 04:52:50 +0000790 "ModuleBody", "AssignmentList", "Assignment", "@2", "optImports",
Lev Walkin4a4543f2006-10-13 12:37:39 +0000791 "ImportsDefinition", "optImportsBundleSet", "ImportsBundleSet",
792 "AssignedIdentifier", "ImportsBundle", "ImportsList", "ImportsElement",
793 "optExports", "ExportsDefinition", "ExportsBody", "ExportsElement",
794 "ValueSet", "ValueSetTypeAssignment", "DefinedType",
795 "DataTypeReference", "ParameterArgumentList", "ParameterArgumentName",
796 "ActualParameterList", "ActualParameter", "optComponentTypeLists",
797 "ComponentTypeLists", "ComponentType", "AlternativeTypeLists",
798 "AlternativeType", "ObjectClass", "optUnique", "FieldSpec",
799 "ClassField", "optWithSyntax", "WithSyntax", "@3", "WithSyntaxList",
800 "WithSyntaxToken", "ExtensionAndException", "Type",
801 "NSTD_IndirectMarker", "TypeDeclaration", "TypeDeclarationSet",
802 "ComplexTypeReference", "ComplexTypeReferenceAmpList",
803 "ComplexTypeReferenceElement", "PrimitiveFieldReference", "FieldName",
804 "DefinedObjectClass", "ValueDefinition", "Value", "@4", "SimpleValue",
805 "DefinedValue", "RestrictedCharacterStringValue", "Opaque",
806 "BasicTypeId", "BasicTypeId_UniverationCompatible", "BasicType",
807 "BasicString", "UnionMark", "IntersectionMark", "optConstraints",
808 "Constraint", "SubtypeConstraint", "SetOfConstraints",
809 "ElementSetSpecs", "ElementSetSpec", "Unions", "Intersections",
Lev Walkin5c541f12006-10-18 18:40:14 +0000810 "IntersectionElements", "ConstraintSubtypeElement", "PatternConstraint",
811 "ConstraintSpec", "SingleValue", "ContainedSubtype",
812 "InnerTypeConstraint", "WithComponentsList", "WithComponentsElement",
813 "optPresenceConstraint", "PresenceConstraint", "GeneralConstraint",
814 "UserDefinedConstraint", "@5", "ContentsConstraint",
815 "ConstraintRangeSpec", "TableConstraint", "SimpleTableConstraint",
816 "ComponentRelationConstraint", "AtNotationList", "AtNotationElement",
817 "ComponentIdList", "optMarker", "Marker", "UniverationDefinition",
818 "UniverationList", "UniverationElement", "SignedNumber", "RealValue",
819 "optTag", "Tag", "TagTypeValue", "TagClass", "TagPlicit", "TypeRefName",
Lev Walkinadf863f2006-09-05 16:18:34 +0000820 "ObjectClassReference", "optIdentifier", "Identifier", 0
Lev Walkin418298d2006-07-13 08:24:20 +0000821};
822#endif
823
824# ifdef YYPRINT
825/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
826 token YYLEX-NUM. */
827static const unsigned short yytoknum[] =
828{
829 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
830 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
831 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
832 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
833 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
834 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
835 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
836 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
837 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
838 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
Lev Walkinadf863f2006-09-05 16:18:34 +0000839 355, 356, 94, 357, 124, 358, 359, 360, 123, 125,
840 40, 41, 59, 44, 58, 91, 93, 33, 46, 60,
841 64
Lev Walkin418298d2006-07-13 08:24:20 +0000842};
843# endif
844
845/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
846static const unsigned char yyr1[] =
847{
Lev Walkina9532f42006-09-17 04:52:50 +0000848 0, 121, 122, 123, 123, 125, 124, 126, 126, 127,
849 127, 128, 128, 129, 129, 129, 130, 130, 131, 131,
850 132, 132, 132, 132, 132, 133, 133, 134, 135, 135,
851 136, 136, 136, 137, 136, 136, 138, 138, 139, 139,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000852 140, 140, 141, 141, 142, 142, 143, 144, 144, 145,
853 145, 145, 146, 146, 147, 147, 147, 148, 148, 149,
854 149, 149, 150, 151, 152, 152, 152, 153, 153, 153,
855 153, 154, 154, 155, 155, 155, 155, 155, 156, 156,
856 157, 157, 157, 157, 158, 158, 159, 159, 160, 160,
857 160, 160, 161, 161, 162, 162, 162, 163, 164, 164,
858 165, 165, 166, 166, 166, 166, 166, 166, 166, 167,
859 167, 169, 168, 170, 170, 171, 171, 171, 171, 172,
860 172, 172, 173, 174, 175, 176, 176, 176, 176, 176,
861 176, 176, 176, 176, 177, 177, 177, 177, 177, 177,
862 178, 178, 179, 180, 180, 181, 181, 181, 182, 183,
863 184, 184, 184, 185, 184, 184, 186, 186, 186, 186,
864 186, 186, 187, 187, 188, 188, 188, 189, 189, 190,
865 190, 190, 190, 190, 190, 190, 190, 190, 190, 190,
866 190, 190, 191, 191, 191, 192, 192, 193, 193, 193,
867 193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
Lev Walkinf1727152006-09-21 01:50:37 +0000868 193, 194, 194, 195, 195, 196, 196, 197, 197, 198,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000869 198, 199, 199, 200, 200, 200, 200, 201, 201, 202,
870 202, 203, 203, 204, 204, 205, 205, 205, 205, 205,
Lev Walkin5c541f12006-10-18 18:40:14 +0000871 205, 205, 205, 205, 205, 206, 206, 207, 207, 208,
872 208, 208, 208, 208, 209, 210, 210, 211, 211, 212,
873 212, 213, 213, 214, 214, 214, 215, 215, 215, 217,
874 216, 218, 219, 219, 219, 219, 220, 220, 221, 222,
875 223, 223, 224, 224, 225, 225, 226, 226, 227, 227,
876 228, 228, 229, 229, 230, 230, 230, 230, 230, 231,
877 231, 232, 232, 233, 233, 234, 235, 236, 236, 236,
878 236, 237, 237, 237, 238, 238, 239, 240, 240, 241
Lev Walkin418298d2006-07-13 08:24:20 +0000879};
880
881/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
882static const unsigned char yyr2[] =
883{
Lev Walkina9532f42006-09-17 04:52:50 +0000884 0, 2, 1, 1, 2, 0, 9, 0, 1, 3,
885 2, 1, 2, 1, 4, 1, 0, 1, 1, 2,
886 2, 2, 2, 2, 2, 0, 1, 3, 1, 2,
887 1, 1, 1, 0, 3, 1, 0, 1, 3, 2,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000888 0, 1, 1, 2, 0, 1, 4, 1, 3, 1,
889 3, 1, 0, 1, 3, 3, 2, 1, 3, 1,
890 3, 1, 3, 4, 1, 1, 4, 3, 3, 6,
891 6, 1, 3, 1, 3, 3, 3, 3, 1, 3,
892 1, 1, 1, 1, 0, 1, 1, 3, 3, 2,
893 3, 1, 1, 3, 2, 1, 1, 5, 0, 1,
894 1, 3, 2, 4, 3, 3, 3, 3, 3, 0,
895 1, 0, 6, 1, 2, 1, 1, 1, 3, 1,
896 3, 3, 3, 0, 2, 1, 4, 4, 4, 6,
897 6, 1, 4, 3, 1, 3, 3, 3, 1, 3,
898 1, 3, 1, 1, 1, 1, 3, 3, 1, 4,
899 1, 1, 3, 0, 3, 1, 1, 1, 1, 1,
900 1, 1, 1, 3, 1, 1, 1, 1, 2, 1,
901 1, 1, 1, 2, 2, 1, 1, 2, 2, 1,
902 1, 1, 1, 1, 2, 1, 2, 1, 1, 1,
Lev Walkin418298d2006-07-13 08:24:20 +0000903 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000904 1, 1, 1, 1, 1, 0, 1, 1, 3, 1,
905 4, 3, 4, 1, 1, 3, 5, 1, 3, 1,
906 3, 1, 3, 1, 3, 4, 3, 1, 1, 3,
Lev Walkin5c541f12006-10-18 18:40:14 +0000907 3, 3, 3, 1, 1, 2, 2, 1, 1, 1,
908 1, 1, 1, 1, 1, 3, 5, 1, 3, 1,
909 3, 0, 1, 1, 1, 1, 1, 1, 1, 0,
910 5, 2, 1, 2, 2, 3, 1, 1, 3, 4,
911 1, 3, 2, 3, 1, 3, 0, 1, 1, 2,
912 2, 3, 1, 3, 1, 4, 4, 1, 1, 1,
913 1, 1, 1, 0, 1, 2, 4, 0, 1, 1,
914 1, 0, 1, 1, 1, 1, 1, 0, 1, 1
Lev Walkin418298d2006-07-13 08:24:20 +0000915};
916
917/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
918 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
919 means the default is an error. */
920static const unsigned short yydefact[] =
921{
Lev Walkin5c541f12006-10-18 18:40:14 +0000922 0, 304, 305, 0, 2, 3, 5, 1, 4, 7,
923 0, 0, 8, 309, 15, 10, 0, 11, 13, 16,
Lev Walkina9532f42006-09-17 04:52:50 +0000924 9, 12, 0, 0, 0, 0, 0, 0, 0, 17,
925 18, 0, 24, 22, 20, 23, 21, 0, 19, 14,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000926 52, 0, 0, 26, 36, 53, 0, 56, 0, 57,
927 59, 61, 6, 40, 0, 37, 55, 54, 0, 0,
928 39, 0, 41, 42, 0, 47, 49, 51, 187, 0,
929 188, 189, 190, 191, 192, 200, 193, 194, 195, 196,
930 197, 198, 199, 27, 28, 32, 30, 31, 35, 0,
931 0, 58, 60, 38, 43, 0, 0, 0, 33, 29,
Lev Walkin5c541f12006-10-18 18:40:14 +0000932 293, 134, 306, 0, 169, 0, 0, 183, 176, 180,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000933 182, 170, 0, 0, 171, 175, 179, 0, 0, 65,
934 185, 172, 64, 181, 138, 0, 44, 48, 50, 34,
Lev Walkin5c541f12006-10-18 18:40:14 +0000935 0, 297, 68, 67, 123, 294, 301, 0, 184, 178,
936 177, 174, 173, 0, 71, 0, 172, 73, 0, 293,
937 0, 186, 0, 0, 45, 46, 0, 299, 300, 298,
938 0, 0, 205, 303, 302, 295, 135, 137, 0, 0,
939 0, 0, 0, 63, 158, 164, 159, 289, 290, 165,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000940 166, 156, 157, 83, 0, 78, 80, 81, 160, 161,
Lev Walkin5c541f12006-10-18 18:40:14 +0000941 82, 288, 280, 0, 282, 287, 284, 143, 144, 139,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000942 140, 142, 136, 155, 153, 149, 150, 151, 0, 162,
Lev Walkin5c541f12006-10-18 18:40:14 +0000943 293, 293, 0, 100, 0, 131, 0, 0, 205, 205,
944 125, 124, 0, 0, 122, 206, 207, 209, 293, 72,
945 77, 76, 75, 74, 292, 0, 239, 238, 0, 0,
946 237, 240, 0, 213, 0, 242, 0, 214, 217, 219,
947 221, 223, 234, 0, 227, 228, 233, 291, 241, 244,
948 243, 66, 293, 281, 0, 0, 0, 0, 0, 0,
949 148, 145, 0, 278, 276, 276, 276, 102, 277, 98,
950 276, 276, 109, 0, 296, 0, 293, 0, 293, 0,
951 293, 0, 0, 0, 293, 0, 0, 0, 256, 258,
952 257, 266, 267, 0, 70, 69, 0, 262, 0, 0,
953 235, 236, 0, 0, 0, 62, 0, 201, 202, 0,
954 203, 204, 0, 0, 0, 0, 79, 283, 0, 0,
955 162, 141, 167, 154, 163, 152, 279, 107, 0, 106,
956 108, 99, 276, 104, 105, 0, 97, 110, 101, 0,
957 119, 0, 92, 95, 96, 293, 133, 0, 0, 85,
958 86, 91, 276, 293, 307, 0, 307, 0, 0, 261,
959 0, 211, 208, 0, 0, 218, 263, 264, 232, 230,
960 0, 245, 0, 226, 215, 220, 222, 224, 0, 231,
961 229, 286, 285, 168, 146, 147, 103, 0, 132, 0,
962 126, 293, 94, 293, 127, 293, 89, 276, 293, 308,
963 128, 293, 210, 259, 268, 0, 0, 270, 212, 265,
964 249, 0, 247, 205, 0, 225, 111, 120, 121, 93,
965 90, 87, 88, 123, 123, 0, 0, 272, 274, 269,
966 0, 246, 0, 251, 216, 0, 129, 130, 260, 273,
967 0, 271, 248, 254, 255, 253, 250, 252, 115, 116,
968 0, 0, 113, 117, 275, 0, 112, 114, 118
Lev Walkin418298d2006-07-13 08:24:20 +0000969};
970
971/* YYDEFGOTO[NTERM-NUM]. */
972static const short yydefgoto[] =
973{
Lev Walkina9532f42006-09-17 04:52:50 +0000974 -1, 3, 4, 5, 9, 11, 12, 16, 17, 28,
Lev Walkin4a4543f2006-10-13 12:37:39 +0000975 29, 30, 42, 43, 83, 84, 129, 54, 55, 61,
976 62, 155, 63, 64, 65, 44, 45, 48, 49, 183,
Lev Walkin5c541f12006-10-18 18:40:14 +0000977 85, 118, 86, 143, 144, 184, 185, 358, 359, 360,
978 351, 352, 132, 342, 212, 213, 346, 347, 445, 461,
979 462, 361, 362, 161, 162, 221, 119, 199, 200, 463,
980 275, 276, 87, 205, 267, 206, 207, 245, 333, 120,
981 121, 122, 123, 319, 322, 224, 225, 226, 227, 296,
982 247, 248, 249, 250, 251, 252, 253, 254, 255, 256,
983 421, 422, 456, 457, 297, 298, 435, 299, 309, 300,
984 301, 302, 416, 417, 437, 277, 278, 151, 193, 194,
985 257, 258, 134, 135, 136, 160, 165, 259, 124, 408,
986 260
Lev Walkin418298d2006-07-13 08:24:20 +0000987};
988
989/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
990 STATE-NUM. */
Lev Walkin5c541f12006-10-18 18:40:14 +0000991#define YYPACT_NINF -292
Lev Walkin418298d2006-07-13 08:24:20 +0000992static const short yypact[] =
993{
Lev Walkin5c541f12006-10-18 18:40:14 +0000994 104, -292, -292, 27, 104, -292, -292, -292, -292, -75,
995 71, 17, -292, -292, -292, -292, 81, -292, -36, 141,
996 -292, -292, 90, 107, 134, 139, 182, 172, 181, 141,
997 -292, 156, -292, -292, -292, -292, -292, 243, -292, -292,
998 245, 73, 235, -292, 222, -292, 171, -292, 80, -292,
999 183, -292, -292, 167, 528, -292, -292, -292, 186, 191,
1000 -292, 190, 186, -292, -21, -292, 196, -292, -292, 293,
1001 -292, -292, -292, -292, -292, -292, -292, -292, -292, -292,
1002 -292, -292, -292, 528, -292, -292, -292, -292, -292, 279,
1003 696, -292, -292, -292, -292, 104, 186, 204, -292, -292,
1004 -5, 201, -292, 237, -292, 249, 262, -292, -292, -292,
1005 -292, -292, 284, 255, -292, -292, -292, 772, 341, 238,
1006 -292, 244, -292, -292, 227, 350, -75, -292, -292, -292,
1007 247, 5, -292, -292, -292, -292, -12, 186, -292, -292,
1008 -292, -292, -292, 2, -292, 248, -292, 250, 251, 95,
1009 68, -292, 270, 206, -292, -292, 233, -292, -292, -292,
1010 347, 620, 36, -292, -292, -292, -292, -292, 360, 772,
1011 186, 186, 442, -292, -292, -292, -292, -292, -292, -292,
1012 -292, -292, -292, -292, 121, -292, -292, -292, -292, -292,
1013 -292, -292, -292, 124, -292, -292, 256, -292, -292, 252,
1014 -292, -292, -292, -292, -292, -292, -292, -292, 253, 254,
1015 162, 52, 126, -292, 257, 325, 271, 307, 89, 96,
1016 -292, -292, 272, 397, -292, -292, -292, 273, -5, -292,
1017 -292, -292, -292, -292, -292, 280, -292, -292, 105, 57,
1018 -292, -292, 277, -292, 442, -292, 275, 281, 211, 215,
1019 -292, 285, -292, 278, 105, -292, -292, -292, -292, -292,
1020 -292, -292, 95, -292, 30, 216, 304, 380, 381, 206,
1021 -292, -292, 206, -292, 20, 76, 20, -292, -292, 299,
1022 76, 20, 296, 233, -292, 363, 58, 311, 40, 324,
1023 40, 326, 442, 368, 286, 104, 291, 292, -292, -292,
1024 -292, 306, -292, 442, -292, -292, 554, 297, 309, 234,
1025 -292, -292, 317, 320, 318, -292, 310, -292, -292, 554,
1026 -292, -292, 554, 554, 442, 411, -292, -292, 319, 327,
1027 -292, -292, -292, 426, -292, -292, -292, -292, 312, -292,
1028 -292, -292, 20, -292, -292, 348, -292, -292, -292, 381,
1029 322, 129, -292, -292, -292, 286, -292, 364, 332, 323,
1030 -292, -292, 20, 286, 381, 333, 381, 334, 335, -292,
1031 337, -292, -292, 330, 349, -292, -292, 340, -292, -292,
1032 442, 273, 9, -292, 331, 215, -292, -292, 351, -292,
1033 -292, -292, -292, -292, -292, -292, -292, 357, -292, 216,
1034 -292, 58, -292, 286, -292, 41, -292, 20, 286, -292,
1035 -292, 286, -292, -292, -292, 26, 140, -292, -292, -292,
1036 -292, 151, -292, 36, 509, -292, -292, -292, -292, -292,
1037 -292, -292, -292, -292, -292, 380, 381, 352, -292, -292,
1038 330, -292, 9, 131, -292, 19, -292, -292, 426, 352,
1039 381, -292, -292, -292, -292, -292, -292, -292, -292, -292,
1040 19, 53, -292, -292, -292, 43, -292, -292, -292
Lev Walkin418298d2006-07-13 08:24:20 +00001041};
1042
1043/* YYPGOTO[NTERM-NUM]. */
1044static const short yypgoto[] =
1045{
Lev Walkin5c541f12006-10-18 18:40:14 +00001046 -292, -292, -292, 462, -292, -292, 342, -292, 451, -292,
1047 -292, 440, -292, -292, -292, 388, -292, -292, -292, -292,
1048 -292, -292, 412, -292, 377, -292, -292, -292, 417, 329,
1049 -292, -68, -292, -292, 314, -292, 217, 188, -292, 75,
1050 -292, 83, 258, -292, -292, 198, -292, -292, -292, 25,
1051 -193, -278, -98, -292, -97, -292, 200, -292, 223, -142,
1052 283, 287, -292, 21, -292, -140, -258, -137, 55, -71,
1053 -52, -292, -30, -292, -292, -215, -292, -292, 179, -161,
1054 72, -292, 176, 177, -291, -292, -292, -118, -292, -292,
1055 -292, 59, -292, -292, -292, -292, -292, -292, 246, -292,
1056 -292, -292, -292, 63, 70, -255, -292, -292, -292, 264,
1057 -136, -292, -110, -292, -292, -292, -292, 1, -292, 143,
1058 -10
Lev Walkin418298d2006-07-13 08:24:20 +00001059};
1060
1061/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
1062 positive, shift that token. If negative, reduce the rule which
1063 number is the opposite. If zero, do what YYDEFACT says.
1064 If YYTABLE_NINF, parse error. */
Lev Walkin5c541f12006-10-18 18:40:14 +00001065#define YYTABLE_NINF -277
Lev Walkin418298d2006-07-13 08:24:20 +00001066static const short yytable[] =
1067{
Lev Walkin5c541f12006-10-18 18:40:14 +00001068 18, 6, 133, 289, 291, 6, 18, 328, 353, 187,
1069 201, 246, 188, 189, 195, 375, 188, 189, 13, 337,
1070 339, 340, 125, 458, 88, 343, 344, 7, 130, 157,
1071 95, 51, 387, 10, 163, 13, 197, 198, 459, 13,
1072 177, 178, 50, 67, 90, 164, 145, 458, 51, 13,
1073 13, 186, 67, 88, 66, 89, 19, 458, 272, 50,
1074 197, 198, 459, 66, 310, 146, 13, 13, 270, 271,
1075 197, 198, 459, 90, 22, 357, 357, 13, 177, 178,
1076 13, 14, 13, 314, 89, 158, 67, 396, 1, 2,
1077 13, 14, 96, 220, 273, 46, 126, 66, 145, 159,
1078 31, 174, 175, 176, 13, 177, 178, 406, 179, 180,
1079 131, 168, 274, 279, 272, 169, 420, 146, 147, 1,
1080 2, 222, 187, 353, 201, 188, 189, 167, 195, 329,
1081 305, 367, 188, 189, 460, 188, 189, 191, 166, 190,
1082 196, 427, 374, 209, 436, 181, 223, 350, 350, -84,
1083 273, 453, 432, 202, 208, 131, 131, 23, 460, 468,
1084 231, 233, 466, 388, 186, 350, 24, 131, 460, 32,
1085 147, 230, 232, 131, 222, 191, 13, 192, 270, 271,
1086 15, 222, 1, 2, 37, 47, 182, 25, 354, 26,
1087 20, 379, 57, 58, 338, 13, 369, 288, 27, 223,
1088 272, 1, 2, 172, 290, 454, 223, 390, 443, 455,
1089 131, 307, 174, 175, 176, 13, 177, 178, 60, 179,
1090 180, 1, 2, 33, 308, 13, 177, 178, 34, 311,
1091 261, 1, 2, 263, 262, 282, 273, 264, 400, 283,
1092 35, 175, 401, 13, 177, 178, 234, 179, 180, 439,
1093 210, 211, 190, 440, 196, 330, 181, 402, 334, 209,
1094 441, 36, 209, 428, 442, 407, 208, 39, 467, 40,
1095 208, -276, 467, 208, 203, -276, 355, 131, 363, 52,
1096 363, 53, 100, 56, 236, 1, 2, 197, 198, -25,
1097 335, 59, 41, 336, 101, 102, 370, 182, 433, 378,
1098 92, 434, 93, 354, 97, 430, 103, 68, 104, 98,
1099 105, 312, 313, 128, 204, 317, 318, 320, 321, 137,
1100 106, 197, 198, 138, 107, 241, 101, 102, 108, 394,
1101 395, 109, 70, 71, 72, 139, 446, 447, 140, 398,
1102 141, 142, 110, 73, 148, 152, 149, 111, 74, 112,
1103 75, 113, 150, 153, 409, 156, 409, 214, 76, 172,
1104 114, 115, 170, 228, 171, 285, 265, 77, 269, 78,
1105 266, 268, 423, 284, 79, 116, 80, 81, 82, 286,
1106 287, 306, 292, 303, 315, 332, 323, 117, 324, 330,
1107 13, 355, 341, 349, 316, 363, 345, 364, 368, 366,
1108 208, 131, 371, 372, 175, 438, 13, 177, 178, 234,
1109 179, 180, 1, 2, 373, 377, 376, 384, 175, 235,
1110 13, 177, 178, 234, 179, 180, 438, 380, 382, 383,
1111 391, 393, 423, 293, 294, 397, 405, 403, 392, 399,
1112 464, 404, 410, 413, 424, 412, 414, 236, 237, 175,
1113 415, 13, 177, 178, 234, 179, 180, 1, 2, 419,
1114 418, 236, 425, 238, 235, 426, 8, 21, 154, 38,
1115 450, 99, 239, 127, 94, 91, 389, 173, 365, 326,
1116 431, 348, 240, 229, 429, 465, 304, 356, 241, 331,
1117 448, 381, 236, 237, 280, 385, 444, 242, 281, 386,
1118 325, 452, 241, 451, 243, 295, 449, 244, 238, 411,
1119 0, 0, 0, 0, 0, 0, 175, 239, 13, 177,
1120 178, 234, 179, 180, 1, 2, 0, 240, 327, 0,
1121 0, 235, 0, 241, 0, 0, 0, 13, 0, 0,
1122 0, 0, 242, 1, 2, 0, 0, 0, 0, 243,
1123 0, 0, 244, 0, 0, 0, 68, 0, 0, 236,
1124 237, 175, 0, 13, 177, 178, 234, 179, 180, 1,
1125 2, 69, 0, 0, 0, 238, 0, 0, 0, 0,
1126 0, 70, 71, 72, 239, 0, 0, 0, 0, 0,
1127 0, 0, 73, 0, 240, 0, 0, 74, 0, 75,
1128 241, 0, 0, 0, 236, 237, 0, 76, 0, 242,
1129 0, 0, 0, 0, 0, 0, 77, 0, 78, 244,
1130 238, 0, 0, 79, 0, 80, 81, 82, 0, 239,
1131 0, 0, 0, 0, 0, 101, 102, 0, 0, 240,
1132 0, 0, 0, 215, 0, 241, 0, 103, 68, 104,
1133 0, 105, 216, 0, 242, 0, 0, 0, 0, 0,
1134 0, 106, 0, 0, 244, 107, 0, 0, 0, 108,
1135 0, 0, 109, 70, 71, 72, 0, 0, 0, 0,
1136 0, 217, 0, 110, 73, 0, 0, 0, 111, 74,
1137 112, 75, 113, 0, 0, 0, 0, 0, 0, 76,
1138 0, 114, 115, 218, 219, 0, 0, 0, 77, 0,
1139 78, 101, 102, 0, 0, 79, 116, 80, 81, 82,
1140 0, 0, 0, 103, 68, 104, 0, 105, 0, 0,
1141 0, 0, 0, 0, 0, 0, 0, 106, 0, 0,
1142 0, 107, 0, 0, 0, 108, 0, 0, 109, 70,
1143 71, 72, 0, 0, 0, 0, 0, 0, 0, 110,
1144 73, 0, 0, 0, 111, 74, 112, 75, 113, 0,
1145 0, 0, 0, 0, 0, 76, 0, 114, 115, 0,
1146 0, 0, 0, 0, 77, 0, 78, 1, 2, 0,
1147 0, 79, 116, 80, 81, 82, 0, 0, 0, 103,
1148 68, 104, 0, 105, 0, 0, 0, 0, 0, 0,
1149 0, 0, 0, 106, 0, 0, 0, 107, 0, 0,
1150 0, 108, 0, 0, 109, 70, 71, 72, 0, 0,
1151 0, 0, 0, 0, 0, 110, 73, 0, 0, 0,
1152 111, 74, 112, 75, 113, 0, 0, 0, 0, 0,
1153 0, 76, 0, 114, 115, 0, 0, 0, 0, 0,
1154 77, 0, 78, 0, 0, 0, 0, 79, 116, 80,
1155 81, 82
Lev Walkin418298d2006-07-13 08:24:20 +00001156};
1157
1158static const short yycheck[] =
1159{
Lev Walkin5c541f12006-10-18 18:40:14 +00001160 10, 0, 100, 218, 219, 4, 16, 265, 286, 149,
1161 152, 172, 149, 149, 150, 306, 153, 153, 9, 274,
1162 275, 276, 90, 4, 54, 280, 281, 0, 33, 24,
1163 51, 41, 323, 108, 46, 9, 17, 18, 19, 9,
1164 10, 11, 41, 53, 54, 57, 117, 4, 58, 9,
1165 9, 149, 62, 83, 53, 54, 39, 4, 38, 58,
1166 17, 18, 19, 62, 7, 117, 9, 9, 16, 17,
1167 17, 18, 19, 83, 110, 35, 35, 9, 10, 11,
1168 9, 10, 9, 244, 83, 80, 96, 342, 15, 16,
1169 9, 10, 113, 161, 74, 22, 95, 96, 169, 94,
1170 10, 6, 7, 8, 9, 10, 11, 362, 13, 14,
1171 115, 109, 210, 211, 38, 113, 107, 169, 117, 15,
1172 16, 85, 262, 401, 266, 262, 262, 137, 264, 265,
1173 228, 292, 269, 269, 115, 272, 272, 107, 137, 149,
1174 150, 399, 303, 153, 118, 50, 110, 107, 107, 109,
1175 74, 20, 407, 152, 153, 115, 115, 16, 115, 116,
1176 170, 171, 109, 324, 262, 107, 25, 115, 115, 62,
1177 169, 170, 171, 115, 85, 107, 9, 109, 16, 17,
1178 109, 85, 15, 16, 3, 112, 91, 46, 286, 48,
1179 109, 309, 112, 113, 118, 9, 294, 108, 57, 110,
1180 38, 15, 16, 108, 108, 74, 110, 325, 423, 78,
1181 115, 106, 6, 7, 8, 9, 10, 11, 51, 13,
1182 14, 15, 16, 89, 119, 9, 10, 11, 89, 239,
1183 109, 15, 16, 109, 113, 109, 74, 113, 109, 113,
1184 58, 7, 113, 9, 10, 11, 12, 13, 14, 109,
1185 17, 18, 262, 113, 264, 265, 50, 355, 268, 269,
1186 109, 89, 272, 399, 113, 363, 265, 111, 461, 26,
1187 269, 109, 465, 272, 68, 113, 286, 115, 288, 44,
1188 290, 59, 3, 112, 50, 15, 16, 17, 18, 44,
1189 269, 108, 47, 272, 15, 16, 295, 91, 408, 65,
1190 109, 411, 112, 401, 108, 403, 27, 28, 29, 16,
1191 31, 34, 35, 109, 108, 104, 105, 102, 103, 118,
1192 41, 17, 18, 86, 45, 91, 15, 16, 49, 17,
1193 18, 52, 53, 54, 55, 86, 433, 434, 76, 349,
1194 56, 86, 63, 64, 3, 118, 108, 68, 69, 70,
1195 71, 72, 108, 3, 364, 108, 366, 10, 79, 108,
1196 81, 82, 114, 3, 114, 40, 110, 88, 114, 90,
1197 118, 118, 382, 116, 95, 96, 97, 98, 99, 108,
1198 73, 101, 110, 110, 109, 5, 101, 108, 110, 399,
1199 9, 401, 93, 30, 113, 405, 100, 73, 30, 73,
1200 399, 115, 111, 111, 7, 415, 9, 10, 11, 12,
1201 13, 14, 15, 16, 108, 106, 119, 107, 7, 22,
1202 9, 10, 11, 12, 13, 14, 436, 110, 108, 111,
1203 111, 5, 442, 36, 37, 87, 113, 73, 111, 117,
1204 450, 109, 109, 108, 113, 111, 109, 50, 51, 7,
1205 120, 9, 10, 11, 12, 13, 14, 15, 16, 119,
1206 111, 50, 111, 66, 22, 108, 4, 16, 126, 29,
1207 118, 83, 75, 96, 62, 58, 65, 148, 290, 262,
1208 405, 283, 85, 169, 401, 460, 228, 287, 91, 266,
1209 435, 312, 50, 51, 211, 319, 424, 100, 211, 322,
1210 254, 442, 91, 440, 107, 108, 436, 110, 66, 366,
1211 -1, -1, -1, -1, -1, -1, 7, 75, 9, 10,
1212 11, 12, 13, 14, 15, 16, -1, 85, 264, -1,
1213 -1, 22, -1, 91, -1, -1, -1, 9, -1, -1,
1214 -1, -1, 100, 15, 16, -1, -1, -1, -1, 107,
1215 -1, -1, 110, -1, -1, -1, 28, -1, -1, 50,
1216 51, 7, -1, 9, 10, 11, 12, 13, 14, 15,
1217 16, 43, -1, -1, -1, 66, -1, -1, -1, -1,
1218 -1, 53, 54, 55, 75, -1, -1, -1, -1, -1,
1219 -1, -1, 64, -1, 85, -1, -1, 69, -1, 71,
1220 91, -1, -1, -1, 50, 51, -1, 79, -1, 100,
1221 -1, -1, -1, -1, -1, -1, 88, -1, 90, 110,
1222 66, -1, -1, 95, -1, 97, 98, 99, -1, 75,
1223 -1, -1, -1, -1, -1, 15, 16, -1, -1, 85,
1224 -1, -1, -1, 23, -1, 91, -1, 27, 28, 29,
1225 -1, 31, 32, -1, 100, -1, -1, -1, -1, -1,
1226 -1, 41, -1, -1, 110, 45, -1, -1, -1, 49,
1227 -1, -1, 52, 53, 54, 55, -1, -1, -1, -1,
1228 -1, 61, -1, 63, 64, -1, -1, -1, 68, 69,
1229 70, 71, 72, -1, -1, -1, -1, -1, -1, 79,
1230 -1, 81, 82, 83, 84, -1, -1, -1, 88, -1,
1231 90, 15, 16, -1, -1, 95, 96, 97, 98, 99,
1232 -1, -1, -1, 27, 28, 29, -1, 31, -1, -1,
1233 -1, -1, -1, -1, -1, -1, -1, 41, -1, -1,
1234 -1, 45, -1, -1, -1, 49, -1, -1, 52, 53,
1235 54, 55, -1, -1, -1, -1, -1, -1, -1, 63,
1236 64, -1, -1, -1, 68, 69, 70, 71, 72, -1,
1237 -1, -1, -1, -1, -1, 79, -1, 81, 82, -1,
1238 -1, -1, -1, -1, 88, -1, 90, 15, 16, -1,
1239 -1, 95, 96, 97, 98, 99, -1, -1, -1, 27,
1240 28, 29, -1, 31, -1, -1, -1, -1, -1, -1,
1241 -1, -1, -1, 41, -1, -1, -1, 45, -1, -1,
1242 -1, 49, -1, -1, 52, 53, 54, 55, -1, -1,
1243 -1, -1, -1, -1, -1, 63, 64, -1, -1, -1,
1244 68, 69, 70, 71, 72, -1, -1, -1, -1, -1,
1245 -1, 79, -1, 81, 82, -1, -1, -1, -1, -1,
1246 88, -1, 90, -1, -1, -1, -1, 95, 96, 97,
1247 98, 99
Lev Walkin418298d2006-07-13 08:24:20 +00001248};
1249
1250/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1251 symbol of state STATE-NUM. */
1252static const unsigned char yystos[] =
1253{
Lev Walkin5c541f12006-10-18 18:40:14 +00001254 0, 15, 16, 122, 123, 124, 238, 0, 124, 125,
1255 108, 126, 127, 9, 10, 109, 128, 129, 241, 39,
Lev Walkina9532f42006-09-17 04:52:50 +00001256 109, 129, 110, 16, 25, 46, 48, 57, 130, 131,
1257 132, 10, 62, 89, 89, 58, 89, 3, 132, 111,
Lev Walkin4a4543f2006-10-13 12:37:39 +00001258 26, 47, 133, 134, 146, 147, 22, 112, 148, 149,
Lev Walkin5c541f12006-10-18 18:40:14 +00001259 238, 241, 44, 59, 138, 139, 112, 112, 113, 108,
1260 51, 140, 141, 143, 144, 145, 238, 241, 28, 43,
Lev Walkin4a4543f2006-10-13 12:37:39 +00001261 53, 54, 55, 64, 69, 71, 79, 88, 90, 95,
Lev Walkin5c541f12006-10-18 18:40:14 +00001262 97, 98, 99, 135, 136, 151, 153, 183, 193, 238,
1263 241, 149, 109, 112, 143, 51, 113, 108, 16, 136,
Lev Walkin4a4543f2006-10-13 12:37:39 +00001264 3, 15, 16, 27, 29, 31, 41, 45, 49, 52,
1265 63, 68, 70, 72, 81, 82, 96, 108, 152, 177,
Lev Walkin5c541f12006-10-18 18:40:14 +00001266 190, 191, 192, 193, 239, 152, 238, 145, 109, 137,
1267 33, 115, 163, 173, 233, 234, 235, 118, 86, 86,
1268 76, 56, 86, 154, 155, 190, 191, 238, 3, 108,
1269 108, 228, 118, 3, 127, 142, 108, 24, 80, 94,
1270 236, 174, 175, 46, 57, 237, 238, 241, 109, 113,
Lev Walkin4a4543f2006-10-13 12:37:39 +00001271 114, 114, 108, 150, 6, 7, 8, 10, 11, 13,
Lev Walkin5c541f12006-10-18 18:40:14 +00001272 14, 50, 91, 150, 156, 157, 173, 186, 188, 231,
1273 241, 107, 109, 229, 230, 231, 241, 17, 18, 178,
1274 179, 180, 238, 68, 108, 184, 186, 187, 238, 241,
Lev Walkin4a4543f2006-10-13 12:37:39 +00001275 17, 18, 165, 166, 10, 23, 32, 61, 83, 84,
1276 152, 176, 85, 110, 196, 197, 198, 199, 3, 155,
Lev Walkin5c541f12006-10-18 18:40:14 +00001277 238, 241, 238, 241, 12, 22, 50, 51, 66, 75,
1278 85, 91, 100, 107, 110, 188, 200, 201, 202, 203,
1279 204, 205, 206, 207, 208, 209, 210, 231, 232, 238,
1280 241, 109, 113, 109, 113, 110, 118, 185, 118, 114,
1281 16, 17, 38, 74, 173, 181, 182, 226, 227, 173,
1282 181, 182, 109, 113, 116, 40, 108, 73, 108, 196,
1283 108, 196, 110, 36, 37, 108, 200, 215, 216, 218,
1284 220, 221, 222, 110, 163, 173, 101, 106, 119, 219,
1285 7, 241, 34, 35, 200, 109, 113, 104, 105, 194,
1286 102, 103, 195, 101, 110, 219, 157, 230, 187, 231,
1287 241, 179, 5, 189, 241, 184, 184, 226, 118, 226,
1288 226, 93, 164, 226, 226, 100, 167, 168, 166, 30,
1289 107, 161, 162, 172, 173, 241, 177, 35, 158, 159,
1290 160, 172, 173, 241, 73, 158, 73, 200, 30, 173,
1291 238, 111, 111, 108, 200, 205, 119, 106, 65, 208,
1292 110, 199, 108, 111, 107, 203, 204, 205, 200, 65,
1293 208, 111, 111, 5, 17, 18, 226, 87, 241, 117,
1294 109, 113, 173, 73, 109, 113, 226, 173, 240, 241,
1295 109, 240, 111, 108, 109, 120, 223, 224, 111, 119,
1296 107, 211, 212, 241, 113, 111, 108, 187, 231, 162,
1297 173, 160, 226, 233, 233, 217, 118, 225, 241, 109,
1298 113, 109, 113, 196, 201, 169, 175, 175, 189, 225,
1299 118, 224, 212, 20, 74, 78, 213, 214, 4, 19,
1300 115, 170, 171, 180, 241, 170, 109, 171, 116
Lev Walkin418298d2006-07-13 08:24:20 +00001301};
1302
1303#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1304# define YYSIZE_T __SIZE_TYPE__
1305#endif
1306#if ! defined (YYSIZE_T) && defined (size_t)
1307# define YYSIZE_T size_t
1308#endif
1309#if ! defined (YYSIZE_T)
1310# if defined (__STDC__) || defined (__cplusplus)
1311# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1312# define YYSIZE_T size_t
1313# endif
1314#endif
1315#if ! defined (YYSIZE_T)
1316# define YYSIZE_T unsigned int
1317#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001318
1319#define yyerrok (yyerrstatus = 0)
1320#define yyclearin (yychar = YYEMPTY)
Lev Walkina00d6b32006-03-21 03:40:38 +00001321#define YYEMPTY -2
Lev Walkinf15320b2004-06-03 03:38:44 +00001322#define YYEOF 0
Lev Walkin418298d2006-07-13 08:24:20 +00001323
Lev Walkinf15320b2004-06-03 03:38:44 +00001324#define YYACCEPT goto yyacceptlab
Lev Walkin418298d2006-07-13 08:24:20 +00001325#define YYABORT goto yyabortlab
Lev Walkina00d6b32006-03-21 03:40:38 +00001326#define YYERROR goto yyerrlab1
Lev Walkin418298d2006-07-13 08:24:20 +00001327
1328/* Like YYERROR except do call yyerror. This remains here temporarily
1329 to ease the transition to the new meaning of YYERROR, for GCC.
Lev Walkinf15320b2004-06-03 03:38:44 +00001330 Once GCC version 2 has supplanted version 1, this can go. */
Lev Walkin418298d2006-07-13 08:24:20 +00001331
Lev Walkinf15320b2004-06-03 03:38:44 +00001332#define YYFAIL goto yyerrlab
Lev Walkin418298d2006-07-13 08:24:20 +00001333
Lev Walkinf15320b2004-06-03 03:38:44 +00001334#define YYRECOVERING() (!!yyerrstatus)
Lev Walkin418298d2006-07-13 08:24:20 +00001335
1336#define YYBACKUP(Token, Value) \
Lev Walkinf15320b2004-06-03 03:38:44 +00001337do \
1338 if (yychar == YYEMPTY && yylen == 1) \
Lev Walkin418298d2006-07-13 08:24:20 +00001339 { \
1340 yychar = (Token); \
1341 yylval = (Value); \
Lev Walkina00d6b32006-03-21 03:40:38 +00001342 yychar1 = YYTRANSLATE (yychar); \
Lev Walkinf15320b2004-06-03 03:38:44 +00001343 YYPOPSTACK; \
1344 goto yybackup; \
1345 } \
1346 else \
Lev Walkin418298d2006-07-13 08:24:20 +00001347 { \
1348 yyerror ("syntax error: cannot back up"); \
1349 YYERROR; \
1350 } \
Lev Walkinf15320b2004-06-03 03:38:44 +00001351while (0)
1352
1353#define YYTERROR 1
1354#define YYERRCODE 256
1355
Lev Walkin418298d2006-07-13 08:24:20 +00001356/* YYLLOC_DEFAULT -- Compute the default location (before the actions
1357 are run). */
1358
1359#ifndef YYLLOC_DEFAULT
1360# define YYLLOC_DEFAULT(Current, Rhs, N) \
1361 Current.first_line = Rhs[1].first_line; \
1362 Current.first_column = Rhs[1].first_column; \
1363 Current.last_line = Rhs[N].last_line; \
1364 Current.last_column = Rhs[N].last_column;
Lev Walkinf15320b2004-06-03 03:38:44 +00001365#endif
1366
Lev Walkin418298d2006-07-13 08:24:20 +00001367/* YYLEX -- calling `yylex' with the right arguments. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001368
Lev Walkin418298d2006-07-13 08:24:20 +00001369#define YYLEX yylex ()
Lev Walkinfb872bd2006-03-18 06:53:11 +00001370
Lev Walkin418298d2006-07-13 08:24:20 +00001371/* Enable debugging if requested. */
1372#if YYDEBUG
Lev Walkinfb872bd2006-03-18 06:53:11 +00001373
Lev Walkin418298d2006-07-13 08:24:20 +00001374# ifndef YYFPRINTF
1375# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1376# define YYFPRINTF fprintf
1377# endif
Lev Walkinfb872bd2006-03-18 06:53:11 +00001378
Lev Walkin418298d2006-07-13 08:24:20 +00001379# define YYDPRINTF(Args) \
1380do { \
1381 if (yydebug) \
1382 YYFPRINTF Args; \
1383} while (0)
1384# define YYDSYMPRINT(Args) \
1385do { \
1386 if (yydebug) \
1387 yysymprint Args; \
1388} while (0)
1389/* Nonzero means print parse trace. It is left uninitialized so that
1390 multiple parsers can coexist. */
1391int yydebug;
1392#else /* !YYDEBUG */
1393# define YYDPRINTF(Args)
1394# define YYDSYMPRINT(Args)
1395#endif /* !YYDEBUG */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001396
Lev Walkin418298d2006-07-13 08:24:20 +00001397/* YYINITDEPTH -- initial size of the parser's stacks. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001398#ifndef YYINITDEPTH
Lev Walkin418298d2006-07-13 08:24:20 +00001399# define YYINITDEPTH 200
Lev Walkinf15320b2004-06-03 03:38:44 +00001400#endif
1401
Lev Walkin418298d2006-07-13 08:24:20 +00001402/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1403 if the built-in stack extension method is used).
1404
1405 Do not make this value too large; the results are undefined if
1406 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
1407 evaluated with infinite-precision integer arithmetic. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001408
Lev Walkina00d6b32006-03-21 03:40:38 +00001409#if YYMAXDEPTH == 0
Lev Walkin418298d2006-07-13 08:24:20 +00001410# undef YYMAXDEPTH
Lev Walkina00d6b32006-03-21 03:40:38 +00001411#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001412
1413#ifndef YYMAXDEPTH
Lev Walkin418298d2006-07-13 08:24:20 +00001414# define YYMAXDEPTH 10000
Lev Walkinf15320b2004-06-03 03:38:44 +00001415#endif
Lev Walkin418298d2006-07-13 08:24:20 +00001416
Lev Walkinf15320b2004-06-03 03:38:44 +00001417
Lev Walkinf15320b2004-06-03 03:38:44 +00001418
Lev Walkin418298d2006-07-13 08:24:20 +00001419#if YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00001420
Lev Walkin418298d2006-07-13 08:24:20 +00001421# ifndef yystrlen
1422# if defined (__GLIBC__) && defined (_STRING_H)
1423# define yystrlen strlen
1424# else
1425/* Return the length of YYSTR. */
1426static YYSIZE_T
1427# if defined (__STDC__) || defined (__cplusplus)
1428yystrlen (const char *yystr)
1429# else
1430yystrlen (yystr)
1431 const char *yystr;
1432# endif
Lev Walkina00d6b32006-03-21 03:40:38 +00001433{
Lev Walkin418298d2006-07-13 08:24:20 +00001434 register const char *yys = yystr;
Lev Walkina00d6b32006-03-21 03:40:38 +00001435
Lev Walkin418298d2006-07-13 08:24:20 +00001436 while (*yys++ != '\0')
1437 continue;
1438
1439 return yys - yystr - 1;
1440}
1441# endif
1442# endif
1443
1444# ifndef yystpcpy
1445# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1446# define yystpcpy stpcpy
1447# else
1448/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1449 YYDEST. */
1450static char *
1451# if defined (__STDC__) || defined (__cplusplus)
1452yystpcpy (char *yydest, const char *yysrc)
1453# else
1454yystpcpy (yydest, yysrc)
1455 char *yydest;
1456 const char *yysrc;
1457# endif
1458{
1459 register char *yyd = yydest;
1460 register const char *yys = yysrc;
1461
1462 while ((*yyd++ = *yys++) != '\0')
1463 continue;
1464
1465 return yyd - 1;
1466}
1467# endif
1468# endif
1469
1470#endif /* !YYERROR_VERBOSE */
1471
1472
1473
1474#if YYDEBUG
1475/*-----------------------------.
1476| Print this symbol on YYOUT. |
1477`-----------------------------*/
1478
1479static void
1480#if defined (__STDC__) || defined (__cplusplus)
1481yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue)
1482#else
1483yysymprint (yyout, yytype, yyvalue)
1484 FILE* yyout;
1485 int yytype;
1486 YYSTYPE yyvalue;
1487#endif
1488{
1489 /* Pacify ``unused variable'' warnings. */
1490 (void) yyvalue;
1491
1492 if (yytype < YYNTOKENS)
1493 {
1494 YYFPRINTF (yyout, "token %s (", yytname[yytype]);
1495# ifdef YYPRINT
1496 YYPRINT (yyout, yytoknum[yytype], yyvalue);
1497# endif
1498 }
1499 else
1500 YYFPRINTF (yyout, "nterm %s (", yytname[yytype]);
1501
1502 switch (yytype)
1503 {
1504 default:
1505 break;
1506 }
1507 YYFPRINTF (yyout, ")");
1508}
1509#endif /* YYDEBUG. */
1510
1511
1512/*-----------------------------------------------.
1513| Release the memory associated to this symbol. |
1514`-----------------------------------------------*/
1515
1516static void
1517#if defined (__STDC__) || defined (__cplusplus)
1518yydestruct (int yytype, YYSTYPE yyvalue)
1519#else
1520yydestruct (yytype, yyvalue)
1521 int yytype;
1522 YYSTYPE yyvalue;
1523#endif
1524{
1525 /* Pacify ``unused variable'' warnings. */
1526 (void) yyvalue;
1527
1528 switch (yytype)
1529 {
1530 default:
1531 break;
1532 }
Lev Walkina00d6b32006-03-21 03:40:38 +00001533}
1534
Lev Walkinfb872bd2006-03-18 06:53:11 +00001535
1536
Lev Walkina00d6b32006-03-21 03:40:38 +00001537/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1538 into yyparse. The argument should have type void *.
1539 It should actually point to an object.
1540 Grammar actions can access the variable by casting it
1541 to the proper pointer type. */
Lev Walkinfb872bd2006-03-18 06:53:11 +00001542
1543#ifdef YYPARSE_PARAM
Lev Walkin418298d2006-07-13 08:24:20 +00001544# if defined (__STDC__) || defined (__cplusplus)
1545# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1546# define YYPARSE_PARAM_DECL
1547# else
1548# define YYPARSE_PARAM_ARG YYPARSE_PARAM
1549# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1550# endif
1551#else /* !YYPARSE_PARAM */
1552# define YYPARSE_PARAM_ARG
1553# define YYPARSE_PARAM_DECL
1554#endif /* !YYPARSE_PARAM */
Lev Walkina00d6b32006-03-21 03:40:38 +00001555
1556/* Prevent warning if -Wstrict-prototypes. */
1557#ifdef __GNUC__
Lev Walkin418298d2006-07-13 08:24:20 +00001558# ifdef YYPARSE_PARAM
Lev Walkina00d6b32006-03-21 03:40:38 +00001559int yyparse (void *);
Lev Walkin418298d2006-07-13 08:24:20 +00001560# else
Lev Walkinf15320b2004-06-03 03:38:44 +00001561int yyparse (void);
Lev Walkin418298d2006-07-13 08:24:20 +00001562# endif
Lev Walkinfb872bd2006-03-18 06:53:11 +00001563#endif
Lev Walkin418298d2006-07-13 08:24:20 +00001564
1565
1566/* The lookahead symbol. */
1567int yychar;
1568
1569/* The semantic value of the lookahead symbol. */
1570YYSTYPE yylval;
1571
1572/* Number of parse errors so far. */
1573int yynerrs;
1574
Lev Walkinfb872bd2006-03-18 06:53:11 +00001575
Lev Walkinfb872bd2006-03-18 06:53:11 +00001576int
Lev Walkin418298d2006-07-13 08:24:20 +00001577yyparse (YYPARSE_PARAM_ARG)
Lev Walkina00d6b32006-03-21 03:40:38 +00001578 YYPARSE_PARAM_DECL
Lev Walkinfb872bd2006-03-18 06:53:11 +00001579{
Lev Walkin418298d2006-07-13 08:24:20 +00001580
Lev Walkina00d6b32006-03-21 03:40:38 +00001581 register int yystate;
1582 register int yyn;
Lev Walkin418298d2006-07-13 08:24:20 +00001583 int yyresult;
1584 /* Number of tokens to shift before error messages enabled. */
1585 int yyerrstatus;
1586 /* Lookahead token as an internal (translated) token number. */
1587 int yychar1 = 0;
1588
1589 /* Three stacks and their tools:
1590 `yyss': related to states,
1591 `yyvs': related to semantic values,
1592 `yyls': related to locations.
1593
1594 Refer to the stacks thru separate pointers, to allow yyoverflow
1595 to reallocate them elsewhere. */
1596
1597 /* The state stack. */
1598 short yyssa[YYINITDEPTH];
1599 short *yyss = yyssa;
Lev Walkina00d6b32006-03-21 03:40:38 +00001600 register short *yyssp;
Lev Walkin418298d2006-07-13 08:24:20 +00001601
1602 /* The semantic value stack. */
1603 YYSTYPE yyvsa[YYINITDEPTH];
1604 YYSTYPE *yyvs = yyvsa;
Lev Walkina00d6b32006-03-21 03:40:38 +00001605 register YYSTYPE *yyvsp;
Lev Walkinfb872bd2006-03-18 06:53:11 +00001606
Lev Walkinfb872bd2006-03-18 06:53:11 +00001607
Lev Walkinfb872bd2006-03-18 06:53:11 +00001608
Lev Walkinf15320b2004-06-03 03:38:44 +00001609#define YYPOPSTACK (yyvsp--, yyssp--)
Lev Walkinf15320b2004-06-03 03:38:44 +00001610
Lev Walkin418298d2006-07-13 08:24:20 +00001611 YYSIZE_T yystacksize = YYINITDEPTH;
Lev Walkinf15320b2004-06-03 03:38:44 +00001612
Lev Walkin418298d2006-07-13 08:24:20 +00001613 /* The variables used to return semantic value and location from the
1614 action routines. */
1615 YYSTYPE yyval;
Lev Walkinf15320b2004-06-03 03:38:44 +00001616
Lev Walkinf15320b2004-06-03 03:38:44 +00001617
Lev Walkin418298d2006-07-13 08:24:20 +00001618 /* When reducing, the number of symbols on the RHS of the reduced
1619 rule. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001620 int yylen;
1621
Lev Walkin418298d2006-07-13 08:24:20 +00001622 YYDPRINTF ((stderr, "Starting parse\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001623
1624 yystate = 0;
1625 yyerrstatus = 0;
1626 yynerrs = 0;
1627 yychar = YYEMPTY; /* Cause a token to be read. */
1628
1629 /* Initialize stack pointers.
1630 Waste one element of value and location stack
1631 so that they stay on the same level as the state stack.
1632 The wasted elements are never initialized. */
1633
Lev Walkin418298d2006-07-13 08:24:20 +00001634 yyssp = yyss;
Lev Walkinf15320b2004-06-03 03:38:44 +00001635 yyvsp = yyvs;
Lev Walkinf15320b2004-06-03 03:38:44 +00001636
Lev Walkin418298d2006-07-13 08:24:20 +00001637 goto yysetstate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001638
Lev Walkin418298d2006-07-13 08:24:20 +00001639/*------------------------------------------------------------.
1640| yynewstate -- Push a new state, which is found in yystate. |
1641`------------------------------------------------------------*/
1642 yynewstate:
1643 /* In all cases, when you get here, the value and location stacks
1644 have just been pushed. so pushing a state here evens the stacks.
1645 */
1646 yyssp++;
1647
1648 yysetstate:
1649 *yyssp = yystate;
Lev Walkinf15320b2004-06-03 03:38:44 +00001650
Lev Walkina00d6b32006-03-21 03:40:38 +00001651 if (yyssp >= yyss + yystacksize - 1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001652 {
Lev Walkinf15320b2004-06-03 03:38:44 +00001653 /* Get the current used size of the three stacks, in elements. */
Lev Walkin418298d2006-07-13 08:24:20 +00001654 YYSIZE_T yysize = yyssp - yyss + 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001655
1656#ifdef yyoverflow
Lev Walkin418298d2006-07-13 08:24:20 +00001657 {
1658 /* Give user a chance to reallocate the stack. Use copies of
1659 these so that the &'s don't force the real ones into
1660 memory. */
1661 YYSTYPE *yyvs1 = yyvs;
1662 short *yyss1 = yyss;
Lev Walkinf15320b2004-06-03 03:38:44 +00001663
Lev Walkin418298d2006-07-13 08:24:20 +00001664
1665 /* Each stack pointer address is followed by the size of the
1666 data in use in that stack, in bytes. This used to be a
1667 conditional around just the two extra args, but that might
1668 be undefined if yyoverflow is a macro. */
1669 yyoverflow ("parser stack overflow",
1670 &yyss1, yysize * sizeof (*yyssp),
1671 &yyvs1, yysize * sizeof (*yyvsp),
1672
1673 &yystacksize);
1674
1675 yyss = yyss1;
1676 yyvs = yyvs1;
1677 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001678#else /* no yyoverflow */
Lev Walkin418298d2006-07-13 08:24:20 +00001679# ifndef YYSTACK_RELOCATE
1680 goto yyoverflowlab;
1681# else
Lev Walkinf15320b2004-06-03 03:38:44 +00001682 /* Extend the stack our own way. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001683 if (yystacksize >= YYMAXDEPTH)
Lev Walkin418298d2006-07-13 08:24:20 +00001684 goto yyoverflowlab;
Lev Walkinf15320b2004-06-03 03:38:44 +00001685 yystacksize *= 2;
Lev Walkina00d6b32006-03-21 03:40:38 +00001686 if (yystacksize > YYMAXDEPTH)
Lev Walkinf15320b2004-06-03 03:38:44 +00001687 yystacksize = YYMAXDEPTH;
Lev Walkin418298d2006-07-13 08:24:20 +00001688
1689 {
1690 short *yyss1 = yyss;
1691 union yyalloc *yyptr =
1692 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1693 if (! yyptr)
1694 goto yyoverflowlab;
1695 YYSTACK_RELOCATE (yyss);
1696 YYSTACK_RELOCATE (yyvs);
1697
1698# undef YYSTACK_RELOCATE
1699 if (yyss1 != yyssa)
1700 YYSTACK_FREE (yyss1);
1701 }
1702# endif
Lev Walkinf15320b2004-06-03 03:38:44 +00001703#endif /* no yyoverflow */
1704
Lev Walkin418298d2006-07-13 08:24:20 +00001705 yyssp = yyss + yysize - 1;
1706 yyvsp = yyvs + yysize - 1;
Lev Walkinf15320b2004-06-03 03:38:44 +00001707
Lev Walkin418298d2006-07-13 08:24:20 +00001708
1709 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1710 (unsigned long int) yystacksize));
Lev Walkinf15320b2004-06-03 03:38:44 +00001711
Lev Walkina00d6b32006-03-21 03:40:38 +00001712 if (yyssp >= yyss + yystacksize - 1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001713 YYABORT;
1714 }
1715
Lev Walkin418298d2006-07-13 08:24:20 +00001716 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Lev Walkinf15320b2004-06-03 03:38:44 +00001717
1718 goto yybackup;
Lev Walkin418298d2006-07-13 08:24:20 +00001719
1720/*-----------.
1721| yybackup. |
1722`-----------*/
1723yybackup:
Lev Walkinf15320b2004-06-03 03:38:44 +00001724
1725/* Do appropriate processing given the current state. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001726/* Read a lookahead token if we need one and don't already have one. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001727/* yyresume: */
1728
Lev Walkina00d6b32006-03-21 03:40:38 +00001729 /* First try to decide what to do without reference to lookahead token. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001730
1731 yyn = yypact[yystate];
Lev Walkin418298d2006-07-13 08:24:20 +00001732 if (yyn == YYPACT_NINF)
Lev Walkinf15320b2004-06-03 03:38:44 +00001733 goto yydefault;
1734
Lev Walkina00d6b32006-03-21 03:40:38 +00001735 /* Not known => get a lookahead token if don't already have one. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001736
Lev Walkina00d6b32006-03-21 03:40:38 +00001737 /* yychar is either YYEMPTY or YYEOF
1738 or a valid token in external form. */
1739
Lev Walkinf15320b2004-06-03 03:38:44 +00001740 if (yychar == YYEMPTY)
1741 {
Lev Walkin418298d2006-07-13 08:24:20 +00001742 YYDPRINTF ((stderr, "Reading a token: "));
Lev Walkinf15320b2004-06-03 03:38:44 +00001743 yychar = YYLEX;
1744 }
1745
Lev Walkin418298d2006-07-13 08:24:20 +00001746 /* Convert token to internal form (in yychar1) for indexing tables with. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001747
Lev Walkin418298d2006-07-13 08:24:20 +00001748 if (yychar <= 0) /* This means end of input. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001749 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001750 yychar1 = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00001751 yychar = YYEOF; /* Don't call YYLEX any more. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001752
Lev Walkin418298d2006-07-13 08:24:20 +00001753 YYDPRINTF ((stderr, "Now at end of input.\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001754 }
1755 else
1756 {
Lev Walkin418298d2006-07-13 08:24:20 +00001757 yychar1 = YYTRANSLATE (yychar);
Lev Walkina00d6b32006-03-21 03:40:38 +00001758
Lev Walkin418298d2006-07-13 08:24:20 +00001759 /* We have to keep this `#if YYDEBUG', since we use variables
1760 which are defined only if `YYDEBUG' is set. */
1761 YYDPRINTF ((stderr, "Next token is "));
1762 YYDSYMPRINT ((stderr, yychar1, yylval));
1763 YYDPRINTF ((stderr, "\n"));
Lev Walkinf15320b2004-06-03 03:38:44 +00001764 }
1765
Lev Walkin418298d2006-07-13 08:24:20 +00001766 /* If the proper action on seeing token YYCHAR1 is to reduce or to
1767 detect an error, take that action. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001768 yyn += yychar1;
Lev Walkin418298d2006-07-13 08:24:20 +00001769 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
Lev Walkinf15320b2004-06-03 03:38:44 +00001770 goto yydefault;
Lev Walkinf15320b2004-06-03 03:38:44 +00001771 yyn = yytable[yyn];
Lev Walkin418298d2006-07-13 08:24:20 +00001772 if (yyn <= 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00001773 {
Lev Walkin418298d2006-07-13 08:24:20 +00001774 if (yyn == 0 || yyn == YYTABLE_NINF)
Lev Walkinf15320b2004-06-03 03:38:44 +00001775 goto yyerrlab;
1776 yyn = -yyn;
1777 goto yyreduce;
1778 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001779
1780 if (yyn == YYFINAL)
1781 YYACCEPT;
1782
Lev Walkina00d6b32006-03-21 03:40:38 +00001783 /* Shift the lookahead token. */
Lev Walkin418298d2006-07-13 08:24:20 +00001784 YYDPRINTF ((stderr, "Shifting token %d (%s), ",
1785 yychar, yytname[yychar1]));
Lev Walkinf15320b2004-06-03 03:38:44 +00001786
1787 /* Discard the token being shifted unless it is eof. */
1788 if (yychar != YYEOF)
1789 yychar = YYEMPTY;
1790
1791 *++yyvsp = yylval;
Lev Walkinf15320b2004-06-03 03:38:44 +00001792
Lev Walkin418298d2006-07-13 08:24:20 +00001793
1794 /* Count tokens shifted since error; after three, turn off error
1795 status. */
1796 if (yyerrstatus)
1797 yyerrstatus--;
Lev Walkinf15320b2004-06-03 03:38:44 +00001798
1799 yystate = yyn;
1800 goto yynewstate;
1801
Lev Walkina00d6b32006-03-21 03:40:38 +00001802
Lev Walkin418298d2006-07-13 08:24:20 +00001803/*-----------------------------------------------------------.
1804| yydefault -- do the default action for the current state. |
1805`-----------------------------------------------------------*/
1806yydefault:
Lev Walkinf15320b2004-06-03 03:38:44 +00001807 yyn = yydefact[yystate];
1808 if (yyn == 0)
1809 goto yyerrlab;
Lev Walkin418298d2006-07-13 08:24:20 +00001810 goto yyreduce;
Lev Walkinf15320b2004-06-03 03:38:44 +00001811
Lev Walkin418298d2006-07-13 08:24:20 +00001812
1813/*-----------------------------.
1814| yyreduce -- Do a reduction. |
1815`-----------------------------*/
Lev Walkinf15320b2004-06-03 03:38:44 +00001816yyreduce:
Lev Walkin418298d2006-07-13 08:24:20 +00001817 /* yyn is the number of a rule to reduce with. */
Lev Walkinf15320b2004-06-03 03:38:44 +00001818 yylen = yyr2[yyn];
Lev Walkinf15320b2004-06-03 03:38:44 +00001819
Lev Walkin418298d2006-07-13 08:24:20 +00001820 /* If YYLEN is nonzero, implement the default value of the action:
1821 `$$ = $1'.
1822
1823 Otherwise, the following line sets YYVAL to garbage.
1824 This behavior is undocumented and Bison
1825 users should not rely upon it. Assigning to YYVAL
1826 unconditionally makes the parser a bit smaller, and it avoids a
1827 GCC warning that YYVAL may be used uninitialized. */
1828 yyval = yyvsp[1-yylen];
1829
1830
1831
1832#if YYDEBUG
1833 /* We have to keep this `#if YYDEBUG', since we use variables which
1834 are defined only if `YYDEBUG' is set. */
Lev Walkina00d6b32006-03-21 03:40:38 +00001835 if (yydebug)
Lev Walkinf15320b2004-06-03 03:38:44 +00001836 {
Lev Walkin418298d2006-07-13 08:24:20 +00001837 int yyi;
Lev Walkina00d6b32006-03-21 03:40:38 +00001838
Lev Walkin418298d2006-07-13 08:24:20 +00001839 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
1840 yyn - 1, yyrline[yyn]);
Lev Walkina00d6b32006-03-21 03:40:38 +00001841
1842 /* Print the symbols being reduced, and their result. */
Lev Walkin418298d2006-07-13 08:24:20 +00001843 for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
1844 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
1845 YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
Lev Walkina00d6b32006-03-21 03:40:38 +00001846 }
1847#endif
Lev Walkin418298d2006-07-13 08:24:20 +00001848 switch (yyn)
1849 {
1850 case 2:
Lev Walkin5c541f12006-10-18 18:40:14 +00001851#line 355 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001852 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001853 *(void **)param = yyvsp[0].a_grammar;
Lev Walkin418298d2006-07-13 08:24:20 +00001854 }
1855 break;
1856
1857 case 3:
Lev Walkin5c541f12006-10-18 18:40:14 +00001858#line 361 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001859 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001860 yyval.a_grammar = asn1p_new();
1861 checkmem(yyval.a_grammar);
1862 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin418298d2006-07-13 08:24:20 +00001863 }
1864 break;
1865
1866 case 4:
Lev Walkin5c541f12006-10-18 18:40:14 +00001867#line 366 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001868 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001869 yyval.a_grammar = yyvsp[-1].a_grammar;
1870 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
Lev Walkin418298d2006-07-13 08:24:20 +00001871 }
1872 break;
1873
1874 case 5:
Lev Walkin5c541f12006-10-18 18:40:14 +00001875#line 383 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00001876 { currentModule = asn1p_module_new(); }
1877 break;
1878
1879 case 6:
Lev Walkin5c541f12006-10-18 18:40:14 +00001880#line 388 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001881 {
Lev Walkinfb872bd2006-03-18 06:53:11 +00001882
Lev Walkina9532f42006-09-17 04:52:50 +00001883 yyval.a_module = currentModule;
1884
Lev Walkina00d6b32006-03-21 03:40:38 +00001885 if(yyvsp[-1].a_module) {
Lev Walkina9532f42006-09-17 04:52:50 +00001886 asn1p_module_t tmp = *(yyval.a_module);
1887 *(yyval.a_module) = *(yyvsp[-1].a_module);
1888 *(yyvsp[-1].a_module) = tmp;
1889 asn1p_module_free(yyvsp[-1].a_module);
Lev Walkinf15320b2004-06-03 03:38:44 +00001890 } else {
1891 /* There's a chance that a module is just plain empty */
Lev Walkinf15320b2004-06-03 03:38:44 +00001892 }
Lev Walkinf15320b2004-06-03 03:38:44 +00001893
Lev Walkina9532f42006-09-17 04:52:50 +00001894 yyval.a_module->ModuleName = yyvsp[-8].tv_str;
Lev Walkina00d6b32006-03-21 03:40:38 +00001895 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1896 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001897 }
1898 break;
1899
Lev Walkina9532f42006-09-17 04:52:50 +00001900 case 7:
Lev Walkin5c541f12006-10-18 18:40:14 +00001901#line 412 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001902 { yyval.a_oid = 0; }
1903 break;
1904
Lev Walkina9532f42006-09-17 04:52:50 +00001905 case 8:
Lev Walkin5c541f12006-10-18 18:40:14 +00001906#line 413 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001907 { yyval.a_oid = yyvsp[0].a_oid; }
1908 break;
1909
Lev Walkina9532f42006-09-17 04:52:50 +00001910 case 9:
Lev Walkin5c541f12006-10-18 18:40:14 +00001911#line 417 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001912 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001913 yyval.a_oid = yyvsp[-1].a_oid;
Lev Walkin418298d2006-07-13 08:24:20 +00001914 }
1915 break;
1916
Lev Walkina9532f42006-09-17 04:52:50 +00001917 case 10:
Lev Walkin5c541f12006-10-18 18:40:14 +00001918#line 420 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001919 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001920 yyval.a_oid = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00001921 }
1922 break;
1923
Lev Walkina9532f42006-09-17 04:52:50 +00001924 case 11:
Lev Walkin5c541f12006-10-18 18:40:14 +00001925#line 426 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001926 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001927 yyval.a_oid = asn1p_oid_new();
1928 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1929 if(yyvsp[0].a_oid_arc.name)
1930 free(yyvsp[0].a_oid_arc.name);
Lev Walkin418298d2006-07-13 08:24:20 +00001931 }
1932 break;
1933
Lev Walkina9532f42006-09-17 04:52:50 +00001934 case 12:
Lev Walkin5c541f12006-10-18 18:40:14 +00001935#line 432 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001936 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001937 yyval.a_oid = yyvsp[-1].a_oid;
1938 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1939 if(yyvsp[0].a_oid_arc.name)
1940 free(yyvsp[0].a_oid_arc.name);
Lev Walkin418298d2006-07-13 08:24:20 +00001941 }
1942 break;
1943
Lev Walkina9532f42006-09-17 04:52:50 +00001944 case 13:
Lev Walkin5c541f12006-10-18 18:40:14 +00001945#line 441 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001946 { /* iso */
Lev Walkina00d6b32006-03-21 03:40:38 +00001947 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1948 yyval.a_oid_arc.number = -1;
Lev Walkin418298d2006-07-13 08:24:20 +00001949 }
1950 break;
1951
Lev Walkina9532f42006-09-17 04:52:50 +00001952 case 14:
Lev Walkin5c541f12006-10-18 18:40:14 +00001953#line 445 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001954 { /* iso(1) */
Lev Walkina00d6b32006-03-21 03:40:38 +00001955 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1956 yyval.a_oid_arc.number = yyvsp[-1].a_int;
Lev Walkin418298d2006-07-13 08:24:20 +00001957 }
1958 break;
1959
Lev Walkina9532f42006-09-17 04:52:50 +00001960 case 15:
Lev Walkin5c541f12006-10-18 18:40:14 +00001961#line 449 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001962 { /* 1 */
Lev Walkina00d6b32006-03-21 03:40:38 +00001963 yyval.a_oid_arc.name = 0;
1964 yyval.a_oid_arc.number = yyvsp[0].a_int;
Lev Walkin418298d2006-07-13 08:24:20 +00001965 }
1966 break;
1967
Lev Walkina9532f42006-09-17 04:52:50 +00001968 case 16:
Lev Walkin5c541f12006-10-18 18:40:14 +00001969#line 459 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001970 { yyval.a_module_flags = MSF_NOFLAGS; }
1971 break;
1972
Lev Walkin418298d2006-07-13 08:24:20 +00001973 case 17:
Lev Walkin5c541f12006-10-18 18:40:14 +00001974#line 460 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001975 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001976 yyval.a_module_flags = yyvsp[0].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001977 }
1978 break;
1979
1980 case 18:
Lev Walkin5c541f12006-10-18 18:40:14 +00001981#line 469 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00001982 {
1983 yyval.a_module_flags = yyvsp[0].a_module_flags;
1984 }
1985 break;
1986
1987 case 19:
Lev Walkin5c541f12006-10-18 18:40:14 +00001988#line 472 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001989 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001990 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
Lev Walkin418298d2006-07-13 08:24:20 +00001991 }
1992 break;
1993
Lev Walkina9532f42006-09-17 04:52:50 +00001994 case 20:
Lev Walkin5c541f12006-10-18 18:40:14 +00001995#line 481 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00001996 {
Lev Walkina00d6b32006-03-21 03:40:38 +00001997 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
Lev Walkin418298d2006-07-13 08:24:20 +00001998 }
1999 break;
2000
Lev Walkina9532f42006-09-17 04:52:50 +00002001 case 21:
Lev Walkin5c541f12006-10-18 18:40:14 +00002002#line 484 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002003 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002004 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
Lev Walkin418298d2006-07-13 08:24:20 +00002005 }
2006 break;
2007
Lev Walkina9532f42006-09-17 04:52:50 +00002008 case 22:
Lev Walkin5c541f12006-10-18 18:40:14 +00002009#line 487 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002010 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002011 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
Lev Walkin418298d2006-07-13 08:24:20 +00002012 }
2013 break;
2014
Lev Walkina9532f42006-09-17 04:52:50 +00002015 case 23:
Lev Walkin5c541f12006-10-18 18:40:14 +00002016#line 490 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002017 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002018 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
Lev Walkin418298d2006-07-13 08:24:20 +00002019 }
2020 break;
2021
Lev Walkina9532f42006-09-17 04:52:50 +00002022 case 24:
Lev Walkin5c541f12006-10-18 18:40:14 +00002023#line 494 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002024 {
Lev Walkinf59d0752004-08-18 04:59:12 +00002025 /* X.680Amd1 specifies TAG and XER */
Lev Walkina00d6b32006-03-21 03:40:38 +00002026 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
2027 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
2028 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
2029 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
Lev Walkinf59d0752004-08-18 04:59:12 +00002030 } else {
2031 fprintf(stderr,
2032 "WARNING: %s INSTRUCTIONS at line %d: "
2033 "Unrecognized encoding reference\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00002034 yyvsp[-1].tv_str, yylineno);
2035 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
Lev Walkinf59d0752004-08-18 04:59:12 +00002036 }
Lev Walkina00d6b32006-03-21 03:40:38 +00002037 free(yyvsp[-1].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00002038 }
2039 break;
2040
Lev Walkina9532f42006-09-17 04:52:50 +00002041 case 25:
Lev Walkin5c541f12006-10-18 18:40:14 +00002042#line 515 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002043 { yyval.a_module = 0; }
2044 break;
2045
Lev Walkina9532f42006-09-17 04:52:50 +00002046 case 26:
Lev Walkin5c541f12006-10-18 18:40:14 +00002047#line 516 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002048 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002049 yyval.a_module = yyvsp[0].a_module;
Lev Walkin418298d2006-07-13 08:24:20 +00002050 }
2051 break;
2052
Lev Walkina9532f42006-09-17 04:52:50 +00002053 case 27:
Lev Walkin5c541f12006-10-18 18:40:14 +00002054#line 525 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002055 {
Lev Walkin866bd7f2006-09-14 10:35:20 +00002056 yyval.a_module = asn1p_module_new();
2057 AL_IMPORT(yyval.a_module, exports, yyvsp[-2].a_module, xp_next);
2058 AL_IMPORT(yyval.a_module, imports, yyvsp[-1].a_module, xp_next);
2059 AL_IMPORT(yyval.a_module, members, yyvsp[0].a_module, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002060 }
2061 break;
2062
Lev Walkina9532f42006-09-17 04:52:50 +00002063 case 28:
Lev Walkin5c541f12006-10-18 18:40:14 +00002064#line 534 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002065 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002066 yyval.a_module = yyvsp[0].a_module;
Lev Walkin418298d2006-07-13 08:24:20 +00002067 }
2068 break;
2069
Lev Walkina9532f42006-09-17 04:52:50 +00002070 case 29:
Lev Walkin5c541f12006-10-18 18:40:14 +00002071#line 537 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002072 {
2073 if(yyvsp[-1].a_module) {
2074 yyval.a_module = yyvsp[-1].a_module;
2075 } else {
2076 yyval.a_module = yyvsp[0].a_module;
2077 break;
2078 }
2079 AL_IMPORT(yyval.a_module, members, yyvsp[0].a_module, next);
2080 }
2081 break;
2082
Lev Walkin418298d2006-07-13 08:24:20 +00002083 case 30:
Lev Walkin5c541f12006-10-18 18:40:14 +00002084#line 553 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002085 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002086 yyval.a_module = asn1p_module_new();
2087 checkmem(yyval.a_module);
2088 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2089 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2090 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002091 }
2092 break;
2093
2094 case 31:
Lev Walkin5c541f12006-10-18 18:40:14 +00002095#line 560 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002096 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002097 yyval.a_module = asn1p_module_new();
2098 checkmem(yyval.a_module);
2099 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2100 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2101 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002102 }
2103 break;
2104
2105 case 32:
Lev Walkin5c541f12006-10-18 18:40:14 +00002106#line 573 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002107 {
2108 yyval.a_module = asn1p_module_new();
2109 checkmem(yyval.a_module);
2110 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2111 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2112 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
2113 }
Lev Walkin418298d2006-07-13 08:24:20 +00002114 break;
2115
Lev Walkin866bd7f2006-09-14 10:35:20 +00002116 case 33:
Lev Walkin5c541f12006-10-18 18:40:14 +00002117#line 581 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002118 { asn1p_lexer_hack_push_encoding_control(); }
2119 break;
2120
2121 case 34:
Lev Walkin5c541f12006-10-18 18:40:14 +00002122#line 582 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002123 {
Lev Walkinf59d0752004-08-18 04:59:12 +00002124 fprintf(stderr,
2125 "WARNING: ENCODING-CONTROL %s "
2126 "specification at line %d ignored\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00002127 yyvsp[-1].tv_str, yylineno);
2128 free(yyvsp[-1].tv_str);
2129 yyval.a_module = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002130 }
2131 break;
2132
Lev Walkina9532f42006-09-17 04:52:50 +00002133 case 35:
Lev Walkin5c541f12006-10-18 18:40:14 +00002134#line 594 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002135 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002136 return yyerror(
Lev Walkin70853052005-11-26 11:21:55 +00002137 "Attempt to redefine a standard basic string type, "
2138 "please comment out or remove this type redefinition.");
Lev Walkin418298d2006-07-13 08:24:20 +00002139 }
2140 break;
2141
Lev Walkina9532f42006-09-17 04:52:50 +00002142 case 36:
Lev Walkin5c541f12006-10-18 18:40:14 +00002143#line 607 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002144 { yyval.a_module = 0; }
2145 break;
2146
Lev Walkina9532f42006-09-17 04:52:50 +00002147 case 38:
Lev Walkin5c541f12006-10-18 18:40:14 +00002148#line 611 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002149 {
Lev Walkinb36317c2005-08-12 10:09:10 +00002150 if(!saved_aid && 0)
2151 return yyerror("Unterminated IMPORTS FROM, "
2152 "expected semicolon ';'");
2153 saved_aid = 0;
Lev Walkina00d6b32006-03-21 03:40:38 +00002154 yyval.a_module = yyvsp[-1].a_module;
Lev Walkin418298d2006-07-13 08:24:20 +00002155 }
2156 break;
2157
Lev Walkina9532f42006-09-17 04:52:50 +00002158 case 39:
Lev Walkin5c541f12006-10-18 18:40:14 +00002159#line 621 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002160 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002161 return yyerror("Empty IMPORTS list");
Lev Walkin418298d2006-07-13 08:24:20 +00002162 }
2163 break;
2164
Lev Walkina9532f42006-09-17 04:52:50 +00002165 case 40:
Lev Walkin5c541f12006-10-18 18:40:14 +00002166#line 627 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002167 { yyval.a_module = asn1p_module_new(); }
2168 break;
2169
2170 case 42:
Lev Walkin5c541f12006-10-18 18:40:14 +00002171#line 631 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002172 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002173 yyval.a_module = asn1p_module_new();
2174 checkmem(yyval.a_module);
2175 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin418298d2006-07-13 08:24:20 +00002176 }
2177 break;
2178
Lev Walkin4a4543f2006-10-13 12:37:39 +00002179 case 43:
Lev Walkin5c541f12006-10-18 18:40:14 +00002180#line 636 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002181 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002182 yyval.a_module = yyvsp[-1].a_module;
2183 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
Lev Walkin418298d2006-07-13 08:24:20 +00002184 }
2185 break;
2186
Lev Walkin4a4543f2006-10-13 12:37:39 +00002187 case 44:
Lev Walkin5c541f12006-10-18 18:40:14 +00002188#line 643 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002189 { memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); }
2190 break;
2191
Lev Walkin4a4543f2006-10-13 12:37:39 +00002192 case 45:
Lev Walkin5c541f12006-10-18 18:40:14 +00002193#line 644 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002194 { yyval.a_aid.oid = yyvsp[0].a_oid; }
2195 break;
2196
Lev Walkin4a4543f2006-10-13 12:37:39 +00002197 case 46:
Lev Walkin5c541f12006-10-18 18:40:14 +00002198#line 648 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002199 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002200 yyval.a_xports = yyvsp[-3].a_xports;
2201 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
2202 yyval.a_xports->identifier = yyvsp[0].a_aid;
Lev Walkinb36317c2005-08-12 10:09:10 +00002203 /* This stupid thing is used for look-back hack. */
Lev Walkina00d6b32006-03-21 03:40:38 +00002204 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
2205 checkmem(yyval.a_xports);
Lev Walkin418298d2006-07-13 08:24:20 +00002206 }
2207 break;
2208
Lev Walkin4a4543f2006-10-13 12:37:39 +00002209 case 47:
Lev Walkin5c541f12006-10-18 18:40:14 +00002210#line 659 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002211 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002212 yyval.a_xports = asn1p_xports_new();
2213 checkmem(yyval.a_xports);
2214 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002215 }
2216 break;
2217
Lev Walkin4a4543f2006-10-13 12:37:39 +00002218 case 48:
Lev Walkin5c541f12006-10-18 18:40:14 +00002219#line 664 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002220 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002221 yyval.a_xports = yyvsp[-2].a_xports;
2222 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002223 }
2224 break;
2225
Lev Walkina9532f42006-09-17 04:52:50 +00002226 case 49:
Lev Walkin5c541f12006-10-18 18:40:14 +00002227#line 671 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002228 {
Lev Walkina9532f42006-09-17 04:52:50 +00002229 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002230 checkmem(yyval.a_expr);
2231 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2232 yyval.a_expr->expr_type = A1TC_REFERENCE;
Lev Walkin418298d2006-07-13 08:24:20 +00002233 }
2234 break;
2235
Lev Walkina9532f42006-09-17 04:52:50 +00002236 case 50:
Lev Walkin5c541f12006-10-18 18:40:14 +00002237#line 677 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002238 { /* Completely equivalent to above */
2239 yyval.a_expr = NEW_EXPR();
2240 checkmem(yyval.a_expr);
2241 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2242 yyval.a_expr->expr_type = A1TC_REFERENCE;
2243 }
Lev Walkin866bd7f2006-09-14 10:35:20 +00002244 break;
2245
Lev Walkina9532f42006-09-17 04:52:50 +00002246 case 51:
Lev Walkin5c541f12006-10-18 18:40:14 +00002247#line 683 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002248 {
2249 yyval.a_expr = NEW_EXPR();
2250 checkmem(yyval.a_expr);
2251 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2252 yyval.a_expr->expr_type = A1TC_REFERENCE;
2253 }
2254 break;
2255
2256 case 52:
Lev Walkin5c541f12006-10-18 18:40:14 +00002257#line 693 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002258 { yyval.a_module = 0; }
2259 break;
2260
2261 case 53:
Lev Walkin5c541f12006-10-18 18:40:14 +00002262#line 694 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002263 {
2264 yyval.a_module = asn1p_module_new();
2265 checkmem(yyval.a_module);
2266 if(yyvsp[0].a_xports) {
2267 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
2268 } else {
2269 /* "EXPORTS ALL;" */
2270 }
2271 }
2272 break;
2273
Lev Walkin4a4543f2006-10-13 12:37:39 +00002274 case 54:
Lev Walkin5c541f12006-10-18 18:40:14 +00002275#line 706 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002276 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002277 yyval.a_xports = yyvsp[-1].a_xports;
Lev Walkin418298d2006-07-13 08:24:20 +00002278 }
2279 break;
2280
Lev Walkin4a4543f2006-10-13 12:37:39 +00002281 case 55:
Lev Walkin5c541f12006-10-18 18:40:14 +00002282#line 709 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002283 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002284 yyval.a_xports = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002285 }
2286 break;
2287
Lev Walkin4a4543f2006-10-13 12:37:39 +00002288 case 56:
Lev Walkin5c541f12006-10-18 18:40:14 +00002289#line 712 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002290 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002291 /* Empty EXPORTS clause effectively prohibits export. */
Lev Walkina00d6b32006-03-21 03:40:38 +00002292 yyval.a_xports = asn1p_xports_new();
2293 checkmem(yyval.a_xports);
Lev Walkin418298d2006-07-13 08:24:20 +00002294 }
2295 break;
2296
Lev Walkin4a4543f2006-10-13 12:37:39 +00002297 case 57:
Lev Walkin5c541f12006-10-18 18:40:14 +00002298#line 720 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002299 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002300 yyval.a_xports = asn1p_xports_new();
2301 assert(yyval.a_xports);
2302 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002303 }
2304 break;
2305
Lev Walkin4a4543f2006-10-13 12:37:39 +00002306 case 58:
Lev Walkin5c541f12006-10-18 18:40:14 +00002307#line 725 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002308 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002309 yyval.a_xports = yyvsp[-2].a_xports;
2310 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002311 }
2312 break;
2313
Lev Walkina9532f42006-09-17 04:52:50 +00002314 case 59:
Lev Walkin5c541f12006-10-18 18:40:14 +00002315#line 732 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002316 {
Lev Walkina9532f42006-09-17 04:52:50 +00002317 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002318 checkmem(yyval.a_expr);
2319 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2320 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
Lev Walkin418298d2006-07-13 08:24:20 +00002321 }
2322 break;
2323
Lev Walkina9532f42006-09-17 04:52:50 +00002324 case 60:
Lev Walkin5c541f12006-10-18 18:40:14 +00002325#line 738 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002326 {
2327 yyval.a_expr = NEW_EXPR();
2328 checkmem(yyval.a_expr);
2329 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2330 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
2331 }
Lev Walkin418298d2006-07-13 08:24:20 +00002332 break;
2333
Lev Walkina9532f42006-09-17 04:52:50 +00002334 case 61:
Lev Walkin5c541f12006-10-18 18:40:14 +00002335#line 744 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002336 {
2337 yyval.a_expr = NEW_EXPR();
2338 checkmem(yyval.a_expr);
2339 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2340 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
2341 }
2342 break;
2343
2344 case 62:
Lev Walkin5c541f12006-10-18 18:40:14 +00002345#line 753 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002346 { yyval.a_constr = yyvsp[-1].a_constr; }
2347 break;
2348
2349 case 63:
Lev Walkin5c541f12006-10-18 18:40:14 +00002350#line 756 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002351 {
Lev Walkin557f27d2006-03-21 07:46:48 +00002352 yyval.a_expr = yyvsp[-2].a_expr;
Lev Walkina00d6b32006-03-21 03:40:38 +00002353 assert(yyval.a_expr->Identifier == 0);
Lev Walkin557f27d2006-03-21 07:46:48 +00002354 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
Lev Walkina00d6b32006-03-21 03:40:38 +00002355 yyval.a_expr->meta_type = AMT_VALUESET;
Lev Walkin557f27d2006-03-21 07:46:48 +00002356 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00002357 }
2358 break;
2359
Lev Walkin4a4543f2006-10-13 12:37:39 +00002360 case 64:
Lev Walkin5c541f12006-10-18 18:40:14 +00002361#line 766 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002362 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00002363 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002364 }
2365 break;
2366
Lev Walkin4a4543f2006-10-13 12:37:39 +00002367 case 65:
Lev Walkin5c541f12006-10-18 18:40:14 +00002368#line 779 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002369 {
Lev Walkina9532f42006-09-17 04:52:50 +00002370 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002371 checkmem(yyval.a_expr);
2372 yyval.a_expr->reference = yyvsp[0].a_ref;
2373 yyval.a_expr->expr_type = A1TC_REFERENCE;
2374 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin418298d2006-07-13 08:24:20 +00002375 }
2376 break;
2377
Lev Walkin4a4543f2006-10-13 12:37:39 +00002378 case 66:
Lev Walkin5c541f12006-10-18 18:40:14 +00002379#line 789 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002380 {
Lev Walkina9532f42006-09-17 04:52:50 +00002381 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002382 checkmem(yyval.a_expr);
Lev Walkin0c0bca62006-03-21 04:48:15 +00002383 yyval.a_expr->reference = yyvsp[-3].a_ref;
2384 yyval.a_expr->rhs_pspecs = yyvsp[-1].a_expr;
2385 yyval.a_expr->expr_type = A1TC_REFERENCE;
2386 yyval.a_expr->meta_type = AMT_TYPEREF;
Lev Walkin418298d2006-07-13 08:24:20 +00002387 }
2388 break;
2389
Lev Walkin4a4543f2006-10-13 12:37:39 +00002390 case 67:
Lev Walkin5c541f12006-10-18 18:40:14 +00002391#line 809 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002392 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002393 yyval.a_expr = yyvsp[0].a_expr;
2394 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2395 assert(yyval.a_expr->expr_type);
2396 assert(yyval.a_expr->meta_type);
Lev Walkin418298d2006-07-13 08:24:20 +00002397 }
2398 break;
2399
Lev Walkin4a4543f2006-10-13 12:37:39 +00002400 case 68:
Lev Walkin5c541f12006-10-18 18:40:14 +00002401#line 815 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002402 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002403 yyval.a_expr = yyvsp[0].a_expr;
2404 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2405 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2406 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin418298d2006-07-13 08:24:20 +00002407 }
2408 break;
2409
Lev Walkina9532f42006-09-17 04:52:50 +00002410 case 69:
Lev Walkin5c541f12006-10-18 18:40:14 +00002411#line 831 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002412 {
2413 yyval.a_expr = yyvsp[0].a_expr;
2414 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2415 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
2416 }
2417 break;
2418
2419 case 70:
Lev Walkin5c541f12006-10-18 18:40:14 +00002420#line 837 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002421 {
2422 yyval.a_expr = yyvsp[0].a_expr;
2423 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2424 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
2425 }
2426 break;
2427
2428 case 71:
Lev Walkin5c541f12006-10-18 18:40:14 +00002429#line 845 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002430 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002431 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002432 yyval.a_plist = asn1p_paramlist_new(yylineno);
2433 checkmem(yyval.a_plist);
2434 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 +00002435 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002436 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2437 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin418298d2006-07-13 08:24:20 +00002438 }
2439 break;
2440
Lev Walkin4a4543f2006-10-13 12:37:39 +00002441 case 72:
Lev Walkin5c541f12006-10-18 18:40:14 +00002442#line 854 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002443 {
Lev Walkinf15320b2004-06-03 03:38:44 +00002444 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00002445 yyval.a_plist = yyvsp[-2].a_plist;
2446 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 +00002447 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002448 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2449 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
Lev Walkin418298d2006-07-13 08:24:20 +00002450 }
2451 break;
2452
Lev Walkin4a4543f2006-10-13 12:37:39 +00002453 case 73:
Lev Walkin5c541f12006-10-18 18:40:14 +00002454#line 865 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002455 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002456 yyval.a_parg.governor = NULL;
2457 yyval.a_parg.argument = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002458 }
2459 break;
2460
Lev Walkin866bd7f2006-09-14 10:35:20 +00002461 case 74:
Lev Walkin5c541f12006-10-18 18:40:14 +00002462#line 869 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00002463 {
2464 int ret;
2465 yyval.a_parg.governor = asn1p_ref_new(yylineno);
Lev Walkin4a4543f2006-10-13 12:37:39 +00002466 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
Lev Walkin866bd7f2006-09-14 10:35:20 +00002467 checkmem(ret == 0);
2468 yyval.a_parg.argument = yyvsp[0].tv_str;
2469 }
2470 break;
2471
2472 case 75:
Lev Walkin5c541f12006-10-18 18:40:14 +00002473#line 876 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002474 {
2475 int ret;
2476 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2477 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
2478 checkmem(ret == 0);
2479 yyval.a_parg.argument = yyvsp[0].tv_str;
2480 }
2481 break;
2482
2483 case 76:
Lev Walkin5c541f12006-10-18 18:40:14 +00002484#line 883 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002485 {
Lev Walkina9532f42006-09-17 04:52:50 +00002486 int ret;
2487 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2488 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2489 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2490 checkmem(ret == 0);
2491 yyval.a_parg.argument = yyvsp[0].tv_str;
2492 }
2493 break;
2494
Lev Walkin4a4543f2006-10-13 12:37:39 +00002495 case 77:
Lev Walkin5c541f12006-10-18 18:40:14 +00002496#line 891 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002497 {
2498 int ret;
2499 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2500 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2501 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2502 checkmem(ret == 0);
2503 yyval.a_parg.argument = yyvsp[0].tv_str;
2504 }
2505 break;
2506
2507 case 78:
Lev Walkin5c541f12006-10-18 18:40:14 +00002508#line 902 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002509 {
2510 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002511 checkmem(yyval.a_expr);
2512 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002513 }
2514 break;
2515
Lev Walkin4a4543f2006-10-13 12:37:39 +00002516 case 79:
Lev Walkin5c541f12006-10-18 18:40:14 +00002517#line 907 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002518 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002519 yyval.a_expr = yyvsp[-2].a_expr;
2520 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002521 }
2522 break;
2523
Lev Walkin4a4543f2006-10-13 12:37:39 +00002524 case 80:
Lev Walkin5c541f12006-10-18 18:40:14 +00002525#line 914 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002526 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002527 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002528 }
2529 break;
2530
Lev Walkin4a4543f2006-10-13 12:37:39 +00002531 case 81:
Lev Walkin5c541f12006-10-18 18:40:14 +00002532#line 917 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002533 {
Lev Walkina9532f42006-09-17 04:52:50 +00002534 yyval.a_expr = NEW_EXPR();
Lev Walkin0c0bca62006-03-21 04:48:15 +00002535 checkmem(yyval.a_expr);
2536 yyval.a_expr->Identifier = "?";
2537 yyval.a_expr->expr_type = A1TC_REFERENCE;
2538 yyval.a_expr->meta_type = AMT_VALUE;
2539 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00002540 }
2541 break;
2542
Lev Walkin4a4543f2006-10-13 12:37:39 +00002543 case 82:
Lev Walkin5c541f12006-10-18 18:40:14 +00002544#line 925 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002545 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002546 asn1p_ref_t *ref;
Lev Walkina9532f42006-09-17 04:52:50 +00002547 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002548 checkmem(yyval.a_expr);
2549 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2550 yyval.a_expr->expr_type = A1TC_REFERENCE;
2551 yyval.a_expr->meta_type = AMT_VALUE;
2552 ref = asn1p_ref_new(yylineno);
2553 asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2554 yyval.a_expr->value = asn1p_value_fromref(ref, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00002555 }
2556 break;
2557
Lev Walkin4a4543f2006-10-13 12:37:39 +00002558 case 83:
Lev Walkin5c541f12006-10-18 18:40:14 +00002559#line 936 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002560 {
Lev Walkina9532f42006-09-17 04:52:50 +00002561 yyval.a_expr = NEW_EXPR();
Lev Walkin5045dfa2006-03-21 09:41:28 +00002562 yyval.a_expr->expr_type = A1TC_VALUESET;
2563 yyval.a_expr->meta_type = AMT_VALUESET;
2564 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00002565 }
2566 break;
2567
Lev Walkin4a4543f2006-10-13 12:37:39 +00002568 case 84:
Lev Walkin5c541f12006-10-18 18:40:14 +00002569#line 959 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002570 { yyval.a_expr = NEW_EXPR(); }
Lev Walkin418298d2006-07-13 08:24:20 +00002571 break;
2572
Lev Walkin4a4543f2006-10-13 12:37:39 +00002573 case 85:
Lev Walkin5c541f12006-10-18 18:40:14 +00002574#line 960 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002575 { yyval.a_expr = yyvsp[0].a_expr; }
2576 break;
2577
Lev Walkin4a4543f2006-10-13 12:37:39 +00002578 case 86:
Lev Walkin5c541f12006-10-18 18:40:14 +00002579#line 963 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002580 {
Lev Walkina9532f42006-09-17 04:52:50 +00002581 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002582 checkmem(yyval.a_expr);
2583 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002584 }
2585 break;
2586
Lev Walkin4a4543f2006-10-13 12:37:39 +00002587 case 87:
Lev Walkin5c541f12006-10-18 18:40:14 +00002588#line 968 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002589 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002590 yyval.a_expr = yyvsp[-2].a_expr;
2591 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002592 }
2593 break;
2594
Lev Walkin4a4543f2006-10-13 12:37:39 +00002595 case 88:
Lev Walkin5c541f12006-10-18 18:40:14 +00002596#line 975 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002597 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002598 yyval.a_expr = yyvsp[-1].a_expr;
2599 assert(yyval.a_expr->Identifier == 0);
2600 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2601 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2602 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002603 }
2604 break;
2605
Lev Walkin4a4543f2006-10-13 12:37:39 +00002606 case 89:
Lev Walkin5c541f12006-10-18 18:40:14 +00002607#line 982 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002608 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002609 yyval.a_expr = yyvsp[-1].a_expr;
2610 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2611 yyval.a_expr->marker = yyvsp[0].a_marker;
2612 _fixup_anonymous_identifier(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002613 }
2614 break;
2615
Lev Walkin4a4543f2006-10-13 12:37:39 +00002616 case 90:
Lev Walkin5c541f12006-10-18 18:40:14 +00002617#line 988 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002618 {
Lev Walkina9532f42006-09-17 04:52:50 +00002619 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002620 checkmem(yyval.a_expr);
2621 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2622 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
2623 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002624 }
2625 break;
2626
Lev Walkin4a4543f2006-10-13 12:37:39 +00002627 case 91:
Lev Walkin5c541f12006-10-18 18:40:14 +00002628#line 995 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002629 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002630 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002631 }
2632 break;
2633
Lev Walkin4a4543f2006-10-13 12:37:39 +00002634 case 92:
Lev Walkin5c541f12006-10-18 18:40:14 +00002635#line 1001 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002636 {
Lev Walkina9532f42006-09-17 04:52:50 +00002637 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002638 checkmem(yyval.a_expr);
2639 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002640 }
2641 break;
2642
Lev Walkin4a4543f2006-10-13 12:37:39 +00002643 case 93:
Lev Walkin5c541f12006-10-18 18:40:14 +00002644#line 1006 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002645 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002646 yyval.a_expr = yyvsp[-2].a_expr;
2647 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002648 }
2649 break;
2650
Lev Walkin4a4543f2006-10-13 12:37:39 +00002651 case 94:
Lev Walkin5c541f12006-10-18 18:40:14 +00002652#line 1013 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002653 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002654 yyval.a_expr = yyvsp[0].a_expr;
2655 assert(yyval.a_expr->Identifier == 0);
2656 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00002657 }
2658 break;
2659
Lev Walkin4a4543f2006-10-13 12:37:39 +00002660 case 95:
Lev Walkin5c541f12006-10-18 18:40:14 +00002661#line 1018 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002662 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002663 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002664 }
2665 break;
2666
Lev Walkin4a4543f2006-10-13 12:37:39 +00002667 case 96:
Lev Walkin5c541f12006-10-18 18:40:14 +00002668#line 1021 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002669 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002670 yyval.a_expr = yyvsp[0].a_expr;
2671 _fixup_anonymous_identifier(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002672 }
2673 break;
2674
Lev Walkin4a4543f2006-10-13 12:37:39 +00002675 case 97:
Lev Walkin5c541f12006-10-18 18:40:14 +00002676#line 1028 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002677 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002678 yyval.a_expr = yyvsp[-2].a_expr;
2679 checkmem(yyval.a_expr);
2680 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2681 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2682 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
Lev Walkin418298d2006-07-13 08:24:20 +00002683 }
2684 break;
2685
Lev Walkin4a4543f2006-10-13 12:37:39 +00002686 case 98:
Lev Walkin5c541f12006-10-18 18:40:14 +00002687#line 1038 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002688 { yyval.a_int = 0; }
2689 break;
2690
Lev Walkin4a4543f2006-10-13 12:37:39 +00002691 case 99:
Lev Walkin5c541f12006-10-18 18:40:14 +00002692#line 1039 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002693 { yyval.a_int = 1; }
2694 break;
2695
Lev Walkin4a4543f2006-10-13 12:37:39 +00002696 case 100:
Lev Walkin5c541f12006-10-18 18:40:14 +00002697#line 1043 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002698 {
Lev Walkina9532f42006-09-17 04:52:50 +00002699 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002700 checkmem(yyval.a_expr);
2701 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2702 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2703 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002704 }
2705 break;
2706
Lev Walkin4a4543f2006-10-13 12:37:39 +00002707 case 101:
Lev Walkin5c541f12006-10-18 18:40:14 +00002708#line 1050 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002709 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002710 yyval.a_expr = yyvsp[-2].a_expr;
2711 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002712 }
2713 break;
2714
Lev Walkin4a4543f2006-10-13 12:37:39 +00002715 case 102:
Lev Walkin5c541f12006-10-18 18:40:14 +00002716#line 1060 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002717 {
Lev Walkina9532f42006-09-17 04:52:50 +00002718 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002719 checkmem(yyval.a_expr);
2720 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2721 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2722 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2723 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002724 }
2725 break;
2726
Lev Walkin4a4543f2006-10-13 12:37:39 +00002727 case 103:
Lev Walkin5c541f12006-10-18 18:40:14 +00002728#line 1070 "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[-3].tv_str;
2732 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2733 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2734 yyval.a_expr->unique = yyvsp[-1].a_int;
2735 yyval.a_expr->marker = yyvsp[0].a_marker;
2736 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00002737 }
2738 break;
2739
Lev Walkin4a4543f2006-10-13 12:37:39 +00002740 case 104:
Lev Walkin5c541f12006-10-18 18:40:14 +00002741#line 1081 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002742 {
Lev Walkina9532f42006-09-17 04:52:50 +00002743 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002744 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2745 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2746 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2747 yyval.a_expr->reference = yyvsp[-1].a_ref;
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 105:
Lev Walkin5c541f12006-10-18 18:40:14 +00002753#line 1091 "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 checkmem(yyval.a_expr);
2757 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2758 yyval.a_expr->reference = yyvsp[-1].a_ref;
2759 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2760 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2761 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002762 }
2763 break;
2764
Lev Walkin4a4543f2006-10-13 12:37:39 +00002765 case 106:
Lev Walkin5c541f12006-10-18 18:40:14 +00002766#line 1102 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002767 {
Lev Walkina9532f42006-09-17 04:52:50 +00002768 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002769 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2770 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2771 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2772 yyval.a_expr->reference = yyvsp[-1].a_ref;
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 107:
Lev Walkin5c541f12006-10-18 18:40:14 +00002778#line 1112 "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->meta_type = AMT_OBJECTFIELD;
2784 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2785 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
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 108:
Lev Walkin5c541f12006-10-18 18:40:14 +00002791#line 1123 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002792 {
Lev Walkina9532f42006-09-17 04:52:50 +00002793 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00002794 checkmem(yyval.a_expr);
2795 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2796 yyval.a_expr->reference = yyvsp[-1].a_ref;
2797 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2798 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2799 yyval.a_expr->marker = yyvsp[0].a_marker;
Lev Walkin418298d2006-07-13 08:24:20 +00002800 }
2801 break;
2802
Lev Walkin4a4543f2006-10-13 12:37:39 +00002803 case 109:
Lev Walkin5c541f12006-10-18 18:40:14 +00002804#line 1135 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002805 { yyval.a_wsynt = 0; }
2806 break;
2807
Lev Walkin4a4543f2006-10-13 12:37:39 +00002808 case 110:
Lev Walkin5c541f12006-10-18 18:40:14 +00002809#line 1136 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002810 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002811 yyval.a_wsynt = yyvsp[0].a_wsynt;
Lev Walkin418298d2006-07-13 08:24:20 +00002812 }
2813 break;
2814
Lev Walkin4a4543f2006-10-13 12:37:39 +00002815 case 111:
Lev Walkin5c541f12006-10-18 18:40:14 +00002816#line 1143 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002817 { asn1p_lexer_hack_enable_with_syntax(); }
2818 break;
2819
Lev Walkin4a4543f2006-10-13 12:37:39 +00002820 case 112:
Lev Walkin5c541f12006-10-18 18:40:14 +00002821#line 1145 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002822 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002823 yyval.a_wsynt = yyvsp[-1].a_wsynt;
Lev Walkin418298d2006-07-13 08:24:20 +00002824 }
2825 break;
2826
Lev Walkin4a4543f2006-10-13 12:37:39 +00002827 case 113:
Lev Walkin5c541f12006-10-18 18:40:14 +00002828#line 1151 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002829 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002830 yyval.a_wsynt = asn1p_wsyntx_new();
2831 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002832 }
2833 break;
2834
Lev Walkin4a4543f2006-10-13 12:37:39 +00002835 case 114:
Lev Walkin5c541f12006-10-18 18:40:14 +00002836#line 1155 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002837 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002838 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2839 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
Lev Walkin418298d2006-07-13 08:24:20 +00002840 }
2841 break;
2842
Lev Walkin4a4543f2006-10-13 12:37:39 +00002843 case 115:
Lev Walkin5c541f12006-10-18 18:40:14 +00002844#line 1162 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002845 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002846 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_opaque.buf, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002847 yyval.a_wchunk->type = WC_WHITESPACE;
Lev Walkin418298d2006-07-13 08:24:20 +00002848 }
2849 break;
2850
Lev Walkin4a4543f2006-10-13 12:37:39 +00002851 case 116:
Lev Walkin5c541f12006-10-18 18:40:14 +00002852#line 1166 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002853 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002854 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_str, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00002855 }
2856 break;
2857
Lev Walkin4a4543f2006-10-13 12:37:39 +00002858 case 117:
Lev Walkin5c541f12006-10-18 18:40:14 +00002859#line 1169 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002860 {
Lev Walkinc46b7cb2006-08-18 02:27:55 +00002861 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].a_refcomp.name, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00002862 yyval.a_wchunk->type = WC_FIELD;
Lev Walkin418298d2006-07-13 08:24:20 +00002863 }
2864 break;
2865
Lev Walkin4a4543f2006-10-13 12:37:39 +00002866 case 118:
Lev Walkin5c541f12006-10-18 18:40:14 +00002867#line 1173 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002868 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002869 yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
Lev Walkin418298d2006-07-13 08:24:20 +00002870 }
2871 break;
2872
Lev Walkina9532f42006-09-17 04:52:50 +00002873 case 119:
Lev Walkin5c541f12006-10-18 18:40:14 +00002874#line 1179 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00002875 {
2876 yyval.a_expr = NEW_EXPR();
Lev Walkin866bd7f2006-09-14 10:35:20 +00002877 checkmem(yyval.a_expr);
2878 yyval.a_expr->Identifier = strdup("...");
Lev Walkin866bd7f2006-09-14 10:35:20 +00002879 checkmem(yyval.a_expr->Identifier);
2880 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2881 yyval.a_expr->meta_type = AMT_TYPE;
2882 }
2883 break;
2884
Lev Walkina9532f42006-09-17 04:52:50 +00002885 case 120:
Lev Walkin5c541f12006-10-18 18:40:14 +00002886#line 1187 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002887 {
2888 yyval.a_expr = NEW_EXPR();
2889 checkmem(yyval.a_expr);
2890 yyval.a_expr->Identifier = strdup("...");
2891 checkmem(yyval.a_expr->Identifier);
2892 yyval.a_expr->value = yyvsp[0].a_value;
2893 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2894 yyval.a_expr->meta_type = AMT_TYPE;
2895 }
2896 break;
2897
2898 case 121:
Lev Walkin5c541f12006-10-18 18:40:14 +00002899#line 1196 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00002900 {
2901 yyval.a_expr = NEW_EXPR();
2902 checkmem(yyval.a_expr);
2903 yyval.a_expr->Identifier = strdup("...");
2904 yyval.a_expr->value = yyvsp[0].a_value;
2905 checkmem(yyval.a_expr->Identifier);
2906 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2907 yyval.a_expr->meta_type = AMT_TYPE;
2908 }
2909 break;
2910
2911 case 122:
Lev Walkin5c541f12006-10-18 18:40:14 +00002912#line 1208 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002913 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002914 yyval.a_expr = yyvsp[-1].a_expr;
2915 yyval.a_expr->tag = yyvsp[-2].a_tag;
Lev Walkin070a52d2004-08-22 03:19:54 +00002916 /*
2917 * Outer constraint for SEQUENCE OF and SET OF applies
2918 * to the inner type.
2919 */
Lev Walkina00d6b32006-03-21 03:40:38 +00002920 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2921 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2922 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2923 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002924 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002925 if(yyval.a_expr->constraints) {
2926 assert(!yyvsp[-1].a_expr);
Lev Walkin070a52d2004-08-22 03:19:54 +00002927 } else {
Lev Walkina00d6b32006-03-21 03:40:38 +00002928 yyval.a_expr->constraints = yyvsp[0].a_constr;
Lev Walkin070a52d2004-08-22 03:19:54 +00002929 }
2930 }
Lev Walkin418298d2006-07-13 08:24:20 +00002931 }
2932 break;
2933
Lev Walkin4a4543f2006-10-13 12:37:39 +00002934 case 123:
Lev Walkin5c541f12006-10-18 18:40:14 +00002935#line 1230 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002936 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002937 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
Lev Walkinfb872bd2006-03-18 06:53:11 +00002938 asn1p_as_pointer = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00002939 }
2940 break;
2941
Lev Walkin4a4543f2006-10-13 12:37:39 +00002942 case 124:
Lev Walkin5c541f12006-10-18 18:40:14 +00002943#line 1237 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002944 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002945 yyval.a_expr = yyvsp[0].a_expr;
2946 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
Lev Walkinfb872bd2006-03-18 06:53:11 +00002947
Lev Walkina00d6b32006-03-21 03:40:38 +00002948 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2949 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
Lev Walkinef625402005-09-05 05:17:57 +00002950 fprintf(stderr,
2951 "INFO: Directive <ASN1C:RepresentAsPointer> "
2952 "applied to %s at line %d\n",
Lev Walkina00d6b32006-03-21 03:40:38 +00002953 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2954 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
Lev Walkinef625402005-09-05 05:17:57 +00002955 : "member",
Lev Walkina00d6b32006-03-21 03:40:38 +00002956 yyval.a_expr->_lineno
Lev Walkinef625402005-09-05 05:17:57 +00002957 );
2958 }
Lev Walkin418298d2006-07-13 08:24:20 +00002959 }
2960 break;
2961
Lev Walkin4a4543f2006-10-13 12:37:39 +00002962 case 125:
Lev Walkin5c541f12006-10-18 18:40:14 +00002963#line 1256 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002964 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002965 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00002966 }
2967 break;
2968
Lev Walkin4a4543f2006-10-13 12:37:39 +00002969 case 126:
Lev Walkin5c541f12006-10-18 18:40:14 +00002970#line 1259 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002971 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002972 yyval.a_expr = yyvsp[-1].a_expr;
2973 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2974 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2975 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002976 }
2977 break;
2978
Lev Walkin4a4543f2006-10-13 12:37:39 +00002979 case 127:
Lev Walkin5c541f12006-10-18 18:40:14 +00002980#line 1265 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002981 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002982 yyval.a_expr = yyvsp[-1].a_expr;
2983 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2984 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2985 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002986 }
2987 break;
2988
Lev Walkin4a4543f2006-10-13 12:37:39 +00002989 case 128:
Lev Walkin5c541f12006-10-18 18:40:14 +00002990#line 1271 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00002991 {
Lev Walkina00d6b32006-03-21 03:40:38 +00002992 yyval.a_expr = yyvsp[-1].a_expr;
2993 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2994 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2995 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00002996 }
2997 break;
2998
Lev Walkin4a4543f2006-10-13 12:37:39 +00002999 case 129:
Lev Walkin5c541f12006-10-18 18:40:14 +00003000#line 1277 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003001 {
Lev Walkina9532f42006-09-17 04:52:50 +00003002 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003003 checkmem(yyval.a_expr);
3004 yyval.a_expr->constraints = yyvsp[-4].a_constr;
3005 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
3006 yyval.a_expr->meta_type = AMT_TYPE;
3007 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
3008 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
3009 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00003010 }
3011 break;
3012
Lev Walkin4a4543f2006-10-13 12:37:39 +00003013 case 130:
Lev Walkin5c541f12006-10-18 18:40:14 +00003014#line 1287 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003015 {
Lev Walkina9532f42006-09-17 04:52:50 +00003016 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003017 checkmem(yyval.a_expr);
3018 yyval.a_expr->constraints = yyvsp[-4].a_constr;
3019 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
3020 yyval.a_expr->meta_type = AMT_TYPE;
3021 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
3022 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
3023 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00003024 }
3025 break;
3026
Lev Walkin4a4543f2006-10-13 12:37:39 +00003027 case 131:
Lev Walkin5c541f12006-10-18 18:40:14 +00003028#line 1297 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003029 {
Lev Walkina9532f42006-09-17 04:52:50 +00003030 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003031 checkmem(yyval.a_expr);
3032 yyval.a_expr->expr_type = ASN_TYPE_ANY;
3033 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003034 }
3035 break;
3036
Lev Walkin4a4543f2006-10-13 12:37:39 +00003037 case 132:
Lev Walkin5c541f12006-10-18 18:40:14 +00003038#line 1303 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003039 {
Lev Walkin070a52d2004-08-22 03:19:54 +00003040 int ret;
Lev Walkina9532f42006-09-17 04:52:50 +00003041 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003042 checkmem(yyval.a_expr);
3043 yyval.a_expr->reference = asn1p_ref_new(yylineno);
3044 ret = asn1p_ref_add_component(yyval.a_expr->reference,
3045 yyvsp[0].tv_str, RLT_lowercase);
Lev Walkin070a52d2004-08-22 03:19:54 +00003046 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003047 yyval.a_expr->expr_type = ASN_TYPE_ANY;
3048 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003049 }
3050 break;
3051
Lev Walkin4a4543f2006-10-13 12:37:39 +00003052 case 133:
Lev Walkin5c541f12006-10-18 18:40:14 +00003053#line 1314 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003054 {
Lev Walkina9532f42006-09-17 04:52:50 +00003055 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003056 checkmem(yyval.a_expr);
3057 yyval.a_expr->reference = yyvsp[0].a_ref;
3058 yyval.a_expr->expr_type = A1TC_INSTANCE;
3059 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003060 }
3061 break;
3062
Lev Walkin4a4543f2006-10-13 12:37:39 +00003063 case 134:
Lev Walkin5c541f12006-10-18 18:40:14 +00003064#line 1329 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003065 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003066 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003067 yyval.a_ref = asn1p_ref_new(yylineno);
3068 checkmem(yyval.a_ref);
3069 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00003070 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003071 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003072 }
3073 break;
3074
Lev Walkina9532f42006-09-17 04:52:50 +00003075 case 135:
Lev Walkin5c541f12006-10-18 18:40:14 +00003076#line 1337 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003077 {
3078 int ret;
3079 yyval.a_ref = asn1p_ref_new(yylineno);
3080 checkmem(yyval.a_ref);
3081 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
3082 checkmem(ret == 0);
3083 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3084 checkmem(ret == 0);
3085 free(yyvsp[-2].tv_str);
3086 }
3087 break;
3088
3089 case 136:
Lev Walkin5c541f12006-10-18 18:40:14 +00003090#line 1347 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003091 {
3092 int ret;
3093 yyval.a_ref = asn1p_ref_new(yylineno);
3094 checkmem(yyval.a_ref);
3095 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
3096 checkmem(ret == 0);
3097 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3098 checkmem(ret == 0);
3099 free(yyvsp[-2].tv_str);
3100 }
3101 break;
3102
3103 case 137:
Lev Walkin5c541f12006-10-18 18:40:14 +00003104#line 1357 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003105 {
Lev Walkin9d542d22006-03-14 16:31:37 +00003106 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003107 yyval.a_ref = asn1p_ref_new(yylineno);
3108 checkmem(yyval.a_ref);
3109 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkin9d542d22006-03-14 16:31:37 +00003110 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003111 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkin9d542d22006-03-14 16:31:37 +00003112 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003113 free(yyvsp[-2].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003114 }
3115 break;
3116
Lev Walkin4a4543f2006-10-13 12:37:39 +00003117 case 138:
Lev Walkin5c541f12006-10-18 18:40:14 +00003118#line 1367 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003119 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003120 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003121 yyval.a_ref = asn1p_ref_new(yylineno);
3122 checkmem(yyval.a_ref);
3123 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
3124 free(yyvsp[0].tv_str);
Lev Walkin9c974182004-09-15 11:59:51 +00003125 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003126 }
3127 break;
3128
Lev Walkin4a4543f2006-10-13 12:37:39 +00003129 case 139:
Lev Walkin5c541f12006-10-18 18:40:14 +00003130#line 1375 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003131 {
Lev Walkin9c974182004-09-15 11:59:51 +00003132 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003133 yyval.a_ref = yyvsp[0].a_ref;
3134 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
3135 free(yyvsp[-2].tv_str);
Lev Walkinf15320b2004-06-03 03:38:44 +00003136 checkmem(ret == 0);
3137 /*
3138 * Move the last element infront.
3139 */
3140 {
3141 struct asn1p_ref_component_s tmp_comp;
Lev Walkina00d6b32006-03-21 03:40:38 +00003142 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
3143 memmove(&yyval.a_ref->components[1],
3144 &yyval.a_ref->components[0],
3145 sizeof(yyval.a_ref->components[0])
3146 * (yyval.a_ref->comp_count - 1));
3147 yyval.a_ref->components[0] = tmp_comp;
Lev Walkinf15320b2004-06-03 03:38:44 +00003148 }
Lev Walkin418298d2006-07-13 08:24:20 +00003149 }
3150 break;
3151
Lev Walkin4a4543f2006-10-13 12:37:39 +00003152 case 140:
Lev Walkin5c541f12006-10-18 18:40:14 +00003153#line 1397 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003154 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003155 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003156 yyval.a_ref = asn1p_ref_new(yylineno);
3157 checkmem(yyval.a_ref);
3158 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
3159 free(yyvsp[0].a_refcomp.name);
Lev Walkinf15320b2004-06-03 03:38:44 +00003160 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003161 }
3162 break;
3163
Lev Walkin4a4543f2006-10-13 12:37:39 +00003164 case 141:
Lev Walkin5c541f12006-10-18 18:40:14 +00003165#line 1405 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003166 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003167 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003168 yyval.a_ref = yyvsp[-2].a_ref;
3169 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
3170 free(yyvsp[0].a_refcomp.name);
Lev Walkinf15320b2004-06-03 03:38:44 +00003171 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003172 }
3173 break;
3174
Lev Walkin4a4543f2006-10-13 12:37:39 +00003175 case 143:
Lev Walkin5c541f12006-10-18 18:40:14 +00003176#line 1418 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003177 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003178 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
3179 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00003180 }
3181 break;
3182
Lev Walkin4a4543f2006-10-13 12:37:39 +00003183 case 144:
Lev Walkin5c541f12006-10-18 18:40:14 +00003184#line 1423 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003185 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003186 yyval.a_refcomp.lex_type = RLT_Amplowercase;
3187 yyval.a_refcomp.name = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00003188 }
3189 break;
3190
Lev Walkin4a4543f2006-10-13 12:37:39 +00003191 case 145:
Lev Walkin5c541f12006-10-18 18:40:14 +00003192#line 1432 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003193 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003194 yyval.a_ref = asn1p_ref_new(yylineno);
3195 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003196 }
3197 break;
3198
Lev Walkin4a4543f2006-10-13 12:37:39 +00003199 case 146:
Lev Walkin5c541f12006-10-18 18:40:14 +00003200#line 1436 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003201 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003202 yyval.a_ref = yyval.a_ref;
3203 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003204 }
3205 break;
3206
Lev Walkin4a4543f2006-10-13 12:37:39 +00003207 case 147:
Lev Walkin5c541f12006-10-18 18:40:14 +00003208#line 1440 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003209 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003210 yyval.a_ref = yyval.a_ref;
3211 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
Lev Walkin418298d2006-07-13 08:24:20 +00003212 }
3213 break;
3214
Lev Walkin4a4543f2006-10-13 12:37:39 +00003215 case 148:
Lev Walkin5c541f12006-10-18 18:40:14 +00003216#line 1447 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003217 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003218 yyval.a_ref = asn1p_ref_new(yylineno);
3219 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
Lev Walkin418298d2006-07-13 08:24:20 +00003220 }
3221 break;
3222
Lev Walkin4a4543f2006-10-13 12:37:39 +00003223 case 149:
Lev Walkin5c541f12006-10-18 18:40:14 +00003224#line 1467 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003225 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003226 yyval.a_expr = yyvsp[-2].a_expr;
3227 assert(yyval.a_expr->Identifier == NULL);
3228 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3229 yyval.a_expr->meta_type = AMT_VALUE;
3230 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003231 }
3232 break;
3233
Lev Walkin4a4543f2006-10-13 12:37:39 +00003234 case 152:
Lev Walkin5c541f12006-10-18 18:40:14 +00003235#line 1479 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003236 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003237 yyval.a_value = asn1p_value_fromint(0);
3238 checkmem(yyval.a_value);
3239 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
3240 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
3241 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003242 }
3243 break;
3244
Lev Walkin4a4543f2006-10-13 12:37:39 +00003245 case 153:
Lev Walkin5c541f12006-10-18 18:40:14 +00003246#line 1486 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003247 { asn1p_lexer_hack_push_opaque_state(); }
3248 break;
3249
Lev Walkin4a4543f2006-10-13 12:37:39 +00003250 case 154:
Lev Walkin5c541f12006-10-18 18:40:14 +00003251#line 1486 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003252 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003253 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3254 checkmem(yyval.a_value);
3255 yyval.a_value->type = ATV_UNPARSED;
Lev Walkin418298d2006-07-13 08:24:20 +00003256 }
3257 break;
3258
Lev Walkin4a4543f2006-10-13 12:37:39 +00003259 case 155:
Lev Walkin5c541f12006-10-18 18:40:14 +00003260#line 1491 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003261 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003262 yyval.a_value = asn1p_value_fromint(0);
3263 checkmem(yyval.a_value);
3264 yyval.a_value->type = ATV_NULL;
Lev Walkin418298d2006-07-13 08:24:20 +00003265 }
3266 break;
3267
Lev Walkin4a4543f2006-10-13 12:37:39 +00003268 case 156:
Lev Walkin5c541f12006-10-18 18:40:14 +00003269#line 1499 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003270 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003271 yyval.a_value = asn1p_value_fromint(0);
3272 checkmem(yyval.a_value);
3273 yyval.a_value->type = ATV_FALSE;
Lev Walkin418298d2006-07-13 08:24:20 +00003274 }
3275 break;
3276
Lev Walkin4a4543f2006-10-13 12:37:39 +00003277 case 157:
Lev Walkin5c541f12006-10-18 18:40:14 +00003278#line 1504 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003279 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003280 yyval.a_value = asn1p_value_fromint(0);
3281 checkmem(yyval.a_value);
3282 yyval.a_value->type = ATV_TRUE;
Lev Walkin418298d2006-07-13 08:24:20 +00003283 }
3284 break;
3285
Lev Walkin4a4543f2006-10-13 12:37:39 +00003286 case 158:
Lev Walkin5c541f12006-10-18 18:40:14 +00003287#line 1509 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003288 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003289 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
3290 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003291 }
3292 break;
3293
Lev Walkin4a4543f2006-10-13 12:37:39 +00003294 case 159:
Lev Walkin5c541f12006-10-18 18:40:14 +00003295#line 1513 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003296 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003297 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
3298 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003299 }
3300 break;
3301
Lev Walkin4a4543f2006-10-13 12:37:39 +00003302 case 160:
Lev Walkin5c541f12006-10-18 18:40:14 +00003303#line 1517 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003304 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003305 yyval.a_value = yyval.a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003306 }
3307 break;
3308
Lev Walkin4a4543f2006-10-13 12:37:39 +00003309 case 161:
Lev Walkin5c541f12006-10-18 18:40:14 +00003310#line 1520 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003311 {
Lev Walkin0c0bca62006-03-21 04:48:15 +00003312 yyval.a_value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003313 }
3314 break;
3315
Lev Walkin4a4543f2006-10-13 12:37:39 +00003316 case 162:
Lev Walkin5c541f12006-10-18 18:40:14 +00003317#line 1526 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003318 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003319 asn1p_ref_t *ref;
3320 int ret;
3321 ref = asn1p_ref_new(yylineno);
3322 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003323 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003324 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003325 yyval.a_value = asn1p_value_fromref(ref, 0);
3326 checkmem(yyval.a_value);
3327 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003328 }
3329 break;
3330
Lev Walkin4a4543f2006-10-13 12:37:39 +00003331 case 163:
Lev Walkin5c541f12006-10-18 18:40:14 +00003332#line 1537 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003333 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003334 asn1p_ref_t *ref;
3335 int ret;
3336 ref = asn1p_ref_new(yylineno);
3337 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003338 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
Lev Walkinf15320b2004-06-03 03:38:44 +00003339 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003340 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003341 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003342 yyval.a_value = asn1p_value_fromref(ref, 0);
3343 checkmem(yyval.a_value);
3344 free(yyvsp[-2].tv_str);
3345 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003346 }
3347 break;
3348
Lev Walkin4a4543f2006-10-13 12:37:39 +00003349 case 164:
Lev Walkin5c541f12006-10-18 18:40:14 +00003350#line 1555 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003351 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003352 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3353 checkmem(yyval.a_value);
Lev Walkin418298d2006-07-13 08:24:20 +00003354 }
3355 break;
3356
Lev Walkin4a4543f2006-10-13 12:37:39 +00003357 case 165:
Lev Walkin5c541f12006-10-18 18:40:14 +00003358#line 1559 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003359 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003360 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3361 checkmem(yyval.a_value);
3362 yyval.a_value->type = ATV_TUPLE;
Lev Walkin418298d2006-07-13 08:24:20 +00003363 }
3364 break;
3365
Lev Walkin4a4543f2006-10-13 12:37:39 +00003366 case 166:
Lev Walkin5c541f12006-10-18 18:40:14 +00003367#line 1564 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003368 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003369 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3370 checkmem(yyval.a_value);
3371 yyval.a_value->type = ATV_QUADRUPLE;
Lev Walkin418298d2006-07-13 08:24:20 +00003372 }
3373 break;
3374
Lev Walkin4a4543f2006-10-13 12:37:39 +00003375 case 167:
Lev Walkin5c541f12006-10-18 18:40:14 +00003376#line 1598 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003377 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003378 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
3379 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
3380 checkmem(yyval.tv_opaque.buf);
3381 yyval.tv_opaque.buf[0] = '{';
3382 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
3383 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
3384 free(yyvsp[0].tv_opaque.buf);
Lev Walkin418298d2006-07-13 08:24:20 +00003385 }
3386 break;
3387
Lev Walkin4a4543f2006-10-13 12:37:39 +00003388 case 168:
Lev Walkin5c541f12006-10-18 18:40:14 +00003389#line 1607 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003390 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003391 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
Lev Walkinf15320b2004-06-03 03:38:44 +00003392 char *p = malloc(newsize + 1);
3393 checkmem(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00003394 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
3395 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
Lev Walkinf15320b2004-06-03 03:38:44 +00003396 p[newsize] = '\0';
Lev Walkina00d6b32006-03-21 03:40:38 +00003397 free(yyvsp[-1].tv_opaque.buf);
3398 free(yyvsp[0].tv_opaque.buf);
3399 yyval.tv_opaque.buf = p;
3400 yyval.tv_opaque.len = newsize;
Lev Walkin418298d2006-07-13 08:24:20 +00003401 }
3402 break;
3403
Lev Walkin4a4543f2006-10-13 12:37:39 +00003404 case 169:
Lev Walkin5c541f12006-10-18 18:40:14 +00003405#line 1622 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003406 { yyval.a_type = ASN_BASIC_BOOLEAN; }
3407 break;
3408
Lev Walkin4a4543f2006-10-13 12:37:39 +00003409 case 170:
Lev Walkin5c541f12006-10-18 18:40:14 +00003410#line 1623 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003411 { yyval.a_type = ASN_BASIC_NULL; }
3412 break;
3413
Lev Walkin4a4543f2006-10-13 12:37:39 +00003414 case 171:
Lev Walkin5c541f12006-10-18 18:40:14 +00003415#line 1624 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003416 { yyval.a_type = ASN_BASIC_REAL; }
3417 break;
3418
Lev Walkin418298d2006-07-13 08:24:20 +00003419 case 172:
Lev Walkin5c541f12006-10-18 18:40:14 +00003420#line 1625 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003421 { yyval.a_type = yyvsp[0].a_type; }
Lev Walkin418298d2006-07-13 08:24:20 +00003422 break;
3423
3424 case 173:
Lev Walkin5c541f12006-10-18 18:40:14 +00003425#line 1626 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003426 { yyval.a_type = ASN_BASIC_OCTET_STRING; }
Lev Walkin418298d2006-07-13 08:24:20 +00003427 break;
3428
3429 case 174:
Lev Walkin5c541f12006-10-18 18:40:14 +00003430#line 1627 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003431 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
Lev Walkin418298d2006-07-13 08:24:20 +00003432 break;
3433
3434 case 175:
Lev Walkin5c541f12006-10-18 18:40:14 +00003435#line 1628 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003436 { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
Lev Walkin418298d2006-07-13 08:24:20 +00003437 break;
3438
3439 case 176:
Lev Walkin5c541f12006-10-18 18:40:14 +00003440#line 1629 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003441 { yyval.a_type = ASN_BASIC_EXTERNAL; }
Lev Walkin418298d2006-07-13 08:24:20 +00003442 break;
3443
3444 case 177:
Lev Walkin5c541f12006-10-18 18:40:14 +00003445#line 1630 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003446 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
Lev Walkin418298d2006-07-13 08:24:20 +00003447 break;
3448
3449 case 178:
Lev Walkin5c541f12006-10-18 18:40:14 +00003450#line 1631 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003451 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
Lev Walkin418298d2006-07-13 08:24:20 +00003452 break;
3453
3454 case 179:
Lev Walkin5c541f12006-10-18 18:40:14 +00003455#line 1632 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003456 { yyval.a_type = ASN_BASIC_UTCTime; }
Lev Walkin866bd7f2006-09-14 10:35:20 +00003457 break;
3458
3459 case 180:
Lev Walkin5c541f12006-10-18 18:40:14 +00003460#line 1633 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003461 { yyval.a_type = ASN_BASIC_GeneralizedTime; }
Lev Walkin866bd7f2006-09-14 10:35:20 +00003462 break;
3463
3464 case 181:
Lev Walkin5c541f12006-10-18 18:40:14 +00003465#line 1634 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003466 { yyval.a_type = yyvsp[0].a_type; }
Lev Walkin866bd7f2006-09-14 10:35:20 +00003467 break;
3468
3469 case 182:
Lev Walkin5c541f12006-10-18 18:40:14 +00003470#line 1641 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003471 { yyval.a_type = ASN_BASIC_INTEGER; }
Lev Walkina9532f42006-09-17 04:52:50 +00003472 break;
3473
3474 case 183:
Lev Walkin5c541f12006-10-18 18:40:14 +00003475#line 1642 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003476 { yyval.a_type = ASN_BASIC_ENUMERATED; }
3477 break;
3478
3479 case 184:
Lev Walkin5c541f12006-10-18 18:40:14 +00003480#line 1643 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003481 { yyval.a_type = ASN_BASIC_BIT_STRING; }
3482 break;
3483
3484 case 185:
Lev Walkin5c541f12006-10-18 18:40:14 +00003485#line 1647 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003486 {
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);
3489 yyval.a_expr->expr_type = yyvsp[0].a_type;
3490 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003491 }
3492 break;
3493
Lev Walkin4a4543f2006-10-13 12:37:39 +00003494 case 186:
Lev Walkin5c541f12006-10-18 18:40:14 +00003495#line 1653 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003496 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003497 if(yyvsp[0].a_expr) {
3498 yyval.a_expr = yyvsp[0].a_expr;
Lev Walkinf15320b2004-06-03 03:38:44 +00003499 } else {
Lev Walkina9532f42006-09-17 04:52:50 +00003500 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00003501 checkmem(yyval.a_expr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003502 }
Lev Walkina00d6b32006-03-21 03:40:38 +00003503 yyval.a_expr->expr_type = yyvsp[-1].a_type;
3504 yyval.a_expr->meta_type = AMT_TYPE;
Lev Walkin418298d2006-07-13 08:24:20 +00003505 }
3506 break;
3507
Lev Walkin4a4543f2006-10-13 12:37:39 +00003508 case 187:
Lev Walkin5c541f12006-10-18 18:40:14 +00003509#line 1666 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003510 { yyval.a_type = ASN_STRING_BMPString; }
3511 break;
3512
Lev Walkin4a4543f2006-10-13 12:37:39 +00003513 case 188:
Lev Walkin5c541f12006-10-18 18:40:14 +00003514#line 1667 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003515 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003516 yyval.a_type = ASN_STRING_GeneralString;
Lev Walkin9c974182004-09-15 11:59:51 +00003517 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003518 }
3519 break;
3520
Lev Walkin4a4543f2006-10-13 12:37:39 +00003521 case 189:
Lev Walkin5c541f12006-10-18 18:40:14 +00003522#line 1671 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003523 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003524 yyval.a_type = ASN_STRING_GraphicString;
Lev Walkin9c974182004-09-15 11:59:51 +00003525 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003526 }
3527 break;
3528
Lev Walkin4a4543f2006-10-13 12:37:39 +00003529 case 190:
Lev Walkin5c541f12006-10-18 18:40:14 +00003530#line 1675 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003531 { yyval.a_type = ASN_STRING_IA5String; }
3532 break;
3533
Lev Walkin4a4543f2006-10-13 12:37:39 +00003534 case 191:
Lev Walkin5c541f12006-10-18 18:40:14 +00003535#line 1676 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003536 { yyval.a_type = ASN_STRING_ISO646String; }
3537 break;
3538
Lev Walkin4a4543f2006-10-13 12:37:39 +00003539 case 192:
Lev Walkin5c541f12006-10-18 18:40:14 +00003540#line 1677 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003541 { yyval.a_type = ASN_STRING_NumericString; }
3542 break;
3543
Lev Walkin4a4543f2006-10-13 12:37:39 +00003544 case 193:
Lev Walkin5c541f12006-10-18 18:40:14 +00003545#line 1678 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003546 { yyval.a_type = ASN_STRING_PrintableString; }
3547 break;
3548
Lev Walkin4a4543f2006-10-13 12:37:39 +00003549 case 194:
Lev Walkin5c541f12006-10-18 18:40:14 +00003550#line 1679 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003551 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003552 yyval.a_type = ASN_STRING_T61String;
Lev Walkin9c974182004-09-15 11:59:51 +00003553 fprintf(stderr, "WARNING: T61String is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003554 }
3555 break;
3556
Lev Walkin4a4543f2006-10-13 12:37:39 +00003557 case 195:
Lev Walkin5c541f12006-10-18 18:40:14 +00003558#line 1683 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003559 { yyval.a_type = ASN_STRING_TeletexString; }
3560 break;
3561
Lev Walkin4a4543f2006-10-13 12:37:39 +00003562 case 196:
Lev Walkin5c541f12006-10-18 18:40:14 +00003563#line 1684 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003564 { yyval.a_type = ASN_STRING_UniversalString; }
3565 break;
3566
Lev Walkin4a4543f2006-10-13 12:37:39 +00003567 case 197:
Lev Walkin5c541f12006-10-18 18:40:14 +00003568#line 1685 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003569 { yyval.a_type = ASN_STRING_UTF8String; }
3570 break;
3571
Lev Walkin4a4543f2006-10-13 12:37:39 +00003572 case 198:
Lev Walkin5c541f12006-10-18 18:40:14 +00003573#line 1686 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003574 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003575 yyval.a_type = ASN_STRING_VideotexString;
Lev Walkin9c974182004-09-15 11:59:51 +00003576 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
Lev Walkin418298d2006-07-13 08:24:20 +00003577 }
3578 break;
3579
Lev Walkin4a4543f2006-10-13 12:37:39 +00003580 case 199:
Lev Walkin5c541f12006-10-18 18:40:14 +00003581#line 1690 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003582 { yyval.a_type = ASN_STRING_VisibleString; }
3583 break;
3584
Lev Walkin4a4543f2006-10-13 12:37:39 +00003585 case 200:
Lev Walkin5c541f12006-10-18 18:40:14 +00003586#line 1691 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003587 { yyval.a_type = ASN_STRING_ObjectDescriptor; }
3588 break;
3589
Lev Walkin4a4543f2006-10-13 12:37:39 +00003590 case 205:
Lev Walkin5c541f12006-10-18 18:40:14 +00003591#line 1702 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003592 { yyval.a_constr = 0; }
3593 break;
3594
Lev Walkin4a4543f2006-10-13 12:37:39 +00003595 case 206:
Lev Walkin5c541f12006-10-18 18:40:14 +00003596#line 1703 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003597 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003598 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003599 }
3600 break;
3601
Lev Walkin4a4543f2006-10-13 12:37:39 +00003602 case 208:
Lev Walkin5c541f12006-10-18 18:40:14 +00003603#line 1710 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00003604 {
3605 yyval.a_constr = yyvsp[-1].a_constr;
3606 }
3607 break;
3608
Lev Walkin4a4543f2006-10-13 12:37:39 +00003609 case 209:
Lev Walkin5c541f12006-10-18 18:40:14 +00003610#line 1716 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003611 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003612 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003613 }
3614 break;
3615
Lev Walkin4a4543f2006-10-13 12:37:39 +00003616 case 210:
Lev Walkin5c541f12006-10-18 18:40:14 +00003617#line 1719 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003618 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003619 /*
3620 * This is a special case, for compatibility purposes.
Lev Walkinf59d0752004-08-18 04:59:12 +00003621 * It goes without parentheses.
Lev Walkinf15320b2004-06-03 03:38:44 +00003622 */
Lev Walkina00d6b32006-03-21 03:40:38 +00003623 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003624 }
3625 break;
3626
Lev Walkin4a4543f2006-10-13 12:37:39 +00003627 case 211:
Lev Walkin5c541f12006-10-18 18:40:14 +00003628#line 1729 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003629 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003630 yyval.a_constr = yyvsp[-1].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003631 }
3632 break;
3633
Lev Walkin4a4543f2006-10-13 12:37:39 +00003634 case 212:
Lev Walkin5c541f12006-10-18 18:40:14 +00003635#line 1732 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003636 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003637 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003638 }
3639 break;
3640
Lev Walkin4a4543f2006-10-13 12:37:39 +00003641 case 213:
Lev Walkin5c541f12006-10-18 18:40:14 +00003642#line 1738 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003643 {
Lev Walkin5045dfa2006-03-21 09:41:28 +00003644 yyval.a_constr = asn1p_constraint_new(yylineno);
3645 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin418298d2006-07-13 08:24:20 +00003646 }
3647 break;
3648
Lev Walkin4a4543f2006-10-13 12:37:39 +00003649 case 214:
Lev Walkin5c541f12006-10-18 18:40:14 +00003650#line 1742 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003651 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003652 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003653 }
3654 break;
3655
Lev Walkin4a4543f2006-10-13 12:37:39 +00003656 case 215:
Lev Walkin5c541f12006-10-18 18:40:14 +00003657#line 1745 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003658 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003659 asn1p_constraint_t *ct;
3660 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003661 ct->type = ACT_EL_EXT;
Lev Walkina00d6b32006-03-21 03:40:38 +00003662 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin418298d2006-07-13 08:24:20 +00003663 }
3664 break;
3665
Lev Walkin4a4543f2006-10-13 12:37:39 +00003666 case 216:
Lev Walkin5c541f12006-10-18 18:40:14 +00003667#line 1751 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003668 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003669 asn1p_constraint_t *ct;
3670 ct = asn1p_constraint_new(yylineno);
Lev Walkinf15320b2004-06-03 03:38:44 +00003671 ct->type = ACT_EL_EXT;
Lev Walkina00d6b32006-03-21 03:40:38 +00003672 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
3673 ct = yyval.a_constr;
3674 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003675 }
3676 break;
3677
Lev Walkin4a4543f2006-10-13 12:37:39 +00003678 case 218:
Lev Walkin5c541f12006-10-18 18:40:14 +00003679#line 1763 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003680 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003681 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003682 }
3683 break;
3684
Lev Walkin4a4543f2006-10-13 12:37:39 +00003685 case 220:
Lev Walkin5c541f12006-10-18 18:40:14 +00003686#line 1770 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003687 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003688 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003689 }
3690 break;
3691
Lev Walkin4a4543f2006-10-13 12:37:39 +00003692 case 222:
Lev Walkin5c541f12006-10-18 18:40:14 +00003693#line 1777 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003694 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003695 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003696 }
3697 break;
3698
Lev Walkin4a4543f2006-10-13 12:37:39 +00003699 case 224:
Lev Walkin5c541f12006-10-18 18:40:14 +00003700#line 1785 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003701 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003702 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003703 }
3704 break;
3705
Lev Walkin4a4543f2006-10-13 12:37:39 +00003706 case 225:
Lev Walkin5c541f12006-10-18 18:40:14 +00003707#line 1791 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003708 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003709 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003710 yyval.a_constr = asn1p_constraint_new(yylineno);
3711 checkmem(yyval.a_constr);
3712 yyval.a_constr->type = yyvsp[-3].a_ctype;
3713 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkinf15320b2004-06-03 03:38:44 +00003714 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003715 }
3716 break;
3717
Lev Walkin4a4543f2006-10-13 12:37:39 +00003718 case 226:
Lev Walkin5c541f12006-10-18 18:40:14 +00003719#line 1799 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003720 {
Lev Walkinf59d0752004-08-18 04:59:12 +00003721 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00003722 yyval.a_constr = asn1p_constraint_new(yylineno);
3723 checkmem(yyval.a_constr);
3724 yyval.a_constr->type = ACT_CA_SET;
3725 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkinf59d0752004-08-18 04:59:12 +00003726 checkmem(ret == 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003727 }
3728 break;
3729
Lev Walkin4a4543f2006-10-13 12:37:39 +00003730 case 227:
Lev Walkin5c541f12006-10-18 18:40:14 +00003731#line 1807 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003732 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003733 yyval.a_constr = asn1p_constraint_new(yylineno);
3734 checkmem(yyval.a_constr);
3735 yyval.a_constr->type = ACT_EL_VALUE;
3736 yyval.a_constr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003737 }
3738 break;
3739
Lev Walkin4a4543f2006-10-13 12:37:39 +00003740 case 228:
Lev Walkin5c541f12006-10-18 18:40:14 +00003741#line 1813 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003742 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003743 yyval.a_constr = asn1p_constraint_new(yylineno);
3744 checkmem(yyval.a_constr);
3745 yyval.a_constr->type = ACT_EL_TYPE;
3746 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00003747 }
3748 break;
3749
Lev Walkinf1727152006-09-21 01:50:37 +00003750 case 229:
Lev Walkin5c541f12006-10-18 18:40:14 +00003751#line 1819 "asn1p_y.y"
Lev Walkinf1727152006-09-21 01:50:37 +00003752 {
3753 yyval.a_constr = asn1p_constraint_new(yylineno);
3754 checkmem(yyval.a_constr);
3755 yyval.a_constr->type = yyvsp[-1].a_ctype;
3756 yyval.a_constr->range_start = yyvsp[-2].a_value;
Lev Walkin4a4543f2006-10-13 12:37:39 +00003757 yyval.a_constr->range_stop = yyvsp[0].a_value;
Lev Walkinf1727152006-09-21 01:50:37 +00003758 }
3759 break;
3760
3761 case 230:
Lev Walkin5c541f12006-10-18 18:40:14 +00003762#line 1826 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003763 {
3764 yyval.a_constr = asn1p_constraint_new(yylineno);
3765 checkmem(yyval.a_constr);
3766 yyval.a_constr->type = yyvsp[-1].a_ctype;
3767 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3768 yyval.a_constr->range_stop = yyvsp[0].a_value;
3769 yyval.a_constr->range_start->type = ATV_MIN;
3770 }
3771 break;
3772
3773 case 231:
Lev Walkin5c541f12006-10-18 18:40:14 +00003774#line 1834 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00003775 {
3776 yyval.a_constr = asn1p_constraint_new(yylineno);
3777 checkmem(yyval.a_constr);
3778 yyval.a_constr->type = yyvsp[-1].a_ctype;
3779 yyval.a_constr->range_start = yyvsp[-2].a_value;
3780 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3781 yyval.a_constr->range_stop->type = ATV_MAX;
3782 }
3783 break;
3784
3785 case 232:
Lev Walkin5c541f12006-10-18 18:40:14 +00003786#line 1842 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00003787 {
3788 yyval.a_constr = asn1p_constraint_new(yylineno);
3789 checkmem(yyval.a_constr);
3790 yyval.a_constr->type = yyvsp[-1].a_ctype;
3791 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3792 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3793 yyval.a_constr->range_start->type = ATV_MIN;
3794 yyval.a_constr->range_stop->type = ATV_MAX;
3795 }
3796 break;
3797
Lev Walkin4a4543f2006-10-13 12:37:39 +00003798 case 233:
Lev Walkin5c541f12006-10-18 18:40:14 +00003799#line 1851 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00003800 {
3801 yyval.a_constr = yyvsp[0].a_constr;
3802 }
3803 break;
3804
Lev Walkin4a4543f2006-10-13 12:37:39 +00003805 case 234:
Lev Walkin5c541f12006-10-18 18:40:14 +00003806#line 1854 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003807 {
Lev Walkin5c541f12006-10-18 18:40:14 +00003808 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003809 }
3810 break;
3811
Lev Walkin4a4543f2006-10-13 12:37:39 +00003812 case 235:
Lev Walkin5c541f12006-10-18 18:40:14 +00003813#line 1860 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003814 {
Lev Walkin5c541f12006-10-18 18:40:14 +00003815 yyval.a_constr = asn1p_constraint_new(yylineno);
3816 yyval.a_constr->type = ACT_CT_PATTERN;
3817 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003818 }
3819 break;
3820
Lev Walkin4a4543f2006-10-13 12:37:39 +00003821 case 236:
3822#line 1865 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003823 {
Lev Walkin5c541f12006-10-18 18:40:14 +00003824 asn1p_ref_t *ref;
3825 yyval.a_constr = asn1p_constraint_new(yylineno);
3826 yyval.a_constr->type = ACT_CT_PATTERN;
3827 ref = asn1p_ref_new(yylineno);
3828 asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
3829 yyval.a_constr->value = asn1p_value_fromref(ref, 0);
3830 }
3831 break;
3832
3833 case 237:
3834#line 1876 "asn1p_y.y"
3835 {
3836 yyval.a_ctype = ACT_CT_SIZE;
3837 }
3838 break;
3839
3840 case 238:
3841#line 1879 "asn1p_y.y"
3842 {
3843 yyval.a_ctype = ACT_CT_FROM;
3844 }
3845 break;
3846
3847 case 239:
3848#line 1885 "asn1p_y.y"
3849 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003850 yyval.a_value = asn1p_value_fromint(0);
3851 checkmem(yyval.a_value);
3852 yyval.a_value->type = ATV_FALSE;
Lev Walkin418298d2006-07-13 08:24:20 +00003853 }
3854 break;
3855
Lev Walkin5c541f12006-10-18 18:40:14 +00003856 case 240:
3857#line 1890 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003858 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003859 yyval.a_value = asn1p_value_fromint(1);
3860 checkmem(yyval.a_value);
3861 yyval.a_value->type = ATV_TRUE;
Lev Walkin418298d2006-07-13 08:24:20 +00003862 }
3863 break;
3864
Lev Walkin5c541f12006-10-18 18:40:14 +00003865 case 243:
3866#line 1897 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003867 {
Lev Walkinf15320b2004-06-03 03:38:44 +00003868 asn1p_ref_t *ref;
3869 int ret;
3870 ref = asn1p_ref_new(yylineno);
3871 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003872 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
Lev Walkinf15320b2004-06-03 03:38:44 +00003873 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003874 yyval.a_value = asn1p_value_fromref(ref, 0);
3875 checkmem(yyval.a_value);
3876 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003877 }
3878 break;
3879
Lev Walkin5c541f12006-10-18 18:40:14 +00003880 case 244:
3881#line 1911 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003882 {
Lev Walkinc8092cb2005-02-18 16:34:21 +00003883 asn1p_ref_t *ref;
3884 int ret;
3885 ref = asn1p_ref_new(yylineno);
3886 checkmem(ref);
Lev Walkina00d6b32006-03-21 03:40:38 +00003887 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
Lev Walkinc8092cb2005-02-18 16:34:21 +00003888 checkmem(ret == 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00003889 yyval.a_value = asn1p_value_fromref(ref, 0);
3890 checkmem(yyval.a_value);
3891 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00003892 }
3893 break;
3894
Lev Walkin5c541f12006-10-18 18:40:14 +00003895 case 245:
3896#line 1925 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003897 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003898 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003899 }
3900 break;
3901
Lev Walkin5c541f12006-10-18 18:40:14 +00003902 case 246:
3903#line 1928 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003904 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003905 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00003906 }
3907 break;
3908
Lev Walkin5c541f12006-10-18 18:40:14 +00003909 case 247:
3910#line 1934 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003911 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003912 yyval.a_constr = yyvsp[0].a_constr;
Lev Walkin418298d2006-07-13 08:24:20 +00003913 }
3914 break;
3915
Lev Walkin5c541f12006-10-18 18:40:14 +00003916 case 248:
3917#line 1937 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003918 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003919 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003920 }
3921 break;
3922
Lev Walkin5c541f12006-10-18 18:40:14 +00003923 case 249:
3924#line 1943 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003925 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003926 yyval.a_constr = asn1p_constraint_new(yylineno);
3927 checkmem(yyval.a_constr);
3928 yyval.a_constr->type = ACT_EL_EXT;
Lev Walkin418298d2006-07-13 08:24:20 +00003929 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 1);
3930 }
3931 break;
3932
Lev Walkin5c541f12006-10-18 18:40:14 +00003933 case 250:
3934#line 1949 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003935 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003936 yyval.a_constr = asn1p_constraint_new(yylineno);
3937 checkmem(yyval.a_constr);
3938 yyval.a_constr->type = ACT_EL_VALUE;
3939 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3940 yyval.a_constr->presence = yyvsp[0].a_pres;
3941 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00003942 }
3943 break;
3944
Lev Walkin5c541f12006-10-18 18:40:14 +00003945 case 251:
3946#line 1963 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003947 { yyval.a_pres = ACPRES_DEFAULT; }
3948 break;
3949
Lev Walkin5c541f12006-10-18 18:40:14 +00003950 case 252:
3951#line 1964 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003952 { yyval.a_pres = yyvsp[0].a_pres; }
3953 break;
3954
Lev Walkin5c541f12006-10-18 18:40:14 +00003955 case 253:
3956#line 1968 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003957 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003958 yyval.a_pres = ACPRES_PRESENT;
Lev Walkin418298d2006-07-13 08:24:20 +00003959 }
3960 break;
3961
Lev Walkin5c541f12006-10-18 18:40:14 +00003962 case 254:
3963#line 1971 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003964 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003965 yyval.a_pres = ACPRES_ABSENT;
Lev Walkin418298d2006-07-13 08:24:20 +00003966 }
3967 break;
3968
Lev Walkin5c541f12006-10-18 18:40:14 +00003969 case 255:
3970#line 1974 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003971 {
Lev Walkina00d6b32006-03-21 03:40:38 +00003972 yyval.a_pres = ACPRES_OPTIONAL;
Lev Walkin418298d2006-07-13 08:24:20 +00003973 }
3974 break;
3975
Lev Walkin5c541f12006-10-18 18:40:14 +00003976 case 259:
3977#line 1989 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00003978 { asn1p_lexer_hack_push_opaque_state(); }
3979 break;
3980
Lev Walkin5c541f12006-10-18 18:40:14 +00003981 case 260:
3982#line 1989 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00003983 {
Lev Walkina9532f42006-09-17 04:52:50 +00003984 yyval.a_constr = asn1p_constraint_new(yylineno);
3985 checkmem(yyval.a_constr);
3986 yyval.a_constr->type = ACT_CT_CTDBY;
3987 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3988 checkmem(yyval.a_constr->value);
3989 yyval.a_constr->value->type = ATV_UNPARSED;
Lev Walkin418298d2006-07-13 08:24:20 +00003990 }
3991 break;
3992
Lev Walkin5c541f12006-10-18 18:40:14 +00003993 case 261:
3994#line 2000 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00003995 {
3996 yyval.a_constr = asn1p_constraint_new(yylineno);
3997 yyval.a_constr->type = ACT_CT_CTNG;
3998 yyval.a_constr->value = asn1p_value_fromtype(yyvsp[0].a_expr);
3999 }
4000 break;
4001
Lev Walkin5c541f12006-10-18 18:40:14 +00004002 case 262:
4003#line 2008 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00004004 { yyval.a_ctype = ACT_EL_RANGE; }
4005 break;
4006
Lev Walkin5c541f12006-10-18 18:40:14 +00004007 case 263:
4008#line 2009 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00004009 { yyval.a_ctype = ACT_EL_RLRANGE; }
4010 break;
4011
Lev Walkin5c541f12006-10-18 18:40:14 +00004012 case 264:
4013#line 2010 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00004014 { yyval.a_ctype = ACT_EL_LLRANGE; }
4015 break;
4016
Lev Walkin5c541f12006-10-18 18:40:14 +00004017 case 265:
4018#line 2011 "asn1p_y.y"
Lev Walkina9532f42006-09-17 04:52:50 +00004019 { yyval.a_ctype = ACT_EL_ULRANGE; }
4020 break;
4021
Lev Walkin5c541f12006-10-18 18:40:14 +00004022 case 266:
4023#line 2014 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004024 {
4025 yyval.a_constr = yyvsp[0].a_constr;
4026 }
4027 break;
4028
Lev Walkin5c541f12006-10-18 18:40:14 +00004029 case 267:
4030#line 2017 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004031 {
4032 yyval.a_constr = yyvsp[0].a_constr;
4033 }
4034 break;
4035
Lev Walkin5c541f12006-10-18 18:40:14 +00004036 case 268:
4037#line 2026 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004038 {
Lev Walkinf15320b2004-06-03 03:38:44 +00004039 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
4040 asn1p_constraint_t *ct;
4041 int ret;
Lev Walkina00d6b32006-03-21 03:40:38 +00004042 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00004043 checkmem(ret == 0);
4044 ct = asn1p_constraint_new(yylineno);
Lev Walkina00d6b32006-03-21 03:40:38 +00004045 checkmem(yyval.a_constr);
Lev Walkinf15320b2004-06-03 03:38:44 +00004046 ct->type = ACT_EL_VALUE;
4047 ct->value = asn1p_value_fromref(ref, 0);
Lev Walkina00d6b32006-03-21 03:40:38 +00004048 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00004049 }
4050 break;
4051
Lev Walkin5c541f12006-10-18 18:40:14 +00004052 case 269:
4053#line 2041 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004054 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004055 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
Lev Walkin418298d2006-07-13 08:24:20 +00004056 }
4057 break;
4058
Lev Walkin5c541f12006-10-18 18:40:14 +00004059 case 270:
4060#line 2047 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004061 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004062 yyval.a_constr = asn1p_constraint_new(yylineno);
4063 checkmem(yyval.a_constr);
4064 yyval.a_constr->type = ACT_EL_VALUE;
4065 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
Lev Walkin418298d2006-07-13 08:24:20 +00004066 }
4067 break;
4068
Lev Walkin5c541f12006-10-18 18:40:14 +00004069 case 271:
4070#line 2053 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004071 {
Lev Walkinf15320b2004-06-03 03:38:44 +00004072 asn1p_constraint_t *ct;
4073 ct = asn1p_constraint_new(yylineno);
4074 checkmem(ct);
4075 ct->type = ACT_EL_VALUE;
Lev Walkina00d6b32006-03-21 03:40:38 +00004076 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
4077 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
Lev Walkin418298d2006-07-13 08:24:20 +00004078 }
4079 break;
4080
Lev Walkin5c541f12006-10-18 18:40:14 +00004081 case 272:
4082#line 2067 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004083 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004084 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
Lev Walkinf15320b2004-06-03 03:38:44 +00004085 int ret;
4086 *p = '@';
Lev Walkina00d6b32006-03-21 03:40:38 +00004087 strcpy(p + 1, yyvsp[0].tv_str);
4088 yyval.a_ref = asn1p_ref_new(yylineno);
4089 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00004090 checkmem(ret == 0);
4091 free(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00004092 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00004093 }
4094 break;
4095
Lev Walkin5c541f12006-10-18 18:40:14 +00004096 case 273:
4097#line 2078 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004098 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004099 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
Lev Walkinf15320b2004-06-03 03:38:44 +00004100 int ret;
4101 p[0] = '@';
4102 p[1] = '.';
Lev Walkina00d6b32006-03-21 03:40:38 +00004103 strcpy(p + 2, yyvsp[0].tv_str);
4104 yyval.a_ref = asn1p_ref_new(yylineno);
4105 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +00004106 checkmem(ret == 0);
4107 free(p);
Lev Walkina00d6b32006-03-21 03:40:38 +00004108 free(yyvsp[0].tv_str);
Lev Walkin418298d2006-07-13 08:24:20 +00004109 }
4110 break;
4111
Lev Walkin5c541f12006-10-18 18:40:14 +00004112 case 274:
4113#line 2094 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004114 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004115 yyval.tv_str = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004116 }
4117 break;
4118
Lev Walkin5c541f12006-10-18 18:40:14 +00004119 case 275:
4120#line 2097 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004121 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004122 int l1 = strlen(yyvsp[-2].tv_str);
4123 int l3 = strlen(yyvsp[0].tv_str);
4124 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
4125 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
4126 yyval.tv_str[l1] = '.';
4127 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
4128 yyval.tv_str[l1 + 1 + l3] = '\0';
Lev Walkin418298d2006-07-13 08:24:20 +00004129 }
4130 break;
4131
Lev Walkin5c541f12006-10-18 18:40:14 +00004132 case 276:
4133#line 2115 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004134 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004135 yyval.a_marker.flags = EM_NOMARK;
4136 yyval.a_marker.default_value = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00004137 }
4138 break;
4139
Lev Walkin5c541f12006-10-18 18:40:14 +00004140 case 277:
4141#line 2119 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004142 { yyval.a_marker = yyvsp[0].a_marker; }
4143 break;
4144
Lev Walkin5c541f12006-10-18 18:40:14 +00004145 case 278:
4146#line 2123 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004147 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004148 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
4149 yyval.a_marker.default_value = 0;
Lev Walkin418298d2006-07-13 08:24:20 +00004150 }
4151 break;
4152
Lev Walkin5c541f12006-10-18 18:40:14 +00004153 case 279:
4154#line 2127 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004155 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004156 yyval.a_marker.flags = EM_DEFAULT;
4157 yyval.a_marker.default_value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004158 }
4159 break;
4160
Lev Walkin5c541f12006-10-18 18:40:14 +00004161 case 280:
4162#line 2150 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004163 {
Lev Walkina9532f42006-09-17 04:52:50 +00004164 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004165 checkmem(yyval.a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004166 }
4167 break;
4168
Lev Walkin5c541f12006-10-18 18:40:14 +00004169 case 281:
4170#line 2154 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004171 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004172 yyval.a_expr = yyvsp[-1].a_expr;
Lev Walkin418298d2006-07-13 08:24:20 +00004173 }
4174 break;
4175
Lev Walkin5c541f12006-10-18 18:40:14 +00004176 case 282:
4177#line 2160 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004178 {
Lev Walkina9532f42006-09-17 04:52:50 +00004179 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004180 checkmem(yyval.a_expr);
4181 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004182 }
4183 break;
4184
Lev Walkin5c541f12006-10-18 18:40:14 +00004185 case 283:
4186#line 2165 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004187 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004188 yyval.a_expr = yyvsp[-2].a_expr;
4189 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
Lev Walkin418298d2006-07-13 08:24:20 +00004190 }
4191 break;
4192
Lev Walkin5c541f12006-10-18 18:40:14 +00004193 case 284:
4194#line 2172 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004195 {
Lev Walkina9532f42006-09-17 04:52:50 +00004196 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004197 checkmem(yyval.a_expr);
4198 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4199 yyval.a_expr->meta_type = AMT_VALUE;
4200 yyval.a_expr->Identifier = yyvsp[0].tv_str;
Lev Walkin418298d2006-07-13 08:24:20 +00004201 }
4202 break;
4203
Lev Walkin5c541f12006-10-18 18:40:14 +00004204 case 285:
4205#line 2179 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004206 {
4207 yyval.a_expr = NEW_EXPR();
4208 checkmem(yyval.a_expr);
4209 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4210 yyval.a_expr->meta_type = AMT_VALUE;
4211 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4212 yyval.a_expr->value = yyvsp[-1].a_value;
4213 }
4214 break;
4215
Lev Walkin5c541f12006-10-18 18:40:14 +00004216 case 286:
4217#line 2187 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004218 {
4219 yyval.a_expr = NEW_EXPR();
4220 checkmem(yyval.a_expr);
4221 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4222 yyval.a_expr->meta_type = AMT_VALUE;
4223 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4224 yyval.a_expr->value = yyvsp[-1].a_value;
4225 }
4226 break;
4227
Lev Walkin5c541f12006-10-18 18:40:14 +00004228 case 287:
4229#line 2195 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004230 {
Lev Walkina9532f42006-09-17 04:52:50 +00004231 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004232 checkmem(yyval.a_expr);
4233 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4234 yyval.a_expr->meta_type = AMT_VALUE;
4235 yyval.a_expr->value = yyvsp[0].a_value;
Lev Walkin418298d2006-07-13 08:24:20 +00004236 }
4237 break;
4238
Lev Walkin5c541f12006-10-18 18:40:14 +00004239 case 288:
4240#line 2202 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004241 {
Lev Walkina9532f42006-09-17 04:52:50 +00004242 yyval.a_expr = NEW_EXPR();
Lev Walkina00d6b32006-03-21 03:40:38 +00004243 checkmem(yyval.a_expr);
4244 yyval.a_expr->Identifier = strdup("...");
4245 checkmem(yyval.a_expr->Identifier);
4246 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
4247 yyval.a_expr->meta_type = AMT_VALUE;
Lev Walkin418298d2006-07-13 08:24:20 +00004248 }
4249 break;
4250
Lev Walkin4a4543f2006-10-13 12:37:39 +00004251 case 289:
Lev Walkin5c541f12006-10-18 18:40:14 +00004252#line 2213 "asn1p_y.y"
4253 {
4254 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4255 checkmem(yyval.a_value);
4256 }
4257 break;
4258
4259 case 290:
4260#line 2217 "asn1p_y.y"
4261 {
4262 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4263 checkmem(yyval.a_value);
4264 }
4265 break;
4266
4267 case 292:
4268#line 2225 "asn1p_y.y"
Lev Walkinadf863f2006-09-05 16:18:34 +00004269 {
4270 yyval.a_value = asn1p_value_fromdouble(yyvsp[0].a_dbl);
4271 checkmem(yyval.a_value);
4272 }
Lev Walkin418298d2006-07-13 08:24:20 +00004273 break;
4274
Lev Walkin5c541f12006-10-18 18:40:14 +00004275 case 293:
4276#line 2256 "asn1p_y.y"
Lev Walkinadf863f2006-09-05 16:18:34 +00004277 { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); }
4278 break;
4279
Lev Walkin5c541f12006-10-18 18:40:14 +00004280 case 294:
4281#line 2257 "asn1p_y.y"
Lev Walkinadf863f2006-09-05 16:18:34 +00004282 { yyval.a_tag = yyvsp[0].a_tag; }
4283 break;
4284
Lev Walkin5c541f12006-10-18 18:40:14 +00004285 case 295:
4286#line 2261 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004287 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004288 yyval.a_tag = yyvsp[-1].a_tag;
4289 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
Lev Walkin418298d2006-07-13 08:24:20 +00004290 }
4291 break;
4292
Lev Walkin5c541f12006-10-18 18:40:14 +00004293 case 296:
4294#line 2268 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004295 {
Lev Walkina00d6b32006-03-21 03:40:38 +00004296 yyval.a_tag = yyvsp[-2].a_tag;
4297 yyval.a_tag.tag_value = yyvsp[-1].a_int;
Lev Walkin418298d2006-07-13 08:24:20 +00004298 }
4299 break;
4300
Lev Walkin5c541f12006-10-18 18:40:14 +00004301 case 297:
4302#line 2274 "asn1p_y.y"
Lev Walkin418298d2006-07-13 08:24:20 +00004303 { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; }
4304 break;
4305
Lev Walkin5c541f12006-10-18 18:40:14 +00004306 case 298:
4307#line 2275 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004308 { yyval.a_tag.tag_class = TC_UNIVERSAL; }
Lev Walkin418298d2006-07-13 08:24:20 +00004309 break;
4310
Lev Walkin5c541f12006-10-18 18:40:14 +00004311 case 299:
4312#line 2276 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004313 { yyval.a_tag.tag_class = TC_APPLICATION; }
Lev Walkin418298d2006-07-13 08:24:20 +00004314 break;
4315
Lev Walkin5c541f12006-10-18 18:40:14 +00004316 case 300:
4317#line 2277 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004318 { yyval.a_tag.tag_class = TC_PRIVATE; }
Lev Walkin418298d2006-07-13 08:24:20 +00004319 break;
4320
Lev Walkin5c541f12006-10-18 18:40:14 +00004321 case 301:
4322#line 2281 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004323 { yyval.a_tag.tag_mode = TM_DEFAULT; }
Lev Walkin418298d2006-07-13 08:24:20 +00004324 break;
4325
Lev Walkin5c541f12006-10-18 18:40:14 +00004326 case 302:
4327#line 2282 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004328 { yyval.a_tag.tag_mode = TM_IMPLICIT; }
Lev Walkin418298d2006-07-13 08:24:20 +00004329 break;
4330
Lev Walkin5c541f12006-10-18 18:40:14 +00004331 case 303:
4332#line 2283 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004333 { yyval.a_tag.tag_mode = TM_EXPLICIT; }
Lev Walkin866bd7f2006-09-14 10:35:20 +00004334 break;
4335
Lev Walkinf1727152006-09-21 01:50:37 +00004336 case 304:
Lev Walkin5c541f12006-10-18 18:40:14 +00004337#line 2287 "asn1p_y.y"
4338 {
4339 checkmem(yyvsp[0].tv_str);
4340 yyval.tv_str = yyvsp[0].tv_str;
4341 }
Lev Walkin4a4543f2006-10-13 12:37:39 +00004342 break;
4343
4344 case 305:
Lev Walkin5c541f12006-10-18 18:40:14 +00004345#line 2291 "asn1p_y.y"
Lev Walkin4a4543f2006-10-13 12:37:39 +00004346 {
Lev Walkin5c541f12006-10-18 18:40:14 +00004347 checkmem(yyvsp[0].tv_str);
Lev Walkin4a4543f2006-10-13 12:37:39 +00004348 yyval.tv_str = yyvsp[0].tv_str;
4349 }
4350 break;
4351
4352 case 306:
Lev Walkin5c541f12006-10-18 18:40:14 +00004353#line 2299 "asn1p_y.y"
4354 {
4355 checkmem(yyvsp[0].tv_str);
4356 yyval.tv_str = yyvsp[0].tv_str;
4357 }
4358 break;
4359
4360 case 307:
4361#line 2306 "asn1p_y.y"
4362 { yyval.tv_str = 0; }
4363 break;
4364
4365 case 308:
4366#line 2307 "asn1p_y.y"
4367 {
4368 yyval.tv_str = yyvsp[0].tv_str;
4369 }
4370 break;
4371
4372 case 309:
4373#line 2313 "asn1p_y.y"
Lev Walkin866bd7f2006-09-14 10:35:20 +00004374 {
4375 checkmem(yyvsp[0].tv_str);
4376 yyval.tv_str = yyvsp[0].tv_str;
4377 }
4378 break;
4379
Lev Walkin418298d2006-07-13 08:24:20 +00004380
4381 }
4382
4383/* Line 1016 of /usr/local/share/bison/yacc.c. */
Lev Walkin5c541f12006-10-18 18:40:14 +00004384#line 4385 "asn1p_y.c"
Lev Walkinf15320b2004-06-03 03:38:44 +00004385
4386 yyvsp -= yylen;
4387 yyssp -= yylen;
Lev Walkinf15320b2004-06-03 03:38:44 +00004388
Lev Walkin418298d2006-07-13 08:24:20 +00004389
4390#if YYDEBUG
Lev Walkina00d6b32006-03-21 03:40:38 +00004391 if (yydebug)
4392 {
Lev Walkin418298d2006-07-13 08:24:20 +00004393 short *yyssp1 = yyss - 1;
4394 YYFPRINTF (stderr, "state stack now");
4395 while (yyssp1 != yyssp)
4396 YYFPRINTF (stderr, " %d", *++yyssp1);
4397 YYFPRINTF (stderr, "\n");
Lev Walkina00d6b32006-03-21 03:40:38 +00004398 }
4399#endif
Lev Walkinf15320b2004-06-03 03:38:44 +00004400
4401 *++yyvsp = yyval;
4402
Lev Walkinf15320b2004-06-03 03:38:44 +00004403
Lev Walkin418298d2006-07-13 08:24:20 +00004404 /* Now `shift' the result of the reduction. Determine what state
4405 that goes to, based on the state we popped back to and the rule
4406 number reduced by. */
Lev Walkinf15320b2004-06-03 03:38:44 +00004407
4408 yyn = yyr1[yyn];
4409
Lev Walkin418298d2006-07-13 08:24:20 +00004410 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
4411 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Lev Walkinf15320b2004-06-03 03:38:44 +00004412 yystate = yytable[yystate];
4413 else
Lev Walkin418298d2006-07-13 08:24:20 +00004414 yystate = yydefgoto[yyn - YYNTOKENS];
Lev Walkinf15320b2004-06-03 03:38:44 +00004415
4416 goto yynewstate;
4417
Lev Walkinf15320b2004-06-03 03:38:44 +00004418
Lev Walkin418298d2006-07-13 08:24:20 +00004419/*------------------------------------.
4420| yyerrlab -- here on detecting error |
4421`------------------------------------*/
4422yyerrlab:
4423 /* If not already recovering from an error, report this error. */
4424 if (!yyerrstatus)
Lev Walkinf15320b2004-06-03 03:38:44 +00004425 {
4426 ++yynerrs;
Lev Walkin418298d2006-07-13 08:24:20 +00004427#if YYERROR_VERBOSE
Lev Walkinf15320b2004-06-03 03:38:44 +00004428 yyn = yypact[yystate];
4429
Lev Walkin418298d2006-07-13 08:24:20 +00004430 if (YYPACT_NINF < yyn && yyn < YYLAST)
Lev Walkinf15320b2004-06-03 03:38:44 +00004431 {
Lev Walkin418298d2006-07-13 08:24:20 +00004432 YYSIZE_T yysize = 0;
4433 int yytype = YYTRANSLATE (yychar);
4434 char *yymsg;
4435 int yyx, yycount;
Lev Walkinf15320b2004-06-03 03:38:44 +00004436
Lev Walkin418298d2006-07-13 08:24:20 +00004437 yycount = 0;
4438 /* Start YYX at -YYN if negative to avoid negative indexes in
4439 YYCHECK. */
4440 for (yyx = yyn < 0 ? -yyn : 0;
4441 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
4442 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
4443 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
4444 yysize += yystrlen ("parse error, unexpected ") + 1;
4445 yysize += yystrlen (yytname[yytype]);
4446 yymsg = (char *) YYSTACK_ALLOC (yysize);
4447 if (yymsg != 0)
Lev Walkinf15320b2004-06-03 03:38:44 +00004448 {
Lev Walkin418298d2006-07-13 08:24:20 +00004449 char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
4450 yyp = yystpcpy (yyp, yytname[yytype]);
Lev Walkina00d6b32006-03-21 03:40:38 +00004451
Lev Walkin418298d2006-07-13 08:24:20 +00004452 if (yycount < 5)
Lev Walkinf15320b2004-06-03 03:38:44 +00004453 {
Lev Walkin418298d2006-07-13 08:24:20 +00004454 yycount = 0;
4455 for (yyx = yyn < 0 ? -yyn : 0;
4456 yyx < (int) (sizeof (yytname) / sizeof (char *));
4457 yyx++)
4458 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
Lev Walkina00d6b32006-03-21 03:40:38 +00004459 {
Lev Walkin418298d2006-07-13 08:24:20 +00004460 const char *yyq = ! yycount ? ", expecting " : " or ";
4461 yyp = yystpcpy (yyp, yyq);
4462 yyp = yystpcpy (yyp, yytname[yyx]);
4463 yycount++;
Lev Walkina00d6b32006-03-21 03:40:38 +00004464 }
Lev Walkinf15320b2004-06-03 03:38:44 +00004465 }
Lev Walkin418298d2006-07-13 08:24:20 +00004466 yyerror (yymsg);
4467 YYSTACK_FREE (yymsg);
Lev Walkinf15320b2004-06-03 03:38:44 +00004468 }
4469 else
Lev Walkin418298d2006-07-13 08:24:20 +00004470 yyerror ("parse error; also virtual memory exhausted");
Lev Walkinf15320b2004-06-03 03:38:44 +00004471 }
4472 else
4473#endif /* YYERROR_VERBOSE */
Lev Walkin418298d2006-07-13 08:24:20 +00004474 yyerror ("parse error");
Lev Walkinf15320b2004-06-03 03:38:44 +00004475 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004476 goto yyerrlab1;
Lev Walkinf15320b2004-06-03 03:38:44 +00004477
Lev Walkin418298d2006-07-13 08:24:20 +00004478
4479/*----------------------------------------------------.
4480| yyerrlab1 -- error raised explicitly by an action. |
4481`----------------------------------------------------*/
4482yyerrlab1:
Lev Walkinf15320b2004-06-03 03:38:44 +00004483 if (yyerrstatus == 3)
4484 {
Lev Walkin418298d2006-07-13 08:24:20 +00004485 /* If just tried and failed to reuse lookahead token after an
4486 error, discard it. */
Lev Walkinf15320b2004-06-03 03:38:44 +00004487
Lev Walkin418298d2006-07-13 08:24:20 +00004488 /* Return failure if at end of input. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004489 if (yychar == YYEOF)
Lev Walkin418298d2006-07-13 08:24:20 +00004490 {
4491 /* Pop the error token. */
4492 YYPOPSTACK;
4493 /* Pop the rest of the stack. */
4494 while (yyssp > yyss)
4495 {
4496 YYDPRINTF ((stderr, "Error: popping "));
4497 YYDSYMPRINT ((stderr,
4498 yystos[*yyssp],
4499 *yyvsp));
4500 YYDPRINTF ((stderr, "\n"));
4501 yydestruct (yystos[*yyssp], *yyvsp);
4502 YYPOPSTACK;
4503 }
4504 YYABORT;
4505 }
Lev Walkinf15320b2004-06-03 03:38:44 +00004506
Lev Walkin418298d2006-07-13 08:24:20 +00004507 YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
4508 yychar, yytname[yychar1]));
4509 yydestruct (yychar1, yylval);
Lev Walkina00d6b32006-03-21 03:40:38 +00004510 yychar = YYEMPTY;
Lev Walkinf15320b2004-06-03 03:38:44 +00004511 }
4512
Lev Walkin418298d2006-07-13 08:24:20 +00004513 /* Else will try to reuse lookahead token after shifting the error
4514 token. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004515
Lev Walkin418298d2006-07-13 08:24:20 +00004516 yyerrstatus = 3; /* Each real token shifted decrements this. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004517
Lev Walkin418298d2006-07-13 08:24:20 +00004518 for (;;)
Lev Walkina00d6b32006-03-21 03:40:38 +00004519 {
Lev Walkin418298d2006-07-13 08:24:20 +00004520 yyn = yypact[yystate];
4521 if (yyn != YYPACT_NINF)
4522 {
4523 yyn += YYTERROR;
4524 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
4525 {
4526 yyn = yytable[yyn];
4527 if (0 < yyn)
4528 break;
4529 }
4530 }
4531
4532 /* Pop the current state because it cannot handle the error token. */
4533 if (yyssp == yyss)
4534 YYABORT;
4535
4536 YYDPRINTF ((stderr, "Error: popping "));
4537 YYDSYMPRINT ((stderr,
4538 yystos[*yyssp], *yyvsp));
4539 YYDPRINTF ((stderr, "\n"));
4540
4541 yydestruct (yystos[yystate], *yyvsp);
4542 yyvsp--;
4543 yystate = *--yyssp;
4544
4545
4546#if YYDEBUG
4547 if (yydebug)
4548 {
4549 short *yyssp1 = yyss - 1;
4550 YYFPRINTF (stderr, "Error: state stack now");
4551 while (yyssp1 != yyssp)
4552 YYFPRINTF (stderr, " %d", *++yyssp1);
4553 YYFPRINTF (stderr, "\n");
4554 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004555#endif
Lev Walkina00d6b32006-03-21 03:40:38 +00004556 }
Lev Walkina00d6b32006-03-21 03:40:38 +00004557
Lev Walkinf15320b2004-06-03 03:38:44 +00004558 if (yyn == YYFINAL)
4559 YYACCEPT;
4560
Lev Walkin418298d2006-07-13 08:24:20 +00004561 YYDPRINTF ((stderr, "Shifting error token, "));
Lev Walkina00d6b32006-03-21 03:40:38 +00004562
Lev Walkinf15320b2004-06-03 03:38:44 +00004563 *++yyvsp = yylval;
Lev Walkin418298d2006-07-13 08:24:20 +00004564
Lev Walkinf15320b2004-06-03 03:38:44 +00004565
4566 yystate = yyn;
4567 goto yynewstate;
4568
Lev Walkina00d6b32006-03-21 03:40:38 +00004569
Lev Walkin418298d2006-07-13 08:24:20 +00004570/*-------------------------------------.
4571| yyacceptlab -- YYACCEPT comes here. |
4572`-------------------------------------*/
4573yyacceptlab:
4574 yyresult = 0;
4575 goto yyreturn;
4576
4577/*-----------------------------------.
4578| yyabortlab -- YYABORT comes here. |
4579`-----------------------------------*/
4580yyabortlab:
4581 yyresult = 1;
4582 goto yyreturn;
4583
4584#ifndef yyoverflow
4585/*----------------------------------------------.
4586| yyoverflowlab -- parser overflow comes here. |
4587`----------------------------------------------*/
4588yyoverflowlab:
4589 yyerror ("parser stack overflow");
4590 yyresult = 2;
4591 /* Fall through. */
Lev Walkina00d6b32006-03-21 03:40:38 +00004592#endif
Lev Walkin418298d2006-07-13 08:24:20 +00004593
4594yyreturn:
4595#ifndef yyoverflow
4596 if (yyss != yyssa)
4597 YYSTACK_FREE (yyss);
4598#endif
4599 return yyresult;
Lev Walkinf15320b2004-06-03 03:38:44 +00004600}
Lev Walkin418298d2006-07-13 08:24:20 +00004601
4602
Lev Walkin5c541f12006-10-18 18:40:14 +00004603#line 2319 "asn1p_y.y"
Lev Walkinf15320b2004-06-03 03:38:44 +00004604
4605
4606
4607/*
4608 * Convert Xstring ('0101'B or '5'H) to the binary vector.
4609 */
4610static asn1p_value_t *
4611_convert_bitstring2binary(char *str, int base) {
4612 asn1p_value_t *val;
4613 int slen;
4614 int memlen;
4615 int baselen;
4616 int bits;
4617 uint8_t *binary_vector;
4618 uint8_t *bv_ptr;
4619 uint8_t cur_val;
4620
4621 assert(str);
4622 assert(str[0] == '\'');
4623
4624 switch(base) {
4625 case 'B':
4626 baselen = 1;
4627 break;
4628 case 'H':
4629 baselen = 4;
4630 break;
4631 default:
4632 assert(base == 'B' || base == 'H');
4633 errno = EINVAL;
4634 return NULL;
4635 }
4636
4637 slen = strlen(str);
4638 assert(str[slen - 1] == base);
4639 assert(str[slen - 2] == '\'');
4640
4641 memlen = slen / (8 / baselen); /* Conservative estimate */
4642
4643 bv_ptr = binary_vector = malloc(memlen + 1);
4644 if(bv_ptr == NULL)
4645 /* ENOMEM */
4646 return NULL;
4647
4648 cur_val = 0;
4649 bits = 0;
4650 while(*(++str) != '\'') {
4651 switch(baselen) {
4652 case 1:
4653 switch(*str) {
4654 case '1':
4655 cur_val |= 1 << (7 - (bits % 8));
4656 case '0':
4657 break;
4658 default:
4659 assert(!"_y UNREACH1");
4660 case ' ': case '\r': case '\n':
4661 continue;
4662 }
4663 break;
4664 case 4:
4665 switch(*str) {
4666 case '0': case '1': case '2': case '3': case '4':
4667 case '5': case '6': case '7': case '8': case '9':
4668 cur_val |= (*str - '0') << (4 - (bits % 8));
4669 break;
4670 case 'A': case 'B': case 'C':
4671 case 'D': case 'E': case 'F':
4672 cur_val |= ((*str - 'A') + 10)
4673 << (4 - (bits % 8));
4674 break;
4675 default:
4676 assert(!"_y UNREACH2");
4677 case ' ': case '\r': case '\n':
4678 continue;
4679 }
4680 break;
4681 }
4682
4683 bits += baselen;
4684 if((bits % 8) == 0) {
4685 *bv_ptr++ = cur_val;
4686 cur_val = 0;
4687 }
4688 }
4689
4690 *bv_ptr = cur_val;
4691 assert((bv_ptr - binary_vector) <= memlen);
4692
4693 val = asn1p_value_frombits(binary_vector, bits, 0);
4694 if(val == NULL) {
4695 free(binary_vector);
4696 }
4697
4698 return val;
4699}
4700
Lev Walkin2e9bd5c2005-08-13 09:07:11 +00004701/*
4702 * For unnamed types (used in old X.208 compliant modules)
4703 * generate some sort of interim names, to not to force human being to fix
4704 * the specification's compliance to modern ASN.1 standards.
4705 */
4706static void
4707_fixup_anonymous_identifier(asn1p_expr_t *expr) {
4708 char *p;
4709 assert(expr->Identifier == 0);
4710
4711 /*
4712 * Try to figure out the type name
4713 * without going too much into details
4714 */
4715 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
4716 if(expr->reference && expr->reference->comp_count > 0)
4717 expr->Identifier = expr->reference->components[0].name;
4718
4719 fprintf(stderr,
4720 "WARNING: Line %d: expected lower-case member identifier, "
4721 "found an unnamed %s.\n"
4722 "WARNING: Obsolete X.208 syntax detected, "
4723 "please give the member a name.\n",
4724 yylineno, expr->Identifier ? expr->Identifier : "type");
4725
4726 if(!expr->Identifier)
4727 expr->Identifier = "unnamed";
4728 expr->Identifier = strdup(expr->Identifier);
4729 assert(expr->Identifier);
4730 /* Make a lowercase identifier from the type name */
4731 for(p = expr->Identifier; *p; p++) {
4732 switch(*p) {
4733 case 'A' ... 'Z': *p += 32; break;
4734 case ' ': *p = '_'; break;
4735 case '-': *p = '_'; break;
4736 }
4737 }
4738 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
4739 "Name clash may occur later.\n",
4740 expr->Identifier);
4741}
4742
Lev Walkinf15320b2004-06-03 03:38:44 +00004743int
4744yyerror(const char *msg) {
Lev Walkin9d542d22006-03-14 16:31:37 +00004745 extern char *asn1p_text;
Lev Walkinf15320b2004-06-03 03:38:44 +00004746 fprintf(stderr,
4747 "ASN.1 grammar parse error "
4748 "near line %d (token \"%s\"): %s\n",
Lev Walkinceb20e72004-09-05 10:40:41 +00004749 yylineno, asn1p_text, msg);
Lev Walkinf15320b2004-06-03 03:38:44 +00004750 return -1;
4751}
4752
Lev Walkin418298d2006-07-13 08:24:20 +00004753