blob: 95195962f5cc708c500124869c1989a7c7cc4b9a [file] [log] [blame]
vlm1aeaddd2006-07-13 08:24:20 +00001/* A Bison parser, made from asn1p_y.y, by GNU bison 1.75. */
vlmfa67ddc2004-06-03 03:38:44 +00002
vlm1aeaddd2006-07-13 08:24:20 +00003/* Skeleton parser for Yacc-like parsing with Bison,
4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
vlmfa67ddc2004-06-03 03:38:44 +00005
vlm1aeaddd2006-07-13 08:24:20 +00006 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
vlmfa67ddc2004-06-03 03:38:44 +000010
vlm1aeaddd2006-07-13 08:24:20 +000011 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
20
21/* As a special exception, when this file is copied by Bison into a
22 Bison output file, you may use that output file without restriction.
23 This special exception was added by the Free Software Foundation
24 in version 1.24 of Bison. */
25
26/* Written by Richard Stallman by simplifying the original so called
27 ``semantic'' parser. */
28
29/* All symbols defined below should begin with yy or YY, to avoid
30 infringing on user name space. This should be done even for local
31 variables, as they might otherwise be expanded by user macros.
32 There are some unavoidable exceptions within include files to
33 define necessary library symbols; they are noted "INFRINGES ON
34 USER NAME SPACE" below. */
35
36/* Identify Bison output. */
37#define YYBISON 1
38
39/* Pure parsers. */
40#define YYPURE 0
41
42/* Using locations. */
43#define YYLSP_NEEDED 0
44
45/* If NAME_PREFIX is specified substitute the variables and functions
46 names. */
vlmfa67ddc2004-06-03 03:38:44 +000047#define yyparse asn1p_parse
vlm1aeaddd2006-07-13 08:24:20 +000048#define yylex asn1p_lex
vlmfa67ddc2004-06-03 03:38:44 +000049#define yyerror asn1p_error
vlm1aeaddd2006-07-13 08:24:20 +000050#define yylval asn1p_lval
51#define yychar asn1p_char
vlmfa67ddc2004-06-03 03:38:44 +000052#define yydebug asn1p_debug
53#define yynerrs asn1p_nerrs
vlmfa67ddc2004-06-03 03:38:44 +000054
vlm1aeaddd2006-07-13 08:24:20 +000055
56/* Tokens. */
57#ifndef YYTOKENTYPE
58# define YYTOKENTYPE
59 /* Put the tokens into the symbol table, so that GDB and other debuggers
60 know about them. */
61 enum yytokentype {
62 TOK_PPEQ = 258,
63 TOK_whitespace = 259,
64 TOK_opaque = 260,
65 TOK_bstring = 261,
66 TOK_cstring = 262,
67 TOK_hstring = 263,
68 TOK_identifier = 264,
69 TOK_number = 265,
vlme745fcd2006-09-05 16:18:34 +000070 TOK_number_negative = 266,
71 TOK_realnumber = 267,
72 TOK_tuple = 268,
73 TOK_quadruple = 269,
74 TOK_typereference = 270,
75 TOK_capitalreference = 271,
76 TOK_typefieldreference = 272,
77 TOK_valuefieldreference = 273,
78 TOK_Literal = 274,
79 TOK_ABSENT = 275,
80 TOK_ABSTRACT_SYNTAX = 276,
81 TOK_ALL = 277,
82 TOK_ANY = 278,
83 TOK_APPLICATION = 279,
84 TOK_AUTOMATIC = 280,
85 TOK_BEGIN = 281,
86 TOK_BIT = 282,
87 TOK_BMPString = 283,
88 TOK_BOOLEAN = 284,
89 TOK_BY = 285,
90 TOK_CHARACTER = 286,
91 TOK_CHOICE = 287,
92 TOK_CLASS = 288,
93 TOK_COMPONENT = 289,
94 TOK_COMPONENTS = 290,
95 TOK_CONSTRAINED = 291,
96 TOK_CONTAINING = 292,
97 TOK_DEFAULT = 293,
98 TOK_DEFINITIONS = 294,
99 TOK_DEFINED = 295,
100 TOK_EMBEDDED = 296,
101 TOK_ENCODED = 297,
102 TOK_ENCODING_CONTROL = 298,
103 TOK_END = 299,
104 TOK_ENUMERATED = 300,
105 TOK_EXPLICIT = 301,
106 TOK_EXPORTS = 302,
107 TOK_EXTENSIBILITY = 303,
108 TOK_EXTERNAL = 304,
109 TOK_FALSE = 305,
110 TOK_FROM = 306,
111 TOK_GeneralizedTime = 307,
112 TOK_GeneralString = 308,
113 TOK_GraphicString = 309,
114 TOK_IA5String = 310,
115 TOK_IDENTIFIER = 311,
116 TOK_IMPLICIT = 312,
117 TOK_IMPLIED = 313,
118 TOK_IMPORTS = 314,
119 TOK_INCLUDES = 315,
120 TOK_INSTANCE = 316,
121 TOK_INSTRUCTIONS = 317,
122 TOK_INTEGER = 318,
123 TOK_ISO646String = 319,
124 TOK_MAX = 320,
125 TOK_MIN = 321,
126 TOK_MINUS_INFINITY = 322,
127 TOK_NULL = 323,
128 TOK_NumericString = 324,
129 TOK_OBJECT = 325,
130 TOK_ObjectDescriptor = 326,
131 TOK_OCTET = 327,
132 TOK_OF = 328,
133 TOK_OPTIONAL = 329,
134 TOK_PATTERN = 330,
135 TOK_PDV = 331,
136 TOK_PLUS_INFINITY = 332,
137 TOK_PRESENT = 333,
138 TOK_PrintableString = 334,
139 TOK_PRIVATE = 335,
140 TOK_REAL = 336,
141 TOK_RELATIVE_OID = 337,
142 TOK_SEQUENCE = 338,
143 TOK_SET = 339,
144 TOK_SIZE = 340,
145 TOK_STRING = 341,
146 TOK_SYNTAX = 342,
147 TOK_T61String = 343,
148 TOK_TAGS = 344,
149 TOK_TeletexString = 345,
150 TOK_TRUE = 346,
151 TOK_TYPE_IDENTIFIER = 347,
152 TOK_UNIQUE = 348,
153 TOK_UNIVERSAL = 349,
154 TOK_UniversalString = 350,
155 TOK_UTCTime = 351,
156 TOK_UTF8String = 352,
157 TOK_VideotexString = 353,
158 TOK_VisibleString = 354,
159 TOK_WITH = 355,
160 TOK_EXCEPT = 356,
161 TOK_INTERSECTION = 357,
162 TOK_UNION = 358,
163 TOK_TwoDots = 359,
164 TOK_ThreeDots = 360
vlm1aeaddd2006-07-13 08:24:20 +0000165 };
166#endif
167#define TOK_PPEQ 258
168#define TOK_whitespace 259
169#define TOK_opaque 260
170#define TOK_bstring 261
171#define TOK_cstring 262
172#define TOK_hstring 263
173#define TOK_identifier 264
174#define TOK_number 265
vlme745fcd2006-09-05 16:18:34 +0000175#define TOK_number_negative 266
176#define TOK_realnumber 267
177#define TOK_tuple 268
178#define TOK_quadruple 269
179#define TOK_typereference 270
180#define TOK_capitalreference 271
181#define TOK_typefieldreference 272
182#define TOK_valuefieldreference 273
183#define TOK_Literal 274
184#define TOK_ABSENT 275
185#define TOK_ABSTRACT_SYNTAX 276
186#define TOK_ALL 277
187#define TOK_ANY 278
188#define TOK_APPLICATION 279
189#define TOK_AUTOMATIC 280
190#define TOK_BEGIN 281
191#define TOK_BIT 282
192#define TOK_BMPString 283
193#define TOK_BOOLEAN 284
194#define TOK_BY 285
195#define TOK_CHARACTER 286
196#define TOK_CHOICE 287
197#define TOK_CLASS 288
198#define TOK_COMPONENT 289
199#define TOK_COMPONENTS 290
200#define TOK_CONSTRAINED 291
201#define TOK_CONTAINING 292
202#define TOK_DEFAULT 293
203#define TOK_DEFINITIONS 294
204#define TOK_DEFINED 295
205#define TOK_EMBEDDED 296
206#define TOK_ENCODED 297
207#define TOK_ENCODING_CONTROL 298
208#define TOK_END 299
209#define TOK_ENUMERATED 300
210#define TOK_EXPLICIT 301
211#define TOK_EXPORTS 302
212#define TOK_EXTENSIBILITY 303
213#define TOK_EXTERNAL 304
214#define TOK_FALSE 305
215#define TOK_FROM 306
216#define TOK_GeneralizedTime 307
217#define TOK_GeneralString 308
218#define TOK_GraphicString 309
219#define TOK_IA5String 310
220#define TOK_IDENTIFIER 311
221#define TOK_IMPLICIT 312
222#define TOK_IMPLIED 313
223#define TOK_IMPORTS 314
224#define TOK_INCLUDES 315
225#define TOK_INSTANCE 316
226#define TOK_INSTRUCTIONS 317
227#define TOK_INTEGER 318
228#define TOK_ISO646String 319
229#define TOK_MAX 320
230#define TOK_MIN 321
231#define TOK_MINUS_INFINITY 322
232#define TOK_NULL 323
233#define TOK_NumericString 324
234#define TOK_OBJECT 325
235#define TOK_ObjectDescriptor 326
236#define TOK_OCTET 327
237#define TOK_OF 328
238#define TOK_OPTIONAL 329
239#define TOK_PATTERN 330
240#define TOK_PDV 331
241#define TOK_PLUS_INFINITY 332
242#define TOK_PRESENT 333
243#define TOK_PrintableString 334
244#define TOK_PRIVATE 335
245#define TOK_REAL 336
246#define TOK_RELATIVE_OID 337
247#define TOK_SEQUENCE 338
248#define TOK_SET 339
249#define TOK_SIZE 340
250#define TOK_STRING 341
251#define TOK_SYNTAX 342
252#define TOK_T61String 343
253#define TOK_TAGS 344
254#define TOK_TeletexString 345
255#define TOK_TRUE 346
256#define TOK_TYPE_IDENTIFIER 347
257#define TOK_UNIQUE 348
258#define TOK_UNIVERSAL 349
259#define TOK_UniversalString 350
260#define TOK_UTCTime 351
261#define TOK_UTF8String 352
262#define TOK_VideotexString 353
263#define TOK_VisibleString 354
264#define TOK_WITH 355
265#define TOK_EXCEPT 356
266#define TOK_INTERSECTION 357
267#define TOK_UNION 358
268#define TOK_TwoDots 359
269#define TOK_ThreeDots 360
vlm1aeaddd2006-07-13 08:24:20 +0000270
271
272
273
274/* Copy the first part of user declarations. */
vlmfa67ddc2004-06-03 03:38:44 +0000275#line 1 "asn1p_y.y"
276
277
278#include <stdlib.h>
279#include <stdio.h>
280#include <string.h>
281#include <errno.h>
282#include <assert.h>
283
284#include "asn1parser.h"
285
286#define YYPARSE_PARAM param
vlm03630c52005-06-07 21:43:32 +0000287#define YYPARSE_PARAM_TYPE void **
vlmfa67ddc2004-06-03 03:38:44 +0000288#define YYERROR_VERBOSE
289
290int yylex(void);
291int yyerror(const char *msg);
vlm03630c52005-06-07 21:43:32 +0000292#ifdef YYBYACC
293int yyparse(void **param); /* byacc does not produce a prototype */
294#endif
vlmfa67ddc2004-06-03 03:38:44 +0000295void asn1p_lexer_hack_push_opaque_state(void);
296void asn1p_lexer_hack_enable_with_syntax(void);
vlm9283dbe2004-08-18 04:59:12 +0000297void asn1p_lexer_hack_push_encoding_control(void);
vlmfa67ddc2004-06-03 03:38:44 +0000298#define yylineno asn1p_lineno
299extern int asn1p_lineno;
300
vlm931aeed2005-08-12 10:09:10 +0000301/*
vlm177a5b62005-09-05 05:17:57 +0000302 * Process directives as <ASN1C:RepresentAsPointer>
vlm066dc102005-08-22 12:23:54 +0000303 */
304extern int asn1p_as_pointer;
vlm066dc102005-08-22 12:23:54 +0000305
306/*
vlm931aeed2005-08-12 10:09:10 +0000307 * This temporary variable is used to solve the shortcomings of 1-lookahead
308 * parser.
309 */
310static struct AssignedIdentifier *saved_aid;
vlmfa67ddc2004-06-03 03:38:44 +0000311
vlm5d89c3d2005-08-13 09:07:11 +0000312static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
313static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
vlmfa67ddc2004-06-03 03:38:44 +0000314
vlm43c8ac52006-09-17 04:52:50 +0000315static asn1p_module_t *currentModule;
316#define NEW_EXPR() (asn1p_expr_new(yylineno, currentModule))
317
vlm931aeed2005-08-12 10:09:10 +0000318#define checkmem(ptr) do { \
319 if(!(ptr)) \
320 return yyerror("Memory failure"); \
vlmfa67ddc2004-06-03 03:38:44 +0000321 } while(0)
322
vlm931aeed2005-08-12 10:09:10 +0000323#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \
324 if(arg1->type != constr_type) { \
325 int __ret; \
326 root = asn1p_constraint_new(yylineno); \
327 checkmem(root); \
328 root->type = constr_type; \
329 __ret = asn1p_constraint_insert(root, \
330 arg1); \
331 checkmem(__ret == 0); \
332 } else { \
333 root = arg1; \
334 } \
335 if(arg2) { \
336 int __ret \
337 = asn1p_constraint_insert(root, arg2); \
338 checkmem(__ret == 0); \
339 } \
vlmfa67ddc2004-06-03 03:38:44 +0000340 } while(0)
341
vlmd3420d32006-09-14 10:35:20 +0000342#ifdef AL_IMPORT
343#error AL_IMPORT DEFINED ELSEWHERE!
344#endif
345#define AL_IMPORT(to,where,from,field) do { \
346 if(!(from)) break; \
347 while(TQ_FIRST(&((from)->where))) { \
348 TQ_ADD(&((to)->where), \
349 TQ_REMOVE(&((from)->where), field), \
350 field); \
351 } \
352 assert(TQ_FIRST(&((from)->where)) == 0); \
353 } while(0)
354
vlmfa67ddc2004-06-03 03:38:44 +0000355
vlm1aeaddd2006-07-13 08:24:20 +0000356
357/* Enabling traces. */
358#ifndef YYDEBUG
359# define YYDEBUG 0
360#endif
361
362/* Enabling verbose error messages. */
363#ifdef YYERROR_VERBOSE
364# undef YYERROR_VERBOSE
365# define YYERROR_VERBOSE 1
366#else
367# define YYERROR_VERBOSE 0
368#endif
369
370#ifndef YYSTYPE
vlm43c8ac52006-09-17 04:52:50 +0000371#line 88 "asn1p_y.y"
vlm0c6d3812006-03-21 03:40:38 +0000372typedef union {
vlmfa67ddc2004-06-03 03:38:44 +0000373 asn1p_t *a_grammar;
374 asn1p_module_flags_e a_module_flags;
375 asn1p_module_t *a_module;
376 asn1p_expr_type_e a_type; /* ASN.1 Type */
377 asn1p_expr_t *a_expr; /* Constructed collection */
378 asn1p_constraint_t *a_constr; /* Constraint */
379 enum asn1p_constraint_type_e a_ctype;/* Constraint type */
380 asn1p_xports_t *a_xports; /* IMports/EXports */
vlm931aeed2005-08-12 10:09:10 +0000381 struct AssignedIdentifier a_aid; /* Assigned Identifier */
vlmfa67ddc2004-06-03 03:38:44 +0000382 asn1p_oid_t *a_oid; /* Object Identifier */
383 asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */
384 struct asn1p_type_tag_s a_tag; /* A tag */
385 asn1p_ref_t *a_ref; /* Reference to custom type */
386 asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */
387 asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */
388 struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
389 asn1p_value_t *a_value; /* Number, DefinedValue, etc */
390 struct asn1p_param_s a_parg; /* A parameter argument */
391 asn1p_paramlist_t *a_plist; /* A pargs list */
vlmc94e28f2004-09-15 11:59:51 +0000392 struct asn1p_expr_marker_s a_marker; /* OPTIONAL/DEFAULT */
vlmfa67ddc2004-06-03 03:38:44 +0000393 enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */
vlmec6acd42004-09-29 13:18:09 +0000394 asn1c_integer_t a_int;
vlme745fcd2006-09-05 16:18:34 +0000395 double a_dbl;
vlmfa67ddc2004-06-03 03:38:44 +0000396 char *tv_str;
397 struct {
398 char *buf;
399 int len;
400 } tv_opaque;
401 struct {
402 char *name;
403 struct asn1p_type_tag_s tag;
404 } tv_nametag;
vlm1aeaddd2006-07-13 08:24:20 +0000405} yystype;
406/* Line 193 of /usr/local/share/bison/yacc.c. */
vlm43c8ac52006-09-17 04:52:50 +0000407#line 408 "asn1p_y.c"
vlm1aeaddd2006-07-13 08:24:20 +0000408# define YYSTYPE yystype
409# define YYSTYPE_IS_TRIVIAL 1
vlmfa67ddc2004-06-03 03:38:44 +0000410#endif
411
vlm1aeaddd2006-07-13 08:24:20 +0000412#ifndef YYLTYPE
413typedef struct yyltype
414{
415 int first_line;
416 int first_column;
417 int last_line;
418 int last_column;
419} yyltype;
420# define YYLTYPE yyltype
421# define YYLTYPE_IS_TRIVIAL 1
422#endif
423
424/* Copy the second part of user declarations. */
vlmfa67ddc2004-06-03 03:38:44 +0000425
426
vlm1aeaddd2006-07-13 08:24:20 +0000427/* Line 213 of /usr/local/share/bison/yacc.c. */
vlm43c8ac52006-09-17 04:52:50 +0000428#line 429 "asn1p_y.c"
vlmfa67ddc2004-06-03 03:38:44 +0000429
vlm1aeaddd2006-07-13 08:24:20 +0000430#if ! defined (yyoverflow) || YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +0000431
vlm1aeaddd2006-07-13 08:24:20 +0000432/* The parser invokes alloca or malloc; define the necessary symbols. */
vlmfa67ddc2004-06-03 03:38:44 +0000433
vlm1aeaddd2006-07-13 08:24:20 +0000434# if YYSTACK_USE_ALLOCA
435# define YYSTACK_ALLOC alloca
436# else
437# ifndef YYSTACK_USE_ALLOCA
438# if defined (alloca) || defined (_ALLOCA_H)
439# define YYSTACK_ALLOC alloca
440# else
441# ifdef __GNUC__
442# define YYSTACK_ALLOC __builtin_alloca
443# endif
444# endif
445# endif
446# endif
vlmfa67ddc2004-06-03 03:38:44 +0000447
vlm1aeaddd2006-07-13 08:24:20 +0000448# ifdef YYSTACK_ALLOC
449 /* Pacify GCC's `empty if-body' warning. */
450# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
451# else
452# if defined (__STDC__) || defined (__cplusplus)
453# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
454# define YYSIZE_T size_t
455# endif
456# define YYSTACK_ALLOC malloc
457# define YYSTACK_FREE free
458# endif
459#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
460
461
462#if (! defined (yyoverflow) \
463 && (! defined (__cplusplus) \
464 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
465
466/* A type that is properly aligned for any stack member. */
467union yyalloc
468{
469 short yyss;
470 YYSTYPE yyvs;
471 };
472
473/* The size of the maximum gap between one aligned stack and the next. */
474# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
475
476/* The size of an array large to enough to hold all stacks, each with
477 N elements. */
478# define YYSTACK_BYTES(N) \
479 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
480 + YYSTACK_GAP_MAX)
481
482/* Copy COUNT objects from FROM to TO. The source and destination do
483 not overlap. */
484# ifndef YYCOPY
485# if 1 < __GNUC__
486# define YYCOPY(To, From, Count) \
487 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
488# else
489# define YYCOPY(To, From, Count) \
490 do \
491 { \
492 register YYSIZE_T yyi; \
493 for (yyi = 0; yyi < (Count); yyi++) \
494 (To)[yyi] = (From)[yyi]; \
495 } \
496 while (0)
497# endif
498# endif
499
500/* Relocate STACK from its old location to the new one. The
501 local variables YYSIZE and YYSTACKSIZE give the old and new number of
502 elements in the stack, and YYPTR gives the new location of the
503 stack. Advance YYPTR to a properly aligned location for the next
504 stack. */
505# define YYSTACK_RELOCATE(Stack) \
506 do \
507 { \
508 YYSIZE_T yynewbytes; \
509 YYCOPY (&yyptr->Stack, Stack, yysize); \
510 Stack = &yyptr->Stack; \
511 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
512 yyptr += yynewbytes / sizeof (*yyptr); \
513 } \
514 while (0)
vlmfa67ddc2004-06-03 03:38:44 +0000515
516#endif
517
vlm1aeaddd2006-07-13 08:24:20 +0000518#if defined (__STDC__) || defined (__cplusplus)
519 typedef signed char yysigned_char;
vlmfa67ddc2004-06-03 03:38:44 +0000520#else
vlm1aeaddd2006-07-13 08:24:20 +0000521 typedef short yysigned_char;
vlmfa67ddc2004-06-03 03:38:44 +0000522#endif
523
vlm1aeaddd2006-07-13 08:24:20 +0000524/* YYFINAL -- State number of the termination state. */
525#define YYFINAL 7
vlm43c8ac52006-09-17 04:52:50 +0000526#define YYLAST 834
vlm1aeaddd2006-07-13 08:24:20 +0000527
528/* YYNTOKENS -- Number of terminals. */
vlme745fcd2006-09-05 16:18:34 +0000529#define YYNTOKENS 121
vlm1aeaddd2006-07-13 08:24:20 +0000530/* YYNNTS -- Number of nonterminals. */
vlm43c8ac52006-09-17 04:52:50 +0000531#define YYNNTS 117
vlm1aeaddd2006-07-13 08:24:20 +0000532/* YYNRULES -- Number of rules. */
vlm43c8ac52006-09-17 04:52:50 +0000533#define YYNRULES 302
vlm1aeaddd2006-07-13 08:24:20 +0000534/* YYNRULES -- Number of states. */
vlm43c8ac52006-09-17 04:52:50 +0000535#define YYNSTATES 462
vlm1aeaddd2006-07-13 08:24:20 +0000536
537/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
538#define YYUNDEFTOK 2
vlme745fcd2006-09-05 16:18:34 +0000539#define YYMAXUTOK 360
vlm1aeaddd2006-07-13 08:24:20 +0000540
541#define YYTRANSLATE(X) \
542 ((unsigned)(X) <= YYMAXUTOK ? yytranslate[X] : YYUNDEFTOK)
543
544/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
545static const unsigned char yytranslate[] =
546{
547 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
548 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
549 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlme745fcd2006-09-05 16:18:34 +0000550 2, 2, 2, 117, 2, 2, 2, 2, 2, 2,
551 110, 111, 2, 2, 113, 2, 118, 2, 2, 2,
552 2, 2, 2, 2, 2, 2, 2, 2, 114, 112,
553 119, 2, 2, 2, 120, 2, 2, 2, 2, 2,
vlm1aeaddd2006-07-13 08:24:20 +0000554 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
555 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlme745fcd2006-09-05 16:18:34 +0000556 2, 115, 2, 116, 102, 2, 2, 2, 2, 2,
vlm1aeaddd2006-07-13 08:24:20 +0000557 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
558 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
vlme745fcd2006-09-05 16:18:34 +0000559 2, 2, 2, 108, 104, 109, 2, 2, 2, 2,
vlm1aeaddd2006-07-13 08:24:20 +0000560 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
561 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
562 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
563 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
564 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
565 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
566 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
567 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
568 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
569 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
570 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
571 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
572 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
573 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
574 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
575 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
576 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
577 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
578 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
579 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
580 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
581 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
vlme745fcd2006-09-05 16:18:34 +0000582 95, 96, 97, 98, 99, 100, 101, 103, 105, 106,
583 107
vlm1aeaddd2006-07-13 08:24:20 +0000584};
585
586#if YYDEBUG
587/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
588 YYRHS. */
589static const unsigned short yyprhs[] =
590{
vlm43c8ac52006-09-17 04:52:50 +0000591 0, 0, 3, 5, 7, 10, 11, 21, 22, 24,
592 28, 31, 33, 36, 38, 43, 45, 46, 48, 50,
593 53, 56, 59, 62, 65, 68, 69, 71, 75, 77,
594 80, 82, 84, 86, 87, 91, 93, 94, 96, 100,
595 103, 105, 108, 109, 111, 116, 118, 122, 124, 128,
596 130, 131, 133, 137, 141, 144, 146, 150, 152, 156,
597 158, 162, 167, 169, 171, 176, 180, 184, 191, 198,
598 200, 204, 206, 210, 214, 218, 222, 224, 228, 230,
599 232, 234, 236, 237, 239, 241, 245, 249, 252, 256,
600 258, 260, 264, 267, 269, 271, 277, 278, 280, 282,
601 286, 289, 294, 298, 302, 306, 310, 314, 315, 317,
602 318, 325, 327, 330, 332, 334, 336, 340, 342, 346,
603 350, 354, 355, 358, 360, 365, 370, 375, 382, 389,
604 391, 396, 400, 402, 406, 410, 414, 416, 420, 422,
605 426, 428, 430, 432, 434, 438, 442, 444, 449, 451,
606 453, 457, 458, 462, 464, 466, 468, 470, 472, 474,
607 476, 478, 482, 484, 486, 488, 490, 493, 495, 497,
608 499, 501, 504, 507, 509, 511, 514, 517, 519, 521,
609 523, 525, 527, 530, 532, 535, 537, 539, 541, 543,
vlm1aeaddd2006-07-13 08:24:20 +0000610 545, 547, 549, 551, 553, 555, 557, 559, 561, 563,
vlm43c8ac52006-09-17 04:52:50 +0000611 565, 567, 569, 571, 573, 574, 576, 578, 582, 584,
612 589, 593, 598, 600, 602, 606, 612, 614, 618, 622,
613 626, 630, 635, 639, 641, 643, 647, 651, 655, 659,
614 661, 663, 665, 667, 669, 671, 673, 675, 677, 681,
615 687, 689, 693, 695, 699, 700, 702, 704, 706, 708,
616 710, 712, 714, 715, 721, 724, 726, 729, 732, 736,
617 738, 740, 744, 749, 751, 755, 758, 762, 764, 768,
618 769, 771, 773, 776, 779, 783, 785, 789, 791, 796,
619 801, 803, 805, 807, 809, 811, 813, 814, 816, 819,
620 824, 825, 827, 829, 831, 832, 834, 836, 838, 840,
621 842, 843, 845
vlm1aeaddd2006-07-13 08:24:20 +0000622};
623
624/* YYRHS -- A `-1'-separated list of the rules' RHS. */
625static const short yyrhs[] =
626{
vlme745fcd2006-09-05 16:18:34 +0000627 122, 0, -1, 123, -1, 124, -1, 123, 124, -1,
vlm43c8ac52006-09-17 04:52:50 +0000628 -1, 234, 125, 126, 39, 130, 3, 26, 133, 44,
629 -1, -1, 127, -1, 108, 128, 109, -1, 108, 109,
630 -1, 129, -1, 128, 129, -1, 237, -1, 237, 110,
631 10, 111, -1, 10, -1, -1, 131, -1, 132, -1,
632 131, 132, -1, 46, 89, -1, 57, 89, -1, 25,
633 89, -1, 48, 58, -1, 16, 62, -1, -1, 134,
634 -1, 145, 138, 135, -1, 136, -1, 135, 136, -1,
635 152, -1, 182, -1, 150, -1, -1, 43, 16, 137,
636 -1, 192, -1, -1, 139, -1, 59, 140, 112, -1,
637 59, 51, -1, 142, -1, 140, 142, -1, -1, 127,
638 -1, 143, 51, 234, 141, -1, 144, -1, 143, 113,
639 144, -1, 234, -1, 234, 108, 109, -1, 237, -1,
640 -1, 146, -1, 47, 147, 112, -1, 47, 22, 112,
641 -1, 47, 112, -1, 148, -1, 147, 113, 148, -1,
642 234, -1, 234, 108, 109, -1, 237, -1, 108, 200,
643 109, -1, 234, 151, 3, 149, -1, 191, -1, 176,
644 -1, 176, 108, 155, 109, -1, 234, 3, 172, -1,
645 234, 3, 162, -1, 234, 108, 153, 109, 3, 172,
646 -1, 234, 108, 153, 109, 3, 162, -1, 154, -1,
647 153, 113, 154, -1, 234, -1, 234, 114, 237, -1,
648 234, 114, 234, -1, 189, 114, 237, -1, 189, 114,
649 234, -1, 156, -1, 155, 113, 156, -1, 172, -1,
650 185, -1, 237, -1, 149, -1, -1, 158, -1, 159,
651 -1, 158, 113, 159, -1, 237, 172, 222, -1, 172,
652 222, -1, 35, 73, 172, -1, 171, -1, 161, -1,
653 160, 113, 161, -1, 237, 172, -1, 171, -1, 172,
654 -1, 33, 108, 164, 109, 166, -1, -1, 93, -1,
655 165, -1, 164, 113, 165, -1, 17, 222, -1, 18,
656 172, 163, 222, -1, 18, 180, 222, -1, 18, 181,
657 222, -1, 17, 180, 222, -1, 17, 172, 222, -1,
658 17, 181, 222, -1, -1, 167, -1, -1, 100, 87,
659 108, 168, 169, 109, -1, 170, -1, 169, 170, -1,
660 4, -1, 19, -1, 179, -1, 115, 169, 116, -1,
661 107, -1, 107, 117, 186, -1, 107, 117, 227, -1,
662 229, 174, 196, -1, -1, 173, 175, -1, 151, -1,
663 32, 108, 160, 109, -1, 83, 108, 157, 109, -1,
664 84, 108, 157, 109, -1, 83, 196, 73, 236, 229,
665 174, -1, 84, 196, 73, 236, 229, 174, -1, 23,
666 -1, 23, 40, 30, 237, -1, 61, 73, 176, -1,
667 15, -1, 15, 118, 234, -1, 235, 118, 234, -1,
668 15, 118, 237, -1, 235, -1, 235, 118, 177, -1,
669 178, -1, 177, 118, 178, -1, 179, -1, 17, -1,
670 18, -1, 17, -1, 180, 118, 17, -1, 180, 118,
671 18, -1, 16, -1, 237, 151, 3, 183, -1, 185,
672 -1, 186, -1, 237, 114, 183, -1, -1, 108, 184,
673 188, -1, 68, -1, 50, -1, 91, -1, 6, -1,
674 8, -1, 187, -1, 227, -1, 237, -1, 234, 118,
675 237, -1, 7, -1, 13, -1, 14, -1, 5, -1,
676 188, 5, -1, 29, -1, 68, -1, 81, -1, 190,
677 -1, 72, 86, -1, 70, 56, -1, 82, -1, 49,
678 -1, 41, 76, -1, 31, 86, -1, 96, -1, 52,
679 -1, 192, -1, 63, -1, 45, -1, 27, 86, -1,
680 189, -1, 190, 224, -1, 28, -1, 53, -1, 54,
681 -1, 55, -1, 64, -1, 69, -1, 79, -1, 88,
682 -1, 90, -1, 95, -1, 97, -1, 98, -1, 99,
683 -1, 71, -1, 104, -1, 105, -1, 102, -1, 103,
684 -1, 101, -1, -1, 197, -1, 198, -1, 110, 211,
685 111, -1, 199, -1, 85, 110, 200, 111, -1, 110,
686 200, 111, -1, 199, 110, 200, 111, -1, 107, -1,
687 201, -1, 201, 113, 107, -1, 201, 113, 107, 113,
688 201, -1, 202, -1, 22, 101, 202, -1, 201, 193,
689 202, -1, 201, 194, 202, -1, 202, 195, 202, -1,
690 203, 110, 200, 111, -1, 110, 200, 111, -1, 204,
691 -1, 205, -1, 204, 215, 204, -1, 66, 215, 204,
692 -1, 204, 215, 65, -1, 66, 215, 65, -1, 206,
693 -1, 85, -1, 51, -1, 50, -1, 91, -1, 228,
694 -1, 187, -1, 237, -1, 234, -1, 100, 34, 199,
695 -1, 100, 35, 108, 207, 109, -1, 208, -1, 207,
696 113, 208, -1, 107, -1, 237, 196, 209, -1, -1,
697 210, -1, 78, -1, 20, -1, 74, -1, 212, -1,
698 216, -1, 214, -1, -1, 36, 30, 108, 213, 188,
699 -1, 37, 172, -1, 106, -1, 106, 119, -1, 119,
700 106, -1, 119, 106, 119, -1, 217, -1, 218, -1,
701 108, 234, 109, -1, 217, 108, 219, 109, -1, 220,
702 -1, 219, 113, 220, -1, 120, 221, -1, 120, 118,
703 221, -1, 237, -1, 221, 118, 237, -1, -1, 223,
704 -1, 74, -1, 38, 183, -1, 108, 109, -1, 108,
705 225, 109, -1, 226, -1, 225, 113, 226, -1, 237,
706 -1, 237, 110, 227, 111, -1, 237, 110, 186, 111,
707 -1, 227, -1, 107, -1, 10, -1, 11, -1, 227,
708 -1, 12, -1, -1, 230, -1, 231, 233, -1, 115,
709 232, 10, 116, -1, -1, 94, -1, 24, -1, 80,
710 -1, -1, 57, -1, 46, -1, 15, -1, 16, -1,
711 16, -1, -1, 237, -1, 9, -1
vlm1aeaddd2006-07-13 08:24:20 +0000712};
713
714/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
715static const unsigned short yyrline[] =
716{
vlm43c8ac52006-09-17 04:52:50 +0000717 0, 349, 349, 355, 361, 378, 377, 406, 408, 411,
718 415, 420, 427, 435, 440, 444, 453, 455, 463, 467,
719 475, 479, 482, 485, 489, 509, 511, 519, 528, 532,
720 547, 555, 568, 576, 575, 589, 601, 603, 605, 616,
721 621, 627, 633, 635, 638, 649, 655, 661, 668, 674,
722 683, 685, 696, 700, 703, 710, 716, 722, 729, 735,
723 744, 746, 756, 770, 780, 796, 806, 822, 828, 835,
724 845, 855, 860, 867, 874, 882, 892, 898, 904, 908,
725 916, 927, 949, 951, 953, 959, 965, 973, 979, 986,
726 991, 997, 1003, 1009, 1012, 1018, 1028, 1030, 1033, 1041,
727 1048, 1061, 1072, 1082, 1093, 1103, 1114, 1125, 1127, 1134,
728 1132, 1141, 1146, 1152, 1157, 1160, 1164, 1169, 1178, 1187,
729 1198, 1220, 1227, 1246, 1250, 1256, 1262, 1268, 1278, 1288,
730 1294, 1305, 1319, 1328, 1338, 1348, 1358, 1366, 1387, 1396,
731 1405, 1407, 1414, 1421, 1427, 1431, 1437, 1457, 1467, 1469,
732 1470, 1477, 1477, 1482, 1489, 1495, 1500, 1504, 1508, 1511,
733 1516, 1528, 1545, 1550, 1555, 1588, 1598, 1612, 1614, 1615,
734 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625,
735 1631, 1633, 1634, 1637, 1644, 1656, 1658, 1662, 1666, 1667,
736 1668, 1669, 1670, 1674, 1675, 1676, 1677, 1681, 1682, 1689,
737 1689, 1690, 1690, 1691, 1693, 1695, 1700, 1702, 1707, 1711,
738 1720, 1724, 1729, 1734, 1737, 1743, 1753, 1757, 1760, 1763,
739 1766, 1771, 1780, 1788, 1794, 1800, 1807, 1815, 1823, 1832,
740 1837, 1841, 1846, 1852, 1857, 1858, 1859, 1872, 1886, 1890,
741 1895, 1899, 1904, 1911, 1924, 1926, 1929, 1933, 1936, 1943,
742 1945, 1946, 1951, 1949, 1961, 1969, 1971, 1972, 1973, 1975,
743 1979, 1987, 2002, 2008, 2015, 2028, 2040, 2055, 2059, 2076,
744 2081, 2084, 2089, 2111, 2116, 2121, 2127, 2133, 2141, 2149,
745 2157, 2164, 2174, 2179, 2185, 2187, 2217, 2219, 2222, 2229,
746 2235, 2237, 2238, 2239, 2242, 2244, 2245, 2248, 2253, 2260,
747 2267, 2269, 2274
vlm1aeaddd2006-07-13 08:24:20 +0000748};
749#endif
750
751#if YYDEBUG || YYERROR_VERBOSE
752/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
753 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
754static const char *const yytname[] =
755{
756 "$end", "error", "$undefined", "TOK_PPEQ", "TOK_whitespace", "TOK_opaque",
757 "TOK_bstring", "TOK_cstring", "TOK_hstring", "TOK_identifier",
vlme745fcd2006-09-05 16:18:34 +0000758 "TOK_number", "TOK_number_negative", "TOK_realnumber", "TOK_tuple",
759 "TOK_quadruple", "TOK_typereference", "TOK_capitalreference",
760 "TOK_typefieldreference", "TOK_valuefieldreference", "TOK_Literal",
761 "TOK_ABSENT", "TOK_ABSTRACT_SYNTAX", "TOK_ALL", "TOK_ANY",
762 "TOK_APPLICATION", "TOK_AUTOMATIC", "TOK_BEGIN", "TOK_BIT",
763 "TOK_BMPString", "TOK_BOOLEAN", "TOK_BY", "TOK_CHARACTER", "TOK_CHOICE",
764 "TOK_CLASS", "TOK_COMPONENT", "TOK_COMPONENTS", "TOK_CONSTRAINED",
765 "TOK_CONTAINING", "TOK_DEFAULT", "TOK_DEFINITIONS", "TOK_DEFINED",
766 "TOK_EMBEDDED", "TOK_ENCODED", "TOK_ENCODING_CONTROL", "TOK_END",
767 "TOK_ENUMERATED", "TOK_EXPLICIT", "TOK_EXPORTS", "TOK_EXTENSIBILITY",
768 "TOK_EXTERNAL", "TOK_FALSE", "TOK_FROM", "TOK_GeneralizedTime",
769 "TOK_GeneralString", "TOK_GraphicString", "TOK_IA5String",
770 "TOK_IDENTIFIER", "TOK_IMPLICIT", "TOK_IMPLIED", "TOK_IMPORTS",
771 "TOK_INCLUDES", "TOK_INSTANCE", "TOK_INSTRUCTIONS", "TOK_INTEGER",
772 "TOK_ISO646String", "TOK_MAX", "TOK_MIN", "TOK_MINUS_INFINITY",
773 "TOK_NULL", "TOK_NumericString", "TOK_OBJECT", "TOK_ObjectDescriptor",
774 "TOK_OCTET", "TOK_OF", "TOK_OPTIONAL", "TOK_PATTERN", "TOK_PDV",
775 "TOK_PLUS_INFINITY", "TOK_PRESENT", "TOK_PrintableString",
776 "TOK_PRIVATE", "TOK_REAL", "TOK_RELATIVE_OID", "TOK_SEQUENCE",
777 "TOK_SET", "TOK_SIZE", "TOK_STRING", "TOK_SYNTAX", "TOK_T61String",
778 "TOK_TAGS", "TOK_TeletexString", "TOK_TRUE", "TOK_TYPE_IDENTIFIER",
779 "TOK_UNIQUE", "TOK_UNIVERSAL", "TOK_UniversalString", "TOK_UTCTime",
780 "TOK_UTF8String", "TOK_VideotexString", "TOK_VisibleString", "TOK_WITH",
781 "TOK_EXCEPT", "'^'", "TOK_INTERSECTION", "'|'", "TOK_UNION",
782 "TOK_TwoDots", "TOK_ThreeDots", "'{'", "'}'", "'('", "')'", "';'",
783 "','", "':'", "'['", "']'", "'!'", "'.'", "'<'", "'@'", "$accept",
vlm43c8ac52006-09-17 04:52:50 +0000784 "ParsedGrammar", "ModuleList", "ModuleDefinition", "@1",
vlme745fcd2006-09-05 16:18:34 +0000785 "optObjectIdentifier", "ObjectIdentifier", "ObjectIdentifierBody",
vlmd3420d32006-09-14 10:35:20 +0000786 "ObjectIdentifierElement", "optModuleDefinitionFlags",
787 "ModuleDefinitionFlags", "ModuleDefinitionFlag", "optModuleBody",
vlm43c8ac52006-09-17 04:52:50 +0000788 "ModuleBody", "AssignmentList", "Assignment", "@2", "optImports",
vlmd3420d32006-09-14 10:35:20 +0000789 "ImportsDefinition", "ImportsBundleSet", "AssignedIdentifier",
790 "ImportsBundle", "ImportsList", "ImportsElement", "optExports",
791 "ExportsDefinition", "ExportsBody", "ExportsElement", "ValueSet",
792 "ValueSetTypeAssignment", "DefinedType", "DataTypeReference",
793 "ParameterArgumentList", "ParameterArgumentName", "ActualParameterList",
794 "ActualParameter", "optComponentTypeLists", "ComponentTypeLists",
795 "ComponentType", "AlternativeTypeLists", "AlternativeType",
796 "ObjectClass", "optUnique", "FieldSpec", "ClassField", "optWithSyntax",
vlm43c8ac52006-09-17 04:52:50 +0000797 "WithSyntax", "@3", "WithSyntaxList", "WithSyntaxToken",
vlmd3420d32006-09-14 10:35:20 +0000798 "ExtensionAndException", "Type", "NSTD_IndirectMarker",
799 "TypeDeclaration", "TypeDeclarationSet", "ComplexTypeReference",
800 "ComplexTypeReferenceAmpList", "ComplexTypeReferenceElement",
801 "PrimitiveFieldReference", "FieldName", "DefinedObjectClass",
vlm43c8ac52006-09-17 04:52:50 +0000802 "ValueDefinition", "Value", "@4", "SimpleValue", "DefinedValue",
vlmd3420d32006-09-14 10:35:20 +0000803 "RestrictedCharacterStringValue", "Opaque", "BasicTypeId",
804 "BasicTypeId_UniverationCompatible", "BasicType", "BasicString",
vlm43c8ac52006-09-17 04:52:50 +0000805 "Union", "Intersection", "Except", "optConstraints", "Constraint",
806 "SubtypeConstraint", "SetOfConstraints", "ElementSetSpecs",
807 "ElementSetSpec", "ConstraintSubtypeElement", "ConstraintSpec",
808 "SingleValue", "ContainedSubtype", "InnerTypeConstraint",
809 "WithComponentsList", "WithComponentsElement", "optPresenceConstraint",
810 "PresenceConstraint", "GeneralConstraint", "UserDefinedConstraint",
811 "@5", "ContentsConstraint", "ConstraintRangeSpec", "TableConstraint",
vlm1aeaddd2006-07-13 08:24:20 +0000812 "SimpleTableConstraint", "ComponentRelationConstraint",
813 "AtNotationList", "AtNotationElement", "ComponentIdList", "optMarker",
814 "Marker", "UniverationDefinition", "UniverationList",
vlme745fcd2006-09-05 16:18:34 +0000815 "UniverationElement", "SignedNumber", "RealValue", "optTag", "Tag",
816 "TagTypeValue", "TagClass", "TagPlicit", "TypeRefName",
817 "ObjectClassReference", "optIdentifier", "Identifier", 0
vlm1aeaddd2006-07-13 08:24:20 +0000818};
819#endif
820
821# ifdef YYPRINT
822/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
823 token YYLEX-NUM. */
824static const unsigned short yytoknum[] =
825{
826 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
827 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
828 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
829 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
830 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
831 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
832 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
833 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
834 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
835 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
vlme745fcd2006-09-05 16:18:34 +0000836 355, 356, 94, 357, 124, 358, 359, 360, 123, 125,
837 40, 41, 59, 44, 58, 91, 93, 33, 46, 60,
838 64
vlm1aeaddd2006-07-13 08:24:20 +0000839};
840# endif
841
842/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
843static const unsigned char yyr1[] =
844{
vlm43c8ac52006-09-17 04:52:50 +0000845 0, 121, 122, 123, 123, 125, 124, 126, 126, 127,
846 127, 128, 128, 129, 129, 129, 130, 130, 131, 131,
847 132, 132, 132, 132, 132, 133, 133, 134, 135, 135,
848 136, 136, 136, 137, 136, 136, 138, 138, 139, 139,
849 140, 140, 141, 141, 142, 143, 143, 144, 144, 144,
850 145, 145, 146, 146, 146, 147, 147, 148, 148, 148,
851 149, 150, 151, 151, 151, 152, 152, 152, 152, 153,
852 153, 154, 154, 154, 154, 154, 155, 155, 156, 156,
853 156, 156, 157, 157, 158, 158, 159, 159, 159, 159,
854 160, 160, 161, 161, 161, 162, 163, 163, 164, 164,
855 165, 165, 165, 165, 165, 165, 165, 166, 166, 168,
856 167, 169, 169, 170, 170, 170, 170, 171, 171, 171,
857 172, 173, 174, 175, 175, 175, 175, 175, 175, 175,
858 175, 175, 176, 176, 176, 176, 176, 176, 177, 177,
859 178, 179, 179, 180, 180, 180, 181, 182, 183, 183,
860 183, 184, 183, 183, 185, 185, 185, 185, 185, 185,
861 186, 186, 187, 187, 187, 188, 188, 189, 189, 189,
862 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
863 190, 190, 190, 191, 191, 192, 192, 192, 192, 192,
864 192, 192, 192, 192, 192, 192, 192, 192, 192, 193,
865 193, 194, 194, 195, 196, 196, 197, 197, 198, 198,
866 199, 199, 200, 200, 200, 200, 201, 201, 201, 201,
867 201, 202, 202, 202, 202, 202, 202, 202, 202, 202,
868 203, 203, 204, 204, 204, 204, 204, 205, 206, 206,
869 207, 207, 208, 208, 209, 209, 210, 210, 210, 211,
870 211, 211, 213, 212, 214, 215, 215, 215, 215, 216,
871 216, 217, 218, 219, 219, 220, 220, 221, 221, 222,
872 222, 223, 223, 224, 224, 225, 225, 226, 226, 226,
873 226, 226, 227, 227, 228, 228, 229, 229, 230, 231,
874 232, 232, 232, 232, 233, 233, 233, 234, 234, 235,
875 236, 236, 237
vlm1aeaddd2006-07-13 08:24:20 +0000876};
877
878/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
879static const unsigned char yyr2[] =
880{
vlm43c8ac52006-09-17 04:52:50 +0000881 0, 2, 1, 1, 2, 0, 9, 0, 1, 3,
882 2, 1, 2, 1, 4, 1, 0, 1, 1, 2,
883 2, 2, 2, 2, 2, 0, 1, 3, 1, 2,
884 1, 1, 1, 0, 3, 1, 0, 1, 3, 2,
885 1, 2, 0, 1, 4, 1, 3, 1, 3, 1,
886 0, 1, 3, 3, 2, 1, 3, 1, 3, 1,
887 3, 4, 1, 1, 4, 3, 3, 6, 6, 1,
888 3, 1, 3, 3, 3, 3, 1, 3, 1, 1,
889 1, 1, 0, 1, 1, 3, 3, 2, 3, 1,
890 1, 3, 2, 1, 1, 5, 0, 1, 1, 3,
891 2, 4, 3, 3, 3, 3, 3, 0, 1, 0,
892 6, 1, 2, 1, 1, 1, 3, 1, 3, 3,
893 3, 0, 2, 1, 4, 4, 4, 6, 6, 1,
894 4, 3, 1, 3, 3, 3, 1, 3, 1, 3,
895 1, 1, 1, 1, 3, 3, 1, 4, 1, 1,
896 3, 0, 3, 1, 1, 1, 1, 1, 1, 1,
897 1, 3, 1, 1, 1, 1, 2, 1, 1, 1,
898 1, 2, 2, 1, 1, 2, 2, 1, 1, 1,
899 1, 1, 2, 1, 2, 1, 1, 1, 1, 1,
vlm1aeaddd2006-07-13 08:24:20 +0000900 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
vlm43c8ac52006-09-17 04:52:50 +0000901 1, 1, 1, 1, 0, 1, 1, 3, 1, 4,
902 3, 4, 1, 1, 3, 5, 1, 3, 3, 3,
903 3, 4, 3, 1, 1, 3, 3, 3, 3, 1,
904 1, 1, 1, 1, 1, 1, 1, 1, 3, 5,
905 1, 3, 1, 3, 0, 1, 1, 1, 1, 1,
906 1, 1, 0, 5, 2, 1, 2, 2, 3, 1,
907 1, 3, 4, 1, 3, 2, 3, 1, 3, 0,
908 1, 1, 2, 2, 3, 1, 3, 1, 4, 4,
909 1, 1, 1, 1, 1, 1, 0, 1, 2, 4,
910 0, 1, 1, 1, 0, 1, 1, 1, 1, 1,
911 0, 1, 1
vlm1aeaddd2006-07-13 08:24:20 +0000912};
913
914/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
915 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
916 means the default is an error. */
917static const unsigned short yydefact[] =
918{
vlm43c8ac52006-09-17 04:52:50 +0000919 0, 297, 298, 0, 2, 3, 5, 1, 4, 7,
920 0, 0, 8, 302, 15, 10, 0, 11, 13, 16,
921 9, 12, 0, 0, 0, 0, 0, 0, 0, 17,
922 18, 0, 24, 22, 20, 23, 21, 0, 19, 14,
923 50, 0, 0, 26, 36, 51, 0, 54, 0, 55,
924 57, 59, 6, 0, 0, 37, 53, 52, 0, 0,
925 39, 0, 40, 0, 45, 47, 49, 185, 0, 186,
926 187, 188, 189, 190, 198, 191, 192, 193, 194, 195,
927 196, 197, 27, 28, 32, 30, 31, 35, 0, 0,
928 56, 58, 38, 41, 0, 0, 0, 33, 29, 286,
929 132, 299, 0, 167, 0, 0, 181, 174, 178, 180,
930 168, 0, 0, 169, 173, 177, 0, 0, 63, 183,
931 170, 62, 179, 136, 0, 42, 46, 48, 34, 0,
932 290, 66, 65, 121, 287, 294, 0, 182, 176, 175,
933 172, 171, 0, 69, 0, 170, 71, 0, 286, 0,
934 184, 0, 0, 43, 44, 0, 292, 293, 291, 0,
935 0, 204, 296, 295, 288, 133, 135, 0, 0, 0,
936 0, 0, 61, 156, 162, 157, 282, 283, 163, 164,
937 154, 155, 81, 0, 76, 78, 79, 158, 159, 80,
938 281, 273, 0, 275, 280, 277, 141, 142, 137, 138,
939 140, 134, 153, 151, 147, 148, 149, 0, 160, 286,
940 286, 0, 98, 0, 129, 0, 0, 204, 204, 123,
941 122, 0, 0, 120, 205, 206, 208, 286, 70, 75,
942 74, 73, 72, 285, 0, 232, 231, 0, 230, 233,
943 0, 212, 0, 235, 0, 213, 216, 0, 223, 224,
944 229, 284, 234, 237, 236, 64, 286, 274, 0, 0,
945 0, 0, 0, 0, 146, 143, 0, 271, 269, 269,
946 269, 100, 270, 96, 269, 269, 107, 0, 289, 0,
947 286, 0, 286, 0, 286, 0, 0, 0, 286, 0,
948 0, 0, 249, 251, 250, 259, 260, 0, 68, 67,
949 0, 255, 0, 0, 0, 0, 0, 60, 201, 202,
950 199, 200, 0, 0, 0, 203, 0, 0, 0, 77,
951 276, 0, 0, 160, 139, 165, 152, 161, 150, 272,
952 105, 0, 104, 106, 97, 269, 102, 103, 0, 95,
953 108, 99, 0, 117, 0, 90, 93, 94, 286, 131,
954 0, 0, 83, 84, 89, 269, 286, 300, 0, 300,
955 0, 0, 254, 0, 210, 207, 0, 0, 217, 256,
956 257, 228, 226, 0, 238, 0, 222, 214, 218, 219,
957 220, 0, 227, 225, 279, 278, 166, 144, 145, 101,
958 0, 130, 0, 124, 286, 92, 286, 125, 286, 87,
959 269, 286, 301, 126, 286, 209, 252, 261, 0, 0,
960 263, 211, 258, 242, 0, 240, 204, 0, 221, 109,
961 118, 119, 91, 88, 85, 86, 121, 121, 0, 0,
962 265, 267, 262, 0, 239, 0, 244, 215, 0, 127,
963 128, 253, 266, 0, 264, 241, 247, 248, 246, 243,
964 245, 113, 114, 0, 0, 111, 115, 268, 0, 110,
965 112, 116
vlm1aeaddd2006-07-13 08:24:20 +0000966};
967
968/* YYDEFGOTO[NTERM-NUM]. */
969static const short yydefgoto[] =
970{
vlm43c8ac52006-09-17 04:52:50 +0000971 -1, 3, 4, 5, 9, 11, 12, 16, 17, 28,
972 29, 30, 42, 43, 82, 83, 128, 54, 55, 61,
973 154, 62, 63, 64, 44, 45, 48, 49, 182, 84,
974 117, 85, 142, 143, 183, 184, 351, 352, 353, 344,
975 345, 131, 335, 211, 212, 339, 340, 438, 454, 455,
976 354, 355, 160, 161, 220, 118, 198, 199, 456, 269,
977 270, 86, 204, 261, 205, 206, 243, 326, 119, 120,
978 121, 122, 313, 314, 316, 223, 224, 225, 226, 290,
979 245, 246, 247, 248, 249, 250, 414, 415, 449, 450,
980 291, 292, 428, 293, 303, 294, 295, 296, 409, 410,
981 430, 271, 272, 150, 192, 193, 251, 252, 133, 134,
982 135, 159, 164, 253, 123, 401, 254
vlm1aeaddd2006-07-13 08:24:20 +0000983};
984
985/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
986 STATE-NUM. */
vlm43c8ac52006-09-17 04:52:50 +0000987#define YYPACT_NINF -345
vlm1aeaddd2006-07-13 08:24:20 +0000988static const short yypact[] =
989{
vlm43c8ac52006-09-17 04:52:50 +0000990 179, -345, -345, 94, 179, -345, -345, -345, -345, -87,
991 25, 118, -345, -345, -345, -345, 64, -345, 37, 234,
992 -345, -345, 106, 123, 107, 113, 164, 165, 260, 234,
993 -345, 157, -345, -345, -345, -345, -345, 247, -345, -345,
994 177, 60, 235, -345, 239, -345, 175, -345, -72, -345,
995 198, -345, -345, 147, 506, -345, -345, -345, 246, 199,
996 -345, 21, -345, 100, -345, 205, -345, -345, 299, -345,
997 -345, -345, -345, -345, -345, -345, -345, -345, -345, -345,
998 -345, -345, 506, -345, -345, -345, -345, -345, 273, 659,
999 -345, -345, -345, -345, 179, 246, 212, -345, -345, 16,
1000 242, -345, 237, -345, 254, 270, -345, -345, -345, -345,
1001 -345, 306, 278, -345, -345, -345, 735, 376, 272, -345,
1002 275, -345, -345, 267, 383, -87, -345, -345, -345, 281,
1003 87, -345, -345, -345, -345, 14, 246, -345, -345, -345,
1004 -345, -345, 36, -345, 276, -345, 277, 284, 91, 77,
1005 -345, 341, 201, -345, -345, 214, -345, -345, -345, 377,
1006 583, 108, -345, -345, -345, -345, -345, 391, 735, 246,
1007 246, 435, -345, -345, -345, -345, -345, -345, -345, -345,
1008 -345, -345, -345, 134, -345, -345, -345, -345, -345, -345,
1009 -345, -345, 186, -345, -345, 285, -345, -345, 289, -345,
1010 -345, -345, -345, -345, -345, -345, -345, 290, 282, 162,
1011 76, 211, -345, 293, 370, 303, 340, -52, 95, -345,
1012 -345, 304, 390, -345, -345, -345, 305, 16, -345, -345,
1013 -345, -345, -345, -345, 315, -345, -345, 114, -345, -345,
1014 210, -345, 435, -345, 308, 181, 317, 310, 114, -345,
1015 -345, -345, -345, -345, -345, -345, 91, -345, 97, 301,
1016 279, 416, 413, 201, -345, -345, 201, -345, -13, 74,
1017 -13, -345, -345, 330, 74, -13, 324, 214, -345, 398,
1018 61, 323, 68, 356, 68, 357, 435, 401, 319, 179,
1019 321, 325, -345, -345, -345, 327, -345, 435, -345, -345,
1020 497, 318, 332, 216, 329, 335, 342, -345, -345, -345,
1021 -345, -345, 345, 497, 497, -345, 497, 435, 228, -345,
1022 -345, 343, 344, -345, -345, -345, 453, -345, -345, -345,
1023 -345, 349, -345, -345, -345, -13, -345, -345, 373, -345,
1024 -345, -345, 413, 352, 220, -345, -345, -345, 319, -345,
1025 397, 362, 359, -345, -345, -13, 319, 413, 364, 413,
1026 365, 369, -345, 371, -345, -345, 358, 368, -345, -345,
1027 363, -345, -345, 435, 305, 8, -345, 374, -345, -345,
1028 -345, 372, -345, -345, -345, -345, -345, -345, -345, -345,
1029 380, -345, 301, -345, 61, -345, 319, -345, 43, -345,
1030 -13, 319, -345, -345, 319, -345, -345, -345, -5, 221,
1031 -345, -345, -345, -345, 222, -345, 108, 452, -345, -345,
1032 -345, -345, -345, -345, -345, -345, -345, -345, 416, 413,
1033 366, -345, -345, 358, -345, 8, 6, 271, 49, -345,
1034 -345, 453, 366, 413, -345, -345, -345, -345, -345, -345,
1035 -345, -345, -345, 49, 46, -345, -345, -345, 28, -345,
1036 -345, -345
vlm1aeaddd2006-07-13 08:24:20 +00001037};
1038
1039/* YYPGOTO[NTERM-NUM]. */
1040static const short yypgoto[] =
1041{
vlm43c8ac52006-09-17 04:52:50 +00001042 -345, -345, -345, 485, -345, -345, 367, -345, 475, -345,
1043 -345, 464, -345, -345, -345, 412, -345, -345, -345, -345,
1044 -345, 434, -345, 404, -345, -345, -345, 438, 378, -345,
1045 -79, -345, -345, 337, -345, 258, 232, -345, 119, -345,
1046 125, 296, -345, -345, 250, -345, -345, -345, 71, -344,
1047 -271, -91, -345, -49, -345, 248, -345, 268, -132, 320,
1048 322, -345, 85, -345, -135, -252, -136, 103, -89, -78,
1049 -345, -43, -345, -345, -345, -215, -345, -345, 229, -151,
1050 121, -126, -345, -84, -345, -345, -345, 101, -345, -345,
1051 -345, -345, -345, -345, 291, -345, -345, -345, -345, 111,
1052 112, -246, -345, -345, -345, 288, -134, -345, -51, -345,
1053 -345, -345, -345, 1, -345, 191, -10
vlm1aeaddd2006-07-13 08:24:20 +00001054};
1055
1056/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
1057 positive, shift that token. If negative, reduce the rule which
1058 number is the opposite. If zero, do what YYDEFACT says.
1059 If YYTABLE_NINF, parse error. */
vlm43c8ac52006-09-17 04:52:50 +00001060#define YYTABLE_NINF -270
vlm1aeaddd2006-07-13 08:24:20 +00001061static const short yytable[] =
1062{
vlm43c8ac52006-09-17 04:52:50 +00001063 18, 6, 283, 285, 13, 6, 18, 321, 132, 346,
1064 124, 87, 187, 186, 188, 194, 187, 13, 188, 200,
1065 244, 10, 330, 332, 333, 266, 446, 144, 336, 337,
1066 13, 51, 451, 221, 13, 14, 1, 2, 145, 87,
1067 57, 58, 50, 66, 89, 196, 197, 452, 51, 129,
1068 451, 66, 13, 451, 65, 88, 282, 185, 222, 50,
1069 162, 267, 65, 196, 197, 452, 196, 197, 452, 13,
1070 13, 163, 89, 13, 14, 1, 2, 13, 350, 144,
1071 447, 219, 46, 88, 448, 66, 13, 176, 177, 389,
1072 145, 306, 264, 265, 7, 125, 65, 173, 174, 175,
1073 13, 176, 177, 350, 178, 179, 13, 176, 177, 399,
1074 460, 156, 266, 429, 460, 413, 31, 146, 268, 273,
1075 187, 186, 188, 346, 194, 322, 166, 187, 200, 188,
1076 187, 130, 188, 92, 15, 360, 299, 165, 189, 195,
1077 420, 180, 208, 453, 461, 167, 367, 22, 267, 168,
1078 343, 94, 201, 207, 425, 459, 13, 19, 130, 230,
1079 232, 453, 1, 2, 453, 185, 381, 157, 343, 146,
1080 229, 231, 47, 20, 368, 343, 130, -82, 264, 265,
1081 221, 158, 181, 130, 190, 32, 191, 378, 379, 347,
1082 380, 130, 331, 221, 1, 2, 33, 362, 60, 171,
1083 266, 436, 34, 284, 190, 222, 130, 173, 174, 175,
1084 13, 176, 177, 95, 178, 179, 1, 2, 222, 372,
1085 301, -25, 35, 174, 41, 13, 176, 177, 233, 178,
1086 179, 209, 210, 302, 383, 174, 267, 13, 176, 177,
1087 233, 178, 179, 255, 304, 305, 189, 256, 195, 323,
1088 23, 180, 327, 208, 36, 13, 208, 395, 421, 24,
1089 207, 1, 2, 37, 207, 400, 235, 207, 39, 202,
1090 348, -269, 356, 40, 356, -269, 99, 130, 235, 52,
1091 25, 371, 26, 308, 309, 310, 311, 56, 100, 101,
1092 363, 27, 181, 382, 312, 257, 196, 197, 53, 258,
1093 102, 67, 103, 347, 104, 423, 59, 239, 91, 203,
1094 13, 176, 177, 96, 105, 97, 1, 2, 106, 239,
1095 276, 127, 107, 137, 277, 108, 69, 70, 71, 393,
1096 432, 434, 391, 394, 433, 435, 109, 72, 100, 101,
1097 138, 110, 73, 111, 74, 112, 139, 402, 328, 402,
1098 426, 329, 75, 427, 113, 114, 1, 2, 196, 197,
1099 136, 76, 140, 77, 141, 416, 387, 388, 78, 115,
1100 79, 80, 81, 308, 309, 310, 311, 439, 440, 147,
1101 148, 116, 323, 149, 348, 151, 152, 213, 356, 155,
1102 169, 170, 171, 207, 227, 259, 263, 174, 431, 13,
1103 176, 177, 233, 178, 179, 1, 2, 260, 262, 278,
1104 279, 280, 234, 281, 286, 297, 300, 307, 315, 431,
1105 317, 325, 13, 334, 338, 416, 287, 288, 342, 357,
1106 359, 361, 364, 457, 130, 366, 365, 369, 370, 373,
1107 235, 236, 174, 375, 13, 176, 177, 233, 178, 179,
1108 1, 2, 377, 376, 384, 385, 237, 234, 386, 174,
1109 390, 13, 176, 177, 233, 178, 179, 1, 2, 392,
1110 396, 397, 398, 403, 234, 238, 405, 406, 408, 411,
1111 407, 239, 412, 418, 443, 235, 236, 417, 419, 8,
1112 240, 21, 153, 38, 98, 93, 90, 241, 289, 126,
1113 242, 237, 235, 236, 174, 228, 13, 176, 177, 233,
1114 178, 179, 1, 2, 319, 13, 358, 424, 237, 422,
1115 238, 1, 2, 298, 458, 172, 239, 341, 324, 349,
1116 274, 441, 275, 374, 67, 240, 445, 238, 437, 318,
1117 0, 442, 241, 239, 444, 242, 320, 235, 236, 68,
1118 404, 0, 240, 0, 0, 0, 0, 0, 0, 69,
1119 70, 71, 242, 237, 0, 0, 0, 0, 0, 0,
1120 72, 0, 0, 0, 0, 73, 0, 74, 0, 0,
1121 0, 0, 238, 0, 0, 75, 0, 0, 239, 0,
1122 0, 0, 0, 0, 76, 0, 77, 240, 100, 101,
1123 0, 78, 0, 79, 80, 81, 214, 242, 0, 0,
1124 102, 67, 103, 0, 104, 215, 0, 0, 0, 0,
1125 0, 0, 0, 0, 105, 0, 0, 0, 106, 0,
1126 0, 0, 107, 0, 0, 108, 69, 70, 71, 0,
1127 0, 0, 0, 0, 216, 0, 109, 72, 0, 0,
1128 0, 110, 73, 111, 74, 112, 0, 0, 0, 0,
1129 0, 0, 75, 0, 113, 114, 217, 218, 0, 0,
1130 0, 76, 0, 77, 100, 101, 0, 0, 78, 115,
1131 79, 80, 81, 0, 0, 0, 102, 67, 103, 0,
1132 104, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1133 105, 0, 0, 0, 106, 0, 0, 0, 107, 0,
1134 0, 108, 69, 70, 71, 0, 0, 0, 0, 0,
1135 0, 0, 109, 72, 0, 0, 0, 110, 73, 111,
1136 74, 112, 0, 0, 0, 0, 0, 0, 75, 0,
1137 113, 114, 0, 0, 0, 0, 0, 76, 0, 77,
1138 1, 2, 0, 0, 78, 115, 79, 80, 81, 0,
1139 0, 0, 102, 67, 103, 0, 104, 0, 0, 0,
1140 0, 0, 0, 0, 0, 0, 105, 0, 0, 0,
1141 106, 0, 0, 0, 107, 0, 0, 108, 69, 70,
1142 71, 0, 0, 0, 0, 0, 0, 0, 109, 72,
1143 0, 0, 0, 110, 73, 111, 74, 112, 0, 0,
1144 0, 0, 0, 0, 75, 0, 113, 114, 0, 0,
1145 0, 0, 0, 76, 0, 77, 0, 0, 0, 0,
1146 78, 115, 79, 80, 81
vlm1aeaddd2006-07-13 08:24:20 +00001147};
1148
1149static const short yycheck[] =
1150{
vlm43c8ac52006-09-17 04:52:50 +00001151 10, 0, 217, 218, 9, 4, 16, 259, 99, 280,
1152 89, 54, 148, 148, 148, 149, 152, 9, 152, 151,
1153 171, 108, 268, 269, 270, 38, 20, 116, 274, 275,
1154 9, 41, 4, 85, 9, 10, 15, 16, 116, 82,
1155 112, 113, 41, 53, 54, 17, 18, 19, 58, 33,
1156 4, 61, 9, 4, 53, 54, 108, 148, 110, 58,
1157 46, 74, 61, 17, 18, 19, 17, 18, 19, 9,
1158 9, 57, 82, 9, 10, 15, 16, 9, 35, 168,
1159 74, 160, 22, 82, 78, 95, 9, 10, 11, 335,
1160 168, 242, 16, 17, 0, 94, 95, 6, 7, 8,
1161 9, 10, 11, 35, 13, 14, 9, 10, 11, 355,
1162 454, 24, 38, 118, 458, 107, 10, 116, 209, 210,
1163 256, 256, 256, 394, 258, 259, 136, 263, 260, 263,
1164 266, 115, 266, 112, 109, 286, 227, 136, 148, 149,
1165 392, 50, 152, 115, 116, 109, 297, 110, 74, 113,
1166 107, 51, 151, 152, 400, 109, 9, 39, 115, 169,
1167 170, 115, 15, 16, 115, 256, 317, 80, 107, 168,
1168 169, 170, 112, 109, 300, 107, 115, 109, 16, 17,
1169 85, 94, 91, 115, 107, 62, 109, 313, 314, 280,
1170 316, 115, 118, 85, 15, 16, 89, 288, 51, 108,
1171 38, 416, 89, 108, 107, 110, 115, 6, 7, 8,
1172 9, 10, 11, 113, 13, 14, 15, 16, 110, 303,
1173 106, 44, 58, 7, 47, 9, 10, 11, 12, 13,
1174 14, 17, 18, 119, 318, 7, 74, 9, 10, 11,
1175 12, 13, 14, 109, 34, 35, 256, 113, 258, 259,
1176 16, 50, 262, 263, 89, 9, 266, 348, 392, 25,
1177 259, 15, 16, 3, 263, 356, 50, 266, 111, 68,
1178 280, 109, 282, 26, 284, 113, 3, 115, 50, 44,
1179 46, 65, 48, 102, 103, 104, 105, 112, 15, 16,
1180 289, 57, 91, 65, 113, 109, 17, 18, 59, 113,
1181 27, 28, 29, 394, 31, 396, 108, 91, 109, 108,
1182 9, 10, 11, 108, 41, 16, 15, 16, 45, 91,
1183 109, 109, 49, 86, 113, 52, 53, 54, 55, 109,
1184 109, 109, 342, 113, 113, 113, 63, 64, 15, 16,
1185 86, 68, 69, 70, 71, 72, 76, 357, 263, 359,
1186 401, 266, 79, 404, 81, 82, 15, 16, 17, 18,
1187 118, 88, 56, 90, 86, 375, 17, 18, 95, 96,
1188 97, 98, 99, 102, 103, 104, 105, 426, 427, 3,
1189 108, 108, 392, 108, 394, 118, 3, 10, 398, 108,
1190 114, 114, 108, 392, 3, 110, 114, 7, 408, 9,
1191 10, 11, 12, 13, 14, 15, 16, 118, 118, 116,
1192 40, 108, 22, 73, 110, 110, 101, 109, 101, 429,
1193 110, 5, 9, 93, 100, 435, 36, 37, 30, 73,
1194 73, 30, 111, 443, 115, 108, 111, 119, 106, 110,
1195 50, 51, 7, 108, 9, 10, 11, 12, 13, 14,
1196 15, 16, 107, 111, 111, 111, 66, 22, 5, 7,
1197 87, 9, 10, 11, 12, 13, 14, 15, 16, 117,
1198 73, 109, 113, 109, 22, 85, 111, 108, 120, 111,
1199 109, 91, 119, 111, 118, 50, 51, 113, 108, 4,
1200 100, 16, 125, 29, 82, 61, 58, 107, 108, 95,
1201 110, 66, 50, 51, 7, 168, 9, 10, 11, 12,
1202 13, 14, 15, 16, 256, 9, 284, 398, 66, 394,
1203 85, 15, 16, 227, 453, 147, 91, 277, 260, 281,
1204 210, 428, 210, 304, 28, 100, 435, 85, 417, 248,
1205 -1, 429, 107, 91, 433, 110, 258, 50, 51, 43,
1206 359, -1, 100, -1, -1, -1, -1, -1, -1, 53,
1207 54, 55, 110, 66, -1, -1, -1, -1, -1, -1,
1208 64, -1, -1, -1, -1, 69, -1, 71, -1, -1,
1209 -1, -1, 85, -1, -1, 79, -1, -1, 91, -1,
1210 -1, -1, -1, -1, 88, -1, 90, 100, 15, 16,
1211 -1, 95, -1, 97, 98, 99, 23, 110, -1, -1,
1212 27, 28, 29, -1, 31, 32, -1, -1, -1, -1,
1213 -1, -1, -1, -1, 41, -1, -1, -1, 45, -1,
1214 -1, -1, 49, -1, -1, 52, 53, 54, 55, -1,
1215 -1, -1, -1, -1, 61, -1, 63, 64, -1, -1,
1216 -1, 68, 69, 70, 71, 72, -1, -1, -1, -1,
1217 -1, -1, 79, -1, 81, 82, 83, 84, -1, -1,
1218 -1, 88, -1, 90, 15, 16, -1, -1, 95, 96,
1219 97, 98, 99, -1, -1, -1, 27, 28, 29, -1,
1220 31, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1221 41, -1, -1, -1, 45, -1, -1, -1, 49, -1,
1222 -1, 52, 53, 54, 55, -1, -1, -1, -1, -1,
1223 -1, -1, 63, 64, -1, -1, -1, 68, 69, 70,
1224 71, 72, -1, -1, -1, -1, -1, -1, 79, -1,
1225 81, 82, -1, -1, -1, -1, -1, 88, -1, 90,
1226 15, 16, -1, -1, 95, 96, 97, 98, 99, -1,
1227 -1, -1, 27, 28, 29, -1, 31, -1, -1, -1,
1228 -1, -1, -1, -1, -1, -1, 41, -1, -1, -1,
vlmd3420d32006-09-14 10:35:20 +00001229 45, -1, -1, -1, 49, -1, -1, 52, 53, 54,
vlm43c8ac52006-09-17 04:52:50 +00001230 55, -1, -1, -1, -1, -1, -1, -1, 63, 64,
vlmd3420d32006-09-14 10:35:20 +00001231 -1, -1, -1, 68, 69, 70, 71, 72, -1, -1,
vlm43c8ac52006-09-17 04:52:50 +00001232 -1, -1, -1, -1, 79, -1, 81, 82, -1, -1,
1233 -1, -1, -1, 88, -1, 90, -1, -1, -1, -1,
1234 95, 96, 97, 98, 99
vlm1aeaddd2006-07-13 08:24:20 +00001235};
1236
1237/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1238 symbol of state STATE-NUM. */
1239static const unsigned char yystos[] =
1240{
vlm43c8ac52006-09-17 04:52:50 +00001241 0, 15, 16, 122, 123, 124, 234, 0, 124, 125,
1242 108, 126, 127, 9, 10, 109, 128, 129, 237, 39,
1243 109, 129, 110, 16, 25, 46, 48, 57, 130, 131,
1244 132, 10, 62, 89, 89, 58, 89, 3, 132, 111,
1245 26, 47, 133, 134, 145, 146, 22, 112, 147, 148,
1246 234, 237, 44, 59, 138, 139, 112, 112, 113, 108,
1247 51, 140, 142, 143, 144, 234, 237, 28, 43, 53,
1248 54, 55, 64, 69, 71, 79, 88, 90, 95, 97,
1249 98, 99, 135, 136, 150, 152, 182, 192, 234, 237,
1250 148, 109, 112, 142, 51, 113, 108, 16, 136, 3,
1251 15, 16, 27, 29, 31, 41, 45, 49, 52, 63,
1252 68, 70, 72, 81, 82, 96, 108, 151, 176, 189,
1253 190, 191, 192, 235, 151, 234, 144, 109, 137, 33,
1254 115, 162, 172, 229, 230, 231, 118, 86, 86, 76,
1255 56, 86, 153, 154, 189, 190, 234, 3, 108, 108,
1256 224, 118, 3, 127, 141, 108, 24, 80, 94, 232,
1257 173, 174, 46, 57, 233, 234, 237, 109, 113, 114,
1258 114, 108, 149, 6, 7, 8, 10, 11, 13, 14,
1259 50, 91, 149, 155, 156, 172, 185, 187, 227, 237,
1260 107, 109, 225, 226, 227, 237, 17, 18, 177, 178,
1261 179, 234, 68, 108, 183, 185, 186, 234, 237, 17,
1262 18, 164, 165, 10, 23, 32, 61, 83, 84, 151,
1263 175, 85, 110, 196, 197, 198, 199, 3, 154, 234,
1264 237, 234, 237, 12, 22, 50, 51, 66, 85, 91,
1265 100, 107, 110, 187, 200, 201, 202, 203, 204, 205,
1266 206, 227, 228, 234, 237, 109, 113, 109, 113, 110,
1267 118, 184, 118, 114, 16, 17, 38, 74, 172, 180,
1268 181, 222, 223, 172, 180, 181, 109, 113, 116, 40,
1269 108, 73, 108, 196, 108, 196, 110, 36, 37, 108,
1270 200, 211, 212, 214, 216, 217, 218, 110, 162, 172,
1271 101, 106, 119, 215, 34, 35, 200, 109, 102, 103,
1272 104, 105, 113, 193, 194, 101, 195, 110, 215, 156,
1273 226, 186, 227, 237, 178, 5, 188, 237, 183, 183,
1274 222, 118, 222, 222, 93, 163, 222, 222, 100, 166,
1275 167, 165, 30, 107, 160, 161, 171, 172, 237, 176,
1276 35, 157, 158, 159, 171, 172, 237, 73, 157, 73,
1277 200, 30, 172, 234, 111, 111, 108, 200, 202, 119,
1278 106, 65, 204, 110, 199, 108, 111, 107, 202, 202,
1279 202, 200, 65, 204, 111, 111, 5, 17, 18, 222,
1280 87, 237, 117, 109, 113, 172, 73, 109, 113, 222,
1281 172, 236, 237, 109, 236, 111, 108, 109, 120, 219,
1282 220, 111, 119, 107, 207, 208, 237, 113, 111, 108,
1283 186, 227, 161, 172, 159, 222, 229, 229, 213, 118,
1284 221, 237, 109, 113, 109, 113, 196, 201, 168, 174,
1285 174, 188, 221, 118, 220, 208, 20, 74, 78, 209,
1286 210, 4, 19, 115, 169, 170, 179, 237, 169, 109,
1287 170, 116
vlm1aeaddd2006-07-13 08:24:20 +00001288};
1289
1290#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1291# define YYSIZE_T __SIZE_TYPE__
1292#endif
1293#if ! defined (YYSIZE_T) && defined (size_t)
1294# define YYSIZE_T size_t
1295#endif
1296#if ! defined (YYSIZE_T)
1297# if defined (__STDC__) || defined (__cplusplus)
1298# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1299# define YYSIZE_T size_t
1300# endif
1301#endif
1302#if ! defined (YYSIZE_T)
1303# define YYSIZE_T unsigned int
1304#endif
vlmfa67ddc2004-06-03 03:38:44 +00001305
1306#define yyerrok (yyerrstatus = 0)
1307#define yyclearin (yychar = YYEMPTY)
vlm0c6d3812006-03-21 03:40:38 +00001308#define YYEMPTY -2
vlmfa67ddc2004-06-03 03:38:44 +00001309#define YYEOF 0
vlm1aeaddd2006-07-13 08:24:20 +00001310
vlmfa67ddc2004-06-03 03:38:44 +00001311#define YYACCEPT goto yyacceptlab
vlm1aeaddd2006-07-13 08:24:20 +00001312#define YYABORT goto yyabortlab
vlm0c6d3812006-03-21 03:40:38 +00001313#define YYERROR goto yyerrlab1
vlm1aeaddd2006-07-13 08:24:20 +00001314
1315/* Like YYERROR except do call yyerror. This remains here temporarily
1316 to ease the transition to the new meaning of YYERROR, for GCC.
vlmfa67ddc2004-06-03 03:38:44 +00001317 Once GCC version 2 has supplanted version 1, this can go. */
vlm1aeaddd2006-07-13 08:24:20 +00001318
vlmfa67ddc2004-06-03 03:38:44 +00001319#define YYFAIL goto yyerrlab
vlm1aeaddd2006-07-13 08:24:20 +00001320
vlmfa67ddc2004-06-03 03:38:44 +00001321#define YYRECOVERING() (!!yyerrstatus)
vlm1aeaddd2006-07-13 08:24:20 +00001322
1323#define YYBACKUP(Token, Value) \
vlmfa67ddc2004-06-03 03:38:44 +00001324do \
1325 if (yychar == YYEMPTY && yylen == 1) \
vlm1aeaddd2006-07-13 08:24:20 +00001326 { \
1327 yychar = (Token); \
1328 yylval = (Value); \
vlm0c6d3812006-03-21 03:40:38 +00001329 yychar1 = YYTRANSLATE (yychar); \
vlmfa67ddc2004-06-03 03:38:44 +00001330 YYPOPSTACK; \
1331 goto yybackup; \
1332 } \
1333 else \
vlm1aeaddd2006-07-13 08:24:20 +00001334 { \
1335 yyerror ("syntax error: cannot back up"); \
1336 YYERROR; \
1337 } \
vlmfa67ddc2004-06-03 03:38:44 +00001338while (0)
1339
1340#define YYTERROR 1
1341#define YYERRCODE 256
1342
vlm1aeaddd2006-07-13 08:24:20 +00001343/* YYLLOC_DEFAULT -- Compute the default location (before the actions
1344 are run). */
1345
1346#ifndef YYLLOC_DEFAULT
1347# define YYLLOC_DEFAULT(Current, Rhs, N) \
1348 Current.first_line = Rhs[1].first_line; \
1349 Current.first_column = Rhs[1].first_column; \
1350 Current.last_line = Rhs[N].last_line; \
1351 Current.last_column = Rhs[N].last_column;
vlmfa67ddc2004-06-03 03:38:44 +00001352#endif
1353
vlm1aeaddd2006-07-13 08:24:20 +00001354/* YYLEX -- calling `yylex' with the right arguments. */
vlm7e436752006-03-18 06:53:11 +00001355
vlm1aeaddd2006-07-13 08:24:20 +00001356#define YYLEX yylex ()
vlm7e436752006-03-18 06:53:11 +00001357
vlm1aeaddd2006-07-13 08:24:20 +00001358/* Enable debugging if requested. */
1359#if YYDEBUG
vlm7e436752006-03-18 06:53:11 +00001360
vlm1aeaddd2006-07-13 08:24:20 +00001361# ifndef YYFPRINTF
1362# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1363# define YYFPRINTF fprintf
1364# endif
vlm7e436752006-03-18 06:53:11 +00001365
vlm1aeaddd2006-07-13 08:24:20 +00001366# define YYDPRINTF(Args) \
1367do { \
1368 if (yydebug) \
1369 YYFPRINTF Args; \
1370} while (0)
1371# define YYDSYMPRINT(Args) \
1372do { \
1373 if (yydebug) \
1374 yysymprint Args; \
1375} while (0)
1376/* Nonzero means print parse trace. It is left uninitialized so that
1377 multiple parsers can coexist. */
1378int yydebug;
1379#else /* !YYDEBUG */
1380# define YYDPRINTF(Args)
1381# define YYDSYMPRINT(Args)
1382#endif /* !YYDEBUG */
vlm7e436752006-03-18 06:53:11 +00001383
vlm1aeaddd2006-07-13 08:24:20 +00001384/* YYINITDEPTH -- initial size of the parser's stacks. */
vlmfa67ddc2004-06-03 03:38:44 +00001385#ifndef YYINITDEPTH
vlm1aeaddd2006-07-13 08:24:20 +00001386# define YYINITDEPTH 200
vlmfa67ddc2004-06-03 03:38:44 +00001387#endif
1388
vlm1aeaddd2006-07-13 08:24:20 +00001389/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1390 if the built-in stack extension method is used).
1391
1392 Do not make this value too large; the results are undefined if
1393 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
1394 evaluated with infinite-precision integer arithmetic. */
vlmfa67ddc2004-06-03 03:38:44 +00001395
vlm0c6d3812006-03-21 03:40:38 +00001396#if YYMAXDEPTH == 0
vlm1aeaddd2006-07-13 08:24:20 +00001397# undef YYMAXDEPTH
vlm0c6d3812006-03-21 03:40:38 +00001398#endif
vlmfa67ddc2004-06-03 03:38:44 +00001399
1400#ifndef YYMAXDEPTH
vlm1aeaddd2006-07-13 08:24:20 +00001401# define YYMAXDEPTH 10000
vlmfa67ddc2004-06-03 03:38:44 +00001402#endif
vlm1aeaddd2006-07-13 08:24:20 +00001403
vlmfa67ddc2004-06-03 03:38:44 +00001404
vlmfa67ddc2004-06-03 03:38:44 +00001405
vlm1aeaddd2006-07-13 08:24:20 +00001406#if YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00001407
vlm1aeaddd2006-07-13 08:24:20 +00001408# ifndef yystrlen
1409# if defined (__GLIBC__) && defined (_STRING_H)
1410# define yystrlen strlen
1411# else
1412/* Return the length of YYSTR. */
1413static YYSIZE_T
1414# if defined (__STDC__) || defined (__cplusplus)
1415yystrlen (const char *yystr)
1416# else
1417yystrlen (yystr)
1418 const char *yystr;
1419# endif
vlm0c6d3812006-03-21 03:40:38 +00001420{
vlm1aeaddd2006-07-13 08:24:20 +00001421 register const char *yys = yystr;
vlm0c6d3812006-03-21 03:40:38 +00001422
vlm1aeaddd2006-07-13 08:24:20 +00001423 while (*yys++ != '\0')
1424 continue;
1425
1426 return yys - yystr - 1;
1427}
1428# endif
1429# endif
1430
1431# ifndef yystpcpy
1432# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
1433# define yystpcpy stpcpy
1434# else
1435/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1436 YYDEST. */
1437static char *
1438# if defined (__STDC__) || defined (__cplusplus)
1439yystpcpy (char *yydest, const char *yysrc)
1440# else
1441yystpcpy (yydest, yysrc)
1442 char *yydest;
1443 const char *yysrc;
1444# endif
1445{
1446 register char *yyd = yydest;
1447 register const char *yys = yysrc;
1448
1449 while ((*yyd++ = *yys++) != '\0')
1450 continue;
1451
1452 return yyd - 1;
1453}
1454# endif
1455# endif
1456
1457#endif /* !YYERROR_VERBOSE */
1458
1459
1460
1461#if YYDEBUG
1462/*-----------------------------.
1463| Print this symbol on YYOUT. |
1464`-----------------------------*/
1465
1466static void
1467#if defined (__STDC__) || defined (__cplusplus)
1468yysymprint (FILE* yyout, int yytype, YYSTYPE yyvalue)
1469#else
1470yysymprint (yyout, yytype, yyvalue)
1471 FILE* yyout;
1472 int yytype;
1473 YYSTYPE yyvalue;
1474#endif
1475{
1476 /* Pacify ``unused variable'' warnings. */
1477 (void) yyvalue;
1478
1479 if (yytype < YYNTOKENS)
1480 {
1481 YYFPRINTF (yyout, "token %s (", yytname[yytype]);
1482# ifdef YYPRINT
1483 YYPRINT (yyout, yytoknum[yytype], yyvalue);
1484# endif
1485 }
1486 else
1487 YYFPRINTF (yyout, "nterm %s (", yytname[yytype]);
1488
1489 switch (yytype)
1490 {
1491 default:
1492 break;
1493 }
1494 YYFPRINTF (yyout, ")");
1495}
1496#endif /* YYDEBUG. */
1497
1498
1499/*-----------------------------------------------.
1500| Release the memory associated to this symbol. |
1501`-----------------------------------------------*/
1502
1503static void
1504#if defined (__STDC__) || defined (__cplusplus)
1505yydestruct (int yytype, YYSTYPE yyvalue)
1506#else
1507yydestruct (yytype, yyvalue)
1508 int yytype;
1509 YYSTYPE yyvalue;
1510#endif
1511{
1512 /* Pacify ``unused variable'' warnings. */
1513 (void) yyvalue;
1514
1515 switch (yytype)
1516 {
1517 default:
1518 break;
1519 }
vlm0c6d3812006-03-21 03:40:38 +00001520}
1521
vlm7e436752006-03-18 06:53:11 +00001522
1523
vlm0c6d3812006-03-21 03:40:38 +00001524/* The user can define YYPARSE_PARAM as the name of an argument to be passed
1525 into yyparse. The argument should have type void *.
1526 It should actually point to an object.
1527 Grammar actions can access the variable by casting it
1528 to the proper pointer type. */
vlm7e436752006-03-18 06:53:11 +00001529
1530#ifdef YYPARSE_PARAM
vlm1aeaddd2006-07-13 08:24:20 +00001531# if defined (__STDC__) || defined (__cplusplus)
1532# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
1533# define YYPARSE_PARAM_DECL
1534# else
1535# define YYPARSE_PARAM_ARG YYPARSE_PARAM
1536# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
1537# endif
1538#else /* !YYPARSE_PARAM */
1539# define YYPARSE_PARAM_ARG
1540# define YYPARSE_PARAM_DECL
1541#endif /* !YYPARSE_PARAM */
vlm0c6d3812006-03-21 03:40:38 +00001542
1543/* Prevent warning if -Wstrict-prototypes. */
1544#ifdef __GNUC__
vlm1aeaddd2006-07-13 08:24:20 +00001545# ifdef YYPARSE_PARAM
vlm0c6d3812006-03-21 03:40:38 +00001546int yyparse (void *);
vlm1aeaddd2006-07-13 08:24:20 +00001547# else
vlmfa67ddc2004-06-03 03:38:44 +00001548int yyparse (void);
vlm1aeaddd2006-07-13 08:24:20 +00001549# endif
vlm7e436752006-03-18 06:53:11 +00001550#endif
vlm1aeaddd2006-07-13 08:24:20 +00001551
1552
1553/* The lookahead symbol. */
1554int yychar;
1555
1556/* The semantic value of the lookahead symbol. */
1557YYSTYPE yylval;
1558
1559/* Number of parse errors so far. */
1560int yynerrs;
1561
vlm7e436752006-03-18 06:53:11 +00001562
vlm7e436752006-03-18 06:53:11 +00001563int
vlm1aeaddd2006-07-13 08:24:20 +00001564yyparse (YYPARSE_PARAM_ARG)
vlm0c6d3812006-03-21 03:40:38 +00001565 YYPARSE_PARAM_DECL
vlm7e436752006-03-18 06:53:11 +00001566{
vlm1aeaddd2006-07-13 08:24:20 +00001567
vlm0c6d3812006-03-21 03:40:38 +00001568 register int yystate;
1569 register int yyn;
vlm1aeaddd2006-07-13 08:24:20 +00001570 int yyresult;
1571 /* Number of tokens to shift before error messages enabled. */
1572 int yyerrstatus;
1573 /* Lookahead token as an internal (translated) token number. */
1574 int yychar1 = 0;
1575
1576 /* Three stacks and their tools:
1577 `yyss': related to states,
1578 `yyvs': related to semantic values,
1579 `yyls': related to locations.
1580
1581 Refer to the stacks thru separate pointers, to allow yyoverflow
1582 to reallocate them elsewhere. */
1583
1584 /* The state stack. */
1585 short yyssa[YYINITDEPTH];
1586 short *yyss = yyssa;
vlm0c6d3812006-03-21 03:40:38 +00001587 register short *yyssp;
vlm1aeaddd2006-07-13 08:24:20 +00001588
1589 /* The semantic value stack. */
1590 YYSTYPE yyvsa[YYINITDEPTH];
1591 YYSTYPE *yyvs = yyvsa;
vlm0c6d3812006-03-21 03:40:38 +00001592 register YYSTYPE *yyvsp;
vlm7e436752006-03-18 06:53:11 +00001593
vlm7e436752006-03-18 06:53:11 +00001594
vlm7e436752006-03-18 06:53:11 +00001595
vlmfa67ddc2004-06-03 03:38:44 +00001596#define YYPOPSTACK (yyvsp--, yyssp--)
vlmfa67ddc2004-06-03 03:38:44 +00001597
vlm1aeaddd2006-07-13 08:24:20 +00001598 YYSIZE_T yystacksize = YYINITDEPTH;
vlmfa67ddc2004-06-03 03:38:44 +00001599
vlm1aeaddd2006-07-13 08:24:20 +00001600 /* The variables used to return semantic value and location from the
1601 action routines. */
1602 YYSTYPE yyval;
vlmfa67ddc2004-06-03 03:38:44 +00001603
vlmfa67ddc2004-06-03 03:38:44 +00001604
vlm1aeaddd2006-07-13 08:24:20 +00001605 /* When reducing, the number of symbols on the RHS of the reduced
1606 rule. */
vlmfa67ddc2004-06-03 03:38:44 +00001607 int yylen;
1608
vlm1aeaddd2006-07-13 08:24:20 +00001609 YYDPRINTF ((stderr, "Starting parse\n"));
vlmfa67ddc2004-06-03 03:38:44 +00001610
1611 yystate = 0;
1612 yyerrstatus = 0;
1613 yynerrs = 0;
1614 yychar = YYEMPTY; /* Cause a token to be read. */
1615
1616 /* Initialize stack pointers.
1617 Waste one element of value and location stack
1618 so that they stay on the same level as the state stack.
1619 The wasted elements are never initialized. */
1620
vlm1aeaddd2006-07-13 08:24:20 +00001621 yyssp = yyss;
vlmfa67ddc2004-06-03 03:38:44 +00001622 yyvsp = yyvs;
vlmfa67ddc2004-06-03 03:38:44 +00001623
vlm1aeaddd2006-07-13 08:24:20 +00001624 goto yysetstate;
vlmfa67ddc2004-06-03 03:38:44 +00001625
vlm1aeaddd2006-07-13 08:24:20 +00001626/*------------------------------------------------------------.
1627| yynewstate -- Push a new state, which is found in yystate. |
1628`------------------------------------------------------------*/
1629 yynewstate:
1630 /* In all cases, when you get here, the value and location stacks
1631 have just been pushed. so pushing a state here evens the stacks.
1632 */
1633 yyssp++;
1634
1635 yysetstate:
1636 *yyssp = yystate;
vlmfa67ddc2004-06-03 03:38:44 +00001637
vlm0c6d3812006-03-21 03:40:38 +00001638 if (yyssp >= yyss + yystacksize - 1)
vlmfa67ddc2004-06-03 03:38:44 +00001639 {
vlmfa67ddc2004-06-03 03:38:44 +00001640 /* Get the current used size of the three stacks, in elements. */
vlm1aeaddd2006-07-13 08:24:20 +00001641 YYSIZE_T yysize = yyssp - yyss + 1;
vlmfa67ddc2004-06-03 03:38:44 +00001642
1643#ifdef yyoverflow
vlm1aeaddd2006-07-13 08:24:20 +00001644 {
1645 /* Give user a chance to reallocate the stack. Use copies of
1646 these so that the &'s don't force the real ones into
1647 memory. */
1648 YYSTYPE *yyvs1 = yyvs;
1649 short *yyss1 = yyss;
vlmfa67ddc2004-06-03 03:38:44 +00001650
vlm1aeaddd2006-07-13 08:24:20 +00001651
1652 /* Each stack pointer address is followed by the size of the
1653 data in use in that stack, in bytes. This used to be a
1654 conditional around just the two extra args, but that might
1655 be undefined if yyoverflow is a macro. */
1656 yyoverflow ("parser stack overflow",
1657 &yyss1, yysize * sizeof (*yyssp),
1658 &yyvs1, yysize * sizeof (*yyvsp),
1659
1660 &yystacksize);
1661
1662 yyss = yyss1;
1663 yyvs = yyvs1;
1664 }
vlmfa67ddc2004-06-03 03:38:44 +00001665#else /* no yyoverflow */
vlm1aeaddd2006-07-13 08:24:20 +00001666# ifndef YYSTACK_RELOCATE
1667 goto yyoverflowlab;
1668# else
vlmfa67ddc2004-06-03 03:38:44 +00001669 /* Extend the stack our own way. */
vlm0c6d3812006-03-21 03:40:38 +00001670 if (yystacksize >= YYMAXDEPTH)
vlm1aeaddd2006-07-13 08:24:20 +00001671 goto yyoverflowlab;
vlmfa67ddc2004-06-03 03:38:44 +00001672 yystacksize *= 2;
vlm0c6d3812006-03-21 03:40:38 +00001673 if (yystacksize > YYMAXDEPTH)
vlmfa67ddc2004-06-03 03:38:44 +00001674 yystacksize = YYMAXDEPTH;
vlm1aeaddd2006-07-13 08:24:20 +00001675
1676 {
1677 short *yyss1 = yyss;
1678 union yyalloc *yyptr =
1679 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1680 if (! yyptr)
1681 goto yyoverflowlab;
1682 YYSTACK_RELOCATE (yyss);
1683 YYSTACK_RELOCATE (yyvs);
1684
1685# undef YYSTACK_RELOCATE
1686 if (yyss1 != yyssa)
1687 YYSTACK_FREE (yyss1);
1688 }
1689# endif
vlmfa67ddc2004-06-03 03:38:44 +00001690#endif /* no yyoverflow */
1691
vlm1aeaddd2006-07-13 08:24:20 +00001692 yyssp = yyss + yysize - 1;
1693 yyvsp = yyvs + yysize - 1;
vlmfa67ddc2004-06-03 03:38:44 +00001694
vlm1aeaddd2006-07-13 08:24:20 +00001695
1696 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1697 (unsigned long int) yystacksize));
vlmfa67ddc2004-06-03 03:38:44 +00001698
vlm0c6d3812006-03-21 03:40:38 +00001699 if (yyssp >= yyss + yystacksize - 1)
vlmfa67ddc2004-06-03 03:38:44 +00001700 YYABORT;
1701 }
1702
vlm1aeaddd2006-07-13 08:24:20 +00001703 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
vlmfa67ddc2004-06-03 03:38:44 +00001704
1705 goto yybackup;
vlm1aeaddd2006-07-13 08:24:20 +00001706
1707/*-----------.
1708| yybackup. |
1709`-----------*/
1710yybackup:
vlmfa67ddc2004-06-03 03:38:44 +00001711
1712/* Do appropriate processing given the current state. */
vlm0c6d3812006-03-21 03:40:38 +00001713/* Read a lookahead token if we need one and don't already have one. */
vlmfa67ddc2004-06-03 03:38:44 +00001714/* yyresume: */
1715
vlm0c6d3812006-03-21 03:40:38 +00001716 /* First try to decide what to do without reference to lookahead token. */
vlmfa67ddc2004-06-03 03:38:44 +00001717
1718 yyn = yypact[yystate];
vlm1aeaddd2006-07-13 08:24:20 +00001719 if (yyn == YYPACT_NINF)
vlmfa67ddc2004-06-03 03:38:44 +00001720 goto yydefault;
1721
vlm0c6d3812006-03-21 03:40:38 +00001722 /* Not known => get a lookahead token if don't already have one. */
vlmfa67ddc2004-06-03 03:38:44 +00001723
vlm0c6d3812006-03-21 03:40:38 +00001724 /* yychar is either YYEMPTY or YYEOF
1725 or a valid token in external form. */
1726
vlmfa67ddc2004-06-03 03:38:44 +00001727 if (yychar == YYEMPTY)
1728 {
vlm1aeaddd2006-07-13 08:24:20 +00001729 YYDPRINTF ((stderr, "Reading a token: "));
vlmfa67ddc2004-06-03 03:38:44 +00001730 yychar = YYLEX;
1731 }
1732
vlm1aeaddd2006-07-13 08:24:20 +00001733 /* Convert token to internal form (in yychar1) for indexing tables with. */
vlm0c6d3812006-03-21 03:40:38 +00001734
vlm1aeaddd2006-07-13 08:24:20 +00001735 if (yychar <= 0) /* This means end of input. */
vlmfa67ddc2004-06-03 03:38:44 +00001736 {
vlm0c6d3812006-03-21 03:40:38 +00001737 yychar1 = 0;
vlm1aeaddd2006-07-13 08:24:20 +00001738 yychar = YYEOF; /* Don't call YYLEX any more. */
vlm0c6d3812006-03-21 03:40:38 +00001739
vlm1aeaddd2006-07-13 08:24:20 +00001740 YYDPRINTF ((stderr, "Now at end of input.\n"));
vlmfa67ddc2004-06-03 03:38:44 +00001741 }
1742 else
1743 {
vlm1aeaddd2006-07-13 08:24:20 +00001744 yychar1 = YYTRANSLATE (yychar);
vlm0c6d3812006-03-21 03:40:38 +00001745
vlm1aeaddd2006-07-13 08:24:20 +00001746 /* We have to keep this `#if YYDEBUG', since we use variables
1747 which are defined only if `YYDEBUG' is set. */
1748 YYDPRINTF ((stderr, "Next token is "));
1749 YYDSYMPRINT ((stderr, yychar1, yylval));
1750 YYDPRINTF ((stderr, "\n"));
vlmfa67ddc2004-06-03 03:38:44 +00001751 }
1752
vlm1aeaddd2006-07-13 08:24:20 +00001753 /* If the proper action on seeing token YYCHAR1 is to reduce or to
1754 detect an error, take that action. */
vlm0c6d3812006-03-21 03:40:38 +00001755 yyn += yychar1;
vlm1aeaddd2006-07-13 08:24:20 +00001756 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
vlmfa67ddc2004-06-03 03:38:44 +00001757 goto yydefault;
vlmfa67ddc2004-06-03 03:38:44 +00001758 yyn = yytable[yyn];
vlm1aeaddd2006-07-13 08:24:20 +00001759 if (yyn <= 0)
vlmfa67ddc2004-06-03 03:38:44 +00001760 {
vlm1aeaddd2006-07-13 08:24:20 +00001761 if (yyn == 0 || yyn == YYTABLE_NINF)
vlmfa67ddc2004-06-03 03:38:44 +00001762 goto yyerrlab;
1763 yyn = -yyn;
1764 goto yyreduce;
1765 }
vlmfa67ddc2004-06-03 03:38:44 +00001766
1767 if (yyn == YYFINAL)
1768 YYACCEPT;
1769
vlm0c6d3812006-03-21 03:40:38 +00001770 /* Shift the lookahead token. */
vlm1aeaddd2006-07-13 08:24:20 +00001771 YYDPRINTF ((stderr, "Shifting token %d (%s), ",
1772 yychar, yytname[yychar1]));
vlmfa67ddc2004-06-03 03:38:44 +00001773
1774 /* Discard the token being shifted unless it is eof. */
1775 if (yychar != YYEOF)
1776 yychar = YYEMPTY;
1777
1778 *++yyvsp = yylval;
vlmfa67ddc2004-06-03 03:38:44 +00001779
vlm1aeaddd2006-07-13 08:24:20 +00001780
1781 /* Count tokens shifted since error; after three, turn off error
1782 status. */
1783 if (yyerrstatus)
1784 yyerrstatus--;
vlmfa67ddc2004-06-03 03:38:44 +00001785
1786 yystate = yyn;
1787 goto yynewstate;
1788
vlm0c6d3812006-03-21 03:40:38 +00001789
vlm1aeaddd2006-07-13 08:24:20 +00001790/*-----------------------------------------------------------.
1791| yydefault -- do the default action for the current state. |
1792`-----------------------------------------------------------*/
1793yydefault:
vlmfa67ddc2004-06-03 03:38:44 +00001794 yyn = yydefact[yystate];
1795 if (yyn == 0)
1796 goto yyerrlab;
vlm1aeaddd2006-07-13 08:24:20 +00001797 goto yyreduce;
vlmfa67ddc2004-06-03 03:38:44 +00001798
vlm1aeaddd2006-07-13 08:24:20 +00001799
1800/*-----------------------------.
1801| yyreduce -- Do a reduction. |
1802`-----------------------------*/
vlmfa67ddc2004-06-03 03:38:44 +00001803yyreduce:
vlm1aeaddd2006-07-13 08:24:20 +00001804 /* yyn is the number of a rule to reduce with. */
vlmfa67ddc2004-06-03 03:38:44 +00001805 yylen = yyr2[yyn];
vlmfa67ddc2004-06-03 03:38:44 +00001806
vlm1aeaddd2006-07-13 08:24:20 +00001807 /* If YYLEN is nonzero, implement the default value of the action:
1808 `$$ = $1'.
1809
1810 Otherwise, the following line sets YYVAL to garbage.
1811 This behavior is undocumented and Bison
1812 users should not rely upon it. Assigning to YYVAL
1813 unconditionally makes the parser a bit smaller, and it avoids a
1814 GCC warning that YYVAL may be used uninitialized. */
1815 yyval = yyvsp[1-yylen];
1816
1817
1818
1819#if YYDEBUG
1820 /* We have to keep this `#if YYDEBUG', since we use variables which
1821 are defined only if `YYDEBUG' is set. */
vlm0c6d3812006-03-21 03:40:38 +00001822 if (yydebug)
vlmfa67ddc2004-06-03 03:38:44 +00001823 {
vlm1aeaddd2006-07-13 08:24:20 +00001824 int yyi;
vlm0c6d3812006-03-21 03:40:38 +00001825
vlm1aeaddd2006-07-13 08:24:20 +00001826 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
1827 yyn - 1, yyrline[yyn]);
vlm0c6d3812006-03-21 03:40:38 +00001828
1829 /* Print the symbols being reduced, and their result. */
vlm1aeaddd2006-07-13 08:24:20 +00001830 for (yyi = yyprhs[yyn]; yyrhs[yyi] >= 0; yyi++)
1831 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
1832 YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
vlm0c6d3812006-03-21 03:40:38 +00001833 }
1834#endif
vlm1aeaddd2006-07-13 08:24:20 +00001835 switch (yyn)
1836 {
1837 case 2:
vlm43c8ac52006-09-17 04:52:50 +00001838#line 350 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001839 {
vlm0c6d3812006-03-21 03:40:38 +00001840 *(void **)param = yyvsp[0].a_grammar;
vlm1aeaddd2006-07-13 08:24:20 +00001841 }
1842 break;
1843
1844 case 3:
vlm43c8ac52006-09-17 04:52:50 +00001845#line 356 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001846 {
vlm0c6d3812006-03-21 03:40:38 +00001847 yyval.a_grammar = asn1p_new();
1848 checkmem(yyval.a_grammar);
1849 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm1aeaddd2006-07-13 08:24:20 +00001850 }
1851 break;
1852
1853 case 4:
vlm43c8ac52006-09-17 04:52:50 +00001854#line 361 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001855 {
vlm0c6d3812006-03-21 03:40:38 +00001856 yyval.a_grammar = yyvsp[-1].a_grammar;
1857 TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
vlm1aeaddd2006-07-13 08:24:20 +00001858 }
1859 break;
1860
1861 case 5:
vlm43c8ac52006-09-17 04:52:50 +00001862#line 378 "asn1p_y.y"
1863 { currentModule = asn1p_module_new(); }
1864 break;
1865
1866 case 6:
1867#line 383 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001868 {
vlm7e436752006-03-18 06:53:11 +00001869
vlm43c8ac52006-09-17 04:52:50 +00001870 yyval.a_module = currentModule;
1871
vlm0c6d3812006-03-21 03:40:38 +00001872 if(yyvsp[-1].a_module) {
vlm43c8ac52006-09-17 04:52:50 +00001873 asn1p_module_t tmp = *(yyval.a_module);
1874 *(yyval.a_module) = *(yyvsp[-1].a_module);
1875 *(yyvsp[-1].a_module) = tmp;
1876 asn1p_module_free(yyvsp[-1].a_module);
vlmfa67ddc2004-06-03 03:38:44 +00001877 } else {
1878 /* There's a chance that a module is just plain empty */
vlmfa67ddc2004-06-03 03:38:44 +00001879 }
vlmfa67ddc2004-06-03 03:38:44 +00001880
vlm43c8ac52006-09-17 04:52:50 +00001881 yyval.a_module->ModuleName = yyvsp[-8].tv_str;
vlm0c6d3812006-03-21 03:40:38 +00001882 yyval.a_module->module_oid = yyvsp[-6].a_oid;
1883 yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
vlm1aeaddd2006-07-13 08:24:20 +00001884 }
1885 break;
1886
vlm43c8ac52006-09-17 04:52:50 +00001887 case 7:
1888#line 407 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001889 { yyval.a_oid = 0; }
1890 break;
1891
vlm43c8ac52006-09-17 04:52:50 +00001892 case 8:
1893#line 408 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001894 { yyval.a_oid = yyvsp[0].a_oid; }
1895 break;
1896
vlm43c8ac52006-09-17 04:52:50 +00001897 case 9:
1898#line 412 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001899 {
vlm0c6d3812006-03-21 03:40:38 +00001900 yyval.a_oid = yyvsp[-1].a_oid;
vlm1aeaddd2006-07-13 08:24:20 +00001901 }
1902 break;
1903
vlm43c8ac52006-09-17 04:52:50 +00001904 case 10:
1905#line 415 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001906 {
vlm0c6d3812006-03-21 03:40:38 +00001907 yyval.a_oid = 0;
vlm1aeaddd2006-07-13 08:24:20 +00001908 }
1909 break;
1910
vlm43c8ac52006-09-17 04:52:50 +00001911 case 11:
1912#line 421 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001913 {
vlm0c6d3812006-03-21 03:40:38 +00001914 yyval.a_oid = asn1p_oid_new();
1915 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1916 if(yyvsp[0].a_oid_arc.name)
1917 free(yyvsp[0].a_oid_arc.name);
vlm1aeaddd2006-07-13 08:24:20 +00001918 }
1919 break;
1920
vlm43c8ac52006-09-17 04:52:50 +00001921 case 12:
1922#line 427 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001923 {
vlm0c6d3812006-03-21 03:40:38 +00001924 yyval.a_oid = yyvsp[-1].a_oid;
1925 asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
1926 if(yyvsp[0].a_oid_arc.name)
1927 free(yyvsp[0].a_oid_arc.name);
vlm1aeaddd2006-07-13 08:24:20 +00001928 }
1929 break;
1930
vlm43c8ac52006-09-17 04:52:50 +00001931 case 13:
1932#line 436 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001933 { /* iso */
vlm0c6d3812006-03-21 03:40:38 +00001934 yyval.a_oid_arc.name = yyvsp[0].tv_str;
1935 yyval.a_oid_arc.number = -1;
vlm1aeaddd2006-07-13 08:24:20 +00001936 }
1937 break;
1938
vlm43c8ac52006-09-17 04:52:50 +00001939 case 14:
1940#line 440 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001941 { /* iso(1) */
vlm0c6d3812006-03-21 03:40:38 +00001942 yyval.a_oid_arc.name = yyvsp[-3].tv_str;
1943 yyval.a_oid_arc.number = yyvsp[-1].a_int;
vlm1aeaddd2006-07-13 08:24:20 +00001944 }
1945 break;
1946
vlm43c8ac52006-09-17 04:52:50 +00001947 case 15:
1948#line 444 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001949 { /* 1 */
vlm0c6d3812006-03-21 03:40:38 +00001950 yyval.a_oid_arc.name = 0;
1951 yyval.a_oid_arc.number = yyvsp[0].a_int;
vlm1aeaddd2006-07-13 08:24:20 +00001952 }
1953 break;
1954
vlm43c8ac52006-09-17 04:52:50 +00001955 case 16:
1956#line 454 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001957 { yyval.a_module_flags = MSF_NOFLAGS; }
1958 break;
1959
vlm1aeaddd2006-07-13 08:24:20 +00001960 case 17:
vlm43c8ac52006-09-17 04:52:50 +00001961#line 455 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001962 {
vlm0c6d3812006-03-21 03:40:38 +00001963 yyval.a_module_flags = yyvsp[0].a_module_flags;
vlm1aeaddd2006-07-13 08:24:20 +00001964 }
1965 break;
1966
1967 case 18:
vlm43c8ac52006-09-17 04:52:50 +00001968#line 464 "asn1p_y.y"
1969 {
1970 yyval.a_module_flags = yyvsp[0].a_module_flags;
1971 }
1972 break;
1973
1974 case 19:
1975#line 467 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001976 {
vlm0c6d3812006-03-21 03:40:38 +00001977 yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
vlm1aeaddd2006-07-13 08:24:20 +00001978 }
1979 break;
1980
vlm43c8ac52006-09-17 04:52:50 +00001981 case 20:
1982#line 476 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001983 {
vlm0c6d3812006-03-21 03:40:38 +00001984 yyval.a_module_flags = MSF_EXPLICIT_TAGS;
vlm1aeaddd2006-07-13 08:24:20 +00001985 }
1986 break;
1987
vlm43c8ac52006-09-17 04:52:50 +00001988 case 21:
1989#line 479 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001990 {
vlm0c6d3812006-03-21 03:40:38 +00001991 yyval.a_module_flags = MSF_IMPLICIT_TAGS;
vlm1aeaddd2006-07-13 08:24:20 +00001992 }
1993 break;
1994
vlm43c8ac52006-09-17 04:52:50 +00001995 case 22:
1996#line 482 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00001997 {
vlm0c6d3812006-03-21 03:40:38 +00001998 yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
vlm1aeaddd2006-07-13 08:24:20 +00001999 }
2000 break;
2001
vlm43c8ac52006-09-17 04:52:50 +00002002 case 23:
2003#line 485 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002004 {
vlm0c6d3812006-03-21 03:40:38 +00002005 yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
vlm1aeaddd2006-07-13 08:24:20 +00002006 }
2007 break;
2008
vlm43c8ac52006-09-17 04:52:50 +00002009 case 24:
2010#line 489 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002011 {
vlm9283dbe2004-08-18 04:59:12 +00002012 /* X.680Amd1 specifies TAG and XER */
vlm0c6d3812006-03-21 03:40:38 +00002013 if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
2014 yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
2015 } else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
2016 yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
vlm9283dbe2004-08-18 04:59:12 +00002017 } else {
2018 fprintf(stderr,
2019 "WARNING: %s INSTRUCTIONS at line %d: "
2020 "Unrecognized encoding reference\n",
vlm0c6d3812006-03-21 03:40:38 +00002021 yyvsp[-1].tv_str, yylineno);
2022 yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
vlm9283dbe2004-08-18 04:59:12 +00002023 }
vlm0c6d3812006-03-21 03:40:38 +00002024 free(yyvsp[-1].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00002025 }
2026 break;
2027
vlm43c8ac52006-09-17 04:52:50 +00002028 case 25:
2029#line 510 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002030 { yyval.a_module = 0; }
2031 break;
2032
vlm43c8ac52006-09-17 04:52:50 +00002033 case 26:
2034#line 511 "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
vlm43c8ac52006-09-17 04:52:50 +00002040 case 27:
2041#line 520 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002042 {
vlmd3420d32006-09-14 10:35:20 +00002043 yyval.a_module = asn1p_module_new();
2044 AL_IMPORT(yyval.a_module, exports, yyvsp[-2].a_module, xp_next);
2045 AL_IMPORT(yyval.a_module, imports, yyvsp[-1].a_module, xp_next);
2046 AL_IMPORT(yyval.a_module, members, yyvsp[0].a_module, next);
vlm1aeaddd2006-07-13 08:24:20 +00002047 }
2048 break;
2049
vlm43c8ac52006-09-17 04:52:50 +00002050 case 28:
2051#line 529 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002052 {
vlm0c6d3812006-03-21 03:40:38 +00002053 yyval.a_module = yyvsp[0].a_module;
vlm1aeaddd2006-07-13 08:24:20 +00002054 }
2055 break;
2056
vlm43c8ac52006-09-17 04:52:50 +00002057 case 29:
2058#line 532 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00002059 {
2060 if(yyvsp[-1].a_module) {
2061 yyval.a_module = yyvsp[-1].a_module;
2062 } else {
2063 yyval.a_module = yyvsp[0].a_module;
2064 break;
2065 }
2066 AL_IMPORT(yyval.a_module, members, yyvsp[0].a_module, next);
2067 }
2068 break;
2069
vlm1aeaddd2006-07-13 08:24:20 +00002070 case 30:
vlm43c8ac52006-09-17 04:52:50 +00002071#line 548 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002072 {
vlm0c6d3812006-03-21 03:40:38 +00002073 yyval.a_module = asn1p_module_new();
2074 checkmem(yyval.a_module);
2075 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2076 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2077 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm1aeaddd2006-07-13 08:24:20 +00002078 }
2079 break;
2080
2081 case 31:
vlm43c8ac52006-09-17 04:52:50 +00002082#line 555 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002083 {
vlm0c6d3812006-03-21 03:40:38 +00002084 yyval.a_module = asn1p_module_new();
2085 checkmem(yyval.a_module);
2086 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2087 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2088 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
vlm1aeaddd2006-07-13 08:24:20 +00002089 }
2090 break;
2091
2092 case 32:
vlm43c8ac52006-09-17 04:52:50 +00002093#line 568 "asn1p_y.y"
2094 {
2095 yyval.a_module = asn1p_module_new();
2096 checkmem(yyval.a_module);
2097 assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
2098 assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
2099 TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
2100 }
vlm1aeaddd2006-07-13 08:24:20 +00002101 break;
2102
vlmd3420d32006-09-14 10:35:20 +00002103 case 33:
vlm43c8ac52006-09-17 04:52:50 +00002104#line 576 "asn1p_y.y"
2105 { asn1p_lexer_hack_push_encoding_control(); }
2106 break;
2107
2108 case 34:
2109#line 577 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002110 {
vlm9283dbe2004-08-18 04:59:12 +00002111 fprintf(stderr,
2112 "WARNING: ENCODING-CONTROL %s "
2113 "specification at line %d ignored\n",
vlm0c6d3812006-03-21 03:40:38 +00002114 yyvsp[-1].tv_str, yylineno);
2115 free(yyvsp[-1].tv_str);
2116 yyval.a_module = 0;
vlm1aeaddd2006-07-13 08:24:20 +00002117 }
2118 break;
2119
vlm43c8ac52006-09-17 04:52:50 +00002120 case 35:
2121#line 589 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002122 {
vlmfa67ddc2004-06-03 03:38:44 +00002123 return yyerror(
vlm1ac75e72005-11-26 11:21:55 +00002124 "Attempt to redefine a standard basic string type, "
2125 "please comment out or remove this type redefinition.");
vlm1aeaddd2006-07-13 08:24:20 +00002126 }
2127 break;
2128
vlm43c8ac52006-09-17 04:52:50 +00002129 case 36:
2130#line 602 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00002131 { yyval.a_module = 0; }
2132 break;
2133
vlm43c8ac52006-09-17 04:52:50 +00002134 case 38:
2135#line 606 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002136 {
vlm931aeed2005-08-12 10:09:10 +00002137 if(!saved_aid && 0)
2138 return yyerror("Unterminated IMPORTS FROM, "
2139 "expected semicolon ';'");
2140 saved_aid = 0;
vlm0c6d3812006-03-21 03:40:38 +00002141 yyval.a_module = yyvsp[-1].a_module;
vlm1aeaddd2006-07-13 08:24:20 +00002142 }
2143 break;
2144
vlm43c8ac52006-09-17 04:52:50 +00002145 case 39:
2146#line 616 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002147 {
vlmfa67ddc2004-06-03 03:38:44 +00002148 return yyerror("Empty IMPORTS list");
vlm1aeaddd2006-07-13 08:24:20 +00002149 }
2150 break;
2151
vlm43c8ac52006-09-17 04:52:50 +00002152 case 40:
2153#line 622 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002154 {
vlm0c6d3812006-03-21 03:40:38 +00002155 yyval.a_module = asn1p_module_new();
2156 checkmem(yyval.a_module);
2157 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm1aeaddd2006-07-13 08:24:20 +00002158 }
2159 break;
2160
vlm43c8ac52006-09-17 04:52:50 +00002161 case 41:
2162#line 627 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002163 {
vlm0c6d3812006-03-21 03:40:38 +00002164 yyval.a_module = yyvsp[-1].a_module;
2165 TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
vlm1aeaddd2006-07-13 08:24:20 +00002166 }
2167 break;
2168
vlm43c8ac52006-09-17 04:52:50 +00002169 case 42:
2170#line 634 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002171 { memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); }
2172 break;
2173
vlm43c8ac52006-09-17 04:52:50 +00002174 case 43:
2175#line 635 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002176 { yyval.a_aid.oid = yyvsp[0].a_oid; }
2177 break;
2178
vlm43c8ac52006-09-17 04:52:50 +00002179 case 44:
2180#line 639 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002181 {
vlm0c6d3812006-03-21 03:40:38 +00002182 yyval.a_xports = yyvsp[-3].a_xports;
2183 yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
2184 yyval.a_xports->identifier = yyvsp[0].a_aid;
vlm931aeed2005-08-12 10:09:10 +00002185 /* This stupid thing is used for look-back hack. */
vlm0c6d3812006-03-21 03:40:38 +00002186 saved_aid = yyval.a_xports->identifier.oid ? 0 : &(yyval.a_xports->identifier);
2187 checkmem(yyval.a_xports);
vlm1aeaddd2006-07-13 08:24:20 +00002188 }
2189 break;
2190
vlm43c8ac52006-09-17 04:52:50 +00002191 case 45:
2192#line 650 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002193 {
vlm0c6d3812006-03-21 03:40:38 +00002194 yyval.a_xports = asn1p_xports_new();
2195 checkmem(yyval.a_xports);
2196 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm1aeaddd2006-07-13 08:24:20 +00002197 }
2198 break;
2199
vlm43c8ac52006-09-17 04:52:50 +00002200 case 46:
2201#line 655 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002202 {
vlm0c6d3812006-03-21 03:40:38 +00002203 yyval.a_xports = yyvsp[-2].a_xports;
2204 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm1aeaddd2006-07-13 08:24:20 +00002205 }
2206 break;
2207
vlm43c8ac52006-09-17 04:52:50 +00002208 case 47:
2209#line 662 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002210 {
vlm43c8ac52006-09-17 04:52:50 +00002211 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002212 checkmem(yyval.a_expr);
2213 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2214 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm1aeaddd2006-07-13 08:24:20 +00002215 }
2216 break;
2217
vlm43c8ac52006-09-17 04:52:50 +00002218 case 48:
2219#line 668 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002220 { /* Completely equivalent to above */
vlm43c8ac52006-09-17 04:52:50 +00002221 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002222 checkmem(yyval.a_expr);
2223 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2224 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm1aeaddd2006-07-13 08:24:20 +00002225 }
2226 break;
2227
vlm43c8ac52006-09-17 04:52:50 +00002228 case 49:
2229#line 674 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002230 {
vlm43c8ac52006-09-17 04:52:50 +00002231 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002232 checkmem(yyval.a_expr);
2233 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2234 yyval.a_expr->expr_type = A1TC_REFERENCE;
vlm1aeaddd2006-07-13 08:24:20 +00002235 }
2236 break;
2237
vlm43c8ac52006-09-17 04:52:50 +00002238 case 50:
2239#line 684 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00002240 { yyval.a_module = 0; }
2241 break;
2242
vlm43c8ac52006-09-17 04:52:50 +00002243 case 51:
2244#line 685 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00002245 {
2246 yyval.a_module = asn1p_module_new();
2247 checkmem(yyval.a_module);
2248 if(yyvsp[0].a_xports) {
2249 TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
2250 } else {
2251 /* "EXPORTS ALL;" */
2252 }
2253 }
2254 break;
2255
vlm43c8ac52006-09-17 04:52:50 +00002256 case 52:
2257#line 697 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002258 {
vlm0c6d3812006-03-21 03:40:38 +00002259 yyval.a_xports = yyvsp[-1].a_xports;
vlm1aeaddd2006-07-13 08:24:20 +00002260 }
2261 break;
2262
vlm43c8ac52006-09-17 04:52:50 +00002263 case 53:
2264#line 700 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002265 {
vlm0c6d3812006-03-21 03:40:38 +00002266 yyval.a_xports = 0;
vlm1aeaddd2006-07-13 08:24:20 +00002267 }
2268 break;
2269
vlm43c8ac52006-09-17 04:52:50 +00002270 case 54:
2271#line 703 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002272 {
vlmfa67ddc2004-06-03 03:38:44 +00002273 /* Empty EXPORTS clause effectively prohibits export. */
vlm0c6d3812006-03-21 03:40:38 +00002274 yyval.a_xports = asn1p_xports_new();
2275 checkmem(yyval.a_xports);
vlm1aeaddd2006-07-13 08:24:20 +00002276 }
2277 break;
2278
vlm43c8ac52006-09-17 04:52:50 +00002279 case 55:
2280#line 711 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002281 {
vlm0c6d3812006-03-21 03:40:38 +00002282 yyval.a_xports = asn1p_xports_new();
2283 assert(yyval.a_xports);
2284 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm1aeaddd2006-07-13 08:24:20 +00002285 }
2286 break;
2287
vlm43c8ac52006-09-17 04:52:50 +00002288 case 56:
2289#line 716 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002290 {
vlm0c6d3812006-03-21 03:40:38 +00002291 yyval.a_xports = yyvsp[-2].a_xports;
2292 TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
vlm1aeaddd2006-07-13 08:24:20 +00002293 }
2294 break;
2295
vlm43c8ac52006-09-17 04:52:50 +00002296 case 57:
2297#line 723 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002298 {
vlm43c8ac52006-09-17 04:52:50 +00002299 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002300 checkmem(yyval.a_expr);
2301 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2302 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
vlm1aeaddd2006-07-13 08:24:20 +00002303 }
2304 break;
2305
vlm43c8ac52006-09-17 04:52:50 +00002306 case 58:
2307#line 729 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002308 {
vlm43c8ac52006-09-17 04:52:50 +00002309 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002310 checkmem(yyval.a_expr);
2311 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2312 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
vlm1aeaddd2006-07-13 08:24:20 +00002313 }
2314 break;
2315
vlm43c8ac52006-09-17 04:52:50 +00002316 case 59:
2317#line 735 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002318 {
vlm43c8ac52006-09-17 04:52:50 +00002319 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002320 checkmem(yyval.a_expr);
2321 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2322 yyval.a_expr->expr_type = A1TC_EXPORTVAR;
vlm1aeaddd2006-07-13 08:24:20 +00002323 }
2324 break;
2325
vlm43c8ac52006-09-17 04:52:50 +00002326 case 60:
2327#line 744 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002328 { yyval.a_constr = yyvsp[-1].a_constr; }
2329 break;
2330
vlm43c8ac52006-09-17 04:52:50 +00002331 case 61:
2332#line 747 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002333 {
vlm59b620a2006-03-21 07:46:48 +00002334 yyval.a_expr = yyvsp[-2].a_expr;
vlm0c6d3812006-03-21 03:40:38 +00002335 assert(yyval.a_expr->Identifier == 0);
vlm59b620a2006-03-21 07:46:48 +00002336 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
vlm0c6d3812006-03-21 03:40:38 +00002337 yyval.a_expr->meta_type = AMT_VALUESET;
vlm59b620a2006-03-21 07:46:48 +00002338 yyval.a_expr->constraints = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00002339 }
2340 break;
2341
vlm43c8ac52006-09-17 04:52:50 +00002342 case 62:
2343#line 757 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002344 {
vlm17e65d02006-03-21 04:48:15 +00002345 yyval.a_expr = yyvsp[0].a_expr;
vlm1aeaddd2006-07-13 08:24:20 +00002346 }
2347 break;
2348
vlm43c8ac52006-09-17 04:52:50 +00002349 case 63:
2350#line 770 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002351 {
vlm43c8ac52006-09-17 04:52:50 +00002352 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002353 checkmem(yyval.a_expr);
2354 yyval.a_expr->reference = yyvsp[0].a_ref;
2355 yyval.a_expr->expr_type = A1TC_REFERENCE;
2356 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm1aeaddd2006-07-13 08:24:20 +00002357 }
2358 break;
2359
vlm43c8ac52006-09-17 04:52:50 +00002360 case 64:
2361#line 780 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002362 {
vlm43c8ac52006-09-17 04:52:50 +00002363 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002364 checkmem(yyval.a_expr);
vlm17e65d02006-03-21 04:48:15 +00002365 yyval.a_expr->reference = yyvsp[-3].a_ref;
2366 yyval.a_expr->rhs_pspecs = yyvsp[-1].a_expr;
2367 yyval.a_expr->expr_type = A1TC_REFERENCE;
2368 yyval.a_expr->meta_type = AMT_TYPEREF;
vlm1aeaddd2006-07-13 08:24:20 +00002369 }
2370 break;
2371
vlm43c8ac52006-09-17 04:52:50 +00002372 case 65:
2373#line 800 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002374 {
vlm0c6d3812006-03-21 03:40:38 +00002375 yyval.a_expr = yyvsp[0].a_expr;
2376 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2377 assert(yyval.a_expr->expr_type);
2378 assert(yyval.a_expr->meta_type);
vlm1aeaddd2006-07-13 08:24:20 +00002379 }
2380 break;
2381
vlm43c8ac52006-09-17 04:52:50 +00002382 case 66:
2383#line 806 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002384 {
vlm0c6d3812006-03-21 03:40:38 +00002385 yyval.a_expr = yyvsp[0].a_expr;
2386 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2387 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2388 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
vlm1aeaddd2006-07-13 08:24:20 +00002389 }
2390 break;
2391
vlmd3420d32006-09-14 10:35:20 +00002392 case 67:
vlm43c8ac52006-09-17 04:52:50 +00002393#line 822 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00002394 {
2395 yyval.a_expr = yyvsp[0].a_expr;
2396 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2397 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
2398 }
2399 break;
2400
2401 case 68:
vlm43c8ac52006-09-17 04:52:50 +00002402#line 828 "asn1p_y.y"
2403 {
2404 yyval.a_expr = yyvsp[0].a_expr;
2405 yyval.a_expr->Identifier = yyvsp[-5].tv_str;
2406 yyval.a_expr->lhs_params = yyvsp[-3].a_plist;
2407 }
2408 break;
2409
2410 case 69:
2411#line 836 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00002412 {
vlmfa67ddc2004-06-03 03:38:44 +00002413 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002414 yyval.a_plist = asn1p_paramlist_new(yylineno);
2415 checkmem(yyval.a_plist);
2416 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
vlmfa67ddc2004-06-03 03:38:44 +00002417 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002418 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2419 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm1aeaddd2006-07-13 08:24:20 +00002420 }
2421 break;
2422
vlm43c8ac52006-09-17 04:52:50 +00002423 case 70:
2424#line 845 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002425 {
vlmfa67ddc2004-06-03 03:38:44 +00002426 int ret;
vlm0c6d3812006-03-21 03:40:38 +00002427 yyval.a_plist = yyvsp[-2].a_plist;
2428 ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
vlmfa67ddc2004-06-03 03:38:44 +00002429 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00002430 if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
2431 if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
vlm1aeaddd2006-07-13 08:24:20 +00002432 }
2433 break;
2434
vlm43c8ac52006-09-17 04:52:50 +00002435 case 71:
2436#line 856 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002437 {
vlm0c6d3812006-03-21 03:40:38 +00002438 yyval.a_parg.governor = NULL;
2439 yyval.a_parg.argument = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00002440 }
2441 break;
2442
vlm1aeaddd2006-07-13 08:24:20 +00002443 case 72:
vlm43c8ac52006-09-17 04:52:50 +00002444#line 860 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00002445 {
2446 int ret;
2447 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2448 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
2449 checkmem(ret == 0);
2450 yyval.a_parg.argument = yyvsp[0].tv_str;
2451 }
2452 break;
2453
2454 case 73:
vlm43c8ac52006-09-17 04:52:50 +00002455#line 867 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00002456 {
2457 int ret;
2458 yyval.a_parg.governor = asn1p_ref_new(yylineno);
vlm43c8ac52006-09-17 04:52:50 +00002459 ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
vlmd3420d32006-09-14 10:35:20 +00002460 checkmem(ret == 0);
2461 yyval.a_parg.argument = yyvsp[0].tv_str;
2462 }
2463 break;
2464
2465 case 74:
vlm43c8ac52006-09-17 04:52:50 +00002466#line 874 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00002467 {
2468 int ret;
2469 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2470 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2471 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2472 checkmem(ret == 0);
2473 yyval.a_parg.argument = yyvsp[0].tv_str;
2474 }
2475 break;
2476
2477 case 75:
2478#line 882 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002479 {
vlm43c8ac52006-09-17 04:52:50 +00002480 int ret;
2481 yyval.a_parg.governor = asn1p_ref_new(yylineno);
2482 ret = asn1p_ref_add_component(yyval.a_parg.governor,
2483 ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
2484 checkmem(ret == 0);
2485 yyval.a_parg.argument = yyvsp[0].tv_str;
2486 }
2487 break;
2488
2489 case 76:
2490#line 893 "asn1p_y.y"
2491 {
2492 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002493 checkmem(yyval.a_expr);
2494 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002495 }
2496 break;
2497
vlm43c8ac52006-09-17 04:52:50 +00002498 case 77:
2499#line 898 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002500 {
vlm0c6d3812006-03-21 03:40:38 +00002501 yyval.a_expr = yyvsp[-2].a_expr;
2502 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002503 }
2504 break;
2505
vlm43c8ac52006-09-17 04:52:50 +00002506 case 78:
2507#line 905 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002508 {
vlm0c6d3812006-03-21 03:40:38 +00002509 yyval.a_expr = yyvsp[0].a_expr;
vlm1aeaddd2006-07-13 08:24:20 +00002510 }
2511 break;
2512
vlm43c8ac52006-09-17 04:52:50 +00002513 case 79:
2514#line 908 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002515 {
vlm43c8ac52006-09-17 04:52:50 +00002516 yyval.a_expr = NEW_EXPR();
vlm17e65d02006-03-21 04:48:15 +00002517 checkmem(yyval.a_expr);
2518 yyval.a_expr->Identifier = "?";
2519 yyval.a_expr->expr_type = A1TC_REFERENCE;
2520 yyval.a_expr->meta_type = AMT_VALUE;
2521 yyval.a_expr->value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00002522 }
2523 break;
2524
vlm43c8ac52006-09-17 04:52:50 +00002525 case 80:
2526#line 916 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002527 {
vlm0c6d3812006-03-21 03:40:38 +00002528 asn1p_ref_t *ref;
vlm43c8ac52006-09-17 04:52:50 +00002529 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002530 checkmem(yyval.a_expr);
2531 yyval.a_expr->Identifier = yyvsp[0].tv_str;
2532 yyval.a_expr->expr_type = A1TC_REFERENCE;
2533 yyval.a_expr->meta_type = AMT_VALUE;
2534 ref = asn1p_ref_new(yylineno);
2535 asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
2536 yyval.a_expr->value = asn1p_value_fromref(ref, 0);
vlm1aeaddd2006-07-13 08:24:20 +00002537 }
2538 break;
2539
vlm43c8ac52006-09-17 04:52:50 +00002540 case 81:
2541#line 927 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002542 {
vlm43c8ac52006-09-17 04:52:50 +00002543 yyval.a_expr = NEW_EXPR();
vlmdfbff8c2006-03-21 09:41:28 +00002544 yyval.a_expr->expr_type = A1TC_VALUESET;
2545 yyval.a_expr->meta_type = AMT_VALUESET;
2546 yyval.a_expr->constraints = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00002547 }
2548 break;
2549
vlmd3420d32006-09-14 10:35:20 +00002550 case 82:
vlm43c8ac52006-09-17 04:52:50 +00002551#line 950 "asn1p_y.y"
2552 { yyval.a_expr = NEW_EXPR(); }
vlm1aeaddd2006-07-13 08:24:20 +00002553 break;
2554
vlmd3420d32006-09-14 10:35:20 +00002555 case 83:
vlm43c8ac52006-09-17 04:52:50 +00002556#line 951 "asn1p_y.y"
2557 { yyval.a_expr = yyvsp[0].a_expr; }
2558 break;
2559
2560 case 84:
2561#line 954 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002562 {
vlm43c8ac52006-09-17 04:52:50 +00002563 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002564 checkmem(yyval.a_expr);
2565 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002566 }
2567 break;
2568
vlm43c8ac52006-09-17 04:52:50 +00002569 case 85:
2570#line 959 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002571 {
vlm0c6d3812006-03-21 03:40:38 +00002572 yyval.a_expr = yyvsp[-2].a_expr;
2573 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002574 }
2575 break;
2576
vlm43c8ac52006-09-17 04:52:50 +00002577 case 86:
2578#line 966 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002579 {
vlm0c6d3812006-03-21 03:40:38 +00002580 yyval.a_expr = yyvsp[-1].a_expr;
2581 assert(yyval.a_expr->Identifier == 0);
2582 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2583 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2584 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm1aeaddd2006-07-13 08:24:20 +00002585 }
2586 break;
2587
vlm43c8ac52006-09-17 04:52:50 +00002588 case 87:
2589#line 973 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002590 {
vlm0c6d3812006-03-21 03:40:38 +00002591 yyval.a_expr = yyvsp[-1].a_expr;
2592 yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
2593 yyval.a_expr->marker = yyvsp[0].a_marker;
2594 _fixup_anonymous_identifier(yyval.a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002595 }
2596 break;
2597
vlm43c8ac52006-09-17 04:52:50 +00002598 case 88:
2599#line 979 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002600 {
vlm43c8ac52006-09-17 04:52:50 +00002601 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002602 checkmem(yyval.a_expr);
2603 yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
2604 yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
2605 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002606 }
2607 break;
2608
vlm43c8ac52006-09-17 04:52:50 +00002609 case 89:
2610#line 986 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002611 {
vlm0c6d3812006-03-21 03:40:38 +00002612 yyval.a_expr = yyvsp[0].a_expr;
vlm1aeaddd2006-07-13 08:24:20 +00002613 }
2614 break;
2615
vlm43c8ac52006-09-17 04:52:50 +00002616 case 90:
2617#line 992 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002618 {
vlm43c8ac52006-09-17 04:52:50 +00002619 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002620 checkmem(yyval.a_expr);
2621 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002622 }
2623 break;
2624
vlm43c8ac52006-09-17 04:52:50 +00002625 case 91:
2626#line 997 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002627 {
vlm0c6d3812006-03-21 03:40:38 +00002628 yyval.a_expr = yyvsp[-2].a_expr;
2629 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002630 }
2631 break;
2632
vlm43c8ac52006-09-17 04:52:50 +00002633 case 92:
2634#line 1004 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002635 {
vlm0c6d3812006-03-21 03:40:38 +00002636 yyval.a_expr = yyvsp[0].a_expr;
2637 assert(yyval.a_expr->Identifier == 0);
2638 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00002639 }
2640 break;
2641
vlm43c8ac52006-09-17 04:52:50 +00002642 case 93:
2643#line 1009 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002644 {
vlm0c6d3812006-03-21 03:40:38 +00002645 yyval.a_expr = yyvsp[0].a_expr;
vlm1aeaddd2006-07-13 08:24:20 +00002646 }
2647 break;
2648
vlm43c8ac52006-09-17 04:52:50 +00002649 case 94:
2650#line 1012 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002651 {
vlm0c6d3812006-03-21 03:40:38 +00002652 yyval.a_expr = yyvsp[0].a_expr;
2653 _fixup_anonymous_identifier(yyval.a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002654 }
2655 break;
2656
vlm43c8ac52006-09-17 04:52:50 +00002657 case 95:
2658#line 1019 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002659 {
vlm0c6d3812006-03-21 03:40:38 +00002660 yyval.a_expr = yyvsp[-2].a_expr;
2661 checkmem(yyval.a_expr);
2662 yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
2663 assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
2664 assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS);
vlm1aeaddd2006-07-13 08:24:20 +00002665 }
2666 break;
2667
vlm43c8ac52006-09-17 04:52:50 +00002668 case 96:
2669#line 1029 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002670 { yyval.a_int = 0; }
2671 break;
2672
vlm43c8ac52006-09-17 04:52:50 +00002673 case 97:
2674#line 1030 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002675 { yyval.a_int = 1; }
2676 break;
2677
vlm43c8ac52006-09-17 04:52:50 +00002678 case 98:
2679#line 1034 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002680 {
vlm43c8ac52006-09-17 04:52:50 +00002681 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002682 checkmem(yyval.a_expr);
2683 yyval.a_expr->expr_type = A1TC_CLASSDEF;
2684 yyval.a_expr->meta_type = AMT_OBJECTCLASS;
2685 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002686 }
2687 break;
2688
vlm43c8ac52006-09-17 04:52:50 +00002689 case 99:
2690#line 1041 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002691 {
vlm0c6d3812006-03-21 03:40:38 +00002692 yyval.a_expr = yyvsp[-2].a_expr;
2693 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002694 }
2695 break;
2696
vlm43c8ac52006-09-17 04:52:50 +00002697 case 100:
2698#line 1051 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002699 {
vlm43c8ac52006-09-17 04:52:50 +00002700 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002701 checkmem(yyval.a_expr);
2702 yyval.a_expr->Identifier = yyvsp[-1].tv_str;
2703 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2704 yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */
2705 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm1aeaddd2006-07-13 08:24:20 +00002706 }
2707 break;
2708
vlm43c8ac52006-09-17 04:52:50 +00002709 case 101:
2710#line 1061 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002711 {
vlm43c8ac52006-09-17 04:52:50 +00002712 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002713 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
2714 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2715 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */
2716 yyval.a_expr->unique = yyvsp[-1].a_int;
2717 yyval.a_expr->marker = yyvsp[0].a_marker;
2718 asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002719 }
2720 break;
2721
vlm43c8ac52006-09-17 04:52:50 +00002722 case 102:
2723#line 1072 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002724 {
vlm43c8ac52006-09-17 04:52:50 +00002725 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002726 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2727 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2728 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS;
2729 yyval.a_expr->reference = yyvsp[-1].a_ref;
2730 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm1aeaddd2006-07-13 08:24:20 +00002731 }
2732 break;
2733
vlm43c8ac52006-09-17 04:52:50 +00002734 case 103:
2735#line 1082 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002736 {
vlm43c8ac52006-09-17 04:52:50 +00002737 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002738 checkmem(yyval.a_expr);
2739 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2740 yyval.a_expr->reference = yyvsp[-1].a_ref;
2741 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2742 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS;
2743 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm1aeaddd2006-07-13 08:24:20 +00002744 }
2745 break;
2746
vlm43c8ac52006-09-17 04:52:50 +00002747 case 104:
2748#line 1093 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002749 {
vlm43c8ac52006-09-17 04:52:50 +00002750 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002751 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2752 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2753 yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS;
2754 yyval.a_expr->reference = yyvsp[-1].a_ref;
2755 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm1aeaddd2006-07-13 08:24:20 +00002756 }
2757 break;
2758
vlm43c8ac52006-09-17 04:52:50 +00002759 case 105:
2760#line 1103 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002761 {
vlm43c8ac52006-09-17 04:52:50 +00002762 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002763 checkmem(yyval.a_expr);
2764 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2765 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2766 yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS;
2767 asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr);
2768 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm1aeaddd2006-07-13 08:24:20 +00002769 }
2770 break;
2771
vlm43c8ac52006-09-17 04:52:50 +00002772 case 106:
2773#line 1114 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002774 {
vlm43c8ac52006-09-17 04:52:50 +00002775 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002776 checkmem(yyval.a_expr);
2777 yyval.a_expr->Identifier = yyvsp[-2].tv_str;
2778 yyval.a_expr->reference = yyvsp[-1].a_ref;
2779 yyval.a_expr->meta_type = AMT_OBJECTFIELD;
2780 yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS;
2781 yyval.a_expr->marker = yyvsp[0].a_marker;
vlm1aeaddd2006-07-13 08:24:20 +00002782 }
2783 break;
2784
vlm43c8ac52006-09-17 04:52:50 +00002785 case 107:
2786#line 1126 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002787 { yyval.a_wsynt = 0; }
2788 break;
2789
vlm43c8ac52006-09-17 04:52:50 +00002790 case 108:
2791#line 1127 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002792 {
vlm0c6d3812006-03-21 03:40:38 +00002793 yyval.a_wsynt = yyvsp[0].a_wsynt;
vlm1aeaddd2006-07-13 08:24:20 +00002794 }
2795 break;
2796
vlm43c8ac52006-09-17 04:52:50 +00002797 case 109:
2798#line 1134 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002799 { asn1p_lexer_hack_enable_with_syntax(); }
2800 break;
2801
vlm43c8ac52006-09-17 04:52:50 +00002802 case 110:
2803#line 1136 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002804 {
vlm0c6d3812006-03-21 03:40:38 +00002805 yyval.a_wsynt = yyvsp[-1].a_wsynt;
vlm1aeaddd2006-07-13 08:24:20 +00002806 }
2807 break;
2808
vlm43c8ac52006-09-17 04:52:50 +00002809 case 111:
2810#line 1142 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002811 {
vlm0c6d3812006-03-21 03:40:38 +00002812 yyval.a_wsynt = asn1p_wsyntx_new();
2813 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm1aeaddd2006-07-13 08:24:20 +00002814 }
2815 break;
2816
vlm43c8ac52006-09-17 04:52:50 +00002817 case 112:
2818#line 1146 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002819 {
vlm0c6d3812006-03-21 03:40:38 +00002820 yyval.a_wsynt = yyvsp[-1].a_wsynt;
2821 TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
vlm1aeaddd2006-07-13 08:24:20 +00002822 }
2823 break;
2824
vlm43c8ac52006-09-17 04:52:50 +00002825 case 113:
2826#line 1153 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002827 {
vlm1fcf7592006-08-18 02:27:55 +00002828 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_opaque.buf, 0);
vlm0c6d3812006-03-21 03:40:38 +00002829 yyval.a_wchunk->type = WC_WHITESPACE;
vlm1aeaddd2006-07-13 08:24:20 +00002830 }
2831 break;
2832
vlm43c8ac52006-09-17 04:52:50 +00002833 case 114:
2834#line 1157 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002835 {
vlm1fcf7592006-08-18 02:27:55 +00002836 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_str, 0);
vlm1aeaddd2006-07-13 08:24:20 +00002837 }
2838 break;
2839
vlm43c8ac52006-09-17 04:52:50 +00002840 case 115:
2841#line 1160 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002842 {
vlm1fcf7592006-08-18 02:27:55 +00002843 yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].a_refcomp.name, 0);
vlm0c6d3812006-03-21 03:40:38 +00002844 yyval.a_wchunk->type = WC_FIELD;
vlm1aeaddd2006-07-13 08:24:20 +00002845 }
2846 break;
2847
vlm43c8ac52006-09-17 04:52:50 +00002848 case 116:
2849#line 1164 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002850 {
vlm0c6d3812006-03-21 03:40:38 +00002851 yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
vlm1aeaddd2006-07-13 08:24:20 +00002852 }
2853 break;
2854
vlmd3420d32006-09-14 10:35:20 +00002855 case 117:
vlm43c8ac52006-09-17 04:52:50 +00002856#line 1170 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00002857 {
vlm43c8ac52006-09-17 04:52:50 +00002858 yyval.a_expr = NEW_EXPR();
vlmd3420d32006-09-14 10:35:20 +00002859 checkmem(yyval.a_expr);
2860 yyval.a_expr->Identifier = strdup("...");
2861 checkmem(yyval.a_expr->Identifier);
vlmd3420d32006-09-14 10:35:20 +00002862 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2863 yyval.a_expr->meta_type = AMT_TYPE;
2864 }
2865 break;
2866
2867 case 118:
vlm43c8ac52006-09-17 04:52:50 +00002868#line 1178 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00002869 {
vlm43c8ac52006-09-17 04:52:50 +00002870 yyval.a_expr = NEW_EXPR();
2871 checkmem(yyval.a_expr);
2872 yyval.a_expr->Identifier = strdup("...");
2873 checkmem(yyval.a_expr->Identifier);
2874 yyval.a_expr->value = yyvsp[0].a_value;
2875 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2876 yyval.a_expr->meta_type = AMT_TYPE;
2877 }
2878 break;
2879
2880 case 119:
2881#line 1187 "asn1p_y.y"
2882 {
2883 yyval.a_expr = NEW_EXPR();
vlmd3420d32006-09-14 10:35:20 +00002884 checkmem(yyval.a_expr);
2885 yyval.a_expr->Identifier = strdup("...");
2886 yyval.a_expr->value = yyvsp[0].a_value;
2887 checkmem(yyval.a_expr->Identifier);
2888 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
2889 yyval.a_expr->meta_type = AMT_TYPE;
2890 }
2891 break;
2892
vlm43c8ac52006-09-17 04:52:50 +00002893 case 120:
2894#line 1199 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002895 {
vlm0c6d3812006-03-21 03:40:38 +00002896 yyval.a_expr = yyvsp[-1].a_expr;
2897 yyval.a_expr->tag = yyvsp[-2].a_tag;
vlmec8f6812004-08-22 03:19:54 +00002898 /*
2899 * Outer constraint for SEQUENCE OF and SET OF applies
2900 * to the inner type.
2901 */
vlm0c6d3812006-03-21 03:40:38 +00002902 if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
2903 || yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
2904 assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
2905 TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002906 } else {
vlm0c6d3812006-03-21 03:40:38 +00002907 if(yyval.a_expr->constraints) {
2908 assert(!yyvsp[-1].a_expr);
vlmec8f6812004-08-22 03:19:54 +00002909 } else {
vlm0c6d3812006-03-21 03:40:38 +00002910 yyval.a_expr->constraints = yyvsp[0].a_constr;
vlmec8f6812004-08-22 03:19:54 +00002911 }
2912 }
vlm1aeaddd2006-07-13 08:24:20 +00002913 }
2914 break;
2915
vlm43c8ac52006-09-17 04:52:50 +00002916 case 121:
2917#line 1221 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002918 {
vlm0c6d3812006-03-21 03:40:38 +00002919 yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
vlm7e436752006-03-18 06:53:11 +00002920 asn1p_as_pointer = 0;
vlm1aeaddd2006-07-13 08:24:20 +00002921 }
2922 break;
2923
vlm43c8ac52006-09-17 04:52:50 +00002924 case 122:
2925#line 1228 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002926 {
vlm0c6d3812006-03-21 03:40:38 +00002927 yyval.a_expr = yyvsp[0].a_expr;
2928 yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
vlm7e436752006-03-18 06:53:11 +00002929
vlm0c6d3812006-03-21 03:40:38 +00002930 if((yyval.a_expr->marker.flags & EM_INDIRECT)
2931 && (yyval.a_expr->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
vlm177a5b62005-09-05 05:17:57 +00002932 fprintf(stderr,
2933 "INFO: Directive <ASN1C:RepresentAsPointer> "
2934 "applied to %s at line %d\n",
vlm0c6d3812006-03-21 03:40:38 +00002935 ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
2936 ? ASN_EXPR_TYPE2STR(yyval.a_expr->expr_type)
vlm177a5b62005-09-05 05:17:57 +00002937 : "member",
vlm0c6d3812006-03-21 03:40:38 +00002938 yyval.a_expr->_lineno
vlm177a5b62005-09-05 05:17:57 +00002939 );
2940 }
vlm1aeaddd2006-07-13 08:24:20 +00002941 }
2942 break;
2943
vlm43c8ac52006-09-17 04:52:50 +00002944 case 123:
2945#line 1247 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002946 {
vlm0c6d3812006-03-21 03:40:38 +00002947 yyval.a_expr = yyvsp[0].a_expr;
vlm1aeaddd2006-07-13 08:24:20 +00002948 }
2949 break;
2950
vlm43c8ac52006-09-17 04:52:50 +00002951 case 124:
2952#line 1250 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002953 {
vlm0c6d3812006-03-21 03:40:38 +00002954 yyval.a_expr = yyvsp[-1].a_expr;
2955 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2956 yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
2957 yyval.a_expr->meta_type = AMT_TYPE;
vlm1aeaddd2006-07-13 08:24:20 +00002958 }
2959 break;
2960
vlm43c8ac52006-09-17 04:52:50 +00002961 case 125:
2962#line 1256 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002963 {
vlm0c6d3812006-03-21 03:40:38 +00002964 yyval.a_expr = yyvsp[-1].a_expr;
2965 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2966 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
2967 yyval.a_expr->meta_type = AMT_TYPE;
vlm1aeaddd2006-07-13 08:24:20 +00002968 }
2969 break;
2970
vlm43c8ac52006-09-17 04:52:50 +00002971 case 126:
2972#line 1262 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002973 {
vlm0c6d3812006-03-21 03:40:38 +00002974 yyval.a_expr = yyvsp[-1].a_expr;
2975 assert(yyval.a_expr->expr_type == A1TC_INVALID);
2976 yyval.a_expr->expr_type = ASN_CONSTR_SET;
2977 yyval.a_expr->meta_type = AMT_TYPE;
vlm1aeaddd2006-07-13 08:24:20 +00002978 }
2979 break;
2980
vlm43c8ac52006-09-17 04:52:50 +00002981 case 127:
2982#line 1268 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002983 {
vlm43c8ac52006-09-17 04:52:50 +00002984 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002985 checkmem(yyval.a_expr);
2986 yyval.a_expr->constraints = yyvsp[-4].a_constr;
2987 yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
2988 yyval.a_expr->meta_type = AMT_TYPE;
2989 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
2990 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
2991 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00002992 }
2993 break;
2994
vlm43c8ac52006-09-17 04:52:50 +00002995 case 128:
2996#line 1278 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00002997 {
vlm43c8ac52006-09-17 04:52:50 +00002998 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00002999 checkmem(yyval.a_expr);
3000 yyval.a_expr->constraints = yyvsp[-4].a_constr;
3001 yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
3002 yyval.a_expr->meta_type = AMT_TYPE;
3003 yyvsp[0].a_expr->Identifier = yyvsp[-2].tv_str;
3004 yyvsp[0].a_expr->tag = yyvsp[-1].a_tag;
3005 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00003006 }
3007 break;
3008
vlm43c8ac52006-09-17 04:52:50 +00003009 case 129:
3010#line 1288 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003011 {
vlm43c8ac52006-09-17 04:52:50 +00003012 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00003013 checkmem(yyval.a_expr);
3014 yyval.a_expr->expr_type = ASN_TYPE_ANY;
3015 yyval.a_expr->meta_type = AMT_TYPE;
vlm1aeaddd2006-07-13 08:24:20 +00003016 }
3017 break;
3018
vlm43c8ac52006-09-17 04:52:50 +00003019 case 130:
3020#line 1294 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003021 {
vlmec8f6812004-08-22 03:19:54 +00003022 int ret;
vlm43c8ac52006-09-17 04:52:50 +00003023 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00003024 checkmem(yyval.a_expr);
3025 yyval.a_expr->reference = asn1p_ref_new(yylineno);
3026 ret = asn1p_ref_add_component(yyval.a_expr->reference,
3027 yyvsp[0].tv_str, RLT_lowercase);
vlmec8f6812004-08-22 03:19:54 +00003028 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003029 yyval.a_expr->expr_type = ASN_TYPE_ANY;
3030 yyval.a_expr->meta_type = AMT_TYPE;
vlm1aeaddd2006-07-13 08:24:20 +00003031 }
3032 break;
3033
vlm43c8ac52006-09-17 04:52:50 +00003034 case 131:
3035#line 1305 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003036 {
vlm43c8ac52006-09-17 04:52:50 +00003037 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00003038 checkmem(yyval.a_expr);
3039 yyval.a_expr->reference = yyvsp[0].a_ref;
3040 yyval.a_expr->expr_type = A1TC_INSTANCE;
3041 yyval.a_expr->meta_type = AMT_TYPE;
vlm1aeaddd2006-07-13 08:24:20 +00003042 }
3043 break;
3044
vlm43c8ac52006-09-17 04:52:50 +00003045 case 132:
3046#line 1320 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003047 {
vlmfa67ddc2004-06-03 03:38:44 +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[0].tv_str, RLT_UNKNOWN);
vlmfa67ddc2004-06-03 03:38:44 +00003052 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003053 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003054 }
3055 break;
3056
vlmd3420d32006-09-14 10:35:20 +00003057 case 133:
vlm43c8ac52006-09-17 04:52:50 +00003058#line 1328 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003059 {
vlm808411d2006-03-14 16:31:37 +00003060 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003061 yyval.a_ref = asn1p_ref_new(yylineno);
3062 checkmem(yyval.a_ref);
3063 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
vlm808411d2006-03-14 16:31:37 +00003064 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003065 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
vlm808411d2006-03-14 16:31:37 +00003066 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003067 free(yyvsp[-2].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003068 }
3069 break;
3070
vlmd3420d32006-09-14 10:35:20 +00003071 case 134:
vlm43c8ac52006-09-17 04:52:50 +00003072#line 1338 "asn1p_y.y"
3073 {
3074 int ret;
3075 yyval.a_ref = asn1p_ref_new(yylineno);
3076 checkmem(yyval.a_ref);
3077 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
3078 checkmem(ret == 0);
3079 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
3080 checkmem(ret == 0);
3081 free(yyvsp[-2].tv_str);
3082 }
3083 break;
3084
3085 case 135:
3086#line 1348 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003087 {
vlm808411d2006-03-14 16:31:37 +00003088 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003089 yyval.a_ref = asn1p_ref_new(yylineno);
3090 checkmem(yyval.a_ref);
3091 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
vlm808411d2006-03-14 16:31:37 +00003092 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003093 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
vlm808411d2006-03-14 16:31:37 +00003094 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003095 free(yyvsp[-2].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003096 }
3097 break;
3098
vlm43c8ac52006-09-17 04:52:50 +00003099 case 136:
3100#line 1358 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003101 {
vlmfa67ddc2004-06-03 03:38:44 +00003102 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003103 yyval.a_ref = asn1p_ref_new(yylineno);
3104 checkmem(yyval.a_ref);
3105 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
3106 free(yyvsp[0].tv_str);
vlmc94e28f2004-09-15 11:59:51 +00003107 checkmem(ret == 0);
vlm1aeaddd2006-07-13 08:24:20 +00003108 }
3109 break;
3110
vlm43c8ac52006-09-17 04:52:50 +00003111 case 137:
3112#line 1366 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003113 {
vlmc94e28f2004-09-15 11:59:51 +00003114 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003115 yyval.a_ref = yyvsp[0].a_ref;
3116 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
3117 free(yyvsp[-2].tv_str);
vlmfa67ddc2004-06-03 03:38:44 +00003118 checkmem(ret == 0);
3119 /*
3120 * Move the last element infront.
3121 */
3122 {
3123 struct asn1p_ref_component_s tmp_comp;
vlm0c6d3812006-03-21 03:40:38 +00003124 tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
3125 memmove(&yyval.a_ref->components[1],
3126 &yyval.a_ref->components[0],
3127 sizeof(yyval.a_ref->components[0])
3128 * (yyval.a_ref->comp_count - 1));
3129 yyval.a_ref->components[0] = tmp_comp;
vlmfa67ddc2004-06-03 03:38:44 +00003130 }
vlm1aeaddd2006-07-13 08:24:20 +00003131 }
3132 break;
3133
vlm43c8ac52006-09-17 04:52:50 +00003134 case 138:
3135#line 1388 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003136 {
vlmfa67ddc2004-06-03 03:38:44 +00003137 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003138 yyval.a_ref = asn1p_ref_new(yylineno);
3139 checkmem(yyval.a_ref);
3140 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
3141 free(yyvsp[0].a_refcomp.name);
vlmfa67ddc2004-06-03 03:38:44 +00003142 checkmem(ret == 0);
vlm1aeaddd2006-07-13 08:24:20 +00003143 }
3144 break;
3145
vlm43c8ac52006-09-17 04:52:50 +00003146 case 139:
3147#line 1396 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003148 {
vlmfa67ddc2004-06-03 03:38:44 +00003149 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003150 yyval.a_ref = yyvsp[-2].a_ref;
3151 ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
3152 free(yyvsp[0].a_refcomp.name);
vlmfa67ddc2004-06-03 03:38:44 +00003153 checkmem(ret == 0);
vlm1aeaddd2006-07-13 08:24:20 +00003154 }
3155 break;
3156
vlm43c8ac52006-09-17 04:52:50 +00003157 case 141:
3158#line 1409 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003159 {
vlm0c6d3812006-03-21 03:40:38 +00003160 yyval.a_refcomp.lex_type = RLT_AmpUppercase;
3161 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00003162 }
3163 break;
3164
vlm43c8ac52006-09-17 04:52:50 +00003165 case 142:
3166#line 1414 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003167 {
vlm0c6d3812006-03-21 03:40:38 +00003168 yyval.a_refcomp.lex_type = RLT_Amplowercase;
3169 yyval.a_refcomp.name = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00003170 }
3171 break;
3172
vlm43c8ac52006-09-17 04:52:50 +00003173 case 143:
3174#line 1423 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003175 {
vlm0c6d3812006-03-21 03:40:38 +00003176 yyval.a_ref = asn1p_ref_new(yylineno);
3177 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
vlm1aeaddd2006-07-13 08:24:20 +00003178 }
3179 break;
3180
vlm43c8ac52006-09-17 04:52:50 +00003181 case 144:
3182#line 1427 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003183 {
vlm0c6d3812006-03-21 03:40:38 +00003184 yyval.a_ref = yyval.a_ref;
3185 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
vlm1aeaddd2006-07-13 08:24:20 +00003186 }
3187 break;
3188
vlm43c8ac52006-09-17 04:52:50 +00003189 case 145:
3190#line 1431 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003191 {
vlm0c6d3812006-03-21 03:40:38 +00003192 yyval.a_ref = yyval.a_ref;
3193 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
vlm1aeaddd2006-07-13 08:24:20 +00003194 }
3195 break;
3196
vlm43c8ac52006-09-17 04:52:50 +00003197 case 146:
3198#line 1438 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003199 {
vlm0c6d3812006-03-21 03:40:38 +00003200 yyval.a_ref = asn1p_ref_new(yylineno);
3201 asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
vlm1aeaddd2006-07-13 08:24:20 +00003202 }
3203 break;
3204
vlm43c8ac52006-09-17 04:52:50 +00003205 case 147:
3206#line 1458 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003207 {
vlm0c6d3812006-03-21 03:40:38 +00003208 yyval.a_expr = yyvsp[-2].a_expr;
3209 assert(yyval.a_expr->Identifier == NULL);
3210 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
3211 yyval.a_expr->meta_type = AMT_VALUE;
3212 yyval.a_expr->value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00003213 }
3214 break;
3215
vlm43c8ac52006-09-17 04:52:50 +00003216 case 150:
3217#line 1470 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003218 {
vlm0c6d3812006-03-21 03:40:38 +00003219 yyval.a_value = asn1p_value_fromint(0);
3220 checkmem(yyval.a_value);
3221 yyval.a_value->type = ATV_CHOICE_IDENTIFIER;
3222 yyval.a_value->value.choice_identifier.identifier = yyvsp[-2].tv_str;
3223 yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00003224 }
3225 break;
3226
vlm43c8ac52006-09-17 04:52:50 +00003227 case 151:
3228#line 1477 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003229 { asn1p_lexer_hack_push_opaque_state(); }
3230 break;
3231
vlm43c8ac52006-09-17 04:52:50 +00003232 case 152:
3233#line 1477 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003234 {
vlm0c6d3812006-03-21 03:40:38 +00003235 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3236 checkmem(yyval.a_value);
3237 yyval.a_value->type = ATV_UNPARSED;
vlm1aeaddd2006-07-13 08:24:20 +00003238 }
3239 break;
3240
vlm43c8ac52006-09-17 04:52:50 +00003241 case 153:
3242#line 1482 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003243 {
vlm0c6d3812006-03-21 03:40:38 +00003244 yyval.a_value = asn1p_value_fromint(0);
3245 checkmem(yyval.a_value);
3246 yyval.a_value->type = ATV_NULL;
vlm1aeaddd2006-07-13 08:24:20 +00003247 }
3248 break;
3249
vlm43c8ac52006-09-17 04:52:50 +00003250 case 154:
3251#line 1490 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003252 {
vlm0c6d3812006-03-21 03:40:38 +00003253 yyval.a_value = asn1p_value_fromint(0);
3254 checkmem(yyval.a_value);
3255 yyval.a_value->type = ATV_FALSE;
vlm1aeaddd2006-07-13 08:24:20 +00003256 }
3257 break;
3258
vlm43c8ac52006-09-17 04:52:50 +00003259 case 155:
3260#line 1495 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003261 {
vlm0c6d3812006-03-21 03:40:38 +00003262 yyval.a_value = asn1p_value_fromint(0);
3263 checkmem(yyval.a_value);
3264 yyval.a_value->type = ATV_TRUE;
vlm1aeaddd2006-07-13 08:24:20 +00003265 }
3266 break;
3267
vlm43c8ac52006-09-17 04:52:50 +00003268 case 156:
3269#line 1500 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003270 {
vlm0c6d3812006-03-21 03:40:38 +00003271 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
3272 checkmem(yyval.a_value);
vlm1aeaddd2006-07-13 08:24:20 +00003273 }
3274 break;
3275
vlm43c8ac52006-09-17 04:52:50 +00003276 case 157:
3277#line 1504 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003278 {
vlm0c6d3812006-03-21 03:40:38 +00003279 yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
3280 checkmem(yyval.a_value);
vlm1aeaddd2006-07-13 08:24:20 +00003281 }
3282 break;
3283
vlm43c8ac52006-09-17 04:52:50 +00003284 case 158:
3285#line 1508 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003286 {
vlm0c6d3812006-03-21 03:40:38 +00003287 yyval.a_value = yyval.a_value;
vlm1aeaddd2006-07-13 08:24:20 +00003288 }
3289 break;
3290
vlm43c8ac52006-09-17 04:52:50 +00003291 case 159:
3292#line 1511 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003293 {
vlm17e65d02006-03-21 04:48:15 +00003294 yyval.a_value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00003295 }
3296 break;
3297
vlm43c8ac52006-09-17 04:52:50 +00003298 case 160:
3299#line 1517 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003300 {
vlmfa67ddc2004-06-03 03:38:44 +00003301 asn1p_ref_t *ref;
3302 int ret;
3303 ref = asn1p_ref_new(yylineno);
3304 checkmem(ref);
vlm0c6d3812006-03-21 03:40:38 +00003305 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
vlmfa67ddc2004-06-03 03:38:44 +00003306 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003307 yyval.a_value = asn1p_value_fromref(ref, 0);
3308 checkmem(yyval.a_value);
3309 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003310 }
3311 break;
3312
vlm43c8ac52006-09-17 04:52:50 +00003313 case 161:
3314#line 1528 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003315 {
vlmfa67ddc2004-06-03 03:38:44 +00003316 asn1p_ref_t *ref;
3317 int ret;
3318 ref = asn1p_ref_new(yylineno);
3319 checkmem(ref);
vlm0c6d3812006-03-21 03:40:38 +00003320 ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
vlmfa67ddc2004-06-03 03:38:44 +00003321 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003322 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
vlmfa67ddc2004-06-03 03:38:44 +00003323 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003324 yyval.a_value = asn1p_value_fromref(ref, 0);
3325 checkmem(yyval.a_value);
3326 free(yyvsp[-2].tv_str);
3327 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003328 }
3329 break;
3330
vlm43c8ac52006-09-17 04:52:50 +00003331 case 162:
3332#line 1546 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003333 {
vlm0c6d3812006-03-21 03:40:38 +00003334 yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3335 checkmem(yyval.a_value);
vlm1aeaddd2006-07-13 08:24:20 +00003336 }
3337 break;
3338
vlm43c8ac52006-09-17 04:52:50 +00003339 case 163:
3340#line 1550 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003341 {
vlm0c6d3812006-03-21 03:40:38 +00003342 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3343 checkmem(yyval.a_value);
3344 yyval.a_value->type = ATV_TUPLE;
vlm1aeaddd2006-07-13 08:24:20 +00003345 }
3346 break;
3347
vlm43c8ac52006-09-17 04:52:50 +00003348 case 164:
3349#line 1555 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003350 {
vlm0c6d3812006-03-21 03:40:38 +00003351 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
3352 checkmem(yyval.a_value);
3353 yyval.a_value->type = ATV_QUADRUPLE;
vlm1aeaddd2006-07-13 08:24:20 +00003354 }
3355 break;
3356
vlm43c8ac52006-09-17 04:52:50 +00003357 case 165:
3358#line 1589 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003359 {
vlm0c6d3812006-03-21 03:40:38 +00003360 yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
3361 yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
3362 checkmem(yyval.tv_opaque.buf);
3363 yyval.tv_opaque.buf[0] = '{';
3364 memcpy(yyval.tv_opaque.buf + 1, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
3365 yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
3366 free(yyvsp[0].tv_opaque.buf);
vlm1aeaddd2006-07-13 08:24:20 +00003367 }
3368 break;
3369
vlm43c8ac52006-09-17 04:52:50 +00003370 case 166:
3371#line 1598 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003372 {
vlm0c6d3812006-03-21 03:40:38 +00003373 int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
vlmfa67ddc2004-06-03 03:38:44 +00003374 char *p = malloc(newsize + 1);
3375 checkmem(p);
vlm0c6d3812006-03-21 03:40:38 +00003376 memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
3377 memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
vlmfa67ddc2004-06-03 03:38:44 +00003378 p[newsize] = '\0';
vlm0c6d3812006-03-21 03:40:38 +00003379 free(yyvsp[-1].tv_opaque.buf);
3380 free(yyvsp[0].tv_opaque.buf);
3381 yyval.tv_opaque.buf = p;
3382 yyval.tv_opaque.len = newsize;
vlm1aeaddd2006-07-13 08:24:20 +00003383 }
3384 break;
3385
vlm43c8ac52006-09-17 04:52:50 +00003386 case 167:
3387#line 1613 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003388 { yyval.a_type = ASN_BASIC_BOOLEAN; }
3389 break;
3390
vlm43c8ac52006-09-17 04:52:50 +00003391 case 168:
3392#line 1614 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003393 { yyval.a_type = ASN_BASIC_NULL; }
3394 break;
3395
vlm43c8ac52006-09-17 04:52:50 +00003396 case 169:
3397#line 1615 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003398 { yyval.a_type = ASN_BASIC_REAL; }
3399 break;
3400
vlm1aeaddd2006-07-13 08:24:20 +00003401 case 170:
vlm43c8ac52006-09-17 04:52:50 +00003402#line 1616 "asn1p_y.y"
3403 { yyval.a_type = yyvsp[0].a_type; }
vlm1aeaddd2006-07-13 08:24:20 +00003404 break;
3405
3406 case 171:
vlm43c8ac52006-09-17 04:52:50 +00003407#line 1617 "asn1p_y.y"
3408 { yyval.a_type = ASN_BASIC_OCTET_STRING; }
vlm1aeaddd2006-07-13 08:24:20 +00003409 break;
3410
3411 case 172:
vlm43c8ac52006-09-17 04:52:50 +00003412#line 1618 "asn1p_y.y"
3413 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
vlm1aeaddd2006-07-13 08:24:20 +00003414 break;
3415
3416 case 173:
vlm43c8ac52006-09-17 04:52:50 +00003417#line 1619 "asn1p_y.y"
3418 { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
vlm1aeaddd2006-07-13 08:24:20 +00003419 break;
3420
3421 case 174:
vlm43c8ac52006-09-17 04:52:50 +00003422#line 1620 "asn1p_y.y"
3423 { yyval.a_type = ASN_BASIC_EXTERNAL; }
vlm1aeaddd2006-07-13 08:24:20 +00003424 break;
3425
3426 case 175:
vlm43c8ac52006-09-17 04:52:50 +00003427#line 1621 "asn1p_y.y"
3428 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
vlm1aeaddd2006-07-13 08:24:20 +00003429 break;
3430
3431 case 176:
vlm43c8ac52006-09-17 04:52:50 +00003432#line 1622 "asn1p_y.y"
3433 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
vlm1aeaddd2006-07-13 08:24:20 +00003434 break;
3435
3436 case 177:
vlm43c8ac52006-09-17 04:52:50 +00003437#line 1623 "asn1p_y.y"
3438 { yyval.a_type = ASN_BASIC_UTCTime; }
vlm1aeaddd2006-07-13 08:24:20 +00003439 break;
3440
3441 case 178:
vlm43c8ac52006-09-17 04:52:50 +00003442#line 1624 "asn1p_y.y"
3443 { yyval.a_type = ASN_BASIC_GeneralizedTime; }
vlm1aeaddd2006-07-13 08:24:20 +00003444 break;
3445
3446 case 179:
vlm43c8ac52006-09-17 04:52:50 +00003447#line 1625 "asn1p_y.y"
3448 { yyval.a_type = yyvsp[0].a_type; }
vlmd3420d32006-09-14 10:35:20 +00003449 break;
3450
3451 case 180:
vlm43c8ac52006-09-17 04:52:50 +00003452#line 1632 "asn1p_y.y"
3453 { yyval.a_type = ASN_BASIC_INTEGER; }
vlmd3420d32006-09-14 10:35:20 +00003454 break;
3455
3456 case 181:
vlm43c8ac52006-09-17 04:52:50 +00003457#line 1633 "asn1p_y.y"
3458 { yyval.a_type = ASN_BASIC_ENUMERATED; }
vlmd3420d32006-09-14 10:35:20 +00003459 break;
3460
3461 case 182:
vlm43c8ac52006-09-17 04:52:50 +00003462#line 1634 "asn1p_y.y"
3463 { yyval.a_type = ASN_BASIC_BIT_STRING; }
3464 break;
3465
3466 case 183:
3467#line 1638 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003468 {
vlm43c8ac52006-09-17 04:52:50 +00003469 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00003470 checkmem(yyval.a_expr);
3471 yyval.a_expr->expr_type = yyvsp[0].a_type;
3472 yyval.a_expr->meta_type = AMT_TYPE;
vlm1aeaddd2006-07-13 08:24:20 +00003473 }
3474 break;
3475
vlm43c8ac52006-09-17 04:52:50 +00003476 case 184:
3477#line 1644 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003478 {
vlm0c6d3812006-03-21 03:40:38 +00003479 if(yyvsp[0].a_expr) {
3480 yyval.a_expr = yyvsp[0].a_expr;
vlmfa67ddc2004-06-03 03:38:44 +00003481 } else {
vlm43c8ac52006-09-17 04:52:50 +00003482 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00003483 checkmem(yyval.a_expr);
vlmfa67ddc2004-06-03 03:38:44 +00003484 }
vlm0c6d3812006-03-21 03:40:38 +00003485 yyval.a_expr->expr_type = yyvsp[-1].a_type;
3486 yyval.a_expr->meta_type = AMT_TYPE;
vlm1aeaddd2006-07-13 08:24:20 +00003487 }
3488 break;
3489
vlm43c8ac52006-09-17 04:52:50 +00003490 case 185:
3491#line 1657 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003492 { yyval.a_type = ASN_STRING_BMPString; }
3493 break;
3494
vlm43c8ac52006-09-17 04:52:50 +00003495 case 186:
3496#line 1658 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003497 {
vlm0c6d3812006-03-21 03:40:38 +00003498 yyval.a_type = ASN_STRING_GeneralString;
vlmc94e28f2004-09-15 11:59:51 +00003499 fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
vlm1aeaddd2006-07-13 08:24:20 +00003500 }
3501 break;
3502
vlm43c8ac52006-09-17 04:52:50 +00003503 case 187:
3504#line 1662 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003505 {
vlm0c6d3812006-03-21 03:40:38 +00003506 yyval.a_type = ASN_STRING_GraphicString;
vlmc94e28f2004-09-15 11:59:51 +00003507 fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
vlm1aeaddd2006-07-13 08:24:20 +00003508 }
3509 break;
3510
vlm43c8ac52006-09-17 04:52:50 +00003511 case 188:
3512#line 1666 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003513 { yyval.a_type = ASN_STRING_IA5String; }
3514 break;
3515
vlm43c8ac52006-09-17 04:52:50 +00003516 case 189:
3517#line 1667 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003518 { yyval.a_type = ASN_STRING_ISO646String; }
3519 break;
3520
vlm43c8ac52006-09-17 04:52:50 +00003521 case 190:
3522#line 1668 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003523 { yyval.a_type = ASN_STRING_NumericString; }
3524 break;
3525
vlm43c8ac52006-09-17 04:52:50 +00003526 case 191:
3527#line 1669 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003528 { yyval.a_type = ASN_STRING_PrintableString; }
3529 break;
3530
vlm43c8ac52006-09-17 04:52:50 +00003531 case 192:
3532#line 1670 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003533 {
vlm0c6d3812006-03-21 03:40:38 +00003534 yyval.a_type = ASN_STRING_T61String;
vlmc94e28f2004-09-15 11:59:51 +00003535 fprintf(stderr, "WARNING: T61String is not fully supported\n");
vlm1aeaddd2006-07-13 08:24:20 +00003536 }
3537 break;
3538
vlm43c8ac52006-09-17 04:52:50 +00003539 case 193:
3540#line 1674 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003541 { yyval.a_type = ASN_STRING_TeletexString; }
3542 break;
3543
vlm43c8ac52006-09-17 04:52:50 +00003544 case 194:
3545#line 1675 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003546 { yyval.a_type = ASN_STRING_UniversalString; }
3547 break;
3548
vlm43c8ac52006-09-17 04:52:50 +00003549 case 195:
3550#line 1676 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003551 { yyval.a_type = ASN_STRING_UTF8String; }
3552 break;
3553
vlm43c8ac52006-09-17 04:52:50 +00003554 case 196:
3555#line 1677 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003556 {
vlm0c6d3812006-03-21 03:40:38 +00003557 yyval.a_type = ASN_STRING_VideotexString;
vlmc94e28f2004-09-15 11:59:51 +00003558 fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
vlm1aeaddd2006-07-13 08:24:20 +00003559 }
3560 break;
3561
vlm43c8ac52006-09-17 04:52:50 +00003562 case 197:
3563#line 1681 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003564 { yyval.a_type = ASN_STRING_VisibleString; }
3565 break;
3566
vlm43c8ac52006-09-17 04:52:50 +00003567 case 198:
3568#line 1682 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003569 { yyval.a_type = ASN_STRING_ObjectDescriptor; }
3570 break;
3571
vlm43c8ac52006-09-17 04:52:50 +00003572 case 204:
3573#line 1694 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003574 { yyval.a_constr = 0; }
3575 break;
3576
vlm43c8ac52006-09-17 04:52:50 +00003577 case 205:
3578#line 1695 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003579 {
vlm0c6d3812006-03-21 03:40:38 +00003580 yyval.a_constr = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003581 }
3582 break;
3583
vlm43c8ac52006-09-17 04:52:50 +00003584 case 207:
3585#line 1702 "asn1p_y.y"
3586 {
3587 yyval.a_constr = yyvsp[-1].a_constr;
3588 }
3589 break;
3590
3591 case 208:
3592#line 1708 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003593 {
vlm0c6d3812006-03-21 03:40:38 +00003594 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
vlm1aeaddd2006-07-13 08:24:20 +00003595 }
3596 break;
3597
vlm43c8ac52006-09-17 04:52:50 +00003598 case 209:
3599#line 1711 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003600 {
vlmfa67ddc2004-06-03 03:38:44 +00003601 /*
3602 * This is a special case, for compatibility purposes.
vlm9283dbe2004-08-18 04:59:12 +00003603 * It goes without parentheses.
vlmfa67ddc2004-06-03 03:38:44 +00003604 */
vlm0c6d3812006-03-21 03:40:38 +00003605 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
vlm1aeaddd2006-07-13 08:24:20 +00003606 }
3607 break;
3608
vlm43c8ac52006-09-17 04:52:50 +00003609 case 210:
3610#line 1721 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003611 {
vlm0c6d3812006-03-21 03:40:38 +00003612 yyval.a_constr = yyvsp[-1].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003613 }
3614 break;
3615
vlm43c8ac52006-09-17 04:52:50 +00003616 case 211:
3617#line 1724 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003618 {
vlm0c6d3812006-03-21 03:40:38 +00003619 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003620 }
3621 break;
3622
vlm43c8ac52006-09-17 04:52:50 +00003623 case 212:
3624#line 1730 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003625 {
vlmdfbff8c2006-03-21 09:41:28 +00003626 yyval.a_constr = asn1p_constraint_new(yylineno);
3627 yyval.a_constr->type = ACT_EL_EXT;
vlm1aeaddd2006-07-13 08:24:20 +00003628 }
3629 break;
3630
vlm43c8ac52006-09-17 04:52:50 +00003631 case 213:
3632#line 1734 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003633 {
vlm0c6d3812006-03-21 03:40:38 +00003634 yyval.a_constr = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003635 }
3636 break;
3637
vlm43c8ac52006-09-17 04:52:50 +00003638 case 214:
3639#line 1737 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003640 {
vlmfa67ddc2004-06-03 03:38:44 +00003641 asn1p_constraint_t *ct;
3642 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003643 ct->type = ACT_EL_EXT;
vlm0c6d3812006-03-21 03:40:38 +00003644 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm1aeaddd2006-07-13 08:24:20 +00003645 }
3646 break;
3647
vlm43c8ac52006-09-17 04:52:50 +00003648 case 215:
3649#line 1743 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003650 {
vlmfa67ddc2004-06-03 03:38:44 +00003651 asn1p_constraint_t *ct;
3652 ct = asn1p_constraint_new(yylineno);
vlmfa67ddc2004-06-03 03:38:44 +00003653 ct->type = ACT_EL_EXT;
vlm0c6d3812006-03-21 03:40:38 +00003654 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
3655 ct = yyval.a_constr;
3656 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003657 }
3658 break;
3659
vlm43c8ac52006-09-17 04:52:50 +00003660 case 216:
3661#line 1754 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003662 {
vlm0c6d3812006-03-21 03:40:38 +00003663 yyval.a_constr = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003664 }
3665 break;
3666
vlm43c8ac52006-09-17 04:52:50 +00003667 case 217:
3668#line 1757 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003669 {
vlm0c6d3812006-03-21 03:40:38 +00003670 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
vlm1aeaddd2006-07-13 08:24:20 +00003671 }
3672 break;
3673
vlm43c8ac52006-09-17 04:52:50 +00003674 case 218:
3675#line 1760 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003676 {
vlm0c6d3812006-03-21 03:40:38 +00003677 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003678 }
3679 break;
3680
vlm43c8ac52006-09-17 04:52:50 +00003681 case 219:
3682#line 1763 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003683 {
vlm0c6d3812006-03-21 03:40:38 +00003684 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003685 }
3686 break;
3687
vlm43c8ac52006-09-17 04:52:50 +00003688 case 220:
3689#line 1766 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003690 {
vlm0c6d3812006-03-21 03:40:38 +00003691 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003692 }
3693 break;
3694
vlm43c8ac52006-09-17 04:52:50 +00003695 case 221:
3696#line 1772 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003697 {
vlmfa67ddc2004-06-03 03:38:44 +00003698 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003699 yyval.a_constr = asn1p_constraint_new(yylineno);
3700 checkmem(yyval.a_constr);
3701 yyval.a_constr->type = yyvsp[-3].a_ctype;
3702 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
vlmfa67ddc2004-06-03 03:38:44 +00003703 checkmem(ret == 0);
vlm1aeaddd2006-07-13 08:24:20 +00003704 }
3705 break;
3706
vlm43c8ac52006-09-17 04:52:50 +00003707 case 222:
3708#line 1780 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003709 {
vlm9283dbe2004-08-18 04:59:12 +00003710 int ret;
vlm0c6d3812006-03-21 03:40:38 +00003711 yyval.a_constr = asn1p_constraint_new(yylineno);
3712 checkmem(yyval.a_constr);
3713 yyval.a_constr->type = ACT_CA_SET;
3714 ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
vlm9283dbe2004-08-18 04:59:12 +00003715 checkmem(ret == 0);
vlm1aeaddd2006-07-13 08:24:20 +00003716 }
3717 break;
3718
vlm43c8ac52006-09-17 04:52:50 +00003719 case 223:
3720#line 1788 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003721 {
vlm0c6d3812006-03-21 03:40:38 +00003722 yyval.a_constr = asn1p_constraint_new(yylineno);
3723 checkmem(yyval.a_constr);
3724 yyval.a_constr->type = ACT_EL_VALUE;
3725 yyval.a_constr->value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00003726 }
3727 break;
3728
vlm43c8ac52006-09-17 04:52:50 +00003729 case 224:
3730#line 1794 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003731 {
vlm0c6d3812006-03-21 03:40:38 +00003732 yyval.a_constr = asn1p_constraint_new(yylineno);
3733 checkmem(yyval.a_constr);
3734 yyval.a_constr->type = ACT_EL_TYPE;
3735 yyval.a_constr->containedSubtype = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00003736 }
3737 break;
3738
vlmd3420d32006-09-14 10:35:20 +00003739 case 225:
vlm43c8ac52006-09-17 04:52:50 +00003740#line 1800 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00003741 {
3742 yyval.a_constr = asn1p_constraint_new(yylineno);
3743 checkmem(yyval.a_constr);
3744 yyval.a_constr->type = yyvsp[-1].a_ctype;
vlm43c8ac52006-09-17 04:52:50 +00003745 yyval.a_constr->range_start = yyvsp[-2].a_value;
3746 yyval.a_constr->range_stop = yyvsp[0].a_value;
vlmd3420d32006-09-14 10:35:20 +00003747 }
3748 break;
3749
3750 case 226:
vlm43c8ac52006-09-17 04:52:50 +00003751#line 1807 "asn1p_y.y"
vlme745fcd2006-09-05 16:18:34 +00003752 {
vlm43c8ac52006-09-17 04:52:50 +00003753 yyval.a_constr = asn1p_constraint_new(yylineno);
3754 checkmem(yyval.a_constr);
3755 yyval.a_constr->type = yyvsp[-1].a_ctype;
3756 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3757 yyval.a_constr->range_stop = yyvsp[0].a_value;
3758 yyval.a_constr->range_start->type = ATV_MIN;
vlme745fcd2006-09-05 16:18:34 +00003759 }
3760 break;
3761
vlmd3420d32006-09-14 10:35:20 +00003762 case 227:
vlm43c8ac52006-09-17 04:52:50 +00003763#line 1815 "asn1p_y.y"
3764 {
3765 yyval.a_constr = asn1p_constraint_new(yylineno);
3766 checkmem(yyval.a_constr);
3767 yyval.a_constr->type = yyvsp[-1].a_ctype;
3768 yyval.a_constr->range_start = yyvsp[-2].a_value;
3769 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3770 yyval.a_constr->range_stop->type = ATV_MAX;
3771 }
3772 break;
3773
3774 case 228:
3775#line 1823 "asn1p_y.y"
3776 {
3777 yyval.a_constr = asn1p_constraint_new(yylineno);
3778 checkmem(yyval.a_constr);
3779 yyval.a_constr->type = yyvsp[-1].a_ctype;
3780 yyval.a_constr->range_start = asn1p_value_fromint(-123);
3781 yyval.a_constr->range_stop = asn1p_value_fromint(321);
3782 yyval.a_constr->range_start->type = ATV_MIN;
3783 yyval.a_constr->range_stop->type = ATV_MAX;
3784 }
3785 break;
3786
3787 case 229:
3788#line 1832 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00003789 {
3790 yyval.a_constr = yyvsp[0].a_constr;
3791 }
3792 break;
3793
vlmd3420d32006-09-14 10:35:20 +00003794 case 230:
vlm43c8ac52006-09-17 04:52:50 +00003795#line 1838 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003796 {
vlm0c6d3812006-03-21 03:40:38 +00003797 yyval.a_ctype = ACT_CT_SIZE;
vlm1aeaddd2006-07-13 08:24:20 +00003798 }
3799 break;
3800
vlm43c8ac52006-09-17 04:52:50 +00003801 case 231:
3802#line 1841 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003803 {
vlm0c6d3812006-03-21 03:40:38 +00003804 yyval.a_ctype = ACT_CT_FROM;
vlm1aeaddd2006-07-13 08:24:20 +00003805 }
3806 break;
3807
vlm43c8ac52006-09-17 04:52:50 +00003808 case 232:
3809#line 1847 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003810 {
vlm0c6d3812006-03-21 03:40:38 +00003811 yyval.a_value = asn1p_value_fromint(0);
3812 checkmem(yyval.a_value);
3813 yyval.a_value->type = ATV_FALSE;
vlm1aeaddd2006-07-13 08:24:20 +00003814 }
3815 break;
3816
vlm43c8ac52006-09-17 04:52:50 +00003817 case 233:
3818#line 1852 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003819 {
vlm0c6d3812006-03-21 03:40:38 +00003820 yyval.a_value = asn1p_value_fromint(1);
3821 checkmem(yyval.a_value);
3822 yyval.a_value->type = ATV_TRUE;
vlm1aeaddd2006-07-13 08:24:20 +00003823 }
3824 break;
3825
vlm43c8ac52006-09-17 04:52:50 +00003826 case 236:
3827#line 1859 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003828 {
vlmfa67ddc2004-06-03 03:38:44 +00003829 asn1p_ref_t *ref;
3830 int ret;
3831 ref = asn1p_ref_new(yylineno);
3832 checkmem(ref);
vlm0c6d3812006-03-21 03:40:38 +00003833 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
vlmfa67ddc2004-06-03 03:38:44 +00003834 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003835 yyval.a_value = asn1p_value_fromref(ref, 0);
3836 checkmem(yyval.a_value);
3837 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003838 }
3839 break;
3840
vlm43c8ac52006-09-17 04:52:50 +00003841 case 237:
3842#line 1873 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003843 {
vlm4053ca52005-02-18 16:34:21 +00003844 asn1p_ref_t *ref;
3845 int ret;
3846 ref = asn1p_ref_new(yylineno);
3847 checkmem(ref);
vlm0c6d3812006-03-21 03:40:38 +00003848 ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_UNKNOWN);
vlm4053ca52005-02-18 16:34:21 +00003849 checkmem(ret == 0);
vlm0c6d3812006-03-21 03:40:38 +00003850 yyval.a_value = asn1p_value_fromref(ref, 0);
3851 checkmem(yyval.a_value);
3852 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00003853 }
3854 break;
3855
vlm43c8ac52006-09-17 04:52:50 +00003856 case 238:
3857#line 1887 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003858 {
vlm0c6d3812006-03-21 03:40:38 +00003859 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
vlm1aeaddd2006-07-13 08:24:20 +00003860 }
3861 break;
3862
vlm43c8ac52006-09-17 04:52:50 +00003863 case 239:
3864#line 1890 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003865 {
vlm0c6d3812006-03-21 03:40:38 +00003866 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
vlm1aeaddd2006-07-13 08:24:20 +00003867 }
3868 break;
3869
vlm43c8ac52006-09-17 04:52:50 +00003870 case 240:
3871#line 1896 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003872 {
vlm0c6d3812006-03-21 03:40:38 +00003873 yyval.a_constr = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003874 }
3875 break;
3876
vlm43c8ac52006-09-17 04:52:50 +00003877 case 241:
3878#line 1899 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003879 {
vlm0c6d3812006-03-21 03:40:38 +00003880 CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003881 }
3882 break;
3883
vlm43c8ac52006-09-17 04:52:50 +00003884 case 242:
3885#line 1905 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003886 {
vlm0c6d3812006-03-21 03:40:38 +00003887 yyval.a_constr = asn1p_constraint_new(yylineno);
3888 checkmem(yyval.a_constr);
3889 yyval.a_constr->type = ACT_EL_EXT;
vlm1aeaddd2006-07-13 08:24:20 +00003890 yyval.a_constr->value = asn1p_value_frombuf("...", 3, 1);
3891 }
3892 break;
3893
vlm43c8ac52006-09-17 04:52:50 +00003894 case 243:
3895#line 1911 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003896 {
vlm0c6d3812006-03-21 03:40:38 +00003897 yyval.a_constr = asn1p_constraint_new(yylineno);
3898 checkmem(yyval.a_constr);
3899 yyval.a_constr->type = ACT_EL_VALUE;
3900 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
3901 yyval.a_constr->presence = yyvsp[0].a_pres;
3902 if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00003903 }
3904 break;
3905
vlm43c8ac52006-09-17 04:52:50 +00003906 case 244:
3907#line 1925 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003908 { yyval.a_pres = ACPRES_DEFAULT; }
3909 break;
3910
vlm43c8ac52006-09-17 04:52:50 +00003911 case 245:
3912#line 1926 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003913 { yyval.a_pres = yyvsp[0].a_pres; }
3914 break;
3915
vlm43c8ac52006-09-17 04:52:50 +00003916 case 246:
3917#line 1930 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003918 {
vlm0c6d3812006-03-21 03:40:38 +00003919 yyval.a_pres = ACPRES_PRESENT;
vlm1aeaddd2006-07-13 08:24:20 +00003920 }
3921 break;
3922
vlm43c8ac52006-09-17 04:52:50 +00003923 case 247:
3924#line 1933 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003925 {
vlm0c6d3812006-03-21 03:40:38 +00003926 yyval.a_pres = ACPRES_ABSENT;
vlm1aeaddd2006-07-13 08:24:20 +00003927 }
3928 break;
3929
vlm43c8ac52006-09-17 04:52:50 +00003930 case 248:
3931#line 1936 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003932 {
vlm0c6d3812006-03-21 03:40:38 +00003933 yyval.a_pres = ACPRES_OPTIONAL;
vlm1aeaddd2006-07-13 08:24:20 +00003934 }
3935 break;
3936
vlm43c8ac52006-09-17 04:52:50 +00003937 case 252:
3938#line 1951 "asn1p_y.y"
3939 { asn1p_lexer_hack_push_opaque_state(); }
3940 break;
3941
vlmd3420d32006-09-14 10:35:20 +00003942 case 253:
vlm43c8ac52006-09-17 04:52:50 +00003943#line 1951 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003944 {
vlm43c8ac52006-09-17 04:52:50 +00003945 yyval.a_constr = asn1p_constraint_new(yylineno);
3946 checkmem(yyval.a_constr);
3947 yyval.a_constr->type = ACT_CT_CTDBY;
3948 yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
3949 checkmem(yyval.a_constr->value);
3950 yyval.a_constr->value->type = ATV_UNPARSED;
vlm1aeaddd2006-07-13 08:24:20 +00003951 }
3952 break;
3953
vlmd3420d32006-09-14 10:35:20 +00003954 case 254:
vlm43c8ac52006-09-17 04:52:50 +00003955#line 1962 "asn1p_y.y"
3956 {
3957 yyval.a_constr = asn1p_constraint_new(yylineno);
3958 yyval.a_constr->type = ACT_CT_CTNG;
3959 yyval.a_constr->value = asn1p_value_fromtype(yyvsp[0].a_expr);
3960 }
3961 break;
3962
3963 case 255:
3964#line 1970 "asn1p_y.y"
3965 { yyval.a_ctype = ACT_EL_RANGE; }
3966 break;
3967
3968 case 256:
3969#line 1971 "asn1p_y.y"
3970 { yyval.a_ctype = ACT_EL_RLRANGE; }
3971 break;
3972
3973 case 257:
3974#line 1972 "asn1p_y.y"
3975 { yyval.a_ctype = ACT_EL_LLRANGE; }
3976 break;
3977
3978 case 258:
3979#line 1973 "asn1p_y.y"
3980 { yyval.a_ctype = ACT_EL_ULRANGE; }
3981 break;
3982
3983 case 259:
3984#line 1976 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003985 {
vlm17e65d02006-03-21 04:48:15 +00003986 yyval.a_constr = yyvsp[0].a_constr;
vlm1aeaddd2006-07-13 08:24:20 +00003987 }
3988 break;
3989
vlm43c8ac52006-09-17 04:52:50 +00003990 case 260:
3991#line 1979 "asn1p_y.y"
3992 {
3993 yyval.a_constr = yyvsp[0].a_constr;
3994 }
3995 break;
3996
3997 case 261:
3998#line 1988 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00003999 {
vlmfa67ddc2004-06-03 03:38:44 +00004000 asn1p_ref_t *ref = asn1p_ref_new(yylineno);
4001 asn1p_constraint_t *ct;
4002 int ret;
vlm0c6d3812006-03-21 03:40:38 +00004003 ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
vlmfa67ddc2004-06-03 03:38:44 +00004004 checkmem(ret == 0);
4005 ct = asn1p_constraint_new(yylineno);
vlm0c6d3812006-03-21 03:40:38 +00004006 checkmem(yyval.a_constr);
vlmfa67ddc2004-06-03 03:38:44 +00004007 ct->type = ACT_EL_VALUE;
4008 ct->value = asn1p_value_fromref(ref, 0);
vlm0c6d3812006-03-21 03:40:38 +00004009 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
vlm1aeaddd2006-07-13 08:24:20 +00004010 }
4011 break;
4012
vlm43c8ac52006-09-17 04:52:50 +00004013 case 262:
4014#line 2003 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004015 {
vlm0c6d3812006-03-21 03:40:38 +00004016 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
vlm1aeaddd2006-07-13 08:24:20 +00004017 }
4018 break;
4019
vlm43c8ac52006-09-17 04:52:50 +00004020 case 263:
4021#line 2009 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004022 {
vlm0c6d3812006-03-21 03:40:38 +00004023 yyval.a_constr = asn1p_constraint_new(yylineno);
4024 checkmem(yyval.a_constr);
4025 yyval.a_constr->type = ACT_EL_VALUE;
4026 yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
vlm1aeaddd2006-07-13 08:24:20 +00004027 }
4028 break;
4029
vlm43c8ac52006-09-17 04:52:50 +00004030 case 264:
4031#line 2015 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004032 {
vlmfa67ddc2004-06-03 03:38:44 +00004033 asn1p_constraint_t *ct;
4034 ct = asn1p_constraint_new(yylineno);
4035 checkmem(ct);
4036 ct->type = ACT_EL_VALUE;
vlm0c6d3812006-03-21 03:40:38 +00004037 ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
4038 CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
vlm1aeaddd2006-07-13 08:24:20 +00004039 }
4040 break;
4041
vlm43c8ac52006-09-17 04:52:50 +00004042 case 265:
4043#line 2029 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004044 {
vlm0c6d3812006-03-21 03:40:38 +00004045 char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
vlmfa67ddc2004-06-03 03:38:44 +00004046 int ret;
4047 *p = '@';
vlm0c6d3812006-03-21 03:40:38 +00004048 strcpy(p + 1, yyvsp[0].tv_str);
4049 yyval.a_ref = asn1p_ref_new(yylineno);
4050 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
vlmfa67ddc2004-06-03 03:38:44 +00004051 checkmem(ret == 0);
4052 free(p);
vlm0c6d3812006-03-21 03:40:38 +00004053 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00004054 }
4055 break;
4056
vlm43c8ac52006-09-17 04:52:50 +00004057 case 266:
4058#line 2040 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004059 {
vlm0c6d3812006-03-21 03:40:38 +00004060 char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
vlmfa67ddc2004-06-03 03:38:44 +00004061 int ret;
4062 p[0] = '@';
4063 p[1] = '.';
vlm0c6d3812006-03-21 03:40:38 +00004064 strcpy(p + 2, yyvsp[0].tv_str);
4065 yyval.a_ref = asn1p_ref_new(yylineno);
4066 ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
vlmfa67ddc2004-06-03 03:38:44 +00004067 checkmem(ret == 0);
4068 free(p);
vlm0c6d3812006-03-21 03:40:38 +00004069 free(yyvsp[0].tv_str);
vlm1aeaddd2006-07-13 08:24:20 +00004070 }
4071 break;
4072
vlm43c8ac52006-09-17 04:52:50 +00004073 case 267:
4074#line 2056 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004075 {
vlm0c6d3812006-03-21 03:40:38 +00004076 yyval.tv_str = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00004077 }
4078 break;
4079
vlm43c8ac52006-09-17 04:52:50 +00004080 case 268:
4081#line 2059 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004082 {
vlm0c6d3812006-03-21 03:40:38 +00004083 int l1 = strlen(yyvsp[-2].tv_str);
4084 int l3 = strlen(yyvsp[0].tv_str);
4085 yyval.tv_str = malloc(l1 + 1 + l3 + 1);
4086 memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
4087 yyval.tv_str[l1] = '.';
4088 memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
4089 yyval.tv_str[l1 + 1 + l3] = '\0';
vlm1aeaddd2006-07-13 08:24:20 +00004090 }
4091 break;
4092
vlm43c8ac52006-09-17 04:52:50 +00004093 case 269:
4094#line 2077 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004095 {
vlm0c6d3812006-03-21 03:40:38 +00004096 yyval.a_marker.flags = EM_NOMARK;
4097 yyval.a_marker.default_value = 0;
vlm1aeaddd2006-07-13 08:24:20 +00004098 }
4099 break;
4100
vlm43c8ac52006-09-17 04:52:50 +00004101 case 270:
4102#line 2081 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004103 { yyval.a_marker = yyvsp[0].a_marker; }
4104 break;
4105
vlm43c8ac52006-09-17 04:52:50 +00004106 case 271:
4107#line 2085 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004108 {
vlm0c6d3812006-03-21 03:40:38 +00004109 yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
4110 yyval.a_marker.default_value = 0;
vlm1aeaddd2006-07-13 08:24:20 +00004111 }
4112 break;
4113
vlm43c8ac52006-09-17 04:52:50 +00004114 case 272:
4115#line 2089 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004116 {
vlm0c6d3812006-03-21 03:40:38 +00004117 yyval.a_marker.flags = EM_DEFAULT;
4118 yyval.a_marker.default_value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00004119 }
4120 break;
4121
vlm43c8ac52006-09-17 04:52:50 +00004122 case 273:
4123#line 2112 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004124 {
vlm43c8ac52006-09-17 04:52:50 +00004125 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00004126 checkmem(yyval.a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00004127 }
4128 break;
4129
vlm43c8ac52006-09-17 04:52:50 +00004130 case 274:
4131#line 2116 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004132 {
vlm0c6d3812006-03-21 03:40:38 +00004133 yyval.a_expr = yyvsp[-1].a_expr;
vlm1aeaddd2006-07-13 08:24:20 +00004134 }
4135 break;
4136
vlm43c8ac52006-09-17 04:52:50 +00004137 case 275:
4138#line 2122 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004139 {
vlm43c8ac52006-09-17 04:52:50 +00004140 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00004141 checkmem(yyval.a_expr);
4142 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00004143 }
4144 break;
4145
vlm43c8ac52006-09-17 04:52:50 +00004146 case 276:
4147#line 2127 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004148 {
vlm0c6d3812006-03-21 03:40:38 +00004149 yyval.a_expr = yyvsp[-2].a_expr;
4150 asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
vlm1aeaddd2006-07-13 08:24:20 +00004151 }
4152 break;
4153
vlm43c8ac52006-09-17 04:52:50 +00004154 case 277:
4155#line 2134 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004156 {
vlm43c8ac52006-09-17 04:52:50 +00004157 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00004158 checkmem(yyval.a_expr);
4159 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4160 yyval.a_expr->meta_type = AMT_VALUE;
4161 yyval.a_expr->Identifier = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00004162 }
4163 break;
4164
vlm43c8ac52006-09-17 04:52:50 +00004165 case 278:
4166#line 2141 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004167 {
vlm43c8ac52006-09-17 04:52:50 +00004168 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00004169 checkmem(yyval.a_expr);
4170 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4171 yyval.a_expr->meta_type = AMT_VALUE;
4172 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4173 yyval.a_expr->value = yyvsp[-1].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00004174 }
4175 break;
4176
vlm43c8ac52006-09-17 04:52:50 +00004177 case 279:
4178#line 2149 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004179 {
vlm43c8ac52006-09-17 04:52:50 +00004180 yyval.a_expr = NEW_EXPR();
vlm17e65d02006-03-21 04:48:15 +00004181 checkmem(yyval.a_expr);
4182 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4183 yyval.a_expr->meta_type = AMT_VALUE;
4184 yyval.a_expr->Identifier = yyvsp[-3].tv_str;
4185 yyval.a_expr->value = yyvsp[-1].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00004186 }
4187 break;
4188
vlm43c8ac52006-09-17 04:52:50 +00004189 case 280:
4190#line 2157 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004191 {
vlm43c8ac52006-09-17 04:52:50 +00004192 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00004193 checkmem(yyval.a_expr);
4194 yyval.a_expr->expr_type = A1TC_UNIVERVAL;
4195 yyval.a_expr->meta_type = AMT_VALUE;
4196 yyval.a_expr->value = yyvsp[0].a_value;
vlm1aeaddd2006-07-13 08:24:20 +00004197 }
4198 break;
4199
vlm43c8ac52006-09-17 04:52:50 +00004200 case 281:
4201#line 2164 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004202 {
vlm43c8ac52006-09-17 04:52:50 +00004203 yyval.a_expr = NEW_EXPR();
vlm0c6d3812006-03-21 03:40:38 +00004204 checkmem(yyval.a_expr);
4205 yyval.a_expr->Identifier = strdup("...");
4206 checkmem(yyval.a_expr->Identifier);
4207 yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
4208 yyval.a_expr->meta_type = AMT_VALUE;
vlm1aeaddd2006-07-13 08:24:20 +00004209 }
4210 break;
4211
vlm43c8ac52006-09-17 04:52:50 +00004212 case 282:
4213#line 2175 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00004214 {
4215 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4216 checkmem(yyval.a_value);
4217 }
4218 break;
4219
vlm43c8ac52006-09-17 04:52:50 +00004220 case 283:
4221#line 2179 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00004222 {
4223 yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
4224 checkmem(yyval.a_value);
4225 }
4226 break;
4227
vlm43c8ac52006-09-17 04:52:50 +00004228 case 285:
4229#line 2187 "asn1p_y.y"
vlme745fcd2006-09-05 16:18:34 +00004230 {
4231 yyval.a_value = asn1p_value_fromdouble(yyvsp[0].a_dbl);
4232 checkmem(yyval.a_value);
4233 }
vlm1aeaddd2006-07-13 08:24:20 +00004234 break;
4235
vlm43c8ac52006-09-17 04:52:50 +00004236 case 286:
4237#line 2218 "asn1p_y.y"
vlme745fcd2006-09-05 16:18:34 +00004238 { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); }
4239 break;
4240
vlm43c8ac52006-09-17 04:52:50 +00004241 case 287:
4242#line 2219 "asn1p_y.y"
vlme745fcd2006-09-05 16:18:34 +00004243 { yyval.a_tag = yyvsp[0].a_tag; }
4244 break;
4245
vlm43c8ac52006-09-17 04:52:50 +00004246 case 288:
4247#line 2223 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004248 {
vlm0c6d3812006-03-21 03:40:38 +00004249 yyval.a_tag = yyvsp[-1].a_tag;
4250 yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
vlm1aeaddd2006-07-13 08:24:20 +00004251 }
4252 break;
4253
vlm43c8ac52006-09-17 04:52:50 +00004254 case 289:
4255#line 2230 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004256 {
vlm0c6d3812006-03-21 03:40:38 +00004257 yyval.a_tag = yyvsp[-2].a_tag;
4258 yyval.a_tag.tag_value = yyvsp[-1].a_int;
vlm1aeaddd2006-07-13 08:24:20 +00004259 }
4260 break;
4261
vlm43c8ac52006-09-17 04:52:50 +00004262 case 290:
4263#line 2236 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004264 { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; }
4265 break;
4266
vlm43c8ac52006-09-17 04:52:50 +00004267 case 291:
4268#line 2237 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004269 { yyval.a_tag.tag_class = TC_UNIVERSAL; }
4270 break;
4271
vlm43c8ac52006-09-17 04:52:50 +00004272 case 292:
4273#line 2238 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004274 { yyval.a_tag.tag_class = TC_APPLICATION; }
4275 break;
4276
vlm43c8ac52006-09-17 04:52:50 +00004277 case 293:
4278#line 2239 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004279 { yyval.a_tag.tag_class = TC_PRIVATE; }
4280 break;
4281
vlm43c8ac52006-09-17 04:52:50 +00004282 case 294:
4283#line 2243 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004284 { yyval.a_tag.tag_mode = TM_DEFAULT; }
4285 break;
4286
vlm43c8ac52006-09-17 04:52:50 +00004287 case 295:
4288#line 2244 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004289 { yyval.a_tag.tag_mode = TM_IMPLICIT; }
4290 break;
4291
vlm43c8ac52006-09-17 04:52:50 +00004292 case 296:
4293#line 2245 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004294 { yyval.a_tag.tag_mode = TM_EXPLICIT; }
4295 break;
4296
vlm43c8ac52006-09-17 04:52:50 +00004297 case 297:
4298#line 2249 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00004299 {
4300 checkmem(yyvsp[0].tv_str);
4301 yyval.tv_str = yyvsp[0].tv_str;
4302 }
vlme745fcd2006-09-05 16:18:34 +00004303 break;
4304
vlm43c8ac52006-09-17 04:52:50 +00004305 case 298:
4306#line 2253 "asn1p_y.y"
vlme745fcd2006-09-05 16:18:34 +00004307 {
vlmd3420d32006-09-14 10:35:20 +00004308 checkmem(yyvsp[0].tv_str);
vlme745fcd2006-09-05 16:18:34 +00004309 yyval.tv_str = yyvsp[0].tv_str;
4310 }
4311 break;
4312
vlm43c8ac52006-09-17 04:52:50 +00004313 case 299:
4314#line 2261 "asn1p_y.y"
vlm1aeaddd2006-07-13 08:24:20 +00004315 {
vlmdfbff8c2006-03-21 09:41:28 +00004316 checkmem(yyvsp[0].tv_str);
4317 yyval.tv_str = yyvsp[0].tv_str;
vlm1aeaddd2006-07-13 08:24:20 +00004318 }
4319 break;
4320
vlm43c8ac52006-09-17 04:52:50 +00004321 case 300:
4322#line 2268 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00004323 { yyval.tv_str = 0; }
4324 break;
4325
vlm43c8ac52006-09-17 04:52:50 +00004326 case 301:
4327#line 2269 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00004328 {
4329 yyval.tv_str = yyvsp[0].tv_str;
4330 }
4331 break;
4332
vlm43c8ac52006-09-17 04:52:50 +00004333 case 302:
4334#line 2275 "asn1p_y.y"
vlmd3420d32006-09-14 10:35:20 +00004335 {
4336 checkmem(yyvsp[0].tv_str);
4337 yyval.tv_str = yyvsp[0].tv_str;
4338 }
4339 break;
4340
vlm1aeaddd2006-07-13 08:24:20 +00004341
4342 }
4343
4344/* Line 1016 of /usr/local/share/bison/yacc.c. */
vlm43c8ac52006-09-17 04:52:50 +00004345#line 4346 "asn1p_y.c"
vlmfa67ddc2004-06-03 03:38:44 +00004346
4347 yyvsp -= yylen;
4348 yyssp -= yylen;
vlmfa67ddc2004-06-03 03:38:44 +00004349
vlm1aeaddd2006-07-13 08:24:20 +00004350
4351#if YYDEBUG
vlm0c6d3812006-03-21 03:40:38 +00004352 if (yydebug)
4353 {
vlm1aeaddd2006-07-13 08:24:20 +00004354 short *yyssp1 = yyss - 1;
4355 YYFPRINTF (stderr, "state stack now");
4356 while (yyssp1 != yyssp)
4357 YYFPRINTF (stderr, " %d", *++yyssp1);
4358 YYFPRINTF (stderr, "\n");
vlm0c6d3812006-03-21 03:40:38 +00004359 }
4360#endif
vlmfa67ddc2004-06-03 03:38:44 +00004361
4362 *++yyvsp = yyval;
4363
vlmfa67ddc2004-06-03 03:38:44 +00004364
vlm1aeaddd2006-07-13 08:24:20 +00004365 /* Now `shift' the result of the reduction. Determine what state
4366 that goes to, based on the state we popped back to and the rule
4367 number reduced by. */
vlmfa67ddc2004-06-03 03:38:44 +00004368
4369 yyn = yyr1[yyn];
4370
vlm1aeaddd2006-07-13 08:24:20 +00004371 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
4372 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
vlmfa67ddc2004-06-03 03:38:44 +00004373 yystate = yytable[yystate];
4374 else
vlm1aeaddd2006-07-13 08:24:20 +00004375 yystate = yydefgoto[yyn - YYNTOKENS];
vlmfa67ddc2004-06-03 03:38:44 +00004376
4377 goto yynewstate;
4378
vlmfa67ddc2004-06-03 03:38:44 +00004379
vlm1aeaddd2006-07-13 08:24:20 +00004380/*------------------------------------.
4381| yyerrlab -- here on detecting error |
4382`------------------------------------*/
4383yyerrlab:
4384 /* If not already recovering from an error, report this error. */
4385 if (!yyerrstatus)
vlmfa67ddc2004-06-03 03:38:44 +00004386 {
4387 ++yynerrs;
vlm1aeaddd2006-07-13 08:24:20 +00004388#if YYERROR_VERBOSE
vlmfa67ddc2004-06-03 03:38:44 +00004389 yyn = yypact[yystate];
4390
vlm1aeaddd2006-07-13 08:24:20 +00004391 if (YYPACT_NINF < yyn && yyn < YYLAST)
vlmfa67ddc2004-06-03 03:38:44 +00004392 {
vlm1aeaddd2006-07-13 08:24:20 +00004393 YYSIZE_T yysize = 0;
4394 int yytype = YYTRANSLATE (yychar);
4395 char *yymsg;
4396 int yyx, yycount;
vlmfa67ddc2004-06-03 03:38:44 +00004397
vlm1aeaddd2006-07-13 08:24:20 +00004398 yycount = 0;
4399 /* Start YYX at -YYN if negative to avoid negative indexes in
4400 YYCHECK. */
4401 for (yyx = yyn < 0 ? -yyn : 0;
4402 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
4403 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
4404 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
4405 yysize += yystrlen ("parse error, unexpected ") + 1;
4406 yysize += yystrlen (yytname[yytype]);
4407 yymsg = (char *) YYSTACK_ALLOC (yysize);
4408 if (yymsg != 0)
vlmfa67ddc2004-06-03 03:38:44 +00004409 {
vlm1aeaddd2006-07-13 08:24:20 +00004410 char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
4411 yyp = yystpcpy (yyp, yytname[yytype]);
vlm0c6d3812006-03-21 03:40:38 +00004412
vlm1aeaddd2006-07-13 08:24:20 +00004413 if (yycount < 5)
vlmfa67ddc2004-06-03 03:38:44 +00004414 {
vlm1aeaddd2006-07-13 08:24:20 +00004415 yycount = 0;
4416 for (yyx = yyn < 0 ? -yyn : 0;
4417 yyx < (int) (sizeof (yytname) / sizeof (char *));
4418 yyx++)
4419 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
vlm0c6d3812006-03-21 03:40:38 +00004420 {
vlm1aeaddd2006-07-13 08:24:20 +00004421 const char *yyq = ! yycount ? ", expecting " : " or ";
4422 yyp = yystpcpy (yyp, yyq);
4423 yyp = yystpcpy (yyp, yytname[yyx]);
4424 yycount++;
vlm0c6d3812006-03-21 03:40:38 +00004425 }
vlmfa67ddc2004-06-03 03:38:44 +00004426 }
vlm1aeaddd2006-07-13 08:24:20 +00004427 yyerror (yymsg);
4428 YYSTACK_FREE (yymsg);
vlmfa67ddc2004-06-03 03:38:44 +00004429 }
4430 else
vlm1aeaddd2006-07-13 08:24:20 +00004431 yyerror ("parse error; also virtual memory exhausted");
vlmfa67ddc2004-06-03 03:38:44 +00004432 }
4433 else
4434#endif /* YYERROR_VERBOSE */
vlm1aeaddd2006-07-13 08:24:20 +00004435 yyerror ("parse error");
vlmfa67ddc2004-06-03 03:38:44 +00004436 }
vlm0c6d3812006-03-21 03:40:38 +00004437 goto yyerrlab1;
vlmfa67ddc2004-06-03 03:38:44 +00004438
vlm1aeaddd2006-07-13 08:24:20 +00004439
4440/*----------------------------------------------------.
4441| yyerrlab1 -- error raised explicitly by an action. |
4442`----------------------------------------------------*/
4443yyerrlab1:
vlmfa67ddc2004-06-03 03:38:44 +00004444 if (yyerrstatus == 3)
4445 {
vlm1aeaddd2006-07-13 08:24:20 +00004446 /* If just tried and failed to reuse lookahead token after an
4447 error, discard it. */
vlmfa67ddc2004-06-03 03:38:44 +00004448
vlm1aeaddd2006-07-13 08:24:20 +00004449 /* Return failure if at end of input. */
vlm0c6d3812006-03-21 03:40:38 +00004450 if (yychar == YYEOF)
vlm1aeaddd2006-07-13 08:24:20 +00004451 {
4452 /* Pop the error token. */
4453 YYPOPSTACK;
4454 /* Pop the rest of the stack. */
4455 while (yyssp > yyss)
4456 {
4457 YYDPRINTF ((stderr, "Error: popping "));
4458 YYDSYMPRINT ((stderr,
4459 yystos[*yyssp],
4460 *yyvsp));
4461 YYDPRINTF ((stderr, "\n"));
4462 yydestruct (yystos[*yyssp], *yyvsp);
4463 YYPOPSTACK;
4464 }
4465 YYABORT;
4466 }
vlmfa67ddc2004-06-03 03:38:44 +00004467
vlm1aeaddd2006-07-13 08:24:20 +00004468 YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
4469 yychar, yytname[yychar1]));
4470 yydestruct (yychar1, yylval);
vlm0c6d3812006-03-21 03:40:38 +00004471 yychar = YYEMPTY;
vlmfa67ddc2004-06-03 03:38:44 +00004472 }
4473
vlm1aeaddd2006-07-13 08:24:20 +00004474 /* Else will try to reuse lookahead token after shifting the error
4475 token. */
vlm0c6d3812006-03-21 03:40:38 +00004476
vlm1aeaddd2006-07-13 08:24:20 +00004477 yyerrstatus = 3; /* Each real token shifted decrements this. */
vlm0c6d3812006-03-21 03:40:38 +00004478
vlm1aeaddd2006-07-13 08:24:20 +00004479 for (;;)
vlm0c6d3812006-03-21 03:40:38 +00004480 {
vlm1aeaddd2006-07-13 08:24:20 +00004481 yyn = yypact[yystate];
4482 if (yyn != YYPACT_NINF)
4483 {
4484 yyn += YYTERROR;
4485 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
4486 {
4487 yyn = yytable[yyn];
4488 if (0 < yyn)
4489 break;
4490 }
4491 }
4492
4493 /* Pop the current state because it cannot handle the error token. */
4494 if (yyssp == yyss)
4495 YYABORT;
4496
4497 YYDPRINTF ((stderr, "Error: popping "));
4498 YYDSYMPRINT ((stderr,
4499 yystos[*yyssp], *yyvsp));
4500 YYDPRINTF ((stderr, "\n"));
4501
4502 yydestruct (yystos[yystate], *yyvsp);
4503 yyvsp--;
4504 yystate = *--yyssp;
4505
4506
4507#if YYDEBUG
4508 if (yydebug)
4509 {
4510 short *yyssp1 = yyss - 1;
4511 YYFPRINTF (stderr, "Error: state stack now");
4512 while (yyssp1 != yyssp)
4513 YYFPRINTF (stderr, " %d", *++yyssp1);
4514 YYFPRINTF (stderr, "\n");
4515 }
vlm0c6d3812006-03-21 03:40:38 +00004516#endif
vlm0c6d3812006-03-21 03:40:38 +00004517 }
vlm0c6d3812006-03-21 03:40:38 +00004518
vlmfa67ddc2004-06-03 03:38:44 +00004519 if (yyn == YYFINAL)
4520 YYACCEPT;
4521
vlm1aeaddd2006-07-13 08:24:20 +00004522 YYDPRINTF ((stderr, "Shifting error token, "));
vlm0c6d3812006-03-21 03:40:38 +00004523
vlmfa67ddc2004-06-03 03:38:44 +00004524 *++yyvsp = yylval;
vlm1aeaddd2006-07-13 08:24:20 +00004525
vlmfa67ddc2004-06-03 03:38:44 +00004526
4527 yystate = yyn;
4528 goto yynewstate;
4529
vlm0c6d3812006-03-21 03:40:38 +00004530
vlm1aeaddd2006-07-13 08:24:20 +00004531/*-------------------------------------.
4532| yyacceptlab -- YYACCEPT comes here. |
4533`-------------------------------------*/
4534yyacceptlab:
4535 yyresult = 0;
4536 goto yyreturn;
4537
4538/*-----------------------------------.
4539| yyabortlab -- YYABORT comes here. |
4540`-----------------------------------*/
4541yyabortlab:
4542 yyresult = 1;
4543 goto yyreturn;
4544
4545#ifndef yyoverflow
4546/*----------------------------------------------.
4547| yyoverflowlab -- parser overflow comes here. |
4548`----------------------------------------------*/
4549yyoverflowlab:
4550 yyerror ("parser stack overflow");
4551 yyresult = 2;
4552 /* Fall through. */
vlm0c6d3812006-03-21 03:40:38 +00004553#endif
vlm1aeaddd2006-07-13 08:24:20 +00004554
4555yyreturn:
4556#ifndef yyoverflow
4557 if (yyss != yyssa)
4558 YYSTACK_FREE (yyss);
4559#endif
4560 return yyresult;
vlmfa67ddc2004-06-03 03:38:44 +00004561}
vlm1aeaddd2006-07-13 08:24:20 +00004562
4563
vlm43c8ac52006-09-17 04:52:50 +00004564#line 2281 "asn1p_y.y"
vlmfa67ddc2004-06-03 03:38:44 +00004565
4566
4567
4568/*
4569 * Convert Xstring ('0101'B or '5'H) to the binary vector.
4570 */
4571static asn1p_value_t *
4572_convert_bitstring2binary(char *str, int base) {
4573 asn1p_value_t *val;
4574 int slen;
4575 int memlen;
4576 int baselen;
4577 int bits;
4578 uint8_t *binary_vector;
4579 uint8_t *bv_ptr;
4580 uint8_t cur_val;
4581
4582 assert(str);
4583 assert(str[0] == '\'');
4584
4585 switch(base) {
4586 case 'B':
4587 baselen = 1;
4588 break;
4589 case 'H':
4590 baselen = 4;
4591 break;
4592 default:
4593 assert(base == 'B' || base == 'H');
4594 errno = EINVAL;
4595 return NULL;
4596 }
4597
4598 slen = strlen(str);
4599 assert(str[slen - 1] == base);
4600 assert(str[slen - 2] == '\'');
4601
4602 memlen = slen / (8 / baselen); /* Conservative estimate */
4603
4604 bv_ptr = binary_vector = malloc(memlen + 1);
4605 if(bv_ptr == NULL)
4606 /* ENOMEM */
4607 return NULL;
4608
4609 cur_val = 0;
4610 bits = 0;
4611 while(*(++str) != '\'') {
4612 switch(baselen) {
4613 case 1:
4614 switch(*str) {
4615 case '1':
4616 cur_val |= 1 << (7 - (bits % 8));
4617 case '0':
4618 break;
4619 default:
4620 assert(!"_y UNREACH1");
4621 case ' ': case '\r': case '\n':
4622 continue;
4623 }
4624 break;
4625 case 4:
4626 switch(*str) {
4627 case '0': case '1': case '2': case '3': case '4':
4628 case '5': case '6': case '7': case '8': case '9':
4629 cur_val |= (*str - '0') << (4 - (bits % 8));
4630 break;
4631 case 'A': case 'B': case 'C':
4632 case 'D': case 'E': case 'F':
4633 cur_val |= ((*str - 'A') + 10)
4634 << (4 - (bits % 8));
4635 break;
4636 default:
4637 assert(!"_y UNREACH2");
4638 case ' ': case '\r': case '\n':
4639 continue;
4640 }
4641 break;
4642 }
4643
4644 bits += baselen;
4645 if((bits % 8) == 0) {
4646 *bv_ptr++ = cur_val;
4647 cur_val = 0;
4648 }
4649 }
4650
4651 *bv_ptr = cur_val;
4652 assert((bv_ptr - binary_vector) <= memlen);
4653
4654 val = asn1p_value_frombits(binary_vector, bits, 0);
4655 if(val == NULL) {
4656 free(binary_vector);
4657 }
4658
4659 return val;
4660}
4661
vlm5d89c3d2005-08-13 09:07:11 +00004662/*
4663 * For unnamed types (used in old X.208 compliant modules)
4664 * generate some sort of interim names, to not to force human being to fix
4665 * the specification's compliance to modern ASN.1 standards.
4666 */
4667static void
4668_fixup_anonymous_identifier(asn1p_expr_t *expr) {
4669 char *p;
4670 assert(expr->Identifier == 0);
4671
4672 /*
4673 * Try to figure out the type name
4674 * without going too much into details
4675 */
4676 expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
4677 if(expr->reference && expr->reference->comp_count > 0)
4678 expr->Identifier = expr->reference->components[0].name;
4679
4680 fprintf(stderr,
4681 "WARNING: Line %d: expected lower-case member identifier, "
4682 "found an unnamed %s.\n"
4683 "WARNING: Obsolete X.208 syntax detected, "
4684 "please give the member a name.\n",
4685 yylineno, expr->Identifier ? expr->Identifier : "type");
4686
4687 if(!expr->Identifier)
4688 expr->Identifier = "unnamed";
4689 expr->Identifier = strdup(expr->Identifier);
4690 assert(expr->Identifier);
4691 /* Make a lowercase identifier from the type name */
4692 for(p = expr->Identifier; *p; p++) {
4693 switch(*p) {
4694 case 'A' ... 'Z': *p += 32; break;
4695 case ' ': *p = '_'; break;
4696 case '-': *p = '_'; break;
4697 }
4698 }
4699 fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
4700 "Name clash may occur later.\n",
4701 expr->Identifier);
4702}
4703
vlmfa67ddc2004-06-03 03:38:44 +00004704int
4705yyerror(const char *msg) {
vlm808411d2006-03-14 16:31:37 +00004706 extern char *asn1p_text;
vlmfa67ddc2004-06-03 03:38:44 +00004707 fprintf(stderr,
4708 "ASN.1 grammar parse error "
4709 "near line %d (token \"%s\"): %s\n",
vlm39e5ed72004-09-05 10:40:41 +00004710 yylineno, asn1p_text, msg);
vlmfa67ddc2004-06-03 03:38:44 +00004711 return -1;
4712}
4713
vlm1aeaddd2006-07-13 08:24:20 +00004714