blob: f99d215fdb3257fe54061c47c3d24b7356c331e8 [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,
70 TOK_tuple = 266,
71 TOK_quadruple = 267,
72 TOK_number_negative = 268,
73 TOK_typereference = 269,
74 TOK_capitalreference = 270,
75 TOK_typefieldreference = 271,
76 TOK_valuefieldreference = 272,
77 TOK_Literal = 273,
78 TOK_ABSENT = 274,
79 TOK_ABSTRACT_SYNTAX = 275,
80 TOK_ALL = 276,
81 TOK_ANY = 277,
82 TOK_APPLICATION = 278,
83 TOK_AUTOMATIC = 279,
84 TOK_BEGIN = 280,
85 TOK_BIT = 281,
86 TOK_BMPString = 282,
87 TOK_BOOLEAN = 283,
88 TOK_BY = 284,
89 TOK_CHARACTER = 285,
90 TOK_CHOICE = 286,
91 TOK_CLASS = 287,
92 TOK_COMPONENT = 288,
93 TOK_COMPONENTS = 289,
94 TOK_CONSTRAINED = 290,
95 TOK_CONTAINING = 291,
96 TOK_DEFAULT = 292,
97 TOK_DEFINITIONS = 293,
98 TOK_DEFINED = 294,
99 TOK_EMBEDDED = 295,
100 TOK_ENCODED = 296,
101 TOK_ENCODING_CONTROL = 297,
102 TOK_END = 298,
103 TOK_ENUMERATED = 299,
104 TOK_EXPLICIT = 300,
105 TOK_EXPORTS = 301,
106 TOK_EXTENSIBILITY = 302,
107 TOK_EXTERNAL = 303,
108 TOK_FALSE = 304,
109 TOK_FROM = 305,
110 TOK_GeneralizedTime = 306,
111 TOK_GeneralString = 307,
112 TOK_GraphicString = 308,
113 TOK_IA5String = 309,
114 TOK_IDENTIFIER = 310,
115 TOK_IMPLICIT = 311,
116 TOK_IMPLIED = 312,
117 TOK_IMPORTS = 313,
118 TOK_INCLUDES = 314,
119 TOK_INSTANCE = 315,
120 TOK_INSTRUCTIONS = 316,
121 TOK_INTEGER = 317,
122 TOK_ISO646String = 318,
123 TOK_MAX = 319,
124 TOK_MIN = 320,
125 TOK_MINUS_INFINITY = 321,
126 TOK_NULL = 322,
127 TOK_NumericString = 323,
128 TOK_OBJECT = 324,
129 TOK_ObjectDescriptor = 325,
130 TOK_OCTET = 326,
131 TOK_OF = 327,
132 TOK_OPTIONAL = 328,
133 TOK_PATTERN = 329,
134 TOK_PDV = 330,
135 TOK_PLUS_INFINITY = 331,
136 TOK_PRESENT = 332,
137 TOK_PrintableString = 333,
138 TOK_PRIVATE = 334,
139 TOK_REAL = 335,
140 TOK_RELATIVE_OID = 336,
141 TOK_SEQUENCE = 337,
142 TOK_SET = 338,
143 TOK_SIZE = 339,
144 TOK_STRING = 340,
145 TOK_SYNTAX = 341,
146 TOK_T61String = 342,
147 TOK_TAGS = 343,
148 TOK_TeletexString = 344,
149 TOK_TRUE = 345,
150 TOK_TYPE_IDENTIFIER = 346,
151 TOK_UNIQUE = 347,
152 TOK_UNIVERSAL = 348,
153 TOK_UniversalString = 349,
154 TOK_UTCTime = 350,
155 TOK_UTF8String = 351,
156 TOK_VideotexString = 352,
157 TOK_VisibleString = 353,
158 TOK_WITH = 354,
159 TOK_EXCEPT = 355,
160 TOK_INTERSECTION = 356,
161 TOK_UNION = 357,
162 TOK_TwoDots = 358,
163 TOK_ThreeDots = 359
164 };
165#endif
166#define TOK_PPEQ 258
167#define TOK_whitespace 259
168#define TOK_opaque 260
169#define TOK_bstring 261
170#define TOK_cstring 262
171#define TOK_hstring 263
172#define TOK_identifier 264
173#define TOK_number 265
174#define TOK_tuple 266
175#define TOK_quadruple 267
176#define TOK_number_negative 268
177#define TOK_typereference 269
178#define TOK_capitalreference 270
179#define TOK_typefieldreference 271
180#define TOK_valuefieldreference 272
181#define TOK_Literal 273
182#define TOK_ABSENT 274
183#define TOK_ABSTRACT_SYNTAX 275
184#define TOK_ALL 276
185#define TOK_ANY 277
186#define TOK_APPLICATION 278
187#define TOK_AUTOMATIC 279
188#define TOK_BEGIN 280
189#define TOK_BIT 281
190#define TOK_BMPString 282
191#define TOK_BOOLEAN 283
192#define TOK_BY 284
193#define TOK_CHARACTER 285
194#define TOK_CHOICE 286
195#define TOK_CLASS 287
196#define TOK_COMPONENT 288
197#define TOK_COMPONENTS 289
198#define TOK_CONSTRAINED 290
199#define TOK_CONTAINING 291
200#define TOK_DEFAULT 292
201#define TOK_DEFINITIONS 293
202#define TOK_DEFINED 294
203#define TOK_EMBEDDED 295
204#define TOK_ENCODED 296
205#define TOK_ENCODING_CONTROL 297
206#define TOK_END 298
207#define TOK_ENUMERATED 299
208#define TOK_EXPLICIT 300
209#define TOK_EXPORTS 301
210#define TOK_EXTENSIBILITY 302
211#define TOK_EXTERNAL 303
212#define TOK_FALSE 304
213#define TOK_FROM 305
214#define TOK_GeneralizedTime 306
215#define TOK_GeneralString 307
216#define TOK_GraphicString 308
217#define TOK_IA5String 309
218#define TOK_IDENTIFIER 310
219#define TOK_IMPLICIT 311
220#define TOK_IMPLIED 312
221#define TOK_IMPORTS 313
222#define TOK_INCLUDES 314
223#define TOK_INSTANCE 315
224#define TOK_INSTRUCTIONS 316
225#define TOK_INTEGER 317
226#define TOK_ISO646String 318
227#define TOK_MAX 319
228#define TOK_MIN 320
229#define TOK_MINUS_INFINITY 321
230#define TOK_NULL 322
231#define TOK_NumericString 323
232#define TOK_OBJECT 324
233#define TOK_ObjectDescriptor 325
234#define TOK_OCTET 326
235#define TOK_OF 327
236#define TOK_OPTIONAL 328
237#define TOK_PATTERN 329
238#define TOK_PDV 330
239#define TOK_PLUS_INFINITY 331
240#define TOK_PRESENT 332
241#define TOK_PrintableString 333
242#define TOK_PRIVATE 334
243#define TOK_REAL 335
244#define TOK_RELATIVE_OID 336
245#define TOK_SEQUENCE 337
246#define TOK_SET 338
247#define TOK_SIZE 339
248#define TOK_STRING 340
249#define TOK_SYNTAX 341
250#define TOK_T61String 342
251#define TOK_TAGS 343
252#define TOK_TeletexString 344
253#define TOK_TRUE 345
254#define TOK_TYPE_IDENTIFIER 346
255#define TOK_UNIQUE 347
256#define TOK_UNIVERSAL 348
257#define TOK_UniversalString 349
258#define TOK_UTCTime 350
259#define TOK_UTF8String 351
260#define TOK_VideotexString 352
261#define TOK_VisibleString 353
262#define TOK_WITH 354
263#define TOK_EXCEPT 355
264#define TOK_INTERSECTION 356
265#define TOK_UNION 357
266#define TOK_TwoDots 358
267#define TOK_ThreeDots 359
268
269
270
271
272/* Copy the first part of user declarations. */
vlmfa67ddc2004-06-03 03:38:44 +0000273#line 1 "asn1p_y.y"
274
275
276#include <stdlib.h>
277#include <stdio.h>
278#include <string.h>
279#include <errno.h>
280#include <assert.h>
281
282#include "asn1parser.h"
283
284#define YYPARSE_PARAM param
vlm03630c52005-06-07 21:43:32 +0000285#define YYPARSE_PARAM_TYPE void **
vlmfa67ddc2004-06-03 03:38:44 +0000286#define YYERROR_VERBOSE
287
288int yylex(void);
289int yyerror(const char *msg);
vlm03630c52005-06-07 21:43:32 +0000290#ifdef YYBYACC
291int yyparse(void **param); /* byacc does not produce a prototype */
292#endif
vlmfa67ddc2004-06-03 03:38:44 +0000293void asn1p_lexer_hack_push_opaque_state(void);
294void asn1p_lexer_hack_enable_with_syntax(void);
vlm9283dbe2004-08-18 04:59:12 +0000295void asn1p_lexer_hack_push_encoding_control(void);
vlmfa67ddc2004-06-03 03:38:44 +0000296#define yylineno asn1p_lineno
297extern int asn1p_lineno;
298
vlm931aeed2005-08-12 10:09:10 +0000299/*
vlm177a5b62005-09-05 05:17:57 +0000300 * Process directives as <ASN1C:RepresentAsPointer>
vlm066dc102005-08-22 12:23:54 +0000301 */
302extern int asn1p_as_pointer;
vlm066dc102005-08-22 12:23:54 +0000303
304/*
vlm931aeed2005-08-12 10:09:10 +0000305 * This temporary variable is used to solve the shortcomings of 1-lookahead
306 * parser.
307 */
308static struct AssignedIdentifier *saved_aid;
vlmfa67ddc2004-06-03 03:38:44 +0000309
vlm5d89c3d2005-08-13 09:07:11 +0000310static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
311static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
vlmfa67ddc2004-06-03 03:38:44 +0000312
vlm931aeed2005-08-12 10:09:10 +0000313#define checkmem(ptr) do { \
314 if(!(ptr)) \
315 return yyerror("Memory failure"); \
vlmfa67ddc2004-06-03 03:38:44 +0000316 } while(0)
317
vlm931aeed2005-08-12 10:09:10 +0000318#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
319 if(arg1->type != constr_type) { \
320 int __ret; \
321 root = asn1p_constraint_new(yylineno); \
322 checkmem(root); \
323 root->type = constr_type; \
324 __ret = asn1p_constraint_insert(root, \
325 arg1); \
326 checkmem(__ret == 0); \
327 } else { \
328 root = arg1; \
329 } \
330 if(arg2) { \
331 int __ret \
332 = asn1p_constraint_insert(root, arg2); \
333 checkmem(__ret == 0); \
334 } \
vlmfa67ddc2004-06-03 03:38:44 +0000335 } while(0)
336
337
vlm1aeaddd2006-07-13 08:24:20 +0000338
339/* Enabling traces. */
340#ifndef YYDEBUG
341# define YYDEBUG 0
342#endif
343
344/* Enabling verbose error messages. */
345#ifdef YYERROR_VERBOSE
346# undef YYERROR_VERBOSE
347# define YYERROR_VERBOSE 1
348#else
349# define YYERROR_VERBOSE 0
350#endif
351
352#ifndef YYSTYPE
vlm177a5b62005-09-05 05:17:57 +0000353#line 72 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +0000354typedef union {
vlmfa67ddc2004-06-03 03:38:44 +0000355 asn1p_t *a_grammar;
356 asn1p_module_flags_e a_module_flags;
357 asn1p_module_t *a_module;
358 asn1p_expr_type_e a_type; /* ASN.1 Type */
359 asn1p_expr_t *a_expr; /* Constructed collection */
360 asn1p_constraint_t *a_constr; /* Constraint */
361 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
362 asn1p_xports_t *a_xports; /* IMports/EXports */
vlm931aeed2005-08-12 10:09:10 +0000363 struct AssignedIdentifier a_aid; /* Assigned Identifier */
vlmfa67ddc2004-06-03 03:38:44 +0000364 asn1p_oid_t *a_oid; /* Object Identifier */
365 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
366 struct asn1p_type_tag_s a_tag; /* A tag */
367 asn1p_ref_t *a_ref; /* Reference to custom type */
368 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
369 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
370 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
371 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
372 struct asn1p_param_s a_parg; /* A parameter argument */
373 asn1p_paramlist_t *a_plist; /* A pargs list */
vlmc94e28f2004-09-15 11:59:51 +0000374 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
vlmfa67ddc2004-06-03 03:38:44 +0000375 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
vlmec6acd42004-09-29 13:18:09 +0000376 asn1c_integer_t a_int;
vlmfa67ddc2004-06-03 03:38:44 +0000377 char *tv_str;
378 struct {
379 char *buf;
380 int len;
381 } tv_opaque;
382 struct {
383 char *name;
384 struct asn1p_type_tag_s tag;
385 } tv_nametag;
vlm1aeaddd2006-07-13 08:24:20 +0000386} yystype;
387/* Line 193 of /usr/local/share/bison/yacc.c. */
388#line 389 "asn1p_y.c"
389# define YYSTYPE yystype
390# define YYSTYPE_IS_TRIVIAL 1
vlmfa67ddc2004-06-03 03:38:44 +0000391#endif
392
vlm1aeaddd2006-07-13 08:24:20 +0000393#ifndef YYLTYPE
394typedef struct yyltype
395{
396 int first_line;
397 int first_column;
398 int last_line;
399 int last_column;
400} yyltype;
401# define YYLTYPE yyltype
402# define YYLTYPE_IS_TRIVIAL 1
403#endif
404
405/* Copy the second part of user declarations. */
vlmfa67ddc2004-06-03 03:38:44 +0000406
407
vlm1aeaddd2006-07-13 08:24:20 +0000408/* Line 213 of /usr/local/share/bison/yacc.c. */
409#line 410 "asn1p_y.c"
vlmfa67ddc2004-06-03 03:38:44 +0000410
vlm1aeaddd2006-07-13 08:24:20 +0000411#if ! defined (yyoverflow) || YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +0000412
vlm1aeaddd2006-07-13 08:24:20 +0000413/* The parser invokes alloca or malloc; define the necessary symbols. */
vlmfa67ddc2004-06-03 03:38:44 +0000414
vlm1aeaddd2006-07-13 08:24:20 +0000415# if YYSTACK_USE_ALLOCA
416# define YYSTACK_ALLOC alloca
417# else
418# ifndef YYSTACK_USE_ALLOCA
419# if defined (alloca) || defined (_ALLOCA_H)
420# define YYSTACK_ALLOC alloca
421# else
422# ifdef __GNUC__
423# define YYSTACK_ALLOC __builtin_alloca
424# endif
425# endif
426# endif
427# endif
vlmfa67ddc2004-06-03 03:38:44 +0000428
vlm1aeaddd2006-07-13 08:24:20 +0000429# ifdef YYSTACK_ALLOC
430 /* Pacify GCC's `empty if-body' warning. */
431# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
432# else
433# if defined (__STDC__) || defined (__cplusplus)
434# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
435# define YYSIZE_T size_t
436# endif
437# define YYSTACK_ALLOC malloc
438# define YYSTACK_FREE free
439# endif
440#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
441
442
443#if (! defined (yyoverflow) \
444 && (! defined (__cplusplus) \
445 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
446
447/* A type that is properly aligned for any stack member. */
448union yyalloc
449{
450 short yyss;
451 YYSTYPE yyvs;
452 };
453
454/* The size of the maximum gap between one aligned stack and the next. */
455# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
456
457/* The size of an array large to enough to hold all stacks, each with
458 N elements. */
459# define YYSTACK_BYTES(N) \
460 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
461 + YYSTACK_GAP_MAX)
462
463/* Copy COUNT objects from FROM to TO. The source and destination do
464 not overlap. */
465# ifndef YYCOPY
466# if 1 < __GNUC__
467# define YYCOPY(To, From, Count) \
468 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
469# else
470# define YYCOPY(To, From, Count) \
471 do \
472 { \
473 register YYSIZE_T yyi; \
474 for (yyi = 0; yyi < (Count); yyi++) \
475 (To)[yyi] = (From)[yyi]; \
476 } \
477 while (0)
478# endif
479# endif
480
481/* Relocate STACK from its old location to the new one. The
482 local variables YYSIZE and YYSTACKSIZE give the old and new number of
483 elements in the stack, and YYPTR gives the new location of the
484 stack. Advance YYPTR to a properly aligned location for the next
485 stack. */
486# define YYSTACK_RELOCATE(Stack) \
487 do \
488 { \
489 YYSIZE_T yynewbytes; \
490 YYCOPY (&yyptr->Stack, Stack, yysize); \
491 Stack = &yyptr->Stack; \
492 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
493 yyptr += yynewbytes / sizeof (*yyptr); \
494 } \
495 while (0)
vlmfa67ddc2004-06-03 03:38:44 +0000496
497#endif
498
vlm1aeaddd2006-07-13 08:24:20 +0000499#if defined (__STDC__) || defined (__cplusplus)
500 typedef signed char yysigned_char;
vlmfa67ddc2004-06-03 03:38:44 +0000501#else
vlm1aeaddd2006-07-13 08:24:20 +0000502 typedef short yysigned_char;
vlmfa67ddc2004-06-03 03:38:44 +0000503#endif
504
vlm1aeaddd2006-07-13 08:24:20 +0000505/* YYFINAL -- State number of the termination state. */
506#define YYFINAL 7
507#define YYLAST 838
508
509/* YYNTOKENS -- Number of terminals. */
510#define YYNTOKENS 120
511/* YYNNTS -- Number of nonterminals. */
512#define YYNNTS 108
513/* YYNRULES -- Number of rules. */
514#define YYNRULES 291
515/* YYNRULES -- Number of states. */
516#define YYNSTATES 448
517
518/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
519#define YYUNDEFTOK 2
520#define YYMAXUTOK 359
521
522#define YYTRANSLATE(X) \
523 ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
524
525/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
526static const unsigned char yytranslate[] =
527{
528 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
529 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
530 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
531 2, 2, 2, 116, 2, 2, 2, 2, 2, 2,
532 109, 110, 2, 2, 112, 2, 117, 2, 2, 2,
533 2, 2, 2, 2, 2, 2, 2, 2, 113, 111,
534 118, 2, 2, 2, 119, 2, 2, 2, 2, 2,
535 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
536 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
537 2, 114, 2, 115, 101, 2, 2, 2, 2, 2,
538 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
539 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
540 2, 2, 2, 107, 103, 108, 2, 2, 2, 2,
541 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
542 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
543 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
544 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, 1, 2, 3, 4,
554 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
555 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
556 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
557 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
558 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
559 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
560 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
561 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
562 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
563 95, 96, 97, 98, 99, 100, 102, 104, 105, 106
564};
565
566#if YYDEBUG
567/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
568 YYRHS. */
569static const unsigned short yyprhs[] =
570{
571 0, 0, 3, 5, 7, 10, 19, 20, 22, 26,
572 29, 31, 34, 36, 41, 43, 44, 46, 48, 51,
573 54, 57, 60, 63, 66, 67, 69, 71, 74, 76,
574 78, 80, 82, 84, 85, 89, 91, 95, 98, 100,
575 103, 104, 106, 111, 113, 117, 119, 123, 125, 129,
576 133, 136, 138, 142, 144, 148, 150, 154, 159, 161,
577 163, 168, 172, 176, 183, 190, 192, 196, 198, 202,
578 206, 210, 214, 216, 220, 222, 224, 226, 228, 229,
579 231, 233, 237, 241, 244, 248, 250, 252, 256, 259,
580 261, 263, 269, 270, 272, 274, 278, 281, 286, 290,
581 294, 298, 302, 306, 307, 309, 310, 317, 319, 322,
582 324, 326, 328, 332, 334, 338, 342, 346, 347, 350,
583 352, 357, 362, 367, 374, 381, 383, 388, 392, 394,
584 398, 402, 406, 408, 412, 414, 418, 420, 422, 424,
585 426, 430, 434, 436, 441, 443, 445, 449, 450, 454,
586 456, 458, 460, 462, 464, 466, 468, 470, 474, 476,
587 478, 480, 482, 485, 487, 489, 491, 493, 496, 499,
588 501, 503, 506, 509, 511, 513, 515, 517, 519, 522,
589 524, 527, 529, 531, 533, 535, 537, 539, 541, 543,
590 545, 547, 549, 551, 553, 555, 557, 559, 561, 563,
591 565, 566, 568, 570, 575, 579, 584, 586, 588, 592,
592 598, 600, 604, 608, 612, 616, 621, 625, 627, 629,
593 633, 637, 641, 645, 647, 649, 650, 656, 658, 661,
594 664, 668, 670, 672, 674, 676, 678, 680, 682, 684,
595 688, 694, 696, 700, 702, 706, 707, 709, 711, 713,
596 715, 717, 719, 723, 728, 730, 734, 737, 741, 743,
597 747, 748, 750, 752, 755, 758, 762, 764, 768, 770,
598 775, 780, 782, 784, 786, 788, 789, 791, 794, 799,
599 800, 802, 804, 806, 807, 809, 811, 813, 815, 817,
600 818, 820
601};
602
603/* YYRHS -- A `-1'-separated list of the rules' RHS. */
604static const short yyrhs[] =
605{
606 121, 0, -1, 122, -1, 123, -1, 122, 123, -1,
607 224, 124, 38, 128, 3, 25, 131, 43, -1, -1,
608 125, -1, 107, 126, 108, -1, 107, 108, -1, 127,
609 -1, 126, 127, -1, 227, -1, 227, 109, 10, 110,
610 -1, 10, -1, -1, 129, -1, 130, -1, 129, 130,
611 -1, 45, 88, -1, 56, 88, -1, 24, 88, -1,
612 47, 57, -1, 15, 61, -1, -1, 132, -1, 133,
613 -1, 132, 133, -1, 135, -1, 141, -1, 147, -1,
614 177, -1, 145, -1, -1, 42, 15, 134, -1, 187,
615 -1, 58, 136, 111, -1, 58, 50, -1, 138, -1,
616 136, 138, -1, -1, 125, -1, 139, 50, 224, 137,
617 -1, 140, -1, 139, 112, 140, -1, 224, -1, 224,
618 107, 108, -1, 227, -1, 46, 142, 111, -1, 46,
619 21, 111, -1, 46, 111, -1, 143, -1, 142, 112,
620 143, -1, 224, -1, 224, 107, 108, -1, 227, -1,
621 107, 194, 108, -1, 224, 146, 3, 144, -1, 186,
622 -1, 171, -1, 171, 107, 150, 108, -1, 224, 3,
623 167, -1, 224, 3, 157, -1, 224, 107, 148, 108,
624 3, 167, -1, 224, 107, 148, 108, 3, 157, -1,
625 149, -1, 148, 112, 149, -1, 224, -1, 224, 113,
626 227, -1, 224, 113, 224, -1, 184, 113, 227, -1,
627 184, 113, 224, -1, 151, -1, 150, 112, 151, -1,
628 167, -1, 180, -1, 227, -1, 144, -1, -1, 153,
629 -1, 154, -1, 153, 112, 154, -1, 227, 167, 213,
630 -1, 167, 213, -1, 34, 72, 167, -1, 166, -1,
631 156, -1, 155, 112, 156, -1, 227, 167, -1, 166,
632 -1, 167, -1, 32, 107, 159, 108, 161, -1, -1,
633 92, -1, 160, -1, 159, 112, 160, -1, 16, 213,
634 -1, 17, 167, 158, 213, -1, 17, 175, 213, -1,
635 17, 176, 213, -1, 16, 175, 213, -1, 16, 167,
636 213, -1, 16, 176, 213, -1, -1, 162, -1, -1,
637 99, 86, 107, 163, 164, 108, -1, 165, -1, 164,
638 165, -1, 4, -1, 18, -1, 174, -1, 114, 164,
639 115, -1, 106, -1, 106, 116, 181, -1, 106, 116,
640 218, -1, 219, 169, 191, -1, -1, 168, 170, -1,
641 146, -1, 31, 107, 155, 108, -1, 82, 107, 152,
642 108, -1, 83, 107, 152, 108, -1, 82, 191, 72,
643 226, 219, 169, -1, 83, 191, 72, 226, 219, 169,
644 -1, 22, -1, 22, 39, 29, 227, -1, 60, 72,
645 171, -1, 14, -1, 14, 117, 224, -1, 225, 117,
646 224, -1, 14, 117, 227, -1, 225, -1, 225, 117,
647 172, -1, 173, -1, 172, 117, 173, -1, 174, -1,
648 16, -1, 17, -1, 16, -1, 175, 117, 16, -1,
649 175, 117, 17, -1, 15, -1, 227, 146, 3, 178,
650 -1, 180, -1, 181, -1, 227, 113, 178, -1, -1,
651 107, 179, 183, -1, 67, -1, 49, -1, 90, -1,
652 6, -1, 8, -1, 182, -1, 218, -1, 227, -1,
653 224, 117, 227, -1, 7, -1, 11, -1, 12, -1,
654 5, -1, 183, 5, -1, 28, -1, 67, -1, 80,
655 -1, 185, -1, 71, 85, -1, 69, 55, -1, 81,
656 -1, 48, -1, 40, 75, -1, 30, 85, -1, 95,
657 -1, 51, -1, 187, -1, 62, -1, 44, -1, 26,
658 85, -1, 184, -1, 185, 215, -1, 27, -1, 52,
659 -1, 53, -1, 54, -1, 63, -1, 68, -1, 78,
660 -1, 87, -1, 89, -1, 94, -1, 96, -1, 97,
661 -1, 98, -1, 70, -1, 103, -1, 104, -1, 101,
662 -1, 102, -1, 100, -1, -1, 192, -1, 193, -1,
663 84, 109, 194, 110, -1, 109, 194, 110, -1, 193,
664 109, 194, 110, -1, 106, -1, 195, -1, 195, 112,
665 106, -1, 195, 112, 106, 112, 195, -1, 196, -1,
666 21, 100, 196, -1, 195, 188, 196, -1, 195, 189,
667 196, -1, 196, 190, 196, -1, 199, 109, 194, 110,
668 -1, 109, 194, 110, -1, 200, -1, 201, -1, 200,
669 198, 200, -1, 65, 198, 200, -1, 200, 198, 64,
670 -1, 65, 198, 64, -1, 207, -1, 202, -1, -1,
671 35, 29, 107, 197, 183, -1, 105, -1, 105, 118,
672 -1, 118, 105, -1, 118, 105, 118, -1, 84, -1,
673 50, -1, 49, -1, 90, -1, 218, -1, 182, -1,
674 227, -1, 224, -1, 99, 33, 193, -1, 99, 34,
675 107, 203, 108, -1, 204, -1, 203, 112, 204, -1,
676 106, -1, 227, 191, 205, -1, -1, 206, -1, 77,
677 -1, 19, -1, 73, -1, 208, -1, 209, -1, 107,
678 224, 108, -1, 208, 107, 210, 108, -1, 211, -1,
679 210, 112, 211, -1, 119, 212, -1, 119, 117, 212,
680 -1, 227, -1, 212, 117, 227, -1, -1, 214, -1,
681 73, -1, 37, 178, -1, 107, 108, -1, 107, 216,
682 108, -1, 217, -1, 216, 112, 217, -1, 227, -1,
683 227, 109, 218, 110, -1, 227, 109, 181, 110, -1,
684 218, -1, 106, -1, 10, -1, 13, -1, -1, 220,
685 -1, 221, 223, -1, 114, 222, 10, 115, -1, -1,
686 93, -1, 23, -1, 79, -1, -1, 56, -1, 45,
687 -1, 14, -1, 15, -1, 15, -1, -1, 227, -1,
688 9, -1
689};
690
691/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
692static const unsigned short yyrline[] =
693{
694 0, 323, 323, 329, 335, 351, 376, 378, 381, 385,
695 390, 397, 405, 410, 414, 423, 425, 433, 437, 445,
696 449, 452, 455, 459, 479, 481, 489, 493, 525, 529,
697 538, 545, 558, 566, 565, 579, 591, 602, 607, 613,
698 619, 621, 624, 635, 641, 647, 654, 660, 668, 672,
699 675, 682, 688, 694, 701, 707, 716, 718, 728, 742,
700 752, 768, 778, 794, 800, 807, 817, 827, 832, 839,
701 846, 854, 864, 870, 876, 880, 888, 899, 921, 923,
702 925, 931, 937, 945, 951, 958, 963, 969, 975, 981,
703 984, 990, 1000, 1002, 1005, 1013, 1020, 1033, 1044, 1054,
704 1065, 1075, 1086, 1097, 1099, 1106, 1104, 1113, 1118, 1124,
705 1129, 1132, 1136, 1141, 1150, 1159, 1170, 1192, 1199, 1218,
706 1222, 1228, 1234, 1240, 1250, 1260, 1266, 1277, 1291, 1300,
707 1310, 1320, 1330, 1338, 1359, 1368, 1377, 1379, 1386, 1393,
708 1399, 1403, 1409, 1429, 1439, 1441, 1442, 1449, 1449, 1454,
709 1461, 1467, 1472, 1476, 1480, 1483, 1488, 1500, 1517, 1522,
710 1527, 1560, 1570, 1584, 1586, 1587, 1588, 1589, 1590, 1591,
711 1592, 1593, 1594, 1595, 1596, 1597, 1603, 1605, 1606, 1609,
712 1616, 1628, 1630, 1634, 1638, 1639, 1640, 1641, 1642, 1646,
713 1647, 1648, 1649, 1653, 1654, 1661, 1661, 1662, 1662, 1663,
714 1665, 1667, 1672, 1676, 1685, 1689, 1694, 1699, 1702, 1708,
715 1718, 1722, 1725, 1728, 1731, 1736, 1745, 1753, 1759, 1765,
716 1772, 1780, 1788, 1797, 1800, 1804, 1803, 1814, 1816, 1817,
717 1818, 1821, 1825, 1830, 1836, 1841, 1844, 1847, 1860, 1874,
718 1878, 1883, 1887, 1892, 1899, 1912, 1914, 1917, 1921, 1924,
719 1929, 1933, 1941, 1956, 1962, 1969, 1982, 1994, 2009, 2013,
720 2030, 2035, 2038, 2043, 2065, 2070, 2075, 2081, 2087, 2095,
721 2103, 2111, 2118, 2128, 2133, 2163, 2165, 2168, 2175, 2181,
722 2183, 2184, 2185, 2188, 2190, 2191, 2194, 2199, 2206, 2213,
723 2215, 2220
724};
725#endif
726
727#if YYDEBUG || YYERROR_VERBOSE
728/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
729 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
730static const char *const yytname[] =
731{
732 "$end", "error", "$undefined", "TOK_PPEQ", "TOK_whitespace", "TOK_opaque",
733 "TOK_bstring", "TOK_cstring", "TOK_hstring", "TOK_identifier",
734 "TOK_number", "TOK_tuple", "TOK_quadruple", "TOK_number_negative",
735 "TOK_typereference", "TOK_capitalreference", "TOK_typefieldreference",
736 "TOK_valuefieldreference", "TOK_Literal", "TOK_ABSENT",
737 "TOK_ABSTRACT_SYNTAX", "TOK_ALL", "TOK_ANY", "TOK_APPLICATION",
738 "TOK_AUTOMATIC", "TOK_BEGIN", "TOK_BIT", "TOK_BMPString", "TOK_BOOLEAN",
739 "TOK_BY", "TOK_CHARACTER", "TOK_CHOICE", "TOK_CLASS", "TOK_COMPONENT",
740 "TOK_COMPONENTS", "TOK_CONSTRAINED", "TOK_CONTAINING", "TOK_DEFAULT",
741 "TOK_DEFINITIONS", "TOK_DEFINED", "TOK_EMBEDDED", "TOK_ENCODED",
742 "TOK_ENCODING_CONTROL", "TOK_END", "TOK_ENUMERATED", "TOK_EXPLICIT",
743 "TOK_EXPORTS", "TOK_EXTENSIBILITY", "TOK_EXTERNAL", "TOK_FALSE",
744 "TOK_FROM", "TOK_GeneralizedTime", "TOK_GeneralString",
745 "TOK_GraphicString", "TOK_IA5String", "TOK_IDENTIFIER", "TOK_IMPLICIT",
746 "TOK_IMPLIED", "TOK_IMPORTS", "TOK_INCLUDES", "TOK_INSTANCE",
747 "TOK_INSTRUCTIONS", "TOK_INTEGER", "TOK_ISO646String", "TOK_MAX",
748 "TOK_MIN", "TOK_MINUS_INFINITY", "TOK_NULL", "TOK_NumericString",
749 "TOK_OBJECT", "TOK_ObjectDescriptor", "TOK_OCTET", "TOK_OF",
750 "TOK_OPTIONAL", "TOK_PATTERN", "TOK_PDV", "TOK_PLUS_INFINITY",
751 "TOK_PRESENT", "TOK_PrintableString", "TOK_PRIVATE", "TOK_REAL",
752 "TOK_RELATIVE_OID", "TOK_SEQUENCE", "TOK_SET", "TOK_SIZE", "TOK_STRING",
753 "TOK_SYNTAX", "TOK_T61String", "TOK_TAGS", "TOK_TeletexString",
754 "TOK_TRUE", "TOK_TYPE_IDENTIFIER", "TOK_UNIQUE", "TOK_UNIVERSAL",
755 "TOK_UniversalString", "TOK_UTCTime", "TOK_UTF8String",
756 "TOK_VideotexString", "TOK_VisibleString", "TOK_WITH", "TOK_EXCEPT",
757 "'^'", "TOK_INTERSECTION", "'|'", "TOK_UNION", "TOK_TwoDots",
758 "TOK_ThreeDots", "'{'", "'}'", "'('", "')'", "';'", "','", "':'", "'['",
759 "']'", "'!'", "'.'", "'<'", "'@'", "$accept", "ParsedGrammar",
760 "ModuleList", "ModuleSpecification", "optObjectIdentifier",
761 "ObjectIdentifier", "ObjectIdentifierBody", "ObjectIdentifierElement",
762 "optModuleSpecificationFlags", "ModuleSpecificationFlags",
763 "ModuleSpecificationFlag", "optModuleSpecificationBody",
764 "ModuleSpecificationBody", "ModuleSpecificationElement", "@1",
765 "ImportsDefinition", "ImportsBundleSet", "AssignedIdentifier",
766 "ImportsBundle", "ImportsList", "ImportsElement", "ExportsDefinition",
767 "ExportsBody", "ExportsElement", "ValueSet", "ValueSetTypeAssignment",
768 "DefinedType", "DataTypeReference", "ParameterArgumentList",
769 "ParameterArgumentName", "ActualParameterList", "ActualParameter",
770 "optComponentTypeLists", "ComponentTypeLists", "ComponentType",
771 "AlternativeTypeLists", "AlternativeType", "ObjectClass", "optUnique",
772 "FieldSpec", "ClassField", "optWithSyntax", "WithSyntax", "@2",
773 "WithSyntaxList", "WithSyntaxToken", "ExtensionAndException", "Type",
774 "NSTD_IndirectMarker", "TypeDeclaration", "TypeDeclarationSet",
775 "ComplexTypeReference", "ComplexTypeReferenceAmpList",
776 "ComplexTypeReferenceElement", "PrimitiveFieldReference", "FieldName",
777 "DefinedObjectClass", "ValueDefinition", "Value", "@3", "SimpleValue",
778 "DefinedValue", "RestrictedCharacterStringValue", "Opaque",
779 "BasicTypeId", "BasicTypeId_UniverationCompatible", "BasicType",
780 "BasicString", "Union", "Intersection", "Except", "optConstraints",
781 "Constraints", "SetOfConstraints", "ElementSetSpecs", "ElementSetSpec",
782 "ConstraintSubtypeElement", "@4", "ConstraintRangeSpec",
783 "ConstraintSpec", "SingleValue", "ContainedSubtype",
784 "InnerTypeConstraint", "WithComponentsList", "WithComponentsElement",
785 "optPresenceConstraint", "PresenceConstraint", "TableConstraint",
786 "SimpleTableConstraint", "ComponentRelationConstraint",
787 "AtNotationList", "AtNotationElement", "ComponentIdList", "optMarker",
788 "Marker", "UniverationDefinition", "UniverationList",
789 "UniverationElement", "SignedNumber", "optTag", "Tag", "TagTypeValue",
790 "TagClass", "TagPlicit", "TypeRefName", "ObjectClassReference",
791 "optIdentifier", "Identifier", 0
792};
793#endif
794
795# ifdef YYPRINT
796/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
797 token YYLEX-NUM. */
798static const unsigned short yytoknum[] =
799{
800 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
801 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
802 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
803 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
804 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
805 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
806 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
807 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
808 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
809 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
810 355, 94, 356, 124, 357, 358, 359, 123, 125, 40,
811 41, 59, 44, 58, 91, 93, 33, 46, 60, 64
812};
813# endif
814
815/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
816static const unsigned char yyr1[] =
817{
818 0, 120, 121, 122, 122, 123, 124, 124, 125, 125,
819 126, 126, 127, 127, 127, 128, 128, 129, 129, 130,
820 130, 130, 130, 130, 131, 131, 132, 132, 133, 133,
821 133, 133, 133, 134, 133, 133, 135, 135, 136, 136,
822 137, 137, 138, 139, 139, 140, 140, 140, 141, 141,
823 141, 142, 142, 143, 143, 143, 144, 145, 146, 146,
824 146, 147, 147, 147, 147, 148, 148, 149, 149, 149,
825 149, 149, 150, 150, 151, 151, 151, 151, 152, 152,
826 153, 153, 154, 154, 154, 154, 155, 155, 156, 156,
827 156, 157, 158, 158, 159, 159, 160, 160, 160, 160,
828 160, 160, 160, 161, 161, 163, 162, 164, 164, 165,
829 165, 165, 165, 166, 166, 166, 167, 168, 169, 170,
830 170, 170, 170, 170, 170, 170, 170, 170, 171, 171,
831 171, 171, 171, 171, 172, 172, 173, 174, 174, 175,
832 175, 175, 176, 177, 178, 178, 178, 179, 178, 178,
833 180, 180, 180, 180, 180, 180, 181, 181, 182, 182,
834 182, 183, 183, 184, 184, 184, 184, 184, 184, 184,
835 184, 184, 184, 184, 184, 184, 185, 185, 185, 186,
836 186, 187, 187, 187, 187, 187, 187, 187, 187, 187,
837 187, 187, 187, 187, 187, 188, 188, 189, 189, 190,
838 191, 191, 192, 192, 193, 193, 194, 194, 194, 194,
839 195, 195, 195, 195, 195, 196, 196, 196, 196, 196,
840 196, 196, 196, 196, 196, 197, 196, 198, 198, 198,
841 198, 199, 199, 200, 200, 200, 200, 200, 201, 202,
842 202, 203, 203, 204, 204, 205, 205, 206, 206, 206,
843 207, 207, 208, 209, 210, 210, 211, 211, 212, 212,
844 213, 213, 214, 214, 215, 215, 216, 216, 217, 217,
845 217, 217, 217, 218, 218, 219, 219, 220, 221, 222,
846 222, 222, 222, 223, 223, 223, 224, 224, 225, 226,
847 226, 227
848};
849
850/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
851static const unsigned char yyr2[] =
852{
853 0, 2, 1, 1, 2, 8, 0, 1, 3, 2,
854 1, 2, 1, 4, 1, 0, 1, 1, 2, 2,
855 2, 2, 2, 2, 0, 1, 1, 2, 1, 1,
856 1, 1, 1, 0, 3, 1, 3, 2, 1, 2,
857 0, 1, 4, 1, 3, 1, 3, 1, 3, 3,
858 2, 1, 3, 1, 3, 1, 3, 4, 1, 1,
859 4, 3, 3, 6, 6, 1, 3, 1, 3, 3,
860 3, 3, 1, 3, 1, 1, 1, 1, 0, 1,
861 1, 3, 3, 2, 3, 1, 1, 3, 2, 1,
862 1, 5, 0, 1, 1, 3, 2, 4, 3, 3,
863 3, 3, 3, 0, 1, 0, 6, 1, 2, 1,
864 1, 1, 3, 1, 3, 3, 3, 0, 2, 1,
865 4, 4, 4, 6, 6, 1, 4, 3, 1, 3,
866 3, 3, 1, 3, 1, 3, 1, 1, 1, 1,
867 3, 3, 1, 4, 1, 1, 3, 0, 3, 1,
868 1, 1, 1, 1, 1, 1, 1, 3, 1, 1,
869 1, 1, 2, 1, 1, 1, 1, 2, 2, 1,
870 1, 2, 2, 1, 1, 1, 1, 1, 2, 1,
871 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
872 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
873 0, 1, 1, 4, 3, 4, 1, 1, 3, 5,
874 1, 3, 3, 3, 3, 4, 3, 1, 1, 3,
875 3, 3, 3, 1, 1, 0, 5, 1, 2, 2,
876 3, 1, 1, 1, 1, 1, 1, 1, 1, 3,
877 5, 1, 3, 1, 3, 0, 1, 1, 1, 1,
878 1, 1, 3, 4, 1, 3, 2, 3, 1, 3,
879 0, 1, 1, 2, 2, 3, 1, 3, 1, 4,
880 4, 1, 1, 1, 1, 0, 1, 2, 4, 0,
881 1, 1, 1, 0, 1, 1, 1, 1, 1, 0,
882 1, 1
883};
884
885/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
886 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
887 means the default is an error. */
888static const unsigned short yydefact[] =
889{
890 0, 286, 287, 0, 2, 3, 6, 1, 4, 0,
891 0, 7, 291, 14, 9, 0, 10, 12, 15, 8,
892 11, 0, 0, 0, 0, 0, 0, 0, 16, 17,
893 0, 23, 21, 19, 22, 20, 0, 18, 13, 24,
894 181, 0, 0, 182, 183, 184, 0, 185, 186, 194,
895 187, 188, 189, 190, 191, 192, 193, 0, 25, 26,
896 28, 29, 32, 30, 31, 35, 0, 0, 33, 0,
897 50, 0, 51, 53, 55, 37, 0, 38, 0, 43,
898 45, 47, 5, 27, 275, 128, 288, 0, 163, 0,
899 0, 177, 170, 174, 176, 164, 0, 0, 165, 169,
900 173, 0, 0, 59, 179, 166, 58, 175, 132, 0,
901 34, 49, 48, 0, 0, 36, 39, 0, 0, 0,
902 0, 279, 62, 61, 117, 276, 283, 0, 178, 172,
903 171, 168, 167, 0, 65, 0, 166, 67, 0, 275,
904 0, 180, 0, 0, 52, 54, 40, 44, 46, 0,
905 281, 282, 280, 0, 0, 200, 285, 284, 277, 129,
906 131, 0, 0, 0, 0, 0, 57, 152, 158, 153,
907 273, 159, 160, 274, 150, 151, 77, 0, 72, 74,
908 75, 154, 155, 76, 272, 264, 0, 266, 271, 268,
909 137, 138, 133, 134, 136, 130, 149, 147, 143, 144,
910 145, 0, 156, 41, 42, 275, 275, 0, 94, 0,
911 125, 0, 0, 200, 200, 119, 118, 0, 0, 116,
912 201, 202, 275, 66, 71, 70, 69, 68, 0, 0,
913 233, 232, 0, 231, 234, 0, 206, 0, 0, 236,
914 0, 207, 210, 0, 217, 218, 224, 223, 250, 251,
915 235, 238, 237, 60, 275, 265, 0, 0, 0, 0,
916 0, 0, 142, 139, 0, 262, 260, 260, 260, 96,
917 261, 92, 260, 260, 103, 0, 278, 0, 275, 0,
918 275, 0, 275, 0, 0, 0, 0, 64, 63, 0,
919 0, 227, 0, 0, 0, 0, 0, 0, 56, 197,
920 198, 195, 196, 0, 0, 0, 199, 0, 0, 0,
921 0, 73, 267, 0, 0, 156, 135, 161, 148, 157,
922 146, 263, 101, 0, 100, 102, 93, 260, 98, 99,
923 0, 91, 104, 95, 0, 113, 0, 86, 89, 90,
924 275, 127, 0, 0, 79, 80, 85, 260, 275, 289,
925 0, 289, 0, 204, 0, 211, 225, 228, 229, 222,
926 220, 239, 0, 252, 216, 208, 212, 213, 214, 0,
927 221, 219, 0, 0, 254, 270, 269, 162, 140, 141,
928 97, 0, 126, 0, 120, 275, 88, 275, 121, 275,
929 83, 260, 275, 290, 122, 275, 203, 205, 0, 230,
930 243, 0, 241, 200, 0, 215, 0, 256, 258, 253,
931 0, 105, 114, 115, 87, 84, 81, 82, 117, 117,
932 226, 240, 0, 245, 209, 257, 0, 255, 0, 123,
933 124, 242, 248, 249, 247, 244, 246, 259, 109, 110,
934 0, 0, 107, 111, 0, 106, 108, 112
935};
936
937/* YYDEFGOTO[NTERM-NUM]. */
938static const short yydefgoto[] =
939{
940 -1, 3, 4, 5, 10, 11, 15, 16, 27, 28,
941 29, 57, 58, 59, 110, 60, 76, 204, 77, 78,
942 79, 61, 71, 72, 176, 62, 102, 63, 133, 134,
943 177, 178, 343, 344, 345, 336, 337, 122, 327, 207,
944 208, 331, 332, 428, 441, 442, 346, 347, 154, 155,
945 216, 103, 192, 193, 443, 267, 268, 64, 198, 259,
946 199, 200, 239, 318, 104, 105, 106, 107, 304, 305,
947 307, 219, 220, 221, 240, 241, 242, 398, 293, 243,
948 244, 245, 246, 401, 402, 435, 436, 247, 248, 249,
949 373, 374, 407, 269, 270, 141, 186, 187, 250, 124,
950 125, 126, 153, 158, 251, 108, 392, 252
951};
952
953/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
954 STATE-NUM. */
955#define YYPACT_NINF -403
956static const short yypact[] =
957{
958 133, -403, -403, 18, 133, -403, -50, -403, -403, 50,
959 -14, -403, -403, -403, -403, 76, -403, -45, 165, -403,
960 -403, 62, 38, 69, 89, 81, 97, 184, 165, -403,
961 116, -403, -403, -403, -403, -403, 172, -403, -403, 511,
962 -403, 216, 61, -403, -403, -403, 208, -403, -403, -403,
963 -403, -403, -403, -403, -403, -403, -403, 229, 511, -403,
964 -403, -403, -403, -403, -403, -403, 341, 664, -403, 132,
965 -403, 173, -403, 180, -403, -403, 32, -403, -25, -403,
966 182, -403, -403, -403, -11, 174, -403, 222, -403, 232,
967 248, -403, -403, -403, -403, -403, 271, 252, -403, -403,
968 -403, 740, 330, 234, -403, 236, -403, -403, 237, 336,
969 -403, -403, -403, 200, 241, -403, -403, 133, 200, 249,
970 257, -1, -403, -403, -403, -403, 28, 200, -403, -403,
971 -403, -403, -403, 67, -403, 253, -403, 259, 263, 104,
972 70, -403, 331, 192, -403, -403, -50, -403, -403, 289,
973 -403, -403, -403, 365, 588, -58, -403, -403, -403, -403,
974 -403, 376, 740, 200, 200, 225, -403, -403, -403, -403,
975 -403, -403, -403, -403, -403, -403, -403, 78, -403, -403,
976 -403, -403, -403, -403, -403, -403, 108, -403, -403, 273,
977 -403, -403, 266, -403, -403, -403, -403, -403, -403, -403,
978 -403, 267, 274, -403, -403, 154, 74, 141, -403, 275,
979 347, 281, 324, 135, 179, -403, -403, 291, 225, -403,
980 -403, 292, -11, -403, -403, -403, -403, -403, 298, 377,
981 -403, -403, -24, -403, -403, 302, -403, 133, 225, -403,
982 297, 226, 307, 305, -24, -403, -403, -403, 308, -403,
983 -403, -403, -403, -403, 104, -403, 87, 215, 335, 411,
984 409, 192, -403, -403, 192, -403, 25, 91, 25, -403,
985 -403, 328, 91, 25, 325, 289, -403, 394, 60, 345,
986 59, 353, 59, 354, 225, 317, 225, -403, -403, 453,
987 322, 313, 327, 301, 332, 326, 334, 333, -403, -403,
988 -403, -403, -403, 338, 453, 453, -403, 453, 225, 309,
989 315, -403, -403, 346, 348, -403, -403, -403, 435, -403,
990 -403, -403, -403, 361, -403, -403, -403, 25, -403, -403,
991 359, -403, -403, -403, 409, 343, 186, -403, -403, -403,
992 355, -403, 374, 349, 358, -403, -403, 25, 355, 409,
993 363, 409, 362, -403, 364, -403, -403, -403, 360, -403,
994 -403, 292, 39, -403, -403, 367, -403, -403, -403, 366,
995 -403, -403, 23, 188, -403, -403, -403, -403, -403, -403,
996 -403, 370, -403, 215, -403, 60, -403, 355, -403, 54,
997 -403, 25, 355, -403, -403, 355, -403, -403, 411, -403,
998 -403, 189, -403, -58, 440, -403, 409, 356, -403, -403,
999 315, -403, -403, -403, -403, -403, -403, -403, -403, -403,
1000 435, -403, 39, 177, 4, 356, 409, -403, 11, -403,
1001 -403, -403, -403, -403, -403, -403, -403, -403, -403, -403,
1002 11, 36, -403, -403, 27, -403, -403, -403
1003};
1004
1005/* YYPGOTO[NTERM-NUM]. */
1006static const short yypgoto[] =
1007{
1008 -403, -403, -403, 476, -403, 337, -403, 466, -403, -403,
1009 454, -403, -403, 426, -403, -403, -403, -403, 410, -403,
1010 369, -403, -403, 372, 357, -403, -53, -403, -403, 329,
1011 -403, 238, 211, -403, 105, -403, 111, 276, -403, -403,
1012 224, -403, -403, -403, 57, -402, -258, -83, -403, -57,
1013 -403, 221, -403, 243, -137, 300, 303, -403, 0, -403,
1014 -130, -250, -135, 106, -88, 1, -403, -3, -403, -403,
1015 -403, -211, -403, 213, -5, 107, -12, -403, 264, -403,
1016 -243, -403, -403, -403, 88, -403, -403, -403, -403, -403,
1017 -403, 102, 109, -256, -403, -403, -403, 258, -105, -125,
1018 -403, -403, -403, -403, 19, -403, 162, -9
1019};
1020
1021/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
1022 positive, shift that token. If negative, reduce the rule which
1023 number is the opposite. If zero, do what YYDEFACT says.
1024 If YYTABLE_NINF, parse error. */
1025#define YYTABLE_NINF -261
1026static const short yytable[] =
1027{
1028 17, 123, 281, 283, 181, 194, 17, 313, 181, 180,
1029 322, 324, 325, 135, 109, 438, 328, 329, 7, 6,
1030 338, 120, 150, 6, 18, 117, 217, 190, 191, 439,
1031 67, 438, 12, 74, 182, 188, 65, 81, 182, 446,
1032 438, 12, 446, 190, 191, 439, 1, 2, 12, 67,
1033 360, 218, 190, 191, 439, 65, 179, 9, 66, 12,
1034 13, 73, 264, 12, 21, 80, 371, 81, 12, 12,
1035 12, 380, 30, 156, 135, 1, 2, 66, 151, 12,
1036 170, 291, 69, 173, 157, 12, 13, 118, 342, 262,
1037 263, 390, 152, 342, 292, 80, 12, 170, 265, 31,
1038 173, 215, 136, 121, 74, 299, 300, 301, 302, 81,
1039 167, 168, 169, 12, 170, 171, 172, 173, 160, 181,
1040 137, 194, 266, 271, 180, 440, 181, 338, 264, 181,
1041 183, 189, 73, 412, 202, 417, 146, 80, 34, 288,
1042 406, 440, 447, 115, 445, 400, 159, 1, 2, 182,
1043 440, 188, 314, 174, 225, 227, 182, 32, 14, 182,
1044 335, 195, 201, 136, 265, 335, 335, -78, 121, 262,
1045 263, 179, 70, 121, 121, 161, 184, 33, 185, 162,
1046 22, 137, 224, 226, 19, 35, 253, 36, 121, 23,
1047 254, 264, 423, 184, 175, 339, 432, 39, 167, 168,
1048 169, 12, 170, 171, 172, 173, 1, 2, 323, 12,
1049 24, 165, 25, 285, 1, 2, 255, 12, 121, 217,
1050 256, 26, 1, 2, 12, 170, 38, 265, 173, 1,
1051 2, 68, 168, 297, 12, 170, 171, 172, 173, 1,
1052 2, 174, 280, 111, 218, 183, 228, 189, 315, 274,
1053 433, 319, 202, 275, 434, 202, 296, 386, 75, 196,
1054 229, 320, -260, 217, 321, 391, -260, 418, 121, 340,
1055 419, 348, 82, 348, 230, 231, 201, 355, 413, 352,
1056 201, 354, 175, 201, 112, 113, 282, 114, 218, 119,
1057 232, 127, 366, 367, 384, 368, 409, 421, 385, 197,
1058 410, 422, 339, 369, 415, 205, 206, 128, 168, 233,
1059 12, 170, 171, 172, 173, 234, 168, 129, 12, 170,
1060 171, 172, 173, 130, 235, 382, 131, 299, 300, 301,
1061 302, 236, 237, 138, 238, 294, 295, 132, 303, 143,
1062 393, 139, 393, 140, 84, 1, 2, 190, 191, 145,
1063 230, 190, 191, 403, 142, 85, 86, 148, 230, 85,
1064 86, 429, 430, 408, 149, 359, 163, 87, 40, 88,
1065 165, 89, 164, 370, 315, 209, 340, 378, 379, 222,
1066 348, 90, 257, 258, 260, 91, 277, 261, 278, 92,
1067 276, 234, 93, 43, 44, 45, 279, 408, 289, 234,
1068 284, 286, 201, 94, 47, 298, 290, 306, 95, 48,
1069 96, 49, 97, 403, 308, 310, 317, 437, 12, 50,
1070 326, 98, 99, 334, 330, 349, 351, 353, 51, 356,
1071 52, 357, 358, 362, 372, 53, 100, 54, 55, 56,
1072 377, 218, 363, 364, 365, 381, 387, 168, 101, 12,
1073 170, 171, 172, 173, 1, 2, 375, 388, 376, 383,
1074 168, 228, 12, 170, 171, 172, 173, 1, 2, 121,
1075 389, 394, 396, 426, 397, 229, 405, 411, 399, 404,
1076 8, 20, 37, 203, 83, 144, 116, 147, 229, 230,
1077 231, 223, 311, 350, 416, 166, 414, 444, 287, 333,
1078 341, 316, 230, 231, 420, 232, 272, 361, 309, 273,
1079 431, 424, 427, 395, 312, 425, 0, 0, 232, 0,
1080 12, 0, 0, 0, 233, 1, 2, 0, 0, 0,
1081 234, 0, 0, 0, 0, 0, 0, 233, 40, 235,
1082 0, 0, 0, 234, 0, 0, 0, 237, 0, 238,
1083 0, 0, 235, 41, 0, 0, 0, 42, 0, 0,
1084 237, 0, 238, 43, 44, 45, 0, 0, 0, 46,
1085 0, 0, 0, 0, 47, 0, 0, 0, 0, 48,
1086 0, 49, 0, 0, 0, 0, 0, 0, 0, 50,
1087 0, 0, 0, 0, 0, 0, 0, 0, 51, 0,
1088 52, 0, 85, 86, 0, 53, 0, 54, 55, 56,
1089 210, 0, 0, 0, 87, 40, 88, 0, 89, 211,
1090 0, 0, 0, 0, 0, 0, 0, 0, 90, 0,
1091 0, 0, 91, 0, 0, 0, 92, 0, 0, 93,
1092 43, 44, 45, 0, 0, 0, 0, 0, 212, 0,
1093 94, 47, 0, 0, 0, 95, 48, 96, 49, 97,
1094 0, 0, 0, 0, 0, 0, 50, 0, 98, 99,
1095 213, 214, 0, 0, 0, 51, 0, 52, 85, 86,
1096 0, 0, 53, 100, 54, 55, 56, 0, 0, 0,
1097 87, 40, 88, 0, 89, 0, 0, 0, 0, 0,
1098 0, 0, 0, 0, 90, 0, 0, 0, 91, 0,
1099 0, 0, 92, 0, 0, 93, 43, 44, 45, 0,
1100 0, 0, 0, 0, 0, 0, 94, 47, 0, 0,
1101 0, 95, 48, 96, 49, 97, 0, 0, 0, 0,
1102 0, 0, 50, 0, 98, 99, 0, 0, 0, 0,
1103 0, 51, 0, 52, 1, 2, 0, 0, 53, 100,
1104 54, 55, 56, 0, 0, 0, 87, 40, 88, 0,
1105 89, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1106 90, 0, 0, 0, 91, 0, 0, 0, 92, 0,
1107 0, 93, 43, 44, 45, 0, 0, 0, 0, 0,
1108 0, 0, 94, 47, 0, 0, 0, 95, 48, 96,
1109 49, 97, 0, 0, 0, 0, 0, 0, 50, 0,
1110 98, 99, 0, 0, 0, 0, 0, 51, 0, 52,
1111 0, 0, 0, 0, 53, 100, 54, 55, 56
1112};
1113
1114static const short yycheck[] =
1115{
1116 9, 84, 213, 214, 139, 142, 15, 257, 143, 139,
1117 266, 267, 268, 101, 67, 4, 272, 273, 0, 0,
1118 278, 32, 23, 4, 38, 50, 84, 16, 17, 18,
1119 39, 4, 9, 42, 139, 140, 39, 46, 143, 441,
1120 4, 9, 444, 16, 17, 18, 14, 15, 9, 58,
1121 293, 109, 16, 17, 18, 58, 139, 107, 39, 9,
1122 10, 42, 37, 9, 109, 46, 309, 76, 9, 9,
1123 9, 327, 10, 45, 162, 14, 15, 58, 79, 9,
1124 10, 105, 21, 13, 56, 9, 10, 112, 34, 15,
1125 16, 347, 93, 34, 118, 76, 9, 10, 73, 61,
1126 13, 154, 101, 114, 113, 101, 102, 103, 104, 118,
1127 6, 7, 8, 9, 10, 11, 12, 13, 127, 254,
1128 101, 258, 205, 206, 254, 114, 261, 385, 37, 264,
1129 139, 140, 113, 383, 143, 391, 117, 118, 57, 222,
1130 117, 114, 115, 111, 108, 106, 127, 14, 15, 254,
1131 114, 256, 257, 49, 163, 164, 261, 88, 108, 264,
1132 106, 142, 143, 162, 73, 106, 106, 108, 114, 15,
1133 16, 254, 111, 114, 114, 108, 106, 88, 108, 112,
1134 15, 162, 163, 164, 108, 88, 108, 3, 114, 24,
1135 112, 37, 403, 106, 90, 278, 19, 25, 6, 7,
1136 8, 9, 10, 11, 12, 13, 14, 15, 117, 9,
1137 45, 107, 47, 218, 14, 15, 108, 9, 114, 84,
1138 112, 56, 14, 15, 9, 10, 110, 73, 13, 14,
1139 15, 15, 7, 238, 9, 10, 11, 12, 13, 14,
1140 15, 49, 107, 111, 109, 254, 21, 256, 257, 108,
1141 73, 260, 261, 112, 77, 264, 237, 340, 50, 67,
1142 35, 261, 108, 84, 264, 348, 112, 392, 114, 278,
1143 395, 280, 43, 282, 49, 50, 257, 289, 383, 284,
1144 261, 286, 90, 264, 111, 112, 107, 107, 109, 107,
1145 65, 117, 304, 305, 108, 307, 108, 108, 112, 107,
1146 112, 112, 385, 308, 387, 16, 17, 85, 7, 84,
1147 9, 10, 11, 12, 13, 90, 7, 85, 9, 10,
1148 11, 12, 13, 75, 99, 334, 55, 101, 102, 103,
1149 104, 106, 107, 3, 109, 33, 34, 85, 112, 3,
1150 349, 107, 351, 107, 3, 14, 15, 16, 17, 108,
1151 49, 16, 17, 362, 117, 14, 15, 108, 49, 14,
1152 15, 418, 419, 372, 107, 64, 113, 26, 27, 28,
1153 107, 30, 113, 64, 383, 10, 385, 16, 17, 3,
1154 389, 40, 109, 117, 117, 44, 39, 113, 107, 48,
1155 115, 90, 51, 52, 53, 54, 72, 406, 100, 90,
1156 109, 109, 383, 62, 63, 108, 29, 100, 67, 68,
1157 69, 70, 71, 422, 109, 107, 5, 426, 9, 78,
1158 92, 80, 81, 29, 99, 72, 72, 110, 87, 107,
1159 89, 118, 105, 107, 119, 94, 95, 96, 97, 98,
1160 5, 109, 108, 110, 106, 86, 72, 7, 107, 9,
1161 10, 11, 12, 13, 14, 15, 110, 108, 110, 116,
1162 7, 21, 9, 10, 11, 12, 13, 14, 15, 114,
1163 112, 108, 110, 117, 110, 35, 110, 107, 118, 112,
1164 4, 15, 28, 146, 58, 113, 76, 118, 35, 49,
1165 50, 162, 254, 282, 389, 138, 385, 440, 222, 275,
1166 279, 258, 49, 50, 398, 65, 206, 294, 244, 206,
1167 422, 404, 410, 351, 256, 406, -1, -1, 65, -1,
1168 9, -1, -1, -1, 84, 14, 15, -1, -1, -1,
1169 90, -1, -1, -1, -1, -1, -1, 84, 27, 99,
1170 -1, -1, -1, 90, -1, -1, -1, 107, -1, 109,
1171 -1, -1, 99, 42, -1, -1, -1, 46, -1, -1,
1172 107, -1, 109, 52, 53, 54, -1, -1, -1, 58,
1173 -1, -1, -1, -1, 63, -1, -1, -1, -1, 68,
1174 -1, 70, -1, -1, -1, -1, -1, -1, -1, 78,
1175 -1, -1, -1, -1, -1, -1, -1, -1, 87, -1,
1176 89, -1, 14, 15, -1, 94, -1, 96, 97, 98,
1177 22, -1, -1, -1, 26, 27, 28, -1, 30, 31,
1178 -1, -1, -1, -1, -1, -1, -1, -1, 40, -1,
1179 -1, -1, 44, -1, -1, -1, 48, -1, -1, 51,
1180 52, 53, 54, -1, -1, -1, -1, -1, 60, -1,
1181 62, 63, -1, -1, -1, 67, 68, 69, 70, 71,
1182 -1, -1, -1, -1, -1, -1, 78, -1, 80, 81,
1183 82, 83, -1, -1, -1, 87, -1, 89, 14, 15,
1184 -1, -1, 94, 95, 96, 97, 98, -1, -1, -1,
1185 26, 27, 28, -1, 30, -1, -1, -1, -1, -1,
1186 -1, -1, -1, -1, 40, -1, -1, -1, 44, -1,
1187 -1, -1, 48, -1, -1, 51, 52, 53, 54, -1,
1188 -1, -1, -1, -1, -1, -1, 62, 63, -1, -1,
1189 -1, 67, 68, 69, 70, 71, -1, -1, -1, -1,
1190 -1, -1, 78, -1, 80, 81, -1, -1, -1, -1,
1191 -1, 87, -1, 89, 14, 15, -1, -1, 94, 95,
1192 96, 97, 98, -1, -1, -1, 26, 27, 28, -1,
1193 30, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1194 40, -1, -1, -1, 44, -1, -1, -1, 48, -1,
1195 -1, 51, 52, 53, 54, -1, -1, -1, -1, -1,
1196 -1, -1, 62, 63, -1, -1, -1, 67, 68, 69,
1197 70, 71, -1, -1, -1, -1, -1, -1, 78, -1,
1198 80, 81, -1, -1, -1, -1, -1, 87, -1, 89,
1199 -1, -1, -1, -1, 94, 95, 96, 97, 98
1200};
1201
1202/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1203 symbol of state STATE-NUM. */
1204static const unsigned char yystos[] =
1205{
1206 0, 14, 15, 121, 122, 123, 224, 0, 123, 107,
1207 124, 125, 9, 10, 108, 126, 127, 227, 38, 108,
1208 127, 109, 15, 24, 45, 47, 56, 128, 129, 130,
1209 10, 61, 88, 88, 57, 88, 3, 130, 110, 25,
1210 27, 42, 46, 52, 53, 54, 58, 63, 68, 70,
1211 78, 87, 89, 94, 96, 97, 98, 131, 132, 133,
1212 135, 141, 145, 147, 177, 187, 224, 227, 15, 21,
1213 111, 142, 143, 224, 227, 50, 136, 138, 139, 140,
1214 224, 227, 43, 133, 3, 14, 15, 26, 28, 30,
1215 40, 44, 48, 51, 62, 67, 69, 71, 80, 81,
1216 95, 107, 146, 171, 184, 185, 186, 187, 225, 146,
1217 134, 111, 111, 112, 107, 111, 138, 50, 112, 107,
1218 32, 114, 157, 167, 219, 220, 221, 117, 85, 85,
1219 75, 55, 85, 148, 149, 184, 185, 224, 3, 107,
1220 107, 215, 117, 3, 143, 108, 224, 140, 108, 107,
1221 23, 79, 93, 222, 168, 169, 45, 56, 223, 224,
1222 227, 108, 112, 113, 113, 107, 144, 6, 7, 8,
1223 10, 11, 12, 13, 49, 90, 144, 150, 151, 167,
1224 180, 182, 218, 227, 106, 108, 216, 217, 218, 227,
1225 16, 17, 172, 173, 174, 224, 67, 107, 178, 180,
1226 181, 224, 227, 125, 137, 16, 17, 159, 160, 10,
1227 22, 31, 60, 82, 83, 146, 170, 84, 109, 191,
1228 192, 193, 3, 149, 224, 227, 224, 227, 21, 35,
1229 49, 50, 65, 84, 90, 99, 106, 107, 109, 182,
1230 194, 195, 196, 199, 200, 201, 202, 207, 208, 209,
1231 218, 224, 227, 108, 112, 108, 112, 109, 117, 179,
1232 117, 113, 15, 16, 37, 73, 167, 175, 176, 213,
1233 214, 167, 175, 176, 108, 112, 115, 39, 107, 72,
1234 107, 191, 107, 191, 109, 194, 109, 157, 167, 100,
1235 29, 105, 118, 198, 33, 34, 224, 194, 108, 101,
1236 102, 103, 104, 112, 188, 189, 100, 190, 109, 198,
1237 107, 151, 217, 181, 218, 227, 173, 5, 183, 227,
1238 178, 178, 213, 117, 213, 213, 92, 158, 213, 213,
1239 99, 161, 162, 160, 29, 106, 155, 156, 166, 167,
1240 227, 171, 34, 152, 153, 154, 166, 167, 227, 72,
1241 152, 72, 194, 110, 194, 196, 107, 118, 105, 64,
1242 200, 193, 107, 108, 110, 106, 196, 196, 196, 194,
1243 64, 200, 119, 210, 211, 110, 110, 5, 16, 17,
1244 213, 86, 227, 116, 108, 112, 167, 72, 108, 112,
1245 213, 167, 226, 227, 108, 226, 110, 110, 197, 118,
1246 106, 203, 204, 227, 112, 110, 117, 212, 227, 108,
1247 112, 107, 181, 218, 156, 167, 154, 213, 219, 219,
1248 183, 108, 112, 191, 195, 212, 117, 211, 163, 169,
1249 169, 204, 19, 73, 77, 205, 206, 227, 4, 18,
1250 114, 164, 165, 174, 164, 108, 165, 115
1251};
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:
vlm59b620a2006-03-21 07:46:48 +00001801#line 324 "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:
vlm59b620a2006-03-21 07:46:48 +00001808#line 330 "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:
vlm59b620a2006-03-21 07:46:48 +00001817#line 335 "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:
vlm59b620a2006-03-21 07:46:48 +00001825#line 356 "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:
vlm59b620a2006-03-21 07:46:48 +00001843#line 377 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001844 { yyval.a_oid = 0; }
1845 break;
1846
1847 case 7:
vlm59b620a2006-03-21 07:46:48 +00001848#line 378 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001849 { yyval.a_oid = yyvsp[0].a_oid; }
1850 break;
1851
1852 case 8:
vlm59b620a2006-03-21 07:46:48 +00001853#line 382 "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:
vlm59b620a2006-03-21 07:46:48 +00001860#line 385 "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:
vlm59b620a2006-03-21 07:46:48 +00001867#line 391 "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:
vlm59b620a2006-03-21 07:46:48 +00001877#line 397 "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:
vlm59b620a2006-03-21 07:46:48 +00001887#line 406 "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:
vlm59b620a2006-03-21 07:46:48 +00001895#line 410 "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:
vlm59b620a2006-03-21 07:46:48 +00001903#line 414 "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:
vlm59b620a2006-03-21 07:46:48 +00001911#line 424 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001912 { yyval.a_module_flags = MSF_NOFLAGS; }
1913 break;
1914
1915 case 16:
vlm59b620a2006-03-21 07:46:48 +00001916#line 425 "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:
vlm59b620a2006-03-21 07:46:48 +00001923#line 434 "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:
vlm59b620a2006-03-21 07:46:48 +00001930#line 437 "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:
vlm59b620a2006-03-21 07:46:48 +00001937#line 446 "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:
vlm59b620a2006-03-21 07:46:48 +00001944#line 449 "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:
vlm59b620a2006-03-21 07:46:48 +00001951#line 452 "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:
vlm59b620a2006-03-21 07:46:48 +00001958#line 455 "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:
vlm59b620a2006-03-21 07:46:48 +00001965#line 459 "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:
vlm59b620a2006-03-21 07:46:48 +00001984#line 480 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001985 { yyval.a_module = 0; }
1986 break;
1987
1988 case 25:
vlm59b620a2006-03-21 07:46:48 +00001989#line 481 "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:
vlm59b620a2006-03-21 07:46:48 +00001996#line 490 "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:
vlm59b620a2006-03-21 07:46:48 +00002003#line 493 "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:
vlm59b620a2006-03-21 07:46:48 +00002034#line 526 "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:
vlm59b620a2006-03-21 07:46:48 +00002041#line 529 "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:
vlm59b620a2006-03-21 07:46:48 +00002054#line 538 "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:
vlm59b620a2006-03-21 07:46:48 +00002065#line 545 "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:
vlm59b620a2006-03-21 07:46:48 +00002076#line 558 "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:
vlm59b620a2006-03-21 07:46:48 +00002087#line 566 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002088 { asn1p_lexer_hack_push_encoding_control(); }
2089 break;
2090
2091 case 34:
vlm59b620a2006-03-21 07:46:48 +00002092#line 567 "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:
vlm59b620a2006-03-21 07:46:48 +00002104#line 579 "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:
vlm59b620a2006-03-21 07:46:48 +00002113#line 592 "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:
vlm59b620a2006-03-21 07:46:48 +00002124#line 602 "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:
vlm59b620a2006-03-21 07:46:48 +00002131#line 608 "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:
vlm59b620a2006-03-21 07:46:48 +00002140#line 613 "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:
vlm59b620a2006-03-21 07:46:48 +00002148#line 620 "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:
vlm59b620a2006-03-21 07:46:48 +00002153#line 621 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002154 { yyval.a_aid.oid = yyvsp[0].a_oid; }
2155 break;
2156
2157 case 42:
vlm59b620a2006-03-21 07:46:48 +00002158#line 625 "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:
vlm59b620a2006-03-21 07:46:48 +00002170#line 636 "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:
vlm59b620a2006-03-21 07:46:48 +00002179#line 641 "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:
vlm59b620a2006-03-21 07:46:48 +00002187#line 648 "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:
vlm59b620a2006-03-21 07:46:48 +00002197#line 654 "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:
vlm59b620a2006-03-21 07:46:48 +00002207#line 660 "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:
vlm59b620a2006-03-21 07:46:48 +00002217#line 669 "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:
vlm59b620a2006-03-21 07:46:48 +00002224#line 672 "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:
vlm59b620a2006-03-21 07:46:48 +00002231#line 675 "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:
vlm59b620a2006-03-21 07:46:48 +00002240#line 683 "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:
vlm59b620a2006-03-21 07:46:48 +00002249#line 688 "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:
vlm59b620a2006-03-21 07:46:48 +00002257#line 695 "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:
vlm59b620a2006-03-21 07:46:48 +00002267#line 701 "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:
vlm59b620a2006-03-21 07:46:48 +00002277#line 707 "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:
vlm59b620a2006-03-21 07:46:48 +00002287#line 716 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002288 { yyval.a_constr = yyvsp[-1].a_constr; }
2289 break;
2290
2291 case 57:
vlm59b620a2006-03-21 07:46:48 +00002292#line 719 "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:
vlm59b620a2006-03-21 07:46:48 +00002303#line 729 "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:
vlm59b620a2006-03-21 07:46:48 +00002310#line 742 "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:
vlm59b620a2006-03-21 07:46:48 +00002321#line 752 "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:
vlm59b620a2006-03-21 07:46:48 +00002333#line 772 "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:
vlm59b620a2006-03-21 07:46:48 +00002343#line 778 "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:
vlm59b620a2006-03-21 07:46:48 +00002353#line 794 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002362#line 800 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002371#line 808 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002384#line 817 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002396#line 828 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002404#line 832 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002415#line 839 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002426#line 846 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002438#line 854 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002450#line 865 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002459#line 870 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002467#line 877 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002474#line 880 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002486#line 888 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002501#line 899 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002511#line 922 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002512 { yyval.a_expr = asn1p_expr_new(yylineno); }
2513 break;
2514
2515 case 79:
vlmdfbff8c2006-03-21 09:41:28 +00002516#line 923 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002517 { yyval.a_expr = yyvsp[0].a_expr; }
2518 break;
2519
2520 case 80:
vlmdfbff8c2006-03-21 09:41:28 +00002521#line 926 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002530#line 931 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002538#line 938 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002549#line 945 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002559#line 951 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002570#line 958 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002577#line 964 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002586#line 969 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002594#line 976 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002603#line 981 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002610#line 984 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002618#line 991 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002629#line 1001 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002630 { yyval.a_int = 0; }
2631 break;
2632
2633 case 93:
vlmdfbff8c2006-03-21 09:41:28 +00002634#line 1002 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002635 { yyval.a_int = 1; }
2636 break;
2637
2638 case 94:
vlmdfbff8c2006-03-21 09:41:28 +00002639#line 1006 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002650#line 1013 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002658#line 1023 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002670#line 1033 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002683#line 1044 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002695#line 1054 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002708#line 1065 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002720#line 1075 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002733#line 1086 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002746#line 1098 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002747 { yyval.a_wsynt = 0; }
2748 break;
2749
2750 case 104:
vlmdfbff8c2006-03-21 09:41:28 +00002751#line 1099 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002758#line 1106 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002759 { asn1p_lexer_hack_enable_with_syntax(); }
2760 break;
2761
2762 case 106:
vlmdfbff8c2006-03-21 09:41:28 +00002763#line 1108 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002770#line 1114 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002778#line 1118 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002786#line 1125 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002794#line 1129 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002801#line 1132 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002809#line 1136 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002816#line 1142 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002828#line 1150 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002841#line 1159 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002854#line 1171 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002877#line 1193 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002885#line 1200 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002905#line 1219 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002912#line 1222 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002922#line 1228 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002932#line 1234 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002942#line 1240 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002956#line 1250 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002970#line 1260 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002980#line 1266 "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:
vlmdfbff8c2006-03-21 09:41:28 +00002995#line 1277 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003006#line 1292 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003018#line 1300 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003032#line 1310 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003046#line 1320 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003060#line 1330 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003072#line 1338 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003095#line 1360 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003107#line 1368 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003118#line 1381 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003126#line 1386 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003134#line 1395 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003142#line 1399 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003150#line 1403 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003158#line 1410 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003166#line 1430 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003177#line 1442 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003188#line 1449 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003189 { asn1p_lexer_hack_push_opaque_state(); }
3190 break;
3191
3192 case 148:
vlmdfbff8c2006-03-21 09:41:28 +00003193#line 1449 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003202#line 1454 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003211#line 1462 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003220#line 1467 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003229#line 1472 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003237#line 1476 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003245#line 1480 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003252#line 1483 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003259#line 1489 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003274#line 1500 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003292#line 1518 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003300#line 1522 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003309#line 1527 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003318#line 1561 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003331#line 1570 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003347#line 1585 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003348 { yyval.a_type = ASN_BASIC_BOOLEAN; }
3349 break;
3350
3351 case 164:
vlmdfbff8c2006-03-21 09:41:28 +00003352#line 1586 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003353 { yyval.a_type = ASN_BASIC_NULL; }
3354 break;
3355
3356 case 165:
vlmdfbff8c2006-03-21 09:41:28 +00003357#line 1587 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003358 { yyval.a_type = ASN_BASIC_REAL; }
3359 break;
3360
3361 case 166:
vlmdfbff8c2006-03-21 09:41:28 +00003362#line 1588 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003363 { yyval.a_type = yyvsp[0].a_type; }
3364 break;
3365
3366 case 167:
vlmdfbff8c2006-03-21 09:41:28 +00003367#line 1589 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003368 { yyval.a_type = ASN_BASIC_OCTET_STRING; }
3369 break;
3370
3371 case 168:
vlmdfbff8c2006-03-21 09:41:28 +00003372#line 1590 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003373 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
3374 break;
3375
3376 case 169:
vlmdfbff8c2006-03-21 09:41:28 +00003377#line 1591 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003378 { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
3379 break;
3380
3381 case 170:
vlmdfbff8c2006-03-21 09:41:28 +00003382#line 1592 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003383 { yyval.a_type = ASN_BASIC_EXTERNAL; }
3384 break;
3385
3386 case 171:
vlmdfbff8c2006-03-21 09:41:28 +00003387#line 1593 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003388 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
3389 break;
3390
3391 case 172:
vlmdfbff8c2006-03-21 09:41:28 +00003392#line 1594 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003393 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
3394 break;
3395
3396 case 173:
vlmdfbff8c2006-03-21 09:41:28 +00003397#line 1595 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003398 { yyval.a_type = ASN_BASIC_UTCTime; }
3399 break;
3400
3401 case 174:
vlmdfbff8c2006-03-21 09:41:28 +00003402#line 1596 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003403 { yyval.a_type = ASN_BASIC_GeneralizedTime; }
3404 break;
3405
3406 case 175:
vlmdfbff8c2006-03-21 09:41:28 +00003407#line 1597 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003408 { yyval.a_type = yyvsp[0].a_type; }
3409 break;
3410
3411 case 176:
vlmdfbff8c2006-03-21 09:41:28 +00003412#line 1604 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003413 { yyval.a_type = ASN_BASIC_INTEGER; }
3414 break;
3415
3416 case 177:
vlmdfbff8c2006-03-21 09:41:28 +00003417#line 1605 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003418 { yyval.a_type = ASN_BASIC_ENUMERATED; }
3419 break;
3420
3421 case 178:
vlmdfbff8c2006-03-21 09:41:28 +00003422#line 1606 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003423 { yyval.a_type = ASN_BASIC_BIT_STRING; }
3424 break;
3425
3426 case 179:
vlmdfbff8c2006-03-21 09:41:28 +00003427#line 1610 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003437#line 1616 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003451#line 1629 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003452 { yyval.a_type = ASN_STRING_BMPString; }
3453 break;
3454
3455 case 182:
vlmdfbff8c2006-03-21 09:41:28 +00003456#line 1630 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003464#line 1634 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003472#line 1638 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003473 { yyval.a_type = ASN_STRING_IA5String; }
3474 break;
3475
3476 case 185:
vlmdfbff8c2006-03-21 09:41:28 +00003477#line 1639 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003478 { yyval.a_type = ASN_STRING_ISO646String; }
3479 break;
3480
3481 case 186:
vlmdfbff8c2006-03-21 09:41:28 +00003482#line 1640 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003483 { yyval.a_type = ASN_STRING_NumericString; }
3484 break;
3485
3486 case 187:
vlmdfbff8c2006-03-21 09:41:28 +00003487#line 1641 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003488 { yyval.a_type = ASN_STRING_PrintableString; }
3489 break;
3490
3491 case 188:
vlmdfbff8c2006-03-21 09:41:28 +00003492#line 1642 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003500#line 1646 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003501 { yyval.a_type = ASN_STRING_TeletexString; }
3502 break;
3503
3504 case 190:
vlmdfbff8c2006-03-21 09:41:28 +00003505#line 1647 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003506 { yyval.a_type = ASN_STRING_UniversalString; }
3507 break;
3508
3509 case 191:
vlmdfbff8c2006-03-21 09:41:28 +00003510#line 1648 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003511 { yyval.a_type = ASN_STRING_UTF8String; }
3512 break;
3513
3514 case 192:
vlmdfbff8c2006-03-21 09:41:28 +00003515#line 1649 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003523#line 1653 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003524 { yyval.a_type = ASN_STRING_VisibleString; }
3525 break;
3526
3527 case 194:
vlmdfbff8c2006-03-21 09:41:28 +00003528#line 1654 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003529 { yyval.a_type = ASN_STRING_ObjectDescriptor; }
3530 break;
3531
3532 case 200:
vlmdfbff8c2006-03-21 09:41:28 +00003533#line 1666 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003534 { yyval.a_constr = 0; }
3535 break;
3536
3537 case 201:
vlmdfbff8c2006-03-21 09:41:28 +00003538#line 1667 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003545#line 1673 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003552#line 1676 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003563#line 1686 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003570#line 1689 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003577#line 1695 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003585#line 1699 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003592#line 1702 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003602#line 1708 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003614#line 1719 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003621#line 1722 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003628#line 1725 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003635#line 1728 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003642#line 1731 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003649#line 1737 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003661#line 1745 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003673#line 1753 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003683#line 1759 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003693#line 1765 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003704#line 1772 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003716#line 1780 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003728#line 1788 "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 1797 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003742 {
vlm17e65d02006-03-21 04:48:15 +00003743 yyval.a_constr = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003744 }
3745 break;
3746
3747 case 224:
vlmdfbff8c2006-03-21 09:41:28 +00003748#line 1800 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003749 {
vlmdfbff8c2006-03-21 09:41:28 +00003750 yyval.a_constr = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003751 }
3752 break;
3753
3754 case 225:
vlmdfbff8c2006-03-21 09:41:28 +00003755#line 1804 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003756 { asn1p_lexer_hack_push_opaque_state(); }
3757 break;
3758
3759 case 226:
vlmdfbff8c2006-03-21 09:41:28 +00003760#line 1804 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003772#line 1815 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003773 { yyval.a_ctype = ACT_EL_RANGE; }
3774 break;
3775
3776 case 228:
vlmdfbff8c2006-03-21 09:41:28 +00003777#line 1816 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003778 { yyval.a_ctype = ACT_EL_RLRANGE; }
3779 break;
3780
3781 case 229:
vlmdfbff8c2006-03-21 09:41:28 +00003782#line 1817 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003783 { yyval.a_ctype = ACT_EL_LLRANGE; }
3784 break;
3785
3786 case 230:
vlmdfbff8c2006-03-21 09:41:28 +00003787#line 1818 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003788 { yyval.a_ctype = ACT_EL_ULRANGE; }
3789 break;
3790
3791 case 231:
vlmdfbff8c2006-03-21 09:41:28 +00003792#line 1822 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003799#line 1825 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003806#line 1831 "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:
vlmdfbff8c2006-03-21 09:41:28 +00003815#line 1836 "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
3823 case 235:
vlmdfbff8c2006-03-21 09:41:28 +00003824#line 1841 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003825 {
vlm0c6d3812006-03-21 03:40:38 +00003826 yyval.a_value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00003827 }
3828 break;
3829
3830 case 236:
vlmdfbff8c2006-03-21 09:41:28 +00003831#line 1844 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003832 {
vlm17e65d02006-03-21 04:48:15 +00003833 yyval.a_value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00003834 }
3835 break;
3836
3837 case 237:
vlmdfbff8c2006-03-21 09:41:28 +00003838#line 1847 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003839 {
vlmfa67ddc2004-06-03 03:38:44 +00003840 asn1p_ref_t *ref;
3841 int ret;
3842 ref = asn1p_ref_new(yylineno);
3843 checkmem(ref);
vlm0c6d3812006-03-21 03:40:38 +00003844 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
vlmfa67ddc2004-06-03 03:38:44 +00003845 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003846 yyval.a_value = asn1p_value_fromref(ref, 0);
3847 checkmem(yyval.a_value);
3848 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003849 }
3850 break;
3851
3852 case 238:
vlmdfbff8c2006-03-21 09:41:28 +00003853#line 1861 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003854 {
vlm4053ca52005-02-18 16:34:21 +00003855 asn1p_ref_t *ref;
3856 int ret;
3857 ref = asn1p_ref_new(yylineno);
3858 checkmem(ref);
vlm0c6d3812006-03-21 03:40:38 +00003859 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
vlm4053ca52005-02-18 16:34:21 +00003860 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003861 yyval.a_value = asn1p_value_fromref(ref, 0);
3862 checkmem(yyval.a_value);
3863 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003864 }
3865 break;
3866
3867 case 239:
vlmdfbff8c2006-03-21 09:41:28 +00003868#line 1875 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003869 {
vlm0c6d3812006-03-21 03:40:38 +00003870 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
vlm1aeaddd2006-07-13 08:24:20 +00003871 }
3872 break;
3873
3874 case 240:
vlmdfbff8c2006-03-21 09:41:28 +00003875#line 1878 "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[-1].a_constr, 0);
vlm1aeaddd2006-07-13 08:24:20 +00003878 }
3879 break;
3880
3881 case 241:
vlmdfbff8c2006-03-21 09:41:28 +00003882#line 1884 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003883 {
vlm0c6d3812006-03-21 03:40:38 +00003884 yyval.a_constr = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003885 }
3886 break;
3887
3888 case 242:
vlmdfbff8c2006-03-21 09:41:28 +00003889#line 1887 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003890 {
vlm0c6d3812006-03-21 03:40:38 +00003891 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003892 }
3893 break;
3894
3895 case 243:
vlmdfbff8c2006-03-21 09:41:28 +00003896#line 1893 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003897 {
vlm0c6d3812006-03-21 03:40:38 +00003898 yyval.a_constr = asn1p_constraint_new(yylineno);
3899 checkmem(yyval.a_constr);
3900 yyval.a_constr->type = ACT_EL_EXT;
vlm1aeaddd2006-07-13 08:24:20 +00003901 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 1);
3902 }
3903 break;
3904
3905 case 244:
vlmdfbff8c2006-03-21 09:41:28 +00003906#line 1899 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003907 {
vlm0c6d3812006-03-21 03:40:38 +00003908 yyval.a_constr = asn1p_constraint_new(yylineno);
3909 checkmem(yyval.a_constr);
3910 yyval.a_constr->type = ACT_EL_VALUE;
3911 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3912 yyval.a_constr->presence = yyvsp[0].a_pres;
3913 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003914 }
3915 break;
3916
3917 case 245:
vlmdfbff8c2006-03-21 09:41:28 +00003918#line 1913 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003919 { yyval.a_pres = ACPRES_DEFAULT; }
3920 break;
3921
3922 case 246:
vlmdfbff8c2006-03-21 09:41:28 +00003923#line 1914 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003924 { yyval.a_pres = yyvsp[0].a_pres; }
3925 break;
3926
3927 case 247:
vlmdfbff8c2006-03-21 09:41:28 +00003928#line 1918 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003929 {
vlm0c6d3812006-03-21 03:40:38 +00003930 yyval.a_pres = ACPRES_PRESENT;
vlm1aeaddd2006-07-13 08:24:20 +00003931 }
3932 break;
3933
3934 case 248:
vlmdfbff8c2006-03-21 09:41:28 +00003935#line 1921 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003936 {
vlm0c6d3812006-03-21 03:40:38 +00003937 yyval.a_pres = ACPRES_ABSENT;
vlm1aeaddd2006-07-13 08:24:20 +00003938 }
3939 break;
3940
3941 case 249:
vlmdfbff8c2006-03-21 09:41:28 +00003942#line 1924 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003943 {
vlm0c6d3812006-03-21 03:40:38 +00003944 yyval.a_pres = ACPRES_OPTIONAL;
vlm1aeaddd2006-07-13 08:24:20 +00003945 }
3946 break;
3947
3948 case 250:
vlmdfbff8c2006-03-21 09:41:28 +00003949#line 1930 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003950 {
vlm0c6d3812006-03-21 03:40:38 +00003951 yyval.a_constr = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003952 }
3953 break;
3954
3955 case 251:
vlmdfbff8c2006-03-21 09:41:28 +00003956#line 1933 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003957 {
vlm17e65d02006-03-21 04:48:15 +00003958 yyval.a_constr = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003959 }
3960 break;
3961
3962 case 252:
vlmdfbff8c2006-03-21 09:41:28 +00003963#line 1942 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003964 {
vlmfa67ddc2004-06-03 03:38:44 +00003965 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
3966 asn1p_constraint_t *ct;
3967 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003968 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
vlmfa67ddc2004-06-03 03:38:44 +00003969 checkmem(ret == 0);
3970 ct = asn1p_constraint_new(yylineno);
vlm0c6d3812006-03-21 03:40:38 +00003971 checkmem(yyval.a_constr);
vlmfa67ddc2004-06-03 03:38:44 +00003972 ct->type = ACT_EL_VALUE;
3973 ct->value = asn1p_value_fromref(ref, 0);
vlm0c6d3812006-03-21 03:40:38 +00003974 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
vlm1aeaddd2006-07-13 08:24:20 +00003975 }
3976 break;
3977
3978 case 253:
vlmdfbff8c2006-03-21 09:41:28 +00003979#line 1957 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003980 {
vlm0c6d3812006-03-21 03:40:38 +00003981 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003982 }
3983 break;
3984
3985 case 254:
vlmdfbff8c2006-03-21 09:41:28 +00003986#line 1963 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003987 {
vlm0c6d3812006-03-21 03:40:38 +00003988 yyval.a_constr = asn1p_constraint_new(yylineno);
3989 checkmem(yyval.a_constr);
3990 yyval.a_constr->type = ACT_EL_VALUE;
3991 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
vlm1aeaddd2006-07-13 08:24:20 +00003992 }
3993 break;
3994
3995 case 255:
vlmdfbff8c2006-03-21 09:41:28 +00003996#line 1969 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003997 {
vlmfa67ddc2004-06-03 03:38:44 +00003998 asn1p_constraint_t *ct;
3999 ct = asn1p_constraint_new(yylineno);
4000 checkmem(ct);
4001 ct->type = ACT_EL_VALUE;
vlm0c6d3812006-03-21 03:40:38 +00004002 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
4003 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm1aeaddd2006-07-13 08:24:20 +00004004 }
4005 break;
4006
4007 case 256:
vlmdfbff8c2006-03-21 09:41:28 +00004008#line 1983 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004009 {
vlm0c6d3812006-03-21 03:40:38 +00004010 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
vlmfa67ddc2004-06-03 03:38:44 +00004011 int ret;
4012 *p = '@';
vlm0c6d3812006-03-21 03:40:38 +00004013 strcpy(p + 1, yyvsp[0].tv_str);
4014 yyval.a_ref = asn1p_ref_new(yylineno);
4015 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
vlmfa67ddc2004-06-03 03:38:44 +00004016 checkmem(ret == 0);
4017 free(p);
vlm0c6d3812006-03-21 03:40:38 +00004018 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00004019 }
4020 break;
4021
4022 case 257:
vlmdfbff8c2006-03-21 09:41:28 +00004023#line 1994 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004024 {
vlm0c6d3812006-03-21 03:40:38 +00004025 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
vlmfa67ddc2004-06-03 03:38:44 +00004026 int ret;
4027 p[0] = '@';
4028 p[1] = '.';
vlm0c6d3812006-03-21 03:40:38 +00004029 strcpy(p + 2, yyvsp[0].tv_str);
4030 yyval.a_ref = asn1p_ref_new(yylineno);
4031 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
vlmfa67ddc2004-06-03 03:38:44 +00004032 checkmem(ret == 0);
4033 free(p);
vlm0c6d3812006-03-21 03:40:38 +00004034 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00004035 }
4036 break;
4037
4038 case 258:
vlmdfbff8c2006-03-21 09:41:28 +00004039#line 2010 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004040 {
vlm0c6d3812006-03-21 03:40:38 +00004041 yyval.tv_str = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00004042 }
4043 break;
4044
4045 case 259:
vlmdfbff8c2006-03-21 09:41:28 +00004046#line 2013 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004047 {
vlm0c6d3812006-03-21 03:40:38 +00004048 int l1 = strlen(yyvsp[-2].tv_str);
4049 int l3 = strlen(yyvsp[0].tv_str);
4050 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
4051 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
4052 yyval.tv_str[l1] = '.';
4053 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
4054 yyval.tv_str[l1 + 1 + l3] = '\0';
vlm1aeaddd2006-07-13 08:24:20 +00004055 }
4056 break;
4057
4058 case 260:
vlmdfbff8c2006-03-21 09:41:28 +00004059#line 2031 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004060 {
vlm0c6d3812006-03-21 03:40:38 +00004061 yyval.a_marker.flags = EM_NOMARK;
4062 yyval.a_marker.default_value = 0;
vlm1aeaddd2006-07-13 08:24:20 +00004063 }
4064 break;
4065
4066 case 261:
vlmdfbff8c2006-03-21 09:41:28 +00004067#line 2035 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004068 { yyval.a_marker = yyvsp[0].a_marker; }
4069 break;
4070
4071 case 262:
vlmdfbff8c2006-03-21 09:41:28 +00004072#line 2039 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004073 {
vlm0c6d3812006-03-21 03:40:38 +00004074 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
4075 yyval.a_marker.default_value = 0;
vlm1aeaddd2006-07-13 08:24:20 +00004076 }
4077 break;
4078
4079 case 263:
vlmdfbff8c2006-03-21 09:41:28 +00004080#line 2043 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004081 {
vlm0c6d3812006-03-21 03:40:38 +00004082 yyval.a_marker.flags = EM_DEFAULT;
4083 yyval.a_marker.default_value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00004084 }
4085 break;
4086
4087 case 264:
vlmdfbff8c2006-03-21 09:41:28 +00004088#line 2066 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004089 {
vlm0c6d3812006-03-21 03:40:38 +00004090 yyval.a_expr = asn1p_expr_new(yylineno);
4091 checkmem(yyval.a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00004092 }
4093 break;
4094
4095 case 265:
vlmdfbff8c2006-03-21 09:41:28 +00004096#line 2070 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004097 {
vlm0c6d3812006-03-21 03:40:38 +00004098 yyval.a_expr = yyvsp[-1].a_expr;
vlm1aeaddd2006-07-13 08:24:20 +00004099 }
4100 break;
4101
4102 case 266:
vlmdfbff8c2006-03-21 09:41:28 +00004103#line 2076 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004104 {
vlm0c6d3812006-03-21 03:40:38 +00004105 yyval.a_expr = asn1p_expr_new(yylineno);
4106 checkmem(yyval.a_expr);
4107 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00004108 }
4109 break;
4110
4111 case 267:
vlmdfbff8c2006-03-21 09:41:28 +00004112#line 2081 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004113 {
vlm0c6d3812006-03-21 03:40:38 +00004114 yyval.a_expr = yyvsp[-2].a_expr;
4115 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00004116 }
4117 break;
4118
4119 case 268:
vlmdfbff8c2006-03-21 09:41:28 +00004120#line 2088 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004121 {
vlm0c6d3812006-03-21 03:40:38 +00004122 yyval.a_expr = asn1p_expr_new(yylineno);
4123 checkmem(yyval.a_expr);
4124 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4125 yyval.a_expr->meta_type = AMT_VALUE;
4126 yyval.a_expr->Identifier = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00004127 }
4128 break;
4129
4130 case 269:
vlmdfbff8c2006-03-21 09:41:28 +00004131#line 2095 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004132 {
vlm0c6d3812006-03-21 03:40:38 +00004133 yyval.a_expr = asn1p_expr_new(yylineno);
4134 checkmem(yyval.a_expr);
4135 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4136 yyval.a_expr->meta_type = AMT_VALUE;
4137 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4138 yyval.a_expr->value = yyvsp[-1].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00004139 }
4140 break;
4141
4142 case 270:
vlmdfbff8c2006-03-21 09:41:28 +00004143#line 2103 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004144 {
vlm17e65d02006-03-21 04:48:15 +00004145 yyval.a_expr = asn1p_expr_new(yylineno);
4146 checkmem(yyval.a_expr);
4147 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4148 yyval.a_expr->meta_type = AMT_VALUE;
4149 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4150 yyval.a_expr->value = yyvsp[-1].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00004151 }
4152 break;
4153
4154 case 271:
vlmdfbff8c2006-03-21 09:41:28 +00004155#line 2111 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004156 {
vlm0c6d3812006-03-21 03:40:38 +00004157 yyval.a_expr = asn1p_expr_new(yylineno);
4158 checkmem(yyval.a_expr);
4159 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4160 yyval.a_expr->meta_type = AMT_VALUE;
4161 yyval.a_expr->value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00004162 }
4163 break;
4164
4165 case 272:
vlmdfbff8c2006-03-21 09:41:28 +00004166#line 2118 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004167 {
vlm0c6d3812006-03-21 03:40:38 +00004168 yyval.a_expr = asn1p_expr_new(yylineno);
4169 checkmem(yyval.a_expr);
4170 yyval.a_expr->Identifier = strdup("...");
4171 checkmem(yyval.a_expr->Identifier);
4172 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
4173 yyval.a_expr->meta_type = AMT_VALUE;
vlm1aeaddd2006-07-13 08:24:20 +00004174 }
4175 break;
4176
4177 case 273:
vlmdfbff8c2006-03-21 09:41:28 +00004178#line 2129 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004179 {
vlm0c6d3812006-03-21 03:40:38 +00004180 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4181 checkmem(yyval.a_value);
vlm1aeaddd2006-07-13 08:24:20 +00004182 }
4183 break;
4184
4185 case 274:
vlmdfbff8c2006-03-21 09:41:28 +00004186#line 2133 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004187 {
vlm17e65d02006-03-21 04:48:15 +00004188 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4189 checkmem(yyval.a_value);
vlm1aeaddd2006-07-13 08:24:20 +00004190 }
4191 break;
4192
4193 case 275:
vlmdfbff8c2006-03-21 09:41:28 +00004194#line 2164 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004195 { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); }
4196 break;
4197
4198 case 276:
vlmdfbff8c2006-03-21 09:41:28 +00004199#line 2165 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004200 { yyval.a_tag = yyvsp[0].a_tag; }
4201 break;
4202
4203 case 277:
vlmdfbff8c2006-03-21 09:41:28 +00004204#line 2169 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004205 {
vlm0c6d3812006-03-21 03:40:38 +00004206 yyval.a_tag = yyvsp[-1].a_tag;
4207 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
vlm1aeaddd2006-07-13 08:24:20 +00004208 }
4209 break;
4210
4211 case 278:
vlmdfbff8c2006-03-21 09:41:28 +00004212#line 2176 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004213 {
vlm0c6d3812006-03-21 03:40:38 +00004214 yyval.a_tag = yyvsp[-2].a_tag;
4215 yyval.a_tag.tag_value = yyvsp[-1].a_int;
vlm1aeaddd2006-07-13 08:24:20 +00004216 }
4217 break;
4218
4219 case 279:
vlmdfbff8c2006-03-21 09:41:28 +00004220#line 2182 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004221 { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; }
4222 break;
4223
4224 case 280:
vlmdfbff8c2006-03-21 09:41:28 +00004225#line 2183 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004226 { yyval.a_tag.tag_class = TC_UNIVERSAL; }
4227 break;
4228
4229 case 281:
vlmdfbff8c2006-03-21 09:41:28 +00004230#line 2184 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004231 { yyval.a_tag.tag_class = TC_APPLICATION; }
4232 break;
4233
4234 case 282:
vlmdfbff8c2006-03-21 09:41:28 +00004235#line 2185 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004236 { yyval.a_tag.tag_class = TC_PRIVATE; }
4237 break;
4238
4239 case 283:
vlmdfbff8c2006-03-21 09:41:28 +00004240#line 2189 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004241 { yyval.a_tag.tag_mode = TM_DEFAULT; }
4242 break;
4243
4244 case 284:
vlmdfbff8c2006-03-21 09:41:28 +00004245#line 2190 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004246 { yyval.a_tag.tag_mode = TM_IMPLICIT; }
4247 break;
4248
4249 case 285:
vlmdfbff8c2006-03-21 09:41:28 +00004250#line 2191 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004251 { yyval.a_tag.tag_mode = TM_EXPLICIT; }
4252 break;
4253
4254 case 286:
vlmdfbff8c2006-03-21 09:41:28 +00004255#line 2195 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004256 {
vlmdfbff8c2006-03-21 09:41:28 +00004257 checkmem(yyvsp[0].tv_str);
vlm0c6d3812006-03-21 03:40:38 +00004258 yyval.tv_str = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00004259 }
4260 break;
4261
4262 case 287:
vlm59b620a2006-03-21 07:46:48 +00004263#line 2199 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004264 {
vlm0c6d3812006-03-21 03:40:38 +00004265 checkmem(yyvsp[0].tv_str);
4266 yyval.tv_str = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00004267 }
4268 break;
4269
4270 case 288:
vlmdfbff8c2006-03-21 09:41:28 +00004271#line 2207 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004272 {
vlmdfbff8c2006-03-21 09:41:28 +00004273 checkmem(yyvsp[0].tv_str);
4274 yyval.tv_str = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00004275 }
4276 break;
4277
4278 case 289:
vlmdfbff8c2006-03-21 09:41:28 +00004279#line 2214 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004280 { yyval.tv_str = 0; }
4281 break;
4282
4283 case 290:
vlmdfbff8c2006-03-21 09:41:28 +00004284#line 2215 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004285 {
vlmdfbff8c2006-03-21 09:41:28 +00004286 yyval.tv_str = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00004287 }
4288 break;
4289
4290 case 291:
vlmdfbff8c2006-03-21 09:41:28 +00004291#line 2221 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004292 {
vlmdfbff8c2006-03-21 09:41:28 +00004293 checkmem(yyvsp[0].tv_str);
4294 yyval.tv_str = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00004295 }
4296 break;
4297
4298
4299 }
4300
4301/* Line 1016 of /usr/local/share/bison/yacc.c. */
4302#line 4303 "asn1p_y.c"
vlmfa67ddc2004-06-03 03:38:44 +00004303
4304 yyvsp -= yylen;
4305 yyssp -= yylen;
vlmfa67ddc2004-06-03 03:38:44 +00004306
vlm1aeaddd2006-07-13 08:24:20 +00004307
4308#if YYDEBUG
vlm0c6d3812006-03-21 03:40:38 +00004309 if (yydebug)
4310 {
vlm1aeaddd2006-07-13 08:24:20 +00004311 short *yyssp1 = yyss - 1;
4312 YYFPRINTF (stderr, "state stack now");
4313 while (yyssp1 != yyssp)
4314 YYFPRINTF (stderr, " %d", *++yyssp1);
4315 YYFPRINTF (stderr, "\n");
vlm0c6d3812006-03-21 03:40:38 +00004316 }
4317#endif
vlmfa67ddc2004-06-03 03:38:44 +00004318
4319 *++yyvsp = yyval;
4320
vlmfa67ddc2004-06-03 03:38:44 +00004321
vlm1aeaddd2006-07-13 08:24:20 +00004322 /* Now `shift' the result of the reduction. Determine what state
4323 that goes to, based on the state we popped back to and the rule
4324 number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00004325
4326 yyn = yyr1[yyn];
4327
vlm1aeaddd2006-07-13 08:24:20 +00004328 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
4329 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00004330 yystate = yytable[yystate];
4331 else
vlm1aeaddd2006-07-13 08:24:20 +00004332 yystate = yydefgoto[yyn - YYNTOKENS];
vlmfa67ddc2004-06-03 03:38:44 +00004333
4334 goto yynewstate;
4335
vlmfa67ddc2004-06-03 03:38:44 +00004336
vlm1aeaddd2006-07-13 08:24:20 +00004337/*------------------------------------.
4338| yyerrlab -- here on detecting error |
4339`------------------------------------*/
4340yyerrlab:
4341 /* If not already recovering from an error, report this error. */
4342 if (!yyerrstatus)
vlmfa67ddc2004-06-03 03:38:44 +00004343 {
4344 ++yynerrs;
vlm1aeaddd2006-07-13 08:24:20 +00004345#if YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00004346 yyn = yypact[yystate];
4347
vlm1aeaddd2006-07-13 08:24:20 +00004348 if (YYPACT_NINF < yyn && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00004349 {
vlm1aeaddd2006-07-13 08:24:20 +00004350 YYSIZE_T yysize = 0;
4351 int yytype = YYTRANSLATE (yychar);
4352 char *yymsg;
4353 int yyx, yycount;
vlmfa67ddc2004-06-03 03:38:44 +00004354
vlm1aeaddd2006-07-13 08:24:20 +00004355 yycount = 0;
4356 /* Start YYX at -YYN if negative to avoid negative indexes in
4357 YYCHECK. */
4358 for (yyx = yyn < 0 ? -yyn : 0;
4359 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
4360 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
4361 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
4362 yysize += yystrlen ("parse error, unexpected ") + 1;
4363 yysize += yystrlen (yytname[yytype]);
4364 yymsg = (char *) YYSTACK_ALLOC (yysize);
4365 if (yymsg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00004366 {
vlm1aeaddd2006-07-13 08:24:20 +00004367 char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
4368 yyp = yystpcpy (yyp, yytname[yytype]);
vlm0c6d3812006-03-21 03:40:38 +00004369
vlm1aeaddd2006-07-13 08:24:20 +00004370 if (yycount < 5)
vlmfa67ddc2004-06-03 03:38:44 +00004371 {
vlm1aeaddd2006-07-13 08:24:20 +00004372 yycount = 0;
4373 for (yyx = yyn < 0 ? -yyn : 0;
4374 yyx < (int) (sizeof (yytname) / sizeof (char *));
4375 yyx++)
4376 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
vlm0c6d3812006-03-21 03:40:38 +00004377 {
vlm1aeaddd2006-07-13 08:24:20 +00004378 const char *yyq = ! yycount ? ", expecting " : " or ";
4379 yyp = yystpcpy (yyp, yyq);
4380 yyp = yystpcpy (yyp, yytname[yyx]);
4381 yycount++;
vlm0c6d3812006-03-21 03:40:38 +00004382 }
vlmfa67ddc2004-06-03 03:38:44 +00004383 }
vlm1aeaddd2006-07-13 08:24:20 +00004384 yyerror (yymsg);
4385 YYSTACK_FREE (yymsg);
vlmfa67ddc2004-06-03 03:38:44 +00004386 }
4387 else
vlm1aeaddd2006-07-13 08:24:20 +00004388 yyerror ("parse error; also virtual memory exhausted");
vlmfa67ddc2004-06-03 03:38:44 +00004389 }
4390 else
4391#endif /* YYERROR_VERBOSE */
vlm1aeaddd2006-07-13 08:24:20 +00004392 yyerror ("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00004393 }
vlm0c6d3812006-03-21 03:40:38 +00004394 goto yyerrlab1;
vlmfa67ddc2004-06-03 03:38:44 +00004395
vlm1aeaddd2006-07-13 08:24:20 +00004396
4397/*----------------------------------------------------.
4398| yyerrlab1 -- error raised explicitly by an action. |
4399`----------------------------------------------------*/
4400yyerrlab1:
vlmfa67ddc2004-06-03 03:38:44 +00004401 if (yyerrstatus == 3)
4402 {
vlm1aeaddd2006-07-13 08:24:20 +00004403 /* If just tried and failed to reuse lookahead token after an
4404 error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00004405
vlm1aeaddd2006-07-13 08:24:20 +00004406 /* Return failure if at end of input. */
vlm0c6d3812006-03-21 03:40:38 +00004407 if (yychar == YYEOF)
vlm1aeaddd2006-07-13 08:24:20 +00004408 {
4409 /* Pop the error token. */
4410 YYPOPSTACK;
4411 /* Pop the rest of the stack. */
4412 while (yyssp > yyss)
4413 {
4414 YYDPRINTF ((stderr, "Error: popping "));
4415 YYDSYMPRINT ((stderr,
4416 yystos[*yyssp],
4417 *yyvsp));
4418 YYDPRINTF ((stderr, "\n"));
4419 yydestruct (yystos[*yyssp], *yyvsp);
4420 YYPOPSTACK;
4421 }
4422 YYABORT;
4423 }
vlmfa67ddc2004-06-03 03:38:44 +00004424
vlm1aeaddd2006-07-13 08:24:20 +00004425 YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
4426 yychar, yytname[yychar1]));
4427 yydestruct (yychar1, yylval);
vlm0c6d3812006-03-21 03:40:38 +00004428 yychar = YYEMPTY;
vlmfa67ddc2004-06-03 03:38:44 +00004429 }
4430
vlm1aeaddd2006-07-13 08:24:20 +00004431 /* Else will try to reuse lookahead token after shifting the error
4432 token. */
vlm0c6d3812006-03-21 03:40:38 +00004433
vlm1aeaddd2006-07-13 08:24:20 +00004434 yyerrstatus = 3; /* Each real token shifted decrements this. */
vlm0c6d3812006-03-21 03:40:38 +00004435
vlm1aeaddd2006-07-13 08:24:20 +00004436 for (;;)
vlm0c6d3812006-03-21 03:40:38 +00004437 {
vlm1aeaddd2006-07-13 08:24:20 +00004438 yyn = yypact[yystate];
4439 if (yyn != YYPACT_NINF)
4440 {
4441 yyn += YYTERROR;
4442 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
4443 {
4444 yyn = yytable[yyn];
4445 if (0 < yyn)
4446 break;
4447 }
4448 }
4449
4450 /* Pop the current state because it cannot handle the error token. */
4451 if (yyssp == yyss)
4452 YYABORT;
4453
4454 YYDPRINTF ((stderr, "Error: popping "));
4455 YYDSYMPRINT ((stderr,
4456 yystos[*yyssp], *yyvsp));
4457 YYDPRINTF ((stderr, "\n"));
4458
4459 yydestruct (yystos[yystate], *yyvsp);
4460 yyvsp--;
4461 yystate = *--yyssp;
4462
4463
4464#if YYDEBUG
4465 if (yydebug)
4466 {
4467 short *yyssp1 = yyss - 1;
4468 YYFPRINTF (stderr, "Error: state stack now");
4469 while (yyssp1 != yyssp)
4470 YYFPRINTF (stderr, " %d", *++yyssp1);
4471 YYFPRINTF (stderr, "\n");
4472 }
vlm0c6d3812006-03-21 03:40:38 +00004473#endif
vlm0c6d3812006-03-21 03:40:38 +00004474 }
vlm0c6d3812006-03-21 03:40:38 +00004475
vlmfa67ddc2004-06-03 03:38:44 +00004476 if (yyn == YYFINAL)
4477 YYACCEPT;
4478
vlm1aeaddd2006-07-13 08:24:20 +00004479 YYDPRINTF ((stderr, "Shifting error token, "));
vlm0c6d3812006-03-21 03:40:38 +00004480
vlmfa67ddc2004-06-03 03:38:44 +00004481 *++yyvsp = yylval;
vlm1aeaddd2006-07-13 08:24:20 +00004482
vlmfa67ddc2004-06-03 03:38:44 +00004483
4484 yystate = yyn;
4485 goto yynewstate;
4486
vlm0c6d3812006-03-21 03:40:38 +00004487
vlm1aeaddd2006-07-13 08:24:20 +00004488/*-------------------------------------.
4489| yyacceptlab -- YYACCEPT comes here. |
4490`-------------------------------------*/
4491yyacceptlab:
4492 yyresult = 0;
4493 goto yyreturn;
4494
4495/*-----------------------------------.
4496| yyabortlab -- YYABORT comes here. |
4497`-----------------------------------*/
4498yyabortlab:
4499 yyresult = 1;
4500 goto yyreturn;
4501
4502#ifndef yyoverflow
4503/*----------------------------------------------.
4504| yyoverflowlab -- parser overflow comes here. |
4505`----------------------------------------------*/
4506yyoverflowlab:
4507 yyerror ("parser stack overflow");
4508 yyresult = 2;
4509 /* Fall through. */
vlm0c6d3812006-03-21 03:40:38 +00004510#endif
vlm1aeaddd2006-07-13 08:24:20 +00004511
4512yyreturn:
4513#ifndef yyoverflow
4514 if (yyss != yyssa)
4515 YYSTACK_FREE (yyss);
4516#endif
4517 return yyresult;
vlmfa67ddc2004-06-03 03:38:44 +00004518}
vlm1aeaddd2006-07-13 08:24:20 +00004519
4520
vlmdfbff8c2006-03-21 09:41:28 +00004521#line 2227 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00004522
4523
4524
4525/*
4526 * Convert Xstring ('0101'B or '5'H) to the binary vector.
4527 */
4528static asn1p_value_t *
4529_convert_bitstring2binary(char *str, int base) {
4530 asn1p_value_t *val;
4531 int slen;
4532 int memlen;
4533 int baselen;
4534 int bits;
4535 uint8_t *binary_vector;
4536 uint8_t *bv_ptr;
4537 uint8_t cur_val;
4538
4539 assert(str);
4540 assert(str[0] == '\'');
4541
4542 switch(base) {
4543 case 'B':
4544 baselen = 1;
4545 break;
4546 case 'H':
4547 baselen = 4;
4548 break;
4549 default:
4550 assert(base == 'B' || base == 'H');
4551 errno = EINVAL;
4552 return NULL;
4553 }
4554
4555 slen = strlen(str);
4556 assert(str[slen - 1] == base);
4557 assert(str[slen - 2] == '\'');
4558
4559 memlen = slen / (8 / baselen); /* Conservative estimate */
4560
4561 bv_ptr = binary_vector = malloc(memlen + 1);
4562 if(bv_ptr == NULL)
4563 /* ENOMEM */
4564 return NULL;
4565
4566 cur_val = 0;
4567 bits = 0;
4568 while(*(++str) != '\'') {
4569 switch(baselen) {
4570 case 1:
4571 switch(*str) {
4572 case '1':
4573 cur_val |= 1 << (7 - (bits % 8));
4574 case '0':
4575 break;
4576 default:
4577 assert(!"_y UNREACH1");
4578 case ' ': case '\r': case '\n':
4579 continue;
4580 }
4581 break;
4582 case 4:
4583 switch(*str) {
4584 case '0': case '1': case '2': case '3': case '4':
4585 case '5': case '6': case '7': case '8': case '9':
4586 cur_val |= (*str - '0') << (4 - (bits % 8));
4587 break;
4588 case 'A': case 'B': case 'C':
4589 case 'D': case 'E': case 'F':
4590 cur_val |= ((*str - 'A') + 10)
4591 << (4 - (bits % 8));
4592 break;
4593 default:
4594 assert(!"_y UNREACH2");
4595 case ' ': case '\r': case '\n':
4596 continue;
4597 }
4598 break;
4599 }
4600
4601 bits += baselen;
4602 if((bits % 8) == 0) {
4603 *bv_ptr++ = cur_val;
4604 cur_val = 0;
4605 }
4606 }
4607
4608 *bv_ptr = cur_val;
4609 assert((bv_ptr - binary_vector) <= memlen);
4610
4611 val = asn1p_value_frombits(binary_vector, bits, 0);
4612 if(val == NULL) {
4613 free(binary_vector);
4614 }
4615
4616 return val;
4617}
4618
vlm5d89c3d2005-08-13 09:07:11 +00004619/*
4620 * For unnamed types (used in old X.208 compliant modules)
4621 * generate some sort of interim names, to not to force human being to fix
4622 * the specification's compliance to modern ASN.1 standards.
4623 */
4624static void
4625_fixup_anonymous_identifier(asn1p_expr_t *expr) {
4626 char *p;
4627 assert(expr->Identifier == 0);
4628
4629 /*
4630 * Try to figure out the type name
4631 * without going too much into details
4632 */
4633 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
4634 if(expr->reference && expr->reference->comp_count > 0)
4635 expr->Identifier = expr->reference->components[0].name;
4636
4637 fprintf(stderr,
4638 "WARNING: Line %d: expected lower-case member identifier, "
4639 "found an unnamed %s.\n"
4640 "WARNING: Obsolete X.208 syntax detected, "
4641 "please give the member a name.\n",
4642 yylineno, expr->Identifier ? expr->Identifier : "type");
4643
4644 if(!expr->Identifier)
4645 expr->Identifier = "unnamed";
4646 expr->Identifier = strdup(expr->Identifier);
4647 assert(expr->Identifier);
4648 /* Make a lowercase identifier from the type name */
4649 for(p = expr->Identifier; *p; p++) {
4650 switch(*p) {
4651 case 'A' ... 'Z': *p += 32; break;
4652 case ' ': *p = '_'; break;
4653 case '-': *p = '_'; break;
4654 }
4655 }
4656 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
4657 "Name clash may occur later.\n",
4658 expr->Identifier);
4659}
4660
vlmfa67ddc2004-06-03 03:38:44 +00004661int
4662yyerror(const char *msg) {
vlm808411d2006-03-14 16:31:37 +00004663 extern char *asn1p_text;
vlmfa67ddc2004-06-03 03:38:44 +00004664 fprintf(stderr,
4665 "ASN.1 grammar parse error "
4666 "near line %d (token \"%s\"): %s\n",
vlm39e5ed72004-09-05 10:40:41 +00004667 yylineno, asn1p_text, msg);
vlmfa67ddc2004-06-03 03:38:44 +00004668 return -1;
4669}
4670
vlm1aeaddd2006-07-13 08:24:20 +00004671