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