summaryrefslogtreecommitdiff
path: root/src/prebuilt/wast-parser-gen.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/prebuilt/wast-parser-gen.cc')
-rw-r--r--src/prebuilt/wast-parser-gen.cc583
1 files changed, 288 insertions, 295 deletions
diff --git a/src/prebuilt/wast-parser-gen.cc b/src/prebuilt/wast-parser-gen.cc
index 5d566266..2454772e 100644
--- a/src/prebuilt/wast-parser-gen.cc
+++ b/src/prebuilt/wast-parser-gen.cc
@@ -189,8 +189,8 @@ static void check_import_ordering(Location* loc,
WastLexer* lexer,
WastParser* parser,
Module* module,
- ModuleField* first);
-static void append_module_fields(Module*, ModuleField*);
+ const ModuleFieldList&);
+static void append_module_fields(Module*, ModuleFieldList*);
class BinaryErrorHandlerModule : public BinaryErrorHandler {
public:
@@ -680,17 +680,17 @@ static const yytype_uint16 yyrline[] =
653, 657, 662, 669, 673, 678, 684, 690, 695, 704,
710, 720, 723, 729, 734, 742, 749, 752, 759, 765,
773, 780, 788, 798, 803, 809, 815, 816, 823, 824,
- 831, 836, 844, 851, 864, 871, 875, 884, 890, 899,
- 906, 907, 913, 923, 924, 933, 940, 941, 947, 957,
- 958, 967, 974, 979, 984, 996, 999, 1003, 1013, 1027,
- 1040, 1044, 1050, 1056, 1076, 1086, 1100, 1113, 1117, 1123,
- 1129, 1152, 1165, 1171, 1177, 1188, 1197, 1205, 1211, 1217,
- 1223, 1231, 1240, 1248, 1254, 1260, 1266, 1272, 1280, 1288,
- 1298, 1304, 1314, 1321, 1322, 1323, 1324, 1325, 1326, 1327,
- 1328, 1329, 1330, 1331, 1335, 1336, 1340, 1345, 1353, 1374,
- 1381, 1384, 1392, 1410, 1418, 1429, 1440, 1451, 1454, 1457,
- 1460, 1463, 1466, 1469, 1472, 1475, 1481, 1484, 1485, 1488,
- 1496, 1500, 1507, 1519, 1520, 1527, 1530, 1594, 1603
+ 831, 836, 842, 849, 862, 869, 872, 881, 887, 896,
+ 903, 904, 910, 920, 921, 930, 937, 938, 944, 954,
+ 955, 964, 971, 976, 981, 993, 996, 1000, 1010, 1024,
+ 1037, 1040, 1046, 1052, 1072, 1082, 1096, 1109, 1112, 1118,
+ 1124, 1147, 1160, 1166, 1172, 1183, 1192, 1200, 1206, 1212,
+ 1218, 1226, 1235, 1243, 1249, 1255, 1261, 1267, 1275, 1283,
+ 1293, 1299, 1309, 1316, 1317, 1318, 1319, 1320, 1321, 1322,
+ 1323, 1324, 1325, 1326, 1330, 1331, 1335, 1341, 1350, 1371,
+ 1378, 1381, 1389, 1407, 1415, 1426, 1437, 1448, 1451, 1454,
+ 1457, 1460, 1463, 1466, 1469, 1472, 1478, 1481, 1482, 1485,
+ 1493, 1497, 1504, 1516, 1517, 1524, 1527, 1591, 1600
};
#endif
@@ -1932,13 +1932,13 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
case 129: /* func */
#line 235 "src/wast-parser.y" /* yacc.c:1257 */
- { destroy_module_field_list(&((*yyvaluep).module_fields)); }
+ { delete ((*yyvaluep).module_fields); }
#line 1937 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 130: /* func_fields */
#line 235 "src/wast-parser.y" /* yacc.c:1257 */
- { destroy_module_field_list(&((*yyvaluep).module_fields)); }
+ { delete ((*yyvaluep).module_fields); }
#line 1943 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
@@ -1998,37 +1998,37 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
case 141: /* table */
#line 235 "src/wast-parser.y" /* yacc.c:1257 */
- { destroy_module_field_list(&((*yyvaluep).module_fields)); }
+ { delete ((*yyvaluep).module_fields); }
#line 2003 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 142: /* table_fields */
#line 235 "src/wast-parser.y" /* yacc.c:1257 */
- { destroy_module_field_list(&((*yyvaluep).module_fields)); }
+ { delete ((*yyvaluep).module_fields); }
#line 2009 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 144: /* memory */
#line 235 "src/wast-parser.y" /* yacc.c:1257 */
- { destroy_module_field_list(&((*yyvaluep).module_fields)); }
+ { delete ((*yyvaluep).module_fields); }
#line 2015 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 145: /* memory_fields */
#line 235 "src/wast-parser.y" /* yacc.c:1257 */
- { destroy_module_field_list(&((*yyvaluep).module_fields)); }
+ { delete ((*yyvaluep).module_fields); }
#line 2021 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 146: /* global */
#line 235 "src/wast-parser.y" /* yacc.c:1257 */
- { destroy_module_field_list(&((*yyvaluep).module_fields)); }
+ { delete ((*yyvaluep).module_fields); }
#line 2027 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
case 147: /* global_fields */
#line 235 "src/wast-parser.y" /* yacc.c:1257 */
- { destroy_module_field_list(&((*yyvaluep).module_fields)); }
+ { delete ((*yyvaluep).module_fields); }
#line 2033 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
@@ -2058,7 +2058,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio
case 156: /* module_field */
#line 235 "src/wast-parser.y" /* yacc.c:1257 */
- { destroy_module_field_list(&((*yyvaluep).module_fields)); }
+ { delete ((*yyvaluep).module_fields); }
#line 2063 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1257 */
break;
@@ -3370,27 +3370,25 @@ yyreduce:
case 111:
#line 836 "src/wast-parser.y" /* yacc.c:1646 */
{
- (yyval.exception) = new Exception();
- (yyval.exception)->name = (yyvsp[-2].text);
- (yyval.exception)->sig = std::move(*(yyvsp[-1].types));
+ (yyval.exception) = new Exception((yyvsp[-2].text), *(yyvsp[-1].types));
delete (yyvsp[-1].types);
}
-#line 3379 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3377 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 112:
-#line 844 "src/wast-parser.y" /* yacc.c:1646 */
+#line 842 "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 3385 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 113:
-#line 851 "src/wast-parser.y" /* yacc.c:1646 */
+#line 849 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.module_fields) = (yyvsp[-1].module_fields);
- ModuleField* main_field = (yyval.module_fields).first;
+ 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 = (yyvsp[-2].text);
@@ -3398,32 +3396,31 @@ yyreduce:
cast<ImportModuleField>(main_field)->import->func->name = (yyvsp[-2].text);
}
}
-#line 3402 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3400 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 114:
-#line 864 "src/wast-parser.y" /* yacc.c:1646 */
+#line 862 "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);
- (yyval.module_fields).first = (yyval.module_fields).last = field;
+ (yyval.module_fields) = new ModuleFieldList(field);
}
-#line 3414 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3412 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 115:
-#line 871 "src/wast-parser.y" /* yacc.c:1646 */
+#line 869 "src/wast-parser.y" /* yacc.c:1646 */
{
- auto field = new FuncModuleField((yyvsp[0].func));
- (yyval.module_fields).first = (yyval.module_fields).last = field;
+ (yyval.module_fields) = new ModuleFieldList(new FuncModuleField((yyvsp[0].func)));
}
-#line 3423 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3420 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 116:
-#line 875 "src/wast-parser.y" /* yacc.c:1646 */
+#line 872 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ImportModuleField((yyvsp[-2].import), (yylsp[-2]));
field->import->kind = ExternalKind::Func;
@@ -3431,55 +3428,55 @@ yyreduce:
field->import->func->decl.has_func_type = true;
field->import->func->decl.type_var = std::move(*(yyvsp[-1].var));
delete (yyvsp[-1].var);
- (yyval.module_fields).first = (yyval.module_fields).last = field;
+ (yyval.module_fields) = new ModuleFieldList(field);
}
-#line 3437 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3434 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 117:
-#line 884 "src/wast-parser.y" /* yacc.c:1646 */
+#line 881 "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).first = (yyval.module_fields).last = field;
+ (yyval.module_fields) = new ModuleFieldList(field);
}
-#line 3448 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3445 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 118:
-#line 890 "src/wast-parser.y" /* yacc.c:1646 */
+#line 887 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ExportModuleField((yyvsp[-1].export_), (yylsp[-1]));
field->export_->kind = ExternalKind::Func;
- (yyval.module_fields).first = (yyvsp[0].module_fields).first;
- (yyval.module_fields).last = (yyvsp[0].module_fields).last->next = field;
+ (yyval.module_fields) = (yyvsp[0].module_fields);
+ (yyval.module_fields)->push_back(field);
}
-#line 3459 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3456 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 119:
-#line 899 "src/wast-parser.y" /* yacc.c:1646 */
+#line 896 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = (yyvsp[0].func);
reverse_bindings(&(yyval.func)->decl.sig.param_types, &(yyval.func)->param_bindings);
}
-#line 3468 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3465 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 121:
-#line 907 "src/wast-parser.y" /* yacc.c:1646 */
+#line 904 "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);
}
-#line 3479 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3476 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 122:
-#line 913 "src/wast-parser.y" /* yacc.c:1646 */
+#line 910 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = (yyvsp[0].func);
(yyval.func)->param_bindings.emplace(string_slice_to_string((yyvsp[-3].text)),
@@ -3487,48 +3484,48 @@ yyreduce:
destroy_string_slice(&(yyvsp[-3].text));
(yyval.func)->decl.sig.param_types.insert((yyval.func)->decl.sig.param_types.begin(), (yyvsp[-2].type));
}
-#line 3491 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3488 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 123:
-#line 923 "src/wast-parser.y" /* yacc.c:1646 */
+#line 920 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.func) = new Func(); }
-#line 3497 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3494 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 124:
-#line 924 "src/wast-parser.y" /* yacc.c:1646 */
+#line 921 "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);
}
-#line 3508 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3505 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 125:
-#line 933 "src/wast-parser.y" /* yacc.c:1646 */
+#line 930 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = (yyvsp[0].func);
reverse_bindings(&(yyval.func)->decl.sig.param_types, &(yyval.func)->param_bindings);
}
-#line 3517 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3514 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 127:
-#line 941 "src/wast-parser.y" /* yacc.c:1646 */
+#line 938 "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);
}
-#line 3528 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3525 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 128:
-#line 947 "src/wast-parser.y" /* yacc.c:1646 */
+#line 944 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = (yyvsp[0].func);
(yyval.func)->param_bindings.emplace(string_slice_to_string((yyvsp[-3].text)),
@@ -3536,51 +3533,51 @@ yyreduce:
destroy_string_slice(&(yyvsp[-3].text));
(yyval.func)->decl.sig.param_types.insert((yyval.func)->decl.sig.param_types.begin(), (yyvsp[-2].type));
}
-#line 3540 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3537 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 130:
-#line 958 "src/wast-parser.y" /* yacc.c:1646 */
+#line 955 "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);
}
-#line 3551 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3548 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 131:
-#line 967 "src/wast-parser.y" /* yacc.c:1646 */
+#line 964 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.func) = (yyvsp[0].func);
reverse_bindings(&(yyval.func)->local_types, &(yyval.func)->local_bindings);
}
-#line 3560 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3557 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 132:
-#line 974 "src/wast-parser.y" /* yacc.c:1646 */
+#line 971 "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);
}
-#line 3570 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3567 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 133:
-#line 979 "src/wast-parser.y" /* yacc.c:1646 */
+#line 976 "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);
}
-#line 3580 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3577 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 134:
-#line 984 "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(string_slice_to_string((yyvsp[-3].text)),
@@ -3588,19 +3585,19 @@ yyreduce:
destroy_string_slice(&(yyvsp[-3].text));
(yyval.func)->local_types.insert((yyval.func)->local_types.begin(), (yyvsp[-2].type));
}
-#line 3592 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3589 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 135:
-#line 996 "src/wast-parser.y" /* yacc.c:1646 */
+#line 993 "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 3597 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 137:
-#line 1003 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1000 "src/wast-parser.y" /* yacc.c:1646 */
{
auto elem_segment = new ElemSegment();
elem_segment->table_var = std::move(*(yyvsp[-3].var));
@@ -3611,11 +3608,11 @@ yyreduce:
delete (yyvsp[-1].vars);
(yyval.module_field) = new ElemSegmentModuleField(elem_segment, (yylsp[-4]));
}
-#line 3615 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3612 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 138:
-#line 1013 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1010 "src/wast-parser.y" /* yacc.c:1646 */
{
auto elem_segment = new ElemSegment();
elem_segment->table_var.loc = (yylsp[-3]);
@@ -3627,14 +3624,14 @@ yyreduce:
delete (yyvsp[-1].vars);
(yyval.module_field) = new ElemSegmentModuleField(elem_segment, (yylsp[-3]));
}
-#line 3631 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3628 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 139:
-#line 1027 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1024 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.module_fields) = (yyvsp[-1].module_fields);
- ModuleField* main_field = (yyval.module_fields).first;
+ 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 = (yyvsp[-2].text);
@@ -3642,48 +3639,46 @@ yyreduce:
cast<ImportModuleField>(main_field)->import->table->name = (yyvsp[-2].text);
}
}
-#line 3646 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3643 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 140:
-#line 1040 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1037 "src/wast-parser.y" /* yacc.c:1646 */
{
- auto field = new TableModuleField((yyvsp[0].table));
- (yyval.module_fields).first = (yyval.module_fields).last = field;
+ (yyval.module_fields) = new ModuleFieldList(new TableModuleField((yyvsp[0].table)));
}
-#line 3655 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3651 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 141:
-#line 1044 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1040 "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).first = (yyval.module_fields).last = field;
+ (yyval.module_fields) = new ModuleFieldList(field);
}
-#line 3666 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3662 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 142:
-#line 1050 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1046 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ExportModuleField((yyvsp[-1].export_), (yylsp[-1]));
field->export_->kind = ExternalKind::Table;
- (yyval.module_fields).first = (yyvsp[0].module_fields).first;
- (yyval.module_fields).last = (yyvsp[0].module_fields).last->next = field;
+ (yyval.module_fields) = (yyvsp[0].module_fields);
+ (yyval.module_fields)->push_back(field);
}
-#line 3677 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3673 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 143:
-#line 1056 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1052 "src/wast-parser.y" /* yacc.c:1646 */
{
auto table = new Table();
table->elem_limits.initial = (yyvsp[-1].vars)->size();
table->elem_limits.max = (yyvsp[-1].vars)->size();
table->elem_limits.has_max = true;
- auto table_field = new TableModuleField(table);
auto elem_segment = new ElemSegment();
elem_segment->table_var = Var(kInvalidIndex);
@@ -3691,15 +3686,16 @@ yyreduce:
elem_segment->offset.back().loc = (yylsp[-2]);
elem_segment->vars = std::move(*(yyvsp[-1].vars));
delete (yyvsp[-1].vars);
- auto elem_field = new ElemSegmentModuleField(elem_segment, (yylsp[-2]));
- (yyval.module_fields).first = table_field;
- (yyval.module_fields).last = table_field->next = elem_field;
+
+ (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 3699 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3695 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 144:
-#line 1076 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1072 "src/wast-parser.y" /* yacc.c:1646 */
{
auto data_segment = new DataSegment();
data_segment->memory_var = std::move(*(yyvsp[-3].var));
@@ -3710,11 +3706,11 @@ yyreduce:
destroy_text_list(&(yyvsp[-1].text_list));
(yyval.module_field) = new DataSegmentModuleField(data_segment, (yylsp[-4]));
}
-#line 3714 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3710 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 145:
-#line 1086 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1082 "src/wast-parser.y" /* yacc.c:1646 */
{
auto data_segment = new DataSegment();
data_segment->memory_var.loc = (yylsp[-3]);
@@ -3726,14 +3722,14 @@ yyreduce:
destroy_text_list(&(yyvsp[-1].text_list));
(yyval.module_field) = new DataSegmentModuleField(data_segment, (yylsp[-3]));
}
-#line 3730 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3726 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 146:
-#line 1100 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1096 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.module_fields) = (yyvsp[-1].module_fields);
- ModuleField* main_field = (yyval.module_fields).first;
+ 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 = (yyvsp[-2].text);
@@ -3741,42 +3737,41 @@ yyreduce:
cast<ImportModuleField>(main_field)->import->memory->name = (yyvsp[-2].text);
}
}
-#line 3745 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3741 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 147:
-#line 1113 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1109 "src/wast-parser.y" /* yacc.c:1646 */
{
- auto field = new MemoryModuleField((yyvsp[0].memory));
- (yyval.module_fields).first = (yyval.module_fields).last = field;
+ (yyval.module_fields) = new ModuleFieldList(new MemoryModuleField((yyvsp[0].memory)));
}
-#line 3754 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3749 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 148:
-#line 1117 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1112 "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).first = (yyval.module_fields).last = field;
+ (yyval.module_fields) = new ModuleFieldList(field);
}
-#line 3765 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3760 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 149:
-#line 1123 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1118 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ExportModuleField((yyvsp[-1].export_), (yylsp[-1]));
field->export_->kind = ExternalKind::Memory;
- (yyval.module_fields).first = (yyvsp[0].module_fields).first;
- (yyval.module_fields).last = (yyvsp[0].module_fields).last->next = field;
+ (yyval.module_fields) = (yyvsp[0].module_fields);
+ (yyval.module_fields)->push_back(field);
}
-#line 3776 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3771 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 150:
-#line 1129 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1124 "src/wast-parser.y" /* yacc.c:1646 */
{
auto data_segment = new DataSegment();
data_segment->memory_var = Var(kInvalidIndex);
@@ -3784,7 +3779,6 @@ yyreduce:
data_segment->offset.back().loc = (yylsp[-2]);
dup_text_list(&(yyvsp[-1].text_list), &data_segment->data, &data_segment->size);
destroy_text_list(&(yyvsp[-1].text_list));
- auto data_field = new DataSegmentModuleField(data_segment, (yylsp[-2]));
uint32_t byte_size = WABT_ALIGN_UP_TO_PAGE(data_segment->size);
uint32_t page_size = WABT_BYTES_TO_PAGES(byte_size);
@@ -3793,18 +3787,19 @@ yyreduce:
memory->page_limits.initial = page_size;
memory->page_limits.max = page_size;
memory->page_limits.has_max = true;
- auto memory_field = new MemoryModuleField(memory);
- (yyval.module_fields).first = memory_field;
- (yyval.module_fields).last = memory_field->next = data_field;
+
+ (yyval.module_fields) = new ModuleFieldList();
+ (yyval.module_fields)->push_back(new MemoryModuleField(memory));
+ (yyval.module_fields)->push_back(new DataSegmentModuleField(data_segment, (yylsp[-2])));
}
-#line 3801 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3796 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 151:
-#line 1152 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1147 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.module_fields) = (yyvsp[-1].module_fields);
- ModuleField* main_field = (yyval.module_fields).first;
+ 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 = (yyvsp[-2].text);
@@ -3812,44 +3807,44 @@ yyreduce:
cast<ImportModuleField>(main_field)->import->global->name = (yyvsp[-2].text);
}
}
-#line 3816 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3811 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 152:
-#line 1165 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1160 "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);
- (yyval.module_fields).first = (yyval.module_fields).last = field;
+ (yyval.module_fields) = new ModuleFieldList(field);
}
-#line 3827 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3822 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 153:
-#line 1171 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1166 "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).first = (yyval.module_fields).last = field;
+ (yyval.module_fields) = new ModuleFieldList(field);
}
-#line 3838 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3833 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 154:
-#line 1177 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1172 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ExportModuleField((yyvsp[-1].export_), (yylsp[-1]));
field->export_->kind = ExternalKind::Global;
- (yyval.module_fields).first = (yyvsp[0].module_fields).first;
- (yyval.module_fields).last = (yyvsp[0].module_fields).last->next = field;
+ (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 3844 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 155:
-#line 1188 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1183 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = new Import();
(yyval.import)->kind = ExternalKind::Func;
@@ -3859,11 +3854,11 @@ yyreduce:
(yyval.import)->func->decl.type_var = std::move(*(yyvsp[-1].var));
delete (yyvsp[-1].var);
}
-#line 3863 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3858 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 156:
-#line 1197 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1192 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = new Import();
(yyval.import)->kind = ExternalKind::Func;
@@ -3872,160 +3867,160 @@ yyreduce:
(yyval.import)->func->decl.sig = std::move(*(yyvsp[-1].func_sig));
delete (yyvsp[-1].func_sig);
}
-#line 3876 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3871 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 157:
-#line 1205 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1200 "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 = (yyvsp[-2].text);
}
-#line 3887 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3882 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 158:
-#line 1211 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1206 "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 = (yyvsp[-2].text);
}
-#line 3898 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3893 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 159:
-#line 1217 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1212 "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 = (yyvsp[-2].text);
}
-#line 3909 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3904 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 160:
-#line 1223 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1218 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = new Import();
(yyval.import)->kind = ExternalKind::Except;
(yyval.import)->except = (yyvsp[0].exception);
}
-#line 3919 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3914 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 161:
-#line 1231 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1226 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ImportModuleField((yyvsp[-1].import), (yylsp[-4]));
field->import->module_name = (yyvsp[-3].text);
field->import->field_name = (yyvsp[-2].text);
(yyval.module_field) = field;
}
-#line 3930 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3925 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 162:
-#line 1240 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1235 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.import) = new Import();
(yyval.import)->module_name = (yyvsp[-2].text);
(yyval.import)->field_name = (yyvsp[-1].text);
}
-#line 3940 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3935 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 163:
-#line 1248 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1243 "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);
}
-#line 3951 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3946 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 164:
-#line 1254 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1249 "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);
}
-#line 3962 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3957 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 165:
-#line 1260 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1255 "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);
}
-#line 3973 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3968 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 166:
-#line 1266 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1261 "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);
}
-#line 3984 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3979 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 167:
-#line 1272 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1267 "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);
}
-#line 3995 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 3990 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 168:
-#line 1280 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1275 "src/wast-parser.y" /* yacc.c:1646 */
{
auto field = new ExportModuleField((yyvsp[-1].export_), (yylsp[-3]));
field->export_->name = (yyvsp[-2].text);
(yyval.module_field) = field;
}
-#line 4005 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4000 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 169:
-#line 1288 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1283 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.export_) = new Export();
(yyval.export_)->name = (yyvsp[-1].text);
}
-#line 4014 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4009 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 170:
-#line 1298 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1293 "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);
(yyval.module_field) = new FuncTypeModuleField(func_type, (yylsp[-2]));
}
-#line 4025 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4020 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 171:
-#line 1304 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1299 "src/wast-parser.y" /* yacc.c:1646 */
{
auto func_type = new FuncType();
func_type->name = (yyvsp[-2].text);
@@ -4033,88 +4028,90 @@ yyreduce:
delete (yyvsp[-1].func_sig);
(yyval.module_field) = new FuncTypeModuleField(func_type, (yylsp[-3]));
}
-#line 4037 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4032 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 172:
-#line 1314 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1309 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.module_field) = new StartModuleField(*(yyvsp[-1].var), (yylsp[-2]));
delete (yyvsp[-1].var);
}
-#line 4046 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4041 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 173:
-#line 1321 "src/wast-parser.y" /* yacc.c:1646 */
- { (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4052 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 1316 "src/wast-parser.y" /* yacc.c:1646 */
+ { (yyval.module_fields) = new ModuleFieldList((yyvsp[0].module_field)); }
+#line 4047 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 178:
-#line 1326 "src/wast-parser.y" /* yacc.c:1646 */
- { (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4058 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 1321 "src/wast-parser.y" /* yacc.c:1646 */
+ { (yyval.module_fields) = new ModuleFieldList((yyvsp[0].module_field)); }
+#line 4053 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 179:
-#line 1327 "src/wast-parser.y" /* yacc.c:1646 */
- { (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4064 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 1322 "src/wast-parser.y" /* yacc.c:1646 */
+ { (yyval.module_fields) = new ModuleFieldList((yyvsp[0].module_field)); }
+#line 4059 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 180:
-#line 1328 "src/wast-parser.y" /* yacc.c:1646 */
- { (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4070 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 1323 "src/wast-parser.y" /* yacc.c:1646 */
+ { (yyval.module_fields) = new ModuleFieldList((yyvsp[0].module_field)); }
+#line 4065 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 181:
-#line 1329 "src/wast-parser.y" /* yacc.c:1646 */
- { (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4076 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 1324 "src/wast-parser.y" /* yacc.c:1646 */
+ { (yyval.module_fields) = new ModuleFieldList((yyvsp[0].module_field)); }
+#line 4071 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 182:
-#line 1330 "src/wast-parser.y" /* yacc.c:1646 */
- { (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4082 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 1325 "src/wast-parser.y" /* yacc.c:1646 */
+ { (yyval.module_fields) = new ModuleFieldList((yyvsp[0].module_field)); }
+#line 4077 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 183:
-#line 1331 "src/wast-parser.y" /* yacc.c:1646 */
- { (yyval.module_fields).first = (yyval.module_fields).last = (yyvsp[0].module_field); }
-#line 4088 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 1326 "src/wast-parser.y" /* yacc.c:1646 */
+ { (yyval.module_fields) = new ModuleFieldList((yyvsp[0].module_field)); }
+#line 4083 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 184:
-#line 1335 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1330 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.module) = new Module(); }
-#line 4094 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4089 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 186:
-#line 1340 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1335 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.module) = new Module();
- check_import_ordering(&(yylsp[0]), lexer, parser, (yyval.module), (yyvsp[0].module_fields).first);
- append_module_fields((yyval.module), (yyvsp[0].module_fields).first);
+ 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);
}
-#line 4104 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4100 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 187:
-#line 1345 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1341 "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).first);
- append_module_fields((yyval.module), (yyvsp[0].module_fields).first);
+ 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);
}
-#line 4114 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4111 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 188:
-#line 1353 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1350 "src/wast-parser.y" /* yacc.c:1646 */
{
if ((yyvsp[0].script_module)->type == ScriptModule::Type::Text) {
(yyval.module) = (yyvsp[0].script_module)->text;
@@ -4133,29 +4130,29 @@ yyreduce:
}
delete (yyvsp[0].script_module);
}
-#line 4137 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4134 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 190:
-#line 1381 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1378 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.var) = new Var(kInvalidIndex);
}
-#line 4145 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4142 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 191:
-#line 1384 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1381 "src/wast-parser.y" /* yacc.c:1646 */
{
StringSlice name;
DUPTEXT(name, (yyvsp[0].text));
(yyval.var) = new Var(name);
}
-#line 4155 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4152 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 192:
-#line 1392 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1389 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.script_module) = new ScriptModule();
(yyval.script_module)->type = ScriptModule::Type::Text;
@@ -4174,11 +4171,11 @@ yyreduce:
}
}
}
-#line 4178 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4175 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 193:
-#line 1410 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1407 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.script_module) = new ScriptModule();
(yyval.script_module)->type = ScriptModule::Type::Binary;
@@ -4187,11 +4184,11 @@ yyreduce:
dup_text_list(&(yyvsp[-1].text_list), &(yyval.script_module)->binary.data, &(yyval.script_module)->binary.size);
destroy_text_list(&(yyvsp[-1].text_list));
}
-#line 4191 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4188 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 194:
-#line 1418 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1415 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.script_module) = new ScriptModule();
(yyval.script_module)->type = ScriptModule::Type::Quoted;
@@ -4200,11 +4197,11 @@ yyreduce:
dup_text_list(&(yyvsp[-1].text_list), &(yyval.script_module)->quoted.data, &(yyval.script_module)->quoted.size);
destroy_text_list(&(yyvsp[-1].text_list));
}
-#line 4204 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4201 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 195:
-#line 1429 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1426 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.action) = new Action();
(yyval.action)->loc = (yylsp[-4]);
@@ -4216,11 +4213,11 @@ yyreduce:
(yyval.action)->invoke->args = std::move(*(yyvsp[-1].consts));
delete (yyvsp[-1].consts);
}
-#line 4220 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4217 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 196:
-#line 1440 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1437 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.action) = new Action();
(yyval.action)->loc = (yylsp[-3]);
@@ -4229,128 +4226,128 @@ yyreduce:
(yyval.action)->type = ActionType::Get;
(yyval.action)->name = (yyvsp[-1].text);
}
-#line 4233 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4230 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 197:
-#line 1451 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1448 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertMalformedCommand((yyvsp[-2].script_module), (yyvsp[-1].text));
}
-#line 4241 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4238 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 198:
-#line 1454 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1451 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertInvalidCommand((yyvsp[-2].script_module), (yyvsp[-1].text));
}
-#line 4249 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4246 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 199:
-#line 1457 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1454 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertUnlinkableCommand((yyvsp[-2].script_module), (yyvsp[-1].text));
}
-#line 4257 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4254 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 200:
-#line 1460 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1457 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertUninstantiableCommand((yyvsp[-2].script_module), (yyvsp[-1].text));
}
-#line 4265 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4262 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 201:
-#line 1463 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1460 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertReturnCommand((yyvsp[-2].action), (yyvsp[-1].consts));
}
-#line 4273 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4270 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 202:
-#line 1466 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1463 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertReturnCanonicalNanCommand((yyvsp[-1].action));
}
-#line 4281 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4278 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 203:
-#line 1469 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1466 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertReturnArithmeticNanCommand((yyvsp[-1].action));
}
-#line 4289 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4286 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 204:
-#line 1472 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1469 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertTrapCommand((yyvsp[-2].action), (yyvsp[-1].text));
}
-#line 4297 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4294 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 205:
-#line 1475 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1472 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new AssertExhaustionCommand((yyvsp[-2].action), (yyvsp[-1].text));
}
-#line 4305 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4302 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 206:
-#line 1481 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1478 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new ActionCommand((yyvsp[0].action));
}
-#line 4313 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4310 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 208:
-#line 1485 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1482 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.command) = new ModuleCommand((yyvsp[0].module));
}
-#line 4321 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4318 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 209:
-#line 1488 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1485 "src/wast-parser.y" /* yacc.c:1646 */
{
auto* command = new RegisterCommand((yyvsp[-2].text), *(yyvsp[-1].var));
delete (yyvsp[-1].var);
command->var.loc = (yylsp[-1]);
(yyval.command) = command;
}
-#line 4332 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4329 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 210:
-#line 1496 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1493 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.commands) = new CommandPtrVector();
(yyval.commands)->emplace_back((yyvsp[0].command));
}
-#line 4341 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4338 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 211:
-#line 1500 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1497 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.commands) = (yyvsp[-1].commands);
(yyval.commands)->emplace_back((yyvsp[0].command));
}
-#line 4350 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4347 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 212:
-#line 1507 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1504 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.const_).loc = (yylsp[-2]);
if (Failed(parse_const((yyvsp[-2].type), (yyvsp[-1].literal).type, (yyvsp[-1].literal).text.start,
@@ -4361,34 +4358,34 @@ yyreduce:
}
delete [] (yyvsp[-1].literal).text.start;
}
-#line 4365 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4362 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 213:
-#line 1519 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1516 "src/wast-parser.y" /* yacc.c:1646 */
{ (yyval.consts) = new ConstVector(); }
-#line 4371 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4368 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 214:
-#line 1520 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1517 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.consts) = (yyvsp[-1].consts);
(yyval.consts)->push_back((yyvsp[0].const_));
}
-#line 4380 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4377 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 215:
-#line 1527 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1524 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.script) = new Script();
}
-#line 4388 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4385 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 216:
-#line 1530 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1527 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.script) = new Script();
(yyval.script)->commands = std::move(*(yyvsp[0].commands));
@@ -4453,26 +4450,26 @@ yyreduce:
}
}
}
-#line 4457 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4454 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 217:
-#line 1594 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1591 "src/wast-parser.y" /* yacc.c:1646 */
{
(yyval.script) = new Script();
(yyval.script)->commands.emplace_back(new ModuleCommand((yyvsp[0].module)));
}
-#line 4466 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4463 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
case 218:
-#line 1603 "src/wast-parser.y" /* yacc.c:1646 */
+#line 1600 "src/wast-parser.y" /* yacc.c:1646 */
{ parser->script = (yyvsp[0].script); }
-#line 4472 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4469 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
break;
-#line 4476 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
+#line 4473 "src/prebuilt/wast-parser-gen.cc" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -4707,7 +4704,7 @@ yyreturn:
#endif
return yyresult;
}
-#line 1606 "src/wast-parser.y" /* yacc.c:1906 */
+#line 1603 "src/wast-parser.y" /* yacc.c:1906 */
Result parse_const(Type type,
@@ -4831,9 +4828,9 @@ void append_implicit_func_declaration(Location* loc,
}
void check_import_ordering(Location* loc, WastLexer* lexer, WastParser* parser,
- Module* module, ModuleField* first) {
- for (ModuleField* field = first; field; field = field->next) {
- if (field->type == ModuleFieldType::Import) {
+ Module* module, const ModuleFieldList& fields) {
+ for (const ModuleField& field: fields) {
+ if (field.type == ModuleFieldType::Import) {
if (module->funcs.size() != module->num_func_imports ||
module->tables.size() != module->num_table_imports ||
module->memories.size() != module->num_memory_imports ||
@@ -4847,19 +4844,19 @@ void check_import_ordering(Location* loc, WastLexer* lexer, WastParser* parser,
}
}
-void append_module_fields(Module* module, ModuleField* first) {
- ModuleField* main_field = first;
+void append_module_fields(Module* module, ModuleFieldList* fields) {
+ ModuleField* main_field = &fields->front();
Index main_index = kInvalidIndex;
- for (ModuleField* field = first; field; field = field->next) {
+ for (ModuleField& field : *fields) {
StringSlice* name = nullptr;
BindingHash* bindings = nullptr;
Index index = kInvalidIndex;
- switch (field->type) {
+ switch (field.type) {
case ModuleFieldType::Func: {
- Func* func = cast<FuncModuleField>(field)->func;
- append_implicit_func_declaration(&field->loc, module, &func->decl);
+ Func* func = cast<FuncModuleField>(&field)->func;
+ append_implicit_func_declaration(&field.loc, module, &func->decl);
name = &func->name;
bindings = &module->func_bindings;
index = module->funcs.size();
@@ -4868,7 +4865,7 @@ void append_module_fields(Module* module, ModuleField* first) {
}
case ModuleFieldType::Global: {
- Global* global = cast<GlobalModuleField>(field)->global;
+ Global* global = cast<GlobalModuleField>(&field)->global;
name = &global->name;
bindings = &module->global_bindings;
index = module->globals.size();
@@ -4877,11 +4874,11 @@ void append_module_fields(Module* module, ModuleField* first) {
}
case ModuleFieldType::Import: {
- Import* import = cast<ImportModuleField>(field)->import;
+ Import* import = cast<ImportModuleField>(&field)->import;
switch (import->kind) {
case ExternalKind::Func:
- append_implicit_func_declaration(&field->loc, module,
+ append_implicit_func_declaration(&field.loc, module,
&import->func->decl);
name = &import->func->name;
bindings = &module->func_bindings;
@@ -4923,8 +4920,8 @@ void append_module_fields(Module* module, ModuleField* first) {
}
case ModuleFieldType::Export: {
- Export* export_ = cast<ExportModuleField>(field)->export_;
- if (field != main_field) {
+ Export* export_ = cast<ExportModuleField>(&field)->export_;
+ if (&field != main_field) {
// If this is not the main field, it must be an inline export.
export_->var.type = VarType::Index;
export_->var.index = main_index;
@@ -4937,7 +4934,7 @@ void append_module_fields(Module* module, ModuleField* first) {
}
case ModuleFieldType::FuncType: {
- FuncType* func_type = cast<FuncTypeModuleField>(field)->func_type;
+ FuncType* func_type = cast<FuncTypeModuleField>(&field)->func_type;
name = &func_type->name;
bindings = &module->func_type_bindings;
index = module->func_types.size();
@@ -4946,7 +4943,7 @@ void append_module_fields(Module* module, ModuleField* first) {
}
case ModuleFieldType::Table: {
- Table* table = cast<TableModuleField>(field)->table;
+ Table* table = cast<TableModuleField>(&field)->table;
name = &table->name;
bindings = &module->table_bindings;
index = module->tables.size();
@@ -4956,8 +4953,8 @@ void append_module_fields(Module* module, ModuleField* first) {
case ModuleFieldType::ElemSegment: {
ElemSegment* elem_segment =
- cast<ElemSegmentModuleField>(field)->elem_segment;
- if (field != main_field) {
+ cast<ElemSegmentModuleField>(&field)->elem_segment;
+ if (&field != main_field) {
// If this is not the main field, it must be an inline elem segment.
elem_segment->table_var.type = VarType::Index;
elem_segment->table_var.index = main_index;
@@ -4967,7 +4964,7 @@ void append_module_fields(Module* module, ModuleField* first) {
}
case ModuleFieldType::Memory: {
- Memory* memory = cast<MemoryModuleField>(field)->memory;
+ Memory* memory = cast<MemoryModuleField>(&field)->memory;
name = &memory->name;
bindings = &module->memory_bindings;
index = module->memories.size();
@@ -4977,8 +4974,8 @@ void append_module_fields(Module* module, ModuleField* first) {
case ModuleFieldType::DataSegment: {
DataSegment* data_segment =
- cast<DataSegmentModuleField>(field)->data_segment;
- if (field != main_field) {
+ cast<DataSegmentModuleField>(&field)->data_segment;
+ if (&field != main_field) {
// If this is not the main field, it must be an inline data segment.
data_segment->memory_var.type = VarType::Index;
data_segment->memory_var.index = main_index;
@@ -4988,7 +4985,7 @@ void append_module_fields(Module* module, ModuleField* first) {
}
case ModuleFieldType::Except: {
- Exception* except = cast<ExceptionModuleField>(field)->except;
+ Exception* except = cast<ExceptionModuleField>(&field)->except;
name = &except->name;
bindings = &module->except_bindings;
index = module->excepts.size();
@@ -4997,28 +4994,24 @@ void append_module_fields(Module* module, ModuleField* first) {
}
case ModuleFieldType::Start:
- module->start = &cast<StartModuleField>(field)->start;
+ module->start = &cast<StartModuleField>(&field)->start;
break;
}
- if (field == main_field)
+ if (&field == main_field)
main_index = index;
- if (module->last_field)
- module->last_field->next = field;
- else
- module->first_field = field;
- module->last_field = field;
-
if (name && bindings) {
// Exported names are allowed to be empty; other names aren't.
if (bindings == &module->export_bindings ||
!string_slice_is_empty(name)) {
bindings->emplace(string_slice_to_string(*name),
- Binding(field->loc, index));
+ Binding(field.loc, index));
}
}
}
+
+ module->fields.splice(module->fields.end(), *fields);
}
Result parse_wast(WastLexer* lexer, Script** out_script,