From 9c2285abf3b32e66e3966c7c861a8e21065cc89e Mon Sep 17 00:00:00 2001 From: Lev Walkin <vlm@lionet.info> Date: Thu, 9 Mar 2006 08:49:26 +0000 Subject: [PATCH] parsing object classes more properly --- libasn1compiler/asn1compiler.c | 10 +- libasn1fix/asn1fix.c | 4 +- libasn1fix/asn1fix_class.c | 240 +--- libasn1fix/asn1fix_tags.c | 3 + libasn1fix/check_fixer.c | 4 +- libasn1parser/asn1p_expr.h | 28 +- libasn1parser/asn1p_y.c | 1876 +++++++++++++++++--------------- libasn1parser/asn1p_y.y | 158 ++- libasn1print/asn1print.c | 8 +- tests/34-class-OK.asn1.-EF | 4 +- 10 files changed, 1169 insertions(+), 1166 deletions(-) diff --git a/libasn1compiler/asn1compiler.c b/libasn1compiler/asn1compiler.c index e8e6739d..e38ce8d9 100644 --- a/libasn1compiler/asn1compiler.c +++ b/libasn1compiler/asn1compiler.c @@ -96,7 +96,8 @@ asn1c_compile_expr(arg_t *arg) { switch(expr->meta_type) { case AMT_PARAMTYPE: case AMT_OBJECT: - case AMT_OBJECTSET: + case AMT_OBJECTCLASS: + case AMT_OBJECTFIELD: case AMT_VALUE: case AMT_VALUESET: ret = 0; @@ -104,13 +105,6 @@ asn1c_compile_expr(arg_t *arg) { default: break; } - - switch(expr->expr_type) { - case A1TC_TYPEID: - ret = 0; /* TYPE-IDENTIFIER is a CLASS */ - default: - break; - } } if(ret == -1) { diff --git a/libasn1fix/asn1fix.c b/libasn1fix/asn1fix.c index 5ee73a87..44dbf0eb 100644 --- a/libasn1fix/asn1fix.c +++ b/libasn1fix/asn1fix.c @@ -433,6 +433,7 @@ asn1f_check_constraints(arg_t *arg) { static int asn1f_check_duplicate(arg_t *arg) { arg_t tmparg = *arg; + int rvalue = 0; /* * This is a linear scan in search of a similar type. @@ -478,11 +479,12 @@ asn1f_check_duplicate(arg_t *arg) { diff_files ? ")" : ""); if(critical) return -1; + RET2RVAL(1, rvalue); } if(tmparg.mod == arg->mod) break; } - return 0; + return rvalue; } static int diff --git a/libasn1fix/asn1fix_class.c b/libasn1fix/asn1fix_class.c index 3542e0cd..11acd8b4 100644 --- a/libasn1fix/asn1fix_class.c +++ b/libasn1fix/asn1fix_class.c @@ -1,38 +1,15 @@ #include "asn1fix_internal.h" -typedef enum field_category { - OFC_INVALID, /* Invalid object field category */ - OFC_TYPE, - OFC_FIXED_TYPE_VALUE, - OFC_VARIABLE_TYPE_VALUE, - OFC_FIXED_TYPE_VALUE_SET, - OFC_VARIABLE_TYPE_VALUE_SET, - OFC_INFORMATION_OBJECT, - OFC_INFORMATION_OBJECT_SET, -} field_category_e; - -typedef enum object_category { - OC_INVALID, - OC_OBJECT, - OC_OBJECTSET, -} object_category_e; - -static field_category_e asn1f_class_field_category(asn1p_expr_t *ofield); -static object_category_e asn1f_class_object_category(asn1p_expr_t *expr); -static asn1p_expr_t * -asn1f_class_dot_lookup(arg_t *arg, asn1p_expr_t *obj, asn1p_ref_t *ref); - asn1p_expr_t * asn1f_class_access(arg_t *arg, asn1p_module_t *mod, asn1p_ref_t *ref) { - asn1p_expr_t *obj; /* Information Object or Object Set */ - object_category_e obj_cat; /* Object category */ - //field_category_e field_cat; /* Field category */ - asn1p_expr_t *result; + asn1p_expr_t *ioclass; + asn1p_expr_t *classfield; + asn1p_expr_t *expr; asn1p_ref_t tmpref; assert(ref->comp_count > 1); - DEBUG("(%s) for line %d", asn1f_printable_reference(ref), ref->_lineno); + DEBUG("ClassAccess lookup (%s) for line %d", asn1f_printable_reference(ref), ref->_lineno); /* * Fetch the first part of the reference (OBJECT or ObjectSet). @@ -43,198 +20,47 @@ asn1f_class_access(arg_t *arg, asn1p_module_t *mod, asn1p_ref_t *ref) { tmpref = *ref; tmpref.comp_count = 1; - obj = asn1f_lookup_symbol(arg, mod, &tmpref); - if(obj == NULL) { + ioclass = asn1f_lookup_symbol(arg, mod, &tmpref); + if(ioclass == NULL) { errno = ESRCH; return NULL; } - /* - * Make sure the symbol lexical property (upper-case, lower-case) - * corresponds to the type of the expression returned by - * lookup_symbol(). - */ - obj_cat = asn1f_class_object_category(obj); - switch(obj_cat) { - case OC_OBJECT: - case OC_OBJECTSET: - if(ref->components[0].lex_type - == (obj_cat==OC_OBJECT) - ? RLT_CAPITALS - : RLT_Uppercase) - break; - /* Fall through */ - case OC_INVALID: - WARNING("Symbol \"%s\" is not compatible " - "with referenced expression \"%s\" at line %d", - ref->components[0].name, - obj->Identifier, obj->_lineno); - errno = EPERM; - return NULL; - } - - /* - * Find the specified field within the object. - */ - result = asn1f_class_dot_lookup(arg, obj, ref); - if(result == NULL) { + classfield = asn1f_lookup_child(ioclass, ref->components[1].name); + if(classfield == NULL) { + DEBUG("CLASS %s does not contain field %s", + ioclass->Identifier, ref->components[1].name); + errno = ESRCH; return NULL; } - //field_cat = asn1f_class_field_category(result); + assert(classfield->meta_type == AMT_OBJECTFIELD); - DEBUG("FILLME: %s", result->Identifier); + DEBUG("CLASS %s -> %s (%d)", ioclass->Identifier, + classfield->Identifier, classfield->expr_type); - return result; -} - -static object_category_e -asn1f_class_object_category(asn1p_expr_t *expr) { - - switch(expr->meta_type) { - case AMT_OBJECT: - return OC_OBJECT; - case AMT_OBJECTSET: - return OC_OBJECTSET; - case AMT_VALUESET: - if(expr->expr_type == A1TC_REFERENCE - && expr->reference - && expr->reference->comp_count == 1 - && expr->reference->components[0].lex_type == RLT_CAPITALS) - { - /* FIXME: use find_terminal_type instead! */ - return OC_OBJECTSET; + switch(classfield->expr_type) { + case A1TC_CLASSFIELD_TFS: + if(TQ_FIRST(&classfield->members)) { + /* Already have something */ + } else { + expr = asn1p_expr_new(classfield->_lineno); + expr->expr_type = ASN_TYPE_ANY; + expr->meta_type = AMT_TYPE; + asn1p_expr_add(classfield, expr); } + /* Fall through */ + case A1TC_CLASSFIELD_FTVFS: + expr = TQ_FIRST(&classfield->members); + assert(expr); + return expr; break; default: - break; - } - - return OC_INVALID; -} - -static field_category_e -asn1f_class_field_category(asn1p_expr_t *ofield) { - - assert(ofield); - - if(ofield->Identifier[0] != '&') { - assert(ofield->Identifier[0] == '&'); - return OFC_INVALID; - } - - if(isupper(ofield->Identifier[1])) { - if(ofield->reference) { - enum asn1p_ref_lex_type_e lex_type - = ofield->reference->components[0].lex_type; - - switch(lex_type) { - case RLT_CAPITALS: - return OFC_INFORMATION_OBJECT_SET; - case RLT_Uppercase: - return OFC_FIXED_TYPE_VALUE_SET; - case RLT_AmpUppercase: - return OFC_VARIABLE_TYPE_VALUE_SET; - default: - break; - } - } else { - if(ofield->expr_type == A1TC_CLASSFIELD) - return OFC_TYPE; - - switch(ofield->meta_type) { - case AMT_TYPE: - case AMT_TYPEREF: - return OFC_FIXED_TYPE_VALUE_SET; - default: - break; - } - - } - } else { - if(ofield->reference) { - enum asn1p_ref_lex_type_e lex_type - = ofield->reference->components[0].lex_type; - - switch(lex_type) { - case RLT_CAPITALS: - return OFC_INFORMATION_OBJECT; - case RLT_Uppercase: - return OFC_FIXED_TYPE_VALUE; - case RLT_AmpUppercase: - return OFC_VARIABLE_TYPE_VALUE; - default: - break; - } - } else { - switch(ofield->meta_type) { - case AMT_TYPE: - case AMT_TYPEREF: - return OFC_FIXED_TYPE_VALUE; - default: - break; - } - } - } - - return OFC_INVALID; -} - - -static asn1p_expr_t * -asn1f_class_dot_lookup(arg_t *arg, asn1p_expr_t *obj, asn1p_ref_t *ref) { - asn1p_expr_t *ofield = NULL; /* Information Object's Field */ - field_category_e field_cat; /* Field category */ - int comp; - - assert(ref->comp_count >= 2); - - for(comp = 1 /* sic! */; comp < ref->comp_count; comp++) { - int is_last_component = (comp + 1 == ref->comp_count); - char *comp_name = ref->components[comp].name; - - ofield = asn1f_lookup_child(obj, comp_name); - if(ofield == NULL) { - DEBUG("Cannot find field \"%s\" in \"%s\" at line %d", - ref->components[1].name, - obj->Identifier, - obj->_lineno); - errno = EPERM; - return NULL; - } - - /* - * Compute the category of the field of - * the information object class. - */ - field_cat = asn1f_class_field_category(ofield); - - switch(field_cat) { - case OFC_INVALID: - WARNING("Invalid field category of \"%s\" at line %d", - ofield->Identifier, ofield->_lineno); - errno = EPERM; - return NULL; - case OFC_TYPE: - case OFC_FIXED_TYPE_VALUE: - case OFC_VARIABLE_TYPE_VALUE: - case OFC_FIXED_TYPE_VALUE_SET: - case OFC_VARIABLE_TYPE_VALUE_SET: - if(!is_last_component) { - FATAL("Field name component \"%s\" at line %d " - "specifies non-dereferenceable thing", - comp_name, ref->_lineno); - errno = EPERM; - return NULL; - } - break; - case OFC_INFORMATION_OBJECT: - case OFC_INFORMATION_OBJECT_SET: - obj = ofield; - break; - } + FATAL("%s.%s: field type not yet supported. " + "Consider donation to the asn1c author.", + ioclass->Identifier, classfield->Identifier); + return NULL; } - assert(ofield); - return ofield; + return NULL; } diff --git a/libasn1fix/asn1fix_tags.c b/libasn1fix/asn1fix_tags.c index dfda4410..3215fff6 100644 --- a/libasn1fix/asn1fix_tags.c +++ b/libasn1fix/asn1fix_tags.c @@ -25,6 +25,9 @@ static int asn1f_fetch_tags_impl(arg_t *arg, struct asn1p_type_tag_s **tags, int count, int skip, enum asn1f_aft_flags_e flags) { asn1p_expr_t *expr = arg->expr; + DEBUG("Fetching tag from %s: meta %d, type %s", expr->Identifier, + expr->meta_type, expr->expr_type); + /* If this type is tagged, add this tag first */ if(expr->tag.tag_class != TC_NOCLASS) ADD_TAG(skip, expr->tag); diff --git a/libasn1fix/check_fixer.c b/libasn1fix/check_fixer.c index a64d9bd1..c4e3f995 100644 --- a/libasn1fix/check_fixer.c +++ b/libasn1fix/check_fixer.c @@ -185,8 +185,10 @@ check(const char *fname, std_asn = asn1p_parse_file("../skeletons/standard-modules/ASN1C-UsefulInformationObjectClasses.asn1", A1P_NOFLAGS); if(std_asn) { asn1p_module_t *mod; - while((mod = TQ_REMOVE(&(std_asn->modules), mod_next))) + while((mod = TQ_REMOVE(&(std_asn->modules), mod_next))) { + mod->_tags |= MT_STANDARD_MODULE; TQ_ADD(&(asn->modules), mod, mod_next); + } asn1p_free(std_asn); } } diff --git a/libasn1parser/asn1p_expr.h b/libasn1parser/asn1p_expr.h index c44e1032..6bcaa589 100644 --- a/libasn1parser/asn1p_expr.h +++ b/libasn1parser/asn1p_expr.h @@ -14,8 +14,8 @@ typedef enum asn1p_expr_meta { AMT_PARAMTYPE, /* Type3{Parameter} ::= SET { ... } */ AMT_VALUE, /* value1 Type1 ::= 1 */ AMT_VALUESET, /* ValueSet Type1 ::= { value1 } */ - AMT_OBJECT, /* FUNCTION ::= CLASS {...} */ - AMT_OBJECTSET, /* Functions FUNCTION ::= {...} */ + AMT_OBJECT, /* object CLASS ::= {...} */ + AMT_OBJECTCLASS, /* FUNCTION ::= CLASS {...} */ AMT_OBJECTFIELD, /* ... */ AMT_EXPR_META_MAX } asn1p_expr_meta_e; @@ -38,14 +38,24 @@ typedef enum asn1p_expr_type { A1TC_PARAMETRIZED, /* A parametrized type declaration */ A1TC_VALUESET, /* Value set definition */ A1TC_CLASSDEF, /* Information Object Class */ - A1TC_CLASSFIELD, /* Information Object Class field */ A1TC_INSTANCE, /* Instance of Object Class */ - A1TC_TYPEID, /* Type identifier */ + + /* + * ASN.1 Class field types + */ +#define ASN_CLASSFIELD_MASK 0x10 /* Every class field type */ + A1TC_CLASSFIELD_TFS = ASN_CLASSFIELD_MASK, /* TypeFieldSpec */ + A1TC_CLASSFIELD_FTVFS, /* FixedTypeValueFieldSpec */ + A1TC_CLASSFIELD_VTVFS, /* VariableTypeValueFieldSpec */ + A1TC_CLASSFIELD_FTVSFS, /* FixedTypeValueSetFieldSpec */ + A1TC_CLASSFIELD_VTVSFS, /* VariableTypeValueSetFieldSpec */ + A1TC_CLASSFIELD_OFS, /* ObjectFieldSpec */ + A1TC_CLASSFIELD_OSFS, /* ObjectSetFieldSpec */ /* * ASN.1 Constructed types */ -#define ASN_CONSTR_MASK 0x10 /* Every constructed type */ +#define ASN_CONSTR_MASK 0x20 /* Every constructed type */ ASN_CONSTR_SEQUENCE = ASN_CONSTR_MASK, /* SEQUENCE */ ASN_CONSTR_CHOICE, /* CHOICE */ ASN_CONSTR_SET, /* SET */ @@ -55,7 +65,7 @@ typedef enum asn1p_expr_type { /* * ASN.1 Basic types */ -#define ASN_BASIC_MASK 0x20 /* Every basic type */ +#define ASN_BASIC_MASK 0x40 /* Every basic type */ ASN_TYPE_ANY = ASN_BASIC_MASK, /* ANY (deprecated) */ ASN_BASIC_BOOLEAN, ASN_BASIC_NULL, @@ -75,9 +85,9 @@ typedef enum asn1p_expr_type { /* * ASN.1 String types */ -#define ASN_STRING_KM_MASK 0x40 /* Known multiplier */ -#define ASN_STRING_NKM_MASK 0x80 /* Not a known multiplier */ -#define ASN_STRING_MASK 0xC0 /* Every restricted string type */ +#define ASN_STRING_KM_MASK 0x100 /* Known multiplier */ +#define ASN_STRING_NKM_MASK 0x200 /* Not a known multiplier */ +#define ASN_STRING_MASK 0x300 /* Every restricted string type */ ASN_STRING_IA5String = ASN_STRING_KM_MASK, ASN_STRING_PrintableString, ASN_STRING_VisibleString, diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c index 058a7c84..024f520e 100644 --- a/libasn1parser/asn1p_y.c +++ b/libasn1parser/asn1p_y.c @@ -221,11 +221,11 @@ typedef union { -#define YYFINAL 431 +#define YYFINAL 445 #define YYFLAG -32768 #define YYNTBASE 118 -#define YYTRANSLATE(x) ((unsigned)(x) <= 356 ? yytranslate[x] : 223) +#define YYTRANSLATE(x) ((unsigned)(x) <= 356 ? yytranslate[x] : 225) static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -273,144 +273,148 @@ static const short yyprhs[] = { 0, 57, 60, 63, 64, 66, 68, 71, 73, 75, 77, 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, 148, 155, 157, 159, 164, - 168, 172, 179, 181, 185, 187, 191, 195, 199, 201, - 205, 207, 209, 210, 212, 214, 218, 222, 225, 229, - 231, 233, 237, 240, 242, 244, 250, 251, 253, 255, - 259, 262, 267, 272, 273, 275, 276, 283, 285, 288, - 290, 292, 294, 298, 302, 306, 307, 310, 312, 317, - 322, 327, 334, 341, 343, 348, 353, 355, 359, 361, - 365, 369, 373, 375, 379, 381, 385, 387, 389, 391, - 393, 398, 402, 403, 407, 409, 411, 413, 415, 417, - 419, 421, 423, 425, 429, 431, 433, 435, 437, 440, - 442, 444, 446, 448, 451, 454, 456, 458, 461, 464, - 466, 468, 470, 472, 474, 477, 479, 482, 484, 486, - 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, - 508, 510, 512, 514, 516, 518, 520, 521, 523, 525, - 530, 534, 539, 541, 545, 551, 553, 557, 561, 565, - 569, 574, 578, 580, 582, 586, 590, 594, 598, 600, - 602, 603, 609, 611, 614, 617, 621, 623, 625, 627, - 629, 631, 633, 635, 637, 641, 647, 649, 653, 655, - 659, 660, 662, 664, 666, 668, 670, 672, 676, 681, - 683, 687, 690, 694, 696, 700, 701, 703, 705, 708, - 711, 715, 717, 721, 723, 728, 733, 735, 737, 739, - 741, 742, 744, 747, 752, 753, 755, 757, 759, 760, - 762, 764, 766, 768, 770, 771, 773 + 135, 139, 141, 145, 147, 148, 155, 157, 159, 163, + 167, 174, 176, 180, 182, 186, 190, 194, 196, 200, + 202, 204, 205, 207, 209, 213, 217, 220, 224, 226, + 228, 232, 235, 237, 239, 245, 246, 248, 250, 254, + 257, 262, 266, 270, 274, 278, 282, 283, 285, 286, + 293, 295, 298, 300, 302, 304, 308, 312, 316, 317, + 320, 322, 327, 332, 337, 344, 351, 353, 358, 363, + 365, 369, 371, 375, 379, 383, 385, 389, 391, 395, + 397, 399, 401, 403, 405, 409, 413, 415, 419, 424, + 428, 429, 433, 435, 437, 439, 441, 443, 445, 447, + 449, 451, 455, 457, 459, 461, 463, 466, 468, 470, + 472, 474, 477, 480, 482, 484, 487, 490, 492, 494, + 496, 498, 500, 503, 505, 508, 510, 512, 514, 516, + 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, + 538, 540, 542, 544, 546, 547, 549, 551, 556, 560, + 565, 567, 571, 577, 579, 583, 587, 591, 595, 600, + 604, 606, 608, 612, 616, 620, 624, 626, 628, 629, + 635, 637, 640, 643, 647, 649, 651, 653, 655, 657, + 659, 661, 663, 667, 673, 675, 679, 681, 685, 686, + 688, 690, 692, 694, 696, 698, 702, 707, 709, 713, + 716, 720, 722, 726, 727, 729, 731, 734, 737, 741, + 743, 747, 749, 754, 759, 761, 763, 765, 767, 768, + 770, 773, 778, 779, 781, 783, 785, 786, 788, 790, + 792, 794, 796, 797, 799 }; static const short yyrhs[] = { 119, - 0, 120, 0, 119, 120, 0, 219, 121, 36, 125, + 0, 120, 0, 119, 120, 0, 221, 121, 36, 125, 3, 23, 128, 41, 0, 0, 122, 0, 105, 123, 106, 0, 105, 106, 0, 124, 0, 123, 124, 0, - 222, 0, 222, 107, 9, 108, 0, 9, 0, 0, + 224, 0, 224, 107, 9, 108, 0, 9, 0, 0, 126, 0, 127, 0, 126, 127, 0, 43, 86, 0, 54, 86, 0, 22, 86, 0, 45, 55, 0, 14, 59, 0, 0, 129, 0, 130, 0, 129, 130, 0, - 132, 0, 138, 0, 144, 0, 173, 0, 141, 0, - 0, 40, 14, 131, 0, 182, 0, 56, 133, 109, + 132, 0, 138, 0, 144, 0, 175, 0, 141, 0, + 0, 40, 14, 131, 0, 184, 0, 56, 133, 109, 0, 56, 48, 0, 135, 0, 133, 135, 0, 0, - 122, 0, 136, 48, 219, 134, 0, 137, 0, 136, - 110, 137, 0, 219, 0, 219, 105, 106, 0, 222, + 122, 0, 136, 48, 221, 134, 0, 137, 0, 136, + 110, 137, 0, 221, 0, 221, 105, 106, 0, 224, 0, 44, 139, 109, 0, 44, 19, 109, 0, 44, - 109, 0, 140, 0, 139, 110, 140, 0, 219, 0, - 219, 105, 106, 0, 222, 0, 0, 219, 143, 3, - 105, 142, 178, 0, 168, 0, 179, 0, 219, 3, - 214, 89, 0, 219, 3, 164, 0, 219, 3, 154, - 0, 219, 105, 145, 106, 3, 164, 0, 146, 0, - 145, 110, 146, 0, 219, 0, 219, 111, 222, 0, - 219, 111, 219, 0, 179, 111, 222, 0, 148, 0, - 147, 110, 148, 0, 164, 0, 222, 0, 0, 150, - 0, 151, 0, 150, 110, 151, 0, 222, 164, 208, - 0, 164, 208, 0, 32, 70, 164, 0, 163, 0, - 153, 0, 152, 110, 153, 0, 222, 164, 0, 163, - 0, 164, 0, 30, 105, 156, 106, 158, 0, 0, - 90, 0, 157, 0, 156, 110, 157, 0, 171, 208, - 0, 171, 164, 155, 208, 0, 171, 171, 155, 208, + 109, 0, 140, 0, 139, 110, 140, 0, 221, 0, + 221, 105, 106, 0, 224, 0, 0, 221, 143, 3, + 105, 142, 180, 0, 168, 0, 181, 0, 221, 3, + 164, 0, 221, 3, 154, 0, 221, 105, 145, 106, + 3, 164, 0, 146, 0, 145, 110, 146, 0, 221, + 0, 221, 111, 224, 0, 221, 111, 221, 0, 181, + 111, 224, 0, 148, 0, 147, 110, 148, 0, 164, + 0, 224, 0, 0, 150, 0, 151, 0, 150, 110, + 151, 0, 224, 164, 210, 0, 164, 210, 0, 32, + 70, 164, 0, 163, 0, 153, 0, 152, 110, 153, + 0, 224, 164, 0, 163, 0, 164, 0, 30, 105, + 156, 106, 158, 0, 0, 90, 0, 157, 0, 156, + 110, 157, 0, 15, 210, 0, 16, 164, 155, 210, + 0, 16, 173, 210, 0, 15, 173, 210, 0, 16, + 174, 210, 0, 15, 174, 210, 0, 15, 164, 210, 0, 0, 159, 0, 0, 97, 84, 105, 160, 161, 106, 0, 162, 0, 161, 162, 0, 4, 0, 171, - 0, 104, 0, 104, 112, 176, 0, 104, 112, 213, - 0, 214, 166, 186, 0, 0, 165, 167, 0, 181, + 0, 104, 0, 104, 112, 178, 0, 104, 112, 215, + 0, 216, 166, 188, 0, 0, 165, 167, 0, 183, 0, 29, 105, 152, 106, 0, 80, 105, 149, 106, - 0, 81, 105, 149, 106, 0, 80, 186, 70, 221, - 214, 166, 0, 81, 186, 70, 221, 214, 166, 0, - 20, 0, 20, 37, 27, 222, 0, 219, 105, 147, + 0, 81, 105, 149, 106, 0, 80, 188, 70, 223, + 216, 166, 0, 81, 188, 70, 223, 216, 166, 0, + 20, 0, 20, 37, 27, 224, 0, 221, 105, 147, 106, 0, 168, 0, 58, 70, 168, 0, 13, 0, - 13, 113, 219, 0, 220, 113, 219, 0, 13, 113, - 222, 0, 220, 0, 220, 113, 169, 0, 170, 0, + 13, 113, 221, 0, 222, 113, 221, 0, 13, 113, + 224, 0, 222, 0, 222, 113, 169, 0, 170, 0, 169, 113, 170, 0, 172, 0, 172, 0, 15, 0, - 16, 0, 222, 143, 3, 174, 0, 222, 111, 174, - 0, 0, 105, 175, 178, 0, 65, 0, 47, 0, - 88, 0, 5, 0, 7, 0, 177, 0, 213, 0, - 176, 0, 222, 0, 219, 113, 222, 0, 6, 0, - 10, 0, 11, 0, 4, 0, 178, 4, 0, 26, - 0, 65, 0, 78, 0, 180, 0, 69, 83, 0, - 67, 53, 0, 79, 0, 46, 0, 38, 73, 0, - 28, 83, 0, 93, 0, 49, 0, 182, 0, 60, - 0, 42, 0, 24, 83, 0, 179, 0, 180, 210, - 0, 25, 0, 50, 0, 51, 0, 52, 0, 61, - 0, 66, 0, 76, 0, 85, 0, 87, 0, 92, - 0, 94, 0, 95, 0, 96, 0, 68, 0, 101, - 0, 102, 0, 99, 0, 100, 0, 98, 0, 0, - 187, 0, 188, 0, 82, 107, 189, 108, 0, 107, - 189, 108, 0, 188, 107, 189, 108, 0, 190, 0, - 190, 110, 104, 0, 190, 110, 104, 110, 190, 0, - 191, 0, 19, 98, 191, 0, 190, 183, 191, 0, - 190, 184, 191, 0, 191, 185, 191, 0, 194, 107, - 189, 108, 0, 107, 189, 108, 0, 195, 0, 196, - 0, 195, 193, 195, 0, 63, 193, 195, 0, 195, - 193, 62, 0, 63, 193, 62, 0, 202, 0, 197, - 0, 0, 33, 27, 105, 192, 178, 0, 103, 0, - 103, 114, 0, 114, 103, 0, 114, 103, 114, 0, - 82, 0, 48, 0, 47, 0, 88, 0, 213, 0, - 177, 0, 222, 0, 219, 0, 97, 31, 188, 0, - 97, 32, 105, 198, 106, 0, 199, 0, 198, 110, - 199, 0, 104, 0, 222, 186, 200, 0, 0, 201, - 0, 75, 0, 17, 0, 71, 0, 203, 0, 204, - 0, 105, 219, 106, 0, 203, 105, 205, 106, 0, - 206, 0, 205, 110, 206, 0, 115, 207, 0, 115, - 113, 207, 0, 222, 0, 207, 113, 222, 0, 0, - 209, 0, 71, 0, 35, 174, 0, 105, 106, 0, - 105, 211, 106, 0, 212, 0, 211, 110, 212, 0, - 222, 0, 222, 107, 213, 108, 0, 222, 107, 176, - 108, 0, 213, 0, 104, 0, 9, 0, 12, 0, - 0, 215, 0, 216, 218, 0, 116, 217, 9, 117, - 0, 0, 91, 0, 21, 0, 77, 0, 0, 54, - 0, 43, 0, 13, 0, 14, 0, 14, 0, 0, - 222, 0, 8, 0 + 16, 0, 15, 0, 173, 113, 15, 0, 173, 113, + 16, 0, 14, 0, 221, 113, 14, 0, 224, 143, + 3, 176, 0, 224, 111, 176, 0, 0, 105, 177, + 180, 0, 65, 0, 47, 0, 88, 0, 5, 0, + 7, 0, 179, 0, 215, 0, 178, 0, 224, 0, + 221, 113, 224, 0, 6, 0, 10, 0, 11, 0, + 4, 0, 180, 4, 0, 26, 0, 65, 0, 78, + 0, 182, 0, 69, 83, 0, 67, 53, 0, 79, + 0, 46, 0, 38, 73, 0, 28, 83, 0, 93, + 0, 49, 0, 184, 0, 60, 0, 42, 0, 24, + 83, 0, 181, 0, 182, 212, 0, 25, 0, 50, + 0, 51, 0, 52, 0, 61, 0, 66, 0, 76, + 0, 85, 0, 87, 0, 92, 0, 94, 0, 95, + 0, 96, 0, 68, 0, 101, 0, 102, 0, 99, + 0, 100, 0, 98, 0, 0, 189, 0, 190, 0, + 82, 107, 191, 108, 0, 107, 191, 108, 0, 190, + 107, 191, 108, 0, 192, 0, 192, 110, 104, 0, + 192, 110, 104, 110, 192, 0, 193, 0, 19, 98, + 193, 0, 192, 185, 193, 0, 192, 186, 193, 0, + 193, 187, 193, 0, 196, 107, 191, 108, 0, 107, + 191, 108, 0, 197, 0, 198, 0, 197, 195, 197, + 0, 63, 195, 197, 0, 197, 195, 62, 0, 63, + 195, 62, 0, 204, 0, 199, 0, 0, 33, 27, + 105, 194, 180, 0, 103, 0, 103, 114, 0, 114, + 103, 0, 114, 103, 114, 0, 82, 0, 48, 0, + 47, 0, 88, 0, 215, 0, 179, 0, 224, 0, + 221, 0, 97, 31, 190, 0, 97, 32, 105, 200, + 106, 0, 201, 0, 200, 110, 201, 0, 104, 0, + 224, 188, 202, 0, 0, 203, 0, 75, 0, 17, + 0, 71, 0, 205, 0, 206, 0, 105, 221, 106, + 0, 205, 105, 207, 106, 0, 208, 0, 207, 110, + 208, 0, 115, 209, 0, 115, 113, 209, 0, 224, + 0, 209, 113, 224, 0, 0, 211, 0, 71, 0, + 35, 176, 0, 105, 106, 0, 105, 213, 106, 0, + 214, 0, 213, 110, 214, 0, 224, 0, 224, 107, + 215, 108, 0, 224, 107, 178, 108, 0, 215, 0, + 104, 0, 9, 0, 12, 0, 0, 217, 0, 218, + 220, 0, 116, 219, 9, 117, 0, 0, 91, 0, + 21, 0, 77, 0, 0, 54, 0, 43, 0, 13, + 0, 14, 0, 14, 0, 0, 224, 0, 8, 0 }; #endif #if YYDEBUG != 0 static const short yyrline[] = { 0, - 320, 326, 332, 348, 373, 375, 378, 382, 387, 394, - 402, 407, 411, 420, 422, 430, 434, 442, 446, 449, - 452, 456, 476, 478, 486, 490, 522, 526, 535, 542, - 555, 562, 564, 576, 588, 599, 604, 610, 616, 618, - 621, 632, 638, 644, 651, 657, 665, 669, 672, 679, - 685, 691, 698, 704, 713, 715, 724, 732, 746, 758, - 764, 780, 789, 799, 809, 814, 821, 828, 838, 844, - 850, 854, 877, 879, 881, 887, 893, 901, 907, 914, - 919, 925, 931, 937, 940, 946, 956, 958, 961, 969, - 975, 984, 990, 1007, 1009, 1014, 1018, 1023, 1028, 1034, - 1038, 1049, 1058, 1067, 1078, 1100, 1107, 1126, 1130, 1136, - 1142, 1148, 1158, 1168, 1174, 1188, 1212, 1219, 1233, 1242, - 1252, 1262, 1272, 1280, 1301, 1310, 1319, 1320, 1322, 1329, - 1341, 1351, 1359, 1359, 1364, 1369, 1374, 1379, 1383, 1387, - 1390, 1393, 1398, 1410, 1427, 1432, 1437, 1470, 1480, 1494, - 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, - 1506, 1507, 1513, 1515, 1516, 1519, 1526, 1538, 1540, 1544, - 1548, 1549, 1550, 1551, 1552, 1556, 1557, 1558, 1559, 1563, - 1564, 1571, 1571, 1572, 1572, 1573, 1575, 1577, 1582, 1586, - 1595, 1599, 1604, 1608, 1614, 1624, 1628, 1631, 1634, 1637, - 1642, 1651, 1659, 1665, 1671, 1678, 1686, 1694, 1703, 1706, - 1709, 1710, 1720, 1722, 1723, 1724, 1727, 1731, 1736, 1742, - 1747, 1750, 1753, 1766, 1780, 1784, 1789, 1793, 1798, 1805, - 1818, 1820, 1823, 1827, 1830, 1835, 1839, 1847, 1862, 1868, - 1875, 1888, 1900, 1915, 1919, 1936, 1941, 1944, 1949, 1971, - 1976, 1981, 1987, 1993, 2001, 2009, 2017, 2024, 2034, 2039, - 2069, 2071, 2074, 2081, 2087, 2089, 2090, 2091, 2094, 2096, - 2097, 2100, 2105, 2112, 2119, 2121, 2126 + 322, 328, 334, 350, 375, 377, 380, 384, 389, 396, + 404, 409, 413, 422, 424, 432, 436, 444, 448, 451, + 454, 458, 478, 480, 488, 492, 524, 528, 537, 544, + 557, 564, 566, 578, 590, 601, 606, 612, 618, 620, + 623, 634, 640, 646, 653, 659, 667, 671, 674, 681, + 687, 693, 700, 706, 715, 717, 726, 734, 748, 758, + 774, 783, 793, 803, 808, 815, 822, 832, 838, 844, + 848, 871, 873, 875, 881, 887, 895, 901, 908, 913, + 919, 925, 931, 934, 940, 950, 952, 955, 963, 970, + 983, 994, 1004, 1014, 1025, 1036, 1062, 1064, 1069, 1073, + 1078, 1083, 1089, 1093, 1104, 1113, 1122, 1133, 1155, 1162, + 1181, 1185, 1191, 1197, 1203, 1213, 1223, 1229, 1243, 1267, + 1274, 1288, 1297, 1307, 1317, 1327, 1335, 1356, 1365, 1374, + 1375, 1377, 1384, 1391, 1397, 1401, 1407, 1412, 1425, 1435, + 1443, 1443, 1448, 1453, 1458, 1463, 1467, 1471, 1474, 1477, + 1482, 1494, 1511, 1516, 1521, 1554, 1564, 1578, 1580, 1581, + 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, + 1597, 1599, 1600, 1603, 1610, 1622, 1624, 1628, 1632, 1633, + 1634, 1635, 1636, 1640, 1641, 1642, 1643, 1647, 1648, 1655, + 1655, 1656, 1656, 1657, 1659, 1661, 1666, 1670, 1679, 1683, + 1688, 1692, 1698, 1708, 1712, 1715, 1718, 1721, 1726, 1735, + 1743, 1749, 1755, 1762, 1770, 1778, 1787, 1790, 1793, 1794, + 1804, 1806, 1807, 1808, 1811, 1815, 1820, 1826, 1831, 1834, + 1837, 1850, 1864, 1868, 1873, 1877, 1882, 1889, 1902, 1904, + 1907, 1911, 1914, 1919, 1923, 1931, 1946, 1952, 1959, 1972, + 1984, 1999, 2003, 2020, 2025, 2028, 2033, 2055, 2060, 2065, + 2071, 2077, 2085, 2093, 2101, 2108, 2118, 2123, 2153, 2155, + 2158, 2165, 2171, 2173, 2174, 2175, 2178, 2180, 2181, 2184, + 2189, 2196, 2203, 2205, 2210 }; #endif @@ -446,21 +450,21 @@ static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ", "ExportsElement","ValueSetDefinition","@2","DefinedTypeRef","DataTypeReference", "ParameterArgumentList","ParameterArgumentName","ActualParameterList","ActualParameter", "optComponentTypeLists","ComponentTypeLists","ComponentType","AlternativeTypeLists", -"AlternativeType","ClassDeclaration","optUnique","ClassFieldList","ClassField", -"optWithSyntax","WithSyntax","@3","WithSyntaxFormat","WithSyntaxFormatToken", -"ExtensionAndException","Type","NSTD_IndirectMarker","TypeDeclaration","TypeDeclarationSet", -"ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement", -"ClassFieldIdentifier","ClassFieldName","ValueDefinition","Value","@4","DefinedValue", -"RestrictedCharacterStringValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible", -"BasicType","BasicString","Union","Intersection","Except","optConstraints","Constraints", -"SetOfConstraints","ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement", -"@5","ConstraintRangeSpec","ConstraintSpec","SingleValue","ContainedSubtype", -"InnerTypeConstraint","WithComponentsList","WithComponentsElement","optPresenceConstraint", -"PresenceConstraint","TableConstraint","SimpleTableConstraint","ComponentRelationConstraint", -"AtNotationList","AtNotationElement","ComponentIdList","optMarker","Marker", -"UniverationDefinition","UniverationList","UniverationElement","SignedNumber", -"optTag","Tag","TagTypeValue","TagClass","TagPlicit","TypeRefName","ObjectClassReference", -"optIdentifier","Identifier", NULL +"AlternativeType","ObjectClass","optUnique","FieldSpec","ClassField","optWithSyntax", +"WithSyntax","@3","WithSyntaxFormat","WithSyntaxFormatToken","ExtensionAndException", +"Type","NSTD_IndirectMarker","TypeDeclaration","TypeDeclarationSet","ComplexTypeReference", +"ComplexTypeReferenceAmpList","ComplexTypeReferenceElement","ClassFieldIdentifier", +"ClassFieldName","FieldName","DefinedObjectClass","ValueDefinition","Value", +"@4","DefinedValue","RestrictedCharacterStringValue","Opaque","BasicTypeId", +"BasicTypeId_UniverationCompatible","BasicType","BasicString","Union","Intersection", +"Except","optConstraints","Constraints","SetOfConstraints","ElementSetSpecs", +"ElementSetSpec","ConstraintSubtypeElement","@5","ConstraintRangeSpec","ConstraintSpec", +"SingleValue","ContainedSubtype","InnerTypeConstraint","WithComponentsList", +"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint", +"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement", +"ComponentIdList","optMarker","Marker","UniverationDefinition","UniverationList", +"UniverationElement","SignedNumber","optTag","Tag","TagTypeValue","TagClass", +"TagPlicit","TypeRefName","ObjectClassReference","optIdentifier","Identifier", NULL }; #endif @@ -471,28 +475,29 @@ static const short yyr1[] = { 0, 130, 131, 130, 130, 132, 132, 133, 133, 134, 134, 135, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 140, 140, 140, 142, 141, 143, 143, 144, 144, - 144, 144, 145, 145, 146, 146, 146, 146, 147, 147, - 148, 148, 149, 149, 150, 150, 151, 151, 151, 151, - 152, 152, 153, 153, 153, 154, 155, 155, 156, 156, - 157, 157, 157, 158, 158, 160, 159, 161, 161, 162, - 162, 163, 163, 163, 164, 165, 166, 167, 167, 167, - 167, 167, 167, 167, 167, 167, 167, 167, 168, 168, - 168, 168, 168, 168, 169, 169, 170, 171, 172, 172, - 173, 174, 175, 174, 174, 174, 174, 174, 174, 174, - 174, 174, 176, 176, 177, 177, 177, 178, 178, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 180, 180, 180, 181, 181, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, - 182, 183, 183, 184, 184, 185, 186, 186, 187, 187, - 188, 188, 189, 189, 189, 190, 190, 190, 190, 190, - 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, - 192, 191, 193, 193, 193, 193, 194, 194, 195, 195, - 195, 195, 195, 196, 197, 197, 198, 198, 199, 199, - 200, 200, 201, 201, 201, 202, 202, 203, 204, 205, - 205, 206, 206, 207, 207, 208, 208, 209, 209, 210, - 210, 211, 211, 212, 212, 212, 212, 212, 213, 213, - 214, 214, 215, 216, 217, 217, 217, 217, 218, 218, - 218, 219, 219, 220, 221, 221, 222 + 144, 145, 145, 146, 146, 146, 146, 147, 147, 148, + 148, 149, 149, 150, 150, 151, 151, 151, 151, 152, + 152, 153, 153, 153, 154, 155, 155, 156, 156, 157, + 157, 157, 157, 157, 157, 157, 158, 158, 160, 159, + 161, 161, 162, 162, 163, 163, 163, 164, 165, 166, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 168, 168, 168, 168, 168, 168, 169, 169, 170, + 171, 172, 172, 173, 173, 173, 174, 174, 175, 176, + 177, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 178, 178, 179, 179, 179, 180, 180, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 182, 182, 182, 183, 183, 184, 184, 184, 184, 184, + 184, 184, 184, 184, 184, 184, 184, 184, 184, 185, + 185, 186, 186, 187, 188, 188, 189, 189, 190, 190, + 191, 191, 191, 192, 192, 192, 192, 192, 193, 193, + 193, 193, 193, 193, 193, 193, 193, 193, 194, 193, + 195, 195, 195, 195, 196, 196, 197, 197, 197, 197, + 197, 198, 199, 199, 200, 200, 201, 201, 202, 202, + 203, 203, 203, 204, 204, 205, 206, 207, 207, 208, + 208, 209, 209, 210, 210, 211, 211, 212, 212, 213, + 213, 214, 214, 214, 214, 214, 215, 215, 216, 216, + 217, 218, 219, 219, 219, 219, 220, 220, 220, 221, + 221, 222, 223, 223, 224 }; static const short yyr2[] = { 0, @@ -501,216 +506,221 @@ static const short yyr2[] = { 0, 2, 2, 0, 1, 1, 2, 1, 1, 1, 1, 1, 0, 3, 1, 3, 2, 1, 2, 0, 1, 4, 1, 3, 1, 3, 1, 3, 3, 2, 1, - 3, 1, 3, 1, 0, 6, 1, 1, 4, 3, - 3, 6, 1, 3, 1, 3, 3, 3, 1, 3, - 1, 1, 0, 1, 1, 3, 3, 2, 3, 1, - 1, 3, 2, 1, 1, 5, 0, 1, 1, 3, - 2, 4, 4, 0, 1, 0, 6, 1, 2, 1, - 1, 1, 3, 3, 3, 0, 2, 1, 4, 4, - 4, 6, 6, 1, 4, 4, 1, 3, 1, 3, - 3, 3, 1, 3, 1, 3, 1, 1, 1, 1, - 4, 3, 0, 3, 1, 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, + 3, 1, 3, 1, 0, 6, 1, 1, 3, 3, + 6, 1, 3, 1, 3, 3, 3, 1, 3, 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, 3, 3, 0, 2, + 1, 4, 4, 4, 6, 6, 1, 4, 4, 1, + 3, 1, 3, 3, 3, 1, 3, 1, 3, 1, + 1, 1, 1, 1, 3, 3, 1, 3, 4, 3, + 0, 3, 1, 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, 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, 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 }; static const short yydefact[] = { 0, - 272, 273, 1, 2, 5, 3, 0, 0, 6, 277, + 280, 281, 1, 2, 5, 3, 0, 0, 6, 285, 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, 168, 0, 0, - 169, 170, 171, 0, 172, 173, 181, 174, 175, 176, - 177, 178, 179, 180, 0, 24, 25, 27, 28, 31, + 18, 21, 19, 0, 17, 12, 23, 176, 0, 0, + 177, 178, 179, 0, 180, 181, 189, 182, 183, 184, + 185, 186, 187, 188, 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, 261, 119, 274, 0, 150, 0, 0, 164, 157, - 161, 163, 151, 0, 0, 152, 156, 160, 0, 0, - 57, 58, 153, 162, 123, 0, 33, 48, 47, 0, - 0, 35, 38, 0, 0, 0, 0, 265, 61, 60, - 106, 262, 269, 0, 165, 159, 158, 155, 154, 0, - 63, 0, 65, 0, 0, 0, 51, 53, 39, 43, - 45, 0, 267, 268, 266, 0, 59, 0, 187, 271, - 270, 263, 120, 122, 0, 0, 0, 0, 55, 129, - 130, 124, 125, 127, 121, 138, 145, 139, 259, 146, - 147, 260, 136, 135, 137, 133, 131, 142, 140, 141, - 0, 143, 40, 41, 0, 89, 261, 128, 0, 119, - 274, 114, 0, 0, 187, 187, 107, 117, 166, 153, - 108, 0, 0, 0, 105, 188, 189, 261, 64, 68, - 67, 66, 0, 0, 0, 0, 0, 94, 0, 0, - 248, 87, 87, 91, 247, 106, 264, 0, 261, 0, - 261, 0, 261, 0, 0, 167, 261, 0, 0, 0, - 219, 218, 0, 217, 220, 0, 0, 0, 222, 0, - 193, 196, 0, 203, 204, 210, 209, 236, 237, 221, - 224, 223, 0, 62, 148, 56, 126, 134, 144, 132, - 0, 86, 95, 90, 249, 88, 246, 246, 0, 102, - 0, 81, 84, 85, 261, 118, 0, 0, 74, 75, - 80, 246, 261, 275, 0, 275, 258, 250, 0, 252, - 257, 254, 0, 69, 71, 72, 0, 0, 0, 213, - 0, 0, 0, 0, 0, 0, 191, 184, 185, 182, - 183, 0, 0, 0, 186, 0, 0, 0, 0, 0, - 149, 0, 92, 93, 115, 0, 109, 261, 83, 261, - 110, 261, 78, 246, 261, 276, 111, 261, 251, 0, - 0, 116, 261, 190, 197, 211, 214, 215, 208, 206, - 225, 0, 238, 202, 194, 198, 199, 200, 0, 207, - 205, 0, 0, 240, 192, 96, 103, 104, 143, 82, - 79, 76, 77, 106, 106, 253, 0, 0, 70, 0, - 216, 229, 0, 227, 187, 0, 201, 0, 242, 244, - 239, 0, 0, 112, 113, 256, 255, 212, 226, 0, - 231, 195, 243, 0, 241, 100, 0, 98, 101, 228, - 234, 235, 233, 230, 232, 245, 97, 99, 0, 0, - 0 + 26, 269, 122, 282, 0, 158, 0, 0, 172, 165, + 169, 171, 159, 0, 0, 160, 164, 168, 0, 0, + 57, 58, 161, 170, 126, 0, 33, 48, 47, 0, + 0, 35, 38, 0, 0, 0, 0, 273, 60, 59, + 109, 270, 277, 0, 173, 167, 166, 163, 162, 0, + 62, 0, 64, 0, 0, 0, 51, 53, 39, 43, + 45, 0, 275, 276, 274, 0, 0, 195, 279, 278, + 271, 123, 125, 0, 0, 0, 0, 55, 132, 133, + 127, 128, 130, 124, 146, 153, 147, 267, 154, 155, + 268, 144, 143, 145, 141, 139, 150, 148, 149, 0, + 151, 40, 41, 269, 269, 0, 88, 0, 122, 282, + 117, 0, 0, 195, 195, 110, 120, 174, 161, 111, + 0, 0, 0, 108, 196, 197, 269, 63, 67, 66, + 65, 0, 0, 0, 0, 0, 137, 134, 0, 256, + 254, 254, 254, 90, 255, 0, 86, 254, 254, 97, + 0, 272, 0, 269, 0, 269, 0, 269, 0, 0, + 175, 269, 0, 0, 0, 227, 226, 0, 225, 228, + 0, 0, 0, 230, 0, 201, 204, 0, 211, 212, + 218, 217, 244, 245, 229, 232, 231, 0, 61, 156, + 56, 129, 142, 152, 140, 257, 96, 0, 93, 95, + 0, 87, 254, 92, 94, 0, 85, 98, 89, 0, + 105, 0, 80, 83, 84, 269, 121, 0, 0, 73, + 74, 79, 254, 269, 283, 0, 283, 266, 258, 0, + 260, 265, 262, 0, 68, 70, 71, 0, 0, 0, + 221, 0, 0, 0, 0, 0, 0, 199, 192, 193, + 190, 191, 0, 0, 0, 194, 0, 0, 0, 0, + 0, 157, 135, 136, 138, 91, 0, 118, 0, 112, + 269, 82, 269, 113, 269, 77, 254, 269, 284, 114, + 269, 259, 0, 0, 119, 269, 198, 205, 219, 222, + 223, 216, 214, 233, 0, 246, 210, 202, 206, 207, + 208, 0, 215, 213, 0, 0, 248, 200, 99, 106, + 107, 151, 81, 78, 75, 76, 109, 109, 261, 0, + 0, 69, 0, 224, 237, 0, 235, 195, 0, 209, + 0, 250, 252, 247, 0, 0, 115, 116, 264, 263, + 220, 234, 0, 239, 203, 251, 0, 249, 103, 0, + 101, 104, 131, 236, 242, 243, 241, 238, 240, 253, + 100, 102, 0, 0, 0 }; -static const short yydefgoto[] = { 429, +static const short yydefgoto[] = { 443, 3, 4, 8, 9, 13, 14, 25, 26, 27, 55, - 56, 57, 107, 58, 74, 184, 75, 76, 77, 59, - 69, 70, 60, 213, 100, 61, 130, 131, 303, 304, - 288, 289, 290, 281, 282, 119, 277, 185, 186, 272, - 273, 403, 417, 418, 291, 292, 148, 149, 197, 101, - 162, 163, 187, 188, 62, 177, 215, 178, 249, 266, - 102, 103, 201, 104, 323, 324, 326, 205, 206, 207, - 250, 251, 252, 390, 312, 253, 254, 255, 256, 393, - 394, 424, 425, 257, 258, 259, 373, 374, 399, 224, - 225, 236, 299, 300, 260, 226, 122, 123, 146, 152, - 261, 105, 345, 262 + 56, 57, 107, 58, 74, 183, 75, 76, 77, 59, + 69, 70, 60, 212, 100, 61, 130, 131, 314, 315, + 299, 300, 301, 292, 293, 119, 283, 186, 187, 287, + 288, 416, 430, 431, 302, 303, 147, 148, 196, 101, + 161, 162, 432, 163, 222, 223, 62, 176, 214, 177, + 254, 271, 102, 103, 200, 104, 334, 335, 337, 204, + 205, 206, 255, 256, 257, 403, 323, 258, 259, 260, + 261, 406, 407, 438, 439, 262, 263, 264, 386, 387, + 412, 224, 225, 241, 310, 311, 265, 121, 122, 123, + 146, 151, 266, 105, 358, 267 }; -static const short yypact[] = { 9, --32768,-32768, 9,-32768, -76,-32768, 47, 15,-32768,-32768, --32768,-32768, 55,-32768, -24, 158,-32768,-32768, 130, 95, - 81, 97, 162, 128, 228, 158,-32768, 141,-32768,-32768, --32768,-32768,-32768, 213,-32768,-32768, 419,-32768, 224, 39, --32768,-32768,-32768, 157,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, 211, 419,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 344, 571,-32768, 151,-32768, 79,-32768, - 164,-32768,-32768, 46,-32768, -36,-32768, 183,-32768,-32768, --32768, -11, 173,-32768, 229,-32768, 235, 249,-32768,-32768, --32768,-32768,-32768, 270, 241,-32768,-32768,-32768, 646, 322, --32768,-32768,-32768,-32768, 214, 323,-32768,-32768,-32768, 168, - 226,-32768,-32768, 9, 168, 234, 225, 4,-32768,-32768, - 250,-32768, -22, 168,-32768,-32768,-32768,-32768,-32768, 96, --32768, 230, 237, 240, 295, 185,-32768,-32768, -76,-32768, --32768, 269,-32768,-32768,-32768, 333,-32768, 496, 0,-32768, --32768,-32768,-32768,-32768, 347, 646, 343, 168,-32768,-32768, --32768, 243,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +static const short yypact[] = { 200, +-32768,-32768, 200,-32768, -83,-32768, 60, 10,-32768,-32768, +-32768,-32768, 62,-32768, -48, 157,-32768,-32768, 20, 48, + 23, 44, 98, 89, 212, 157,-32768, 117,-32768,-32768, +-32768,-32768,-32768, 207,-32768,-32768, 431,-32768, 226, 42, +-32768,-32768,-32768, 126,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768, 208, 431,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 242, 591,-32768, 148,-32768, 94,-32768, + 146,-32768,-32768, 52,-32768, -24,-32768, 160,-32768,-32768, +-32768, 5, 156,-32768, 196,-32768, 202, 214,-32768,-32768, +-32768,-32768,-32768, 244, 216,-32768,-32768,-32768, 666, 298, +-32768,-32768,-32768,-32768, 193, 309,-32768,-32768,-32768, 233, + 213,-32768,-32768, 200, 233, 218, 220, 11,-32768,-32768, +-32768,-32768, -15, 233,-32768,-32768,-32768,-32768,-32768, -25, +-32768, 219, 221, 228, 248, 423,-32768,-32768, -83,-32768, +-32768, 243,-32768,-32768,-32768, 317, 516, 53,-32768,-32768, +-32768,-32768,-32768, 328, 666, 331, 233,-32768,-32768,-32768, + 227,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 232, + 235,-32768,-32768, 49, 12, -19,-32768, 224, 105, 238, + 312, 246, 282, 82, 88,-32768,-32768,-32768, 250,-32768, + 253, 254, 361,-32768,-32768, 255, 237,-32768,-32768,-32768, +-32768, 356, 274, 356, 331, 423, 251,-32768, 423,-32768, + 19, -18, 19,-32768,-32768, 263, 273, -18, 19, 269, + 243,-32768, 350, 15, 268, 8, 311, 8, 313, 39, +-32768, 7, 361, 281, 355,-32768,-32768, 87,-32768,-32768, + 264, 200, 361,-32768, 276, 97, 288, 290, 87,-32768, +-32768,-32768, 291,-32768,-32768,-32768,-32768, 361,-32768,-32768, + 391,-32768, 391,-32768,-32768,-32768,-32768, 289,-32768,-32768, + 384,-32768, 19,-32768,-32768, 315,-32768,-32768,-32768, 331, + 293, 36,-32768,-32768,-32768, 237,-32768, 330, 295, 292, +-32768,-32768, 19, 237, 331, 297, 331,-32768,-32768, 63, +-32768,-32768, 299, 122,-32768,-32768,-32768, 302, 379, 306, + 300, 304, 172, 308, 314, 307, 310,-32768,-32768,-32768, +-32768,-32768, 318, 379, 379,-32768, 379, 361, 266, 323, + 332,-32768,-32768,-32768,-32768,-32768, 316,-32768, 230,-32768, + 15,-32768, 237,-32768, 2,-32768, 19, 237,-32768,-32768, + 237,-32768, 68, 230,-32768, 7,-32768,-32768,-32768,-32768, + 303,-32768,-32768, 255, 6,-32768,-32768, 336,-32768,-32768, +-32768, 333,-32768,-32768, 13, 142,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 339, + 340,-32768, 356,-32768,-32768, 144,-32768, 53, 361,-32768, + 331, 337,-32768,-32768, 323, 190,-32768,-32768,-32768,-32768, + 391,-32768, 6, 3, 215, 337, 331,-32768,-32768, 27, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 246, 242,-32768,-32768, 105,-32768, 63,-32768, 244, 73, - 255, 317, 257, 293, -34, 51,-32768,-32768,-32768, 259, --32768, 261, 260, 80,-32768,-32768, 264, 258,-32768,-32768, --32768,-32768, 369, 269, 369, 343, 185, 279, 269, 185, --32768, 288, 288,-32768,-32768,-32768,-32768, 350, 5, 233, - 8, 309, 8, 310, 34,-32768, 6, 80, 283, 356, --32768,-32768, 27,-32768,-32768, 271, 9, 80,-32768, 276, - 181, 289, 278, 27,-32768,-32768,-32768, 284,-32768,-32768, --32768,-32768, 80,-32768,-32768, 384,-32768, 384,-32768,-32768, - 308,-32768,-32768,-32768,-32768,-32768, -9, -9, 343, 285, - 117,-32768,-32768,-32768, 258,-32768, 328, 294, 291,-32768, --32768, -9, 258, 343, 296, 343,-32768,-32768, 119,-32768, --32768, 299, 152,-32768,-32768,-32768, 300, 231, 311, 301, - 314, 245, 307, 313, 315, 316,-32768,-32768,-32768,-32768, --32768, 321, 231, 231,-32768, 231, 80, 287, 304, 318, --32768, 325,-32768,-32768,-32768, 292,-32768, 5,-32768, 258, --32768, 2,-32768, -9, 258,-32768,-32768, 258,-32768, 60, - 292,-32768, 6,-32768,-32768,-32768,-32768, 320,-32768,-32768, - 264, 31,-32768,-32768, 331,-32768,-32768,-32768, 327,-32768, --32768, 10, 160,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768, 334, 335,-32768, 369, --32768,-32768, 161,-32768, 0, 80,-32768, 343, 286,-32768, --32768, 304, 159,-32768,-32768,-32768,-32768, 384,-32768, 31, - 129, 215, 286, 343,-32768,-32768, 20,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 428, 445, --32768 +-32768,-32768, 425, 451,-32768 }; static const short yypgoto[] = {-32768, --32768, 443,-32768, 312,-32768, 434,-32768,-32768, 422,-32768, --32768, 394,-32768,-32768,-32768,-32768, 378,-32768, 338,-32768, --32768, 345,-32768,-32768, 389,-32768,-32768, 302,-32768, 103, - 227,-32768, 115,-32768, 123,-32768, 239,-32768, 247,-32768, --32768,-32768,-32768, 48, -218, -77,-32768, -64,-32768, -133, --32768, 253, -184, -118,-32768, -73,-32768, -266, -75, -206, - -72, 324,-32768, -6,-32768,-32768,-32768, -188,-32768, 155, - -161, 68, -49,-32768, 219,-32768, -284,-32768,-32768,-32768, - 64,-32768,-32768,-32768,-32768,-32768,-32768, 74, 83, -212, --32768,-32768,-32768, 127, -116, -80,-32768,-32768,-32768,-32768, - 1,-32768, 182, -7 +-32768, 420,-32768, 320,-32768, 439,-32768,-32768, 427,-32768, +-32768, 398,-32768,-32768,-32768,-32768, 381,-32768, 342,-32768, +-32768, 352,-32768,-32768, 395,-32768,-32768, 319,-32768, 99, + 225,-32768, 109,-32768, 118,-32768,-32768,-32768, 241,-32768, +-32768,-32768,-32768, 43, -229, -80,-32768, -75,-32768, -103, +-32768, 265,-32768, -253, 294, 305,-32768, -28,-32768, -270, + -78, -211, -3, 338,-32768, 120,-32768,-32768,-32768, -187, +-32768, 153, -171, 71, -236,-32768, 234,-32768, -287,-32768, +-32768,-32768, 66,-32768,-32768,-32768,-32768,-32768,-32768, 76, + 83, -210,-32768,-32768,-32768, 132, -127, -135,-32768,-32768, +-32768,-32768, 1,-32768, 189, -7 }; -#define YYLAST 742 +#define YYLAST 762 static const short yytable[] = { 15, - 5, 121, 223, 5, 120, 15, 232, 234, 268, 10, - 283, 114, 10, 10, 198, 10, 164, 10, 117, 180, - 150, 1, 2, 416, 143, 220, 132, 360, 7, 65, - 63, 151, 72, 287, 160, 161, 79, 64, 10, 287, - 71, 10, 169, 371, 78, 172, 10, 203, 65, 63, - 16, 1, 2, 10, 10, 11, 64, 67, 1, 2, - 179, 221, 10, 11, 333, 334, 79, 10, 169, 377, - 231, 172, 204, 115, 78, 199, 307, 160, 161, 343, - 144, 203, 19, 132, 387, 167, 316, 10, 169, 170, - 171, 172, 1, 2, 145, 164, 286, 220, 239, 133, - 180, 330, 72, 180, 118, 280, 204, 79, 280, 222, - 71, 280, 240, -73, 139, 78, 154, 118, 301, 283, - 118, 118, 398, 118, 153, 427, 241, 242, 182, 310, - 264, 383, 203, 221, 392, 165, 181, 297, 28, 298, - 311, 179, 243, 270, 179, 421, 275, 68, 202, 210, - 212, 284, 12, 29, 112, 233, 133, 204, 211, 305, - 17, 244, 416, 297, 10, 369, 30, 245, -246, 1, - 2, 20, -246, 160, 161, 10, 246, -272, 118, 21, - 1, 2, 31, 408, 247, 124, 248, 109, 110, 166, - 167, 168, 10, 169, 170, 171, 172, 1, 2, 422, - 22, 155, 23, 423, 73, 156, 411, 339, 269, 182, - 218, 24, 182, 33, 219, 344, 32, 181, 419, 378, - 181, 285, 337, 293, 349, 293, 338, 302, 350, 306, - 34, 173, 419, 301, 388, 37, 167, 66, 10, 169, - 170, 171, 172, 1, 2, 83, 84, 315, 36, 174, - 167, 80, 10, 169, 170, 171, 172, 352, 355, 108, - 284, 353, 381, 240, 384, 401, 409, 385, 111, 402, - 410, 335, 175, 366, 367, 305, 368, 241, 242, 318, - 319, 320, 321, 160, 161, 124, 346, 116, 346, 176, - 322, 241, 167, 243, 10, 169, 170, 171, 172, 10, - 169, 313, 314, 172, 1, 2, 359, 1, 2, 160, - 161, 125, 244, 318, 319, 320, 321, 126, 245, 404, - 405, 127, 128, 129, 134, 136, 135, 246, 379, 142, - 285, 138, 245, 241, 293, 247, 181, 248, 147, 141, - 157, 189, 302, 379, 159, 306, 82, 158, 370, 208, - 10, 181, 217, 228, 395, 214, 83, 84, 216, -273, - 227, 229, 230, 235, 400, 237, 238, 85, 38, 86, - 263, 87, 265, 118, 245, 271, 279, 276, 294, 296, - 308, 88, 309, 317, 327, 89, 325, 331, 329, 90, - 400, 332, 91, 41, 42, 43, 336, 340, 414, 341, - 342, 347, 395, 92, 45, 351, 426, 354, 93, 46, - 94, 47, 95, 204, 357, 356, 358, 362, 372, 48, - 363, 96, 97, 364, 365, 375, 10, 430, 49, 376, - 50, 1, 2, 391, 397, 51, 98, 52, 53, 54, - 396, 406, 407, 38, 431, 6, 18, 35, 99, 81, - 183, 113, 140, 106, 137, 389, 382, 209, 39, 295, - 380, 278, 40, 412, 428, 274, 267, 361, 41, 42, - 43, 200, 328, 420, 44, 415, 386, 348, 0, 45, - 413, 0, 0, 0, 46, 0, 47, 0, 0, 0, - 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, - 0, 0, 0, 49, 0, 50, 0, 0, 190, 191, - 51, 0, 52, 53, 54, 192, 0, 0, 0, 85, - 38, 86, 0, 87, 193, 0, 0, 0, 0, 0, + 5, 120, 273, 5, 294, 15, 237, 239, 179, 10, + 277, 279, 280, 10, 10, 10, 219, 284, 285, 435, + 10, 7, 10, 114, 1, 217, 218, 149, 28, 65, + 429, 143, 72, 298, 117, 373, 79, 64, 150, 298, + 71, 159, 160, 197, 78, 16, 10, 168, 65, 10, + 171, 384, 220, 219, 1, 2, 64, 178, 19, 10, + 67, 1, 217, 218, 1, 2, 79, 10, 11, 10, + 11, 318, 346, 436, 78, 10, 168, 437, 390, 171, + 154, 327, 368, 219, 155, 115, 230, 144, 179, 220, + 231, 179, 356, 400, 278, 132, 341, 379, 380, 133, + 381, 145, 72, 221, 227, 291, 29, 79, 30, 405, + 71, 291, 312, -72, 139, 78, 153, 118, 291, 220, + 118, 294, 118, 118, 152, 411, 269, 118, 181, 31, + 118, 297, 441, 10, 202, 164, 180, 178, 1, 2, + 178, 350, 308, 198, 309, 351, 396, 201, 209, 211, + 68, 132, 32, 295, -254, 133, 63, 210, -254, 203, + 112, 316, 433, 202, 118, 12, 382, 17, 362, 202, + 20, 308, 363, 73, 33, 63, 433, 166, 21, 10, + 168, 169, 170, 171, 226, 226, 236, 275, 203, 321, + 276, 421, 238, 429, 203, 329, 330, 331, 332, 22, + 322, 23, 109, 110, 159, 160, 333, 274, 181, -280, + 24, 181, 1, 2, 34, 352, 180, 124, 246, 180, + 424, 391, 397, 357, 36, 398, 296, 365, 304, 37, + 304, 366, 313, 372, 317, 312, 401, 10, 168, 66, + 10, 171, 1, 2, 82, 1, 2, 414, 80, 422, + 111, 415, 326, 423, 83, 84, 108, 184, 185, 250, + 1, 2, 159, 160, 116, 85, 38, 86, 124, 87, + 295, 166, 394, 10, 168, 169, 170, 171, 125, 88, + 83, 84, 348, 89, 126, 316, 127, 90, 159, 160, + 91, 41, 42, 43, 324, 325, 128, 359, 129, 359, + 134, 92, 45, 343, 344, 135, 93, 46, 94, 47, + 95, 136, 246, 329, 330, 331, 332, 48, 138, 96, + 97, 417, 418, 141, 142, 188, 49, 383, 50, 156, + 207, 157, 158, 51, 98, 52, 53, 54, 10, 213, + 232, 392, -281, 296, 215, 216, 99, 304, 233, 180, + 234, 235, 118, 250, 240, 313, 392, 242, 317, 270, + 243, 268, 282, -281, 180, 286, 166, 408, 10, 168, + 169, 170, 171, 1, 2, 281, 290, 413, 319, 244, + 305, 320, 307, 328, 166, 336, 10, 168, 169, 170, + 171, 1, 2, 245, 342, 340, 338, 345, 347, 353, + 354, 355, 360, 413, 349, 364, 371, 246, 247, 367, + 369, 245, 376, 370, 203, 408, 404, 377, 375, 440, + 389, 378, 6, 248, 444, 246, 247, 165, 166, 167, + 10, 168, 169, 170, 171, 1, 2, 385, 10, 388, + 410, 248, 249, 1, 2, 409, 419, 420, 250, 427, + 445, 18, 35, 81, 113, 38, 140, 251, 182, 106, + 249, 137, 306, 395, 402, 252, 250, 253, 393, 172, + 39, 289, 442, 208, 40, 251, 374, 272, 228, 425, + 41, 42, 43, 252, 199, 253, 44, 173, 434, 229, + 428, 45, 339, 426, 399, 361, 46, 0, 47, 0, + 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, + 174, 0, 0, 0, 0, 49, 0, 50, 0, 0, + 0, 0, 51, 0, 52, 53, 54, 175, 189, 190, + 0, 0, 0, 0, 0, 191, 0, 0, 0, 85, + 38, 86, 0, 87, 192, 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, 194, 0, 92, 45, 0, 0, 0, + 0, 0, 0, 193, 0, 92, 45, 0, 0, 0, 93, 46, 94, 47, 95, 0, 0, 0, 0, 0, - 0, 48, 0, 96, 97, 195, 196, 0, 0, 0, + 0, 48, 0, 96, 97, 194, 195, 0, 0, 0, 49, 0, 50, 83, 84, 0, 0, 51, 98, 52, 53, 54, 0, 0, 85, 38, 86, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, @@ -731,58 +741,60 @@ static const short yytable[] = { 15, }; static const short yycheck[] = { 7, - 0, 82, 187, 3, 82, 13, 195, 196, 215, 8, - 229, 48, 8, 8, 148, 8, 135, 8, 30, 136, - 43, 13, 14, 4, 21, 35, 99, 312, 105, 37, - 37, 54, 40, 32, 15, 16, 44, 37, 8, 32, - 40, 8, 9, 328, 44, 12, 8, 82, 56, 56, - 36, 13, 14, 8, 8, 9, 56, 19, 13, 14, - 136, 71, 8, 9, 277, 278, 74, 8, 9, 336, - 105, 12, 107, 110, 74, 148, 238, 15, 16, 292, - 77, 82, 107, 156, 351, 6, 248, 8, 9, 10, - 11, 12, 13, 14, 91, 214, 230, 35, 19, 99, - 217, 263, 110, 220, 116, 104, 107, 115, 104, 187, - 110, 104, 33, 106, 114, 115, 124, 116, 235, 338, - 116, 116, 113, 116, 124, 106, 47, 48, 136, 103, - 208, 344, 82, 71, 104, 135, 136, 104, 9, 106, - 114, 217, 63, 217, 220, 17, 220, 109, 148, 157, - 158, 229, 106, 59, 109, 105, 156, 107, 158, 237, - 106, 82, 4, 104, 8, 327, 86, 88, 106, 13, - 14, 14, 110, 15, 16, 8, 97, 105, 116, 22, - 13, 14, 86, 390, 105, 113, 107, 109, 110, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 71, - 43, 106, 45, 75, 48, 110, 395, 285, 216, 217, - 106, 54, 220, 86, 110, 293, 55, 217, 403, 336, - 220, 229, 106, 231, 106, 233, 110, 235, 110, 237, - 3, 47, 417, 350, 351, 23, 6, 14, 8, 9, - 10, 11, 12, 13, 14, 13, 14, 247, 108, 65, - 6, 41, 8, 9, 10, 11, 12, 106, 308, 109, - 338, 110, 340, 33, 345, 106, 106, 348, 105, 110, - 110, 279, 88, 323, 324, 353, 326, 47, 48, 99, - 100, 101, 102, 15, 16, 113, 294, 105, 296, 105, - 110, 47, 6, 63, 8, 9, 10, 11, 12, 8, - 9, 31, 32, 12, 13, 14, 62, 13, 14, 15, - 16, 83, 82, 99, 100, 101, 102, 83, 88, 384, - 385, 73, 53, 83, 3, 3, 113, 97, 336, 105, - 338, 106, 88, 47, 342, 105, 336, 107, 89, 106, - 111, 9, 350, 351, 105, 353, 3, 111, 62, 3, - 8, 351, 111, 37, 362, 113, 13, 14, 113, 105, - 117, 105, 70, 105, 372, 105, 107, 24, 25, 26, - 107, 28, 4, 116, 88, 97, 27, 90, 70, 70, - 98, 38, 27, 108, 107, 42, 98, 4, 105, 46, - 398, 84, 49, 50, 51, 52, 112, 70, 113, 106, - 110, 106, 410, 60, 61, 107, 414, 108, 65, 66, - 67, 68, 69, 107, 114, 105, 103, 105, 115, 76, - 106, 78, 79, 108, 104, 108, 8, 0, 85, 105, - 87, 13, 14, 114, 108, 92, 93, 94, 95, 96, - 110, 108, 108, 25, 0, 3, 13, 26, 105, 56, - 139, 74, 115, 65, 110, 353, 342, 156, 40, 233, - 338, 223, 44, 396, 417, 219, 214, 313, 50, 51, - 52, 148, 254, 410, 56, 402, 350, 296, -1, 61, - 398, -1, -1, -1, 66, -1, 68, -1, -1, -1, - -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, - -1, -1, -1, 85, -1, 87, -1, -1, 13, 14, - 92, -1, 94, 95, 96, 20, -1, -1, -1, 24, + 0, 82, 214, 3, 234, 13, 194, 195, 136, 8, + 221, 222, 223, 8, 8, 8, 35, 228, 229, 17, + 8, 105, 8, 48, 13, 14, 15, 43, 9, 37, + 4, 21, 40, 32, 30, 323, 44, 37, 54, 32, + 40, 15, 16, 147, 44, 36, 8, 9, 56, 8, + 12, 339, 71, 35, 13, 14, 56, 136, 107, 8, + 19, 13, 14, 15, 13, 14, 74, 8, 9, 8, + 9, 243, 283, 71, 74, 8, 9, 75, 349, 12, + 106, 253, 319, 35, 110, 110, 106, 77, 216, 71, + 110, 219, 303, 364, 113, 99, 268, 334, 335, 99, + 337, 91, 110, 184, 185, 104, 59, 115, 86, 104, + 110, 104, 240, 106, 114, 115, 124, 116, 104, 71, + 116, 351, 116, 116, 124, 113, 207, 116, 136, 86, + 116, 235, 106, 8, 82, 135, 136, 216, 13, 14, + 219, 106, 104, 147, 106, 110, 357, 147, 156, 157, + 109, 155, 55, 234, 106, 155, 37, 157, 110, 107, + 109, 242, 416, 82, 116, 106, 338, 106, 106, 82, + 14, 104, 110, 48, 86, 56, 430, 6, 22, 8, + 9, 10, 11, 12, 184, 185, 105, 216, 107, 103, + 219, 403, 105, 4, 107, 99, 100, 101, 102, 43, + 114, 45, 109, 110, 15, 16, 110, 215, 216, 105, + 54, 219, 13, 14, 3, 296, 216, 113, 47, 219, + 408, 349, 358, 304, 108, 361, 234, 106, 236, 23, + 238, 110, 240, 62, 242, 363, 364, 8, 9, 14, + 8, 12, 13, 14, 3, 13, 14, 106, 41, 106, + 105, 110, 252, 110, 13, 14, 109, 15, 16, 88, + 13, 14, 15, 16, 105, 24, 25, 26, 113, 28, + 351, 6, 353, 8, 9, 10, 11, 12, 83, 38, + 13, 14, 290, 42, 83, 366, 73, 46, 15, 16, + 49, 50, 51, 52, 31, 32, 53, 305, 83, 307, + 3, 60, 61, 15, 16, 113, 65, 66, 67, 68, + 69, 3, 47, 99, 100, 101, 102, 76, 106, 78, + 79, 397, 398, 106, 105, 9, 85, 62, 87, 111, + 3, 111, 105, 92, 93, 94, 95, 96, 8, 113, + 117, 349, 105, 351, 113, 111, 105, 355, 37, 349, + 105, 70, 116, 88, 105, 363, 364, 105, 366, 4, + 107, 107, 90, 113, 364, 97, 6, 375, 8, 9, + 10, 11, 12, 13, 14, 113, 27, 385, 98, 19, + 70, 27, 70, 108, 6, 98, 8, 9, 10, 11, + 12, 13, 14, 33, 4, 105, 107, 14, 84, 70, + 106, 110, 106, 411, 112, 107, 103, 47, 48, 108, + 105, 33, 106, 114, 107, 423, 114, 108, 105, 427, + 105, 104, 3, 63, 0, 47, 48, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 115, 8, 108, + 108, 63, 82, 13, 14, 110, 108, 108, 88, 113, + 0, 13, 26, 56, 74, 25, 115, 97, 139, 65, + 82, 110, 238, 355, 366, 105, 88, 107, 351, 47, + 40, 231, 430, 155, 44, 97, 324, 213, 185, 409, + 50, 51, 52, 105, 147, 107, 56, 65, 423, 185, + 415, 61, 259, 411, 363, 307, 66, -1, 68, -1, + -1, -1, -1, -1, -1, -1, 76, -1, -1, -1, + 88, -1, -1, -1, -1, 85, -1, 87, -1, -1, + -1, -1, 92, -1, 94, 95, 96, 105, 13, 14, + -1, -1, -1, -1, -1, 20, -1, -1, -1, 24, 25, 26, -1, 28, 29, -1, -1, -1, -1, -1, -1, -1, -1, 38, -1, -1, -1, 42, -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, -1, -1, @@ -1351,13 +1363,13 @@ yyreduce: switch (yyn) { case 1: -#line 321 "asn1p_y.y" +#line 323 "asn1p_y.y" { *(void **)param = yyvsp[0].a_grammar; ; break;} case 2: -#line 327 "asn1p_y.y" +#line 329 "asn1p_y.y" { yyval.a_grammar = asn1p_new(); checkmem(yyval.a_grammar); @@ -1365,14 +1377,14 @@ case 2: ; break;} case 3: -#line 332 "asn1p_y.y" +#line 334 "asn1p_y.y" { yyval.a_grammar = yyvsp[-1].a_grammar; TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next); ; break;} case 4: -#line 353 "asn1p_y.y" +#line 355 "asn1p_y.y" { if(yyvsp[-1].a_module) { @@ -1389,27 +1401,27 @@ case 4: ; break;} case 5: -#line 374 "asn1p_y.y" +#line 376 "asn1p_y.y" { yyval.a_oid = 0; ; break;} case 6: -#line 375 "asn1p_y.y" +#line 377 "asn1p_y.y" { yyval.a_oid = yyvsp[0].a_oid; ; break;} case 7: -#line 379 "asn1p_y.y" +#line 381 "asn1p_y.y" { yyval.a_oid = yyvsp[-1].a_oid; ; break;} case 8: -#line 382 "asn1p_y.y" +#line 384 "asn1p_y.y" { yyval.a_oid = 0; ; break;} case 9: -#line 388 "asn1p_y.y" +#line 390 "asn1p_y.y" { yyval.a_oid = asn1p_oid_new(); asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc); @@ -1418,7 +1430,7 @@ case 9: ; break;} case 10: -#line 394 "asn1p_y.y" +#line 396 "asn1p_y.y" { yyval.a_oid = yyvsp[-1].a_oid; asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc); @@ -1427,74 +1439,74 @@ case 10: ; break;} case 11: -#line 403 "asn1p_y.y" +#line 405 "asn1p_y.y" { /* iso */ yyval.a_oid_arc.name = yyvsp[0].tv_str; yyval.a_oid_arc.number = -1; ; break;} case 12: -#line 407 "asn1p_y.y" +#line 409 "asn1p_y.y" { /* iso(1) */ yyval.a_oid_arc.name = yyvsp[-3].tv_str; yyval.a_oid_arc.number = yyvsp[-1].a_int; ; break;} case 13: -#line 411 "asn1p_y.y" +#line 413 "asn1p_y.y" { /* 1 */ yyval.a_oid_arc.name = 0; yyval.a_oid_arc.number = yyvsp[0].a_int; ; break;} case 14: -#line 421 "asn1p_y.y" +#line 423 "asn1p_y.y" { yyval.a_module_flags = MSF_NOFLAGS; ; break;} case 15: -#line 422 "asn1p_y.y" +#line 424 "asn1p_y.y" { yyval.a_module_flags = yyvsp[0].a_module_flags; ; break;} case 16: -#line 431 "asn1p_y.y" +#line 433 "asn1p_y.y" { yyval.a_module_flags = yyvsp[0].a_module_flags; ; break;} case 17: -#line 434 "asn1p_y.y" +#line 436 "asn1p_y.y" { yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags; ; break;} case 18: -#line 443 "asn1p_y.y" +#line 445 "asn1p_y.y" { yyval.a_module_flags = MSF_EXPLICIT_TAGS; ; break;} case 19: -#line 446 "asn1p_y.y" +#line 448 "asn1p_y.y" { yyval.a_module_flags = MSF_IMPLICIT_TAGS; ; break;} case 20: -#line 449 "asn1p_y.y" +#line 451 "asn1p_y.y" { yyval.a_module_flags = MSF_AUTOMATIC_TAGS; ; break;} case 21: -#line 452 "asn1p_y.y" +#line 454 "asn1p_y.y" { yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED; ; break;} case 22: -#line 456 "asn1p_y.y" +#line 458 "asn1p_y.y" { /* X.680Amd1 specifies TAG and XER */ if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) { @@ -1512,23 +1524,23 @@ case 22: ; break;} case 23: -#line 477 "asn1p_y.y" +#line 479 "asn1p_y.y" { yyval.a_module = 0; ; break;} case 24: -#line 478 "asn1p_y.y" +#line 480 "asn1p_y.y" { yyval.a_module = yyvsp[0].a_module; ; break;} case 25: -#line 487 "asn1p_y.y" +#line 489 "asn1p_y.y" { yyval.a_module = yyvsp[0].a_module; ; break;} case 26: -#line 490 "asn1p_y.y" +#line 492 "asn1p_y.y" { yyval.a_module = yyvsp[-1].a_module; @@ -1558,13 +1570,13 @@ case 26: ; break;} case 27: -#line 523 "asn1p_y.y" +#line 525 "asn1p_y.y" { yyval.a_module = yyvsp[0].a_module; ; break;} case 28: -#line 526 "asn1p_y.y" +#line 528 "asn1p_y.y" { yyval.a_module = asn1p_module_new(); checkmem(yyval.a_module); @@ -1576,7 +1588,7 @@ case 28: ; break;} case 29: -#line 535 "asn1p_y.y" +#line 537 "asn1p_y.y" { yyval.a_module = asn1p_module_new(); checkmem(yyval.a_module); @@ -1586,7 +1598,7 @@ case 29: ; break;} case 30: -#line 542 "asn1p_y.y" +#line 544 "asn1p_y.y" { yyval.a_module = asn1p_module_new(); checkmem(yyval.a_module); @@ -1596,7 +1608,7 @@ case 30: ; break;} case 31: -#line 555 "asn1p_y.y" +#line 557 "asn1p_y.y" { yyval.a_module = asn1p_module_new(); checkmem(yyval.a_module); @@ -1606,11 +1618,11 @@ case 31: ; break;} case 32: -#line 563 "asn1p_y.y" +#line 565 "asn1p_y.y" { asn1p_lexer_hack_push_encoding_control(); ; break;} case 33: -#line 564 "asn1p_y.y" +#line 566 "asn1p_y.y" { fprintf(stderr, "WARNING: ENCODING-CONTROL %s " @@ -1621,7 +1633,7 @@ case 33: ; break;} case 34: -#line 576 "asn1p_y.y" +#line 578 "asn1p_y.y" { return yyerror( "Attempt to redefine a standard basic string type, " @@ -1629,7 +1641,7 @@ case 34: ; break;} case 35: -#line 589 "asn1p_y.y" +#line 591 "asn1p_y.y" { if(!saved_aid && 0) return yyerror("Unterminated IMPORTS FROM, " @@ -1639,13 +1651,13 @@ case 35: ; break;} case 36: -#line 599 "asn1p_y.y" +#line 601 "asn1p_y.y" { return yyerror("Empty IMPORTS list"); ; break;} case 37: -#line 605 "asn1p_y.y" +#line 607 "asn1p_y.y" { yyval.a_module = asn1p_module_new(); checkmem(yyval.a_module); @@ -1653,22 +1665,22 @@ case 37: ; break;} case 38: -#line 610 "asn1p_y.y" +#line 612 "asn1p_y.y" { yyval.a_module = yyvsp[-1].a_module; TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next); ; break;} case 39: -#line 617 "asn1p_y.y" +#line 619 "asn1p_y.y" { memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ; break;} case 40: -#line 618 "asn1p_y.y" +#line 620 "asn1p_y.y" { yyval.a_aid.oid = yyvsp[0].a_oid; ; break;} case 41: -#line 622 "asn1p_y.y" +#line 624 "asn1p_y.y" { yyval.a_xports = yyvsp[-3].a_xports; yyval.a_xports->fromModuleName = yyvsp[-1].tv_str; @@ -1679,7 +1691,7 @@ case 41: ; break;} case 42: -#line 633 "asn1p_y.y" +#line 635 "asn1p_y.y" { yyval.a_xports = asn1p_xports_new(); checkmem(yyval.a_xports); @@ -1687,14 +1699,14 @@ case 42: ; break;} case 43: -#line 638 "asn1p_y.y" +#line 640 "asn1p_y.y" { yyval.a_xports = yyvsp[-2].a_xports; TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next); ; break;} case 44: -#line 645 "asn1p_y.y" +#line 647 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1703,7 +1715,7 @@ case 44: ; break;} case 45: -#line 651 "asn1p_y.y" +#line 653 "asn1p_y.y" { /* Completely equivalent to above */ yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1712,7 +1724,7 @@ case 45: ; break;} case 46: -#line 657 "asn1p_y.y" +#line 659 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1721,19 +1733,19 @@ case 46: ; break;} case 47: -#line 666 "asn1p_y.y" +#line 668 "asn1p_y.y" { yyval.a_xports = yyvsp[-1].a_xports; ; break;} case 48: -#line 669 "asn1p_y.y" +#line 671 "asn1p_y.y" { yyval.a_xports = 0; ; break;} case 49: -#line 672 "asn1p_y.y" +#line 674 "asn1p_y.y" { /* Empty EXPORTS clause effectively prohibits export. */ yyval.a_xports = asn1p_xports_new(); @@ -1741,7 +1753,7 @@ case 49: ; break;} case 50: -#line 680 "asn1p_y.y" +#line 682 "asn1p_y.y" { yyval.a_xports = asn1p_xports_new(); assert(yyval.a_xports); @@ -1749,14 +1761,14 @@ case 50: ; break;} case 51: -#line 685 "asn1p_y.y" +#line 687 "asn1p_y.y" { yyval.a_xports = yyvsp[-2].a_xports; TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next); ; break;} case 52: -#line 692 "asn1p_y.y" +#line 694 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1765,7 +1777,7 @@ case 52: ; break;} case 53: -#line 698 "asn1p_y.y" +#line 700 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1774,7 +1786,7 @@ case 53: ; break;} case 54: -#line 704 "asn1p_y.y" +#line 706 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1783,11 +1795,11 @@ case 54: ; break;} case 55: -#line 715 "asn1p_y.y" +#line 717 "asn1p_y.y" { asn1p_lexer_hack_push_opaque_state(); ; break;} case 56: -#line 715 "asn1p_y.y" +#line 717 "asn1p_y.y" { yyval.a_expr = yyvsp[-4].a_expr; assert(yyval.a_expr->Identifier == 0); @@ -1797,7 +1809,7 @@ case 56: ; break;} case 57: -#line 725 "asn1p_y.y" +#line 727 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1807,7 +1819,7 @@ case 57: ; break;} case 58: -#line 732 "asn1p_y.y" +#line 734 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1816,18 +1828,7 @@ case 58: ; break;} case 59: -#line 750 "asn1p_y.y" -{ - yyval.a_expr = asn1p_expr_new(yylineno); - checkmem(yyval.a_expr); - yyval.a_expr->Identifier = yyvsp[-3].tv_str; - yyval.a_expr->tag = yyvsp[-1].a_tag; - yyval.a_expr->expr_type = A1TC_TYPEID; - yyval.a_expr->meta_type = AMT_TYPE; - ; - break;} -case 60: -#line 758 "asn1p_y.y" +#line 752 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; yyval.a_expr->Identifier = yyvsp[-2].tv_str; @@ -1835,17 +1836,17 @@ case 60: assert(yyval.a_expr->meta_type); ; break;} -case 61: -#line 764 "asn1p_y.y" +case 60: +#line 758 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; yyval.a_expr->Identifier = yyvsp[-2].tv_str; assert(yyval.a_expr->expr_type == A1TC_CLASSDEF); - assert(yyval.a_expr->meta_type == AMT_OBJECT); + assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS); ; break;} -case 62: -#line 780 "asn1p_y.y" +case 61: +#line 774 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; assert(yyval.a_expr->Identifier == 0); @@ -1854,8 +1855,8 @@ case 62: yyval.a_expr->meta_type = AMT_PARAMTYPE; ; break;} -case 63: -#line 790 "asn1p_y.y" +case 62: +#line 784 "asn1p_y.y" { int ret; yyval.a_plist = asn1p_paramlist_new(yylineno); @@ -1866,8 +1867,8 @@ case 63: if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument); ; break;} -case 64: -#line 799 "asn1p_y.y" +case 63: +#line 793 "asn1p_y.y" { int ret; yyval.a_plist = yyvsp[-2].a_plist; @@ -1877,15 +1878,15 @@ case 64: if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument); ; break;} -case 65: -#line 810 "asn1p_y.y" +case 64: +#line 804 "asn1p_y.y" { yyval.a_parg.governor = NULL; yyval.a_parg.argument = yyvsp[0].tv_str; ; break;} -case 66: -#line 814 "asn1p_y.y" +case 65: +#line 808 "asn1p_y.y" { int ret; yyval.a_parg.governor = asn1p_ref_new(yylineno); @@ -1894,8 +1895,8 @@ case 66: yyval.a_parg.argument = yyvsp[0].tv_str; ; break;} -case 67: -#line 821 "asn1p_y.y" +case 66: +#line 815 "asn1p_y.y" { int ret; yyval.a_parg.governor = asn1p_ref_new(yylineno); @@ -1904,8 +1905,8 @@ case 67: yyval.a_parg.argument = yyvsp[0].tv_str; ; break;} -case 68: -#line 828 "asn1p_y.y" +case 67: +#line 822 "asn1p_y.y" { int ret; yyval.a_parg.governor = asn1p_ref_new(yylineno); @@ -1915,29 +1916,29 @@ case 68: yyval.a_parg.argument = yyvsp[0].tv_str; ; break;} -case 69: -#line 839 "asn1p_y.y" +case 68: +#line 833 "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 844 "asn1p_y.y" +case 69: +#line 838 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 71: -#line 851 "asn1p_y.y" +case 70: +#line 845 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; ; break;} -case 72: -#line 854 "asn1p_y.y" +case 71: +#line 848 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1946,31 +1947,31 @@ case 72: yyval.a_expr->meta_type = AMT_VALUE; ; break;} -case 73: -#line 878 "asn1p_y.y" +case 72: +#line 872 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); ; break;} -case 74: -#line 879 "asn1p_y.y" +case 73: +#line 873 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; ; break;} -case 75: -#line 882 "asn1p_y.y" +case 74: +#line 876 "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 76: -#line 887 "asn1p_y.y" +case 75: +#line 881 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 77: -#line 894 "asn1p_y.y" +case 76: +#line 888 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; assert(yyval.a_expr->Identifier == 0); @@ -1979,8 +1980,8 @@ case 77: yyval.a_expr->marker = yyvsp[0].a_marker; ; break;} -case 78: -#line 901 "asn1p_y.y" +case 77: +#line 895 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags; @@ -1988,8 +1989,8 @@ case 78: _fixup_anonymous_identifier(yyval.a_expr); ; break;} -case 79: -#line 907 "asn1p_y.y" +case 78: +#line 901 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1998,163 +1999,206 @@ case 79: asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 80: -#line 914 "asn1p_y.y" +case 79: +#line 908 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; ; break;} -case 81: -#line 920 "asn1p_y.y" +case 80: +#line 914 "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 82: -#line 925 "asn1p_y.y" +case 81: +#line 919 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 83: -#line 932 "asn1p_y.y" +case 82: +#line 926 "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 84: -#line 937 "asn1p_y.y" +case 83: +#line 931 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; ; break;} -case 85: -#line 940 "asn1p_y.y" +case 84: +#line 934 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; _fixup_anonymous_identifier(yyval.a_expr); ; break;} -case 86: -#line 947 "asn1p_y.y" +case 85: +#line 941 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; checkmem(yyval.a_expr); yyval.a_expr->with_syntax = yyvsp[0].a_wsynt; assert(yyval.a_expr->expr_type == A1TC_CLASSDEF); - assert(yyval.a_expr->meta_type == AMT_OBJECT); + assert(yyval.a_expr->meta_type == AMT_OBJECTCLASS); ; break;} -case 87: -#line 957 "asn1p_y.y" +case 86: +#line 951 "asn1p_y.y" { yyval.a_int = 0; ; break;} -case 88: -#line 958 "asn1p_y.y" +case 87: +#line 952 "asn1p_y.y" { yyval.a_int = 1; ; break;} -case 89: -#line 962 "asn1p_y.y" +case 88: +#line 956 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); yyval.a_expr->expr_type = A1TC_CLASSDEF; - yyval.a_expr->meta_type = AMT_OBJECT; + yyval.a_expr->meta_type = AMT_OBJECTCLASS; asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 90: -#line 969 "asn1p_y.y" +case 89: +#line 963 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 91: -#line 976 "asn1p_y.y" +case 90: +#line 973 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); - yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name; - yyval.a_expr->expr_type = A1TC_CLASSFIELD; + yyval.a_expr->Identifier = yyvsp[-1].tv_str; + yyval.a_expr->meta_type = AMT_OBJECTFIELD; + yyval.a_expr->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */ + yyval.a_expr->marker = yyvsp[0].a_marker; + ; + break;} +case 91: +#line 983 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr->Identifier = yyvsp[-3].tv_str; yyval.a_expr->meta_type = AMT_OBJECTFIELD; + yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */ + yyval.a_expr->unique = yyvsp[-1].a_int; yyval.a_expr->marker = yyvsp[0].a_marker; + asn1p_expr_add(yyval.a_expr, yyvsp[-2].a_expr); ; break;} case 92: -#line 984 "asn1p_y.y" +#line 994 "asn1p_y.y" { - yyval.a_expr = yyvsp[-2].a_expr; - yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name; + yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr->Identifier = yyvsp[-2].tv_str; + yyval.a_expr->meta_type = AMT_OBJECTFIELD; + yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS; + yyval.a_expr->reference = yyvsp[-1].a_ref; yyval.a_expr->marker = yyvsp[0].a_marker; - yyval.a_expr->unique = yyvsp[-1].a_int; ; break;} case 93: -#line 990 "asn1p_y.y" +#line 1004 "asn1p_y.y" { - int ret; yyval.a_expr = asn1p_expr_new(yylineno); - checkmem(yyval.a_expr); - yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name; - yyval.a_expr->reference = asn1p_ref_new(yylineno); - checkmem(yyval.a_expr->reference); - ret = asn1p_ref_add_component(yyval.a_expr->reference, - yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type); - checkmem(ret == 0); - yyval.a_expr->expr_type = A1TC_CLASSFIELD; + yyval.a_expr->Identifier = yyvsp[-2].tv_str; yyval.a_expr->meta_type = AMT_OBJECTFIELD; + yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS; + yyval.a_expr->reference = yyvsp[-1].a_ref; yyval.a_expr->marker = yyvsp[0].a_marker; - yyval.a_expr->unique = yyvsp[-1].a_int; ; break;} case 94: -#line 1008 "asn1p_y.y" -{ yyval.a_wsynt = 0; ; +#line 1014 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->Identifier = yyvsp[-2].tv_str; + yyval.a_expr->reference = yyvsp[-1].a_ref; + yyval.a_expr->meta_type = AMT_OBJECTFIELD; + yyval.a_expr->expr_type = A1TC_CLASSFIELD_OFS; + yyval.a_expr->marker = yyvsp[0].a_marker; + ; break;} case 95: -#line 1009 "asn1p_y.y" +#line 1025 "asn1p_y.y" { - yyval.a_wsynt = yyvsp[0].a_wsynt; + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->Identifier = yyvsp[-2].tv_str; + yyval.a_expr->reference = yyvsp[-1].a_ref; + yyval.a_expr->meta_type = AMT_OBJECTFIELD; + yyval.a_expr->expr_type = A1TC_CLASSFIELD_OSFS; + yyval.a_expr->marker = yyvsp[0].a_marker; ; break;} case 96: -#line 1016 "asn1p_y.y" -{ asn1p_lexer_hack_enable_with_syntax(); ; +#line 1036 "asn1p_y.y" +{ + yyval.a_expr = asn1p_expr_new(yylineno); + checkmem(yyval.a_expr); + yyval.a_expr->Identifier = yyvsp[-2].tv_str; + yyval.a_expr->meta_type = AMT_OBJECTFIELD; + yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVSFS; + asn1p_expr_add(yyval.a_expr, yyvsp[-1].a_expr); + yyval.a_expr->marker = yyvsp[0].a_marker; + ; break;} case 97: -#line 1018 "asn1p_y.y" +#line 1063 "asn1p_y.y" +{ yyval.a_wsynt = 0; ; + break;} +case 98: +#line 1064 "asn1p_y.y" +{ + yyval.a_wsynt = yyvsp[0].a_wsynt; + ; + break;} +case 99: +#line 1071 "asn1p_y.y" +{ asn1p_lexer_hack_enable_with_syntax(); ; + break;} +case 100: +#line 1073 "asn1p_y.y" { yyval.a_wsynt = yyvsp[-1].a_wsynt; ; break;} -case 98: -#line 1024 "asn1p_y.y" +case 101: +#line 1079 "asn1p_y.y" { yyval.a_wsynt = asn1p_wsyntx_new(); TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next); ; break;} -case 99: -#line 1028 "asn1p_y.y" +case 102: +#line 1083 "asn1p_y.y" { yyval.a_wsynt = yyvsp[-1].a_wsynt; TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next); ; break;} -case 100: -#line 1035 "asn1p_y.y" +case 103: +#line 1090 "asn1p_y.y" { yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0); ; break;} -case 101: -#line 1038 "asn1p_y.y" +case 104: +#line 1093 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -2165,8 +2209,8 @@ case 101: yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0); ; break;} -case 102: -#line 1050 "asn1p_y.y" +case 105: +#line 1105 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2176,8 +2220,8 @@ case 102: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 103: -#line 1058 "asn1p_y.y" +case 106: +#line 1113 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2188,8 +2232,8 @@ case 103: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 104: -#line 1067 "asn1p_y.y" +case 107: +#line 1122 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2200,8 +2244,8 @@ case 104: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 105: -#line 1079 "asn1p_y.y" +case 108: +#line 1134 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; yyval.a_expr->tag = yyvsp[-2].a_tag; @@ -2222,15 +2266,15 @@ case 105: } ; break;} -case 106: -#line 1101 "asn1p_y.y" +case 109: +#line 1156 "asn1p_y.y" { yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0; asn1p_as_pointer = 0; ; break;} -case 107: -#line 1108 "asn1p_y.y" +case 110: +#line 1163 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; yyval.a_expr->marker.flags |= yyvsp[-1].a_int; @@ -2248,14 +2292,14 @@ case 107: } ; break;} -case 108: -#line 1127 "asn1p_y.y" +case 111: +#line 1182 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; ; break;} -case 109: -#line 1130 "asn1p_y.y" +case 112: +#line 1185 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; assert(yyval.a_expr->expr_type == A1TC_INVALID); @@ -2263,8 +2307,8 @@ case 109: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 110: -#line 1136 "asn1p_y.y" +case 113: +#line 1191 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; assert(yyval.a_expr->expr_type == A1TC_INVALID); @@ -2272,8 +2316,8 @@ case 110: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 111: -#line 1142 "asn1p_y.y" +case 114: +#line 1197 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; assert(yyval.a_expr->expr_type == A1TC_INVALID); @@ -2281,8 +2325,8 @@ case 111: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 112: -#line 1148 "asn1p_y.y" +case 115: +#line 1203 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2294,8 +2338,8 @@ case 112: asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 113: -#line 1158 "asn1p_y.y" +case 116: +#line 1213 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2307,8 +2351,8 @@ case 113: asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 114: -#line 1168 "asn1p_y.y" +case 117: +#line 1223 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2316,8 +2360,8 @@ case 114: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 115: -#line 1174 "asn1p_y.y" +case 118: +#line 1229 "asn1p_y.y" { int ret; yyval.a_expr = asn1p_expr_new(yylineno); @@ -2330,8 +2374,8 @@ case 115: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 116: -#line 1188 "asn1p_y.y" +case 119: +#line 1243 "asn1p_y.y" { int ret; yyval.a_expr = yyvsp[-1].a_expr; @@ -2347,8 +2391,8 @@ case 116: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 117: -#line 1212 "asn1p_y.y" +case 120: +#line 1267 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2357,8 +2401,8 @@ case 117: yyval.a_expr->meta_type = AMT_TYPEREF; ; break;} -case 118: -#line 1219 "asn1p_y.y" +case 121: +#line 1274 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2367,8 +2411,8 @@ case 118: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 119: -#line 1234 "asn1p_y.y" +case 122: +#line 1289 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2378,8 +2422,8 @@ case 119: free(yyvsp[0].tv_str); ; break;} -case 120: -#line 1242 "asn1p_y.y" +case 123: +#line 1297 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2391,8 +2435,8 @@ case 120: free(yyvsp[-2].tv_str); ; break;} -case 121: -#line 1252 "asn1p_y.y" +case 124: +#line 1307 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2404,8 +2448,8 @@ case 121: free(yyvsp[-2].tv_str); ; break;} -case 122: -#line 1262 "asn1p_y.y" +case 125: +#line 1317 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2417,8 +2461,8 @@ case 122: free(yyvsp[-2].tv_str); ; break;} -case 123: -#line 1272 "asn1p_y.y" +case 126: +#line 1327 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2428,8 +2472,8 @@ case 123: checkmem(ret == 0); ; break;} -case 124: -#line 1280 "asn1p_y.y" +case 127: +#line 1335 "asn1p_y.y" { int ret; yyval.a_ref = yyvsp[0].a_ref; @@ -2450,8 +2494,8 @@ case 124: } ; break;} -case 125: -#line 1302 "asn1p_y.y" +case 128: +#line 1357 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2461,8 +2505,8 @@ case 125: checkmem(ret == 0); ; break;} -case 126: -#line 1310 "asn1p_y.y" +case 129: +#line 1365 "asn1p_y.y" { int ret; yyval.a_ref = yyvsp[-2].a_ref; @@ -2471,22 +2515,58 @@ case 126: checkmem(ret == 0); ; break;} -case 129: -#line 1324 "asn1p_y.y" +case 132: +#line 1379 "asn1p_y.y" { yyval.a_refcomp.lex_type = RLT_AmpUppercase; yyval.a_refcomp.name = yyvsp[0].tv_str; ; break;} -case 130: -#line 1329 "asn1p_y.y" +case 133: +#line 1384 "asn1p_y.y" { yyval.a_refcomp.lex_type = RLT_Amplowercase; yyval.a_refcomp.name = yyvsp[0].tv_str; ; break;} -case 131: -#line 1342 "asn1p_y.y" +case 134: +#line 1393 "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 135: +#line 1397 "asn1p_y.y" +{ + yyval.a_ref = yyval.a_ref; + asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase); + ; + break;} +case 136: +#line 1401 "asn1p_y.y" +{ + yyval.a_ref = yyval.a_ref; + asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase); + ; + break;} +case 137: +#line 1408 "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 138: +#line 1412 "asn1p_y.y" +{ + yyval.a_ref = asn1p_ref_new(yylineno); + asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_AmpUppercase); + asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS); + ; + break;} +case 139: +#line 1426 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; assert(yyval.a_expr->Identifier == NULL); @@ -2495,8 +2575,8 @@ case 131: yyval.a_expr->value = yyvsp[0].a_value; ; break;} -case 132: -#line 1352 "asn1p_y.y" +case 140: +#line 1436 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(0); checkmem(yyval.a_value); @@ -2505,76 +2585,76 @@ case 132: yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value; ; break;} -case 133: -#line 1359 "asn1p_y.y" +case 141: +#line 1443 "asn1p_y.y" { asn1p_lexer_hack_push_opaque_state(); ; break;} -case 134: -#line 1359 "asn1p_y.y" +case 142: +#line 1443 "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 135: -#line 1364 "asn1p_y.y" +case 143: +#line 1448 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(0); checkmem(yyval.a_value); yyval.a_value->type = ATV_NULL; ; break;} -case 136: -#line 1369 "asn1p_y.y" +case 144: +#line 1453 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(0); checkmem(yyval.a_value); yyval.a_value->type = ATV_FALSE; ; break;} -case 137: -#line 1374 "asn1p_y.y" +case 145: +#line 1458 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(0); checkmem(yyval.a_value); yyval.a_value->type = ATV_TRUE; ; break;} -case 138: -#line 1379 "asn1p_y.y" +case 146: +#line 1463 "asn1p_y.y" { yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B'); checkmem(yyval.a_value); ; break;} -case 139: -#line 1383 "asn1p_y.y" +case 147: +#line 1467 "asn1p_y.y" { yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H'); checkmem(yyval.a_value); ; break;} -case 140: -#line 1387 "asn1p_y.y" +case 148: +#line 1471 "asn1p_y.y" { yyval.a_value = yyval.a_value; ; break;} -case 141: -#line 1390 "asn1p_y.y" +case 149: +#line 1474 "asn1p_y.y" { yyval.a_value = yyvsp[0].a_value; ; break;} -case 142: -#line 1393 "asn1p_y.y" +case 150: +#line 1477 "asn1p_y.y" { yyval.a_value = yyvsp[0].a_value; ; break;} -case 143: -#line 1399 "asn1p_y.y" +case 151: +#line 1483 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -2587,8 +2667,8 @@ case 143: free(yyvsp[0].tv_str); ; break;} -case 144: -#line 1410 "asn1p_y.y" +case 152: +#line 1494 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -2604,31 +2684,31 @@ case 144: free(yyvsp[0].tv_str); ; break;} -case 145: -#line 1428 "asn1p_y.y" +case 153: +#line 1512 "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 146: -#line 1432 "asn1p_y.y" +case 154: +#line 1516 "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 147: -#line 1437 "asn1p_y.y" +case 155: +#line 1521 "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 148: -#line 1471 "asn1p_y.y" +case 156: +#line 1555 "asn1p_y.y" { yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1; yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1); @@ -2639,8 +2719,8 @@ case 148: free(yyvsp[0].tv_opaque.buf); ; break;} -case 149: -#line 1480 "asn1p_y.y" +case 157: +#line 1564 "asn1p_y.y" { int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len; char *p = malloc(newsize + 1); @@ -2654,72 +2734,72 @@ case 149: yyval.tv_opaque.len = newsize; ; break;} -case 150: -#line 1495 "asn1p_y.y" +case 158: +#line 1579 "asn1p_y.y" { yyval.a_type = ASN_BASIC_BOOLEAN; ; break;} -case 151: -#line 1496 "asn1p_y.y" +case 159: +#line 1580 "asn1p_y.y" { yyval.a_type = ASN_BASIC_NULL; ; break;} -case 152: -#line 1497 "asn1p_y.y" +case 160: +#line 1581 "asn1p_y.y" { yyval.a_type = ASN_BASIC_REAL; ; break;} -case 153: -#line 1498 "asn1p_y.y" +case 161: +#line 1582 "asn1p_y.y" { yyval.a_type = yyvsp[0].a_type; ; break;} -case 154: -#line 1499 "asn1p_y.y" +case 162: +#line 1583 "asn1p_y.y" { yyval.a_type = ASN_BASIC_OCTET_STRING; ; break;} -case 155: -#line 1500 "asn1p_y.y" +case 163: +#line 1584 "asn1p_y.y" { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ; break;} -case 156: -#line 1501 "asn1p_y.y" +case 164: +#line 1585 "asn1p_y.y" { yyval.a_type = ASN_BASIC_RELATIVE_OID; ; break;} -case 157: -#line 1502 "asn1p_y.y" +case 165: +#line 1586 "asn1p_y.y" { yyval.a_type = ASN_BASIC_EXTERNAL; ; break;} -case 158: -#line 1503 "asn1p_y.y" +case 166: +#line 1587 "asn1p_y.y" { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ; break;} -case 159: -#line 1504 "asn1p_y.y" +case 167: +#line 1588 "asn1p_y.y" { yyval.a_type = ASN_BASIC_CHARACTER_STRING; ; break;} -case 160: -#line 1505 "asn1p_y.y" +case 168: +#line 1589 "asn1p_y.y" { yyval.a_type = ASN_BASIC_UTCTime; ; break;} -case 161: -#line 1506 "asn1p_y.y" +case 169: +#line 1590 "asn1p_y.y" { yyval.a_type = ASN_BASIC_GeneralizedTime; ; break;} -case 162: -#line 1507 "asn1p_y.y" +case 170: +#line 1591 "asn1p_y.y" { yyval.a_type = yyvsp[0].a_type; ; break;} -case 163: -#line 1514 "asn1p_y.y" +case 171: +#line 1598 "asn1p_y.y" { yyval.a_type = ASN_BASIC_INTEGER; ; break;} -case 164: -#line 1515 "asn1p_y.y" +case 172: +#line 1599 "asn1p_y.y" { yyval.a_type = ASN_BASIC_ENUMERATED; ; break;} -case 165: -#line 1516 "asn1p_y.y" +case 173: +#line 1600 "asn1p_y.y" { yyval.a_type = ASN_BASIC_BIT_STRING; ; break;} -case 166: -#line 1520 "asn1p_y.y" +case 174: +#line 1604 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2727,8 +2807,8 @@ case 166: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 167: -#line 1526 "asn1p_y.y" +case 175: +#line 1610 "asn1p_y.y" { if(yyvsp[0].a_expr) { yyval.a_expr = yyvsp[0].a_expr; @@ -2740,92 +2820,92 @@ case 167: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 168: -#line 1539 "asn1p_y.y" +case 176: +#line 1623 "asn1p_y.y" { yyval.a_type = ASN_STRING_BMPString; ; break;} -case 169: -#line 1540 "asn1p_y.y" +case 177: +#line 1624 "asn1p_y.y" { yyval.a_type = ASN_STRING_GeneralString; fprintf(stderr, "WARNING: GeneralString is not fully supported\n"); ; break;} -case 170: -#line 1544 "asn1p_y.y" +case 178: +#line 1628 "asn1p_y.y" { yyval.a_type = ASN_STRING_GraphicString; fprintf(stderr, "WARNING: GraphicString is not fully supported\n"); ; break;} -case 171: -#line 1548 "asn1p_y.y" +case 179: +#line 1632 "asn1p_y.y" { yyval.a_type = ASN_STRING_IA5String; ; break;} -case 172: -#line 1549 "asn1p_y.y" +case 180: +#line 1633 "asn1p_y.y" { yyval.a_type = ASN_STRING_ISO646String; ; break;} -case 173: -#line 1550 "asn1p_y.y" +case 181: +#line 1634 "asn1p_y.y" { yyval.a_type = ASN_STRING_NumericString; ; break;} -case 174: -#line 1551 "asn1p_y.y" +case 182: +#line 1635 "asn1p_y.y" { yyval.a_type = ASN_STRING_PrintableString; ; break;} -case 175: -#line 1552 "asn1p_y.y" +case 183: +#line 1636 "asn1p_y.y" { yyval.a_type = ASN_STRING_T61String; fprintf(stderr, "WARNING: T61String is not fully supported\n"); ; break;} -case 176: -#line 1556 "asn1p_y.y" +case 184: +#line 1640 "asn1p_y.y" { yyval.a_type = ASN_STRING_TeletexString; ; break;} -case 177: -#line 1557 "asn1p_y.y" +case 185: +#line 1641 "asn1p_y.y" { yyval.a_type = ASN_STRING_UniversalString; ; break;} -case 178: -#line 1558 "asn1p_y.y" +case 186: +#line 1642 "asn1p_y.y" { yyval.a_type = ASN_STRING_UTF8String; ; break;} -case 179: -#line 1559 "asn1p_y.y" +case 187: +#line 1643 "asn1p_y.y" { yyval.a_type = ASN_STRING_VideotexString; fprintf(stderr, "WARNING: VideotexString is not fully supported\n"); ; break;} -case 180: -#line 1563 "asn1p_y.y" +case 188: +#line 1647 "asn1p_y.y" { yyval.a_type = ASN_STRING_VisibleString; ; break;} -case 181: -#line 1564 "asn1p_y.y" +case 189: +#line 1648 "asn1p_y.y" { yyval.a_type = ASN_STRING_ObjectDescriptor; ; break;} -case 187: -#line 1576 "asn1p_y.y" +case 195: +#line 1660 "asn1p_y.y" { yyval.a_constr = 0; ; break;} -case 188: -#line 1577 "asn1p_y.y" +case 196: +#line 1661 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 189: -#line 1583 "asn1p_y.y" +case 197: +#line 1667 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0); ; break;} -case 190: -#line 1586 "asn1p_y.y" +case 198: +#line 1670 "asn1p_y.y" { /* * This is a special case, for compatibility purposes. @@ -2834,26 +2914,26 @@ case 190: CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0); ; break;} -case 191: -#line 1596 "asn1p_y.y" +case 199: +#line 1680 "asn1p_y.y" { yyval.a_constr = yyvsp[-1].a_constr; ; break;} -case 192: -#line 1599 "asn1p_y.y" +case 200: +#line 1683 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr); ; break;} -case 193: -#line 1605 "asn1p_y.y" +case 201: +#line 1689 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 194: -#line 1608 "asn1p_y.y" +case 202: +#line 1692 "asn1p_y.y" { asn1p_constraint_t *ct; ct = asn1p_constraint_new(yylineno); @@ -2861,8 +2941,8 @@ case 194: CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct); ; break;} -case 195: -#line 1614 "asn1p_y.y" +case 203: +#line 1698 "asn1p_y.y" { asn1p_constraint_t *ct; ct = asn1p_constraint_new(yylineno); @@ -2872,38 +2952,38 @@ case 195: CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr); ; break;} -case 196: -#line 1625 "asn1p_y.y" +case 204: +#line 1709 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 197: -#line 1628 "asn1p_y.y" +case 205: +#line 1712 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0); ; break;} -case 198: -#line 1631 "asn1p_y.y" +case 206: +#line 1715 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr); ; break;} -case 199: -#line 1634 "asn1p_y.y" +case 207: +#line 1718 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr); ; break;} -case 200: -#line 1637 "asn1p_y.y" +case 208: +#line 1721 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr); ; break;} -case 201: -#line 1643 "asn1p_y.y" +case 209: +#line 1727 "asn1p_y.y" { int ret; yyval.a_constr = asn1p_constraint_new(yylineno); @@ -2913,8 +2993,8 @@ case 201: checkmem(ret == 0); ; break;} -case 202: -#line 1651 "asn1p_y.y" +case 210: +#line 1735 "asn1p_y.y" { int ret; yyval.a_constr = asn1p_constraint_new(yylineno); @@ -2924,8 +3004,8 @@ case 202: checkmem(ret == 0); ; break;} -case 203: -#line 1659 "asn1p_y.y" +case 211: +#line 1743 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -2933,8 +3013,8 @@ case 203: yyval.a_constr->value = yyvsp[0].a_value; ; break;} -case 204: -#line 1665 "asn1p_y.y" +case 212: +#line 1749 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -2942,8 +3022,8 @@ case 204: yyval.a_constr->containedSubtype = yyvsp[0].a_value; ; break;} -case 205: -#line 1671 "asn1p_y.y" +case 213: +#line 1755 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -2952,8 +3032,8 @@ case 205: yyval.a_constr->range_stop = yyvsp[0].a_value; ; break;} -case 206: -#line 1678 "asn1p_y.y" +case 214: +#line 1762 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -2963,8 +3043,8 @@ case 206: yyval.a_constr->range_start->type = ATV_MIN; ; break;} -case 207: -#line 1686 "asn1p_y.y" +case 215: +#line 1770 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -2974,8 +3054,8 @@ case 207: yyval.a_constr->range_stop->type = ATV_MAX; ; break;} -case 208: -#line 1694 "asn1p_y.y" +case 216: +#line 1778 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -2986,24 +3066,24 @@ case 208: yyval.a_constr->range_stop->type = ATV_MAX; ; break;} -case 209: -#line 1703 "asn1p_y.y" +case 217: +#line 1787 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 210: -#line 1706 "asn1p_y.y" +case 218: +#line 1790 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 211: -#line 1710 "asn1p_y.y" +case 219: +#line 1794 "asn1p_y.y" { asn1p_lexer_hack_push_opaque_state(); ; break;} -case 212: -#line 1710 "asn1p_y.y" +case 220: +#line 1794 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -3013,64 +3093,64 @@ case 212: yyval.a_constr->value->type = ATV_UNPARSED; ; break;} -case 213: -#line 1721 "asn1p_y.y" +case 221: +#line 1805 "asn1p_y.y" { yyval.a_ctype = ACT_EL_RANGE; ; break;} -case 214: -#line 1722 "asn1p_y.y" +case 222: +#line 1806 "asn1p_y.y" { yyval.a_ctype = ACT_EL_RLRANGE; ; break;} -case 215: -#line 1723 "asn1p_y.y" +case 223: +#line 1807 "asn1p_y.y" { yyval.a_ctype = ACT_EL_LLRANGE; ; break;} -case 216: -#line 1724 "asn1p_y.y" +case 224: +#line 1808 "asn1p_y.y" { yyval.a_ctype = ACT_EL_ULRANGE; ; break;} -case 217: -#line 1728 "asn1p_y.y" +case 225: +#line 1812 "asn1p_y.y" { yyval.a_ctype = ACT_CT_SIZE; ; break;} -case 218: -#line 1731 "asn1p_y.y" +case 226: +#line 1815 "asn1p_y.y" { yyval.a_ctype = ACT_CT_FROM; ; break;} -case 219: -#line 1737 "asn1p_y.y" +case 227: +#line 1821 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(0); checkmem(yyval.a_value); yyval.a_value->type = ATV_FALSE; ; break;} -case 220: -#line 1742 "asn1p_y.y" +case 228: +#line 1826 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(1); checkmem(yyval.a_value); yyval.a_value->type = ATV_TRUE; ; break;} -case 221: -#line 1747 "asn1p_y.y" +case 229: +#line 1831 "asn1p_y.y" { yyval.a_value = yyvsp[0].a_value; ; break;} -case 222: -#line 1750 "asn1p_y.y" +case 230: +#line 1834 "asn1p_y.y" { yyval.a_value = yyvsp[0].a_value; ; break;} -case 223: -#line 1753 "asn1p_y.y" +case 231: +#line 1837 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -3083,8 +3163,8 @@ case 223: free(yyvsp[0].tv_str); ; break;} -case 224: -#line 1767 "asn1p_y.y" +case 232: +#line 1851 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -3097,32 +3177,32 @@ case 224: free(yyvsp[0].tv_str); ; break;} -case 225: -#line 1781 "asn1p_y.y" +case 233: +#line 1865 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0); ; break;} -case 226: -#line 1784 "asn1p_y.y" +case 234: +#line 1868 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0); ; break;} -case 227: -#line 1790 "asn1p_y.y" +case 235: +#line 1874 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 228: -#line 1793 "asn1p_y.y" +case 236: +#line 1877 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr); ; break;} -case 229: -#line 1799 "asn1p_y.y" +case 237: +#line 1883 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -3130,8 +3210,8 @@ case 229: yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0); ; break;} -case 230: -#line 1805 "asn1p_y.y" +case 238: +#line 1889 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -3141,46 +3221,46 @@ case 230: if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr); ; break;} -case 231: -#line 1819 "asn1p_y.y" +case 239: +#line 1903 "asn1p_y.y" { yyval.a_pres = ACPRES_DEFAULT; ; break;} -case 232: -#line 1820 "asn1p_y.y" +case 240: +#line 1904 "asn1p_y.y" { yyval.a_pres = yyvsp[0].a_pres; ; break;} -case 233: -#line 1824 "asn1p_y.y" +case 241: +#line 1908 "asn1p_y.y" { yyval.a_pres = ACPRES_PRESENT; ; break;} -case 234: -#line 1827 "asn1p_y.y" +case 242: +#line 1911 "asn1p_y.y" { yyval.a_pres = ACPRES_ABSENT; ; break;} -case 235: -#line 1830 "asn1p_y.y" +case 243: +#line 1914 "asn1p_y.y" { yyval.a_pres = ACPRES_OPTIONAL; ; break;} -case 236: -#line 1836 "asn1p_y.y" +case 244: +#line 1920 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 237: -#line 1839 "asn1p_y.y" +case 245: +#line 1923 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 238: -#line 1848 "asn1p_y.y" +case 246: +#line 1932 "asn1p_y.y" { asn1p_ref_t *ref = asn1p_ref_new(yylineno); asn1p_constraint_t *ct; @@ -3194,14 +3274,14 @@ case 238: CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0); ; break;} -case 239: -#line 1863 "asn1p_y.y" +case 247: +#line 1947 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr); ; break;} -case 240: -#line 1869 "asn1p_y.y" +case 248: +#line 1953 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -3209,8 +3289,8 @@ case 240: yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0); ; break;} -case 241: -#line 1875 "asn1p_y.y" +case 249: +#line 1959 "asn1p_y.y" { asn1p_constraint_t *ct; ct = asn1p_constraint_new(yylineno); @@ -3220,8 +3300,8 @@ case 241: CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct); ; break;} -case 242: -#line 1889 "asn1p_y.y" +case 250: +#line 1973 "asn1p_y.y" { char *p = malloc(strlen(yyvsp[0].tv_str) + 2); int ret; @@ -3234,8 +3314,8 @@ case 242: free(yyvsp[0].tv_str); ; break;} -case 243: -#line 1900 "asn1p_y.y" +case 251: +#line 1984 "asn1p_y.y" { char *p = malloc(strlen(yyvsp[0].tv_str) + 3); int ret; @@ -3249,14 +3329,14 @@ case 243: free(yyvsp[0].tv_str); ; break;} -case 244: -#line 1916 "asn1p_y.y" +case 252: +#line 2000 "asn1p_y.y" { yyval.tv_str = yyvsp[0].tv_str; ; break;} -case 245: -#line 1919 "asn1p_y.y" +case 253: +#line 2003 "asn1p_y.y" { int l1 = strlen(yyvsp[-2].tv_str); int l3 = strlen(yyvsp[0].tv_str); @@ -3267,61 +3347,61 @@ case 245: yyval.tv_str[l1 + 1 + l3] = '\0'; ; break;} -case 246: -#line 1937 "asn1p_y.y" +case 254: +#line 2021 "asn1p_y.y" { yyval.a_marker.flags = EM_NOMARK; yyval.a_marker.default_value = 0; ; break;} -case 247: -#line 1941 "asn1p_y.y" +case 255: +#line 2025 "asn1p_y.y" { yyval.a_marker = yyvsp[0].a_marker; ; break;} -case 248: -#line 1945 "asn1p_y.y" +case 256: +#line 2029 "asn1p_y.y" { yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT; yyval.a_marker.default_value = 0; ; break;} -case 249: -#line 1949 "asn1p_y.y" +case 257: +#line 2033 "asn1p_y.y" { yyval.a_marker.flags = EM_DEFAULT; yyval.a_marker.default_value = yyvsp[0].a_value; ; break;} -case 250: -#line 1972 "asn1p_y.y" +case 258: +#line 2056 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); ; break;} -case 251: -#line 1976 "asn1p_y.y" +case 259: +#line 2060 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; ; break;} -case 252: -#line 1982 "asn1p_y.y" +case 260: +#line 2066 "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 253: -#line 1987 "asn1p_y.y" +case 261: +#line 2071 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); ; break;} -case 254: -#line 1994 "asn1p_y.y" +case 262: +#line 2078 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -3330,8 +3410,8 @@ case 254: yyval.a_expr->Identifier = yyvsp[0].tv_str; ; break;} -case 255: -#line 2001 "asn1p_y.y" +case 263: +#line 2085 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -3341,8 +3421,8 @@ case 255: yyval.a_expr->value = yyvsp[-1].a_value; ; break;} -case 256: -#line 2009 "asn1p_y.y" +case 264: +#line 2093 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -3352,8 +3432,8 @@ case 256: yyval.a_expr->value = yyvsp[-1].a_value; ; break;} -case 257: -#line 2017 "asn1p_y.y" +case 265: +#line 2101 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -3362,8 +3442,8 @@ case 257: yyval.a_expr->value = yyvsp[0].a_value; ; break;} -case 258: -#line 2024 "asn1p_y.y" +case 266: +#line 2108 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -3373,103 +3453,103 @@ case 258: yyval.a_expr->meta_type = AMT_VALUE; ; break;} -case 259: -#line 2035 "asn1p_y.y" +case 267: +#line 2119 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int); checkmem(yyval.a_value); ; break;} -case 260: -#line 2039 "asn1p_y.y" +case 268: +#line 2123 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int); checkmem(yyval.a_value); ; break;} -case 261: -#line 2070 "asn1p_y.y" +case 269: +#line 2154 "asn1p_y.y" { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ; break;} -case 262: -#line 2071 "asn1p_y.y" +case 270: +#line 2155 "asn1p_y.y" { yyval.a_tag = yyvsp[0].a_tag; ; break;} -case 263: -#line 2075 "asn1p_y.y" +case 271: +#line 2159 "asn1p_y.y" { yyval.a_tag = yyvsp[-1].a_tag; yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode; ; break;} -case 264: -#line 2082 "asn1p_y.y" +case 272: +#line 2166 "asn1p_y.y" { yyval.a_tag = yyvsp[-2].a_tag; yyval.a_tag.tag_value = yyvsp[-1].a_int; ; break;} -case 265: -#line 2088 "asn1p_y.y" +case 273: +#line 2172 "asn1p_y.y" { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ; break;} -case 266: -#line 2089 "asn1p_y.y" +case 274: +#line 2173 "asn1p_y.y" { yyval.a_tag.tag_class = TC_UNIVERSAL; ; break;} -case 267: -#line 2090 "asn1p_y.y" +case 275: +#line 2174 "asn1p_y.y" { yyval.a_tag.tag_class = TC_APPLICATION; ; break;} -case 268: -#line 2091 "asn1p_y.y" +case 276: +#line 2175 "asn1p_y.y" { yyval.a_tag.tag_class = TC_PRIVATE; ; break;} -case 269: -#line 2095 "asn1p_y.y" +case 277: +#line 2179 "asn1p_y.y" { yyval.a_tag.tag_mode = TM_DEFAULT; ; break;} -case 270: -#line 2096 "asn1p_y.y" +case 278: +#line 2180 "asn1p_y.y" { yyval.a_tag.tag_mode = TM_IMPLICIT; ; break;} -case 271: -#line 2097 "asn1p_y.y" +case 279: +#line 2181 "asn1p_y.y" { yyval.a_tag.tag_mode = TM_EXPLICIT; ; break;} -case 272: -#line 2101 "asn1p_y.y" +case 280: +#line 2185 "asn1p_y.y" { checkmem(yyvsp[0].tv_str); yyval.tv_str = yyvsp[0].tv_str; ; break;} -case 273: -#line 2105 "asn1p_y.y" +case 281: +#line 2189 "asn1p_y.y" { checkmem(yyvsp[0].tv_str); yyval.tv_str = yyvsp[0].tv_str; ; break;} -case 274: -#line 2113 "asn1p_y.y" +case 282: +#line 2197 "asn1p_y.y" { checkmem(yyvsp[0].tv_str); yyval.tv_str = yyvsp[0].tv_str; ; break;} -case 275: -#line 2120 "asn1p_y.y" +case 283: +#line 2204 "asn1p_y.y" { yyval.tv_str = 0; ; break;} -case 276: -#line 2121 "asn1p_y.y" +case 284: +#line 2205 "asn1p_y.y" { yyval.tv_str = yyvsp[0].tv_str; ; break;} -case 277: -#line 2127 "asn1p_y.y" +case 285: +#line 2211 "asn1p_y.y" { checkmem(yyvsp[0].tv_str); yyval.tv_str = yyvsp[0].tv_str; @@ -3697,7 +3777,7 @@ yyerrhandle: } return 1; } -#line 2133 "asn1p_y.y" +#line 2217 "asn1p_y.y" diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y index b070f2af..41f566d7 100644 --- a/libasn1parser/asn1p_y.y +++ b/libasn1parser/asn1p_y.y @@ -242,9 +242,11 @@ static void _fixup_anonymous_identifier(asn1p_expr_t *expr); %type <a_refcomp> ComplexTypeReferenceElement %type <a_refcomp> ClassFieldIdentifier %type <a_refcomp> ClassFieldName -%type <a_expr> ClassFieldList +%type <a_expr> FieldSpec +%type <a_ref> FieldName +%type <a_ref> DefinedObjectClass %type <a_expr> ClassField -%type <a_expr> ClassDeclaration +%type <a_expr> ObjectClass %type <a_expr> Type %type <a_expr> DataTypeReference /* Type1 ::= Type2 */ %type <a_expr> DefinedTypeRef @@ -747,25 +749,17 @@ DataTypeReference: /* * Optionally tagged type definition. */ - TypeRefName TOK_PPEQ optTag TOK_TYPE_IDENTIFIER { - $$ = asn1p_expr_new(yylineno); - checkmem($$); - $$->Identifier = $1; - $$->tag = $3; - $$->expr_type = A1TC_TYPEID; - $$->meta_type = AMT_TYPE; - } - | TypeRefName TOK_PPEQ Type { + TypeRefName TOK_PPEQ Type { $$ = $3; $$->Identifier = $1; assert($$->expr_type); assert($$->meta_type); } - | TypeRefName TOK_PPEQ ClassDeclaration { + | TypeRefName TOK_PPEQ ObjectClass { $$ = $3; $$->Identifier = $1; assert($$->expr_type == A1TC_CLASSDEF); - assert($$->meta_type == AMT_OBJECT); + assert($$->meta_type == AMT_OBJECTCLASS); } /* * Parametrized <Type> declaration: @@ -943,13 +937,13 @@ AlternativeType: } ; -ClassDeclaration: - TOK_CLASS '{' ClassFieldList '}' optWithSyntax { +ObjectClass: + TOK_CLASS '{' FieldSpec '}' optWithSyntax { $$ = $3; checkmem($$); $$->with_syntax = $5; assert($$->expr_type == A1TC_CLASSDEF); - assert($$->meta_type == AMT_OBJECT); + assert($$->meta_type == AMT_OBJECTCLASS); } ; @@ -958,50 +952,111 @@ optUnique: | TOK_UNIQUE { $$ = 1; } ; -ClassFieldList: +FieldSpec: ClassField { $$ = asn1p_expr_new(yylineno); checkmem($$); $$->expr_type = A1TC_CLASSDEF; - $$->meta_type = AMT_OBJECT; + $$->meta_type = AMT_OBJECTCLASS; asn1p_expr_add($$, $1); } - | ClassFieldList ',' ClassField { + | FieldSpec ',' ClassField { $$ = $1; asn1p_expr_add($$, $3); } ; + /* X.681 */ ClassField: - ClassFieldIdentifier optMarker { + + /* TypeFieldSpec ::= typefieldreference TypeOptionalitySpec? */ + TOK_typefieldreference optMarker { $$ = asn1p_expr_new(yylineno); checkmem($$); - $$->Identifier = $1.name; - $$->expr_type = A1TC_CLASSFIELD; + $$->Identifier = $1; $$->meta_type = AMT_OBJECTFIELD; + $$->expr_type = A1TC_CLASSFIELD_TFS; /* TypeFieldSpec */ $$->marker = $2; } - | ClassFieldIdentifier Type optUnique optMarker { - $$ = $2; - $$->Identifier = $1.name; - $$->marker = $4; + + /* FixedTypeValueFieldSpec ::= valuefieldreference Type UNIQUE ? ValueOptionalitySpec ? */ + | TOK_valuefieldreference Type optUnique optMarker { + $$ = asn1p_expr_new(yylineno); + $$->Identifier = $1; + $$->meta_type = AMT_OBJECTFIELD; + $$->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */ $$->unique = $3; + $$->marker = $4; + asn1p_expr_add($$, $2); } - | ClassFieldIdentifier ClassFieldIdentifier optUnique optMarker { - int ret; + + /* VariableTypeValueFieldSpec ::= valuefieldreference FieldName ValueOptionalitySpec ? */ + | TOK_valuefieldreference FieldName optMarker { + $$ = asn1p_expr_new(yylineno); + $$->Identifier = $1; + $$->meta_type = AMT_OBJECTFIELD; + $$->expr_type = A1TC_CLASSFIELD_VTVFS; + $$->reference = $2; + $$->marker = $3; + } + + /* VariableTypeValueSetFieldSpec ::= valuesetfieldreference FieldName ValueOptionalitySpec ? */ + | TOK_typefieldreference FieldName optMarker { + $$ = asn1p_expr_new(yylineno); + $$->Identifier = $1; + $$->meta_type = AMT_OBJECTFIELD; + $$->expr_type = A1TC_CLASSFIELD_VTVSFS; + $$->reference = $2; + $$->marker = $3; + } + + /* ObjectFieldSpec ::= objectfieldreference DefinedObjectClass ObjectOptionalitySpec ? */ + | TOK_valuefieldreference DefinedObjectClass optMarker { $$ = asn1p_expr_new(yylineno); checkmem($$); - $$->Identifier = $1.name; - $$->reference = asn1p_ref_new(yylineno); - checkmem($$->reference); - ret = asn1p_ref_add_component($$->reference, - $2.name, $2.lex_type); - checkmem(ret == 0); - $$->expr_type = A1TC_CLASSFIELD; + $$->Identifier = $1; + $$->reference = $2; $$->meta_type = AMT_OBJECTFIELD; - $$->marker = $4; - $$->unique = $3; + $$->expr_type = A1TC_CLASSFIELD_OFS; + $$->marker = $3; + } + + /* ObjectSetFieldSpec ::= objectsetfieldreference DefinedObjectClass ObjectOptionalitySpec ? */ + | TOK_typefieldreference DefinedObjectClass optMarker { + $$ = asn1p_expr_new(yylineno); + checkmem($$); + $$->Identifier = $1; + $$->reference = $2; + $$->meta_type = AMT_OBJECTFIELD; + $$->expr_type = A1TC_CLASSFIELD_OSFS; + $$->marker = $3; } + + /* FixedTypeValueSetFieldSpec ::= valuesetfieldreference Type ValueSetOptionalitySpec ? */ + | TOK_typefieldreference Type optMarker { + $$ = asn1p_expr_new(yylineno); + checkmem($$); + $$->Identifier = $1; + $$->meta_type = AMT_OBJECTFIELD; + $$->expr_type = A1TC_CLASSFIELD_FTVSFS; + asn1p_expr_add($$, $2); + $$->marker = $3; + } + + /* + DefinedObjectClass: + TOK_capitalreference { + $$ = asn1p_ref_new(yylineno); + asn1p_ref_add_component($$, $1, RLT_CAPITALS); + } + | TypeRefName '.' TOK_capitalreference { + $$ = asn1p_ref_new(yylineno); + asn1p_ref_add_component($$, $1, RLT_AmpUppercase); + asn1p_ref_add_component($$, $3, RLT_CAPITALS); + } + ; + */ + ; optWithSyntax: @@ -1333,6 +1388,35 @@ ClassFieldName: ; +FieldName: + /* "&Type1" */ + TOK_typefieldreference { + $$ = asn1p_ref_new(yylineno); + asn1p_ref_add_component($$, $1, RLT_AmpUppercase); + } + | FieldName '.' TOK_typefieldreference { + $$ = $$; + asn1p_ref_add_component($$, $3, RLT_AmpUppercase); + } + | FieldName '.' TOK_valuefieldreference { + $$ = $$; + asn1p_ref_add_component($$, $3, RLT_Amplowercase); + } + ; + +DefinedObjectClass: + TOK_capitalreference { + $$ = asn1p_ref_new(yylineno); + asn1p_ref_add_component($$, $1, RLT_CAPITALS); + } + | TypeRefName '.' TOK_capitalreference { + $$ = asn1p_ref_new(yylineno); + asn1p_ref_add_component($$, $1, RLT_AmpUppercase); + asn1p_ref_add_component($$, $3, RLT_CAPITALS); + } + ; + + /* * === EXAMPLE === * value INTEGER ::= 1 diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c index 83c31a10..992a344b 100644 --- a/libasn1print/asn1print.c +++ b/libasn1print/asn1print.c @@ -562,7 +562,7 @@ asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1pri case A1TC_CLASSDEF: printf(" CLASS"); break; - case A1TC_CLASSFIELD: + case A1TC_CLASSFIELD_TFS ... A1TC_CLASSFIELD_OSFS: /* Nothing to print here */ break; case ASN_CONSTR_SET_OF: @@ -604,10 +604,12 @@ asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1pri || (tc->expr_type & ASN_CONSTR_MASK) || tc->meta_type == AMT_VALUESET || tc->meta_type == AMT_OBJECT - || tc->meta_type == AMT_OBJECTSET + || tc->meta_type == AMT_OBJECTCLASS + || tc->meta_type == AMT_OBJECTFIELD ) { asn1p_expr_t *se; /* SubExpression */ - int put_braces = !SEQ_OF; /* Don't need 'em, if SET OF... */ + int put_braces = (!SEQ_OF) /* Don't need 'em, if SET OF... */ + && (tc->meta_type != AMT_OBJECTFIELD); if(put_braces) { if(flags & APF_NOINDENT) { diff --git a/tests/34-class-OK.asn1.-EF b/tests/34-class-OK.asn1.-EF index 340f1275..8cc56eee 100644 --- a/tests/34-class-OK.asn1.-EF +++ b/tests/34-class-OK.asn1.-EF @@ -18,7 +18,7 @@ Ext1 ::= SEQUENCE { EXTENSION-ATTRIBUTE ::= CLASS { &id INTEGER (0..256) UNIQUE, - &Type + &Type ANY } WITH SYNTAX {&Type IDENTIFIED BY &id} @@ -26,7 +26,7 @@ terminal-type EXTENSION-ATTRIBUTE ::= {TerminalType IDENTIFIED BY 23} ExtensionAttribute ::= SEQUENCE { extension-attribute-type [0] IMPLICIT EXTENSION-ATTRIBUTE.&id ({ExtensionAttributeTable}), - extension-attribute-value [1] IMPLICIT EXTENSION-ATTRIBUTE.&Type ({ExtensionAttributeTable}{@extension-attribute-type}) + extension-attribute-value [1] EXPLICIT EXTENSION-ATTRIBUTE.&Type ({ExtensionAttributeTable}{@extension-attribute-type}) } ub-extension-attributes INTEGER ::= 256 -- GitLab