From a4c8da21a074e81982bf09d92498db63fc6afed8 Mon Sep 17 00:00:00 2001 From: Austin Henriksen Date: Tue, 2 Apr 2024 15:32:26 -0400 Subject: [PATCH] Review suggestions. --- cpp/src/Slice/Grammar.cpp | 677 ++++++++++++++++++------------------ cpp/src/Slice/Grammar.y | 11 +- cpp/src/Slice/SliceUtil.cpp | 7 + 3 files changed, 352 insertions(+), 343 deletions(-) diff --git a/cpp/src/Slice/Grammar.cpp b/cpp/src/Slice/Grammar.cpp index a90b8807df8..f2e3dc0b13e 100644 --- a/cpp/src/Slice/Grammar.cpp +++ b/cpp/src/Slice/Grammar.cpp @@ -685,16 +685,16 @@ static const yytype_int8 yytranslate[] = { static const yytype_int16 yyrline[] = { 0, 187, 187, 195, 198, 206, 210, 220, 224, 233, 241, 250, 259, 258, 264, 263, 268, 273, 272, 278, 277, 282, 287, 286, 292, 291, 296, 301, 300, 306, 305, 310, 315, 314, 320, 319, - 324, 329, 328, 333, 338, 337, 343, 342, 347, 351, 361, 360, 389, 388, 462, 466, 477, 488, - 487, 513, 521, 530, 543, 561, 640, 646, 657, 675, 753, 759, 770, 779, 788, 801, 805, 816, - 827, 826, 865, 869, 880, 905, 995, 1007, 1020, 1019, 1053, 1087, 1096, 1099, 1107, 1116, 1119, 1123, - 1131, 1161, 1195, 1217, 1243, 1249, 1255, 1261, 1271, 1295, 1325, 1349, 1384, 1383, 1406, 1405, 1428, 1432, - 1443, 1457, 1456, 1490, 1525, 1560, 1565, 1575, 1579, 1588, 1597, 1600, 1604, 1612, 1619, 1631, 1643, 1654, - 1662, 1676, 1686, 1702, 1706, 1718, 1717, 1749, 1748, 1766, 1772, 1780, 1792, 1812, 1819, 1829, 1833, 1874, - 1880, 1891, 1894, 1910, 1926, 1938, 1950, 1961, 1977, 1981, 1990, 1993, 2001, 2002, 2003, 2004, 2005, 2006, - 2007, 2008, 2009, 2010, 2015, 2019, 2024, 2055, 2091, 2097, 2105, 2112, 2124, 2133, 2142, 2177, 2184, 2191, - 2203, 2212, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, - 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253}; + 324, 329, 328, 333, 338, 337, 343, 342, 347, 351, 361, 360, 389, 388, 463, 467, 478, 489, + 488, 514, 522, 531, 544, 562, 641, 647, 658, 676, 754, 760, 771, 780, 789, 802, 806, 817, + 828, 827, 866, 870, 881, 906, 996, 1008, 1021, 1020, 1054, 1088, 1097, 1100, 1108, 1117, 1120, 1124, + 1132, 1162, 1196, 1218, 1244, 1250, 1256, 1262, 1272, 1296, 1326, 1350, 1385, 1384, 1407, 1406, 1429, 1433, + 1444, 1458, 1457, 1491, 1526, 1561, 1566, 1576, 1580, 1589, 1598, 1601, 1605, 1613, 1620, 1632, 1644, 1655, + 1663, 1677, 1687, 1703, 1707, 1719, 1718, 1750, 1749, 1767, 1773, 1781, 1793, 1813, 1820, 1830, 1834, 1875, + 1881, 1892, 1895, 1911, 1927, 1939, 1951, 1962, 1978, 1982, 1991, 1994, 2002, 2003, 2004, 2005, 2006, 2007, + 2008, 2009, 2010, 2011, 2016, 2020, 2025, 2056, 2092, 2098, 2106, 2113, 2125, 2134, 2143, 2178, 2185, 2192, + 2204, 2213, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, + 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254}; #endif /** Accessing symbol of state STATE. */ @@ -1878,7 +1878,6 @@ yyparse(void) #line 389 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); - ContainerPtr cont = currentUnit->currentContainer(); // Split the scoped-identifier token into separate module names. vector modules; @@ -1892,6 +1891,7 @@ yyparse(void) modules.push_back(ident->v.substr(startPos)); // Create the nested modules. + ContainerPtr cont = currentUnit->currentContainer(); for (size_t i = 0; i < modules.size(); i++) { const auto currentModuleName = modules[i]; @@ -1932,14 +1932,15 @@ yyparse(void) { // We need to pop '(N+1)' modules off the container stack, to navigate out of the nested module. // Where `N` is the number of scope separators ("::"). - size_t scopePos = 0; - auto ident = dynamic_pointer_cast(yyvsp[-4]); - while ((scopePos = ident->v.find("::", scopePos + 2)) != string::npos) + size_t startPos = 0; + size_t endPos; + while ((endPos = ident->v.find("::", startPos)) != string::npos) { currentUnit->popContainer(); + startPos = endPos + 2; } - // Set the 'return value' to the outer-most module, before we pop it off the stack.. + // Set the 'return value' to the outer-most module, before we pop it off the stack. // Whichever module we return, is the one that metadata will be applied to. yyval = currentUnit->currentContainer(); currentUnit->popContainer(); @@ -1949,38 +1950,38 @@ yyparse(void) yyval = nullptr; } } -#line 2102 "src/Slice/Grammar.cpp" +#line 2103 "src/Slice/Grammar.cpp" break; case 50: /* exception_id: ICE_EXCEPTION ICE_IDENTIFIER */ -#line 463 "src/Slice/Grammar.y" +#line 464 "src/Slice/Grammar.y" { yyval = yyvsp[0]; } -#line 2110 "src/Slice/Grammar.cpp" +#line 2111 "src/Slice/Grammar.cpp" break; case 51: /* exception_id: ICE_EXCEPTION keyword */ -#line 467 "src/Slice/Grammar.y" +#line 468 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); currentUnit->error("keyword `" + ident->v + "' cannot be used as exception name"); yyval = yyvsp[0]; // Dummy } -#line 2120 "src/Slice/Grammar.cpp" +#line 2121 "src/Slice/Grammar.cpp" break; case 52: /* exception_decl: exception_id */ -#line 478 "src/Slice/Grammar.y" +#line 479 "src/Slice/Grammar.y" { currentUnit->error("exceptions cannot be forward declared"); yyval = nullptr; } -#line 2129 "src/Slice/Grammar.cpp" +#line 2130 "src/Slice/Grammar.cpp" break; case 53: /* @16: %empty */ -#line 488 "src/Slice/Grammar.y" +#line 489 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[-1]); auto base = dynamic_pointer_cast(yyvsp[0]); @@ -1993,11 +1994,11 @@ yyparse(void) } yyval = ex; } -#line 2146 "src/Slice/Grammar.cpp" +#line 2147 "src/Slice/Grammar.cpp" break; case 54: /* exception_def: exception_id exception_extends @16 '{' data_members '}' */ -#line 501 "src/Slice/Grammar.y" +#line 502 "src/Slice/Grammar.y" { if (yyvsp[-3]) { @@ -2005,11 +2006,11 @@ yyparse(void) } yyval = yyvsp[-3]; } -#line 2158 "src/Slice/Grammar.cpp" +#line 2159 "src/Slice/Grammar.cpp" break; case 55: /* exception_extends: extends scoped_name */ -#line 514 "src/Slice/Grammar.y" +#line 515 "src/Slice/Grammar.y" { auto scoped = dynamic_pointer_cast(yyvsp[0]); ContainerPtr cont = currentUnit->currentContainer(); @@ -2017,19 +2018,19 @@ yyparse(void) cont->checkIntroduced(scoped->v); yyval = contained; } -#line 2170 "src/Slice/Grammar.cpp" +#line 2171 "src/Slice/Grammar.cpp" break; case 56: /* exception_extends: %empty */ -#line 522 "src/Slice/Grammar.y" +#line 523 "src/Slice/Grammar.y" { yyval = nullptr; } -#line 2178 "src/Slice/Grammar.cpp" +#line 2179 "src/Slice/Grammar.cpp" break; case 57: /* type_id: type ICE_IDENTIFIER */ -#line 531 "src/Slice/Grammar.y" +#line 532 "src/Slice/Grammar.y" { auto type = dynamic_pointer_cast(yyvsp[-1]); auto ident = dynamic_pointer_cast(yyvsp[0]); @@ -2037,11 +2038,11 @@ yyparse(void) typestring->v = make_pair(type, ident->v); yyval = typestring; } -#line 2190 "src/Slice/Grammar.cpp" +#line 2191 "src/Slice/Grammar.cpp" break; case 58: /* tag: ICE_TAG_OPEN ICE_INTEGER_LITERAL ')' */ -#line 544 "src/Slice/Grammar.y" +#line 545 "src/Slice/Grammar.y" { auto i = dynamic_pointer_cast(yyvsp[-1]); @@ -2059,11 +2060,11 @@ yyparse(void) auto m = make_shared(tag); yyval = m; } -#line 2212 "src/Slice/Grammar.cpp" +#line 2213 "src/Slice/Grammar.cpp" break; case 59: /* tag: ICE_TAG_OPEN scoped_name ')' */ -#line 562 "src/Slice/Grammar.y" +#line 563 "src/Slice/Grammar.y" { auto scoped = dynamic_pointer_cast(yyvsp[-1]); @@ -2144,31 +2145,31 @@ yyparse(void) auto m = make_shared(tag); yyval = m; } -#line 2295 "src/Slice/Grammar.cpp" +#line 2296 "src/Slice/Grammar.cpp" break; case 60: /* tag: ICE_TAG_OPEN ')' */ -#line 641 "src/Slice/Grammar.y" +#line 642 "src/Slice/Grammar.y" { currentUnit->error("missing tag"); auto m = make_shared(-1); // Dummy yyval = m; } -#line 2305 "src/Slice/Grammar.cpp" +#line 2306 "src/Slice/Grammar.cpp" break; case 61: /* tag: ICE_TAG */ -#line 647 "src/Slice/Grammar.y" +#line 648 "src/Slice/Grammar.y" { currentUnit->error("missing tag"); auto m = make_shared(-1); // Dummy yyval = m; } -#line 2315 "src/Slice/Grammar.cpp" +#line 2316 "src/Slice/Grammar.cpp" break; case 62: /* optional: ICE_OPTIONAL_OPEN ICE_INTEGER_LITERAL ')' */ -#line 658 "src/Slice/Grammar.y" +#line 659 "src/Slice/Grammar.y" { auto i = dynamic_pointer_cast(yyvsp[-1]); @@ -2186,11 +2187,11 @@ yyparse(void) auto m = make_shared(tag); yyval = m; } -#line 2337 "src/Slice/Grammar.cpp" +#line 2338 "src/Slice/Grammar.cpp" break; case 63: /* optional: ICE_OPTIONAL_OPEN scoped_name ')' */ -#line 676 "src/Slice/Grammar.y" +#line 677 "src/Slice/Grammar.y" { auto scoped = dynamic_pointer_cast(yyvsp[-1]); ContainerPtr cont = currentUnit->currentContainer(); @@ -2270,31 +2271,31 @@ yyparse(void) auto m = make_shared(tag); yyval = m; } -#line 2419 "src/Slice/Grammar.cpp" +#line 2420 "src/Slice/Grammar.cpp" break; case 64: /* optional: ICE_OPTIONAL_OPEN ')' */ -#line 754 "src/Slice/Grammar.y" +#line 755 "src/Slice/Grammar.y" { currentUnit->error("missing tag"); auto m = make_shared(-1); // Dummy yyval = m; } -#line 2429 "src/Slice/Grammar.cpp" +#line 2430 "src/Slice/Grammar.cpp" break; case 65: /* optional: ICE_OPTIONAL */ -#line 760 "src/Slice/Grammar.y" +#line 761 "src/Slice/Grammar.y" { currentUnit->error("missing tag"); auto m = make_shared(-1); // Dummy yyval = m; } -#line 2439 "src/Slice/Grammar.cpp" +#line 2440 "src/Slice/Grammar.cpp" break; case 66: /* tagged_type_id: tag type_id */ -#line 771 "src/Slice/Grammar.y" +#line 772 "src/Slice/Grammar.y" { auto m = dynamic_pointer_cast(yyvsp[-1]); auto ts = dynamic_pointer_cast(yyvsp[0]); @@ -2303,11 +2304,11 @@ yyparse(void) m->name = ts->v.second; yyval = m; } -#line 2452 "src/Slice/Grammar.cpp" +#line 2453 "src/Slice/Grammar.cpp" break; case 67: /* tagged_type_id: optional type_id */ -#line 780 "src/Slice/Grammar.y" +#line 781 "src/Slice/Grammar.y" { auto m = dynamic_pointer_cast(yyvsp[-1]); auto ts = dynamic_pointer_cast(yyvsp[0]); @@ -2316,11 +2317,11 @@ yyparse(void) m->name = ts->v.second; yyval = m; } -#line 2465 "src/Slice/Grammar.cpp" +#line 2466 "src/Slice/Grammar.cpp" break; case 68: /* tagged_type_id: type_id */ -#line 789 "src/Slice/Grammar.y" +#line 790 "src/Slice/Grammar.y" { auto ts = dynamic_pointer_cast(yyvsp[0]); auto m = make_shared(-1); @@ -2328,38 +2329,38 @@ yyparse(void) m->name = ts->v.second; yyval = m; } -#line 2477 "src/Slice/Grammar.cpp" +#line 2478 "src/Slice/Grammar.cpp" break; case 69: /* struct_id: ICE_STRUCT ICE_IDENTIFIER */ -#line 802 "src/Slice/Grammar.y" +#line 803 "src/Slice/Grammar.y" { yyval = yyvsp[0]; } -#line 2485 "src/Slice/Grammar.cpp" +#line 2486 "src/Slice/Grammar.cpp" break; case 70: /* struct_id: ICE_STRUCT keyword */ -#line 806 "src/Slice/Grammar.y" +#line 807 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); currentUnit->error("keyword `" + ident->v + "' cannot be used as struct name"); yyval = yyvsp[0]; // Dummy } -#line 2495 "src/Slice/Grammar.cpp" +#line 2496 "src/Slice/Grammar.cpp" break; case 71: /* struct_decl: struct_id */ -#line 817 "src/Slice/Grammar.y" +#line 818 "src/Slice/Grammar.y" { currentUnit->error("structs cannot be forward declared"); yyval = nullptr; // Dummy } -#line 2504 "src/Slice/Grammar.cpp" +#line 2505 "src/Slice/Grammar.cpp" break; case 72: /* @17: %empty */ -#line 827 "src/Slice/Grammar.y" +#line 828 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); ContainerPtr cont = currentUnit->currentContainer(); @@ -2377,11 +2378,11 @@ yyparse(void) } yyval = st; } -#line 2526 "src/Slice/Grammar.cpp" +#line 2527 "src/Slice/Grammar.cpp" break; case 73: /* struct_def: struct_id @17 '{' data_members '}' */ -#line 845 "src/Slice/Grammar.y" +#line 846 "src/Slice/Grammar.y" { if (yyvsp[-3]) { @@ -2397,29 +2398,29 @@ yyparse(void) currentUnit->error("struct `" + st->name() + "' must have at least one member"); // $$ is a dummy } } -#line 2546 "src/Slice/Grammar.cpp" +#line 2547 "src/Slice/Grammar.cpp" break; case 74: /* class_name: ICE_CLASS ICE_IDENTIFIER */ -#line 866 "src/Slice/Grammar.y" +#line 867 "src/Slice/Grammar.y" { yyval = yyvsp[0]; } -#line 2554 "src/Slice/Grammar.cpp" +#line 2555 "src/Slice/Grammar.cpp" break; case 75: /* class_name: ICE_CLASS keyword */ -#line 870 "src/Slice/Grammar.y" +#line 871 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); currentUnit->error("keyword `" + ident->v + "' cannot be used as class name"); yyval = yyvsp[0]; // Dummy } -#line 2564 "src/Slice/Grammar.cpp" +#line 2565 "src/Slice/Grammar.cpp" break; case 76: /* class_id: ICE_CLASS ICE_IDENT_OPEN ICE_INTEGER_LITERAL ')' */ -#line 881 "src/Slice/Grammar.y" +#line 882 "src/Slice/Grammar.y" { int64_t id = dynamic_pointer_cast(yyvsp[-1])->v; if (id < 0) @@ -2444,11 +2445,11 @@ yyparse(void) classId->t = static_cast(id); yyval = classId; } -#line 2593 "src/Slice/Grammar.cpp" +#line 2594 "src/Slice/Grammar.cpp" break; case 77: /* class_id: ICE_CLASS ICE_IDENT_OPEN scoped_name ')' */ -#line 906 "src/Slice/Grammar.y" +#line 907 "src/Slice/Grammar.y" { auto scoped = dynamic_pointer_cast(yyvsp[-1]); @@ -2539,33 +2540,33 @@ yyparse(void) classId->t = id; yyval = classId; } -#line 2687 "src/Slice/Grammar.cpp" +#line 2688 "src/Slice/Grammar.cpp" break; case 78: /* class_id: class_name */ -#line 996 "src/Slice/Grammar.y" +#line 997 "src/Slice/Grammar.y" { auto classId = make_shared(); classId->v = dynamic_pointer_cast(yyvsp[0])->v; classId->t = -1; yyval = classId; } -#line 2698 "src/Slice/Grammar.cpp" +#line 2699 "src/Slice/Grammar.cpp" break; case 79: /* class_decl: class_name */ -#line 1008 "src/Slice/Grammar.y" +#line 1009 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); ContainerPtr cont = currentUnit->currentContainer(); ClassDeclPtr cl = cont->createClassDecl(ident->v); yyval = cl; } -#line 2709 "src/Slice/Grammar.cpp" +#line 2710 "src/Slice/Grammar.cpp" break; case 80: /* @18: %empty */ -#line 1020 "src/Slice/Grammar.y" +#line 1021 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[-1]); ContainerPtr cont = currentUnit->currentContainer(); @@ -2582,11 +2583,11 @@ yyparse(void) yyval = nullptr; } } -#line 2730 "src/Slice/Grammar.cpp" +#line 2731 "src/Slice/Grammar.cpp" break; case 81: /* class_def: class_id class_extends @18 '{' data_members '}' */ -#line 1037 "src/Slice/Grammar.y" +#line 1038 "src/Slice/Grammar.y" { if (yyvsp[-3]) { @@ -2598,11 +2599,11 @@ yyparse(void) yyval = nullptr; } } -#line 2746 "src/Slice/Grammar.cpp" +#line 2747 "src/Slice/Grammar.cpp" break; case 82: /* class_extends: extends scoped_name */ -#line 1054 "src/Slice/Grammar.y" +#line 1055 "src/Slice/Grammar.y" { auto scoped = dynamic_pointer_cast(yyvsp[0]); ContainerPtr cont = currentUnit->currentContainer(); @@ -2636,33 +2637,33 @@ yyparse(void) } } } -#line 2784 "src/Slice/Grammar.cpp" +#line 2785 "src/Slice/Grammar.cpp" break; case 83: /* class_extends: %empty */ -#line 1088 "src/Slice/Grammar.y" +#line 1089 "src/Slice/Grammar.y" { yyval = nullptr; } -#line 2792 "src/Slice/Grammar.cpp" +#line 2793 "src/Slice/Grammar.cpp" break; case 84: /* extends: ICE_EXTENDS */ -#line 1097 "src/Slice/Grammar.y" +#line 1098 "src/Slice/Grammar.y" { } -#line 2799 "src/Slice/Grammar.cpp" +#line 2800 "src/Slice/Grammar.cpp" break; case 85: /* extends: ':' */ -#line 1100 "src/Slice/Grammar.y" +#line 1101 "src/Slice/Grammar.y" { } -#line 2806 "src/Slice/Grammar.cpp" +#line 2807 "src/Slice/Grammar.cpp" break; case 86: /* data_members: meta_data data_member ';' data_members */ -#line 1108 "src/Slice/Grammar.y" +#line 1109 "src/Slice/Grammar.y" { auto metaData = dynamic_pointer_cast(yyvsp[-3]); auto contained = dynamic_pointer_cast(yyvsp[-2]); @@ -2671,33 +2672,33 @@ yyparse(void) contained->setMetaData(metaData->v); } } -#line 2819 "src/Slice/Grammar.cpp" +#line 2820 "src/Slice/Grammar.cpp" break; case 87: /* data_members: error ';' data_members */ -#line 1117 "src/Slice/Grammar.y" +#line 1118 "src/Slice/Grammar.y" { } -#line 2826 "src/Slice/Grammar.cpp" +#line 2827 "src/Slice/Grammar.cpp" break; case 88: /* data_members: meta_data data_member */ -#line 1120 "src/Slice/Grammar.y" +#line 1121 "src/Slice/Grammar.y" { currentUnit->error("`;' missing after definition"); } -#line 2834 "src/Slice/Grammar.cpp" +#line 2835 "src/Slice/Grammar.cpp" break; case 89: /* data_members: %empty */ -#line 1124 "src/Slice/Grammar.y" +#line 1125 "src/Slice/Grammar.y" { } -#line 2841 "src/Slice/Grammar.cpp" +#line 2842 "src/Slice/Grammar.cpp" break; case 90: /* data_member: tagged_type_id */ -#line 1132 "src/Slice/Grammar.y" +#line 1133 "src/Slice/Grammar.y" { auto def = dynamic_pointer_cast(yyvsp[0]); auto cl = dynamic_pointer_cast(currentUnit->currentContainer()); @@ -2727,11 +2728,11 @@ yyparse(void) currentUnit->currentContainer()->checkIntroduced(def->name, dm); yyval = dm; } -#line 2875 "src/Slice/Grammar.cpp" +#line 2876 "src/Slice/Grammar.cpp" break; case 91: /* data_member: tagged_type_id '=' const_initializer */ -#line 1162 "src/Slice/Grammar.y" +#line 1163 "src/Slice/Grammar.y" { auto def = dynamic_pointer_cast(yyvsp[-2]); auto value = dynamic_pointer_cast(yyvsp[0]); @@ -2783,11 +2784,11 @@ yyparse(void) currentUnit->currentContainer()->checkIntroduced(def->name, dm); yyval = dm; } -#line 2913 "src/Slice/Grammar.cpp" +#line 2914 "src/Slice/Grammar.cpp" break; case 92: /* data_member: type keyword */ -#line 1196 "src/Slice/Grammar.y" +#line 1197 "src/Slice/Grammar.y" { auto type = dynamic_pointer_cast(yyvsp[-1]); string name = dynamic_pointer_cast(yyvsp[0])->v; @@ -2809,11 +2810,11 @@ yyparse(void) assert(yyval); currentUnit->error("keyword `" + name + "' cannot be used as data member name"); } -#line 2939 "src/Slice/Grammar.cpp" +#line 2940 "src/Slice/Grammar.cpp" break; case 93: /* data_member: type */ -#line 1218 "src/Slice/Grammar.y" +#line 1219 "src/Slice/Grammar.y" { auto type = dynamic_pointer_cast(yyvsp[0]); auto cl = dynamic_pointer_cast(currentUnit->currentContainer()); @@ -2834,50 +2835,50 @@ yyparse(void) assert(yyval); currentUnit->error("missing data member name"); } -#line 2964 "src/Slice/Grammar.cpp" +#line 2965 "src/Slice/Grammar.cpp" break; case 94: /* return_type: tag type */ -#line 1244 "src/Slice/Grammar.y" +#line 1245 "src/Slice/Grammar.y" { auto m = dynamic_pointer_cast(yyvsp[-1]); m->type = dynamic_pointer_cast(yyvsp[0]); yyval = m; } -#line 2974 "src/Slice/Grammar.cpp" +#line 2975 "src/Slice/Grammar.cpp" break; case 95: /* return_type: optional type */ -#line 1250 "src/Slice/Grammar.y" +#line 1251 "src/Slice/Grammar.y" { auto m = dynamic_pointer_cast(yyvsp[-1]); m->type = dynamic_pointer_cast(yyvsp[0]); yyval = m; } -#line 2984 "src/Slice/Grammar.cpp" +#line 2985 "src/Slice/Grammar.cpp" break; case 96: /* return_type: type */ -#line 1256 "src/Slice/Grammar.y" +#line 1257 "src/Slice/Grammar.y" { auto m = make_shared(-1); m->type = dynamic_pointer_cast(yyvsp[0]); yyval = m; } -#line 2994 "src/Slice/Grammar.cpp" +#line 2995 "src/Slice/Grammar.cpp" break; case 97: /* return_type: ICE_VOID */ -#line 1262 "src/Slice/Grammar.y" +#line 1263 "src/Slice/Grammar.y" { auto m = make_shared(-1); yyval = m; } -#line 3003 "src/Slice/Grammar.cpp" +#line 3004 "src/Slice/Grammar.cpp" break; case 98: /* operation_preamble: return_type ICE_IDENT_OPEN */ -#line 1272 "src/Slice/Grammar.y" +#line 1273 "src/Slice/Grammar.y" { auto returnType = dynamic_pointer_cast(yyvsp[-1]); string name = dynamic_pointer_cast(yyvsp[0])->v; @@ -2902,11 +2903,11 @@ yyparse(void) yyval = nullptr; } } -#line 3031 "src/Slice/Grammar.cpp" +#line 3032 "src/Slice/Grammar.cpp" break; case 99: /* operation_preamble: ICE_IDEMPOTENT return_type ICE_IDENT_OPEN */ -#line 1296 "src/Slice/Grammar.y" +#line 1297 "src/Slice/Grammar.y" { auto returnType = dynamic_pointer_cast(yyvsp[-1]); string name = dynamic_pointer_cast(yyvsp[0])->v; @@ -2936,11 +2937,11 @@ yyparse(void) yyval = nullptr; } } -#line 3065 "src/Slice/Grammar.cpp" +#line 3066 "src/Slice/Grammar.cpp" break; case 100: /* operation_preamble: return_type ICE_KEYWORD_OPEN */ -#line 1326 "src/Slice/Grammar.y" +#line 1327 "src/Slice/Grammar.y" { auto returnType = dynamic_pointer_cast(yyvsp[-1]); string name = dynamic_pointer_cast(yyvsp[0])->v; @@ -2965,11 +2966,11 @@ yyparse(void) yyval = nullptr; } } -#line 3093 "src/Slice/Grammar.cpp" +#line 3094 "src/Slice/Grammar.cpp" break; case 101: /* operation_preamble: ICE_IDEMPOTENT return_type ICE_KEYWORD_OPEN */ -#line 1350 "src/Slice/Grammar.y" +#line 1351 "src/Slice/Grammar.y" { auto returnType = dynamic_pointer_cast(yyvsp[-1]); string name = dynamic_pointer_cast(yyvsp[0])->v; @@ -2998,11 +2999,11 @@ yyparse(void) yyval = nullptr; } } -#line 3126 "src/Slice/Grammar.cpp" +#line 3127 "src/Slice/Grammar.cpp" break; case 102: /* @19: %empty */ -#line 1384 "src/Slice/Grammar.y" +#line 1385 "src/Slice/Grammar.y" { if (yyvsp[-2]) { @@ -3014,11 +3015,11 @@ yyparse(void) yyval = nullptr; } } -#line 3142 "src/Slice/Grammar.cpp" +#line 3143 "src/Slice/Grammar.cpp" break; case 103: /* operation: operation_preamble parameters ')' @19 throws */ -#line 1396 "src/Slice/Grammar.y" +#line 1397 "src/Slice/Grammar.y" { auto op = dynamic_pointer_cast(yyvsp[-1]); auto el = dynamic_pointer_cast(yyvsp[0]); @@ -3028,11 +3029,11 @@ yyparse(void) op->setExceptionList(el->v); } } -#line 3156 "src/Slice/Grammar.cpp" +#line 3157 "src/Slice/Grammar.cpp" break; case 104: /* @20: %empty */ -#line 1406 "src/Slice/Grammar.y" +#line 1407 "src/Slice/Grammar.y" { if (yyvsp[-2]) { @@ -3040,11 +3041,11 @@ yyparse(void) } yyerrok; } -#line 3168 "src/Slice/Grammar.cpp" +#line 3169 "src/Slice/Grammar.cpp" break; case 105: /* operation: operation_preamble error ')' @20 throws */ -#line 1414 "src/Slice/Grammar.y" +#line 1415 "src/Slice/Grammar.y" { auto op = dynamic_pointer_cast(yyvsp[-1]); auto el = dynamic_pointer_cast(yyvsp[0]); @@ -3054,29 +3055,29 @@ yyparse(void) op->setExceptionList(el->v); // Dummy } } -#line 3182 "src/Slice/Grammar.cpp" +#line 3183 "src/Slice/Grammar.cpp" break; case 106: /* interface_id: ICE_INTERFACE ICE_IDENTIFIER */ -#line 1429 "src/Slice/Grammar.y" +#line 1430 "src/Slice/Grammar.y" { yyval = yyvsp[0]; } -#line 3190 "src/Slice/Grammar.cpp" +#line 3191 "src/Slice/Grammar.cpp" break; case 107: /* interface_id: ICE_INTERFACE keyword */ -#line 1433 "src/Slice/Grammar.y" +#line 1434 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); currentUnit->error("keyword `" + ident->v + "' cannot be used as interface name"); yyval = yyvsp[0]; // Dummy } -#line 3200 "src/Slice/Grammar.cpp" +#line 3201 "src/Slice/Grammar.cpp" break; case 108: /* interface_decl: interface_id */ -#line 1444 "src/Slice/Grammar.y" +#line 1445 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); auto cont = currentUnit->currentContainer(); @@ -3084,11 +3085,11 @@ yyparse(void) cont->checkIntroduced(ident->v, cl); yyval = cl; } -#line 3212 "src/Slice/Grammar.cpp" +#line 3213 "src/Slice/Grammar.cpp" break; case 109: /* @21: %empty */ -#line 1457 "src/Slice/Grammar.y" +#line 1458 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[-1]); ContainerPtr cont = currentUnit->currentContainer(); @@ -3105,11 +3106,11 @@ yyparse(void) yyval = nullptr; } } -#line 3233 "src/Slice/Grammar.cpp" +#line 3234 "src/Slice/Grammar.cpp" break; case 110: /* interface_def: interface_id interface_extends @21 '{' operations '}' */ -#line 1474 "src/Slice/Grammar.y" +#line 1475 "src/Slice/Grammar.y" { if (yyvsp[-3]) { @@ -3121,11 +3122,11 @@ yyparse(void) yyval = nullptr; } } -#line 3249 "src/Slice/Grammar.cpp" +#line 3250 "src/Slice/Grammar.cpp" break; case 111: /* interface_list: scoped_name ',' interface_list */ -#line 1491 "src/Slice/Grammar.y" +#line 1492 "src/Slice/Grammar.y" { auto intfs = dynamic_pointer_cast(yyvsp[0]); auto scoped = dynamic_pointer_cast(yyvsp[-2]); @@ -3160,11 +3161,11 @@ yyparse(void) } yyval = intfs; } -#line 3288 "src/Slice/Grammar.cpp" +#line 3289 "src/Slice/Grammar.cpp" break; case 112: /* interface_list: scoped_name */ -#line 1526 "src/Slice/Grammar.y" +#line 1527 "src/Slice/Grammar.y" { auto intfs = make_shared(); auto scoped = dynamic_pointer_cast(yyvsp[0]); @@ -3199,45 +3200,45 @@ yyparse(void) } yyval = intfs; } -#line 3327 "src/Slice/Grammar.cpp" +#line 3328 "src/Slice/Grammar.cpp" break; case 113: /* interface_list: ICE_OBJECT */ -#line 1561 "src/Slice/Grammar.y" +#line 1562 "src/Slice/Grammar.y" { currentUnit->error("illegal inheritance from type Object"); yyval = make_shared(); // Dummy } -#line 3336 "src/Slice/Grammar.cpp" +#line 3337 "src/Slice/Grammar.cpp" break; case 114: /* interface_list: ICE_VALUE */ -#line 1566 "src/Slice/Grammar.y" +#line 1567 "src/Slice/Grammar.y" { currentUnit->error("illegal inheritance from type Value"); yyval = make_shared(); // Dummy } -#line 3345 "src/Slice/Grammar.cpp" +#line 3346 "src/Slice/Grammar.cpp" break; case 115: /* interface_extends: extends interface_list */ -#line 1576 "src/Slice/Grammar.y" +#line 1577 "src/Slice/Grammar.y" { yyval = yyvsp[0]; } -#line 3353 "src/Slice/Grammar.cpp" +#line 3354 "src/Slice/Grammar.cpp" break; case 116: /* interface_extends: %empty */ -#line 1580 "src/Slice/Grammar.y" +#line 1581 "src/Slice/Grammar.y" { yyval = make_shared(); } -#line 3361 "src/Slice/Grammar.cpp" +#line 3362 "src/Slice/Grammar.cpp" break; case 117: /* operations: meta_data operation ';' operations */ -#line 1589 "src/Slice/Grammar.y" +#line 1590 "src/Slice/Grammar.y" { auto metaData = dynamic_pointer_cast(yyvsp[-3]); auto contained = dynamic_pointer_cast(yyvsp[-2]); @@ -3246,55 +3247,55 @@ yyparse(void) contained->setMetaData(metaData->v); } } -#line 3374 "src/Slice/Grammar.cpp" +#line 3375 "src/Slice/Grammar.cpp" break; case 118: /* operations: error ';' operations */ -#line 1598 "src/Slice/Grammar.y" +#line 1599 "src/Slice/Grammar.y" { } -#line 3381 "src/Slice/Grammar.cpp" +#line 3382 "src/Slice/Grammar.cpp" break; case 119: /* operations: meta_data operation */ -#line 1601 "src/Slice/Grammar.y" +#line 1602 "src/Slice/Grammar.y" { currentUnit->error("`;' missing after definition"); } -#line 3389 "src/Slice/Grammar.cpp" +#line 3390 "src/Slice/Grammar.cpp" break; case 120: /* operations: %empty */ -#line 1605 "src/Slice/Grammar.y" +#line 1606 "src/Slice/Grammar.y" { } -#line 3396 "src/Slice/Grammar.cpp" +#line 3397 "src/Slice/Grammar.cpp" break; case 121: /* exception_list: exception ',' exception_list */ -#line 1613 "src/Slice/Grammar.y" +#line 1614 "src/Slice/Grammar.y" { auto exception = dynamic_pointer_cast(yyvsp[-2]); auto exceptionList = dynamic_pointer_cast(yyvsp[0]); exceptionList->v.push_front(exception); yyval = exceptionList; } -#line 3407 "src/Slice/Grammar.cpp" +#line 3408 "src/Slice/Grammar.cpp" break; case 122: /* exception_list: exception */ -#line 1620 "src/Slice/Grammar.y" +#line 1621 "src/Slice/Grammar.y" { auto exception = dynamic_pointer_cast(yyvsp[0]); auto exceptionList = make_shared(); exceptionList->v.push_front(exception); yyval = exceptionList; } -#line 3418 "src/Slice/Grammar.cpp" +#line 3419 "src/Slice/Grammar.cpp" break; case 123: /* exception: scoped_name */ -#line 1632 "src/Slice/Grammar.y" +#line 1633 "src/Slice/Grammar.y" { auto scoped = dynamic_pointer_cast(yyvsp[0]); ContainerPtr cont = currentUnit->currentContainer(); @@ -3306,21 +3307,21 @@ yyparse(void) cont->checkIntroduced(scoped->v, exception); yyval = exception; } -#line 3434 "src/Slice/Grammar.cpp" +#line 3435 "src/Slice/Grammar.cpp" break; case 124: /* exception: keyword */ -#line 1644 "src/Slice/Grammar.y" +#line 1645 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); currentUnit->error("keyword `" + ident->v + "' cannot be used as exception name"); yyval = currentUnit->currentContainer()->createException(IceUtil::generateUUID(), 0, Dummy); // Dummy } -#line 3444 "src/Slice/Grammar.cpp" +#line 3445 "src/Slice/Grammar.cpp" break; case 125: /* sequence_def: ICE_SEQUENCE '<' meta_data type '>' ICE_IDENTIFIER */ -#line 1655 "src/Slice/Grammar.y" +#line 1656 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); auto metaData = dynamic_pointer_cast(yyvsp[-3]); @@ -3328,11 +3329,11 @@ yyparse(void) ContainerPtr cont = currentUnit->currentContainer(); yyval = cont->createSequence(ident->v, type, metaData->v); } -#line 3456 "src/Slice/Grammar.cpp" +#line 3457 "src/Slice/Grammar.cpp" break; case 126: /* sequence_def: ICE_SEQUENCE '<' meta_data type '>' keyword */ -#line 1663 "src/Slice/Grammar.y" +#line 1664 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); auto metaData = dynamic_pointer_cast(yyvsp[-3]); @@ -3341,11 +3342,11 @@ yyparse(void) yyval = cont->createSequence(ident->v, type, metaData->v); // Dummy currentUnit->error("keyword `" + ident->v + "' cannot be used as sequence name"); } -#line 3469 "src/Slice/Grammar.cpp" +#line 3470 "src/Slice/Grammar.cpp" break; case 127: /* dictionary_def: ICE_DICTIONARY '<' meta_data type ',' meta_data type '>' ICE_IDENTIFIER */ -#line 1677 "src/Slice/Grammar.y" +#line 1678 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); auto keyMetaData = dynamic_pointer_cast(yyvsp[-6]); @@ -3355,11 +3356,11 @@ yyparse(void) ContainerPtr cont = currentUnit->currentContainer(); yyval = cont->createDictionary(ident->v, keyType, keyMetaData->v, valueType, valueMetaData->v); } -#line 3483 "src/Slice/Grammar.cpp" +#line 3484 "src/Slice/Grammar.cpp" break; case 128: /* dictionary_def: ICE_DICTIONARY '<' meta_data type ',' meta_data type '>' keyword */ -#line 1687 "src/Slice/Grammar.y" +#line 1688 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); auto keyMetaData = dynamic_pointer_cast(yyvsp[-6]); @@ -3370,29 +3371,29 @@ yyparse(void) yyval = cont->createDictionary(ident->v, keyType, keyMetaData->v, valueType, valueMetaData->v); // Dummy currentUnit->error("keyword `" + ident->v + "' cannot be used as dictionary name"); } -#line 3498 "src/Slice/Grammar.cpp" +#line 3499 "src/Slice/Grammar.cpp" break; case 129: /* enum_id: ICE_ENUM ICE_IDENTIFIER */ -#line 1703 "src/Slice/Grammar.y" +#line 1704 "src/Slice/Grammar.y" { yyval = yyvsp[0]; } -#line 3506 "src/Slice/Grammar.cpp" +#line 3507 "src/Slice/Grammar.cpp" break; case 130: /* enum_id: ICE_ENUM keyword */ -#line 1707 "src/Slice/Grammar.y" +#line 1708 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); currentUnit->error("keyword `" + ident->v + "' cannot be used as enumeration name"); yyval = yyvsp[0]; // Dummy } -#line 3516 "src/Slice/Grammar.cpp" +#line 3517 "src/Slice/Grammar.cpp" break; case 131: /* @22: %empty */ -#line 1718 "src/Slice/Grammar.y" +#line 1719 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); ContainerPtr cont = currentUnit->currentContainer(); @@ -3408,11 +3409,11 @@ yyparse(void) currentUnit->pushContainer(en); yyval = en; } -#line 3536 "src/Slice/Grammar.cpp" +#line 3537 "src/Slice/Grammar.cpp" break; case 132: /* enum_def: enum_id @22 '{' enumerator_list '}' */ -#line 1734 "src/Slice/Grammar.y" +#line 1735 "src/Slice/Grammar.y" { auto en = dynamic_pointer_cast(yyvsp[-3]); if (en) @@ -3426,11 +3427,11 @@ yyparse(void) } yyval = yyvsp[-3]; } -#line 3554 "src/Slice/Grammar.cpp" +#line 3555 "src/Slice/Grammar.cpp" break; case 133: /* @23: %empty */ -#line 1749 "src/Slice/Grammar.y" +#line 1750 "src/Slice/Grammar.y" { currentUnit->error("missing enumeration name"); ContainerPtr cont = currentUnit->currentContainer(); @@ -3438,37 +3439,37 @@ yyparse(void) currentUnit->pushContainer(en); yyval = en; } -#line 3566 "src/Slice/Grammar.cpp" +#line 3567 "src/Slice/Grammar.cpp" break; case 134: /* enum_def: ICE_ENUM @23 '{' enumerator_list '}' */ -#line 1757 "src/Slice/Grammar.y" +#line 1758 "src/Slice/Grammar.y" { currentUnit->popContainer(); yyval = yyvsp[-4]; } -#line 3575 "src/Slice/Grammar.cpp" +#line 3576 "src/Slice/Grammar.cpp" break; case 135: /* enumerator_list: enumerator ',' enumerator_list */ -#line 1767 "src/Slice/Grammar.y" +#line 1768 "src/Slice/Grammar.y" { auto ens = dynamic_pointer_cast(yyvsp[-2]); ens->v.splice(ens->v.end(), dynamic_pointer_cast(yyvsp[0])->v); yyval = ens; } -#line 3585 "src/Slice/Grammar.cpp" +#line 3586 "src/Slice/Grammar.cpp" break; case 136: /* enumerator_list: enumerator */ -#line 1773 "src/Slice/Grammar.y" +#line 1774 "src/Slice/Grammar.y" { } -#line 3592 "src/Slice/Grammar.cpp" +#line 3593 "src/Slice/Grammar.cpp" break; case 137: /* enumerator: ICE_IDENTIFIER */ -#line 1781 "src/Slice/Grammar.y" +#line 1782 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); auto ens = make_shared(); @@ -3480,11 +3481,11 @@ yyparse(void) } yyval = ens; } -#line 3608 "src/Slice/Grammar.cpp" +#line 3609 "src/Slice/Grammar.cpp" break; case 138: /* enumerator: ICE_IDENTIFIER '=' enumerator_initializer */ -#line 1793 "src/Slice/Grammar.y" +#line 1794 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[-2]); auto ens = make_shared(); @@ -3504,39 +3505,39 @@ yyparse(void) } yyval = ens; } -#line 3632 "src/Slice/Grammar.cpp" +#line 3633 "src/Slice/Grammar.cpp" break; case 139: /* enumerator: keyword */ -#line 1813 "src/Slice/Grammar.y" +#line 1814 "src/Slice/Grammar.y" { auto ident = dynamic_pointer_cast(yyvsp[0]); currentUnit->error("keyword `" + ident->v + "' cannot be used as enumerator"); auto ens = make_shared(); // Dummy yyval = ens; } -#line 3643 "src/Slice/Grammar.cpp" +#line 3644 "src/Slice/Grammar.cpp" break; case 140: /* enumerator: %empty */ -#line 1820 "src/Slice/Grammar.y" +#line 1821 "src/Slice/Grammar.y" { auto ens = make_shared(); yyval = ens; // Dummy } -#line 3652 "src/Slice/Grammar.cpp" +#line 3653 "src/Slice/Grammar.cpp" break; case 141: /* enumerator_initializer: ICE_INTEGER_LITERAL */ -#line 1830 "src/Slice/Grammar.y" +#line 1831 "src/Slice/Grammar.y" { yyval = yyvsp[0]; } -#line 3660 "src/Slice/Grammar.cpp" +#line 3661 "src/Slice/Grammar.cpp" break; case 142: /* enumerator_initializer: scoped_name */ -#line 1834 "src/Slice/Grammar.y" +#line 1835 "src/Slice/Grammar.y" { auto scoped = dynamic_pointer_cast(yyvsp[0]); ContainedList cl = currentUnit->currentContainer()->lookupContained(scoped->v); @@ -3572,38 +3573,38 @@ yyparse(void) yyval = tok; } -#line 3700 "src/Slice/Grammar.cpp" +#line 3701 "src/Slice/Grammar.cpp" break; case 143: /* out_qualifier: ICE_OUT */ -#line 1875 "src/Slice/Grammar.y" +#line 1876 "src/Slice/Grammar.y" { auto out = make_shared(); out->v = true; yyval = out; } -#line 3710 "src/Slice/Grammar.cpp" +#line 3711 "src/Slice/Grammar.cpp" break; case 144: /* out_qualifier: %empty */ -#line 1881 "src/Slice/Grammar.y" +#line 1882 "src/Slice/Grammar.y" { auto out = make_shared(); out->v = false; yyval = out; } -#line 3720 "src/Slice/Grammar.cpp" +#line 3721 "src/Slice/Grammar.cpp" break; case 145: /* parameters: %empty */ -#line 1892 "src/Slice/Grammar.y" +#line 1893 "src/Slice/Grammar.y" { } -#line 3727 "src/Slice/Grammar.cpp" +#line 3728 "src/Slice/Grammar.cpp" break; case 146: /* parameters: out_qualifier meta_data tagged_type_id */ -#line 1895 "src/Slice/Grammar.y" +#line 1896 "src/Slice/Grammar.y" { auto isOutParam = dynamic_pointer_cast(yyvsp[-2]); auto tsp = dynamic_pointer_cast(yyvsp[0]); @@ -3619,11 +3620,11 @@ yyparse(void) } } } -#line 3747 "src/Slice/Grammar.cpp" +#line 3748 "src/Slice/Grammar.cpp" break; case 147: /* parameters: parameters ',' out_qualifier meta_data tagged_type_id */ -#line 1911 "src/Slice/Grammar.y" +#line 1912 "src/Slice/Grammar.y" { auto isOutParam = dynamic_pointer_cast(yyvsp[-2]); auto tsp = dynamic_pointer_cast(yyvsp[0]); @@ -3639,11 +3640,11 @@ yyparse(void) } } } -#line 3767 "src/Slice/Grammar.cpp" +#line 3768 "src/Slice/Grammar.cpp" break; case 148: /* parameters: out_qualifier meta_data type keyword */ -#line 1927 "src/Slice/Grammar.y" +#line 1928 "src/Slice/Grammar.y" { auto isOutParam = dynamic_pointer_cast(yyvsp[-3]); auto type = dynamic_pointer_cast(yyvsp[-1]); @@ -3655,11 +3656,11 @@ yyparse(void) currentUnit->error("keyword `" + ident->v + "' cannot be used as parameter name"); } } -#line 3783 "src/Slice/Grammar.cpp" +#line 3784 "src/Slice/Grammar.cpp" break; case 149: /* parameters: parameters ',' out_qualifier meta_data type keyword */ -#line 1939 "src/Slice/Grammar.y" +#line 1940 "src/Slice/Grammar.y" { auto isOutParam = dynamic_pointer_cast(yyvsp[-3]); auto type = dynamic_pointer_cast(yyvsp[-1]); @@ -3671,11 +3672,11 @@ yyparse(void) currentUnit->error("keyword `" + ident->v + "' cannot be used as parameter name"); } } -#line 3799 "src/Slice/Grammar.cpp" +#line 3800 "src/Slice/Grammar.cpp" break; case 150: /* parameters: out_qualifier meta_data type */ -#line 1951 "src/Slice/Grammar.y" +#line 1952 "src/Slice/Grammar.y" { auto isOutParam = dynamic_pointer_cast(yyvsp[-2]); auto type = dynamic_pointer_cast(yyvsp[0]); @@ -3686,11 +3687,11 @@ yyparse(void) currentUnit->error("missing parameter name"); } } -#line 3814 "src/Slice/Grammar.cpp" +#line 3815 "src/Slice/Grammar.cpp" break; case 151: /* parameters: parameters ',' out_qualifier meta_data type */ -#line 1962 "src/Slice/Grammar.y" +#line 1963 "src/Slice/Grammar.y" { auto isOutParam = dynamic_pointer_cast(yyvsp[-2]); auto type = dynamic_pointer_cast(yyvsp[0]); @@ -3701,128 +3702,128 @@ yyparse(void) currentUnit->error("missing parameter name"); } } -#line 3829 "src/Slice/Grammar.cpp" +#line 3830 "src/Slice/Grammar.cpp" break; case 152: /* throws: ICE_THROWS exception_list */ -#line 1978 "src/Slice/Grammar.y" +#line 1979 "src/Slice/Grammar.y" { yyval = yyvsp[0]; } -#line 3837 "src/Slice/Grammar.cpp" +#line 3838 "src/Slice/Grammar.cpp" break; case 153: /* throws: %empty */ -#line 1982 "src/Slice/Grammar.y" +#line 1983 "src/Slice/Grammar.y" { yyval = make_shared(); } -#line 3845 "src/Slice/Grammar.cpp" +#line 3846 "src/Slice/Grammar.cpp" break; case 154: /* scoped_name: ICE_IDENTIFIER */ -#line 1991 "src/Slice/Grammar.y" +#line 1992 "src/Slice/Grammar.y" { } -#line 3852 "src/Slice/Grammar.cpp" +#line 3853 "src/Slice/Grammar.cpp" break; case 155: /* scoped_name: ICE_SCOPED_IDENTIFIER */ -#line 1994 "src/Slice/Grammar.y" +#line 1995 "src/Slice/Grammar.y" { } -#line 3859 "src/Slice/Grammar.cpp" +#line 3860 "src/Slice/Grammar.cpp" break; case 156: /* builtin: ICE_BOOL */ -#line 2001 "src/Slice/Grammar.y" +#line 2002 "src/Slice/Grammar.y" { } -#line 3865 "src/Slice/Grammar.cpp" +#line 3866 "src/Slice/Grammar.cpp" break; case 157: /* builtin: ICE_BYTE */ -#line 2002 "src/Slice/Grammar.y" +#line 2003 "src/Slice/Grammar.y" { } -#line 3871 "src/Slice/Grammar.cpp" +#line 3872 "src/Slice/Grammar.cpp" break; case 158: /* builtin: ICE_SHORT */ -#line 2003 "src/Slice/Grammar.y" +#line 2004 "src/Slice/Grammar.y" { } -#line 3877 "src/Slice/Grammar.cpp" +#line 3878 "src/Slice/Grammar.cpp" break; case 159: /* builtin: ICE_INT */ -#line 2004 "src/Slice/Grammar.y" +#line 2005 "src/Slice/Grammar.y" { } -#line 3883 "src/Slice/Grammar.cpp" +#line 3884 "src/Slice/Grammar.cpp" break; case 160: /* builtin: ICE_LONG */ -#line 2005 "src/Slice/Grammar.y" +#line 2006 "src/Slice/Grammar.y" { } -#line 3889 "src/Slice/Grammar.cpp" +#line 3890 "src/Slice/Grammar.cpp" break; case 161: /* builtin: ICE_FLOAT */ -#line 2006 "src/Slice/Grammar.y" +#line 2007 "src/Slice/Grammar.y" { } -#line 3895 "src/Slice/Grammar.cpp" +#line 3896 "src/Slice/Grammar.cpp" break; case 162: /* builtin: ICE_DOUBLE */ -#line 2007 "src/Slice/Grammar.y" +#line 2008 "src/Slice/Grammar.y" { } -#line 3901 "src/Slice/Grammar.cpp" +#line 3902 "src/Slice/Grammar.cpp" break; case 163: /* builtin: ICE_STRING */ -#line 2008 "src/Slice/Grammar.y" +#line 2009 "src/Slice/Grammar.y" { } -#line 3907 "src/Slice/Grammar.cpp" +#line 3908 "src/Slice/Grammar.cpp" break; case 164: /* builtin: ICE_OBJECT */ -#line 2009 "src/Slice/Grammar.y" +#line 2010 "src/Slice/Grammar.y" { } -#line 3913 "src/Slice/Grammar.cpp" +#line 3914 "src/Slice/Grammar.cpp" break; case 165: /* builtin: ICE_VALUE */ -#line 2010 "src/Slice/Grammar.y" +#line 2011 "src/Slice/Grammar.y" { } -#line 3919 "src/Slice/Grammar.cpp" +#line 3920 "src/Slice/Grammar.cpp" break; case 166: /* type: ICE_OBJECT '*' */ -#line 2016 "src/Slice/Grammar.y" +#line 2017 "src/Slice/Grammar.y" { yyval = currentUnit->builtin(Builtin::KindObjectProxy); } -#line 3927 "src/Slice/Grammar.cpp" +#line 3928 "src/Slice/Grammar.cpp" break; case 167: /* type: builtin */ -#line 2020 "src/Slice/Grammar.y" +#line 2021 "src/Slice/Grammar.y" { auto typeName = dynamic_pointer_cast(yyvsp[0]); yyval = currentUnit->builtin(Builtin::kindFromString(typeName->v).value()); } -#line 3936 "src/Slice/Grammar.cpp" +#line 3937 "src/Slice/Grammar.cpp" break; case 168: /* type: scoped_name */ -#line 2025 "src/Slice/Grammar.y" +#line 2026 "src/Slice/Grammar.y" { auto scoped = dynamic_pointer_cast(yyvsp[0]); ContainerPtr cont = currentUnit->currentContainer(); @@ -3853,11 +3854,11 @@ yyparse(void) yyval = nullptr; } } -#line 3971 "src/Slice/Grammar.cpp" +#line 3972 "src/Slice/Grammar.cpp" break; case 169: /* type: scoped_name '*' */ -#line 2056 "src/Slice/Grammar.y" +#line 2057 "src/Slice/Grammar.y" { auto scoped = dynamic_pointer_cast(yyvsp[-1]); ContainerPtr cont = currentUnit->currentContainer(); @@ -3888,50 +3889,50 @@ yyparse(void) yyval = nullptr; } } -#line 4006 "src/Slice/Grammar.cpp" +#line 4007 "src/Slice/Grammar.cpp" break; case 170: /* string_literal: ICE_STRING_LITERAL string_literal */ -#line 2092 "src/Slice/Grammar.y" +#line 2093 "src/Slice/Grammar.y" { auto str1 = dynamic_pointer_cast(yyvsp[-1]); auto str2 = dynamic_pointer_cast(yyvsp[0]); str1->v += str2->v; } -#line 4016 "src/Slice/Grammar.cpp" +#line 4017 "src/Slice/Grammar.cpp" break; case 171: /* string_literal: ICE_STRING_LITERAL */ -#line 2098 "src/Slice/Grammar.y" +#line 2099 "src/Slice/Grammar.y" { } -#line 4023 "src/Slice/Grammar.cpp" +#line 4024 "src/Slice/Grammar.cpp" break; case 172: /* string_list: string_list ',' string_literal */ -#line 2106 "src/Slice/Grammar.y" +#line 2107 "src/Slice/Grammar.y" { auto str = dynamic_pointer_cast(yyvsp[0]); auto stringList = dynamic_pointer_cast(yyvsp[-2]); stringList->v.push_back(str->v); yyval = stringList; } -#line 4034 "src/Slice/Grammar.cpp" +#line 4035 "src/Slice/Grammar.cpp" break; case 173: /* string_list: string_literal */ -#line 2113 "src/Slice/Grammar.y" +#line 2114 "src/Slice/Grammar.y" { auto str = dynamic_pointer_cast(yyvsp[0]); auto stringList = make_shared(); stringList->v.push_back(str->v); yyval = stringList; } -#line 4045 "src/Slice/Grammar.cpp" +#line 4046 "src/Slice/Grammar.cpp" break; case 174: /* const_initializer: ICE_INTEGER_LITERAL */ -#line 2125 "src/Slice/Grammar.y" +#line 2126 "src/Slice/Grammar.y" { BuiltinPtr type = currentUnit->builtin(Builtin::KindLong); auto intVal = dynamic_pointer_cast(yyvsp[0]); @@ -3940,11 +3941,11 @@ yyparse(void) auto def = make_shared(type, sstr.str(), intVal->literal); yyval = def; } -#line 4058 "src/Slice/Grammar.cpp" +#line 4059 "src/Slice/Grammar.cpp" break; case 175: /* const_initializer: ICE_FLOATING_POINT_LITERAL */ -#line 2134 "src/Slice/Grammar.y" +#line 2135 "src/Slice/Grammar.y" { BuiltinPtr type = currentUnit->builtin(Builtin::KindDouble); auto floatVal = dynamic_pointer_cast(yyvsp[0]); @@ -3953,11 +3954,11 @@ yyparse(void) auto def = make_shared(type, sstr.str(), floatVal->literal); yyval = def; } -#line 4071 "src/Slice/Grammar.cpp" +#line 4072 "src/Slice/Grammar.cpp" break; case 176: /* const_initializer: scoped_name */ -#line 2143 "src/Slice/Grammar.y" +#line 2144 "src/Slice/Grammar.y" { auto scoped = dynamic_pointer_cast(yyvsp[0]); ConstDefTokPtr def; @@ -3992,44 +3993,44 @@ yyparse(void) } yyval = def; } -#line 4110 "src/Slice/Grammar.cpp" +#line 4111 "src/Slice/Grammar.cpp" break; case 177: /* const_initializer: ICE_STRING_LITERAL */ -#line 2178 "src/Slice/Grammar.y" +#line 2179 "src/Slice/Grammar.y" { BuiltinPtr type = currentUnit->builtin(Builtin::KindString); auto literal = dynamic_pointer_cast(yyvsp[0]); auto def = make_shared(type, literal->v, literal->literal); yyval = def; } -#line 4121 "src/Slice/Grammar.cpp" +#line 4122 "src/Slice/Grammar.cpp" break; case 178: /* const_initializer: ICE_FALSE */ -#line 2185 "src/Slice/Grammar.y" +#line 2186 "src/Slice/Grammar.y" { BuiltinPtr type = currentUnit->builtin(Builtin::KindBool); auto literal = dynamic_pointer_cast(yyvsp[0]); auto def = make_shared(type, "false", "false"); yyval = def; } -#line 4132 "src/Slice/Grammar.cpp" +#line 4133 "src/Slice/Grammar.cpp" break; case 179: /* const_initializer: ICE_TRUE */ -#line 2192 "src/Slice/Grammar.y" +#line 2193 "src/Slice/Grammar.y" { BuiltinPtr type = currentUnit->builtin(Builtin::KindBool); auto literal = dynamic_pointer_cast(yyvsp[0]); auto def = make_shared(type, "true", "true"); yyval = def; } -#line 4143 "src/Slice/Grammar.cpp" +#line 4144 "src/Slice/Grammar.cpp" break; case 180: /* const_def: ICE_CONST meta_data type ICE_IDENTIFIER '=' const_initializer */ -#line 2204 "src/Slice/Grammar.y" +#line 2205 "src/Slice/Grammar.y" { auto metaData = dynamic_pointer_cast(yyvsp[-4]); auto const_type = dynamic_pointer_cast(yyvsp[-3]); @@ -4043,11 +4044,11 @@ yyparse(void) value->valueAsString, value->valueAsLiteral); } -#line 4156 "src/Slice/Grammar.cpp" +#line 4157 "src/Slice/Grammar.cpp" break; case 181: /* const_def: ICE_CONST meta_data type '=' const_initializer */ -#line 2213 "src/Slice/Grammar.y" +#line 2214 "src/Slice/Grammar.y" { auto metaData = dynamic_pointer_cast(yyvsp[-3]); auto const_type = dynamic_pointer_cast(yyvsp[-2]); @@ -4062,206 +4063,206 @@ yyparse(void) value->valueAsLiteral, Dummy); // Dummy } -#line 4169 "src/Slice/Grammar.cpp" +#line 4170 "src/Slice/Grammar.cpp" break; case 182: /* keyword: ICE_MODULE */ -#line 2226 "src/Slice/Grammar.y" +#line 2227 "src/Slice/Grammar.y" { } -#line 4175 "src/Slice/Grammar.cpp" +#line 4176 "src/Slice/Grammar.cpp" break; case 183: /* keyword: ICE_CLASS */ -#line 2227 "src/Slice/Grammar.y" +#line 2228 "src/Slice/Grammar.y" { } -#line 4181 "src/Slice/Grammar.cpp" +#line 4182 "src/Slice/Grammar.cpp" break; case 184: /* keyword: ICE_INTERFACE */ -#line 2228 "src/Slice/Grammar.y" +#line 2229 "src/Slice/Grammar.y" { } -#line 4187 "src/Slice/Grammar.cpp" +#line 4188 "src/Slice/Grammar.cpp" break; case 185: /* keyword: ICE_EXCEPTION */ -#line 2229 "src/Slice/Grammar.y" +#line 2230 "src/Slice/Grammar.y" { } -#line 4193 "src/Slice/Grammar.cpp" +#line 4194 "src/Slice/Grammar.cpp" break; case 186: /* keyword: ICE_STRUCT */ -#line 2230 "src/Slice/Grammar.y" +#line 2231 "src/Slice/Grammar.y" { } -#line 4199 "src/Slice/Grammar.cpp" +#line 4200 "src/Slice/Grammar.cpp" break; case 187: /* keyword: ICE_SEQUENCE */ -#line 2231 "src/Slice/Grammar.y" +#line 2232 "src/Slice/Grammar.y" { } -#line 4205 "src/Slice/Grammar.cpp" +#line 4206 "src/Slice/Grammar.cpp" break; case 188: /* keyword: ICE_DICTIONARY */ -#line 2232 "src/Slice/Grammar.y" +#line 2233 "src/Slice/Grammar.y" { } -#line 4211 "src/Slice/Grammar.cpp" +#line 4212 "src/Slice/Grammar.cpp" break; case 189: /* keyword: ICE_ENUM */ -#line 2233 "src/Slice/Grammar.y" +#line 2234 "src/Slice/Grammar.y" { } -#line 4217 "src/Slice/Grammar.cpp" +#line 4218 "src/Slice/Grammar.cpp" break; case 190: /* keyword: ICE_OUT */ -#line 2234 "src/Slice/Grammar.y" +#line 2235 "src/Slice/Grammar.y" { } -#line 4223 "src/Slice/Grammar.cpp" +#line 4224 "src/Slice/Grammar.cpp" break; case 191: /* keyword: ICE_EXTENDS */ -#line 2235 "src/Slice/Grammar.y" +#line 2236 "src/Slice/Grammar.y" { } -#line 4229 "src/Slice/Grammar.cpp" +#line 4230 "src/Slice/Grammar.cpp" break; case 192: /* keyword: ICE_THROWS */ -#line 2236 "src/Slice/Grammar.y" +#line 2237 "src/Slice/Grammar.y" { } -#line 4235 "src/Slice/Grammar.cpp" +#line 4236 "src/Slice/Grammar.cpp" break; case 193: /* keyword: ICE_VOID */ -#line 2237 "src/Slice/Grammar.y" +#line 2238 "src/Slice/Grammar.y" { } -#line 4241 "src/Slice/Grammar.cpp" +#line 4242 "src/Slice/Grammar.cpp" break; case 194: /* keyword: ICE_BOOL */ -#line 2238 "src/Slice/Grammar.y" +#line 2239 "src/Slice/Grammar.y" { } -#line 4247 "src/Slice/Grammar.cpp" +#line 4248 "src/Slice/Grammar.cpp" break; case 195: /* keyword: ICE_BYTE */ -#line 2239 "src/Slice/Grammar.y" +#line 2240 "src/Slice/Grammar.y" { } -#line 4253 "src/Slice/Grammar.cpp" +#line 4254 "src/Slice/Grammar.cpp" break; case 196: /* keyword: ICE_SHORT */ -#line 2240 "src/Slice/Grammar.y" +#line 2241 "src/Slice/Grammar.y" { } -#line 4259 "src/Slice/Grammar.cpp" +#line 4260 "src/Slice/Grammar.cpp" break; case 197: /* keyword: ICE_INT */ -#line 2241 "src/Slice/Grammar.y" +#line 2242 "src/Slice/Grammar.y" { } -#line 4265 "src/Slice/Grammar.cpp" +#line 4266 "src/Slice/Grammar.cpp" break; case 198: /* keyword: ICE_LONG */ -#line 2242 "src/Slice/Grammar.y" +#line 2243 "src/Slice/Grammar.y" { } -#line 4271 "src/Slice/Grammar.cpp" +#line 4272 "src/Slice/Grammar.cpp" break; case 199: /* keyword: ICE_FLOAT */ -#line 2243 "src/Slice/Grammar.y" +#line 2244 "src/Slice/Grammar.y" { } -#line 4277 "src/Slice/Grammar.cpp" +#line 4278 "src/Slice/Grammar.cpp" break; case 200: /* keyword: ICE_DOUBLE */ -#line 2244 "src/Slice/Grammar.y" +#line 2245 "src/Slice/Grammar.y" { } -#line 4283 "src/Slice/Grammar.cpp" +#line 4284 "src/Slice/Grammar.cpp" break; case 201: /* keyword: ICE_STRING */ -#line 2245 "src/Slice/Grammar.y" +#line 2246 "src/Slice/Grammar.y" { } -#line 4289 "src/Slice/Grammar.cpp" +#line 4290 "src/Slice/Grammar.cpp" break; case 202: /* keyword: ICE_OBJECT */ -#line 2246 "src/Slice/Grammar.y" +#line 2247 "src/Slice/Grammar.y" { } -#line 4295 "src/Slice/Grammar.cpp" +#line 4296 "src/Slice/Grammar.cpp" break; case 203: /* keyword: ICE_CONST */ -#line 2247 "src/Slice/Grammar.y" +#line 2248 "src/Slice/Grammar.y" { } -#line 4301 "src/Slice/Grammar.cpp" +#line 4302 "src/Slice/Grammar.cpp" break; case 204: /* keyword: ICE_FALSE */ -#line 2248 "src/Slice/Grammar.y" +#line 2249 "src/Slice/Grammar.y" { } -#line 4307 "src/Slice/Grammar.cpp" +#line 4308 "src/Slice/Grammar.cpp" break; case 205: /* keyword: ICE_TRUE */ -#line 2249 "src/Slice/Grammar.y" +#line 2250 "src/Slice/Grammar.y" { } -#line 4313 "src/Slice/Grammar.cpp" +#line 4314 "src/Slice/Grammar.cpp" break; case 206: /* keyword: ICE_IDEMPOTENT */ -#line 2250 "src/Slice/Grammar.y" +#line 2251 "src/Slice/Grammar.y" { } -#line 4319 "src/Slice/Grammar.cpp" +#line 4320 "src/Slice/Grammar.cpp" break; case 207: /* keyword: ICE_TAG */ -#line 2251 "src/Slice/Grammar.y" +#line 2252 "src/Slice/Grammar.y" { } -#line 4325 "src/Slice/Grammar.cpp" +#line 4326 "src/Slice/Grammar.cpp" break; case 208: /* keyword: ICE_OPTIONAL */ -#line 2252 "src/Slice/Grammar.y" +#line 2253 "src/Slice/Grammar.y" { } -#line 4331 "src/Slice/Grammar.cpp" +#line 4332 "src/Slice/Grammar.cpp" break; case 209: /* keyword: ICE_VALUE */ -#line 2253 "src/Slice/Grammar.y" +#line 2254 "src/Slice/Grammar.y" { } -#line 4337 "src/Slice/Grammar.cpp" +#line 4338 "src/Slice/Grammar.cpp" break; -#line 4341 "src/Slice/Grammar.cpp" +#line 4342 "src/Slice/Grammar.cpp" default: break; @@ -4447,4 +4448,4 @@ yyparse(void) return yyresult; } -#line 2256 "src/Slice/Grammar.y" +#line 2257 "src/Slice/Grammar.y" diff --git a/cpp/src/Slice/Grammar.y b/cpp/src/Slice/Grammar.y index e532fab0a19..94127837f6a 100644 --- a/cpp/src/Slice/Grammar.y +++ b/cpp/src/Slice/Grammar.y @@ -388,7 +388,6 @@ module_def | ICE_MODULE ICE_SCOPED_IDENTIFIER { auto ident = dynamic_pointer_cast($2); - ContainerPtr cont = currentUnit->currentContainer(); // Split the scoped-identifier token into separate module names. vector modules; @@ -402,6 +401,7 @@ module_def modules.push_back(ident->v.substr(startPos)); // Create the nested modules. + ContainerPtr cont = currentUnit->currentContainer(); for (size_t i = 0; i < modules.size(); i++) { const auto currentModuleName = modules[i]; @@ -437,14 +437,15 @@ module_def { // We need to pop '(N+1)' modules off the container stack, to navigate out of the nested module. // Where `N` is the number of scope separators ("::"). - size_t scopePos = 0; - auto ident = dynamic_pointer_cast($2); - while ((scopePos = ident->v.find("::", scopePos + 2)) != string::npos) + size_t startPos = 0; + size_t endPos; + while ((endPos = ident->v.find("::", startPos)) != string::npos) { currentUnit->popContainer(); + startPos = endPos + 2; } - // Set the 'return value' to the outer-most module, before we pop it off the stack.. + // Set the 'return value' to the outer-most module, before we pop it off the stack. // Whichever module we return, is the one that metadata will be applied to. $$ = currentUnit->currentContainer(); currentUnit->popContainer(); diff --git a/cpp/src/Slice/SliceUtil.cpp b/cpp/src/Slice/SliceUtil.cpp index 293735499b1..40874a1725b 100644 --- a/cpp/src/Slice/SliceUtil.cpp +++ b/cpp/src/Slice/SliceUtil.cpp @@ -484,6 +484,13 @@ Slice::checkIdentifier(const string& id) } bool isValid = true; + // Check that the identifier isn't empty. + if (name.empty()) + { + currentUnit->error("missing identifier: illegal empty identifier"); + isValid = false; + } + // check the identifier for reserved suffixes static const string suffixBlacklist[] = {"Helper", "Holder", "Prx", "Ptr"}; for (size_t i = 0; i < sizeof(suffixBlacklist) / sizeof(*suffixBlacklist); ++i)