diff options
Diffstat (limited to 'libasn1parser/asn1p_y.c')
-rw-r--r-- | libasn1parser/asn1p_y.c | 3484 |
1 files changed, 3484 insertions, 0 deletions
diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c new file mode 100644 index 00000000..095c9041 --- /dev/null +++ b/libasn1parser/asn1p_y.c @@ -0,0 +1,3484 @@ + +/* A Bison parser, made from asn1p_y.y + by GNU Bison version 1.28 */ + +#define YYBISON 1 /* Identify Bison output. */ + +#define yyparse asn1p_parse +#define yylex asn1p_lex +#define yyerror asn1p_error +#define yylval asn1p_lval +#define yychar asn1p_char +#define yydebug asn1p_debug +#define yynerrs asn1p_nerrs +#define TOK_PPEQ 257 +#define TOK_opaque 258 +#define TOK_bstring 259 +#define TOK_cstring 260 +#define TOK_hstring 261 +#define TOK_identifier 262 +#define TOK_number 263 +#define TOK_number_negative 264 +#define TOK_typereference 265 +#define TOK_objectclassreference 266 +#define TOK_typefieldreference 267 +#define TOK_valuefieldreference 268 +#define TOK_ABSENT 269 +#define TOK_ABSTRACT_SYNTAX 270 +#define TOK_ALL 271 +#define TOK_ANY 272 +#define TOK_APPLICATION 273 +#define TOK_AUTOMATIC 274 +#define TOK_BEGIN 275 +#define TOK_BIT 276 +#define TOK_BMPString 277 +#define TOK_BOOLEAN 278 +#define TOK_BY 279 +#define TOK_CHARACTER 280 +#define TOK_CHOICE 281 +#define TOK_CLASS 282 +#define TOK_COMPONENT 283 +#define TOK_COMPONENTS 284 +#define TOK_CONSTRAINED 285 +#define TOK_CONTAINING 286 +#define TOK_DEFAULT 287 +#define TOK_DEFINITIONS 288 +#define TOK_DEFINED 289 +#define TOK_EMBEDDED 290 +#define TOK_ENCODED 291 +#define TOK_END 292 +#define TOK_ENUMERATED 293 +#define TOK_EXPLICIT 294 +#define TOK_EXPORTS 295 +#define TOK_EXTENSIBILITY 296 +#define TOK_EXTERNAL 297 +#define TOK_FALSE 298 +#define TOK_FROM 299 +#define TOK_GeneralizedTime 300 +#define TOK_GeneralString 301 +#define TOK_GraphicString 302 +#define TOK_IA5String 303 +#define TOK_IDENTIFIER 304 +#define TOK_IMPLICIT 305 +#define TOK_IMPLIED 306 +#define TOK_IMPORTS 307 +#define TOK_INCLUDES 308 +#define TOK_INSTANCE 309 +#define TOK_INTEGER 310 +#define TOK_ISO646String 311 +#define TOK_MAX 312 +#define TOK_MIN 313 +#define TOK_MINUS_INFINITY 314 +#define TOK_NULL 315 +#define TOK_NumericString 316 +#define TOK_OBJECT 317 +#define TOK_ObjectDescriptor 318 +#define TOK_OCTET 319 +#define TOK_OF 320 +#define TOK_OPTIONAL 321 +#define TOK_PATTERN 322 +#define TOK_PDV 323 +#define TOK_PLUS_INFINITY 324 +#define TOK_PRESENT 325 +#define TOK_PrintableString 326 +#define TOK_PRIVATE 327 +#define TOK_REAL 328 +#define TOK_RELATIVE_OID 329 +#define TOK_SEQUENCE 330 +#define TOK_SET 331 +#define TOK_SIZE 332 +#define TOK_STRING 333 +#define TOK_SYNTAX 334 +#define TOK_T61String 335 +#define TOK_TAGS 336 +#define TOK_TeletexString 337 +#define TOK_TRUE 338 +#define TOK_TYPE_IDENTIFIER 339 +#define TOK_UNIQUE 340 +#define TOK_UNIVERSAL 341 +#define TOK_UniversalString 342 +#define TOK_UTCTime 343 +#define TOK_UTF8String 344 +#define TOK_VideotexString 345 +#define TOK_VisibleString 346 +#define TOK_WITH 347 +#define TOK_UNION 348 +#define TOK_INTERSECTION 349 +#define TOK_EXCEPT 350 +#define TOK_TwoDots 351 +#define TOK_ThreeDots 352 +#define TOK_tag 353 + +#line 1 "asn1p_y.y" + + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <assert.h> + +#include "asn1parser.h" + +#define YYPARSE_PARAM param +#define YYERROR_VERBOSE + +int yylex(void); +int yyerror(const char *msg); +void asn1p_lexer_hack_push_opaque_state(void); +void asn1p_lexer_hack_enable_with_syntax(void); +#define yylineno asn1p_lineno +extern int asn1p_lineno; + + +static asn1p_value_t * + _convert_bitstring2binary(char *str, int base); + +#define checkmem(ptr) do { \ + if(!(ptr)) \ + return yyerror("Memory failure"); \ + } while(0) + +#define CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do { \ + if(arg1->type != constr_type) { \ + int __ret; \ + root = asn1p_constraint_new(yylineno); \ + checkmem(root); \ + root->type = constr_type; \ + __ret = asn1p_constraint_insert(root, \ + arg1); \ + checkmem(__ret == 0); \ + } else { \ + root = arg1; \ + } \ + if(arg2) { \ + int __ret \ + = asn1p_constraint_insert(root, arg2); \ + checkmem(__ret == 0); \ + } \ + } while(0) + + +#line 57 "asn1p_y.y" +typedef union { + asn1p_t *a_grammar; + asn1p_module_flags_e a_module_flags; + asn1p_module_t *a_module; + asn1p_expr_type_e a_type; /* ASN.1 Type */ + asn1p_expr_t *a_expr; /* Constructed collection */ + asn1p_constraint_t *a_constr; /* Constraint */ + enum asn1p_constraint_type_e a_ctype;/* Constraint type */ + asn1p_xports_t *a_xports; /* IMports/EXports */ + asn1p_oid_t *a_oid; /* Object Identifier */ + asn1p_oid_arc_t a_oid_arc; /* Single OID's arc */ + struct asn1p_type_tag_s a_tag; /* A tag */ + asn1p_ref_t *a_ref; /* Reference to custom type */ + asn1p_wsyntx_t *a_wsynt; /* WITH SYNTAX contents */ + asn1p_wsyntx_chunk_t *a_wchunk; /* WITH SYNTAX chunk */ + struct asn1p_ref_component_s a_refcomp; /* Component of a reference */ + asn1p_value_t *a_value; /* Number, DefinedValue, etc */ + struct asn1p_param_s a_parg; /* A parameter argument */ + asn1p_paramlist_t *a_plist; /* A pargs list */ + enum asn1p_expr_marker_e a_marker; /* OPTIONAL/DEFAULT */ + enum asn1p_constr_pres_e a_pres; /* PRESENT/ABSENT/OPTIONAL */ + asn1_integer_t a_int; + char *tv_str; + struct { + char *buf; + int len; + } tv_opaque; + struct { + char *name; + struct asn1p_type_tag_s tag; + } tv_nametag; +} YYSTYPE; +#include <stdio.h> + +#ifndef __cplusplus +#ifndef __STDC__ +#define const +#endif +#endif + + + +#define YYFINAL 375 +#define YYFLAG -32768 +#define YYNTBASE 113 + +#define YYTRANSLATE(x) ((unsigned)(x) <= 353 ? yytranslate[x] : 211) + +static const char yytranslate[] = { 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 109, 2, 2, 2, 2, 2, 2, 104, + 105, 2, 2, 107, 2, 110, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 108, 106, 111, + 2, 2, 2, 112, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 96, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 102, 94, 103, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 95, 97, 98, + 99, 100, 101 +}; + +#if YYDEBUG != 0 +static const short yyprhs[] = { 0, + 0, 2, 4, 7, 16, 17, 19, 23, 26, 28, + 31, 33, 38, 40, 41, 43, 45, 48, 51, 54, + 57, 60, 61, 63, 65, 68, 70, 72, 74, 76, + 78, 80, 84, 87, 89, 92, 97, 99, 103, 105, + 107, 111, 115, 118, 120, 124, 126, 128, 135, 137, + 139, 140, 142, 147, 152, 156, 163, 165, 169, 171, + 175, 179, 181, 185, 187, 189, 191, 195, 201, 202, + 204, 206, 210, 213, 217, 222, 223, 225, 226, 233, + 235, 238, 240, 242, 245, 247, 251, 253, 257, 261, + 263, 265, 267, 272, 274, 278, 280, 284, 288, 290, + 294, 296, 300, 302, 304, 306, 308, 313, 314, 318, + 320, 322, 324, 326, 328, 330, 334, 336, 339, 341, + 343, 345, 347, 350, 353, 355, 357, 360, 363, 365, + 367, 369, 371, 374, 376, 379, 381, 383, 385, 387, + 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, + 412, 417, 422, 427, 432, 434, 439, 440, 442, 444, + 446, 448, 450, 452, 457, 459, 462, 466, 468, 472, + 478, 480, 484, 486, 488, 492, 494, 498, 500, 504, + 506, 510, 515, 517, 519, 521, 524, 527, 531, 533, + 535, 537, 539, 541, 543, 545, 547, 549, 555, 557, + 561, 563, 567, 568, 570, 572, 574, 576, 578, 580, + 584, 589, 591, 595, 598, 602, 604, 608, 609, 611, + 613, 616, 618, 620, 621, 625, 628, 632, 634, 638, + 640, 645, 650, 652, 654, 656, 658, 659, 661, 663, + 666, 669, 671, 673, 675, 677, 679 +}; + +static const short yyrhs[] = { 114, + 0, 115, 0, 114, 115, 0, 207, 116, 34, 120, + 3, 21, 123, 38, 0, 0, 117, 0, 102, 118, + 103, 0, 102, 103, 0, 119, 0, 118, 119, 0, + 209, 0, 209, 104, 9, 105, 0, 9, 0, 0, + 121, 0, 122, 0, 121, 122, 0, 40, 82, 0, + 51, 82, 0, 20, 82, 0, 42, 52, 0, 0, + 124, 0, 125, 0, 124, 125, 0, 126, 0, 131, + 0, 137, 0, 161, 0, 134, 0, 169, 0, 53, + 127, 106, 0, 53, 45, 0, 128, 0, 127, 128, + 0, 129, 45, 207, 116, 0, 130, 0, 129, 107, + 130, 0, 207, 0, 209, 0, 41, 132, 106, 0, + 41, 17, 106, 0, 41, 106, 0, 133, 0, 132, + 107, 133, 0, 207, 0, 209, 0, 207, 135, 3, + 102, 136, 103, 0, 156, 0, 166, 0, 0, 177, + 0, 207, 3, 205, 85, 0, 207, 3, 205, 153, + 0, 207, 3, 143, 0, 207, 102, 138, 103, 3, + 153, 0, 139, 0, 138, 107, 139, 0, 207, 0, + 207, 108, 209, 0, 166, 108, 209, 0, 141, 0, + 140, 107, 141, 0, 155, 0, 209, 0, 152, 0, + 142, 107, 152, 0, 28, 102, 145, 103, 147, 0, + 0, 86, 0, 146, 0, 145, 107, 146, 0, 159, + 197, 0, 159, 153, 144, 0, 159, 159, 197, 144, + 0, 0, 148, 0, 0, 93, 80, 102, 149, 150, + 103, 0, 151, 0, 150, 151, 0, 4, 0, 159, + 0, 210, 153, 0, 154, 0, 155, 171, 197, 0, + 100, 0, 100, 109, 164, 0, 100, 109, 204, 0, + 168, 0, 169, 0, 170, 0, 207, 102, 140, 103, + 0, 156, 0, 55, 66, 156, 0, 11, 0, 11, + 110, 207, 0, 11, 110, 209, 0, 208, 0, 208, + 110, 157, 0, 158, 0, 157, 110, 158, 0, 160, + 0, 160, 0, 13, 0, 14, 0, 209, 135, 3, + 162, 0, 0, 102, 163, 165, 0, 5, 0, 7, + 0, 6, 0, 204, 0, 164, 0, 209, 0, 207, + 110, 209, 0, 4, 0, 165, 4, 0, 24, 0, + 61, 0, 74, 0, 167, 0, 65, 79, 0, 63, + 50, 0, 75, 0, 43, 0, 36, 69, 0, 26, + 79, 0, 89, 0, 46, 0, 56, 0, 39, 0, + 22, 79, 0, 166, 0, 167, 201, 0, 23, 0, + 47, 0, 48, 0, 49, 0, 57, 0, 62, 0, + 72, 0, 81, 0, 83, 0, 88, 0, 90, 0, + 91, 0, 92, 0, 64, 0, 27, 102, 142, 103, + 0, 76, 102, 142, 103, 0, 77, 102, 142, 103, + 0, 76, 171, 66, 155, 0, 77, 171, 66, 155, + 0, 18, 0, 18, 35, 25, 209, 0, 0, 175, + 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, + 0, 78, 104, 177, 105, 0, 176, 0, 175, 176, + 0, 104, 177, 105, 0, 178, 0, 178, 107, 100, + 0, 178, 107, 100, 107, 178, 0, 100, 0, 100, + 107, 178, 0, 179, 0, 180, 0, 179, 172, 180, + 0, 181, 0, 180, 173, 181, 0, 182, 0, 181, + 174, 182, 0, 185, 0, 185, 183, 185, 0, 184, + 104, 177, 105, 0, 191, 0, 186, 0, 99, 0, + 99, 111, 0, 111, 99, 0, 111, 99, 111, 0, + 78, 0, 45, 0, 204, 0, 209, 0, 6, 0, + 59, 0, 58, 0, 44, 0, 84, 0, 93, 30, + 102, 187, 103, 0, 188, 0, 187, 107, 188, 0, + 100, 0, 209, 171, 189, 0, 0, 190, 0, 71, + 0, 15, 0, 67, 0, 192, 0, 193, 0, 102, + 207, 103, 0, 192, 102, 194, 103, 0, 195, 0, + 194, 107, 195, 0, 112, 196, 0, 112, 110, 196, + 0, 209, 0, 196, 110, 209, 0, 0, 198, 0, + 67, 0, 33, 199, 0, 185, 0, 166, 0, 0, + 102, 200, 165, 0, 102, 103, 0, 102, 202, 103, + 0, 203, 0, 202, 107, 203, 0, 209, 0, 209, + 104, 204, 105, 0, 209, 104, 164, 105, 0, 204, + 0, 100, 0, 9, 0, 10, 0, 0, 206, 0, + 101, 0, 101, 51, 0, 101, 40, 0, 11, 0, + 12, 0, 12, 0, 8, 0, 209, 0, 209, 206, + 0 +}; + +#endif + +#if YYDEBUG != 0 +static const short yyrline[] = { 0, + 297, 303, 309, 325, 350, 352, 355, 359, 364, 371, + 379, 384, 388, 397, 399, 407, 411, 419, 423, 426, + 429, 437, 439, 448, 452, 477, 481, 490, 497, 510, + 521, 534, 541, 546, 552, 558, 567, 573, 579, 586, + 594, 598, 601, 608, 614, 620, 627, 636, 646, 654, + 662, 664, 676, 688, 695, 711, 721, 731, 741, 746, + 753, 763, 769, 775, 779, 791, 797, 803, 813, 815, + 818, 826, 832, 841, 846, 863, 865, 870, 874, 879, + 884, 890, 894, 919, 926, 931, 939, 948, 957, 968, + 972, 978, 986, 1010, 1017, 1031, 1040, 1050, 1060, 1068, + 1089, 1098, 1107, 1108, 1110, 1117, 1129, 1139, 1141, 1146, + 1150, 1154, 1158, 1161, 1166, 1178, 1194, 1205, 1219, 1221, + 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, + 1237, 1239, 1240, 1243, 1250, 1262, 1264, 1268, 1272, 1273, + 1274, 1275, 1276, 1280, 1281, 1282, 1283, 1287, 1288, 1291, + 1298, 1304, 1310, 1318, 1326, 1332, 1348, 1350, 1353, 1353, + 1354, 1354, 1355, 1357, 1370, 1373, 1378, 1384, 1388, 1395, + 1403, 1408, 1417, 1419, 1421, 1426, 1428, 1434, 1436, 1441, + 1448, 1455, 1463, 1466, 1471, 1473, 1474, 1475, 1478, 1482, + 1487, 1491, 1502, 1506, 1511, 1516, 1521, 1528, 1534, 1538, + 1543, 1549, 1561, 1563, 1566, 1570, 1573, 1578, 1582, 1590, + 1605, 1611, 1618, 1631, 1643, 1658, 1662, 1679, 1681, 1684, + 1688, 1694, 1697, 1699, 1699, 1719, 1724, 1729, 1735, 1741, + 1749, 1757, 1765, 1772, 1782, 1787, 1817, 1819, 1822, 1827, + 1831, 1837, 1842, 1848, 1855, 1862, 1867 +}; +#endif + + +#if YYDEBUG != 0 || defined (YYERROR_VERBOSE) + +static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ", +"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number", +"TOK_number_negative","TOK_typereference","TOK_objectclassreference","TOK_typefieldreference", +"TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY", +"TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN", +"TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS", +"TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED", +"TOK_EMBEDDED","TOK_ENCODED","TOK_END","TOK_ENUMERATED","TOK_EXPLICIT","TOK_EXPORTS", +"TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime", +"TOK_GeneralString","TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT", +"TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INTEGER","TOK_ISO646String", +"TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL","TOK_NumericString","TOK_OBJECT", +"TOK_ObjectDescriptor","TOK_OCTET","TOK_OF","TOK_OPTIONAL","TOK_PATTERN","TOK_PDV", +"TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString","TOK_PRIVATE","TOK_REAL", +"TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE","TOK_STRING","TOK_SYNTAX", +"TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE","TOK_TYPE_IDENTIFIER", +"TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime","TOK_UTF8String", +"TOK_VideotexString","TOK_VisibleString","TOK_WITH","'|'","TOK_UNION","'^'", +"TOK_INTERSECTION","TOK_EXCEPT","TOK_TwoDots","TOK_ThreeDots","TOK_tag","'{'", +"'}'","'('","')'","';'","','","':'","'!'","'.'","'<'","'@'","ParsedGrammar", +"ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier", +"ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags", +"ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody", +"ModuleSpecificationBody","ModuleSpecificationElement","ImportsDefinition","ImportsBundleSet", +"ImportsBundle","ImportsList","ImportsElement","ExportsDefinition","ExportsBody", +"ExportsElement","ValueSetDefinition","DefinedTypeRef","optValueSetBody","DataTypeReference", +"ParameterArgumentList","ParameterArgumentName","ActualParameterList","ActualParameter", +"ConstructedDataTypeDefinition","ClassDeclaration","optUnique","ClassFieldList", +"ClassField","optWithSyntax","WithSyntax","@1","WithSyntaxFormat","WithSyntaxFormatToken", +"DataTypeMember","ConstrainedTypeDeclaration","ExtensionAndException","TypeDeclaration", +"ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement", +"ClassFieldIdentifier","ClassFieldName","ValueDefinition","InlineOrDefinedValue", +"@2","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible", +"BasicType","BasicString","ConstructedType","optConstraints","Union","Intersection", +"Except","Constraints","SingleConstraint","ConstraintElementSet","ConstraintElement", +"ConstraintElementUnion","ConstraintElementIntersection","ConstraintElementException", +"ConstraintSubtypeElement","ConstraintRangeSpec","ConstraintSpec","ConstraintValue", +"WithComponents","WithComponentsList","WithComponentsElement","optPresenceConstraint", +"PresenceConstraint","TableConstraint","SimpleTableConstraint","ComponentRelationConstraint", +"AtNotationList","AtNotationElement","ComponentIdList","optMarker","Marker", +"DefaultValue","@3","UniverationDefinition","UniverationList","UniverationElement", +"SignedNumber","optTag","Tag","TypeRefName","ObjectClassReference","Identifier", +"TaggedIdentifier", NULL +}; +#endif + +static const short yyr1[] = { 0, + 113, 114, 114, 115, 116, 116, 117, 117, 118, 118, + 119, 119, 119, 120, 120, 121, 121, 122, 122, 122, + 122, 123, 123, 124, 124, 125, 125, 125, 125, 125, + 125, 126, 126, 127, 127, 128, 129, 129, 130, 130, + 131, 131, 131, 132, 132, 133, 133, 134, 135, 135, + 136, 136, 137, 137, 137, 137, 138, 138, 139, 139, + 139, 140, 140, 141, 141, 142, 142, 143, 144, 144, + 145, 145, 146, 146, 146, 147, 147, 149, 148, 150, + 150, 151, 151, 152, 152, 153, 154, 154, 154, 155, + 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, + 157, 157, 158, 159, 160, 160, 161, 163, 162, 162, + 162, 162, 162, 162, 164, 164, 165, 165, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 167, 167, 167, 168, 168, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, + 170, 170, 170, 170, 170, 170, 171, 171, 172, 172, + 173, 173, 174, 175, 175, 175, 176, 177, 177, 177, + 177, 177, 178, 179, 179, 180, 180, 181, 181, 182, + 182, 182, 182, 182, 183, 183, 183, 183, 184, 184, + 185, 185, 185, 185, 185, 185, 185, 186, 187, 187, + 188, 188, 189, 189, 190, 190, 190, 191, 191, 192, + 193, 194, 194, 195, 195, 196, 196, 197, 197, 198, + 198, 199, 199, 200, 199, 201, 201, 202, 202, 203, + 203, 203, 203, 203, 204, 204, 205, 205, 206, 206, + 206, 207, 207, 208, 209, 210, 210 +}; + +static const short yyr2[] = { 0, + 1, 1, 2, 8, 0, 1, 3, 2, 1, 2, + 1, 4, 1, 0, 1, 1, 2, 2, 2, 2, + 2, 0, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 3, 2, 1, 2, 4, 1, 3, 1, 1, + 3, 3, 2, 1, 3, 1, 1, 6, 1, 1, + 0, 1, 4, 4, 3, 6, 1, 3, 1, 3, + 3, 1, 3, 1, 1, 1, 3, 5, 0, 1, + 1, 3, 2, 3, 4, 0, 1, 0, 6, 1, + 2, 1, 1, 2, 1, 3, 1, 3, 3, 1, + 1, 1, 4, 1, 3, 1, 3, 3, 1, 3, + 1, 3, 1, 1, 1, 1, 4, 0, 3, 1, + 1, 1, 1, 1, 1, 3, 1, 2, 1, 1, + 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, + 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, + 4, 4, 4, 4, 1, 4, 0, 1, 1, 1, + 1, 1, 1, 4, 1, 2, 3, 1, 3, 5, + 1, 3, 1, 1, 3, 1, 3, 1, 3, 1, + 3, 4, 1, 1, 1, 2, 2, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 5, 1, 3, + 1, 3, 0, 1, 1, 1, 1, 1, 1, 3, + 4, 1, 3, 2, 3, 1, 3, 0, 1, 1, + 2, 1, 1, 0, 3, 2, 3, 1, 3, 1, + 4, 4, 1, 1, 1, 1, 0, 1, 1, 2, + 2, 1, 1, 1, 1, 1, 2 +}; + +static const short yydefact[] = { 0, + 242, 243, 1, 2, 5, 3, 0, 0, 6, 245, + 13, 8, 0, 9, 11, 14, 7, 10, 0, 0, + 0, 0, 0, 0, 15, 16, 0, 20, 18, 21, + 19, 0, 17, 12, 22, 136, 0, 137, 138, 139, + 0, 140, 141, 149, 142, 143, 144, 145, 146, 147, + 148, 0, 23, 24, 26, 27, 30, 28, 29, 31, + 0, 0, 0, 43, 0, 44, 46, 47, 33, 0, + 34, 0, 37, 39, 40, 4, 25, 237, 96, 244, + 0, 119, 0, 0, 132, 126, 130, 131, 120, 0, + 0, 121, 125, 129, 0, 0, 49, 50, 122, 99, + 0, 42, 41, 0, 32, 35, 0, 0, 0, 239, + 55, 0, 238, 0, 133, 128, 127, 124, 123, 0, + 57, 0, 59, 0, 0, 0, 45, 5, 38, 0, + 241, 240, 96, 244, 155, 0, 0, 157, 157, 53, + 54, 157, 94, 134, 122, 90, 91, 92, 0, 97, + 98, 0, 0, 0, 0, 51, 105, 106, 100, 101, + 103, 110, 112, 111, 235, 236, 108, 107, 114, 113, + 0, 115, 36, 0, 71, 218, 104, 0, 0, 0, + 0, 0, 0, 0, 158, 165, 0, 0, 218, 0, + 135, 0, 0, 58, 61, 60, 193, 196, 190, 195, + 194, 189, 197, 0, 171, 0, 0, 52, 168, 173, + 174, 176, 178, 0, 180, 184, 183, 208, 209, 191, + 192, 0, 0, 0, 76, 0, 0, 220, 69, 218, + 73, 219, 0, 87, 0, 66, 85, 246, 0, 95, + 0, 0, 0, 0, 166, 0, 0, 86, 234, 226, + 0, 228, 233, 230, 0, 62, 64, 65, 56, 0, + 0, 0, 48, 0, 159, 160, 0, 161, 162, 0, + 163, 0, 0, 185, 0, 0, 0, 102, 117, 109, + 116, 0, 68, 77, 72, 224, 223, 222, 221, 70, + 74, 69, 156, 0, 150, 0, 247, 84, 0, 151, + 167, 153, 152, 154, 227, 0, 0, 93, 0, 0, + 172, 210, 169, 175, 177, 179, 0, 186, 187, 181, + 0, 0, 212, 118, 0, 0, 75, 88, 89, 67, + 164, 229, 0, 0, 63, 201, 0, 199, 157, 0, + 182, 188, 0, 214, 216, 211, 0, 78, 225, 232, + 231, 198, 0, 203, 170, 215, 0, 213, 0, 200, + 206, 207, 205, 202, 204, 217, 82, 0, 80, 83, + 79, 81, 0, 0, 0 +}; + +static const short yydefgoto[] = { 373, + 3, 4, 8, 9, 13, 14, 24, 25, 26, 52, + 53, 54, 55, 70, 71, 72, 73, 56, 65, 66, + 57, 96, 207, 58, 120, 121, 255, 256, 235, 111, + 291, 174, 175, 283, 284, 359, 368, 369, 236, 141, + 237, 142, 143, 159, 160, 176, 177, 59, 168, 223, + 169, 280, 144, 145, 146, 147, 148, 184, 267, 270, + 272, 185, 186, 208, 209, 210, 211, 212, 213, 276, + 214, 215, 216, 337, 338, 364, 365, 217, 218, 219, + 322, 323, 344, 231, 232, 289, 326, 191, 251, 252, + 220, 112, 113, 149, 100, 221, 239 +}; + +static const short yypact[] = { 81, +-32768,-32768, 81,-32768, -45,-32768, 23, 70,-32768,-32768, +-32768,-32768, 47,-32768, 31, 190,-32768,-32768, 132, 61, + 69, 108, 86, 176, 190,-32768, 76,-32768,-32768,-32768, +-32768, 166,-32768,-32768, 442,-32768, 32,-32768,-32768,-32768, + 121,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, 168, 442,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + 179, 732, 103,-32768, 52,-32768,-32768,-32768,-32768, 39, +-32768, 16,-32768,-32768,-32768,-32768,-32768, -11, 111,-32768, + 150,-32768, 152, 142,-32768,-32768,-32768,-32768,-32768, 184, + 159,-32768,-32768,-32768, 748, 240,-32768,-32768,-32768, 135, + 243,-32768,-32768, 141,-32768,-32768, 81, 141, 145, 60, +-32768, 599,-32768, 141,-32768,-32768,-32768,-32768,-32768, -1, +-32768, 143, 144, 147, 206, 68,-32768, -45,-32768, 206, +-32768,-32768, -42, 148, 221, 161, 198, 40, 53,-32768, +-32768, -37,-32768,-32768, 163,-32768,-32768,-32768, 164,-32768, +-32768, 264, 748, 261, 261, 155,-32768,-32768, 160,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, + 162,-32768,-32768, 64,-32768, 524,-32768, 246, 21, 212, + 169, 21, 155, 208, 171,-32768, 21, 210, 2, 17, +-32768, 383, 674,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 247, 172, 81, 175,-32768, 173, 133, + 140, 185,-32768, 178, 35,-32768,-32768, 182,-32768,-32768, +-32768, 206, 281, 261, 193, 206, 301,-32768, 202, 2, +-32768,-32768, 261, 181, 66,-32768,-32768, 191, 674,-32768, + 155, 71, 186, 674,-32768, 89, 674,-32768,-32768,-32768, + 90,-32768,-32768, 189, 91,-32768,-32768,-32768,-32768, 192, + 309, 194,-32768, 196,-32768,-32768, 309,-32768,-32768, 309, +-32768, 309, 155, 187, 205, 78, 200,-32768,-32768, 297, +-32768, 225,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, 202,-32768, 250,-32768, 21,-32768,-32768, 201,-32768, +-32768,-32768,-32768,-32768,-32768, 56, 250,-32768, 383, 25, +-32768,-32768, 209, 140, 185,-32768, 215,-32768, 211,-32768, + 6, 101,-32768,-32768, 219, 281,-32768,-32768,-32768,-32768, +-32768,-32768, 223, 224,-32768,-32768, 109,-32768, -37, 309, +-32768,-32768, 261, 203,-32768,-32768, 200,-32768, 297,-32768, +-32768,-32768, 25, 24,-32768, 203, 261,-32768, 126,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 9,-32768,-32768, +-32768,-32768, 324, 326,-32768 +}; + +static const short yypgoto[] = {-32768, +-32768, 327, 204,-32768,-32768, 318,-32768,-32768, 308,-32768, +-32768, 282,-32768,-32768, 268,-32768, 226,-32768,-32768, 235, +-32768, 279,-32768,-32768,-32768, 195,-32768, 33, -129,-32768, + 51,-32768, 123,-32768,-32768,-32768,-32768, -17, 59, -156, +-32768, -185, -52,-32768, 130, -173, -109,-32768,-32768,-32768, + -209, 30, -50, -43,-32768, 46,-32768, -137,-32768,-32768, +-32768,-32768, 180, -159, -246,-32768, 94, 88, 97,-32768, +-32768, -206,-32768,-32768, 10,-32768,-32768,-32768,-32768,-32768, +-32768, 26, 27, -141,-32768,-32768,-32768,-32768,-32768, 65, + -118,-32768, 134, 1,-32768, -7,-32768 +}; + + +#define YYLAST 837 + + +static const short yytable[] = { 15, + 5, 188, 230, 5, 189, 15, 257, 170, 97, 97, + 98, 98, 367, 10, 311, 161, 109, 99, 99, 229, + 288, 157, 158, 243, 10, 165, 166, 62, 10, 68, + 10, 11, 10, 75, 227, 61, 259, 67, 361, 10, + 181, 74, 1, 2, 122, 62, 10, 248, 63, 1, + 2, 99, 242, 61, 10, 11, 7, 246, 302, -242, + 107, 304, 75, 10, 165, 166, 183, 114, 228, 320, + 74, 253, 162, 163, 164, 10, 165, 166, 1, 2, + 60, 299, 298, 197, 328, 10, 165, 166, 292, 110, + 362, 1, 2, 355, 363, 123, 68, 333, 60, 131, + 75, 152, 122, 16, 67, 153, 151, 128, 74, 99, + 132, 371, 161, 317, 150, 343, 249, 181, 172, 250, + 234, 198, 108, 257, 336, 12, 171, 240, 10, 367, + 181, 1, 2, 274, 19, 200, 201, 64, 157, 158, + 27, 182, 28, 183, 105, 275, 195, 196, 10, 17, + 29, 1, 2, 123, 187, 249, 183, 103, 104, 30, + 197, 203, 10, 165, 166, 69, 225, 31, 295, 167, + 226, 238, 296, 300, 238, 329, 287, 296, 32, 238, + 34, 78, 254, 99, 258, 370, 35, 253, 334, 79, + 80, 303, 305, 308, 370, 296, 306, 309, 198, 199, + 81, 354, 82, 346, 83, 76, 262, 347, 102, 20, + 117, 352, 200, 201, 84, 353, 281, 85, 157, 158, + 114, 86, 79, 80, 87, 293, 265, 266, 115, 21, + 116, 22, 202, 118, 88, 268, 269, 119, 203, 89, + 23, 90, 124, 91, 125, 126, 130, 204, 156, -243, + 154, 155, 92, 93, 205, 178, 206, 10, 165, 166, + 1, 2, 179, 180, 190, 192, 193, 94, 10, 222, + 233, 224, 241, 244, 183, 247, 260, 263, 261, 264, + 95, 273, 271, 277, 279, 282, 172, 290, 238, 294, + 301, 110, 307, 310, 171, 313, 312, 318, 254, 172, + 324, 258, 339, 319, 325, 331, 197, 171, 10, 165, + 166, 321, 357, 345, 197, 340, 10, 165, 166, 341, + 348, 342, 81, 374, 82, 375, 83, 350, 351, 6, + 18, 173, 33, 129, 77, 345, 84, 106, 127, 85, + 101, 335, 327, 86, 198, 339, 87, 194, 285, 366, + 372, 278, 198, 199, 330, 349, 88, 315, 200, 201, + 314, 89, 360, 90, 245, 91, 200, 201, 316, 356, + 332, 297, 358, 0, 92, 93, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 0, 202, 0, 0, 94, + 10, 0, 203, 133, 134, 0, 0, 0, 0, 0, + 135, 204, 286, 0, 81, 36, 82, 0, 83, 136, + 206, 0, 0, 0, 0, 0, 0, 0, 84, 0, + 0, 85, 0, 0, 0, 86, 0, 0, 87, 38, + 39, 40, 0, 0, 0, 0, 0, 137, 88, 42, + 0, 0, 0, 89, 43, 90, 44, 91, 0, 10, + 0, 0, 1, 2, 45, 0, 92, 93, 138, 139, + 0, 0, 0, 46, 36, 47, 0, 0, 0, 0, + 48, 94, 49, 50, 51, 0, 0, 0, 0, 0, + 0, 0, 37, 0, 0, 0, 0, 0, 38, 39, + 40, 0, 0, 0, 41, 0, 0, 0, 42, 0, + 0, 0, 0, 43, 0, 44, 0, 0, 0, 0, + 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, + 0, 0, 46, 0, 47, 0, 0, 0, 0, 48, + 0, 49, 50, 51, 133, 134, 157, 158, 0, 0, + 0, 135, 0, 0, 0, 81, 36, 82, 0, 83, + 136, 0, 0, 0, 0, 0, 227, 0, 0, 84, + 0, 0, 85, 0, 0, 0, 86, 0, 0, 87, + 38, 39, 40, 0, 0, 0, 0, 0, 137, 88, + 42, 0, 0, 0, 89, 43, 90, 44, 91, 0, + 228, 0, 0, 0, 0, 45, 0, 92, 93, 138, + 139, 0, 0, 0, 46, 0, 47, 0, 0, 133, + 134, 48, 94, 49, 50, 51, 135, 0, 0, 0, + 81, 36, 82, 0, 83, 136, 0, 0, 0, 0, + 0, 0, 0, 0, 84, 0, 0, 85, 0, 0, + 0, 86, 0, 0, 87, 38, 39, 40, 0, 0, + 0, 0, 0, 137, 88, 42, 0, 0, 0, 89, + 43, 90, 44, 91, 0, 0, 0, 0, 0, 0, + 45, 0, 92, 93, 138, 139, 0, 0, 0, 46, + 0, 47, 0, 140, 133, 134, 48, 94, 49, 50, + 51, 135, 0, 0, 0, 81, 36, 82, 0, 83, + 136, 0, 0, 0, 0, 0, 0, 0, 0, 84, + 0, 0, 85, 0, 0, 0, 86, 0, 0, 87, + 38, 39, 40, 0, 0, 0, 0, 0, 137, 88, + 42, 0, 0, 0, 89, 43, 90, 44, 91, 0, + 0, 0, 79, 80, 0, 45, 0, 92, 93, 138, + 139, 0, 0, 81, 46, 82, 47, 83, 1, 2, + 0, 48, 94, 49, 50, 51, 0, 84, 0, 81, + 85, 82, 0, 83, 86, 0, 0, 87, 0, 0, + 0, 0, 0, 84, 0, 0, 85, 88, 0, 0, + 86, 0, 89, 87, 90, 0, 91, 0, 0, 0, + 0, 0, 0, 88, 0, 92, 93, 0, 89, 0, + 90, 0, 91, 0, 0, 0, 0, 0, 0, 0, + 94, 92, 93, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 94 +}; + +static const short yycheck[] = { 7, + 0, 139, 176, 3, 142, 13, 192, 126, 61, 62, + 61, 62, 4, 8, 261, 125, 28, 61, 62, 176, + 227, 13, 14, 183, 8, 9, 10, 35, 8, 37, + 8, 9, 8, 41, 33, 35, 193, 37, 15, 8, + 78, 41, 11, 12, 95, 53, 8, 189, 17, 11, + 12, 95, 182, 53, 8, 9, 102, 187, 244, 102, + 45, 247, 70, 8, 9, 10, 104, 110, 67, 276, + 70, 190, 5, 6, 7, 8, 9, 10, 11, 12, + 35, 241, 239, 6, 294, 8, 9, 10, 230, 101, + 67, 11, 12, 340, 71, 95, 104, 307, 53, 40, + 108, 103, 153, 34, 104, 107, 114, 107, 108, 153, + 51, 103, 222, 273, 114, 110, 100, 78, 126, 103, + 100, 44, 107, 309, 100, 103, 126, 180, 8, 4, + 78, 11, 12, 99, 104, 58, 59, 106, 13, 14, + 9, 102, 82, 104, 106, 111, 154, 155, 8, 103, + 82, 11, 12, 153, 102, 100, 104, 106, 107, 52, + 6, 84, 8, 9, 10, 45, 103, 82, 103, 102, + 107, 179, 107, 103, 182, 294, 227, 107, 3, 187, + 105, 3, 190, 227, 192, 359, 21, 306, 307, 11, + 12, 103, 103, 103, 368, 107, 107, 107, 44, 45, + 22, 339, 24, 103, 26, 38, 206, 107, 106, 20, + 69, 103, 58, 59, 36, 107, 224, 39, 13, 14, + 110, 43, 11, 12, 46, 233, 94, 95, 79, 40, + 79, 42, 78, 50, 56, 96, 97, 79, 84, 61, + 51, 63, 3, 65, 110, 3, 102, 93, 102, 102, + 108, 108, 74, 75, 100, 35, 102, 8, 9, 10, + 11, 12, 102, 66, 102, 102, 3, 89, 8, 110, + 25, 110, 104, 66, 104, 66, 30, 103, 107, 107, + 102, 104, 98, 102, 4, 93, 294, 86, 296, 109, + 105, 101, 104, 102, 294, 100, 103, 111, 306, 307, + 4, 309, 310, 99, 80, 105, 6, 307, 8, 9, + 10, 112, 110, 321, 6, 107, 8, 9, 10, 105, + 102, 111, 22, 0, 24, 0, 26, 105, 105, 3, + 13, 128, 25, 108, 53, 343, 36, 70, 104, 39, + 62, 309, 292, 43, 44, 353, 46, 153, 226, 357, + 368, 222, 44, 45, 296, 326, 56, 270, 58, 59, + 267, 61, 353, 63, 185, 65, 58, 59, 272, 343, + 306, 238, 347, -1, 74, 75, -1, -1, -1, -1, + -1, -1, -1, -1, 84, -1, 78, -1, -1, 89, + 8, -1, 84, 11, 12, -1, -1, -1, -1, -1, + 18, 93, 102, -1, 22, 23, 24, -1, 26, 27, + 102, -1, -1, -1, -1, -1, -1, -1, 36, -1, + -1, 39, -1, -1, -1, 43, -1, -1, 46, 47, + 48, 49, -1, -1, -1, -1, -1, 55, 56, 57, + -1, -1, -1, 61, 62, 63, 64, 65, -1, 8, + -1, -1, 11, 12, 72, -1, 74, 75, 76, 77, + -1, -1, -1, 81, 23, 83, -1, -1, -1, -1, + 88, 89, 90, 91, 92, -1, -1, -1, -1, -1, + -1, -1, 41, -1, -1, -1, -1, -1, 47, 48, + 49, -1, -1, -1, 53, -1, -1, -1, 57, -1, + -1, -1, -1, 62, -1, 64, -1, -1, -1, -1, + -1, -1, -1, 72, -1, -1, -1, -1, -1, -1, + -1, -1, 81, -1, 83, -1, -1, -1, -1, 88, + -1, 90, 91, 92, 11, 12, 13, 14, -1, -1, + -1, 18, -1, -1, -1, 22, 23, 24, -1, 26, + 27, -1, -1, -1, -1, -1, 33, -1, -1, 36, + -1, -1, 39, -1, -1, -1, 43, -1, -1, 46, + 47, 48, 49, -1, -1, -1, -1, -1, 55, 56, + 57, -1, -1, -1, 61, 62, 63, 64, 65, -1, + 67, -1, -1, -1, -1, 72, -1, 74, 75, 76, + 77, -1, -1, -1, 81, -1, 83, -1, -1, 11, + 12, 88, 89, 90, 91, 92, 18, -1, -1, -1, + 22, 23, 24, -1, 26, 27, -1, -1, -1, -1, + -1, -1, -1, -1, 36, -1, -1, 39, -1, -1, + -1, 43, -1, -1, 46, 47, 48, 49, -1, -1, + -1, -1, -1, 55, 56, 57, -1, -1, -1, 61, + 62, 63, 64, 65, -1, -1, -1, -1, -1, -1, + 72, -1, 74, 75, 76, 77, -1, -1, -1, 81, + -1, 83, -1, 85, 11, 12, 88, 89, 90, 91, + 92, 18, -1, -1, -1, 22, 23, 24, -1, 26, + 27, -1, -1, -1, -1, -1, -1, -1, -1, 36, + -1, -1, 39, -1, -1, -1, 43, -1, -1, 46, + 47, 48, 49, -1, -1, -1, -1, -1, 55, 56, + 57, -1, -1, -1, 61, 62, 63, 64, 65, -1, + -1, -1, 11, 12, -1, 72, -1, 74, 75, 76, + 77, -1, -1, 22, 81, 24, 83, 26, 11, 12, + -1, 88, 89, 90, 91, 92, -1, 36, -1, 22, + 39, 24, -1, 26, 43, -1, -1, 46, -1, -1, + -1, -1, -1, 36, -1, -1, 39, 56, -1, -1, + 43, -1, 61, 46, 63, -1, 65, -1, -1, -1, + -1, -1, -1, 56, -1, 74, 75, -1, 61, -1, + 63, -1, 65, -1, -1, -1, -1, -1, -1, -1, + 89, 74, 75, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 89 +}; +/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ +#line 3 "/usr/share/bison.simple" +/* This file comes from bison-1.28. */ + +/* Skeleton output parser for bison, + Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* This is the parser code that is written into each bison parser + when the %semantic_parser declaration is not specified in the grammar. + It was written by Richard Stallman by simplifying the hairy parser + used when %semantic_parser is specified. */ + +#ifndef YYSTACK_USE_ALLOCA +#ifdef alloca +#define YYSTACK_USE_ALLOCA +#else /* alloca not defined */ +#ifdef __GNUC__ +#define YYSTACK_USE_ALLOCA +#define alloca __builtin_alloca +#else /* not GNU C. */ +#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) +#define YYSTACK_USE_ALLOCA +#include <alloca.h> +#else /* not sparc */ +/* We think this test detects Watcom and Microsoft C. */ +/* This used to test MSDOS, but that is a bad idea + since that symbol is in the user namespace. */ +#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) +#if 0 /* No need for malloc.h, which pollutes the namespace; + instead, just don't use alloca. */ +#include <malloc.h> +#endif +#else /* not MSDOS, or __TURBOC__ */ +#if defined(_AIX) +/* I don't know what this was needed for, but it pollutes the namespace. + So I turned it off. rms, 2 May 1997. */ +/* #include <malloc.h> */ + #pragma alloca +#define YYSTACK_USE_ALLOCA +#else /* not MSDOS, or __TURBOC__, or _AIX */ +#if 0 +#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up, + and on HPUX 10. Eventually we can turn this on. */ +#define YYSTACK_USE_ALLOCA +#define alloca __builtin_alloca +#endif /* __hpux */ +#endif +#endif /* not _AIX */ +#endif /* not MSDOS, or __TURBOC__ */ +#endif /* not sparc */ +#endif /* not GNU C */ +#endif /* alloca not defined */ +#endif /* YYSTACK_USE_ALLOCA not defined */ + +#ifdef YYSTACK_USE_ALLOCA +#define YYSTACK_ALLOC alloca +#else +#define YYSTACK_ALLOC malloc +#endif + +/* Note: there must be only one dollar sign in this file. + It is replaced by the list of actions, each action + as one case of the switch. */ + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY -2 +#define YYEOF 0 +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrlab1 +/* Like YYERROR except do call yyerror. + This remains here temporarily to ease the + transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ +#define YYFAIL goto yyerrlab +#define YYRECOVERING() (!!yyerrstatus) +#define YYBACKUP(token, value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { yychar = (token), yylval = (value); \ + yychar1 = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { yyerror ("syntax error: cannot back up"); YYERROR; } \ +while (0) + +#define YYTERROR 1 +#define YYERRCODE 256 + +#ifndef YYPURE +#define YYLEX yylex() +#endif + +#ifdef YYPURE +#ifdef YYLSP_NEEDED +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) +#else +#define YYLEX yylex(&yylval, &yylloc) +#endif +#else /* not YYLSP_NEEDED */ +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, YYLEX_PARAM) +#else +#define YYLEX yylex(&yylval) +#endif +#endif /* not YYLSP_NEEDED */ +#endif + +/* If nonreentrant, generate the variables here */ + +#ifndef YYPURE + +int yychar; /* the lookahead symbol */ +YYSTYPE yylval; /* the semantic value of the */ + /* lookahead symbol */ + +#ifdef YYLSP_NEEDED +YYLTYPE yylloc; /* location data for the lookahead */ + /* symbol */ +#endif + +int yynerrs; /* number of parse errors so far */ +#endif /* not YYPURE */ + +#if YYDEBUG != 0 +int yydebug; /* nonzero means print parse trace */ +/* Since this is uninitialized, it does not stop multiple parsers + from coexisting. */ +#endif + +/* YYINITDEPTH indicates the initial size of the parser's stacks */ + +#ifndef YYINITDEPTH +#define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH is the maximum size the stacks can grow to + (effective only if the built-in stack extension method is used). */ + +#if YYMAXDEPTH == 0 +#undef YYMAXDEPTH +#endif + +#ifndef YYMAXDEPTH +#define YYMAXDEPTH 10000 +#endif + +/* Define __yy_memcpy. Note that the size argument + should be passed with type unsigned int, because that is what the non-GCC + definitions require. With GCC, __builtin_memcpy takes an arg + of type size_t, but it can handle unsigned int. */ + +#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ +#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) +#else /* not GNU C or C++ */ +#ifndef __cplusplus + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_memcpy (to, from, count) + char *to; + char *from; + unsigned int count; +{ + register char *f = from; + register char *t = to; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#else /* __cplusplus */ + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_memcpy (char *to, char *from, unsigned int count) +{ + register char *t = to; + register char *f = from; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#endif +#endif + +#line 217 "/usr/share/bison.simple" + +/* The user can define YYPARSE_PARAM as the name of an argument to be passed + into yyparse. The argument should have type void *. + It should actually point to an object. + Grammar actions can access the variable by casting it + to the proper pointer type. */ + +#ifdef YYPARSE_PARAM +#ifdef __cplusplus +#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM +#define YYPARSE_PARAM_DECL +#else /* not __cplusplus */ +#define YYPARSE_PARAM_ARG YYPARSE_PARAM +#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; +#endif /* not __cplusplus */ +#else /* not YYPARSE_PARAM */ +#define YYPARSE_PARAM_ARG +#define YYPARSE_PARAM_DECL +#endif /* not YYPARSE_PARAM */ + +/* Prevent warning if -Wstrict-prototypes. */ +#ifdef __GNUC__ +#ifdef YYPARSE_PARAM +int yyparse (void *); +#else +int yyparse (void); +#endif +#endif + +int +yyparse(YYPARSE_PARAM_ARG) + YYPARSE_PARAM_DECL +{ + register int yystate; + register int yyn; + register short *yyssp; + register YYSTYPE *yyvsp; + int yyerrstatus; /* number of tokens to shift before error messages enabled */ + int yychar1 = 0; /* lookahead token as an internal (translated) token number */ + + short yyssa[YYINITDEPTH]; /* the state stack */ + YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ + + short *yyss = yyssa; /* refer to the stacks thru separate pointers */ + YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ + +#ifdef YYLSP_NEEDED + YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp; + +#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) +#else +#define YYPOPSTACK (yyvsp--, yyssp--) +#endif + + int yystacksize = YYINITDEPTH; + int yyfree_stacks = 0; + +#ifdef YYPURE + int yychar; + YYSTYPE yylval; + int yynerrs; +#ifdef YYLSP_NEEDED + YYLTYPE yylloc; +#endif +#endif + + YYSTYPE yyval; /* the variable used to return */ + /* semantic values from the action */ + /* routines */ + + int yylen; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Starting parse\n"); +#endif + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss - 1; + yyvsp = yyvs; +#ifdef YYLSP_NEEDED + yylsp = yyls; +#endif + +/* Push a new state, which is found in yystate . */ +/* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. */ +yynewstate: + + *++yyssp = yystate; + + if (yyssp >= yyss + yystacksize - 1) + { + /* Give user a chance to reallocate the stack */ + /* Use copies of these so that the &'s don't force the real ones into memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; +#ifdef YYLSP_NEEDED + YYLTYPE *yyls1 = yyls; +#endif + + /* Get the current used size of the three stacks, in elements. */ + int size = yyssp - yyss + 1; + +#ifdef yyoverflow + /* Each stack pointer address is followed by the size of + the data in use in that stack, in bytes. */ +#ifdef YYLSP_NEEDED + /* This used to be a conditional around just the two extra args, + but that might be undefined if yyoverflow is a macro. */ + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yyls1, size * sizeof (*yylsp), + &yystacksize); +#else + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yystacksize); +#endif + + yyss = yyss1; yyvs = yyvs1; +#ifdef YYLSP_NEEDED + yyls = yyls1; +#endif +#else /* no yyoverflow */ + /* Extend the stack our own way. */ + if (yystacksize >= YYMAXDEPTH) + { + yyerror("parser stack overflow"); + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); +#endif + } + return 2; + } + yystacksize *= 2; + if (yystacksize > YYMAXDEPTH) + yystacksize = YYMAXDEPTH; +#ifndef YYSTACK_USE_ALLOCA + yyfree_stacks = 1; +#endif + yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); + __yy_memcpy ((char *)yyss, (char *)yyss1, + size * (unsigned int) sizeof (*yyssp)); + yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); + __yy_memcpy ((char *)yyvs, (char *)yyvs1, + size * (unsigned int) sizeof (*yyvsp)); +#ifdef YYLSP_NEEDED + yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); + __yy_memcpy ((char *)yyls, (char *)yyls1, + size * (unsigned int) sizeof (*yylsp)); +#endif +#endif /* no yyoverflow */ + + yyssp = yyss + size - 1; + yyvsp = yyvs + size - 1; +#ifdef YYLSP_NEEDED + yylsp = yyls + size - 1; +#endif + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Stack size increased to %d\n", yystacksize); +#endif + + if (yyssp >= yyss + yystacksize - 1) + YYABORT; + } + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Entering state %d\n", yystate); +#endif + + goto yybackup; + yybackup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* yychar is either YYEMPTY or YYEOF + or a valid token in external form. */ + + if (yychar == YYEMPTY) + { +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Reading a token: "); +#endif + yychar = YYLEX; + } + + /* Convert token to internal form (in yychar1) for indexing tables with */ + + if (yychar <= 0) /* This means end of input. */ + { + yychar1 = 0; + yychar = YYEOF; /* Don't call YYLEX any more */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Now at end of input.\n"); +#endif + } + else + { + yychar1 = YYTRANSLATE(yychar); + +#if YYDEBUG != 0 + if (yydebug) + { + fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); + /* Give the individual parser a way to print the precise meaning + of a token, for further debugging info. */ +#ifdef YYPRINT + YYPRINT (stderr, yychar, yylval); +#endif + fprintf (stderr, ")\n"); + } +#endif + } + + yyn += yychar1; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) + goto yydefault; + + yyn = yytable[yyn]; + + /* yyn is what to do for this token type in this state. + Negative => reduce, -yyn is rule number. + Positive => shift, yyn is new state. + New state is final state => don't bother to shift, + just return success. + 0, or most negative number => error. */ + + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrlab; + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the lookahead token. */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); +#endif + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif + + /* count tokens shifted since error; after three, turn off error status. */ + if (yyerrstatus) yyerrstatus--; + + yystate = yyn; + goto yynewstate; + +/* Do the default action for the current state. */ +yydefault: + + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + +/* Do a reduction. yyn is the number of a rule to reduce with. */ +yyreduce: + yylen = yyr2[yyn]; + if (yylen > 0) + yyval = yyvsp[1-yylen]; /* implement default value of the action */ + +#if YYDEBUG != 0 + if (yydebug) + { + int i; + + fprintf (stderr, "Reducing via rule %d (line %d), ", + yyn, yyrline[yyn]); + + /* Print the symbols being reduced, and their result. */ + for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) + fprintf (stderr, "%s ", yytname[yyrhs[i]]); + fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); + } +#endif + + + switch (yyn) { + +case 1: +#line 298 "asn1p_y.y" +{ + *(void **)param = yyvsp[0].a_grammar; + ; + break;} +case 2: +#line 304 "asn1p_y.y" +{ + yyval.a_grammar = asn1p_new(); + checkmem(yyval.a_grammar); + TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next); + ; + break;} +case 3: +#line 309 "asn1p_y.y" +{ + yyval.a_grammar = yyvsp[-1].a_grammar; + TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next); + ; + break;} +case 4: +#line 330 "asn1p_y.y" +{ + + if(yyvsp[-1].a_module) { + yyval.a_module = yyvsp[-1].a_module; + } else { + /* There's a chance that a module is just plain empty */ + yyval.a_module = asn1p_module_new(); + } + checkmem(yyval.a_module); + + yyval.a_module->Identifier = yyvsp[-7].tv_str; + yyval.a_module->module_oid = yyvsp[-6].a_oid; + yyval.a_module->module_flags = yyvsp[-4].a_module_flags; + ; + break;} +case 5: +#line 351 "asn1p_y.y" +{ yyval.a_oid = 0; ; + break;} +case 6: +#line 352 "asn1p_y.y" +{ yyval.a_oid = yyvsp[0].a_oid; ; + break;} +case 7: +#line 356 "asn1p_y.y" +{ + yyval.a_oid = yyvsp[-1].a_oid; + ; + break;} +case 8: +#line 359 "asn1p_y.y" +{ + yyval.a_oid = 0; + ; + break;} +case 9: +#line 365 "asn1p_y.y" +{ + yyval.a_oid = asn1p_oid_new(); + asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc); + if(yyvsp[0].a_oid_arc.name) + free(yyvsp[0].a_oid_arc.name); + ; + break;} +case 10: +#line 371 "asn1p_y.y" +{ + yyval.a_oid = yyvsp[-1].a_oid; + asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc); + if(yyvsp[0].a_oid_arc.name) + free(yyvsp[0].a_oid_arc.name); + ; + break;} +case 11: +#line 380 "asn1p_y.y" +{ /* iso */ + yyval.a_oid_arc.name = yyvsp[0].tv_str; + yyval.a_oid_arc.number = -1; + ; + break;} +case 12: +#line 384 "asn1p_y.y" +{ /* iso(1) */ + yyval.a_oid_arc.name = yyvsp[-3].tv_str; + yyval.a_oid_arc.number = yyvsp[-1].a_int; + ; + break;} +case 13: +#line 388 "asn1p_y.y" +{ /* 1 */ + yyval.a_oid_arc.name = 0; + yyval.a_oid_arc.number = yyvsp[0].a_int; + ; + break;} +case 14: +#line 398 "asn1p_y.y" +{ yyval.a_module_flags = MSF_NOFLAGS; ; + break;} +case 15: +#line 399 "asn1p_y.y" +{ + yyval.a_module_flags = yyvsp[0].a_module_flags; + ; + break;} +case 16: +#line 408 "asn1p_y.y" +{ + yyval.a_module_flags = yyvsp[0].a_module_flags; + ; + break;} +case 17: +#line 411 "asn1p_y.y" +{ + yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags; + ; + break;} +case 18: +#line 420 "asn1p_y.y" +{ + yyval.a_module_flags = MSF_EXPLICIT_TAGS; + ; + break;} +case 19: +#line 423 "asn1p_y.y" +{ + yyval.a_module_flags = MSF_IMPLICIT_TAGS; + ; + break;} +case 20: +#line 426 "asn1p_y.y" +{ + yyval.a_module_flags = MSF_AUTOMATIC_TAGS; + ; + break;} +case 21: +#line 429 "asn1p_y.y" +{ + yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED; + ; + break;} +case 22: +#line 438 "asn1p_y.y" +{ yyval.a_module = 0; ; + break;} +case 23: +#line 439 "asn1p_y.y" +{ + assert(yyvsp[0].a_module); + yyval.a_module = yyvsp[0].a_module; + ; + break;} +case 24: +#line 449 "asn1p_y.y" +{ + yyval.a_module = yyvsp[0].a_module; + ; + break;} +case 25: +#line 452 "asn1p_y.y" +{ + yyval.a_module = yyvsp[-1].a_module; + +#ifdef MY_IMPORT +#error MY_IMPORT DEFINED ELSEWHERE! +#endif +#define MY_IMPORT(foo,field) do { \ + if(TQ_FIRST(&(yyvsp[0].a_module->foo))) { \ + TQ_ADD(&(yyval.a_module->foo), \ + TQ_REMOVE(&(yyvsp[0].a_module->foo), field), \ + field); \ + assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0); \ + } } while(0) + + MY_IMPORT(imports, xp_next); + MY_IMPORT(exports, xp_next); + MY_IMPORT(members, next); +#undef MY_IMPORT + + ; + break;} +case 26: +#line 478 "asn1p_y.y" +{ + yyval.a_module = yyvsp[0].a_module; + ; + break;} +case 27: +#line 481 "asn1p_y.y" +{ + yyval.a_module = asn1p_module_new(); + checkmem(yyval.a_module); + if(yyvsp[0].a_xports) { + TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next); + } else { + /* "EXPORTS ALL;" ? */ + } + ; + break;} +case 28: +#line 490 "asn1p_y.y" +{ + yyval.a_module = asn1p_module_new(); + checkmem(yyval.a_module); + assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID); + assert(yyvsp[0].a_expr->meta_type != AMT_INVALID); + TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next); + ; + break;} +case 29: +#line 497 "asn1p_y.y" +{ + yyval.a_module = asn1p_module_new(); + checkmem(yyval.a_module); + assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID); + assert(yyvsp[0].a_expr->meta_type != AMT_INVALID); + TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next); + ; + break;} +case 30: +#line 510 "asn1p_y.y" +{ + yyval.a_module = asn1p_module_new(); + checkmem(yyval.a_module); + assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID); + assert(yyvsp[0].a_expr->meta_type != AMT_INVALID); + TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next); + ; + break;} +case 31: +#line 521 "asn1p_y.y" +{ + return yyerror( + "Attempt to redefine a standard basic type, " + "use -ftypesXY to switch back " + "to older version of ASN.1 standard"); + ; + break;} +case 32: +#line 535 "asn1p_y.y" +{ + yyval.a_module = yyvsp[-1].a_module; + ; + break;} +case 33: +#line 541 "asn1p_y.y" +{ + return yyerror("Empty IMPORTS list"); + ; + break;} +case 34: +#line 547 "asn1p_y.y" +{ + yyval.a_module = asn1p_module_new(); + checkmem(yyval.a_module); + TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next); + ; + break;} +case 35: +#line 552 "asn1p_y.y" +{ + yyval.a_module = yyvsp[-1].a_module; + TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next); + ; + break;} +case 36: +#line 559 "asn1p_y.y" +{ + yyval.a_xports = yyvsp[-3].a_xports; + yyval.a_xports->from = yyvsp[-1].tv_str; + yyval.a_xports->from_oid = yyvsp[0].a_oid; + checkmem(yyval.a_xports); + ; + break;} +case 37: +#line 568 "asn1p_y.y" +{ + yyval.a_xports = asn1p_xports_new(); + checkmem(yyval.a_xports); + TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next); + ; + break;} +case 38: +#line 573 "asn1p_y.y" +{ + yyval.a_xports = yyvsp[-2].a_xports; + TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next); + ; + break;} +case 39: +#line 580 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->Identifier = yyvsp[0].tv_str; + yyval.a_expr->expr_type = A1TC_REFERENCE; + ; + break;} +case 40: +#line 586 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->Identifier = yyvsp[0].tv_str; + yyval.a_expr->expr_type = A1TC_REFERENCE; + ; + break;} +case 41: +#line 595 "asn1p_y.y" +{ + yyval.a_xports = yyvsp[-1].a_xports; + ; + break;} +case 42: +#line 598 "asn1p_y.y" +{ + yyval.a_xports = 0; + ; + break;} +case 43: +#line 601 "asn1p_y.y" +{ + /* Empty EXPORTS clause effectively prohibits export. */ + yyval.a_xports = asn1p_xports_new(); + checkmem(yyval.a_xports); + ; + break;} +case 44: +#line 609 "asn1p_y.y" +{ + yyval.a_xports = asn1p_xports_new(); + assert(yyval.a_xports); + TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next); + ; + break;} +case 45: +#line 614 "asn1p_y.y" +{ + yyval.a_xports = yyvsp[-2].a_xports; + TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next); + ; + break;} +case 46: +#line 621 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->Identifier = yyvsp[0].tv_str; + yyval.a_expr->expr_type = A1TC_EXPORTVAR; + ; + break;} +case 47: +#line 627 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->Identifier = yyvsp[0].tv_str; + yyval.a_expr->expr_type = A1TC_EXPORTVAR; + ; + break;} +case 48: +#line 637 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[-4].a_expr; + assert(yyval.a_expr->Identifier == 0); + yyval.a_expr->Identifier = yyvsp[-5].tv_str; + yyval.a_expr->meta_type = AMT_VALUESET; + // take care of optValueSetBody + ; + break;} +case 49: +#line 647 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->reference = yyvsp[0].a_ref; + yyval.a_expr->expr_type = A1TC_REFERENCE; + yyval.a_expr->meta_type = AMT_TYPEREF; + ; + break;} +case 50: +#line 654 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->expr_type = yyvsp[0].a_type; + yyval.a_expr->meta_type = AMT_TYPE; + ; + break;} +case 51: +#line 663 "asn1p_y.y" +{ ; + break;} +case 52: +#line 664 "asn1p_y.y" +{ + ; + break;} +case 53: +#line 680 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->Identifier = yyvsp[-3].tv_str; + yyval.a_expr->tag = yyvsp[-1].a_tag; + yyval.a_expr->expr_type = A1TC_TYPEID; + yyval.a_expr->meta_type = AMT_TYPE; + ; + break;} +case 54: +#line 688 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[0].a_expr; + yyval.a_expr->Identifier = yyvsp[-3].tv_str; + yyval.a_expr->tag = yyvsp[-1].a_tag; + assert(yyval.a_expr->expr_type); + assert(yyval.a_expr->meta_type); + ; + break;} +case 55: +#line 695 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[0].a_expr; + yyval.a_expr->Identifier = yyvsp[-2].tv_str; + assert(yyval.a_expr->expr_type == A1TC_CLASSDEF); + assert(yyval.a_expr->meta_type == AMT_OBJECT); + ; + break;} +case 56: +#line 712 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[0].a_expr; + assert(yyval.a_expr->Identifier == 0); + yyval.a_expr->Identifier = yyvsp[-5].tv_str; + yyval.a_expr->params = yyvsp[-3].a_plist; + yyval.a_expr->meta_type = AMT_PARAMTYPE; + ; + break;} +case 57: +#line 722 "asn1p_y.y" +{ + int ret; + yyval.a_plist = asn1p_paramlist_new(yylineno); + checkmem(yyval.a_plist); + ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument); + checkmem(ret == 0); + if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor); + if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument); + ; + break;} +case 58: +#line 731 "asn1p_y.y" +{ + int ret; + yyval.a_plist = yyvsp[-2].a_plist; + ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument); + checkmem(ret == 0); + if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor); + if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument); + ; + break;} +case 59: +#line 742 "asn1p_y.y" +{ + yyval.a_parg.governor = NULL; + yyval.a_parg.argument = yyvsp[0].tv_str; + ; + break;} +case 60: +#line 746 "asn1p_y.y" +{ + int ret; + yyval.a_parg.governor = asn1p_ref_new(yylineno); + ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0); + checkmem(ret == 0); + yyval.a_parg.argument = yyvsp[0].tv_str; + ; + break;} +case 61: +#line 753 "asn1p_y.y" +{ + int ret; + yyval.a_parg.governor = asn1p_ref_new(yylineno); + ret = asn1p_ref_add_component(yyval.a_parg.governor, + ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1); + checkmem(ret == 0); + yyval.a_parg.argument = yyvsp[0].tv_str; + ; + break;} +case 62: +#line 764 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); + ; + break;} +case 63: +#line 769 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[-2].a_expr; + TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); + ; + break;} +case 64: +#line 776 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[0].a_expr; + ; + break;} +case 65: +#line 779 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->Identifier = yyvsp[0].tv_str; + yyval.a_expr->expr_type = A1TC_REFERENCE; + yyval.a_expr->meta_type = AMT_VALUE; + ; + break;} +case 66: +#line 792 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); + ; + break;} +case 67: +#line 797 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[-2].a_expr; + TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); + ; + break;} +case 68: +#line 804 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[-2].a_expr; + checkmem(yyval.a_expr); + yyval.a_expr->with_syntax = yyvsp[0].a_wsynt; + assert(yyval.a_expr->expr_type == A1TC_CLASSDEF); + assert(yyval.a_expr->meta_type == AMT_OBJECT); + ; + break;} +case 69: +#line 814 "asn1p_y.y" +{ yyval.a_int = 0; ; + break;} +case 70: +#line 815 "asn1p_y.y" +{ yyval.a_int = 1; ; + break;} +case 71: +#line 819 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->expr_type = A1TC_CLASSDEF; + yyval.a_expr->meta_type = AMT_OBJECT; + TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); + ; + break;} +case 72: +#line 826 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[-2].a_expr; + TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); + ; + break;} +case 73: +#line 833 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name; + yyval.a_expr->expr_type = A1TC_CLASSFIELD; + yyval.a_expr->meta_type = AMT_OBJECTFIELD; + yyval.a_expr->marker = yyvsp[0].a_marker; + ; + break;} +case 74: +#line 841 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[-1].a_expr; + yyval.a_expr->Identifier = yyvsp[-2].a_refcomp.name; + yyval.a_expr->unique = yyvsp[0].a_int; + ; + break;} +case 75: +#line 846 "asn1p_y.y" +{ + int ret; + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name; + yyval.a_expr->reference = asn1p_ref_new(yylineno); + checkmem(yyval.a_expr->reference); + ret = asn1p_ref_add_component(yyval.a_expr->reference, + yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type); + checkmem(ret == 0); + yyval.a_expr->expr_type = A1TC_CLASSFIELD; + yyval.a_expr->meta_type = AMT_OBJECTFIELD; + yyval.a_expr->marker = yyvsp[-1].a_marker; + yyval.a_expr->unique = yyvsp[0].a_int; + ; + break;} +case 76: +#line 864 "asn1p_y.y" +{ yyval.a_wsynt = 0; ; + break;} +case 77: +#line 865 "asn1p_y.y" +{ + yyval.a_wsynt = yyvsp[0].a_wsynt; + ; + break;} +case 78: +#line 872 "asn1p_y.y" +{ asn1p_lexer_hack_enable_with_syntax(); ; + break;} +case 79: +#line 874 "asn1p_y.y" +{ + yyval.a_wsynt = yyvsp[-1].a_wsynt; + ; + break;} +case 80: +#line 880 "asn1p_y.y" +{ + yyval.a_wsynt = asn1p_wsyntx_new(); + TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next); + ; + break;} +case 81: +#line 884 "asn1p_y.y" +{ + yyval.a_wsynt = yyvsp[-1].a_wsynt; + TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next); + ; + break;} +case 82: +#line 891 "asn1p_y.y" +{ + yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0); + ; + break;} +case 83: +#line 894 "asn1p_y.y" +{ + asn1p_ref_t *ref; + int ret; + ref = asn1p_ref_new(yylineno); + checkmem(ref); + ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type); + checkmem(ret == 0); + yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0); + ; + break;} +case 84: +#line 920 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[0].a_expr; + assert(yyval.a_expr->Identifier == 0); + yyval.a_expr->Identifier = yyvsp[-1].tv_nametag.name; + yyval.a_expr->tag = yyvsp[-1].tv_nametag.tag; + ; + break;} +case 85: +#line 926 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[0].a_expr; + ; + break;} +case 86: +#line 932 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[-2].a_expr; + yyval.a_expr->constraints = yyvsp[-1].a_constr; + yyval.a_expr->marker = yyvsp[0].a_marker; + ; + break;} +case 87: +#line 940 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + yyval.a_expr->Identifier = strdup("..."); + checkmem(yyval.a_expr->Identifier); + yyval.a_expr->expr_type = A1TC_EXTENSIBLE; + yyval.a_expr->meta_type = AMT_TYPE; + ; + break;} +case 88: +#line 948 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + yyval.a_expr->Identifier = strdup("..."); + checkmem(yyval.a_expr->Identifier); + yyval.a_expr->value = yyvsp[0].a_value; + yyval.a_expr->expr_type = A1TC_EXTENSIBLE; + yyval.a_expr->meta_type = AMT_TYPE; + ; + break;} +case 89: +#line 957 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + yyval.a_expr->Identifier = strdup("..."); + yyval.a_expr->value = yyvsp[0].a_value; + checkmem(yyval.a_expr->Identifier); + yyval.a_expr->expr_type = A1TC_EXTENSIBLE; + yyval.a_expr->meta_type = AMT_TYPE; + ; + break;} +case 90: +#line 969 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[0].a_expr; + ; + break;} +case 91: +#line 972 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->expr_type = yyvsp[0].a_type; + yyval.a_expr->meta_type = AMT_TYPE; + ; + break;} +case 92: +#line 978 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[0].a_expr; + checkmem(yyval.a_expr); + assert(yyval.a_expr->meta_type); + ; + break;} +case 93: +#line 986 "asn1p_y.y" +{ + int ret; + yyval.a_expr = yyvsp[-1].a_expr; + assert(yyval.a_expr->expr_type == 0); + assert(yyval.a_expr->meta_type == 0); + assert(yyval.a_expr->reference == 0); + yyval.a_expr->reference = asn1p_ref_new(yylineno); + checkmem(yyval.a_expr->reference); + ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN); + checkmem(ret == 0); + free(yyvsp[-3].tv_str); + yyval.a_expr->expr_type = A1TC_PARAMETRIZED; + yyval.a_expr->meta_type = AMT_TYPE; + ; + break;} +case 94: +#line 1010 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->reference = yyvsp[0].a_ref; + yyval.a_expr->expr_type = A1TC_REFERENCE; + yyval.a_expr->meta_type = AMT_TYPEREF; + ; + break;} +case 95: +#line 1017 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->reference = yyvsp[0].a_ref; + yyval.a_expr->expr_type = A1TC_INSTANCE; + yyval.a_expr->meta_type = AMT_TYPE; + ; + break;} +case 96: +#line 1032 "asn1p_y.y" +{ + int ret; + yyval.a_ref = asn1p_ref_new(yylineno); + checkmem(yyval.a_ref); + ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN); + checkmem(ret == 0); + free(yyvsp[0].tv_str); + ; + break;} +case 97: +#line 1040 "asn1p_y.y" +{ + int ret; + yyval.a_ref = asn1p_ref_new(yylineno); + checkmem(yyval.a_ref); + ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN); + checkmem(ret == 0); + ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN); + checkmem(ret == 0); + free(yyvsp[-2].tv_str); + ; + break;} +case 98: +#line 1050 "asn1p_y.y" +{ + int ret; + yyval.a_ref = asn1p_ref_new(yylineno); + checkmem(yyval.a_ref); + ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN); + checkmem(ret == 0); + ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase); + checkmem(ret == 0); + free(yyvsp[-2].tv_str); + ; + break;} +case 99: +#line 1060 "asn1p_y.y" +{ + int ret; + yyval.a_ref = asn1p_ref_new(yylineno); + checkmem(yyval.a_ref); + ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS); + free(yyvsp[0].tv_str); + checkmem(ret == 0); + ; + break;} +case 100: +#line 1068 "asn1p_y.y" +{ + int ret; + yyval.a_ref = yyvsp[0].a_ref; + ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS); + free(yyvsp[-2].tv_str); + checkmem(ret == 0); + /* + * Move the last element infront. + */ + { + struct asn1p_ref_component_s tmp_comp; + tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1]; + memmove(&yyval.a_ref->components[1], + &yyval.a_ref->components[0], + sizeof(yyval.a_ref->components[0]) + * (yyval.a_ref->comp_count - 1)); + yyval.a_ref->components[0] = tmp_comp; + } + ; + break;} +case 101: +#line 1090 "asn1p_y.y" +{ + int ret; + yyval.a_ref = asn1p_ref_new(yylineno); + checkmem(yyval.a_ref); + ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type); + free(yyvsp[0].a_refcomp.name); + checkmem(ret == 0); + ; + break;} +case 102: +#line 1098 "asn1p_y.y" +{ + int ret; + yyval.a_ref = yyvsp[-2].a_ref; + ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type); + free(yyvsp[0].a_refcomp.name); + checkmem(ret == 0); + ; + break;} +case 105: +#line 1112 "asn1p_y.y" +{ + yyval.a_refcomp.lex_type = RLT_AmpUppercase; + yyval.a_refcomp.name = yyvsp[0].tv_str; + ; + break;} +case 106: +#line 1117 "asn1p_y.y" +{ + yyval.a_refcomp.lex_type = RLT_Amplowercase; + yyval.a_refcomp.name = yyvsp[0].tv_str; + ; + break;} +case 107: +#line 1130 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[-2].a_expr; + assert(yyval.a_expr->Identifier == NULL); + yyval.a_expr->Identifier = yyvsp[-3].tv_str; + yyval.a_expr->meta_type = AMT_VALUE; + yyval.a_expr->value = yyvsp[0].a_value; + ; + break;} +case 108: +#line 1140 "asn1p_y.y" +{ asn1p_lexer_hack_push_opaque_state(); ; + break;} +case 109: +#line 1141 "asn1p_y.y" +{ + yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0); + checkmem(yyval.a_value); + yyval.a_value->type = ATV_UNPARSED; + ; + break;} +case 110: +#line 1146 "asn1p_y.y" +{ + yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B'); + checkmem(yyval.a_value); + ; + break;} +case 111: +#line 1150 "asn1p_y.y" +{ + yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H'); + checkmem(yyval.a_value); + ; + break;} +case 112: +#line 1154 "asn1p_y.y" +{ + yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0); + checkmem(yyval.a_value); + ; + break;} +case 113: +#line 1158 "asn1p_y.y" +{ + yyval.a_value = yyvsp[0].a_value; + ; + break;} +case 114: +#line 1161 "asn1p_y.y" +{ + yyval.a_value = yyvsp[0].a_value; + ; + break;} +case 115: +#line 1167 "asn1p_y.y" +{ + asn1p_ref_t *ref; + int ret; + ref = asn1p_ref_new(yylineno); + checkmem(ref); + ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase); + checkmem(ret == 0); + yyval.a_value = asn1p_value_fromref(ref, 0); + checkmem(yyval.a_value); + free(yyvsp[0].tv_str); + ; + break;} +case 116: +#line 1178 "asn1p_y.y" +{ + asn1p_ref_t *ref; + int ret; + ref = asn1p_ref_new(yylineno); + checkmem(ref); + ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN); + checkmem(ret == 0); + ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase); + checkmem(ret == 0); + yyval.a_value = asn1p_value_fromref(ref, 0); + checkmem(yyval.a_value); + free(yyvsp[-2].tv_str); + free(yyvsp[0].tv_str); + ; + break;} +case 117: +#line 1195 "asn1p_y.y" +{ + yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2; + yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1); + checkmem(yyval.tv_opaque.buf); + yyval.tv_opaque.buf[0] = '{'; + yyval.tv_opaque.buf[1] = ' '; + memcpy(yyval.tv_opaque.buf + 2, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len); + yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0'; + free(yyvsp[0].tv_opaque.buf); + ; + break;} +case 118: +#line 1205 "asn1p_y.y" +{ + int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len; + char *p = malloc(newsize + 1); + checkmem(p); + memcpy(p , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len); + memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len); + p[newsize] = '\0'; + free(yyvsp[-1].tv_opaque.buf); + free(yyvsp[0].tv_opaque.buf); + yyval.tv_opaque.buf = p; + yyval.tv_opaque.len = newsize; + ; + break;} +case 119: +#line 1220 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_BOOLEAN; ; + break;} +case 120: +#line 1221 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_NULL; ; + break;} +case 121: +#line 1222 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_REAL; ; + break;} +case 122: +#line 1223 "asn1p_y.y" +{ yyval.a_type = yyvsp[0].a_type; ; + break;} +case 123: +#line 1224 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_OCTET_STRING; ; + break;} +case 124: +#line 1225 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ; + break;} +case 125: +#line 1226 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ; + break;} +case 126: +#line 1227 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_EXTERNAL; ; + break;} +case 127: +#line 1228 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ; + break;} +case 128: +#line 1229 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ; + break;} +case 129: +#line 1230 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_UTCTime; ; + break;} +case 130: +#line 1231 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_GeneralizedTime; ; + break;} +case 131: +#line 1238 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_INTEGER; ; + break;} +case 132: +#line 1239 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_ENUMERATED; ; + break;} +case 133: +#line 1240 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_BIT_STRING; ; + break;} +case 134: +#line 1244 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + yyval.a_expr->expr_type = yyvsp[0].a_type; + yyval.a_expr->meta_type = AMT_TYPE; + ; + break;} +case 135: +#line 1250 "asn1p_y.y" +{ + if(yyvsp[0].a_expr) { + yyval.a_expr = yyvsp[0].a_expr; + } else { + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + } + yyval.a_expr->expr_type = yyvsp[-1].a_type; + yyval.a_expr->meta_type = AMT_TYPE; + ; + break;} +case 136: +#line 1263 "asn1p_y.y" +{ yyval.a_type = ASN_STRING_BMPString; ; + break;} +case 137: +#line 1264 "asn1p_y.y" +{ + yyval.a_type = ASN_STRING_GeneralString; + return yyerror("GeneralString is not supported"); + ; + break;} +case 138: +#line 1268 "asn1p_y.y" +{ + yyval.a_type = ASN_STRING_GraphicString; + return yyerror("GraphicString is not supported"); + ; + break;} +case 139: +#line 1272 "asn1p_y.y" +{ yyval.a_type = ASN_STRING_IA5String; ; + break;} +case 140: +#line 1273 "asn1p_y.y" +{ yyval.a_type = ASN_STRING_ISO646String; ; + break;} +case 141: +#line 1274 "asn1p_y.y" +{ yyval.a_type = ASN_STRING_NumericString; ; + break;} +case 142: +#line 1275 "asn1p_y.y" +{ yyval.a_type = ASN_STRING_PrintableString; ; + break;} +case 143: +#line 1276 "asn1p_y.y" +{ + yyval.a_type = ASN_STRING_T61String; + return yyerror("T61String not implemented yet"); + ; + break;} +case 144: +#line 1280 "asn1p_y.y" +{ yyval.a_type = ASN_STRING_TeletexString; ; + break;} +case 145: +#line 1281 "asn1p_y.y" +{ yyval.a_type = ASN_STRING_UniversalString; ; + break;} +case 146: +#line 1282 "asn1p_y.y" +{ yyval.a_type = ASN_STRING_UTF8String; ; + break;} +case 147: +#line 1283 "asn1p_y.y" +{ + yyval.a_type = ASN_STRING_VideotexString; + return yyerror("VideotexString is no longer supported"); + ; + break;} +case 148: +#line 1287 "asn1p_y.y" +{ yyval.a_type = ASN_STRING_VisibleString; ; + break;} +case 149: +#line 1288 "asn1p_y.y" +{ yyval.a_type = ASN_STRING_ObjectDescriptor; ; + break;} +case 150: +#line 1292 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[-1].a_expr; + assert(yyval.a_expr->expr_type == A1TC_INVALID); + yyval.a_expr->expr_type = ASN_CONSTR_CHOICE; + yyval.a_expr->meta_type = AMT_TYPE; + ; + break;} +case 151: +#line 1298 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[-1].a_expr; + assert(yyval.a_expr->expr_type == A1TC_INVALID); + yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE; + yyval.a_expr->meta_type = AMT_TYPE; + ; + break;} +case 152: +#line 1304 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[-1].a_expr; + assert(yyval.a_expr->expr_type == A1TC_INVALID); + yyval.a_expr->expr_type = ASN_CONSTR_SET; + yyval.a_expr->meta_type = AMT_TYPE; + ; + break;} +case 153: +#line 1310 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + yyval.a_expr->constraints = yyvsp[-2].a_constr; + yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF; + yyval.a_expr->meta_type = AMT_TYPE; + TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); + ; + break;} +case 154: +#line 1318 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + yyval.a_expr->constraints = yyvsp[-2].a_constr; + yyval.a_expr->expr_type = ASN_CONSTR_SET_OF; + yyval.a_expr->meta_type = AMT_TYPE; + TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); + ; + break;} +case 155: +#line 1326 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + yyval.a_expr->expr_type = ASN_CONSTR_ANY; + yyval.a_expr->meta_type = AMT_TYPE; + ; + break;} +case 156: +#line 1332 "asn1p_y.y" +{ + int ret; + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + yyval.a_expr->reference = asn1p_ref_new(yylineno); + ret = asn1p_ref_add_component(yyval.a_expr->reference, + yyvsp[0].tv_str, RLT_lowercase); + checkmem(ret == 0); + yyval.a_expr->expr_type = ASN_CONSTR_ANY; + yyval.a_expr->meta_type = AMT_TYPE; + ; + break;} +case 157: +#line 1349 "asn1p_y.y" +{ yyval.a_constr = 0; ; + break;} +case 158: +#line 1350 "asn1p_y.y" +{ yyval.a_constr = yyvsp[0].a_constr; ; + break;} +case 164: +#line 1358 "asn1p_y.y" +{ + /* + * This is a special case, for compatibility purposes. + * It goes without parenthesis. + */ + int ret; + yyval.a_constr = asn1p_constraint_new(yylineno); + checkmem(yyval.a_constr); + yyval.a_constr->type = ACT_CT_SIZE; + ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr); + checkmem(ret == 0); + ; + break;} +case 165: +#line 1370 "asn1p_y.y" +{ + CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0); + ; + break;} +case 166: +#line 1373 "asn1p_y.y" +{ + CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-1].a_constr, yyvsp[0].a_constr); + ; + break;} +case 167: +#line 1379 "asn1p_y.y" +{ + yyval.a_constr = yyvsp[-1].a_constr; + ; + break;} +case 168: +#line 1385 "asn1p_y.y" +{ + yyval.a_constr = yyvsp[0].a_constr; + ; + break;} +case 169: +#line 1388 "asn1p_y.y" +{ + asn1p_constraint_t *ct; + ct = asn1p_constraint_new(yylineno); + checkmem(ct); + ct->type = ACT_EL_EXT; + CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct); + ; + break;} +case 170: +#line 1395 "asn1p_y.y" +{ + asn1p_constraint_t *ct; + ct = asn1p_constraint_new(yylineno); + checkmem(ct); + ct->type = ACT_EL_EXT; + CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct); + CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, yyvsp[0].a_constr); + ; + break;} +case 171: +#line 1403 "asn1p_y.y" +{ + yyval.a_constr = asn1p_constraint_new(yylineno); + checkmem(yyval.a_constr); + yyval.a_constr->type = ACT_EL_EXT; + ; + break;} +case 172: +#line 1408 "asn1p_y.y" +{ + asn1p_constraint_t *ct; + ct = asn1p_constraint_new(yylineno); + checkmem(ct); + ct->type = ACT_EL_EXT; + CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr); + ; + break;} +case 173: +#line 1417 "asn1p_y.y" +{ yyval.a_constr = yyvsp[0].a_constr; ; + break;} +case 174: +#line 1420 "asn1p_y.y" +{ yyval.a_constr = yyvsp[0].a_constr; ; + break;} +case 175: +#line 1421 "asn1p_y.y" +{ + CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr); + ; + break;} +case 176: +#line 1427 "asn1p_y.y" +{ yyval.a_constr = yyvsp[0].a_constr; ; + break;} +case 177: +#line 1429 "asn1p_y.y" +{ + CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr); + ; + break;} +case 178: +#line 1435 "asn1p_y.y" +{ yyval.a_constr = yyvsp[0].a_constr; ; + break;} +case 179: +#line 1436 "asn1p_y.y" +{ + CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr); + ; + break;} +case 180: +#line 1442 "asn1p_y.y" +{ + yyval.a_constr = asn1p_constraint_new(yylineno); + checkmem(yyval.a_constr); + yyval.a_constr->type = ACT_EL_VALUE; + yyval.a_constr->value = yyvsp[0].a_value; + ; + break;} +case 181: +#line 1448 "asn1p_y.y" +{ + yyval.a_constr = asn1p_constraint_new(yylineno); + checkmem(yyval.a_constr); + yyval.a_constr->type = yyvsp[-1].a_ctype; + yyval.a_constr->range_start = yyvsp[-2].a_value; + yyval.a_constr->range_stop = yyvsp[0].a_value; + ; + break;} +case 182: +#line 1455 "asn1p_y.y" +{ + int ret; + yyval.a_constr = asn1p_constraint_new(yylineno); + checkmem(yyval.a_constr); + yyval.a_constr->type = yyvsp[-3].a_ctype; + ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr); + checkmem(ret == 0); + ; + break;} +case 183: +#line 1463 "asn1p_y.y" +{ + yyval.a_constr = yyvsp[0].a_constr; + ; + break;} +case 184: +#line 1466 "asn1p_y.y" +{ + yyval.a_constr = yyvsp[0].a_constr; + ; + break;} +case 185: +#line 1472 "asn1p_y.y" +{ yyval.a_ctype = ACT_EL_RANGE; ; + break;} +case 186: +#line 1473 "asn1p_y.y" +{ yyval.a_ctype = ACT_EL_RLRANGE; ; + break;} +case 187: +#line 1474 "asn1p_y.y" +{ yyval.a_ctype = ACT_EL_LLRANGE; ; + break;} +case 188: +#line 1475 "asn1p_y.y" +{ yyval.a_ctype = ACT_EL_ULRANGE; ; + break;} +case 189: +#line 1479 "asn1p_y.y" +{ + yyval.a_ctype = ACT_CT_SIZE; + ; + break;} +case 190: +#line 1482 "asn1p_y.y" +{ + yyval.a_ctype = ACT_CT_FROM; + ; + break;} +case 191: +#line 1488 "asn1p_y.y" +{ + yyval.a_value = yyvsp[0].a_value; + ; + break;} +case 192: +#line 1491 "asn1p_y.y" +{ + asn1p_ref_t *ref; + int ret; + ref = asn1p_ref_new(yylineno); + checkmem(ref); + ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase); + checkmem(ret == 0); + yyval.a_value = asn1p_value_fromref(ref, 0); + checkmem(yyval.a_value); + free(yyvsp[0].tv_str); + ; + break;} +case 193: +#line 1502 "asn1p_y.y" +{ + yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0); + checkmem(yyval.a_value); + ; + break;} +case 194: +#line 1506 "asn1p_y.y" +{ + yyval.a_value = asn1p_value_fromint(123); + checkmem(yyval.a_value); + yyval.a_value->type = ATV_MIN; + ; + break;} +case 195: +#line 1511 "asn1p_y.y" +{ + yyval.a_value = asn1p_value_fromint(321); + checkmem(yyval.a_value); + yyval.a_value->type = ATV_MAX; + ; + break;} +case 196: +#line 1516 "asn1p_y.y" +{ + yyval.a_value = asn1p_value_fromint(0); + checkmem(yyval.a_value); + yyval.a_value->type = ATV_FALSE; + ; + break;} +case 197: +#line 1521 "asn1p_y.y" +{ + yyval.a_value = asn1p_value_fromint(1); + checkmem(yyval.a_value); + yyval.a_value->type = ATV_TRUE; + ; + break;} +case 198: +#line 1529 "asn1p_y.y" +{ + CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0); + ; + break;} +case 199: +#line 1535 "asn1p_y.y" +{ + yyval.a_constr = yyvsp[0].a_constr; + ; + break;} +case 200: +#line 1538 "asn1p_y.y" +{ + CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr); + ; + break;} +case 201: +#line 1544 "asn1p_y.y" +{ + yyval.a_constr = asn1p_constraint_new(yylineno); + checkmem(yyval.a_constr); + yyval.a_constr->type = ACT_EL_EXT; + ; + break;} +case 202: +#line 1549 "asn1p_y.y" +{ + yyval.a_constr = asn1p_constraint_new(yylineno); + checkmem(yyval.a_constr); + yyval.a_constr->type = ACT_EL_VALUE; + yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0); + yyval.a_constr->presence = yyvsp[0].a_pres; + ; + break;} +case 203: +#line 1562 "asn1p_y.y" +{ yyval.a_pres = ACPRES_DEFAULT; ; + break;} +case 204: +#line 1563 "asn1p_y.y" +{ yyval.a_pres = yyvsp[0].a_pres; ; + break;} +case 205: +#line 1567 "asn1p_y.y" +{ + yyval.a_pres = ACPRES_PRESENT; + ; + break;} +case 206: +#line 1570 "asn1p_y.y" +{ + yyval.a_pres = ACPRES_ABSENT; + ; + break;} +case 207: +#line 1573 "asn1p_y.y" +{ + yyval.a_pres = ACPRES_OPTIONAL; + ; + break;} +case 208: +#line 1579 "asn1p_y.y" +{ + yyval.a_constr = yyvsp[0].a_constr; + ; + break;} +case 209: +#line 1582 "asn1p_y.y" +{ + yyval.a_constr = yyvsp[0].a_constr; + ; + break;} +case 210: +#line 1591 "asn1p_y.y" +{ + asn1p_ref_t *ref = asn1p_ref_new(yylineno); + asn1p_constraint_t *ct; + int ret; + ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0); + checkmem(ret == 0); + ct = asn1p_constraint_new(yylineno); + checkmem(yyval.a_constr); + ct->type = ACT_EL_VALUE; + ct->value = asn1p_value_fromref(ref, 0); + CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0); + ; + break;} +case 211: +#line 1606 "asn1p_y.y" +{ + CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr); + ; + break;} +case 212: +#line 1612 "asn1p_y.y" +{ + yyval.a_constr = asn1p_constraint_new(yylineno); + checkmem(yyval.a_constr); + yyval.a_constr->type = ACT_EL_VALUE; + yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0); + ; + break;} +case 213: +#line 1618 "asn1p_y.y" +{ + asn1p_constraint_t *ct; + ct = asn1p_constraint_new(yylineno); + checkmem(ct); + ct->type = ACT_EL_VALUE; + ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0); + CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct); + ; + break;} +case 214: +#line 1632 "asn1p_y.y" +{ + char *p = malloc(strlen(yyvsp[0].tv_str) + 2); + int ret; + *p = '@'; + strcpy(p + 1, yyvsp[0].tv_str); + yyval.a_ref = asn1p_ref_new(yylineno); + ret = asn1p_ref_add_component(yyval.a_ref, p, 0); + checkmem(ret == 0); + free(p); + free(yyvsp[0].tv_str); + ; + break;} +case 215: +#line 1643 "asn1p_y.y" +{ + char *p = malloc(strlen(yyvsp[0].tv_str) + 3); + int ret; + p[0] = '@'; + p[1] = '.'; + strcpy(p + 2, yyvsp[0].tv_str); + yyval.a_ref = asn1p_ref_new(yylineno); + ret = asn1p_ref_add_component(yyval.a_ref, p, 0); + checkmem(ret == 0); + free(p); + free(yyvsp[0].tv_str); + ; + break;} +case 216: +#line 1659 "asn1p_y.y" +{ + yyval.tv_str = yyvsp[0].tv_str; + ; + break;} +case 217: +#line 1662 "asn1p_y.y" +{ + int l1 = strlen(yyvsp[-2].tv_str); + int l3 = strlen(yyvsp[0].tv_str); + yyval.tv_str = malloc(l1 + 1 + l3 + 1); + memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1); + yyval.tv_str[l1] = '.'; + memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3); + yyval.tv_str[l1 + 1 + l3] = '\0'; + ; + break;} +case 218: +#line 1680 "asn1p_y.y" +{ yyval.a_marker = EM_NOMARK; ; + break;} +case 219: +#line 1681 "asn1p_y.y" +{ yyval.a_marker = yyvsp[0].a_marker; ; + break;} +case 220: +#line 1685 "asn1p_y.y" +{ + yyval.a_marker = EM_OPTIONAL; + ; + break;} +case 221: +#line 1688 "asn1p_y.y" +{ + yyval.a_marker = EM_DEFAULT; + /* FIXME: store DefaultValue somewhere */ + ; + break;} +case 222: +#line 1695 "asn1p_y.y" +{ + ; + break;} +case 223: +#line 1697 "asn1p_y.y" +{ + ; + break;} +case 224: +#line 1699 "asn1p_y.y" +{ asn1p_lexer_hack_push_opaque_state(); ; + break;} +case 225: +#line 1699 "asn1p_y.y" +{ + ; + break;} +case 226: +#line 1720 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + ; + break;} +case 227: +#line 1724 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[-1].a_expr; + ; + break;} +case 228: +#line 1730 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); + ; + break;} +case 229: +#line 1735 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[-2].a_expr; + TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); + ; + break;} +case 230: +#line 1742 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + yyval.a_expr->expr_type = A1TC_UNIVERVAL; + yyval.a_expr->meta_type = AMT_VALUE; + yyval.a_expr->Identifier = yyvsp[0].tv_str; + ; + break;} +case 231: +#line 1749 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + yyval.a_expr->expr_type = A1TC_UNIVERVAL; + yyval.a_expr->meta_type = AMT_VALUE; + yyval.a_expr->Identifier = yyvsp[-3].tv_str; + yyval.a_expr->value = yyvsp[-1].a_value; + ; + break;} +case 232: +#line 1757 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + yyval.a_expr->expr_type = A1TC_UNIVERVAL; + yyval.a_expr->meta_type = AMT_VALUE; + yyval.a_expr->Identifier = yyvsp[-3].tv_str; + yyval.a_expr->value = yyvsp[-1].a_value; + ; + break;} +case 233: +#line 1765 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + yyval.a_expr->expr_type = A1TC_UNIVERVAL; + yyval.a_expr->meta_type = AMT_VALUE; + yyval.a_expr->value = yyvsp[0].a_value; + ; + break;} +case 234: +#line 1772 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + yyval.a_expr->Identifier = strdup("..."); + checkmem(yyval.a_expr->Identifier); + yyval.a_expr->expr_type = A1TC_EXTENSIBLE; + yyval.a_expr->meta_type = AMT_VALUE; + ; + break;} +case 235: +#line 1783 "asn1p_y.y" +{ + yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int); + checkmem(yyval.a_value); + ; + break;} +case 236: +#line 1787 "asn1p_y.y" +{ + yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int); + checkmem(yyval.a_value); + ; + break;} +case 237: +#line 1818 "asn1p_y.y" +{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ; + break;} +case 238: +#line 1819 "asn1p_y.y" +{ yyval.a_tag = yyvsp[0].a_tag; ; + break;} +case 239: +#line 1823 "asn1p_y.y" +{ + yyval.a_tag = yyvsp[0].a_tag; + yyval.a_tag.tag_mode = TM_DEFAULT; + ; + break;} +case 240: +#line 1827 "asn1p_y.y" +{ + yyval.a_tag = yyvsp[-1].a_tag; + yyval.a_tag.tag_mode = TM_IMPLICIT; + ; + break;} +case 241: +#line 1831 "asn1p_y.y" +{ + yyval.a_tag = yyvsp[-1].a_tag; + yyval.a_tag.tag_mode = TM_EXPLICIT; + ; + break;} +case 242: +#line 1838 "asn1p_y.y" +{ + checkmem(yyvsp[0].tv_str); + yyval.tv_str = yyvsp[0].tv_str; + ; + break;} +case 243: +#line 1842 "asn1p_y.y" +{ + checkmem(yyvsp[0].tv_str); + yyval.tv_str = yyvsp[0].tv_str; + ; + break;} +case 244: +#line 1849 "asn1p_y.y" +{ + checkmem(yyvsp[0].tv_str); + yyval.tv_str = yyvsp[0].tv_str; + ; + break;} +case 245: +#line 1856 "asn1p_y.y" +{ + checkmem(yyvsp[0].tv_str); + yyval.tv_str = yyvsp[0].tv_str; + ; + break;} +case 246: +#line 1863 "asn1p_y.y" +{ + memset(&yyval.tv_nametag, 0, sizeof(yyval.tv_nametag)); + yyval.tv_nametag.name = yyvsp[0].tv_str; + ; + break;} +case 247: +#line 1867 "asn1p_y.y" +{ + yyval.tv_nametag.name = yyvsp[-1].tv_str; + yyval.tv_nametag.tag = yyvsp[0].a_tag; + ; + break;} +} + /* the action file gets copied in in place of this dollarsign */ +#line 543 "/usr/share/bison.simple" + + yyvsp -= yylen; + yyssp -= yylen; +#ifdef YYLSP_NEEDED + yylsp -= yylen; +#endif + +#if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + + *++yyvsp = yyval; + +#ifdef YYLSP_NEEDED + yylsp++; + if (yylen == 0) + { + yylsp->first_line = yylloc.first_line; + yylsp->first_column = yylloc.first_column; + yylsp->last_line = (yylsp-1)->last_line; + yylsp->last_column = (yylsp-1)->last_column; + yylsp->text = 0; + } + else + { + yylsp->last_line = (yylsp+yylen-1)->last_line; + yylsp->last_column = (yylsp+yylen-1)->last_column; + } +#endif + + /* Now "shift" the result of the reduction. + Determine what state that goes to, + based on the state we popped back to + and the rule number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTBASE] + *yyssp; + if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTBASE]; + + goto yynewstate; + +yyerrlab: /* here on detecting error */ + + if (! yyerrstatus) + /* If not already recovering from an error, report this error. */ + { + ++yynerrs; + +#ifdef YYERROR_VERBOSE + yyn = yypact[yystate]; + + if (yyn > YYFLAG && yyn < YYLAST) + { + int size = 0; + char *msg; + int x, count; + + count = 0; + /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + size += strlen(yytname[x]) + 15, count++; + msg = (char *) malloc(size + 15); + if (msg != 0) + { + strcpy(msg, "parse error"); + + if (count < 5) + { + count = 0; + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + { + strcat(msg, count == 0 ? ", expecting `" : " or `"); + strcat(msg, yytname[x]); + strcat(msg, "'"); + count++; + } + } + yyerror(msg); + free(msg); + } + else + yyerror ("parse error; also virtual memory exceeded"); + } + else +#endif /* YYERROR_VERBOSE */ + yyerror("parse error"); + } + + goto yyerrlab1; +yyerrlab1: /* here on error raised explicitly by an action */ + + if (yyerrstatus == 3) + { + /* if just tried and failed to reuse lookahead token after an error, discard it. */ + + /* return failure if at end of input */ + if (yychar == YYEOF) + YYABORT; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); +#endif + + yychar = YYEMPTY; + } + + /* Else will try to reuse lookahead token + after shifting the error token. */ + + yyerrstatus = 3; /* Each real token shifted decrements this */ + + goto yyerrhandle; + +yyerrdefault: /* current state does not do anything special for the error token. */ + +#if 0 + /* This is wrong; only states that explicitly want error tokens + should shift them. */ + yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ + if (yyn) goto yydefault; +#endif + +yyerrpop: /* pop the current state because it cannot handle the error token */ + + if (yyssp == yyss) YYABORT; + yyvsp--; + yystate = *--yyssp; +#ifdef YYLSP_NEEDED + yylsp--; +#endif + +#if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "Error: state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + +yyerrhandle: + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yyerrdefault; + + yyn += YYTERROR; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) + goto yyerrdefault; + + yyn = yytable[yyn]; + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrpop; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrpop; + + if (yyn == YYFINAL) + YYACCEPT; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting error token, "); +#endif + + *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif + + yystate = yyn; + goto yynewstate; + + yyacceptlab: + /* YYACCEPT comes here. */ + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); +#endif + } + return 0; + + yyabortlab: + /* YYABORT comes here. */ + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); +#endif + } + return 1; +} +#line 1874 "asn1p_y.y" + + + +/* + * Convert Xstring ('0101'B or '5'H) to the binary vector. + */ +static asn1p_value_t * +_convert_bitstring2binary(char *str, int base) { + asn1p_value_t *val; + int slen; + int memlen; + int baselen; + int bits; + uint8_t *binary_vector; + uint8_t *bv_ptr; + uint8_t cur_val; + + assert(str); + assert(str[0] == '\''); + + switch(base) { + case 'B': + baselen = 1; + break; + case 'H': + baselen = 4; + break; + default: + assert(base == 'B' || base == 'H'); + errno = EINVAL; + return NULL; + } + + slen = strlen(str); + assert(str[slen - 1] == base); + assert(str[slen - 2] == '\''); + + memlen = slen / (8 / baselen); /* Conservative estimate */ + + bv_ptr = binary_vector = malloc(memlen + 1); + if(bv_ptr == NULL) + /* ENOMEM */ + return NULL; + + cur_val = 0; + bits = 0; + while(*(++str) != '\'') { + switch(baselen) { + case 1: + switch(*str) { + case '1': + cur_val |= 1 << (7 - (bits % 8)); + case '0': + break; + default: + assert(!"_y UNREACH1"); + case ' ': case '\r': case '\n': + continue; + } + break; + case 4: + switch(*str) { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + cur_val |= (*str - '0') << (4 - (bits % 8)); + break; + case 'A': case 'B': case 'C': + case 'D': case 'E': case 'F': + cur_val |= ((*str - 'A') + 10) + << (4 - (bits % 8)); + break; + default: + assert(!"_y UNREACH2"); + case ' ': case '\r': case '\n': + continue; + } + break; + } + + bits += baselen; + if((bits % 8) == 0) { + *bv_ptr++ = cur_val; + cur_val = 0; + } + } + + *bv_ptr = cur_val; + assert((bv_ptr - binary_vector) <= memlen); + + val = asn1p_value_frombits(binary_vector, bits, 0); + if(val == NULL) { + free(binary_vector); + } + + return val; +} + +extern char *asn1p_text; + +int +yyerror(const char *msg) { + fprintf(stderr, + "ASN.1 grammar parse error " + "near line %d (token \"%s\"): %s\n", + asn1p_lineno, asn1p_text, msg); + return -1; +} + + |