diff --git a/ChangeLog b/ChangeLog index 3a8a81ac..e235cf21 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,7 +12,7 @@ 0.9.20: 2006-Mar-06 * SET OF CHOICE, SEQUENCE OF CHOICE and a certain named S/O types - are represented differently in XER. THIS IS AN ICOMPATIBLE CHANGE. + are represented differently in XER. THIS IS AN INCOMPATIBLE CHANGE. (Test case 70) (Severity: low; Security impact: low) * asn1c: Removed -ftypes88 command line option. * Started PER implementation. Somewhat experimental! diff --git a/libasn1fix/asn1fix_constraint.c b/libasn1fix/asn1fix_constraint.c index 23709a4e..7477d722 100644 --- a/libasn1fix/asn1fix_constraint.c +++ b/libasn1fix/asn1fix_constraint.c @@ -195,7 +195,6 @@ asn1constraint_resolve(arg_t *arg, asn1p_constraint_t *ct, asn1p_expr_type_e ety * Resolve all possible references, wherever they occur. */ if(ct->containedSubtype) { - assert(ct->containedSubtype->type == ATV_REFERENCED); ret = constraint_type_resolve(arg, ct); RET2RVAL(ret, rvalue); } @@ -250,60 +249,68 @@ _remove_extensions(arg_t *arg, asn1p_constraint_t *ct) { static int constraint_type_resolve(arg_t *arg, asn1p_constraint_t *ct) { - asn1p_expr_t *rtype; - arg_t tmparg; + asn1p_constraint_t *ct_expr; int ret; DEBUG("(\"%s\")", asn1f_printable_value(ct->containedSubtype)); - assert(ct->containedSubtype->type == ATV_REFERENCED); + if(ct->containedSubtype->type == ATV_VALUESET) { + ct_expr = ct->containedSubtype->value.constraint; + DEBUG("Found %s in constraints", "ValueSet"); + } else if(ct->containedSubtype->type == ATV_REFERENCED) { + asn1p_expr_t *rtype; + arg_t tmparg; - rtype = asn1f_lookup_symbol(arg, arg->expr->module, - arg->expr->rhs_pspecs, - ct->containedSubtype->value.reference); - if(!rtype) { - FATAL("Cannot find type \"%s\" in constraints at line %d", - asn1f_printable_value(ct->containedSubtype), - ct->_lineno); + rtype = asn1f_lookup_symbol(arg, arg->expr->module, + arg->expr->rhs_pspecs, + ct->containedSubtype->value.reference); + if(!rtype) { + FATAL("Cannot find type \"%s\" in constraints " + "at line %d", + asn1f_printable_value(ct->containedSubtype), + ct->_lineno); + return -1; + } + + tmparg = *arg; + tmparg.expr = rtype; + tmparg.mod = rtype->module; + ret = asn1constraint_pullup(&tmparg); + if(ret) return ret; + + ct_expr = rtype->combined_constraints; + if(!ct_expr) return 0; + } else { + FATAL("Unsupported feature at line %d", ct->_lineno); return -1; } + ct_expr = asn1p_constraint_clone(ct_expr); + assert(ct_expr); - tmparg = *arg; - tmparg.expr = rtype; - tmparg.mod = rtype->module; - ret = asn1constraint_pullup(&tmparg); - if(ret) return ret; + _remove_extensions(arg, ct_expr); - if(rtype->combined_constraints) { - asn1p_constraint_t *ct_expr; - ct_expr = asn1p_constraint_clone(rtype->combined_constraints); - assert(ct_expr); - - _remove_extensions(arg, ct_expr); - - if(ct_expr->type == ACT_CA_SET) { - unsigned int i; - for(i = 0; i < ct_expr->el_count; i++) { - if(asn1p_constraint_insert( - ct, ct_expr->elements[i])) { - asn1p_constraint_free(ct_expr); - return -1; - } else { - ct_expr->elements[i] = 0; - } + if(ct_expr->type == ACT_CA_SET) { + unsigned int i; + for(i = 0; i < ct_expr->el_count; i++) { + if(asn1p_constraint_insert( + ct, ct_expr->elements[i])) { + asn1p_constraint_free(ct_expr); + return -1; + } else { + ct_expr->elements[i] = 0; } - asn1p_constraint_free(ct_expr); - } else { - ret = asn1p_constraint_insert(ct, ct_expr); - assert(ret == 0); } - - ct->type = ACT_CA_SET; - asn1p_value_free(ct->containedSubtype); - ct->containedSubtype = NULL; + asn1p_constraint_free(ct_expr); + } else { + ret = asn1p_constraint_insert(ct, ct_expr); + assert(ret == 0); } + ct->type = ACT_CA_SET; + asn1p_value_free(ct->containedSubtype); + ct->containedSubtype = NULL; + return 0; } diff --git a/libasn1fix/asn1fix_misc.c b/libasn1fix/asn1fix_misc.c index 5728bd4c..72317aa2 100644 --- a/libasn1fix/asn1fix_misc.c +++ b/libasn1fix/asn1fix_misc.c @@ -160,6 +160,8 @@ asn1f_printable_value(asn1p_value_t *v) { assert(reflen == (size_t)(ptr - managedptr)); return managedptr; } + case ATV_VALUESET: + return ""; case ATV_CHOICE_IDENTIFIER: { char *cid = v->value.choice_identifier.identifier; diff --git a/libasn1fix/asn1fix_param.c b/libasn1fix/asn1fix_param.c index 4c87afcd..6b3a6294 100644 --- a/libasn1fix/asn1fix_param.c +++ b/libasn1fix/asn1fix_param.c @@ -133,9 +133,11 @@ resolve_expr(asn1p_expr_t *expr_to_resolve, void *resolver_arg) { return NULL; } - DEBUG("Found target %s", expr->Identifier); + DEBUG("Found target %s (%d/%x)", + expr->Identifier, expr->meta_type, expr->expr_type); if(expr->meta_type == AMT_TYPE - || expr->meta_type == AMT_VALUE) { + || expr->meta_type == AMT_VALUE + || expr->meta_type == AMT_VALUESET) { DEBUG("Target is a simple type %s", ASN_EXPR_TYPE2STR(expr->expr_type)); nex = asn1p_expr_clone(expr, 0); @@ -144,8 +146,10 @@ resolve_expr(asn1p_expr_t *expr_to_resolve, void *resolver_arg) { ? strdup(expr_to_resolve->Identifier) : 0; return nex; } else { - FATAL("Feature not implemented for %s", - rarg->original_expr->Identifier); + FATAL("Feature not implemented for %s (%d/%x), " + "please contact the asn1c author", + rarg->original_expr->Identifier, + expr->meta_type, expr->expr_type); errno = EPERM; return NULL; } diff --git a/libasn1parser/asn1p_expr.c b/libasn1parser/asn1p_expr.c index b1cce695..29919a14 100644 --- a/libasn1parser/asn1p_expr.c +++ b/libasn1parser/asn1p_expr.c @@ -176,16 +176,31 @@ value_resolver(asn1p_value_t *value, void *rarg) { if(!target) return NULL; /* errno's are compatible */ - if(!target->value) { - fprintf(stderr, - "FATAL: Parameterization did not resolve value reference " - "at line %d", ref->_lineno); - asn1p_expr_free(target); + if(target->meta_type == AMT_VALUE) { + if(!target->value) { + fprintf(stderr, + "FATAL: Parameterization did not resolve " + "value reference at line %d\n", ref->_lineno); + asn1p_expr_free(target); + errno = EPERM; + return NULL; + } + cval = asn1p_value_clone(target->value); + } else if(target->meta_type == AMT_VALUESET) { + if(!target->constraints) { + fprintf(stderr, + "FATAL: Parameterization did not resolve " + "value set reference at line %d\n", ref->_lineno); + asn1p_expr_free(target); + errno = EPERM; + return NULL; + } + cval = asn1p_value_fromconstr(target->constraints, 1); + } else { errno = EPERM; - return NULL; + cval = NULL; } - cval = asn1p_value_clone(target->value); asn1p_expr_free(target); return cval; } diff --git a/libasn1parser/asn1p_value.c b/libasn1parser/asn1p_value.c index 6686e497..cafc1f93 100644 --- a/libasn1parser/asn1p_value.c +++ b/libasn1parser/asn1p_value.c @@ -29,6 +29,30 @@ asn1p_value_fromref(asn1p_ref_t *ref, int do_copy) { } } +asn1p_value_t * +asn1p_value_fromconstr(asn1p_constraint_t *ct, int do_copy) { + if(ct) { + asn1p_value_t *v = calloc(1, sizeof *v); + if(v) { + if(do_copy) { + v->value.constraint + = asn1p_constraint_clone(ct); + if(v->value.constraint == NULL) { + free(v); + return NULL; + } + } else { + v->value.constraint = ct; + } + v->type = ATV_VALUESET; + } + return v; + } else { + errno = EINVAL; + return NULL; + } +} + asn1p_value_t * asn1p_value_frombits(uint8_t *bits, int size_in_bits, int do_copy) { if(bits) { @@ -155,6 +179,13 @@ asn1p_value_clone_with_resolver(asn1p_value_t *v, else if(errno != ESRCH) return NULL; } return asn1p_value_fromref(v->value.reference, 1); + case ATV_VALUESET: + if(resolver) { + clone = resolver(v, rarg); + if(clone) return clone; + else if(errno != ESRCH) return NULL; + } + return asn1p_value_fromconstr(v->value.constraint, 1); case ATV_CHOICE_IDENTIFIER: { char *id = v->value.choice_identifier.identifier; clone = calloc(1, sizeof(*clone)); @@ -204,6 +235,9 @@ asn1p_value_free(asn1p_value_t *v) { case ATV_REFERENCED: asn1p_ref_free(v->value.reference); break; + case ATV_VALUESET: + asn1p_constraint_free(v->value.constraint); + break; case ATV_CHOICE_IDENTIFIER: free(v->value.choice_identifier.identifier); asn1p_value_free(v->value.choice_identifier.value); diff --git a/libasn1parser/asn1p_value.h b/libasn1parser/asn1p_value.h index 5705f745..1b5bbeec 100644 --- a/libasn1parser/asn1p_value.h +++ b/libasn1parser/asn1p_value.h @@ -4,6 +4,8 @@ #ifndef ASN1_PARSER_VALUE_H #define ASN1_PARSER_VALUE_H +struct asn1p_constraint_s; /* Forward declaration */ + /* * A wrapper around various kinds of values. */ @@ -25,11 +27,13 @@ typedef struct asn1p_value_s { ATV_STRING, /* "abcdef" */ ATV_UNPARSED, ATV_BITVECTOR, + ATV_VALUESET, /* { 1 | 2 | 3 } */ ATV_REFERENCED, /* Reference to a value defined elsewhere */ ATV_CHOICE_IDENTIFIER, /* ChoiceIdentifier value */ } type; /* Value type and location */ union { + struct asn1p_constraint_s *constraint; /* ValueSet */ asn1p_ref_t *reference; asn1c_integer_t v_integer; double v_double; @@ -59,6 +63,7 @@ typedef struct asn1p_value_s { */ void asn1p_value_free(asn1p_value_t *); asn1p_value_t *asn1p_value_fromref(asn1p_ref_t *ref, int do_copy); +asn1p_value_t *asn1p_value_fromconstr(struct asn1p_constraint_s *ct, int dc); asn1p_value_t *asn1p_value_frombits(uint8_t *bits, int size_in_bits, int dc); asn1p_value_t *asn1p_value_frombuf(char *buffer, int size, int do_copy); asn1p_value_t *asn1p_value_fromdouble(double); diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c index 9bbad6e1..e9be56f6 100644 --- a/libasn1parser/asn1p_y.c +++ b/libasn1parser/asn1p_y.c @@ -223,7 +223,7 @@ typedef union { -#define YYFINAL 444 +#define YYFINAL 448 #define YYFLAG -32768 #define YYNTBASE 120 @@ -276,29 +276,29 @@ static const short yyprhs[] = { 0, 79, 81, 82, 86, 88, 92, 95, 97, 100, 101, 103, 108, 110, 114, 116, 120, 122, 126, 130, 133, 135, 139, 141, 145, 147, 151, 156, 158, 160, 165, - 169, 173, 180, 182, 186, 188, 192, 196, 200, 202, - 206, 208, 210, 212, 213, 215, 217, 221, 225, 228, - 232, 234, 236, 240, 243, 245, 247, 253, 254, 256, - 258, 262, 265, 270, 274, 278, 282, 286, 290, 291, - 293, 294, 301, 303, 306, 308, 310, 312, 316, 318, - 322, 326, 330, 331, 334, 336, 341, 346, 351, 358, - 365, 367, 372, 376, 378, 382, 386, 390, 392, 396, - 398, 402, 404, 406, 408, 410, 414, 418, 420, 425, - 427, 429, 433, 434, 438, 440, 442, 444, 446, 448, - 450, 452, 454, 458, 460, 462, 464, 466, 469, 471, - 473, 475, 477, 480, 483, 485, 487, 490, 493, 495, - 497, 499, 501, 503, 506, 508, 511, 513, 515, 517, - 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, - 539, 541, 543, 545, 547, 549, 550, 552, 554, 559, - 563, 568, 570, 574, 580, 582, 586, 590, 594, 598, - 603, 607, 609, 611, 615, 619, 623, 627, 629, 631, - 632, 638, 640, 643, 646, 650, 652, 654, 656, 658, - 660, 662, 664, 666, 670, 676, 678, 682, 684, 688, - 689, 691, 693, 695, 697, 699, 701, 705, 710, 712, - 716, 719, 723, 725, 729, 730, 732, 734, 737, 740, - 744, 746, 750, 752, 757, 762, 764, 766, 768, 770, - 771, 773, 776, 781, 782, 784, 786, 788, 789, 791, - 793, 795, 797, 799, 800, 802 + 169, 173, 180, 187, 189, 193, 195, 199, 203, 207, + 211, 213, 217, 219, 221, 223, 225, 226, 228, 230, + 234, 238, 241, 245, 247, 249, 253, 256, 258, 260, + 266, 267, 269, 271, 275, 278, 283, 287, 291, 295, + 299, 303, 304, 306, 307, 314, 316, 319, 321, 323, + 325, 329, 331, 335, 339, 343, 344, 347, 349, 354, + 359, 364, 371, 378, 380, 385, 389, 391, 395, 399, + 403, 405, 409, 411, 415, 417, 419, 421, 423, 427, + 431, 433, 438, 440, 442, 446, 447, 451, 453, 455, + 457, 459, 461, 463, 465, 467, 471, 473, 475, 477, + 479, 482, 484, 486, 488, 490, 493, 496, 498, 500, + 503, 506, 508, 510, 512, 514, 516, 519, 521, 524, + 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, + 546, 548, 550, 552, 554, 556, 558, 560, 562, 563, + 565, 567, 572, 576, 581, 583, 585, 589, 595, 597, + 601, 605, 609, 613, 618, 622, 624, 626, 630, 634, + 638, 642, 644, 646, 647, 653, 655, 658, 661, 665, + 667, 669, 671, 673, 675, 677, 679, 681, 685, 691, + 693, 697, 699, 703, 704, 706, 708, 710, 712, 714, + 716, 720, 725, 727, 731, 734, 738, 740, 744, 745, + 747, 749, 752, 755, 759, 761, 765, 767, 772, 777, + 779, 781, 783, 785, 786, 788, 791, 796, 797, 799, + 801, 803, 804, 806, 808, 810, 812, 814, 815, 817 }; static const short yyrhs[] = { 121, @@ -319,70 +319,71 @@ static const short yyrhs[] = { 121, 223, 107, 108, 0, 226, 0, 107, 193, 108, 0, 223, 145, 3, 143, 0, 185, 0, 170, 0, 170, 107, 149, 108, 0, 223, 3, 166, 0, 223, 3, - 156, 0, 223, 107, 147, 108, 3, 166, 0, 148, - 0, 147, 112, 148, 0, 223, 0, 223, 113, 226, - 0, 223, 113, 223, 0, 183, 113, 226, 0, 150, - 0, 149, 112, 150, 0, 166, 0, 179, 0, 226, - 0, 0, 152, 0, 153, 0, 152, 112, 153, 0, - 226, 166, 212, 0, 166, 212, 0, 34, 72, 166, - 0, 165, 0, 155, 0, 154, 112, 155, 0, 226, - 166, 0, 165, 0, 166, 0, 32, 107, 158, 108, - 160, 0, 0, 92, 0, 159, 0, 158, 112, 159, - 0, 16, 212, 0, 17, 166, 157, 212, 0, 17, - 174, 212, 0, 17, 175, 212, 0, 16, 174, 212, - 0, 16, 166, 212, 0, 16, 175, 212, 0, 0, - 161, 0, 0, 99, 86, 107, 162, 163, 108, 0, - 164, 0, 163, 164, 0, 4, 0, 18, 0, 173, - 0, 114, 163, 115, 0, 106, 0, 106, 116, 180, - 0, 106, 116, 217, 0, 218, 168, 190, 0, 0, - 167, 169, 0, 145, 0, 31, 107, 154, 108, 0, - 82, 107, 151, 108, 0, 83, 107, 151, 108, 0, - 82, 190, 72, 225, 218, 168, 0, 83, 190, 72, - 225, 218, 168, 0, 22, 0, 22, 39, 29, 226, - 0, 60, 72, 170, 0, 14, 0, 14, 117, 223, - 0, 224, 117, 223, 0, 14, 117, 226, 0, 224, - 0, 224, 117, 171, 0, 172, 0, 171, 117, 172, - 0, 173, 0, 16, 0, 17, 0, 16, 0, 174, - 117, 16, 0, 174, 117, 17, 0, 15, 0, 226, - 145, 3, 177, 0, 179, 0, 180, 0, 226, 113, - 177, 0, 0, 107, 178, 182, 0, 67, 0, 49, - 0, 90, 0, 6, 0, 8, 0, 181, 0, 217, - 0, 226, 0, 223, 117, 226, 0, 7, 0, 11, - 0, 12, 0, 5, 0, 182, 5, 0, 28, 0, - 67, 0, 80, 0, 184, 0, 71, 85, 0, 69, - 55, 0, 81, 0, 48, 0, 40, 75, 0, 30, - 85, 0, 95, 0, 51, 0, 186, 0, 62, 0, - 44, 0, 26, 85, 0, 183, 0, 184, 214, 0, - 27, 0, 52, 0, 53, 0, 54, 0, 63, 0, - 68, 0, 78, 0, 87, 0, 89, 0, 94, 0, - 96, 0, 97, 0, 98, 0, 70, 0, 103, 0, - 104, 0, 101, 0, 102, 0, 100, 0, 0, 191, - 0, 192, 0, 84, 109, 193, 110, 0, 109, 193, - 110, 0, 192, 109, 193, 110, 0, 194, 0, 194, - 112, 106, 0, 194, 112, 106, 112, 194, 0, 195, - 0, 21, 100, 195, 0, 194, 187, 195, 0, 194, - 188, 195, 0, 195, 189, 195, 0, 198, 109, 193, - 110, 0, 109, 193, 110, 0, 199, 0, 200, 0, - 199, 197, 199, 0, 65, 197, 199, 0, 199, 197, - 64, 0, 65, 197, 64, 0, 206, 0, 201, 0, - 0, 35, 29, 107, 196, 182, 0, 105, 0, 105, - 118, 0, 118, 105, 0, 118, 105, 118, 0, 84, - 0, 50, 0, 49, 0, 90, 0, 217, 0, 181, - 0, 226, 0, 223, 0, 99, 33, 192, 0, 99, - 34, 107, 202, 108, 0, 203, 0, 202, 112, 203, - 0, 106, 0, 226, 190, 204, 0, 0, 205, 0, - 77, 0, 19, 0, 73, 0, 207, 0, 208, 0, - 107, 223, 108, 0, 207, 107, 209, 108, 0, 210, - 0, 209, 112, 210, 0, 119, 211, 0, 119, 117, - 211, 0, 226, 0, 211, 117, 226, 0, 0, 213, - 0, 73, 0, 37, 177, 0, 107, 108, 0, 107, - 215, 108, 0, 216, 0, 215, 112, 216, 0, 226, - 0, 226, 109, 217, 110, 0, 226, 109, 180, 110, - 0, 217, 0, 106, 0, 10, 0, 13, 0, 0, - 219, 0, 220, 222, 0, 114, 221, 10, 115, 0, - 0, 93, 0, 23, 0, 79, 0, 0, 56, 0, - 45, 0, 14, 0, 15, 0, 15, 0, 0, 226, - 0, 9, 0 + 156, 0, 223, 107, 147, 108, 3, 166, 0, 223, + 107, 147, 108, 3, 156, 0, 148, 0, 147, 112, + 148, 0, 223, 0, 223, 113, 226, 0, 223, 113, + 223, 0, 183, 113, 226, 0, 183, 113, 223, 0, + 150, 0, 149, 112, 150, 0, 166, 0, 179, 0, + 226, 0, 143, 0, 0, 152, 0, 153, 0, 152, + 112, 153, 0, 226, 166, 212, 0, 166, 212, 0, + 34, 72, 166, 0, 165, 0, 155, 0, 154, 112, + 155, 0, 226, 166, 0, 165, 0, 166, 0, 32, + 107, 158, 108, 160, 0, 0, 92, 0, 159, 0, + 158, 112, 159, 0, 16, 212, 0, 17, 166, 157, + 212, 0, 17, 174, 212, 0, 17, 175, 212, 0, + 16, 174, 212, 0, 16, 166, 212, 0, 16, 175, + 212, 0, 0, 161, 0, 0, 99, 86, 107, 162, + 163, 108, 0, 164, 0, 163, 164, 0, 4, 0, + 18, 0, 173, 0, 114, 163, 115, 0, 106, 0, + 106, 116, 180, 0, 106, 116, 217, 0, 218, 168, + 190, 0, 0, 167, 169, 0, 145, 0, 31, 107, + 154, 108, 0, 82, 107, 151, 108, 0, 83, 107, + 151, 108, 0, 82, 190, 72, 225, 218, 168, 0, + 83, 190, 72, 225, 218, 168, 0, 22, 0, 22, + 39, 29, 226, 0, 60, 72, 170, 0, 14, 0, + 14, 117, 223, 0, 224, 117, 223, 0, 14, 117, + 226, 0, 224, 0, 224, 117, 171, 0, 172, 0, + 171, 117, 172, 0, 173, 0, 16, 0, 17, 0, + 16, 0, 174, 117, 16, 0, 174, 117, 17, 0, + 15, 0, 226, 145, 3, 177, 0, 179, 0, 180, + 0, 226, 113, 177, 0, 0, 107, 178, 182, 0, + 67, 0, 49, 0, 90, 0, 6, 0, 8, 0, + 181, 0, 217, 0, 226, 0, 223, 117, 226, 0, + 7, 0, 11, 0, 12, 0, 5, 0, 182, 5, + 0, 28, 0, 67, 0, 80, 0, 184, 0, 71, + 85, 0, 69, 55, 0, 81, 0, 48, 0, 40, + 75, 0, 30, 85, 0, 95, 0, 51, 0, 186, + 0, 62, 0, 44, 0, 26, 85, 0, 183, 0, + 184, 214, 0, 27, 0, 52, 0, 53, 0, 54, + 0, 63, 0, 68, 0, 78, 0, 87, 0, 89, + 0, 94, 0, 96, 0, 97, 0, 98, 0, 70, + 0, 103, 0, 104, 0, 101, 0, 102, 0, 100, + 0, 0, 191, 0, 192, 0, 84, 109, 193, 110, + 0, 109, 193, 110, 0, 192, 109, 193, 110, 0, + 106, 0, 194, 0, 194, 112, 106, 0, 194, 112, + 106, 112, 194, 0, 195, 0, 21, 100, 195, 0, + 194, 187, 195, 0, 194, 188, 195, 0, 195, 189, + 195, 0, 198, 109, 193, 110, 0, 109, 193, 110, + 0, 199, 0, 200, 0, 199, 197, 199, 0, 65, + 197, 199, 0, 199, 197, 64, 0, 65, 197, 64, + 0, 206, 0, 201, 0, 0, 35, 29, 107, 196, + 182, 0, 105, 0, 105, 118, 0, 118, 105, 0, + 118, 105, 118, 0, 84, 0, 50, 0, 49, 0, + 90, 0, 217, 0, 181, 0, 226, 0, 223, 0, + 99, 33, 192, 0, 99, 34, 107, 202, 108, 0, + 203, 0, 202, 112, 203, 0, 106, 0, 226, 190, + 204, 0, 0, 205, 0, 77, 0, 19, 0, 73, + 0, 207, 0, 208, 0, 107, 223, 108, 0, 207, + 107, 209, 108, 0, 210, 0, 209, 112, 210, 0, + 119, 211, 0, 119, 117, 211, 0, 226, 0, 211, + 117, 226, 0, 0, 213, 0, 73, 0, 37, 177, + 0, 107, 108, 0, 107, 215, 108, 0, 216, 0, + 215, 112, 216, 0, 226, 0, 226, 109, 217, 110, + 0, 226, 109, 180, 110, 0, 217, 0, 106, 0, + 10, 0, 13, 0, 0, 219, 0, 220, 222, 0, + 114, 221, 10, 115, 0, 0, 93, 0, 23, 0, + 79, 0, 0, 56, 0, 45, 0, 14, 0, 15, + 0, 15, 0, 0, 226, 0, 9, 0 }; #endif @@ -395,29 +396,29 @@ static const short yyrline[] = { 0, 558, 565, 567, 579, 591, 602, 607, 613, 619, 621, 624, 635, 641, 647, 654, 660, 668, 672, 675, 682, 688, 694, 701, 707, 716, 718, 728, 742, 752, 768, - 778, 794, 802, 812, 822, 827, 834, 841, 851, 857, - 863, 867, 875, 902, 904, 906, 912, 918, 926, 932, - 939, 944, 950, 956, 962, 965, 971, 981, 983, 986, - 994, 1001, 1014, 1025, 1035, 1046, 1056, 1067, 1078, 1080, - 1085, 1089, 1094, 1099, 1105, 1110, 1113, 1117, 1122, 1131, - 1140, 1151, 1173, 1180, 1199, 1203, 1209, 1215, 1221, 1231, - 1241, 1247, 1259, 1273, 1282, 1292, 1302, 1312, 1320, 1341, - 1350, 1359, 1361, 1368, 1375, 1381, 1385, 1391, 1411, 1421, - 1423, 1424, 1431, 1431, 1436, 1443, 1449, 1454, 1458, 1462, - 1465, 1470, 1482, 1499, 1504, 1509, 1542, 1552, 1566, 1568, - 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, - 1579, 1585, 1587, 1588, 1591, 1598, 1610, 1612, 1616, 1620, - 1621, 1622, 1623, 1624, 1628, 1629, 1630, 1631, 1635, 1636, - 1643, 1643, 1644, 1644, 1645, 1647, 1649, 1654, 1658, 1667, - 1671, 1676, 1680, 1686, 1696, 1700, 1703, 1706, 1709, 1714, - 1723, 1731, 1737, 1743, 1750, 1758, 1766, 1775, 1778, 1781, - 1782, 1792, 1794, 1795, 1796, 1799, 1803, 1808, 1814, 1819, - 1822, 1825, 1838, 1852, 1856, 1861, 1865, 1870, 1877, 1890, - 1892, 1895, 1899, 1902, 1907, 1911, 1919, 1934, 1940, 1947, - 1960, 1972, 1987, 1991, 2008, 2013, 2016, 2021, 2043, 2048, - 2053, 2059, 2065, 2073, 2081, 2089, 2096, 2106, 2111, 2141, - 2143, 2146, 2153, 2159, 2161, 2162, 2163, 2166, 2168, 2169, - 2172, 2177, 2184, 2191, 2193, 2198 + 778, 794, 800, 807, 817, 827, 832, 839, 846, 854, + 864, 870, 876, 880, 888, 899, 921, 923, 925, 931, + 937, 945, 951, 958, 963, 969, 975, 981, 984, 990, + 1000, 1002, 1005, 1013, 1020, 1033, 1044, 1054, 1065, 1075, + 1086, 1097, 1099, 1104, 1108, 1113, 1118, 1124, 1129, 1132, + 1136, 1141, 1150, 1159, 1170, 1192, 1199, 1218, 1222, 1228, + 1234, 1240, 1250, 1260, 1266, 1277, 1291, 1300, 1310, 1320, + 1330, 1338, 1359, 1368, 1377, 1379, 1386, 1393, 1399, 1403, + 1409, 1429, 1439, 1441, 1442, 1449, 1449, 1454, 1461, 1467, + 1472, 1476, 1480, 1483, 1488, 1500, 1517, 1522, 1527, 1560, + 1570, 1584, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, + 1594, 1595, 1596, 1597, 1603, 1605, 1606, 1609, 1616, 1628, + 1630, 1634, 1638, 1639, 1640, 1641, 1642, 1646, 1647, 1648, + 1649, 1653, 1654, 1661, 1661, 1662, 1662, 1663, 1665, 1667, + 1672, 1676, 1685, 1689, 1694, 1699, 1702, 1708, 1718, 1722, + 1725, 1728, 1731, 1736, 1745, 1753, 1759, 1765, 1772, 1780, + 1788, 1797, 1800, 1803, 1804, 1814, 1816, 1817, 1818, 1821, + 1825, 1830, 1836, 1841, 1844, 1847, 1860, 1874, 1878, 1883, + 1887, 1892, 1899, 1912, 1914, 1917, 1921, 1924, 1929, 1933, + 1941, 1956, 1962, 1969, 1982, 1994, 2009, 2013, 2030, 2035, + 2038, 2043, 2065, 2070, 2075, 2081, 2087, 2095, 2103, 2111, + 2118, 2128, 2133, 2163, 2165, 2168, 2175, 2181, 2183, 2184, + 2185, 2188, 2190, 2191, 2194, 2199, 2206, 2213, 2215, 2220 }; #endif @@ -452,7 +453,7 @@ static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ", "ImportsBundleSet","AssignedIdentifier","ImportsBundle","ImportsList","ImportsElement", "ExportsDefinition","ExportsBody","ExportsElement","ValueSet","ValueSetTypeAssignment", "DefinedType","DataTypeReference","ParameterArgumentList","ParameterArgumentName", -"Specializations","Specialization","optComponentTypeLists","ComponentTypeLists", +"ActualParameterList","ActualParameter","optComponentTypeLists","ComponentTypeLists", "ComponentType","AlternativeTypeLists","AlternativeType","ObjectClass","optUnique", "FieldSpec","ClassField","optWithSyntax","WithSyntax","@2","WithSyntaxList", "WithSyntaxToken","ExtensionAndException","Type","NSTD_IndirectMarker","TypeDeclaration", @@ -478,29 +479,29 @@ static const short yyr1[] = { 0, 132, 133, 132, 132, 134, 134, 135, 135, 136, 136, 137, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 142, 142, 142, 143, 144, 145, 145, 145, 146, - 146, 146, 147, 147, 148, 148, 148, 148, 149, 149, - 150, 150, 150, 151, 151, 152, 152, 153, 153, 153, - 153, 154, 154, 155, 155, 155, 156, 157, 157, 158, - 158, 159, 159, 159, 159, 159, 159, 159, 160, 160, - 162, 161, 163, 163, 164, 164, 164, 164, 165, 165, - 165, 166, 167, 168, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 170, 170, 170, 170, 170, 170, 171, - 171, 172, 173, 173, 174, 174, 174, 175, 176, 177, - 177, 177, 178, 177, 177, 179, 179, 179, 179, 179, - 179, 180, 180, 181, 181, 181, 182, 182, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 184, 184, 184, 185, 185, 186, 186, 186, 186, + 146, 146, 146, 147, 147, 148, 148, 148, 148, 148, + 149, 149, 150, 150, 150, 150, 151, 151, 152, 152, + 153, 153, 153, 153, 154, 154, 155, 155, 155, 156, + 157, 157, 158, 158, 159, 159, 159, 159, 159, 159, + 159, 160, 160, 162, 161, 163, 163, 164, 164, 164, + 164, 165, 165, 165, 166, 167, 168, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, + 170, 170, 171, 171, 172, 173, 173, 174, 174, 174, + 175, 176, 177, 177, 177, 178, 177, 177, 179, 179, + 179, 179, 179, 179, 180, 180, 181, 181, 181, 182, + 182, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 184, 184, 184, 185, 185, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, - 187, 187, 188, 188, 189, 190, 190, 191, 191, 192, - 192, 193, 193, 193, 194, 194, 194, 194, 194, 195, - 195, 195, 195, 195, 195, 195, 195, 195, 195, 196, - 195, 197, 197, 197, 197, 198, 198, 199, 199, 199, - 199, 199, 200, 201, 201, 202, 202, 203, 203, 204, - 204, 205, 205, 205, 206, 206, 207, 208, 209, 209, - 210, 210, 211, 211, 212, 212, 213, 213, 214, 214, - 215, 215, 216, 216, 216, 216, 216, 217, 217, 218, - 218, 219, 220, 221, 221, 221, 221, 222, 222, 222, - 223, 223, 224, 225, 225, 226 + 186, 186, 186, 187, 187, 188, 188, 189, 190, 190, + 191, 191, 192, 192, 193, 193, 193, 193, 194, 194, + 194, 194, 194, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 196, 195, 197, 197, 197, 197, 198, + 198, 199, 199, 199, 199, 199, 200, 201, 201, 202, + 202, 203, 203, 204, 204, 205, 205, 205, 206, 206, + 207, 208, 209, 209, 210, 210, 211, 211, 212, 212, + 213, 213, 214, 214, 215, 215, 216, 216, 216, 216, + 216, 217, 217, 218, 218, 219, 220, 221, 221, 221, + 221, 222, 222, 222, 223, 223, 224, 225, 225, 226 }; static const short yyr2[] = { 0, @@ -510,223 +511,231 @@ static const short yyr2[] = { 0, 1, 0, 3, 1, 3, 2, 1, 2, 0, 1, 4, 1, 3, 1, 3, 1, 3, 3, 2, 1, 3, 1, 3, 1, 3, 4, 1, 1, 4, 3, - 3, 6, 1, 3, 1, 3, 3, 3, 1, 3, - 1, 1, 1, 0, 1, 1, 3, 3, 2, 3, - 1, 1, 3, 2, 1, 1, 5, 0, 1, 1, - 3, 2, 4, 3, 3, 3, 3, 3, 0, 1, - 0, 6, 1, 2, 1, 1, 1, 3, 1, 3, - 3, 3, 0, 2, 1, 4, 4, 4, 6, 6, - 1, 4, 3, 1, 3, 3, 3, 1, 3, 1, - 3, 1, 1, 1, 1, 3, 3, 1, 4, 1, - 1, 3, 0, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, - 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, + 3, 6, 6, 1, 3, 1, 3, 3, 3, 3, + 1, 3, 1, 1, 1, 1, 0, 1, 1, 3, + 3, 2, 3, 1, 1, 3, 2, 1, 1, 5, + 0, 1, 1, 3, 2, 4, 3, 3, 3, 3, + 3, 0, 1, 0, 6, 1, 2, 1, 1, 1, + 3, 1, 3, 3, 3, 0, 2, 1, 4, 4, + 4, 6, 6, 1, 4, 3, 1, 3, 3, 3, + 1, 3, 1, 3, 1, 1, 1, 1, 3, 3, + 1, 4, 1, 1, 3, 0, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, + 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, + 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 1, 1, 4, 3, - 4, 1, 3, 5, 1, 3, 3, 3, 3, 4, - 3, 1, 1, 3, 3, 3, 3, 1, 1, 0, - 5, 1, 2, 2, 3, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 5, 1, 3, 1, 3, 0, - 1, 1, 1, 1, 1, 1, 3, 4, 1, 3, - 2, 3, 1, 3, 0, 1, 1, 2, 2, 3, - 1, 3, 1, 4, 4, 1, 1, 1, 1, 0, - 1, 2, 4, 0, 1, 1, 1, 0, 1, 1, - 1, 1, 1, 0, 1, 1 + 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, + 1, 4, 3, 4, 1, 1, 3, 5, 1, 3, + 3, 3, 3, 4, 3, 1, 1, 3, 3, 3, + 3, 1, 1, 0, 5, 1, 2, 2, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 3, 5, 1, + 3, 1, 3, 0, 1, 1, 1, 1, 1, 1, + 3, 4, 1, 3, 2, 3, 1, 3, 0, 1, + 1, 2, 2, 3, 1, 3, 1, 4, 4, 1, + 1, 1, 1, 0, 1, 2, 4, 0, 1, 1, + 1, 0, 1, 1, 1, 1, 1, 0, 1, 1 }; static const short yydefact[] = { 0, - 281, 282, 1, 2, 5, 3, 0, 0, 6, 286, + 285, 286, 1, 2, 5, 3, 0, 0, 6, 290, 13, 8, 0, 9, 11, 14, 7, 10, 0, 0, 0, 0, 0, 0, 0, 15, 16, 0, 22, 20, - 18, 21, 19, 0, 17, 12, 23, 177, 0, 0, - 178, 179, 180, 0, 181, 182, 190, 183, 184, 185, - 186, 187, 188, 189, 0, 24, 25, 27, 28, 31, + 18, 21, 19, 0, 17, 12, 23, 180, 0, 0, + 181, 182, 183, 0, 184, 185, 193, 186, 187, 188, + 189, 190, 191, 192, 0, 24, 25, 27, 28, 31, 29, 30, 34, 0, 0, 32, 0, 49, 0, 50, 52, 54, 36, 0, 37, 0, 42, 44, 46, 4, - 26, 270, 124, 283, 0, 159, 0, 0, 173, 166, - 170, 172, 160, 0, 0, 161, 165, 169, 0, 0, - 58, 175, 162, 57, 171, 128, 0, 33, 48, 47, - 0, 0, 35, 38, 0, 0, 0, 0, 274, 61, - 60, 113, 271, 278, 0, 174, 168, 167, 164, 163, - 0, 63, 0, 162, 65, 0, 270, 0, 176, 0, - 0, 51, 53, 39, 43, 45, 0, 276, 277, 275, - 0, 0, 196, 280, 279, 272, 125, 127, 0, 0, - 0, 0, 0, 56, 148, 154, 149, 268, 155, 156, - 269, 146, 147, 0, 69, 71, 72, 150, 151, 73, - 267, 259, 0, 261, 266, 263, 133, 134, 129, 130, - 132, 126, 145, 143, 139, 140, 141, 0, 152, 40, - 41, 270, 270, 0, 90, 0, 121, 0, 0, 196, - 196, 115, 114, 0, 0, 112, 197, 198, 270, 64, - 68, 67, 66, 0, 0, 228, 227, 0, 226, 229, - 0, 0, 0, 231, 0, 202, 205, 0, 212, 213, - 219, 218, 245, 246, 230, 233, 232, 59, 270, 260, - 0, 0, 0, 0, 0, 0, 138, 135, 0, 257, - 255, 255, 255, 92, 256, 88, 255, 255, 99, 0, - 273, 0, 270, 0, 270, 0, 270, 0, 0, 0, - 0, 62, 0, 0, 222, 0, 0, 0, 0, 0, - 0, 55, 193, 194, 191, 192, 0, 0, 0, 195, - 0, 0, 0, 0, 70, 262, 0, 0, 152, 131, - 157, 144, 153, 142, 258, 97, 0, 96, 98, 89, - 255, 94, 95, 0, 87, 100, 91, 0, 109, 0, - 82, 85, 86, 270, 123, 0, 0, 75, 76, 81, - 255, 270, 284, 0, 284, 0, 200, 0, 206, 220, - 223, 224, 217, 215, 234, 0, 247, 211, 203, 207, - 208, 209, 0, 216, 214, 0, 0, 249, 265, 264, - 158, 136, 137, 93, 0, 122, 0, 116, 270, 84, - 270, 117, 270, 79, 255, 270, 285, 118, 270, 199, - 201, 0, 225, 238, 0, 236, 196, 0, 210, 0, - 251, 253, 248, 0, 101, 110, 111, 83, 80, 77, - 78, 113, 113, 221, 235, 0, 240, 204, 252, 0, - 250, 0, 119, 120, 237, 243, 244, 242, 239, 241, - 254, 105, 106, 0, 0, 103, 107, 0, 102, 104, - 108, 0, 0, 0 + 26, 274, 127, 287, 0, 162, 0, 0, 176, 169, + 173, 175, 163, 0, 0, 164, 168, 172, 0, 0, + 58, 178, 165, 57, 174, 131, 0, 33, 48, 47, + 0, 0, 35, 38, 0, 0, 0, 0, 278, 61, + 60, 116, 275, 282, 0, 177, 171, 170, 167, 166, + 0, 64, 0, 165, 66, 0, 274, 0, 179, 0, + 0, 51, 53, 39, 43, 45, 0, 280, 281, 279, + 0, 0, 199, 284, 283, 276, 128, 130, 0, 0, + 0, 0, 0, 56, 151, 157, 152, 272, 158, 159, + 273, 149, 150, 76, 0, 71, 73, 74, 153, 154, + 75, 271, 263, 0, 265, 270, 267, 136, 137, 132, + 133, 135, 129, 148, 146, 142, 143, 144, 0, 155, + 40, 41, 274, 274, 0, 93, 0, 124, 0, 0, + 199, 199, 118, 117, 0, 0, 115, 200, 201, 274, + 65, 70, 69, 68, 67, 0, 0, 232, 231, 0, + 230, 233, 0, 205, 0, 0, 235, 0, 206, 209, + 0, 216, 217, 223, 222, 249, 250, 234, 237, 236, + 59, 274, 264, 0, 0, 0, 0, 0, 0, 141, + 138, 0, 261, 259, 259, 259, 95, 260, 91, 259, + 259, 102, 0, 277, 0, 274, 0, 274, 0, 274, + 0, 0, 0, 0, 63, 62, 0, 0, 226, 0, + 0, 0, 0, 0, 0, 55, 196, 197, 194, 195, + 0, 0, 0, 198, 0, 0, 0, 0, 72, 266, + 0, 0, 155, 134, 160, 147, 156, 145, 262, 100, + 0, 99, 101, 92, 259, 97, 98, 0, 90, 103, + 94, 0, 112, 0, 85, 88, 89, 274, 126, 0, + 0, 78, 79, 84, 259, 274, 288, 0, 288, 0, + 203, 0, 210, 224, 227, 228, 221, 219, 238, 0, + 251, 215, 207, 211, 212, 213, 0, 220, 218, 0, + 0, 253, 269, 268, 161, 139, 140, 96, 0, 125, + 0, 119, 274, 87, 274, 120, 274, 82, 259, 274, + 289, 121, 274, 202, 204, 0, 229, 242, 0, 240, + 199, 0, 214, 0, 255, 257, 252, 0, 104, 113, + 114, 86, 83, 80, 81, 116, 116, 225, 239, 0, + 244, 208, 256, 0, 254, 0, 122, 123, 241, 247, + 248, 246, 243, 245, 258, 108, 109, 0, 0, 106, + 110, 0, 105, 107, 111, 0, 0, 0 }; -static const short yydefgoto[] = { 442, +static const short yydefgoto[] = { 446, 3, 4, 8, 9, 13, 14, 25, 26, 27, 55, - 56, 57, 108, 58, 74, 201, 75, 76, 77, 59, - 69, 70, 164, 60, 100, 61, 131, 132, 174, 175, - 337, 338, 339, 330, 331, 120, 321, 204, 205, 325, - 326, 422, 435, 436, 340, 341, 152, 153, 213, 101, - 189, 190, 437, 262, 263, 62, 195, 254, 196, 197, - 234, 312, 102, 103, 104, 105, 298, 299, 301, 216, - 217, 218, 235, 236, 237, 392, 287, 238, 239, 240, - 241, 395, 396, 429, 430, 242, 243, 244, 367, 368, - 401, 264, 265, 139, 183, 184, 245, 122, 123, 124, - 151, 156, 246, 106, 386, 247 + 56, 57, 108, 58, 74, 202, 75, 76, 77, 59, + 69, 70, 174, 60, 100, 61, 131, 132, 175, 176, + 341, 342, 343, 334, 335, 120, 325, 205, 206, 329, + 330, 426, 439, 440, 344, 345, 152, 153, 214, 101, + 190, 191, 441, 265, 266, 62, 196, 257, 197, 198, + 237, 316, 102, 103, 104, 105, 302, 303, 305, 217, + 218, 219, 238, 239, 240, 396, 291, 241, 242, 243, + 244, 399, 400, 433, 434, 245, 246, 247, 371, 372, + 405, 267, 268, 139, 184, 185, 248, 122, 123, 124, + 151, 156, 249, 106, 390, 250 }; -static const short yypact[] = { 275, --32768,-32768, 275,-32768, -91,-32768, 17, 36,-32768,-32768, --32768,-32768, 56,-32768, -47, 262,-32768,-32768, 54, 44, - 41, 62, 91, 68, 175, 262,-32768, 82,-32768,-32768, --32768,-32768,-32768, 155,-32768,-32768, 453,-32768, 193, 75, --32768,-32768,-32768, 197,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, 198, 453,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 337, 614,-32768, 132,-32768, 119,-32768, - 144,-32768,-32768, 3,-32768, 57,-32768, 154,-32768,-32768, --32768, -11, 184,-32768, 196,-32768, 223, 251,-32768,-32768, --32768,-32768,-32768, 273, 252,-32768,-32768,-32768, 690, 336, - 243,-32768, 246,-32768,-32768, 241, 357,-32768,-32768,-32768, - 290, 253,-32768,-32768, 275, 290, 254, 259, 9,-32768, --32768,-32768,-32768, 102, 290,-32768,-32768,-32768,-32768,-32768, - -2,-32768, 255,-32768, 258, 266, 70, 163,-32768, 308, - 207,-32768,-32768, -91,-32768,-32768, 303,-32768,-32768,-32768, - 364, 538, -38,-32768,-32768,-32768,-32768,-32768, 372, 690, - 370, 290, 189,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 69,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 85,-32768,-32768, 271,-32768,-32768, 265,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768, 269, 270,-32768, --32768, 71, 76, 128,-32768, 272, 353, 287, 323, 98, - 125,-32768,-32768, 288, 189,-32768,-32768, 289, 282,-32768, --32768,-32768,-32768, 311, 373,-32768,-32768, -50,-32768,-32768, - 301, 275, 189,-32768, 293, 191, 312, 294, -50,-32768, --32768,-32768, 307,-32768,-32768,-32768,-32768,-32768, 70,-32768, - 178, 302, 329, 411, 370, 207,-32768,-32768, 207,-32768, - 26, 48, 26,-32768,-32768, 327, 48, 26, 321, 303, --32768, 392, 39, 333, 60, 350, 60, 351, 189, 315, - 189,-32768, 436, 322, 309, 325, 216, 319, 330, 328, - 331,-32768,-32768,-32768,-32768,-32768, 332, 436, 436,-32768, - 436, 189, 320, 334,-32768,-32768, 342, 344,-32768,-32768, --32768, 434,-32768,-32768,-32768,-32768, 338,-32768,-32768,-32768, - 26,-32768,-32768, 354,-32768,-32768,-32768, 370, 326, 138, --32768,-32768,-32768, 282,-32768, 383, 348, 345,-32768,-32768, - 26, 282, 370, 352, 370, 349,-32768, 355,-32768,-32768, --32768, 340,-32768,-32768, 289, 22,-32768,-32768, 358,-32768, --32768,-32768, 356,-32768,-32768, -4, 164,-32768,-32768,-32768, --32768,-32768,-32768,-32768, 362,-32768, 302,-32768, 39,-32768, - 282,-32768, 61,-32768, 26, 282,-32768,-32768, 282,-32768, --32768, 411,-32768,-32768, 179,-32768, -38, 189,-32768, 370, - 346,-32768,-32768, 334,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 434,-32768, 22, 24, 240, 346, 370, --32768, 35,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 35, 43,-32768,-32768, 18,-32768,-32768, --32768, 461, 464,-32768 +static const short yypact[] = { 200, +-32768,-32768, 200,-32768, -45,-32768, 43, 34,-32768,-32768, +-32768,-32768, 50,-32768, -19, 235,-32768,-32768, 86, 122, + 22, 106, 139, 120, 236, 235,-32768, 134,-32768,-32768, +-32768,-32768,-32768, 197,-32768,-32768, 457,-32768, 234, 56, +-32768,-32768,-32768, 49,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768, 214, 457,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 341, 618,-32768, 163,-32768, 181,-32768, + 206,-32768,-32768, 65,-32768, -14,-32768, 216,-32768,-32768, +-32768, 57, 210,-32768, 256,-32768, 258, 274,-32768,-32768, +-32768,-32768,-32768, 295, 266,-32768,-32768,-32768, 694, 349, + 250,-32768, 251,-32768,-32768, 242, 357,-32768,-32768,-32768, + 226, 253,-32768,-32768, 200, 226, 254, 257, 85,-32768, +-32768,-32768,-32768, 5, 226,-32768,-32768,-32768,-32768,-32768, + -5,-32768, 252,-32768, 259, 263, 75, 82,-32768, 303, + 219,-32768,-32768, -45,-32768,-32768, 305,-32768,-32768,-32768, + 356, 542, 18,-32768,-32768,-32768,-32768,-32768, 372, 694, + 226, 226, 188,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768, 67,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 99,-32768,-32768, 268,-32768,-32768, 261, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 267, 270, +-32768,-32768, 169, 90, 112,-32768, 271, 348, 283, 319, + 103, 109,-32768,-32768, 290, 188,-32768,-32768, 291, 57, +-32768,-32768,-32768,-32768,-32768, 301, 373,-32768,-32768, -74, +-32768,-32768, 299,-32768, 200, 188,-32768, 297, 204, 306, + 298, -74,-32768,-32768,-32768, 307,-32768,-32768,-32768,-32768, +-32768, 75,-32768, 7, 275, 318, 410, 407, 219,-32768, +-32768, 219,-32768, 41, 74, 41,-32768,-32768, 326, 74, + 41, 321, 305,-32768, 394, 14, 322, 60, 352, 60, + 353, 188, 316, 188,-32768,-32768, 440, 320, 311, 327, + 433, 324, 334, 323, 346,-32768,-32768,-32768,-32768,-32768, + 328, 440, 440,-32768, 440, 188, 452, 338,-32768,-32768, + 350, 358,-32768,-32768,-32768, 453,-32768,-32768,-32768,-32768, + 329,-32768,-32768,-32768, 41,-32768,-32768, 381,-32768,-32768, +-32768, 407, 354, 146,-32768,-32768,-32768, 355,-32768, 401, + 366, 364,-32768,-32768, 41, 355, 407, 369, 407, 368, +-32768, 370,-32768,-32768,-32768, 361,-32768,-32768, 291, 17, +-32768,-32768, 371,-32768,-32768,-32768, 375,-32768,-32768, 23, + 158,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 374,-32768, + 275,-32768, 14,-32768, 355,-32768, 42,-32768, 41, 355, +-32768,-32768, 355,-32768,-32768, 410,-32768,-32768, 203,-32768, + 18, 289,-32768, 407, 376,-32768,-32768, 338,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 453,-32768, 17, + 140, 227, 376, 407,-32768, 38,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 38, 11,-32768, +-32768, 30,-32768,-32768,-32768, 486, 487,-32768 }; static const short yypgoto[] = {-32768, --32768, 469,-32768, 335,-32768, 460,-32768,-32768, 448,-32768, --32768, 419,-32768,-32768,-32768,-32768, 402,-32768, 361,-32768, --32768, 367,-32768,-32768, -54,-32768,-32768, 324,-32768, 232, - 205,-32768, 100,-32768, 108,-32768,-32768,-32768, 218,-32768, --32768,-32768, 55, -176, -244, -79,-32768, -56,-32768, 217, --32768, 237, -133, 291, 295,-32768, 19,-32768, -127, -250, - -97, 101, -49, -45,-32768, -14,-32768,-32768,-32768, -202, --32768, 204, -44, 99, -16,-32768, 257,-32768, -231,-32768, --32768,-32768, 84,-32768,-32768,-32768,-32768,-32768,-32768, 104, - 103, -248,-32768,-32768,-32768, 261, -113, -76,-32768,-32768, --32768,-32768, 1,-32768, 157, -7 +-32768, 485,-32768, 347,-32768, 479,-32768,-32768, 468,-32768, +-32768, 439,-32768,-32768,-32768,-32768, 422,-32768, 382,-32768, +-32768, 389, 377,-32768, -55,-32768,-32768, 342,-32768, 255, + 224,-32768, 119,-32768, 125, 292,-32768,-32768, 241,-32768, +-32768,-32768, 79, -270, -268, -71,-32768, -69,-32768, 244, +-32768, 262, -135, 315, 325,-32768, -82,-32768, -130, -246, + -102, 126, -59, -31,-32768, -13,-32768,-32768,-32768, -209, +-32768, 239, -63, 124, -41,-32768, 286,-32768, -121,-32768, +-32768,-32768, 113,-32768,-32768,-32768,-32768,-32768,-32768, 128, + 130, -252,-32768,-32768,-32768, 278, -116, -114,-32768,-32768, +-32768,-32768, 1,-32768, 189, -7 }; -#define YYLAST 788 +#define YYLAST 792 static const short yytable[] = { 15, - 5, 307, 121, 5, 10, 15, 191, 276, 278, 177, - 107, 10, 316, 318, 319, 7, 1, 2, 322, 323, - 118, 432, 63, 179, 185, 10, 11, 179, 332, 65, - 10, 148, 72, 187, 188, 433, 79, 64, 432, 178, - 71, 63, 426, 178, 78, 214, 432, 10, 65, 133, - 187, 188, 433, 134, 285, 354, 64, 176, 187, 188, - 433, 19, 259, 28, 10, 11, 79, 286, 10, 10, - 215, 365, 374, 16, 78, 165, 166, 167, 10, 168, - 169, 170, 171, 10, 259, 257, 258, 149, 1, 2, - 257, 258, 384, 336, 336, 67, 427, 212, 260, 135, - 428, 150, 119, 72, 29, 159, 115, 259, 79, 160, - 133, 71, 400, 113, 134, 144, 78, 158, 172, 191, - 260, 177, 261, 266, 12, 157, 406, 394, 30, 180, - 186, 434, 441, 199, 332, 179, 411, 185, 308, 282, - 192, 198, 179, 260, 329, 179, 154, 32, 434, 31, - 439, 178, 119, 221, 223, 33, 434, 155, 178, 173, - 135, 178, 222, 17, 317, 329, 329, -74, 116, 176, - 280, 10, 168, 119, 119, 171, 248, 34, -255, 37, - 249, 214, -255, 119, 119, 68, 10, 168, 291, 119, - 171, 36, 250, 333, 417, 166, 251, 10, 168, 169, - 170, 171, 1, 2, 275, 10, 215, 66, 214, 224, - 1, 2, 165, 166, 167, 10, 168, 169, 170, 171, - 1, 2, 166, 225, 10, 168, 169, 170, 171, 110, - 111, 277, 290, 215, 346, 269, 348, 226, 227, 270, - 80, 180, 109, 186, 309, 378, 73, 313, 199, 379, - 112, 199, 198, 228, 380, 172, 198, 363, 440, 198, - 117, 440, 385, 407, 226, 334, 349, 342, 181, 342, - 182, 403, 229, 193, 314, 404, 20, 315, 230, 353, - 126, 360, 361, 181, 362, 21, 415, 231, 1, 2, - 416, 293, 294, 295, 296, 232, 173, 233, 10, 333, - 125, 409, 297, 1, 2, 230, 22, 127, 23, 412, - 10, 168, 413, 194, 171, 1, 2, 24, 202, 203, - 376, 1, 2, 187, 188, 128, 166, 129, 10, 168, - 169, 170, 171, 288, 289, 387, 130, 387, 136, 82, - 293, 294, 295, 296, 187, 188, 83, 84, 397, 137, - 83, 84, 138, 372, 373, 423, 424, 140, 402, 141, - 143, 146, 85, 38, 86, 147, 87, 161, 226, 309, - 162, 334, 163, 206, 219, 342, 88, 198, 10, 252, - 89, 253, 256, 364, 90, 255, 271, 91, 41, 42, - 43, 272, 402, 273, 274, 119, 279, 281, 92, 45, - 292, 284, 302, 93, 46, 94, 47, 95, 397, 230, - 283, 300, 431, 304, 48, 311, 96, 97, 320, 324, - 328, 343, 345, 49, 347, 50, 351, 215, 350, 352, - 51, 98, 52, 53, 54, 357, 356, 359, 371, 375, - 358, 377, 166, 99, 10, 168, 169, 170, 171, 1, - 2, 369, 366, 370, 381, 382, 383, 393, 390, 388, - 443, 10, 420, 444, 391, 399, 1, 2, 405, 398, - 225, 6, 18, 35, 81, 114, 145, 142, 200, 38, - 305, 344, 410, 220, 226, 227, 408, 327, 438, 310, - 335, 355, 414, 267, 39, 303, 418, 268, 40, 425, - 228, 389, 419, 0, 41, 42, 43, 421, 0, 0, - 44, 306, 0, 0, 0, 45, 0, 0, 0, 229, - 46, 0, 47, 0, 0, 230, 0, 0, 0, 0, - 48, 0, 0, 0, 231, 0, 0, 0, 0, 49, - 0, 50, 232, 0, 233, 0, 51, 0, 52, 53, - 54, 83, 84, 0, 0, 0, 0, 0, 0, 207, - 0, 0, 0, 85, 38, 86, 0, 87, 208, 0, + 5, 279, 281, 5, 192, 15, 178, 336, 311, 107, + 121, 320, 322, 323, 436, 10, 168, 326, 327, 171, + 180, 186, 10, 63, 180, 10, 188, 189, 437, 65, + 289, 10, 72, 436, 179, 115, 79, 64, 179, 133, + 71, 436, 63, 290, 78, 188, 189, 437, 65, 154, + 10, 10, 11, 188, 189, 437, 64, 10, 10, 11, + 155, 7, 1, 2, 10, 177, 79, 134, 10, 1, + 2, 16, 378, 10, 78, 340, 67, 262, 1, 2, + 165, 166, 167, 10, 168, 169, 170, 171, 118, 19, + 10, 168, 388, 340, 171, 28, 213, 116, 73, 135, + 133, 215, 159, 72, 260, 261, 160, 148, 79, 30, + 262, 71, 182, 263, 336, 144, 78, 158, 443, 333, + 192, 178, 398, 172, 438, 157, 216, 119, 134, 181, + 187, 264, 269, 200, 410, 180, 415, 186, 312, 404, + 193, 199, 180, 438, 445, 180, 263, 333, 286, 179, + 12, 438, 283, 223, 225, 119, 179, 17, 430, 179, + 135, 222, 224, 149, 173, 333, 68, -77, 444, 358, + 119, 444, 295, 119, 251, 113, 318, 150, 252, 319, + 177, 163, 29, 260, 261, 369, 215, 182, 119, 183, + 321, 421, 215, 31, 166, 32, 10, 168, 169, 170, + 171, 1, 2, 119, 337, 262, 253, 33, 226, 278, + 254, 216, 431, 1, 2, 280, 432, 216, 350, 272, + 352, 37, 227, 273, 165, 166, 167, 10, 168, 169, + 170, 171, 1, 2, 10, 294, 228, 229, 34, 1, + 2, 263, 367, 36, 181, 353, 187, 313, 66, 20, + 317, 200, 230, 382, 200, 199, 80, 383, 21, 199, + 364, 365, 199, 366, 411, 407, 384, 172, 338, 408, + 346, 231, 346, 109, 389, 416, -259, 232, 417, 22, + -259, 23, 119, 10, 168, 194, 233, 171, 1, 2, + 24, 110, 111, 234, 235, 166, 236, 10, 168, 169, + 170, 171, 1, 2, 297, 298, 299, 300, 173, 226, + 419, 337, 112, 413, 420, 301, 1, 2, 188, 189, + 203, 204, 117, 227, 380, 195, 125, 297, 298, 299, + 300, 292, 293, 188, 189, 83, 84, 228, 229, 391, + 126, 391, 127, 82, 376, 377, 427, 428, 128, 129, + 130, 136, 401, 230, 83, 84, 137, 138, 140, 141, + 143, 146, 406, 147, 161, 207, 85, 38, 86, 163, + 87, 162, 231, 313, 220, 338, 255, 256, 232, 346, + 88, 199, 259, 258, 89, 274, 275, 233, 90, 276, + 277, 91, 41, 42, 43, 235, 406, 236, 282, 284, + 287, 288, 92, 45, 296, 304, 306, 93, 46, 94, + 47, 95, 401, 308, 315, 10, 435, 324, 48, 328, + 96, 97, 332, 347, 349, 351, 354, 49, 355, 50, + 361, 356, 216, 363, 51, 98, 52, 53, 54, 166, + 360, 10, 168, 169, 170, 171, 166, 99, 10, 168, + 169, 170, 171, 1, 2, 362, 370, 375, 166, 373, + 10, 168, 169, 170, 171, 10, 379, 374, 119, 381, + 1, 2, 385, 386, 227, 387, 392, 394, 397, 395, + 409, 228, 402, 38, 403, 447, 448, 6, 228, 229, + 201, 18, 424, 35, 81, 114, 357, 145, 39, 142, + 228, 221, 40, 348, 230, 414, 309, 412, 41, 42, + 43, 285, 164, 331, 44, 368, 442, 314, 270, 45, + 339, 418, 232, 231, 46, 422, 47, 307, 271, 232, + 359, 310, 429, 423, 48, 425, 0, 393, 233, 0, + 0, 232, 0, 49, 0, 50, 235, 0, 236, 0, + 51, 0, 52, 53, 54, 83, 84, 0, 0, 0, + 0, 0, 0, 208, 0, 0, 0, 85, 38, 86, + 0, 87, 209, 0, 0, 0, 0, 0, 0, 0, + 0, 88, 0, 0, 0, 89, 0, 0, 0, 90, + 0, 0, 91, 41, 42, 43, 0, 0, 0, 0, + 0, 210, 0, 92, 45, 0, 0, 0, 93, 46, + 94, 47, 95, 0, 0, 0, 0, 0, 0, 48, + 0, 96, 97, 211, 212, 0, 0, 0, 49, 0, + 50, 83, 84, 0, 0, 51, 98, 52, 53, 54, + 0, 0, 0, 85, 38, 86, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 90, 0, 0, 91, 41, - 42, 43, 0, 0, 0, 0, 0, 209, 0, 92, + 42, 43, 0, 0, 0, 0, 0, 0, 0, 92, 45, 0, 0, 0, 93, 46, 94, 47, 95, 0, - 0, 0, 0, 0, 0, 48, 0, 96, 97, 210, - 211, 0, 0, 0, 49, 0, 50, 83, 84, 0, + 0, 0, 0, 0, 0, 48, 0, 96, 97, 0, + 0, 0, 0, 0, 49, 0, 50, 1, 2, 0, 0, 51, 98, 52, 53, 54, 0, 0, 0, 85, 38, 86, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, @@ -734,81 +743,82 @@ static const short yytable[] = { 15, 0, 0, 0, 0, 0, 92, 45, 0, 0, 0, 93, 46, 94, 47, 95, 0, 0, 0, 0, 0, 0, 48, 0, 96, 97, 0, 0, 0, 0, 0, - 49, 0, 50, 1, 2, 0, 0, 51, 98, 52, - 53, 54, 0, 0, 0, 85, 38, 86, 0, 87, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, - 0, 0, 0, 89, 0, 0, 0, 90, 0, 0, - 91, 41, 42, 43, 0, 0, 0, 0, 0, 0, - 0, 92, 45, 0, 0, 0, 93, 46, 94, 47, - 95, 0, 0, 0, 0, 0, 0, 48, 0, 96, - 97, 0, 0, 0, 0, 0, 49, 0, 50, 0, - 0, 0, 0, 51, 98, 52, 53, 54 + 49, 0, 50, 0, 0, 0, 0, 51, 98, 52, + 53, 54 }; static const short yycheck[] = { 7, - 0, 252, 82, 3, 9, 13, 140, 210, 211, 137, - 65, 9, 261, 262, 263, 107, 14, 15, 267, 268, - 32, 4, 37, 137, 138, 9, 10, 141, 273, 37, - 9, 23, 40, 16, 17, 18, 44, 37, 4, 137, - 40, 56, 19, 141, 44, 84, 4, 9, 56, 99, - 16, 17, 18, 99, 105, 287, 56, 137, 16, 17, - 18, 109, 37, 10, 9, 10, 74, 118, 9, 9, - 109, 303, 321, 38, 74, 6, 7, 8, 9, 10, - 11, 12, 13, 9, 37, 15, 16, 79, 14, 15, - 15, 16, 341, 34, 34, 21, 73, 152, 73, 99, - 77, 93, 114, 111, 61, 108, 50, 37, 116, 112, - 160, 111, 117, 111, 160, 115, 116, 125, 49, 253, - 73, 249, 202, 203, 108, 125, 377, 106, 88, 137, - 138, 114, 115, 141, 379, 249, 385, 251, 252, 219, - 140, 141, 256, 73, 106, 259, 45, 57, 114, 88, - 108, 249, 114, 161, 162, 88, 114, 56, 256, 90, - 160, 259, 162, 108, 117, 106, 106, 108, 112, 249, - 215, 9, 10, 114, 114, 13, 108, 3, 108, 25, - 112, 84, 112, 114, 114, 111, 9, 10, 233, 114, - 13, 110, 108, 273, 397, 7, 112, 9, 10, 11, - 12, 13, 14, 15, 107, 9, 109, 15, 84, 21, - 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 7, 35, 9, 10, 11, 12, 13, 111, - 112, 107, 232, 109, 279, 108, 281, 49, 50, 112, - 43, 249, 111, 251, 252, 108, 50, 255, 256, 112, - 107, 259, 252, 65, 334, 49, 256, 302, 435, 259, - 107, 438, 342, 377, 49, 273, 283, 275, 106, 277, - 108, 108, 84, 67, 256, 112, 15, 259, 90, 64, - 85, 298, 299, 106, 301, 24, 108, 99, 14, 15, - 112, 101, 102, 103, 104, 107, 90, 109, 9, 379, - 117, 381, 112, 14, 15, 90, 45, 85, 47, 386, - 9, 10, 389, 107, 13, 14, 15, 56, 16, 17, - 328, 14, 15, 16, 17, 75, 7, 55, 9, 10, - 11, 12, 13, 33, 34, 343, 85, 345, 3, 3, - 101, 102, 103, 104, 16, 17, 14, 15, 356, 107, - 14, 15, 107, 16, 17, 412, 413, 117, 366, 3, - 108, 108, 26, 27, 28, 107, 30, 113, 49, 377, - 113, 379, 107, 10, 3, 383, 40, 377, 9, 109, - 44, 117, 113, 64, 48, 117, 115, 51, 52, 53, - 54, 39, 400, 107, 72, 114, 109, 109, 62, 63, - 108, 29, 109, 67, 68, 69, 70, 71, 416, 90, - 100, 100, 420, 107, 78, 5, 80, 81, 92, 99, - 29, 72, 72, 87, 110, 89, 118, 109, 107, 105, - 94, 95, 96, 97, 98, 108, 107, 106, 5, 86, - 110, 116, 7, 107, 9, 10, 11, 12, 13, 14, - 15, 110, 119, 110, 72, 108, 112, 118, 110, 108, - 0, 9, 117, 0, 110, 110, 14, 15, 107, 112, - 35, 3, 13, 26, 56, 74, 116, 111, 144, 27, - 249, 277, 383, 160, 49, 50, 379, 270, 434, 253, - 274, 288, 392, 203, 42, 239, 398, 203, 46, 416, - 65, 345, 400, -1, 52, 53, 54, 404, -1, -1, - 58, 251, -1, -1, -1, 63, -1, -1, -1, 84, - 68, -1, 70, -1, -1, 90, -1, -1, -1, -1, - 78, -1, -1, -1, 99, -1, -1, -1, -1, 87, - -1, 89, 107, -1, 109, -1, 94, -1, 96, 97, - 98, 14, 15, -1, -1, -1, -1, -1, -1, 22, - -1, -1, -1, 26, 27, 28, -1, 30, 31, -1, + 0, 211, 212, 3, 140, 13, 137, 276, 255, 65, + 82, 264, 265, 266, 4, 9, 10, 270, 271, 13, + 137, 138, 9, 37, 141, 9, 16, 17, 18, 37, + 105, 9, 40, 4, 137, 50, 44, 37, 141, 99, + 40, 4, 56, 118, 44, 16, 17, 18, 56, 45, + 9, 9, 10, 16, 17, 18, 56, 9, 9, 10, + 56, 107, 14, 15, 9, 137, 74, 99, 9, 14, + 15, 38, 325, 9, 74, 34, 21, 37, 14, 15, + 6, 7, 8, 9, 10, 11, 12, 13, 32, 109, + 9, 10, 345, 34, 13, 10, 152, 112, 50, 99, + 160, 84, 108, 111, 15, 16, 112, 23, 116, 88, + 37, 111, 106, 73, 383, 115, 116, 125, 108, 106, + 256, 252, 106, 49, 114, 125, 109, 114, 160, 137, + 138, 203, 204, 141, 381, 252, 389, 254, 255, 117, + 140, 141, 259, 114, 115, 262, 73, 106, 220, 252, + 108, 114, 216, 161, 162, 114, 259, 108, 19, 262, + 160, 161, 162, 79, 90, 106, 111, 108, 439, 291, + 114, 442, 236, 114, 108, 111, 259, 93, 112, 262, + 252, 107, 61, 15, 16, 307, 84, 106, 114, 108, + 117, 401, 84, 88, 7, 57, 9, 10, 11, 12, + 13, 14, 15, 114, 276, 37, 108, 88, 21, 107, + 112, 109, 73, 14, 15, 107, 77, 109, 282, 108, + 284, 25, 35, 112, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 9, 235, 49, 50, 3, 14, + 15, 73, 306, 110, 252, 287, 254, 255, 15, 15, + 258, 259, 65, 108, 262, 255, 43, 112, 24, 259, + 302, 303, 262, 305, 381, 108, 338, 49, 276, 112, + 278, 84, 280, 111, 346, 390, 108, 90, 393, 45, + 112, 47, 114, 9, 10, 67, 99, 13, 14, 15, + 56, 111, 112, 106, 107, 7, 109, 9, 10, 11, + 12, 13, 14, 15, 101, 102, 103, 104, 90, 21, + 108, 383, 107, 385, 112, 112, 14, 15, 16, 17, + 16, 17, 107, 35, 332, 107, 117, 101, 102, 103, + 104, 33, 34, 16, 17, 14, 15, 49, 50, 347, + 85, 349, 85, 3, 16, 17, 416, 417, 75, 55, + 85, 3, 360, 65, 14, 15, 107, 107, 117, 3, + 108, 108, 370, 107, 113, 10, 26, 27, 28, 107, + 30, 113, 84, 381, 3, 383, 109, 117, 90, 387, + 40, 381, 113, 117, 44, 115, 39, 99, 48, 107, + 72, 51, 52, 53, 54, 107, 404, 109, 109, 109, + 100, 29, 62, 63, 108, 100, 109, 67, 68, 69, + 70, 71, 420, 107, 5, 9, 424, 92, 78, 99, + 80, 81, 29, 72, 72, 110, 107, 87, 118, 89, + 108, 105, 109, 106, 94, 95, 96, 97, 98, 7, + 107, 9, 10, 11, 12, 13, 7, 107, 9, 10, + 11, 12, 13, 14, 15, 110, 119, 5, 7, 110, + 9, 10, 11, 12, 13, 9, 86, 110, 114, 116, + 14, 15, 72, 108, 35, 112, 108, 110, 118, 110, + 107, 49, 112, 27, 110, 0, 0, 3, 49, 50, + 144, 13, 117, 26, 56, 74, 64, 116, 42, 111, + 49, 160, 46, 280, 65, 387, 252, 383, 52, 53, + 54, 220, 136, 273, 58, 64, 438, 256, 204, 63, + 277, 396, 90, 84, 68, 402, 70, 242, 204, 90, + 292, 254, 420, 404, 78, 408, -1, 349, 99, -1, + -1, 90, -1, 87, -1, 89, 107, -1, 109, -1, + 94, -1, 96, 97, 98, 14, 15, -1, -1, -1, + -1, -1, -1, 22, -1, -1, -1, 26, 27, 28, + -1, 30, 31, -1, -1, -1, -1, -1, -1, -1, + -1, 40, -1, -1, -1, 44, -1, -1, -1, 48, + -1, -1, 51, 52, 53, 54, -1, -1, -1, -1, + -1, 60, -1, 62, 63, -1, -1, -1, 67, 68, + 69, 70, 71, -1, -1, -1, -1, -1, -1, 78, + -1, 80, 81, 82, 83, -1, -1, -1, 87, -1, + 89, 14, 15, -1, -1, 94, 95, 96, 97, 98, + -1, -1, -1, 26, 27, 28, -1, 30, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, 44, -1, -1, -1, 48, -1, -1, 51, 52, - 53, 54, -1, -1, -1, -1, -1, 60, -1, 62, + 53, 54, -1, -1, -1, -1, -1, -1, -1, 62, 63, -1, -1, -1, 67, 68, 69, 70, 71, -1, - -1, -1, -1, -1, -1, 78, -1, 80, 81, 82, - 83, -1, -1, -1, 87, -1, 89, 14, 15, -1, + -1, -1, -1, -1, -1, 78, -1, 80, 81, -1, + -1, -1, -1, -1, 87, -1, 89, 14, 15, -1, -1, 94, 95, 96, 97, 98, -1, -1, -1, 26, 27, 28, -1, 30, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, 44, -1, -1, @@ -816,15 +826,8 @@ static const short yycheck[] = { 7, -1, -1, -1, -1, -1, 62, 63, -1, -1, -1, 67, 68, 69, 70, 71, -1, -1, -1, -1, -1, -1, 78, -1, 80, 81, -1, -1, -1, -1, -1, - 87, -1, 89, 14, 15, -1, -1, 94, 95, 96, - 97, 98, -1, -1, -1, 26, 27, 28, -1, 30, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, - -1, -1, -1, 44, -1, -1, -1, 48, -1, -1, - 51, 52, 53, 54, -1, -1, -1, -1, -1, -1, - -1, 62, 63, -1, -1, -1, 67, 68, 69, 70, - 71, -1, -1, -1, -1, -1, -1, 78, -1, 80, - 81, -1, -1, -1, -1, -1, 87, -1, 89, -1, - -1, -1, -1, 94, 95, 96, 97, 98 + 87, -1, 89, -1, -1, -1, -1, 94, 95, 96, + 97, 98 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/share/bison.simple" @@ -1864,13 +1867,20 @@ case 62: #line 794 "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->lhs_params = yyvsp[-3].a_plist; ; break;} case 63: -#line 803 "asn1p_y.y" +#line 800 "asn1p_y.y" +{ + yyval.a_expr = yyvsp[0].a_expr; + yyval.a_expr->Identifier = yyvsp[-5].tv_str; + yyval.a_expr->lhs_params = yyvsp[-3].a_plist; + ; + break;} +case 64: +#line 808 "asn1p_y.y" { int ret; yyval.a_plist = asn1p_paramlist_new(yylineno); @@ -1881,8 +1891,8 @@ case 63: if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument); ; break;} -case 64: -#line 812 "asn1p_y.y" +case 65: +#line 817 "asn1p_y.y" { int ret; yyval.a_plist = yyvsp[-2].a_plist; @@ -1892,25 +1902,15 @@ case 64: if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument); ; break;} -case 65: -#line 823 "asn1p_y.y" +case 66: +#line 828 "asn1p_y.y" { yyval.a_parg.governor = NULL; yyval.a_parg.argument = yyvsp[0].tv_str; ; break;} -case 66: -#line 827 "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 67: -#line 834 "asn1p_y.y" +#line 832 "asn1p_y.y" { int ret; yyval.a_parg.governor = asn1p_ref_new(yylineno); @@ -1920,7 +1920,17 @@ case 67: ; break;} case 68: -#line 841 "asn1p_y.y" +#line 839 "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 69: +#line 846 "asn1p_y.y" { int ret; yyval.a_parg.governor = asn1p_ref_new(yylineno); @@ -1930,29 +1940,40 @@ case 68: yyval.a_parg.argument = yyvsp[0].tv_str; ; break;} -case 69: -#line 852 "asn1p_y.y" +case 70: +#line 854 "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 71: +#line 865 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 70: -#line 857 "asn1p_y.y" +case 72: +#line 870 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 71: -#line 864 "asn1p_y.y" +case 73: +#line 877 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; ; break;} -case 72: -#line 867 "asn1p_y.y" +case 74: +#line 880 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1962,8 +1983,8 @@ case 72: yyval.a_expr->value = yyvsp[0].a_value; ; break;} -case 73: -#line 875 "asn1p_y.y" +case 75: +#line 888 "asn1p_y.y" { asn1p_ref_t *ref; yyval.a_expr = asn1p_expr_new(yylineno); @@ -1976,31 +1997,40 @@ case 73: yyval.a_expr->value = asn1p_value_fromref(ref, 0); ; break;} -case 74: -#line 903 "asn1p_y.y" +case 76: +#line 899 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr->expr_type = A1TC_VALUESET; + yyval.a_expr->meta_type = AMT_VALUESET; + yyval.a_expr->constraints = yyvsp[0].a_constr; + ; + break;} +case 77: +#line 922 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); ; break;} -case 75: -#line 904 "asn1p_y.y" +case 78: +#line 923 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; ; break;} -case 76: -#line 907 "asn1p_y.y" +case 79: +#line 926 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 77: -#line 912 "asn1p_y.y" +case 80: +#line 931 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 78: -#line 919 "asn1p_y.y" +case 81: +#line 938 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; assert(yyval.a_expr->Identifier == 0); @@ -2009,8 +2039,8 @@ case 78: yyval.a_expr->marker = yyvsp[0].a_marker; ; break;} -case 79: -#line 926 "asn1p_y.y" +case 82: +#line 945 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags; @@ -2018,8 +2048,8 @@ case 79: _fixup_anonymous_identifier(yyval.a_expr); ; break;} -case 80: -#line 932 "asn1p_y.y" +case 83: +#line 951 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2028,50 +2058,50 @@ case 80: asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 81: -#line 939 "asn1p_y.y" +case 84: +#line 958 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; ; break;} -case 82: -#line 945 "asn1p_y.y" +case 85: +#line 964 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 83: -#line 950 "asn1p_y.y" +case 86: +#line 969 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 84: -#line 957 "asn1p_y.y" +case 87: +#line 976 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; assert(yyval.a_expr->Identifier == 0); yyval.a_expr->Identifier = yyvsp[-1].tv_str; ; break;} -case 85: -#line 962 "asn1p_y.y" +case 88: +#line 981 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; ; break;} -case 86: -#line 965 "asn1p_y.y" +case 89: +#line 984 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; _fixup_anonymous_identifier(yyval.a_expr); ; break;} -case 87: -#line 972 "asn1p_y.y" +case 90: +#line 991 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; checkmem(yyval.a_expr); @@ -2080,16 +2110,16 @@ case 87: assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS); ; break;} -case 88: -#line 982 "asn1p_y.y" +case 91: +#line 1001 "asn1p_y.y" { yyval.a_int = 0; ; break;} -case 89: -#line 983 "asn1p_y.y" +case 92: +#line 1002 "asn1p_y.y" { yyval.a_int = 1; ; break;} -case 90: -#line 987 "asn1p_y.y" +case 93: +#line 1006 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2098,15 +2128,15 @@ case 90: asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 91: -#line 994 "asn1p_y.y" +case 94: +#line 1013 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 92: -#line 1004 "asn1p_y.y" +case 95: +#line 1023 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2116,8 +2146,8 @@ case 92: yyval.a_expr->marker = yyvsp[0].a_marker; ; break;} -case 93: -#line 1014 "asn1p_y.y" +case 96: +#line 1033 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); yyval.a_expr->Identifier = yyvsp[-3].tv_str; @@ -2128,8 +2158,8 @@ case 93: asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr); ; break;} -case 94: -#line 1025 "asn1p_y.y" +case 97: +#line 1044 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); yyval.a_expr->Identifier = yyvsp[-2].tv_str; @@ -2139,8 +2169,8 @@ case 94: yyval.a_expr->marker = yyvsp[0].a_marker; ; break;} -case 95: -#line 1035 "asn1p_y.y" +case 98: +#line 1054 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2151,8 +2181,8 @@ case 95: yyval.a_expr->marker = yyvsp[0].a_marker; ; break;} -case 96: -#line 1046 "asn1p_y.y" +case 99: +#line 1065 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); yyval.a_expr->Identifier = yyvsp[-2].tv_str; @@ -2162,8 +2192,8 @@ case 96: yyval.a_expr->marker = yyvsp[0].a_marker; ; break;} -case 97: -#line 1056 "asn1p_y.y" +case 100: +#line 1075 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2174,8 +2204,8 @@ case 97: yyval.a_expr->marker = yyvsp[0].a_marker; ; break;} -case 98: -#line 1067 "asn1p_y.y" +case 101: +#line 1086 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2186,103 +2216,103 @@ case 98: yyval.a_expr->marker = yyvsp[0].a_marker; ; break;} -case 99: -#line 1079 "asn1p_y.y" +case 102: +#line 1098 "asn1p_y.y" { yyval.a_wsynt = 0; ; break;} -case 100: -#line 1080 "asn1p_y.y" +case 103: +#line 1099 "asn1p_y.y" { yyval.a_wsynt = yyvsp[0].a_wsynt; ; break;} -case 101: -#line 1087 "asn1p_y.y" +case 104: +#line 1106 "asn1p_y.y" { asn1p_lexer_hack_enable_with_syntax(); ; break;} -case 102: -#line 1089 "asn1p_y.y" +case 105: +#line 1108 "asn1p_y.y" { yyval.a_wsynt = yyvsp[-1].a_wsynt; ; break;} -case 103: -#line 1095 "asn1p_y.y" +case 106: +#line 1114 "asn1p_y.y" { yyval.a_wsynt = asn1p_wsyntx_new(); TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next); ; break;} -case 104: -#line 1099 "asn1p_y.y" +case 107: +#line 1118 "asn1p_y.y" { yyval.a_wsynt = yyvsp[-1].a_wsynt; TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next); ; break;} -case 105: -#line 1106 "asn1p_y.y" +case 108: +#line 1125 "asn1p_y.y" { yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0); yyval.a_wchunk->type = WC_WHITESPACE; ; break;} -case 106: -#line 1110 "asn1p_y.y" +case 109: +#line 1129 "asn1p_y.y" { yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_str, strlen(yyvsp[0].tv_str), 0); ; break;} -case 107: -#line 1113 "asn1p_y.y" +case 110: +#line 1132 "asn1p_y.y" { yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].a_refcomp.name, strlen(yyvsp[0].a_refcomp.name), 0); yyval.a_wchunk->type = WC_FIELD; ; break;} -case 108: -#line 1117 "asn1p_y.y" +case 111: +#line 1136 "asn1p_y.y" { yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt); ; break;} -case 109: -#line 1123 "asn1p_y.y" -{ - yyval.a_expr = asn1p_expr_new(yylineno); - 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 110: -#line 1131 "asn1p_y.y" -{ - yyval.a_expr = asn1p_expr_new(yylineno); - 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 111: -#line 1140 "asn1p_y.y" -{ - yyval.a_expr = asn1p_expr_new(yylineno); - 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 112: -#line 1152 "asn1p_y.y" +#line 1142 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + 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 113: +#line 1150 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + 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 114: +#line 1159 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + 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 115: +#line 1171 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; yyval.a_expr->tag = yyvsp[-2].a_tag; @@ -2303,15 +2333,15 @@ case 112: } ; break;} -case 113: -#line 1174 "asn1p_y.y" +case 116: +#line 1193 "asn1p_y.y" { yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0; asn1p_as_pointer = 0; ; break;} -case 114: -#line 1181 "asn1p_y.y" +case 117: +#line 1200 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; yyval.a_expr->marker.flags |= yyvsp[-1].a_int; @@ -2329,14 +2359,14 @@ case 114: } ; break;} -case 115: -#line 1200 "asn1p_y.y" +case 118: +#line 1219 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; ; break;} -case 116: -#line 1203 "asn1p_y.y" +case 119: +#line 1222 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; assert(yyval.a_expr->expr_type == A1TC_INVALID); @@ -2344,8 +2374,8 @@ case 116: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 117: -#line 1209 "asn1p_y.y" +case 120: +#line 1228 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; assert(yyval.a_expr->expr_type == A1TC_INVALID); @@ -2353,8 +2383,8 @@ case 117: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 118: -#line 1215 "asn1p_y.y" +case 121: +#line 1234 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; assert(yyval.a_expr->expr_type == A1TC_INVALID); @@ -2362,8 +2392,8 @@ case 118: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 119: -#line 1221 "asn1p_y.y" +case 122: +#line 1240 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2375,8 +2405,8 @@ case 119: asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 120: -#line 1231 "asn1p_y.y" +case 123: +#line 1250 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2388,8 +2418,8 @@ case 120: asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 121: -#line 1241 "asn1p_y.y" +case 124: +#line 1260 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2397,8 +2427,8 @@ case 121: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 122: -#line 1247 "asn1p_y.y" +case 125: +#line 1266 "asn1p_y.y" { int ret; yyval.a_expr = asn1p_expr_new(yylineno); @@ -2411,8 +2441,8 @@ case 122: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 123: -#line 1259 "asn1p_y.y" +case 126: +#line 1277 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2421,8 +2451,8 @@ case 123: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 124: -#line 1274 "asn1p_y.y" +case 127: +#line 1292 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2432,8 +2462,8 @@ case 124: free(yyvsp[0].tv_str); ; break;} -case 125: -#line 1282 "asn1p_y.y" +case 128: +#line 1300 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2445,8 +2475,8 @@ case 125: free(yyvsp[-2].tv_str); ; break;} -case 126: -#line 1292 "asn1p_y.y" +case 129: +#line 1310 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2458,8 +2488,8 @@ case 126: free(yyvsp[-2].tv_str); ; break;} -case 127: -#line 1302 "asn1p_y.y" +case 130: +#line 1320 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2471,8 +2501,8 @@ case 127: free(yyvsp[-2].tv_str); ; break;} -case 128: -#line 1312 "asn1p_y.y" +case 131: +#line 1330 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2482,8 +2512,8 @@ case 128: checkmem(ret == 0); ; break;} -case 129: -#line 1320 "asn1p_y.y" +case 132: +#line 1338 "asn1p_y.y" { int ret; yyval.a_ref = yyvsp[0].a_ref; @@ -2504,8 +2534,8 @@ case 129: } ; break;} -case 130: -#line 1342 "asn1p_y.y" +case 133: +#line 1360 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2515,8 +2545,8 @@ case 130: checkmem(ret == 0); ; break;} -case 131: -#line 1350 "asn1p_y.y" +case 134: +#line 1368 "asn1p_y.y" { int ret; yyval.a_ref = yyvsp[-2].a_ref; @@ -2525,50 +2555,50 @@ case 131: checkmem(ret == 0); ; break;} -case 133: -#line 1363 "asn1p_y.y" +case 136: +#line 1381 "asn1p_y.y" { yyval.a_refcomp.lex_type = RLT_AmpUppercase; yyval.a_refcomp.name = yyvsp[0].tv_str; ; break;} -case 134: -#line 1368 "asn1p_y.y" +case 137: +#line 1386 "asn1p_y.y" { yyval.a_refcomp.lex_type = RLT_Amplowercase; yyval.a_refcomp.name = yyvsp[0].tv_str; ; break;} -case 135: -#line 1377 "asn1p_y.y" +case 138: +#line 1395 "asn1p_y.y" { yyval.a_ref = asn1p_ref_new(yylineno); asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase); ; break;} -case 136: -#line 1381 "asn1p_y.y" +case 139: +#line 1399 "asn1p_y.y" { yyval.a_ref = yyval.a_ref; asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase); ; break;} -case 137: -#line 1385 "asn1p_y.y" +case 140: +#line 1403 "asn1p_y.y" { yyval.a_ref = yyval.a_ref; asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase); ; break;} -case 138: -#line 1392 "asn1p_y.y" +case 141: +#line 1410 "asn1p_y.y" { yyval.a_ref = asn1p_ref_new(yylineno); asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS); ; break;} -case 139: -#line 1412 "asn1p_y.y" +case 142: +#line 1430 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; assert(yyval.a_expr->Identifier == NULL); @@ -2577,8 +2607,8 @@ case 139: yyval.a_expr->value = yyvsp[0].a_value; ; break;} -case 142: -#line 1424 "asn1p_y.y" +case 145: +#line 1442 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(0); checkmem(yyval.a_value); @@ -2587,70 +2617,70 @@ case 142: yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value; ; break;} -case 143: -#line 1431 "asn1p_y.y" +case 146: +#line 1449 "asn1p_y.y" { asn1p_lexer_hack_push_opaque_state(); ; break;} -case 144: -#line 1431 "asn1p_y.y" +case 147: +#line 1449 "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 145: -#line 1436 "asn1p_y.y" +case 148: +#line 1454 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(0); checkmem(yyval.a_value); yyval.a_value->type = ATV_NULL; ; break;} -case 146: -#line 1444 "asn1p_y.y" +case 149: +#line 1462 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(0); checkmem(yyval.a_value); yyval.a_value->type = ATV_FALSE; ; break;} -case 147: -#line 1449 "asn1p_y.y" +case 150: +#line 1467 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(0); checkmem(yyval.a_value); yyval.a_value->type = ATV_TRUE; ; break;} -case 148: -#line 1454 "asn1p_y.y" +case 151: +#line 1472 "asn1p_y.y" { yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B'); checkmem(yyval.a_value); ; break;} -case 149: -#line 1458 "asn1p_y.y" +case 152: +#line 1476 "asn1p_y.y" { yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H'); checkmem(yyval.a_value); ; break;} -case 150: -#line 1462 "asn1p_y.y" +case 153: +#line 1480 "asn1p_y.y" { yyval.a_value = yyval.a_value; ; break;} -case 151: -#line 1465 "asn1p_y.y" +case 154: +#line 1483 "asn1p_y.y" { yyval.a_value = yyvsp[0].a_value; ; break;} -case 152: -#line 1471 "asn1p_y.y" +case 155: +#line 1489 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -2663,8 +2693,8 @@ case 152: free(yyvsp[0].tv_str); ; break;} -case 153: -#line 1482 "asn1p_y.y" +case 156: +#line 1500 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -2680,31 +2710,31 @@ case 153: free(yyvsp[0].tv_str); ; break;} -case 154: -#line 1500 "asn1p_y.y" +case 157: +#line 1518 "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 155: -#line 1504 "asn1p_y.y" +case 158: +#line 1522 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int); checkmem(yyval.a_value); yyval.a_value->type = ATV_TUPLE; ; break;} -case 156: -#line 1509 "asn1p_y.y" +case 159: +#line 1527 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int); checkmem(yyval.a_value); yyval.a_value->type = ATV_QUADRUPLE; ; break;} -case 157: -#line 1543 "asn1p_y.y" +case 160: +#line 1561 "asn1p_y.y" { yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1; yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1); @@ -2715,8 +2745,8 @@ case 157: free(yyvsp[0].tv_opaque.buf); ; break;} -case 158: -#line 1552 "asn1p_y.y" +case 161: +#line 1570 "asn1p_y.y" { int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len; char *p = malloc(newsize + 1); @@ -2730,72 +2760,72 @@ case 158: yyval.tv_opaque.len = newsize; ; break;} -case 159: -#line 1567 "asn1p_y.y" +case 162: +#line 1585 "asn1p_y.y" { yyval.a_type = ASN_BASIC_BOOLEAN; ; break;} -case 160: -#line 1568 "asn1p_y.y" +case 163: +#line 1586 "asn1p_y.y" { yyval.a_type = ASN_BASIC_NULL; ; break;} -case 161: -#line 1569 "asn1p_y.y" +case 164: +#line 1587 "asn1p_y.y" { yyval.a_type = ASN_BASIC_REAL; ; break;} -case 162: -#line 1570 "asn1p_y.y" -{ yyval.a_type = yyvsp[0].a_type; ; - break;} -case 163: -#line 1571 "asn1p_y.y" -{ yyval.a_type = ASN_BASIC_OCTET_STRING; ; - break;} -case 164: -#line 1572 "asn1p_y.y" -{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ; - break;} case 165: -#line 1573 "asn1p_y.y" -{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ; +#line 1588 "asn1p_y.y" +{ yyval.a_type = yyvsp[0].a_type; ; break;} case 166: -#line 1574 "asn1p_y.y" -{ yyval.a_type = ASN_BASIC_EXTERNAL; ; +#line 1589 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_OCTET_STRING; ; break;} case 167: -#line 1575 "asn1p_y.y" -{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ; +#line 1590 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ; break;} case 168: -#line 1576 "asn1p_y.y" -{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ; +#line 1591 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ; break;} case 169: -#line 1577 "asn1p_y.y" -{ yyval.a_type = ASN_BASIC_UTCTime; ; +#line 1592 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_EXTERNAL; ; break;} case 170: -#line 1578 "asn1p_y.y" -{ yyval.a_type = ASN_BASIC_GeneralizedTime; ; +#line 1593 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ; break;} case 171: -#line 1579 "asn1p_y.y" -{ yyval.a_type = yyvsp[0].a_type; ; +#line 1594 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ; break;} case 172: -#line 1586 "asn1p_y.y" -{ yyval.a_type = ASN_BASIC_INTEGER; ; +#line 1595 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_UTCTime; ; break;} case 173: -#line 1587 "asn1p_y.y" -{ yyval.a_type = ASN_BASIC_ENUMERATED; ; +#line 1596 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_GeneralizedTime; ; break;} case 174: -#line 1588 "asn1p_y.y" -{ yyval.a_type = ASN_BASIC_BIT_STRING; ; +#line 1597 "asn1p_y.y" +{ yyval.a_type = yyvsp[0].a_type; ; break;} case 175: -#line 1592 "asn1p_y.y" +#line 1604 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_INTEGER; ; + break;} +case 176: +#line 1605 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_ENUMERATED; ; + break;} +case 177: +#line 1606 "asn1p_y.y" +{ yyval.a_type = ASN_BASIC_BIT_STRING; ; + break;} +case 178: +#line 1610 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2803,8 +2833,8 @@ case 175: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 176: -#line 1598 "asn1p_y.y" +case 179: +#line 1616 "asn1p_y.y" { if(yyvsp[0].a_expr) { yyval.a_expr = yyvsp[0].a_expr; @@ -2816,92 +2846,92 @@ case 176: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 177: -#line 1611 "asn1p_y.y" +case 180: +#line 1629 "asn1p_y.y" { yyval.a_type = ASN_STRING_BMPString; ; break;} -case 178: -#line 1612 "asn1p_y.y" +case 181: +#line 1630 "asn1p_y.y" { yyval.a_type = ASN_STRING_GeneralString; fprintf(stderr, "WARNING: GeneralString is not fully supported\n"); ; break;} -case 179: -#line 1616 "asn1p_y.y" +case 182: +#line 1634 "asn1p_y.y" { yyval.a_type = ASN_STRING_GraphicString; fprintf(stderr, "WARNING: GraphicString is not fully supported\n"); ; break;} -case 180: -#line 1620 "asn1p_y.y" +case 183: +#line 1638 "asn1p_y.y" { yyval.a_type = ASN_STRING_IA5String; ; break;} -case 181: -#line 1621 "asn1p_y.y" +case 184: +#line 1639 "asn1p_y.y" { yyval.a_type = ASN_STRING_ISO646String; ; break;} -case 182: -#line 1622 "asn1p_y.y" +case 185: +#line 1640 "asn1p_y.y" { yyval.a_type = ASN_STRING_NumericString; ; break;} -case 183: -#line 1623 "asn1p_y.y" +case 186: +#line 1641 "asn1p_y.y" { yyval.a_type = ASN_STRING_PrintableString; ; break;} -case 184: -#line 1624 "asn1p_y.y" +case 187: +#line 1642 "asn1p_y.y" { yyval.a_type = ASN_STRING_T61String; fprintf(stderr, "WARNING: T61String is not fully supported\n"); ; break;} -case 185: -#line 1628 "asn1p_y.y" +case 188: +#line 1646 "asn1p_y.y" { yyval.a_type = ASN_STRING_TeletexString; ; break;} -case 186: -#line 1629 "asn1p_y.y" +case 189: +#line 1647 "asn1p_y.y" { yyval.a_type = ASN_STRING_UniversalString; ; break;} -case 187: -#line 1630 "asn1p_y.y" +case 190: +#line 1648 "asn1p_y.y" { yyval.a_type = ASN_STRING_UTF8String; ; break;} -case 188: -#line 1631 "asn1p_y.y" +case 191: +#line 1649 "asn1p_y.y" { yyval.a_type = ASN_STRING_VideotexString; fprintf(stderr, "WARNING: VideotexString is not fully supported\n"); ; break;} -case 189: -#line 1635 "asn1p_y.y" +case 192: +#line 1653 "asn1p_y.y" { yyval.a_type = ASN_STRING_VisibleString; ; break;} -case 190: -#line 1636 "asn1p_y.y" +case 193: +#line 1654 "asn1p_y.y" { yyval.a_type = ASN_STRING_ObjectDescriptor; ; break;} -case 196: -#line 1648 "asn1p_y.y" +case 199: +#line 1666 "asn1p_y.y" { yyval.a_constr = 0; ; break;} -case 197: -#line 1649 "asn1p_y.y" +case 200: +#line 1667 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 198: -#line 1655 "asn1p_y.y" +case 201: +#line 1673 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0); ; break;} -case 199: -#line 1658 "asn1p_y.y" +case 202: +#line 1676 "asn1p_y.y" { /* * This is a special case, for compatibility purposes. @@ -2910,26 +2940,33 @@ case 199: CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0); ; break;} -case 200: -#line 1668 "asn1p_y.y" +case 203: +#line 1686 "asn1p_y.y" { yyval.a_constr = yyvsp[-1].a_constr; ; break;} -case 201: -#line 1671 "asn1p_y.y" +case 204: +#line 1689 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr); ; break;} -case 202: -#line 1677 "asn1p_y.y" +case 205: +#line 1695 "asn1p_y.y" +{ + yyval.a_constr = asn1p_constraint_new(yylineno); + yyval.a_constr->type = ACT_EL_EXT; + ; + break;} +case 206: +#line 1699 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 203: -#line 1680 "asn1p_y.y" +case 207: +#line 1702 "asn1p_y.y" { asn1p_constraint_t *ct; ct = asn1p_constraint_new(yylineno); @@ -2937,8 +2974,8 @@ case 203: CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct); ; break;} -case 204: -#line 1686 "asn1p_y.y" +case 208: +#line 1708 "asn1p_y.y" { asn1p_constraint_t *ct; ct = asn1p_constraint_new(yylineno); @@ -2948,38 +2985,38 @@ case 204: CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr); ; break;} -case 205: -#line 1697 "asn1p_y.y" +case 209: +#line 1719 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 206: -#line 1700 "asn1p_y.y" +case 210: +#line 1722 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0); ; break;} -case 207: -#line 1703 "asn1p_y.y" +case 211: +#line 1725 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr); ; break;} -case 208: -#line 1706 "asn1p_y.y" +case 212: +#line 1728 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr); ; break;} -case 209: -#line 1709 "asn1p_y.y" +case 213: +#line 1731 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr); ; break;} -case 210: -#line 1715 "asn1p_y.y" +case 214: +#line 1737 "asn1p_y.y" { int ret; yyval.a_constr = asn1p_constraint_new(yylineno); @@ -2989,8 +3026,8 @@ case 210: checkmem(ret == 0); ; break;} -case 211: -#line 1723 "asn1p_y.y" +case 215: +#line 1745 "asn1p_y.y" { int ret; yyval.a_constr = asn1p_constraint_new(yylineno); @@ -3000,8 +3037,8 @@ case 211: checkmem(ret == 0); ; break;} -case 212: -#line 1731 "asn1p_y.y" +case 216: +#line 1753 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -3009,8 +3046,8 @@ case 212: yyval.a_constr->value = yyvsp[0].a_value; ; break;} -case 213: -#line 1737 "asn1p_y.y" +case 217: +#line 1759 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -3018,68 +3055,68 @@ case 213: yyval.a_constr->containedSubtype = yyvsp[0].a_value; ; break;} -case 214: -#line 1743 "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 215: -#line 1750 "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 = asn1p_value_fromint(-123); - yyval.a_constr->range_stop = yyvsp[0].a_value; - yyval.a_constr->range_start->type = ATV_MIN; - ; - break;} -case 216: -#line 1758 "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 = asn1p_value_fromint(321); - yyval.a_constr->range_stop->type = ATV_MAX; - ; - break;} -case 217: -#line 1766 "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 = asn1p_value_fromint(-123); - yyval.a_constr->range_stop = asn1p_value_fromint(321); - yyval.a_constr->range_start->type = ATV_MIN; - yyval.a_constr->range_stop->type = ATV_MAX; - ; - break;} case 218: -#line 1775 "asn1p_y.y" +#line 1765 "asn1p_y.y" { - yyval.a_constr = yyvsp[0].a_constr; + 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 219: -#line 1778 "asn1p_y.y" +#line 1772 "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 = asn1p_value_fromint(-123); + yyval.a_constr->range_stop = yyvsp[0].a_value; + yyval.a_constr->range_start->type = ATV_MIN; + ; + break;} +case 220: +#line 1780 "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 = asn1p_value_fromint(321); + yyval.a_constr->range_stop->type = ATV_MAX; + ; + break;} +case 221: +#line 1788 "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 = asn1p_value_fromint(-123); + yyval.a_constr->range_stop = asn1p_value_fromint(321); + yyval.a_constr->range_start->type = ATV_MIN; + yyval.a_constr->range_stop->type = ATV_MAX; + ; + break;} +case 222: +#line 1797 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 220: -#line 1782 "asn1p_y.y" +case 223: +#line 1800 "asn1p_y.y" +{ + yyval.a_constr = yyvsp[0].a_constr; + ; + break;} +case 224: +#line 1804 "asn1p_y.y" { asn1p_lexer_hack_push_opaque_state(); ; break;} -case 221: -#line 1782 "asn1p_y.y" +case 225: +#line 1804 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -3089,64 +3126,64 @@ case 221: yyval.a_constr->value->type = ATV_UNPARSED; ; break;} -case 222: -#line 1793 "asn1p_y.y" +case 226: +#line 1815 "asn1p_y.y" { yyval.a_ctype = ACT_EL_RANGE; ; break;} -case 223: -#line 1794 "asn1p_y.y" +case 227: +#line 1816 "asn1p_y.y" { yyval.a_ctype = ACT_EL_RLRANGE; ; break;} -case 224: -#line 1795 "asn1p_y.y" +case 228: +#line 1817 "asn1p_y.y" { yyval.a_ctype = ACT_EL_LLRANGE; ; break;} -case 225: -#line 1796 "asn1p_y.y" +case 229: +#line 1818 "asn1p_y.y" { yyval.a_ctype = ACT_EL_ULRANGE; ; break;} -case 226: -#line 1800 "asn1p_y.y" +case 230: +#line 1822 "asn1p_y.y" { yyval.a_ctype = ACT_CT_SIZE; ; break;} -case 227: -#line 1803 "asn1p_y.y" +case 231: +#line 1825 "asn1p_y.y" { yyval.a_ctype = ACT_CT_FROM; ; break;} -case 228: -#line 1809 "asn1p_y.y" +case 232: +#line 1831 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(0); checkmem(yyval.a_value); yyval.a_value->type = ATV_FALSE; ; break;} -case 229: -#line 1814 "asn1p_y.y" +case 233: +#line 1836 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(1); checkmem(yyval.a_value); yyval.a_value->type = ATV_TRUE; ; break;} -case 230: -#line 1819 "asn1p_y.y" +case 234: +#line 1841 "asn1p_y.y" { yyval.a_value = yyvsp[0].a_value; ; break;} -case 231: -#line 1822 "asn1p_y.y" +case 235: +#line 1844 "asn1p_y.y" { yyval.a_value = yyvsp[0].a_value; ; break;} -case 232: -#line 1825 "asn1p_y.y" +case 236: +#line 1847 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -3159,8 +3196,8 @@ case 232: free(yyvsp[0].tv_str); ; break;} -case 233: -#line 1839 "asn1p_y.y" +case 237: +#line 1861 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -3173,32 +3210,32 @@ case 233: free(yyvsp[0].tv_str); ; break;} -case 234: -#line 1853 "asn1p_y.y" +case 238: +#line 1875 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0); ; break;} -case 235: -#line 1856 "asn1p_y.y" +case 239: +#line 1878 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0); ; break;} -case 236: -#line 1862 "asn1p_y.y" +case 240: +#line 1884 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 237: -#line 1865 "asn1p_y.y" +case 241: +#line 1887 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr); ; break;} -case 238: -#line 1871 "asn1p_y.y" +case 242: +#line 1893 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -3206,8 +3243,8 @@ case 238: yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0); ; break;} -case 239: -#line 1877 "asn1p_y.y" +case 243: +#line 1899 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -3217,46 +3254,46 @@ case 239: if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr); ; break;} -case 240: -#line 1891 "asn1p_y.y" +case 244: +#line 1913 "asn1p_y.y" { yyval.a_pres = ACPRES_DEFAULT; ; break;} -case 241: -#line 1892 "asn1p_y.y" +case 245: +#line 1914 "asn1p_y.y" { yyval.a_pres = yyvsp[0].a_pres; ; break;} -case 242: -#line 1896 "asn1p_y.y" +case 246: +#line 1918 "asn1p_y.y" { yyval.a_pres = ACPRES_PRESENT; ; break;} -case 243: -#line 1899 "asn1p_y.y" +case 247: +#line 1921 "asn1p_y.y" { yyval.a_pres = ACPRES_ABSENT; ; break;} -case 244: -#line 1902 "asn1p_y.y" +case 248: +#line 1924 "asn1p_y.y" { yyval.a_pres = ACPRES_OPTIONAL; ; break;} -case 245: -#line 1908 "asn1p_y.y" +case 249: +#line 1930 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 246: -#line 1911 "asn1p_y.y" +case 250: +#line 1933 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 247: -#line 1920 "asn1p_y.y" +case 251: +#line 1942 "asn1p_y.y" { asn1p_ref_t *ref = asn1p_ref_new(yylineno); asn1p_constraint_t *ct; @@ -3270,14 +3307,14 @@ case 247: CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0); ; break;} -case 248: -#line 1935 "asn1p_y.y" +case 252: +#line 1957 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr); ; break;} -case 249: -#line 1941 "asn1p_y.y" +case 253: +#line 1963 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -3285,8 +3322,8 @@ case 249: yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0); ; break;} -case 250: -#line 1947 "asn1p_y.y" +case 254: +#line 1969 "asn1p_y.y" { asn1p_constraint_t *ct; ct = asn1p_constraint_new(yylineno); @@ -3296,8 +3333,8 @@ case 250: CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct); ; break;} -case 251: -#line 1961 "asn1p_y.y" +case 255: +#line 1983 "asn1p_y.y" { char *p = malloc(strlen(yyvsp[0].tv_str) + 2); int ret; @@ -3310,8 +3347,8 @@ case 251: free(yyvsp[0].tv_str); ; break;} -case 252: -#line 1972 "asn1p_y.y" +case 256: +#line 1994 "asn1p_y.y" { char *p = malloc(strlen(yyvsp[0].tv_str) + 3); int ret; @@ -3325,14 +3362,14 @@ case 252: free(yyvsp[0].tv_str); ; break;} -case 253: -#line 1988 "asn1p_y.y" +case 257: +#line 2010 "asn1p_y.y" { yyval.tv_str = yyvsp[0].tv_str; ; break;} -case 254: -#line 1991 "asn1p_y.y" +case 258: +#line 2013 "asn1p_y.y" { int l1 = strlen(yyvsp[-2].tv_str); int l3 = strlen(yyvsp[0].tv_str); @@ -3343,61 +3380,61 @@ case 254: yyval.tv_str[l1 + 1 + l3] = '\0'; ; break;} -case 255: -#line 2009 "asn1p_y.y" +case 259: +#line 2031 "asn1p_y.y" { yyval.a_marker.flags = EM_NOMARK; yyval.a_marker.default_value = 0; ; break;} -case 256: -#line 2013 "asn1p_y.y" +case 260: +#line 2035 "asn1p_y.y" { yyval.a_marker = yyvsp[0].a_marker; ; break;} -case 257: -#line 2017 "asn1p_y.y" +case 261: +#line 2039 "asn1p_y.y" { yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT; yyval.a_marker.default_value = 0; ; break;} -case 258: -#line 2021 "asn1p_y.y" +case 262: +#line 2043 "asn1p_y.y" { yyval.a_marker.flags = EM_DEFAULT; yyval.a_marker.default_value = yyvsp[0].a_value; ; break;} -case 259: -#line 2044 "asn1p_y.y" +case 263: +#line 2066 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); ; break;} -case 260: -#line 2048 "asn1p_y.y" +case 264: +#line 2070 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; ; break;} -case 261: -#line 2054 "asn1p_y.y" +case 265: +#line 2076 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 262: -#line 2059 "asn1p_y.y" +case 266: +#line 2081 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 263: -#line 2066 "asn1p_y.y" +case 267: +#line 2088 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -3406,8 +3443,8 @@ case 263: yyval.a_expr->Identifier = yyvsp[0].tv_str; ; break;} -case 264: -#line 2073 "asn1p_y.y" +case 268: +#line 2095 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -3417,8 +3454,8 @@ case 264: yyval.a_expr->value = yyvsp[-1].a_value; ; break;} -case 265: -#line 2081 "asn1p_y.y" +case 269: +#line 2103 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -3428,8 +3465,8 @@ case 265: yyval.a_expr->value = yyvsp[-1].a_value; ; break;} -case 266: -#line 2089 "asn1p_y.y" +case 270: +#line 2111 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -3438,8 +3475,8 @@ case 266: yyval.a_expr->value = yyvsp[0].a_value; ; break;} -case 267: -#line 2096 "asn1p_y.y" +case 271: +#line 2118 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -3449,103 +3486,103 @@ case 267: yyval.a_expr->meta_type = AMT_VALUE; ; break;} -case 268: -#line 2107 "asn1p_y.y" +case 272: +#line 2129 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int); checkmem(yyval.a_value); ; break;} -case 269: -#line 2111 "asn1p_y.y" +case 273: +#line 2133 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int); checkmem(yyval.a_value); ; break;} -case 270: -#line 2142 "asn1p_y.y" +case 274: +#line 2164 "asn1p_y.y" { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ; break;} -case 271: -#line 2143 "asn1p_y.y" +case 275: +#line 2165 "asn1p_y.y" { yyval.a_tag = yyvsp[0].a_tag; ; break;} -case 272: -#line 2147 "asn1p_y.y" +case 276: +#line 2169 "asn1p_y.y" { yyval.a_tag = yyvsp[-1].a_tag; yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode; ; break;} -case 273: -#line 2154 "asn1p_y.y" +case 277: +#line 2176 "asn1p_y.y" { yyval.a_tag = yyvsp[-2].a_tag; yyval.a_tag.tag_value = yyvsp[-1].a_int; ; break;} -case 274: -#line 2160 "asn1p_y.y" +case 278: +#line 2182 "asn1p_y.y" { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ; break;} -case 275: -#line 2161 "asn1p_y.y" +case 279: +#line 2183 "asn1p_y.y" { yyval.a_tag.tag_class = TC_UNIVERSAL; ; break;} -case 276: -#line 2162 "asn1p_y.y" +case 280: +#line 2184 "asn1p_y.y" { yyval.a_tag.tag_class = TC_APPLICATION; ; break;} -case 277: -#line 2163 "asn1p_y.y" +case 281: +#line 2185 "asn1p_y.y" { yyval.a_tag.tag_class = TC_PRIVATE; ; break;} -case 278: -#line 2167 "asn1p_y.y" +case 282: +#line 2189 "asn1p_y.y" { yyval.a_tag.tag_mode = TM_DEFAULT; ; break;} -case 279: -#line 2168 "asn1p_y.y" +case 283: +#line 2190 "asn1p_y.y" { yyval.a_tag.tag_mode = TM_IMPLICIT; ; break;} -case 280: -#line 2169 "asn1p_y.y" +case 284: +#line 2191 "asn1p_y.y" { yyval.a_tag.tag_mode = TM_EXPLICIT; ; break;} -case 281: -#line 2173 "asn1p_y.y" -{ - checkmem(yyvsp[0].tv_str); - yyval.tv_str = yyvsp[0].tv_str; - ; - break;} -case 282: -#line 2177 "asn1p_y.y" -{ - checkmem(yyvsp[0].tv_str); - yyval.tv_str = yyvsp[0].tv_str; - ; - break;} -case 283: -#line 2185 "asn1p_y.y" -{ - checkmem(yyvsp[0].tv_str); - yyval.tv_str = yyvsp[0].tv_str; - ; - break;} -case 284: -#line 2192 "asn1p_y.y" -{ yyval.tv_str = 0; ; - break;} case 285: -#line 2193 "asn1p_y.y" +#line 2195 "asn1p_y.y" { + checkmem(yyvsp[0].tv_str); yyval.tv_str = yyvsp[0].tv_str; ; break;} case 286: #line 2199 "asn1p_y.y" +{ + checkmem(yyvsp[0].tv_str); + yyval.tv_str = yyvsp[0].tv_str; + ; + break;} +case 287: +#line 2207 "asn1p_y.y" +{ + checkmem(yyvsp[0].tv_str); + yyval.tv_str = yyvsp[0].tv_str; + ; + break;} +case 288: +#line 2214 "asn1p_y.y" +{ yyval.tv_str = 0; ; + break;} +case 289: +#line 2215 "asn1p_y.y" +{ + yyval.tv_str = yyvsp[0].tv_str; + ; + break;} +case 290: +#line 2221 "asn1p_y.y" { checkmem(yyvsp[0].tv_str); yyval.tv_str = yyvsp[0].tv_str; @@ -3773,7 +3810,7 @@ yyerrhandle: } return 1; } -#line 2205 "asn1p_y.y" +#line 2227 "asn1p_y.y" diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y index 597f77c5..f3131df6 100644 --- a/libasn1parser/asn1p_y.y +++ b/libasn1parser/asn1p_y.y @@ -272,8 +272,8 @@ static void _fixup_anonymous_identifier(asn1p_expr_t *expr); %type optIdentifier %type ParameterArgumentName %type ParameterArgumentList -%type Specialization -%type Specializations +%type ActualParameter +%type ActualParameterList %type AssignedIdentifier /* OID/DefinedValue */ %type ObjectIdentifier /* OID */ %type optObjectIdentifier /* Optional OID */ @@ -747,9 +747,9 @@ DefinedType: $$->meta_type = AMT_TYPEREF; } /* - * A parametrized assignment. + * A parameterized assignment. */ - | ComplexTypeReference '{' Specializations '}' { + | ComplexTypeReference '{' ActualParameterList '}' { $$ = asn1p_expr_new(yylineno); checkmem($$); $$->reference = $1; @@ -782,7 +782,7 @@ DataTypeReference: assert($$->meta_type == AMT_OBJECTCLASS); } /* - * Parametrized declaration: + * Parameterized declaration: * === EXAMPLE === * SIGNED { ToBeSigned } ::= SEQUENCE { * toBeSigned ToBeSigned, @@ -793,7 +793,12 @@ DataTypeReference: */ | TypeRefName '{' ParameterArgumentList '}' TOK_PPEQ Type { $$ = $6; - assert($$->Identifier == 0); + $$->Identifier = $1; + $$->lhs_params = $3; + } + /* Parameterized CLASS declaration */ + | TypeRefName '{' ParameterArgumentList '}' TOK_PPEQ ObjectClass { + $$ = $6; $$->Identifier = $1; $$->lhs_params = $3; } @@ -846,21 +851,29 @@ ParameterArgumentName: checkmem(ret == 0); $$.argument = $3; } + | BasicTypeId ':' TypeRefName { + int ret; + $$.governor = asn1p_ref_new(yylineno); + ret = asn1p_ref_add_component($$.governor, + ASN_EXPR_TYPE2STR($1), 1); + checkmem(ret == 0); + $$.argument = $3; + } ; -Specializations: - Specialization { +ActualParameterList: + ActualParameter { $$ = asn1p_expr_new(yylineno); checkmem($$); asn1p_expr_add($$, $1); } - | Specializations ',' Specialization { + | ActualParameterList ',' ActualParameter { $$ = $1; asn1p_expr_add($$, $3); } ; -Specialization: +ActualParameter: Type { $$ = $1; } @@ -883,10 +896,16 @@ Specialization: asn1p_ref_add_component(ref, $1, RLT_lowercase); $$->value = asn1p_value_fromref(ref, 0); } + | ValueSet { + $$ = asn1p_expr_new(yylineno); + $$->expr_type = A1TC_VALUESET; + $$->meta_type = AMT_VALUESET; + $$->constraints = $1; + } ; /* - | '{' Specialization '}' { + | '{' ActualParameter '}' { $$ = asn1p_expr_new(yylineno); checkmem($$); asn1p_expr_add($$, $2); @@ -1255,7 +1274,6 @@ TypeDeclarationSet: $$->expr_type = ASN_TYPE_ANY; $$->meta_type = AMT_TYPE; } - | TOK_INSTANCE TOK_OF ComplexTypeReference { $$ = asn1p_expr_new(yylineno); checkmem($$); @@ -1674,7 +1692,11 @@ SetOfConstraints: ; ElementSetSpecs: - ElementSetSpec { + TOK_ThreeDots { + $$ = asn1p_constraint_new(yylineno); + $$->type = ACT_EL_EXT; + } + | ElementSetSpec { $$ = $1; } | ElementSetSpec ',' TOK_ThreeDots { diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c index 4cab16ba..47cfb1f8 100644 --- a/libasn1print/asn1print.c +++ b/libasn1print/asn1print.c @@ -259,6 +259,8 @@ asn1print_value(asn1p_value_t *val, enum asn1print_flags flags) { } case ATV_REFERENCED: return asn1print_ref(val->value.reference, flags); + case ATV_VALUESET: + return asn1print_constraint(val->value.constraint, flags); case ATV_CHOICE_IDENTIFIER: printf("%s: ", val->value.choice_identifier.identifier); return asn1print_value(val->value.choice_identifier.value, flags); @@ -280,7 +282,7 @@ asn1print_constraint(asn1p_constraint_t *ct, enum asn1print_flags flags) { switch(ct->type) { case ACT_EL_TYPE: - asn1print_value(ct->value, flags); + asn1print_value(ct->containedSubtype, flags); break; case ACT_EL_VALUE: asn1print_value(ct->value, flags); @@ -583,6 +585,8 @@ asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1pri } printf(" OF"); break; + case A1TC_VALUESET: + break; default: { char *p = ASN_EXPR_TYPE2STR(tc->expr_type); @@ -599,7 +603,7 @@ asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1pri asn1print_ref(tc->reference, flags); } - if(tc->meta_type == AMT_VALUESET) + if(tc->meta_type == AMT_VALUESET && level == 0) printf(" ::="); /* diff --git a/tests/112-param-class-OK.asn1 b/tests/112-param-class-OK.asn1 new file mode 100644 index 00000000..d5512dfa --- /dev/null +++ b/tests/112-param-class-OK.asn1 @@ -0,0 +1,24 @@ + +-- OK: Everything is fine + +-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1) +-- .spelio.software.asn1c.test (9363.1.5.1) +-- .112 + +ModuleParameterizationClass + { iso org(3) dod(6) internet (1) private(4) enterprise(1) + spelio(9363) software(1) asn1c(5) test(1) 112 } + DEFINITIONS ::= +BEGIN + + PCLASS {Type, INTEGER:value, INTEGER:ValueSet} ::= CLASS { + &valueField1 Type, + &valueField2 INTEGER DEFAULT value, + &valueField3 INTEGER (ValueSet), + &ValueSetField INTEGER DEFAULT {ValueSet} + } WITH SYNTAX { + &valueField1, &valueField2, &valueField3, &ValueSetField } + + SCLASS ::= PCLASS {REAL, 111, {1 | 2 | 3}} + +END diff --git a/tests/112-param-class-OK.asn1.-EF b/tests/112-param-class-OK.asn1.-EF new file mode 100644 index 00000000..99223679 --- /dev/null +++ b/tests/112-param-class-OK.asn1.-EF @@ -0,0 +1,17 @@ +ModuleParameterizationClass { iso org(3) dod(6) internet(1) private(4) + enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 112 } +DEFINITIONS ::= +BEGIN + +PCLASS{Type, INTEGER:value, INTEGER:ValueSet} ::= CLASS { + &valueField1 Type, + &valueField2 INTEGER DEFAULT value, + &valueField3 INTEGER (ValueSet), + &ValueSetField INTEGER DEFAULT {ValueSet} +} WITH SYNTAX { + &valueField1, &valueField2, &valueField3, &ValueSetField } + + +SCLASS ::= PCLASS{ REAL, 111, {1 | 2 | 3}} + +END