diff --git a/examples/sample.makefile.regen b/examples/sample.makefile.regen index f34f0a26..ba035148 100755 --- a/examples/sample.makefile.regen +++ b/examples/sample.makefile.regen @@ -23,8 +23,6 @@ if test -z "$ASN1PDU" \ exit fi -ASN1DEFPDU=`echo "$ASN1PDU" | tr - _` - ../../asn1c/asn1c -S ../../skeletons ${ASN1CMDOPTS} ${ASN1MODULES} || exit $? if test ! -f Makefile.am.sample ; then @@ -32,20 +30,15 @@ if test ! -f Makefile.am.sample ; then exit 1 fi -CFLAGS="" - +ASN1DEFPDU=`echo "$ASN1PDU" | tr - _` +CFLAGS="-DPDU=${ASN1DEFPDU}" if test -f config.h ; then - CFLAGS="$CFLAGS -DHAVE_CONFIG_H" -fi - -FIXEDPDU=`echo "[$ASN1CMDOPTS]" | sed -e "s/.*-pdu=auto.*//"` -if test ! "$FIXEDPDU" ; then - CFLAGS="$CFLAGS -DASN_PDU_COLLECTION" + CFLAGS="-DHAVE_CONFIG_H $CFLAGS" fi set -x cat Makefile.am.sample \ - | sed -e "s/^CFLAGS.*/CFLAGS +=$CFLAGS -DPDU=${ASN1DEFPDU} -I./" \ + | sed -e "s/^CFLAGS += /CFLAGS += ${CFLAGS} /" \ | sed -e "s/^all: /all: ${ASN1PDU}.c /" \ | sed -e "s/progname/${PROGNAME}/" \ > Makefile.$$ diff --git a/examples/sample.source.RRC/Makefile b/examples/sample.source.RRC/Makefile index db38e980..717e7342 100644 --- a/examples/sample.source.RRC/Makefile +++ b/examples/sample.source.RRC/Makefile @@ -4740,7 +4740,7 @@ libsomething_la_SOURCES=$(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS) # This file may be used as an input for make(3) # Remove the lines below to convert it into a pure .am file TARGET = rrc-dump -CFLAGS += -DHAVE_CONFIG_H -DASN_PDU_COLLECTION -DPDU=DL_DCCH_Message -I. +CFLAGS += -DHAVE_CONFIG_H -DPDU=DL_DCCH_Message -DASN_PDU_COLLECTION -I. OBJS=${ASN_MODULE_SOURCES:.c=.o} ${ASN_CONVERTER_SOURCES:.c=.o} all: DL-DCCH-Message.c $(TARGET) diff --git a/libasn1compiler/asn1c_save.c b/libasn1compiler/asn1c_save.c index 3e467afe..06fc97dd 100644 --- a/libasn1compiler/asn1c_save.c +++ b/libasn1compiler/asn1c_save.c @@ -135,7 +135,7 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir, "# This file may be used as an input for make(3)\n" "# Remove the lines below to convert it into a pure .am file\n" "TARGET = progname\n" - "CFLAGS += -I.\n" + "CFLAGS +=%s -I.\n" "OBJS=${ASN_MODULE_SOURCES:.c=.o}" " ${ASN_CONVERTER_SOURCES:.c=.o}\n" "\nall: $(TARGET)\n" @@ -150,6 +150,7 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir, "\n\trm -f $(OBJS)\n" "\nregen: regenerate-from-asn1-source\n" "\nregenerate-from-asn1-source:\n\t" + , (arg->flags & A1C_PDU_AUTO) ? " -DASN_PDU_COLLECTION" : "" ); for(i = 0; i < argc; i++) diff --git a/libasn1fix/asn1fix_class.c b/libasn1fix/asn1fix_class.c index bf357193..32ad8963 100644 --- a/libasn1fix/asn1fix_class.c +++ b/libasn1fix/asn1fix_class.c @@ -65,7 +65,7 @@ asn1f_class_access(arg_t *arg, asn1p_module_t *mod, asn1p_expr_t *rhs_pspecs, as if(TQ_FIRST(&classfield->members)) { /* Already have something */ } else { - expr = asn1p_expr_new(classfield->_lineno); + expr = asn1p_expr_new(classfield->_lineno, mod); expr->expr_type = ASN_TYPE_ANY; expr->meta_type = AMT_TYPE; asn1p_expr_add(classfield, expr); diff --git a/libasn1fix/asn1fix_constr.c b/libasn1fix/asn1fix_constr.c index 353473d4..0421a52b 100644 --- a/libasn1fix/asn1fix_constr.c +++ b/libasn1fix/asn1fix_constr.c @@ -152,7 +152,7 @@ asn1f_fix_constr_ext(arg_t *arg) { if(arg->mod->module_flags & MSF_EXTENSIBILITY_IMPLIED && ext_count == 0) { - v = asn1p_expr_new(0); + v = asn1p_expr_new(0, arg->mod); if(v) { v->Identifier = strdup("..."); v->expr_type = A1TC_EXTENSIBLE; diff --git a/libasn1fix/asn1fix_constraint_compat.c b/libasn1fix/asn1fix_constraint_compat.c index 96bd0425..954d5f52 100644 --- a/libasn1fix/asn1fix_constraint_compat.c +++ b/libasn1fix/asn1fix_constraint_compat.c @@ -87,6 +87,14 @@ asn1constraint_compatible(asn1p_expr_type_e expr_type, return 0; case ACT_CT_CTDBY: return 1; + case ACT_CT_CTNG: /* X.682, #11 */ + switch(expr_type) { + case ASN_BASIC_OCTET_STRING: + case ASN_BASIC_BIT_STRING: + return 1; + default: + return 0; + } case ACT_CA_SET: case ACT_CA_CRC: case ACT_CA_CSV: diff --git a/libasn1fix/asn1fix_cws.c b/libasn1fix/asn1fix_cws.c index b5457115..8931a92c 100644 --- a/libasn1fix/asn1fix_cws.c +++ b/libasn1fix/asn1fix_cws.c @@ -192,7 +192,7 @@ _asn1f_assign_cell_value(arg_t *arg, struct asn1p_ioc_row_s *row, struct asn1p_i FATAL("Value %s at line %d is too large for this compiler! Contact the asn1c author.\n", p, arg->expr->_lineno); return -1; } - expr = asn1p_expr_new(arg->expr->_lineno); + expr = asn1p_expr_new(arg->expr->_lineno, arg->expr->module); expr->Identifier = p; expr->meta_type = AMT_VALUE; expr->expr_type = ASN_BASIC_INTEGER; diff --git a/libasn1fix/asn1fix_misc.c b/libasn1fix/asn1fix_misc.c index 4af0fd8c..69d08bd6 100644 --- a/libasn1fix/asn1fix_misc.c +++ b/libasn1fix/asn1fix_misc.c @@ -81,6 +81,8 @@ asn1f_printable_value(asn1p_value_t *v) { /* Buffer is guaranteed to be null-terminated */ assert(v->value.string.buf[v->value.string.size] == '\0'); return (char *)v->value.string.buf; + case ATV_TYPE: + return ""; case ATV_BITVECTOR: { uint8_t *bitvector; diff --git a/libasn1parser/asn1p_constr.c b/libasn1parser/asn1p_constr.c index 7aa464ee..ee8d1ebf 100644 --- a/libasn1parser/asn1p_constr.c +++ b/libasn1parser/asn1p_constr.c @@ -169,6 +169,8 @@ asn1p_constraint_type2str(enum asn1p_constraint_type_e type) { return "MultipleTypeConstraints"; case ACT_CT_CTDBY: return "UserDefinedConstraint"; + case ACT_CT_CTNG: + return "ContentsConstraint"; case ACT_CA_SET: return "SET"; case ACT_CA_CRC: diff --git a/libasn1parser/asn1p_constr.h b/libasn1parser/asn1p_constr.h index 912fd8f7..bb6ba327 100644 --- a/libasn1parser/asn1p_constr.h +++ b/libasn1parser/asn1p_constr.h @@ -26,11 +26,12 @@ typedef struct asn1p_constraint_s { ACT_CT_WCOMP, /* WITH COMPONENT */ ACT_CT_WCOMPS, /* WITH COMPONENTS */ ACT_CT_CTDBY, /* CONSTRAINED BY */ + ACT_CT_CTNG, /* CONTAINING Type */ /* * Arrays of constraints. */ ACT_CA_SET, /* A set of constraints: (c1)(c2) */ - ACT_CA_CRC, /* Comp. relation c-t: ({a})({@b}) */ + ACT_CA_CRC, /* Comp. relation c-t: ({a}{@b}) */ ACT_CA_CSV, /* Comma-separated constraints array */ ACT_CA_UNI, /* UNION (|) */ ACT_CA_INT, /* INTERSECTION (^) */ diff --git a/libasn1parser/asn1p_expr.c b/libasn1parser/asn1p_expr.c index 29919a14..8760066d 100644 --- a/libasn1parser/asn1p_expr.c +++ b/libasn1parser/asn1p_expr.c @@ -13,13 +13,14 @@ static asn1p_value_t *value_resolver(asn1p_value_t *, void *arg); * Construct a new empty types collection. */ asn1p_expr_t * -asn1p_expr_new(int _lineno) { +asn1p_expr_new(int _lineno, asn1p_module_t *mod) { asn1p_expr_t *expr; expr = calloc(1, sizeof *expr); if(expr) { TQ_INIT(&(expr->members)); expr->spec_index = -1; + expr->module = mod; expr->_lineno = _lineno; } @@ -96,7 +97,7 @@ asn1p_expr_clone_impl(asn1p_expr_t *expr, int skip_extensions, asn1p_expr_t *(*r return NULL; /* Hard error */ } } - if(!clone) clone = asn1p_expr_new(expr->_lineno); + if(!clone) clone = asn1p_expr_new(expr->_lineno, expr->module); if(!clone) return NULL; /* @@ -106,7 +107,6 @@ asn1p_expr_clone_impl(asn1p_expr_t *expr, int skip_extensions, asn1p_expr_t *(*r CLCOPY(expr_type); CLCOPY(tag); CLCOPY(marker.flags); /* OPTIONAL/DEFAULT */ - CLCOPY(module); CLCOPY(_mark); clone->data = 0; /* Do not clone this */ @@ -165,7 +165,7 @@ value_resolver(asn1p_value_t *value, void *rarg) { } ref = value->value.reference; - tmpexpr = asn1p_expr_new(ref->_lineno); + tmpexpr = asn1p_expr_new(ref->_lineno, 0); tmpexpr->meta_type = AMT_TYPEREF; tmpexpr->expr_type = A1TC_REFERENCE; tmpexpr->reference = ref; diff --git a/libasn1parser/asn1p_expr.h b/libasn1parser/asn1p_expr.h index 32645efc..babe53f5 100644 --- a/libasn1parser/asn1p_expr.h +++ b/libasn1parser/asn1p_expr.h @@ -271,7 +271,7 @@ typedef struct asn1p_expr_s { /* * Constructor and destructor. */ -asn1p_expr_t *asn1p_expr_new(int _lineno); +asn1p_expr_t *asn1p_expr_new(int _lineno, struct asn1p_module_s *); asn1p_expr_t *asn1p_expr_clone(asn1p_expr_t *, int skip_extensions); asn1p_expr_t *asn1p_expr_clone_with_resolver(asn1p_expr_t *, asn1p_expr_t *(*resolver)(asn1p_expr_t *to_resolve, void *resolver_arg), diff --git a/libasn1parser/asn1p_module.c b/libasn1parser/asn1p_module.c index 8a47df66..d030da78 100644 --- a/libasn1parser/asn1p_module.c +++ b/libasn1parser/asn1p_module.c @@ -12,8 +12,8 @@ asn1p_module_new() { mod = calloc(1, sizeof *mod); if(mod) { - TQ_INIT(&(mod->imports)); TQ_INIT(&(mod->exports)); + TQ_INIT(&(mod->imports)); TQ_INIT(&(mod->members)); } return mod; diff --git a/libasn1parser/asn1p_module.h b/libasn1parser/asn1p_module.h index ad9eab04..25dcf1e7 100644 --- a/libasn1parser/asn1p_module.h +++ b/libasn1parser/asn1p_module.h @@ -4,6 +4,18 @@ #ifndef ASN1_PARSER_MODULE_H #define ASN1_PARSER_MODULE_H +struct asn1p_module_s; + +/* + * A simple container for several modules. + */ +typedef struct asn1p_s { + TQ_HEAD(struct asn1p_module_s) modules; +} asn1p_t; + +asn1p_t *asn1p_new(void); +void asn1p_delete(asn1p_t *asn); + /* * Flags specific to a module. */ @@ -71,6 +83,9 @@ typedef struct asn1p_module_s { TQ_ENTRY(struct asn1p_module_s) mod_next; + /* All modules */ + asn1p_t *asn1p; + /* * Internally useful properties. */ @@ -85,15 +100,4 @@ typedef struct asn1p_module_s { asn1p_module_t *asn1p_module_new(void); void asn1p_module_free(asn1p_module_t *mod); -/* - * No more than a container for several modules. - */ -typedef struct asn1p_s { - TQ_HEAD(struct asn1p_module_s) modules; -} asn1p_t; - -asn1p_t *asn1p_new(void); -void asn1p_delete(asn1p_t *asn); - - #endif /* ASN1_PARSER_MODULE_H */ diff --git a/libasn1parser/asn1p_value.c b/libasn1parser/asn1p_value.c index cafc1f93..63c80c7e 100644 --- a/libasn1parser/asn1p_value.c +++ b/libasn1parser/asn1p_value.c @@ -132,6 +132,16 @@ asn1p_value_fromint(asn1c_integer_t i) { return v; } +asn1p_value_t * +asn1p_value_fromtype(asn1p_expr_t *expr) { + asn1p_value_t *v = calloc(1, sizeof *v); + if(v) { + v->value.v_type = expr; + v->type = ATV_TYPE; + } + return v; +} + asn1p_value_t * asn1p_value_clone(asn1p_value_t *v) { return asn1p_value_clone_with_resolver(v, 0, 0); @@ -149,6 +159,8 @@ asn1p_value_clone_with_resolver(asn1p_value_t *v, return calloc(1, sizeof(*clone)); case ATV_REAL: return asn1p_value_fromdouble(v->value.v_double); + case ATV_TYPE: + return asn1p_value_fromtype(v->value.v_type); case ATV_INTEGER: case ATV_MIN: case ATV_MAX: @@ -213,6 +225,9 @@ asn1p_value_free(asn1p_value_t *v) { case ATV_NOVALUE: case ATV_NULL: break; + case ATV_TYPE: + asn1p_expr_free(v->value.v_type); + break; case ATV_REAL: case ATV_INTEGER: case ATV_MIN: diff --git a/libasn1parser/asn1p_value.h b/libasn1parser/asn1p_value.h index 1b5bbeec..c260c27e 100644 --- a/libasn1parser/asn1p_value.h +++ b/libasn1parser/asn1p_value.h @@ -5,6 +5,7 @@ #define ASN1_PARSER_VALUE_H struct asn1p_constraint_s; /* Forward declaration */ +struct asn1p_expr_s; /* * A wrapper around various kinds of values. @@ -15,6 +16,7 @@ typedef struct asn1p_value_s { */ enum { ATV_NOVALUE, + ATV_TYPE, /* A type (as in CONTAINING Type) */ ATV_NULL, /* A "NULL" value of type NULL. */ ATV_REAL, /* A constant floating-point value */ ATV_INTEGER, /* An integer constant */ @@ -34,6 +36,7 @@ typedef struct asn1p_value_s { union { struct asn1p_constraint_s *constraint; /* ValueSet */ + struct asn1p_expr_s *v_type; /* Type */ asn1p_ref_t *reference; asn1c_integer_t v_integer; double v_double; @@ -68,6 +71,7 @@ asn1p_value_t *asn1p_value_frombits(uint8_t *bits, int size_in_bits, int dc); asn1p_value_t *asn1p_value_frombuf(char *buffer, int size, int do_copy); asn1p_value_t *asn1p_value_fromdouble(double); asn1p_value_t *asn1p_value_fromint(asn1c_integer_t); +asn1p_value_t *asn1p_value_fromtype(struct asn1p_expr_s *); asn1p_value_t *asn1p_value_clone(asn1p_value_t *); asn1p_value_t *asn1p_value_clone_with_resolver(asn1p_value_t *, asn1p_value_t *(*resolver)(asn1p_value_t *, void *rarg), diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c index d1105a53..95195962 100644 --- a/libasn1parser/asn1p_y.c +++ b/libasn1parser/asn1p_y.c @@ -312,6 +312,9 @@ static struct AssignedIdentifier *saved_aid; static asn1p_value_t *_convert_bitstring2binary(char *str, int base); static void _fixup_anonymous_identifier(asn1p_expr_t *expr); +static asn1p_module_t *currentModule; +#define NEW_EXPR() (asn1p_expr_new(yylineno, currentModule)) + #define checkmem(ptr) do { \ if(!(ptr)) \ return yyerror("Memory failure"); \ @@ -365,7 +368,7 @@ static void _fixup_anonymous_identifier(asn1p_expr_t *expr); #endif #ifndef YYSTYPE -#line 85 "asn1p_y.y" +#line 88 "asn1p_y.y" typedef union { asn1p_t *a_grammar; asn1p_module_flags_e a_module_flags; @@ -401,7 +404,7 @@ typedef union { } tv_nametag; } yystype; /* Line 193 of /usr/local/share/bison/yacc.c. */ -#line 405 "asn1p_y.c" +#line 408 "asn1p_y.c" # define YYSTYPE yystype # define YYSTYPE_IS_TRIVIAL 1 #endif @@ -422,7 +425,7 @@ typedef struct yyltype /* Line 213 of /usr/local/share/bison/yacc.c. */ -#line 426 "asn1p_y.c" +#line 429 "asn1p_y.c" #if ! defined (yyoverflow) || YYERROR_VERBOSE @@ -520,16 +523,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 7 -#define YYLAST 816 +#define YYLAST 834 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 121 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 112 +#define YYNNTS 117 /* YYNRULES -- Number of rules. */ -#define YYNRULES 296 +#define YYNRULES 302 /* YYNRULES -- Number of states. */ -#define YYNSTATES 453 +#define YYNSTATES 462 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -585,160 +588,163 @@ static const unsigned char yytranslate[] = YYRHS. */ static const unsigned short yyprhs[] = { - 0, 0, 3, 5, 7, 10, 19, 20, 22, 26, - 29, 31, 34, 36, 41, 43, 44, 46, 48, 51, - 54, 57, 60, 63, 66, 67, 69, 73, 75, 78, - 80, 82, 84, 85, 89, 91, 92, 94, 98, 101, - 103, 106, 107, 109, 114, 116, 120, 122, 126, 128, - 129, 131, 135, 139, 142, 144, 148, 150, 154, 156, - 160, 165, 167, 169, 174, 178, 182, 189, 196, 198, - 202, 204, 208, 212, 216, 220, 222, 226, 228, 230, - 232, 234, 235, 237, 239, 243, 247, 250, 254, 256, - 258, 262, 265, 267, 269, 275, 276, 278, 280, 284, - 287, 292, 296, 300, 304, 308, 312, 313, 315, 316, - 323, 325, 328, 330, 332, 334, 338, 340, 344, 348, - 352, 353, 356, 358, 363, 368, 373, 380, 387, 389, - 394, 398, 400, 404, 408, 412, 414, 418, 420, 424, - 426, 428, 430, 432, 436, 440, 442, 447, 449, 451, - 455, 456, 460, 462, 464, 466, 468, 470, 472, 474, - 476, 480, 482, 484, 486, 488, 491, 493, 495, 497, - 499, 502, 505, 507, 509, 512, 515, 517, 519, 521, - 523, 525, 528, 530, 533, 535, 537, 539, 541, 543, + 0, 0, 3, 5, 7, 10, 11, 21, 22, 24, + 28, 31, 33, 36, 38, 43, 45, 46, 48, 50, + 53, 56, 59, 62, 65, 68, 69, 71, 75, 77, + 80, 82, 84, 86, 87, 91, 93, 94, 96, 100, + 103, 105, 108, 109, 111, 116, 118, 122, 124, 128, + 130, 131, 133, 137, 141, 144, 146, 150, 152, 156, + 158, 162, 167, 169, 171, 176, 180, 184, 191, 198, + 200, 204, 206, 210, 214, 218, 222, 224, 228, 230, + 232, 234, 236, 237, 239, 241, 245, 249, 252, 256, + 258, 260, 264, 267, 269, 271, 277, 278, 280, 282, + 286, 289, 294, 298, 302, 306, 310, 314, 315, 317, + 318, 325, 327, 330, 332, 334, 336, 340, 342, 346, + 350, 354, 355, 358, 360, 365, 370, 375, 382, 389, + 391, 396, 400, 402, 406, 410, 414, 416, 420, 422, + 426, 428, 430, 432, 434, 438, 442, 444, 449, 451, + 453, 457, 458, 462, 464, 466, 468, 470, 472, 474, + 476, 478, 482, 484, 486, 488, 490, 493, 495, 497, + 499, 501, 504, 507, 509, 511, 514, 517, 519, 521, + 523, 525, 527, 530, 532, 535, 537, 539, 541, 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, 563, - 565, 567, 569, 571, 572, 574, 576, 581, 585, 590, - 592, 594, 598, 604, 606, 610, 614, 618, 622, 627, - 631, 633, 635, 639, 643, 647, 651, 653, 655, 656, - 662, 664, 667, 670, 674, 676, 678, 680, 682, 684, - 686, 688, 690, 694, 700, 702, 706, 708, 712, 713, - 715, 717, 719, 721, 723, 725, 729, 734, 736, 740, - 743, 747, 749, 753, 754, 756, 758, 761, 764, 768, - 770, 774, 776, 781, 786, 788, 790, 792, 794, 796, - 798, 799, 801, 804, 809, 810, 812, 814, 816, 817, - 819, 821, 823, 825, 827, 828, 830 + 565, 567, 569, 571, 573, 574, 576, 578, 582, 584, + 589, 593, 598, 600, 602, 606, 612, 614, 618, 622, + 626, 630, 635, 639, 641, 643, 647, 651, 655, 659, + 661, 663, 665, 667, 669, 671, 673, 675, 677, 681, + 687, 689, 693, 695, 699, 700, 702, 704, 706, 708, + 710, 712, 714, 715, 721, 724, 726, 729, 732, 736, + 738, 740, 744, 749, 751, 755, 758, 762, 764, 768, + 769, 771, 773, 776, 779, 783, 785, 789, 791, 796, + 801, 803, 805, 807, 809, 811, 813, 814, 816, 819, + 824, 825, 827, 829, 831, 832, 834, 836, 838, 840, + 842, 843, 845 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const short yyrhs[] = { 122, 0, -1, 123, -1, 124, -1, 123, 124, -1, - 229, 125, 39, 129, 3, 26, 132, 44, -1, -1, - 126, -1, 108, 127, 109, -1, 108, 109, -1, 128, - -1, 127, 128, -1, 232, -1, 232, 110, 10, 111, - -1, 10, -1, -1, 130, -1, 131, -1, 130, 131, - -1, 46, 89, -1, 57, 89, -1, 25, 89, -1, - 48, 58, -1, 16, 62, -1, -1, 133, -1, 144, - 137, 134, -1, 135, -1, 134, 135, -1, 151, -1, - 181, -1, 149, -1, -1, 43, 16, 136, -1, 191, - -1, -1, 138, -1, 59, 139, 112, -1, 59, 51, - -1, 141, -1, 139, 141, -1, -1, 126, -1, 142, - 51, 229, 140, -1, 143, -1, 142, 113, 143, -1, - 229, -1, 229, 108, 109, -1, 232, -1, -1, 145, - -1, 47, 146, 112, -1, 47, 22, 112, -1, 47, - 112, -1, 147, -1, 146, 113, 147, -1, 229, -1, - 229, 108, 109, -1, 232, -1, 108, 198, 109, -1, - 229, 150, 3, 148, -1, 190, -1, 175, -1, 175, - 108, 154, 109, -1, 229, 3, 171, -1, 229, 3, - 161, -1, 229, 108, 152, 109, 3, 171, -1, 229, - 108, 152, 109, 3, 161, -1, 153, -1, 152, 113, - 153, -1, 229, -1, 229, 114, 232, -1, 229, 114, - 229, -1, 188, 114, 232, -1, 188, 114, 229, -1, - 155, -1, 154, 113, 155, -1, 171, -1, 184, -1, - 232, -1, 148, -1, -1, 157, -1, 158, -1, 157, - 113, 158, -1, 232, 171, 217, -1, 171, 217, -1, - 35, 73, 171, -1, 170, -1, 160, -1, 159, 113, - 160, -1, 232, 171, -1, 170, -1, 171, -1, 33, - 108, 163, 109, 165, -1, -1, 93, -1, 164, -1, - 163, 113, 164, -1, 17, 217, -1, 18, 171, 162, - 217, -1, 18, 179, 217, -1, 18, 180, 217, -1, - 17, 179, 217, -1, 17, 171, 217, -1, 17, 180, - 217, -1, -1, 166, -1, -1, 100, 87, 108, 167, - 168, 109, -1, 169, -1, 168, 169, -1, 4, -1, - 19, -1, 178, -1, 115, 168, 116, -1, 107, -1, - 107, 117, 185, -1, 107, 117, 222, -1, 224, 173, - 195, -1, -1, 172, 174, -1, 150, -1, 32, 108, - 159, 109, -1, 83, 108, 156, 109, -1, 84, 108, - 156, 109, -1, 83, 195, 73, 231, 224, 173, -1, - 84, 195, 73, 231, 224, 173, -1, 23, -1, 23, - 40, 30, 232, -1, 61, 73, 175, -1, 15, -1, - 15, 118, 229, -1, 230, 118, 229, -1, 15, 118, - 232, -1, 230, -1, 230, 118, 176, -1, 177, -1, - 176, 118, 177, -1, 178, -1, 17, -1, 18, -1, - 17, -1, 179, 118, 17, -1, 179, 118, 18, -1, - 16, -1, 232, 150, 3, 182, -1, 184, -1, 185, - -1, 232, 114, 182, -1, -1, 108, 183, 187, -1, - 68, -1, 50, -1, 91, -1, 6, -1, 8, -1, - 186, -1, 222, -1, 232, -1, 229, 118, 232, -1, - 7, -1, 13, -1, 14, -1, 5, -1, 187, 5, - -1, 29, -1, 68, -1, 81, -1, 189, -1, 72, - 86, -1, 70, 56, -1, 82, -1, 49, -1, 41, - 76, -1, 31, 86, -1, 96, -1, 52, -1, 191, - -1, 63, -1, 45, -1, 27, 86, -1, 188, -1, - 189, 219, -1, 28, -1, 53, -1, 54, -1, 55, - -1, 64, -1, 69, -1, 79, -1, 88, -1, 90, - -1, 95, -1, 97, -1, 98, -1, 99, -1, 71, - -1, 104, -1, 105, -1, 102, -1, 103, -1, 101, - -1, -1, 196, -1, 197, -1, 85, 110, 198, 111, - -1, 110, 198, 111, -1, 197, 110, 198, 111, -1, - 107, -1, 199, -1, 199, 113, 107, -1, 199, 113, - 107, 113, 199, -1, 200, -1, 22, 101, 200, -1, - 199, 192, 200, -1, 199, 193, 200, -1, 200, 194, - 200, -1, 203, 110, 198, 111, -1, 110, 198, 111, - -1, 204, -1, 205, -1, 204, 202, 204, -1, 66, - 202, 204, -1, 204, 202, 65, -1, 66, 202, 65, - -1, 211, -1, 206, -1, -1, 36, 30, 108, 201, - 187, -1, 106, -1, 106, 119, -1, 119, 106, -1, - 119, 106, 119, -1, 85, -1, 51, -1, 50, -1, - 91, -1, 223, -1, 186, -1, 232, -1, 229, -1, - 100, 34, 197, -1, 100, 35, 108, 207, 109, -1, - 208, -1, 207, 113, 208, -1, 107, -1, 232, 195, - 209, -1, -1, 210, -1, 78, -1, 20, -1, 74, - -1, 212, -1, 213, -1, 108, 229, 109, -1, 212, - 108, 214, 109, -1, 215, -1, 214, 113, 215, -1, - 120, 216, -1, 120, 118, 216, -1, 232, -1, 216, - 118, 232, -1, -1, 218, -1, 74, -1, 38, 182, - -1, 108, 109, -1, 108, 220, 109, -1, 221, -1, - 220, 113, 221, -1, 232, -1, 232, 110, 222, 111, - -1, 232, 110, 185, 111, -1, 222, -1, 107, -1, - 10, -1, 11, -1, 222, -1, 12, -1, -1, 225, - -1, 226, 228, -1, 115, 227, 10, 116, -1, -1, - 94, -1, 24, -1, 80, -1, -1, 57, -1, 46, - -1, 15, -1, 16, -1, 16, -1, -1, 232, -1, - 9, -1 + -1, 234, 125, 126, 39, 130, 3, 26, 133, 44, + -1, -1, 127, -1, 108, 128, 109, -1, 108, 109, + -1, 129, -1, 128, 129, -1, 237, -1, 237, 110, + 10, 111, -1, 10, -1, -1, 131, -1, 132, -1, + 131, 132, -1, 46, 89, -1, 57, 89, -1, 25, + 89, -1, 48, 58, -1, 16, 62, -1, -1, 134, + -1, 145, 138, 135, -1, 136, -1, 135, 136, -1, + 152, -1, 182, -1, 150, -1, -1, 43, 16, 137, + -1, 192, -1, -1, 139, -1, 59, 140, 112, -1, + 59, 51, -1, 142, -1, 140, 142, -1, -1, 127, + -1, 143, 51, 234, 141, -1, 144, -1, 143, 113, + 144, -1, 234, -1, 234, 108, 109, -1, 237, -1, + -1, 146, -1, 47, 147, 112, -1, 47, 22, 112, + -1, 47, 112, -1, 148, -1, 147, 113, 148, -1, + 234, -1, 234, 108, 109, -1, 237, -1, 108, 200, + 109, -1, 234, 151, 3, 149, -1, 191, -1, 176, + -1, 176, 108, 155, 109, -1, 234, 3, 172, -1, + 234, 3, 162, -1, 234, 108, 153, 109, 3, 172, + -1, 234, 108, 153, 109, 3, 162, -1, 154, -1, + 153, 113, 154, -1, 234, -1, 234, 114, 237, -1, + 234, 114, 234, -1, 189, 114, 237, -1, 189, 114, + 234, -1, 156, -1, 155, 113, 156, -1, 172, -1, + 185, -1, 237, -1, 149, -1, -1, 158, -1, 159, + -1, 158, 113, 159, -1, 237, 172, 222, -1, 172, + 222, -1, 35, 73, 172, -1, 171, -1, 161, -1, + 160, 113, 161, -1, 237, 172, -1, 171, -1, 172, + -1, 33, 108, 164, 109, 166, -1, -1, 93, -1, + 165, -1, 164, 113, 165, -1, 17, 222, -1, 18, + 172, 163, 222, -1, 18, 180, 222, -1, 18, 181, + 222, -1, 17, 180, 222, -1, 17, 172, 222, -1, + 17, 181, 222, -1, -1, 167, -1, -1, 100, 87, + 108, 168, 169, 109, -1, 170, -1, 169, 170, -1, + 4, -1, 19, -1, 179, -1, 115, 169, 116, -1, + 107, -1, 107, 117, 186, -1, 107, 117, 227, -1, + 229, 174, 196, -1, -1, 173, 175, -1, 151, -1, + 32, 108, 160, 109, -1, 83, 108, 157, 109, -1, + 84, 108, 157, 109, -1, 83, 196, 73, 236, 229, + 174, -1, 84, 196, 73, 236, 229, 174, -1, 23, + -1, 23, 40, 30, 237, -1, 61, 73, 176, -1, + 15, -1, 15, 118, 234, -1, 235, 118, 234, -1, + 15, 118, 237, -1, 235, -1, 235, 118, 177, -1, + 178, -1, 177, 118, 178, -1, 179, -1, 17, -1, + 18, -1, 17, -1, 180, 118, 17, -1, 180, 118, + 18, -1, 16, -1, 237, 151, 3, 183, -1, 185, + -1, 186, -1, 237, 114, 183, -1, -1, 108, 184, + 188, -1, 68, -1, 50, -1, 91, -1, 6, -1, + 8, -1, 187, -1, 227, -1, 237, -1, 234, 118, + 237, -1, 7, -1, 13, -1, 14, -1, 5, -1, + 188, 5, -1, 29, -1, 68, -1, 81, -1, 190, + -1, 72, 86, -1, 70, 56, -1, 82, -1, 49, + -1, 41, 76, -1, 31, 86, -1, 96, -1, 52, + -1, 192, -1, 63, -1, 45, -1, 27, 86, -1, + 189, -1, 190, 224, -1, 28, -1, 53, -1, 54, + -1, 55, -1, 64, -1, 69, -1, 79, -1, 88, + -1, 90, -1, 95, -1, 97, -1, 98, -1, 99, + -1, 71, -1, 104, -1, 105, -1, 102, -1, 103, + -1, 101, -1, -1, 197, -1, 198, -1, 110, 211, + 111, -1, 199, -1, 85, 110, 200, 111, -1, 110, + 200, 111, -1, 199, 110, 200, 111, -1, 107, -1, + 201, -1, 201, 113, 107, -1, 201, 113, 107, 113, + 201, -1, 202, -1, 22, 101, 202, -1, 201, 193, + 202, -1, 201, 194, 202, -1, 202, 195, 202, -1, + 203, 110, 200, 111, -1, 110, 200, 111, -1, 204, + -1, 205, -1, 204, 215, 204, -1, 66, 215, 204, + -1, 204, 215, 65, -1, 66, 215, 65, -1, 206, + -1, 85, -1, 51, -1, 50, -1, 91, -1, 228, + -1, 187, -1, 237, -1, 234, -1, 100, 34, 199, + -1, 100, 35, 108, 207, 109, -1, 208, -1, 207, + 113, 208, -1, 107, -1, 237, 196, 209, -1, -1, + 210, -1, 78, -1, 20, -1, 74, -1, 212, -1, + 216, -1, 214, -1, -1, 36, 30, 108, 213, 188, + -1, 37, 172, -1, 106, -1, 106, 119, -1, 119, + 106, -1, 119, 106, 119, -1, 217, -1, 218, -1, + 108, 234, 109, -1, 217, 108, 219, 109, -1, 220, + -1, 219, 113, 220, -1, 120, 221, -1, 120, 118, + 221, -1, 237, -1, 221, 118, 237, -1, -1, 223, + -1, 74, -1, 38, 183, -1, 108, 109, -1, 108, + 225, 109, -1, 226, -1, 225, 113, 226, -1, 237, + -1, 237, 110, 227, 111, -1, 237, 110, 186, 111, + -1, 227, -1, 107, -1, 10, -1, 11, -1, 227, + -1, 12, -1, -1, 230, -1, 231, 233, -1, 115, + 232, 10, 116, -1, -1, 94, -1, 24, -1, 80, + -1, -1, 57, -1, 46, -1, 15, -1, 16, -1, + 16, -1, -1, 237, -1, 9, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short yyrline[] = { - 0, 342, 342, 348, 354, 370, 395, 397, 400, 404, - 409, 416, 424, 429, 433, 442, 444, 452, 456, 464, - 468, 471, 474, 478, 498, 500, 508, 517, 521, 536, - 544, 557, 565, 564, 578, 590, 592, 594, 605, 610, - 616, 622, 624, 627, 638, 644, 650, 657, 663, 672, - 674, 685, 689, 692, 699, 705, 711, 718, 724, 733, - 735, 745, 759, 769, 785, 795, 811, 817, 824, 834, - 844, 849, 856, 863, 871, 881, 887, 893, 897, 905, - 916, 938, 940, 942, 948, 954, 962, 968, 975, 980, - 986, 992, 998, 1001, 1007, 1017, 1019, 1022, 1030, 1037, - 1050, 1061, 1071, 1082, 1092, 1103, 1114, 1116, 1123, 1121, - 1130, 1135, 1141, 1146, 1149, 1153, 1158, 1167, 1176, 1187, - 1209, 1216, 1235, 1239, 1245, 1251, 1257, 1267, 1277, 1283, - 1294, 1308, 1317, 1327, 1337, 1347, 1355, 1376, 1385, 1394, - 1396, 1403, 1410, 1416, 1420, 1426, 1446, 1456, 1458, 1459, - 1466, 1466, 1471, 1478, 1484, 1489, 1493, 1497, 1500, 1505, - 1517, 1534, 1539, 1544, 1577, 1587, 1601, 1603, 1604, 1605, - 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1620, - 1622, 1623, 1626, 1633, 1645, 1647, 1651, 1655, 1656, 1657, - 1658, 1659, 1663, 1664, 1665, 1666, 1670, 1671, 1678, 1678, - 1679, 1679, 1680, 1682, 1684, 1689, 1693, 1702, 1706, 1711, - 1716, 1719, 1725, 1735, 1739, 1742, 1745, 1748, 1753, 1762, - 1770, 1776, 1782, 1789, 1797, 1805, 1814, 1817, 1821, 1820, - 1831, 1833, 1834, 1835, 1838, 1842, 1847, 1853, 1858, 1859, - 1860, 1873, 1887, 1891, 1896, 1900, 1905, 1912, 1925, 1927, - 1930, 1934, 1937, 1942, 1946, 1954, 1969, 1975, 1982, 1995, - 2007, 2022, 2026, 2043, 2048, 2051, 2056, 2078, 2083, 2088, - 2094, 2100, 2108, 2116, 2124, 2131, 2141, 2146, 2152, 2154, - 2184, 2186, 2189, 2196, 2202, 2204, 2205, 2206, 2209, 2211, - 2212, 2215, 2220, 2227, 2234, 2236, 2241 + 0, 349, 349, 355, 361, 378, 377, 406, 408, 411, + 415, 420, 427, 435, 440, 444, 453, 455, 463, 467, + 475, 479, 482, 485, 489, 509, 511, 519, 528, 532, + 547, 555, 568, 576, 575, 589, 601, 603, 605, 616, + 621, 627, 633, 635, 638, 649, 655, 661, 668, 674, + 683, 685, 696, 700, 703, 710, 716, 722, 729, 735, + 744, 746, 756, 770, 780, 796, 806, 822, 828, 835, + 845, 855, 860, 867, 874, 882, 892, 898, 904, 908, + 916, 927, 949, 951, 953, 959, 965, 973, 979, 986, + 991, 997, 1003, 1009, 1012, 1018, 1028, 1030, 1033, 1041, + 1048, 1061, 1072, 1082, 1093, 1103, 1114, 1125, 1127, 1134, + 1132, 1141, 1146, 1152, 1157, 1160, 1164, 1169, 1178, 1187, + 1198, 1220, 1227, 1246, 1250, 1256, 1262, 1268, 1278, 1288, + 1294, 1305, 1319, 1328, 1338, 1348, 1358, 1366, 1387, 1396, + 1405, 1407, 1414, 1421, 1427, 1431, 1437, 1457, 1467, 1469, + 1470, 1477, 1477, 1482, 1489, 1495, 1500, 1504, 1508, 1511, + 1516, 1528, 1545, 1550, 1555, 1588, 1598, 1612, 1614, 1615, + 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, + 1631, 1633, 1634, 1637, 1644, 1656, 1658, 1662, 1666, 1667, + 1668, 1669, 1670, 1674, 1675, 1676, 1677, 1681, 1682, 1689, + 1689, 1690, 1690, 1691, 1693, 1695, 1700, 1702, 1707, 1711, + 1720, 1724, 1729, 1734, 1737, 1743, 1753, 1757, 1760, 1763, + 1766, 1771, 1780, 1788, 1794, 1800, 1807, 1815, 1823, 1832, + 1837, 1841, 1846, 1852, 1857, 1858, 1859, 1872, 1886, 1890, + 1895, 1899, 1904, 1911, 1924, 1926, 1929, 1933, 1936, 1943, + 1945, 1946, 1951, 1949, 1961, 1969, 1971, 1972, 1973, 1975, + 1979, 1987, 2002, 2008, 2015, 2028, 2040, 2055, 2059, 2076, + 2081, 2084, 2089, 2111, 2116, 2121, 2127, 2133, 2141, 2149, + 2157, 2164, 2174, 2179, 2185, 2187, 2217, 2219, 2222, 2229, + 2235, 2237, 2238, 2239, 2242, 2244, 2245, 2248, 2253, 2260, + 2267, 2269, 2274 }; #endif @@ -775,11 +781,11 @@ static const char *const yytname[] = "TOK_EXCEPT", "'^'", "TOK_INTERSECTION", "'|'", "TOK_UNION", "TOK_TwoDots", "TOK_ThreeDots", "'{'", "'}'", "'('", "')'", "';'", "','", "':'", "'['", "']'", "'!'", "'.'", "'<'", "'@'", "$accept", - "ParsedGrammar", "ModuleList", "ModuleDefinition", + "ParsedGrammar", "ModuleList", "ModuleDefinition", "@1", "optObjectIdentifier", "ObjectIdentifier", "ObjectIdentifierBody", "ObjectIdentifierElement", "optModuleDefinitionFlags", "ModuleDefinitionFlags", "ModuleDefinitionFlag", "optModuleBody", - "ModuleBody", "AssignmentList", "Assignment", "@1", "optImports", + "ModuleBody", "AssignmentList", "Assignment", "@2", "optImports", "ImportsDefinition", "ImportsBundleSet", "AssignedIdentifier", "ImportsBundle", "ImportsList", "ImportsElement", "optExports", "ExportsDefinition", "ExportsBody", "ExportsElement", "ValueSet", @@ -788,20 +794,21 @@ static const char *const yytname[] = "ActualParameter", "optComponentTypeLists", "ComponentTypeLists", "ComponentType", "AlternativeTypeLists", "AlternativeType", "ObjectClass", "optUnique", "FieldSpec", "ClassField", "optWithSyntax", - "WithSyntax", "@2", "WithSyntaxList", "WithSyntaxToken", + "WithSyntax", "@3", "WithSyntaxList", "WithSyntaxToken", "ExtensionAndException", "Type", "NSTD_IndirectMarker", "TypeDeclaration", "TypeDeclarationSet", "ComplexTypeReference", "ComplexTypeReferenceAmpList", "ComplexTypeReferenceElement", "PrimitiveFieldReference", "FieldName", "DefinedObjectClass", - "ValueDefinition", "Value", "@3", "SimpleValue", "DefinedValue", + "ValueDefinition", "Value", "@4", "SimpleValue", "DefinedValue", "RestrictedCharacterStringValue", "Opaque", "BasicTypeId", "BasicTypeId_UniverationCompatible", "BasicType", "BasicString", - "Union", "Intersection", "Except", "optConstraints", "Constraints", - "SetOfConstraints", "ElementSetSpecs", "ElementSetSpec", - "ConstraintSubtypeElement", "@4", "ConstraintRangeSpec", - "ConstraintSpec", "SingleValue", "ContainedSubtype", - "InnerTypeConstraint", "WithComponentsList", "WithComponentsElement", - "optPresenceConstraint", "PresenceConstraint", "TableConstraint", + "Union", "Intersection", "Except", "optConstraints", "Constraint", + "SubtypeConstraint", "SetOfConstraints", "ElementSetSpecs", + "ElementSetSpec", "ConstraintSubtypeElement", "ConstraintSpec", + "SingleValue", "ContainedSubtype", "InnerTypeConstraint", + "WithComponentsList", "WithComponentsElement", "optPresenceConstraint", + "PresenceConstraint", "GeneralConstraint", "UserDefinedConstraint", + "@5", "ContentsConstraint", "ConstraintRangeSpec", "TableConstraint", "SimpleTableConstraint", "ComponentRelationConstraint", "AtNotationList", "AtNotationElement", "ComponentIdList", "optMarker", "Marker", "UniverationDefinition", "UniverationList", @@ -835,71 +842,73 @@ static const unsigned short yytoknum[] = /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const unsigned char yyr1[] = { - 0, 121, 122, 123, 123, 124, 125, 125, 126, 126, - 127, 127, 128, 128, 128, 129, 129, 130, 130, 131, - 131, 131, 131, 131, 132, 132, 133, 134, 134, 135, - 135, 135, 136, 135, 135, 137, 137, 138, 138, 139, - 139, 140, 140, 141, 142, 142, 143, 143, 143, 144, - 144, 145, 145, 145, 146, 146, 147, 147, 147, 148, - 149, 150, 150, 150, 151, 151, 151, 151, 152, 152, - 153, 153, 153, 153, 153, 154, 154, 155, 155, 155, - 155, 156, 156, 157, 157, 158, 158, 158, 158, 159, - 159, 160, 160, 160, 161, 162, 162, 163, 163, 164, - 164, 164, 164, 164, 164, 164, 165, 165, 167, 166, - 168, 168, 169, 169, 169, 169, 170, 170, 170, 171, - 172, 173, 174, 174, 174, 174, 174, 174, 174, 174, - 174, 175, 175, 175, 175, 175, 175, 176, 176, 177, - 178, 178, 179, 179, 179, 180, 181, 182, 182, 182, - 183, 182, 182, 184, 184, 184, 184, 184, 184, 185, - 185, 186, 186, 186, 187, 187, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 189, - 189, 189, 190, 190, 191, 191, 191, 191, 191, 191, - 191, 191, 191, 191, 191, 191, 191, 191, 192, 192, - 193, 193, 194, 195, 195, 196, 196, 197, 197, 198, - 198, 198, 198, 199, 199, 199, 199, 199, 200, 200, - 200, 200, 200, 200, 200, 200, 200, 200, 201, 200, - 202, 202, 202, 202, 203, 203, 204, 204, 204, 204, - 204, 205, 206, 206, 207, 207, 208, 208, 209, 209, - 210, 210, 210, 211, 211, 212, 213, 214, 214, 215, - 215, 216, 216, 217, 217, 218, 218, 219, 219, 220, - 220, 221, 221, 221, 221, 221, 222, 222, 223, 223, - 224, 224, 225, 226, 227, 227, 227, 227, 228, 228, - 228, 229, 229, 230, 231, 231, 232 + 0, 121, 122, 123, 123, 125, 124, 126, 126, 127, + 127, 128, 128, 129, 129, 129, 130, 130, 131, 131, + 132, 132, 132, 132, 132, 133, 133, 134, 135, 135, + 136, 136, 136, 137, 136, 136, 138, 138, 139, 139, + 140, 140, 141, 141, 142, 143, 143, 144, 144, 144, + 145, 145, 146, 146, 146, 147, 147, 148, 148, 148, + 149, 150, 151, 151, 151, 152, 152, 152, 152, 153, + 153, 154, 154, 154, 154, 154, 155, 155, 156, 156, + 156, 156, 157, 157, 158, 158, 159, 159, 159, 159, + 160, 160, 161, 161, 161, 162, 163, 163, 164, 164, + 165, 165, 165, 165, 165, 165, 165, 166, 166, 168, + 167, 169, 169, 170, 170, 170, 170, 171, 171, 171, + 172, 173, 174, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 176, 176, 176, 176, 176, 176, 177, 177, + 178, 179, 179, 180, 180, 180, 181, 182, 183, 183, + 183, 184, 183, 183, 185, 185, 185, 185, 185, 185, + 186, 186, 187, 187, 187, 188, 188, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, + 190, 190, 190, 191, 191, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 193, + 193, 194, 194, 195, 196, 196, 197, 197, 198, 198, + 199, 199, 200, 200, 200, 200, 201, 201, 201, 201, + 201, 202, 202, 202, 202, 202, 202, 202, 202, 202, + 203, 203, 204, 204, 204, 204, 204, 205, 206, 206, + 207, 207, 208, 208, 209, 209, 210, 210, 210, 211, + 211, 211, 213, 212, 214, 215, 215, 215, 215, 216, + 216, 217, 218, 219, 219, 220, 220, 221, 221, 222, + 222, 223, 223, 224, 224, 225, 225, 226, 226, 226, + 226, 226, 227, 227, 228, 228, 229, 229, 230, 231, + 232, 232, 232, 232, 233, 233, 233, 234, 234, 235, + 236, 236, 237 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const unsigned char yyr2[] = { - 0, 2, 1, 1, 2, 8, 0, 1, 3, 2, - 1, 2, 1, 4, 1, 0, 1, 1, 2, 2, - 2, 2, 2, 2, 0, 1, 3, 1, 2, 1, - 1, 1, 0, 3, 1, 0, 1, 3, 2, 1, - 2, 0, 1, 4, 1, 3, 1, 3, 1, 0, - 1, 3, 3, 2, 1, 3, 1, 3, 1, 3, - 4, 1, 1, 4, 3, 3, 6, 6, 1, 3, - 1, 3, 3, 3, 3, 1, 3, 1, 1, 1, - 1, 0, 1, 1, 3, 3, 2, 3, 1, 1, - 3, 2, 1, 1, 5, 0, 1, 1, 3, 2, - 4, 3, 3, 3, 3, 3, 0, 1, 0, 6, - 1, 2, 1, 1, 1, 3, 1, 3, 3, 3, - 0, 2, 1, 4, 4, 4, 6, 6, 1, 4, - 3, 1, 3, 3, 3, 1, 3, 1, 3, 1, - 1, 1, 1, 3, 3, 1, 4, 1, 1, 3, - 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, - 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, + 0, 2, 1, 1, 2, 0, 9, 0, 1, 3, + 2, 1, 2, 1, 4, 1, 0, 1, 1, 2, + 2, 2, 2, 2, 2, 0, 1, 3, 1, 2, + 1, 1, 1, 0, 3, 1, 0, 1, 3, 2, + 1, 2, 0, 1, 4, 1, 3, 1, 3, 1, + 0, 1, 3, 3, 2, 1, 3, 1, 3, 1, + 3, 4, 1, 1, 4, 3, 3, 6, 6, 1, + 3, 1, 3, 3, 3, 3, 1, 3, 1, 1, + 1, 1, 0, 1, 1, 3, 3, 2, 3, 1, + 1, 3, 2, 1, 1, 5, 0, 1, 1, 3, + 2, 4, 3, 3, 3, 3, 3, 0, 1, 0, + 6, 1, 2, 1, 1, 1, 3, 1, 3, 3, + 3, 0, 2, 1, 4, 4, 4, 6, 6, 1, + 4, 3, 1, 3, 3, 3, 1, 3, 1, 3, + 1, 1, 1, 1, 3, 3, 1, 4, 1, 1, + 3, 0, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, + 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 1, 1, 4, 3, 4, 1, - 1, 3, 5, 1, 3, 3, 3, 3, 4, 3, - 1, 1, 3, 3, 3, 3, 1, 1, 0, 5, - 1, 2, 2, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 5, 1, 3, 1, 3, 0, 1, - 1, 1, 1, 1, 1, 3, 4, 1, 3, 2, - 3, 1, 3, 0, 1, 1, 2, 2, 3, 1, - 3, 1, 4, 4, 1, 1, 1, 1, 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, 3, 1, 4, + 3, 4, 1, 1, 3, 5, 1, 3, 3, 3, + 3, 4, 3, 1, 1, 3, 3, 3, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, + 1, 3, 1, 3, 0, 1, 1, 1, 1, 1, + 1, 1, 0, 5, 2, 1, 2, 2, 3, 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, 1, 1, 0, 1, 2, 4, + 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, + 0, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -907,368 +916,375 @@ static const unsigned char yyr2[] = means the default is an error. */ static const unsigned short yydefact[] = { - 0, 291, 292, 0, 2, 3, 6, 1, 4, 0, - 0, 7, 296, 14, 9, 0, 10, 12, 15, 8, - 11, 0, 0, 0, 0, 0, 0, 0, 16, 17, - 0, 23, 21, 19, 22, 20, 0, 18, 13, 49, - 0, 0, 25, 35, 50, 0, 53, 0, 54, 56, - 58, 5, 0, 0, 36, 52, 51, 0, 0, 38, - 0, 39, 0, 44, 46, 48, 184, 0, 185, 186, - 187, 188, 189, 197, 190, 191, 192, 193, 194, 195, - 196, 26, 27, 31, 29, 30, 34, 0, 0, 55, - 57, 37, 40, 0, 0, 0, 32, 28, 280, 131, - 293, 0, 166, 0, 0, 180, 173, 177, 179, 167, - 0, 0, 168, 172, 176, 0, 0, 62, 182, 169, - 61, 178, 135, 0, 41, 45, 47, 33, 0, 284, - 65, 64, 120, 281, 288, 0, 181, 175, 174, 171, - 170, 0, 68, 0, 169, 70, 0, 280, 0, 183, - 0, 0, 42, 43, 0, 286, 287, 285, 0, 0, - 203, 290, 289, 282, 132, 134, 0, 0, 0, 0, - 0, 60, 155, 161, 156, 276, 277, 162, 163, 153, - 154, 80, 0, 75, 77, 78, 157, 158, 79, 275, - 267, 0, 269, 274, 271, 140, 141, 136, 137, 139, - 133, 152, 150, 146, 147, 148, 0, 159, 280, 280, - 0, 97, 0, 128, 0, 0, 203, 203, 122, 121, - 0, 0, 119, 204, 205, 280, 69, 74, 73, 72, - 71, 279, 0, 0, 236, 235, 0, 234, 237, 0, - 209, 0, 0, 239, 0, 210, 213, 0, 220, 221, - 227, 226, 253, 254, 278, 238, 241, 240, 63, 280, - 268, 0, 0, 0, 0, 0, 0, 145, 142, 0, - 265, 263, 263, 263, 99, 264, 95, 263, 263, 106, - 0, 283, 0, 280, 0, 280, 0, 280, 0, 0, - 0, 0, 67, 66, 0, 0, 230, 0, 0, 0, - 0, 0, 0, 59, 200, 201, 198, 199, 0, 0, - 0, 202, 0, 0, 0, 0, 76, 270, 0, 0, - 159, 138, 164, 151, 160, 149, 266, 104, 0, 103, - 105, 96, 263, 101, 102, 0, 94, 107, 98, 0, - 116, 0, 89, 92, 93, 280, 130, 0, 0, 82, - 83, 88, 263, 280, 294, 0, 294, 0, 207, 0, - 214, 228, 231, 232, 225, 223, 242, 0, 255, 219, - 211, 215, 216, 217, 0, 224, 222, 0, 0, 257, - 273, 272, 165, 143, 144, 100, 0, 129, 0, 123, - 280, 91, 280, 124, 280, 86, 263, 280, 295, 125, - 280, 206, 208, 0, 233, 246, 0, 244, 203, 0, - 218, 0, 259, 261, 256, 0, 108, 117, 118, 90, - 87, 84, 85, 120, 120, 229, 243, 0, 248, 212, - 260, 0, 258, 0, 126, 127, 245, 251, 252, 250, - 247, 249, 262, 112, 113, 0, 0, 110, 114, 0, - 109, 111, 115 + 0, 297, 298, 0, 2, 3, 5, 1, 4, 7, + 0, 0, 8, 302, 15, 10, 0, 11, 13, 16, + 9, 12, 0, 0, 0, 0, 0, 0, 0, 17, + 18, 0, 24, 22, 20, 23, 21, 0, 19, 14, + 50, 0, 0, 26, 36, 51, 0, 54, 0, 55, + 57, 59, 6, 0, 0, 37, 53, 52, 0, 0, + 39, 0, 40, 0, 45, 47, 49, 185, 0, 186, + 187, 188, 189, 190, 198, 191, 192, 193, 194, 195, + 196, 197, 27, 28, 32, 30, 31, 35, 0, 0, + 56, 58, 38, 41, 0, 0, 0, 33, 29, 286, + 132, 299, 0, 167, 0, 0, 181, 174, 178, 180, + 168, 0, 0, 169, 173, 177, 0, 0, 63, 183, + 170, 62, 179, 136, 0, 42, 46, 48, 34, 0, + 290, 66, 65, 121, 287, 294, 0, 182, 176, 175, + 172, 171, 0, 69, 0, 170, 71, 0, 286, 0, + 184, 0, 0, 43, 44, 0, 292, 293, 291, 0, + 0, 204, 296, 295, 288, 133, 135, 0, 0, 0, + 0, 0, 61, 156, 162, 157, 282, 283, 163, 164, + 154, 155, 81, 0, 76, 78, 79, 158, 159, 80, + 281, 273, 0, 275, 280, 277, 141, 142, 137, 138, + 140, 134, 153, 151, 147, 148, 149, 0, 160, 286, + 286, 0, 98, 0, 129, 0, 0, 204, 204, 123, + 122, 0, 0, 120, 205, 206, 208, 286, 70, 75, + 74, 73, 72, 285, 0, 232, 231, 0, 230, 233, + 0, 212, 0, 235, 0, 213, 216, 0, 223, 224, + 229, 284, 234, 237, 236, 64, 286, 274, 0, 0, + 0, 0, 0, 0, 146, 143, 0, 271, 269, 269, + 269, 100, 270, 96, 269, 269, 107, 0, 289, 0, + 286, 0, 286, 0, 286, 0, 0, 0, 286, 0, + 0, 0, 249, 251, 250, 259, 260, 0, 68, 67, + 0, 255, 0, 0, 0, 0, 0, 60, 201, 202, + 199, 200, 0, 0, 0, 203, 0, 0, 0, 77, + 276, 0, 0, 160, 139, 165, 152, 161, 150, 272, + 105, 0, 104, 106, 97, 269, 102, 103, 0, 95, + 108, 99, 0, 117, 0, 90, 93, 94, 286, 131, + 0, 0, 83, 84, 89, 269, 286, 300, 0, 300, + 0, 0, 254, 0, 210, 207, 0, 0, 217, 256, + 257, 228, 226, 0, 238, 0, 222, 214, 218, 219, + 220, 0, 227, 225, 279, 278, 166, 144, 145, 101, + 0, 130, 0, 124, 286, 92, 286, 125, 286, 87, + 269, 286, 301, 126, 286, 209, 252, 261, 0, 0, + 263, 211, 258, 242, 0, 240, 204, 0, 221, 109, + 118, 119, 91, 88, 85, 86, 121, 121, 0, 0, + 265, 267, 262, 0, 239, 0, 244, 215, 0, 127, + 128, 253, 266, 0, 264, 241, 247, 248, 246, 243, + 245, 113, 114, 0, 0, 111, 115, 268, 0, 110, + 112, 116 }; /* YYDEFGOTO[NTERM-NUM]. */ static const short yydefgoto[] = { - -1, 3, 4, 5, 10, 11, 15, 16, 27, 28, - 29, 41, 42, 81, 82, 127, 53, 54, 60, 153, - 61, 62, 63, 43, 44, 47, 48, 181, 83, 116, - 84, 141, 142, 182, 183, 348, 349, 350, 341, 342, - 130, 332, 210, 211, 336, 337, 433, 446, 447, 351, - 352, 159, 160, 219, 117, 197, 198, 448, 272, 273, - 85, 203, 264, 204, 205, 243, 323, 118, 119, 120, - 121, 309, 310, 312, 222, 223, 224, 244, 245, 246, - 403, 298, 247, 248, 249, 250, 406, 407, 440, 441, - 251, 252, 253, 378, 379, 412, 274, 275, 149, 191, - 192, 254, 255, 132, 133, 134, 158, 163, 256, 122, - 397, 257 + -1, 3, 4, 5, 9, 11, 12, 16, 17, 28, + 29, 30, 42, 43, 82, 83, 128, 54, 55, 61, + 154, 62, 63, 64, 44, 45, 48, 49, 182, 84, + 117, 85, 142, 143, 183, 184, 351, 352, 353, 344, + 345, 131, 335, 211, 212, 339, 340, 438, 454, 455, + 354, 355, 160, 161, 220, 118, 198, 199, 456, 269, + 270, 86, 204, 261, 205, 206, 243, 326, 119, 120, + 121, 122, 313, 314, 316, 223, 224, 225, 226, 290, + 245, 246, 247, 248, 249, 250, 414, 415, 449, 450, + 291, 292, 428, 293, 303, 294, 295, 296, 409, 410, + 430, 271, 272, 150, 192, 193, 251, 252, 133, 134, + 135, 159, 164, 253, 123, 401, 254 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -357 +#define YYPACT_NINF -345 static const short yypact[] = { - 83, -357, -357, 18, 83, -357, -80, -357, -357, 64, - 3, -357, -357, -357, -357, 74, -357, 2, 266, -357, - -357, 139, 100, 88, 90, 148, 142, 230, 266, -357, - 135, -357, -357, -357, -357, -357, 242, -357, -357, 127, - 53, 233, -357, 238, -357, 177, -357, 80, -357, 199, - -357, -357, 173, 256, -357, -357, -357, 213, 206, -357, - 55, -357, 8, -357, 211, -357, -357, 308, -357, -357, - -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, - -357, 256, -357, -357, -357, -357, -357, 345, 641, -357, - -357, -357, -357, 83, 213, 217, -357, -357, -23, 222, - -357, 257, -357, 271, 276, -357, -357, -357, -357, -357, - 303, 281, -357, -357, -357, 717, 359, 261, -357, 262, - -357, -357, 253, 372, -80, -357, -357, -357, 269, 6, - -357, -357, -357, -357, 134, 213, -357, -357, -357, -357, - -357, 89, -357, 264, -357, 273, 272, 95, 69, -357, - 277, 205, -357, -357, 300, -357, -357, -357, 373, 565, - -61, -357, -357, -357, -357, -357, 381, 717, 213, 213, - 445, -357, -357, -357, -357, -357, -357, -357, -357, -357, - -357, -357, 92, -357, -357, -357, -357, -357, -357, -357, - -357, 114, -357, -357, 278, -357, -357, 274, -357, -357, - -357, -357, -357, -357, -357, -357, 275, 282, 72, 40, - 117, -357, 279, 351, 293, 330, 87, 99, -357, -357, - 294, 445, -357, -357, 295, -23, -357, -357, -357, -357, - -357, -357, 305, 377, -357, -357, -79, -357, -357, 287, - -357, 83, 445, -357, 301, 229, 310, 302, -79, -357, - -357, -357, 312, -357, -357, -357, -357, -357, -357, 95, - -357, 27, 270, 311, 414, 412, 205, -357, -357, 205, - -357, 116, 126, 116, -357, -357, 332, 126, 116, 323, - 300, -357, 398, 41, 334, 4, 356, 4, 357, 445, - 320, 445, -357, -357, 491, 324, 315, 331, 225, 326, - 337, 329, 328, -357, -357, -357, -357, -357, 339, 491, - 491, -357, 491, 445, 291, 327, -357, -357, 338, 340, - -357, -357, -357, 443, -357, -357, -357, -357, 346, -357, - -357, -357, 116, -357, -357, 363, -357, -357, -357, 412, - 347, 138, -357, -357, -357, 348, -357, 389, 360, 352, - -357, -357, 116, 348, 412, 362, 412, 355, -357, 369, - -357, -357, -357, 349, -357, -357, 295, 51, -357, -357, - 370, -357, -357, -357, 371, -357, -357, 10, 145, -357, - -357, -357, -357, -357, -357, -357, 376, -357, 270, -357, - 41, -357, 348, -357, 46, -357, 116, 348, -357, -357, - 348, -357, -357, 414, -357, -357, 174, -357, -61, 463, - -357, 412, 368, -357, -357, 327, -357, -357, -357, -357, - -357, -357, -357, -357, -357, 443, -357, 51, 130, 234, - 368, 412, -357, 28, -357, -357, -357, -357, -357, -357, - -357, -357, -357, -357, -357, 28, 48, -357, -357, 16, - -357, -357, -357 + 179, -345, -345, 94, 179, -345, -345, -345, -345, -87, + 25, 118, -345, -345, -345, -345, 64, -345, 37, 234, + -345, -345, 106, 123, 107, 113, 164, 165, 260, 234, + -345, 157, -345, -345, -345, -345, -345, 247, -345, -345, + 177, 60, 235, -345, 239, -345, 175, -345, -72, -345, + 198, -345, -345, 147, 506, -345, -345, -345, 246, 199, + -345, 21, -345, 100, -345, 205, -345, -345, 299, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, 506, -345, -345, -345, -345, -345, 273, 659, + -345, -345, -345, -345, 179, 246, 212, -345, -345, 16, + 242, -345, 237, -345, 254, 270, -345, -345, -345, -345, + -345, 306, 278, -345, -345, -345, 735, 376, 272, -345, + 275, -345, -345, 267, 383, -87, -345, -345, -345, 281, + 87, -345, -345, -345, -345, 14, 246, -345, -345, -345, + -345, -345, 36, -345, 276, -345, 277, 284, 91, 77, + -345, 341, 201, -345, -345, 214, -345, -345, -345, 377, + 583, 108, -345, -345, -345, -345, -345, 391, 735, 246, + 246, 435, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, 134, -345, -345, -345, -345, -345, -345, + -345, -345, 186, -345, -345, 285, -345, -345, 289, -345, + -345, -345, -345, -345, -345, -345, -345, 290, 282, 162, + 76, 211, -345, 293, 370, 303, 340, -52, 95, -345, + -345, 304, 390, -345, -345, -345, 305, 16, -345, -345, + -345, -345, -345, -345, 315, -345, -345, 114, -345, -345, + 210, -345, 435, -345, 308, 181, 317, 310, 114, -345, + -345, -345, -345, -345, -345, -345, 91, -345, 97, 301, + 279, 416, 413, 201, -345, -345, 201, -345, -13, 74, + -13, -345, -345, 330, 74, -13, 324, 214, -345, 398, + 61, 323, 68, 356, 68, 357, 435, 401, 319, 179, + 321, 325, -345, -345, -345, 327, -345, 435, -345, -345, + 497, 318, 332, 216, 329, 335, 342, -345, -345, -345, + -345, -345, 345, 497, 497, -345, 497, 435, 228, -345, + -345, 343, 344, -345, -345, -345, 453, -345, -345, -345, + -345, 349, -345, -345, -345, -13, -345, -345, 373, -345, + -345, -345, 413, 352, 220, -345, -345, -345, 319, -345, + 397, 362, 359, -345, -345, -13, 319, 413, 364, 413, + 365, 369, -345, 371, -345, -345, 358, 368, -345, -345, + 363, -345, -345, 435, 305, 8, -345, 374, -345, -345, + -345, 372, -345, -345, -345, -345, -345, -345, -345, -345, + 380, -345, 301, -345, 61, -345, 319, -345, 43, -345, + -13, 319, -345, -345, 319, -345, -345, -345, -5, 221, + -345, -345, -345, -345, 222, -345, 108, 452, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, 416, 413, + 366, -345, -345, 358, -345, 8, 6, 271, 49, -345, + -345, 453, 366, 413, -345, -345, -345, -345, -345, -345, + -345, -345, -345, 49, 46, -345, -345, -345, 28, -345, + -345, -345 }; /* YYPGOTO[NTERM-NUM]. */ static const short yypgoto[] = { - -357, -357, -357, 483, -357, 364, -357, 474, -357, -357, - 462, -357, -357, -357, 410, -357, -357, -357, -357, -357, - 432, -357, 399, -357, -357, -357, 437, 366, -357, -62, - -357, -357, 341, -357, 250, 210, -357, 121, -357, 120, - 292, -357, -357, 236, -357, -357, -357, 73, -356, -272, - -84, -357, -58, -357, 235, -357, 258, -146, 313, 314, - -357, -21, -357, -124, -255, -122, 122, -38, -1, -357, - 34, -357, -357, -357, -214, -357, 221, -25, 115, -69, - -357, 280, -357, -207, -357, -357, -357, 104, -357, -357, - -357, -357, -357, -357, 111, 123, -256, -357, -357, -357, - 283, -139, -357, -138, -357, -357, -357, -357, 1, -357, - 176, -9 + -345, -345, -345, 485, -345, -345, 367, -345, 475, -345, + -345, 464, -345, -345, -345, 412, -345, -345, -345, -345, + -345, 434, -345, 404, -345, -345, -345, 438, 378, -345, + -79, -345, -345, 337, -345, 258, 232, -345, 119, -345, + 125, 296, -345, -345, 250, -345, -345, -345, 71, -344, + -271, -91, -345, -49, -345, 248, -345, 268, -132, 320, + 322, -345, 85, -345, -135, -252, -136, 103, -89, -78, + -345, -43, -345, -345, -345, -215, -345, -345, 229, -151, + 121, -126, -345, -84, -345, -345, -345, 101, -345, -345, + -345, -345, -345, -345, 291, -345, -345, -345, -345, 111, + 112, -246, -345, -345, -345, 288, -134, -345, -51, -345, + -345, -345, -345, 1, -345, 191, -10 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, parse error. */ -#define YYTABLE_NINF -264 +#define YYTABLE_NINF -270 static const short yytable[] = { - 17, 6, 286, 288, 199, 6, 17, 318, 187, 193, - 128, 343, 187, 12, 131, 327, 329, 330, 7, 12, - 443, 333, 334, 185, 220, 186, 123, 296, 9, 186, - 155, 50, 443, 195, 196, 444, 12, 175, 176, 347, - 297, 49, 18, 65, 88, 195, 196, 444, 50, 221, - 12, 65, 443, 64, 87, 12, 267, 268, 49, 93, - 12, 64, 12, 184, 12, 195, 196, 444, 1, 2, - 1, 2, 88, 12, 13, 45, 385, 143, 12, 175, - 176, 347, 87, 12, 13, 65, 156, 86, 267, 268, - 451, 365, 129, 451, 124, 64, 395, 218, 1, 2, - 157, 172, 173, 174, 12, 175, 176, 376, 177, 178, - 269, 340, 21, -81, 144, 86, 145, 199, 343, 129, - 187, 94, 193, 319, 271, 276, 165, 187, 411, 143, - 187, 445, 452, 417, 189, 185, 164, 186, 188, 194, - 422, 293, 207, 445, 186, 179, 270, 186, 340, 30, - 437, 200, 206, 340, 269, 129, 129, 450, 405, 228, - 230, 129, 31, 445, 269, 46, 144, 91, 145, 227, - 229, -24, 220, 14, 40, 184, 189, 32, 190, 33, - 161, -263, 12, 19, 220, -263, 180, 129, 1, 2, - 270, 162, 56, 57, 428, 285, 290, 221, 166, 344, - 270, 258, 167, 170, 438, 259, 34, 287, 439, 221, - 129, 172, 173, 174, 12, 175, 176, 302, 177, 178, - 1, 2, 12, 260, 59, 360, 279, 261, 1, 2, - 280, 35, 173, 36, 12, 175, 176, 231, 177, 178, - 371, 372, 301, 373, 328, 325, 38, 389, 326, 418, - 188, 390, 194, 320, 414, 179, 324, 207, 415, 423, - 207, 391, 424, 206, 357, 12, 359, 206, 39, 396, - 206, 1, 2, 201, 345, 234, 353, 51, 353, 12, - 175, 176, 22, 426, 66, 1, 2, 427, 374, 55, - 364, 23, 1, 2, 195, 196, 180, 52, 173, 67, - 12, 175, 176, 231, 177, 178, 344, 58, 420, 68, - 69, 70, 24, 202, 25, 90, 238, 208, 209, 95, - 71, 299, 300, 26, 96, 72, 126, 73, 195, 196, - 387, 304, 305, 306, 307, 74, 304, 305, 306, 307, - 135, 234, 308, 136, 75, 398, 76, 398, 98, 99, - 100, 77, 138, 78, 79, 80, 375, 137, 408, 139, - 99, 100, 146, 383, 384, 434, 435, 140, 413, 147, - 148, 150, 101, 66, 102, 151, 103, 154, 168, 320, - 170, 345, 238, 212, 225, 353, 104, 169, 262, 206, - 105, 282, 263, 265, 106, 281, 266, 107, 68, 69, - 70, 283, 413, 284, 289, 291, 294, 295, 108, 71, - 303, 311, 313, 109, 72, 110, 73, 111, 408, 322, - 315, 12, 442, 335, 74, 331, 112, 113, 339, 354, - 356, 358, 361, 75, 362, 76, 221, 363, 368, 369, - 77, 114, 78, 79, 80, 367, 370, 377, 382, 380, - 386, 381, 173, 115, 12, 175, 176, 231, 177, 178, - 1, 2, 392, 129, 388, 394, 401, 232, 404, 393, - 173, 399, 12, 175, 176, 231, 177, 178, 1, 2, - 402, 233, 410, 409, 416, 232, 431, 8, 152, 20, - 37, 97, 92, 125, 89, 234, 235, 355, 173, 233, - 12, 175, 176, 231, 177, 178, 1, 2, 226, 316, - 419, 236, 171, 234, 235, 421, 338, 292, 449, 346, - 366, 321, 277, 278, 429, 425, 432, 233, 314, 236, - 237, 436, 400, 0, 430, 0, 238, 0, 0, 0, - 0, 234, 235, 0, 317, 239, 0, 0, 237, 0, - 0, 0, 240, 241, 238, 242, 0, 236, 0, 0, - 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, - 0, 241, 0, 242, 0, 0, 237, 0, 0, 0, - 99, 100, 238, 0, 0, 0, 0, 0, 213, 0, - 0, 239, 101, 66, 102, 0, 103, 214, 0, 241, - 0, 242, 0, 0, 0, 0, 104, 0, 0, 0, - 105, 0, 0, 0, 106, 0, 0, 107, 68, 69, - 70, 0, 0, 0, 0, 0, 215, 0, 108, 71, - 0, 0, 0, 109, 72, 110, 73, 111, 0, 0, - 0, 0, 0, 0, 74, 0, 112, 113, 216, 217, - 0, 0, 0, 75, 0, 76, 99, 100, 0, 0, - 77, 114, 78, 79, 80, 0, 0, 0, 101, 66, - 102, 0, 103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 104, 0, 0, 0, 105, 0, 0, 0, - 106, 0, 0, 107, 68, 69, 70, 0, 0, 0, - 0, 0, 0, 0, 108, 71, 0, 0, 0, 109, - 72, 110, 73, 111, 0, 0, 0, 0, 0, 0, - 74, 0, 112, 113, 0, 0, 0, 0, 0, 75, - 0, 76, 1, 2, 0, 0, 77, 114, 78, 79, - 80, 0, 0, 0, 101, 66, 102, 0, 103, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, - 0, 0, 105, 0, 0, 0, 106, 0, 0, 107, - 68, 69, 70, 0, 0, 0, 0, 0, 0, 0, - 108, 71, 0, 0, 0, 109, 72, 110, 73, 111, - 0, 0, 0, 0, 0, 0, 74, 0, 112, 113, - 0, 0, 0, 0, 0, 75, 0, 76, 0, 0, - 0, 0, 77, 114, 78, 79, 80 + 18, 6, 283, 285, 13, 6, 18, 321, 132, 346, + 124, 87, 187, 186, 188, 194, 187, 13, 188, 200, + 244, 10, 330, 332, 333, 266, 446, 144, 336, 337, + 13, 51, 451, 221, 13, 14, 1, 2, 145, 87, + 57, 58, 50, 66, 89, 196, 197, 452, 51, 129, + 451, 66, 13, 451, 65, 88, 282, 185, 222, 50, + 162, 267, 65, 196, 197, 452, 196, 197, 452, 13, + 13, 163, 89, 13, 14, 1, 2, 13, 350, 144, + 447, 219, 46, 88, 448, 66, 13, 176, 177, 389, + 145, 306, 264, 265, 7, 125, 65, 173, 174, 175, + 13, 176, 177, 350, 178, 179, 13, 176, 177, 399, + 460, 156, 266, 429, 460, 413, 31, 146, 268, 273, + 187, 186, 188, 346, 194, 322, 166, 187, 200, 188, + 187, 130, 188, 92, 15, 360, 299, 165, 189, 195, + 420, 180, 208, 453, 461, 167, 367, 22, 267, 168, + 343, 94, 201, 207, 425, 459, 13, 19, 130, 230, + 232, 453, 1, 2, 453, 185, 381, 157, 343, 146, + 229, 231, 47, 20, 368, 343, 130, -82, 264, 265, + 221, 158, 181, 130, 190, 32, 191, 378, 379, 347, + 380, 130, 331, 221, 1, 2, 33, 362, 60, 171, + 266, 436, 34, 284, 190, 222, 130, 173, 174, 175, + 13, 176, 177, 95, 178, 179, 1, 2, 222, 372, + 301, -25, 35, 174, 41, 13, 176, 177, 233, 178, + 179, 209, 210, 302, 383, 174, 267, 13, 176, 177, + 233, 178, 179, 255, 304, 305, 189, 256, 195, 323, + 23, 180, 327, 208, 36, 13, 208, 395, 421, 24, + 207, 1, 2, 37, 207, 400, 235, 207, 39, 202, + 348, -269, 356, 40, 356, -269, 99, 130, 235, 52, + 25, 371, 26, 308, 309, 310, 311, 56, 100, 101, + 363, 27, 181, 382, 312, 257, 196, 197, 53, 258, + 102, 67, 103, 347, 104, 423, 59, 239, 91, 203, + 13, 176, 177, 96, 105, 97, 1, 2, 106, 239, + 276, 127, 107, 137, 277, 108, 69, 70, 71, 393, + 432, 434, 391, 394, 433, 435, 109, 72, 100, 101, + 138, 110, 73, 111, 74, 112, 139, 402, 328, 402, + 426, 329, 75, 427, 113, 114, 1, 2, 196, 197, + 136, 76, 140, 77, 141, 416, 387, 388, 78, 115, + 79, 80, 81, 308, 309, 310, 311, 439, 440, 147, + 148, 116, 323, 149, 348, 151, 152, 213, 356, 155, + 169, 170, 171, 207, 227, 259, 263, 174, 431, 13, + 176, 177, 233, 178, 179, 1, 2, 260, 262, 278, + 279, 280, 234, 281, 286, 297, 300, 307, 315, 431, + 317, 325, 13, 334, 338, 416, 287, 288, 342, 357, + 359, 361, 364, 457, 130, 366, 365, 369, 370, 373, + 235, 236, 174, 375, 13, 176, 177, 233, 178, 179, + 1, 2, 377, 376, 384, 385, 237, 234, 386, 174, + 390, 13, 176, 177, 233, 178, 179, 1, 2, 392, + 396, 397, 398, 403, 234, 238, 405, 406, 408, 411, + 407, 239, 412, 418, 443, 235, 236, 417, 419, 8, + 240, 21, 153, 38, 98, 93, 90, 241, 289, 126, + 242, 237, 235, 236, 174, 228, 13, 176, 177, 233, + 178, 179, 1, 2, 319, 13, 358, 424, 237, 422, + 238, 1, 2, 298, 458, 172, 239, 341, 324, 349, + 274, 441, 275, 374, 67, 240, 445, 238, 437, 318, + 0, 442, 241, 239, 444, 242, 320, 235, 236, 68, + 404, 0, 240, 0, 0, 0, 0, 0, 0, 69, + 70, 71, 242, 237, 0, 0, 0, 0, 0, 0, + 72, 0, 0, 0, 0, 73, 0, 74, 0, 0, + 0, 0, 238, 0, 0, 75, 0, 0, 239, 0, + 0, 0, 0, 0, 76, 0, 77, 240, 100, 101, + 0, 78, 0, 79, 80, 81, 214, 242, 0, 0, + 102, 67, 103, 0, 104, 215, 0, 0, 0, 0, + 0, 0, 0, 0, 105, 0, 0, 0, 106, 0, + 0, 0, 107, 0, 0, 108, 69, 70, 71, 0, + 0, 0, 0, 0, 216, 0, 109, 72, 0, 0, + 0, 110, 73, 111, 74, 112, 0, 0, 0, 0, + 0, 0, 75, 0, 113, 114, 217, 218, 0, 0, + 0, 76, 0, 77, 100, 101, 0, 0, 78, 115, + 79, 80, 81, 0, 0, 0, 102, 67, 103, 0, + 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 105, 0, 0, 0, 106, 0, 0, 0, 107, 0, + 0, 108, 69, 70, 71, 0, 0, 0, 0, 0, + 0, 0, 109, 72, 0, 0, 0, 110, 73, 111, + 74, 112, 0, 0, 0, 0, 0, 0, 75, 0, + 113, 114, 0, 0, 0, 0, 0, 76, 0, 77, + 1, 2, 0, 0, 78, 115, 79, 80, 81, 0, + 0, 0, 102, 67, 103, 0, 104, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, + 106, 0, 0, 0, 107, 0, 0, 108, 69, 70, + 71, 0, 0, 0, 0, 0, 0, 0, 109, 72, + 0, 0, 0, 110, 73, 111, 74, 112, 0, 0, + 0, 0, 0, 0, 75, 0, 113, 114, 0, 0, + 0, 0, 0, 76, 0, 77, 0, 0, 0, 0, + 78, 115, 79, 80, 81 }; static const short yycheck[] = { - 9, 0, 216, 217, 150, 4, 15, 262, 147, 148, - 33, 283, 151, 9, 98, 271, 272, 273, 0, 9, - 4, 277, 278, 147, 85, 147, 88, 106, 108, 151, - 24, 40, 4, 17, 18, 19, 9, 10, 11, 35, - 119, 40, 39, 52, 53, 17, 18, 19, 57, 110, - 9, 60, 4, 52, 53, 9, 16, 17, 57, 51, - 9, 60, 9, 147, 9, 17, 18, 19, 15, 16, - 15, 16, 81, 9, 10, 22, 332, 115, 9, 10, - 11, 35, 81, 9, 10, 94, 80, 53, 16, 17, - 446, 298, 115, 449, 93, 94, 352, 159, 15, 16, - 94, 6, 7, 8, 9, 10, 11, 314, 13, 14, - 38, 107, 110, 109, 115, 81, 115, 263, 390, 115, - 259, 113, 261, 262, 208, 209, 135, 266, 118, 167, - 269, 115, 116, 388, 107, 259, 135, 259, 147, 148, - 396, 225, 151, 115, 266, 50, 74, 269, 107, 10, - 20, 150, 151, 107, 38, 115, 115, 109, 107, 168, - 169, 115, 62, 115, 38, 112, 167, 112, 167, 168, - 169, 44, 85, 109, 47, 259, 107, 89, 109, 89, - 46, 109, 9, 109, 85, 113, 91, 115, 15, 16, - 74, 57, 112, 113, 408, 108, 221, 110, 109, 283, - 74, 109, 113, 108, 74, 113, 58, 108, 78, 110, - 115, 6, 7, 8, 9, 10, 11, 242, 13, 14, - 15, 16, 9, 109, 51, 294, 109, 113, 15, 16, - 113, 89, 7, 3, 9, 10, 11, 12, 13, 14, - 309, 310, 241, 312, 118, 266, 111, 109, 269, 388, - 259, 113, 261, 262, 109, 50, 265, 266, 113, 397, - 269, 345, 400, 262, 289, 9, 291, 266, 26, 353, - 269, 15, 16, 68, 283, 50, 285, 44, 287, 9, - 10, 11, 16, 109, 28, 15, 16, 113, 313, 112, - 65, 25, 15, 16, 17, 18, 91, 59, 7, 43, - 9, 10, 11, 12, 13, 14, 390, 108, 392, 53, - 54, 55, 46, 108, 48, 109, 91, 17, 18, 108, - 64, 34, 35, 57, 16, 69, 109, 71, 17, 18, - 339, 102, 103, 104, 105, 79, 102, 103, 104, 105, - 118, 50, 113, 86, 88, 354, 90, 356, 3, 15, - 16, 95, 76, 97, 98, 99, 65, 86, 367, 56, - 15, 16, 3, 17, 18, 423, 424, 86, 377, 108, - 108, 118, 27, 28, 29, 3, 31, 108, 114, 388, - 108, 390, 91, 10, 3, 394, 41, 114, 110, 388, - 45, 40, 118, 118, 49, 116, 114, 52, 53, 54, - 55, 108, 411, 73, 110, 110, 101, 30, 63, 64, - 109, 101, 110, 68, 69, 70, 71, 72, 427, 5, - 108, 9, 431, 100, 79, 93, 81, 82, 30, 73, - 73, 111, 108, 88, 119, 90, 110, 106, 109, 111, - 95, 96, 97, 98, 99, 108, 107, 120, 5, 111, - 87, 111, 7, 108, 9, 10, 11, 12, 13, 14, - 15, 16, 73, 115, 117, 113, 111, 22, 119, 109, - 7, 109, 9, 10, 11, 12, 13, 14, 15, 16, - 111, 36, 111, 113, 108, 22, 118, 4, 124, 15, - 28, 81, 60, 94, 57, 50, 51, 287, 7, 36, - 9, 10, 11, 12, 13, 14, 15, 16, 167, 259, - 390, 66, 146, 50, 51, 394, 280, 225, 445, 284, - 299, 263, 209, 209, 409, 403, 415, 36, 248, 66, - 85, 427, 356, -1, 411, -1, 91, -1, -1, -1, - -1, 50, 51, -1, 261, 100, -1, -1, 85, -1, - -1, -1, 107, 108, 91, 110, -1, 66, -1, -1, - -1, -1, -1, 100, -1, -1, -1, -1, -1, -1, - -1, 108, -1, 110, -1, -1, 85, -1, -1, -1, - 15, 16, 91, -1, -1, -1, -1, -1, 23, -1, - -1, 100, 27, 28, 29, -1, 31, 32, -1, 108, - -1, 110, -1, -1, -1, -1, 41, -1, -1, -1, + 10, 0, 217, 218, 9, 4, 16, 259, 99, 280, + 89, 54, 148, 148, 148, 149, 152, 9, 152, 151, + 171, 108, 268, 269, 270, 38, 20, 116, 274, 275, + 9, 41, 4, 85, 9, 10, 15, 16, 116, 82, + 112, 113, 41, 53, 54, 17, 18, 19, 58, 33, + 4, 61, 9, 4, 53, 54, 108, 148, 110, 58, + 46, 74, 61, 17, 18, 19, 17, 18, 19, 9, + 9, 57, 82, 9, 10, 15, 16, 9, 35, 168, + 74, 160, 22, 82, 78, 95, 9, 10, 11, 335, + 168, 242, 16, 17, 0, 94, 95, 6, 7, 8, + 9, 10, 11, 35, 13, 14, 9, 10, 11, 355, + 454, 24, 38, 118, 458, 107, 10, 116, 209, 210, + 256, 256, 256, 394, 258, 259, 136, 263, 260, 263, + 266, 115, 266, 112, 109, 286, 227, 136, 148, 149, + 392, 50, 152, 115, 116, 109, 297, 110, 74, 113, + 107, 51, 151, 152, 400, 109, 9, 39, 115, 169, + 170, 115, 15, 16, 115, 256, 317, 80, 107, 168, + 169, 170, 112, 109, 300, 107, 115, 109, 16, 17, + 85, 94, 91, 115, 107, 62, 109, 313, 314, 280, + 316, 115, 118, 85, 15, 16, 89, 288, 51, 108, + 38, 416, 89, 108, 107, 110, 115, 6, 7, 8, + 9, 10, 11, 113, 13, 14, 15, 16, 110, 303, + 106, 44, 58, 7, 47, 9, 10, 11, 12, 13, + 14, 17, 18, 119, 318, 7, 74, 9, 10, 11, + 12, 13, 14, 109, 34, 35, 256, 113, 258, 259, + 16, 50, 262, 263, 89, 9, 266, 348, 392, 25, + 259, 15, 16, 3, 263, 356, 50, 266, 111, 68, + 280, 109, 282, 26, 284, 113, 3, 115, 50, 44, + 46, 65, 48, 102, 103, 104, 105, 112, 15, 16, + 289, 57, 91, 65, 113, 109, 17, 18, 59, 113, + 27, 28, 29, 394, 31, 396, 108, 91, 109, 108, + 9, 10, 11, 108, 41, 16, 15, 16, 45, 91, + 109, 109, 49, 86, 113, 52, 53, 54, 55, 109, + 109, 109, 342, 113, 113, 113, 63, 64, 15, 16, + 86, 68, 69, 70, 71, 72, 76, 357, 263, 359, + 401, 266, 79, 404, 81, 82, 15, 16, 17, 18, + 118, 88, 56, 90, 86, 375, 17, 18, 95, 96, + 97, 98, 99, 102, 103, 104, 105, 426, 427, 3, + 108, 108, 392, 108, 394, 118, 3, 10, 398, 108, + 114, 114, 108, 392, 3, 110, 114, 7, 408, 9, + 10, 11, 12, 13, 14, 15, 16, 118, 118, 116, + 40, 108, 22, 73, 110, 110, 101, 109, 101, 429, + 110, 5, 9, 93, 100, 435, 36, 37, 30, 73, + 73, 30, 111, 443, 115, 108, 111, 119, 106, 110, + 50, 51, 7, 108, 9, 10, 11, 12, 13, 14, + 15, 16, 107, 111, 111, 111, 66, 22, 5, 7, + 87, 9, 10, 11, 12, 13, 14, 15, 16, 117, + 73, 109, 113, 109, 22, 85, 111, 108, 120, 111, + 109, 91, 119, 111, 118, 50, 51, 113, 108, 4, + 100, 16, 125, 29, 82, 61, 58, 107, 108, 95, + 110, 66, 50, 51, 7, 168, 9, 10, 11, 12, + 13, 14, 15, 16, 256, 9, 284, 398, 66, 394, + 85, 15, 16, 227, 453, 147, 91, 277, 260, 281, + 210, 428, 210, 304, 28, 100, 435, 85, 417, 248, + -1, 429, 107, 91, 433, 110, 258, 50, 51, 43, + 359, -1, 100, -1, -1, -1, -1, -1, -1, 53, + 54, 55, 110, 66, -1, -1, -1, -1, -1, -1, + 64, -1, -1, -1, -1, 69, -1, 71, -1, -1, + -1, -1, 85, -1, -1, 79, -1, -1, 91, -1, + -1, -1, -1, -1, 88, -1, 90, 100, 15, 16, + -1, 95, -1, 97, 98, 99, 23, 110, -1, -1, + 27, 28, 29, -1, 31, 32, -1, -1, -1, -1, + -1, -1, -1, -1, 41, -1, -1, -1, 45, -1, + -1, -1, 49, -1, -1, 52, 53, 54, 55, -1, + -1, -1, -1, -1, 61, -1, 63, 64, -1, -1, + -1, 68, 69, 70, 71, 72, -1, -1, -1, -1, + -1, -1, 79, -1, 81, 82, 83, 84, -1, -1, + -1, 88, -1, 90, 15, 16, -1, -1, 95, 96, + 97, 98, 99, -1, -1, -1, 27, 28, 29, -1, + 31, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 41, -1, -1, -1, 45, -1, -1, -1, 49, -1, + -1, 52, 53, 54, 55, -1, -1, -1, -1, -1, + -1, -1, 63, 64, -1, -1, -1, 68, 69, 70, + 71, 72, -1, -1, -1, -1, -1, -1, 79, -1, + 81, 82, -1, -1, -1, -1, -1, 88, -1, 90, + 15, 16, -1, -1, 95, 96, 97, 98, 99, -1, + -1, -1, 27, 28, 29, -1, 31, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 41, -1, -1, -1, 45, -1, -1, -1, 49, -1, -1, 52, 53, 54, - 55, -1, -1, -1, -1, -1, 61, -1, 63, 64, + 55, -1, -1, -1, -1, -1, -1, -1, 63, 64, -1, -1, -1, 68, 69, 70, 71, 72, -1, -1, - -1, -1, -1, -1, 79, -1, 81, 82, 83, 84, - -1, -1, -1, 88, -1, 90, 15, 16, -1, -1, - 95, 96, 97, 98, 99, -1, -1, -1, 27, 28, - 29, -1, 31, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 41, -1, -1, -1, 45, -1, -1, -1, - 49, -1, -1, 52, 53, 54, 55, -1, -1, -1, - -1, -1, -1, -1, 63, 64, -1, -1, -1, 68, - 69, 70, 71, 72, -1, -1, -1, -1, -1, -1, - 79, -1, 81, 82, -1, -1, -1, -1, -1, 88, - -1, 90, 15, 16, -1, -1, 95, 96, 97, 98, - 99, -1, -1, -1, 27, 28, 29, -1, 31, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, - -1, -1, 45, -1, -1, -1, 49, -1, -1, 52, - 53, 54, 55, -1, -1, -1, -1, -1, -1, -1, - 63, 64, -1, -1, -1, 68, 69, 70, 71, 72, - -1, -1, -1, -1, -1, -1, 79, -1, 81, 82, - -1, -1, -1, -1, -1, 88, -1, 90, -1, -1, - -1, -1, 95, 96, 97, 98, 99 + -1, -1, -1, -1, 79, -1, 81, 82, -1, -1, + -1, -1, -1, 88, -1, 90, -1, -1, -1, -1, + 95, 96, 97, 98, 99 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const unsigned char yystos[] = { - 0, 15, 16, 122, 123, 124, 229, 0, 124, 108, - 125, 126, 9, 10, 109, 127, 128, 232, 39, 109, - 128, 110, 16, 25, 46, 48, 57, 129, 130, 131, - 10, 62, 89, 89, 58, 89, 3, 131, 111, 26, - 47, 132, 133, 144, 145, 22, 112, 146, 147, 229, - 232, 44, 59, 137, 138, 112, 112, 113, 108, 51, - 139, 141, 142, 143, 229, 232, 28, 43, 53, 54, - 55, 64, 69, 71, 79, 88, 90, 95, 97, 98, - 99, 134, 135, 149, 151, 181, 191, 229, 232, 147, - 109, 112, 141, 51, 113, 108, 16, 135, 3, 15, - 16, 27, 29, 31, 41, 45, 49, 52, 63, 68, - 70, 72, 81, 82, 96, 108, 150, 175, 188, 189, - 190, 191, 230, 150, 229, 143, 109, 136, 33, 115, - 161, 171, 224, 225, 226, 118, 86, 86, 76, 56, - 86, 152, 153, 188, 189, 229, 3, 108, 108, 219, - 118, 3, 126, 140, 108, 24, 80, 94, 227, 172, - 173, 46, 57, 228, 229, 232, 109, 113, 114, 114, - 108, 148, 6, 7, 8, 10, 11, 13, 14, 50, - 91, 148, 154, 155, 171, 184, 186, 222, 232, 107, - 109, 220, 221, 222, 232, 17, 18, 176, 177, 178, - 229, 68, 108, 182, 184, 185, 229, 232, 17, 18, - 163, 164, 10, 23, 32, 61, 83, 84, 150, 174, - 85, 110, 195, 196, 197, 3, 153, 229, 232, 229, - 232, 12, 22, 36, 50, 51, 66, 85, 91, 100, - 107, 108, 110, 186, 198, 199, 200, 203, 204, 205, - 206, 211, 212, 213, 222, 223, 229, 232, 109, 113, - 109, 113, 110, 118, 183, 118, 114, 16, 17, 38, - 74, 171, 179, 180, 217, 218, 171, 179, 180, 109, - 113, 116, 40, 108, 73, 108, 195, 108, 195, 110, - 198, 110, 161, 171, 101, 30, 106, 119, 202, 34, - 35, 229, 198, 109, 102, 103, 104, 105, 113, 192, - 193, 101, 194, 110, 202, 108, 155, 221, 185, 222, - 232, 177, 5, 187, 232, 182, 182, 217, 118, 217, - 217, 93, 162, 217, 217, 100, 165, 166, 164, 30, - 107, 159, 160, 170, 171, 232, 175, 35, 156, 157, - 158, 170, 171, 232, 73, 156, 73, 198, 111, 198, - 200, 108, 119, 106, 65, 204, 197, 108, 109, 111, - 107, 200, 200, 200, 198, 65, 204, 120, 214, 215, - 111, 111, 5, 17, 18, 217, 87, 232, 117, 109, - 113, 171, 73, 109, 113, 217, 171, 231, 232, 109, - 231, 111, 111, 201, 119, 107, 207, 208, 232, 113, - 111, 118, 216, 232, 109, 113, 108, 185, 222, 160, - 171, 158, 217, 224, 224, 187, 109, 113, 195, 199, - 216, 118, 215, 167, 173, 173, 208, 20, 74, 78, - 209, 210, 232, 4, 19, 115, 168, 169, 178, 168, - 109, 169, 116 + 0, 15, 16, 122, 123, 124, 234, 0, 124, 125, + 108, 126, 127, 9, 10, 109, 128, 129, 237, 39, + 109, 129, 110, 16, 25, 46, 48, 57, 130, 131, + 132, 10, 62, 89, 89, 58, 89, 3, 132, 111, + 26, 47, 133, 134, 145, 146, 22, 112, 147, 148, + 234, 237, 44, 59, 138, 139, 112, 112, 113, 108, + 51, 140, 142, 143, 144, 234, 237, 28, 43, 53, + 54, 55, 64, 69, 71, 79, 88, 90, 95, 97, + 98, 99, 135, 136, 150, 152, 182, 192, 234, 237, + 148, 109, 112, 142, 51, 113, 108, 16, 136, 3, + 15, 16, 27, 29, 31, 41, 45, 49, 52, 63, + 68, 70, 72, 81, 82, 96, 108, 151, 176, 189, + 190, 191, 192, 235, 151, 234, 144, 109, 137, 33, + 115, 162, 172, 229, 230, 231, 118, 86, 86, 76, + 56, 86, 153, 154, 189, 190, 234, 3, 108, 108, + 224, 118, 3, 127, 141, 108, 24, 80, 94, 232, + 173, 174, 46, 57, 233, 234, 237, 109, 113, 114, + 114, 108, 149, 6, 7, 8, 10, 11, 13, 14, + 50, 91, 149, 155, 156, 172, 185, 187, 227, 237, + 107, 109, 225, 226, 227, 237, 17, 18, 177, 178, + 179, 234, 68, 108, 183, 185, 186, 234, 237, 17, + 18, 164, 165, 10, 23, 32, 61, 83, 84, 151, + 175, 85, 110, 196, 197, 198, 199, 3, 154, 234, + 237, 234, 237, 12, 22, 50, 51, 66, 85, 91, + 100, 107, 110, 187, 200, 201, 202, 203, 204, 205, + 206, 227, 228, 234, 237, 109, 113, 109, 113, 110, + 118, 184, 118, 114, 16, 17, 38, 74, 172, 180, + 181, 222, 223, 172, 180, 181, 109, 113, 116, 40, + 108, 73, 108, 196, 108, 196, 110, 36, 37, 108, + 200, 211, 212, 214, 216, 217, 218, 110, 162, 172, + 101, 106, 119, 215, 34, 35, 200, 109, 102, 103, + 104, 105, 113, 193, 194, 101, 195, 110, 215, 156, + 226, 186, 227, 237, 178, 5, 188, 237, 183, 183, + 222, 118, 222, 222, 93, 163, 222, 222, 100, 166, + 167, 165, 30, 107, 160, 161, 171, 172, 237, 176, + 35, 157, 158, 159, 171, 172, 237, 73, 157, 73, + 200, 30, 172, 234, 111, 111, 108, 200, 202, 119, + 106, 65, 204, 110, 199, 108, 111, 107, 202, 202, + 202, 200, 65, 204, 111, 111, 5, 17, 18, 222, + 87, 237, 117, 109, 113, 172, 73, 109, 113, 222, + 172, 236, 237, 109, 236, 111, 108, 109, 120, 219, + 220, 111, 119, 107, 207, 208, 237, 113, 111, 108, + 186, 227, 161, 172, 159, 222, 229, 229, 213, 118, + 221, 237, 109, 113, 109, 113, 196, 201, 168, 174, + 174, 188, 221, 118, 220, 208, 20, 74, 78, 209, + 210, 4, 19, 115, 169, 170, 179, 237, 169, 109, + 170, 116 }; #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) @@ -1819,14 +1835,14 @@ yyreduce: switch (yyn) { case 2: -#line 343 "asn1p_y.y" +#line 350 "asn1p_y.y" { *(void **)param = yyvsp[0].a_grammar; } break; case 3: -#line 349 "asn1p_y.y" +#line 356 "asn1p_y.y" { yyval.a_grammar = asn1p_new(); checkmem(yyval.a_grammar); @@ -1835,7 +1851,7 @@ yyreduce: break; case 4: -#line 354 "asn1p_y.y" +#line 361 "asn1p_y.y" { yyval.a_grammar = yyvsp[-1].a_grammar; TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next); @@ -1843,49 +1859,57 @@ yyreduce: break; case 5: -#line 375 "asn1p_y.y" +#line 378 "asn1p_y.y" + { currentModule = asn1p_module_new(); } + break; + + case 6: +#line 383 "asn1p_y.y" { + yyval.a_module = currentModule; + if(yyvsp[-1].a_module) { - yyval.a_module = yyvsp[-1].a_module; + asn1p_module_t tmp = *(yyval.a_module); + *(yyval.a_module) = *(yyvsp[-1].a_module); + *(yyvsp[-1].a_module) = tmp; + asn1p_module_free(yyvsp[-1].a_module); } else { /* There's a chance that a module is just plain empty */ - yyval.a_module = asn1p_module_new(); } - checkmem(yyval.a_module); - yyval.a_module->ModuleName = yyvsp[-7].tv_str; + yyval.a_module->ModuleName = yyvsp[-8].tv_str; yyval.a_module->module_oid = yyvsp[-6].a_oid; yyval.a_module->module_flags = yyvsp[-4].a_module_flags; } break; - case 6: -#line 396 "asn1p_y.y" + case 7: +#line 407 "asn1p_y.y" { yyval.a_oid = 0; } break; - case 7: -#line 397 "asn1p_y.y" + case 8: +#line 408 "asn1p_y.y" { yyval.a_oid = yyvsp[0].a_oid; } break; - case 8: -#line 401 "asn1p_y.y" + case 9: +#line 412 "asn1p_y.y" { yyval.a_oid = yyvsp[-1].a_oid; } break; - case 9: -#line 404 "asn1p_y.y" + case 10: +#line 415 "asn1p_y.y" { yyval.a_oid = 0; } break; - case 10: -#line 410 "asn1p_y.y" + case 11: +#line 421 "asn1p_y.y" { yyval.a_oid = asn1p_oid_new(); asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc); @@ -1894,8 +1918,8 @@ yyreduce: } break; - case 11: -#line 416 "asn1p_y.y" + case 12: +#line 427 "asn1p_y.y" { yyval.a_oid = yyvsp[-1].a_oid; asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc); @@ -1904,86 +1928,86 @@ yyreduce: } break; - case 12: -#line 425 "asn1p_y.y" + case 13: +#line 436 "asn1p_y.y" { /* iso */ yyval.a_oid_arc.name = yyvsp[0].tv_str; yyval.a_oid_arc.number = -1; } break; - case 13: -#line 429 "asn1p_y.y" + case 14: +#line 440 "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 14: -#line 433 "asn1p_y.y" + case 15: +#line 444 "asn1p_y.y" { /* 1 */ yyval.a_oid_arc.name = 0; yyval.a_oid_arc.number = yyvsp[0].a_int; } break; - case 15: -#line 443 "asn1p_y.y" + case 16: +#line 454 "asn1p_y.y" { yyval.a_module_flags = MSF_NOFLAGS; } break; - case 16: -#line 444 "asn1p_y.y" - { - yyval.a_module_flags = yyvsp[0].a_module_flags; - } - break; - case 17: -#line 453 "asn1p_y.y" +#line 455 "asn1p_y.y" { yyval.a_module_flags = yyvsp[0].a_module_flags; } break; case 18: -#line 456 "asn1p_y.y" +#line 464 "asn1p_y.y" + { + yyval.a_module_flags = yyvsp[0].a_module_flags; + } + break; + + case 19: +#line 467 "asn1p_y.y" { yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags; } break; - case 19: -#line 465 "asn1p_y.y" + case 20: +#line 476 "asn1p_y.y" { yyval.a_module_flags = MSF_EXPLICIT_TAGS; } break; - case 20: -#line 468 "asn1p_y.y" + case 21: +#line 479 "asn1p_y.y" { yyval.a_module_flags = MSF_IMPLICIT_TAGS; } break; - case 21: -#line 471 "asn1p_y.y" + case 22: +#line 482 "asn1p_y.y" { yyval.a_module_flags = MSF_AUTOMATIC_TAGS; } break; - case 22: -#line 474 "asn1p_y.y" + case 23: +#line 485 "asn1p_y.y" { yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED; } break; - case 23: -#line 478 "asn1p_y.y" + case 24: +#line 489 "asn1p_y.y" { /* X.680Amd1 specifies TAG and XER */ if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) { @@ -2001,20 +2025,20 @@ yyreduce: } break; - case 24: -#line 499 "asn1p_y.y" + case 25: +#line 510 "asn1p_y.y" { yyval.a_module = 0; } break; - case 25: -#line 500 "asn1p_y.y" + case 26: +#line 511 "asn1p_y.y" { yyval.a_module = yyvsp[0].a_module; } break; - case 26: -#line 509 "asn1p_y.y" + case 27: +#line 520 "asn1p_y.y" { yyval.a_module = asn1p_module_new(); AL_IMPORT(yyval.a_module, exports, yyvsp[-2].a_module, xp_next); @@ -2023,15 +2047,15 @@ yyreduce: } break; - case 27: -#line 518 "asn1p_y.y" + case 28: +#line 529 "asn1p_y.y" { yyval.a_module = yyvsp[0].a_module; } break; - case 28: -#line 521 "asn1p_y.y" + case 29: +#line 532 "asn1p_y.y" { if(yyvsp[-1].a_module) { yyval.a_module = yyvsp[-1].a_module; @@ -2043,19 +2067,8 @@ yyreduce: } break; - case 29: -#line 537 "asn1p_y.y" - { - yyval.a_module = asn1p_module_new(); - checkmem(yyval.a_module); - assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID); - assert(yyvsp[0].a_expr->meta_type != AMT_INVALID); - TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next); - } - break; - case 30: -#line 544 "asn1p_y.y" +#line 548 "asn1p_y.y" { yyval.a_module = asn1p_module_new(); checkmem(yyval.a_module); @@ -2066,7 +2079,7 @@ yyreduce: break; case 31: -#line 557 "asn1p_y.y" +#line 555 "asn1p_y.y" { yyval.a_module = asn1p_module_new(); checkmem(yyval.a_module); @@ -2077,12 +2090,23 @@ yyreduce: break; case 32: -#line 565 "asn1p_y.y" - { asn1p_lexer_hack_push_encoding_control(); } +#line 568 "asn1p_y.y" + { + yyval.a_module = asn1p_module_new(); + checkmem(yyval.a_module); + assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID); + assert(yyvsp[0].a_expr->meta_type != AMT_INVALID); + TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next); + } break; case 33: -#line 566 "asn1p_y.y" +#line 576 "asn1p_y.y" + { asn1p_lexer_hack_push_encoding_control(); } + break; + + case 34: +#line 577 "asn1p_y.y" { fprintf(stderr, "WARNING: ENCODING-CONTROL %s " @@ -2093,8 +2117,8 @@ yyreduce: } break; - case 34: -#line 578 "asn1p_y.y" + case 35: +#line 589 "asn1p_y.y" { return yyerror( "Attempt to redefine a standard basic string type, " @@ -2102,13 +2126,13 @@ yyreduce: } break; - case 35: -#line 591 "asn1p_y.y" + case 36: +#line 602 "asn1p_y.y" { yyval.a_module = 0; } break; - case 37: -#line 595 "asn1p_y.y" + case 38: +#line 606 "asn1p_y.y" { if(!saved_aid && 0) return yyerror("Unterminated IMPORTS FROM, " @@ -2118,15 +2142,15 @@ yyreduce: } break; - case 38: -#line 605 "asn1p_y.y" + case 39: +#line 616 "asn1p_y.y" { return yyerror("Empty IMPORTS list"); } break; - case 39: -#line 611 "asn1p_y.y" + case 40: +#line 622 "asn1p_y.y" { yyval.a_module = asn1p_module_new(); checkmem(yyval.a_module); @@ -2134,26 +2158,26 @@ yyreduce: } break; - case 40: -#line 616 "asn1p_y.y" + case 41: +#line 627 "asn1p_y.y" { yyval.a_module = yyvsp[-1].a_module; TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next); } break; - case 41: -#line 623 "asn1p_y.y" + case 42: +#line 634 "asn1p_y.y" { memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); } break; - case 42: -#line 624 "asn1p_y.y" + case 43: +#line 635 "asn1p_y.y" { yyval.a_aid.oid = yyvsp[0].a_oid; } break; - case 43: -#line 628 "asn1p_y.y" + case 44: +#line 639 "asn1p_y.y" { yyval.a_xports = yyvsp[-3].a_xports; yyval.a_xports->fromModuleName = yyvsp[-1].tv_str; @@ -2164,8 +2188,8 @@ yyreduce: } break; - case 44: -#line 639 "asn1p_y.y" + case 45: +#line 650 "asn1p_y.y" { yyval.a_xports = asn1p_xports_new(); checkmem(yyval.a_xports); @@ -2173,51 +2197,51 @@ yyreduce: } break; - case 45: -#line 644 "asn1p_y.y" + case 46: +#line 655 "asn1p_y.y" { yyval.a_xports = yyvsp[-2].a_xports; TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next); } break; - case 46: -#line 651 "asn1p_y.y" + case 47: +#line 662 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->Identifier = yyvsp[0].tv_str; yyval.a_expr->expr_type = A1TC_REFERENCE; } break; - case 47: -#line 657 "asn1p_y.y" + case 48: +#line 668 "asn1p_y.y" { /* Completely equivalent to above */ - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->Identifier = yyvsp[-2].tv_str; yyval.a_expr->expr_type = A1TC_REFERENCE; } break; - case 48: -#line 663 "asn1p_y.y" + case 49: +#line 674 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->Identifier = yyvsp[0].tv_str; yyval.a_expr->expr_type = A1TC_REFERENCE; } break; - case 49: -#line 673 "asn1p_y.y" + case 50: +#line 684 "asn1p_y.y" { yyval.a_module = 0; } break; - case 50: -#line 674 "asn1p_y.y" + case 51: +#line 685 "asn1p_y.y" { yyval.a_module = asn1p_module_new(); checkmem(yyval.a_module); @@ -2229,22 +2253,22 @@ yyreduce: } break; - case 51: -#line 686 "asn1p_y.y" + case 52: +#line 697 "asn1p_y.y" { yyval.a_xports = yyvsp[-1].a_xports; } break; - case 52: -#line 689 "asn1p_y.y" + case 53: +#line 700 "asn1p_y.y" { yyval.a_xports = 0; } break; - case 53: -#line 692 "asn1p_y.y" + case 54: +#line 703 "asn1p_y.y" { /* Empty EXPORTS clause effectively prohibits export. */ yyval.a_xports = asn1p_xports_new(); @@ -2252,8 +2276,8 @@ yyreduce: } break; - case 54: -#line 700 "asn1p_y.y" + case 55: +#line 711 "asn1p_y.y" { yyval.a_xports = asn1p_xports_new(); assert(yyval.a_xports); @@ -2261,51 +2285,51 @@ yyreduce: } break; - case 55: -#line 705 "asn1p_y.y" + case 56: +#line 716 "asn1p_y.y" { yyval.a_xports = yyvsp[-2].a_xports; TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next); } break; - case 56: -#line 712 "asn1p_y.y" + case 57: +#line 723 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->Identifier = yyvsp[0].tv_str; yyval.a_expr->expr_type = A1TC_EXPORTVAR; } break; - case 57: -#line 718 "asn1p_y.y" + case 58: +#line 729 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->Identifier = yyvsp[-2].tv_str; yyval.a_expr->expr_type = A1TC_EXPORTVAR; } break; - case 58: -#line 724 "asn1p_y.y" + case 59: +#line 735 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->Identifier = yyvsp[0].tv_str; yyval.a_expr->expr_type = A1TC_EXPORTVAR; } break; - case 59: -#line 733 "asn1p_y.y" + case 60: +#line 744 "asn1p_y.y" { yyval.a_constr = yyvsp[-1].a_constr; } break; - case 60: -#line 736 "asn1p_y.y" + case 61: +#line 747 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; assert(yyval.a_expr->Identifier == 0); @@ -2315,17 +2339,17 @@ yyreduce: } break; - case 61: -#line 746 "asn1p_y.y" + case 62: +#line 757 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; } break; - case 62: -#line 759 "asn1p_y.y" + case 63: +#line 770 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->reference = yyvsp[0].a_ref; yyval.a_expr->expr_type = A1TC_REFERENCE; @@ -2333,10 +2357,10 @@ yyreduce: } break; - case 63: -#line 769 "asn1p_y.y" + case 64: +#line 780 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->reference = yyvsp[-3].a_ref; yyval.a_expr->rhs_pspecs = yyvsp[-1].a_expr; @@ -2345,8 +2369,8 @@ yyreduce: } break; - case 64: -#line 789 "asn1p_y.y" + case 65: +#line 800 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; yyval.a_expr->Identifier = yyvsp[-2].tv_str; @@ -2355,8 +2379,8 @@ yyreduce: } break; - case 65: -#line 795 "asn1p_y.y" + case 66: +#line 806 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; yyval.a_expr->Identifier = yyvsp[-2].tv_str; @@ -2365,17 +2389,8 @@ yyreduce: } break; - case 66: -#line 811 "asn1p_y.y" - { - yyval.a_expr = yyvsp[0].a_expr; - yyval.a_expr->Identifier = yyvsp[-5].tv_str; - yyval.a_expr->lhs_params = yyvsp[-3].a_plist; - } - break; - case 67: -#line 817 "asn1p_y.y" +#line 822 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; yyval.a_expr->Identifier = yyvsp[-5].tv_str; @@ -2384,7 +2399,16 @@ yyreduce: break; case 68: -#line 825 "asn1p_y.y" +#line 828 "asn1p_y.y" + { + yyval.a_expr = yyvsp[0].a_expr; + yyval.a_expr->Identifier = yyvsp[-5].tv_str; + yyval.a_expr->lhs_params = yyvsp[-3].a_plist; + } + break; + + case 69: +#line 836 "asn1p_y.y" { int ret; yyval.a_plist = asn1p_paramlist_new(yylineno); @@ -2396,8 +2420,8 @@ yyreduce: } break; - case 69: -#line 834 "asn1p_y.y" + case 70: +#line 845 "asn1p_y.y" { int ret; yyval.a_plist = yyvsp[-2].a_plist; @@ -2408,27 +2432,16 @@ yyreduce: } break; - case 70: -#line 845 "asn1p_y.y" + case 71: +#line 856 "asn1p_y.y" { yyval.a_parg.governor = NULL; yyval.a_parg.argument = yyvsp[0].tv_str; } break; - case 71: -#line 849 "asn1p_y.y" - { - int ret; - yyval.a_parg.governor = asn1p_ref_new(yylineno); - ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0); - checkmem(ret == 0); - yyval.a_parg.argument = yyvsp[0].tv_str; - } - break; - case 72: -#line 856 "asn1p_y.y" +#line 860 "asn1p_y.y" { int ret; yyval.a_parg.governor = asn1p_ref_new(yylineno); @@ -2439,19 +2452,18 @@ yyreduce: break; case 73: -#line 863 "asn1p_y.y" +#line 867 "asn1p_y.y" { int ret; yyval.a_parg.governor = asn1p_ref_new(yylineno); - ret = asn1p_ref_add_component(yyval.a_parg.governor, - ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1); + ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0); checkmem(ret == 0); yyval.a_parg.argument = yyvsp[0].tv_str; } break; case 74: -#line 871 "asn1p_y.y" +#line 874 "asn1p_y.y" { int ret; yyval.a_parg.governor = asn1p_ref_new(yylineno); @@ -2465,31 +2477,43 @@ yyreduce: case 75: #line 882 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + int ret; + yyval.a_parg.governor = asn1p_ref_new(yylineno); + ret = asn1p_ref_add_component(yyval.a_parg.governor, + ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1); + checkmem(ret == 0); + yyval.a_parg.argument = yyvsp[0].tv_str; + } + break; + + case 76: +#line 893 "asn1p_y.y" + { + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); } break; - case 76: -#line 887 "asn1p_y.y" + case 77: +#line 898 "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 78: +#line 905 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; } break; - case 78: -#line 897 "asn1p_y.y" + case 79: +#line 908 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->Identifier = "?"; yyval.a_expr->expr_type = A1TC_REFERENCE; @@ -2498,11 +2522,11 @@ yyreduce: } break; - case 79: -#line 905 "asn1p_y.y" + case 80: +#line 916 "asn1p_y.y" { asn1p_ref_t *ref; - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->Identifier = yyvsp[0].tv_str; yyval.a_expr->expr_type = A1TC_REFERENCE; @@ -2513,45 +2537,45 @@ yyreduce: } break; - case 80: -#line 916 "asn1p_y.y" + case 81: +#line 927 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); yyval.a_expr->expr_type = A1TC_VALUESET; yyval.a_expr->meta_type = AMT_VALUESET; yyval.a_expr->constraints = yyvsp[0].a_constr; } break; - case 81: -#line 939 "asn1p_y.y" - { yyval.a_expr = asn1p_expr_new(yylineno); } - break; - case 82: -#line 940 "asn1p_y.y" - { yyval.a_expr = yyvsp[0].a_expr; } +#line 950 "asn1p_y.y" + { yyval.a_expr = NEW_EXPR(); } break; case 83: -#line 943 "asn1p_y.y" +#line 951 "asn1p_y.y" + { yyval.a_expr = yyvsp[0].a_expr; } + break; + + case 84: +#line 954 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); } break; - case 84: -#line 948 "asn1p_y.y" + case 85: +#line 959 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); } break; - case 85: -#line 955 "asn1p_y.y" + case 86: +#line 966 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; assert(yyval.a_expr->Identifier == 0); @@ -2561,8 +2585,8 @@ yyreduce: } break; - case 86: -#line 962 "asn1p_y.y" + case 87: +#line 973 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags; @@ -2571,10 +2595,10 @@ yyreduce: } break; - case 87: -#line 968 "asn1p_y.y" + case 88: +#line 979 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type; yyval.a_expr->expr_type = A1TC_COMPONENTS_OF; @@ -2582,32 +2606,32 @@ yyreduce: } break; - case 88: -#line 975 "asn1p_y.y" + case 89: +#line 986 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; } break; - case 89: -#line 981 "asn1p_y.y" + case 90: +#line 992 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); } break; - case 90: -#line 986 "asn1p_y.y" + case 91: +#line 997 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); } break; - case 91: -#line 993 "asn1p_y.y" + case 92: +#line 1004 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; assert(yyval.a_expr->Identifier == 0); @@ -2615,23 +2639,23 @@ yyreduce: } break; - case 92: -#line 998 "asn1p_y.y" + case 93: +#line 1009 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; } break; - case 93: -#line 1001 "asn1p_y.y" + case 94: +#line 1012 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; _fixup_anonymous_identifier(yyval.a_expr); } break; - case 94: -#line 1008 "asn1p_y.y" + case 95: +#line 1019 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; checkmem(yyval.a_expr); @@ -2641,20 +2665,20 @@ yyreduce: } break; - case 95: -#line 1018 "asn1p_y.y" + case 96: +#line 1029 "asn1p_y.y" { yyval.a_int = 0; } break; - case 96: -#line 1019 "asn1p_y.y" + case 97: +#line 1030 "asn1p_y.y" { yyval.a_int = 1; } break; - case 97: -#line 1023 "asn1p_y.y" + case 98: +#line 1034 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->expr_type = A1TC_CLASSDEF; yyval.a_expr->meta_type = AMT_OBJECTCLASS; @@ -2662,18 +2686,18 @@ yyreduce: } break; - case 98: -#line 1030 "asn1p_y.y" + case 99: +#line 1041 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); } break; - case 99: -#line 1040 "asn1p_y.y" + case 100: +#line 1051 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->Identifier = yyvsp[-1].tv_str; yyval.a_expr->meta_type = AMT_OBJECTFIELD; @@ -2682,10 +2706,10 @@ yyreduce: } break; - case 100: -#line 1050 "asn1p_y.y" + case 101: +#line 1061 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); yyval.a_expr->Identifier = yyvsp[-3].tv_str; yyval.a_expr->meta_type = AMT_OBJECTFIELD; yyval.a_expr->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */ @@ -2695,10 +2719,10 @@ yyreduce: } break; - case 101: -#line 1061 "asn1p_y.y" + case 102: +#line 1072 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); yyval.a_expr->Identifier = yyvsp[-2].tv_str; yyval.a_expr->meta_type = AMT_OBJECTFIELD; yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVFS; @@ -2707,10 +2731,10 @@ yyreduce: } break; - case 102: -#line 1071 "asn1p_y.y" + case 103: +#line 1082 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->Identifier = yyvsp[-2].tv_str; yyval.a_expr->reference = yyvsp[-1].a_ref; @@ -2720,10 +2744,10 @@ yyreduce: } break; - case 103: -#line 1082 "asn1p_y.y" + case 104: +#line 1093 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); yyval.a_expr->Identifier = yyvsp[-2].tv_str; yyval.a_expr->meta_type = AMT_OBJECTFIELD; yyval.a_expr->expr_type = A1TC_CLASSFIELD_VTVSFS; @@ -2732,10 +2756,10 @@ yyreduce: } break; - case 104: -#line 1092 "asn1p_y.y" + case 105: +#line 1103 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->Identifier = yyvsp[-2].tv_str; yyval.a_expr->meta_type = AMT_OBJECTFIELD; @@ -2745,10 +2769,10 @@ yyreduce: } break; - case 105: -#line 1103 "asn1p_y.y" + case 106: +#line 1114 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->Identifier = yyvsp[-2].tv_str; yyval.a_expr->reference = yyvsp[-1].a_ref; @@ -2758,105 +2782,105 @@ yyreduce: } break; - case 106: -#line 1115 "asn1p_y.y" + case 107: +#line 1126 "asn1p_y.y" { yyval.a_wsynt = 0; } break; - case 107: -#line 1116 "asn1p_y.y" + case 108: +#line 1127 "asn1p_y.y" { yyval.a_wsynt = yyvsp[0].a_wsynt; } break; - case 108: -#line 1123 "asn1p_y.y" + case 109: +#line 1134 "asn1p_y.y" { asn1p_lexer_hack_enable_with_syntax(); } break; - case 109: -#line 1125 "asn1p_y.y" + case 110: +#line 1136 "asn1p_y.y" { yyval.a_wsynt = yyvsp[-1].a_wsynt; } break; - case 110: -#line 1131 "asn1p_y.y" + case 111: +#line 1142 "asn1p_y.y" { yyval.a_wsynt = asn1p_wsyntx_new(); TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next); } break; - case 111: -#line 1135 "asn1p_y.y" + case 112: +#line 1146 "asn1p_y.y" { yyval.a_wsynt = yyvsp[-1].a_wsynt; TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next); } break; - case 112: -#line 1142 "asn1p_y.y" + case 113: +#line 1153 "asn1p_y.y" { yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_opaque.buf, 0); yyval.a_wchunk->type = WC_WHITESPACE; } break; - case 113: -#line 1146 "asn1p_y.y" + case 114: +#line 1157 "asn1p_y.y" { yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_str, 0); } break; - case 114: -#line 1149 "asn1p_y.y" + case 115: +#line 1160 "asn1p_y.y" { yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].a_refcomp.name, 0); yyval.a_wchunk->type = WC_FIELD; } break; - case 115: -#line 1153 "asn1p_y.y" + case 116: +#line 1164 "asn1p_y.y" { yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt); } break; - case 116: -#line 1159 "asn1p_y.y" - { - yyval.a_expr = asn1p_expr_new(yylineno); - checkmem(yyval.a_expr); - yyval.a_expr->Identifier = strdup("..."); - checkmem(yyval.a_expr->Identifier); - yyval.a_expr->expr_type = A1TC_EXTENSIBLE; - yyval.a_expr->meta_type = AMT_TYPE; - } - break; - case 117: -#line 1167 "asn1p_y.y" +#line 1170 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->Identifier = strdup("..."); checkmem(yyval.a_expr->Identifier); - yyval.a_expr->value = yyvsp[0].a_value; yyval.a_expr->expr_type = A1TC_EXTENSIBLE; yyval.a_expr->meta_type = AMT_TYPE; } break; case 118: -#line 1176 "asn1p_y.y" +#line 1178 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); + checkmem(yyval.a_expr); + yyval.a_expr->Identifier = strdup("..."); + checkmem(yyval.a_expr->Identifier); + yyval.a_expr->value = yyvsp[0].a_value; + yyval.a_expr->expr_type = A1TC_EXTENSIBLE; + yyval.a_expr->meta_type = AMT_TYPE; + } + break; + + case 119: +#line 1187 "asn1p_y.y" + { + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->Identifier = strdup("..."); yyval.a_expr->value = yyvsp[0].a_value; @@ -2866,8 +2890,8 @@ yyreduce: } break; - case 119: -#line 1188 "asn1p_y.y" + case 120: +#line 1199 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; yyval.a_expr->tag = yyvsp[-2].a_tag; @@ -2889,16 +2913,16 @@ yyreduce: } break; - case 120: -#line 1210 "asn1p_y.y" + case 121: +#line 1221 "asn1p_y.y" { yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0; asn1p_as_pointer = 0; } break; - case 121: -#line 1217 "asn1p_y.y" + case 122: +#line 1228 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; yyval.a_expr->marker.flags |= yyvsp[-1].a_int; @@ -2917,15 +2941,15 @@ yyreduce: } break; - case 122: -#line 1236 "asn1p_y.y" + case 123: +#line 1247 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; } break; - case 123: -#line 1239 "asn1p_y.y" + case 124: +#line 1250 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; assert(yyval.a_expr->expr_type == A1TC_INVALID); @@ -2934,8 +2958,8 @@ yyreduce: } break; - case 124: -#line 1245 "asn1p_y.y" + case 125: +#line 1256 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; assert(yyval.a_expr->expr_type == A1TC_INVALID); @@ -2944,8 +2968,8 @@ yyreduce: } break; - case 125: -#line 1251 "asn1p_y.y" + case 126: +#line 1262 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; assert(yyval.a_expr->expr_type == A1TC_INVALID); @@ -2954,10 +2978,10 @@ yyreduce: } break; - case 126: -#line 1257 "asn1p_y.y" + case 127: +#line 1268 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->constraints = yyvsp[-4].a_constr; yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF; @@ -2968,10 +2992,10 @@ yyreduce: } break; - case 127: -#line 1267 "asn1p_y.y" + case 128: +#line 1278 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->constraints = yyvsp[-4].a_constr; yyval.a_expr->expr_type = ASN_CONSTR_SET_OF; @@ -2982,21 +3006,21 @@ yyreduce: } break; - case 128: -#line 1277 "asn1p_y.y" + case 129: +#line 1288 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->expr_type = ASN_TYPE_ANY; yyval.a_expr->meta_type = AMT_TYPE; } break; - case 129: -#line 1283 "asn1p_y.y" + case 130: +#line 1294 "asn1p_y.y" { int ret; - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->reference = asn1p_ref_new(yylineno); ret = asn1p_ref_add_component(yyval.a_expr->reference, @@ -3007,10 +3031,10 @@ yyreduce: } break; - case 130: -#line 1294 "asn1p_y.y" + case 131: +#line 1305 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->reference = yyvsp[0].a_ref; yyval.a_expr->expr_type = A1TC_INSTANCE; @@ -3018,8 +3042,8 @@ yyreduce: } break; - case 131: -#line 1309 "asn1p_y.y" + case 132: +#line 1320 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -3030,22 +3054,8 @@ yyreduce: } break; - case 132: -#line 1317 "asn1p_y.y" - { - int ret; - yyval.a_ref = asn1p_ref_new(yylineno); - checkmem(yyval.a_ref); - ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN); - checkmem(ret == 0); - ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN); - checkmem(ret == 0); - free(yyvsp[-2].tv_str); - } - break; - case 133: -#line 1327 "asn1p_y.y" +#line 1328 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -3059,7 +3069,21 @@ yyreduce: break; case 134: -#line 1337 "asn1p_y.y" +#line 1338 "asn1p_y.y" + { + int ret; + yyval.a_ref = asn1p_ref_new(yylineno); + checkmem(yyval.a_ref); + ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN); + checkmem(ret == 0); + ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN); + checkmem(ret == 0); + free(yyvsp[-2].tv_str); + } + break; + + case 135: +#line 1348 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -3072,8 +3096,8 @@ yyreduce: } break; - case 135: -#line 1347 "asn1p_y.y" + case 136: +#line 1358 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -3084,8 +3108,8 @@ yyreduce: } break; - case 136: -#line 1355 "asn1p_y.y" + case 137: +#line 1366 "asn1p_y.y" { int ret; yyval.a_ref = yyvsp[0].a_ref; @@ -3107,8 +3131,8 @@ yyreduce: } break; - case 137: -#line 1377 "asn1p_y.y" + case 138: +#line 1388 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -3119,8 +3143,8 @@ yyreduce: } break; - case 138: -#line 1385 "asn1p_y.y" + case 139: +#line 1396 "asn1p_y.y" { int ret; yyval.a_ref = yyvsp[-2].a_ref; @@ -3130,56 +3154,56 @@ yyreduce: } break; - case 140: -#line 1398 "asn1p_y.y" + case 141: +#line 1409 "asn1p_y.y" { yyval.a_refcomp.lex_type = RLT_AmpUppercase; yyval.a_refcomp.name = yyvsp[0].tv_str; } break; - case 141: -#line 1403 "asn1p_y.y" + case 142: +#line 1414 "asn1p_y.y" { yyval.a_refcomp.lex_type = RLT_Amplowercase; yyval.a_refcomp.name = yyvsp[0].tv_str; } break; - case 142: -#line 1412 "asn1p_y.y" + case 143: +#line 1423 "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 143: -#line 1416 "asn1p_y.y" + case 144: +#line 1427 "asn1p_y.y" { yyval.a_ref = yyval.a_ref; asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase); } break; - case 144: -#line 1420 "asn1p_y.y" + case 145: +#line 1431 "asn1p_y.y" { yyval.a_ref = yyval.a_ref; asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase); } break; - case 145: -#line 1427 "asn1p_y.y" + case 146: +#line 1438 "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 146: -#line 1447 "asn1p_y.y" + case 147: +#line 1458 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; assert(yyval.a_expr->Identifier == NULL); @@ -3189,8 +3213,8 @@ yyreduce: } break; - case 149: -#line 1459 "asn1p_y.y" + case 150: +#line 1470 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(0); checkmem(yyval.a_value); @@ -3200,13 +3224,13 @@ yyreduce: } break; - case 150: -#line 1466 "asn1p_y.y" + case 151: +#line 1477 "asn1p_y.y" { asn1p_lexer_hack_push_opaque_state(); } break; - case 151: -#line 1466 "asn1p_y.y" + case 152: +#line 1477 "asn1p_y.y" { yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0); checkmem(yyval.a_value); @@ -3214,8 +3238,8 @@ yyreduce: } break; - case 152: -#line 1471 "asn1p_y.y" + case 153: +#line 1482 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(0); checkmem(yyval.a_value); @@ -3223,8 +3247,8 @@ yyreduce: } break; - case 153: -#line 1479 "asn1p_y.y" + case 154: +#line 1490 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(0); checkmem(yyval.a_value); @@ -3232,8 +3256,8 @@ yyreduce: } break; - case 154: -#line 1484 "asn1p_y.y" + case 155: +#line 1495 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(0); checkmem(yyval.a_value); @@ -3241,38 +3265,38 @@ yyreduce: } break; - case 155: -#line 1489 "asn1p_y.y" + case 156: +#line 1500 "asn1p_y.y" { yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B'); checkmem(yyval.a_value); } break; - case 156: -#line 1493 "asn1p_y.y" + case 157: +#line 1504 "asn1p_y.y" { yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H'); checkmem(yyval.a_value); } break; - case 157: -#line 1497 "asn1p_y.y" + case 158: +#line 1508 "asn1p_y.y" { yyval.a_value = yyval.a_value; } break; - case 158: -#line 1500 "asn1p_y.y" + case 159: +#line 1511 "asn1p_y.y" { yyval.a_value = yyvsp[0].a_value; } break; - case 159: -#line 1506 "asn1p_y.y" + case 160: +#line 1517 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -3286,8 +3310,8 @@ yyreduce: } break; - case 160: -#line 1517 "asn1p_y.y" + case 161: +#line 1528 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -3304,16 +3328,16 @@ yyreduce: } break; - case 161: -#line 1535 "asn1p_y.y" + case 162: +#line 1546 "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 162: -#line 1539 "asn1p_y.y" + case 163: +#line 1550 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int); checkmem(yyval.a_value); @@ -3321,8 +3345,8 @@ yyreduce: } break; - case 163: -#line 1544 "asn1p_y.y" + case 164: +#line 1555 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int); checkmem(yyval.a_value); @@ -3330,8 +3354,8 @@ yyreduce: } break; - case 164: -#line 1578 "asn1p_y.y" + case 165: +#line 1589 "asn1p_y.y" { yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1; yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1); @@ -3343,8 +3367,8 @@ yyreduce: } break; - case 165: -#line 1587 "asn1p_y.y" + case 166: +#line 1598 "asn1p_y.y" { int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len; char *p = malloc(newsize + 1); @@ -3359,103 +3383,103 @@ yyreduce: } break; - case 166: -#line 1602 "asn1p_y.y" + case 167: +#line 1613 "asn1p_y.y" { yyval.a_type = ASN_BASIC_BOOLEAN; } break; - case 167: -#line 1603 "asn1p_y.y" + case 168: +#line 1614 "asn1p_y.y" { yyval.a_type = ASN_BASIC_NULL; } break; - case 168: -#line 1604 "asn1p_y.y" + case 169: +#line 1615 "asn1p_y.y" { yyval.a_type = ASN_BASIC_REAL; } break; - case 169: -#line 1605 "asn1p_y.y" - { yyval.a_type = yyvsp[0].a_type; } - break; - case 170: -#line 1606 "asn1p_y.y" - { yyval.a_type = ASN_BASIC_OCTET_STRING; } +#line 1616 "asn1p_y.y" + { yyval.a_type = yyvsp[0].a_type; } break; case 171: -#line 1607 "asn1p_y.y" - { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; } +#line 1617 "asn1p_y.y" + { yyval.a_type = ASN_BASIC_OCTET_STRING; } break; case 172: -#line 1608 "asn1p_y.y" - { yyval.a_type = ASN_BASIC_RELATIVE_OID; } +#line 1618 "asn1p_y.y" + { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; } break; case 173: -#line 1609 "asn1p_y.y" - { yyval.a_type = ASN_BASIC_EXTERNAL; } +#line 1619 "asn1p_y.y" + { yyval.a_type = ASN_BASIC_RELATIVE_OID; } break; case 174: -#line 1610 "asn1p_y.y" - { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; } +#line 1620 "asn1p_y.y" + { yyval.a_type = ASN_BASIC_EXTERNAL; } break; case 175: -#line 1611 "asn1p_y.y" - { yyval.a_type = ASN_BASIC_CHARACTER_STRING; } +#line 1621 "asn1p_y.y" + { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; } break; case 176: -#line 1612 "asn1p_y.y" - { yyval.a_type = ASN_BASIC_UTCTime; } +#line 1622 "asn1p_y.y" + { yyval.a_type = ASN_BASIC_CHARACTER_STRING; } break; case 177: -#line 1613 "asn1p_y.y" - { yyval.a_type = ASN_BASIC_GeneralizedTime; } +#line 1623 "asn1p_y.y" + { yyval.a_type = ASN_BASIC_UTCTime; } break; case 178: -#line 1614 "asn1p_y.y" - { yyval.a_type = yyvsp[0].a_type; } +#line 1624 "asn1p_y.y" + { yyval.a_type = ASN_BASIC_GeneralizedTime; } break; case 179: -#line 1621 "asn1p_y.y" - { yyval.a_type = ASN_BASIC_INTEGER; } +#line 1625 "asn1p_y.y" + { yyval.a_type = yyvsp[0].a_type; } break; case 180: -#line 1622 "asn1p_y.y" - { yyval.a_type = ASN_BASIC_ENUMERATED; } +#line 1632 "asn1p_y.y" + { yyval.a_type = ASN_BASIC_INTEGER; } break; case 181: -#line 1623 "asn1p_y.y" - { yyval.a_type = ASN_BASIC_BIT_STRING; } +#line 1633 "asn1p_y.y" + { yyval.a_type = ASN_BASIC_ENUMERATED; } break; case 182: -#line 1627 "asn1p_y.y" +#line 1634 "asn1p_y.y" + { yyval.a_type = ASN_BASIC_BIT_STRING; } + break; + + case 183: +#line 1638 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->expr_type = yyvsp[0].a_type; yyval.a_expr->meta_type = AMT_TYPE; } break; - case 183: -#line 1633 "asn1p_y.y" + case 184: +#line 1644 "asn1p_y.y" { if(yyvsp[0].a_expr) { yyval.a_expr = yyvsp[0].a_expr; } else { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); } yyval.a_expr->expr_type = yyvsp[-1].a_type; @@ -3463,109 +3487,116 @@ yyreduce: } break; - case 184: -#line 1646 "asn1p_y.y" + case 185: +#line 1657 "asn1p_y.y" { yyval.a_type = ASN_STRING_BMPString; } break; - case 185: -#line 1647 "asn1p_y.y" + case 186: +#line 1658 "asn1p_y.y" { yyval.a_type = ASN_STRING_GeneralString; fprintf(stderr, "WARNING: GeneralString is not fully supported\n"); } break; - case 186: -#line 1651 "asn1p_y.y" + case 187: +#line 1662 "asn1p_y.y" { yyval.a_type = ASN_STRING_GraphicString; fprintf(stderr, "WARNING: GraphicString is not fully supported\n"); } break; - case 187: -#line 1655 "asn1p_y.y" + case 188: +#line 1666 "asn1p_y.y" { yyval.a_type = ASN_STRING_IA5String; } break; - case 188: -#line 1656 "asn1p_y.y" + case 189: +#line 1667 "asn1p_y.y" { yyval.a_type = ASN_STRING_ISO646String; } break; - case 189: -#line 1657 "asn1p_y.y" + case 190: +#line 1668 "asn1p_y.y" { yyval.a_type = ASN_STRING_NumericString; } break; - case 190: -#line 1658 "asn1p_y.y" + case 191: +#line 1669 "asn1p_y.y" { yyval.a_type = ASN_STRING_PrintableString; } break; - case 191: -#line 1659 "asn1p_y.y" + case 192: +#line 1670 "asn1p_y.y" { yyval.a_type = ASN_STRING_T61String; fprintf(stderr, "WARNING: T61String is not fully supported\n"); } break; - case 192: -#line 1663 "asn1p_y.y" + case 193: +#line 1674 "asn1p_y.y" { yyval.a_type = ASN_STRING_TeletexString; } break; - case 193: -#line 1664 "asn1p_y.y" + case 194: +#line 1675 "asn1p_y.y" { yyval.a_type = ASN_STRING_UniversalString; } break; - case 194: -#line 1665 "asn1p_y.y" + case 195: +#line 1676 "asn1p_y.y" { yyval.a_type = ASN_STRING_UTF8String; } break; - case 195: -#line 1666 "asn1p_y.y" + case 196: +#line 1677 "asn1p_y.y" { yyval.a_type = ASN_STRING_VideotexString; fprintf(stderr, "WARNING: VideotexString is not fully supported\n"); } break; - case 196: -#line 1670 "asn1p_y.y" + case 197: +#line 1681 "asn1p_y.y" { yyval.a_type = ASN_STRING_VisibleString; } break; - case 197: -#line 1671 "asn1p_y.y" + case 198: +#line 1682 "asn1p_y.y" { yyval.a_type = ASN_STRING_ObjectDescriptor; } break; - case 203: -#line 1683 "asn1p_y.y" + case 204: +#line 1694 "asn1p_y.y" { yyval.a_constr = 0; } break; - case 204: -#line 1684 "asn1p_y.y" + case 205: +#line 1695 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; } break; - case 205: -#line 1690 "asn1p_y.y" + case 207: +#line 1702 "asn1p_y.y" + { + yyval.a_constr = yyvsp[-1].a_constr; + } + break; + + case 208: +#line 1708 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0); } break; - case 206: -#line 1693 "asn1p_y.y" + case 209: +#line 1711 "asn1p_y.y" { /* * This is a special case, for compatibility purposes. @@ -3575,37 +3606,37 @@ yyreduce: } break; - case 207: -#line 1703 "asn1p_y.y" + case 210: +#line 1721 "asn1p_y.y" { yyval.a_constr = yyvsp[-1].a_constr; } break; - case 208: -#line 1706 "asn1p_y.y" + case 211: +#line 1724 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr); } break; - case 209: -#line 1712 "asn1p_y.y" + case 212: +#line 1730 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); yyval.a_constr->type = ACT_EL_EXT; } break; - case 210: -#line 1716 "asn1p_y.y" + case 213: +#line 1734 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; } break; - case 211: -#line 1719 "asn1p_y.y" + case 214: +#line 1737 "asn1p_y.y" { asn1p_constraint_t *ct; ct = asn1p_constraint_new(yylineno); @@ -3614,8 +3645,8 @@ yyreduce: } break; - case 212: -#line 1725 "asn1p_y.y" + case 215: +#line 1743 "asn1p_y.y" { asn1p_constraint_t *ct; ct = asn1p_constraint_new(yylineno); @@ -3626,43 +3657,43 @@ yyreduce: } break; - case 213: -#line 1736 "asn1p_y.y" + case 216: +#line 1754 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; } break; - case 214: -#line 1739 "asn1p_y.y" + case 217: +#line 1757 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0); } break; - case 215: -#line 1742 "asn1p_y.y" + case 218: +#line 1760 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr); } break; - case 216: -#line 1745 "asn1p_y.y" + case 219: +#line 1763 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr); } break; - case 217: -#line 1748 "asn1p_y.y" + case 220: +#line 1766 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr); } break; - case 218: -#line 1754 "asn1p_y.y" + case 221: +#line 1772 "asn1p_y.y" { int ret; yyval.a_constr = asn1p_constraint_new(yylineno); @@ -3673,8 +3704,8 @@ yyreduce: } break; - case 219: -#line 1762 "asn1p_y.y" + case 222: +#line 1780 "asn1p_y.y" { int ret; yyval.a_constr = asn1p_constraint_new(yylineno); @@ -3685,8 +3716,8 @@ yyreduce: } break; - case 220: -#line 1770 "asn1p_y.y" + case 223: +#line 1788 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -3695,8 +3726,8 @@ yyreduce: } break; - case 221: -#line 1776 "asn1p_y.y" + case 224: +#line 1794 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -3705,121 +3736,77 @@ yyreduce: } break; - case 222: -#line 1782 "asn1p_y.y" - { - yyval.a_constr = asn1p_constraint_new(yylineno); - checkmem(yyval.a_constr); - yyval.a_constr->type = yyvsp[-1].a_ctype; - yyval.a_constr->range_start = yyvsp[-2].a_value; - yyval.a_constr->range_stop = yyvsp[0].a_value; - } - break; - - case 223: -#line 1789 "asn1p_y.y" - { - yyval.a_constr = asn1p_constraint_new(yylineno); - checkmem(yyval.a_constr); - yyval.a_constr->type = yyvsp[-1].a_ctype; - yyval.a_constr->range_start = asn1p_value_fromint(-123); - yyval.a_constr->range_stop = yyvsp[0].a_value; - yyval.a_constr->range_start->type = ATV_MIN; - } - break; - - case 224: -#line 1797 "asn1p_y.y" - { - yyval.a_constr = asn1p_constraint_new(yylineno); - checkmem(yyval.a_constr); - yyval.a_constr->type = yyvsp[-1].a_ctype; - yyval.a_constr->range_start = yyvsp[-2].a_value; - yyval.a_constr->range_stop = asn1p_value_fromint(321); - yyval.a_constr->range_stop->type = ATV_MAX; - } - break; - case 225: -#line 1805 "asn1p_y.y" +#line 1800 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); yyval.a_constr->type = yyvsp[-1].a_ctype; - yyval.a_constr->range_start = asn1p_value_fromint(-123); - yyval.a_constr->range_stop = asn1p_value_fromint(321); - yyval.a_constr->range_start->type = ATV_MIN; - yyval.a_constr->range_stop->type = ATV_MAX; + yyval.a_constr->range_start = yyvsp[-2].a_value; + yyval.a_constr->range_stop = yyvsp[0].a_value; } break; case 226: -#line 1814 "asn1p_y.y" +#line 1807 "asn1p_y.y" { - yyval.a_constr = yyvsp[0].a_constr; + yyval.a_constr = asn1p_constraint_new(yylineno); + checkmem(yyval.a_constr); + yyval.a_constr->type = yyvsp[-1].a_ctype; + yyval.a_constr->range_start = asn1p_value_fromint(-123); + yyval.a_constr->range_stop = yyvsp[0].a_value; + yyval.a_constr->range_start->type = ATV_MIN; } break; case 227: -#line 1817 "asn1p_y.y" +#line 1815 "asn1p_y.y" + { + yyval.a_constr = asn1p_constraint_new(yylineno); + checkmem(yyval.a_constr); + yyval.a_constr->type = yyvsp[-1].a_ctype; + yyval.a_constr->range_start = yyvsp[-2].a_value; + yyval.a_constr->range_stop = asn1p_value_fromint(321); + yyval.a_constr->range_stop->type = ATV_MAX; + } + break; + + case 228: +#line 1823 "asn1p_y.y" + { + yyval.a_constr = asn1p_constraint_new(yylineno); + checkmem(yyval.a_constr); + yyval.a_constr->type = yyvsp[-1].a_ctype; + yyval.a_constr->range_start = asn1p_value_fromint(-123); + yyval.a_constr->range_stop = asn1p_value_fromint(321); + yyval.a_constr->range_start->type = ATV_MIN; + yyval.a_constr->range_stop->type = ATV_MAX; + } + break; + + case 229: +#line 1832 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; } break; - case 228: -#line 1821 "asn1p_y.y" - { asn1p_lexer_hack_push_opaque_state(); } - break; - - case 229: -#line 1821 "asn1p_y.y" - { - yyval.a_constr = asn1p_constraint_new(yylineno); - checkmem(yyval.a_constr); - yyval.a_constr->type = ACT_CT_CTDBY; - yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0); - checkmem(yyval.a_constr->value); - yyval.a_constr->value->type = ATV_UNPARSED; - } - break; - case 230: -#line 1832 "asn1p_y.y" - { yyval.a_ctype = ACT_EL_RANGE; } - break; - - case 231: -#line 1833 "asn1p_y.y" - { yyval.a_ctype = ACT_EL_RLRANGE; } - break; - - case 232: -#line 1834 "asn1p_y.y" - { yyval.a_ctype = ACT_EL_LLRANGE; } - break; - - case 233: -#line 1835 "asn1p_y.y" - { yyval.a_ctype = ACT_EL_ULRANGE; } - break; - - case 234: -#line 1839 "asn1p_y.y" +#line 1838 "asn1p_y.y" { yyval.a_ctype = ACT_CT_SIZE; } break; - case 235: -#line 1842 "asn1p_y.y" + case 231: +#line 1841 "asn1p_y.y" { yyval.a_ctype = ACT_CT_FROM; } break; - case 236: -#line 1848 "asn1p_y.y" + case 232: +#line 1847 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(0); checkmem(yyval.a_value); @@ -3827,8 +3814,8 @@ yyreduce: } break; - case 237: -#line 1853 "asn1p_y.y" + case 233: +#line 1852 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(1); checkmem(yyval.a_value); @@ -3836,8 +3823,8 @@ yyreduce: } break; - case 240: -#line 1860 "asn1p_y.y" + case 236: +#line 1859 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -3851,8 +3838,8 @@ yyreduce: } break; - case 241: -#line 1874 "asn1p_y.y" + case 237: +#line 1873 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -3866,36 +3853,36 @@ yyreduce: } break; - case 242: -#line 1888 "asn1p_y.y" + case 238: +#line 1887 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0); } break; - case 243: -#line 1891 "asn1p_y.y" + case 239: +#line 1890 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0); } break; - case 244: -#line 1897 "asn1p_y.y" + case 240: +#line 1896 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; } break; - case 245: -#line 1900 "asn1p_y.y" + case 241: +#line 1899 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr); } break; - case 246: -#line 1906 "asn1p_y.y" + case 242: +#line 1905 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -3904,8 +3891,8 @@ yyreduce: } break; - case 247: -#line 1912 "asn1p_y.y" + case 243: +#line 1911 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -3916,53 +3903,99 @@ yyreduce: } break; - case 248: -#line 1926 "asn1p_y.y" + case 244: +#line 1925 "asn1p_y.y" { yyval.a_pres = ACPRES_DEFAULT; } break; - case 249: -#line 1927 "asn1p_y.y" + case 245: +#line 1926 "asn1p_y.y" { yyval.a_pres = yyvsp[0].a_pres; } break; - case 250: -#line 1931 "asn1p_y.y" + case 246: +#line 1930 "asn1p_y.y" { yyval.a_pres = ACPRES_PRESENT; } break; - case 251: -#line 1934 "asn1p_y.y" + case 247: +#line 1933 "asn1p_y.y" { yyval.a_pres = ACPRES_ABSENT; } break; - case 252: -#line 1937 "asn1p_y.y" + case 248: +#line 1936 "asn1p_y.y" { yyval.a_pres = ACPRES_OPTIONAL; } break; + case 252: +#line 1951 "asn1p_y.y" + { asn1p_lexer_hack_push_opaque_state(); } + break; + case 253: -#line 1943 "asn1p_y.y" +#line 1951 "asn1p_y.y" { - yyval.a_constr = yyvsp[0].a_constr; + yyval.a_constr = asn1p_constraint_new(yylineno); + checkmem(yyval.a_constr); + yyval.a_constr->type = ACT_CT_CTDBY; + yyval.a_constr->value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0); + checkmem(yyval.a_constr->value); + yyval.a_constr->value->type = ATV_UNPARSED; } break; case 254: -#line 1946 "asn1p_y.y" +#line 1962 "asn1p_y.y" + { + yyval.a_constr = asn1p_constraint_new(yylineno); + yyval.a_constr->type = ACT_CT_CTNG; + yyval.a_constr->value = asn1p_value_fromtype(yyvsp[0].a_expr); + } + break; + + case 255: +#line 1970 "asn1p_y.y" + { yyval.a_ctype = ACT_EL_RANGE; } + break; + + case 256: +#line 1971 "asn1p_y.y" + { yyval.a_ctype = ACT_EL_RLRANGE; } + break; + + case 257: +#line 1972 "asn1p_y.y" + { yyval.a_ctype = ACT_EL_LLRANGE; } + break; + + case 258: +#line 1973 "asn1p_y.y" + { yyval.a_ctype = ACT_EL_ULRANGE; } + break; + + case 259: +#line 1976 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; } break; - case 255: -#line 1955 "asn1p_y.y" + case 260: +#line 1979 "asn1p_y.y" + { + yyval.a_constr = yyvsp[0].a_constr; + } + break; + + case 261: +#line 1988 "asn1p_y.y" { asn1p_ref_t *ref = asn1p_ref_new(yylineno); asn1p_constraint_t *ct; @@ -3977,15 +4010,15 @@ yyreduce: } break; - case 256: -#line 1970 "asn1p_y.y" + case 262: +#line 2003 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr); } break; - case 257: -#line 1976 "asn1p_y.y" + case 263: +#line 2009 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -3994,8 +4027,8 @@ yyreduce: } break; - case 258: -#line 1982 "asn1p_y.y" + case 264: +#line 2015 "asn1p_y.y" { asn1p_constraint_t *ct; ct = asn1p_constraint_new(yylineno); @@ -4006,8 +4039,8 @@ yyreduce: } break; - case 259: -#line 1996 "asn1p_y.y" + case 265: +#line 2029 "asn1p_y.y" { char *p = malloc(strlen(yyvsp[0].tv_str) + 2); int ret; @@ -4021,8 +4054,8 @@ yyreduce: } break; - case 260: -#line 2007 "asn1p_y.y" + case 266: +#line 2040 "asn1p_y.y" { char *p = malloc(strlen(yyvsp[0].tv_str) + 3); int ret; @@ -4037,15 +4070,15 @@ yyreduce: } break; - case 261: -#line 2023 "asn1p_y.y" + case 267: +#line 2056 "asn1p_y.y" { yyval.tv_str = yyvsp[0].tv_str; } break; - case 262: -#line 2026 "asn1p_y.y" + case 268: +#line 2059 "asn1p_y.y" { int l1 = strlen(yyvsp[-2].tv_str); int l3 = strlen(yyvsp[0].tv_str); @@ -4057,71 +4090,71 @@ yyreduce: } break; - case 263: -#line 2044 "asn1p_y.y" + case 269: +#line 2077 "asn1p_y.y" { yyval.a_marker.flags = EM_NOMARK; yyval.a_marker.default_value = 0; } break; - case 264: -#line 2048 "asn1p_y.y" + case 270: +#line 2081 "asn1p_y.y" { yyval.a_marker = yyvsp[0].a_marker; } break; - case 265: -#line 2052 "asn1p_y.y" + case 271: +#line 2085 "asn1p_y.y" { yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT; yyval.a_marker.default_value = 0; } break; - case 266: -#line 2056 "asn1p_y.y" + case 272: +#line 2089 "asn1p_y.y" { yyval.a_marker.flags = EM_DEFAULT; yyval.a_marker.default_value = yyvsp[0].a_value; } break; - case 267: -#line 2079 "asn1p_y.y" + case 273: +#line 2112 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); } break; - case 268: -#line 2083 "asn1p_y.y" + case 274: +#line 2116 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; } break; - case 269: -#line 2089 "asn1p_y.y" + case 275: +#line 2122 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); } break; - case 270: -#line 2094 "asn1p_y.y" + case 276: +#line 2127 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr); } break; - case 271: -#line 2101 "asn1p_y.y" + case 277: +#line 2134 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->expr_type = A1TC_UNIVERVAL; yyval.a_expr->meta_type = AMT_VALUE; @@ -4129,10 +4162,10 @@ yyreduce: } break; - case 272: -#line 2108 "asn1p_y.y" + case 278: +#line 2141 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->expr_type = A1TC_UNIVERVAL; yyval.a_expr->meta_type = AMT_VALUE; @@ -4141,10 +4174,10 @@ yyreduce: } break; - case 273: -#line 2116 "asn1p_y.y" + case 279: +#line 2149 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->expr_type = A1TC_UNIVERVAL; yyval.a_expr->meta_type = AMT_VALUE; @@ -4153,10 +4186,10 @@ yyreduce: } break; - case 274: -#line 2124 "asn1p_y.y" + case 280: +#line 2157 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->expr_type = A1TC_UNIVERVAL; yyval.a_expr->meta_type = AMT_VALUE; @@ -4164,10 +4197,10 @@ yyreduce: } break; - case 275: -#line 2131 "asn1p_y.y" + case 281: +#line 2164 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(yylineno); + yyval.a_expr = NEW_EXPR(); checkmem(yyval.a_expr); yyval.a_expr->Identifier = strdup("..."); checkmem(yyval.a_expr->Identifier); @@ -4176,129 +4209,129 @@ yyreduce: } break; - case 276: -#line 2142 "asn1p_y.y" + case 282: +#line 2175 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int); checkmem(yyval.a_value); } break; - case 277: -#line 2146 "asn1p_y.y" + case 283: +#line 2179 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int); checkmem(yyval.a_value); } break; - case 279: -#line 2154 "asn1p_y.y" + case 285: +#line 2187 "asn1p_y.y" { yyval.a_value = asn1p_value_fromdouble(yyvsp[0].a_dbl); checkmem(yyval.a_value); } break; - case 280: -#line 2185 "asn1p_y.y" + case 286: +#line 2218 "asn1p_y.y" { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); } break; - case 281: -#line 2186 "asn1p_y.y" + case 287: +#line 2219 "asn1p_y.y" { yyval.a_tag = yyvsp[0].a_tag; } break; - case 282: -#line 2190 "asn1p_y.y" + case 288: +#line 2223 "asn1p_y.y" { yyval.a_tag = yyvsp[-1].a_tag; yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode; } break; - case 283: -#line 2197 "asn1p_y.y" + case 289: +#line 2230 "asn1p_y.y" { yyval.a_tag = yyvsp[-2].a_tag; yyval.a_tag.tag_value = yyvsp[-1].a_int; } break; - case 284: -#line 2203 "asn1p_y.y" + case 290: +#line 2236 "asn1p_y.y" { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; } break; - case 285: -#line 2204 "asn1p_y.y" + case 291: +#line 2237 "asn1p_y.y" { yyval.a_tag.tag_class = TC_UNIVERSAL; } break; - case 286: -#line 2205 "asn1p_y.y" + case 292: +#line 2238 "asn1p_y.y" { yyval.a_tag.tag_class = TC_APPLICATION; } break; - case 287: -#line 2206 "asn1p_y.y" + case 293: +#line 2239 "asn1p_y.y" { yyval.a_tag.tag_class = TC_PRIVATE; } break; - case 288: -#line 2210 "asn1p_y.y" + case 294: +#line 2243 "asn1p_y.y" { yyval.a_tag.tag_mode = TM_DEFAULT; } break; - case 289: -#line 2211 "asn1p_y.y" + case 295: +#line 2244 "asn1p_y.y" { yyval.a_tag.tag_mode = TM_IMPLICIT; } break; - case 290: -#line 2212 "asn1p_y.y" + case 296: +#line 2245 "asn1p_y.y" { yyval.a_tag.tag_mode = TM_EXPLICIT; } break; - case 291: -#line 2216 "asn1p_y.y" + case 297: +#line 2249 "asn1p_y.y" { checkmem(yyvsp[0].tv_str); yyval.tv_str = yyvsp[0].tv_str; } break; - case 292: -#line 2220 "asn1p_y.y" + case 298: +#line 2253 "asn1p_y.y" { checkmem(yyvsp[0].tv_str); yyval.tv_str = yyvsp[0].tv_str; } break; - case 293: -#line 2228 "asn1p_y.y" + case 299: +#line 2261 "asn1p_y.y" { checkmem(yyvsp[0].tv_str); yyval.tv_str = yyvsp[0].tv_str; } break; - case 294: -#line 2235 "asn1p_y.y" + case 300: +#line 2268 "asn1p_y.y" { yyval.tv_str = 0; } break; - case 295: -#line 2236 "asn1p_y.y" + case 301: +#line 2269 "asn1p_y.y" { yyval.tv_str = yyvsp[0].tv_str; } break; - case 296: -#line 2242 "asn1p_y.y" + case 302: +#line 2275 "asn1p_y.y" { checkmem(yyvsp[0].tv_str); yyval.tv_str = yyvsp[0].tv_str; @@ -4309,7 +4342,7 @@ yyreduce: } /* Line 1016 of /usr/local/share/bison/yacc.c. */ -#line 4313 "asn1p_y.c" +#line 4346 "asn1p_y.c" yyvsp -= yylen; yyssp -= yylen; @@ -4528,7 +4561,7 @@ yyreturn: } -#line 2248 "asn1p_y.y" +#line 2281 "asn1p_y.y" diff --git a/libasn1parser/asn1p_y.h b/libasn1parser/asn1p_y.h index 19de3346..ee3af65b 100644 --- a/libasn1parser/asn1p_y.h +++ b/libasn1parser/asn1p_y.h @@ -245,7 +245,7 @@ #ifndef YYSTYPE -#line 85 "asn1p_y.y" +#line 88 "asn1p_y.y" typedef union { asn1p_t *a_grammar; asn1p_module_flags_e a_module_flags; diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y index b252a731..9baa9ce6 100644 --- a/libasn1parser/asn1p_y.y +++ b/libasn1parser/asn1p_y.y @@ -37,6 +37,9 @@ static struct AssignedIdentifier *saved_aid; static asn1p_value_t *_convert_bitstring2binary(char *str, int base); static void _fixup_anonymous_identifier(asn1p_expr_t *expr); +static asn1p_module_t *currentModule; +#define NEW_EXPR() (asn1p_expr_new(yylineno, currentModule)) + #define checkmem(ptr) do { \ if(!(ptr)) \ return yyerror("Memory failure"); \ @@ -255,6 +258,7 @@ static void _fixup_anonymous_identifier(asn1p_expr_t *expr); %type ImportsElement %type ExportsElement %type ExtensionAndException +%type Type %type TypeDeclaration %type TypeDeclarationSet %type ComplexTypeReference @@ -266,7 +270,6 @@ static void _fixup_anonymous_identifier(asn1p_expr_t *expr); %type DefinedObjectClass %type ClassField %type ObjectClass -%type Type %type DataTypeReference /* Type1 ::= Type2 */ %type DefinedType %type ValueSet /* {a|b|c}*/ @@ -307,13 +310,17 @@ static void _fixup_anonymous_identifier(asn1p_expr_t *expr); %type TagClass TagTypeValue TagPlicit %type optTag /* [UNIVERSAL 0] IMPLICIT */ %type optConstraints -%type Constraints +%type Constraint +%type SubtypeConstraint +%type GeneralConstraint %type SetOfConstraints %type ElementSetSpecs /* 1..2,...,3 */ %type ElementSetSpec /* 1..2,...,3 */ %type ConstraintSubtypeElement /* 1..2 */ %type SimpleTableConstraint +%type UserDefinedConstraint %type TableConstraint +%type ContentsConstraint %type InnerTypeConstraint %type WithComponentsList %type WithComponentsElement @@ -368,23 +375,27 @@ ModuleList: */ ModuleDefinition: - TypeRefName optObjectIdentifier TOK_DEFINITIONS + TypeRefName { currentModule = asn1p_module_new(); } + optObjectIdentifier TOK_DEFINITIONS optModuleDefinitionFlags TOK_PPEQ TOK_BEGIN optModuleBody TOK_END { - if($7) { - $$ = $7; + $$ = currentModule; + + if($8) { + asn1p_module_t tmp = *($$); + *($$) = *($8); + *($8) = tmp; + asn1p_module_free($8); } else { /* There's a chance that a module is just plain empty */ - $$ = asn1p_module_new(); } - checkmem($$); $$->ModuleName = $1; - $$->module_oid = $2; - $$->module_flags = $4; + $$->module_oid = $3; + $$->module_flags = $5; } ; @@ -649,19 +660,19 @@ ImportsList: ImportsElement: TypeRefName { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->Identifier = $1; $$->expr_type = A1TC_REFERENCE; } | TypeRefName '{' '}' { /* Completely equivalent to above */ - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->Identifier = $1; $$->expr_type = A1TC_REFERENCE; } | Identifier { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->Identifier = $1; $$->expr_type = A1TC_REFERENCE; @@ -710,19 +721,19 @@ ExportsBody: ExportsElement: TypeRefName { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->Identifier = $1; $$->expr_type = A1TC_EXPORTVAR; } | TypeRefName '{' '}' { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->Identifier = $1; $$->expr_type = A1TC_EXPORTVAR; } | Identifier { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->Identifier = $1; $$->expr_type = A1TC_EXPORTVAR; @@ -757,7 +768,7 @@ DefinedType: * "Type" */ | ComplexTypeReference { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->reference = $1; $$->expr_type = A1TC_REFERENCE; @@ -767,7 +778,7 @@ DefinedType: * A parameterized assignment. */ | ComplexTypeReference '{' ActualParameterList '}' { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->reference = $1; $$->rhs_pspecs = $3; @@ -880,7 +891,7 @@ ParameterArgumentName: ActualParameterList: ActualParameter { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); asn1p_expr_add($$, $1); } @@ -895,7 +906,7 @@ ActualParameter: $$ = $1; } | SimpleValue { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->Identifier = "?"; $$->expr_type = A1TC_REFERENCE; @@ -904,7 +915,7 @@ ActualParameter: } | Identifier { asn1p_ref_t *ref; - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->Identifier = $1; $$->expr_type = A1TC_REFERENCE; @@ -914,7 +925,7 @@ ActualParameter: $$->value = asn1p_value_fromref(ref, 0); } | ValueSet { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); $$->expr_type = A1TC_VALUESET; $$->meta_type = AMT_VALUESET; $$->constraints = $1; @@ -923,7 +934,7 @@ ActualParameter: /* | '{' ActualParameter '}' { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); asn1p_expr_add($$, $2); $$->expr_type = A1TC_PARAMETRIZED; @@ -936,12 +947,12 @@ ActualParameter: * A collection of constructed data type members. */ optComponentTypeLists: - { $$ = asn1p_expr_new(yylineno); } + { $$ = NEW_EXPR(); } | ComponentTypeLists { $$ = $1; }; ComponentTypeLists: ComponentType { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); asn1p_expr_add($$, $1); } @@ -966,7 +977,7 @@ ComponentType: _fixup_anonymous_identifier($$); } | TOK_COMPONENTS TOK_OF Type { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->meta_type = $3->meta_type; $$->expr_type = A1TC_COMPONENTS_OF; @@ -979,7 +990,7 @@ ComponentType: AlternativeTypeLists: AlternativeType { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); asn1p_expr_add($$, $1); } @@ -1021,7 +1032,7 @@ optUnique: FieldSpec: ClassField { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->expr_type = A1TC_CLASSDEF; $$->meta_type = AMT_OBJECTCLASS; @@ -1038,7 +1049,7 @@ ClassField: /* TypeFieldSpec ::= typefieldreference TypeOptionalitySpec? */ TOK_typefieldreference optMarker { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->Identifier = $1; $$->meta_type = AMT_OBJECTFIELD; @@ -1048,7 +1059,7 @@ ClassField: /* FixedTypeValueFieldSpec ::= valuefieldreference Type UNIQUE ? ValueOptionalitySpec ? */ | TOK_valuefieldreference Type optUnique optMarker { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); $$->Identifier = $1; $$->meta_type = AMT_OBJECTFIELD; $$->expr_type = A1TC_CLASSFIELD_FTVFS; /* FixedTypeValueFieldSpec */ @@ -1059,7 +1070,7 @@ ClassField: /* VariableTypeValueFieldSpec ::= valuefieldreference FieldName ValueOptionalitySpec ? */ | TOK_valuefieldreference FieldName optMarker { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); $$->Identifier = $1; $$->meta_type = AMT_OBJECTFIELD; $$->expr_type = A1TC_CLASSFIELD_VTVFS; @@ -1069,7 +1080,7 @@ ClassField: /* ObjectFieldSpec ::= objectfieldreference DefinedObjectClass ObjectOptionalitySpec ? */ | TOK_valuefieldreference DefinedObjectClass optMarker { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->Identifier = $1; $$->reference = $2; @@ -1080,7 +1091,7 @@ ClassField: /* VariableTypeValueSetFieldSpec ::= valuesetfieldreference FieldName ValueOptionalitySpec ? */ | TOK_typefieldreference FieldName optMarker { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); $$->Identifier = $1; $$->meta_type = AMT_OBJECTFIELD; $$->expr_type = A1TC_CLASSFIELD_VTVSFS; @@ -1090,7 +1101,7 @@ ClassField: /* FixedTypeValueSetFieldSpec ::= valuesetfieldreference Type ValueSetOptionalitySpec ? */ | TOK_typefieldreference Type optMarker { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->Identifier = $1; $$->meta_type = AMT_OBJECTFIELD; @@ -1101,7 +1112,7 @@ ClassField: /* ObjectSetFieldSpec ::= objectsetfieldreference DefinedObjectClass ObjectOptionalitySpec ? */ | TOK_typefieldreference DefinedObjectClass optMarker { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->Identifier = $1; $$->reference = $2; @@ -1157,7 +1168,7 @@ WithSyntaxToken: ExtensionAndException: TOK_ThreeDots { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->Identifier = strdup("..."); checkmem($$->Identifier); @@ -1165,7 +1176,7 @@ ExtensionAndException: $$->meta_type = AMT_TYPE; } | TOK_ThreeDots '!' DefinedValue { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->Identifier = strdup("..."); checkmem($$->Identifier); @@ -1174,7 +1185,7 @@ ExtensionAndException: $$->meta_type = AMT_TYPE; } | TOK_ThreeDots '!' SignedNumber { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->Identifier = strdup("..."); $$->value = $3; @@ -1255,7 +1266,7 @@ TypeDeclarationSet: $$->meta_type = AMT_TYPE; } | TOK_SEQUENCE optConstraints TOK_OF optIdentifier optTag TypeDeclaration { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->constraints = $2; $$->expr_type = ASN_CONSTR_SEQUENCE_OF; @@ -1265,7 +1276,7 @@ TypeDeclarationSet: asn1p_expr_add($$, $6); } | TOK_SET optConstraints TOK_OF optIdentifier optTag TypeDeclaration { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->constraints = $2; $$->expr_type = ASN_CONSTR_SET_OF; @@ -1275,14 +1286,14 @@ TypeDeclarationSet: asn1p_expr_add($$, $6); } | TOK_ANY { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->expr_type = ASN_TYPE_ANY; $$->meta_type = AMT_TYPE; } | TOK_ANY TOK_DEFINED TOK_BY Identifier { int ret; - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->reference = asn1p_ref_new(yylineno); ret = asn1p_ref_add_component($$->reference, @@ -1292,7 +1303,7 @@ TypeDeclarationSet: $$->meta_type = AMT_TYPE; } | TOK_INSTANCE TOK_OF ComplexTypeReference { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->reference = $3; $$->expr_type = A1TC_INSTANCE; @@ -1625,7 +1636,7 @@ BasicTypeId_UniverationCompatible: BasicType: BasicTypeId { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->expr_type = $1; $$->meta_type = AMT_TYPE; @@ -1634,7 +1645,7 @@ BasicType: if($2) { $$ = $2; } else { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); } $$->expr_type = $1; @@ -1681,12 +1692,19 @@ Except: TOK_EXCEPT; optConstraints: { $$ = 0; } - | Constraints { + | Constraint { $$ = $1; } ; -Constraints: +Constraint: + SubtypeConstraint + | '(' GeneralConstraint ')' { + $$ = $2; + } + ; + +SubtypeConstraint: SetOfConstraints { CONSTRAINT_INSERT($$, ACT_CA_SET, $1, 0); } @@ -1811,28 +1829,9 @@ ConstraintSubtypeElement: $$->range_start->type = ATV_MIN; $$->range_stop->type = ATV_MAX; } - | TableConstraint { - $$ = $1; - } | InnerTypeConstraint { $$ = $1; } - | TOK_CONSTRAINED TOK_BY '{' - { asn1p_lexer_hack_push_opaque_state(); } Opaque /* '}' */ { - $$ = asn1p_constraint_new(yylineno); - checkmem($$); - $$->type = ACT_CT_CTDBY; - $$->value = asn1p_value_frombuf($5.buf, $5.len, 0); - checkmem($$->value); - $$->value->type = ATV_UNPARSED; - } - ; - -ConstraintRangeSpec: - TOK_TwoDots { $$ = ACT_EL_RANGE; } - | TOK_TwoDots '<' { $$ = ACT_EL_RLRANGE; } - | '<' TOK_TwoDots { $$ = ACT_EL_LLRANGE; } - | '<' TOK_TwoDots '<' { $$ = ACT_EL_ULRANGE; } ; ConstraintSpec: @@ -1939,6 +1938,40 @@ PresenceConstraint: } ; + +/* X.682 */ +GeneralConstraint: + UserDefinedConstraint + | TableConstraint + | ContentsConstraint + ; + +UserDefinedConstraint: + TOK_CONSTRAINED TOK_BY '{' + { asn1p_lexer_hack_push_opaque_state(); } Opaque /* '}' */ { + $$ = asn1p_constraint_new(yylineno); + checkmem($$); + $$->type = ACT_CT_CTDBY; + $$->value = asn1p_value_frombuf($5.buf, $5.len, 0); + checkmem($$->value); + $$->value->type = ATV_UNPARSED; + } + ; + +ContentsConstraint: + TOK_CONTAINING Type { + $$ = asn1p_constraint_new(yylineno); + $$->type = ACT_CT_CTNG; + $$->value = asn1p_value_fromtype($2); + } + ; + +ConstraintRangeSpec: + TOK_TwoDots { $$ = ACT_EL_RANGE; } + | TOK_TwoDots '<' { $$ = ACT_EL_RLRANGE; } + | '<' TOK_TwoDots { $$ = ACT_EL_LLRANGE; } + | '<' TOK_TwoDots '<' { $$ = ACT_EL_ULRANGE; } + ; TableConstraint: SimpleTableConstraint { $$ = $1; @@ -2077,7 +2110,7 @@ optUniverationDefinition: UniverationDefinition: '{' '}' { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); } | '{' UniverationList '}' { @@ -2087,7 +2120,7 @@ UniverationDefinition: UniverationList: UniverationElement { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); asn1p_expr_add($$, $1); } @@ -2099,14 +2132,14 @@ UniverationList: UniverationElement: Identifier { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->expr_type = A1TC_UNIVERVAL; $$->meta_type = AMT_VALUE; $$->Identifier = $1; } | Identifier '(' SignedNumber ')' { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->expr_type = A1TC_UNIVERVAL; $$->meta_type = AMT_VALUE; @@ -2114,7 +2147,7 @@ UniverationElement: $$->value = $3; } | Identifier '(' DefinedValue ')' { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->expr_type = A1TC_UNIVERVAL; $$->meta_type = AMT_VALUE; @@ -2122,14 +2155,14 @@ UniverationElement: $$->value = $3; } | SignedNumber { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->expr_type = A1TC_UNIVERVAL; $$->meta_type = AMT_VALUE; $$->value = $1; } | TOK_ThreeDots { - $$ = asn1p_expr_new(yylineno); + $$ = NEW_EXPR(); checkmem($$); $$->Identifier = strdup("..."); checkmem($$->Identifier); diff --git a/libasn1parser/asn1parser.c b/libasn1parser/asn1parser.c index a2e2ae28..7d9a88d7 100644 --- a/libasn1parser/asn1parser.c +++ b/libasn1parser/asn1parser.c @@ -150,45 +150,14 @@ _asn1p_set_flags(enum asn1p_flags flags) { return 0; } -/* - * Perform last touches. - */ -static void -_asn1p_apply_module2expr(asn1p_expr_t *expr, asn1p_module_t *mod) { - asn1p_expr_t *e; - - expr->module = mod; /* This is a useful thing */ - - /* - * Do it to children also. - */ - TQ_FOR(e, &(expr->members), next) { - _asn1p_apply_module2expr(e, mod); - } - - /* - * Do to parameterization. - */ - if(expr->rhs_pspecs) { - TQ_FOR(e, &(expr->rhs_pspecs->members), next) { - _asn1p_apply_module2expr(e, mod); - } - } -} - static int _asn1p_fix_modules(asn1p_t *a, const char *fname) { asn1p_module_t *mod; TQ_FOR(mod, &(a->modules), mod_next) { - asn1p_expr_t *expr; - mod->source_file_name = strdup(fname); if(mod->source_file_name == NULL) return -1; - - TQ_FOR(expr, &(mod->members), next) { - _asn1p_apply_module2expr(expr, mod); - } + mod->asn1p = a; } return 0; } diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c index 47cfb1f8..3462d1af 100644 --- a/libasn1print/asn1print.c +++ b/libasn1print/asn1print.c @@ -190,6 +190,11 @@ asn1print_value(asn1p_value_t *val, enum asn1print_flags flags) { case ATV_REAL: printf("%f", val->value.v_double); return 0; + case ATV_TYPE: + asn1print_expr(val->value.v_type->module->asn1p, + val->value.v_type->module, + val->value.v_type, flags, 0); + return 0; case ATV_INTEGER: printf("%" PRIdASN, val->value.v_integer); return 0; @@ -349,10 +354,19 @@ asn1print_constraint(asn1p_constraint_t *ct, enum asn1print_flags flags) { } break; case ACT_CT_CTDBY: - printf("CONSTRAINED BY "); + printf("(CONSTRAINED BY "); assert(ct->value->type == ATV_UNPARSED); fwrite(ct->value->value.string.buf, 1, ct->value->value.string.size, stdout); + printf(")"); + break; + case ACT_CT_CTNG: + printf("(CONTAINING "); + asn1print_expr(ct->value->value.v_type->module->asn1p, + ct->value->value.v_type->module, + ct->value->value.v_type, + flags, 1); + printf(")"); break; case ACT_CA_SET: symno++; case ACT_CA_CRC: symno++; @@ -364,6 +378,7 @@ asn1print_constraint(asn1p_constraint_t *ct, enum asn1print_flags flags) { char *symtable[] = { " EXCEPT ", " ^ ", " | ", ",", "", "(" }; unsigned int i; + if(ct->type == ACT_CA_CRC) fputs("(", stdout); for(i = 0; i < ct->el_count; i++) { if(i) fputs(symtable[symno], stdout); if(ct->type == ACT_CA_CRC) fputs("{", stdout); @@ -373,6 +388,7 @@ asn1print_constraint(asn1p_constraint_t *ct, enum asn1print_flags flags) { && ct->type == ACT_CA_SET) fputs(")", stdout); } + if(ct->type == ACT_CA_CRC) fputs(")", stdout); } break; case ACT_CA_AEX: