From d2ea1de25fea2697105314cbc719347dc6517701 Mon Sep 17 00:00:00 2001 From: Lev Walkin Date: Fri, 20 Aug 2004 13:25:29 +0000 Subject: proper support for SET OF and SEQUENCE OF constraints. managed to get it right without shift/reduce errors --- libasn1parser/asn1p_y.c | 1596 ++++++++++++++++++++++++----------------------- libasn1parser/asn1p_y.y | 73 ++- 2 files changed, 849 insertions(+), 820 deletions(-) (limited to 'libasn1parser') diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c index 9aa7e749..fe2d194b 100644 --- a/libasn1parser/asn1p_y.c +++ b/libasn1parser/asn1p_y.c @@ -205,11 +205,11 @@ typedef union { -#define YYFINAL 381 +#define YYFINAL 385 #define YYFLAG -32768 #define YYNTBASE 115 -#define YYTRANSLATE(x) ((unsigned)(x) <= 355 ? yytranslate[x] : 210) +#define YYTRANSLATE(x) ((unsigned)(x) <= 355 ? yytranslate[x] : 212) static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -261,125 +261,126 @@ static const short yyprhs[] = { 0, 173, 177, 179, 183, 187, 189, 193, 195, 197, 199, 203, 209, 210, 212, 214, 218, 221, 225, 230, 231, 233, 234, 241, 243, 246, 248, 250, 253, 255, 259, - 261, 265, 269, 271, 273, 275, 280, 282, 286, 288, - 292, 296, 298, 302, 304, 308, 310, 312, 314, 316, - 321, 322, 326, 328, 330, 332, 334, 336, 338, 342, - 344, 347, 349, 351, 353, 355, 358, 361, 363, 365, - 368, 371, 373, 375, 377, 379, 382, 384, 387, 389, + 261, 263, 267, 271, 273, 275, 277, 282, 284, 288, + 290, 294, 298, 300, 304, 306, 310, 312, 314, 316, + 318, 323, 324, 328, 330, 332, 334, 336, 338, 340, + 344, 346, 349, 351, 353, 355, 357, 360, 363, 365, + 367, 370, 373, 375, 377, 379, 381, 384, 386, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, - 411, 413, 415, 420, 425, 430, 435, 440, 442, 447, - 449, 451, 453, 455, 457, 458, 460, 465, 469, 474, - 476, 480, 486, 488, 492, 496, 500, 505, 509, 511, - 515, 519, 523, 527, 529, 531, 533, 536, 539, 543, - 545, 547, 549, 551, 553, 555, 557, 563, 565, 569, - 571, 575, 576, 578, 580, 582, 584, 586, 588, 592, - 597, 599, 603, 606, 610, 612, 616, 617, 619, 621, - 624, 626, 628, 629, 633, 636, 640, 642, 646, 648, - 653, 658, 660, 662, 664, 666, 667, 669, 671, 674, - 677, 679, 681, 683, 685, 687 + 411, 413, 415, 417, 422, 427, 432, 437, 442, 444, + 449, 451, 453, 455, 457, 459, 460, 462, 464, 469, + 473, 478, 480, 484, 490, 492, 496, 500, 504, 509, + 513, 515, 519, 523, 527, 531, 533, 535, 537, 540, + 543, 547, 549, 551, 553, 555, 557, 559, 561, 567, + 569, 573, 575, 579, 580, 582, 584, 586, 588, 590, + 592, 596, 601, 603, 607, 610, 614, 616, 620, 621, + 623, 625, 628, 630, 632, 633, 637, 640, 644, 646, + 650, 652, 657, 662, 664, 666, 668, 670, 671, 673, + 675, 678, 681, 683, 685, 687, 689, 691 }; static const short yyrhs[] = { 116, - 0, 117, 0, 116, 117, 0, 206, 118, 34, 122, + 0, 117, 0, 116, 117, 0, 208, 118, 34, 122, 3, 21, 125, 39, 0, 0, 119, 0, 104, 120, 105, 0, 104, 105, 0, 121, 0, 120, 121, 0, - 208, 0, 208, 106, 9, 107, 0, 9, 0, 0, + 210, 0, 210, 106, 9, 107, 0, 9, 0, 0, 123, 0, 124, 0, 123, 124, 0, 41, 84, 0, 52, 84, 0, 20, 84, 0, 43, 53, 0, 12, 57, 0, 0, 126, 0, 127, 0, 126, 127, 0, 129, 0, 134, 0, 140, 0, 164, 0, 137, 0, 0, 38, 12, 128, 0, 172, 0, 54, 130, 108, 0, 54, 46, 0, 131, 0, 130, 131, 0, 132, - 46, 206, 118, 0, 133, 0, 132, 109, 133, 0, - 206, 0, 208, 0, 42, 135, 108, 0, 42, 17, + 46, 208, 118, 0, 133, 0, 132, 109, 133, 0, + 208, 0, 210, 0, 42, 135, 108, 0, 42, 17, 108, 0, 42, 108, 0, 136, 0, 135, 109, 136, - 0, 206, 0, 208, 0, 206, 138, 3, 104, 139, - 105, 0, 159, 0, 169, 0, 0, 179, 0, 206, - 3, 204, 87, 0, 206, 3, 204, 156, 0, 206, - 3, 146, 0, 206, 104, 141, 105, 3, 156, 0, - 142, 0, 141, 109, 142, 0, 206, 0, 206, 110, - 208, 0, 169, 110, 208, 0, 144, 0, 143, 109, - 144, 0, 158, 0, 208, 0, 155, 0, 145, 109, + 0, 208, 0, 210, 0, 208, 138, 3, 104, 139, + 105, 0, 159, 0, 169, 0, 0, 181, 0, 208, + 3, 206, 87, 0, 208, 3, 206, 156, 0, 208, + 3, 146, 0, 208, 104, 141, 105, 3, 156, 0, + 142, 0, 141, 109, 142, 0, 208, 0, 208, 110, + 210, 0, 169, 110, 210, 0, 144, 0, 143, 109, + 144, 0, 158, 0, 210, 0, 155, 0, 145, 109, 155, 0, 28, 104, 148, 105, 150, 0, 0, 88, - 0, 149, 0, 148, 109, 149, 0, 162, 196, 0, - 162, 156, 147, 0, 162, 162, 196, 147, 0, 0, + 0, 149, 0, 148, 109, 149, 0, 162, 198, 0, + 162, 156, 147, 0, 162, 162, 198, 147, 0, 0, 151, 0, 0, 95, 82, 104, 152, 153, 105, 0, - 154, 0, 153, 154, 0, 4, 0, 162, 0, 209, - 156, 0, 157, 0, 158, 177, 196, 0, 102, 0, - 102, 111, 167, 0, 102, 111, 203, 0, 171, 0, - 172, 0, 173, 0, 206, 104, 143, 105, 0, 159, - 0, 56, 68, 159, 0, 11, 0, 11, 112, 206, - 0, 11, 112, 208, 0, 207, 0, 207, 112, 160, - 0, 161, 0, 160, 112, 161, 0, 163, 0, 163, - 0, 13, 0, 14, 0, 208, 138, 3, 165, 0, - 0, 104, 166, 168, 0, 5, 0, 7, 0, 6, - 0, 203, 0, 167, 0, 208, 0, 206, 112, 208, - 0, 4, 0, 168, 4, 0, 24, 0, 63, 0, - 76, 0, 170, 0, 67, 81, 0, 65, 51, 0, - 77, 0, 44, 0, 36, 71, 0, 26, 81, 0, - 91, 0, 47, 0, 58, 0, 40, 0, 22, 81, - 0, 169, 0, 170, 200, 0, 23, 0, 48, 0, - 49, 0, 50, 0, 59, 0, 64, 0, 74, 0, - 83, 0, 85, 0, 90, 0, 92, 0, 93, 0, - 94, 0, 66, 0, 27, 104, 145, 105, 0, 78, - 104, 145, 105, 0, 79, 104, 145, 105, 0, 78, - 177, 68, 158, 0, 79, 177, 68, 158, 0, 18, - 0, 18, 35, 25, 208, 0, 99, 0, 100, 0, - 97, 0, 98, 0, 96, 0, 0, 178, 0, 80, - 106, 179, 107, 0, 106, 179, 107, 0, 178, 106, - 179, 107, 0, 180, 0, 180, 109, 102, 0, 180, - 109, 102, 109, 180, 0, 181, 0, 180, 174, 181, - 0, 180, 175, 181, 0, 181, 176, 181, 0, 183, - 106, 179, 107, 0, 106, 179, 107, 0, 184, 0, - 184, 182, 184, 0, 61, 182, 184, 0, 184, 182, - 60, 0, 61, 182, 60, 0, 190, 0, 185, 0, - 101, 0, 101, 113, 0, 113, 101, 0, 113, 101, - 113, 0, 80, 0, 46, 0, 203, 0, 208, 0, - 6, 0, 45, 0, 86, 0, 95, 30, 104, 186, - 105, 0, 187, 0, 186, 109, 187, 0, 102, 0, - 208, 177, 188, 0, 0, 189, 0, 73, 0, 15, - 0, 69, 0, 191, 0, 192, 0, 104, 206, 105, - 0, 191, 104, 193, 105, 0, 194, 0, 193, 109, - 194, 0, 114, 195, 0, 114, 112, 195, 0, 208, - 0, 195, 112, 208, 0, 0, 197, 0, 69, 0, - 33, 198, 0, 184, 0, 169, 0, 0, 104, 199, - 168, 0, 104, 105, 0, 104, 201, 105, 0, 202, - 0, 201, 109, 202, 0, 208, 0, 208, 106, 203, - 107, 0, 208, 106, 167, 107, 0, 203, 0, 102, - 0, 9, 0, 10, 0, 0, 205, 0, 103, 0, - 103, 52, 0, 103, 41, 0, 11, 0, 12, 0, - 12, 0, 8, 0, 208, 0, 208, 205, 0 + 154, 0, 153, 154, 0, 4, 0, 162, 0, 211, + 156, 0, 157, 0, 158, 178, 198, 0, 173, 0, + 102, 0, 102, 111, 167, 0, 102, 111, 205, 0, + 171, 0, 172, 0, 174, 0, 208, 104, 143, 105, + 0, 159, 0, 56, 68, 159, 0, 11, 0, 11, + 112, 208, 0, 11, 112, 210, 0, 209, 0, 209, + 112, 160, 0, 161, 0, 160, 112, 161, 0, 163, + 0, 163, 0, 13, 0, 14, 0, 210, 138, 3, + 165, 0, 0, 104, 166, 168, 0, 5, 0, 7, + 0, 6, 0, 205, 0, 167, 0, 210, 0, 208, + 112, 210, 0, 4, 0, 168, 4, 0, 24, 0, + 63, 0, 76, 0, 170, 0, 67, 81, 0, 65, + 51, 0, 77, 0, 44, 0, 36, 71, 0, 26, + 81, 0, 91, 0, 47, 0, 58, 0, 40, 0, + 22, 81, 0, 169, 0, 170, 202, 0, 23, 0, + 48, 0, 49, 0, 50, 0, 59, 0, 64, 0, + 74, 0, 83, 0, 85, 0, 90, 0, 92, 0, + 93, 0, 94, 0, 66, 0, 78, 178, 68, 156, + 0, 79, 178, 68, 156, 0, 27, 104, 145, 105, + 0, 78, 104, 145, 105, 0, 79, 104, 145, 105, + 0, 18, 0, 18, 35, 25, 210, 0, 99, 0, + 100, 0, 97, 0, 98, 0, 96, 0, 0, 179, + 0, 180, 0, 80, 106, 181, 107, 0, 106, 181, + 107, 0, 180, 106, 181, 107, 0, 182, 0, 182, + 109, 102, 0, 182, 109, 102, 109, 182, 0, 183, + 0, 182, 175, 183, 0, 182, 176, 183, 0, 183, + 177, 183, 0, 185, 106, 181, 107, 0, 106, 181, + 107, 0, 186, 0, 186, 184, 186, 0, 61, 184, + 186, 0, 186, 184, 60, 0, 61, 184, 60, 0, + 192, 0, 187, 0, 101, 0, 101, 113, 0, 113, + 101, 0, 113, 101, 113, 0, 80, 0, 46, 0, + 205, 0, 210, 0, 6, 0, 45, 0, 86, 0, + 95, 30, 104, 188, 105, 0, 189, 0, 188, 109, + 189, 0, 102, 0, 210, 178, 190, 0, 0, 191, + 0, 73, 0, 15, 0, 69, 0, 193, 0, 194, + 0, 104, 208, 105, 0, 193, 104, 195, 105, 0, + 196, 0, 195, 109, 196, 0, 114, 197, 0, 114, + 112, 197, 0, 210, 0, 197, 112, 210, 0, 0, + 199, 0, 69, 0, 33, 200, 0, 186, 0, 169, + 0, 0, 104, 201, 168, 0, 104, 105, 0, 104, + 203, 105, 0, 204, 0, 203, 109, 204, 0, 210, + 0, 210, 106, 205, 107, 0, 210, 106, 167, 107, + 0, 205, 0, 102, 0, 9, 0, 10, 0, 0, + 207, 0, 103, 0, 103, 52, 0, 103, 41, 0, + 11, 0, 12, 0, 12, 0, 8, 0, 210, 0, + 210, 207, 0 }; #endif #if YYDEBUG != 0 static const short yyrline[] = { 0, - 296, 302, 308, 324, 349, 351, 354, 358, 363, 370, - 378, 383, 387, 396, 398, 406, 410, 418, 422, 425, - 428, 432, 452, 454, 462, 466, 498, 502, 511, 518, - 531, 538, 540, 552, 565, 572, 577, 583, 589, 598, - 604, 610, 617, 625, 629, 632, 639, 645, 651, 658, - 667, 677, 685, 693, 695, 707, 719, 726, 742, 752, - 762, 772, 777, 784, 794, 800, 806, 810, 822, 828, - 834, 844, 846, 849, 857, 863, 872, 877, 894, 896, - 901, 905, 910, 915, 921, 925, 950, 957, 962, 970, - 979, 988, 999, 1003, 1009, 1017, 1041, 1048, 1062, 1071, - 1081, 1091, 1099, 1120, 1129, 1138, 1139, 1141, 1148, 1160, - 1170, 1172, 1177, 1181, 1185, 1189, 1192, 1197, 1209, 1225, - 1236, 1250, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, - 1260, 1261, 1262, 1268, 1270, 1271, 1274, 1281, 1293, 1295, - 1299, 1303, 1304, 1305, 1306, 1307, 1311, 1312, 1313, 1314, - 1318, 1319, 1322, 1329, 1335, 1341, 1349, 1357, 1363, 1379, - 1379, 1380, 1380, 1381, 1383, 1385, 1388, 1402, 1406, 1411, - 1415, 1421, 1431, 1435, 1438, 1441, 1446, 1455, 1463, 1469, - 1476, 1484, 1492, 1501, 1504, 1509, 1511, 1512, 1513, 1516, - 1520, 1525, 1529, 1540, 1545, 1550, 1557, 1563, 1567, 1572, - 1578, 1590, 1592, 1595, 1599, 1602, 1607, 1611, 1619, 1634, - 1640, 1647, 1660, 1672, 1687, 1691, 1708, 1710, 1713, 1717, - 1723, 1726, 1728, 1728, 1748, 1753, 1758, 1764, 1770, 1778, - 1786, 1794, 1801, 1811, 1816, 1846, 1848, 1851, 1856, 1860, - 1866, 1871, 1878, 1885, 1892, 1897 + 298, 304, 310, 326, 351, 353, 356, 360, 365, 372, + 380, 385, 389, 398, 400, 408, 412, 420, 424, 427, + 430, 434, 454, 456, 464, 468, 500, 504, 513, 520, + 533, 540, 542, 554, 567, 574, 579, 585, 591, 600, + 606, 612, 619, 627, 631, 634, 641, 647, 653, 660, + 669, 679, 687, 695, 697, 709, 721, 728, 744, 754, + 764, 774, 779, 786, 796, 802, 808, 812, 824, 830, + 836, 846, 848, 851, 859, 865, 874, 879, 896, 898, + 903, 907, 912, 917, 923, 927, 952, 959, 964, 974, + 982, 991, 1000, 1011, 1015, 1021, 1029, 1053, 1060, 1074, + 1083, 1093, 1103, 1111, 1132, 1141, 1150, 1151, 1153, 1160, + 1172, 1182, 1184, 1189, 1193, 1197, 1201, 1204, 1209, 1221, + 1237, 1248, 1262, 1264, 1265, 1266, 1267, 1268, 1269, 1270, + 1271, 1272, 1273, 1274, 1280, 1282, 1283, 1286, 1293, 1305, + 1307, 1311, 1315, 1316, 1317, 1318, 1319, 1323, 1324, 1325, + 1326, 1330, 1331, 1335, 1344, 1354, 1361, 1367, 1373, 1379, + 1395, 1395, 1396, 1396, 1397, 1399, 1401, 1406, 1410, 1419, + 1423, 1428, 1432, 1438, 1448, 1452, 1455, 1458, 1463, 1472, + 1480, 1486, 1493, 1501, 1509, 1518, 1521, 1526, 1528, 1529, + 1530, 1533, 1537, 1542, 1546, 1557, 1562, 1567, 1574, 1580, + 1584, 1589, 1595, 1607, 1609, 1612, 1616, 1619, 1624, 1628, + 1636, 1651, 1657, 1664, 1677, 1689, 1704, 1708, 1725, 1727, + 1730, 1734, 1740, 1743, 1745, 1745, 1765, 1770, 1775, 1781, + 1787, 1795, 1803, 1811, 1818, 1828, 1833, 1863, 1865, 1868, + 1873, 1877, 1883, 1888, 1895, 1902, 1909, 1914 }; #endif @@ -416,17 +417,18 @@ static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ", "ActualParameter","ConstructedDataTypeDefinition","ClassDeclaration","optUnique", "ClassFieldList","ClassField","optWithSyntax","WithSyntax","@2","WithSyntaxFormat", "WithSyntaxFormatToken","DataTypeMember","ConstrainedTypeDeclaration","ExtensionAndException", -"TypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement", -"ClassFieldIdentifier","ClassFieldName","ValueDefinition","InlineOrDefinedValue", -"@3","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible", -"BasicType","BasicString","ConstructedType","Union","Intersection","Except", -"optConstraints","SetOfConstraints","ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement", -"ConstraintRangeSpec","ConstraintSpec","ConstraintValue","WithComponents","WithComponentsList", -"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint", -"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement", -"ComponentIdList","optMarker","Marker","DefaultValue","@4","UniverationDefinition", -"UniverationList","UniverationElement","SignedNumber","optTag","Tag","TypeRefName", -"ObjectClassReference","Identifier","TaggedIdentifier", NULL +"UnconstrainedTypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList", +"ComplexTypeReferenceElement","ClassFieldIdentifier","ClassFieldName","ValueDefinition", +"InlineOrDefinedValue","@3","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible", +"BasicType","BasicString","ConstructedTypeConstrained","ConstructedType","Union", +"Intersection","Except","optConstraints","Constraints","SetOfConstraints","ElementSetSpecs", +"ElementSetSpec","ConstraintSubtypeElement","ConstraintRangeSpec","ConstraintSpec", +"ConstraintValue","WithComponents","WithComponentsList","WithComponentsElement", +"optPresenceConstraint","PresenceConstraint","TableConstraint","SimpleTableConstraint", +"ComponentRelationConstraint","AtNotationList","AtNotationElement","ComponentIdList", +"optMarker","Marker","DefaultValue","@4","UniverationDefinition","UniverationList", +"UniverationElement","SignedNumber","optTag","Tag","TypeRefName","ObjectClassReference", +"Identifier","TaggedIdentifier", NULL }; #endif @@ -439,23 +441,23 @@ static const short yyr1[] = { 0, 137, 138, 138, 139, 139, 140, 140, 140, 140, 141, 141, 142, 142, 142, 143, 143, 144, 144, 145, 145, 146, 147, 147, 148, 148, 149, 149, 149, 150, 150, - 152, 151, 153, 153, 154, 154, 155, 155, 156, 157, - 157, 157, 158, 158, 158, 158, 158, 158, 159, 159, - 159, 159, 159, 160, 160, 161, 162, 163, 163, 164, - 166, 165, 165, 165, 165, 165, 165, 167, 167, 168, - 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 170, 170, 170, 171, 171, 172, 172, + 152, 151, 153, 153, 154, 154, 155, 155, 156, 156, + 157, 157, 157, 158, 158, 158, 158, 158, 158, 159, + 159, 159, 159, 159, 160, 160, 161, 162, 163, 163, + 164, 166, 165, 165, 165, 165, 165, 165, 167, 167, + 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 170, 170, 170, 171, 171, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 173, 173, 173, 173, 173, 173, 173, 174, - 174, 175, 175, 176, 177, 177, 177, 178, 178, 179, - 179, 179, 180, 180, 180, 180, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 182, 182, 182, 182, 183, - 183, 184, 184, 184, 184, 184, 185, 186, 186, 187, - 187, 188, 188, 189, 189, 189, 190, 190, 191, 192, - 193, 193, 194, 194, 195, 195, 196, 196, 197, 197, - 198, 198, 199, 198, 200, 200, 201, 201, 202, 202, - 202, 202, 202, 203, 203, 204, 204, 205, 205, 205, - 206, 206, 207, 208, 209, 209 + 172, 172, 172, 173, 173, 174, 174, 174, 174, 174, + 175, 175, 176, 176, 177, 178, 178, 179, 179, 180, + 180, 181, 181, 181, 182, 182, 182, 182, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, + 184, 185, 185, 186, 186, 186, 186, 186, 187, 188, + 188, 189, 189, 190, 190, 191, 191, 191, 192, 192, + 193, 194, 195, 195, 196, 196, 197, 197, 198, 198, + 199, 199, 200, 200, 201, 200, 202, 202, 203, 203, + 204, 204, 204, 204, 204, 205, 205, 206, 206, 207, + 207, 207, 208, 208, 209, 210, 211, 211 }; static const short yyr2[] = { 0, @@ -468,304 +470,300 @@ static const short yyr2[] = { 0, 3, 1, 3, 3, 1, 3, 1, 1, 1, 3, 5, 0, 1, 1, 3, 2, 3, 4, 0, 1, 0, 6, 1, 2, 1, 1, 2, 1, 3, 1, - 3, 3, 1, 1, 1, 4, 1, 3, 1, 3, - 3, 1, 3, 1, 3, 1, 1, 1, 1, 4, - 0, 3, 1, 1, 1, 1, 1, 1, 3, 1, - 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, - 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, + 1, 3, 3, 1, 1, 1, 4, 1, 3, 1, + 3, 3, 1, 3, 1, 3, 1, 1, 1, 1, + 4, 0, 3, 1, 1, 1, 1, 1, 1, 3, + 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, + 2, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 1, 4, 1, - 1, 1, 1, 1, 0, 1, 4, 3, 4, 1, - 3, 5, 1, 3, 3, 3, 4, 3, 1, 3, - 3, 3, 3, 1, 1, 1, 2, 2, 3, 1, - 1, 1, 1, 1, 1, 1, 5, 1, 3, 1, - 3, 0, 1, 1, 1, 1, 1, 1, 3, 4, - 1, 3, 2, 3, 1, 3, 0, 1, 1, 2, - 1, 1, 0, 3, 2, 3, 1, 3, 1, 4, - 4, 1, 1, 1, 1, 0, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 2 + 1, 1, 1, 4, 4, 4, 4, 4, 1, 4, + 1, 1, 1, 1, 1, 0, 1, 1, 4, 3, + 4, 1, 3, 5, 1, 3, 3, 3, 4, 3, + 1, 3, 3, 3, 3, 1, 1, 1, 2, 2, + 3, 1, 1, 1, 1, 1, 1, 1, 5, 1, + 3, 1, 3, 0, 1, 1, 1, 1, 1, 1, + 3, 4, 1, 3, 2, 3, 1, 3, 0, 1, + 1, 2, 1, 1, 0, 3, 2, 3, 1, 3, + 1, 4, 4, 1, 1, 1, 1, 0, 1, 1, + 2, 2, 1, 1, 1, 1, 1, 2 }; static const short yydefact[] = { 0, - 241, 242, 1, 2, 5, 3, 0, 0, 6, 244, + 243, 244, 1, 2, 5, 3, 0, 0, 6, 246, 13, 8, 0, 9, 11, 14, 7, 10, 0, 0, 0, 0, 0, 0, 0, 15, 16, 0, 22, 20, - 18, 21, 19, 0, 17, 12, 23, 139, 0, 0, - 140, 141, 142, 0, 143, 144, 152, 145, 146, 147, - 148, 149, 150, 151, 0, 24, 25, 27, 28, 31, + 18, 21, 19, 0, 17, 12, 23, 140, 0, 0, + 141, 142, 143, 0, 144, 145, 153, 146, 147, 148, + 149, 150, 151, 152, 0, 24, 25, 27, 28, 31, 29, 30, 34, 0, 0, 32, 0, 46, 0, 47, 49, 50, 36, 0, 37, 0, 40, 42, 43, 4, - 26, 236, 99, 243, 0, 122, 0, 0, 135, 129, - 133, 134, 123, 0, 0, 124, 128, 132, 0, 0, - 52, 53, 125, 102, 0, 33, 45, 44, 0, 35, - 38, 0, 0, 0, 238, 58, 0, 237, 0, 136, - 131, 130, 127, 126, 0, 60, 0, 62, 0, 0, - 0, 48, 5, 41, 0, 240, 239, 99, 243, 158, - 0, 0, 165, 165, 56, 57, 165, 97, 137, 125, - 93, 94, 95, 0, 100, 101, 0, 0, 0, 0, - 54, 108, 109, 103, 104, 106, 113, 115, 114, 234, - 235, 111, 110, 117, 116, 0, 118, 39, 0, 74, - 217, 107, 0, 0, 0, 0, 0, 0, 0, 166, - 0, 0, 217, 0, 138, 0, 0, 61, 64, 63, - 194, 195, 191, 0, 190, 196, 0, 0, 0, 0, - 55, 170, 173, 0, 179, 185, 184, 207, 208, 192, - 193, 0, 0, 0, 79, 0, 0, 219, 72, 217, - 76, 218, 0, 90, 0, 69, 88, 245, 0, 98, - 0, 0, 0, 0, 0, 0, 0, 89, 233, 225, - 0, 227, 232, 229, 0, 65, 67, 68, 59, 186, - 0, 0, 0, 0, 0, 51, 162, 163, 160, 161, - 0, 0, 0, 164, 0, 0, 0, 0, 105, 120, - 112, 119, 0, 71, 80, 75, 223, 222, 221, 220, - 73, 77, 72, 159, 0, 153, 0, 246, 87, 0, - 154, 168, 156, 0, 155, 157, 226, 0, 0, 96, - 0, 187, 188, 183, 181, 0, 209, 178, 171, 174, - 175, 176, 0, 182, 180, 0, 0, 211, 121, 0, - 0, 78, 91, 92, 70, 167, 169, 228, 0, 0, - 66, 189, 200, 0, 198, 165, 0, 177, 0, 213, - 215, 210, 0, 81, 224, 231, 230, 197, 0, 202, - 172, 214, 0, 212, 0, 199, 205, 206, 204, 201, - 203, 216, 85, 0, 83, 86, 82, 84, 0, 0, - 0 + 26, 238, 100, 245, 0, 123, 0, 0, 136, 130, + 134, 135, 124, 0, 0, 125, 129, 133, 0, 0, + 52, 53, 126, 103, 0, 33, 45, 44, 0, 35, + 38, 0, 0, 0, 240, 58, 0, 239, 0, 137, + 132, 131, 128, 127, 0, 60, 0, 62, 0, 0, + 0, 48, 5, 41, 0, 242, 241, 100, 245, 159, + 0, 0, 166, 166, 56, 57, 166, 98, 138, 126, + 94, 95, 90, 96, 0, 101, 102, 0, 0, 0, + 0, 54, 109, 110, 104, 105, 107, 114, 116, 115, + 236, 237, 112, 111, 118, 117, 0, 119, 39, 0, + 74, 219, 108, 0, 0, 0, 0, 0, 0, 0, + 167, 168, 0, 0, 219, 0, 139, 0, 0, 61, + 64, 63, 196, 197, 193, 0, 192, 198, 0, 0, + 0, 0, 55, 172, 175, 0, 181, 187, 186, 209, + 210, 194, 195, 0, 0, 0, 79, 0, 0, 221, + 72, 219, 76, 220, 0, 91, 0, 69, 88, 247, + 0, 99, 0, 0, 0, 0, 0, 0, 0, 89, + 235, 227, 0, 229, 234, 231, 0, 0, 0, 65, + 67, 68, 59, 188, 0, 0, 0, 0, 0, 51, + 163, 164, 161, 162, 0, 0, 0, 165, 0, 0, + 0, 0, 106, 121, 113, 120, 0, 71, 80, 75, + 225, 224, 223, 222, 73, 77, 72, 160, 0, 156, + 0, 248, 87, 0, 157, 170, 154, 0, 158, 155, + 228, 0, 0, 97, 0, 189, 190, 185, 183, 0, + 211, 180, 173, 176, 177, 178, 0, 184, 182, 0, + 0, 213, 122, 0, 0, 78, 92, 93, 70, 169, + 171, 230, 0, 0, 66, 191, 202, 0, 200, 166, + 0, 179, 0, 215, 217, 212, 0, 81, 226, 233, + 232, 199, 0, 204, 174, 216, 0, 214, 0, 201, + 207, 208, 206, 203, 205, 218, 85, 0, 83, 86, + 82, 84, 0, 0, 0 }; -static const short yydefgoto[] = { 379, +static const short yydefgoto[] = { 383, 3, 4, 8, 9, 13, 14, 25, 26, 27, 55, 56, 57, 106, 58, 74, 75, 76, 77, 59, 69, - 70, 60, 100, 210, 61, 125, 126, 255, 256, 235, - 116, 292, 179, 180, 284, 285, 365, 374, 375, 236, - 146, 237, 147, 148, 164, 165, 181, 182, 62, 173, - 223, 174, 281, 149, 150, 151, 152, 153, 272, 273, - 275, 189, 190, 211, 212, 213, 262, 214, 215, 216, - 344, 345, 370, 371, 217, 218, 219, 327, 328, 350, - 231, 232, 290, 331, 195, 251, 252, 220, 117, 118, - 154, 104, 221, 239 + 70, 60, 100, 212, 61, 125, 126, 259, 260, 237, + 116, 296, 180, 181, 288, 289, 369, 378, 379, 238, + 146, 239, 147, 148, 165, 166, 182, 183, 62, 174, + 225, 175, 285, 149, 150, 151, 152, 153, 154, 276, + 277, 279, 190, 191, 192, 213, 214, 215, 266, 216, + 217, 218, 348, 349, 374, 375, 219, 220, 221, 331, + 332, 354, 233, 234, 294, 335, 197, 253, 254, 222, + 117, 118, 155, 104, 223, 241 }; -static const short yypact[] = { 41, --32768,-32768, 41,-32768, -62,-32768, 10, 54,-32768,-32768, --32768,-32768, 20,-32768, -20, 44,-32768,-32768, 95, 78, - 72, 83, 45, 112, 187, 44,-32768, 94,-32768,-32768, --32768,-32768,-32768, 189,-32768,-32768, 398,-32768, 223, 23, --32768,-32768,-32768, 57,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, 201, 398,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 194, 696,-32768, 140,-32768, 53,-32768, --32768,-32768,-32768, 47,-32768, -25,-32768,-32768,-32768,-32768, --32768, -8, 138,-32768, 173,-32768, 185, 196,-32768,-32768, --32768,-32768,-32768, 209, 188,-32768,-32768,-32768, 713, 265, --32768,-32768,-32768, 160, 271,-32768,-32768,-32768, 157,-32768, --32768, 41, 157, 174, 108,-32768, 559,-32768, 157,-32768, --32768,-32768,-32768,-32768, 90,-32768, 169, 171, 176, 137, - 71,-32768, -62,-32768, 137,-32768,-32768, 59, 178, 248, - 180, 218, 42, 60,-32768,-32768, -33,-32768,-32768, 183, --32768,-32768,-32768, 190,-32768,-32768, 289, 713, 287, 287, - 133,-32768,-32768, 193,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768, 203,-32768,-32768, 93,-32768, - 482,-32768, 272, 9, 170, 200, 9, 133, 231, 202, - 9, 232, 30, 52,-32768, 337, 636,-32768,-32768,-32768, --32768,-32768,-32768, -69,-32768,-32768, 283, 41, 133, 211, --32768, 124, 221, 212, -69,-32768,-32768, 216,-32768,-32768, --32768, 137, 317, 287, 227, 137, 267,-32768, 235, 30, --32768,-32768, 287, 213, 98,-32768,-32768, 224, 636,-32768, - 133, 103, 219, 636, 133, 106, 636,-32768,-32768,-32768, - 120,-32768,-32768, 222, 122,-32768,-32768,-32768,-32768, 220, - 228, 84, 233, 226, 229,-32768,-32768,-32768,-32768,-32768, - 236, 133, 133,-32768, 133, 133, 128, 225,-32768,-32768, - 331,-32768, 258,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 235,-32768, 234,-32768, 9,-32768,-32768, 239, --32768,-32768,-32768, 240,-32768,-32768,-32768, 14, 234,-32768, - 337,-32768, 237,-32768,-32768, 19,-32768,-32768, 242,-32768, --32768,-32768, 247,-32768,-32768, 7, 127,-32768,-32768, 253, - 317,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 255, 259, --32768,-32768,-32768, 142,-32768, -33, 133,-32768, 287, 256, --32768,-32768, 225,-32768, 331,-32768,-32768,-32768, 19, 28, - 165, 256, 287,-32768, 179,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 12,-32768,-32768,-32768,-32768, 341, 365, --32768 +static const short yypact[] = { 62, +-32768,-32768, 62,-32768, -36,-32768, 11, 56,-32768,-32768, +-32768,-32768, 26,-32768, -13, 202,-32768,-32768, 87, 52, + 66, 99, 108, 101, 116, 202,-32768, 81,-32768,-32768, +-32768,-32768,-32768, 149,-32768,-32768, 375,-32768, 185, 10, +-32768,-32768,-32768, 58,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768, 163, 375,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 140, 673,-32768, 96,-32768, 86,-32768, +-32768,-32768,-32768, 20,-32768, -4,-32768,-32768,-32768,-32768, +-32768, -11, 98,-32768, 134,-32768, 137, 156,-32768,-32768, +-32768,-32768,-32768, 187, 139,-32768,-32768,-32768, 690, 269, +-32768,-32768,-32768, 165, 272,-32768,-32768,-32768, 218,-32768, +-32768, 62, 218, 179, 94,-32768, 536,-32768, 218,-32768, +-32768,-32768,-32768,-32768, -65,-32768, 175, 176, 183, 199, + 53,-32768, -36,-32768, 199,-32768,-32768, 70, 184, 255, + 192, 229, 61, 65,-32768,-32768, -27,-32768,-32768, 194, +-32768,-32768,-32768,-32768, 195,-32768,-32768, 301, 690, 299, + 299, 215,-32768,-32768, 197,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 203,-32768,-32768, 63, +-32768, 459,-32768, 286, 21, 235, 210, 21, 215, 250, +-32768, 214, 21, 256, 15, 42,-32768, 314, 613,-32768, +-32768,-32768,-32768,-32768,-32768, -12,-32768,-32768, 297, 62, + 215, 223,-32768, 142, 233, 225, -12,-32768,-32768, 230, +-32768,-32768,-32768, 199, 329, 299, 240, 199, 226,-32768, + 251, 15,-32768,-32768, 299, 231, 91,-32768,-32768, 241, + 613,-32768, 215, 128, 236, 613, 215, 144, 613,-32768, +-32768,-32768, 158,-32768,-32768, 239, 243, 244, 159,-32768, +-32768,-32768,-32768, 238, 248, 77, 249, 252, 245,-32768, +-32768,-32768,-32768,-32768, 253, 215, 215,-32768, 215, 215, + 89, 254,-32768,-32768, 355,-32768, 283,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 251,-32768, 247,-32768, + 21,-32768,-32768, 259,-32768,-32768,-32768, 260,-32768,-32768, +-32768, 46, 247,-32768, 314,-32768, 258,-32768,-32768, 28, +-32768,-32768, 265,-32768,-32768,-32768, 262,-32768,-32768, -1, + 160,-32768,-32768, 271, 329,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, 275, 277,-32768,-32768,-32768, 169,-32768, -27, + 215,-32768, 299, 264,-32768,-32768, 254,-32768, 355,-32768, +-32768,-32768, 28, 8, 182, 264, 299,-32768, 125,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 12,-32768,-32768, +-32768,-32768, 385, 389,-32768 }; static const short yypgoto[] = {-32768, --32768, 364, 241,-32768,-32768, 356,-32768,-32768, 344,-32768, --32768, 316,-32768,-32768,-32768, 301,-32768, 263,-32768,-32768, - 269,-32768, 314,-32768,-32768,-32768, 230,-32768, 69, 62, --32768, 96,-32768, 156,-32768,-32768,-32768,-32768, 16, 86, - -131,-32768, -193, -55,-32768, 172, -174, -94,-32768,-32768, --32768, -162, 61, -53, -51,-32768, 89,-32768,-32768,-32768, --32768, -142,-32768, -118, 50, -17, 184,-32768, -188,-32768, --32768, 32,-32768,-32768,-32768,-32768,-32768,-32768, 55, 49, - -121,-32768,-32768,-32768,-32768,-32768, 97, -123,-32768, 181, - 1,-32768, -7,-32768 +-32768, 391, 263,-32768,-32768, 382,-32768,-32768, 374,-32768, +-32768, 345,-32768,-32768,-32768, 328,-32768, 290,-32768,-32768, + 300,-32768, 346,-32768,-32768,-32768, 257,-32768, 95, -67, +-32768, 115,-32768, 186,-32768,-32768,-32768,-32768, 37, 117, + -40,-32768, -188, -50,-32768, 196, -179, -91,-32768,-32768, +-32768, -219, 84, -56, -52,-32768, 35,-32768,-32768,-32768, +-32768,-32768, -142,-32768,-32768, -165, 71, -121, 204,-32768, + -141,-32768,-32768, 64,-32768,-32768,-32768,-32768,-32768,-32768, + 69, 75, -124,-32768,-32768,-32768,-32768,-32768, 118, -120, +-32768, 191, 1,-32768, -7,-32768 }; -#define YYLAST 804 +#define YYLAST 781 static const short yytable[] = { 15, - 5, 192, 257, 5, 193, 15, 230, 175, 101, 101, - 102, 102, 103, 103, 10, 373, 10, 10, 11, 114, - 112, 10, 170, 171, 162, 163, 10, 10, 11, 65, - 10, 260, 72, 1, 2, 166, 79, 64, 289, 67, - 71, 7, 367, 261, 78, 127, 186, 103, 65, 229, - 303, 1, 2, 306, 10, 20, 64, 1, 2, 10, - 170, 171, 227, 21, 10, 259, 79, 1, 2, 243, - 253, 248, 188, 315, 78, 167, 168, 169, 10, 170, - 171, 1, 2, 113, 22, 19, 23, 16, 325, 201, - 265, 10, 170, 171, 115, 24, 368, 32, 228, 128, - 369, 72, 73, 28, 127, 79, 103, 299, 293, 71, - 234, 156, 133, 78, 12, 249, 377, 257, 349, 155, - 343, 186, 300, 177, 17, 63, 304, 166, 202, 240, - 68, 176, 333, 201, 29, 10, 170, 171, 201, 186, - 10, 170, 171, 314, 63, 187, 339, 188, 136, 162, - 163, 199, 200, 249, 110, 30, 250, 323, 128, 137, - 108, 109, -241, 191, 10, 188, 31, 1, 2, 206, - 119, 334, 202, 288, 172, 103, 238, 202, 203, 238, - 83, 84, 373, 238, 253, 340, 254, 324, 258, 34, - 376, 162, 163, 204, 157, 33, 82, 225, 158, 376, - 36, 226, 296, 360, 83, 84, 297, 301, 264, 37, - 305, 297, 205, 206, 297, 85, 282, 86, 206, 87, - 267, 268, 269, 270, 307, 294, 310, 207, 308, 88, - 311, 352, 271, 89, 66, 353, 208, 90, 209, 80, - 91, 10, 170, 171, 1, 2, 358, 107, 242, 119, - 359, 92, 246, 120, 320, 321, 93, 322, 94, 123, - 95, 267, 268, 269, 270, 121, 122, 129, 124, 96, - 97, 130, 201, 131, 10, 170, 171, 135, 159, 161, - 160, -242, 183, 184, 98, 185, 194, 177, 85, 238, - 86, 197, 87, 196, 10, 176, 233, 99, 244, 247, - 254, 177, 88, 258, 222, 241, 89, 245, 346, 176, - 90, 202, 263, 91, 224, 266, 274, 276, 351, 278, - 280, 283, 291, 295, 92, 302, 115, 309, 313, 93, - 317, 94, 312, 95, 329, 318, 316, 319, 326, 330, - 380, 351, 96, 97, 10, 336, 337, 138, 139, 342, - 347, 346, 206, 348, 140, 372, 354, 98, 85, 38, - 86, 356, 87, 141, 381, 357, 6, 363, 18, 35, - 287, 81, 88, 178, 111, 134, 89, 132, 105, 341, - 90, 286, 335, 91, 41, 42, 43, 198, 332, 378, - 366, 355, 142, 279, 92, 45, 361, 362, 277, 93, - 46, 94, 47, 95, 338, 10, 0, 364, 1, 2, - 48, 0, 96, 97, 143, 144, 0, 0, 298, 49, - 38, 50, 0, 0, 0, 0, 51, 98, 52, 53, - 54, 0, 0, 0, 0, 39, 0, 0, 0, 40, - 0, 0, 0, 0, 0, 41, 42, 43, 0, 0, - 0, 44, 0, 0, 0, 0, 45, 0, 0, 0, - 0, 46, 0, 47, 0, 0, 0, 0, 0, 0, - 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 0, 50, 0, 0, 0, 0, 51, 0, 52, - 53, 54, 138, 139, 162, 163, 0, 0, 0, 140, - 0, 0, 0, 85, 38, 86, 0, 87, 141, 0, - 0, 0, 0, 0, 227, 0, 0, 88, 0, 0, - 0, 89, 0, 0, 0, 90, 0, 0, 91, 41, - 42, 43, 0, 0, 0, 0, 0, 142, 0, 92, - 45, 0, 0, 0, 93, 46, 94, 47, 95, 0, - 228, 0, 0, 0, 0, 48, 0, 96, 97, 143, - 144, 0, 0, 0, 49, 0, 50, 0, 0, 138, - 139, 51, 98, 52, 53, 54, 140, 0, 0, 0, + 5, 194, 232, 5, 195, 15, 10, 102, 102, 261, + 176, 103, 103, 101, 101, 377, 114, 10, 10, 11, + 1, 2, 371, 245, 163, 164, 67, 10, 10, 65, + 1, 2, 72, 10, 11, 10, 79, 64, 167, 158, + 71, 112, 127, 159, 78, 269, 103, 229, 65, 10, + 171, 172, 187, 10, 171, 172, 64, 168, 169, 170, + 10, 171, 172, 1, 2, 10, 79, 7, 1, 2, + 250, 63, 1, 2, 78, 255, 372, 304, 189, 337, + 373, 308, 203, 230, 10, 171, 172, 293, 264, 16, + 63, 115, 19, 343, 203, 28, 10, 171, 172, 128, + 265, 72, 127, 73, 113, 79, 103, 297, 29, 71, + 353, 157, 133, 78, 327, 12, 381, 68, 34, 156, + 244, 204, 236, 178, 319, 248, 261, 110, 377, 347, + 17, 177, 167, 204, 136, 242, 318, 163, 164, 329, + 187, 231, 82, 251, 187, 137, 252, 251, 328, 30, + 83, 84, 201, 202, 324, 325, 173, 326, 263, 128, + 32, 85, 208, 86, 188, 87, 189, 227, 193, 37, + 189, 228, 292, -243, 208, 88, 103, 240, 338, 89, + 240, 119, 31, 90, 33, 240, 91, 36, 256, 380, + 262, 255, 344, 108, 109, 300, 66, 92, 380, 301, + 303, 80, 93, 107, 94, 307, 95, 364, 310, 119, + 268, 163, 164, 20, 120, 96, 97, 121, 286, 124, + 203, 21, 10, 171, 172, 10, 122, 298, 1, 2, + 98, 203, 305, 10, 171, 172, 301, 123, 271, 272, + 273, 274, 22, 99, 23, 83, 84, 85, 309, 86, + 275, 87, 301, 24, 10, 171, 172, 1, 2, 204, + 205, 88, 311, 314, 356, 89, 312, 315, 357, 90, + 204, 129, 91, 362, 131, 206, 130, 363, 271, 272, + 273, 274, 135, 92, 160, 161, 162, -244, 93, 184, + 94, 178, 95, 240, 207, 185, 186, 196, 198, 177, + 208, 96, 97, 199, 256, 178, 10, 262, 224, 209, + 235, 208, 350, 177, 226, 243, 98, 246, 210, 247, + 211, 10, 355, 249, 138, 139, 267, 270, 278, 291, + 280, 140, 284, 282, 287, 85, 38, 86, 295, 87, + 141, 299, 306, 115, 313, 355, 188, 193, 317, 88, + 316, 322, 320, 89, 323, 350, 321, 90, 333, 376, + 91, 41, 42, 43, 334, 340, 341, 330, 352, 142, + 346, 92, 45, 351, 358, 367, 93, 46, 94, 47, + 95, 360, 10, 361, 384, 1, 2, 48, 385, 96, + 97, 257, 258, 6, 18, 179, 49, 38, 50, 35, + 81, 111, 134, 51, 98, 52, 53, 54, 132, 345, + 105, 336, 39, 290, 382, 200, 40, 339, 359, 283, + 281, 365, 41, 42, 43, 368, 370, 366, 44, 342, + 302, 0, 0, 45, 0, 0, 0, 0, 46, 0, + 47, 0, 0, 0, 0, 0, 0, 0, 48, 0, + 0, 0, 0, 0, 0, 0, 0, 49, 0, 50, + 0, 0, 0, 0, 51, 0, 52, 53, 54, 138, + 139, 163, 164, 0, 0, 0, 140, 0, 0, 0, 85, 38, 86, 0, 87, 141, 0, 0, 0, 0, - 0, 0, 0, 0, 88, 0, 0, 0, 89, 0, + 0, 229, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 90, 0, 0, 91, 41, 42, 43, 0, 0, 0, 0, 0, 142, 0, 92, 45, 0, 0, - 0, 93, 46, 94, 47, 95, 0, 0, 0, 0, + 0, 93, 46, 94, 47, 95, 0, 230, 0, 0, 0, 0, 48, 0, 96, 97, 143, 144, 0, 0, - 0, 49, 0, 50, 0, 145, 138, 139, 51, 98, + 0, 49, 0, 50, 0, 0, 138, 139, 51, 98, 52, 53, 54, 140, 0, 0, 0, 85, 38, 86, 0, 87, 141, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 89, 0, 0, 0, 90, 0, 0, 91, 41, 42, 43, 0, 0, 0, 0, 0, 142, 0, 92, 45, 0, 0, 0, 93, 46, - 94, 47, 95, 0, 0, 0, 83, 84, 0, 48, - 0, 96, 97, 143, 144, 0, 0, 85, 49, 86, - 50, 87, 0, 1, 2, 51, 98, 52, 53, 54, - 0, 88, 0, 0, 85, 89, 86, 0, 87, 90, - 0, 0, 91, 0, 0, 0, 0, 0, 88, 0, - 0, 0, 89, 92, 0, 0, 90, 0, 93, 91, - 94, 0, 95, 0, 0, 0, 0, 0, 0, 0, - 92, 96, 97, 0, 0, 93, 0, 94, 0, 95, - 0, 0, 0, 0, 0, 0, 98, 0, 96, 97, + 94, 47, 95, 0, 0, 0, 0, 0, 0, 48, + 0, 96, 97, 143, 144, 0, 0, 0, 49, 0, + 50, 0, 145, 138, 139, 51, 98, 52, 53, 54, + 140, 0, 0, 0, 85, 38, 86, 0, 87, 141, + 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, + 0, 0, 89, 0, 0, 0, 90, 0, 0, 91, + 41, 42, 43, 0, 0, 0, 0, 0, 142, 0, + 92, 45, 0, 0, 0, 93, 46, 94, 47, 95, + 0, 0, 0, 83, 84, 0, 48, 0, 96, 97, + 143, 144, 0, 0, 85, 49, 86, 50, 87, 0, + 1, 2, 51, 98, 52, 53, 54, 0, 88, 0, + 0, 85, 89, 86, 0, 87, 90, 0, 0, 91, + 0, 0, 0, 0, 0, 88, 0, 0, 0, 89, + 92, 0, 0, 90, 0, 93, 91, 94, 0, 95, + 0, 0, 0, 0, 0, 0, 0, 92, 96, 97, + 0, 0, 93, 0, 94, 0, 95, 0, 0, 0, + 0, 0, 0, 98, 0, 96, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 98 + 98 }; static const short yycheck[] = { 7, - 0, 144, 196, 3, 147, 13, 181, 131, 64, 65, - 64, 65, 64, 65, 8, 4, 8, 8, 9, 28, - 46, 8, 9, 10, 13, 14, 8, 8, 9, 37, - 8, 101, 40, 11, 12, 130, 44, 37, 227, 17, - 40, 104, 15, 113, 44, 99, 80, 99, 56, 181, - 244, 11, 12, 247, 8, 12, 56, 11, 12, 8, - 9, 10, 33, 20, 8, 197, 74, 11, 12, 188, - 194, 193, 106, 262, 74, 5, 6, 7, 8, 9, - 10, 11, 12, 109, 41, 106, 43, 34, 277, 6, - 209, 8, 9, 10, 103, 52, 69, 53, 69, 99, - 73, 109, 46, 9, 158, 113, 158, 239, 230, 109, - 102, 119, 112, 113, 105, 102, 105, 311, 112, 119, - 102, 80, 241, 131, 105, 37, 245, 222, 45, 185, - 108, 131, 295, 6, 57, 8, 9, 10, 6, 80, - 8, 9, 10, 60, 56, 104, 309, 106, 41, 13, - 14, 159, 160, 102, 108, 84, 105, 276, 158, 52, - 108, 109, 104, 104, 8, 106, 84, 11, 12, 86, - 112, 295, 45, 227, 104, 227, 184, 45, 46, 187, - 11, 12, 4, 191, 308, 309, 194, 60, 196, 3, - 365, 13, 14, 61, 105, 84, 3, 105, 109, 374, - 107, 109, 105, 346, 11, 12, 109, 105, 208, 21, - 105, 109, 80, 86, 109, 22, 224, 24, 86, 26, - 97, 98, 99, 100, 105, 233, 105, 95, 109, 36, - 109, 105, 109, 40, 12, 109, 104, 44, 106, 39, - 47, 8, 9, 10, 11, 12, 105, 108, 187, 112, - 109, 58, 191, 81, 272, 273, 63, 275, 65, 51, - 67, 97, 98, 99, 100, 81, 71, 3, 81, 76, - 77, 112, 6, 3, 8, 9, 10, 104, 110, 104, - 110, 104, 35, 104, 91, 68, 104, 295, 22, 297, - 24, 3, 26, 104, 8, 295, 25, 104, 68, 68, - 308, 309, 36, 311, 112, 106, 40, 106, 316, 309, - 44, 45, 30, 47, 112, 105, 96, 106, 326, 104, - 4, 95, 88, 111, 58, 107, 103, 106, 101, 63, - 105, 65, 113, 67, 4, 107, 104, 102, 114, 82, - 0, 349, 76, 77, 8, 107, 107, 11, 12, 113, - 109, 359, 86, 107, 18, 363, 104, 91, 22, 23, - 24, 107, 26, 27, 0, 107, 3, 112, 13, 26, - 104, 56, 36, 133, 74, 113, 40, 109, 65, 311, - 44, 226, 297, 47, 48, 49, 50, 158, 293, 374, - 359, 331, 56, 222, 58, 59, 347, 349, 215, 63, - 64, 65, 66, 67, 308, 8, -1, 353, 11, 12, - 74, -1, 76, 77, 78, 79, -1, -1, 238, 83, - 23, 85, -1, -1, -1, -1, 90, 91, 92, 93, - 94, -1, -1, -1, -1, 38, -1, -1, -1, 42, - -1, -1, -1, -1, -1, 48, 49, 50, -1, -1, - -1, 54, -1, -1, -1, -1, 59, -1, -1, -1, - -1, 64, -1, 66, -1, -1, -1, -1, -1, -1, - -1, 74, -1, -1, -1, -1, -1, -1, -1, -1, - 83, -1, 85, -1, -1, -1, -1, 90, -1, 92, - 93, 94, 11, 12, 13, 14, -1, -1, -1, 18, - -1, -1, -1, 22, 23, 24, -1, 26, 27, -1, - -1, -1, -1, -1, 33, -1, -1, 36, -1, -1, - -1, 40, -1, -1, -1, 44, -1, -1, 47, 48, - 49, 50, -1, -1, -1, -1, -1, 56, -1, 58, - 59, -1, -1, -1, 63, 64, 65, 66, 67, -1, - 69, -1, -1, -1, -1, 74, -1, 76, 77, 78, - 79, -1, -1, -1, 83, -1, 85, -1, -1, 11, - 12, 90, 91, 92, 93, 94, 18, -1, -1, -1, + 0, 144, 182, 3, 147, 13, 8, 64, 65, 198, + 131, 64, 65, 64, 65, 4, 28, 8, 8, 9, + 11, 12, 15, 189, 13, 14, 17, 8, 8, 37, + 11, 12, 40, 8, 9, 8, 44, 37, 130, 105, + 40, 46, 99, 109, 44, 211, 99, 33, 56, 8, + 9, 10, 80, 8, 9, 10, 56, 5, 6, 7, + 8, 9, 10, 11, 12, 8, 74, 104, 11, 12, + 195, 37, 11, 12, 74, 196, 69, 243, 106, 299, + 73, 247, 6, 69, 8, 9, 10, 229, 101, 34, + 56, 103, 106, 313, 6, 9, 8, 9, 10, 99, + 113, 109, 159, 46, 109, 113, 159, 232, 57, 109, + 112, 119, 112, 113, 280, 105, 105, 108, 3, 119, + 188, 45, 102, 131, 266, 193, 315, 108, 4, 102, + 105, 131, 224, 45, 41, 186, 60, 13, 14, 281, + 80, 182, 3, 102, 80, 52, 105, 102, 60, 84, + 11, 12, 160, 161, 276, 277, 104, 279, 199, 159, + 53, 22, 86, 24, 104, 26, 106, 105, 104, 21, + 106, 109, 229, 104, 86, 36, 229, 185, 299, 40, + 188, 112, 84, 44, 84, 193, 47, 107, 196, 369, + 198, 312, 313, 108, 109, 105, 12, 58, 378, 109, + 241, 39, 63, 108, 65, 246, 67, 350, 249, 112, + 210, 13, 14, 12, 81, 76, 77, 81, 226, 81, + 6, 20, 8, 9, 10, 8, 71, 235, 11, 12, + 91, 6, 105, 8, 9, 10, 109, 51, 97, 98, + 99, 100, 41, 104, 43, 11, 12, 22, 105, 24, + 109, 26, 109, 52, 8, 9, 10, 11, 12, 45, + 46, 36, 105, 105, 105, 40, 109, 109, 109, 44, + 45, 3, 47, 105, 3, 61, 112, 109, 97, 98, + 99, 100, 104, 58, 110, 110, 104, 104, 63, 35, + 65, 299, 67, 301, 80, 104, 68, 104, 104, 299, + 86, 76, 77, 3, 312, 313, 8, 315, 112, 95, + 25, 86, 320, 313, 112, 106, 91, 68, 104, 106, + 106, 8, 330, 68, 11, 12, 30, 105, 96, 104, + 106, 18, 4, 104, 95, 22, 23, 24, 88, 26, + 27, 111, 107, 103, 106, 353, 104, 104, 101, 36, + 113, 107, 104, 40, 102, 363, 105, 44, 4, 367, + 47, 48, 49, 50, 82, 107, 107, 114, 107, 56, + 113, 58, 59, 109, 104, 112, 63, 64, 65, 66, + 67, 107, 8, 107, 0, 11, 12, 74, 0, 76, + 77, 78, 79, 3, 13, 133, 83, 23, 85, 26, + 56, 74, 113, 90, 91, 92, 93, 94, 109, 315, + 65, 297, 38, 228, 378, 159, 42, 301, 335, 224, + 217, 351, 48, 49, 50, 357, 363, 353, 54, 312, + 240, -1, -1, 59, -1, -1, -1, -1, 64, -1, + 66, -1, -1, -1, -1, -1, -1, -1, 74, -1, + -1, -1, -1, -1, -1, -1, -1, 83, -1, 85, + -1, -1, -1, -1, 90, -1, 92, 93, 94, 11, + 12, 13, 14, -1, -1, -1, 18, -1, -1, -1, 22, 23, 24, -1, 26, 27, -1, -1, -1, -1, - -1, -1, -1, -1, 36, -1, -1, -1, 40, -1, + -1, 33, -1, -1, 36, -1, -1, -1, 40, -1, -1, -1, 44, -1, -1, 47, 48, 49, 50, -1, -1, -1, -1, -1, 56, -1, 58, 59, -1, -1, - -1, 63, 64, 65, 66, 67, -1, -1, -1, -1, + -1, 63, 64, 65, 66, 67, -1, 69, -1, -1, -1, -1, 74, -1, 76, 77, 78, 79, -1, -1, - -1, 83, -1, 85, -1, 87, 11, 12, 90, 91, + -1, 83, -1, 85, -1, -1, 11, 12, 90, 91, 92, 93, 94, 18, -1, -1, -1, 22, 23, 24, -1, 26, 27, -1, -1, -1, -1, -1, -1, -1, -1, 36, -1, -1, -1, 40, -1, -1, -1, 44, -1, -1, 47, 48, 49, 50, -1, -1, -1, -1, -1, 56, -1, 58, 59, -1, -1, -1, 63, 64, - 65, 66, 67, -1, -1, -1, 11, 12, -1, 74, - -1, 76, 77, 78, 79, -1, -1, 22, 83, 24, - 85, 26, -1, 11, 12, 90, 91, 92, 93, 94, - -1, 36, -1, -1, 22, 40, 24, -1, 26, 44, - -1, -1, 47, -1, -1, -1, -1, -1, 36, -1, - -1, -1, 40, 58, -1, -1, 44, -1, 63, 47, - 65, -1, 67, -1, -1, -1, -1, -1, -1, -1, - 58, 76, 77, -1, -1, 63, -1, 65, -1, 67, - -1, -1, -1, -1, -1, -1, 91, -1, 76, 77, + 65, 66, 67, -1, -1, -1, -1, -1, -1, 74, + -1, 76, 77, 78, 79, -1, -1, -1, 83, -1, + 85, -1, 87, 11, 12, 90, 91, 92, 93, 94, + 18, -1, -1, -1, 22, 23, 24, -1, 26, 27, + -1, -1, -1, -1, -1, -1, -1, -1, 36, -1, + -1, -1, 40, -1, -1, -1, 44, -1, -1, 47, + 48, 49, 50, -1, -1, -1, -1, -1, 56, -1, + 58, 59, -1, -1, -1, 63, 64, 65, 66, 67, + -1, -1, -1, 11, 12, -1, 74, -1, 76, 77, + 78, 79, -1, -1, 22, 83, 24, 85, 26, -1, + 11, 12, 90, 91, 92, 93, 94, -1, 36, -1, + -1, 22, 40, 24, -1, 26, 44, -1, -1, 47, + -1, -1, -1, -1, -1, 36, -1, -1, -1, 40, + 58, -1, -1, 44, -1, 63, 47, 65, -1, 67, + -1, -1, -1, -1, -1, -1, -1, 58, 76, 77, + -1, -1, 63, -1, 65, -1, 67, -1, -1, -1, + -1, -1, -1, 91, -1, 76, 77, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 91 + 91 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/share/bison.simple" @@ -1311,13 +1309,13 @@ yyreduce: switch (yyn) { case 1: -#line 297 "asn1p_y.y" +#line 299 "asn1p_y.y" { *(void **)param = yyvsp[0].a_grammar; ; break;} case 2: -#line 303 "asn1p_y.y" +#line 305 "asn1p_y.y" { yyval.a_grammar = asn1p_new(); checkmem(yyval.a_grammar); @@ -1325,14 +1323,14 @@ case 2: ; break;} case 3: -#line 308 "asn1p_y.y" +#line 310 "asn1p_y.y" { yyval.a_grammar = yyvsp[-1].a_grammar; TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next); ; break;} case 4: -#line 329 "asn1p_y.y" +#line 331 "asn1p_y.y" { if(yyvsp[-1].a_module) { @@ -1349,27 +1347,27 @@ case 4: ; break;} case 5: -#line 350 "asn1p_y.y" +#line 352 "asn1p_y.y" { yyval.a_oid = 0; ; break;} case 6: -#line 351 "asn1p_y.y" +#line 353 "asn1p_y.y" { yyval.a_oid = yyvsp[0].a_oid; ; break;} case 7: -#line 355 "asn1p_y.y" +#line 357 "asn1p_y.y" { yyval.a_oid = yyvsp[-1].a_oid; ; break;} case 8: -#line 358 "asn1p_y.y" +#line 360 "asn1p_y.y" { yyval.a_oid = 0; ; break;} case 9: -#line 364 "asn1p_y.y" +#line 366 "asn1p_y.y" { yyval.a_oid = asn1p_oid_new(); asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc); @@ -1378,7 +1376,7 @@ case 9: ; break;} case 10: -#line 370 "asn1p_y.y" +#line 372 "asn1p_y.y" { yyval.a_oid = yyvsp[-1].a_oid; asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc); @@ -1387,74 +1385,74 @@ case 10: ; break;} case 11: -#line 379 "asn1p_y.y" +#line 381 "asn1p_y.y" { /* iso */ yyval.a_oid_arc.name = yyvsp[0].tv_str; yyval.a_oid_arc.number = -1; ; break;} case 12: -#line 383 "asn1p_y.y" +#line 385 "asn1p_y.y" { /* iso(1) */ yyval.a_oid_arc.name = yyvsp[-3].tv_str; yyval.a_oid_arc.number = yyvsp[-1].a_int; ; break;} case 13: -#line 387 "asn1p_y.y" +#line 389 "asn1p_y.y" { /* 1 */ yyval.a_oid_arc.name = 0; yyval.a_oid_arc.number = yyvsp[0].a_int; ; break;} case 14: -#line 397 "asn1p_y.y" +#line 399 "asn1p_y.y" { yyval.a_module_flags = MSF_NOFLAGS; ; break;} case 15: -#line 398 "asn1p_y.y" +#line 400 "asn1p_y.y" { yyval.a_module_flags = yyvsp[0].a_module_flags; ; break;} case 16: -#line 407 "asn1p_y.y" +#line 409 "asn1p_y.y" { yyval.a_module_flags = yyvsp[0].a_module_flags; ; break;} case 17: -#line 410 "asn1p_y.y" +#line 412 "asn1p_y.y" { yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags; ; break;} case 18: -#line 419 "asn1p_y.y" +#line 421 "asn1p_y.y" { yyval.a_module_flags = MSF_EXPLICIT_TAGS; ; break;} case 19: -#line 422 "asn1p_y.y" +#line 424 "asn1p_y.y" { yyval.a_module_flags = MSF_IMPLICIT_TAGS; ; break;} case 20: -#line 425 "asn1p_y.y" +#line 427 "asn1p_y.y" { yyval.a_module_flags = MSF_AUTOMATIC_TAGS; ; break;} case 21: -#line 428 "asn1p_y.y" +#line 430 "asn1p_y.y" { yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED; ; break;} case 22: -#line 432 "asn1p_y.y" +#line 434 "asn1p_y.y" { /* X.680Amd1 specifies TAG and XER */ if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) { @@ -1472,23 +1470,23 @@ case 22: ; break;} case 23: -#line 453 "asn1p_y.y" +#line 455 "asn1p_y.y" { yyval.a_module = 0; ; break;} case 24: -#line 454 "asn1p_y.y" +#line 456 "asn1p_y.y" { yyval.a_module = yyvsp[0].a_module; ; break;} case 25: -#line 463 "asn1p_y.y" +#line 465 "asn1p_y.y" { yyval.a_module = yyvsp[0].a_module; ; break;} case 26: -#line 466 "asn1p_y.y" +#line 468 "asn1p_y.y" { yyval.a_module = yyvsp[-1].a_module; @@ -1518,13 +1516,13 @@ case 26: ; break;} case 27: -#line 499 "asn1p_y.y" +#line 501 "asn1p_y.y" { yyval.a_module = yyvsp[0].a_module; ; break;} case 28: -#line 502 "asn1p_y.y" +#line 504 "asn1p_y.y" { yyval.a_module = asn1p_module_new(); checkmem(yyval.a_module); @@ -1536,7 +1534,7 @@ case 28: ; break;} case 29: -#line 511 "asn1p_y.y" +#line 513 "asn1p_y.y" { yyval.a_module = asn1p_module_new(); checkmem(yyval.a_module); @@ -1546,7 +1544,7 @@ case 29: ; break;} case 30: -#line 518 "asn1p_y.y" +#line 520 "asn1p_y.y" { yyval.a_module = asn1p_module_new(); checkmem(yyval.a_module); @@ -1556,7 +1554,7 @@ case 30: ; break;} case 31: -#line 531 "asn1p_y.y" +#line 533 "asn1p_y.y" { yyval.a_module = asn1p_module_new(); checkmem(yyval.a_module); @@ -1566,11 +1564,11 @@ case 31: ; break;} case 32: -#line 539 "asn1p_y.y" +#line 541 "asn1p_y.y" { asn1p_lexer_hack_push_encoding_control(); ; break;} case 33: -#line 540 "asn1p_y.y" +#line 542 "asn1p_y.y" { fprintf(stderr, "WARNING: ENCODING-CONTROL %s " @@ -1581,7 +1579,7 @@ case 33: ; break;} case 34: -#line 552 "asn1p_y.y" +#line 554 "asn1p_y.y" { return yyerror( "Attempt to redefine a standard basic type, " @@ -1590,19 +1588,19 @@ case 34: ; break;} case 35: -#line 566 "asn1p_y.y" +#line 568 "asn1p_y.y" { yyval.a_module = yyvsp[-1].a_module; ; break;} case 36: -#line 572 "asn1p_y.y" +#line 574 "asn1p_y.y" { return yyerror("Empty IMPORTS list"); ; break;} case 37: -#line 578 "asn1p_y.y" +#line 580 "asn1p_y.y" { yyval.a_module = asn1p_module_new(); checkmem(yyval.a_module); @@ -1610,14 +1608,14 @@ case 37: ; break;} case 38: -#line 583 "asn1p_y.y" +#line 585 "asn1p_y.y" { yyval.a_module = yyvsp[-1].a_module; TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next); ; break;} case 39: -#line 590 "asn1p_y.y" +#line 592 "asn1p_y.y" { yyval.a_xports = yyvsp[-3].a_xports; yyval.a_xports->from = yyvsp[-1].tv_str; @@ -1626,7 +1624,7 @@ case 39: ; break;} case 40: -#line 599 "asn1p_y.y" +#line 601 "asn1p_y.y" { yyval.a_xports = asn1p_xports_new(); checkmem(yyval.a_xports); @@ -1634,14 +1632,14 @@ case 40: ; break;} case 41: -#line 604 "asn1p_y.y" +#line 606 "asn1p_y.y" { yyval.a_xports = yyvsp[-2].a_xports; TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next); ; break;} case 42: -#line 611 "asn1p_y.y" +#line 613 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1650,7 +1648,7 @@ case 42: ; break;} case 43: -#line 617 "asn1p_y.y" +#line 619 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1659,19 +1657,19 @@ case 43: ; break;} case 44: -#line 626 "asn1p_y.y" +#line 628 "asn1p_y.y" { yyval.a_xports = yyvsp[-1].a_xports; ; break;} case 45: -#line 629 "asn1p_y.y" +#line 631 "asn1p_y.y" { yyval.a_xports = 0; ; break;} case 46: -#line 632 "asn1p_y.y" +#line 634 "asn1p_y.y" { /* Empty EXPORTS clause effectively prohibits export. */ yyval.a_xports = asn1p_xports_new(); @@ -1679,7 +1677,7 @@ case 46: ; break;} case 47: -#line 640 "asn1p_y.y" +#line 642 "asn1p_y.y" { yyval.a_xports = asn1p_xports_new(); assert(yyval.a_xports); @@ -1687,14 +1685,14 @@ case 47: ; break;} case 48: -#line 645 "asn1p_y.y" +#line 647 "asn1p_y.y" { yyval.a_xports = yyvsp[-2].a_xports; TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next); ; break;} case 49: -#line 652 "asn1p_y.y" +#line 654 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1703,7 +1701,7 @@ case 49: ; break;} case 50: -#line 658 "asn1p_y.y" +#line 660 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1712,7 +1710,7 @@ case 50: ; break;} case 51: -#line 668 "asn1p_y.y" +#line 670 "asn1p_y.y" { yyval.a_expr = yyvsp[-4].a_expr; assert(yyval.a_expr->Identifier == 0); @@ -1722,7 +1720,7 @@ case 51: ; break;} case 52: -#line 678 "asn1p_y.y" +#line 680 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1732,7 +1730,7 @@ case 52: ; break;} case 53: -#line 685 "asn1p_y.y" +#line 687 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1741,16 +1739,16 @@ case 53: ; break;} case 54: -#line 694 "asn1p_y.y" +#line 696 "asn1p_y.y" { ; break;} case 55: -#line 695 "asn1p_y.y" +#line 697 "asn1p_y.y" { ; break;} case 56: -#line 711 "asn1p_y.y" +#line 713 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1761,7 +1759,7 @@ case 56: ; break;} case 57: -#line 719 "asn1p_y.y" +#line 721 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; yyval.a_expr->Identifier = yyvsp[-3].tv_str; @@ -1771,7 +1769,7 @@ case 57: ; break;} case 58: -#line 726 "asn1p_y.y" +#line 728 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; yyval.a_expr->Identifier = yyvsp[-2].tv_str; @@ -1780,7 +1778,7 @@ case 58: ; break;} case 59: -#line 743 "asn1p_y.y" +#line 745 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; assert(yyval.a_expr->Identifier == 0); @@ -1790,7 +1788,7 @@ case 59: ; break;} case 60: -#line 753 "asn1p_y.y" +#line 755 "asn1p_y.y" { int ret; yyval.a_plist = asn1p_paramlist_new(yylineno); @@ -1802,7 +1800,7 @@ case 60: ; break;} case 61: -#line 762 "asn1p_y.y" +#line 764 "asn1p_y.y" { int ret; yyval.a_plist = yyvsp[-2].a_plist; @@ -1813,14 +1811,14 @@ case 61: ; break;} case 62: -#line 773 "asn1p_y.y" +#line 775 "asn1p_y.y" { yyval.a_parg.governor = NULL; yyval.a_parg.argument = yyvsp[0].tv_str; ; break;} case 63: -#line 777 "asn1p_y.y" +#line 779 "asn1p_y.y" { int ret; yyval.a_parg.governor = asn1p_ref_new(yylineno); @@ -1830,7 +1828,7 @@ case 63: ; break;} case 64: -#line 784 "asn1p_y.y" +#line 786 "asn1p_y.y" { int ret; yyval.a_parg.governor = asn1p_ref_new(yylineno); @@ -1841,7 +1839,7 @@ case 64: ; break;} case 65: -#line 795 "asn1p_y.y" +#line 797 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1849,20 +1847,20 @@ case 65: ; break;} case 66: -#line 800 "asn1p_y.y" +#line 802 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); ; break;} case 67: -#line 807 "asn1p_y.y" +#line 809 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; ; break;} case 68: -#line 810 "asn1p_y.y" +#line 812 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1872,7 +1870,7 @@ case 68: ; break;} case 69: -#line 823 "asn1p_y.y" +#line 825 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1880,14 +1878,14 @@ case 69: ; break;} case 70: -#line 828 "asn1p_y.y" +#line 830 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); ; break;} case 71: -#line 835 "asn1p_y.y" +#line 837 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; checkmem(yyval.a_expr); @@ -1897,15 +1895,15 @@ case 71: ; break;} case 72: -#line 845 "asn1p_y.y" +#line 847 "asn1p_y.y" { yyval.a_int = 0; ; break;} case 73: -#line 846 "asn1p_y.y" +#line 848 "asn1p_y.y" { yyval.a_int = 1; ; break;} case 74: -#line 850 "asn1p_y.y" +#line 852 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1915,14 +1913,14 @@ case 74: ; break;} case 75: -#line 857 "asn1p_y.y" +#line 859 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); ; break;} case 76: -#line 864 "asn1p_y.y" +#line 866 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -1933,7 +1931,7 @@ case 76: ; break;} case 77: -#line 872 "asn1p_y.y" +#line 874 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; yyval.a_expr->Identifier = yyvsp[-2].a_refcomp.name; @@ -1941,7 +1939,7 @@ case 77: ; break;} case 78: -#line 877 "asn1p_y.y" +#line 879 "asn1p_y.y" { int ret; yyval.a_expr = asn1p_expr_new(yylineno); @@ -1959,47 +1957,47 @@ case 78: ; break;} case 79: -#line 895 "asn1p_y.y" +#line 897 "asn1p_y.y" { yyval.a_wsynt = 0; ; break;} case 80: -#line 896 "asn1p_y.y" +#line 898 "asn1p_y.y" { yyval.a_wsynt = yyvsp[0].a_wsynt; ; break;} case 81: -#line 903 "asn1p_y.y" +#line 905 "asn1p_y.y" { asn1p_lexer_hack_enable_with_syntax(); ; break;} case 82: -#line 905 "asn1p_y.y" +#line 907 "asn1p_y.y" { yyval.a_wsynt = yyvsp[-1].a_wsynt; ; break;} case 83: -#line 911 "asn1p_y.y" +#line 913 "asn1p_y.y" { yyval.a_wsynt = asn1p_wsyntx_new(); TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next); ; break;} case 84: -#line 915 "asn1p_y.y" +#line 917 "asn1p_y.y" { yyval.a_wsynt = yyvsp[-1].a_wsynt; TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next); ; break;} case 85: -#line 922 "asn1p_y.y" +#line 924 "asn1p_y.y" { yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0); ; break;} case 86: -#line 925 "asn1p_y.y" +#line 927 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -2011,7 +2009,7 @@ case 86: ; break;} case 87: -#line 951 "asn1p_y.y" +#line 953 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; assert(yyval.a_expr->Identifier == 0); @@ -2020,21 +2018,34 @@ case 87: ; break;} case 88: -#line 957 "asn1p_y.y" +#line 959 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; ; break;} case 89: -#line 963 "asn1p_y.y" +#line 965 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; - yyval.a_expr->constraints = yyvsp[-1].a_constr; + if(yyval.a_expr->constraints) { + assert(!yyvsp[-1].a_constr); + } else { + yyval.a_expr->constraints = yyvsp[-1].a_constr; + } yyval.a_expr->marker = yyvsp[0].a_marker; ; break;} case 90: -#line 971 "asn1p_y.y" +#line 974 "asn1p_y.y" +{ + /* This type includes constraints on its own */ + yyval.a_expr = yyvsp[0].a_expr; + checkmem(yyval.a_expr); + assert(yyval.a_expr->meta_type); + ; + break;} +case 91: +#line 983 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(asn1p_lineno); checkmem(yyval.a_expr); @@ -2044,8 +2055,8 @@ case 90: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 91: -#line 979 "asn1p_y.y" +case 92: +#line 991 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(asn1p_lineno); checkmem(yyval.a_expr); @@ -2056,8 +2067,8 @@ case 91: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 92: -#line 988 "asn1p_y.y" +case 93: +#line 1000 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(asn1p_lineno); checkmem(yyval.a_expr); @@ -2068,14 +2079,14 @@ case 92: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 93: -#line 1000 "asn1p_y.y" +case 94: +#line 1012 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; ; break;} -case 94: -#line 1003 "asn1p_y.y" +case 95: +#line 1015 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2083,16 +2094,16 @@ case 94: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 95: -#line 1009 "asn1p_y.y" +case 96: +#line 1021 "asn1p_y.y" { yyval.a_expr = yyvsp[0].a_expr; checkmem(yyval.a_expr); assert(yyval.a_expr->meta_type); ; break;} -case 96: -#line 1017 "asn1p_y.y" +case 97: +#line 1029 "asn1p_y.y" { int ret; yyval.a_expr = yyvsp[-1].a_expr; @@ -2108,8 +2119,8 @@ case 96: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 97: -#line 1041 "asn1p_y.y" +case 98: +#line 1053 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2118,8 +2129,8 @@ case 97: yyval.a_expr->meta_type = AMT_TYPEREF; ; break;} -case 98: -#line 1048 "asn1p_y.y" +case 99: +#line 1060 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(yylineno); checkmem(yyval.a_expr); @@ -2128,8 +2139,8 @@ case 98: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 99: -#line 1063 "asn1p_y.y" +case 100: +#line 1075 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2139,8 +2150,8 @@ case 99: free(yyvsp[0].tv_str); ; break;} -case 100: -#line 1071 "asn1p_y.y" +case 101: +#line 1083 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2152,8 +2163,8 @@ case 100: free(yyvsp[-2].tv_str); ; break;} -case 101: -#line 1081 "asn1p_y.y" +case 102: +#line 1093 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2165,8 +2176,8 @@ case 101: free(yyvsp[-2].tv_str); ; break;} -case 102: -#line 1091 "asn1p_y.y" +case 103: +#line 1103 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2176,8 +2187,8 @@ case 102: checkmem(ret == 0); ; break;} -case 103: -#line 1099 "asn1p_y.y" +case 104: +#line 1111 "asn1p_y.y" { int ret; yyval.a_ref = yyvsp[0].a_ref; @@ -2198,8 +2209,8 @@ case 103: } ; break;} -case 104: -#line 1121 "asn1p_y.y" +case 105: +#line 1133 "asn1p_y.y" { int ret; yyval.a_ref = asn1p_ref_new(yylineno); @@ -2209,8 +2220,8 @@ case 104: checkmem(ret == 0); ; break;} -case 105: -#line 1129 "asn1p_y.y" +case 106: +#line 1141 "asn1p_y.y" { int ret; yyval.a_ref = yyvsp[-2].a_ref; @@ -2219,22 +2230,22 @@ case 105: checkmem(ret == 0); ; break;} -case 108: -#line 1143 "asn1p_y.y" +case 109: +#line 1155 "asn1p_y.y" { yyval.a_refcomp.lex_type = RLT_AmpUppercase; yyval.a_refcomp.name = yyvsp[0].tv_str; ; break;} -case 109: -#line 1148 "asn1p_y.y" +case 110: +#line 1160 "asn1p_y.y" { yyval.a_refcomp.lex_type = RLT_Amplowercase; yyval.a_refcomp.name = yyvsp[0].tv_str; ; break;} -case 110: -#line 1161 "asn1p_y.y" +case 111: +#line 1173 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; assert(yyval.a_expr->Identifier == NULL); @@ -2243,53 +2254,53 @@ case 110: yyval.a_expr->value = yyvsp[0].a_value; ; break;} -case 111: -#line 1171 "asn1p_y.y" +case 112: +#line 1183 "asn1p_y.y" { asn1p_lexer_hack_push_opaque_state(); ; break;} -case 112: -#line 1172 "asn1p_y.y" +case 113: +#line 1184 "asn1p_y.y" { yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0); checkmem(yyval.a_value); yyval.a_value->type = ATV_UNPARSED; ; break;} -case 113: -#line 1177 "asn1p_y.y" +case 114: +#line 1189 "asn1p_y.y" { yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B'); checkmem(yyval.a_value); ; break;} -case 114: -#line 1181 "asn1p_y.y" +case 115: +#line 1193 "asn1p_y.y" { yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H'); checkmem(yyval.a_value); ; break;} -case 115: -#line 1185 "asn1p_y.y" +case 116: +#line 1197 "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 116: -#line 1189 "asn1p_y.y" +case 117: +#line 1201 "asn1p_y.y" { yyval.a_value = yyvsp[0].a_value; ; break;} -case 117: -#line 1192 "asn1p_y.y" +case 118: +#line 1204 "asn1p_y.y" { yyval.a_value = yyvsp[0].a_value; ; break;} -case 118: -#line 1198 "asn1p_y.y" +case 119: +#line 1210 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -2302,8 +2313,8 @@ case 118: free(yyvsp[0].tv_str); ; break;} -case 119: -#line 1209 "asn1p_y.y" +case 120: +#line 1221 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -2319,8 +2330,8 @@ case 119: free(yyvsp[0].tv_str); ; break;} -case 120: -#line 1226 "asn1p_y.y" +case 121: +#line 1238 "asn1p_y.y" { yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2; yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1); @@ -2332,8 +2343,8 @@ case 120: free(yyvsp[0].tv_opaque.buf); ; break;} -case 121: -#line 1236 "asn1p_y.y" +case 122: +#line 1248 "asn1p_y.y" { int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len; char *p = malloc(newsize + 1); @@ -2347,68 +2358,68 @@ case 121: yyval.tv_opaque.len = newsize; ; break;} -case 122: -#line 1251 "asn1p_y.y" +case 123: +#line 1263 "asn1p_y.y" { yyval.a_type = ASN_BASIC_BOOLEAN; ; break;} -case 123: -#line 1252 "asn1p_y.y" +case 124: +#line 1264 "asn1p_y.y" { yyval.a_type = ASN_BASIC_NULL; ; break;} -case 124: -#line 1253 "asn1p_y.y" +case 125: +#line 1265 "asn1p_y.y" { yyval.a_type = ASN_BASIC_REAL; ; break;} -case 125: -#line 1254 "asn1p_y.y" +case 126: +#line 1266 "asn1p_y.y" { yyval.a_type = yyvsp[0].a_type; ; break;} -case 126: -#line 1255 "asn1p_y.y" +case 127: +#line 1267 "asn1p_y.y" { yyval.a_type = ASN_BASIC_OCTET_STRING; ; break;} -case 127: -#line 1256 "asn1p_y.y" +case 128: +#line 1268 "asn1p_y.y" { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ; break;} -case 128: -#line 1257 "asn1p_y.y" +case 129: +#line 1269 "asn1p_y.y" { yyval.a_type = ASN_BASIC_RELATIVE_OID; ; break;} -case 129: -#line 1258 "asn1p_y.y" +case 130: +#line 1270 "asn1p_y.y" { yyval.a_type = ASN_BASIC_EXTERNAL; ; break;} -case 130: -#line 1259 "asn1p_y.y" +case 131: +#line 1271 "asn1p_y.y" { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ; break;} -case 131: -#line 1260 "asn1p_y.y" +case 132: +#line 1272 "asn1p_y.y" { yyval.a_type = ASN_BASIC_CHARACTER_STRING; ; break;} -case 132: -#line 1261 "asn1p_y.y" +case 133: +#line 1273 "asn1p_y.y" { yyval.a_type = ASN_BASIC_UTCTime; ; break;} -case 133: -#line 1262 "asn1p_y.y" +case 134: +#line 1274 "asn1p_y.y" { yyval.a_type = ASN_BASIC_GeneralizedTime; ; break;} -case 134: -#line 1269 "asn1p_y.y" +case 135: +#line 1281 "asn1p_y.y" { yyval.a_type = ASN_BASIC_INTEGER; ; break;} -case 135: -#line 1270 "asn1p_y.y" +case 136: +#line 1282 "asn1p_y.y" { yyval.a_type = ASN_BASIC_ENUMERATED; ; break;} -case 136: -#line 1271 "asn1p_y.y" +case 137: +#line 1283 "asn1p_y.y" { yyval.a_type = ASN_BASIC_BIT_STRING; ; break;} -case 137: -#line 1275 "asn1p_y.y" +case 138: +#line 1287 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(asn1p_lineno); checkmem(yyval.a_expr); @@ -2416,8 +2427,8 @@ case 137: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 138: -#line 1281 "asn1p_y.y" +case 139: +#line 1293 "asn1p_y.y" { if(yyvsp[0].a_expr) { yyval.a_expr = yyvsp[0].a_expr; @@ -2429,125 +2440,125 @@ case 138: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 139: -#line 1294 "asn1p_y.y" +case 140: +#line 1306 "asn1p_y.y" { yyval.a_type = ASN_STRING_BMPString; ; break;} -case 140: -#line 1295 "asn1p_y.y" +case 141: +#line 1307 "asn1p_y.y" { yyval.a_type = ASN_STRING_GeneralString; return yyerror("GeneralString is not supported"); ; break;} -case 141: -#line 1299 "asn1p_y.y" +case 142: +#line 1311 "asn1p_y.y" { yyval.a_type = ASN_STRING_GraphicString; return yyerror("GraphicString is not supported"); ; break;} -case 142: -#line 1303 "asn1p_y.y" +case 143: +#line 1315 "asn1p_y.y" { yyval.a_type = ASN_STRING_IA5String; ; break;} -case 143: -#line 1304 "asn1p_y.y" +case 144: +#line 1316 "asn1p_y.y" { yyval.a_type = ASN_STRING_ISO646String; ; break;} -case 144: -#line 1305 "asn1p_y.y" +case 145: +#line 1317 "asn1p_y.y" { yyval.a_type = ASN_STRING_NumericString; ; break;} -case 145: -#line 1306 "asn1p_y.y" +case 146: +#line 1318 "asn1p_y.y" { yyval.a_type = ASN_STRING_PrintableString; ; break;} -case 146: -#line 1307 "asn1p_y.y" +case 147: +#line 1319 "asn1p_y.y" { yyval.a_type = ASN_STRING_T61String; return yyerror("T61String not implemented yet"); ; break;} -case 147: -#line 1311 "asn1p_y.y" +case 148: +#line 1323 "asn1p_y.y" { yyval.a_type = ASN_STRING_TeletexString; ; break;} -case 148: -#line 1312 "asn1p_y.y" +case 149: +#line 1324 "asn1p_y.y" { yyval.a_type = ASN_STRING_UniversalString; ; break;} -case 149: -#line 1313 "asn1p_y.y" +case 150: +#line 1325 "asn1p_y.y" { yyval.a_type = ASN_STRING_UTF8String; ; break;} -case 150: -#line 1314 "asn1p_y.y" +case 151: +#line 1326 "asn1p_y.y" { yyval.a_type = ASN_STRING_VideotexString; return yyerror("VideotexString is no longer supported"); ; break;} -case 151: -#line 1318 "asn1p_y.y" +case 152: +#line 1330 "asn1p_y.y" { yyval.a_type = ASN_STRING_VisibleString; ; break;} -case 152: -#line 1319 "asn1p_y.y" +case 153: +#line 1331 "asn1p_y.y" { yyval.a_type = ASN_STRING_ObjectDescriptor; ; break;} -case 153: -#line 1323 "asn1p_y.y" +case 154: +#line 1336 "asn1p_y.y" { - yyval.a_expr = yyvsp[-1].a_expr; - assert(yyval.a_expr->expr_type == A1TC_INVALID); - yyval.a_expr->expr_type = ASN_CONSTR_CHOICE; + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + yyval.a_expr->constraints = yyvsp[-2].a_constr; + yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF; yyval.a_expr->meta_type = AMT_TYPE; + TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); ; break;} -case 154: -#line 1329 "asn1p_y.y" +case 155: +#line 1344 "asn1p_y.y" { - yyval.a_expr = yyvsp[-1].a_expr; - assert(yyval.a_expr->expr_type == A1TC_INVALID); - yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE; + yyval.a_expr = asn1p_expr_new(asn1p_lineno); + checkmem(yyval.a_expr); + yyval.a_expr->constraints = yyvsp[-2].a_constr; + yyval.a_expr->expr_type = ASN_CONSTR_SET_OF; yyval.a_expr->meta_type = AMT_TYPE; + TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); ; break;} -case 155: -#line 1335 "asn1p_y.y" +case 156: +#line 1355 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; assert(yyval.a_expr->expr_type == A1TC_INVALID); - yyval.a_expr->expr_type = ASN_CONSTR_SET; + yyval.a_expr->expr_type = ASN_CONSTR_CHOICE; yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 156: -#line 1341 "asn1p_y.y" +case 157: +#line 1361 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(asn1p_lineno); - checkmem(yyval.a_expr); - yyval.a_expr->constraints = yyvsp[-2].a_constr; - yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF; + yyval.a_expr = yyvsp[-1].a_expr; + assert(yyval.a_expr->expr_type == A1TC_INVALID); + yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE; yyval.a_expr->meta_type = AMT_TYPE; - TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); ; break;} -case 157: -#line 1349 "asn1p_y.y" +case 158: +#line 1367 "asn1p_y.y" { - yyval.a_expr = asn1p_expr_new(asn1p_lineno); - checkmem(yyval.a_expr); - yyval.a_expr->constraints = yyvsp[-2].a_constr; - yyval.a_expr->expr_type = ASN_CONSTR_SET_OF; + yyval.a_expr = yyvsp[-1].a_expr; + assert(yyval.a_expr->expr_type == A1TC_INVALID); + yyval.a_expr->expr_type = ASN_CONSTR_SET; yyval.a_expr->meta_type = AMT_TYPE; - TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); ; break;} -case 158: -#line 1357 "asn1p_y.y" +case 159: +#line 1373 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(asn1p_lineno); checkmem(yyval.a_expr); @@ -2555,8 +2566,8 @@ case 158: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 159: -#line 1363 "asn1p_y.y" +case 160: +#line 1379 "asn1p_y.y" { int ret; yyval.a_expr = asn1p_expr_new(asn1p_lineno); @@ -2569,51 +2580,52 @@ case 159: yyval.a_expr->meta_type = AMT_TYPE; ; break;} -case 165: -#line 1384 "asn1p_y.y" +case 166: +#line 1400 "asn1p_y.y" { yyval.a_constr = 0; ; break;} -case 166: -#line 1385 "asn1p_y.y" +case 167: +#line 1401 "asn1p_y.y" +{ + yyval.a_constr = yyvsp[0].a_constr; + ; + break;} +case 168: +#line 1407 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0); ; break;} -case 167: -#line 1388 "asn1p_y.y" +case 169: +#line 1410 "asn1p_y.y" { /* * This is a special case, for compatibility purposes. * It goes without parentheses. */ - int ret; - yyval.a_constr = asn1p_constraint_new(yylineno); - checkmem(yyval.a_constr); - yyval.a_constr->type = ACT_CT_SIZE; - ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr); - checkmem(ret == 0); + CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0); ; break;} -case 168: -#line 1403 "asn1p_y.y" +case 170: +#line 1420 "asn1p_y.y" { yyval.a_constr = yyvsp[-1].a_constr; ; break;} -case 169: -#line 1406 "asn1p_y.y" +case 171: +#line 1423 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr); ; break;} -case 170: -#line 1412 "asn1p_y.y" +case 172: +#line 1429 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 171: -#line 1415 "asn1p_y.y" +case 173: +#line 1432 "asn1p_y.y" { asn1p_constraint_t *ct; ct = asn1p_constraint_new(yylineno); @@ -2621,8 +2633,8 @@ case 171: CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct); ; break;} -case 172: -#line 1421 "asn1p_y.y" +case 174: +#line 1438 "asn1p_y.y" { asn1p_constraint_t *ct; ct = asn1p_constraint_new(yylineno); @@ -2632,32 +2644,32 @@ case 172: CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr); ; break;} -case 173: -#line 1432 "asn1p_y.y" +case 175: +#line 1449 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 174: -#line 1435 "asn1p_y.y" +case 176: +#line 1452 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr); ; break;} -case 175: -#line 1438 "asn1p_y.y" +case 177: +#line 1455 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr); ; break;} -case 176: -#line 1441 "asn1p_y.y" +case 178: +#line 1458 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr); ; break;} -case 177: -#line 1447 "asn1p_y.y" +case 179: +#line 1464 "asn1p_y.y" { int ret; yyval.a_constr = asn1p_constraint_new(yylineno); @@ -2667,8 +2679,8 @@ case 177: checkmem(ret == 0); ; break;} -case 178: -#line 1455 "asn1p_y.y" +case 180: +#line 1472 "asn1p_y.y" { int ret; yyval.a_constr = asn1p_constraint_new(yylineno); @@ -2678,8 +2690,8 @@ case 178: checkmem(ret == 0); ; break;} -case 179: -#line 1463 "asn1p_y.y" +case 181: +#line 1480 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -2687,8 +2699,8 @@ case 179: yyval.a_constr->value = yyvsp[0].a_value; ; break;} -case 180: -#line 1469 "asn1p_y.y" +case 182: +#line 1486 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -2697,8 +2709,8 @@ case 180: yyval.a_constr->range_stop = yyvsp[0].a_value; ; break;} -case 181: -#line 1476 "asn1p_y.y" +case 183: +#line 1493 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -2708,8 +2720,8 @@ case 181: yyval.a_constr->range_start->type = ATV_MIN; ; break;} -case 182: -#line 1484 "asn1p_y.y" +case 184: +#line 1501 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -2719,8 +2731,8 @@ case 182: yyval.a_constr->range_stop->type = ATV_MAX; ; break;} -case 183: -#line 1492 "asn1p_y.y" +case 185: +#line 1509 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -2731,54 +2743,54 @@ case 183: yyval.a_constr->range_stop->type = ATV_MAX; ; break;} -case 184: -#line 1501 "asn1p_y.y" +case 186: +#line 1518 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 185: -#line 1504 "asn1p_y.y" +case 187: +#line 1521 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 186: -#line 1510 "asn1p_y.y" +case 188: +#line 1527 "asn1p_y.y" { yyval.a_ctype = ACT_EL_RANGE; ; break;} -case 187: -#line 1511 "asn1p_y.y" +case 189: +#line 1528 "asn1p_y.y" { yyval.a_ctype = ACT_EL_RLRANGE; ; break;} -case 188: -#line 1512 "asn1p_y.y" +case 190: +#line 1529 "asn1p_y.y" { yyval.a_ctype = ACT_EL_LLRANGE; ; break;} -case 189: -#line 1513 "asn1p_y.y" +case 191: +#line 1530 "asn1p_y.y" { yyval.a_ctype = ACT_EL_ULRANGE; ; break;} -case 190: -#line 1517 "asn1p_y.y" +case 192: +#line 1534 "asn1p_y.y" { yyval.a_ctype = ACT_CT_SIZE; ; break;} -case 191: -#line 1520 "asn1p_y.y" +case 193: +#line 1537 "asn1p_y.y" { yyval.a_ctype = ACT_CT_FROM; ; break;} -case 192: -#line 1526 "asn1p_y.y" +case 194: +#line 1543 "asn1p_y.y" { yyval.a_value = yyvsp[0].a_value; ; break;} -case 193: -#line 1529 "asn1p_y.y" +case 195: +#line 1546 "asn1p_y.y" { asn1p_ref_t *ref; int ret; @@ -2791,57 +2803,57 @@ case 193: free(yyvsp[0].tv_str); ; break;} -case 194: -#line 1540 "asn1p_y.y" +case 196: +#line 1557 "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 195: -#line 1545 "asn1p_y.y" +case 197: +#line 1562 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(0); checkmem(yyval.a_value); yyval.a_value->type = ATV_FALSE; ; break;} -case 196: -#line 1550 "asn1p_y.y" +case 198: +#line 1567 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(1); checkmem(yyval.a_value); yyval.a_value->type = ATV_TRUE; ; break;} -case 197: -#line 1558 "asn1p_y.y" +case 199: +#line 1575 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0); ; break;} -case 198: -#line 1564 "asn1p_y.y" +case 200: +#line 1581 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 199: -#line 1567 "asn1p_y.y" +case 201: +#line 1584 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr); ; break;} -case 200: -#line 1573 "asn1p_y.y" +case 202: +#line 1590 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); yyval.a_constr->type = ACT_EL_EXT; ; break;} -case 201: -#line 1578 "asn1p_y.y" +case 203: +#line 1595 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -2850,46 +2862,46 @@ case 201: yyval.a_constr->presence = yyvsp[0].a_pres; ; break;} -case 202: -#line 1591 "asn1p_y.y" +case 204: +#line 1608 "asn1p_y.y" { yyval.a_pres = ACPRES_DEFAULT; ; break;} -case 203: -#line 1592 "asn1p_y.y" +case 205: +#line 1609 "asn1p_y.y" { yyval.a_pres = yyvsp[0].a_pres; ; break;} -case 204: -#line 1596 "asn1p_y.y" +case 206: +#line 1613 "asn1p_y.y" { yyval.a_pres = ACPRES_PRESENT; ; break;} -case 205: -#line 1599 "asn1p_y.y" +case 207: +#line 1616 "asn1p_y.y" { yyval.a_pres = ACPRES_ABSENT; ; break;} -case 206: -#line 1602 "asn1p_y.y" +case 208: +#line 1619 "asn1p_y.y" { yyval.a_pres = ACPRES_OPTIONAL; ; break;} -case 207: -#line 1608 "asn1p_y.y" +case 209: +#line 1625 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 208: -#line 1611 "asn1p_y.y" +case 210: +#line 1628 "asn1p_y.y" { yyval.a_constr = yyvsp[0].a_constr; ; break;} -case 209: -#line 1620 "asn1p_y.y" +case 211: +#line 1637 "asn1p_y.y" { asn1p_ref_t *ref = asn1p_ref_new(yylineno); asn1p_constraint_t *ct; @@ -2903,14 +2915,14 @@ case 209: CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0); ; break;} -case 210: -#line 1635 "asn1p_y.y" +case 212: +#line 1652 "asn1p_y.y" { CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr); ; break;} -case 211: -#line 1641 "asn1p_y.y" +case 213: +#line 1658 "asn1p_y.y" { yyval.a_constr = asn1p_constraint_new(yylineno); checkmem(yyval.a_constr); @@ -2918,8 +2930,8 @@ case 211: yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0); ; break;} -case 212: -#line 1647 "asn1p_y.y" +case 214: +#line 1664 "asn1p_y.y" { asn1p_constraint_t *ct; ct = asn1p_constraint_new(yylineno); @@ -2929,8 +2941,8 @@ case 212: CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct); ; break;} -case 213: -#line 1661 "asn1p_y.y" +case 215: +#line 1678 "asn1p_y.y" { char *p = malloc(strlen(yyvsp[0].tv_str) + 2); int ret; @@ -2943,8 +2955,8 @@ case 213: free(yyvsp[0].tv_str); ; break;} -case 214: -#line 1672 "asn1p_y.y" +case 216: +#line 1689 "asn1p_y.y" { char *p = malloc(strlen(yyvsp[0].tv_str) + 3); int ret; @@ -2958,14 +2970,14 @@ case 214: free(yyvsp[0].tv_str); ; break;} -case 215: -#line 1688 "asn1p_y.y" +case 217: +#line 1705 "asn1p_y.y" { yyval.tv_str = yyvsp[0].tv_str; ; break;} -case 216: -#line 1691 "asn1p_y.y" +case 218: +#line 1708 "asn1p_y.y" { int l1 = strlen(yyvsp[-2].tv_str); int l3 = strlen(yyvsp[0].tv_str); @@ -2976,76 +2988,76 @@ case 216: yyval.tv_str[l1 + 1 + l3] = '\0'; ; break;} -case 217: -#line 1709 "asn1p_y.y" +case 219: +#line 1726 "asn1p_y.y" { yyval.a_marker = EM_NOMARK; ; break;} -case 218: -#line 1710 "asn1p_y.y" +case 220: +#line 1727 "asn1p_y.y" { yyval.a_marker = yyvsp[0].a_marker; ; break;} -case 219: -#line 1714 "asn1p_y.y" +case 221: +#line 1731 "asn1p_y.y" { yyval.a_marker = EM_OPTIONAL; ; break;} -case 220: -#line 1717 "asn1p_y.y" +case 222: +#line 1734 "asn1p_y.y" { yyval.a_marker = EM_DEFAULT; /* FIXME: store DefaultValue somewhere */ ; break;} -case 221: -#line 1724 "asn1p_y.y" +case 223: +#line 1741 "asn1p_y.y" { ; break;} -case 222: -#line 1726 "asn1p_y.y" +case 224: +#line 1743 "asn1p_y.y" { ; break;} -case 223: -#line 1728 "asn1p_y.y" +case 225: +#line 1745 "asn1p_y.y" { asn1p_lexer_hack_push_opaque_state(); ; break;} -case 224: -#line 1728 "asn1p_y.y" +case 226: +#line 1745 "asn1p_y.y" { ; break;} -case 225: -#line 1749 "asn1p_y.y" +case 227: +#line 1766 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(asn1p_lineno); checkmem(yyval.a_expr); ; break;} -case 226: -#line 1753 "asn1p_y.y" +case 228: +#line 1770 "asn1p_y.y" { yyval.a_expr = yyvsp[-1].a_expr; ; break;} -case 227: -#line 1759 "asn1p_y.y" +case 229: +#line 1776 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(asn1p_lineno); checkmem(yyval.a_expr); TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); ; break;} -case 228: -#line 1764 "asn1p_y.y" +case 230: +#line 1781 "asn1p_y.y" { yyval.a_expr = yyvsp[-2].a_expr; TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next); ; break;} -case 229: -#line 1771 "asn1p_y.y" +case 231: +#line 1788 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(asn1p_lineno); checkmem(yyval.a_expr); @@ -3054,8 +3066,8 @@ case 229: yyval.a_expr->Identifier = yyvsp[0].tv_str; ; break;} -case 230: -#line 1778 "asn1p_y.y" +case 232: +#line 1795 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(asn1p_lineno); checkmem(yyval.a_expr); @@ -3065,8 +3077,8 @@ case 230: yyval.a_expr->value = yyvsp[-1].a_value; ; break;} -case 231: -#line 1786 "asn1p_y.y" +case 233: +#line 1803 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(asn1p_lineno); checkmem(yyval.a_expr); @@ -3076,8 +3088,8 @@ case 231: yyval.a_expr->value = yyvsp[-1].a_value; ; break;} -case 232: -#line 1794 "asn1p_y.y" +case 234: +#line 1811 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(asn1p_lineno); checkmem(yyval.a_expr); @@ -3086,8 +3098,8 @@ case 232: yyval.a_expr->value = yyvsp[0].a_value; ; break;} -case 233: -#line 1801 "asn1p_y.y" +case 235: +#line 1818 "asn1p_y.y" { yyval.a_expr = asn1p_expr_new(asn1p_lineno); checkmem(yyval.a_expr); @@ -3097,86 +3109,86 @@ case 233: yyval.a_expr->meta_type = AMT_VALUE; ; break;} -case 234: -#line 1812 "asn1p_y.y" +case 236: +#line 1829 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int); checkmem(yyval.a_value); ; break;} -case 235: -#line 1816 "asn1p_y.y" +case 237: +#line 1833 "asn1p_y.y" { yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int); checkmem(yyval.a_value); ; break;} -case 236: -#line 1847 "asn1p_y.y" +case 238: +#line 1864 "asn1p_y.y" { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ; break;} -case 237: -#line 1848 "asn1p_y.y" +case 239: +#line 1865 "asn1p_y.y" { yyval.a_tag = yyvsp[0].a_tag; ; break;} -case 238: -#line 1852 "asn1p_y.y" +case 240: +#line 1869 "asn1p_y.y" { yyval.a_tag = yyvsp[0].a_tag; yyval.a_tag.tag_mode = TM_DEFAULT; ; break;} -case 239: -#line 1856 "asn1p_y.y" +case 241: +#line 1873 "asn1p_y.y" { yyval.a_tag = yyvsp[-1].a_tag; yyval.a_tag.tag_mode = TM_IMPLICIT; ; break;} -case 240: -#line 1860 "asn1p_y.y" +case 242: +#line 1877 "asn1p_y.y" { yyval.a_tag = yyvsp[-1].a_tag; yyval.a_tag.tag_mode = TM_EXPLICIT; ; break;} -case 241: -#line 1867 "asn1p_y.y" +case 243: +#line 1884 "asn1p_y.y" { checkmem(yyvsp[0].tv_str); yyval.tv_str = yyvsp[0].tv_str; ; break;} -case 242: -#line 1871 "asn1p_y.y" +case 244: +#line 1888 "asn1p_y.y" { checkmem(yyvsp[0].tv_str); yyval.tv_str = yyvsp[0].tv_str; ; break;} -case 243: -#line 1879 "asn1p_y.y" +case 245: +#line 1896 "asn1p_y.y" { checkmem(yyvsp[0].tv_str); yyval.tv_str = yyvsp[0].tv_str; ; break;} -case 244: -#line 1886 "asn1p_y.y" +case 246: +#line 1903 "asn1p_y.y" { checkmem(yyvsp[0].tv_str); yyval.tv_str = yyvsp[0].tv_str; ; break;} -case 245: -#line 1893 "asn1p_y.y" +case 247: +#line 1910 "asn1p_y.y" { memset(&yyval.tv_nametag, 0, sizeof(yyval.tv_nametag)); yyval.tv_nametag.name = yyvsp[0].tv_str; ; break;} -case 246: -#line 1897 "asn1p_y.y" +case 248: +#line 1914 "asn1p_y.y" { yyval.tv_nametag.name = yyvsp[-1].tv_str; yyval.tv_nametag.tag = yyvsp[0].a_tag; @@ -3404,7 +3416,7 @@ yyerrhandle: } return 1; } -#line 1904 "asn1p_y.y" +#line 1921 "asn1p_y.y" diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y index 452086f5..a77b5fd6 100644 --- a/libasn1parser/asn1p_y.y +++ b/libasn1parser/asn1p_y.y @@ -220,7 +220,7 @@ static asn1p_value_t * %type ExportsElement %type DataTypeMember %type ExtensionAndException -%type TypeDeclaration +%type UnconstrainedTypeDeclaration %type ComplexTypeReference %type ComplexTypeReferenceAmpList %type ComplexTypeReferenceElement @@ -239,6 +239,7 @@ static asn1p_value_t * %type DefinedValue %type SignedNumber %type ConstructedType +%type ConstructedTypeConstrained %type ConstructedDataTypeDefinition //%type optUniverationDefinition %type UniverationDefinition @@ -265,6 +266,7 @@ static asn1p_value_t * %type Tag /* [UNIVERSAL 0] IMPLICIT */ %type optTag /* [UNIVERSAL 0] IMPLICIT */ %type optConstraints +%type Constraints %type SetOfConstraints %type ElementSetSpecs /* 1..2,...,3 */ %type ElementSetSpec /* 1..2,...,3 */ @@ -804,7 +806,7 @@ ActualParameterList: ; ActualParameter: - TypeDeclaration { + UnconstrainedTypeDeclaration { $$ = $1; } | Identifier { @@ -960,11 +962,21 @@ DataTypeMember: ; ConstrainedTypeDeclaration: - TypeDeclaration optConstraints optMarker { + UnconstrainedTypeDeclaration optConstraints optMarker { $$ = $1; - $$->constraints = $2; + if($$->constraints) { + assert(!$2); + } else { + $$->constraints = $2; + } $$->marker = $3; } + | ConstructedTypeConstrained { + /* This type includes constraints on its own */ + $$ = $1; + checkmem($$); + assert($$->meta_type); + } ; ExtensionAndException: @@ -996,7 +1008,7 @@ ExtensionAndException: } ; -TypeDeclaration: +UnconstrainedTypeDeclaration: BasicType { $$ = $1; } @@ -1319,6 +1331,26 @@ BasicString: | TOK_ObjectDescriptor { $$ = ASN_STRING_ObjectDescriptor; } ; + +ConstructedTypeConstrained: + TOK_SEQUENCE optConstraints TOK_OF ConstrainedTypeDeclaration { + $$ = asn1p_expr_new(asn1p_lineno); + checkmem($$); + $$->constraints = $2; + $$->expr_type = ASN_CONSTR_SEQUENCE_OF; + $$->meta_type = AMT_TYPE; + TQ_ADD(&($$->members), $4, next); + } + | TOK_SET optConstraints TOK_OF ConstrainedTypeDeclaration { + $$ = asn1p_expr_new(asn1p_lineno); + checkmem($$); + $$->constraints = $2; + $$->expr_type = ASN_CONSTR_SET_OF; + $$->meta_type = AMT_TYPE; + TQ_ADD(&($$->members), $4, next); + } + ; + ConstructedType: TOK_CHOICE '{' ConstructedDataTypeDefinition '}' { $$ = $3; @@ -1338,22 +1370,6 @@ ConstructedType: $$->expr_type = ASN_CONSTR_SET; $$->meta_type = AMT_TYPE; } - | TOK_SEQUENCE optConstraints TOK_OF TypeDeclaration { - $$ = asn1p_expr_new(asn1p_lineno); - checkmem($$); - $$->constraints = $2; - $$->expr_type = ASN_CONSTR_SEQUENCE_OF; - $$->meta_type = AMT_TYPE; - TQ_ADD(&($$->members), $4, next); - } - | TOK_SET optConstraints TOK_OF TypeDeclaration { - $$ = asn1p_expr_new(asn1p_lineno); - checkmem($$); - $$->constraints = $2; - $$->expr_type = ASN_CONSTR_SET_OF; - $$->meta_type = AMT_TYPE; - TQ_ADD(&($$->members), $4, next); - } | TOK_ANY { $$ = asn1p_expr_new(asn1p_lineno); checkmem($$); @@ -1382,7 +1398,13 @@ Except: TOK_EXCEPT; optConstraints: { $$ = 0; } - | SetOfConstraints { + | Constraints { + $$ = $1; + } + ; + +Constraints: + SetOfConstraints { CONSTRAINT_INSERT($$, ACT_CA_SET, $1, 0); } | TOK_SIZE '(' ElementSetSpecs ')' { @@ -1390,12 +1412,7 @@ optConstraints: * This is a special case, for compatibility purposes. * It goes without parentheses. */ - int ret; - $$ = asn1p_constraint_new(yylineno); - checkmem($$); - $$->type = ACT_CT_SIZE; - ret = asn1p_constraint_insert($$, $3); - checkmem(ret == 0); + CONSTRAINT_INSERT($$, ACT_CT_SIZE, $3, 0); } ; -- cgit v1.2.3