blob: d1105a53f32bb8b31c1eb74c822a69de41e3c20b [file] [log] [blame]
vlm1aeaddd2006-07-13 08:24:20 +00001/* A Bison parser, made from asn1p_y.y, by GNU bison 1.75. */
vlmfa67ddc2004-06-03 03:38:44 +00002
vlm1aeaddd2006-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.
vlmfa67ddc2004-06-03 03:38:44 +00005
vlm1aeaddd2006-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.
vlmfa67ddc2004-06-03 03:38:44 +000010
vlm1aeaddd2006-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. */
vlmfa67ddc2004-06-03 03:38:44 +000047#define yyparse asn1p_parse
vlm1aeaddd2006-07-13 08:24:20 +000048#define yylex asn1p_lex
vlmfa67ddc2004-06-03 03:38:44 +000049#define yyerror asn1p_error
vlm1aeaddd2006-07-13 08:24:20 +000050#define yylval asn1p_lval
51#define yychar asn1p_char
vlmfa67ddc2004-06-03 03:38:44 +000052#define yydebug asn1p_debug
53#define yynerrs asn1p_nerrs
vlmfa67ddc2004-06-03 03:38:44 +000054
vlm1aeaddd2006-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,
vlme745fcd2006-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
vlm1aeaddd2006-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
vlme745fcd2006-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
vlm1aeaddd2006-07-13 08:24:20 +0000270
271
272
273
274/* Copy the first part of user declarations. */
vlmfa67ddc2004-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
vlm03630c52005-06-07 21:43:32 +0000287#define YYPARSE_PARAM_TYPE void **
vlmfa67ddc2004-06-03 03:38:44 +0000288#define YYERROR_VERBOSE
289
290int yylex(void);
291int yyerror(const char *msg);
vlm03630c52005-06-07 21:43:32 +0000292#ifdef YYBYACC
293int yyparse(void **param); /* byacc does not produce a prototype */
294#endif
vlmfa67ddc2004-06-03 03:38:44 +0000295void asn1p_lexer_hack_push_opaque_state(void);
296void asn1p_lexer_hack_enable_with_syntax(void);
vlm9283dbe2004-08-18 04:59:12 +0000297void asn1p_lexer_hack_push_encoding_control(void);
vlmfa67ddc2004-06-03 03:38:44 +0000298#define yylineno asn1p_lineno
299extern int asn1p_lineno;
300
vlm931aeed2005-08-12 10:09:10 +0000301/*
vlm177a5b62005-09-05 05:17:57 +0000302 * Process directives as <ASN1C:RepresentAsPointer>
vlm066dc102005-08-22 12:23:54 +0000303 */
304extern int asn1p_as_pointer;
vlm066dc102005-08-22 12:23:54 +0000305
306/*
vlm931aeed2005-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;
vlmfa67ddc2004-06-03 03:38:44 +0000311
vlm5d89c3d2005-08-13 09:07:11 +0000312static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
313static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
vlmfa67ddc2004-06-03 03:38:44 +0000314
vlm931aeed2005-08-12 10:09:10 +0000315#define checkmem(ptr) do { \
316 if(!(ptr)) \
317 return yyerror("Memory failure"); \
vlmfa67ddc2004-06-03 03:38:44 +0000318 } while(0)
319
vlm931aeed2005-08-12 10:09:10 +0000320#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
321 if(arg1->type != constr_type) { \
322 int __ret; \
323 root = asn1p_constraint_new(yylineno); \
324 checkmem(root); \
325 root->type = constr_type; \
326 __ret = asn1p_constraint_insert(root, \
327 arg1); \
328 checkmem(__ret == 0); \
329 } else { \
330 root = arg1; \
331 } \
332 if(arg2) { \
333 int __ret \
334 = asn1p_constraint_insert(root, arg2); \
335 checkmem(__ret == 0); \
336 } \
vlmfa67ddc2004-06-03 03:38:44 +0000337 } while(0)
338
vlmd3420d32006-09-14 10:35:20 +0000339#ifdef AL_IMPORT
340#error AL_IMPORT DEFINED ELSEWHERE!
341#endif
342#define AL_IMPORT(to,where,from,field) do { \
343 if(!(from)) break; \
344 while(TQ_FIRST(&((from)->where))) { \
345 TQ_ADD(&((to)->where), \
346 TQ_REMOVE(&((from)->where), field), \
347 field); \
348 } \
349 assert(TQ_FIRST(&((from)->where)) == 0); \
350 } while(0)
351
vlmfa67ddc2004-06-03 03:38:44 +0000352
vlm1aeaddd2006-07-13 08:24:20 +0000353
354/* Enabling traces. */
355#ifndef YYDEBUG
356# define YYDEBUG 0
357#endif
358
359/* Enabling verbose error messages. */
360#ifdef YYERROR_VERBOSE
361# undef YYERROR_VERBOSE
362# define YYERROR_VERBOSE 1
363#else
364# define YYERROR_VERBOSE 0
365#endif
366
367#ifndef YYSTYPE
vlmd3420d32006-09-14 10:35:20 +0000368#line 85 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +0000369typedef union {
vlmfa67ddc2004-06-03 03:38:44 +0000370 asn1p_t *a_grammar;
371 asn1p_module_flags_e a_module_flags;
372 asn1p_module_t *a_module;
373 asn1p_expr_type_e a_type; /* ASN.1 Type */
374 asn1p_expr_t *a_expr; /* Constructed collection */
375 asn1p_constraint_t *a_constr; /* Constraint */
376 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
377 asn1p_xports_t *a_xports; /* IMports/EXports */
vlm931aeed2005-08-12 10:09:10 +0000378 struct AssignedIdentifier a_aid; /* Assigned Identifier */
vlmfa67ddc2004-06-03 03:38:44 +0000379 asn1p_oid_t *a_oid; /* Object Identifier */
380 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
381 struct asn1p_type_tag_s a_tag; /* A tag */
382 asn1p_ref_t *a_ref; /* Reference to custom type */
383 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
384 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
385 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
386 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
387 struct asn1p_param_s a_parg; /* A parameter argument */
388 asn1p_paramlist_t *a_plist; /* A pargs list */
vlmc94e28f2004-09-15 11:59:51 +0000389 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
vlmfa67ddc2004-06-03 03:38:44 +0000390 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
vlmec6acd42004-09-29 13:18:09 +0000391 asn1c_integer_t a_int;
vlme745fcd2006-09-05 16:18:34 +0000392 double a_dbl;
vlmfa67ddc2004-06-03 03:38:44 +0000393 char *tv_str;
394 struct {
395 char *buf;
396 int len;
397 } tv_opaque;
398 struct {
399 char *name;
400 struct asn1p_type_tag_s tag;
401 } tv_nametag;
vlm1aeaddd2006-07-13 08:24:20 +0000402} yystype;
403/* Line 193 of /usr/local/share/bison/yacc.c. */
vlmd3420d32006-09-14 10:35:20 +0000404#line 405 "asn1p_y.c"
vlm1aeaddd2006-07-13 08:24:20 +0000405# define YYSTYPE yystype
406# define YYSTYPE_IS_TRIVIAL 1
vlmfa67ddc2004-06-03 03:38:44 +0000407#endif
408
vlm1aeaddd2006-07-13 08:24:20 +0000409#ifndef YYLTYPE
410typedef struct yyltype
411{
412 int first_line;
413 int first_column;
414 int last_line;
415 int last_column;
416} yyltype;
417# define YYLTYPE yyltype
418# define YYLTYPE_IS_TRIVIAL 1
419#endif
420
421/* Copy the second part of user declarations. */
vlmfa67ddc2004-06-03 03:38:44 +0000422
423
vlm1aeaddd2006-07-13 08:24:20 +0000424/* Line 213 of /usr/local/share/bison/yacc.c. */
vlmd3420d32006-09-14 10:35:20 +0000425#line 426 "asn1p_y.c"
vlmfa67ddc2004-06-03 03:38:44 +0000426
vlm1aeaddd2006-07-13 08:24:20 +0000427#if ! defined (yyoverflow) || YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +0000428
vlm1aeaddd2006-07-13 08:24:20 +0000429/* The parser invokes alloca or malloc; define the necessary symbols. */
vlmfa67ddc2004-06-03 03:38:44 +0000430
vlm1aeaddd2006-07-13 08:24:20 +0000431# if YYSTACK_USE_ALLOCA
432# define YYSTACK_ALLOC alloca
433# else
434# ifndef YYSTACK_USE_ALLOCA
435# if defined (alloca) || defined (_ALLOCA_H)
436# define YYSTACK_ALLOC alloca
437# else
438# ifdef __GNUC__
439# define YYSTACK_ALLOC __builtin_alloca
440# endif
441# endif
442# endif
443# endif
vlmfa67ddc2004-06-03 03:38:44 +0000444
vlm1aeaddd2006-07-13 08:24:20 +0000445# ifdef YYSTACK_ALLOC
446 /* Pacify GCC's `empty if-body' warning. */
447# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
448# else
449# if defined (__STDC__) || defined (__cplusplus)
450# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
451# define YYSIZE_T size_t
452# endif
453# define YYSTACK_ALLOC malloc
454# define YYSTACK_FREE free
455# endif
456#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
457
458
459#if (! defined (yyoverflow) \
460 && (! defined (__cplusplus) \
461 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
462
463/* A type that is properly aligned for any stack member. */
464union yyalloc
465{
466 short yyss;
467 YYSTYPE yyvs;
468 };
469
470/* The size of the maximum gap between one aligned stack and the next. */
471# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
472
473/* The size of an array large to enough to hold all stacks, each with
474 N elements. */
475# define YYSTACK_BYTES(N) \
476 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
477 + YYSTACK_GAP_MAX)
478
479/* Copy COUNT objects from FROM to TO. The source and destination do
480 not overlap. */
481# ifndef YYCOPY
482# if 1 < __GNUC__
483# define YYCOPY(To, From, Count) \
484 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
485# else
486# define YYCOPY(To, From, Count) \
487 do \
488 { \
489 register YYSIZE_T yyi; \
490 for (yyi = 0; yyi < (Count); yyi++) \
491 (To)[yyi] = (From)[yyi]; \
492 } \
493 while (0)
494# endif
495# endif
496
497/* Relocate STACK from its old location to the new one. The
498 local variables YYSIZE and YYSTACKSIZE give the old and new number of
499 elements in the stack, and YYPTR gives the new location of the
500 stack. Advance YYPTR to a properly aligned location for the next
501 stack. */
502# define YYSTACK_RELOCATE(Stack) \
503 do \
504 { \
505 YYSIZE_T yynewbytes; \
506 YYCOPY (&yyptr->Stack, Stack, yysize); \
507 Stack = &yyptr->Stack; \
508 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
509 yyptr += yynewbytes / sizeof (*yyptr); \
510 } \
511 while (0)
vlmfa67ddc2004-06-03 03:38:44 +0000512
513#endif
514
vlm1aeaddd2006-07-13 08:24:20 +0000515#if defined (__STDC__) || defined (__cplusplus)
516 typedef signed char yysigned_char;
vlmfa67ddc2004-06-03 03:38:44 +0000517#else
vlm1aeaddd2006-07-13 08:24:20 +0000518 typedef short yysigned_char;
vlmfa67ddc2004-06-03 03:38:44 +0000519#endif
520
vlm1aeaddd2006-07-13 08:24:20 +0000521/* YYFINAL -- State number of the termination state. */
522#define YYFINAL 7
vlmd3420d32006-09-14 10:35:20 +0000523#define YYLAST 816
vlm1aeaddd2006-07-13 08:24:20 +0000524
525/* YYNTOKENS -- Number of terminals. */
vlme745fcd2006-09-05 16:18:34 +0000526#define YYNTOKENS 121
vlm1aeaddd2006-07-13 08:24:20 +0000527/* YYNNTS -- Number of nonterminals. */
vlmd3420d32006-09-14 10:35:20 +0000528#define YYNNTS 112
vlm1aeaddd2006-07-13 08:24:20 +0000529/* YYNRULES -- Number of rules. */
vlmd3420d32006-09-14 10:35:20 +0000530#define YYNRULES 296
vlm1aeaddd2006-07-13 08:24:20 +0000531/* YYNRULES -- Number of states. */
vlmd3420d32006-09-14 10:35:20 +0000532#define YYNSTATES 453
vlm1aeaddd2006-07-13 08:24:20 +0000533
534/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
535#define YYUNDEFTOK 2
vlme745fcd2006-09-05 16:18:34 +0000536#define YYMAXUTOK 360
vlm1aeaddd2006-07-13 08:24:20 +0000537
538#define YYTRANSLATE(X) \
539 ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
540
541/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
542static const unsigned char yytranslate[] =
543{
544 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
545 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
546 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlme745fcd2006-09-05 16:18:34 +0000547 2, 2, 2, 117, 2, 2, 2, 2, 2, 2,
548 110, 111, 2, 2, 113, 2, 118, 2, 2, 2,
549 2, 2, 2, 2, 2, 2, 2, 2, 114, 112,
550 119, 2, 2, 2, 120, 2, 2, 2, 2, 2,
vlm1aeaddd2006-07-13 08:24:20 +0000551 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
552 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlme745fcd2006-09-05 16:18:34 +0000553 2, 115, 2, 116, 102, 2, 2, 2, 2, 2,
vlm1aeaddd2006-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,
vlme745fcd2006-09-05 16:18:34 +0000556 2, 2, 2, 108, 104, 109, 2, 2, 2, 2,
vlm1aeaddd2006-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,
559 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
560 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, 1, 2, 3, 4,
570 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
571 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
572 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
573 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
574 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
575 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
576 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
577 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
578 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
vlme745fcd2006-09-05 16:18:34 +0000579 95, 96, 97, 98, 99, 100, 101, 103, 105, 106,
580 107
vlm1aeaddd2006-07-13 08:24:20 +0000581};
582
583#if YYDEBUG
584/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
585 YYRHS. */
586static const unsigned short yyprhs[] =
587{
588 0, 0, 3, 5, 7, 10, 19, 20, 22, 26,
589 29, 31, 34, 36, 41, 43, 44, 46, 48, 51,
vlmd3420d32006-09-14 10:35:20 +0000590 54, 57, 60, 63, 66, 67, 69, 73, 75, 78,
591 80, 82, 84, 85, 89, 91, 92, 94, 98, 101,
592 103, 106, 107, 109, 114, 116, 120, 122, 126, 128,
593 129, 131, 135, 139, 142, 144, 148, 150, 154, 156,
594 160, 165, 167, 169, 174, 178, 182, 189, 196, 198,
595 202, 204, 208, 212, 216, 220, 222, 226, 228, 230,
596 232, 234, 235, 237, 239, 243, 247, 250, 254, 256,
597 258, 262, 265, 267, 269, 275, 276, 278, 280, 284,
598 287, 292, 296, 300, 304, 308, 312, 313, 315, 316,
599 323, 325, 328, 330, 332, 334, 338, 340, 344, 348,
600 352, 353, 356, 358, 363, 368, 373, 380, 387, 389,
601 394, 398, 400, 404, 408, 412, 414, 418, 420, 424,
602 426, 428, 430, 432, 436, 440, 442, 447, 449, 451,
603 455, 456, 460, 462, 464, 466, 468, 470, 472, 474,
604 476, 480, 482, 484, 486, 488, 491, 493, 495, 497,
605 499, 502, 505, 507, 509, 512, 515, 517, 519, 521,
606 523, 525, 528, 530, 533, 535, 537, 539, 541, 543,
vlm1aeaddd2006-07-13 08:24:20 +0000607 545, 547, 549, 551, 553, 555, 557, 559, 561, 563,
vlmd3420d32006-09-14 10:35:20 +0000608 565, 567, 569, 571, 572, 574, 576, 581, 585, 590,
609 592, 594, 598, 604, 606, 610, 614, 618, 622, 627,
610 631, 633, 635, 639, 643, 647, 651, 653, 655, 656,
611 662, 664, 667, 670, 674, 676, 678, 680, 682, 684,
612 686, 688, 690, 694, 700, 702, 706, 708, 712, 713,
613 715, 717, 719, 721, 723, 725, 729, 734, 736, 740,
614 743, 747, 749, 753, 754, 756, 758, 761, 764, 768,
615 770, 774, 776, 781, 786, 788, 790, 792, 794, 796,
616 798, 799, 801, 804, 809, 810, 812, 814, 816, 817,
617 819, 821, 823, 825, 827, 828, 830
vlm1aeaddd2006-07-13 08:24:20 +0000618};
619
620/* YYRHS -- A `-1'-separated list of the rules' RHS. */
621static const short yyrhs[] =
622{
vlme745fcd2006-09-05 16:18:34 +0000623 122, 0, -1, 123, -1, 124, -1, 123, 124, -1,
vlmd3420d32006-09-14 10:35:20 +0000624 229, 125, 39, 129, 3, 26, 132, 44, -1, -1,
vlme745fcd2006-09-05 16:18:34 +0000625 126, -1, 108, 127, 109, -1, 108, 109, -1, 128,
vlmd3420d32006-09-14 10:35:20 +0000626 -1, 127, 128, -1, 232, -1, 232, 110, 10, 111,
vlme745fcd2006-09-05 16:18:34 +0000627 -1, 10, -1, -1, 130, -1, 131, -1, 130, 131,
628 -1, 46, 89, -1, 57, 89, -1, 25, 89, -1,
vlmd3420d32006-09-14 10:35:20 +0000629 48, 58, -1, 16, 62, -1, -1, 133, -1, 144,
630 137, 134, -1, 135, -1, 134, 135, -1, 151, -1,
631 181, -1, 149, -1, -1, 43, 16, 136, -1, 191,
632 -1, -1, 138, -1, 59, 139, 112, -1, 59, 51,
633 -1, 141, -1, 139, 141, -1, -1, 126, -1, 142,
634 51, 229, 140, -1, 143, -1, 142, 113, 143, -1,
635 229, -1, 229, 108, 109, -1, 232, -1, -1, 145,
636 -1, 47, 146, 112, -1, 47, 22, 112, -1, 47,
637 112, -1, 147, -1, 146, 113, 147, -1, 229, -1,
638 229, 108, 109, -1, 232, -1, 108, 198, 109, -1,
639 229, 150, 3, 148, -1, 190, -1, 175, -1, 175,
640 108, 154, 109, -1, 229, 3, 171, -1, 229, 3,
641 161, -1, 229, 108, 152, 109, 3, 171, -1, 229,
642 108, 152, 109, 3, 161, -1, 153, -1, 152, 113,
643 153, -1, 229, -1, 229, 114, 232, -1, 229, 114,
644 229, -1, 188, 114, 232, -1, 188, 114, 229, -1,
645 155, -1, 154, 113, 155, -1, 171, -1, 184, -1,
646 232, -1, 148, -1, -1, 157, -1, 158, -1, 157,
647 113, 158, -1, 232, 171, 217, -1, 171, 217, -1,
648 35, 73, 171, -1, 170, -1, 160, -1, 159, 113,
649 160, -1, 232, 171, -1, 170, -1, 171, -1, 33,
650 108, 163, 109, 165, -1, -1, 93, -1, 164, -1,
651 163, 113, 164, -1, 17, 217, -1, 18, 171, 162,
652 217, -1, 18, 179, 217, -1, 18, 180, 217, -1,
653 17, 179, 217, -1, 17, 171, 217, -1, 17, 180,
654 217, -1, -1, 166, -1, -1, 100, 87, 108, 167,
655 168, 109, -1, 169, -1, 168, 169, -1, 4, -1,
656 19, -1, 178, -1, 115, 168, 116, -1, 107, -1,
657 107, 117, 185, -1, 107, 117, 222, -1, 224, 173,
658 195, -1, -1, 172, 174, -1, 150, -1, 32, 108,
659 159, 109, -1, 83, 108, 156, 109, -1, 84, 108,
660 156, 109, -1, 83, 195, 73, 231, 224, 173, -1,
661 84, 195, 73, 231, 224, 173, -1, 23, -1, 23,
662 40, 30, 232, -1, 61, 73, 175, -1, 15, -1,
663 15, 118, 229, -1, 230, 118, 229, -1, 15, 118,
664 232, -1, 230, -1, 230, 118, 176, -1, 177, -1,
665 176, 118, 177, -1, 178, -1, 17, -1, 18, -1,
666 17, -1, 179, 118, 17, -1, 179, 118, 18, -1,
667 16, -1, 232, 150, 3, 182, -1, 184, -1, 185,
668 -1, 232, 114, 182, -1, -1, 108, 183, 187, -1,
669 68, -1, 50, -1, 91, -1, 6, -1, 8, -1,
670 186, -1, 222, -1, 232, -1, 229, 118, 232, -1,
671 7, -1, 13, -1, 14, -1, 5, -1, 187, 5,
672 -1, 29, -1, 68, -1, 81, -1, 189, -1, 72,
673 86, -1, 70, 56, -1, 82, -1, 49, -1, 41,
674 76, -1, 31, 86, -1, 96, -1, 52, -1, 191,
675 -1, 63, -1, 45, -1, 27, 86, -1, 188, -1,
676 189, 219, -1, 28, -1, 53, -1, 54, -1, 55,
677 -1, 64, -1, 69, -1, 79, -1, 88, -1, 90,
678 -1, 95, -1, 97, -1, 98, -1, 99, -1, 71,
679 -1, 104, -1, 105, -1, 102, -1, 103, -1, 101,
680 -1, -1, 196, -1, 197, -1, 85, 110, 198, 111,
681 -1, 110, 198, 111, -1, 197, 110, 198, 111, -1,
682 107, -1, 199, -1, 199, 113, 107, -1, 199, 113,
683 107, 113, 199, -1, 200, -1, 22, 101, 200, -1,
684 199, 192, 200, -1, 199, 193, 200, -1, 200, 194,
685 200, -1, 203, 110, 198, 111, -1, 110, 198, 111,
686 -1, 204, -1, 205, -1, 204, 202, 204, -1, 66,
687 202, 204, -1, 204, 202, 65, -1, 66, 202, 65,
688 -1, 211, -1, 206, -1, -1, 36, 30, 108, 201,
689 187, -1, 106, -1, 106, 119, -1, 119, 106, -1,
690 119, 106, 119, -1, 85, -1, 51, -1, 50, -1,
691 91, -1, 223, -1, 186, -1, 232, -1, 229, -1,
692 100, 34, 197, -1, 100, 35, 108, 207, 109, -1,
693 208, -1, 207, 113, 208, -1, 107, -1, 232, 195,
694 209, -1, -1, 210, -1, 78, -1, 20, -1, 74,
695 -1, 212, -1, 213, -1, 108, 229, 109, -1, 212,
696 108, 214, 109, -1, 215, -1, 214, 113, 215, -1,
697 120, 216, -1, 120, 118, 216, -1, 232, -1, 216,
698 118, 232, -1, -1, 218, -1, 74, -1, 38, 182,
699 -1, 108, 109, -1, 108, 220, 109, -1, 221, -1,
700 220, 113, 221, -1, 232, -1, 232, 110, 222, 111,
701 -1, 232, 110, 185, 111, -1, 222, -1, 107, -1,
702 10, -1, 11, -1, 222, -1, 12, -1, -1, 225,
703 -1, 226, 228, -1, 115, 227, 10, 116, -1, -1,
704 94, -1, 24, -1, 80, -1, -1, 57, -1, 46,
705 -1, 15, -1, 16, -1, 16, -1, -1, 232, -1,
706 9, -1
vlm1aeaddd2006-07-13 08:24:20 +0000707};
708
709/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
710static const unsigned short yyrline[] =
711{
vlmd3420d32006-09-14 10:35:20 +0000712 0, 342, 342, 348, 354, 370, 395, 397, 400, 404,
713 409, 416, 424, 429, 433, 442, 444, 452, 456, 464,
714 468, 471, 474, 478, 498, 500, 508, 517, 521, 536,
715 544, 557, 565, 564, 578, 590, 592, 594, 605, 610,
716 616, 622, 624, 627, 638, 644, 650, 657, 663, 672,
717 674, 685, 689, 692, 699, 705, 711, 718, 724, 733,
718 735, 745, 759, 769, 785, 795, 811, 817, 824, 834,
719 844, 849, 856, 863, 871, 881, 887, 893, 897, 905,
720 916, 938, 940, 942, 948, 954, 962, 968, 975, 980,
721 986, 992, 998, 1001, 1007, 1017, 1019, 1022, 1030, 1037,
722 1050, 1061, 1071, 1082, 1092, 1103, 1114, 1116, 1123, 1121,
723 1130, 1135, 1141, 1146, 1149, 1153, 1158, 1167, 1176, 1187,
724 1209, 1216, 1235, 1239, 1245, 1251, 1257, 1267, 1277, 1283,
725 1294, 1308, 1317, 1327, 1337, 1347, 1355, 1376, 1385, 1394,
726 1396, 1403, 1410, 1416, 1420, 1426, 1446, 1456, 1458, 1459,
727 1466, 1466, 1471, 1478, 1484, 1489, 1493, 1497, 1500, 1505,
728 1517, 1534, 1539, 1544, 1577, 1587, 1601, 1603, 1604, 1605,
729 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1620,
730 1622, 1623, 1626, 1633, 1645, 1647, 1651, 1655, 1656, 1657,
731 1658, 1659, 1663, 1664, 1665, 1666, 1670, 1671, 1678, 1678,
732 1679, 1679, 1680, 1682, 1684, 1689, 1693, 1702, 1706, 1711,
733 1716, 1719, 1725, 1735, 1739, 1742, 1745, 1748, 1753, 1762,
734 1770, 1776, 1782, 1789, 1797, 1805, 1814, 1817, 1821, 1820,
735 1831, 1833, 1834, 1835, 1838, 1842, 1847, 1853, 1858, 1859,
736 1860, 1873, 1887, 1891, 1896, 1900, 1905, 1912, 1925, 1927,
737 1930, 1934, 1937, 1942, 1946, 1954, 1969, 1975, 1982, 1995,
738 2007, 2022, 2026, 2043, 2048, 2051, 2056, 2078, 2083, 2088,
739 2094, 2100, 2108, 2116, 2124, 2131, 2141, 2146, 2152, 2154,
740 2184, 2186, 2189, 2196, 2202, 2204, 2205, 2206, 2209, 2211,
741 2212, 2215, 2220, 2227, 2234, 2236, 2241
vlm1aeaddd2006-07-13 08:24:20 +0000742};
743#endif
744
745#if YYDEBUG || YYERROR_VERBOSE
746/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
747 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
748static const char *const yytname[] =
749{
750 "$end", "error", "$undefined", "TOK_PPEQ", "TOK_whitespace", "TOK_opaque",
751 "TOK_bstring", "TOK_cstring", "TOK_hstring", "TOK_identifier",
vlme745fcd2006-09-05 16:18:34 +0000752 "TOK_number", "TOK_number_negative", "TOK_realnumber", "TOK_tuple",
753 "TOK_quadruple", "TOK_typereference", "TOK_capitalreference",
754 "TOK_typefieldreference", "TOK_valuefieldreference", "TOK_Literal",
755 "TOK_ABSENT", "TOK_ABSTRACT_SYNTAX", "TOK_ALL", "TOK_ANY",
756 "TOK_APPLICATION", "TOK_AUTOMATIC", "TOK_BEGIN", "TOK_BIT",
757 "TOK_BMPString", "TOK_BOOLEAN", "TOK_BY", "TOK_CHARACTER", "TOK_CHOICE",
758 "TOK_CLASS", "TOK_COMPONENT", "TOK_COMPONENTS", "TOK_CONSTRAINED",
759 "TOK_CONTAINING", "TOK_DEFAULT", "TOK_DEFINITIONS", "TOK_DEFINED",
760 "TOK_EMBEDDED", "TOK_ENCODED", "TOK_ENCODING_CONTROL", "TOK_END",
761 "TOK_ENUMERATED", "TOK_EXPLICIT", "TOK_EXPORTS", "TOK_EXTENSIBILITY",
762 "TOK_EXTERNAL", "TOK_FALSE", "TOK_FROM", "TOK_GeneralizedTime",
763 "TOK_GeneralString", "TOK_GraphicString", "TOK_IA5String",
764 "TOK_IDENTIFIER", "TOK_IMPLICIT", "TOK_IMPLIED", "TOK_IMPORTS",
765 "TOK_INCLUDES", "TOK_INSTANCE", "TOK_INSTRUCTIONS", "TOK_INTEGER",
766 "TOK_ISO646String", "TOK_MAX", "TOK_MIN", "TOK_MINUS_INFINITY",
767 "TOK_NULL", "TOK_NumericString", "TOK_OBJECT", "TOK_ObjectDescriptor",
768 "TOK_OCTET", "TOK_OF", "TOK_OPTIONAL", "TOK_PATTERN", "TOK_PDV",
769 "TOK_PLUS_INFINITY", "TOK_PRESENT", "TOK_PrintableString",
770 "TOK_PRIVATE", "TOK_REAL", "TOK_RELATIVE_OID", "TOK_SEQUENCE",
771 "TOK_SET", "TOK_SIZE", "TOK_STRING", "TOK_SYNTAX", "TOK_T61String",
772 "TOK_TAGS", "TOK_TeletexString", "TOK_TRUE", "TOK_TYPE_IDENTIFIER",
773 "TOK_UNIQUE", "TOK_UNIVERSAL", "TOK_UniversalString", "TOK_UTCTime",
774 "TOK_UTF8String", "TOK_VideotexString", "TOK_VisibleString", "TOK_WITH",
775 "TOK_EXCEPT", "'^'", "TOK_INTERSECTION", "'|'", "TOK_UNION",
776 "TOK_TwoDots", "TOK_ThreeDots", "'{'", "'}'", "'('", "')'", "';'",
777 "','", "':'", "'['", "']'", "'!'", "'.'", "'<'", "'@'", "$accept",
vlmd3420d32006-09-14 10:35:20 +0000778 "ParsedGrammar", "ModuleList", "ModuleDefinition",
vlme745fcd2006-09-05 16:18:34 +0000779 "optObjectIdentifier", "ObjectIdentifier", "ObjectIdentifierBody",
vlmd3420d32006-09-14 10:35:20 +0000780 "ObjectIdentifierElement", "optModuleDefinitionFlags",
781 "ModuleDefinitionFlags", "ModuleDefinitionFlag", "optModuleBody",
782 "ModuleBody", "AssignmentList", "Assignment", "@1", "optImports",
783 "ImportsDefinition", "ImportsBundleSet", "AssignedIdentifier",
784 "ImportsBundle", "ImportsList", "ImportsElement", "optExports",
785 "ExportsDefinition", "ExportsBody", "ExportsElement", "ValueSet",
786 "ValueSetTypeAssignment", "DefinedType", "DataTypeReference",
787 "ParameterArgumentList", "ParameterArgumentName", "ActualParameterList",
788 "ActualParameter", "optComponentTypeLists", "ComponentTypeLists",
789 "ComponentType", "AlternativeTypeLists", "AlternativeType",
790 "ObjectClass", "optUnique", "FieldSpec", "ClassField", "optWithSyntax",
791 "WithSyntax", "@2", "WithSyntaxList", "WithSyntaxToken",
792 "ExtensionAndException", "Type", "NSTD_IndirectMarker",
793 "TypeDeclaration", "TypeDeclarationSet", "ComplexTypeReference",
794 "ComplexTypeReferenceAmpList", "ComplexTypeReferenceElement",
795 "PrimitiveFieldReference", "FieldName", "DefinedObjectClass",
796 "ValueDefinition", "Value", "@3", "SimpleValue", "DefinedValue",
797 "RestrictedCharacterStringValue", "Opaque", "BasicTypeId",
798 "BasicTypeId_UniverationCompatible", "BasicType", "BasicString",
799 "Union", "Intersection", "Except", "optConstraints", "Constraints",
800 "SetOfConstraints", "ElementSetSpecs", "ElementSetSpec",
vlm1aeaddd2006-07-13 08:24:20 +0000801 "ConstraintSubtypeElement", "@4", "ConstraintRangeSpec",
802 "ConstraintSpec", "SingleValue", "ContainedSubtype",
803 "InnerTypeConstraint", "WithComponentsList", "WithComponentsElement",
804 "optPresenceConstraint", "PresenceConstraint", "TableConstraint",
805 "SimpleTableConstraint", "ComponentRelationConstraint",
806 "AtNotationList", "AtNotationElement", "ComponentIdList", "optMarker",
807 "Marker", "UniverationDefinition", "UniverationList",
vlme745fcd2006-09-05 16:18:34 +0000808 "UniverationElement", "SignedNumber", "RealValue", "optTag", "Tag",
809 "TagTypeValue", "TagClass", "TagPlicit", "TypeRefName",
810 "ObjectClassReference", "optIdentifier", "Identifier", 0
vlm1aeaddd2006-07-13 08:24:20 +0000811};
812#endif
813
814# ifdef YYPRINT
815/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
816 token YYLEX-NUM. */
817static const unsigned short yytoknum[] =
818{
819 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
820 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
821 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
822 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
823 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
824 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
825 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
826 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
827 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
828 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
vlme745fcd2006-09-05 16:18:34 +0000829 355, 356, 94, 357, 124, 358, 359, 360, 123, 125,
830 40, 41, 59, 44, 58, 91, 93, 33, 46, 60,
831 64
vlm1aeaddd2006-07-13 08:24:20 +0000832};
833# endif
834
835/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
836static const unsigned char yyr1[] =
837{
vlme745fcd2006-09-05 16:18:34 +0000838 0, 121, 122, 123, 123, 124, 125, 125, 126, 126,
839 127, 127, 128, 128, 128, 129, 129, 130, 130, 131,
vlmd3420d32006-09-14 10:35:20 +0000840 131, 131, 131, 131, 132, 132, 133, 134, 134, 135,
841 135, 135, 136, 135, 135, 137, 137, 138, 138, 139,
842 139, 140, 140, 141, 142, 142, 143, 143, 143, 144,
843 144, 145, 145, 145, 146, 146, 147, 147, 147, 148,
844 149, 150, 150, 150, 151, 151, 151, 151, 152, 152,
845 153, 153, 153, 153, 153, 154, 154, 155, 155, 155,
846 155, 156, 156, 157, 157, 158, 158, 158, 158, 159,
847 159, 160, 160, 160, 161, 162, 162, 163, 163, 164,
848 164, 164, 164, 164, 164, 164, 165, 165, 167, 166,
849 168, 168, 169, 169, 169, 169, 170, 170, 170, 171,
850 172, 173, 174, 174, 174, 174, 174, 174, 174, 174,
851 174, 175, 175, 175, 175, 175, 175, 176, 176, 177,
852 178, 178, 179, 179, 179, 180, 181, 182, 182, 182,
853 183, 182, 182, 184, 184, 184, 184, 184, 184, 185,
854 185, 186, 186, 186, 187, 187, 188, 188, 188, 188,
855 188, 188, 188, 188, 188, 188, 188, 188, 188, 189,
856 189, 189, 190, 190, 191, 191, 191, 191, 191, 191,
857 191, 191, 191, 191, 191, 191, 191, 191, 192, 192,
858 193, 193, 194, 195, 195, 196, 196, 197, 197, 198,
859 198, 198, 198, 199, 199, 199, 199, 199, 200, 200,
860 200, 200, 200, 200, 200, 200, 200, 200, 201, 200,
861 202, 202, 202, 202, 203, 203, 204, 204, 204, 204,
862 204, 205, 206, 206, 207, 207, 208, 208, 209, 209,
863 210, 210, 210, 211, 211, 212, 213, 214, 214, 215,
864 215, 216, 216, 217, 217, 218, 218, 219, 219, 220,
865 220, 221, 221, 221, 221, 221, 222, 222, 223, 223,
866 224, 224, 225, 226, 227, 227, 227, 227, 228, 228,
867 228, 229, 229, 230, 231, 231, 232
vlm1aeaddd2006-07-13 08:24:20 +0000868};
869
870/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
871static const unsigned char yyr2[] =
872{
873 0, 2, 1, 1, 2, 8, 0, 1, 3, 2,
874 1, 2, 1, 4, 1, 0, 1, 1, 2, 2,
vlmd3420d32006-09-14 10:35:20 +0000875 2, 2, 2, 2, 0, 1, 3, 1, 2, 1,
876 1, 1, 0, 3, 1, 0, 1, 3, 2, 1,
877 2, 0, 1, 4, 1, 3, 1, 3, 1, 0,
878 1, 3, 3, 2, 1, 3, 1, 3, 1, 3,
879 4, 1, 1, 4, 3, 3, 6, 6, 1, 3,
880 1, 3, 3, 3, 3, 1, 3, 1, 1, 1,
881 1, 0, 1, 1, 3, 3, 2, 3, 1, 1,
882 3, 2, 1, 1, 5, 0, 1, 1, 3, 2,
883 4, 3, 3, 3, 3, 3, 0, 1, 0, 6,
884 1, 2, 1, 1, 1, 3, 1, 3, 3, 3,
885 0, 2, 1, 4, 4, 4, 6, 6, 1, 4,
886 3, 1, 3, 3, 3, 1, 3, 1, 3, 1,
887 1, 1, 1, 3, 3, 1, 4, 1, 1, 3,
888 0, 3, 1, 1, 1, 1, 1, 1, 1, 1,
889 3, 1, 1, 1, 1, 2, 1, 1, 1, 1,
890 2, 2, 1, 1, 2, 2, 1, 1, 1, 1,
891 1, 2, 1, 2, 1, 1, 1, 1, 1, 1,
vlm1aeaddd2006-07-13 08:24:20 +0000892 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
vlmd3420d32006-09-14 10:35:20 +0000893 1, 1, 1, 0, 1, 1, 4, 3, 4, 1,
894 1, 3, 5, 1, 3, 3, 3, 3, 4, 3,
895 1, 1, 3, 3, 3, 3, 1, 1, 0, 5,
896 1, 2, 2, 3, 1, 1, 1, 1, 1, 1,
897 1, 1, 3, 5, 1, 3, 1, 3, 0, 1,
898 1, 1, 1, 1, 1, 3, 4, 1, 3, 2,
899 3, 1, 3, 0, 1, 1, 2, 2, 3, 1,
900 3, 1, 4, 4, 1, 1, 1, 1, 1, 1,
901 0, 1, 2, 4, 0, 1, 1, 1, 0, 1,
902 1, 1, 1, 1, 0, 1, 1
vlm1aeaddd2006-07-13 08:24:20 +0000903};
904
905/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
906 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
907 means the default is an error. */
908static const unsigned short yydefact[] =
909{
vlmd3420d32006-09-14 10:35:20 +0000910 0, 291, 292, 0, 2, 3, 6, 1, 4, 0,
911 0, 7, 296, 14, 9, 0, 10, 12, 15, 8,
vlm1aeaddd2006-07-13 08:24:20 +0000912 11, 0, 0, 0, 0, 0, 0, 0, 16, 17,
vlmd3420d32006-09-14 10:35:20 +0000913 0, 23, 21, 19, 22, 20, 0, 18, 13, 49,
914 0, 0, 25, 35, 50, 0, 53, 0, 54, 56,
915 58, 5, 0, 0, 36, 52, 51, 0, 0, 38,
916 0, 39, 0, 44, 46, 48, 184, 0, 185, 186,
917 187, 188, 189, 197, 190, 191, 192, 193, 194, 195,
918 196, 26, 27, 31, 29, 30, 34, 0, 0, 55,
919 57, 37, 40, 0, 0, 0, 32, 28, 280, 131,
920 293, 0, 166, 0, 0, 180, 173, 177, 179, 167,
921 0, 0, 168, 172, 176, 0, 0, 62, 182, 169,
922 61, 178, 135, 0, 41, 45, 47, 33, 0, 284,
923 65, 64, 120, 281, 288, 0, 181, 175, 174, 171,
924 170, 0, 68, 0, 169, 70, 0, 280, 0, 183,
925 0, 0, 42, 43, 0, 286, 287, 285, 0, 0,
926 203, 290, 289, 282, 132, 134, 0, 0, 0, 0,
927 0, 60, 155, 161, 156, 276, 277, 162, 163, 153,
928 154, 80, 0, 75, 77, 78, 157, 158, 79, 275,
929 267, 0, 269, 274, 271, 140, 141, 136, 137, 139,
930 133, 152, 150, 146, 147, 148, 0, 159, 280, 280,
931 0, 97, 0, 128, 0, 0, 203, 203, 122, 121,
932 0, 0, 119, 204, 205, 280, 69, 74, 73, 72,
933 71, 279, 0, 0, 236, 235, 0, 234, 237, 0,
934 209, 0, 0, 239, 0, 210, 213, 0, 220, 221,
935 227, 226, 253, 254, 278, 238, 241, 240, 63, 280,
936 268, 0, 0, 0, 0, 0, 0, 145, 142, 0,
937 265, 263, 263, 263, 99, 264, 95, 263, 263, 106,
938 0, 283, 0, 280, 0, 280, 0, 280, 0, 0,
939 0, 0, 67, 66, 0, 0, 230, 0, 0, 0,
940 0, 0, 0, 59, 200, 201, 198, 199, 0, 0,
941 0, 202, 0, 0, 0, 0, 76, 270, 0, 0,
942 159, 138, 164, 151, 160, 149, 266, 104, 0, 103,
943 105, 96, 263, 101, 102, 0, 94, 107, 98, 0,
944 116, 0, 89, 92, 93, 280, 130, 0, 0, 82,
945 83, 88, 263, 280, 294, 0, 294, 0, 207, 0,
946 214, 228, 231, 232, 225, 223, 242, 0, 255, 219,
947 211, 215, 216, 217, 0, 224, 222, 0, 0, 257,
948 273, 272, 165, 143, 144, 100, 0, 129, 0, 123,
949 280, 91, 280, 124, 280, 86, 263, 280, 295, 125,
950 280, 206, 208, 0, 233, 246, 0, 244, 203, 0,
951 218, 0, 259, 261, 256, 0, 108, 117, 118, 90,
952 87, 84, 85, 120, 120, 229, 243, 0, 248, 212,
953 260, 0, 258, 0, 126, 127, 245, 251, 252, 250,
954 247, 249, 262, 112, 113, 0, 0, 110, 114, 0,
955 109, 111, 115
vlm1aeaddd2006-07-13 08:24:20 +0000956};
957
958/* YYDEFGOTO[NTERM-NUM]. */
959static const short yydefgoto[] =
960{
961 -1, 3, 4, 5, 10, 11, 15, 16, 27, 28,
vlmd3420d32006-09-14 10:35:20 +0000962 29, 41, 42, 81, 82, 127, 53, 54, 60, 153,
963 61, 62, 63, 43, 44, 47, 48, 181, 83, 116,
964 84, 141, 142, 182, 183, 348, 349, 350, 341, 342,
965 130, 332, 210, 211, 336, 337, 433, 446, 447, 351,
966 352, 159, 160, 219, 117, 197, 198, 448, 272, 273,
967 85, 203, 264, 204, 205, 243, 323, 118, 119, 120,
968 121, 309, 310, 312, 222, 223, 224, 244, 245, 246,
969 403, 298, 247, 248, 249, 250, 406, 407, 440, 441,
970 251, 252, 253, 378, 379, 412, 274, 275, 149, 191,
971 192, 254, 255, 132, 133, 134, 158, 163, 256, 122,
972 397, 257
vlm1aeaddd2006-07-13 08:24:20 +0000973};
974
975/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
976 STATE-NUM. */
vlmd3420d32006-09-14 10:35:20 +0000977#define YYPACT_NINF -357
vlm1aeaddd2006-07-13 08:24:20 +0000978static const short yypact[] =
979{
vlmd3420d32006-09-14 10:35:20 +0000980 83, -357, -357, 18, 83, -357, -80, -357, -357, 64,
981 3, -357, -357, -357, -357, 74, -357, 2, 266, -357,
982 -357, 139, 100, 88, 90, 148, 142, 230, 266, -357,
983 135, -357, -357, -357, -357, -357, 242, -357, -357, 127,
984 53, 233, -357, 238, -357, 177, -357, 80, -357, 199,
985 -357, -357, 173, 256, -357, -357, -357, 213, 206, -357,
986 55, -357, 8, -357, 211, -357, -357, 308, -357, -357,
987 -357, -357, -357, -357, -357, -357, -357, -357, -357, -357,
988 -357, 256, -357, -357, -357, -357, -357, 345, 641, -357,
989 -357, -357, -357, 83, 213, 217, -357, -357, -23, 222,
990 -357, 257, -357, 271, 276, -357, -357, -357, -357, -357,
991 303, 281, -357, -357, -357, 717, 359, 261, -357, 262,
992 -357, -357, 253, 372, -80, -357, -357, -357, 269, 6,
993 -357, -357, -357, -357, 134, 213, -357, -357, -357, -357,
994 -357, 89, -357, 264, -357, 273, 272, 95, 69, -357,
995 277, 205, -357, -357, 300, -357, -357, -357, 373, 565,
996 -61, -357, -357, -357, -357, -357, 381, 717, 213, 213,
997 445, -357, -357, -357, -357, -357, -357, -357, -357, -357,
998 -357, -357, 92, -357, -357, -357, -357, -357, -357, -357,
999 -357, 114, -357, -357, 278, -357, -357, 274, -357, -357,
1000 -357, -357, -357, -357, -357, -357, 275, 282, 72, 40,
1001 117, -357, 279, 351, 293, 330, 87, 99, -357, -357,
1002 294, 445, -357, -357, 295, -23, -357, -357, -357, -357,
1003 -357, -357, 305, 377, -357, -357, -79, -357, -357, 287,
1004 -357, 83, 445, -357, 301, 229, 310, 302, -79, -357,
1005 -357, -357, 312, -357, -357, -357, -357, -357, -357, 95,
1006 -357, 27, 270, 311, 414, 412, 205, -357, -357, 205,
1007 -357, 116, 126, 116, -357, -357, 332, 126, 116, 323,
1008 300, -357, 398, 41, 334, 4, 356, 4, 357, 445,
1009 320, 445, -357, -357, 491, 324, 315, 331, 225, 326,
1010 337, 329, 328, -357, -357, -357, -357, -357, 339, 491,
1011 491, -357, 491, 445, 291, 327, -357, -357, 338, 340,
1012 -357, -357, -357, 443, -357, -357, -357, -357, 346, -357,
1013 -357, -357, 116, -357, -357, 363, -357, -357, -357, 412,
1014 347, 138, -357, -357, -357, 348, -357, 389, 360, 352,
1015 -357, -357, 116, 348, 412, 362, 412, 355, -357, 369,
1016 -357, -357, -357, 349, -357, -357, 295, 51, -357, -357,
1017 370, -357, -357, -357, 371, -357, -357, 10, 145, -357,
1018 -357, -357, -357, -357, -357, -357, 376, -357, 270, -357,
1019 41, -357, 348, -357, 46, -357, 116, 348, -357, -357,
1020 348, -357, -357, 414, -357, -357, 174, -357, -61, 463,
1021 -357, 412, 368, -357, -357, 327, -357, -357, -357, -357,
1022 -357, -357, -357, -357, -357, 443, -357, 51, 130, 234,
1023 368, 412, -357, 28, -357, -357, -357, -357, -357, -357,
1024 -357, -357, -357, -357, -357, 28, 48, -357, -357, 16,
1025 -357, -357, -357
vlm1aeaddd2006-07-13 08:24:20 +00001026};
1027
1028/* YYPGOTO[NTERM-NUM]. */
1029static const short yypgoto[] =
1030{
vlmd3420d32006-09-14 10:35:20 +00001031 -357, -357, -357, 483, -357, 364, -357, 474, -357, -357,
1032 462, -357, -357, -357, 410, -357, -357, -357, -357, -357,
1033 432, -357, 399, -357, -357, -357, 437, 366, -357, -62,
1034 -357, -357, 341, -357, 250, 210, -357, 121, -357, 120,
1035 292, -357, -357, 236, -357, -357, -357, 73, -356, -272,
1036 -84, -357, -58, -357, 235, -357, 258, -146, 313, 314,
1037 -357, -21, -357, -124, -255, -122, 122, -38, -1, -357,
1038 34, -357, -357, -357, -214, -357, 221, -25, 115, -69,
1039 -357, 280, -357, -207, -357, -357, -357, 104, -357, -357,
1040 -357, -357, -357, -357, 111, 123, -256, -357, -357, -357,
1041 283, -139, -357, -138, -357, -357, -357, -357, 1, -357,
1042 176, -9
vlm1aeaddd2006-07-13 08:24:20 +00001043};
1044
1045/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
1046 positive, shift that token. If negative, reduce the rule which
1047 number is the opposite. If zero, do what YYDEFACT says.
1048 If YYTABLE_NINF, parse error. */
vlmd3420d32006-09-14 10:35:20 +00001049#define YYTABLE_NINF -264
vlm1aeaddd2006-07-13 08:24:20 +00001050static const short yytable[] =
1051{
vlmd3420d32006-09-14 10:35:20 +00001052 17, 6, 286, 288, 199, 6, 17, 318, 187, 193,
1053 128, 343, 187, 12, 131, 327, 329, 330, 7, 12,
1054 443, 333, 334, 185, 220, 186, 123, 296, 9, 186,
1055 155, 50, 443, 195, 196, 444, 12, 175, 176, 347,
1056 297, 49, 18, 65, 88, 195, 196, 444, 50, 221,
1057 12, 65, 443, 64, 87, 12, 267, 268, 49, 93,
1058 12, 64, 12, 184, 12, 195, 196, 444, 1, 2,
1059 1, 2, 88, 12, 13, 45, 385, 143, 12, 175,
1060 176, 347, 87, 12, 13, 65, 156, 86, 267, 268,
1061 451, 365, 129, 451, 124, 64, 395, 218, 1, 2,
1062 157, 172, 173, 174, 12, 175, 176, 376, 177, 178,
1063 269, 340, 21, -81, 144, 86, 145, 199, 343, 129,
1064 187, 94, 193, 319, 271, 276, 165, 187, 411, 143,
1065 187, 445, 452, 417, 189, 185, 164, 186, 188, 194,
1066 422, 293, 207, 445, 186, 179, 270, 186, 340, 30,
1067 437, 200, 206, 340, 269, 129, 129, 450, 405, 228,
1068 230, 129, 31, 445, 269, 46, 144, 91, 145, 227,
1069 229, -24, 220, 14, 40, 184, 189, 32, 190, 33,
1070 161, -263, 12, 19, 220, -263, 180, 129, 1, 2,
1071 270, 162, 56, 57, 428, 285, 290, 221, 166, 344,
1072 270, 258, 167, 170, 438, 259, 34, 287, 439, 221,
1073 129, 172, 173, 174, 12, 175, 176, 302, 177, 178,
1074 1, 2, 12, 260, 59, 360, 279, 261, 1, 2,
1075 280, 35, 173, 36, 12, 175, 176, 231, 177, 178,
1076 371, 372, 301, 373, 328, 325, 38, 389, 326, 418,
1077 188, 390, 194, 320, 414, 179, 324, 207, 415, 423,
1078 207, 391, 424, 206, 357, 12, 359, 206, 39, 396,
1079 206, 1, 2, 201, 345, 234, 353, 51, 353, 12,
1080 175, 176, 22, 426, 66, 1, 2, 427, 374, 55,
1081 364, 23, 1, 2, 195, 196, 180, 52, 173, 67,
1082 12, 175, 176, 231, 177, 178, 344, 58, 420, 68,
1083 69, 70, 24, 202, 25, 90, 238, 208, 209, 95,
1084 71, 299, 300, 26, 96, 72, 126, 73, 195, 196,
1085 387, 304, 305, 306, 307, 74, 304, 305, 306, 307,
1086 135, 234, 308, 136, 75, 398, 76, 398, 98, 99,
1087 100, 77, 138, 78, 79, 80, 375, 137, 408, 139,
1088 99, 100, 146, 383, 384, 434, 435, 140, 413, 147,
1089 148, 150, 101, 66, 102, 151, 103, 154, 168, 320,
1090 170, 345, 238, 212, 225, 353, 104, 169, 262, 206,
1091 105, 282, 263, 265, 106, 281, 266, 107, 68, 69,
1092 70, 283, 413, 284, 289, 291, 294, 295, 108, 71,
1093 303, 311, 313, 109, 72, 110, 73, 111, 408, 322,
1094 315, 12, 442, 335, 74, 331, 112, 113, 339, 354,
1095 356, 358, 361, 75, 362, 76, 221, 363, 368, 369,
1096 77, 114, 78, 79, 80, 367, 370, 377, 382, 380,
1097 386, 381, 173, 115, 12, 175, 176, 231, 177, 178,
1098 1, 2, 392, 129, 388, 394, 401, 232, 404, 393,
1099 173, 399, 12, 175, 176, 231, 177, 178, 1, 2,
1100 402, 233, 410, 409, 416, 232, 431, 8, 152, 20,
1101 37, 97, 92, 125, 89, 234, 235, 355, 173, 233,
1102 12, 175, 176, 231, 177, 178, 1, 2, 226, 316,
1103 419, 236, 171, 234, 235, 421, 338, 292, 449, 346,
1104 366, 321, 277, 278, 429, 425, 432, 233, 314, 236,
1105 237, 436, 400, 0, 430, 0, 238, 0, 0, 0,
1106 0, 234, 235, 0, 317, 239, 0, 0, 237, 0,
1107 0, 0, 240, 241, 238, 242, 0, 236, 0, 0,
1108 0, 0, 0, 239, 0, 0, 0, 0, 0, 0,
1109 0, 241, 0, 242, 0, 0, 237, 0, 0, 0,
1110 99, 100, 238, 0, 0, 0, 0, 0, 213, 0,
1111 0, 239, 101, 66, 102, 0, 103, 214, 0, 241,
1112 0, 242, 0, 0, 0, 0, 104, 0, 0, 0,
1113 105, 0, 0, 0, 106, 0, 0, 107, 68, 69,
1114 70, 0, 0, 0, 0, 0, 215, 0, 108, 71,
1115 0, 0, 0, 109, 72, 110, 73, 111, 0, 0,
1116 0, 0, 0, 0, 74, 0, 112, 113, 216, 217,
1117 0, 0, 0, 75, 0, 76, 99, 100, 0, 0,
1118 77, 114, 78, 79, 80, 0, 0, 0, 101, 66,
1119 102, 0, 103, 0, 0, 0, 0, 0, 0, 0,
1120 0, 0, 104, 0, 0, 0, 105, 0, 0, 0,
1121 106, 0, 0, 107, 68, 69, 70, 0, 0, 0,
1122 0, 0, 0, 0, 108, 71, 0, 0, 0, 109,
1123 72, 110, 73, 111, 0, 0, 0, 0, 0, 0,
1124 74, 0, 112, 113, 0, 0, 0, 0, 0, 75,
1125 0, 76, 1, 2, 0, 0, 77, 114, 78, 79,
1126 80, 0, 0, 0, 101, 66, 102, 0, 103, 0,
1127 0, 0, 0, 0, 0, 0, 0, 0, 104, 0,
1128 0, 0, 105, 0, 0, 0, 106, 0, 0, 107,
1129 68, 69, 70, 0, 0, 0, 0, 0, 0, 0,
1130 108, 71, 0, 0, 0, 109, 72, 110, 73, 111,
1131 0, 0, 0, 0, 0, 0, 74, 0, 112, 113,
1132 0, 0, 0, 0, 0, 75, 0, 76, 0, 0,
1133 0, 0, 77, 114, 78, 79, 80
vlm1aeaddd2006-07-13 08:24:20 +00001134};
1135
1136static const short yycheck[] =
1137{
vlmd3420d32006-09-14 10:35:20 +00001138 9, 0, 216, 217, 150, 4, 15, 262, 147, 148,
1139 33, 283, 151, 9, 98, 271, 272, 273, 0, 9,
1140 4, 277, 278, 147, 85, 147, 88, 106, 108, 151,
1141 24, 40, 4, 17, 18, 19, 9, 10, 11, 35,
1142 119, 40, 39, 52, 53, 17, 18, 19, 57, 110,
1143 9, 60, 4, 52, 53, 9, 16, 17, 57, 51,
1144 9, 60, 9, 147, 9, 17, 18, 19, 15, 16,
1145 15, 16, 81, 9, 10, 22, 332, 115, 9, 10,
1146 11, 35, 81, 9, 10, 94, 80, 53, 16, 17,
1147 446, 298, 115, 449, 93, 94, 352, 159, 15, 16,
1148 94, 6, 7, 8, 9, 10, 11, 314, 13, 14,
1149 38, 107, 110, 109, 115, 81, 115, 263, 390, 115,
1150 259, 113, 261, 262, 208, 209, 135, 266, 118, 167,
1151 269, 115, 116, 388, 107, 259, 135, 259, 147, 148,
1152 396, 225, 151, 115, 266, 50, 74, 269, 107, 10,
1153 20, 150, 151, 107, 38, 115, 115, 109, 107, 168,
1154 169, 115, 62, 115, 38, 112, 167, 112, 167, 168,
1155 169, 44, 85, 109, 47, 259, 107, 89, 109, 89,
1156 46, 109, 9, 109, 85, 113, 91, 115, 15, 16,
1157 74, 57, 112, 113, 408, 108, 221, 110, 109, 283,
1158 74, 109, 113, 108, 74, 113, 58, 108, 78, 110,
1159 115, 6, 7, 8, 9, 10, 11, 242, 13, 14,
1160 15, 16, 9, 109, 51, 294, 109, 113, 15, 16,
1161 113, 89, 7, 3, 9, 10, 11, 12, 13, 14,
1162 309, 310, 241, 312, 118, 266, 111, 109, 269, 388,
1163 259, 113, 261, 262, 109, 50, 265, 266, 113, 397,
1164 269, 345, 400, 262, 289, 9, 291, 266, 26, 353,
1165 269, 15, 16, 68, 283, 50, 285, 44, 287, 9,
1166 10, 11, 16, 109, 28, 15, 16, 113, 313, 112,
1167 65, 25, 15, 16, 17, 18, 91, 59, 7, 43,
1168 9, 10, 11, 12, 13, 14, 390, 108, 392, 53,
1169 54, 55, 46, 108, 48, 109, 91, 17, 18, 108,
1170 64, 34, 35, 57, 16, 69, 109, 71, 17, 18,
1171 339, 102, 103, 104, 105, 79, 102, 103, 104, 105,
1172 118, 50, 113, 86, 88, 354, 90, 356, 3, 15,
1173 16, 95, 76, 97, 98, 99, 65, 86, 367, 56,
1174 15, 16, 3, 17, 18, 423, 424, 86, 377, 108,
1175 108, 118, 27, 28, 29, 3, 31, 108, 114, 388,
1176 108, 390, 91, 10, 3, 394, 41, 114, 110, 388,
1177 45, 40, 118, 118, 49, 116, 114, 52, 53, 54,
1178 55, 108, 411, 73, 110, 110, 101, 30, 63, 64,
1179 109, 101, 110, 68, 69, 70, 71, 72, 427, 5,
1180 108, 9, 431, 100, 79, 93, 81, 82, 30, 73,
1181 73, 111, 108, 88, 119, 90, 110, 106, 109, 111,
1182 95, 96, 97, 98, 99, 108, 107, 120, 5, 111,
1183 87, 111, 7, 108, 9, 10, 11, 12, 13, 14,
1184 15, 16, 73, 115, 117, 113, 111, 22, 119, 109,
1185 7, 109, 9, 10, 11, 12, 13, 14, 15, 16,
1186 111, 36, 111, 113, 108, 22, 118, 4, 124, 15,
1187 28, 81, 60, 94, 57, 50, 51, 287, 7, 36,
1188 9, 10, 11, 12, 13, 14, 15, 16, 167, 259,
1189 390, 66, 146, 50, 51, 394, 280, 225, 445, 284,
1190 299, 263, 209, 209, 409, 403, 415, 36, 248, 66,
1191 85, 427, 356, -1, 411, -1, 91, -1, -1, -1,
1192 -1, 50, 51, -1, 261, 100, -1, -1, 85, -1,
1193 -1, -1, 107, 108, 91, 110, -1, 66, -1, -1,
1194 -1, -1, -1, 100, -1, -1, -1, -1, -1, -1,
1195 -1, 108, -1, 110, -1, -1, 85, -1, -1, -1,
1196 15, 16, 91, -1, -1, -1, -1, -1, 23, -1,
1197 -1, 100, 27, 28, 29, -1, 31, 32, -1, 108,
1198 -1, 110, -1, -1, -1, -1, 41, -1, -1, -1,
1199 45, -1, -1, -1, 49, -1, -1, 52, 53, 54,
1200 55, -1, -1, -1, -1, -1, 61, -1, 63, 64,
1201 -1, -1, -1, 68, 69, 70, 71, 72, -1, -1,
1202 -1, -1, -1, -1, 79, -1, 81, 82, 83, 84,
1203 -1, -1, -1, 88, -1, 90, 15, 16, -1, -1,
1204 95, 96, 97, 98, 99, -1, -1, -1, 27, 28,
1205 29, -1, 31, -1, -1, -1, -1, -1, -1, -1,
1206 -1, -1, 41, -1, -1, -1, 45, -1, -1, -1,
1207 49, -1, -1, 52, 53, 54, 55, -1, -1, -1,
1208 -1, -1, -1, -1, 63, 64, -1, -1, -1, 68,
1209 69, 70, 71, 72, -1, -1, -1, -1, -1, -1,
1210 79, -1, 81, 82, -1, -1, -1, -1, -1, 88,
1211 -1, 90, 15, 16, -1, -1, 95, 96, 97, 98,
1212 99, -1, -1, -1, 27, 28, 29, -1, 31, -1,
1213 -1, -1, -1, -1, -1, -1, -1, -1, 41, -1,
1214 -1, -1, 45, -1, -1, -1, 49, -1, -1, 52,
1215 53, 54, 55, -1, -1, -1, -1, -1, -1, -1,
1216 63, 64, -1, -1, -1, 68, 69, 70, 71, 72,
1217 -1, -1, -1, -1, -1, -1, 79, -1, 81, 82,
1218 -1, -1, -1, -1, -1, 88, -1, 90, -1, -1,
1219 -1, -1, 95, 96, 97, 98, 99
vlm1aeaddd2006-07-13 08:24:20 +00001220};
1221
1222/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1223 symbol of state STATE-NUM. */
1224static const unsigned char yystos[] =
1225{
vlmd3420d32006-09-14 10:35:20 +00001226 0, 15, 16, 122, 123, 124, 229, 0, 124, 108,
1227 125, 126, 9, 10, 109, 127, 128, 232, 39, 109,
vlme745fcd2006-09-05 16:18:34 +00001228 128, 110, 16, 25, 46, 48, 57, 129, 130, 131,
1229 10, 62, 89, 89, 58, 89, 3, 131, 111, 26,
vlmd3420d32006-09-14 10:35:20 +00001230 47, 132, 133, 144, 145, 22, 112, 146, 147, 229,
1231 232, 44, 59, 137, 138, 112, 112, 113, 108, 51,
1232 139, 141, 142, 143, 229, 232, 28, 43, 53, 54,
1233 55, 64, 69, 71, 79, 88, 90, 95, 97, 98,
1234 99, 134, 135, 149, 151, 181, 191, 229, 232, 147,
1235 109, 112, 141, 51, 113, 108, 16, 135, 3, 15,
1236 16, 27, 29, 31, 41, 45, 49, 52, 63, 68,
1237 70, 72, 81, 82, 96, 108, 150, 175, 188, 189,
1238 190, 191, 230, 150, 229, 143, 109, 136, 33, 115,
1239 161, 171, 224, 225, 226, 118, 86, 86, 76, 56,
1240 86, 152, 153, 188, 189, 229, 3, 108, 108, 219,
1241 118, 3, 126, 140, 108, 24, 80, 94, 227, 172,
1242 173, 46, 57, 228, 229, 232, 109, 113, 114, 114,
1243 108, 148, 6, 7, 8, 10, 11, 13, 14, 50,
1244 91, 148, 154, 155, 171, 184, 186, 222, 232, 107,
1245 109, 220, 221, 222, 232, 17, 18, 176, 177, 178,
1246 229, 68, 108, 182, 184, 185, 229, 232, 17, 18,
1247 163, 164, 10, 23, 32, 61, 83, 84, 150, 174,
1248 85, 110, 195, 196, 197, 3, 153, 229, 232, 229,
1249 232, 12, 22, 36, 50, 51, 66, 85, 91, 100,
1250 107, 108, 110, 186, 198, 199, 200, 203, 204, 205,
1251 206, 211, 212, 213, 222, 223, 229, 232, 109, 113,
1252 109, 113, 110, 118, 183, 118, 114, 16, 17, 38,
1253 74, 171, 179, 180, 217, 218, 171, 179, 180, 109,
1254 113, 116, 40, 108, 73, 108, 195, 108, 195, 110,
1255 198, 110, 161, 171, 101, 30, 106, 119, 202, 34,
1256 35, 229, 198, 109, 102, 103, 104, 105, 113, 192,
1257 193, 101, 194, 110, 202, 108, 155, 221, 185, 222,
1258 232, 177, 5, 187, 232, 182, 182, 217, 118, 217,
1259 217, 93, 162, 217, 217, 100, 165, 166, 164, 30,
1260 107, 159, 160, 170, 171, 232, 175, 35, 156, 157,
1261 158, 170, 171, 232, 73, 156, 73, 198, 111, 198,
1262 200, 108, 119, 106, 65, 204, 197, 108, 109, 111,
1263 107, 200, 200, 200, 198, 65, 204, 120, 214, 215,
1264 111, 111, 5, 17, 18, 217, 87, 232, 117, 109,
1265 113, 171, 73, 109, 113, 217, 171, 231, 232, 109,
1266 231, 111, 111, 201, 119, 107, 207, 208, 232, 113,
1267 111, 118, 216, 232, 109, 113, 108, 185, 222, 160,
1268 171, 158, 217, 224, 224, 187, 109, 113, 195, 199,
1269 216, 118, 215, 167, 173, 173, 208, 20, 74, 78,
1270 209, 210, 232, 4, 19, 115, 168, 169, 178, 168,
1271 109, 169, 116
vlm1aeaddd2006-07-13 08:24:20 +00001272};
1273
1274#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1275# define YYSIZE_T __SIZE_TYPE__
1276#endif
1277#if ! defined (YYSIZE_T) && defined (size_t)
1278# define YYSIZE_T size_t
1279#endif
1280#if ! defined (YYSIZE_T)
1281# if defined (__STDC__) || defined (__cplusplus)
1282# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1283# define YYSIZE_T size_t
1284# endif
1285#endif
1286#if ! defined (YYSIZE_T)
1287# define YYSIZE_T unsigned int
1288#endif
vlmfa67ddc2004-06-03 03:38:44 +00001289
1290#define yyerrok (yyerrstatus = 0)
1291#define yyclearin (yychar = YYEMPTY)
vlm0c6d3812006-03-21 03:40:38 +00001292#define YYEMPTY -2
vlmfa67ddc2004-06-03 03:38:44 +00001293#define YYEOF 0
vlm1aeaddd2006-07-13 08:24:20 +00001294
vlmfa67ddc2004-06-03 03:38:44 +00001295#define YYACCEPT goto yyacceptlab
vlm1aeaddd2006-07-13 08:24:20 +00001296#define YYABORT goto yyabortlab
vlm0c6d3812006-03-21 03:40:38 +00001297#define YYERROR goto yyerrlab1
vlm1aeaddd2006-07-13 08:24:20 +00001298
1299/* Like YYERROR except do call yyerror. This remains here temporarily
1300 to ease the transition to the new meaning of YYERROR, for GCC.
vlmfa67ddc2004-06-03 03:38:44 +00001301 Once GCC version 2 has supplanted version 1, this can go. */
vlm1aeaddd2006-07-13 08:24:20 +00001302
vlmfa67ddc2004-06-03 03:38:44 +00001303#define YYFAIL goto yyerrlab
vlm1aeaddd2006-07-13 08:24:20 +00001304
vlmfa67ddc2004-06-03 03:38:44 +00001305#define YYRECOVERING() (!!yyerrstatus)
vlm1aeaddd2006-07-13 08:24:20 +00001306
1307#define YYBACKUP(Token, Value) \
vlmfa67ddc2004-06-03 03:38:44 +00001308do \
1309 if (yychar == YYEMPTY && yylen == 1) \
vlm1aeaddd2006-07-13 08:24:20 +00001310 { \
1311 yychar = (Token); \
1312 yylval = (Value); \
vlm0c6d3812006-03-21 03:40:38 +00001313 yychar1 = YYTRANSLATE (yychar); \
vlmfa67ddc2004-06-03 03:38:44 +00001314 YYPOPSTACK; \
1315 goto yybackup; \
1316 } \
1317 else \
vlm1aeaddd2006-07-13 08:24:20 +00001318 { \
1319 yyerror ("syntax error: cannot back up"); \
1320 YYERROR; \
1321 } \
vlmfa67ddc2004-06-03 03:38:44 +00001322while (0)
1323
1324#define YYTERROR 1
1325#define YYERRCODE 256
1326
vlm1aeaddd2006-07-13 08:24:20 +00001327/* YYLLOC_DEFAULT -- Compute the default location (before the actions
1328 are run). */
1329
1330#ifndef YYLLOC_DEFAULT
1331# define YYLLOC_DEFAULT(Current, Rhs, N) \
1332 Current.first_line = Rhs[1].first_line; \
1333 Current.first_column = Rhs[1].first_column; \
1334 Current.last_line = Rhs[N].last_line; \
1335 Current.last_column = Rhs[N].last_column;
vlmfa67ddc2004-06-03 03:38:44 +00001336#endif
1337
vlm1aeaddd2006-07-13 08:24:20 +00001338/* YYLEX -- calling `yylex' with the right arguments. */
vlm7e436752006-03-18 06:53:11 +00001339
vlm1aeaddd2006-07-13 08:24:20 +00001340#define YYLEX yylex ()
vlm7e436752006-03-18 06:53:11 +00001341
vlm1aeaddd2006-07-13 08:24:20 +00001342/* Enable debugging if requested. */
1343#if YYDEBUG
vlm7e436752006-03-18 06:53:11 +00001344
vlm1aeaddd2006-07-13 08:24:20 +00001345# ifndef YYFPRINTF
1346# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1347# define YYFPRINTF fprintf
1348# endif
vlm7e436752006-03-18 06:53:11 +00001349
vlm1aeaddd2006-07-13 08:24:20 +00001350# define YYDPRINTF(Args) \
1351do { \
1352 if (yydebug) \
1353 YYFPRINTF Args; \
1354} while (0)
1355# define YYDSYMPRINT(Args) \
1356do { \
1357 if (yydebug) \
1358 yysymprint Args; \
1359} while (0)
1360/* Nonzero means print parse trace. It is left uninitialized so that
1361 multiple parsers can coexist. */
1362int yydebug;
1363#else /* !YYDEBUG */
1364# define YYDPRINTF(Args)
1365# define YYDSYMPRINT(Args)
1366#endif /* !YYDEBUG */
vlm7e436752006-03-18 06:53:11 +00001367
vlm1aeaddd2006-07-13 08:24:20 +00001368/* YYINITDEPTH -- initial size of the parser's stacks. */
vlmfa67ddc2004-06-03 03:38:44 +00001369#ifndef YYINITDEPTH
vlm1aeaddd2006-07-13 08:24:20 +00001370# define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +00001371#endif
1372
vlm1aeaddd2006-07-13 08:24:20 +00001373/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1374 if the built-in stack extension method is used).
1375
1376 Do not make this value too large; the results are undefined if
1377 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
1378 evaluated with infinite-precision integer arithmetic. */
vlmfa67ddc2004-06-03 03:38:44 +00001379
vlm0c6d3812006-03-21 03:40:38 +00001380#if YYMAXDEPTH == 0
vlm1aeaddd2006-07-13 08:24:20 +00001381# undef YYMAXDEPTH
vlm0c6d3812006-03-21 03:40:38 +00001382#endif
vlmfa67ddc2004-06-03 03:38:44 +00001383
1384#ifndef YYMAXDEPTH
vlm1aeaddd2006-07-13 08:24:20 +00001385# define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +00001386#endif
vlm1aeaddd2006-07-13 08:24:20 +00001387
vlmfa67ddc2004-06-03 03:38:44 +00001388
vlmfa67ddc2004-06-03 03:38:44 +00001389
vlm1aeaddd2006-07-13 08:24:20 +00001390#if YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00001391
vlm1aeaddd2006-07-13 08:24:20 +00001392# ifndef yystrlen
1393# if defined (__GLIBC__) && defined (_STRING_H)
1394# define yystrlen strlen
1395# else
1396/* Return the length of YYSTR. */
1397static YYSIZE_T
1398# if defined (__STDC__) || defined (__cplusplus)
1399yystrlen (const char *yystr)
1400# else
1401yystrlen (yystr)
1402 const char *yystr;
1403# endif
vlm0c6d3812006-03-21 03:40:38 +00001404{
vlm1aeaddd2006-07-13 08:24:20 +00001405 register const char *yys = yystr;
vlm0c6d3812006-03-21 03:40:38 +00001406
vlm1aeaddd2006-07-13 08:24:20 +00001407 while (*yys++ != '\0')
1408 continue;
1409
1410 return yys - yystr - 1;
1411}
1412# endif
1413# endif
1414
1415# ifndef yystpcpy
1416# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1417# define yystpcpy stpcpy
1418# else
1419/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1420 YYDEST. */
1421static char *
1422# if defined (__STDC__) || defined (__cplusplus)
1423yystpcpy (char *yydest, const char *yysrc)
1424# else
1425yystpcpy (yydest, yysrc)
1426 char *yydest;
1427 const char *yysrc;
1428# endif
1429{
1430 register char *yyd = yydest;
1431 register const char *yys = yysrc;
1432
1433 while ((*yyd++ = *yys++) != '\0')
1434 continue;
1435
1436 return yyd - 1;
1437}
1438# endif
1439# endif
1440
1441#endif /* !YYERROR_VERBOSE */
1442
1443
1444
1445#if YYDEBUG
1446/*-----------------------------.
1447| Print this symbol on YYOUT. |
1448`-----------------------------*/
1449
1450static void
1451#if defined (__STDC__) || defined (__cplusplus)
1452yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue)
1453#else
1454yysymprint (yyout, yytype, yyvalue)
1455 FILE* yyout;
1456 int yytype;
1457 YYSTYPE yyvalue;
1458#endif
1459{
1460 /* Pacify ``unused variable'' warnings. */
1461 (void) yyvalue;
1462
1463 if (yytype < YYNTOKENS)
1464 {
1465 YYFPRINTF (yyout, "token %s (", yytname[yytype]);
1466# ifdef YYPRINT
1467 YYPRINT (yyout, yytoknum[yytype], yyvalue);
1468# endif
1469 }
1470 else
1471 YYFPRINTF (yyout, "nterm %s (", yytname[yytype]);
1472
1473 switch (yytype)
1474 {
1475 default:
1476 break;
1477 }
1478 YYFPRINTF (yyout, ")");
1479}
1480#endif /* YYDEBUG. */
1481
1482
1483/*-----------------------------------------------.
1484| Release the memory associated to this symbol. |
1485`-----------------------------------------------*/
1486
1487static void
1488#if defined (__STDC__) || defined (__cplusplus)
1489yydestruct (int yytype, YYSTYPE yyvalue)
1490#else
1491yydestruct (yytype, yyvalue)
1492 int yytype;
1493 YYSTYPE yyvalue;
1494#endif
1495{
1496 /* Pacify ``unused variable'' warnings. */
1497 (void) yyvalue;
1498
1499 switch (yytype)
1500 {
1501 default:
1502 break;
1503 }
vlm0c6d3812006-03-21 03:40:38 +00001504}
1505
vlm7e436752006-03-18 06:53:11 +00001506
1507
vlm0c6d3812006-03-21 03:40:38 +00001508/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1509 into yyparse. The argument should have type void *.
1510 It should actually point to an object.
1511 Grammar actions can access the variable by casting it
1512 to the proper pointer type. */
vlm7e436752006-03-18 06:53:11 +00001513
1514#ifdef YYPARSE_PARAM
vlm1aeaddd2006-07-13 08:24:20 +00001515# if defined (__STDC__) || defined (__cplusplus)
1516# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1517# define YYPARSE_PARAM_DECL
1518# else
1519# define YYPARSE_PARAM_ARG YYPARSE_PARAM
1520# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1521# endif
1522#else /* !YYPARSE_PARAM */
1523# define YYPARSE_PARAM_ARG
1524# define YYPARSE_PARAM_DECL
1525#endif /* !YYPARSE_PARAM */
vlm0c6d3812006-03-21 03:40:38 +00001526
1527/* Prevent warning if -Wstrict-prototypes. */
1528#ifdef __GNUC__
vlm1aeaddd2006-07-13 08:24:20 +00001529# ifdef YYPARSE_PARAM
vlm0c6d3812006-03-21 03:40:38 +00001530int yyparse (void *);
vlm1aeaddd2006-07-13 08:24:20 +00001531# else
vlmfa67ddc2004-06-03 03:38:44 +00001532int yyparse (void);
vlm1aeaddd2006-07-13 08:24:20 +00001533# endif
vlm7e436752006-03-18 06:53:11 +00001534#endif
vlm1aeaddd2006-07-13 08:24:20 +00001535
1536
1537/* The lookahead symbol. */
1538int yychar;
1539
1540/* The semantic value of the lookahead symbol. */
1541YYSTYPE yylval;
1542
1543/* Number of parse errors so far. */
1544int yynerrs;
1545
vlm7e436752006-03-18 06:53:11 +00001546
vlm7e436752006-03-18 06:53:11 +00001547int
vlm1aeaddd2006-07-13 08:24:20 +00001548yyparse (YYPARSE_PARAM_ARG)
vlm0c6d3812006-03-21 03:40:38 +00001549 YYPARSE_PARAM_DECL
vlm7e436752006-03-18 06:53:11 +00001550{
vlm1aeaddd2006-07-13 08:24:20 +00001551
vlm0c6d3812006-03-21 03:40:38 +00001552 register int yystate;
1553 register int yyn;
vlm1aeaddd2006-07-13 08:24:20 +00001554 int yyresult;
1555 /* Number of tokens to shift before error messages enabled. */
1556 int yyerrstatus;
1557 /* Lookahead token as an internal (translated) token number. */
1558 int yychar1 = 0;
1559
1560 /* Three stacks and their tools:
1561 `yyss': related to states,
1562 `yyvs': related to semantic values,
1563 `yyls': related to locations.
1564
1565 Refer to the stacks thru separate pointers, to allow yyoverflow
1566 to reallocate them elsewhere. */
1567
1568 /* The state stack. */
1569 short yyssa[YYINITDEPTH];
1570 short *yyss = yyssa;
vlm0c6d3812006-03-21 03:40:38 +00001571 register short *yyssp;
vlm1aeaddd2006-07-13 08:24:20 +00001572
1573 /* The semantic value stack. */
1574 YYSTYPE yyvsa[YYINITDEPTH];
1575 YYSTYPE *yyvs = yyvsa;
vlm0c6d3812006-03-21 03:40:38 +00001576 register YYSTYPE *yyvsp;
vlm7e436752006-03-18 06:53:11 +00001577
vlm7e436752006-03-18 06:53:11 +00001578
vlm7e436752006-03-18 06:53:11 +00001579
vlmfa67ddc2004-06-03 03:38:44 +00001580#define YYPOPSTACK (yyvsp--, yyssp--)
vlmfa67ddc2004-06-03 03:38:44 +00001581
vlm1aeaddd2006-07-13 08:24:20 +00001582 YYSIZE_T yystacksize = YYINITDEPTH;
vlmfa67ddc2004-06-03 03:38:44 +00001583
vlm1aeaddd2006-07-13 08:24:20 +00001584 /* The variables used to return semantic value and location from the
1585 action routines. */
1586 YYSTYPE yyval;
vlmfa67ddc2004-06-03 03:38:44 +00001587
vlmfa67ddc2004-06-03 03:38:44 +00001588
vlm1aeaddd2006-07-13 08:24:20 +00001589 /* When reducing, the number of symbols on the RHS of the reduced
1590 rule. */
vlmfa67ddc2004-06-03 03:38:44 +00001591 int yylen;
1592
vlm1aeaddd2006-07-13 08:24:20 +00001593 YYDPRINTF ((stderr, "Starting parse\n"));
vlmfa67ddc2004-06-03 03:38:44 +00001594
1595 yystate = 0;
1596 yyerrstatus = 0;
1597 yynerrs = 0;
1598 yychar = YYEMPTY; /* Cause a token to be read. */
1599
1600 /* Initialize stack pointers.
1601 Waste one element of value and location stack
1602 so that they stay on the same level as the state stack.
1603 The wasted elements are never initialized. */
1604
vlm1aeaddd2006-07-13 08:24:20 +00001605 yyssp = yyss;
vlmfa67ddc2004-06-03 03:38:44 +00001606 yyvsp = yyvs;
vlmfa67ddc2004-06-03 03:38:44 +00001607
vlm1aeaddd2006-07-13 08:24:20 +00001608 goto yysetstate;
vlmfa67ddc2004-06-03 03:38:44 +00001609
vlm1aeaddd2006-07-13 08:24:20 +00001610/*------------------------------------------------------------.
1611| yynewstate -- Push a new state, which is found in yystate. |
1612`------------------------------------------------------------*/
1613 yynewstate:
1614 /* In all cases, when you get here, the value and location stacks
1615 have just been pushed. so pushing a state here evens the stacks.
1616 */
1617 yyssp++;
1618
1619 yysetstate:
1620 *yyssp = yystate;
vlmfa67ddc2004-06-03 03:38:44 +00001621
vlm0c6d3812006-03-21 03:40:38 +00001622 if (yyssp >= yyss + yystacksize - 1)
vlmfa67ddc2004-06-03 03:38:44 +00001623 {
vlmfa67ddc2004-06-03 03:38:44 +00001624 /* Get the current used size of the three stacks, in elements. */
vlm1aeaddd2006-07-13 08:24:20 +00001625 YYSIZE_T yysize = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001626
1627#ifdef yyoverflow
vlm1aeaddd2006-07-13 08:24:20 +00001628 {
1629 /* Give user a chance to reallocate the stack. Use copies of
1630 these so that the &'s don't force the real ones into
1631 memory. */
1632 YYSTYPE *yyvs1 = yyvs;
1633 short *yyss1 = yyss;
vlmfa67ddc2004-06-03 03:38:44 +00001634
vlm1aeaddd2006-07-13 08:24:20 +00001635
1636 /* Each stack pointer address is followed by the size of the
1637 data in use in that stack, in bytes. This used to be a
1638 conditional around just the two extra args, but that might
1639 be undefined if yyoverflow is a macro. */
1640 yyoverflow ("parser stack overflow",
1641 &yyss1, yysize * sizeof (*yyssp),
1642 &yyvs1, yysize * sizeof (*yyvsp),
1643
1644 &yystacksize);
1645
1646 yyss = yyss1;
1647 yyvs = yyvs1;
1648 }
vlmfa67ddc2004-06-03 03:38:44 +00001649#else /* no yyoverflow */
vlm1aeaddd2006-07-13 08:24:20 +00001650# ifndef YYSTACK_RELOCATE
1651 goto yyoverflowlab;
1652# else
vlmfa67ddc2004-06-03 03:38:44 +00001653 /* Extend the stack our own way. */
vlm0c6d3812006-03-21 03:40:38 +00001654 if (yystacksize >= YYMAXDEPTH)
vlm1aeaddd2006-07-13 08:24:20 +00001655 goto yyoverflowlab;
vlmfa67ddc2004-06-03 03:38:44 +00001656 yystacksize *= 2;
vlm0c6d3812006-03-21 03:40:38 +00001657 if (yystacksize > YYMAXDEPTH)
vlmfa67ddc2004-06-03 03:38:44 +00001658 yystacksize = YYMAXDEPTH;
vlm1aeaddd2006-07-13 08:24:20 +00001659
1660 {
1661 short *yyss1 = yyss;
1662 union yyalloc *yyptr =
1663 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1664 if (! yyptr)
1665 goto yyoverflowlab;
1666 YYSTACK_RELOCATE (yyss);
1667 YYSTACK_RELOCATE (yyvs);
1668
1669# undef YYSTACK_RELOCATE
1670 if (yyss1 != yyssa)
1671 YYSTACK_FREE (yyss1);
1672 }
1673# endif
vlmfa67ddc2004-06-03 03:38:44 +00001674#endif /* no yyoverflow */
1675
vlm1aeaddd2006-07-13 08:24:20 +00001676 yyssp = yyss + yysize - 1;
1677 yyvsp = yyvs + yysize - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001678
vlm1aeaddd2006-07-13 08:24:20 +00001679
1680 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1681 (unsigned long int) yystacksize));
vlmfa67ddc2004-06-03 03:38:44 +00001682
vlm0c6d3812006-03-21 03:40:38 +00001683 if (yyssp >= yyss + yystacksize - 1)
vlmfa67ddc2004-06-03 03:38:44 +00001684 YYABORT;
1685 }
1686
vlm1aeaddd2006-07-13 08:24:20 +00001687 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
vlmfa67ddc2004-06-03 03:38:44 +00001688
1689 goto yybackup;
vlm1aeaddd2006-07-13 08:24:20 +00001690
1691/*-----------.
1692| yybackup. |
1693`-----------*/
1694yybackup:
vlmfa67ddc2004-06-03 03:38:44 +00001695
1696/* Do appropriate processing given the current state. */
vlm0c6d3812006-03-21 03:40:38 +00001697/* Read a lookahead token if we need one and don't already have one. */
vlmfa67ddc2004-06-03 03:38:44 +00001698/* yyresume: */
1699
vlm0c6d3812006-03-21 03:40:38 +00001700 /* First try to decide what to do without reference to lookahead token. */
vlmfa67ddc2004-06-03 03:38:44 +00001701
1702 yyn = yypact[yystate];
vlm1aeaddd2006-07-13 08:24:20 +00001703 if (yyn == YYPACT_NINF)
vlmfa67ddc2004-06-03 03:38:44 +00001704 goto yydefault;
1705
vlm0c6d3812006-03-21 03:40:38 +00001706 /* Not known => get a lookahead token if don't already have one. */
vlmfa67ddc2004-06-03 03:38:44 +00001707
vlm0c6d3812006-03-21 03:40:38 +00001708 /* yychar is either YYEMPTY or YYEOF
1709 or a valid token in external form. */
1710
vlmfa67ddc2004-06-03 03:38:44 +00001711 if (yychar == YYEMPTY)
1712 {
vlm1aeaddd2006-07-13 08:24:20 +00001713 YYDPRINTF ((stderr, "Reading a token: "));
vlmfa67ddc2004-06-03 03:38:44 +00001714 yychar = YYLEX;
1715 }
1716
vlm1aeaddd2006-07-13 08:24:20 +00001717 /* Convert token to internal form (in yychar1) for indexing tables with. */
vlm0c6d3812006-03-21 03:40:38 +00001718
vlm1aeaddd2006-07-13 08:24:20 +00001719 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001720 {
vlm0c6d3812006-03-21 03:40:38 +00001721 yychar1 = 0;
vlm1aeaddd2006-07-13 08:24:20 +00001722 yychar = YYEOF; /* Don't call YYLEX any more. */
vlm0c6d3812006-03-21 03:40:38 +00001723
vlm1aeaddd2006-07-13 08:24:20 +00001724 YYDPRINTF ((stderr, "Now at end of input.\n"));
vlmfa67ddc2004-06-03 03:38:44 +00001725 }
1726 else
1727 {
vlm1aeaddd2006-07-13 08:24:20 +00001728 yychar1 = YYTRANSLATE (yychar);
vlm0c6d3812006-03-21 03:40:38 +00001729
vlm1aeaddd2006-07-13 08:24:20 +00001730 /* We have to keep this `#if YYDEBUG', since we use variables
1731 which are defined only if `YYDEBUG' is set. */
1732 YYDPRINTF ((stderr, "Next token is "));
1733 YYDSYMPRINT ((stderr, yychar1, yylval));
1734 YYDPRINTF ((stderr, "\n"));
vlmfa67ddc2004-06-03 03:38:44 +00001735 }
1736
vlm1aeaddd2006-07-13 08:24:20 +00001737 /* If the proper action on seeing token YYCHAR1 is to reduce or to
1738 detect an error, take that action. */
vlm0c6d3812006-03-21 03:40:38 +00001739 yyn += yychar1;
vlm1aeaddd2006-07-13 08:24:20 +00001740 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001741 goto yydefault;
vlmfa67ddc2004-06-03 03:38:44 +00001742 yyn = yytable[yyn];
vlm1aeaddd2006-07-13 08:24:20 +00001743 if (yyn <= 0)
vlmfa67ddc2004-06-03 03:38:44 +00001744 {
vlm1aeaddd2006-07-13 08:24:20 +00001745 if (yyn == 0 || yyn == YYTABLE_NINF)
vlmfa67ddc2004-06-03 03:38:44 +00001746 goto yyerrlab;
1747 yyn = -yyn;
1748 goto yyreduce;
1749 }
vlmfa67ddc2004-06-03 03:38:44 +00001750
1751 if (yyn == YYFINAL)
1752 YYACCEPT;
1753
vlm0c6d3812006-03-21 03:40:38 +00001754 /* Shift the lookahead token. */
vlm1aeaddd2006-07-13 08:24:20 +00001755 YYDPRINTF ((stderr, "Shifting token %d (%s), ",
1756 yychar, yytname[yychar1]));
vlmfa67ddc2004-06-03 03:38:44 +00001757
1758 /* Discard the token being shifted unless it is eof. */
1759 if (yychar != YYEOF)
1760 yychar = YYEMPTY;
1761
1762 *++yyvsp = yylval;
vlmfa67ddc2004-06-03 03:38:44 +00001763
vlm1aeaddd2006-07-13 08:24:20 +00001764
1765 /* Count tokens shifted since error; after three, turn off error
1766 status. */
1767 if (yyerrstatus)
1768 yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001769
1770 yystate = yyn;
1771 goto yynewstate;
1772
vlm0c6d3812006-03-21 03:40:38 +00001773
vlm1aeaddd2006-07-13 08:24:20 +00001774/*-----------------------------------------------------------.
1775| yydefault -- do the default action for the current state. |
1776`-----------------------------------------------------------*/
1777yydefault:
vlmfa67ddc2004-06-03 03:38:44 +00001778 yyn = yydefact[yystate];
1779 if (yyn == 0)
1780 goto yyerrlab;
vlm1aeaddd2006-07-13 08:24:20 +00001781 goto yyreduce;
vlmfa67ddc2004-06-03 03:38:44 +00001782
vlm1aeaddd2006-07-13 08:24:20 +00001783
1784/*-----------------------------.
1785| yyreduce -- Do a reduction. |
1786`-----------------------------*/
vlmfa67ddc2004-06-03 03:38:44 +00001787yyreduce:
vlm1aeaddd2006-07-13 08:24:20 +00001788 /* yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001789 yylen = yyr2[yyn];
vlmfa67ddc2004-06-03 03:38:44 +00001790
vlm1aeaddd2006-07-13 08:24:20 +00001791 /* If YYLEN is nonzero, implement the default value of the action:
1792 `$$ = $1'.
1793
1794 Otherwise, the following line sets YYVAL to garbage.
1795 This behavior is undocumented and Bison
1796 users should not rely upon it. Assigning to YYVAL
1797 unconditionally makes the parser a bit smaller, and it avoids a
1798 GCC warning that YYVAL may be used uninitialized. */
1799 yyval = yyvsp[1-yylen];
1800
1801
1802
1803#if YYDEBUG
1804 /* We have to keep this `#if YYDEBUG', since we use variables which
1805 are defined only if `YYDEBUG' is set. */
vlm0c6d3812006-03-21 03:40:38 +00001806 if (yydebug)
vlmfa67ddc2004-06-03 03:38:44 +00001807 {
vlm1aeaddd2006-07-13 08:24:20 +00001808 int yyi;
vlm0c6d3812006-03-21 03:40:38 +00001809
vlm1aeaddd2006-07-13 08:24:20 +00001810 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
1811 yyn - 1, yyrline[yyn]);
vlm0c6d3812006-03-21 03:40:38 +00001812
1813 /* Print the symbols being reduced, and their result. */
vlm1aeaddd2006-07-13 08:24:20 +00001814 for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
1815 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
1816 YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
vlm0c6d3812006-03-21 03:40:38 +00001817 }
1818#endif
vlm1aeaddd2006-07-13 08:24:20 +00001819 switch (yyn)
1820 {
1821 case 2:
vlmd3420d32006-09-14 10:35:20 +00001822#line 343 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001823 {
vlm0c6d3812006-03-21 03:40:38 +00001824 *(void **)param = yyvsp[0].a_grammar;
vlm1aeaddd2006-07-13 08:24:20 +00001825 }
1826 break;
1827
1828 case 3:
vlmd3420d32006-09-14 10:35:20 +00001829#line 349 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001830 {
vlm0c6d3812006-03-21 03:40:38 +00001831 yyval.a_grammar = asn1p_new();
1832 checkmem(yyval.a_grammar);
1833 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm1aeaddd2006-07-13 08:24:20 +00001834 }
1835 break;
1836
1837 case 4:
vlmd3420d32006-09-14 10:35:20 +00001838#line 354 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001839 {
vlm0c6d3812006-03-21 03:40:38 +00001840 yyval.a_grammar = yyvsp[-1].a_grammar;
1841 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm1aeaddd2006-07-13 08:24:20 +00001842 }
1843 break;
1844
1845 case 5:
vlmd3420d32006-09-14 10:35:20 +00001846#line 375 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001847 {
vlm7e436752006-03-18 06:53:11 +00001848
vlm0c6d3812006-03-21 03:40:38 +00001849 if(yyvsp[-1].a_module) {
1850 yyval.a_module = yyvsp[-1].a_module;
vlmfa67ddc2004-06-03 03:38:44 +00001851 } else {
1852 /* There's a chance that a module is just plain empty */
vlm0c6d3812006-03-21 03:40:38 +00001853 yyval.a_module = asn1p_module_new();
vlmfa67ddc2004-06-03 03:38:44 +00001854 }
vlm0c6d3812006-03-21 03:40:38 +00001855 checkmem(yyval.a_module);
vlmfa67ddc2004-06-03 03:38:44 +00001856
vlm0c6d3812006-03-21 03:40:38 +00001857 yyval.a_module->ModuleName = yyvsp[-7].tv_str;
1858 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1859 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
vlm1aeaddd2006-07-13 08:24:20 +00001860 }
1861 break;
1862
1863 case 6:
vlmd3420d32006-09-14 10:35:20 +00001864#line 396 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001865 { yyval.a_oid = 0; }
1866 break;
1867
1868 case 7:
vlmd3420d32006-09-14 10:35:20 +00001869#line 397 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001870 { yyval.a_oid = yyvsp[0].a_oid; }
1871 break;
1872
1873 case 8:
vlmd3420d32006-09-14 10:35:20 +00001874#line 401 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001875 {
vlm0c6d3812006-03-21 03:40:38 +00001876 yyval.a_oid = yyvsp[-1].a_oid;
vlm1aeaddd2006-07-13 08:24:20 +00001877 }
1878 break;
1879
1880 case 9:
vlmd3420d32006-09-14 10:35:20 +00001881#line 404 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001882 {
vlm0c6d3812006-03-21 03:40:38 +00001883 yyval.a_oid = 0;
vlm1aeaddd2006-07-13 08:24:20 +00001884 }
1885 break;
1886
1887 case 10:
vlmd3420d32006-09-14 10:35:20 +00001888#line 410 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001889 {
vlm0c6d3812006-03-21 03:40:38 +00001890 yyval.a_oid = asn1p_oid_new();
1891 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1892 if(yyvsp[0].a_oid_arc.name)
1893 free(yyvsp[0].a_oid_arc.name);
vlm1aeaddd2006-07-13 08:24:20 +00001894 }
1895 break;
1896
1897 case 11:
vlmd3420d32006-09-14 10:35:20 +00001898#line 416 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001899 {
vlm0c6d3812006-03-21 03:40:38 +00001900 yyval.a_oid = yyvsp[-1].a_oid;
1901 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1902 if(yyvsp[0].a_oid_arc.name)
1903 free(yyvsp[0].a_oid_arc.name);
vlm1aeaddd2006-07-13 08:24:20 +00001904 }
1905 break;
1906
1907 case 12:
vlmd3420d32006-09-14 10:35:20 +00001908#line 425 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001909 { /* iso */
vlm0c6d3812006-03-21 03:40:38 +00001910 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1911 yyval.a_oid_arc.number = -1;
vlm1aeaddd2006-07-13 08:24:20 +00001912 }
1913 break;
1914
1915 case 13:
vlmd3420d32006-09-14 10:35:20 +00001916#line 429 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001917 { /* iso(1) */
vlm0c6d3812006-03-21 03:40:38 +00001918 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1919 yyval.a_oid_arc.number = yyvsp[-1].a_int;
vlm1aeaddd2006-07-13 08:24:20 +00001920 }
1921 break;
1922
1923 case 14:
vlmd3420d32006-09-14 10:35:20 +00001924#line 433 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001925 { /* 1 */
vlm0c6d3812006-03-21 03:40:38 +00001926 yyval.a_oid_arc.name = 0;
1927 yyval.a_oid_arc.number = yyvsp[0].a_int;
vlm1aeaddd2006-07-13 08:24:20 +00001928 }
1929 break;
1930
1931 case 15:
vlmd3420d32006-09-14 10:35:20 +00001932#line 443 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001933 { yyval.a_module_flags = MSF_NOFLAGS; }
1934 break;
1935
1936 case 16:
vlmd3420d32006-09-14 10:35:20 +00001937#line 444 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001938 {
vlm0c6d3812006-03-21 03:40:38 +00001939 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm1aeaddd2006-07-13 08:24:20 +00001940 }
1941 break;
1942
1943 case 17:
vlmd3420d32006-09-14 10:35:20 +00001944#line 453 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001945 {
vlm0c6d3812006-03-21 03:40:38 +00001946 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm1aeaddd2006-07-13 08:24:20 +00001947 }
1948 break;
1949
1950 case 18:
vlmd3420d32006-09-14 10:35:20 +00001951#line 456 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001952 {
vlm0c6d3812006-03-21 03:40:38 +00001953 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
vlm1aeaddd2006-07-13 08:24:20 +00001954 }
1955 break;
1956
1957 case 19:
vlmd3420d32006-09-14 10:35:20 +00001958#line 465 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001959 {
vlm0c6d3812006-03-21 03:40:38 +00001960 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
vlm1aeaddd2006-07-13 08:24:20 +00001961 }
1962 break;
1963
1964 case 20:
vlmd3420d32006-09-14 10:35:20 +00001965#line 468 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001966 {
vlm0c6d3812006-03-21 03:40:38 +00001967 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
vlm1aeaddd2006-07-13 08:24:20 +00001968 }
1969 break;
1970
1971 case 21:
vlmd3420d32006-09-14 10:35:20 +00001972#line 471 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001973 {
vlm0c6d3812006-03-21 03:40:38 +00001974 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
vlm1aeaddd2006-07-13 08:24:20 +00001975 }
1976 break;
1977
1978 case 22:
vlmd3420d32006-09-14 10:35:20 +00001979#line 474 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001980 {
vlm0c6d3812006-03-21 03:40:38 +00001981 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
vlm1aeaddd2006-07-13 08:24:20 +00001982 }
1983 break;
1984
1985 case 23:
vlmd3420d32006-09-14 10:35:20 +00001986#line 478 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001987 {
vlm9283dbe2004-08-18 04:59:12 +00001988 /* X.680Amd1 specifies TAG and XER */
vlm0c6d3812006-03-21 03:40:38 +00001989 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
1990 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
1991 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
1992 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
vlm9283dbe2004-08-18 04:59:12 +00001993 } else {
1994 fprintf(stderr,
1995 "WARNING: %s INSTRUCTIONS at line %d: "
1996 "Unrecognized encoding reference\n",
vlm0c6d3812006-03-21 03:40:38 +00001997 yyvsp[-1].tv_str, yylineno);
1998 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
vlm9283dbe2004-08-18 04:59:12 +00001999 }
vlm0c6d3812006-03-21 03:40:38 +00002000 free(yyvsp[-1].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00002001 }
2002 break;
2003
2004 case 24:
vlmd3420d32006-09-14 10:35:20 +00002005#line 499 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002006 { yyval.a_module = 0; }
2007 break;
2008
2009 case 25:
vlmd3420d32006-09-14 10:35:20 +00002010#line 500 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002011 {
vlm0c6d3812006-03-21 03:40:38 +00002012 yyval.a_module = yyvsp[0].a_module;
vlm1aeaddd2006-07-13 08:24:20 +00002013 }
2014 break;
2015
2016 case 26:
vlmd3420d32006-09-14 10:35:20 +00002017#line 509 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002018 {
vlmd3420d32006-09-14 10:35:20 +00002019 yyval.a_module = asn1p_module_new();
2020 AL_IMPORT(yyval.a_module, exports, yyvsp[-2].a_module, xp_next);
2021 AL_IMPORT(yyval.a_module, imports, yyvsp[-1].a_module, xp_next);
2022 AL_IMPORT(yyval.a_module, members, yyvsp[0].a_module, next);
vlm1aeaddd2006-07-13 08:24:20 +00002023 }
2024 break;
2025
2026 case 27:
vlmd3420d32006-09-14 10:35:20 +00002027#line 518 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002028 {
vlm0c6d3812006-03-21 03:40:38 +00002029 yyval.a_module = yyvsp[0].a_module;
vlm1aeaddd2006-07-13 08:24:20 +00002030 }
2031 break;
2032
vlmd3420d32006-09-14 10:35:20 +00002033 case 28:
2034#line 521 "asn1p_y.y"
2035 {
2036 if(yyvsp[-1].a_module) {
2037 yyval.a_module = yyvsp[-1].a_module;
2038 } else {
2039 yyval.a_module = yyvsp[0].a_module;
2040 break;
2041 }
2042 AL_IMPORT(yyval.a_module, members, yyvsp[0].a_module, next);
2043 }
2044 break;
2045
vlm1aeaddd2006-07-13 08:24:20 +00002046 case 29:
vlmd3420d32006-09-14 10:35:20 +00002047#line 537 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002048 {
vlm0c6d3812006-03-21 03:40:38 +00002049 yyval.a_module = asn1p_module_new();
2050 checkmem(yyval.a_module);
vlmd3420d32006-09-14 10:35:20 +00002051 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2052 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2053 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm1aeaddd2006-07-13 08:24:20 +00002054 }
2055 break;
2056
2057 case 30:
vlmd3420d32006-09-14 10:35:20 +00002058#line 544 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002059 {
vlm0c6d3812006-03-21 03:40:38 +00002060 yyval.a_module = asn1p_module_new();
2061 checkmem(yyval.a_module);
2062 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2063 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2064 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm1aeaddd2006-07-13 08:24:20 +00002065 }
2066 break;
2067
2068 case 31:
vlmd3420d32006-09-14 10:35:20 +00002069#line 557 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002070 {
vlm0c6d3812006-03-21 03:40:38 +00002071 yyval.a_module = asn1p_module_new();
2072 checkmem(yyval.a_module);
2073 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2074 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2075 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm1aeaddd2006-07-13 08:24:20 +00002076 }
2077 break;
2078
2079 case 32:
vlmd3420d32006-09-14 10:35:20 +00002080#line 565 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002081 { asn1p_lexer_hack_push_encoding_control(); }
2082 break;
2083
vlmd3420d32006-09-14 10:35:20 +00002084 case 33:
2085#line 566 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002086 {
vlm9283dbe2004-08-18 04:59:12 +00002087 fprintf(stderr,
2088 "WARNING: ENCODING-CONTROL %s "
2089 "specification at line %d ignored\n",
vlm0c6d3812006-03-21 03:40:38 +00002090 yyvsp[-1].tv_str, yylineno);
2091 free(yyvsp[-1].tv_str);
2092 yyval.a_module = 0;
vlm1aeaddd2006-07-13 08:24:20 +00002093 }
2094 break;
2095
vlmd3420d32006-09-14 10:35:20 +00002096 case 34:
2097#line 578 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002098 {
vlmfa67ddc2004-06-03 03:38:44 +00002099 return yyerror(
vlm1ac75e72005-11-26 11:21:55 +00002100 "Attempt to redefine a standard basic string type, "
2101 "please comment out or remove this type redefinition.");
vlm1aeaddd2006-07-13 08:24:20 +00002102 }
2103 break;
2104
vlmd3420d32006-09-14 10:35:20 +00002105 case 35:
2106#line 591 "asn1p_y.y"
2107 { yyval.a_module = 0; }
2108 break;
2109
2110 case 37:
vlme745fcd2006-09-05 16:18:34 +00002111#line 595 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002112 {
vlm931aeed2005-08-12 10:09:10 +00002113 if(!saved_aid && 0)
2114 return yyerror("Unterminated IMPORTS FROM, "
2115 "expected semicolon ';'");
2116 saved_aid = 0;
vlm0c6d3812006-03-21 03:40:38 +00002117 yyval.a_module = yyvsp[-1].a_module;
vlm1aeaddd2006-07-13 08:24:20 +00002118 }
2119 break;
2120
vlmd3420d32006-09-14 10:35:20 +00002121 case 38:
vlme745fcd2006-09-05 16:18:34 +00002122#line 605 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002123 {
vlmfa67ddc2004-06-03 03:38:44 +00002124 return yyerror("Empty IMPORTS list");
vlm1aeaddd2006-07-13 08:24:20 +00002125 }
2126 break;
2127
vlmd3420d32006-09-14 10:35:20 +00002128 case 39:
vlme745fcd2006-09-05 16:18:34 +00002129#line 611 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002130 {
vlm0c6d3812006-03-21 03:40:38 +00002131 yyval.a_module = asn1p_module_new();
2132 checkmem(yyval.a_module);
2133 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm1aeaddd2006-07-13 08:24:20 +00002134 }
2135 break;
2136
vlmd3420d32006-09-14 10:35:20 +00002137 case 40:
vlme745fcd2006-09-05 16:18:34 +00002138#line 616 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002139 {
vlm0c6d3812006-03-21 03:40:38 +00002140 yyval.a_module = yyvsp[-1].a_module;
2141 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm1aeaddd2006-07-13 08:24:20 +00002142 }
2143 break;
2144
vlmd3420d32006-09-14 10:35:20 +00002145 case 41:
vlme745fcd2006-09-05 16:18:34 +00002146#line 623 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002147 { memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); }
2148 break;
2149
vlmd3420d32006-09-14 10:35:20 +00002150 case 42:
vlme745fcd2006-09-05 16:18:34 +00002151#line 624 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002152 { yyval.a_aid.oid = yyvsp[0].a_oid; }
2153 break;
2154
vlmd3420d32006-09-14 10:35:20 +00002155 case 43:
vlme745fcd2006-09-05 16:18:34 +00002156#line 628 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002157 {
vlm0c6d3812006-03-21 03:40:38 +00002158 yyval.a_xports = yyvsp[-3].a_xports;
2159 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
2160 yyval.a_xports->identifier = yyvsp[0].a_aid;
vlm931aeed2005-08-12 10:09:10 +00002161 /* This stupid thing is used for look-back hack. */
vlm0c6d3812006-03-21 03:40:38 +00002162 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
2163 checkmem(yyval.a_xports);
vlm1aeaddd2006-07-13 08:24:20 +00002164 }
2165 break;
2166
vlmd3420d32006-09-14 10:35:20 +00002167 case 44:
vlme745fcd2006-09-05 16:18:34 +00002168#line 639 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002169 {
vlm0c6d3812006-03-21 03:40:38 +00002170 yyval.a_xports = asn1p_xports_new();
2171 checkmem(yyval.a_xports);
2172 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm1aeaddd2006-07-13 08:24:20 +00002173 }
2174 break;
2175
vlmd3420d32006-09-14 10:35:20 +00002176 case 45:
vlme745fcd2006-09-05 16:18:34 +00002177#line 644 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002178 {
vlm0c6d3812006-03-21 03:40:38 +00002179 yyval.a_xports = yyvsp[-2].a_xports;
2180 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm1aeaddd2006-07-13 08:24:20 +00002181 }
2182 break;
2183
vlmd3420d32006-09-14 10:35:20 +00002184 case 46:
vlme745fcd2006-09-05 16:18:34 +00002185#line 651 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002186 {
vlm0c6d3812006-03-21 03:40:38 +00002187 yyval.a_expr = asn1p_expr_new(yylineno);
2188 checkmem(yyval.a_expr);
2189 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2190 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm1aeaddd2006-07-13 08:24:20 +00002191 }
2192 break;
2193
vlmd3420d32006-09-14 10:35:20 +00002194 case 47:
vlme745fcd2006-09-05 16:18:34 +00002195#line 657 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002196 { /* Completely equivalent to above */
vlm0c6d3812006-03-21 03:40:38 +00002197 yyval.a_expr = asn1p_expr_new(yylineno);
2198 checkmem(yyval.a_expr);
2199 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2200 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm1aeaddd2006-07-13 08:24:20 +00002201 }
2202 break;
2203
vlmd3420d32006-09-14 10:35:20 +00002204 case 48:
vlme745fcd2006-09-05 16:18:34 +00002205#line 663 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002206 {
vlm0c6d3812006-03-21 03:40:38 +00002207 yyval.a_expr = asn1p_expr_new(yylineno);
2208 checkmem(yyval.a_expr);
2209 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2210 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm1aeaddd2006-07-13 08:24:20 +00002211 }
2212 break;
2213
vlmd3420d32006-09-14 10:35:20 +00002214 case 49:
2215#line 673 "asn1p_y.y"
2216 { yyval.a_module = 0; }
2217 break;
2218
2219 case 50:
2220#line 674 "asn1p_y.y"
2221 {
2222 yyval.a_module = asn1p_module_new();
2223 checkmem(yyval.a_module);
2224 if(yyvsp[0].a_xports) {
2225 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
2226 } else {
2227 /* "EXPORTS ALL;" */
2228 }
2229 }
2230 break;
2231
2232 case 51:
2233#line 686 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002234 {
vlm0c6d3812006-03-21 03:40:38 +00002235 yyval.a_xports = yyvsp[-1].a_xports;
vlm1aeaddd2006-07-13 08:24:20 +00002236 }
2237 break;
2238
vlmd3420d32006-09-14 10:35:20 +00002239 case 52:
2240#line 689 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002241 {
vlm0c6d3812006-03-21 03:40:38 +00002242 yyval.a_xports = 0;
vlm1aeaddd2006-07-13 08:24:20 +00002243 }
2244 break;
2245
vlmd3420d32006-09-14 10:35:20 +00002246 case 53:
2247#line 692 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002248 {
vlmfa67ddc2004-06-03 03:38:44 +00002249 /* Empty EXPORTS clause effectively prohibits export. */
vlm0c6d3812006-03-21 03:40:38 +00002250 yyval.a_xports = asn1p_xports_new();
2251 checkmem(yyval.a_xports);
vlm1aeaddd2006-07-13 08:24:20 +00002252 }
2253 break;
2254
vlmd3420d32006-09-14 10:35:20 +00002255 case 54:
2256#line 700 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002257 {
vlm0c6d3812006-03-21 03:40:38 +00002258 yyval.a_xports = asn1p_xports_new();
2259 assert(yyval.a_xports);
2260 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm1aeaddd2006-07-13 08:24:20 +00002261 }
2262 break;
2263
vlmd3420d32006-09-14 10:35:20 +00002264 case 55:
2265#line 705 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002266 {
vlm0c6d3812006-03-21 03:40:38 +00002267 yyval.a_xports = yyvsp[-2].a_xports;
2268 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm1aeaddd2006-07-13 08:24:20 +00002269 }
2270 break;
2271
vlmd3420d32006-09-14 10:35:20 +00002272 case 56:
2273#line 712 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002274 {
vlm0c6d3812006-03-21 03:40:38 +00002275 yyval.a_expr = asn1p_expr_new(yylineno);
2276 checkmem(yyval.a_expr);
2277 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2278 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
vlm1aeaddd2006-07-13 08:24:20 +00002279 }
2280 break;
2281
vlmd3420d32006-09-14 10:35:20 +00002282 case 57:
2283#line 718 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002284 {
vlm0c6d3812006-03-21 03:40:38 +00002285 yyval.a_expr = asn1p_expr_new(yylineno);
2286 checkmem(yyval.a_expr);
2287 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2288 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
vlm1aeaddd2006-07-13 08:24:20 +00002289 }
2290 break;
2291
vlmd3420d32006-09-14 10:35:20 +00002292 case 58:
2293#line 724 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002294 {
vlm0c6d3812006-03-21 03:40:38 +00002295 yyval.a_expr = asn1p_expr_new(yylineno);
2296 checkmem(yyval.a_expr);
2297 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2298 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
vlm1aeaddd2006-07-13 08:24:20 +00002299 }
2300 break;
2301
vlmd3420d32006-09-14 10:35:20 +00002302 case 59:
2303#line 733 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002304 { yyval.a_constr = yyvsp[-1].a_constr; }
2305 break;
2306
vlmd3420d32006-09-14 10:35:20 +00002307 case 60:
2308#line 736 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002309 {
vlm59b620a2006-03-21 07:46:48 +00002310 yyval.a_expr = yyvsp[-2].a_expr;
vlm0c6d3812006-03-21 03:40:38 +00002311 assert(yyval.a_expr->Identifier == 0);
vlm59b620a2006-03-21 07:46:48 +00002312 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
vlm0c6d3812006-03-21 03:40:38 +00002313 yyval.a_expr->meta_type = AMT_VALUESET;
vlm59b620a2006-03-21 07:46:48 +00002314 yyval.a_expr->constraints = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00002315 }
2316 break;
2317
vlmd3420d32006-09-14 10:35:20 +00002318 case 61:
2319#line 746 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002320 {
vlm17e65d02006-03-21 04:48:15 +00002321 yyval.a_expr = yyvsp[0].a_expr;
vlm1aeaddd2006-07-13 08:24:20 +00002322 }
2323 break;
2324
vlmd3420d32006-09-14 10:35:20 +00002325 case 62:
2326#line 759 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002327 {
vlm0c6d3812006-03-21 03:40:38 +00002328 yyval.a_expr = asn1p_expr_new(yylineno);
2329 checkmem(yyval.a_expr);
2330 yyval.a_expr->reference = yyvsp[0].a_ref;
2331 yyval.a_expr->expr_type = A1TC_REFERENCE;
2332 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm1aeaddd2006-07-13 08:24:20 +00002333 }
2334 break;
2335
vlmd3420d32006-09-14 10:35:20 +00002336 case 63:
2337#line 769 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002338 {
vlm0c6d3812006-03-21 03:40:38 +00002339 yyval.a_expr = asn1p_expr_new(yylineno);
2340 checkmem(yyval.a_expr);
vlm17e65d02006-03-21 04:48:15 +00002341 yyval.a_expr->reference = yyvsp[-3].a_ref;
2342 yyval.a_expr->rhs_pspecs = yyvsp[-1].a_expr;
2343 yyval.a_expr->expr_type = A1TC_REFERENCE;
2344 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm1aeaddd2006-07-13 08:24:20 +00002345 }
2346 break;
2347
vlmd3420d32006-09-14 10:35:20 +00002348 case 64:
2349#line 789 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002350 {
vlm0c6d3812006-03-21 03:40:38 +00002351 yyval.a_expr = yyvsp[0].a_expr;
2352 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2353 assert(yyval.a_expr->expr_type);
2354 assert(yyval.a_expr->meta_type);
vlm1aeaddd2006-07-13 08:24:20 +00002355 }
2356 break;
2357
vlmd3420d32006-09-14 10:35:20 +00002358 case 65:
2359#line 795 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002360 {
vlm0c6d3812006-03-21 03:40:38 +00002361 yyval.a_expr = yyvsp[0].a_expr;
2362 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2363 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2364 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
vlm1aeaddd2006-07-13 08:24:20 +00002365 }
2366 break;
2367
vlmd3420d32006-09-14 10:35:20 +00002368 case 66:
vlme745fcd2006-09-05 16:18:34 +00002369#line 811 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002370 {
vlmd3420d32006-09-14 10:35:20 +00002371 yyval.a_expr = yyvsp[0].a_expr;
2372 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2373 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
2374 }
2375 break;
2376
2377 case 67:
2378#line 817 "asn1p_y.y"
2379 {
2380 yyval.a_expr = yyvsp[0].a_expr;
2381 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2382 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
2383 }
2384 break;
2385
2386 case 68:
2387#line 825 "asn1p_y.y"
2388 {
vlmfa67ddc2004-06-03 03:38:44 +00002389 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002390 yyval.a_plist = asn1p_paramlist_new(yylineno);
2391 checkmem(yyval.a_plist);
2392 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
vlmfa67ddc2004-06-03 03:38:44 +00002393 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002394 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2395 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm1aeaddd2006-07-13 08:24:20 +00002396 }
2397 break;
2398
vlmd3420d32006-09-14 10:35:20 +00002399 case 69:
2400#line 834 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002401 {
vlmfa67ddc2004-06-03 03:38:44 +00002402 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002403 yyval.a_plist = yyvsp[-2].a_plist;
2404 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
vlmfa67ddc2004-06-03 03:38:44 +00002405 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002406 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2407 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm1aeaddd2006-07-13 08:24:20 +00002408 }
2409 break;
2410
vlmd3420d32006-09-14 10:35:20 +00002411 case 70:
2412#line 845 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002413 {
vlm0c6d3812006-03-21 03:40:38 +00002414 yyval.a_parg.governor = NULL;
2415 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00002416 }
2417 break;
2418
vlmd3420d32006-09-14 10:35:20 +00002419 case 71:
vlme745fcd2006-09-05 16:18:34 +00002420#line 849 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002421 {
vlm4053ca52005-02-18 16:34:21 +00002422 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002423 yyval.a_parg.governor = asn1p_ref_new(yylineno);
vlmd3420d32006-09-14 10:35:20 +00002424 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
vlmdfbff8c2006-03-21 09:41:28 +00002425 checkmem(ret == 0);
2426 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00002427 }
2428 break;
2429
2430 case 72:
vlmd3420d32006-09-14 10:35:20 +00002431#line 856 "asn1p_y.y"
2432 {
2433 int ret;
2434 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2435 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
2436 checkmem(ret == 0);
2437 yyval.a_parg.argument = yyvsp[0].tv_str;
2438 }
2439 break;
2440
2441 case 73:
2442#line 863 "asn1p_y.y"
2443 {
2444 int ret;
2445 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2446 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2447 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2448 checkmem(ret == 0);
2449 yyval.a_parg.argument = yyvsp[0].tv_str;
2450 }
2451 break;
2452
2453 case 74:
2454#line 871 "asn1p_y.y"
2455 {
2456 int ret;
2457 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2458 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2459 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2460 checkmem(ret == 0);
2461 yyval.a_parg.argument = yyvsp[0].tv_str;
2462 }
2463 break;
2464
2465 case 75:
2466#line 882 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002467 {
vlm0c6d3812006-03-21 03:40:38 +00002468 yyval.a_expr = asn1p_expr_new(yylineno);
2469 checkmem(yyval.a_expr);
2470 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002471 }
2472 break;
2473
vlmd3420d32006-09-14 10:35:20 +00002474 case 76:
2475#line 887 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002476 {
vlm0c6d3812006-03-21 03:40:38 +00002477 yyval.a_expr = yyvsp[-2].a_expr;
2478 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002479 }
2480 break;
2481
vlmd3420d32006-09-14 10:35:20 +00002482 case 77:
2483#line 894 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002484 {
vlm0c6d3812006-03-21 03:40:38 +00002485 yyval.a_expr = yyvsp[0].a_expr;
vlm1aeaddd2006-07-13 08:24:20 +00002486 }
2487 break;
2488
vlmd3420d32006-09-14 10:35:20 +00002489 case 78:
2490#line 897 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002491 {
vlm17e65d02006-03-21 04:48:15 +00002492 yyval.a_expr = asn1p_expr_new(yylineno);
2493 checkmem(yyval.a_expr);
2494 yyval.a_expr->Identifier = "?";
2495 yyval.a_expr->expr_type = A1TC_REFERENCE;
2496 yyval.a_expr->meta_type = AMT_VALUE;
2497 yyval.a_expr->value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00002498 }
2499 break;
2500
vlmd3420d32006-09-14 10:35:20 +00002501 case 79:
2502#line 905 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002503 {
vlm0c6d3812006-03-21 03:40:38 +00002504 asn1p_ref_t *ref;
2505 yyval.a_expr = asn1p_expr_new(yylineno);
2506 checkmem(yyval.a_expr);
2507 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2508 yyval.a_expr->expr_type = A1TC_REFERENCE;
2509 yyval.a_expr->meta_type = AMT_VALUE;
2510 ref = asn1p_ref_new(yylineno);
2511 asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2512 yyval.a_expr->value = asn1p_value_fromref(ref, 0);
vlm1aeaddd2006-07-13 08:24:20 +00002513 }
2514 break;
2515
vlmd3420d32006-09-14 10:35:20 +00002516 case 80:
2517#line 916 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002518 {
vlmdfbff8c2006-03-21 09:41:28 +00002519 yyval.a_expr = asn1p_expr_new(yylineno);
2520 yyval.a_expr->expr_type = A1TC_VALUESET;
2521 yyval.a_expr->meta_type = AMT_VALUESET;
2522 yyval.a_expr->constraints = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00002523 }
2524 break;
2525
vlmd3420d32006-09-14 10:35:20 +00002526 case 81:
2527#line 939 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002528 { yyval.a_expr = asn1p_expr_new(yylineno); }
2529 break;
2530
vlmd3420d32006-09-14 10:35:20 +00002531 case 82:
2532#line 940 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002533 { yyval.a_expr = yyvsp[0].a_expr; }
2534 break;
2535
vlmd3420d32006-09-14 10:35:20 +00002536 case 83:
2537#line 943 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002538 {
vlm0c6d3812006-03-21 03:40:38 +00002539 yyval.a_expr = asn1p_expr_new(yylineno);
2540 checkmem(yyval.a_expr);
2541 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002542 }
2543 break;
2544
vlmd3420d32006-09-14 10:35:20 +00002545 case 84:
2546#line 948 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002547 {
vlm0c6d3812006-03-21 03:40:38 +00002548 yyval.a_expr = yyvsp[-2].a_expr;
2549 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002550 }
2551 break;
2552
vlmd3420d32006-09-14 10:35:20 +00002553 case 85:
2554#line 955 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002555 {
vlm0c6d3812006-03-21 03:40:38 +00002556 yyval.a_expr = yyvsp[-1].a_expr;
2557 assert(yyval.a_expr->Identifier == 0);
2558 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2559 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2560 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm1aeaddd2006-07-13 08:24:20 +00002561 }
2562 break;
2563
vlmd3420d32006-09-14 10:35:20 +00002564 case 86:
2565#line 962 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002566 {
vlm0c6d3812006-03-21 03:40:38 +00002567 yyval.a_expr = yyvsp[-1].a_expr;
2568 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2569 yyval.a_expr->marker = yyvsp[0].a_marker;
2570 _fixup_anonymous_identifier(yyval.a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002571 }
2572 break;
2573
vlmd3420d32006-09-14 10:35:20 +00002574 case 87:
2575#line 968 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002576 {
vlm0c6d3812006-03-21 03:40:38 +00002577 yyval.a_expr = asn1p_expr_new(yylineno);
2578 checkmem(yyval.a_expr);
2579 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2580 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
2581 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002582 }
2583 break;
2584
vlmd3420d32006-09-14 10:35:20 +00002585 case 88:
2586#line 975 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002587 {
vlm0c6d3812006-03-21 03:40:38 +00002588 yyval.a_expr = yyvsp[0].a_expr;
vlm1aeaddd2006-07-13 08:24:20 +00002589 }
2590 break;
2591
vlmd3420d32006-09-14 10:35:20 +00002592 case 89:
2593#line 981 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002594 {
vlm0c6d3812006-03-21 03:40:38 +00002595 yyval.a_expr = asn1p_expr_new(yylineno);
2596 checkmem(yyval.a_expr);
2597 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002598 }
2599 break;
2600
vlmd3420d32006-09-14 10:35:20 +00002601 case 90:
2602#line 986 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002603 {
vlm0c6d3812006-03-21 03:40:38 +00002604 yyval.a_expr = yyvsp[-2].a_expr;
2605 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002606 }
2607 break;
2608
vlmd3420d32006-09-14 10:35:20 +00002609 case 91:
2610#line 993 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002611 {
vlm0c6d3812006-03-21 03:40:38 +00002612 yyval.a_expr = yyvsp[0].a_expr;
2613 assert(yyval.a_expr->Identifier == 0);
2614 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00002615 }
2616 break;
2617
vlmd3420d32006-09-14 10:35:20 +00002618 case 92:
2619#line 998 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002620 {
vlm0c6d3812006-03-21 03:40:38 +00002621 yyval.a_expr = yyvsp[0].a_expr;
vlm1aeaddd2006-07-13 08:24:20 +00002622 }
2623 break;
2624
vlmd3420d32006-09-14 10:35:20 +00002625 case 93:
2626#line 1001 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002627 {
vlm0c6d3812006-03-21 03:40:38 +00002628 yyval.a_expr = yyvsp[0].a_expr;
2629 _fixup_anonymous_identifier(yyval.a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002630 }
2631 break;
2632
vlmd3420d32006-09-14 10:35:20 +00002633 case 94:
2634#line 1008 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002635 {
vlm0c6d3812006-03-21 03:40:38 +00002636 yyval.a_expr = yyvsp[-2].a_expr;
2637 checkmem(yyval.a_expr);
2638 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2639 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2640 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
vlm1aeaddd2006-07-13 08:24:20 +00002641 }
2642 break;
2643
vlmd3420d32006-09-14 10:35:20 +00002644 case 95:
2645#line 1018 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002646 { yyval.a_int = 0; }
2647 break;
2648
vlmd3420d32006-09-14 10:35:20 +00002649 case 96:
2650#line 1019 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002651 { yyval.a_int = 1; }
2652 break;
2653
vlmd3420d32006-09-14 10:35:20 +00002654 case 97:
2655#line 1023 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002656 {
vlm0c6d3812006-03-21 03:40:38 +00002657 yyval.a_expr = asn1p_expr_new(yylineno);
2658 checkmem(yyval.a_expr);
2659 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2660 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2661 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002662 }
2663 break;
2664
vlmd3420d32006-09-14 10:35:20 +00002665 case 98:
2666#line 1030 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002667 {
vlm0c6d3812006-03-21 03:40:38 +00002668 yyval.a_expr = yyvsp[-2].a_expr;
2669 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002670 }
2671 break;
2672
vlmd3420d32006-09-14 10:35:20 +00002673 case 99:
2674#line 1040 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002675 {
vlm0c6d3812006-03-21 03:40:38 +00002676 yyval.a_expr = asn1p_expr_new(yylineno);
2677 checkmem(yyval.a_expr);
2678 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2679 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2680 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2681 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm1aeaddd2006-07-13 08:24:20 +00002682 }
2683 break;
2684
vlmd3420d32006-09-14 10:35:20 +00002685 case 100:
2686#line 1050 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002687 {
vlm0c6d3812006-03-21 03:40:38 +00002688 yyval.a_expr = asn1p_expr_new(yylineno);
2689 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2690 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2691 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2692 yyval.a_expr->unique = yyvsp[-1].a_int;
2693 yyval.a_expr->marker = yyvsp[0].a_marker;
2694 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002695 }
2696 break;
2697
vlmd3420d32006-09-14 10:35:20 +00002698 case 101:
2699#line 1061 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002700 {
vlm0c6d3812006-03-21 03:40:38 +00002701 yyval.a_expr = asn1p_expr_new(yylineno);
2702 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2703 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2704 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2705 yyval.a_expr->reference = yyvsp[-1].a_ref;
2706 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm1aeaddd2006-07-13 08:24:20 +00002707 }
2708 break;
2709
vlmd3420d32006-09-14 10:35:20 +00002710 case 102:
2711#line 1071 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002712 {
vlm0c6d3812006-03-21 03:40:38 +00002713 yyval.a_expr = asn1p_expr_new(yylineno);
2714 checkmem(yyval.a_expr);
2715 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2716 yyval.a_expr->reference = yyvsp[-1].a_ref;
2717 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2718 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2719 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm1aeaddd2006-07-13 08:24:20 +00002720 }
2721 break;
2722
vlmd3420d32006-09-14 10:35:20 +00002723 case 103:
2724#line 1082 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002725 {
vlm0c6d3812006-03-21 03:40:38 +00002726 yyval.a_expr = asn1p_expr_new(yylineno);
2727 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2728 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2729 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2730 yyval.a_expr->reference = yyvsp[-1].a_ref;
2731 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm1aeaddd2006-07-13 08:24:20 +00002732 }
2733 break;
2734
vlmd3420d32006-09-14 10:35:20 +00002735 case 104:
2736#line 1092 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002737 {
vlm0c6d3812006-03-21 03:40:38 +00002738 yyval.a_expr = asn1p_expr_new(yylineno);
2739 checkmem(yyval.a_expr);
2740 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2741 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2742 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2743 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
2744 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm1aeaddd2006-07-13 08:24:20 +00002745 }
2746 break;
2747
vlmd3420d32006-09-14 10:35:20 +00002748 case 105:
2749#line 1103 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002750 {
vlm0c6d3812006-03-21 03:40:38 +00002751 yyval.a_expr = asn1p_expr_new(yylineno);
2752 checkmem(yyval.a_expr);
2753 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2754 yyval.a_expr->reference = yyvsp[-1].a_ref;
2755 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2756 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2757 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm1aeaddd2006-07-13 08:24:20 +00002758 }
2759 break;
2760
vlmd3420d32006-09-14 10:35:20 +00002761 case 106:
2762#line 1115 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002763 { yyval.a_wsynt = 0; }
2764 break;
2765
vlmd3420d32006-09-14 10:35:20 +00002766 case 107:
2767#line 1116 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002768 {
vlm0c6d3812006-03-21 03:40:38 +00002769 yyval.a_wsynt = yyvsp[0].a_wsynt;
vlm1aeaddd2006-07-13 08:24:20 +00002770 }
2771 break;
2772
vlmd3420d32006-09-14 10:35:20 +00002773 case 108:
2774#line 1123 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002775 { asn1p_lexer_hack_enable_with_syntax(); }
2776 break;
2777
vlmd3420d32006-09-14 10:35:20 +00002778 case 109:
2779#line 1125 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002780 {
vlm0c6d3812006-03-21 03:40:38 +00002781 yyval.a_wsynt = yyvsp[-1].a_wsynt;
vlm1aeaddd2006-07-13 08:24:20 +00002782 }
2783 break;
2784
vlmd3420d32006-09-14 10:35:20 +00002785 case 110:
2786#line 1131 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002787 {
vlm0c6d3812006-03-21 03:40:38 +00002788 yyval.a_wsynt = asn1p_wsyntx_new();
2789 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm1aeaddd2006-07-13 08:24:20 +00002790 }
2791 break;
2792
vlmd3420d32006-09-14 10:35:20 +00002793 case 111:
2794#line 1135 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002795 {
vlm0c6d3812006-03-21 03:40:38 +00002796 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2797 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm1aeaddd2006-07-13 08:24:20 +00002798 }
2799 break;
2800
vlmd3420d32006-09-14 10:35:20 +00002801 case 112:
2802#line 1142 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002803 {
vlm1fcf7592006-08-18 02:27:55 +00002804 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_opaque.buf, 0);
vlm0c6d3812006-03-21 03:40:38 +00002805 yyval.a_wchunk->type = WC_WHITESPACE;
vlm1aeaddd2006-07-13 08:24:20 +00002806 }
2807 break;
2808
vlmd3420d32006-09-14 10:35:20 +00002809 case 113:
2810#line 1146 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002811 {
vlm1fcf7592006-08-18 02:27:55 +00002812 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_str, 0);
vlm1aeaddd2006-07-13 08:24:20 +00002813 }
2814 break;
2815
vlmd3420d32006-09-14 10:35:20 +00002816 case 114:
2817#line 1149 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002818 {
vlm1fcf7592006-08-18 02:27:55 +00002819 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].a_refcomp.name, 0);
vlm0c6d3812006-03-21 03:40:38 +00002820 yyval.a_wchunk->type = WC_FIELD;
vlm1aeaddd2006-07-13 08:24:20 +00002821 }
2822 break;
2823
vlmd3420d32006-09-14 10:35:20 +00002824 case 115:
2825#line 1153 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002826 {
vlm0c6d3812006-03-21 03:40:38 +00002827 yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
vlm1aeaddd2006-07-13 08:24:20 +00002828 }
2829 break;
2830
vlm1aeaddd2006-07-13 08:24:20 +00002831 case 116:
vlmd3420d32006-09-14 10:35:20 +00002832#line 1159 "asn1p_y.y"
2833 {
2834 yyval.a_expr = asn1p_expr_new(yylineno);
2835 checkmem(yyval.a_expr);
2836 yyval.a_expr->Identifier = strdup("...");
2837 checkmem(yyval.a_expr->Identifier);
2838 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2839 yyval.a_expr->meta_type = AMT_TYPE;
2840 }
2841 break;
2842
2843 case 117:
2844#line 1167 "asn1p_y.y"
2845 {
2846 yyval.a_expr = asn1p_expr_new(yylineno);
2847 checkmem(yyval.a_expr);
2848 yyval.a_expr->Identifier = strdup("...");
2849 checkmem(yyval.a_expr->Identifier);
2850 yyval.a_expr->value = yyvsp[0].a_value;
2851 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2852 yyval.a_expr->meta_type = AMT_TYPE;
2853 }
2854 break;
2855
2856 case 118:
2857#line 1176 "asn1p_y.y"
2858 {
2859 yyval.a_expr = asn1p_expr_new(yylineno);
2860 checkmem(yyval.a_expr);
2861 yyval.a_expr->Identifier = strdup("...");
2862 yyval.a_expr->value = yyvsp[0].a_value;
2863 checkmem(yyval.a_expr->Identifier);
2864 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2865 yyval.a_expr->meta_type = AMT_TYPE;
2866 }
2867 break;
2868
2869 case 119:
2870#line 1188 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002871 {
vlm0c6d3812006-03-21 03:40:38 +00002872 yyval.a_expr = yyvsp[-1].a_expr;
2873 yyval.a_expr->tag = yyvsp[-2].a_tag;
vlmec8f6812004-08-22 03:19:54 +00002874 /*
2875 * Outer constraint for SEQUENCE OF and SET OF applies
2876 * to the inner type.
2877 */
vlm0c6d3812006-03-21 03:40:38 +00002878 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2879 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2880 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2881 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002882 } else {
vlm0c6d3812006-03-21 03:40:38 +00002883 if(yyval.a_expr->constraints) {
2884 assert(!yyvsp[-1].a_expr);
vlmec8f6812004-08-22 03:19:54 +00002885 } else {
vlm0c6d3812006-03-21 03:40:38 +00002886 yyval.a_expr->constraints = yyvsp[0].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002887 }
2888 }
vlm1aeaddd2006-07-13 08:24:20 +00002889 }
2890 break;
2891
vlmd3420d32006-09-14 10:35:20 +00002892 case 120:
2893#line 1210 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002894 {
vlm0c6d3812006-03-21 03:40:38 +00002895 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
vlm7e436752006-03-18 06:53:11 +00002896 asn1p_as_pointer = 0;
vlm1aeaddd2006-07-13 08:24:20 +00002897 }
2898 break;
2899
vlmd3420d32006-09-14 10:35:20 +00002900 case 121:
2901#line 1217 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002902 {
vlm0c6d3812006-03-21 03:40:38 +00002903 yyval.a_expr = yyvsp[0].a_expr;
2904 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
vlm7e436752006-03-18 06:53:11 +00002905
vlm0c6d3812006-03-21 03:40:38 +00002906 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2907 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
vlm177a5b62005-09-05 05:17:57 +00002908 fprintf(stderr,
2909 "INFO: Directive <ASN1C:RepresentAsPointer> "
2910 "applied to %s at line %d\n",
vlm0c6d3812006-03-21 03:40:38 +00002911 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2912 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
vlm177a5b62005-09-05 05:17:57 +00002913 : "member",
vlm0c6d3812006-03-21 03:40:38 +00002914 yyval.a_expr->_lineno
vlm177a5b62005-09-05 05:17:57 +00002915 );
2916 }
vlm1aeaddd2006-07-13 08:24:20 +00002917 }
2918 break;
2919
vlmd3420d32006-09-14 10:35:20 +00002920 case 122:
2921#line 1236 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002922 {
vlm0c6d3812006-03-21 03:40:38 +00002923 yyval.a_expr = yyvsp[0].a_expr;
vlm1aeaddd2006-07-13 08:24:20 +00002924 }
2925 break;
2926
vlmd3420d32006-09-14 10:35:20 +00002927 case 123:
2928#line 1239 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002929 {
vlm0c6d3812006-03-21 03:40:38 +00002930 yyval.a_expr = yyvsp[-1].a_expr;
2931 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2932 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2933 yyval.a_expr->meta_type = AMT_TYPE;
vlm1aeaddd2006-07-13 08:24:20 +00002934 }
2935 break;
2936
vlmd3420d32006-09-14 10:35:20 +00002937 case 124:
2938#line 1245 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002939 {
vlm0c6d3812006-03-21 03:40:38 +00002940 yyval.a_expr = yyvsp[-1].a_expr;
2941 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2942 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2943 yyval.a_expr->meta_type = AMT_TYPE;
vlm1aeaddd2006-07-13 08:24:20 +00002944 }
2945 break;
2946
vlmd3420d32006-09-14 10:35:20 +00002947 case 125:
2948#line 1251 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002949 {
vlm0c6d3812006-03-21 03:40:38 +00002950 yyval.a_expr = yyvsp[-1].a_expr;
2951 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2952 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2953 yyval.a_expr->meta_type = AMT_TYPE;
vlm1aeaddd2006-07-13 08:24:20 +00002954 }
2955 break;
2956
vlmd3420d32006-09-14 10:35:20 +00002957 case 126:
2958#line 1257 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002959 {
vlm0c6d3812006-03-21 03:40:38 +00002960 yyval.a_expr = asn1p_expr_new(yylineno);
2961 checkmem(yyval.a_expr);
2962 yyval.a_expr->constraints = yyvsp[-4].a_constr;
2963 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2964 yyval.a_expr->meta_type = AMT_TYPE;
2965 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
2966 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
2967 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002968 }
2969 break;
2970
vlmd3420d32006-09-14 10:35:20 +00002971 case 127:
2972#line 1267 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002973 {
vlm0c6d3812006-03-21 03:40:38 +00002974 yyval.a_expr = asn1p_expr_new(yylineno);
2975 checkmem(yyval.a_expr);
2976 yyval.a_expr->constraints = yyvsp[-4].a_constr;
2977 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
2978 yyval.a_expr->meta_type = AMT_TYPE;
2979 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
2980 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
2981 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002982 }
2983 break;
2984
vlmd3420d32006-09-14 10:35:20 +00002985 case 128:
2986#line 1277 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002987 {
vlm0c6d3812006-03-21 03:40:38 +00002988 yyval.a_expr = asn1p_expr_new(yylineno);
2989 checkmem(yyval.a_expr);
2990 yyval.a_expr->expr_type = ASN_TYPE_ANY;
2991 yyval.a_expr->meta_type = AMT_TYPE;
vlm1aeaddd2006-07-13 08:24:20 +00002992 }
2993 break;
2994
vlmd3420d32006-09-14 10:35:20 +00002995 case 129:
2996#line 1283 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002997 {
vlmec8f6812004-08-22 03:19:54 +00002998 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002999 yyval.a_expr = asn1p_expr_new(yylineno);
3000 checkmem(yyval.a_expr);
3001 yyval.a_expr->reference = asn1p_ref_new(yylineno);
3002 ret = asn1p_ref_add_component(yyval.a_expr->reference,
3003 yyvsp[0].tv_str, RLT_lowercase);
vlmec8f6812004-08-22 03:19:54 +00003004 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003005 yyval.a_expr->expr_type = ASN_TYPE_ANY;
3006 yyval.a_expr->meta_type = AMT_TYPE;
vlm1aeaddd2006-07-13 08:24:20 +00003007 }
3008 break;
3009
vlmd3420d32006-09-14 10:35:20 +00003010 case 130:
3011#line 1294 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003012 {
vlm0c6d3812006-03-21 03:40:38 +00003013 yyval.a_expr = asn1p_expr_new(yylineno);
3014 checkmem(yyval.a_expr);
3015 yyval.a_expr->reference = yyvsp[0].a_ref;
3016 yyval.a_expr->expr_type = A1TC_INSTANCE;
3017 yyval.a_expr->meta_type = AMT_TYPE;
vlm1aeaddd2006-07-13 08:24:20 +00003018 }
3019 break;
3020
vlmd3420d32006-09-14 10:35:20 +00003021 case 131:
3022#line 1309 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003023 {
vlmfa67ddc2004-06-03 03:38:44 +00003024 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003025 yyval.a_ref = asn1p_ref_new(yylineno);
3026 checkmem(yyval.a_ref);
3027 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
vlmfa67ddc2004-06-03 03:38:44 +00003028 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003029 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003030 }
3031 break;
3032
vlmd3420d32006-09-14 10:35:20 +00003033 case 132:
3034#line 1317 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003035 {
vlmfa67ddc2004-06-03 03:38:44 +00003036 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003037 yyval.a_ref = asn1p_ref_new(yylineno);
3038 checkmem(yyval.a_ref);
3039 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
vlmfa67ddc2004-06-03 03:38:44 +00003040 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003041 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3042 checkmem(ret == 0);
3043 free(yyvsp[-2].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003044 }
3045 break;
3046
vlmd3420d32006-09-14 10:35:20 +00003047 case 133:
3048#line 1327 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003049 {
vlm808411d2006-03-14 16:31:37 +00003050 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003051 yyval.a_ref = asn1p_ref_new(yylineno);
3052 checkmem(yyval.a_ref);
3053 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
vlm808411d2006-03-14 16:31:37 +00003054 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003055 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
vlm808411d2006-03-14 16:31:37 +00003056 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003057 free(yyvsp[-2].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003058 }
3059 break;
3060
vlmd3420d32006-09-14 10:35:20 +00003061 case 134:
3062#line 1337 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003063 {
vlm808411d2006-03-14 16:31:37 +00003064 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003065 yyval.a_ref = asn1p_ref_new(yylineno);
3066 checkmem(yyval.a_ref);
3067 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
vlm808411d2006-03-14 16:31:37 +00003068 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003069 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
vlm808411d2006-03-14 16:31:37 +00003070 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003071 free(yyvsp[-2].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003072 }
3073 break;
3074
vlmd3420d32006-09-14 10:35:20 +00003075 case 135:
3076#line 1347 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003077 {
vlmfa67ddc2004-06-03 03:38:44 +00003078 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003079 yyval.a_ref = asn1p_ref_new(yylineno);
3080 checkmem(yyval.a_ref);
3081 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
3082 free(yyvsp[0].tv_str);
vlmc94e28f2004-09-15 11:59:51 +00003083 checkmem(ret == 0);
vlm1aeaddd2006-07-13 08:24:20 +00003084 }
3085 break;
3086
vlmd3420d32006-09-14 10:35:20 +00003087 case 136:
3088#line 1355 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003089 {
vlmc94e28f2004-09-15 11:59:51 +00003090 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003091 yyval.a_ref = yyvsp[0].a_ref;
3092 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
3093 free(yyvsp[-2].tv_str);
vlmfa67ddc2004-06-03 03:38:44 +00003094 checkmem(ret == 0);
3095 /*
3096 * Move the last element infront.
3097 */
3098 {
3099 struct asn1p_ref_component_s tmp_comp;
vlm0c6d3812006-03-21 03:40:38 +00003100 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
3101 memmove(&yyval.a_ref->components[1],
3102 &yyval.a_ref->components[0],
3103 sizeof(yyval.a_ref->components[0])
3104 * (yyval.a_ref->comp_count - 1));
3105 yyval.a_ref->components[0] = tmp_comp;
vlmfa67ddc2004-06-03 03:38:44 +00003106 }
vlm1aeaddd2006-07-13 08:24:20 +00003107 }
3108 break;
3109
vlmd3420d32006-09-14 10:35:20 +00003110 case 137:
3111#line 1377 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003112 {
vlmfa67ddc2004-06-03 03:38:44 +00003113 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003114 yyval.a_ref = asn1p_ref_new(yylineno);
3115 checkmem(yyval.a_ref);
3116 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
3117 free(yyvsp[0].a_refcomp.name);
vlmfa67ddc2004-06-03 03:38:44 +00003118 checkmem(ret == 0);
vlm1aeaddd2006-07-13 08:24:20 +00003119 }
3120 break;
3121
vlmd3420d32006-09-14 10:35:20 +00003122 case 138:
3123#line 1385 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003124 {
vlmfa67ddc2004-06-03 03:38:44 +00003125 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003126 yyval.a_ref = yyvsp[-2].a_ref;
3127 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
3128 free(yyvsp[0].a_refcomp.name);
vlmfa67ddc2004-06-03 03:38:44 +00003129 checkmem(ret == 0);
vlm1aeaddd2006-07-13 08:24:20 +00003130 }
3131 break;
3132
vlmd3420d32006-09-14 10:35:20 +00003133 case 140:
3134#line 1398 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003135 {
vlm0c6d3812006-03-21 03:40:38 +00003136 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
3137 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00003138 }
3139 break;
3140
vlmd3420d32006-09-14 10:35:20 +00003141 case 141:
3142#line 1403 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003143 {
vlm0c6d3812006-03-21 03:40:38 +00003144 yyval.a_refcomp.lex_type = RLT_Amplowercase;
3145 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00003146 }
3147 break;
3148
vlmd3420d32006-09-14 10:35:20 +00003149 case 142:
3150#line 1412 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003151 {
vlm0c6d3812006-03-21 03:40:38 +00003152 yyval.a_ref = asn1p_ref_new(yylineno);
3153 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
vlm1aeaddd2006-07-13 08:24:20 +00003154 }
3155 break;
3156
vlmd3420d32006-09-14 10:35:20 +00003157 case 143:
3158#line 1416 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003159 {
vlm0c6d3812006-03-21 03:40:38 +00003160 yyval.a_ref = yyval.a_ref;
3161 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
vlm1aeaddd2006-07-13 08:24:20 +00003162 }
3163 break;
3164
vlmd3420d32006-09-14 10:35:20 +00003165 case 144:
3166#line 1420 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003167 {
vlm0c6d3812006-03-21 03:40:38 +00003168 yyval.a_ref = yyval.a_ref;
3169 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
vlm1aeaddd2006-07-13 08:24:20 +00003170 }
3171 break;
3172
vlmd3420d32006-09-14 10:35:20 +00003173 case 145:
3174#line 1427 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003175 {
vlm0c6d3812006-03-21 03:40:38 +00003176 yyval.a_ref = asn1p_ref_new(yylineno);
3177 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
vlm1aeaddd2006-07-13 08:24:20 +00003178 }
3179 break;
3180
vlmd3420d32006-09-14 10:35:20 +00003181 case 146:
3182#line 1447 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003183 {
vlm0c6d3812006-03-21 03:40:38 +00003184 yyval.a_expr = yyvsp[-2].a_expr;
3185 assert(yyval.a_expr->Identifier == NULL);
3186 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3187 yyval.a_expr->meta_type = AMT_VALUE;
3188 yyval.a_expr->value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00003189 }
3190 break;
3191
vlmd3420d32006-09-14 10:35:20 +00003192 case 149:
3193#line 1459 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003194 {
vlm0c6d3812006-03-21 03:40:38 +00003195 yyval.a_value = asn1p_value_fromint(0);
3196 checkmem(yyval.a_value);
3197 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
3198 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
3199 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00003200 }
3201 break;
3202
vlmd3420d32006-09-14 10:35:20 +00003203 case 150:
3204#line 1466 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003205 { asn1p_lexer_hack_push_opaque_state(); }
3206 break;
3207
vlmd3420d32006-09-14 10:35:20 +00003208 case 151:
3209#line 1466 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003210 {
vlm0c6d3812006-03-21 03:40:38 +00003211 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3212 checkmem(yyval.a_value);
3213 yyval.a_value->type = ATV_UNPARSED;
vlm1aeaddd2006-07-13 08:24:20 +00003214 }
3215 break;
3216
vlmd3420d32006-09-14 10:35:20 +00003217 case 152:
3218#line 1471 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003219 {
vlm0c6d3812006-03-21 03:40:38 +00003220 yyval.a_value = asn1p_value_fromint(0);
3221 checkmem(yyval.a_value);
3222 yyval.a_value->type = ATV_NULL;
vlm1aeaddd2006-07-13 08:24:20 +00003223 }
3224 break;
3225
vlmd3420d32006-09-14 10:35:20 +00003226 case 153:
3227#line 1479 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003228 {
vlm0c6d3812006-03-21 03:40:38 +00003229 yyval.a_value = asn1p_value_fromint(0);
3230 checkmem(yyval.a_value);
3231 yyval.a_value->type = ATV_FALSE;
vlm1aeaddd2006-07-13 08:24:20 +00003232 }
3233 break;
3234
vlmd3420d32006-09-14 10:35:20 +00003235 case 154:
3236#line 1484 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003237 {
vlm0c6d3812006-03-21 03:40:38 +00003238 yyval.a_value = asn1p_value_fromint(0);
3239 checkmem(yyval.a_value);
3240 yyval.a_value->type = ATV_TRUE;
vlm1aeaddd2006-07-13 08:24:20 +00003241 }
3242 break;
3243
vlmd3420d32006-09-14 10:35:20 +00003244 case 155:
3245#line 1489 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003246 {
vlm0c6d3812006-03-21 03:40:38 +00003247 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
3248 checkmem(yyval.a_value);
vlm1aeaddd2006-07-13 08:24:20 +00003249 }
3250 break;
3251
vlmd3420d32006-09-14 10:35:20 +00003252 case 156:
3253#line 1493 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003254 {
vlm0c6d3812006-03-21 03:40:38 +00003255 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
3256 checkmem(yyval.a_value);
vlm1aeaddd2006-07-13 08:24:20 +00003257 }
3258 break;
3259
vlmd3420d32006-09-14 10:35:20 +00003260 case 157:
3261#line 1497 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003262 {
vlm0c6d3812006-03-21 03:40:38 +00003263 yyval.a_value = yyval.a_value;
vlm1aeaddd2006-07-13 08:24:20 +00003264 }
3265 break;
3266
vlmd3420d32006-09-14 10:35:20 +00003267 case 158:
3268#line 1500 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003269 {
vlm17e65d02006-03-21 04:48:15 +00003270 yyval.a_value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00003271 }
3272 break;
3273
vlmd3420d32006-09-14 10:35:20 +00003274 case 159:
3275#line 1506 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003276 {
vlmfa67ddc2004-06-03 03:38:44 +00003277 asn1p_ref_t *ref;
3278 int ret;
3279 ref = asn1p_ref_new(yylineno);
3280 checkmem(ref);
vlm0c6d3812006-03-21 03:40:38 +00003281 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
vlmfa67ddc2004-06-03 03:38:44 +00003282 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003283 yyval.a_value = asn1p_value_fromref(ref, 0);
3284 checkmem(yyval.a_value);
3285 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003286 }
3287 break;
3288
vlmd3420d32006-09-14 10:35:20 +00003289 case 160:
3290#line 1517 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003291 {
vlmfa67ddc2004-06-03 03:38:44 +00003292 asn1p_ref_t *ref;
3293 int ret;
3294 ref = asn1p_ref_new(yylineno);
3295 checkmem(ref);
vlm0c6d3812006-03-21 03:40:38 +00003296 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
vlmfa67ddc2004-06-03 03:38:44 +00003297 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003298 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
vlmfa67ddc2004-06-03 03:38:44 +00003299 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003300 yyval.a_value = asn1p_value_fromref(ref, 0);
3301 checkmem(yyval.a_value);
3302 free(yyvsp[-2].tv_str);
3303 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003304 }
3305 break;
3306
vlmd3420d32006-09-14 10:35:20 +00003307 case 161:
3308#line 1535 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003309 {
vlm0c6d3812006-03-21 03:40:38 +00003310 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3311 checkmem(yyval.a_value);
vlm1aeaddd2006-07-13 08:24:20 +00003312 }
3313 break;
3314
vlmd3420d32006-09-14 10:35:20 +00003315 case 162:
3316#line 1539 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003317 {
vlm0c6d3812006-03-21 03:40:38 +00003318 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3319 checkmem(yyval.a_value);
3320 yyval.a_value->type = ATV_TUPLE;
vlm1aeaddd2006-07-13 08:24:20 +00003321 }
3322 break;
3323
vlmd3420d32006-09-14 10:35:20 +00003324 case 163:
3325#line 1544 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003326 {
vlm0c6d3812006-03-21 03:40:38 +00003327 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3328 checkmem(yyval.a_value);
3329 yyval.a_value->type = ATV_QUADRUPLE;
vlm1aeaddd2006-07-13 08:24:20 +00003330 }
3331 break;
3332
vlmd3420d32006-09-14 10:35:20 +00003333 case 164:
3334#line 1578 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003335 {
vlm0c6d3812006-03-21 03:40:38 +00003336 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
3337 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
3338 checkmem(yyval.tv_opaque.buf);
3339 yyval.tv_opaque.buf[0] = '{';
3340 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
3341 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
3342 free(yyvsp[0].tv_opaque.buf);
vlm1aeaddd2006-07-13 08:24:20 +00003343 }
3344 break;
3345
vlmd3420d32006-09-14 10:35:20 +00003346 case 165:
3347#line 1587 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003348 {
vlm0c6d3812006-03-21 03:40:38 +00003349 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
vlmfa67ddc2004-06-03 03:38:44 +00003350 char *p = malloc(newsize + 1);
3351 checkmem(p);
vlm0c6d3812006-03-21 03:40:38 +00003352 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
3353 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
vlmfa67ddc2004-06-03 03:38:44 +00003354 p[newsize] = '\0';
vlm0c6d3812006-03-21 03:40:38 +00003355 free(yyvsp[-1].tv_opaque.buf);
3356 free(yyvsp[0].tv_opaque.buf);
3357 yyval.tv_opaque.buf = p;
3358 yyval.tv_opaque.len = newsize;
vlm1aeaddd2006-07-13 08:24:20 +00003359 }
3360 break;
3361
vlmd3420d32006-09-14 10:35:20 +00003362 case 166:
3363#line 1602 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003364 { yyval.a_type = ASN_BASIC_BOOLEAN; }
3365 break;
3366
vlmd3420d32006-09-14 10:35:20 +00003367 case 167:
3368#line 1603 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003369 { yyval.a_type = ASN_BASIC_NULL; }
3370 break;
3371
vlmd3420d32006-09-14 10:35:20 +00003372 case 168:
3373#line 1604 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003374 { yyval.a_type = ASN_BASIC_REAL; }
3375 break;
3376
vlm1aeaddd2006-07-13 08:24:20 +00003377 case 169:
vlmd3420d32006-09-14 10:35:20 +00003378#line 1605 "asn1p_y.y"
3379 { yyval.a_type = yyvsp[0].a_type; }
vlm1aeaddd2006-07-13 08:24:20 +00003380 break;
3381
3382 case 170:
vlmd3420d32006-09-14 10:35:20 +00003383#line 1606 "asn1p_y.y"
3384 { yyval.a_type = ASN_BASIC_OCTET_STRING; }
vlm1aeaddd2006-07-13 08:24:20 +00003385 break;
3386
3387 case 171:
vlmd3420d32006-09-14 10:35:20 +00003388#line 1607 "asn1p_y.y"
3389 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
vlm1aeaddd2006-07-13 08:24:20 +00003390 break;
3391
3392 case 172:
vlmd3420d32006-09-14 10:35:20 +00003393#line 1608 "asn1p_y.y"
3394 { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
vlm1aeaddd2006-07-13 08:24:20 +00003395 break;
3396
3397 case 173:
vlmd3420d32006-09-14 10:35:20 +00003398#line 1609 "asn1p_y.y"
3399 { yyval.a_type = ASN_BASIC_EXTERNAL; }
vlm1aeaddd2006-07-13 08:24:20 +00003400 break;
3401
3402 case 174:
vlmd3420d32006-09-14 10:35:20 +00003403#line 1610 "asn1p_y.y"
3404 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
vlm1aeaddd2006-07-13 08:24:20 +00003405 break;
3406
3407 case 175:
vlmd3420d32006-09-14 10:35:20 +00003408#line 1611 "asn1p_y.y"
3409 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
vlm1aeaddd2006-07-13 08:24:20 +00003410 break;
3411
3412 case 176:
vlmd3420d32006-09-14 10:35:20 +00003413#line 1612 "asn1p_y.y"
3414 { yyval.a_type = ASN_BASIC_UTCTime; }
vlm1aeaddd2006-07-13 08:24:20 +00003415 break;
3416
3417 case 177:
vlmd3420d32006-09-14 10:35:20 +00003418#line 1613 "asn1p_y.y"
3419 { yyval.a_type = ASN_BASIC_GeneralizedTime; }
vlm1aeaddd2006-07-13 08:24:20 +00003420 break;
3421
3422 case 178:
vlmd3420d32006-09-14 10:35:20 +00003423#line 1614 "asn1p_y.y"
3424 { yyval.a_type = yyvsp[0].a_type; }
vlm1aeaddd2006-07-13 08:24:20 +00003425 break;
3426
3427 case 179:
vlmd3420d32006-09-14 10:35:20 +00003428#line 1621 "asn1p_y.y"
3429 { yyval.a_type = ASN_BASIC_INTEGER; }
3430 break;
3431
3432 case 180:
3433#line 1622 "asn1p_y.y"
3434 { yyval.a_type = ASN_BASIC_ENUMERATED; }
3435 break;
3436
3437 case 181:
3438#line 1623 "asn1p_y.y"
3439 { yyval.a_type = ASN_BASIC_BIT_STRING; }
3440 break;
3441
3442 case 182:
3443#line 1627 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003444 {
vlm0c6d3812006-03-21 03:40:38 +00003445 yyval.a_expr = asn1p_expr_new(yylineno);
3446 checkmem(yyval.a_expr);
3447 yyval.a_expr->expr_type = yyvsp[0].a_type;
3448 yyval.a_expr->meta_type = AMT_TYPE;
vlm1aeaddd2006-07-13 08:24:20 +00003449 }
3450 break;
3451
vlmd3420d32006-09-14 10:35:20 +00003452 case 183:
3453#line 1633 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003454 {
vlm0c6d3812006-03-21 03:40:38 +00003455 if(yyvsp[0].a_expr) {
3456 yyval.a_expr = yyvsp[0].a_expr;
vlmfa67ddc2004-06-03 03:38:44 +00003457 } else {
vlm0c6d3812006-03-21 03:40:38 +00003458 yyval.a_expr = asn1p_expr_new(yylineno);
3459 checkmem(yyval.a_expr);
vlmfa67ddc2004-06-03 03:38:44 +00003460 }
vlm0c6d3812006-03-21 03:40:38 +00003461 yyval.a_expr->expr_type = yyvsp[-1].a_type;
3462 yyval.a_expr->meta_type = AMT_TYPE;
vlm1aeaddd2006-07-13 08:24:20 +00003463 }
3464 break;
3465
vlmd3420d32006-09-14 10:35:20 +00003466 case 184:
3467#line 1646 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003468 { yyval.a_type = ASN_STRING_BMPString; }
3469 break;
3470
vlmd3420d32006-09-14 10:35:20 +00003471 case 185:
3472#line 1647 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003473 {
vlm0c6d3812006-03-21 03:40:38 +00003474 yyval.a_type = ASN_STRING_GeneralString;
vlmc94e28f2004-09-15 11:59:51 +00003475 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
vlm1aeaddd2006-07-13 08:24:20 +00003476 }
3477 break;
3478
vlmd3420d32006-09-14 10:35:20 +00003479 case 186:
3480#line 1651 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003481 {
vlm0c6d3812006-03-21 03:40:38 +00003482 yyval.a_type = ASN_STRING_GraphicString;
vlmc94e28f2004-09-15 11:59:51 +00003483 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
vlm1aeaddd2006-07-13 08:24:20 +00003484 }
3485 break;
3486
vlmd3420d32006-09-14 10:35:20 +00003487 case 187:
3488#line 1655 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003489 { yyval.a_type = ASN_STRING_IA5String; }
3490 break;
3491
vlmd3420d32006-09-14 10:35:20 +00003492 case 188:
3493#line 1656 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003494 { yyval.a_type = ASN_STRING_ISO646String; }
3495 break;
3496
vlmd3420d32006-09-14 10:35:20 +00003497 case 189:
3498#line 1657 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003499 { yyval.a_type = ASN_STRING_NumericString; }
3500 break;
3501
vlmd3420d32006-09-14 10:35:20 +00003502 case 190:
3503#line 1658 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003504 { yyval.a_type = ASN_STRING_PrintableString; }
3505 break;
3506
vlmd3420d32006-09-14 10:35:20 +00003507 case 191:
3508#line 1659 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003509 {
vlm0c6d3812006-03-21 03:40:38 +00003510 yyval.a_type = ASN_STRING_T61String;
vlmc94e28f2004-09-15 11:59:51 +00003511 fprintf(stderr, "WARNING: T61String is not fully supported\n");
vlm1aeaddd2006-07-13 08:24:20 +00003512 }
3513 break;
3514
vlmd3420d32006-09-14 10:35:20 +00003515 case 192:
3516#line 1663 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003517 { yyval.a_type = ASN_STRING_TeletexString; }
3518 break;
3519
vlmd3420d32006-09-14 10:35:20 +00003520 case 193:
3521#line 1664 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003522 { yyval.a_type = ASN_STRING_UniversalString; }
3523 break;
3524
vlmd3420d32006-09-14 10:35:20 +00003525 case 194:
3526#line 1665 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003527 { yyval.a_type = ASN_STRING_UTF8String; }
3528 break;
3529
vlmd3420d32006-09-14 10:35:20 +00003530 case 195:
3531#line 1666 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003532 {
vlm0c6d3812006-03-21 03:40:38 +00003533 yyval.a_type = ASN_STRING_VideotexString;
vlmc94e28f2004-09-15 11:59:51 +00003534 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
vlm1aeaddd2006-07-13 08:24:20 +00003535 }
3536 break;
3537
vlmd3420d32006-09-14 10:35:20 +00003538 case 196:
3539#line 1670 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003540 { yyval.a_type = ASN_STRING_VisibleString; }
3541 break;
3542
vlmd3420d32006-09-14 10:35:20 +00003543 case 197:
3544#line 1671 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003545 { yyval.a_type = ASN_STRING_ObjectDescriptor; }
3546 break;
3547
vlmd3420d32006-09-14 10:35:20 +00003548 case 203:
3549#line 1683 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003550 { yyval.a_constr = 0; }
3551 break;
3552
vlmd3420d32006-09-14 10:35:20 +00003553 case 204:
3554#line 1684 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003555 {
vlm0c6d3812006-03-21 03:40:38 +00003556 yyval.a_constr = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003557 }
3558 break;
3559
vlmd3420d32006-09-14 10:35:20 +00003560 case 205:
3561#line 1690 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003562 {
vlm0c6d3812006-03-21 03:40:38 +00003563 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
vlm1aeaddd2006-07-13 08:24:20 +00003564 }
3565 break;
3566
vlmd3420d32006-09-14 10:35:20 +00003567 case 206:
3568#line 1693 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003569 {
vlmfa67ddc2004-06-03 03:38:44 +00003570 /*
3571 * This is a special case, for compatibility purposes.
vlm9283dbe2004-08-18 04:59:12 +00003572 * It goes without parentheses.
vlmfa67ddc2004-06-03 03:38:44 +00003573 */
vlm0c6d3812006-03-21 03:40:38 +00003574 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
vlm1aeaddd2006-07-13 08:24:20 +00003575 }
3576 break;
3577
vlmd3420d32006-09-14 10:35:20 +00003578 case 207:
3579#line 1703 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003580 {
vlm0c6d3812006-03-21 03:40:38 +00003581 yyval.a_constr = yyvsp[-1].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003582 }
3583 break;
3584
vlmd3420d32006-09-14 10:35:20 +00003585 case 208:
3586#line 1706 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003587 {
vlm0c6d3812006-03-21 03:40:38 +00003588 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003589 }
3590 break;
3591
vlmd3420d32006-09-14 10:35:20 +00003592 case 209:
3593#line 1712 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003594 {
vlmdfbff8c2006-03-21 09:41:28 +00003595 yyval.a_constr = asn1p_constraint_new(yylineno);
3596 yyval.a_constr->type = ACT_EL_EXT;
vlm1aeaddd2006-07-13 08:24:20 +00003597 }
3598 break;
3599
vlmd3420d32006-09-14 10:35:20 +00003600 case 210:
3601#line 1716 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003602 {
vlm0c6d3812006-03-21 03:40:38 +00003603 yyval.a_constr = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003604 }
3605 break;
3606
vlmd3420d32006-09-14 10:35:20 +00003607 case 211:
3608#line 1719 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003609 {
vlmfa67ddc2004-06-03 03:38:44 +00003610 asn1p_constraint_t *ct;
3611 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003612 ct->type = ACT_EL_EXT;
vlm0c6d3812006-03-21 03:40:38 +00003613 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm1aeaddd2006-07-13 08:24:20 +00003614 }
3615 break;
3616
vlmd3420d32006-09-14 10:35:20 +00003617 case 212:
3618#line 1725 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003619 {
vlmfa67ddc2004-06-03 03:38:44 +00003620 asn1p_constraint_t *ct;
3621 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003622 ct->type = ACT_EL_EXT;
vlm0c6d3812006-03-21 03:40:38 +00003623 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
3624 ct = yyval.a_constr;
3625 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003626 }
3627 break;
3628
vlmd3420d32006-09-14 10:35:20 +00003629 case 213:
3630#line 1736 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003631 {
vlm0c6d3812006-03-21 03:40:38 +00003632 yyval.a_constr = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003633 }
3634 break;
3635
vlmd3420d32006-09-14 10:35:20 +00003636 case 214:
3637#line 1739 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003638 {
vlm0c6d3812006-03-21 03:40:38 +00003639 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
vlm1aeaddd2006-07-13 08:24:20 +00003640 }
3641 break;
3642
vlmd3420d32006-09-14 10:35:20 +00003643 case 215:
3644#line 1742 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003645 {
vlm0c6d3812006-03-21 03:40:38 +00003646 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003647 }
3648 break;
3649
vlmd3420d32006-09-14 10:35:20 +00003650 case 216:
3651#line 1745 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003652 {
vlm0c6d3812006-03-21 03:40:38 +00003653 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003654 }
3655 break;
3656
vlmd3420d32006-09-14 10:35:20 +00003657 case 217:
3658#line 1748 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003659 {
vlm0c6d3812006-03-21 03:40:38 +00003660 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003661 }
3662 break;
3663
vlmd3420d32006-09-14 10:35:20 +00003664 case 218:
3665#line 1754 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003666 {
vlmfa67ddc2004-06-03 03:38:44 +00003667 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003668 yyval.a_constr = asn1p_constraint_new(yylineno);
3669 checkmem(yyval.a_constr);
3670 yyval.a_constr->type = yyvsp[-3].a_ctype;
3671 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
vlmfa67ddc2004-06-03 03:38:44 +00003672 checkmem(ret == 0);
vlm1aeaddd2006-07-13 08:24:20 +00003673 }
3674 break;
3675
vlmd3420d32006-09-14 10:35:20 +00003676 case 219:
3677#line 1762 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003678 {
vlm9283dbe2004-08-18 04:59:12 +00003679 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003680 yyval.a_constr = asn1p_constraint_new(yylineno);
3681 checkmem(yyval.a_constr);
3682 yyval.a_constr->type = ACT_CA_SET;
3683 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
vlm9283dbe2004-08-18 04:59:12 +00003684 checkmem(ret == 0);
vlm1aeaddd2006-07-13 08:24:20 +00003685 }
3686 break;
3687
vlmd3420d32006-09-14 10:35:20 +00003688 case 220:
3689#line 1770 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003690 {
vlm0c6d3812006-03-21 03:40:38 +00003691 yyval.a_constr = asn1p_constraint_new(yylineno);
3692 checkmem(yyval.a_constr);
3693 yyval.a_constr->type = ACT_EL_VALUE;
3694 yyval.a_constr->value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00003695 }
3696 break;
3697
vlmd3420d32006-09-14 10:35:20 +00003698 case 221:
3699#line 1776 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003700 {
vlm0c6d3812006-03-21 03:40:38 +00003701 yyval.a_constr = asn1p_constraint_new(yylineno);
3702 checkmem(yyval.a_constr);
3703 yyval.a_constr->type = ACT_EL_TYPE;
3704 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00003705 }
3706 break;
3707
vlm1aeaddd2006-07-13 08:24:20 +00003708 case 222:
vlmd3420d32006-09-14 10:35:20 +00003709#line 1782 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003710 {
vlmdfbff8c2006-03-21 09:41:28 +00003711 yyval.a_constr = asn1p_constraint_new(yylineno);
3712 checkmem(yyval.a_constr);
3713 yyval.a_constr->type = yyvsp[-1].a_ctype;
vlmd3420d32006-09-14 10:35:20 +00003714 yyval.a_constr->range_start = yyvsp[-2].a_value;
3715 yyval.a_constr->range_stop = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00003716 }
3717 break;
3718
3719 case 223:
vlmd3420d32006-09-14 10:35:20 +00003720#line 1789 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003721 {
vlmd3420d32006-09-14 10:35:20 +00003722 yyval.a_constr = asn1p_constraint_new(yylineno);
3723 checkmem(yyval.a_constr);
3724 yyval.a_constr->type = yyvsp[-1].a_ctype;
3725 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3726 yyval.a_constr->range_stop = yyvsp[0].a_value;
3727 yyval.a_constr->range_start->type = ATV_MIN;
vlm1aeaddd2006-07-13 08:24:20 +00003728 }
3729 break;
3730
vlme745fcd2006-09-05 16:18:34 +00003731 case 224:
vlmd3420d32006-09-14 10:35:20 +00003732#line 1797 "asn1p_y.y"
3733 {
3734 yyval.a_constr = asn1p_constraint_new(yylineno);
3735 checkmem(yyval.a_constr);
3736 yyval.a_constr->type = yyvsp[-1].a_ctype;
3737 yyval.a_constr->range_start = yyvsp[-2].a_value;
3738 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3739 yyval.a_constr->range_stop->type = ATV_MAX;
3740 }
3741 break;
3742
3743 case 225:
3744#line 1805 "asn1p_y.y"
3745 {
3746 yyval.a_constr = asn1p_constraint_new(yylineno);
3747 checkmem(yyval.a_constr);
3748 yyval.a_constr->type = yyvsp[-1].a_ctype;
3749 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3750 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3751 yyval.a_constr->range_start->type = ATV_MIN;
3752 yyval.a_constr->range_stop->type = ATV_MAX;
3753 }
3754 break;
3755
3756 case 226:
3757#line 1814 "asn1p_y.y"
vlme745fcd2006-09-05 16:18:34 +00003758 {
3759 yyval.a_constr = yyvsp[0].a_constr;
3760 }
3761 break;
3762
vlmd3420d32006-09-14 10:35:20 +00003763 case 227:
3764#line 1817 "asn1p_y.y"
3765 {
3766 yyval.a_constr = yyvsp[0].a_constr;
3767 }
3768 break;
3769
3770 case 228:
3771#line 1821 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003772 { asn1p_lexer_hack_push_opaque_state(); }
3773 break;
3774
vlmd3420d32006-09-14 10:35:20 +00003775 case 229:
3776#line 1821 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003777 {
vlm0c6d3812006-03-21 03:40:38 +00003778 yyval.a_constr = asn1p_constraint_new(yylineno);
3779 checkmem(yyval.a_constr);
3780 yyval.a_constr->type = ACT_CT_CTDBY;
3781 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3782 checkmem(yyval.a_constr->value);
3783 yyval.a_constr->value->type = ATV_UNPARSED;
vlm1aeaddd2006-07-13 08:24:20 +00003784 }
3785 break;
3786
vlmd3420d32006-09-14 10:35:20 +00003787 case 230:
3788#line 1832 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003789 { yyval.a_ctype = ACT_EL_RANGE; }
3790 break;
3791
vlmd3420d32006-09-14 10:35:20 +00003792 case 231:
3793#line 1833 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003794 { yyval.a_ctype = ACT_EL_RLRANGE; }
3795 break;
3796
vlmd3420d32006-09-14 10:35:20 +00003797 case 232:
3798#line 1834 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003799 { yyval.a_ctype = ACT_EL_LLRANGE; }
3800 break;
3801
vlmd3420d32006-09-14 10:35:20 +00003802 case 233:
3803#line 1835 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003804 { yyval.a_ctype = ACT_EL_ULRANGE; }
3805 break;
3806
vlmd3420d32006-09-14 10:35:20 +00003807 case 234:
3808#line 1839 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003809 {
vlm0c6d3812006-03-21 03:40:38 +00003810 yyval.a_ctype = ACT_CT_SIZE;
vlm1aeaddd2006-07-13 08:24:20 +00003811 }
3812 break;
3813
vlmd3420d32006-09-14 10:35:20 +00003814 case 235:
3815#line 1842 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003816 {
vlm0c6d3812006-03-21 03:40:38 +00003817 yyval.a_ctype = ACT_CT_FROM;
vlm1aeaddd2006-07-13 08:24:20 +00003818 }
3819 break;
3820
vlmd3420d32006-09-14 10:35:20 +00003821 case 236:
3822#line 1848 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003823 {
vlm0c6d3812006-03-21 03:40:38 +00003824 yyval.a_value = asn1p_value_fromint(0);
3825 checkmem(yyval.a_value);
3826 yyval.a_value->type = ATV_FALSE;
vlm1aeaddd2006-07-13 08:24:20 +00003827 }
3828 break;
3829
vlmd3420d32006-09-14 10:35:20 +00003830 case 237:
3831#line 1853 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003832 {
vlm0c6d3812006-03-21 03:40:38 +00003833 yyval.a_value = asn1p_value_fromint(1);
3834 checkmem(yyval.a_value);
3835 yyval.a_value->type = ATV_TRUE;
vlm1aeaddd2006-07-13 08:24:20 +00003836 }
3837 break;
3838
vlmd3420d32006-09-14 10:35:20 +00003839 case 240:
3840#line 1860 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003841 {
vlmfa67ddc2004-06-03 03:38:44 +00003842 asn1p_ref_t *ref;
3843 int ret;
3844 ref = asn1p_ref_new(yylineno);
3845 checkmem(ref);
vlm0c6d3812006-03-21 03:40:38 +00003846 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
vlmfa67ddc2004-06-03 03:38:44 +00003847 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003848 yyval.a_value = asn1p_value_fromref(ref, 0);
3849 checkmem(yyval.a_value);
3850 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003851 }
3852 break;
3853
vlmd3420d32006-09-14 10:35:20 +00003854 case 241:
3855#line 1874 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003856 {
vlm4053ca52005-02-18 16:34:21 +00003857 asn1p_ref_t *ref;
3858 int ret;
3859 ref = asn1p_ref_new(yylineno);
3860 checkmem(ref);
vlm0c6d3812006-03-21 03:40:38 +00003861 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
vlm4053ca52005-02-18 16:34:21 +00003862 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003863 yyval.a_value = asn1p_value_fromref(ref, 0);
3864 checkmem(yyval.a_value);
3865 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003866 }
3867 break;
3868
vlmd3420d32006-09-14 10:35:20 +00003869 case 242:
3870#line 1888 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003871 {
vlm0c6d3812006-03-21 03:40:38 +00003872 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
vlm1aeaddd2006-07-13 08:24:20 +00003873 }
3874 break;
3875
vlmd3420d32006-09-14 10:35:20 +00003876 case 243:
3877#line 1891 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003878 {
vlm0c6d3812006-03-21 03:40:38 +00003879 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
vlm1aeaddd2006-07-13 08:24:20 +00003880 }
3881 break;
3882
vlmd3420d32006-09-14 10:35:20 +00003883 case 244:
3884#line 1897 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003885 {
vlm0c6d3812006-03-21 03:40:38 +00003886 yyval.a_constr = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003887 }
3888 break;
3889
vlmd3420d32006-09-14 10:35:20 +00003890 case 245:
3891#line 1900 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003892 {
vlm0c6d3812006-03-21 03:40:38 +00003893 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003894 }
3895 break;
3896
vlmd3420d32006-09-14 10:35:20 +00003897 case 246:
3898#line 1906 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003899 {
vlm0c6d3812006-03-21 03:40:38 +00003900 yyval.a_constr = asn1p_constraint_new(yylineno);
3901 checkmem(yyval.a_constr);
3902 yyval.a_constr->type = ACT_EL_EXT;
vlm1aeaddd2006-07-13 08:24:20 +00003903 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 1);
3904 }
3905 break;
3906
vlmd3420d32006-09-14 10:35:20 +00003907 case 247:
3908#line 1912 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003909 {
vlm0c6d3812006-03-21 03:40:38 +00003910 yyval.a_constr = asn1p_constraint_new(yylineno);
3911 checkmem(yyval.a_constr);
3912 yyval.a_constr->type = ACT_EL_VALUE;
3913 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3914 yyval.a_constr->presence = yyvsp[0].a_pres;
3915 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003916 }
3917 break;
3918
vlmd3420d32006-09-14 10:35:20 +00003919 case 248:
3920#line 1926 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003921 { yyval.a_pres = ACPRES_DEFAULT; }
3922 break;
3923
vlmd3420d32006-09-14 10:35:20 +00003924 case 249:
3925#line 1927 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003926 { yyval.a_pres = yyvsp[0].a_pres; }
3927 break;
3928
vlmd3420d32006-09-14 10:35:20 +00003929 case 250:
3930#line 1931 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003931 {
vlm0c6d3812006-03-21 03:40:38 +00003932 yyval.a_pres = ACPRES_PRESENT;
vlm1aeaddd2006-07-13 08:24:20 +00003933 }
3934 break;
3935
vlmd3420d32006-09-14 10:35:20 +00003936 case 251:
3937#line 1934 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003938 {
vlm0c6d3812006-03-21 03:40:38 +00003939 yyval.a_pres = ACPRES_ABSENT;
vlm1aeaddd2006-07-13 08:24:20 +00003940 }
3941 break;
3942
vlmd3420d32006-09-14 10:35:20 +00003943 case 252:
3944#line 1937 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003945 {
vlm0c6d3812006-03-21 03:40:38 +00003946 yyval.a_pres = ACPRES_OPTIONAL;
vlm1aeaddd2006-07-13 08:24:20 +00003947 }
3948 break;
3949
vlmd3420d32006-09-14 10:35:20 +00003950 case 253:
3951#line 1943 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003952 {
vlm0c6d3812006-03-21 03:40:38 +00003953 yyval.a_constr = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003954 }
3955 break;
3956
vlmd3420d32006-09-14 10:35:20 +00003957 case 254:
3958#line 1946 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003959 {
vlm17e65d02006-03-21 04:48:15 +00003960 yyval.a_constr = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003961 }
3962 break;
3963
vlmd3420d32006-09-14 10:35:20 +00003964 case 255:
3965#line 1955 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003966 {
vlmfa67ddc2004-06-03 03:38:44 +00003967 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3968 asn1p_constraint_t *ct;
3969 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003970 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
vlmfa67ddc2004-06-03 03:38:44 +00003971 checkmem(ret == 0);
3972 ct = asn1p_constraint_new(yylineno);
vlm0c6d3812006-03-21 03:40:38 +00003973 checkmem(yyval.a_constr);
vlmfa67ddc2004-06-03 03:38:44 +00003974 ct->type = ACT_EL_VALUE;
3975 ct->value = asn1p_value_fromref(ref, 0);
vlm0c6d3812006-03-21 03:40:38 +00003976 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
vlm1aeaddd2006-07-13 08:24:20 +00003977 }
3978 break;
3979
vlmd3420d32006-09-14 10:35:20 +00003980 case 256:
3981#line 1970 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003982 {
vlm0c6d3812006-03-21 03:40:38 +00003983 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003984 }
3985 break;
3986
vlmd3420d32006-09-14 10:35:20 +00003987 case 257:
3988#line 1976 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003989 {
vlm0c6d3812006-03-21 03:40:38 +00003990 yyval.a_constr = asn1p_constraint_new(yylineno);
3991 checkmem(yyval.a_constr);
3992 yyval.a_constr->type = ACT_EL_VALUE;
3993 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
vlm1aeaddd2006-07-13 08:24:20 +00003994 }
3995 break;
3996
vlmd3420d32006-09-14 10:35:20 +00003997 case 258:
3998#line 1982 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003999 {
vlmfa67ddc2004-06-03 03:38:44 +00004000 asn1p_constraint_t *ct;
4001 ct = asn1p_constraint_new(yylineno);
4002 checkmem(ct);
4003 ct->type = ACT_EL_VALUE;
vlm0c6d3812006-03-21 03:40:38 +00004004 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
4005 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm1aeaddd2006-07-13 08:24:20 +00004006 }
4007 break;
4008
vlmd3420d32006-09-14 10:35:20 +00004009 case 259:
4010#line 1996 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004011 {
vlm0c6d3812006-03-21 03:40:38 +00004012 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
vlmfa67ddc2004-06-03 03:38:44 +00004013 int ret;
4014 *p = '@';
vlm0c6d3812006-03-21 03:40:38 +00004015 strcpy(p + 1, yyvsp[0].tv_str);
4016 yyval.a_ref = asn1p_ref_new(yylineno);
4017 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
vlmfa67ddc2004-06-03 03:38:44 +00004018 checkmem(ret == 0);
4019 free(p);
vlm0c6d3812006-03-21 03:40:38 +00004020 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00004021 }
4022 break;
4023
vlmd3420d32006-09-14 10:35:20 +00004024 case 260:
4025#line 2007 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004026 {
vlm0c6d3812006-03-21 03:40:38 +00004027 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
vlmfa67ddc2004-06-03 03:38:44 +00004028 int ret;
4029 p[0] = '@';
4030 p[1] = '.';
vlm0c6d3812006-03-21 03:40:38 +00004031 strcpy(p + 2, yyvsp[0].tv_str);
4032 yyval.a_ref = asn1p_ref_new(yylineno);
4033 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
vlmfa67ddc2004-06-03 03:38:44 +00004034 checkmem(ret == 0);
4035 free(p);
vlm0c6d3812006-03-21 03:40:38 +00004036 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00004037 }
4038 break;
4039
vlmd3420d32006-09-14 10:35:20 +00004040 case 261:
4041#line 2023 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004042 {
vlm0c6d3812006-03-21 03:40:38 +00004043 yyval.tv_str = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00004044 }
4045 break;
4046
vlmd3420d32006-09-14 10:35:20 +00004047 case 262:
4048#line 2026 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004049 {
vlm0c6d3812006-03-21 03:40:38 +00004050 int l1 = strlen(yyvsp[-2].tv_str);
4051 int l3 = strlen(yyvsp[0].tv_str);
4052 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
4053 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
4054 yyval.tv_str[l1] = '.';
4055 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
4056 yyval.tv_str[l1 + 1 + l3] = '\0';
vlm1aeaddd2006-07-13 08:24:20 +00004057 }
4058 break;
4059
vlmd3420d32006-09-14 10:35:20 +00004060 case 263:
4061#line 2044 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004062 {
vlm0c6d3812006-03-21 03:40:38 +00004063 yyval.a_marker.flags = EM_NOMARK;
4064 yyval.a_marker.default_value = 0;
vlm1aeaddd2006-07-13 08:24:20 +00004065 }
4066 break;
4067
vlmd3420d32006-09-14 10:35:20 +00004068 case 264:
4069#line 2048 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004070 { yyval.a_marker = yyvsp[0].a_marker; }
4071 break;
4072
vlmd3420d32006-09-14 10:35:20 +00004073 case 265:
4074#line 2052 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004075 {
vlm0c6d3812006-03-21 03:40:38 +00004076 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
4077 yyval.a_marker.default_value = 0;
vlm1aeaddd2006-07-13 08:24:20 +00004078 }
4079 break;
4080
vlmd3420d32006-09-14 10:35:20 +00004081 case 266:
4082#line 2056 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004083 {
vlm0c6d3812006-03-21 03:40:38 +00004084 yyval.a_marker.flags = EM_DEFAULT;
4085 yyval.a_marker.default_value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00004086 }
4087 break;
4088
vlmd3420d32006-09-14 10:35:20 +00004089 case 267:
4090#line 2079 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004091 {
vlm0c6d3812006-03-21 03:40:38 +00004092 yyval.a_expr = asn1p_expr_new(yylineno);
4093 checkmem(yyval.a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00004094 }
4095 break;
4096
vlmd3420d32006-09-14 10:35:20 +00004097 case 268:
4098#line 2083 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004099 {
vlm0c6d3812006-03-21 03:40:38 +00004100 yyval.a_expr = yyvsp[-1].a_expr;
vlm1aeaddd2006-07-13 08:24:20 +00004101 }
4102 break;
4103
vlmd3420d32006-09-14 10:35:20 +00004104 case 269:
4105#line 2089 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004106 {
vlm0c6d3812006-03-21 03:40:38 +00004107 yyval.a_expr = asn1p_expr_new(yylineno);
4108 checkmem(yyval.a_expr);
4109 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00004110 }
4111 break;
4112
vlmd3420d32006-09-14 10:35:20 +00004113 case 270:
4114#line 2094 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004115 {
vlm0c6d3812006-03-21 03:40:38 +00004116 yyval.a_expr = yyvsp[-2].a_expr;
4117 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00004118 }
4119 break;
4120
vlmd3420d32006-09-14 10:35:20 +00004121 case 271:
4122#line 2101 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004123 {
vlm0c6d3812006-03-21 03:40:38 +00004124 yyval.a_expr = asn1p_expr_new(yylineno);
4125 checkmem(yyval.a_expr);
4126 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4127 yyval.a_expr->meta_type = AMT_VALUE;
4128 yyval.a_expr->Identifier = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00004129 }
4130 break;
4131
vlmd3420d32006-09-14 10:35:20 +00004132 case 272:
4133#line 2108 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004134 {
vlm0c6d3812006-03-21 03:40:38 +00004135 yyval.a_expr = asn1p_expr_new(yylineno);
4136 checkmem(yyval.a_expr);
4137 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4138 yyval.a_expr->meta_type = AMT_VALUE;
4139 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4140 yyval.a_expr->value = yyvsp[-1].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00004141 }
4142 break;
4143
vlmd3420d32006-09-14 10:35:20 +00004144 case 273:
4145#line 2116 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004146 {
vlm17e65d02006-03-21 04:48:15 +00004147 yyval.a_expr = asn1p_expr_new(yylineno);
4148 checkmem(yyval.a_expr);
4149 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4150 yyval.a_expr->meta_type = AMT_VALUE;
4151 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4152 yyval.a_expr->value = yyvsp[-1].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00004153 }
4154 break;
4155
vlmd3420d32006-09-14 10:35:20 +00004156 case 274:
4157#line 2124 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004158 {
vlm0c6d3812006-03-21 03:40:38 +00004159 yyval.a_expr = asn1p_expr_new(yylineno);
4160 checkmem(yyval.a_expr);
4161 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4162 yyval.a_expr->meta_type = AMT_VALUE;
4163 yyval.a_expr->value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00004164 }
4165 break;
4166
vlmd3420d32006-09-14 10:35:20 +00004167 case 275:
4168#line 2131 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004169 {
vlm0c6d3812006-03-21 03:40:38 +00004170 yyval.a_expr = asn1p_expr_new(yylineno);
4171 checkmem(yyval.a_expr);
4172 yyval.a_expr->Identifier = strdup("...");
4173 checkmem(yyval.a_expr->Identifier);
4174 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
4175 yyval.a_expr->meta_type = AMT_VALUE;
vlm1aeaddd2006-07-13 08:24:20 +00004176 }
4177 break;
4178
vlm1aeaddd2006-07-13 08:24:20 +00004179 case 276:
vlmd3420d32006-09-14 10:35:20 +00004180#line 2142 "asn1p_y.y"
4181 {
4182 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4183 checkmem(yyval.a_value);
4184 }
4185 break;
4186
4187 case 277:
4188#line 2146 "asn1p_y.y"
4189 {
4190 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4191 checkmem(yyval.a_value);
4192 }
4193 break;
4194
4195 case 279:
4196#line 2154 "asn1p_y.y"
vlme745fcd2006-09-05 16:18:34 +00004197 {
4198 yyval.a_value = asn1p_value_fromdouble(yyvsp[0].a_dbl);
4199 checkmem(yyval.a_value);
4200 }
vlm1aeaddd2006-07-13 08:24:20 +00004201 break;
4202
vlmd3420d32006-09-14 10:35:20 +00004203 case 280:
4204#line 2185 "asn1p_y.y"
vlme745fcd2006-09-05 16:18:34 +00004205 { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); }
4206 break;
4207
vlmd3420d32006-09-14 10:35:20 +00004208 case 281:
4209#line 2186 "asn1p_y.y"
vlme745fcd2006-09-05 16:18:34 +00004210 { yyval.a_tag = yyvsp[0].a_tag; }
4211 break;
4212
vlmd3420d32006-09-14 10:35:20 +00004213 case 282:
4214#line 2190 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004215 {
vlm0c6d3812006-03-21 03:40:38 +00004216 yyval.a_tag = yyvsp[-1].a_tag;
4217 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
vlm1aeaddd2006-07-13 08:24:20 +00004218 }
4219 break;
4220
vlmd3420d32006-09-14 10:35:20 +00004221 case 283:
4222#line 2197 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004223 {
vlm0c6d3812006-03-21 03:40:38 +00004224 yyval.a_tag = yyvsp[-2].a_tag;
4225 yyval.a_tag.tag_value = yyvsp[-1].a_int;
vlm1aeaddd2006-07-13 08:24:20 +00004226 }
4227 break;
4228
vlmd3420d32006-09-14 10:35:20 +00004229 case 284:
4230#line 2203 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004231 { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; }
4232 break;
4233
vlmd3420d32006-09-14 10:35:20 +00004234 case 285:
4235#line 2204 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004236 { yyval.a_tag.tag_class = TC_UNIVERSAL; }
4237 break;
4238
vlmd3420d32006-09-14 10:35:20 +00004239 case 286:
4240#line 2205 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004241 { yyval.a_tag.tag_class = TC_APPLICATION; }
4242 break;
4243
vlmd3420d32006-09-14 10:35:20 +00004244 case 287:
4245#line 2206 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004246 { yyval.a_tag.tag_class = TC_PRIVATE; }
4247 break;
4248
vlmd3420d32006-09-14 10:35:20 +00004249 case 288:
4250#line 2210 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004251 { yyval.a_tag.tag_mode = TM_DEFAULT; }
4252 break;
4253
vlmd3420d32006-09-14 10:35:20 +00004254 case 289:
4255#line 2211 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004256 { yyval.a_tag.tag_mode = TM_IMPLICIT; }
4257 break;
4258
vlmd3420d32006-09-14 10:35:20 +00004259 case 290:
4260#line 2212 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004261 { yyval.a_tag.tag_mode = TM_EXPLICIT; }
4262 break;
4263
vlm1aeaddd2006-07-13 08:24:20 +00004264 case 291:
vlmd3420d32006-09-14 10:35:20 +00004265#line 2216 "asn1p_y.y"
4266 {
4267 checkmem(yyvsp[0].tv_str);
4268 yyval.tv_str = yyvsp[0].tv_str;
4269 }
vlme745fcd2006-09-05 16:18:34 +00004270 break;
4271
4272 case 292:
vlmd3420d32006-09-14 10:35:20 +00004273#line 2220 "asn1p_y.y"
vlme745fcd2006-09-05 16:18:34 +00004274 {
vlmd3420d32006-09-14 10:35:20 +00004275 checkmem(yyvsp[0].tv_str);
vlme745fcd2006-09-05 16:18:34 +00004276 yyval.tv_str = yyvsp[0].tv_str;
4277 }
4278 break;
4279
4280 case 293:
4281#line 2228 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004282 {
vlmdfbff8c2006-03-21 09:41:28 +00004283 checkmem(yyvsp[0].tv_str);
4284 yyval.tv_str = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00004285 }
4286 break;
4287
vlmd3420d32006-09-14 10:35:20 +00004288 case 294:
4289#line 2235 "asn1p_y.y"
4290 { yyval.tv_str = 0; }
4291 break;
4292
4293 case 295:
4294#line 2236 "asn1p_y.y"
4295 {
4296 yyval.tv_str = yyvsp[0].tv_str;
4297 }
4298 break;
4299
4300 case 296:
4301#line 2242 "asn1p_y.y"
4302 {
4303 checkmem(yyvsp[0].tv_str);
4304 yyval.tv_str = yyvsp[0].tv_str;
4305 }
4306 break;
4307
vlm1aeaddd2006-07-13 08:24:20 +00004308
4309 }
4310
4311/* Line 1016 of /usr/local/share/bison/yacc.c. */
vlmd3420d32006-09-14 10:35:20 +00004312#line 4313 "asn1p_y.c"
vlmfa67ddc2004-06-03 03:38:44 +00004313
4314 yyvsp -= yylen;
4315 yyssp -= yylen;
vlmfa67ddc2004-06-03 03:38:44 +00004316
vlm1aeaddd2006-07-13 08:24:20 +00004317
4318#if YYDEBUG
vlm0c6d3812006-03-21 03:40:38 +00004319 if (yydebug)
4320 {
vlm1aeaddd2006-07-13 08:24:20 +00004321 short *yyssp1 = yyss - 1;
4322 YYFPRINTF (stderr, "state stack now");
4323 while (yyssp1 != yyssp)
4324 YYFPRINTF (stderr, " %d", *++yyssp1);
4325 YYFPRINTF (stderr, "\n");
vlm0c6d3812006-03-21 03:40:38 +00004326 }
4327#endif
vlmfa67ddc2004-06-03 03:38:44 +00004328
4329 *++yyvsp = yyval;
4330
vlmfa67ddc2004-06-03 03:38:44 +00004331
vlm1aeaddd2006-07-13 08:24:20 +00004332 /* Now `shift' the result of the reduction. Determine what state
4333 that goes to, based on the state we popped back to and the rule
4334 number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00004335
4336 yyn = yyr1[yyn];
4337
vlm1aeaddd2006-07-13 08:24:20 +00004338 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
4339 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00004340 yystate = yytable[yystate];
4341 else
vlm1aeaddd2006-07-13 08:24:20 +00004342 yystate = yydefgoto[yyn - YYNTOKENS];
vlmfa67ddc2004-06-03 03:38:44 +00004343
4344 goto yynewstate;
4345
vlmfa67ddc2004-06-03 03:38:44 +00004346
vlm1aeaddd2006-07-13 08:24:20 +00004347/*------------------------------------.
4348| yyerrlab -- here on detecting error |
4349`------------------------------------*/
4350yyerrlab:
4351 /* If not already recovering from an error, report this error. */
4352 if (!yyerrstatus)
vlmfa67ddc2004-06-03 03:38:44 +00004353 {
4354 ++yynerrs;
vlm1aeaddd2006-07-13 08:24:20 +00004355#if YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00004356 yyn = yypact[yystate];
4357
vlm1aeaddd2006-07-13 08:24:20 +00004358 if (YYPACT_NINF < yyn && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00004359 {
vlm1aeaddd2006-07-13 08:24:20 +00004360 YYSIZE_T yysize = 0;
4361 int yytype = YYTRANSLATE (yychar);
4362 char *yymsg;
4363 int yyx, yycount;
vlmfa67ddc2004-06-03 03:38:44 +00004364
vlm1aeaddd2006-07-13 08:24:20 +00004365 yycount = 0;
4366 /* Start YYX at -YYN if negative to avoid negative indexes in
4367 YYCHECK. */
4368 for (yyx = yyn < 0 ? -yyn : 0;
4369 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
4370 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
4371 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
4372 yysize += yystrlen ("parse error, unexpected ") + 1;
4373 yysize += yystrlen (yytname[yytype]);
4374 yymsg = (char *) YYSTACK_ALLOC (yysize);
4375 if (yymsg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00004376 {
vlm1aeaddd2006-07-13 08:24:20 +00004377 char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
4378 yyp = yystpcpy (yyp, yytname[yytype]);
vlm0c6d3812006-03-21 03:40:38 +00004379
vlm1aeaddd2006-07-13 08:24:20 +00004380 if (yycount < 5)
vlmfa67ddc2004-06-03 03:38:44 +00004381 {
vlm1aeaddd2006-07-13 08:24:20 +00004382 yycount = 0;
4383 for (yyx = yyn < 0 ? -yyn : 0;
4384 yyx < (int) (sizeof (yytname) / sizeof (char *));
4385 yyx++)
4386 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
vlm0c6d3812006-03-21 03:40:38 +00004387 {
vlm1aeaddd2006-07-13 08:24:20 +00004388 const char *yyq = ! yycount ? ", expecting " : " or ";
4389 yyp = yystpcpy (yyp, yyq);
4390 yyp = yystpcpy (yyp, yytname[yyx]);
4391 yycount++;
vlm0c6d3812006-03-21 03:40:38 +00004392 }
vlmfa67ddc2004-06-03 03:38:44 +00004393 }
vlm1aeaddd2006-07-13 08:24:20 +00004394 yyerror (yymsg);
4395 YYSTACK_FREE (yymsg);
vlmfa67ddc2004-06-03 03:38:44 +00004396 }
4397 else
vlm1aeaddd2006-07-13 08:24:20 +00004398 yyerror ("parse error; also virtual memory exhausted");
vlmfa67ddc2004-06-03 03:38:44 +00004399 }
4400 else
4401#endif /* YYERROR_VERBOSE */
vlm1aeaddd2006-07-13 08:24:20 +00004402 yyerror ("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00004403 }
vlm0c6d3812006-03-21 03:40:38 +00004404 goto yyerrlab1;
vlmfa67ddc2004-06-03 03:38:44 +00004405
vlm1aeaddd2006-07-13 08:24:20 +00004406
4407/*----------------------------------------------------.
4408| yyerrlab1 -- error raised explicitly by an action. |
4409`----------------------------------------------------*/
4410yyerrlab1:
vlmfa67ddc2004-06-03 03:38:44 +00004411 if (yyerrstatus == 3)
4412 {
vlm1aeaddd2006-07-13 08:24:20 +00004413 /* If just tried and failed to reuse lookahead token after an
4414 error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00004415
vlm1aeaddd2006-07-13 08:24:20 +00004416 /* Return failure if at end of input. */
vlm0c6d3812006-03-21 03:40:38 +00004417 if (yychar == YYEOF)
vlm1aeaddd2006-07-13 08:24:20 +00004418 {
4419 /* Pop the error token. */
4420 YYPOPSTACK;
4421 /* Pop the rest of the stack. */
4422 while (yyssp > yyss)
4423 {
4424 YYDPRINTF ((stderr, "Error: popping "));
4425 YYDSYMPRINT ((stderr,
4426 yystos[*yyssp],
4427 *yyvsp));
4428 YYDPRINTF ((stderr, "\n"));
4429 yydestruct (yystos[*yyssp], *yyvsp);
4430 YYPOPSTACK;
4431 }
4432 YYABORT;
4433 }
vlmfa67ddc2004-06-03 03:38:44 +00004434
vlm1aeaddd2006-07-13 08:24:20 +00004435 YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
4436 yychar, yytname[yychar1]));
4437 yydestruct (yychar1, yylval);
vlm0c6d3812006-03-21 03:40:38 +00004438 yychar = YYEMPTY;
vlmfa67ddc2004-06-03 03:38:44 +00004439 }
4440
vlm1aeaddd2006-07-13 08:24:20 +00004441 /* Else will try to reuse lookahead token after shifting the error
4442 token. */
vlm0c6d3812006-03-21 03:40:38 +00004443
vlm1aeaddd2006-07-13 08:24:20 +00004444 yyerrstatus = 3; /* Each real token shifted decrements this. */
vlm0c6d3812006-03-21 03:40:38 +00004445
vlm1aeaddd2006-07-13 08:24:20 +00004446 for (;;)
vlm0c6d3812006-03-21 03:40:38 +00004447 {
vlm1aeaddd2006-07-13 08:24:20 +00004448 yyn = yypact[yystate];
4449 if (yyn != YYPACT_NINF)
4450 {
4451 yyn += YYTERROR;
4452 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
4453 {
4454 yyn = yytable[yyn];
4455 if (0 < yyn)
4456 break;
4457 }
4458 }
4459
4460 /* Pop the current state because it cannot handle the error token. */
4461 if (yyssp == yyss)
4462 YYABORT;
4463
4464 YYDPRINTF ((stderr, "Error: popping "));
4465 YYDSYMPRINT ((stderr,
4466 yystos[*yyssp], *yyvsp));
4467 YYDPRINTF ((stderr, "\n"));
4468
4469 yydestruct (yystos[yystate], *yyvsp);
4470 yyvsp--;
4471 yystate = *--yyssp;
4472
4473
4474#if YYDEBUG
4475 if (yydebug)
4476 {
4477 short *yyssp1 = yyss - 1;
4478 YYFPRINTF (stderr, "Error: state stack now");
4479 while (yyssp1 != yyssp)
4480 YYFPRINTF (stderr, " %d", *++yyssp1);
4481 YYFPRINTF (stderr, "\n");
4482 }
vlm0c6d3812006-03-21 03:40:38 +00004483#endif
vlm0c6d3812006-03-21 03:40:38 +00004484 }
vlm0c6d3812006-03-21 03:40:38 +00004485
vlmfa67ddc2004-06-03 03:38:44 +00004486 if (yyn == YYFINAL)
4487 YYACCEPT;
4488
vlm1aeaddd2006-07-13 08:24:20 +00004489 YYDPRINTF ((stderr, "Shifting error token, "));
vlm0c6d3812006-03-21 03:40:38 +00004490
vlmfa67ddc2004-06-03 03:38:44 +00004491 *++yyvsp = yylval;
vlm1aeaddd2006-07-13 08:24:20 +00004492
vlmfa67ddc2004-06-03 03:38:44 +00004493
4494 yystate = yyn;
4495 goto yynewstate;
4496
vlm0c6d3812006-03-21 03:40:38 +00004497
vlm1aeaddd2006-07-13 08:24:20 +00004498/*-------------------------------------.
4499| yyacceptlab -- YYACCEPT comes here. |
4500`-------------------------------------*/
4501yyacceptlab:
4502 yyresult = 0;
4503 goto yyreturn;
4504
4505/*-----------------------------------.
4506| yyabortlab -- YYABORT comes here. |
4507`-----------------------------------*/
4508yyabortlab:
4509 yyresult = 1;
4510 goto yyreturn;
4511
4512#ifndef yyoverflow
4513/*----------------------------------------------.
4514| yyoverflowlab -- parser overflow comes here. |
4515`----------------------------------------------*/
4516yyoverflowlab:
4517 yyerror ("parser stack overflow");
4518 yyresult = 2;
4519 /* Fall through. */
vlm0c6d3812006-03-21 03:40:38 +00004520#endif
vlm1aeaddd2006-07-13 08:24:20 +00004521
4522yyreturn:
4523#ifndef yyoverflow
4524 if (yyss != yyssa)
4525 YYSTACK_FREE (yyss);
4526#endif
4527 return yyresult;
vlmfa67ddc2004-06-03 03:38:44 +00004528}
vlm1aeaddd2006-07-13 08:24:20 +00004529
4530
vlmd3420d32006-09-14 10:35:20 +00004531#line 2248 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00004532
4533
4534
4535/*
4536 * Convert Xstring ('0101'B or '5'H) to the binary vector.
4537 */
4538static asn1p_value_t *
4539_convert_bitstring2binary(char *str, int base) {
4540 asn1p_value_t *val;
4541 int slen;
4542 int memlen;
4543 int baselen;
4544 int bits;
4545 uint8_t *binary_vector;
4546 uint8_t *bv_ptr;
4547 uint8_t cur_val;
4548
4549 assert(str);
4550 assert(str[0] == '\'');
4551
4552 switch(base) {
4553 case 'B':
4554 baselen = 1;
4555 break;
4556 case 'H':
4557 baselen = 4;
4558 break;
4559 default:
4560 assert(base == 'B' || base == 'H');
4561 errno = EINVAL;
4562 return NULL;
4563 }
4564
4565 slen = strlen(str);
4566 assert(str[slen - 1] == base);
4567 assert(str[slen - 2] == '\'');
4568
4569 memlen = slen / (8 / baselen); /* Conservative estimate */
4570
4571 bv_ptr = binary_vector = malloc(memlen + 1);
4572 if(bv_ptr == NULL)
4573 /* ENOMEM */
4574 return NULL;
4575
4576 cur_val = 0;
4577 bits = 0;
4578 while(*(++str) != '\'') {
4579 switch(baselen) {
4580 case 1:
4581 switch(*str) {
4582 case '1':
4583 cur_val |= 1 << (7 - (bits % 8));
4584 case '0':
4585 break;
4586 default:
4587 assert(!"_y UNREACH1");
4588 case ' ': case '\r': case '\n':
4589 continue;
4590 }
4591 break;
4592 case 4:
4593 switch(*str) {
4594 case '0': case '1': case '2': case '3': case '4':
4595 case '5': case '6': case '7': case '8': case '9':
4596 cur_val |= (*str - '0') << (4 - (bits % 8));
4597 break;
4598 case 'A': case 'B': case 'C':
4599 case 'D': case 'E': case 'F':
4600 cur_val |= ((*str - 'A') + 10)
4601 << (4 - (bits % 8));
4602 break;
4603 default:
4604 assert(!"_y UNREACH2");
4605 case ' ': case '\r': case '\n':
4606 continue;
4607 }
4608 break;
4609 }
4610
4611 bits += baselen;
4612 if((bits % 8) == 0) {
4613 *bv_ptr++ = cur_val;
4614 cur_val = 0;
4615 }
4616 }
4617
4618 *bv_ptr = cur_val;
4619 assert((bv_ptr - binary_vector) <= memlen);
4620
4621 val = asn1p_value_frombits(binary_vector, bits, 0);
4622 if(val == NULL) {
4623 free(binary_vector);
4624 }
4625
4626 return val;
4627}
4628
vlm5d89c3d2005-08-13 09:07:11 +00004629/*
4630 * For unnamed types (used in old X.208 compliant modules)
4631 * generate some sort of interim names, to not to force human being to fix
4632 * the specification's compliance to modern ASN.1 standards.
4633 */
4634static void
4635_fixup_anonymous_identifier(asn1p_expr_t *expr) {
4636 char *p;
4637 assert(expr->Identifier == 0);
4638
4639 /*
4640 * Try to figure out the type name
4641 * without going too much into details
4642 */
4643 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
4644 if(expr->reference && expr->reference->comp_count > 0)
4645 expr->Identifier = expr->reference->components[0].name;
4646
4647 fprintf(stderr,
4648 "WARNING: Line %d: expected lower-case member identifier, "
4649 "found an unnamed %s.\n"
4650 "WARNING: Obsolete X.208 syntax detected, "
4651 "please give the member a name.\n",
4652 yylineno, expr->Identifier ? expr->Identifier : "type");
4653
4654 if(!expr->Identifier)
4655 expr->Identifier = "unnamed";
4656 expr->Identifier = strdup(expr->Identifier);
4657 assert(expr->Identifier);
4658 /* Make a lowercase identifier from the type name */
4659 for(p = expr->Identifier; *p; p++) {
4660 switch(*p) {
4661 case 'A' ... 'Z': *p += 32; break;
4662 case ' ': *p = '_'; break;
4663 case '-': *p = '_'; break;
4664 }
4665 }
4666 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
4667 "Name clash may occur later.\n",
4668 expr->Identifier);
4669}
4670
vlmfa67ddc2004-06-03 03:38:44 +00004671int
4672yyerror(const char *msg) {
vlm808411d2006-03-14 16:31:37 +00004673 extern char *asn1p_text;
vlmfa67ddc2004-06-03 03:38:44 +00004674 fprintf(stderr,
4675 "ASN.1 grammar parse error "
4676 "near line %d (token \"%s\"): %s\n",
vlm39e5ed72004-09-05 10:40:41 +00004677 yylineno, asn1p_text, msg);
vlmfa67ddc2004-06-03 03:38:44 +00004678 return -1;
4679}
4680
vlm1aeaddd2006-07-13 08:24:20 +00004681