diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/prebuilt/wast-parser-gen.cc | 1508 | ||||
-rw-r--r-- | src/wast-parser.y | 452 |
2 files changed, 872 insertions, 1088 deletions
diff --git a/src/prebuilt/wast-parser-gen.cc b/src/prebuilt/wast-parser-gen.cc index 2a7057ba..5b9bd880 100644 --- a/src/prebuilt/wast-parser-gen.cc +++ b/src/prebuilt/wast-parser-gen.cc @@ -163,26 +163,22 @@ namespace wabt { -static bool is_power_of_two(uint32_t x) { +static bool IsPowerOfTwo(uint32_t x) { return x && ((x & (x - 1)) == 0); } -static Result parse_const(Type type, - LiteralType literal_type, - const char* s, - const char* end, - Const* out); +Result ParseConst(Type type, const Literal& literal, Const* out); -static void reverse_bindings(TypeVector*, BindingHash*); +static void ReverseBindings(TypeVector*, BindingHash*); -static bool is_empty_signature(const FuncSignature* sig); +static bool IsEmptySignature(const FuncSignature* sig); -static void check_import_ordering(Location* loc, - WastLexer* lexer, - WastParser* parser, - Module* module, - const ModuleFieldList&); -static void append_module_fields(Module*, ModuleFieldList*); +static void CheckImportOrdering(Location* loc, + WastLexer* lexer, + WastParser* parser, + Module* module, + const ModuleFieldList&); +static void AppendModuleFields(Module*, ModuleFieldList&&); class BinaryErrorHandlerModule : public ErrorHandler { public: @@ -263,12 +259,30 @@ void RemoveEscapes(const TextVector& texts, OutputIter out) { RemoveEscapes(text, out); } +template <typename T> +T MoveAndDelete(T* ptr) { + T result = std::move(*ptr); + delete ptr; + return result; +} + +template <typename T, typename U> +void PrependAndDelete(T& dest, U* source) { + dest.insert(dest.begin(), std::begin(*source), std::end(*source)); + delete source; +} + +template <typename T, typename U> +void AppendAndDelete(T& dest, U* source) { + dest.insert(dest.end(), std::begin(*source), std::end(*source)); + delete source; +} #define wabt_wast_parser_lex(...) lexer->GetToken(__VA_ARGS__, parser) #define wabt_wast_parser_error wast_parser_error -#line 272 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:339 */ +#line 286 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus @@ -423,7 +437,7 @@ int wabt_wast_parser_parse (::wabt::WastLexer* lexer, ::wabt::WastParser* parser /* Copy the second part of user declarations. */ -#line 427 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:358 */ +#line 441 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:358 */ #ifdef short # undef short @@ -730,28 +744,28 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 317, 317, 321, 327, 328, 332, 341, 342, 348, - 351, 356, 364, 368, 369, 374, 383, 384, 392, 398, - 404, 409, 416, 422, 433, 436, 439, 445, 448, 453, - 454, 461, 462, 465, 469, 470, 474, 475, 492, 493, - 509, 513, 517, 521, 524, 527, 530, 533, 537, 541, - 545, 548, 552, 556, 560, 564, 568, 572, 576, 579, - 582, 593, 596, 599, 602, 605, 608, 611, 615, 622, - 629, 636, 643, 652, 662, 665, 670, 677, 685, 693, - 694, 698, 703, 710, 714, 719, 726, 733, 739, 749, - 755, 765, 768, 774, 779, 787, 794, 797, 804, 810, - 818, 825, 833, 843, 848, 854, 860, 861, 868, 869, - 876, 881, 888, 895, 910, 917, 920, 929, 935, 944, - 951, 952, 958, 968, 969, 978, 985, 986, 992, 1002, - 1003, 1012, 1019, 1024, 1029, 1040, 1043, 1047, 1057, 1069, - 1084, 1087, 1093, 1099, 1119, 1129, 1141, 1156, 1159, 1165, - 1171, 1194, 1209, 1215, 1221, 1232, 1242, 1251, 1258, 1265, - 1272, 1280, 1291, 1301, 1307, 1313, 1319, 1325, 1333, 1342, - 1353, 1359, 1370, 1377, 1378, 1379, 1380, 1381, 1382, 1383, - 1384, 1385, 1386, 1387, 1391, 1392, 1396, 1402, 1411, 1431, - 1438, 1441, 1447, 1465, 1473, 1484, 1496, 1508, 1512, 1516, - 1520, 1524, 1527, 1530, 1533, 1537, 1544, 1547, 1548, 1551, - 1560, 1564, 1571, 1582, 1583, 1590, 1593, 1656, 1665 + 0, 331, 331, 335, 341, 342, 346, 355, 356, 362, + 365, 370, 378, 382, 383, 387, 396, 397, 404, 410, + 416, 421, 428, 434, 445, 448, 451, 457, 460, 465, + 466, 472, 473, 476, 480, 481, 485, 486, 503, 504, + 520, 524, 528, 532, 535, 538, 541, 544, 547, 550, + 553, 556, 559, 562, 565, 568, 571, 574, 577, 580, + 583, 593, 596, 599, 602, 605, 608, 611, 614, 620, + 626, 632, 638, 645, 654, 657, 661, 667, 673, 680, + 681, 685, 690, 697, 701, 706, 712, 718, 723, 732, + 737, 746, 749, 755, 760, 768, 774, 777, 782, 787, + 793, 799, 805, 814, 819, 825, 831, 832, 838, 839, + 845, 850, 855, 862, 876, 882, 885, 893, 899, 908, + 915, 916, 920, 929, 930, 937, 944, 945, 949, 958, + 959, 966, 973, 977, 981, 992, 995, 999, 1006, 1016, + 1030, 1033, 1039, 1045, 1064, 1071, 1081, 1095, 1098, 1104, + 1110, 1132, 1146, 1151, 1157, 1168, 1176, 1183, 1189, 1195, + 1201, 1209, 1218, 1226, 1231, 1236, 1241, 1246, 1253, 1261, + 1271, 1276, 1285, 1291, 1292, 1293, 1294, 1295, 1296, 1297, + 1298, 1299, 1300, 1301, 1305, 1306, 1310, 1315, 1323, 1343, + 1350, 1353, 1359, 1376, 1382, 1391, 1400, 1410, 1413, 1416, + 1419, 1422, 1425, 1428, 1431, 1434, 1440, 1443, 1444, 1447, + 1454, 1458, 1465, 1475, 1476, 1483, 1486, 1548, 1557 }; #endif @@ -1782,369 +1796,369 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio switch (yytype) { case 83: /* text_list */ -#line 301 "src/wast-parser.y" /* yacc.c:1257 */ +#line 315 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).texts); } -#line 1788 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1802 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 84: /* text_list_opt */ -#line 301 "src/wast-parser.y" /* yacc.c:1257 */ +#line 315 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).texts); } -#line 1794 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1808 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 85: /* quoted_text */ -#line 300 "src/wast-parser.y" /* yacc.c:1257 */ +#line 314 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).string); } -#line 1800 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1814 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 86: /* value_type_list */ -#line 302 "src/wast-parser.y" /* yacc.c:1257 */ +#line 316 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).types); } -#line 1806 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1820 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 88: /* global_type */ -#line 294 "src/wast-parser.y" /* yacc.c:1257 */ +#line 308 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).global); } -#line 1812 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1826 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 89: /* func_type */ -#line 293 "src/wast-parser.y" /* yacc.c:1257 */ +#line 307 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).func_sig); } -#line 1818 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1832 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 90: /* func_sig */ -#line 293 "src/wast-parser.y" /* yacc.c:1257 */ +#line 307 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).func_sig); } -#line 1824 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1838 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 91: /* func_sig_result */ -#line 293 "src/wast-parser.y" /* yacc.c:1257 */ +#line 307 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).func_sig); } -#line 1830 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1844 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 93: /* memory_sig */ -#line 296 "src/wast-parser.y" /* yacc.c:1257 */ +#line 310 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).memory); } -#line 1836 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1850 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 95: /* type_use */ -#line 303 "src/wast-parser.y" /* yacc.c:1257 */ +#line 317 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).var); } -#line 1842 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1856 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 98: /* var */ -#line 303 "src/wast-parser.y" /* yacc.c:1257 */ +#line 317 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).var); } -#line 1848 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1862 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 99: /* var_list */ -#line 304 "src/wast-parser.y" /* yacc.c:1257 */ +#line 318 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).vars); } -#line 1854 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1868 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 100: /* bind_var_opt */ -#line 300 "src/wast-parser.y" /* yacc.c:1257 */ +#line 314 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).string); } -#line 1860 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1874 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 101: /* bind_var */ -#line 300 "src/wast-parser.y" /* yacc.c:1257 */ +#line 314 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).string); } -#line 1866 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1880 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 102: /* labeling_opt */ -#line 300 "src/wast-parser.y" /* yacc.c:1257 */ +#line 314 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).string); } -#line 1872 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1886 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 105: /* instr */ -#line 290 "src/wast-parser.y" /* yacc.c:1257 */ +#line 304 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).expr_list); } -#line 1878 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1892 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 106: /* plain_instr */ -#line 289 "src/wast-parser.y" /* yacc.c:1257 */ +#line 303 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).expr); } -#line 1884 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1898 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 107: /* block_instr */ -#line 289 "src/wast-parser.y" /* yacc.c:1257 */ +#line 303 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).expr); } -#line 1890 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1904 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 108: /* block_sig */ -#line 302 "src/wast-parser.y" /* yacc.c:1257 */ +#line 316 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).types); } -#line 1896 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1910 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 109: /* block */ -#line 284 "src/wast-parser.y" /* yacc.c:1257 */ +#line 298 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).block); } -#line 1902 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1916 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 114: /* expr */ -#line 290 "src/wast-parser.y" /* yacc.c:1257 */ +#line 304 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).expr_list); } -#line 1908 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1922 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 115: /* expr1 */ -#line 290 "src/wast-parser.y" /* yacc.c:1257 */ +#line 304 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).expr_list); } -#line 1914 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1928 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 119: /* if_block */ -#line 290 "src/wast-parser.y" /* yacc.c:1257 */ +#line 304 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).expr_list); } -#line 1920 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1934 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 120: /* if_ */ -#line 290 "src/wast-parser.y" /* yacc.c:1257 */ +#line 304 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).expr_list); } -#line 1926 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1940 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 124: /* instr_list */ -#line 290 "src/wast-parser.y" /* yacc.c:1257 */ +#line 304 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).expr_list); } -#line 1932 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1946 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 125: /* expr_list */ -#line 290 "src/wast-parser.y" /* yacc.c:1257 */ +#line 304 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).expr_list); } -#line 1938 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1952 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 126: /* const_expr */ -#line 290 "src/wast-parser.y" /* yacc.c:1257 */ +#line 304 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).expr_list); } -#line 1944 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1958 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 129: /* func */ -#line 291 "src/wast-parser.y" /* yacc.c:1257 */ +#line 305 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).module_fields); } -#line 1950 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1964 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 130: /* func_fields */ -#line 291 "src/wast-parser.y" /* yacc.c:1257 */ +#line 305 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).module_fields); } -#line 1956 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1970 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 131: /* func_fields_import */ -#line 292 "src/wast-parser.y" /* yacc.c:1257 */ +#line 306 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).func); } -#line 1962 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1976 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 132: /* func_fields_import1 */ -#line 292 "src/wast-parser.y" /* yacc.c:1257 */ +#line 306 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).func); } -#line 1968 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1982 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 133: /* func_fields_import_result */ -#line 292 "src/wast-parser.y" /* yacc.c:1257 */ +#line 306 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).func); } -#line 1974 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1988 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 134: /* func_fields_body */ -#line 292 "src/wast-parser.y" /* yacc.c:1257 */ +#line 306 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).func); } -#line 1980 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 1994 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 135: /* func_fields_body1 */ -#line 292 "src/wast-parser.y" /* yacc.c:1257 */ +#line 306 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).func); } -#line 1986 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2000 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 136: /* func_result_body */ -#line 292 "src/wast-parser.y" /* yacc.c:1257 */ +#line 306 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).func); } -#line 1992 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2006 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 137: /* func_body */ -#line 292 "src/wast-parser.y" /* yacc.c:1257 */ +#line 306 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).func); } -#line 1998 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2012 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 138: /* func_body1 */ -#line 292 "src/wast-parser.y" /* yacc.c:1257 */ +#line 306 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).func); } -#line 2004 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2018 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 139: /* offset */ -#line 290 "src/wast-parser.y" /* yacc.c:1257 */ +#line 304 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).expr_list); } -#line 2010 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2024 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 141: /* table */ -#line 291 "src/wast-parser.y" /* yacc.c:1257 */ +#line 305 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).module_fields); } -#line 2016 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2030 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 142: /* table_fields */ -#line 291 "src/wast-parser.y" /* yacc.c:1257 */ +#line 305 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).module_fields); } -#line 2022 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2036 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 144: /* memory */ -#line 291 "src/wast-parser.y" /* yacc.c:1257 */ +#line 305 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).module_fields); } -#line 2028 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2042 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 145: /* memory_fields */ -#line 291 "src/wast-parser.y" /* yacc.c:1257 */ +#line 305 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).module_fields); } -#line 2034 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2048 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 146: /* global */ -#line 291 "src/wast-parser.y" /* yacc.c:1257 */ +#line 305 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).module_fields); } -#line 2040 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2054 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 147: /* global_fields */ -#line 291 "src/wast-parser.y" /* yacc.c:1257 */ +#line 305 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).module_fields); } -#line 2046 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2060 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 148: /* import_desc */ -#line 295 "src/wast-parser.y" /* yacc.c:1257 */ +#line 309 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).import); } -#line 2052 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2066 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 150: /* inline_import */ -#line 295 "src/wast-parser.y" /* yacc.c:1257 */ +#line 309 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).import); } -#line 2058 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2072 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 151: /* export_desc */ -#line 288 "src/wast-parser.y" /* yacc.c:1257 */ +#line 302 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).export_); } -#line 2064 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2078 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 153: /* inline_export */ -#line 288 "src/wast-parser.y" /* yacc.c:1257 */ +#line 302 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).export_); } -#line 2070 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2084 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 156: /* module_field */ -#line 291 "src/wast-parser.y" /* yacc.c:1257 */ +#line 305 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).module_fields); } -#line 2076 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2090 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 157: /* module_fields_opt */ -#line 297 "src/wast-parser.y" /* yacc.c:1257 */ +#line 311 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).module); } -#line 2082 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2096 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 158: /* module_fields */ -#line 297 "src/wast-parser.y" /* yacc.c:1257 */ +#line 311 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).module); } -#line 2088 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2102 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 159: /* module */ -#line 297 "src/wast-parser.y" /* yacc.c:1257 */ +#line 311 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).module); } -#line 2094 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2108 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 160: /* inline_module */ -#line 297 "src/wast-parser.y" /* yacc.c:1257 */ +#line 311 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).module); } -#line 2100 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2114 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 161: /* script_var_opt */ -#line 303 "src/wast-parser.y" /* yacc.c:1257 */ +#line 317 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).var); } -#line 2106 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2120 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 162: /* script_module */ -#line 298 "src/wast-parser.y" /* yacc.c:1257 */ +#line 312 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).script_module); } -#line 2112 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2126 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 163: /* action */ -#line 283 "src/wast-parser.y" /* yacc.c:1257 */ +#line 297 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).action); } -#line 2118 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2132 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 164: /* assertion */ -#line 285 "src/wast-parser.y" /* yacc.c:1257 */ +#line 299 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).command); } -#line 2124 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2138 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 165: /* cmd */ -#line 285 "src/wast-parser.y" /* yacc.c:1257 */ +#line 299 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).command); } -#line 2130 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2144 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 166: /* cmd_list */ -#line 286 "src/wast-parser.y" /* yacc.c:1257 */ +#line 300 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).commands); } -#line 2136 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2150 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 168: /* const_list */ -#line 287 "src/wast-parser.y" /* yacc.c:1257 */ +#line 301 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).consts); } -#line 2142 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2156 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; case 169: /* script */ -#line 299 "src/wast-parser.y" /* yacc.c:1257 */ +#line 313 "src/wast-parser.y" /* yacc.c:1257 */ { delete ((*yyvaluep).script); } -#line 2148 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ +#line 2162 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */ break; @@ -2436,168 +2450,166 @@ yyreduce: switch (yyn) { case 2: -#line 317 "src/wast-parser.y" /* yacc.c:1646 */ +#line 331 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.texts) = new TextVector(); (yyval.texts)->emplace_back((yyvsp[0].t_text).to_string()); } -#line 2445 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2459 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 3: -#line 321 "src/wast-parser.y" /* yacc.c:1646 */ +#line 335 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.texts) = (yyvsp[-1].texts); (yyval.texts)->emplace_back((yyvsp[0].t_text).to_string()); } -#line 2454 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2468 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 4: -#line 327 "src/wast-parser.y" /* yacc.c:1646 */ +#line 341 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.texts) = new TextVector(); } -#line 2460 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2474 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 6: -#line 332 "src/wast-parser.y" /* yacc.c:1646 */ +#line 346 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.string) = new std::string(); RemoveEscapes((yyvsp[0].t_text).to_string_view(), std::back_inserter(*(yyval.string))); } -#line 2469 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2483 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 7: -#line 341 "src/wast-parser.y" /* yacc.c:1646 */ +#line 355 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.types) = new TypeVector(); } -#line 2475 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2489 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 8: -#line 342 "src/wast-parser.y" /* yacc.c:1646 */ +#line 356 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.types) = (yyvsp[-1].types); (yyval.types)->push_back((yyvsp[0].t_type)); } -#line 2484 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2498 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 9: -#line 348 "src/wast-parser.y" /* yacc.c:1646 */ +#line 362 "src/wast-parser.y" /* yacc.c:1646 */ {} -#line 2490 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2504 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 10: -#line 351 "src/wast-parser.y" /* yacc.c:1646 */ +#line 365 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.global) = new Global(); (yyval.global)->type = (yyvsp[0].t_type); (yyval.global)->mutable_ = false; } -#line 2500 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2514 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 11: -#line 356 "src/wast-parser.y" /* yacc.c:1646 */ +#line 370 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.global) = new Global(); (yyval.global)->type = (yyvsp[-1].t_type); (yyval.global)->mutable_ = true; } -#line 2510 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2524 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 12: -#line 364 "src/wast-parser.y" /* yacc.c:1646 */ +#line 378 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func_sig) = (yyvsp[-1].func_sig); } -#line 2516 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2530 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 14: -#line 369 "src/wast-parser.y" /* yacc.c:1646 */ +#line 383 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func_sig) = (yyvsp[0].func_sig); - (yyval.func_sig)->param_types.insert((yyval.func_sig)->param_types.begin(), (yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end()); - delete (yyvsp[-2].types); + PrependAndDelete((yyval.func_sig)->param_types, (yyvsp[-2].types)); } -#line 2526 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2539 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 15: -#line 374 "src/wast-parser.y" /* yacc.c:1646 */ +#line 387 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func_sig) = (yyvsp[0].func_sig); (yyval.func_sig)->param_types.insert((yyval.func_sig)->param_types.begin(), (yyvsp[-2].t_type)); // Ignore bind_var. delete (yyvsp[-3].string); } -#line 2537 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2550 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 16: -#line 383 "src/wast-parser.y" /* yacc.c:1646 */ +#line 396 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func_sig) = new FuncSignature(); } -#line 2543 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2556 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 17: -#line 384 "src/wast-parser.y" /* yacc.c:1646 */ +#line 397 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func_sig) = (yyvsp[0].func_sig); - (yyval.func_sig)->result_types.insert((yyval.func_sig)->result_types.begin(), (yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end()); - delete (yyvsp[-2].types); + PrependAndDelete((yyval.func_sig)->result_types, (yyvsp[-2].types)); } -#line 2553 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2565 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 18: -#line 392 "src/wast-parser.y" /* yacc.c:1646 */ +#line 404 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.table) = new Table(); (yyval.table)->elem_limits = (yyvsp[-1].limits); } -#line 2562 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2574 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 19: -#line 398 "src/wast-parser.y" /* yacc.c:1646 */ +#line 410 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.memory) = new Memory(); (yyval.memory)->page_limits = (yyvsp[0].limits); } -#line 2571 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2583 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 20: -#line 404 "src/wast-parser.y" /* yacc.c:1646 */ +#line 416 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.limits).has_max = false; (yyval.limits).initial = (yyvsp[0].u64); (yyval.limits).max = 0; } -#line 2581 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2593 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 21: -#line 409 "src/wast-parser.y" /* yacc.c:1646 */ +#line 421 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.limits).has_max = true; (yyval.limits).initial = (yyvsp[-1].u64); (yyval.limits).max = (yyvsp[0].u64); } -#line 2591 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2603 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 22: -#line 416 "src/wast-parser.y" /* yacc.c:1646 */ +#line 428 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.var) = (yyvsp[-1].var); } -#line 2597 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2609 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 23: -#line 422 "src/wast-parser.y" /* yacc.c:1646 */ +#line 434 "src/wast-parser.y" /* yacc.c:1646 */ { string_view sv = (yyvsp[0].t_literal).text.to_string_view(); if (Failed(parse_uint64(sv.begin(), sv.end(), &(yyval.u64)))) { @@ -2606,91 +2618,90 @@ yyreduce: WABT_PRINTF_STRING_VIEW_ARG(sv)); } } -#line 2610 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2622 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 24: -#line 433 "src/wast-parser.y" /* yacc.c:1646 */ +#line 445 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.literal) = new Literal((yyvsp[0].t_literal)); } -#line 2618 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2630 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 25: -#line 436 "src/wast-parser.y" /* yacc.c:1646 */ +#line 448 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.literal) = new Literal((yyvsp[0].t_literal)); } -#line 2626 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2638 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 26: -#line 439 "src/wast-parser.y" /* yacc.c:1646 */ +#line 451 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.literal) = new Literal((yyvsp[0].t_literal)); } -#line 2634 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2646 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 27: -#line 445 "src/wast-parser.y" /* yacc.c:1646 */ +#line 457 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.var) = new Var((yyvsp[0].u64), (yylsp[0])); } -#line 2642 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2654 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 28: -#line 448 "src/wast-parser.y" /* yacc.c:1646 */ +#line 460 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.var) = new Var((yyvsp[0].t_text).to_string_view(), (yylsp[0])); } -#line 2650 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2662 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 29: -#line 453 "src/wast-parser.y" /* yacc.c:1646 */ +#line 465 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.vars) = new VarVector(); } -#line 2656 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2668 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 30: -#line 454 "src/wast-parser.y" /* yacc.c:1646 */ +#line 466 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.vars) = (yyvsp[-1].vars); - (yyval.vars)->emplace_back(std::move(*(yyvsp[0].var))); - delete (yyvsp[0].var); + (yyval.vars)->emplace_back(MoveAndDelete((yyvsp[0].var))); } -#line 2666 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2677 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 31: -#line 461 "src/wast-parser.y" /* yacc.c:1646 */ +#line 472 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.string) = new std::string(); } -#line 2672 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2683 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 33: -#line 465 "src/wast-parser.y" /* yacc.c:1646 */ +#line 476 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.string) = new std::string((yyvsp[0].t_text).to_string()); } -#line 2678 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2689 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 34: -#line 469 "src/wast-parser.y" /* yacc.c:1646 */ +#line 480 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.string) = new std::string(); } -#line 2684 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2695 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 36: -#line 474 "src/wast-parser.y" /* yacc.c:1646 */ +#line 485 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.u64) = 0; } -#line 2690 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2701 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 37: -#line 475 "src/wast-parser.y" /* yacc.c:1646 */ +#line 486 "src/wast-parser.y" /* yacc.c:1646 */ { uint64_t offset64; string_view sv = (yyvsp[0].t_text).to_string_view(); @@ -2706,17 +2717,17 @@ yyreduce: } (yyval.u64) = static_cast<uint32_t>(offset64); } -#line 2710 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2721 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 38: -#line 492 "src/wast-parser.y" /* yacc.c:1646 */ +#line 503 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.u32) = USE_NATURAL_ALIGNMENT; } -#line 2716 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2727 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 39: -#line 493 "src/wast-parser.y" /* yacc.c:1646 */ +#line 504 "src/wast-parser.y" /* yacc.c:1646 */ { string_view sv = (yyvsp[0].t_text).to_string_view(); if (Failed(parse_int32(sv.begin(), sv.end(), &(yyval.u32), @@ -2726,188 +2737,177 @@ yyreduce: WABT_PRINTF_STRING_VIEW_ARG(sv)); } - if ((yyval.u32) != WABT_USE_NATURAL_ALIGNMENT && !is_power_of_two((yyval.u32))) { + if ((yyval.u32) != WABT_USE_NATURAL_ALIGNMENT && !IsPowerOfTwo((yyval.u32))) { wast_parser_error(&(yylsp[0]), lexer, parser, "alignment must be power-of-two"); } } -#line 2734 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2745 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 40: -#line 509 "src/wast-parser.y" /* yacc.c:1646 */ +#line 520 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr_list) = new ExprList((yyvsp[0].expr)); (yyval.expr_list)->back().loc = (yylsp[0]); } -#line 2743 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2754 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 41: -#line 513 "src/wast-parser.y" /* yacc.c:1646 */ +#line 524 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr_list) = new ExprList((yyvsp[0].expr)); (yyval.expr_list)->back().loc = (yylsp[0]); } -#line 2752 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2763 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 43: -#line 521 "src/wast-parser.y" /* yacc.c:1646 */ +#line 532 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr) = new UnreachableExpr(); } -#line 2760 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2771 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 44: -#line 524 "src/wast-parser.y" /* yacc.c:1646 */ +#line 535 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr) = new NopExpr(); } -#line 2768 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2779 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 45: -#line 527 "src/wast-parser.y" /* yacc.c:1646 */ +#line 538 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr) = new DropExpr(); } -#line 2776 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2787 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 46: -#line 530 "src/wast-parser.y" /* yacc.c:1646 */ +#line 541 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr) = new SelectExpr(); } -#line 2784 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2795 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 47: -#line 533 "src/wast-parser.y" /* yacc.c:1646 */ +#line 544 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.expr) = new BrExpr(std::move(*(yyvsp[0].var))); - delete (yyvsp[0].var); + (yyval.expr) = new BrExpr(MoveAndDelete((yyvsp[0].var))); } -#line 2793 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2803 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 48: -#line 537 "src/wast-parser.y" /* yacc.c:1646 */ +#line 547 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.expr) = new BrIfExpr(std::move(*(yyvsp[0].var))); - delete (yyvsp[0].var); + (yyval.expr) = new BrIfExpr(MoveAndDelete((yyvsp[0].var))); } -#line 2802 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2811 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 49: -#line 541 "src/wast-parser.y" /* yacc.c:1646 */ +#line 550 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.expr) = new BrTableExpr((yyvsp[-1].vars), std::move(*(yyvsp[0].var))); - delete (yyvsp[0].var); + (yyval.expr) = new BrTableExpr((yyvsp[-1].vars), MoveAndDelete((yyvsp[0].var))); } -#line 2811 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2819 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 50: -#line 545 "src/wast-parser.y" /* yacc.c:1646 */ +#line 553 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr) = new ReturnExpr(); } -#line 2819 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2827 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 51: -#line 548 "src/wast-parser.y" /* yacc.c:1646 */ +#line 556 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.expr) = new CallExpr(std::move(*(yyvsp[0].var))); - delete (yyvsp[0].var); + (yyval.expr) = new CallExpr(MoveAndDelete((yyvsp[0].var))); } -#line 2828 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2835 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 52: -#line 552 "src/wast-parser.y" /* yacc.c:1646 */ +#line 559 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.expr) = new CallIndirectExpr(std::move(*(yyvsp[0].var))); - delete (yyvsp[0].var); + (yyval.expr) = new CallIndirectExpr(MoveAndDelete((yyvsp[0].var))); } -#line 2837 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2843 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 53: -#line 556 "src/wast-parser.y" /* yacc.c:1646 */ +#line 562 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.expr) = new GetLocalExpr(std::move(*(yyvsp[0].var))); - delete (yyvsp[0].var); + (yyval.expr) = new GetLocalExpr(MoveAndDelete((yyvsp[0].var))); } -#line 2846 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2851 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 54: -#line 560 "src/wast-parser.y" /* yacc.c:1646 */ +#line 565 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.expr) = new SetLocalExpr(std::move(*(yyvsp[0].var))); - delete (yyvsp[0].var); + (yyval.expr) = new SetLocalExpr(MoveAndDelete((yyvsp[0].var))); } -#line 2855 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2859 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 55: -#line 564 "src/wast-parser.y" /* yacc.c:1646 */ +#line 568 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.expr) = new TeeLocalExpr(std::move(*(yyvsp[0].var))); - delete (yyvsp[0].var); + (yyval.expr) = new TeeLocalExpr(MoveAndDelete((yyvsp[0].var))); } -#line 2864 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2867 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 56: -#line 568 "src/wast-parser.y" /* yacc.c:1646 */ +#line 571 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.expr) = new GetGlobalExpr(std::move(*(yyvsp[0].var))); - delete (yyvsp[0].var); + (yyval.expr) = new GetGlobalExpr(MoveAndDelete((yyvsp[0].var))); } -#line 2873 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2875 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 57: -#line 572 "src/wast-parser.y" /* yacc.c:1646 */ +#line 574 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.expr) = new SetGlobalExpr(std::move(*(yyvsp[0].var))); - delete (yyvsp[0].var); + (yyval.expr) = new SetGlobalExpr(MoveAndDelete((yyvsp[0].var))); } -#line 2882 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2883 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 58: -#line 576 "src/wast-parser.y" /* yacc.c:1646 */ +#line 577 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr) = new LoadExpr((yyvsp[-2].t_opcode), (yyvsp[0].u32), (yyvsp[-1].u64)); } -#line 2890 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2891 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 59: -#line 579 "src/wast-parser.y" /* yacc.c:1646 */ +#line 580 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr) = new StoreExpr((yyvsp[-2].t_opcode), (yyvsp[0].u32), (yyvsp[-1].u64)); } -#line 2898 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2899 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 60: -#line 582 "src/wast-parser.y" /* yacc.c:1646 */ +#line 583 "src/wast-parser.y" /* yacc.c:1646 */ { Const const_; const_.loc = (yylsp[-1]); - string_view sv = (yyvsp[0].literal)->text; - if (Failed(parse_const((yyvsp[-1].t_type), (yyvsp[0].literal)->type, sv.begin(), sv.end(), &const_))) { + auto literal = MoveAndDelete((yyvsp[0].literal)); + if (Failed(ParseConst((yyvsp[-1].t_type), literal, &const_))) { wast_parser_error(&(yylsp[0]), lexer, parser, "invalid literal \"%s\"", - (yyvsp[0].literal)->text.c_str()); + literal.text.c_str()); } - delete (yyvsp[0].literal); (yyval.expr) = new ConstExpr(const_); } #line 2914 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ @@ -2964,719 +2964,665 @@ yyreduce: case 67: #line 611 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.expr) = new ThrowExpr(std::move(*(yyvsp[0].var))); - delete (yyvsp[0].var); + (yyval.expr) = new ThrowExpr(MoveAndDelete((yyvsp[0].var))); } -#line 2971 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2970 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 68: -#line 615 "src/wast-parser.y" /* yacc.c:1646 */ +#line 614 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.expr) = new RethrowExpr(std::move(*(yyvsp[0].var))); - delete (yyvsp[0].var); + (yyval.expr) = new RethrowExpr(MoveAndDelete((yyvsp[0].var))); } -#line 2980 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2978 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 69: -#line 622 "src/wast-parser.y" /* yacc.c:1646 */ +#line 620 "src/wast-parser.y" /* yacc.c:1646 */ { auto expr = new BlockExpr((yyvsp[-2].block)); - expr->block->label = std::move(*(yyvsp[-3].string)); - delete (yyvsp[-3].string); + expr->block->label = MoveAndDelete((yyvsp[-3].string)); CHECK_END_LABEL((yylsp[0]), expr->block->label, (yyvsp[0].string)); (yyval.expr) = expr; } -#line 2992 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 2989 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 70: -#line 629 "src/wast-parser.y" /* yacc.c:1646 */ +#line 626 "src/wast-parser.y" /* yacc.c:1646 */ { auto expr = new LoopExpr((yyvsp[-2].block)); - expr->block->label = std::move(*(yyvsp[-3].string)); - delete (yyvsp[-3].string); + expr->block->label = MoveAndDelete((yyvsp[-3].string)); CHECK_END_LABEL((yylsp[0]), expr->block->label, (yyvsp[0].string)); (yyval.expr) = expr; } -#line 3004 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3000 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 71: -#line 636 "src/wast-parser.y" /* yacc.c:1646 */ +#line 632 "src/wast-parser.y" /* yacc.c:1646 */ { auto expr = new IfExpr((yyvsp[-2].block)); - expr->true_->label = std::move(*(yyvsp[-3].string)); - delete (yyvsp[-3].string); + expr->true_->label = MoveAndDelete((yyvsp[-3].string)); CHECK_END_LABEL((yylsp[0]), expr->true_->label, (yyvsp[0].string)); (yyval.expr) = expr; } -#line 3016 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3011 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 72: -#line 643 "src/wast-parser.y" /* yacc.c:1646 */ +#line 638 "src/wast-parser.y" /* yacc.c:1646 */ { - auto expr = new IfExpr((yyvsp[-5].block), std::move(*(yyvsp[-2].expr_list))); - delete (yyvsp[-2].expr_list); - expr->true_->label = std::move(*(yyvsp[-6].string)); - delete (yyvsp[-6].string); + auto expr = new IfExpr((yyvsp[-5].block), MoveAndDelete((yyvsp[-2].expr_list))); + expr->true_->label = MoveAndDelete((yyvsp[-6].string)); CHECK_END_LABEL((yylsp[-3]), expr->true_->label, (yyvsp[-3].string)); CHECK_END_LABEL((yylsp[0]), expr->true_->label, (yyvsp[0].string)); (yyval.expr) = expr; } -#line 3030 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3023 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 73: -#line 652 "src/wast-parser.y" /* yacc.c:1646 */ +#line 645 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyvsp[-3].block)->label = std::move(*(yyvsp[-4].string)); - delete (yyvsp[-4].string); + (yyvsp[-3].block)->label = MoveAndDelete((yyvsp[-4].string)); (yyval.expr) = (yyvsp[-2].try_expr); cast<TryExpr>((yyval.expr))->block = (yyvsp[-3].block); CHECK_END_LABEL((yylsp[0]), (yyvsp[-3].block)->label, (yyvsp[0].string)); } -#line 3042 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3034 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 74: -#line 662 "src/wast-parser.y" /* yacc.c:1646 */ +#line 654 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.types) = (yyvsp[-1].types); } -#line 3048 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3040 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 75: -#line 665 "src/wast-parser.y" /* yacc.c:1646 */ +#line 657 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.block) = (yyvsp[0].block); - (yyval.block)->sig.insert((yyval.block)->sig.end(), (yyvsp[-1].types)->begin(), (yyvsp[-1].types)->end()); - delete (yyvsp[-1].types); + AppendAndDelete((yyval.block)->sig, (yyvsp[-1].types)); } -#line 3058 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3049 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 76: -#line 670 "src/wast-parser.y" /* yacc.c:1646 */ +#line 661 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.block) = new Block(std::move(*(yyvsp[0].expr_list))); - delete (yyvsp[0].expr_list); + (yyval.block) = new Block(MoveAndDelete((yyvsp[0].expr_list))); } -#line 3067 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3057 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 77: -#line 677 "src/wast-parser.y" /* yacc.c:1646 */ +#line 667 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.catch_) = new Catch(std::move(*(yyvsp[-1].var)), std::move(*(yyvsp[0].expr_list))); - delete (yyvsp[-1].var); - delete (yyvsp[0].expr_list); + (yyval.catch_) = new Catch(MoveAndDelete((yyvsp[-1].var)), MoveAndDelete((yyvsp[0].expr_list))); (yyval.catch_)->loc = (yylsp[-2]); } -#line 3078 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3066 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 78: -#line 685 "src/wast-parser.y" /* yacc.c:1646 */ +#line 673 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.catch_) = new Catch(std::move(*(yyvsp[0].expr_list))); - delete (yyvsp[0].expr_list); + (yyval.catch_) = new Catch(MoveAndDelete((yyvsp[0].expr_list))); (yyval.catch_)->loc = (yylsp[-1]); } -#line 3088 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3075 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 81: -#line 698 "src/wast-parser.y" /* yacc.c:1646 */ +#line 685 "src/wast-parser.y" /* yacc.c:1646 */ { auto expr = new TryExpr(); expr->catches.push_back((yyvsp[0].catch_)); (yyval.try_expr) = expr; } -#line 3098 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3085 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 82: -#line 703 "src/wast-parser.y" /* yacc.c:1646 */ +#line 690 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.try_expr) = (yyvsp[-1].try_expr); cast<TryExpr>((yyval.try_expr))->catches.push_back((yyvsp[0].catch_)); } -#line 3107 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3094 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 83: -#line 710 "src/wast-parser.y" /* yacc.c:1646 */ +#line 697 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr_list) = (yyvsp[-1].expr_list); } -#line 3113 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3100 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 84: -#line 714 "src/wast-parser.y" /* yacc.c:1646 */ +#line 701 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr_list) = (yyvsp[0].expr_list); (yyval.expr_list)->push_back((yyvsp[-1].expr)); (yyvsp[-1].expr)->loc = (yylsp[-1]); } -#line 3123 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3110 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 85: -#line 719 "src/wast-parser.y" /* yacc.c:1646 */ +#line 706 "src/wast-parser.y" /* yacc.c:1646 */ { auto expr = new BlockExpr((yyvsp[0].block)); - expr->block->label = std::move(*(yyvsp[-1].string)); - delete (yyvsp[-1].string); + expr->block->label = MoveAndDelete((yyvsp[-1].string)); expr->loc = (yylsp[-2]); (yyval.expr_list) = new ExprList(expr); } -#line 3135 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3121 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 86: -#line 726 "src/wast-parser.y" /* yacc.c:1646 */ +#line 712 "src/wast-parser.y" /* yacc.c:1646 */ { auto expr = new LoopExpr((yyvsp[0].block)); - expr->block->label = std::move(*(yyvsp[-1].string)); - delete (yyvsp[-1].string); + expr->block->label = MoveAndDelete((yyvsp[-1].string)); expr->loc = (yylsp[-2]); (yyval.expr_list) = new ExprList(expr); } -#line 3147 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3132 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 87: -#line 733 "src/wast-parser.y" /* yacc.c:1646 */ +#line 718 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr_list) = (yyvsp[0].expr_list); IfExpr* if_ = cast<IfExpr>(&(yyvsp[0].expr_list)->back()); - if_->true_->label = std::move(*(yyvsp[-1].string)); - delete (yyvsp[-1].string); + if_->true_->label = MoveAndDelete((yyvsp[-1].string)); } -#line 3158 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3142 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 88: -#line 739 "src/wast-parser.y" /* yacc.c:1646 */ +#line 723 "src/wast-parser.y" /* yacc.c:1646 */ { Block* block = (yyvsp[0].try_expr)->block; - block->label = std::move(*(yyvsp[-1].string)); - delete (yyvsp[-1].string); + block->label = MoveAndDelete((yyvsp[-1].string)); (yyvsp[0].try_expr)->loc = (yylsp[-2]); (yyval.expr_list) = new ExprList((yyvsp[0].try_expr)); } -#line 3170 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3153 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 89: -#line 749 "src/wast-parser.y" /* yacc.c:1646 */ +#line 732 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.try_expr) = (yyvsp[0].try_expr); Block* block = (yyval.try_expr)->block; - block->sig.insert(block->sig.end(), (yyvsp[-1].types)->begin(), (yyvsp[-1].types)->end()); - delete (yyvsp[-1].types); + AppendAndDelete(block->sig, (yyvsp[-1].types)); } -#line 3181 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3163 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 90: -#line 755 "src/wast-parser.y" /* yacc.c:1646 */ +#line 737 "src/wast-parser.y" /* yacc.c:1646 */ { Block* block = new Block(); - block->exprs = std::move(*(yyvsp[-1].expr_list)); - delete (yyvsp[-1].expr_list); + block->exprs = MoveAndDelete((yyvsp[-1].expr_list)); (yyval.try_expr) = (yyvsp[0].try_expr); (yyval.try_expr)->block = block; } -#line 3193 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3174 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 91: -#line 765 "src/wast-parser.y" /* yacc.c:1646 */ +#line 746 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.catch_) = (yyvsp[-1].catch_); } -#line 3201 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3182 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 92: -#line 768 "src/wast-parser.y" /* yacc.c:1646 */ +#line 749 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.catch_) = (yyvsp[-1].catch_); } -#line 3209 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3190 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 93: -#line 774 "src/wast-parser.y" /* yacc.c:1646 */ +#line 755 "src/wast-parser.y" /* yacc.c:1646 */ { auto expr = new TryExpr(); expr->catches.push_back((yyvsp[0].catch_)); (yyval.try_expr) = expr; } -#line 3219 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3200 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 94: -#line 779 "src/wast-parser.y" /* yacc.c:1646 */ +#line 760 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.try_expr) = (yyvsp[-1].try_expr); cast<TryExpr>((yyval.try_expr))->catches.push_back((yyvsp[0].catch_)); } -#line 3228 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3209 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 95: -#line 787 "src/wast-parser.y" /* yacc.c:1646 */ +#line 768 "src/wast-parser.y" /* yacc.c:1646 */ { IfExpr* if_ = cast<IfExpr>(&(yyvsp[0].expr_list)->back()); (yyval.expr_list) = (yyvsp[0].expr_list); Block* true_ = if_->true_; - true_->sig.insert(true_->sig.end(), (yyvsp[-1].types)->begin(), (yyvsp[-1].types)->end()); - delete (yyvsp[-1].types); + AppendAndDelete(true_->sig, (yyvsp[-1].types)); } -#line 3240 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3220 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 97: -#line 797 "src/wast-parser.y" /* yacc.c:1646 */ +#line 777 "src/wast-parser.y" /* yacc.c:1646 */ { - Expr* expr = new IfExpr(new Block(std::move(*(yyvsp[-5].expr_list))), std::move(*(yyvsp[-1].expr_list))); - delete (yyvsp[-5].expr_list); - delete (yyvsp[-1].expr_list); + Expr* expr = new IfExpr(new Block(MoveAndDelete((yyvsp[-5].expr_list))), MoveAndDelete((yyvsp[-1].expr_list))); expr->loc = (yylsp[-7]); (yyval.expr_list) = new ExprList(expr); } -#line 3252 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3230 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 98: -#line 804 "src/wast-parser.y" /* yacc.c:1646 */ +#line 782 "src/wast-parser.y" /* yacc.c:1646 */ { - Expr* expr = new IfExpr(new Block(std::move(*(yyvsp[-1].expr_list)))); - delete (yyvsp[-1].expr_list); + Expr* expr = new IfExpr(new Block(MoveAndDelete((yyvsp[-1].expr_list)))); expr->loc = (yylsp[-3]); (yyval.expr_list) = new ExprList(expr); } -#line 3263 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3240 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 99: -#line 810 "src/wast-parser.y" /* yacc.c:1646 */ +#line 787 "src/wast-parser.y" /* yacc.c:1646 */ { - Expr* expr = new IfExpr(new Block(std::move(*(yyvsp[-5].expr_list))), std::move(*(yyvsp[-1].expr_list))); - delete (yyvsp[-5].expr_list); - delete (yyvsp[-1].expr_list); + Expr* expr = new IfExpr(new Block(MoveAndDelete((yyvsp[-5].expr_list))), MoveAndDelete((yyvsp[-1].expr_list))); expr->loc = (yylsp[-8]); (yyval.expr_list) = (yyvsp[-8].expr_list); (yyval.expr_list)->push_back(expr); } -#line 3276 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3251 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 100: -#line 818 "src/wast-parser.y" /* yacc.c:1646 */ +#line 793 "src/wast-parser.y" /* yacc.c:1646 */ { - Expr* expr = new IfExpr(new Block(std::move(*(yyvsp[-1].expr_list)))); - delete (yyvsp[-1].expr_list); + Expr* expr = new IfExpr(new Block(MoveAndDelete((yyvsp[-1].expr_list)))); expr->loc = (yylsp[-4]); (yyval.expr_list) = (yyvsp[-4].expr_list); (yyval.expr_list)->push_back(expr); } -#line 3288 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3262 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 101: -#line 825 "src/wast-parser.y" /* yacc.c:1646 */ +#line 799 "src/wast-parser.y" /* yacc.c:1646 */ { - Expr* expr = new IfExpr(new Block(std::move(*(yyvsp[-1].expr_list))), std::move(*(yyvsp[0].expr_list))); - delete (yyvsp[-1].expr_list); - delete (yyvsp[0].expr_list); + Expr* expr = new IfExpr(new Block(MoveAndDelete((yyvsp[-1].expr_list))), MoveAndDelete((yyvsp[0].expr_list))); expr->loc = (yylsp[-2]); (yyval.expr_list) = (yyvsp[-2].expr_list); (yyval.expr_list)->push_back(expr); } -#line 3301 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3273 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 102: -#line 833 "src/wast-parser.y" /* yacc.c:1646 */ +#line 805 "src/wast-parser.y" /* yacc.c:1646 */ { - Expr* expr = new IfExpr(new Block(std::move(*(yyvsp[0].expr_list)))); - delete (yyvsp[0].expr_list); + Expr* expr = new IfExpr(new Block(MoveAndDelete((yyvsp[0].expr_list)))); expr->loc = (yylsp[-1]); (yyval.expr_list) = (yyvsp[-1].expr_list); (yyval.expr_list)->push_back(expr); } -#line 3313 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3284 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 103: -#line 843 "src/wast-parser.y" /* yacc.c:1646 */ +#line 814 "src/wast-parser.y" /* yacc.c:1646 */ { CHECK_ALLOW_EXCEPTIONS(&(yylsp[0]), "rethrow"); } -#line 3321 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3292 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 104: -#line 848 "src/wast-parser.y" /* yacc.c:1646 */ +#line 819 "src/wast-parser.y" /* yacc.c:1646 */ { CHECK_ALLOW_EXCEPTIONS(&(yylsp[0]), "throw"); } -#line 3329 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3300 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 105: -#line 854 "src/wast-parser.y" /* yacc.c:1646 */ +#line 825 "src/wast-parser.y" /* yacc.c:1646 */ { CHECK_ALLOW_EXCEPTIONS(&(yylsp[0]), "try"); } -#line 3337 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3308 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 106: -#line 860 "src/wast-parser.y" /* yacc.c:1646 */ +#line 831 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr_list) = new ExprList(); } -#line 3343 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3314 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 107: -#line 861 "src/wast-parser.y" /* yacc.c:1646 */ +#line 832 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr_list) = (yyvsp[0].expr_list); - (yyval.expr_list)->splice((yyval.expr_list)->begin(), std::move(*(yyvsp[-1].expr_list))); - delete (yyvsp[-1].expr_list); + (yyval.expr_list)->splice((yyval.expr_list)->begin(), MoveAndDelete((yyvsp[-1].expr_list))); } -#line 3353 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3323 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 108: -#line 868 "src/wast-parser.y" /* yacc.c:1646 */ +#line 838 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr_list) = new ExprList(); } -#line 3359 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3329 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 109: -#line 869 "src/wast-parser.y" /* yacc.c:1646 */ +#line 839 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr_list) = (yyvsp[0].expr_list); - (yyval.expr_list)->splice((yyval.expr_list)->begin(), std::move(*(yyvsp[-1].expr_list))); - delete (yyvsp[-1].expr_list); + (yyval.expr_list)->splice((yyval.expr_list)->begin(), MoveAndDelete((yyvsp[-1].expr_list))); } -#line 3369 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3338 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 111: -#line 881 "src/wast-parser.y" /* yacc.c:1646 */ +#line 850 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.exception) = new Exception(*(yyvsp[-2].string), *(yyvsp[-1].types)); - delete (yyvsp[-2].string); - delete (yyvsp[-1].types); + (yyval.exception) = new Exception(MoveAndDelete((yyvsp[-2].string)), MoveAndDelete((yyvsp[-1].types))); } -#line 3379 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3346 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 112: -#line 888 "src/wast-parser.y" /* yacc.c:1646 */ +#line 855 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module_field) = new ExceptionModuleField((yyvsp[0].exception)); } -#line 3387 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3354 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 113: -#line 895 "src/wast-parser.y" /* yacc.c:1646 */ +#line 862 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module_fields) = (yyvsp[-1].module_fields); ModuleField* main_field = &(yyval.module_fields)->front(); main_field->loc = (yylsp[-3]); if (auto func_field = dyn_cast<FuncModuleField>(main_field)) { - func_field->func->name = std::move(*(yyvsp[-2].string)); + func_field->func->name = MoveAndDelete((yyvsp[-2].string)); } else { cast<ImportModuleField>(main_field)->import->func->name = - std::move(*(yyvsp[-2].string)); + MoveAndDelete((yyvsp[-2].string)); } - delete (yyvsp[-2].string); } -#line 3404 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3370 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 114: -#line 910 "src/wast-parser.y" /* yacc.c:1646 */ +#line 876 "src/wast-parser.y" /* yacc.c:1646 */ { auto field = new FuncModuleField((yyvsp[0].func)); field->func->decl.has_func_type = true; - field->func->decl.type_var = std::move(*(yyvsp[-1].var)); - delete (yyvsp[-1].var); + field->func->decl.type_var = MoveAndDelete((yyvsp[-1].var)); (yyval.module_fields) = new ModuleFieldList(field); } -#line 3416 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3381 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 115: -#line 917 "src/wast-parser.y" /* yacc.c:1646 */ +#line 882 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module_fields) = new ModuleFieldList(new FuncModuleField((yyvsp[0].func))); } -#line 3424 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3389 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 116: -#line 920 "src/wast-parser.y" /* yacc.c:1646 */ +#line 885 "src/wast-parser.y" /* yacc.c:1646 */ { auto field = new ImportModuleField((yyvsp[-2].import), (yylsp[-2])); field->import->kind = ExternalKind::Func; field->import->func = (yyvsp[0].func); field->import->func->decl.has_func_type = true; - field->import->func->decl.type_var = std::move(*(yyvsp[-1].var)); - delete (yyvsp[-1].var); + field->import->func->decl.type_var = MoveAndDelete((yyvsp[-1].var)); (yyval.module_fields) = new ModuleFieldList(field); } -#line 3438 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3402 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 117: -#line 929 "src/wast-parser.y" /* yacc.c:1646 */ +#line 893 "src/wast-parser.y" /* yacc.c:1646 */ { auto field = new ImportModuleField((yyvsp[-1].import), (yylsp[-1])); field->import->kind = ExternalKind::Func; field->import->func = (yyvsp[0].func); (yyval.module_fields) = new ModuleFieldList(field); } -#line 3449 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3413 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 118: -#line 935 "src/wast-parser.y" /* yacc.c:1646 */ +#line 899 "src/wast-parser.y" /* yacc.c:1646 */ { auto field = new ExportModuleField((yyvsp[-1].export_), (yylsp[-1])); field->export_->kind = ExternalKind::Func; (yyval.module_fields) = (yyvsp[0].module_fields); (yyval.module_fields)->push_back(field); } -#line 3460 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3424 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 119: -#line 944 "src/wast-parser.y" /* yacc.c:1646 */ +#line 908 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func) = (yyvsp[0].func); - reverse_bindings(&(yyval.func)->decl.sig.param_types, &(yyval.func)->param_bindings); + ReverseBindings(&(yyval.func)->decl.sig.param_types, &(yyval.func)->param_bindings); } -#line 3469 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3433 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 121: -#line 952 "src/wast-parser.y" /* yacc.c:1646 */ +#line 916 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func) = (yyvsp[0].func); - (yyval.func)->decl.sig.param_types.insert((yyval.func)->decl.sig.param_types.begin(), - (yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end()); - delete (yyvsp[-2].types); + PrependAndDelete((yyval.func)->decl.sig.param_types, (yyvsp[-2].types)); } -#line 3480 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3442 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 122: -#line 958 "src/wast-parser.y" /* yacc.c:1646 */ +#line 920 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func) = (yyvsp[0].func); - (yyval.func)->param_bindings.emplace(*(yyvsp[-3].string), + (yyval.func)->param_bindings.emplace(MoveAndDelete((yyvsp[-3].string)), Binding((yylsp[-3]), (yyval.func)->decl.sig.param_types.size())); - delete (yyvsp[-3].string); (yyval.func)->decl.sig.param_types.insert((yyval.func)->decl.sig.param_types.begin(), (yyvsp[-2].t_type)); } -#line 3492 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3453 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 123: -#line 968 "src/wast-parser.y" /* yacc.c:1646 */ +#line 929 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func) = new Func(); } -#line 3498 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3459 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 124: -#line 969 "src/wast-parser.y" /* yacc.c:1646 */ +#line 930 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func) = (yyvsp[0].func); - (yyval.func)->decl.sig.result_types.insert((yyval.func)->decl.sig.result_types.begin(), - (yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end()); - delete (yyvsp[-2].types); + PrependAndDelete((yyval.func)->decl.sig.result_types, (yyvsp[-2].types)); } -#line 3509 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3468 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 125: -#line 978 "src/wast-parser.y" /* yacc.c:1646 */ +#line 937 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func) = (yyvsp[0].func); - reverse_bindings(&(yyval.func)->decl.sig.param_types, &(yyval.func)->param_bindings); + ReverseBindings(&(yyval.func)->decl.sig.param_types, &(yyval.func)->param_bindings); } -#line 3518 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3477 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 127: -#line 986 "src/wast-parser.y" /* yacc.c:1646 */ +#line 945 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func) = (yyvsp[0].func); - (yyval.func)->decl.sig.param_types.insert((yyval.func)->decl.sig.param_types.begin(), - (yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end()); - delete (yyvsp[-2].types); + PrependAndDelete((yyval.func)->decl.sig.param_types, (yyvsp[-2].types)); } -#line 3529 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3486 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 128: -#line 992 "src/wast-parser.y" /* yacc.c:1646 */ +#line 949 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func) = (yyvsp[0].func); - (yyval.func)->param_bindings.emplace(*(yyvsp[-3].string), + (yyval.func)->param_bindings.emplace(MoveAndDelete((yyvsp[-3].string)), Binding((yylsp[-3]), (yyval.func)->decl.sig.param_types.size())); - delete (yyvsp[-3].string); (yyval.func)->decl.sig.param_types.insert((yyval.func)->decl.sig.param_types.begin(), (yyvsp[-2].t_type)); } -#line 3541 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3497 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 130: -#line 1003 "src/wast-parser.y" /* yacc.c:1646 */ +#line 959 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func) = (yyvsp[0].func); - (yyval.func)->decl.sig.result_types.insert((yyval.func)->decl.sig.result_types.begin(), - (yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end()); - delete (yyvsp[-2].types); + PrependAndDelete((yyval.func)->decl.sig.result_types, (yyvsp[-2].types)); } -#line 3552 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3506 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 131: -#line 1012 "src/wast-parser.y" /* yacc.c:1646 */ +#line 966 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func) = (yyvsp[0].func); - reverse_bindings(&(yyval.func)->local_types, &(yyval.func)->local_bindings); + ReverseBindings(&(yyval.func)->local_types, &(yyval.func)->local_bindings); } -#line 3561 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3515 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 132: -#line 1019 "src/wast-parser.y" /* yacc.c:1646 */ +#line 973 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func) = new Func(); - (yyval.func)->exprs = std::move(*(yyvsp[0].expr_list)); - delete (yyvsp[0].expr_list); + (yyval.func)->exprs = MoveAndDelete((yyvsp[0].expr_list)); } -#line 3571 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3524 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 133: -#line 1024 "src/wast-parser.y" /* yacc.c:1646 */ +#line 977 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func) = (yyvsp[0].func); - (yyval.func)->local_types.insert((yyval.func)->local_types.begin(), (yyvsp[-2].types)->begin(), (yyvsp[-2].types)->end()); - delete (yyvsp[-2].types); + PrependAndDelete((yyval.func)->local_types, (yyvsp[-2].types)); } -#line 3581 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3533 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 134: -#line 1029 "src/wast-parser.y" /* yacc.c:1646 */ +#line 981 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.func) = (yyvsp[0].func); - (yyval.func)->local_bindings.emplace(*(yyvsp[-3].string), Binding((yylsp[-3]), (yyval.func)->local_types.size())); - delete (yyvsp[-3].string); + (yyval.func)->local_bindings.emplace(MoveAndDelete((yyvsp[-3].string)), + Binding((yylsp[-3]), (yyval.func)->local_types.size())); (yyval.func)->local_types.insert((yyval.func)->local_types.begin(), (yyvsp[-2].t_type)); } -#line 3592 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3544 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 135: -#line 1040 "src/wast-parser.y" /* yacc.c:1646 */ +#line 992 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.expr_list) = (yyvsp[-1].expr_list); } -#line 3600 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3552 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 137: -#line 1047 "src/wast-parser.y" /* yacc.c:1646 */ +#line 999 "src/wast-parser.y" /* yacc.c:1646 */ { auto elem_segment = new ElemSegment(); - elem_segment->table_var = std::move(*(yyvsp[-3].var)); - delete (yyvsp[-3].var); - elem_segment->offset = std::move(*(yyvsp[-2].expr_list)); - delete (yyvsp[-2].expr_list); - elem_segment->vars = std::move(*(yyvsp[-1].vars)); - delete (yyvsp[-1].vars); + elem_segment->table_var = MoveAndDelete((yyvsp[-3].var)); + elem_segment->offset = MoveAndDelete((yyvsp[-2].expr_list)); + elem_segment->vars = MoveAndDelete((yyvsp[-1].vars)); (yyval.module_field) = new ElemSegmentModuleField(elem_segment, (yylsp[-4])); } -#line 3615 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3564 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 138: -#line 1057 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1006 "src/wast-parser.y" /* yacc.c:1646 */ { auto elem_segment = new ElemSegment(); elem_segment->table_var = Var(0, (yylsp[-3])); - elem_segment->offset = std::move(*(yyvsp[-2].expr_list)); - delete (yyvsp[-2].expr_list); - elem_segment->vars = std::move(*(yyvsp[-1].vars)); - delete (yyvsp[-1].vars); + elem_segment->offset = MoveAndDelete((yyvsp[-2].expr_list)); + elem_segment->vars = MoveAndDelete((yyvsp[-1].vars)); (yyval.module_field) = new ElemSegmentModuleField(elem_segment, (yylsp[-3])); } -#line 3629 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3576 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 139: -#line 1069 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1016 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module_fields) = (yyvsp[-1].module_fields); ModuleField* main_field = &(yyval.module_fields)->front(); main_field->loc = (yylsp[-3]); if (auto table_field = dyn_cast<TableModuleField>(main_field)) { - table_field->table->name = std::move(*(yyvsp[-2].string)); + table_field->table->name = MoveAndDelete((yyvsp[-2].string)); } else { cast<ImportModuleField>(main_field)->import->table->name = - std::move(*(yyvsp[-2].string)); + MoveAndDelete((yyvsp[-2].string)); } - delete (yyvsp[-2].string); } -#line 3646 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3592 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 140: -#line 1084 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1030 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module_fields) = new ModuleFieldList(new TableModuleField((yyvsp[0].table))); } -#line 3654 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3600 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 141: -#line 1087 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1033 "src/wast-parser.y" /* yacc.c:1646 */ { auto field = new ImportModuleField((yyvsp[-1].import)); field->import->kind = ExternalKind::Table; field->import->table = (yyvsp[0].table); (yyval.module_fields) = new ModuleFieldList(field); } -#line 3665 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3611 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 142: -#line 1093 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1039 "src/wast-parser.y" /* yacc.c:1646 */ { auto field = new ExportModuleField((yyvsp[-1].export_), (yylsp[-1])); field->export_->kind = ExternalKind::Table; (yyval.module_fields) = (yyvsp[0].module_fields); (yyval.module_fields)->push_back(field); } -#line 3676 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3622 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 143: -#line 1099 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1045 "src/wast-parser.y" /* yacc.c:1646 */ { auto table = new Table(); table->elem_limits.initial = (yyvsp[-1].vars)->size(); @@ -3687,101 +3633,93 @@ yyreduce: elem_segment->table_var = Var(kInvalidIndex); elem_segment->offset.push_back(new ConstExpr(Const(Const::I32(), 0))); elem_segment->offset.back().loc = (yylsp[-2]); - elem_segment->vars = std::move(*(yyvsp[-1].vars)); - delete (yyvsp[-1].vars); + elem_segment->vars = MoveAndDelete((yyvsp[-1].vars)); (yyval.module_fields) = new ModuleFieldList(); (yyval.module_fields)->push_back(new TableModuleField(table)); (yyval.module_fields)->push_back(new ElemSegmentModuleField(elem_segment, (yylsp[-2]))); } -#line 3698 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3643 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 144: -#line 1119 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1064 "src/wast-parser.y" /* yacc.c:1646 */ { auto data_segment = new DataSegment(); - data_segment->memory_var = std::move(*(yyvsp[-3].var)); - delete (yyvsp[-3].var); - data_segment->offset = std::move(*(yyvsp[-2].expr_list)); - delete (yyvsp[-2].expr_list); - RemoveEscapes(*(yyvsp[-1].texts), std::back_inserter(data_segment->data)); - delete (yyvsp[-1].texts); + data_segment->memory_var = MoveAndDelete((yyvsp[-3].var)); + data_segment->offset = MoveAndDelete((yyvsp[-2].expr_list)); + RemoveEscapes(MoveAndDelete((yyvsp[-1].texts)), std::back_inserter(data_segment->data)); (yyval.module_field) = new DataSegmentModuleField(data_segment, (yylsp[-4])); } -#line 3713 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3655 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 145: -#line 1129 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1071 "src/wast-parser.y" /* yacc.c:1646 */ { auto data_segment = new DataSegment(); data_segment->memory_var = Var(0, (yylsp[-3])); - data_segment->offset = std::move(*(yyvsp[-2].expr_list)); - delete (yyvsp[-2].expr_list); - RemoveEscapes(*(yyvsp[-1].texts), std::back_inserter(data_segment->data)); - delete (yyvsp[-1].texts); + data_segment->offset = MoveAndDelete((yyvsp[-2].expr_list)); + RemoveEscapes(MoveAndDelete((yyvsp[-1].texts)), std::back_inserter(data_segment->data)); (yyval.module_field) = new DataSegmentModuleField(data_segment, (yylsp[-3])); } -#line 3727 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3667 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 146: -#line 1141 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1081 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module_fields) = (yyvsp[-1].module_fields); ModuleField* main_field = &(yyval.module_fields)->front(); main_field->loc = (yylsp[-3]); if (auto memory_field = dyn_cast<MemoryModuleField>(main_field)) { - memory_field->memory->name = std::move(*(yyvsp[-2].string)); + memory_field->memory->name = MoveAndDelete((yyvsp[-2].string)); } else { cast<ImportModuleField>(main_field)->import->memory->name = - std::move(*(yyvsp[-2].string)); + MoveAndDelete((yyvsp[-2].string)); } - delete (yyvsp[-2].string); } -#line 3744 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3683 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 147: -#line 1156 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1095 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module_fields) = new ModuleFieldList(new MemoryModuleField((yyvsp[0].memory))); } -#line 3752 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3691 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 148: -#line 1159 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1098 "src/wast-parser.y" /* yacc.c:1646 */ { auto field = new ImportModuleField((yyvsp[-1].import)); field->import->kind = ExternalKind::Memory; field->import->memory = (yyvsp[0].memory); (yyval.module_fields) = new ModuleFieldList(field); } -#line 3763 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3702 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 149: -#line 1165 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1104 "src/wast-parser.y" /* yacc.c:1646 */ { auto field = new ExportModuleField((yyvsp[-1].export_), (yylsp[-1])); field->export_->kind = ExternalKind::Memory; (yyval.module_fields) = (yyvsp[0].module_fields); (yyval.module_fields)->push_back(field); } -#line 3774 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3713 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 150: -#line 1171 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1110 "src/wast-parser.y" /* yacc.c:1646 */ { auto data_segment = new DataSegment(); data_segment->memory_var = Var(kInvalidIndex); data_segment->offset.push_back(new ConstExpr(Const(Const::I32(), 0))); data_segment->offset.back().loc = (yylsp[-2]); - RemoveEscapes(*(yyvsp[-1].texts), std::back_inserter(data_segment->data)); - delete (yyvsp[-1].texts); + RemoveEscapes(MoveAndDelete((yyvsp[-1].texts)), std::back_inserter(data_segment->data)); uint32_t byte_size = WABT_ALIGN_UP_TO_PAGE(data_segment->data.size()); uint32_t page_size = WABT_BYTES_TO_PAGES(byte_size); @@ -3795,340 +3733,314 @@ yyreduce: (yyval.module_fields)->push_back(new MemoryModuleField(memory)); (yyval.module_fields)->push_back(new DataSegmentModuleField(data_segment, (yylsp[-2]))); } -#line 3799 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3737 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 151: -#line 1194 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1132 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module_fields) = (yyvsp[-1].module_fields); ModuleField* main_field = &(yyval.module_fields)->front(); main_field->loc = (yylsp[-3]); if (auto global_field = dyn_cast<GlobalModuleField>(main_field)) { - global_field->global->name = std::move(*(yyvsp[-2].string)); + global_field->global->name = MoveAndDelete((yyvsp[-2].string)); } else { cast<ImportModuleField>(main_field)->import->global->name = - std::move(*(yyvsp[-2].string)); + MoveAndDelete((yyvsp[-2].string)); } - delete (yyvsp[-2].string); } -#line 3816 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3753 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 152: -#line 1209 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1146 "src/wast-parser.y" /* yacc.c:1646 */ { auto field = new GlobalModuleField((yyvsp[-1].global)); - field->global->init_expr = std::move(*(yyvsp[0].expr_list)); - delete (yyvsp[0].expr_list); + field->global->init_expr = MoveAndDelete((yyvsp[0].expr_list)); (yyval.module_fields) = new ModuleFieldList(field); } -#line 3827 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3763 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 153: -#line 1215 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1151 "src/wast-parser.y" /* yacc.c:1646 */ { auto field = new ImportModuleField((yyvsp[-1].import)); field->import->kind = ExternalKind::Global; field->import->global = (yyvsp[0].global); (yyval.module_fields) = new ModuleFieldList(field); } -#line 3838 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3774 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 154: -#line 1221 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1157 "src/wast-parser.y" /* yacc.c:1646 */ { auto field = new ExportModuleField((yyvsp[-1].export_), (yylsp[-1])); field->export_->kind = ExternalKind::Global; (yyval.module_fields) = (yyvsp[0].module_fields); (yyval.module_fields)->push_back(field); } -#line 3849 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3785 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 155: -#line 1232 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1168 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.import) = new Import(); (yyval.import)->kind = ExternalKind::Func; (yyval.import)->func = new Func(); - (yyval.import)->func->name = std::move(*(yyvsp[-2].string)); - delete (yyvsp[-2].string); + (yyval.import)->func->name = MoveAndDelete((yyvsp[-2].string)); (yyval.import)->func->decl.has_func_type = true; - (yyval.import)->func->decl.type_var = std::move(*(yyvsp[-1].var)); - delete (yyvsp[-1].var); + (yyval.import)->func->decl.type_var = MoveAndDelete((yyvsp[-1].var)); } -#line 3864 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3798 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 156: -#line 1242 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1176 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.import) = new Import(); (yyval.import)->kind = ExternalKind::Func; (yyval.import)->func = new Func(); - (yyval.import)->func->name = std::move(*(yyvsp[-2].string)); - delete (yyvsp[-2].string); - (yyval.import)->func->decl.sig = std::move(*(yyvsp[-1].func_sig)); - delete (yyvsp[-1].func_sig); + (yyval.import)->func->name = MoveAndDelete((yyvsp[-2].string)); + (yyval.import)->func->decl.sig = MoveAndDelete((yyvsp[-1].func_sig)); } -#line 3878 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3810 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 157: -#line 1251 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1183 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.import) = new Import(); (yyval.import)->kind = ExternalKind::Table; (yyval.import)->table = (yyvsp[-1].table); - (yyval.import)->table->name = std::move(*(yyvsp[-2].string)); - delete (yyvsp[-2].string); + (yyval.import)->table->name = MoveAndDelete((yyvsp[-2].string)); } -#line 3890 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3821 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 158: -#line 1258 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1189 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.import) = new Import(); (yyval.import)->kind = ExternalKind::Memory; (yyval.import)->memory = (yyvsp[-1].memory); - (yyval.import)->memory->name = std::move(*(yyvsp[-2].string)); - delete (yyvsp[-2].string); + (yyval.import)->memory->name = MoveAndDelete((yyvsp[-2].string)); } -#line 3902 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3832 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 159: -#line 1265 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1195 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.import) = new Import(); (yyval.import)->kind = ExternalKind::Global; (yyval.import)->global = (yyvsp[-1].global); - (yyval.import)->global->name = std::move(*(yyvsp[-2].string)); - delete (yyvsp[-2].string); + (yyval.import)->global->name = MoveAndDelete((yyvsp[-2].string)); } -#line 3914 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3843 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 160: -#line 1272 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1201 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.import) = new Import(); (yyval.import)->kind = ExternalKind::Except; (yyval.import)->except = (yyvsp[0].exception); } -#line 3924 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3853 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 161: -#line 1280 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1209 "src/wast-parser.y" /* yacc.c:1646 */ { auto field = new ImportModuleField((yyvsp[-1].import), (yylsp[-4])); - field->import->module_name = std::move(*(yyvsp[-3].string)); - delete (yyvsp[-3].string); - field->import->field_name = std::move(*(yyvsp[-2].string)); - delete (yyvsp[-2].string); + field->import->module_name = MoveAndDelete((yyvsp[-3].string)); + field->import->field_name = MoveAndDelete((yyvsp[-2].string)); (yyval.module_field) = field; } -#line 3937 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3864 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 162: -#line 1291 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1218 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.import) = new Import(); - (yyval.import)->module_name = std::move(*(yyvsp[-2].string)); - delete (yyvsp[-2].string); - (yyval.import)->field_name = std::move(*(yyvsp[-1].string)); - delete (yyvsp[-1].string); + (yyval.import)->module_name = MoveAndDelete((yyvsp[-2].string)); + (yyval.import)->field_name = MoveAndDelete((yyvsp[-1].string)); } -#line 3949 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3874 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 163: -#line 1301 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1226 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.export_) = new Export(); (yyval.export_)->kind = ExternalKind::Func; - (yyval.export_)->var = std::move(*(yyvsp[-1].var)); - delete (yyvsp[-1].var); + (yyval.export_)->var = MoveAndDelete((yyvsp[-1].var)); } -#line 3960 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3884 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 164: -#line 1307 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1231 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.export_) = new Export(); (yyval.export_)->kind = ExternalKind::Table; - (yyval.export_)->var = std::move(*(yyvsp[-1].var)); - delete (yyvsp[-1].var); + (yyval.export_)->var = MoveAndDelete((yyvsp[-1].var)); } -#line 3971 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3894 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 165: -#line 1313 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1236 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.export_) = new Export(); (yyval.export_)->kind = ExternalKind::Memory; - (yyval.export_)->var = std::move(*(yyvsp[-1].var)); - delete (yyvsp[-1].var); + (yyval.export_)->var = MoveAndDelete((yyvsp[-1].var)); } -#line 3982 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3904 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 166: -#line 1319 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1241 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.export_) = new Export(); (yyval.export_)->kind = ExternalKind::Global; - (yyval.export_)->var = std::move(*(yyvsp[-1].var)); - delete (yyvsp[-1].var); + (yyval.export_)->var = MoveAndDelete((yyvsp[-1].var)); } -#line 3993 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3914 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 167: -#line 1325 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1246 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.export_) = new Export(); (yyval.export_)->kind = ExternalKind::Except; - (yyval.export_)->var = std::move(*(yyvsp[-1].var)); - delete (yyvsp[-1].var); + (yyval.export_)->var = MoveAndDelete((yyvsp[-1].var)); } -#line 4004 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3924 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 168: -#line 1333 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1253 "src/wast-parser.y" /* yacc.c:1646 */ { auto field = new ExportModuleField((yyvsp[-1].export_), (yylsp[-3])); - field->export_->name = std::move(*(yyvsp[-2].string)); - delete (yyvsp[-2].string); + field->export_->name = MoveAndDelete((yyvsp[-2].string)); (yyval.module_field) = field; } -#line 4015 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3934 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 169: -#line 1342 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1261 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.export_) = new Export(); - (yyval.export_)->name = std::move(*(yyvsp[-1].string)); - delete (yyvsp[-1].string); + (yyval.export_)->name = MoveAndDelete((yyvsp[-1].string)); } -#line 4025 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3943 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 170: -#line 1353 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1271 "src/wast-parser.y" /* yacc.c:1646 */ { auto func_type = new FuncType(); - func_type->sig = std::move(*(yyvsp[-1].func_sig)); - delete (yyvsp[-1].func_sig); + func_type->sig = MoveAndDelete((yyvsp[-1].func_sig)); (yyval.module_field) = new FuncTypeModuleField(func_type, (yylsp[-2])); } -#line 4036 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3953 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 171: -#line 1359 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1276 "src/wast-parser.y" /* yacc.c:1646 */ { auto func_type = new FuncType(); - func_type->name = std::move(*(yyvsp[-2].string)); - delete (yyvsp[-2].string); - func_type->sig = std::move(*(yyvsp[-1].func_sig)); - delete (yyvsp[-1].func_sig); + func_type->name = MoveAndDelete((yyvsp[-2].string)); + func_type->sig = MoveAndDelete((yyvsp[-1].func_sig)); (yyval.module_field) = new FuncTypeModuleField(func_type, (yylsp[-3])); } -#line 4049 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3964 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 172: -#line 1370 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1285 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.module_field) = new StartModuleField(*(yyvsp[-1].var), (yylsp[-2])); - delete (yyvsp[-1].var); + (yyval.module_field) = new StartModuleField(MoveAndDelete((yyvsp[-1].var)), (yylsp[-2])); } -#line 4058 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3972 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 173: -#line 1377 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1291 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module_fields) = new ModuleFieldList((yyvsp[0].module_field)); } -#line 4064 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3978 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 178: -#line 1382 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1296 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module_fields) = new ModuleFieldList((yyvsp[0].module_field)); } -#line 4070 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3984 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 179: -#line 1383 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1297 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module_fields) = new ModuleFieldList((yyvsp[0].module_field)); } -#line 4076 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3990 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 180: -#line 1384 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1298 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module_fields) = new ModuleFieldList((yyvsp[0].module_field)); } -#line 4082 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 3996 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 181: -#line 1385 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1299 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module_fields) = new ModuleFieldList((yyvsp[0].module_field)); } -#line 4088 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4002 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 182: -#line 1386 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1300 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module_fields) = new ModuleFieldList((yyvsp[0].module_field)); } -#line 4094 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4008 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 183: -#line 1387 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1301 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module_fields) = new ModuleFieldList((yyvsp[0].module_field)); } -#line 4100 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4014 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 184: -#line 1391 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1305 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module) = new Module(); } -#line 4106 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4020 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 186: -#line 1396 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1310 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module) = new Module(); - check_import_ordering(&(yylsp[0]), lexer, parser, (yyval.module), *(yyvsp[0].module_fields)); - append_module_fields((yyval.module), (yyvsp[0].module_fields)); - delete (yyvsp[0].module_fields); + CheckImportOrdering(&(yylsp[0]), lexer, parser, (yyval.module), *(yyvsp[0].module_fields)); + AppendModuleFields((yyval.module), MoveAndDelete((yyvsp[0].module_fields))); } -#line 4117 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4030 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 187: -#line 1402 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1315 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.module) = (yyvsp[-1].module); - check_import_ordering(&(yylsp[0]), lexer, parser, (yyval.module), *(yyvsp[0].module_fields)); - append_module_fields((yyval.module), (yyvsp[0].module_fields)); - delete (yyvsp[0].module_fields); + CheckImportOrdering(&(yylsp[0]), lexer, parser, (yyval.module), *(yyvsp[0].module_fields)); + AppendModuleFields((yyval.module), MoveAndDelete((yyvsp[0].module_fields))); } -#line 4128 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4040 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 188: -#line 1411 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1323 "src/wast-parser.y" /* yacc.c:1646 */ { if ((yyvsp[0].script_module)->type == ScriptModule::Type::Text) { (yyval.module) = (yyvsp[0].script_module)->text; @@ -4146,38 +4058,37 @@ yyreduce: } delete (yyvsp[0].script_module); } -#line 4150 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4062 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 190: -#line 1438 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1350 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.var) = new Var(kInvalidIndex); } -#line 4158 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4070 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 191: -#line 1441 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1353 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.var) = new Var((yyvsp[0].t_text).to_string_view(), (yylsp[0])); } -#line 4166 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4078 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 192: -#line 1447 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1359 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.script_module) = new ScriptModule(ScriptModule::Type::Text); (yyval.script_module)->text = (yyvsp[-1].module); - (yyval.script_module)->text->name = std::move(*(yyvsp[-2].string)); - delete (yyvsp[-2].string); + (yyval.script_module)->text->name = MoveAndDelete((yyvsp[-2].string)); (yyval.script_module)->text->loc = (yylsp[-3]); // Resolve func type variables where the signature was not specified // explicitly. for (Func* func: (yyvsp[-1].module)->funcs) { - if (func->decl.has_func_type && is_empty_signature(&func->decl.sig)) { + if (func->decl.has_func_type && IsEmptySignature(&func->decl.sig)) { FuncType* func_type = (yyvsp[-1].module)->GetFuncType(func->decl.type_var); if (func_type) { func->decl.sig = func_type->sig; @@ -4185,233 +4096,214 @@ yyreduce: } } } -#line 4189 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4100 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 193: -#line 1465 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1376 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.script_module) = new ScriptModule(ScriptModule::Type::Binary); - (yyval.script_module)->binary.name = std::move(*(yyvsp[-3].string)); - delete (yyvsp[-3].string); + (yyval.script_module)->binary.name = MoveAndDelete((yyvsp[-3].string)); (yyval.script_module)->binary.loc = (yylsp[-4]); - RemoveEscapes(*(yyvsp[-1].texts), std::back_inserter((yyval.script_module)->binary.data)); - delete (yyvsp[-1].texts); + RemoveEscapes(MoveAndDelete((yyvsp[-1].texts)), std::back_inserter((yyval.script_module)->binary.data)); } -#line 4202 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4111 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 194: -#line 1473 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1382 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.script_module) = new ScriptModule(ScriptModule::Type::Quoted); - (yyval.script_module)->quoted.name = std::move(*(yyvsp[-3].string)); - delete (yyvsp[-3].string); + (yyval.script_module)->quoted.name = MoveAndDelete((yyvsp[-3].string)); (yyval.script_module)->quoted.loc = (yylsp[-4]); - RemoveEscapes(*(yyvsp[-1].texts), std::back_inserter((yyval.script_module)->quoted.data)); - delete (yyvsp[-1].texts); + RemoveEscapes(MoveAndDelete((yyvsp[-1].texts)), std::back_inserter((yyval.script_module)->quoted.data)); } -#line 4215 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4122 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 195: -#line 1484 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1391 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.action) = new Action(); (yyval.action)->loc = (yylsp[-4]); - (yyval.action)->module_var = std::move(*(yyvsp[-3].var)); - delete (yyvsp[-3].var); + (yyval.action)->module_var = MoveAndDelete((yyvsp[-3].var)); (yyval.action)->type = ActionType::Invoke; - (yyval.action)->name = std::move(*(yyvsp[-2].string)); - delete (yyvsp[-2].string); + (yyval.action)->name = MoveAndDelete((yyvsp[-2].string)); (yyval.action)->invoke = new ActionInvoke(); - (yyval.action)->invoke->args = std::move(*(yyvsp[-1].consts)); - delete (yyvsp[-1].consts); + (yyval.action)->invoke->args = MoveAndDelete((yyvsp[-1].consts)); } -#line 4232 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4136 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 196: -#line 1496 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1400 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.action) = new Action(); (yyval.action)->loc = (yylsp[-3]); - (yyval.action)->module_var = std::move(*(yyvsp[-2].var)); - delete (yyvsp[-2].var); + (yyval.action)->module_var = MoveAndDelete((yyvsp[-2].var)); (yyval.action)->type = ActionType::Get; - (yyval.action)->name = std::move(*(yyvsp[-1].string)); - delete (yyvsp[-1].string); + (yyval.action)->name = MoveAndDelete((yyvsp[-1].string)); } -#line 4246 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4148 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 197: -#line 1508 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1410 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.command) = new AssertMalformedCommand((yyvsp[-2].script_module), std::move(*(yyvsp[-1].string))); - delete (yyvsp[-1].string); + (yyval.command) = new AssertMalformedCommand((yyvsp[-2].script_module), MoveAndDelete((yyvsp[-1].string))); } -#line 4255 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4156 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 198: -#line 1512 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1413 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.command) = new AssertInvalidCommand((yyvsp[-2].script_module), std::move(*(yyvsp[-1].string))); - delete (yyvsp[-1].string); + (yyval.command) = new AssertInvalidCommand((yyvsp[-2].script_module), MoveAndDelete((yyvsp[-1].string))); } -#line 4264 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4164 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 199: -#line 1516 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1416 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.command) = new AssertUnlinkableCommand((yyvsp[-2].script_module), std::move(*(yyvsp[-1].string))); - delete (yyvsp[-1].string); + (yyval.command) = new AssertUnlinkableCommand((yyvsp[-2].script_module), MoveAndDelete((yyvsp[-1].string))); } -#line 4273 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4172 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 200: -#line 1520 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1419 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.command) = new AssertUninstantiableCommand((yyvsp[-2].script_module), std::move(*(yyvsp[-1].string))); - delete (yyvsp[-1].string); + (yyval.command) = new AssertUninstantiableCommand((yyvsp[-2].script_module), MoveAndDelete((yyvsp[-1].string))); } -#line 4282 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4180 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 201: -#line 1524 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1422 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.command) = new AssertReturnCommand((yyvsp[-2].action), (yyvsp[-1].consts)); } -#line 4290 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4188 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 202: -#line 1527 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1425 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.command) = new AssertReturnCanonicalNanCommand((yyvsp[-1].action)); } -#line 4298 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4196 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 203: -#line 1530 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1428 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.command) = new AssertReturnArithmeticNanCommand((yyvsp[-1].action)); } -#line 4306 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4204 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 204: -#line 1533 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1431 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.command) = new AssertTrapCommand((yyvsp[-2].action), std::move(*(yyvsp[-1].string))); - delete (yyvsp[-1].string); + (yyval.command) = new AssertTrapCommand((yyvsp[-2].action), MoveAndDelete((yyvsp[-1].string))); } -#line 4315 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4212 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 205: -#line 1537 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1434 "src/wast-parser.y" /* yacc.c:1646 */ { - (yyval.command) = new AssertExhaustionCommand((yyvsp[-2].action), std::move(*(yyvsp[-1].string))); - delete (yyvsp[-1].string); + (yyval.command) = new AssertExhaustionCommand((yyvsp[-2].action), MoveAndDelete((yyvsp[-1].string))); } -#line 4324 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4220 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 206: -#line 1544 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1440 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.command) = new ActionCommand((yyvsp[0].action)); } -#line 4332 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4228 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 208: -#line 1548 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1444 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.command) = new ModuleCommand((yyvsp[0].module)); } -#line 4340 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4236 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 209: -#line 1551 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1447 "src/wast-parser.y" /* yacc.c:1646 */ { - auto* command = new RegisterCommand(std::move(*(yyvsp[-2].string)), *(yyvsp[-1].var)); - delete (yyvsp[-2].string); - delete (yyvsp[-1].var); + auto* command = new RegisterCommand(MoveAndDelete((yyvsp[-2].string)), MoveAndDelete((yyvsp[-1].var))); command->var.loc = (yylsp[-1]); (yyval.command) = command; } -#line 4352 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4246 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 210: -#line 1560 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1454 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.commands) = new CommandPtrVector(); (yyval.commands)->emplace_back((yyvsp[0].command)); } -#line 4361 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4255 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 211: -#line 1564 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1458 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.commands) = (yyvsp[-1].commands); (yyval.commands)->emplace_back((yyvsp[0].command)); } -#line 4370 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4264 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 212: -#line 1571 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1465 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.const_).loc = (yylsp[-2]); - string_view sv = (yyvsp[-1].literal)->text; - if (Failed(parse_const((yyvsp[-2].t_type), (yyvsp[-1].literal)->type, sv.begin(), sv.end(), &(yyval.const_)))) { + auto literal = MoveAndDelete((yyvsp[-1].literal)); + if (Failed(ParseConst((yyvsp[-2].t_type), literal, &(yyval.const_)))) { wast_parser_error(&(yylsp[-1]), lexer, parser, "invalid literal \"%s\"", - (yyvsp[-1].literal)->text.c_str()); + literal.text.c_str()); } - delete (yyvsp[-1].literal); } -#line 4384 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4277 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 213: -#line 1582 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1475 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.consts) = new ConstVector(); } -#line 4390 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4283 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 214: -#line 1583 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1476 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.consts) = (yyvsp[-1].consts); (yyval.consts)->push_back((yyvsp[0].const_)); } -#line 4399 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4292 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 215: -#line 1590 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1483 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.script) = new Script(); } -#line 4407 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4300 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 216: -#line 1593 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1486 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.script) = new Script(); - (yyval.script)->commands = std::move(*(yyvsp[0].commands)); - delete (yyvsp[0].commands); + (yyval.script)->commands = MoveAndDelete((yyvsp[0].commands)); int last_module_index = -1; for (size_t i = 0; i < (yyval.script)->commands.size(); ++i) { @@ -4471,26 +4363,26 @@ yyreduce: } } } -#line 4475 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4367 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 217: -#line 1656 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1548 "src/wast-parser.y" /* yacc.c:1646 */ { (yyval.script) = new Script(); (yyval.script)->commands.emplace_back(new ModuleCommand((yyvsp[0].module))); } -#line 4484 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4376 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; case 218: -#line 1665 "src/wast-parser.y" /* yacc.c:1646 */ +#line 1557 "src/wast-parser.y" /* yacc.c:1646 */ { parser->script = (yyvsp[0].script); } -#line 4490 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4382 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ break; -#line 4494 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ +#line 4386 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -4725,14 +4617,14 @@ yyreturn: #endif return yyresult; } -#line 1668 "src/wast-parser.y" /* yacc.c:1906 */ +#line 1560 "src/wast-parser.y" /* yacc.c:1906 */ + +Result ParseConst(Type type, const Literal& literal, Const* out) { + string_view sv = literal.text; + const char* s = sv.begin(); + const char* end = sv.end(); -Result parse_const(Type type, - LiteralType literal_type, - const char* s, - const char* end, - Const* out) { out->type = type; switch (type) { case Type::I32: @@ -4740,9 +4632,9 @@ Result parse_const(Type type, case Type::I64: return parse_int64(s, end, &out->u64, ParseIntType::SignedAndUnsigned); case Type::F32: - return parse_float(literal_type, s, end, &out->f32_bits); + return parse_float(literal.type, s, end, &out->f32_bits); case Type::F64: - return parse_double(literal_type, s, end, &out->f64_bits); + return parse_double(literal.type, s, end, &out->f64_bits); default: assert(0); break; @@ -4750,13 +4642,13 @@ Result parse_const(Type type, return Result::Error; } -void reverse_bindings(TypeVector* types, BindingHash* bindings) { +void ReverseBindings(TypeVector* types, BindingHash* bindings) { for (auto& pair : *bindings) { pair.second.index = types->size() - pair.second.index - 1; } } -bool is_empty_signature(const FuncSignature* sig) { +bool IsEmptySignature(const FuncSignature* sig) { return sig->result_types.empty() && sig->param_types.empty(); } @@ -4774,8 +4666,8 @@ void append_implicit_func_declaration(Location* loc, } } -void check_import_ordering(Location* loc, WastLexer* lexer, WastParser* parser, - Module* module, const ModuleFieldList& fields) { +void CheckImportOrdering(Location* loc, WastLexer* lexer, WastParser* parser, + Module* module, const ModuleFieldList& fields) { for (const ModuleField& field: fields) { if (field.type == ModuleFieldType::Import) { if (module->funcs.size() != module->num_func_imports || @@ -4791,11 +4683,11 @@ void check_import_ordering(Location* loc, WastLexer* lexer, WastParser* parser, } } -void append_module_fields(Module* module, ModuleFieldList* fields) { - ModuleField* main_field = &fields->front(); +void AppendModuleFields(Module* module, ModuleFieldList&& fields) { + ModuleField* main_field = &fields.front(); Index main_index = kInvalidIndex; - for (ModuleField& field : *fields) { + for (ModuleField& field : fields) { std::string* name = nullptr; BindingHash* bindings = nullptr; Index index = kInvalidIndex; @@ -4953,7 +4845,7 @@ void append_module_fields(Module* module, ModuleFieldList* fields) { } } - module->fields.splice(module->fields.end(), *fields); + module->fields.splice(module->fields.end(), fields); } Result parse_wast(WastLexer* lexer, Script** out_script, diff --git a/src/wast-parser.y b/src/wast-parser.y index 202c5805..4b29d781 100644 --- a/src/wast-parser.y +++ b/src/wast-parser.y @@ -106,26 +106,22 @@ namespace wabt { -static bool is_power_of_two(uint32_t x) { +static bool IsPowerOfTwo(uint32_t x) { return x && ((x & (x - 1)) == 0); } -static Result parse_const(Type type, - LiteralType literal_type, - const char* s, - const char* end, - Const* out); +Result ParseConst(Type type, const Literal& literal, Const* out); -static void reverse_bindings(TypeVector*, BindingHash*); +static void ReverseBindings(TypeVector*, BindingHash*); -static bool is_empty_signature(const FuncSignature* sig); +static bool IsEmptySignature(const FuncSignature* sig); -static void check_import_ordering(Location* loc, - WastLexer* lexer, - WastParser* parser, - Module* module, - const ModuleFieldList&); -static void append_module_fields(Module*, ModuleFieldList*); +static void CheckImportOrdering(Location* loc, + WastLexer* lexer, + WastParser* parser, + Module* module, + const ModuleFieldList&); +static void AppendModuleFields(Module*, ModuleFieldList&&); class BinaryErrorHandlerModule : public ErrorHandler { public: @@ -206,6 +202,24 @@ void RemoveEscapes(const TextVector& texts, OutputIter out) { RemoveEscapes(text, out); } +template <typename T> +T MoveAndDelete(T* ptr) { + T result = std::move(*ptr); + delete ptr; + return result; +} + +template <typename T, typename U> +void PrependAndDelete(T& dest, U* source) { + dest.insert(dest.begin(), std::begin(*source), std::end(*source)); + delete source; +} + +template <typename T, typename U> +void AppendAndDelete(T& dest, U* source) { + dest.insert(dest.end(), std::begin(*source), std::end(*source)); + delete source; +} #define wabt_wast_parser_lex(...) lexer->GetToken(__VA_ARGS__, parser) #define wabt_wast_parser_error wast_parser_error @@ -368,8 +382,7 @@ func_sig : func_sig_result | LPAR PARAM value_type_list RPAR func_sig { $$ = $5; - $$->param_types.insert($$->param_types.begin(), $3->begin(), $3->end()); - delete $3; + PrependAndDelete($$->param_types, $3); } | LPAR PARAM bind_var VALUE_TYPE RPAR func_sig { $$ = $6; @@ -383,8 +396,7 @@ func_sig_result : /* empty */ { $$ = new FuncSignature(); } | LPAR RESULT value_type_list RPAR func_sig_result { $$ = $5; - $$->result_types.insert($$->result_types.begin(), $3->begin(), $3->end()); - delete $3; + PrependAndDelete($$->result_types, $3); } ; @@ -453,8 +465,7 @@ var_list : /* empty */ { $$ = new VarVector(); } | var_list var { $$ = $1; - $$->emplace_back(std::move(*$2)); - delete $2; + $$->emplace_back(MoveAndDelete($2)); } ; bind_var_opt : @@ -499,7 +510,7 @@ align_opt : WABT_PRINTF_STRING_VIEW_ARG(sv)); } - if ($$ != WABT_USE_NATURAL_ALIGNMENT && !is_power_of_two($$)) { + if ($$ != WABT_USE_NATURAL_ALIGNMENT && !IsPowerOfTwo($$)) { wast_parser_error(&@1, lexer, parser, "alignment must be power-of-two"); } } @@ -531,47 +542,37 @@ plain_instr : $$ = new SelectExpr(); } | BR var { - $$ = new BrExpr(std::move(*$2)); - delete $2; + $$ = new BrExpr(MoveAndDelete($2)); } | BR_IF var { - $$ = new BrIfExpr(std::move(*$2)); - delete $2; + $$ = new BrIfExpr(MoveAndDelete($2)); } | BR_TABLE var_list var { - $$ = new BrTableExpr($2, std::move(*$3)); - delete $3; + $$ = new BrTableExpr($2, MoveAndDelete($3)); } | RETURN { $$ = new ReturnExpr(); } | CALL var { - $$ = new CallExpr(std::move(*$2)); - delete $2; + $$ = new CallExpr(MoveAndDelete($2)); } | CALL_INDIRECT var { - $$ = new CallIndirectExpr(std::move(*$2)); - delete $2; + $$ = new CallIndirectExpr(MoveAndDelete($2)); } | GET_LOCAL var { - $$ = new GetLocalExpr(std::move(*$2)); - delete $2; + $$ = new GetLocalExpr(MoveAndDelete($2)); } | SET_LOCAL var { - $$ = new SetLocalExpr(std::move(*$2)); - delete $2; + $$ = new SetLocalExpr(MoveAndDelete($2)); } | TEE_LOCAL var { - $$ = new TeeLocalExpr(std::move(*$2)); - delete $2; + $$ = new TeeLocalExpr(MoveAndDelete($2)); } | GET_GLOBAL var { - $$ = new GetGlobalExpr(std::move(*$2)); - delete $2; + $$ = new GetGlobalExpr(MoveAndDelete($2)); } | SET_GLOBAL var { - $$ = new SetGlobalExpr(std::move(*$2)); - delete $2; + $$ = new SetGlobalExpr(MoveAndDelete($2)); } | LOAD offset_opt align_opt { $$ = new LoadExpr($1, $3, $2); @@ -582,12 +583,11 @@ plain_instr : | CONST literal { Const const_; const_.loc = @1; - string_view sv = $2->text; - if (Failed(parse_const($1, $2->type, sv.begin(), sv.end(), &const_))) { + auto literal = MoveAndDelete($2); + if (Failed(ParseConst($1, literal, &const_))) { wast_parser_error(&@2, lexer, parser, "invalid literal \"%s\"", - $2->text.c_str()); + literal.text.c_str()); } - delete $2; $$ = new ConstExpr(const_); } | UNARY { @@ -609,49 +609,41 @@ plain_instr : $$ = new GrowMemoryExpr(); } | throw_check var { - $$ = new ThrowExpr(std::move(*$2)); - delete $2; + $$ = new ThrowExpr(MoveAndDelete($2)); } | rethrow_check var { - $$ = new RethrowExpr(std::move(*$2)); - delete $2; + $$ = new RethrowExpr(MoveAndDelete($2)); } ; block_instr : BLOCK labeling_opt block END labeling_opt { auto expr = new BlockExpr($3); - expr->block->label = std::move(*$2); - delete $2; + expr->block->label = MoveAndDelete($2); CHECK_END_LABEL(@5, expr->block->label, $5); $$ = expr; } | LOOP labeling_opt block END labeling_opt { auto expr = new LoopExpr($3); - expr->block->label = std::move(*$2); - delete $2; + expr->block->label = MoveAndDelete($2); CHECK_END_LABEL(@5, expr->block->label, $5); $$ = expr; } | IF labeling_opt block END labeling_opt { auto expr = new IfExpr($3); - expr->true_->label = std::move(*$2); - delete $2; + expr->true_->label = MoveAndDelete($2); CHECK_END_LABEL(@5, expr->true_->label, $5); $$ = expr; } | IF labeling_opt block ELSE labeling_opt instr_list END labeling_opt { - auto expr = new IfExpr($3, std::move(*$6)); - delete $6; - expr->true_->label = std::move(*$2); - delete $2; + auto expr = new IfExpr($3, MoveAndDelete($6)); + expr->true_->label = MoveAndDelete($2); CHECK_END_LABEL(@5, expr->true_->label, $5); CHECK_END_LABEL(@8, expr->true_->label, $8); $$ = expr; } | try_check labeling_opt block catch_instr_list END labeling_opt { - $3->label = std::move(*$2); - delete $2; + $3->label = MoveAndDelete($2); $$ = $4; cast<TryExpr>($$)->block = $3; CHECK_END_LABEL(@6, $3->label, $6); @@ -664,27 +656,22 @@ block_sig : block : block_sig block { $$ = $2; - $$->sig.insert($$->sig.end(), $1->begin(), $1->end()); - delete $1; + AppendAndDelete($$->sig, $1); } | instr_list { - $$ = new Block(std::move(*$1)); - delete $1; + $$ = new Block(MoveAndDelete($1)); } ; plain_catch : CATCH var instr_list { - $$ = new Catch(std::move(*$2), std::move(*$3)); - delete $2; - delete $3; + $$ = new Catch(MoveAndDelete($2), MoveAndDelete($3)); $$->loc = @1; } ; plain_catch_all : CATCH_ALL instr_list { - $$ = new Catch(std::move(*$2)); - delete $2; + $$ = new Catch(MoveAndDelete($2)); $$->loc = @1; } ; @@ -718,28 +705,24 @@ expr1 : } | BLOCK labeling_opt block { auto expr = new BlockExpr($3); - expr->block->label = std::move(*$2); - delete $2; + expr->block->label = MoveAndDelete($2); expr->loc = @1; $$ = new ExprList(expr); } | LOOP labeling_opt block { auto expr = new LoopExpr($3); - expr->block->label = std::move(*$2); - delete $2; + expr->block->label = MoveAndDelete($2); expr->loc = @1; $$ = new ExprList(expr); } | IF labeling_opt if_block { $$ = $3; IfExpr* if_ = cast<IfExpr>(&$3->back()); - if_->true_->label = std::move(*$2); - delete $2; + if_->true_->label = MoveAndDelete($2); } | try_check labeling_opt try_ { Block* block = $3->block; - block->label = std::move(*$2); - delete $2; + block->label = MoveAndDelete($2); $3->loc = @1; $$ = new ExprList($3); } @@ -749,13 +732,11 @@ try_ : block_sig try_ { $$ = $2; Block* block = $$->block; - block->sig.insert(block->sig.end(), $1->begin(), $1->end()); - delete $1; + AppendAndDelete(block->sig, $1); } | instr_list catch_sexp_list { Block* block = new Block(); - block->exprs = std::move(*$1); - delete $1; + block->exprs = MoveAndDelete($1); $$ = $2; $$->block = block; } @@ -788,51 +769,41 @@ if_block : IfExpr* if_ = cast<IfExpr>(&$2->back()); $$ = $2; Block* true_ = if_->true_; - true_->sig.insert(true_->sig.end(), $1->begin(), $1->end()); - delete $1; + AppendAndDelete(true_->sig, $1); } | if_ ; if_ : LPAR THEN instr_list RPAR LPAR ELSE instr_list RPAR { - Expr* expr = new IfExpr(new Block(std::move(*$3)), std::move(*$7)); - delete $3; - delete $7; + Expr* expr = new IfExpr(new Block(MoveAndDelete($3)), MoveAndDelete($7)); expr->loc = @1; $$ = new ExprList(expr); } | LPAR THEN instr_list RPAR { - Expr* expr = new IfExpr(new Block(std::move(*$3))); - delete $3; + Expr* expr = new IfExpr(new Block(MoveAndDelete($3))); expr->loc = @1; $$ = new ExprList(expr); } | expr LPAR THEN instr_list RPAR LPAR ELSE instr_list RPAR { - Expr* expr = new IfExpr(new Block(std::move(*$4)), std::move(*$8)); - delete $4; - delete $8; + Expr* expr = new IfExpr(new Block(MoveAndDelete($4)), MoveAndDelete($8)); expr->loc = @1; $$ = $1; $$->push_back(expr); } | expr LPAR THEN instr_list RPAR { - Expr* expr = new IfExpr(new Block(std::move(*$4))); - delete $4; + Expr* expr = new IfExpr(new Block(MoveAndDelete($4))); expr->loc = @1; $$ = $1; $$->push_back(expr); } | expr expr expr { - Expr* expr = new IfExpr(new Block(std::move(*$2)), std::move(*$3)); - delete $2; - delete $3; + Expr* expr = new IfExpr(new Block(MoveAndDelete($2)), MoveAndDelete($3)); expr->loc = @1; $$ = $1; $$->push_back(expr); } | expr expr { - Expr* expr = new IfExpr(new Block(std::move(*$2))); - delete $2; + Expr* expr = new IfExpr(new Block(MoveAndDelete($2))); expr->loc = @1; $$ = $1; $$->push_back(expr); @@ -860,16 +831,14 @@ instr_list : /* empty */ { $$ = new ExprList(); } | instr instr_list { $$ = $2; - $$->splice($$->begin(), std::move(*$1)); - delete $1; + $$->splice($$->begin(), MoveAndDelete($1)); } ; expr_list : /* empty */ { $$ = new ExprList(); } | expr expr_list { $$ = $2; - $$->splice($$->begin(), std::move(*$1)); - delete $1; + $$->splice($$->begin(), MoveAndDelete($1)); } const_expr : @@ -879,9 +848,7 @@ const_expr : /* Exceptions */ exception : LPAR EXCEPT bind_var_opt value_type_list RPAR { - $$ = new Exception(*$3, *$4); - delete $3; - delete $4; + $$ = new Exception(MoveAndDelete($3), MoveAndDelete($4)); } ; exception_field : @@ -897,12 +864,11 @@ func : ModuleField* main_field = &$$->front(); main_field->loc = @2; if (auto func_field = dyn_cast<FuncModuleField>(main_field)) { - func_field->func->name = std::move(*$3); + func_field->func->name = MoveAndDelete($3); } else { cast<ImportModuleField>(main_field)->import->func->name = - std::move(*$3); + MoveAndDelete($3); } - delete $3; } ; @@ -910,8 +876,7 @@ func_fields : type_use func_fields_body { auto field = new FuncModuleField($2); field->func->decl.has_func_type = true; - field->func->decl.type_var = std::move(*$1); - delete $1; + field->func->decl.type_var = MoveAndDelete($1); $$ = new ModuleFieldList(field); } | func_fields_body { @@ -922,8 +887,7 @@ func_fields : field->import->kind = ExternalKind::Func; field->import->func = $3; field->import->func->decl.has_func_type = true; - field->import->func->decl.type_var = std::move(*$2); - delete $2; + field->import->func->decl.type_var = MoveAndDelete($2); $$ = new ModuleFieldList(field); } | inline_import func_fields_import { @@ -943,7 +907,7 @@ func_fields : func_fields_import : func_fields_import1 { $$ = $1; - reverse_bindings(&$$->decl.sig.param_types, &$$->param_bindings); + ReverseBindings(&$$->decl.sig.param_types, &$$->param_bindings); } ; @@ -951,15 +915,12 @@ func_fields_import1 : func_fields_import_result | LPAR PARAM value_type_list RPAR func_fields_import1 { $$ = $5; - $$->decl.sig.param_types.insert($$->decl.sig.param_types.begin(), - $3->begin(), $3->end()); - delete $3; + PrependAndDelete($$->decl.sig.param_types, $3); } | LPAR PARAM bind_var VALUE_TYPE RPAR func_fields_import1 { $$ = $6; - $$->param_bindings.emplace(*$3, + $$->param_bindings.emplace(MoveAndDelete($3), Binding(@3, $$->decl.sig.param_types.size())); - delete $3; $$->decl.sig.param_types.insert($$->decl.sig.param_types.begin(), $4); } ; @@ -968,16 +929,14 @@ func_fields_import_result : /* empty */ { $$ = new Func(); } | LPAR RESULT value_type_list RPAR func_fields_import_result { $$ = $5; - $$->decl.sig.result_types.insert($$->decl.sig.result_types.begin(), - $3->begin(), $3->end()); - delete $3; + PrependAndDelete($$->decl.sig.result_types, $3); } ; func_fields_body : func_fields_body1 { $$ = $1; - reverse_bindings(&$$->decl.sig.param_types, &$$->param_bindings); + ReverseBindings(&$$->decl.sig.param_types, &$$->param_bindings); } ; @@ -985,15 +944,12 @@ func_fields_body1 : func_result_body | LPAR PARAM value_type_list RPAR func_fields_body1 { $$ = $5; - $$->decl.sig.param_types.insert($$->decl.sig.param_types.begin(), - $3->begin(), $3->end()); - delete $3; + PrependAndDelete($$->decl.sig.param_types, $3); } | LPAR PARAM bind_var VALUE_TYPE RPAR func_fields_body1 { $$ = $6; - $$->param_bindings.emplace(*$3, + $$->param_bindings.emplace(MoveAndDelete($3), Binding(@3, $$->decl.sig.param_types.size())); - delete $3; $$->decl.sig.param_types.insert($$->decl.sig.param_types.begin(), $4); } ; @@ -1002,34 +958,30 @@ func_result_body : func_body | LPAR RESULT value_type_list RPAR func_result_body { $$ = $5; - $$->decl.sig.result_types.insert($$->decl.sig.result_types.begin(), - $3->begin(), $3->end()); - delete $3; + PrependAndDelete($$->decl.sig.result_types, $3); } ; func_body : func_body1 { $$ = $1; - reverse_bindings(&$$->local_types, &$$->local_bindings); + ReverseBindings(&$$->local_types, &$$->local_bindings); } ; func_body1 : instr_list { $$ = new Func(); - $$->exprs = std::move(*$1); - delete $1; + $$->exprs = MoveAndDelete($1); } | LPAR LOCAL value_type_list RPAR func_body1 { $$ = $5; - $$->local_types.insert($$->local_types.begin(), $3->begin(), $3->end()); - delete $3; + PrependAndDelete($$->local_types, $3); } | LPAR LOCAL bind_var VALUE_TYPE RPAR func_body1 { $$ = $6; - $$->local_bindings.emplace(*$3, Binding(@3, $$->local_types.size())); - delete $3; + $$->local_bindings.emplace(MoveAndDelete($3), + Binding(@3, $$->local_types.size())); $$->local_types.insert($$->local_types.begin(), $4); } ; @@ -1046,21 +998,16 @@ offset : elem : LPAR ELEM var offset var_list RPAR { auto elem_segment = new ElemSegment(); - elem_segment->table_var = std::move(*$3); - delete $3; - elem_segment->offset = std::move(*$4); - delete $4; - elem_segment->vars = std::move(*$5); - delete $5; + elem_segment->table_var = MoveAndDelete($3); + elem_segment->offset = MoveAndDelete($4); + elem_segment->vars = MoveAndDelete($5); $$ = new ElemSegmentModuleField(elem_segment, @2); } | LPAR ELEM offset var_list RPAR { auto elem_segment = new ElemSegment(); elem_segment->table_var = Var(0, @2); - elem_segment->offset = std::move(*$3); - delete $3; - elem_segment->vars = std::move(*$4); - delete $4; + elem_segment->offset = MoveAndDelete($3); + elem_segment->vars = MoveAndDelete($4); $$ = new ElemSegmentModuleField(elem_segment, @2); } ; @@ -1071,12 +1018,11 @@ table : ModuleField* main_field = &$$->front(); main_field->loc = @2; if (auto table_field = dyn_cast<TableModuleField>(main_field)) { - table_field->table->name = std::move(*$3); + table_field->table->name = MoveAndDelete($3); } else { cast<ImportModuleField>(main_field)->import->table->name = - std::move(*$3); + MoveAndDelete($3); } - delete $3; } ; @@ -1106,8 +1052,7 @@ table_fields : elem_segment->table_var = Var(kInvalidIndex); elem_segment->offset.push_back(new ConstExpr(Const(Const::I32(), 0))); elem_segment->offset.back().loc = @3; - elem_segment->vars = std::move(*$4); - delete $4; + elem_segment->vars = MoveAndDelete($4); $$ = new ModuleFieldList(); $$->push_back(new TableModuleField(table)); @@ -1118,21 +1063,16 @@ table_fields : data : LPAR DATA var offset text_list_opt RPAR { auto data_segment = new DataSegment(); - data_segment->memory_var = std::move(*$3); - delete $3; - data_segment->offset = std::move(*$4); - delete $4; - RemoveEscapes(*$5, std::back_inserter(data_segment->data)); - delete $5; + data_segment->memory_var = MoveAndDelete($3); + data_segment->offset = MoveAndDelete($4); + RemoveEscapes(MoveAndDelete($5), std::back_inserter(data_segment->data)); $$ = new DataSegmentModuleField(data_segment, @2); } | LPAR DATA offset text_list_opt RPAR { auto data_segment = new DataSegment(); data_segment->memory_var = Var(0, @2); - data_segment->offset = std::move(*$3); - delete $3; - RemoveEscapes(*$4, std::back_inserter(data_segment->data)); - delete $4; + data_segment->offset = MoveAndDelete($3); + RemoveEscapes(MoveAndDelete($4), std::back_inserter(data_segment->data)); $$ = new DataSegmentModuleField(data_segment, @2); } ; @@ -1143,12 +1083,11 @@ memory : ModuleField* main_field = &$$->front(); main_field->loc = @2; if (auto memory_field = dyn_cast<MemoryModuleField>(main_field)) { - memory_field->memory->name = std::move(*$3); + memory_field->memory->name = MoveAndDelete($3); } else { cast<ImportModuleField>(main_field)->import->memory->name = - std::move(*$3); + MoveAndDelete($3); } - delete $3; } ; @@ -1173,8 +1112,7 @@ memory_fields : data_segment->memory_var = Var(kInvalidIndex); data_segment->offset.push_back(new ConstExpr(Const(Const::I32(), 0))); data_segment->offset.back().loc = @2; - RemoveEscapes(*$3, std::back_inserter(data_segment->data)); - delete $3; + RemoveEscapes(MoveAndDelete($3), std::back_inserter(data_segment->data)); uint32_t byte_size = WABT_ALIGN_UP_TO_PAGE(data_segment->data.size()); uint32_t page_size = WABT_BYTES_TO_PAGES(byte_size); @@ -1196,20 +1134,18 @@ global : ModuleField* main_field = &$$->front(); main_field->loc = @2; if (auto global_field = dyn_cast<GlobalModuleField>(main_field)) { - global_field->global->name = std::move(*$3); + global_field->global->name = MoveAndDelete($3); } else { cast<ImportModuleField>(main_field)->import->global->name = - std::move(*$3); + MoveAndDelete($3); } - delete $3; } ; global_fields : global_type const_expr { auto field = new GlobalModuleField($1); - field->global->init_expr = std::move(*$2); - delete $2; + field->global->init_expr = MoveAndDelete($2); $$ = new ModuleFieldList(field); } | inline_import global_type { @@ -1233,41 +1169,34 @@ import_desc : $$ = new Import(); $$->kind = ExternalKind::Func; $$->func = new Func(); - $$->func->name = std::move(*$3); - delete $3; + $$->func->name = MoveAndDelete($3); $$->func->decl.has_func_type = true; - $$->func->decl.type_var = std::move(*$4); - delete $4; + $$->func->decl.type_var = MoveAndDelete($4); } | LPAR FUNC bind_var_opt func_sig RPAR { $$ = new Import(); $$->kind = ExternalKind::Func; $$->func = new Func(); - $$->func->name = std::move(*$3); - delete $3; - $$->func->decl.sig = std::move(*$4); - delete $4; + $$->func->name = MoveAndDelete($3); + $$->func->decl.sig = MoveAndDelete($4); } | LPAR TABLE bind_var_opt table_sig RPAR { $$ = new Import(); $$->kind = ExternalKind::Table; $$->table = $4; - $$->table->name = std::move(*$3); - delete $3; + $$->table->name = MoveAndDelete($3); } | LPAR MEMORY bind_var_opt memory_sig RPAR { $$ = new Import(); $$->kind = ExternalKind::Memory; $$->memory = $4; - $$->memory->name = std::move(*$3); - delete $3; + $$->memory->name = MoveAndDelete($3); } | LPAR GLOBAL bind_var_opt global_type RPAR { $$ = new Import(); $$->kind = ExternalKind::Global; $$->global = $4; - $$->global->name = std::move(*$3); - delete $3; + $$->global->name = MoveAndDelete($3); } | exception { $$ = new Import(); @@ -1279,10 +1208,8 @@ import_desc : import : LPAR IMPORT quoted_text quoted_text import_desc RPAR { auto field = new ImportModuleField($5, @2); - field->import->module_name = std::move(*$3); - delete $3; - field->import->field_name = std::move(*$4); - delete $4; + field->import->module_name = MoveAndDelete($3); + field->import->field_name = MoveAndDelete($4); $$ = field; } ; @@ -1290,10 +1217,8 @@ import : inline_import : LPAR IMPORT quoted_text quoted_text RPAR { $$ = new Import(); - $$->module_name = std::move(*$3); - delete $3; - $$->field_name = std::move(*$4); - delete $4; + $$->module_name = MoveAndDelete($3); + $$->field_name = MoveAndDelete($4); } ; @@ -1301,39 +1226,33 @@ export_desc : LPAR FUNC var RPAR { $$ = new Export(); $$->kind = ExternalKind::Func; - $$->var = std::move(*$3); - delete $3; + $$->var = MoveAndDelete($3); } | LPAR TABLE var RPAR { $$ = new Export(); $$->kind = ExternalKind::Table; - $$->var = std::move(*$3); - delete $3; + $$->var = MoveAndDelete($3); } | LPAR MEMORY var RPAR { $$ = new Export(); $$->kind = ExternalKind::Memory; - $$->var = std::move(*$3); - delete $3; + $$->var = MoveAndDelete($3); } | LPAR GLOBAL var RPAR { $$ = new Export(); $$->kind = ExternalKind::Global; - $$->var = std::move(*$3); - delete $3; + $$->var = MoveAndDelete($3); } | LPAR EXCEPT var RPAR { $$ = new Export(); $$->kind = ExternalKind::Except; - $$->var = std::move(*$3); - delete $3; + $$->var = MoveAndDelete($3); } ; export : LPAR EXPORT quoted_text export_desc RPAR { auto field = new ExportModuleField($4, @2); - field->export_->name = std::move(*$3); - delete $3; + field->export_->name = MoveAndDelete($3); $$ = field; } ; @@ -1341,8 +1260,7 @@ export : inline_export : LPAR EXPORT quoted_text RPAR { $$ = new Export(); - $$->name = std::move(*$3); - delete $3; + $$->name = MoveAndDelete($3); } ; @@ -1352,24 +1270,20 @@ inline_export : type_def : LPAR TYPE func_type RPAR { auto func_type = new FuncType(); - func_type->sig = std::move(*$3); - delete $3; + func_type->sig = MoveAndDelete($3); $$ = new FuncTypeModuleField(func_type, @2); } | LPAR TYPE bind_var func_type RPAR { auto func_type = new FuncType(); - func_type->name = std::move(*$3); - delete $3; - func_type->sig = std::move(*$4); - delete $4; + func_type->name = MoveAndDelete($3); + func_type->sig = MoveAndDelete($4); $$ = new FuncTypeModuleField(func_type, @2); } ; start : LPAR START var RPAR { - $$ = new StartModuleField(*$3, @2); - delete $3; + $$ = new StartModuleField(MoveAndDelete($3), @2); } ; @@ -1395,15 +1309,13 @@ module_fields_opt : module_fields : module_field { $$ = new Module(); - check_import_ordering(&@1, lexer, parser, $$, *$1); - append_module_fields($$, $1); - delete $1; + CheckImportOrdering(&@1, lexer, parser, $$, *$1); + AppendModuleFields($$, MoveAndDelete($1)); } | module_fields module_field { $$ = $1; - check_import_ordering(&@2, lexer, parser, $$, *$2); - append_module_fields($$, $2); - delete $2; + CheckImportOrdering(&@2, lexer, parser, $$, *$2); + AppendModuleFields($$, MoveAndDelete($2)); } ; @@ -1447,14 +1359,13 @@ script_module : LPAR MODULE bind_var_opt module_fields_opt RPAR { $$ = new ScriptModule(ScriptModule::Type::Text); $$->text = $4; - $$->text->name = std::move(*$3); - delete $3; + $$->text->name = MoveAndDelete($3); $$->text->loc = @2; // Resolve func type variables where the signature was not specified // explicitly. for (Func* func: $4->funcs) { - if (func->decl.has_func_type && is_empty_signature(&func->decl.sig)) { + if (func->decl.has_func_type && IsEmptySignature(&func->decl.sig)) { FuncType* func_type = $4->GetFuncType(func->decl.type_var); if (func_type) { func->decl.sig = func_type->sig; @@ -1464,19 +1375,15 @@ script_module : } | LPAR MODULE bind_var_opt BIN text_list RPAR { $$ = new ScriptModule(ScriptModule::Type::Binary); - $$->binary.name = std::move(*$3); - delete $3; + $$->binary.name = MoveAndDelete($3); $$->binary.loc = @2; - RemoveEscapes(*$5, std::back_inserter($$->binary.data)); - delete $5; + RemoveEscapes(MoveAndDelete($5), std::back_inserter($$->binary.data)); } | LPAR MODULE bind_var_opt QUOTE text_list RPAR { $$ = new ScriptModule(ScriptModule::Type::Quoted); - $$->quoted.name = std::move(*$3); - delete $3; + $$->quoted.name = MoveAndDelete($3); $$->quoted.loc = @2; - RemoveEscapes(*$5, std::back_inserter($$->quoted.data)); - delete $5; + RemoveEscapes(MoveAndDelete($5), std::back_inserter($$->quoted.data)); } ; @@ -1484,42 +1391,33 @@ action : LPAR INVOKE script_var_opt quoted_text const_list RPAR { $$ = new Action(); $$->loc = @2; - $$->module_var = std::move(*$3); - delete $3; + $$->module_var = MoveAndDelete($3); $$->type = ActionType::Invoke; - $$->name = std::move(*$4); - delete $4; + $$->name = MoveAndDelete($4); $$->invoke = new ActionInvoke(); - $$->invoke->args = std::move(*$5); - delete $5; + $$->invoke->args = MoveAndDelete($5); } | LPAR GET script_var_opt quoted_text RPAR { $$ = new Action(); $$->loc = @2; - $$->module_var = std::move(*$3); - delete $3; + $$->module_var = MoveAndDelete($3); $$->type = ActionType::Get; - $$->name = std::move(*$4); - delete $4; + $$->name = MoveAndDelete($4); } ; assertion : LPAR ASSERT_MALFORMED script_module quoted_text RPAR { - $$ = new AssertMalformedCommand($3, std::move(*$4)); - delete $4; + $$ = new AssertMalformedCommand($3, MoveAndDelete($4)); } | LPAR ASSERT_INVALID script_module quoted_text RPAR { - $$ = new AssertInvalidCommand($3, std::move(*$4)); - delete $4; + $$ = new AssertInvalidCommand($3, MoveAndDelete($4)); } | LPAR ASSERT_UNLINKABLE script_module quoted_text RPAR { - $$ = new AssertUnlinkableCommand($3, std::move(*$4)); - delete $4; + $$ = new AssertUnlinkableCommand($3, MoveAndDelete($4)); } | LPAR ASSERT_TRAP script_module quoted_text RPAR { - $$ = new AssertUninstantiableCommand($3, std::move(*$4)); - delete $4; + $$ = new AssertUninstantiableCommand($3, MoveAndDelete($4)); } | LPAR ASSERT_RETURN action const_list RPAR { $$ = new AssertReturnCommand($3, $4); @@ -1531,12 +1429,10 @@ assertion : $$ = new AssertReturnArithmeticNanCommand($3); } | LPAR ASSERT_TRAP action quoted_text RPAR { - $$ = new AssertTrapCommand($3, std::move(*$4)); - delete $4; + $$ = new AssertTrapCommand($3, MoveAndDelete($4)); } | LPAR ASSERT_EXHAUSTION action quoted_text RPAR { - $$ = new AssertExhaustionCommand($3, std::move(*$4)); - delete $4; + $$ = new AssertExhaustionCommand($3, MoveAndDelete($4)); } ; @@ -1549,9 +1445,7 @@ cmd : $$ = new ModuleCommand($1); } | LPAR REGISTER quoted_text script_var_opt RPAR { - auto* command = new RegisterCommand(std::move(*$3), *$4); - delete $3; - delete $4; + auto* command = new RegisterCommand(MoveAndDelete($3), MoveAndDelete($4)); command->var.loc = @4; $$ = command; } @@ -1570,12 +1464,11 @@ cmd_list : const : LPAR CONST literal RPAR { $$.loc = @2; - string_view sv = $3->text; - if (Failed(parse_const($2, $3->type, sv.begin(), sv.end(), &$$))) { + auto literal = MoveAndDelete($3); + if (Failed(ParseConst($2, literal, &$$))) { wast_parser_error(&@3, lexer, parser, "invalid literal \"%s\"", - $3->text.c_str()); + literal.text.c_str()); } - delete $3; } ; const_list : @@ -1592,8 +1485,7 @@ script : } | cmd_list { $$ = new Script(); - $$->commands = std::move(*$1); - delete $1; + $$->commands = MoveAndDelete($1); int last_module_index = -1; for (size_t i = 0; i < $$->commands.size(); ++i) { @@ -1667,11 +1559,11 @@ script_start : %% -Result parse_const(Type type, - LiteralType literal_type, - const char* s, - const char* end, - Const* out) { +Result ParseConst(Type type, const Literal& literal, Const* out) { + string_view sv = literal.text; + const char* s = sv.begin(); + const char* end = sv.end(); + out->type = type; switch (type) { case Type::I32: @@ -1679,9 +1571,9 @@ Result parse_const(Type type, case Type::I64: return parse_int64(s, end, &out->u64, ParseIntType::SignedAndUnsigned); case Type::F32: - return parse_float(literal_type, s, end, &out->f32_bits); + return parse_float(literal.type, s, end, &out->f32_bits); case Type::F64: - return parse_double(literal_type, s, end, &out->f64_bits); + return parse_double(literal.type, s, end, &out->f64_bits); default: assert(0); break; @@ -1689,13 +1581,13 @@ Result parse_const(Type type, return Result::Error; } -void reverse_bindings(TypeVector* types, BindingHash* bindings) { +void ReverseBindings(TypeVector* types, BindingHash* bindings) { for (auto& pair : *bindings) { pair.second.index = types->size() - pair.second.index - 1; } } -bool is_empty_signature(const FuncSignature* sig) { +bool IsEmptySignature(const FuncSignature* sig) { return sig->result_types.empty() && sig->param_types.empty(); } @@ -1713,8 +1605,8 @@ void append_implicit_func_declaration(Location* loc, } } -void check_import_ordering(Location* loc, WastLexer* lexer, WastParser* parser, - Module* module, const ModuleFieldList& fields) { +void CheckImportOrdering(Location* loc, WastLexer* lexer, WastParser* parser, + Module* module, const ModuleFieldList& fields) { for (const ModuleField& field: fields) { if (field.type == ModuleFieldType::Import) { if (module->funcs.size() != module->num_func_imports || @@ -1730,11 +1622,11 @@ void check_import_ordering(Location* loc, WastLexer* lexer, WastParser* parser, } } -void append_module_fields(Module* module, ModuleFieldList* fields) { - ModuleField* main_field = &fields->front(); +void AppendModuleFields(Module* module, ModuleFieldList&& fields) { + ModuleField* main_field = &fields.front(); Index main_index = kInvalidIndex; - for (ModuleField& field : *fields) { + for (ModuleField& field : fields) { std::string* name = nullptr; BindingHash* bindings = nullptr; Index index = kInvalidIndex; @@ -1892,7 +1784,7 @@ void append_module_fields(Module* module, ModuleFieldList* fields) { } } - module->fields.splice(module->fields.end(), *fields); + module->fields.splice(module->fields.end(), fields); } Result parse_wast(WastLexer* lexer, Script** out_script, |